Из массива получить последовательность из наименьших положительных элементов - C (СИ)
Формулировка задачи:
Нужно из массива получить последовательность (короче, одномерный массив) из наименьших положительных элементов в столбцах этого массива.
Проблема вот в чем: когда без указания размеров матрицы - все работает. Но когда я пытаюсь реализовать ввод размера массива с клавиатуры, то тут же получаю отказ проги, а именно не ищутся эти самые наименьшие элементы. Что у меня не так?
Вот код:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); //блок объявления переменных и размерности массива int i,j,min,m,k; int B[0]; //printf ("vvedite kolichestvo strok \n"); scanf ("%d", &m); //printf ("vvedite kolichestvo stolbcov \n"); scanf ("%d", &k); int A[m][k]; printf ("\n"); //заполняем массив случайными числами от 0 до 9 и выводим его на экран for (i=0; i<m; i++) { for (j=0; j<k; j++) A[i][j]=rand()%10; } for (i=0; i<m; i++) { for (j=0; j<k; j++) printf("%d ", A[i][j]); printf("\n"); } printf ("\n"); //находим наименьшие положительные элементы //в каждом столбце и заносим их в отдельный массив данных for (i=0; i<m; i++) { min = A[0][i]; for (j=1; j<k; j++) { if(min > A[j][i]) min = A[j][i]; B[i] = min; } } //выводим получившийся массив на экран for (i=0; i<k; i++) { printf ("%d ", B[i]); } return 0; }
Решение задачи: «Из массива получить последовательность из наименьших положительных элементов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { int **Matrix, *arr, min, n, m, i, j, k=0; char c; bool flag=false; do { system("cls"); printf("Insert the amount of strings: "); scanf("%d", &n); printf("Insert the amount of columns: "); scanf("%d", &m); Matrix=(int**)calloc(n, sizeof(int*)); // for (i=0; i<n; i++) //Выделение памяти под матрицу размером n*m *(Matrix+i)=(int*)calloc(m, sizeof(int)); // arr=(int*)calloc(m ,sizeof(int)); //Выделение памяти под массив printf("\nInsert the Matrix:\n"); for (i=0; i<n; i++) for (j=0; j<m; j++) { printf("Insert the element [%d, %d]: ", i+1, j+1); scanf("%d", *(Matrix+i)+j); } printf("\nYour Matrix:\n"); for (i=0; i<n; i++) { for (j=0; j<m; j++) printf("%3d", *(*(Matrix+i)+j)); printf("\n"); } for (j=0; j<m; j++) { flag=false; //Флаг о найденном минимальном в столбце i=0; while (i<n) { if (*(*(Matrix+i)+j)>0) { min=*(*(Matrix+i)+j); break; } else i++; } for (i; i<n; i++) if ( *(*(Matrix+i)+j)>0 && *(*(Matrix+i)+j)<=min) { min=*(*(Matrix+i)+j); flag=true; } if (flag==true) *(arr+k++) = min; } if (k!=m) arr=(int*)realloc(arr, k*sizeof(int)); printf("\nResult:\n"); for (i=0; i<k; i++) printf("%3d", *(arr+i)); for (i=0; i<n; i++) free(*(Matrix+i)); free(Matrix); Matrix=NULL; free(arr); arr=NULL; printf("\nRun the programm again? y/n"); c=getch(); } while (c=='y'); return 0; }
Объяснение кода листинга программы
- Ввод количества строк и столбцов матрицы
- Выделение памяти под матрицу и заполнение её элементами
- Поиск минимального положительного элемента в каждом столбце матрицы и сохранение их в отдельный массив
- Вывод результата на экран
- Вопроса о повторном запуске программы
- В случае положительного ответа, процесс повторяется с начала
- В случае отрицательного ответа, программа завершается
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д