Лабораторная №8 Вириант 15
.docxОдеський національний політехнічний університет
Інститут комп’ютерних систем
Кафедра інформаційних систем
Варіант №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.
Висновки:
Під час виконання ЛР були написані дві програми: для перетворення матриці; для зміни порядку слідування рядків в масиві.
Під час написання програм не було виявлено помилок.