МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА кафедра «Захисту інформації»
Звіт
про виконання лабораторної роботи №6
з курсу «Алгоритмічні мови і програмування»
на тему:
РОБОТА З МАСИВАМИ. ВИКОРИСТАННЯ ФУНКЦІЙ
ВАРІАНТ 18
Львів – 2007
ПОВНИЙ ТЕКСТ ЗАВДАННЯ
Скласти блок-схему алгоритму та програму мовою Cі згідно з завданням, отриманим від викладача за табл. 1: задану прямокутну матрицю A={aij} відсортувати за вказаним алгоритмом; для відсортованої матриці знайти значення функції F(fi(aij)); алгоритм сортування і обчислення fi(aij) оформити у вигляді функції; елементи матриці вводити з клавіатури; програма повинна вивести на екран відсортовану матрицю, всі значення fi(aij) та значення функції F(fi(aij)).
Таблиця 1
№ п/п
Алгоритм впорядкування матриці
Алгоритм для розрахунку fi(aij) та F(fi(aij))
Матриця
18
Впорядкувати елементи рядків матриці за спаданням їх значень методом вибору
fi(aij)-середнє арифметичне значення елементів у кожному стовпці над допоміжною діагоналлю; F(fi(aij))- добуток fi(aij)
33 -5 -9 -20 -11
0 -42 86 83 71
-6 -9 33 13 22
52 -5 -7 53 19
-3 98 72 68 0
функція serar( ) функція dob( )
Список ідентифікаторів констант, змінних, функції, використаних у блок-схемі алгоритму і програмі, та їх пояснення:
n – розмір масиву;
i, j, z, k, x – проміжні змінні;
а – заданий масив;
sum – сума елементів у кожному стовпчику над бічною діагоналлю;
ser – середнє арифметичне значення елементів у кожному стовпчику над бічною діагоналлю;
serar( ) – функція, яка обчислює середні арифметичні значення елементів у кожному стовпчику масиву над бічною діагоналлю;
b – масив значень функції serar( )
d – добуток елементів масиву b;
dob( ) – функція, яка обчислює добуток елементів масиву b;
sort( ) – функція, яка сортує масив;
printf( ) – функція, що виводить дані на дисплей;
scanf( ) – функція, що зчитує дані з клавіатури;
main( ) – головна функція.
ОСТАТОЧНА ВЕРСІЯ ПРОГРАМИ:
#include <stdio.h>
#define n 5
void sort(int a[n][n]);
double serar(int a[n][n],int j);
double dob(double b[n-1]);
void main(void)
{
int i, j, a[n][n];
double b[n-1];
printf("\nVvedit elementy matrytsi:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("a[%d,%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
sort(a);
printf("Vidsortovana matrytsya:");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
printf("%d\t",a[i][j]);
}
}
for(j=0;j<n-1;j++)
{
b[j]=serar(a,j);
printf("\nSEREDNYE ARYFMETYCHNE=%4.4lf",b[j]);
}
printf("\nDOBUTOK=%4.4lf",dob(b));
}
void sort(int a[][n])
{
int i,j,z,k,x;
for(i=0;i<n;i++)
for(j=0;j<n-1;j++)
{
k=j; x=a[i][j];
for(z=j+1;z<n;z++)
{
if (a[i][z]>a[i][j])
{
k=z; x=a[i][z];
a[i][k]=a[i][j]; a[i][j]=x;
}
}
}
}
double serar(int a[n][n],int j)
{
int i;
double ser,sum;
sum=0;
for(i=0;i<n-j-1;i++)
sum+=a[i][j];
ser=sum*1.0/(n-j-1);
return ser;
}
double dob(double b[n-1])
{
double d;
int i;
d=1;
for(i=0;i<n-1;i++)
d*=b[i];
return d;
}
РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИ:
Vvedit elementy matrytsi:
a[1,1]=33
a[1,2]=-5
a[1,3]=-9
a[1,4]=-20
a[1,5]=-11
a[2,1]=0
a[2,2]=-42
a[2,3]=86
a[2,4]=83
a[2,5]=71
a[3,1]=-6
a[3,2]=-9
a[3,3]=33
a[3,4]=13
a[3,5]=22
a[4,1]=52
a[4,2]=-5
a[4,3]=-7
a[4,4]=53
a[4,5]=19
a[5,1]=-3
a[5,2]=98
a[5,3]=72
a[5,4]=68
a[5,5]=0
Vidsortovana matrytsya:
33 -5 -9 -11 -20
86 83 71 0 -42
33 22 13 -6 -9
53 52 19 -5 -7
98 72 68 0 -3
SEREDNYE ARYFMETYCHNE=51.2500
SEREDNYE ARYFMETYCHNE=33.3333
SEREDNYE ARYFMETYCHNE=31.0000
SEREDNYE ARYFMETYCHNE=-11.0000
DOBUTOK=-582541.6667