Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
1

Удалить из строк матрицы все отрицательные элементы, дополняя их справа нулями

25.12.2012, 21:35. Просмотров 773. Ответов 16
Метки нет (Все метки)

добрый вечер.
помогите найти ошибку в программном коде. нужно найти удалить все отрицательные элементы, дополняя их справа нулями.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<math.h>
#include<conio.h>
#define N 8
#define M 10
int main(void)
{int a[N][M],i,j,q;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
{printf("a[%d][%d]=",i+1,j+1);
scanf("%d",&a{i][j]);}
q=a[i][j];
for(i=0;a[i]<0;i++)
for(j=0;a[j]<0;j++)
{if(a[i][j]<0){q=a[i][j];i=k;}}
for(i=0;i<8;i++)
{for(j=0;j<10;j++)
printf("%d",a[i][j]);
printf("\n");}
return 0;
}
буду благодарен за помощь
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2012, 21:35
Ответы с готовыми решениями:

Заменить отрицательные элементы матрицы нулями
В матрице D(K,K), где K≤10, записать на место отрицательных элементов нули и вывести ее на печать...

Заменить в матрице все отрицательные элементы нулями
Здравствуйте. Помогите пожалуйста написать программу. условия задачи Задать двумерный массив...

Заменить все отрицательные элементы массива нулями
1. 2. Заменить все отрицательные элементы массива нулями. 3. Проверить, есть ли в массиве...

Заменить в матрице А все отрицательные элементы нулями, а положительные единицами
Если разность максимального и минимального элемента матрицы А превышает заданную величину Р,...

Если все элементы главной диагонали целочисленной матрицы упорядочены по убыванию, заменить нулями все отрицательные элементы матрицы
задача. Если все элементы главной диагонали целочисленной матрицы упорядочены по убыванию,...

16
Agent Smith
40 / 40 / 32
Регистрация: 24.11.2012
Сообщений: 200
25.12.2012, 21:57 2
что-за переменная k? и зачем q? что вообще делает ваша программа?
вот исправил синтаксические ошибки:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<stdio.h>
#include<math.h>
#include<conio.h>
#define N 8
#define M 10
 
int main(void)
{
  int a[N][M],i,j,q,k;
 
  for(i=0;i<N;i++)
  for(j=0;j<M;j++)
  {
    printf("a[%d][%d]=",i+1,j+1);
    scanf("%d",&a[i][j]);
  }
 
  q=a[i][j];
 
  for(i=0;i<N;i++)
  for(j=0;j<M;j++)
  {
  if(a[i][j]<0)
    {
      q=a[i][j];i=k;
    }
  }
 
  for(i=0;i<8;i++)
  {
    for(j=0;j<10;j++)
    printf("%d",a[i][j]);
    printf("\n");
  }
  getch();
  return 0;
 
}
0
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
25.12.2012, 22:03  [ТС] 3
да, я какую ту фигню написал)
я не могу понять как скопировать данный массив, и как заменить отрицательные значения на нули в той строчке, где они есть
0
fang
Заблокирован
25.12.2012, 22:04 4
ДЖАГЕРНАУТ, Сформируй матрицу лучше рандомна
0
25.12.2012, 22:04
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
25.12.2012, 22:09  [ТС] 5
нет, нужно именно чтобы пользователь вводил значения
0
Agent Smith
40 / 40 / 32
Регистрация: 24.11.2012
Сообщений: 200
25.12.2012, 22:43 6
а так не вариант? или я чет неправильно понял?
C
1
2
3
4
5
6
7
8
 for(i=0;i<N;i++)
  for(j=0;j<M;j++)
  {
  if(a[i][j]<0)
    {
      a[i][j]=0;
    }
  }
