Перестановка столбцов по убыванию значений минимальных элементов - C (СИ)
Формулировка задачи:
Переставить столбцы по убыванию значений минимальных элементов столбцов
Что-то написал , но не работает .
Помогите доделать
#include <stdio.h> #include <stdlib.h> int main() { srand(time(NULL)); int n, m, i, j, g, k=0, a[100][100]; printf("vvedit k-st stovbciv "); scanf("%d",&n); printf("vvedit k-st ryadkiv "); scanf("%d",&m); for (i=0;i<n;i++){ for (j=0;j<m;j++){ a[i][j]=-10+rand()%20; printf("%3d ",a[i][j]); } printf("\n"); } int tru=0; printf("radky yaki mayut vid'emni elementy\n"); for (i=0;i<n;i++) { for (j=0;j<m;j++) { if (a[i][j]<0 ) tru=1; } if (tru==1) printf("%d\n",i); tru=0; } int min=a[0][0]; for (i=0;i<n;i++) { if (a[i][0]<min) min=a[i][0]; } printf("\nmin=%d",min); k=a[0][j]; for (j=0;j<m;j++) { for (i=0;i<n;i++) { if (a[i][j]<k ) k=a[i][j]; } if (k<min) { for (i=0;i<n;i++) { g=a[i][j-1]; a[i][j-1]=a[i][j]; a[i][j]=g; } } k=a[i+1][j+1]; } printf("\n\n\n\n"); for (i=0;i<n;i++) { for (j=0;j<m;j++) { printf("%3d",a[i][j]); } printf("\n"); } return 0; }
Решение задачи: «Перестановка столбцов по убыванию значений минимальных элементов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a[100][100]; int n, m, i, j, g, k; int min1, min2; srand(time(NULL)); printf("vvedit k-st stovbciv "); scanf("%d", &n); printf("vvedit k-st ryadkiv "); scanf("%d", &m); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { a[i][j] = rand() % 20 - 10; printf("%5d", a[i][j]); } printf("\n"); } printf("radky yaki mayut vid'emni elementy\n"); for (i = 0; i < m; i++) { j = 0; while (j < n && a[i][j] >= 0) { j++; } if (j < n) { printf("%d\n", i); } } // сортировка пузырьком for (i = 1; i < n; i++) { for (j = n-1; j >= i; j--) { // находим минимальные элементы в столбцах j и j-1 min1 = a[0][j-1]; min2 = a[0][j]; for (k = 0; k < n; k++) { if (a[k][j-1] < min1) { min1 = a[k][j-1]; } if (a[k][j] < min2) { min2 = a[k][j]; } } if (min1 < min2) { // меняем j и j-1 столбцы местами for (k = 0; k < n; k++) { g = a[k][j-1]; a[k][j-1] = a[k][j]; a[k][j] = g; } } } } printf("\n"); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { printf("%5d", a[i][j]); } printf("\n"); } return 0; }
Объяснение кода листинга программы
В этом коде:
- Объявляются массив и переменные для ввода данных от пользователя.
- Заполняются случайными значениями массив a[100][100].
- Выводятся на экран полученные значения массива.
- Пользователю предлагается ввести номер строки, содержащей минимальный элемент.
- В цикле с помощью функции scanf() вводится номер строки.
- В этом же цикле осуществляется поиск минимального элемента в выбранной строке.
- Если найденный минимальный элемент не равен нулю, то с помощью функции printf() выводится номер строки.
- Затем осуществляется сортировка массива a[100][100] методом пузырька.
- В цикле происходит сравнение минимальных элементов в текущих столбцах и при необходимости производится перестановка столбцов.
- После сортировки массив выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д