давно
Старший Модератор
312929
1973
10.05.2016, 05:37
общий
это ответ
Здравствуйте, user8351!
Вот исправленный вариант программы (с комментариями):
[code lang=js]
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <malloc.h> ///для выделения памяти в куче
#include <time.h> ///для инициализации генератора псевдослучайных чисел
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i, j, k, m, n;
printf("Введите количество строк в матрице m: ");
scanf("%d", &m);
printf("Введите количество столбцов в матрице n: ");
scanf("%d", &n);
srand(time(NULL)); // инициализация генератора псевдослучайных чисел
int **A;
A = (int**)malloc(n*sizeof(int*)); // Память под матрицу выделяем "наоборот",
for (j=0; j<n; j++) // то есть первый индекс - номер столбца,
A[j] = (int*)malloc(m*sizeof(int)); // второй - номер строки
int *Ch;
Ch = (int*)malloc(n*sizeof(int));
// заполним матрицу случайными числами
for(i=0; i<m; i++)
{
for(j=0; j<n; j++) // В условиях задачи не сказано,
{ // что ВСЕ элементы матрицы отрицательные,
A[j][i]=(rand()%200)-100; // поэтому заполнение делаем случайными числами
printf("%4d ", A[j][i]); // в диапазоне от -100 до 100
}
printf("\n"); // для следующей строки
}
printf("\nМассив характеристик столбцов\n");
for (j=0; j<n; j++)
{
Ch[j] = 0; // Характеристика столбца первоначально равно нулю (и остаётся
for (i=0; i<m; i++) // такой, если в столбце нет отрицательных нечётных элементов)
if (A[j][i]<0 && A[j][i]%2!=0) Ch[j] += abs(A[j][i]);
printf("%4d ", Ch[j]);
}
printf("\n");
for (k=n-1; k>0; k--) // Для упорядочивания массива характеристик
for (j=0; j<k; j++) // используем пузырьковый метод сортировки
if (Ch[j]>Ch[j+1])
{
int a = Ch[j];
Ch[j] = Ch[j+1];
Ch[j+1] = a;
int *aa = A[j]; // Поскольку в массиве A индексы расположены "наоборот"
A[j] = A[j+1]; // (первым - номер столбца), то перестановка столбцов
A[j+1] = aa; // выполняется в одно действие
}
printf("\nКонечный результат:\n"); ///выводим, что у нас получилось
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d ", A[j][i]);
printf("\n");
}
for (j=0; j<n; j++)
free(A[j]);
free(A);
free(Ch);
return 0;
}[/code]