Из положительных элементов матрицы N сформировать матрицу М (10, КМАХ) (продолжение условия и листинг внутри) - C (СИ)
Формулировка задачи:
Условие:
Из положительных элементов матрицы N сформировать матрицу М (10, КМАХ), размещая их в строках матрицы подряд, где КМАХ - максимальное число положительных элементов ленты матрицы N. Записать нули на место отсутствующих элементов. Распечатать обе матрицы в общепринятом виде.
Листинг:
Программа работает с ошибкой, прога правильно считает kmax и размещает элементы подряд, но выводит матрицу не 10хkmax, а какоето количество строк на 10 столбцов, то есть правильно записывает первую строку, но к ней еще дописывает другие элементы, забирая их со второй строки, в итоге строки получаются по 10 элементов, а должны по kmax. Как я понимаю, ошибка допущена в последнем цикле, где идет вывод нужной матрицы, но что исправлятт я не знаю ,ведь эт опросто вывод ее на экран, помогите найти ошибку, буду очень признателен.
#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; }
Решение задачи: «Из положительных элементов матрицы 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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы.
- Задается размер матрицы N и М.
- Инициализируются матрицы N и М.
- Выводится матрица N.
- Задается случайное значение для элементов матрицы N.
- Находится максимальное количество положительных элементов в матрице N.
- Формируется матрица М, в которой сначала записываются положительные элементы матрицы N, а затем нули до kmax-1.
- Выводится матрица М.
- В конце программы выводится сообщение
Press any key to continue...
. - Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д