Из положительных элементов матрицы N сформировать матрицу М (10, КМАХ) (продолжение условия и листинг внутри) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Условие: Из положительных элементов матрицы N сформировать матрицу М (10, КМАХ), размещая их в строках матрицы подряд, где КМАХ - максимальное число положительных элементов ленты матрицы N. Записать нули на место отсутствующих элементов. Распечатать обе матрицы в общепринятом виде. Листинг:
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
srand (time (NULL));
int i, j, kmax, x, g, k, d, N[x][x], M[10][10];
printf("Ishodnaya matritsa N:\n");
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
N[i][j]=rand()%10 - rand()%10;
printf("%d\t", N[i][j]);
}
}
printf("\n");

kmax=0;
for(i=0; i<10; i++)
{
d=0;
for(j=0; j<10; j++)
{
 
if (N[i][j]>0)
d++;
if (d>kmax)
kmax=d;
}
} 
printf("\n\n");

for(i=0; i<10; i++)
{
g=-1;
for(j=0; j<10; j++)
{ 
if (N[i][j]>0)
{
g++;
M[i][g]=N[i][j];
}
else
for(k=g+1;k<kmax; k++)
M[i][k]=0;
}
}

printf("Matritsa M:\n");
for(i=0; i<10; i++)
{
for(j=0; j<kmax; j++)
{
printf("%i\t", M[i][j]);
}
}
 
system("PAUSE"); 
return 0;
}
Программа работает с ошибкой, прога правильно считает kmax и размещает элементы подряд, но выводит матрицу не 10хkmax, а какоето количество строк на 10 столбцов, то есть правильно записывает первую строку, но к ней еще дописывает другие элементы, забирая их со второй строки, в итоге строки получаются по 10 элементов, а должны по kmax. Как я понимаю, ошибка допущена в последнем цикле, где идет вывод нужной матрицы, но что исправлятт я не знаю ,ведь эт опросто вывод ее на экран, помогите найти ошибку, буду очень признателен.

Решение задачи: «Из положительных элементов матрицы N сформировать матрицу М (10, КМАХ) (продолжение условия и листинг внутри)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{ 
const int z = 10;
int kmax, i, j, d, g, k = 0;
int N[z][z];
int M[z][z];
printf("martix N[%d][%d]:\n",z,z);
srand (time (NULL));
 
 
      kmax=0;
      for(i = 0; i < z; i++)
      {
      k = 0;
      for(j = 0; j < z; j++)
            {
             N[i][j] = rand() % 10 - (rand() % 10);
             printf("%3d ", N[i][j]);
             if (N[i][j] > 0)
             k++;
             if (k > kmax)
             kmax = k;
             }
             printf("\tk = %d\n", k);
      }
      printf("\n");
      printf("kmax = %d\n\n", kmax);
      printf("matrix M[%d][%d]:\n", z, kmax);
 
 
 
               for(i = 0; i < z; i++)
               {
               g=-1;
               for(j = 0; j < z; j++)
                     {
                      if(N[i][j] > 0)
                      {
                      g++;
                      M[i][g] = N[i][j];
                      }
                      for(d=g+1;d<kmax; d++)
                      M[i][d]= 0;
                      }
               }
 
 
 
 
               for(i = 0; i < z; i++)
               {
               for(j = 0; j < kmax; j++)
                     {
                     printf("%3d", M[i][j]); 
                     }
                     printf("\n");
                     } 
system("PAUSE"); 
return 0;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы.
  2. Задается размер матрицы N и М.
  3. Инициализируются матрицы N и М.
  4. Выводится матрица N.
  5. Задается случайное значение для элементов матрицы N.
  6. Находится максимальное количество положительных элементов в матрице N.
  7. Формируется матрица М, в которой сначала записываются положительные элементы матрицы N, а затем нули до kmax-1.
  8. Выводится матрица М.
  9. В конце программы выводится сообщение Press any key to continue....
  10. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы