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
| #include <stdio.h> //заголовочный файл который содержит функции ввода/вывода
#define N 5 // количество строк и/или столбцов масивов (для одномерного количество элементов)
int main(){
int mas[N][N], // массив введенных чисел с клавиатуры статический размером 100х100
mas2[N][N], // копия массива mas
nyll[N], // содержит количество нулевых элементов в соответсвующих строках массива mas
str[N], // одномерный статический массив
nyll1[N],
str1[N],
m, // счетчик нулевых элементов
k, // количество строк в массиве mas которые содержат хотя бы один ноль
i, // переменная-счетчик цыкла
j; // переменная-счетчик цыкла
for (i = 0; i < N; i = i + 1) {
for (j = 0; j < N; j = j + 1)
{
printf("mas[%i][%i] = ", i, j);
scanf("%d", &mas[i][j]); // вводим очередное число в массив
mas2[i][j] = mas[i][j]; // копируем элемент mas[i][j] в mas2[i][j]
}
printf("\n");
}
for (i = 0; i < N; i = i + 1)
{
str[i] = i; // записываем индексы строк
m = 0; // обнуляем счетчик нулевых элементов
for (j = 0; j < N; j = j + 1)
if (mas[i][j] == 0) // если елемент массива mas[i][j] равняется нулю то
m = m + 1; // увеличиваем счетчик нулей в строках массива mas на единицу
nyll[i] = m; // записываем значение счетчика в масив nyll
}
k = -1;
for (i = 0; i < N; i = i + 1)
if (nyll[i]) { //если очередное елемент массива nyll не нулевой, то
k = k + 1; // увеличиваем счетчик k на единицу, в конце k будет содержать количество ненулевых элементов массива nyll
nyll1[k] = nyll[i]; // копируем последовательно ненулевые элементы массива nyll в массив nyll1
str1[k] = str[i]; // копируем последовательно индексы строк с массива str (строки содержат нули в соответствующих строках массива mas) в масив str1
}
k = k + 1;
int tmp, tmp1, step;
// тут идет алгоритм сортировки, но он не правильно работает
for (step = k / 2; step > 0; step = step / 2)
for (i = step; i < k; i++){
tmp = nyll1[i];
tmp1 = str1[i];
for (j = i; j >= step; j = j - step)
if (tmp < nyll1[j - step]){
nyll1[j] = nyll1[j - step];
str1[j] = str1[j - step];
}
else break;
nyll1[j] = tmp;
str1[j] = tmp1;
}
for (i = 0; i < N; i = i + 1)
for (j = 0; j < N; j = j + 1)
mas2[i][j] = mas[str1[i]][j];
for (i = 0; i < N; i = i + 1){
for (j = 0; j < N; j = j + 1)
printf("%d\t\t", mas2[i][j]); // вывод массива mas2
printf("\n");
}
return NULL;
} |