0
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
30.12.2012, 22:52  [ТС] 7
Здравствуйте. Помогите с составлением условия.
Дан двумерный массив. Цель программы: удалить из строк все отрицательные элементы, дополняя их справа нулями.
(Пример: дан массив
1 2 3
1 2 -3
1 -2 3
-1 2 3
нужно получить такой:
1 2 3
1 2 0
1 3 0
2 3 0).
Вот программа которая выводит такую матрицу
1 2 3
1 2 0
1 0 3
0 2 3

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
#define N 4
#define M 3
int main(void)
{int a[N][M],i,j;
for(i=0;i<N;i++)   /*ввод массива*/
for(j=0;j<M;j++)
{printf("a[%d][%d] ",i,j);
scanf("%d",&a[i][j]);}
for(i=0;i<N,i++)     /*начало условия удаления отрицательных чисел*/
for(j=0;j<M;j++)
{if(a[i][j]<0)
{a[i][j]=a[i][j+1];
a[i][j]=0;
j--;
}}
printf("\n");
for(i=0;i<N;i++)   /*вывод матрицы*/
{for(j=0;j<M;j++)
printf("3%d",a[i][j]);
printf("\n");}
return 0;
}
N и M ,вообще равны 8 и 10 соответственно. Я взял 4 и 3 для упрожения программы. А, так, N и M должны быть любыми и их не должен вводить пользователь.

Буду благодарен за помощь.
0
CVB
99 / 90 / 53
Регистрация: 22.03.2011
Сообщений: 226
30.12.2012, 23:05 8
в 10 строчке ошибка, место ; стоит , перед i++

и после этого вы утверждаете что она у вас работает?

я после первого запуска и выправления ошибки получил такое:
0
Изображения
 
CVB
99 / 90 / 53
Регистрация: 22.03.2011
Сообщений: 226
30.12.2012, 23:08 9
Цитата Сообщение от ДЖАГЕРНАУТ Посмотреть сообщение
printf("3%d",a[i][j]);
тройка при выводе лишняя, если вы зотели зарезервировать место для чисел, то пишется оно вот так
C
1
printf("%3d",a[i][j]);
0
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
30.12.2012, 23:22  [ТС] 10
Цитата Сообщение от CVB Посмотреть сообщение
в 10 строчке ошибка, место ; стоит , перед i++

printf("3%d",a[i][j]);
да, глупые ошибки опечатки)
помогите с составлением условия
0
CVB
99 / 90 / 53
Регистрация: 22.03.2011
Сообщений: 226
30.12.2012, 23:26 11
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "stdafx.h"
#include<stdio.h>
#define N 4
#define M 3
int main(void)
{
    int a[N][M]={1,2,3, /* инициилизоровал, и закоментил ввод с клавы, потом себе удлишь, инициилизировал, чтоб сразу результат увидеть*/
        1,2,-3,
        1,-2,3,
        -1,2,3},i,j,k;
//for(i=0;i<N;i++)   /*ввод массива*/
//  for(j=0;j<M;j++)
//  {
//      printf("a[%d][%d] ",i,j);
//      scanf("%d",&a[i][j]);
//  }
 
for(i=0;i<N;i++)     /*начало условия удаления отрицательных чисел*/
    for(j=0;j<M;j++)
    {
        if(a[i][j]<0)
        {
            for(k=j;k<M-1;k++)
            {
                if(a[i][k]<a[i][k+1]) 
                {
                    int x;
                    x=a[i][k];
                    a[i][k]= a[i][k+1];
                    a[i][k+1]=x;
 
                    
                }
            }
            //a[i][j]=a[i][j+1];
            a[i][k]=0;
            //j--;
        }
    }
printf("\n");
for(i=0;i<N;i++)   /*вывод матрицы*/
{for(j=0;j<M;j++)
printf("%d",a[i][j]);
printf("\n");}
return 0;
}
0
Изображения
 
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
30.12.2012, 23:44  [ТС] 12
у меня программа не работает, если второе число (из трех) отрицательное; а, также, если первое число отрицательное, то ему присваивается значение третьего числа
и мой компилятор не знает stdafx.h
0
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
31.12.2012, 00:29  [ТС] 13
и если в строке идут подряд два отрицательных числа, то на первое он не обращает внимания

и есть несколько "дырок", поэтому программа работает странно
пример
N=8
M=10

