Лабораторная №8
.docxОдеський національний політехнічний університет
Інститут комп’ютерних систем
Кафедра інформаційних систем
Варіант №1
Лабораторна робота №8
По дисципліні “Алгоритмізація і програмування”
Тема:“ Програмування алгоритмів обробки двовимірних масивів”
Виконав:
Студент гр. АІ-171
Анищенко М.О.
Перевірили:
Шпиньковський О.А.
Одеса 2017
Мета роботи:
Набуття практичних навичок у створенні програм обробки двовимірних масивів.
Завдання 8.1:
Дана прямокутна матриця [m × n]. Визначити k – кількість «особливих» елементів матриці, вважаючи елемент «особливим», якщо він більше суми інших елементів свого стовпця. Знайти номер стовпчика з максимальною сумою всіх елементів.
БСА:
Код програми:
#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 3
int main()
{
int matrix[M][N], sum[N];
printf("Enter matrix\n");
for(int i = 0; i < M; i++)
for(int j = 0; j < N; j++)
scanf("%d", &matrix[i][j]);
printf("Matrix\n");
for(int i = 0; i < M; i++)
{
printf("\n");
for(int j = 0; j < N; j++)
printf("%d ", matrix[i][j]);
}
for(int j = 0; j < N; j++)
{
sum[j] = matrix[0][j];
for(int i = 1; i < M; i++)
sum[j]+=matrix[i][j];
}
int k = 0;
for(int j = 0; j < N; j++)
for(int i = 0; i < M; i++)
if(sum[j] - matrix[i][j] < matrix[i][j])
k++;
printf("\nK = %d", k);
int max = 0;
for(int i = 0; i < N; i++)
if(sum[max] < sum[i] )
max = i;
printf("\nMax sum column number %d", max+1);
return 0;
}
Приклад виконання:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Enter matrix
1
2
3
4
5
6
7
8
9
Matrix
1 2 3
4 5 6
7 8 9
K = 2
Max sum column number 3
Process returned 0 (0x0) execution time : 5.674 s
Press any key to continue.
Завдання 8.2:
У кожному стовпці двовимірного масиву поміняти місцями перший негативний елемент і останній нульовий. Якщо таких елементів немає, то повинно бути виведено відповідне повідомлення.
Код програми:
int main()
{
int arr[M][N];
printf("Enter 9 numbers\n");
for(int i = 0; i < M; i++)
for(int j = 0; j < N; j++)
scanf("%d", &arr[i][j]);
printf("Matrix\n");
for(int i = 0; i < M; i++)
{
printf("\n");
for(int j = 0; j < N; j++)
printf("%3d ", arr[i][j]);
}
int count = 0;
for(int j = 0; j < N; j++)
{
int pos_neg = -1, pos_zero = -1;
for(int i = 0; i < M; i++)
if(pos_neg == -1 && arr[i][j] < 0)
pos_neg = i;
else if(arr[i][j] == 0)
pos_zero = i;
if(pos_neg != -1 && pos_zero != -1)
{
int tmp = arr[pos_zero][j];
arr[pos_zero][j] = arr[pos_neg][j];
arr[pos_neg][j] = tmp;
count++;
}
}
if(!count)
printf("\n\nThere are no elements that satisfy the conditions\n");
printf("\nMatrix\n");
for(int i = 0; i < M; i++)
{
printf("\n");
for(int j = 0; j < N; j++)
printf("%3d ", arr[i][j]);
}
return 0;
}
Приклад виконання:
-5 |
3 |
0 |
6 |
0 |
8 |
0 |
-3 |
5 |
Enter 9 numbers
-5
3
0
6
0
8
0
-3
5
Matrix
-5 3 0
6 0 8
0 -3 5
Matrix
0 3 0
6 -3 8
-5 0 5
Process returned 0 (0x0) execution time : 29.577 s
Press any key to continue.
Висновки:
При виконанні ЛР були написані дві програми, що виконують дії з двовимірними масивами.
Під час написання програм не виникло помилок.