Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная №8 Вириант 15

.docx
Скачиваний:
24
Добавлен:
14.12.2018
Размер:
18.27 Кб
Скачать

Одеський національний політехнічний університет

Інститут комп’ютерних систем

Кафедра інформаційних систем

Варіант №15

Лабораторна робота №8

По дисципліні “Алгоритмізація і програмування”

Тема:“ Програмування алгоритмів обробки двовимірних масивів”

Виконав:

Студент гр. АІ-171

Анищенко М.О.

Перевірили:

Шпиньковський О.А.

Одеса 2017

Мета роботи:

Набуття практичних навичок у створенні програм обробки двовимірних масивів.

Завдання 8.1:

Дана прямокутна дійсна матриця [m × n]. Обнулити всі парні стовпці і непарні рядки. В отриманій матриці впорядкувати за зростанням кожен рядок, залишаючи нулі на своїх місцях.

Код програми:

#include <stdio.h>

#include <stdlib.h>

#define M 3

#define N 3

int main()

{

int arr[M][N];

printf("Enter numbers\n");

for(int i = 0; i < M; i++)

for(int j = 0; j < N; j++)

scanf("%d", &arr[i][j]);

for(int i = 0; i < M; i++)

{

for(int j = 0; j < N; j++)

printf("%d ", arr[i][j]);

printf("\n");

}

printf("\n");

for(int i = 0; i < M; i++)

for(int j = 0; j < N; j++)

if((i+1) % 2 == 1 || (j+1) % 2 == 0)

arr[i][j] = 0;

for(int i = 0; i < M; i++)

{

for(int j = 0; j < N; j++)

printf("%d ", arr[i][j]);

printf("\n");

}

printf("\n");

for(int i = 1; i < M; i+=2)

for(int j = 0; j < N; j+=2)

{

int min = j;

for(int k = j+2; k < N; k+=2)

if( arr[i][min] > arr[i][k])

min = k;

int tmp = arr[i][j];

arr[i][j] = arr[i][min];

arr[i][min] = tmp;

}

for(int i = 0; i < M; i++)

{

for(int j = 0; j < N; j++)

printf("%d ", arr[i][j]);

printf("\n");

}

printf("\n");

return 0;

}

Приклад виконання:

1

2

3

6

5

4

7

8

9

Матриця А =

Enter numbers

1

2

3

6

5

4

7

8

9

1 2 3

6 5 4

7 8 9

0 0 0

6 0 4

0 0 0

0 0 0

4 0 6

0 0 0

Process returned 0 (0x0) execution time : 8.557 s

Press any key to continue.

Завдання 8.2:

Дано двовимірний масив з 15 рядків. Переставити в зворотному порядку рядки, розташовані між k-м і s-м рядками (тобто з k + 1-го по s – 1-ий). Значення k і s вводяться з клавіатури, k < s.

Код програми:

#include <stdio.h>

#include <stdlib.h>

#define L 15

#define N 5

int main()

{

int arr[L][N];

for(int i = 0; i < L; i++){

arr[i][0] = i;

for(int j = 1; j < N; j++)

arr[i][j] = rand() % 100;

}

for(int i = 0; i < L; i++){

for(int j = 0; j < N; j++)

printf("%d ", arr[i][j]);

printf("\n");

}

int k, s;

printf("\nEnter k");

scanf("%d", &k);

printf("Enter s");

scanf("%d", &s);

for(int i = k+1, n = 1; i-k < s/2; i++, n++){

for(int j = 0; j < N; j++){

int tmp = arr[i][j];

arr[i][j] = arr[s - n][j];

arr[s - n][j] = tmp;

}

}

for(int i = 0; i < L; i++){

for(int j = 0; j < N; j++)

printf("%d ", arr[i][j]);

printf("\n");

}

return 0;

}

Приклад виконання:

k = 3; s = 7;

0 41 67 34 0

1 69 24 78 58

2 62 64 5 45

3 81 27 61 91

4 95 42 27 36

5 91 4 2 53

6 92 82 21 16

7 18 95 47 26

8 71 38 69 12

9 67 99 35 94

10 3 11 22 33

11 73 64 41 11

12 53 68 47 44

13 62 57 37 59

14 23 41 29 78

Enter k 3

Enter s 7

0 41 67 34 0

1 69 24 78 58

2 62 64 5 45

3 81 27 61 91

6 92 82 21 16

5 91 4 2 53

4 95 42 27 36

7 18 95 47 26

8 71 38 69 12

9 67 99 35 94

10 3 11 22 33

11 73 64 41 11

12 53 68 47 44

13 62 57 37 59

14 23 41 29 78

Process returned 0 (0x0) execution time : 4.138 s

Press any key to continue.

Висновки:

Під час виконання ЛР були написані дві програми: для перетворення матриці; для зміни порядку слідування рядків в масиві.

Під час написання програм не було виявлено помилок.