Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


—ортировка матриц




÷ель работы: изучение приЄмов сортировки двумерных массивов данных, выработка умений алгоритмизации и программировани€ задач сортировки массивов, отладки и тестировани€ программ с массивами.

/* ѕрограмма 12. ѕрограмма демонстрирует типовые процедуры сортировки двумерных массивов по заданным услови€м: поиск строки матрицы, сортировка столбцов по возрастанию значений чисел заданной строки, перемещение строк или столбцов. «адачи решаютс€ без использовани€ дополнительных массивов. */

// ѕрототипы функций программы:

void in_matr(int x[ ][10], int m, int n); // ввод матрицы размером m *n

// с клавиатуры

void in_matr_rand(int x[ ][10], int m, int n); // заполнение матрицы размером

// m*n случайными числами из интервала [-10, 10].

void out_matr(int x[ ][10], int m, int n); // вывод матрицы размером m*n

// на экран.

void processing(int x[ ][10], int *y, int m, int n); // функци€ замен€ет
// в матрице размером m*n строки, не содержащие "+"-ых элементов,
// элементами массива y[ ].

void sort_columns(int x[ ][10], int m, int n); // располагает столбцы матрицы

// размером m*n в пор€дке возрастани€ элементов первой строки.

void rows_move(int x[ ][10], int m, int n); // перемещение строк с первым 0-м

// элементом на место последних строк матрицы.

#include <stdio.h>

#include <conio.h>

void main()

{ int m, n, x[10][10], y[10] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};

char ch;

printf(" *** Matrix Sort *** ");

printf("\n\n ¬ведите размеры матрицы m<=10, n<=10: ");

scanf("%d %d", &m, &n);

printf("\n ¬вод матрицы с клавиатуры - 'c' или заполнение \

случайными числами - 'r'? - ");

scanf("%c%c", &ch, &ch);

if((ch=='c') || (ch=='C')) in_matr(x, m, n);

else { randomize(); in_matr_rand(x, m, n);}

printf("\n »сходна€ матрица: %d*%d \n", m, n);

out_matr(x, m, n);

processing(x, y, m, n);

printf("\n «амена строк с отрицательными элементами числами \

заданного массива: \n");

out_matr(x, m, n);

sort_columns(x, m, n);

printf("\n —ортировка столбцов матрицы в пор€дке возрастани€ \

элементов первой строки: \n");

out_matr(x, m, n);

printf("\n перемещение строк с первым 0-м элементом на место \

последних строк матрицы: \n");

rows_move(x, m, n);

out_matr(x, m, n);

getch();

return 0;

} /*  оды функций in_matr(), in_matr_rand() и out_matr() приведены в
программе 10. ћодификацию функций дл€ матрицы размером m х n
выполните самосто€тельно. */

‘ункци€ processing() замен€ет в матрице размером m х n строки
с отрицательными элементами числами массива y[ ].

“≈—“: m = 4, n = 4, y[ ] = { 10, 9, 8, 7 },

-1 -1 -1 -1 10 9 8 7

x = -2 2 -2 -2 => -2 2 -2 -2

-3 -3 -3 -3 10 9 8 7

4 -4 4 4 4 -4 4 4

 

void processing(int x[ ][10], int *y, int m, int n)

{ int i, j, k;

for (i = 0; i < m; i++) // проверка всех строк

{ j = -1;

do // поиск в строке 'i' элемента x[i][j] >= 0

{ j++;

if(x[i][j] >= 0 && j!= n) break; // то элемент найден

if(j == n) // строка 'i' с "-"-ми элементами

for (k=0; k<n; k++) x[i][k] = y[k];

}

while (j!= n);

}

/* ‘ункци€ rows_move() перемещает строки с первым 0-м элементом на место последних строк матрицы размером m*n.

“≈—“: m = 4, n = 4,

0 1 1 1 4 4 4 4

x = 2 2 2 2 => 2 2 2 2

0 3 3 3 0 3 3 3

4 4 4 4 0 1 1 1

*/

void rows_move(int x[ ][10], int m, int n)

{ int ii = 0, // номер строки с первым нулевым элементом

kk = n-1, // номер строки с первым ненулевым элементом

// от последней строки

i, j, k, w;

while(ii < kk)

{ for (i = ii; i < m-1; i++) // поиск строки с первым нулевым элементом

if(x[i][0] == 0) break;

ii = i;

for (k = kk; k > ii; k- -) // поиск строки с первым ненулевым элементом

if(x[k][0]!= 0) break; // от последней строки

kk = k;

if(ii < kk) // мен€ем строки ii и kk местами

for (j = 0; i < n; j++) // столбцы j и k

{ w = x[ii][j];

x[ii][j] = x[kk][j];

x[kk][j] = w;

}

ii++, kk--;

}

}

/* ‘ункци€ sort_columns() располагает столбцы матрицы размером m*n

в пор€дке возрастани€ элементов первой строки.

“≈—“: m = 4, n = 4,

3 1 2 0 0 1 2 3

x = 3 1 2 0 => 0 1 2 3

3 1 2 1 1 1 2 3

3 1 2 2 2 1 2 3

*/

void sort_columns(int x[ ][10], int m, int n)

{ int i, j, k, z;

for (j = 0; j < n-1; j++)

for (k = j+1; k < n; k++)

if (x[0][j] > x[0][k]) // мен€ем местами

for (i = 0; i < m; i++) // столбцы j и k

{ z = x[i][j];

x[i][j] = x[i][k];

x[i][k] = z;

}

}

¬опросы и упражнени€

1. —колько циклов нужно дл€ просмотра всех элементов n-мерного массива?

2. «апишите циклы дл€ инвертировани€ матрицы m х n (замена строк столбцами).

3. ѕо€сните следующий фрагмент программы обработки матрицы а размером n x n:

for(j = 0; j < n; j++)

for(i = n-1; i > j; i--) а[i][j] = а[ i - j ] [ n-1 - j ]

4. —оставьте функцию дл€ удалени€: а) k- го столбца матрицы; б) k-ой строки матрицы.

5. ѕо€сните алгоритм сортировки в функции sort_columns(). ћодифицируйте функцию дл€ сортировки по методу Ђпузырькаї.

6.  ак выполнить перемещение строк в функции rows_move() сохранив последовательность строк с ненулевым первым элементом относительно друг друга?

 





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-10-01; ћы поможем в написании ваших работ!; просмотров: 713 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

Ћучша€ месть Ц огромный успех. © ‘рэнк —инатра
==> читать все изречени€...

1152 - | 1121 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.016 с.