1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
| /**********************************************************************
* laba8ex2_dynArray.c 08.11.2016
*
* Дана динамическая прямоугольная матрица, заполненная случайными
* числами. Для каждой строки определить минимальный элемент,
* для каждого столбца максимальный.
* Сравнить мининимальный из строк и максимальный из столбцов.
* ********************************************************************/
#include <stdio.h> /* printf, scanf */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
#define M 100 // деление по модулю
int main()
{
size_t rows = 0, columns = 0;
size_t i = 0, j = 0;
int **p, *min_r, *max_c;
int min, min_min, max, max_max;
printf("Enter the number rows: ");
scanf("%zd", &rows);
printf("Enter the number columns: ");
scanf("%zd", &columns);
// выделение памяти для вспомогательного массива (массив указателей)
p = (int**) calloc(rows, sizeof(int *));
// выделение памяти под массивы элементов
for(i = 0; i < rows; i++)
p[i] = (int *) calloc(columns, sizeof(int));
// устанавливаем исходное число для последовательности,
// генерируемой функцией rand()
srand((unsigned) time(NULL));
// инициализация массива случайными числами
for(i = 0; i < rows; i++)
for(j = 0; j < columns; j++)
p[i][j] = rand() % M - rand() % M;
printf("\n--- Матрица ------------------ -----------------------\n");
for(i = 0; i < rows; i++) {
printf("\n\t");
for(j = 0; j < columns; j++)
printf("%4d", p[i][j]);
}
min_r = (int *) calloc(rows, sizeof(int));
max_c = (int *) calloc(columns, sizeof(int));
// поиск минимумов в строках и самого минимального значения матрицы
min_min = p[0][0];
for(i = 0; i < rows; i++){
min = p[i][0];
for(j = 0; j < columns; j++){
if(p[i][j] < min)
min = p[i][j];
}
min_r[i] = min;
if(min < min_min)
min_min = min;
}
// поиск максимумов в столбцах
max_max = p[0][0];
for(j = 0; j < columns; j++){
max = p[0][j];
for(i = 1; i < rows; i++){
if(p[i][j] > max)
max = p[i][j];
}
max_c[j] = max;
if(max > max_max)
max_max = max;
}
printf("\n\n-Матрица с мин. в строках и макс. в столбцах\n");
for(i = 0; i < rows; i++) {
printf("\n\t");
for(j = 0; j < columns; j++)
printf("%4d", p[i][j]);
printf(" | %4d", min_r[i]);
}
printf("\n\t----------------------------");
printf("\n\t");
// печать массива sum_column
for(j = 0; j < columns; j++)
printf("%4d", max_c[j]);
// сравниваем мининимальное значение из строк и максимальное из столбцов
printf("\n\n\tМининимальное значение из строк = %d", min_min);
printf("\n\tМаксимальное значение из столбцов = %d", max_max);
printf("\n\n\tВывод: ");
if(max_max > min_min)
printf("макс. из столбцов больше мин. из строк");
else if (max_max < min_min)
printf("макс. из столбцов меньше мин. из строк");
else
printf("макс. из столбцов равен мин. из строк");
// освобождение памяти
for(i = 0; i < rows; i++)
free((void *) p[i]);
free((void *) p);
free((void *) min_r);
free((void *) max_c);
printf("\n\n");
return 0;
} |