МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА, кафедра “Захист інформації”
ЗВІТ
З ЛАБОРАТОРНОЇ РОБОТИ № 6
З КУРСУ “АЛГОРИТМІЧНІ МОВИ І ПРОГРАМУВАННЯ”
НА ТЕМУ: “ РОБОТА З МАСИВАМИ. ВИКОРИСТАННЯ ФУНКЦІЙ “
Варіант 23
ЗАВДАННЯ
Скласти блок-схему алгоритму та програму мовою Cі згідно з завданням, отриманим від викладача за табл.: задану прямокутну матрицю A={aij} відсортувати за вказаним алгоритмом; для відсортованої матриці знайти значення функції F(fi(aij)); алгоритм сортування і обчислення fi(aij) оформити у вигляді функції; елементи матриці вводити з клавіатури; програма повинна вивести на екран відсортовану матрицю, всі значення fi(aij) та значення функції F(fi(aij)).
Алгоритм впорядкування матриці
Алгоритм для розрахунку fi(aij) та F(fi(aij))
Матриця
Впорядкувати елементи стовпців матриці за зростанням їх значень методом вставки
fi(aij)-сума елементів у кожному рядку над головною діагоналлю матриці; F(fi(aij))-середнє геометричне значення fi(aij)
31 65 –83 -2 -85
9 -2 11 -4 70
52 73 -8 -1 60
57 83 -1 82 50
1 -3 -2 78 -9
Таблиця ідентифікаторів констант, змінних, функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення:
a[n][n]
Змінна для двовимірного масиву
i,j
Змінні для визначення позицій елементів матриці
suma[n-1]
Змінна для одновимірного масиву, що містить в собі суму кожного елемента рядка над головною діагоналлю
t,x
Тимчасові змінні для сортування матриці
suma
Тимчасова змінна для обчислення суми елементів рядка
gm
Тимчасова змінна для обчислення середнього геометричного сум
main()
Головна функція
sorting()
Функція сортування матриці
sum()
Функція для обчислення суми елементів рядка над головною діагоналлю
gmean()
Функція для обчислення середнього геометричного сум
printf()
Функція виведення даних
scanf()
Функція введення даних
pow(x,y)
Функція для обчислення числа x в степені y
Текст програми мовою C
#include<stdio.h>
#include<math.h>
#define n 5
void sorting(int a[n][n]);
int sum(int a[n][n],int i);
double gmean(int suma[n-1]);
void main(void)
{
int i,j,a[n][n],suma[n-1];
for (i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("a[%d][%d]=",i+1,j+1);
scanf("%i",&a[i][j]);
}
printf("\n old array\n");
for (i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
}
sorting(a);
printf("\n\n new array \n");
for (i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
}
for (i=0;i<=n-2;i++)
{
suma[i]=sum(a,i);
printf("\n Suma[%d]=%d",i+1,suma[i]);
}
printf("\n Gmean=%4.2lf",gmean(suma));
}
void sorting (int a[n][n])
{
int t,i,j,x;
{
for (t=0;t<=n-1;t++)
for(i=1;i<=n-1;i++)
{
x=a[i][t];
j=i-1;
while (a[j][t]>=x && j>=0)
{
a[j+1][t]=a[j][t];
j=j-1;
}
a[j+1][t]=x;
}
}
}
int sum(int a[n][n],int i)
{
int suma,x,j;
suma=0;
for (j=0;j<=n-1;j++)
{
if(i<j)
suma+=a[i][j];
}
return suma;
}
double gmean(int suma[n-1])
{
double gm;
int i;
gm=1;
for (i=0;i<=n-2;i++)
gm*=suma[i];
return pow(gm,1.0/i);
}
Результати роботи програми:
a[1][1]=31
a[1][2]=65
a[1][3]=-83
a[1][4]=-2
a[1][5]=-85
a[2][1]=9
a[2][2]=-2
a[2][3]=11
a[2][4]=-4
a[2][5]=70
a[3][1]=52
a[3][2]=73
a[3][3]=-8
a[3][4]=-1
a[3][5]=60
a[4][1]=57
a[4][2]=83
a[4][3]=-1
a[4][4]=82
a[4][5]=50
a[5][1]=1
a[5][2]=-3
a[5][3]=-2
a[5][4]=78
a[5][5]=-9
old array
31 65 –83 -2 -85
9 -2 11 -4 70
52 73 -8 -1 60
57 83 -1 82 50
1 -3 -2 78 -9
new array
1 -3 -83 -4 -85
9 -2 -8 -2 -9
31 65 -2 -1 50
52 73 -1 78 60
57 83 11 82 70
Suma[1]=-175
Suma [2]=-19
Suma [3]=49
Suma [4]=60
Gmean=55.92
Висновок: На цій лабораторній роботі я вивчив синтаксис опису і використання у програмах змінних типу масивів, навчився використовувати масиви для оброблення матриць, вивчив основні алгоритми сортування масивів; навчився описувати та застосувати у програмах функції для виконання логічно закінчених алгоритмів.