Помогите отредактировать код на си. Скорей всего я неправильно выделил динамическую память. Задача: Используя динамическое распределение памяти вывести все нулевые элементы матрицы на ее периметр начиная с верхней строки если произведение элементов матрицы меньше заданного к.
| Код | #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <malloc.h> void main() { clrscr(); randomize(); int *matr,i=0,j=0,m,n,k,p=1,b=0; printf("Vvedite kol-vo strok"); scanf("%d",m); printf("Vvedite kol-vo stolbzov"); scanf("%d",n); *matr=(int)malloc(sizeof(int)*m*n); for(i=0;i<m;i++) for(j=0;j<n;j++) *(matr+i*n+j)=rand()%100-50; printf("\tMatriza matr:\n\n"); for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("%2d",*(matr+i*n+j)); } printf("\n"); } printf("Vvedite k"); scanf("%d",k); for(i=0;i<n;i++) for(j=0;j<m;j++) p*=*(matr+i*n+j); if(p<k) { p=0;k=0; for(i=0;i<m;i++) for(j=0;j<n;j++) if(*(matr+i*n+j)==0) { *(matr+i*n+j)=*(matr+p*n+k); *(matr+p*n+k)=0; switch(b) { case 0: p++; if(p==m-1) b=1;break; case 1: k++; if(k==n-1) b=2;break; case 2: p--; if(p==0) b=3;break; case 3: k--; if(k==0) b=0;break; } for(i=0;i<m;i++) for(j=0;j<n;j++) printf("%d",*(matr+i*n+j)); printf("\n"); } } else printf("proizvedenie bolshe k"); getch(); free(matr); }
|
|