вводим
12345678910
13579-1-3-5-7-9
1111111111
123456789-10
2468975310
1-35-79-24-680
1111111111
-1-2-3-4-5-6-7-891

получим
12345678910
13579-1-3000
1111111111
1234567890
2468975310
1594800000
1111111111
-1-2-3-4910000
0
CVB
99 / 90 / 53
Регистрация: 22.03.2011
Сообщений: 226
31.12.2012, 00:49 14
Та ты успокойся)) Я рад что ты шаришь)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include<stdio.h>
#define N 8
#define M 10
int main(void)
{
    int a[N][M]={
        1,2,3,4,5,6,7,8,9,10,
1,3,5,7,9,-1,-3,-5,-7,-9,
1,1,1,1,1,1,1,1,1,1,
1,2,3,4,5,6,7,8,9,-10,
2,4,6,8,9,7,5,3,10,
1,-3,5,-7,9,-2,4,-6,8,0,
1,1,1,1,1,1,1,1,1,1,
-1,-2,-3,-4,-5,-6,-7,-8,9,1},i,j,k=0;
//for(i=0;i<N;i++)   /*ввод массива*/
//  for(j=0;j<M;j++)
//  {
//      printf("a[%d][%d] ",i,j);
//      scanf("%d",&a[i][j]);
//  }
 
for(i=0;i<N;i++)     /*начало условия удаления отрицательных чисел*/
    for(j=0;j<M;j++)
    {
        if(a[i][j]<0)
        {
            a[i][j]=0;
            for(k=j;k<M-1;k++)
            {
                
                    int x;
                    x=a[i][k];
                    a[i][k]= a[i][k+1];
                    a[i][k+1]=x;
 
            }
            
            j--;
        }
    }
printf("\n");
for(i=0;i<N;i++)   /*вывод матрицы*/
{for(j=0;j<M;j++)
printf("%d",a[i][j]);
printf("\n");}
return 0;
}
на счет
C
1
#include "stdafx.h"
то оно используется в программах Visual Studio

З.Ы. j--; - зарешал, т.к. без него ничего бы не получилось, а у тебя в коде оно стояло, ты просто мысль не довел до конца, а мысль такова, что переставлять до конца без всяких условий, а переставляеются елементы вот так:
C
1
2
3
4
int x;
                    x=a[i][k];
                    a[i][k]= a[i][k+1];
                    a[i][k+1]=x;
и цикл нужен и уменшается М на 1, потому что присутствует в обмене [k+1] - для него резервируем (т.е. если k=последний_символ, то k+1 уже небудет существовать. Ну в принцыпе задачу переделал...
1
Изображения
  
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
31.12.2012, 00:58  [ТС] 15
спасибо большое
я бы никогда не додумался до этого!
0
CVB
99 / 90 / 53
Регистрация: 22.03.2011
Сообщений: 226
31.12.2012, 01:03 16
там "1,2,3,4,5,6,7,8,9,-10,"
заменить на

1,2,3,4,5,6,7,8,9,-1,0, потому там и косяк в выводе, в первом случае строка имеет 9 елементов, а нужно 10...
0
ДЖАГЕРНАУТ
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
31.12.2012, 01:14  [ТС] 17
у меня норм получилось хоть и ввел -10.
тем болле все правильно 1,2,3,4,5,6,7,8,9,-10 - 10 элементов
а
1,2,3,4,5,6,7,8,9,-1,0 а здесь уже 11 же элементов
0
31.12.2012, 01:14
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2012, 01:14

В матрице заменить нулями все элементы строк, содержащих отрицательные элементы
В матрице заменить нулями все элементы строк, содержащих отрицательные элементы. Использовать...

Заменить все отрицательные элементы матрицы А нулями
заменить все отрицательные элементы матрицы А нулями и вывести новую матрицу на экран

Заменить все отрицательные элементы матрицы нулями
Дана матрица А (4 на 4) вещественного типа.Заменить все отрицательные элементы нулями. Результат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru