Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
1

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

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

Author24 — интернет-сервис помощи студентам
добрый вечер.
помогите найти ошибку в программном коде. нужно найти удалить все отрицательные элементы, дополняя их справа нулями.
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2012, 21:35
Ответы с готовыми решениями:

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

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

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

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

16
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
Заблокирован
25.12.2012, 22:04 4
ДЖАГЕРНАУТ, Сформируй матрицу лучше рандомна
0
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
25.12.2012, 22:09  [ТС] 5
нет, нужно именно чтобы пользователь вводил значения
0
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
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
30.12.2012, 23:05 8
в 10 строчке ошибка, место ; стоит , перед i++

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

я после первого запуска и выправления ошибки получил такое:
Изображения
 
0
101 / 92 / 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
101 / 92 / 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
101 / 92 / 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
101 / 92 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.12.2012, 01:14
Помогаю со студенческими работами здесь

Заменить все отрицательные элементы матрицы нулями
В матрице размерностью 4х5 заменить все отрицательные элементы нулями.

Циклы: заменить все отрицательные элементы матрицы нулями, а все положительные - единицами
Помогите с заданием. Цель работы: Приобретение навыков использования операторов цикла while, do...

Из матрицы А2х3 получить матрицу В, заменив все неотрицатель¬ные элементы матрицы А единицами, а отрицательные - нулями
Из матрицы А2х3 получить матрицу В, заменив все неотрицатель¬ные элементы матрицы А единицами, а...

Заменить нулями все отрицательные элементы матрицы, лежащие выше главной диагонали
:scratch: Если все элементы главной диагонали квадратной целочисленной матрицы упорядочены по...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru