Лабораторная №6 вариант №13 по информатике, выполненная с использованием подпрограмм-процедур и подпрограмм-функций


1. Цель работы.

Целью  работы  является  написание  программы  на   языке   программирования
«Pascal» для  DOS  с  использованием  подпрограмм  и  функций,  задания  для
которых обозначены вариантом лабораторной работы.

                            2. Постановка задачи.
Главной  задачей  программиста  является  создание  наиболее  простого,   и,
следовательно, быстрого алгоритма программы, выполняющего оба задания – А  и
Б, причём задание А необходимо оформить в виде  процедуры,  а  задание  Б  в
виде функции. При этом сделать программу как можно проще в использовании.

                      3. Описание алгоритма программы.
Помимо короткого основного модуля программы, который  управляет  процедурами
и функциями, в программу включены две функции и одна  процедура,  они  же  и
являются подпрограммами, которые было  необходимо  использовать  по  условию
лабораторной работы.
Процедура  представляет  собой  задание  А,  в   котором   необходимо   было
подсчитать количество нулей в матрицах.  В  программе  матрицы  представлены
двухмерным массивом, числа в  которые  заносятся  автоматически  посредством
случайного их генератора,  после  чего  над  ними  производятся  вычисления.
Необходимо подчеркнуть, что как для занесения  в  матрицы  случайных  чисел,
так и для подсчёта их нулевых элементов,  использовался  один  двойной  цикл
оператора FOR.
Первая функция – это программное меню,  которое  предоставляет  пользователю
программы выбор вычисления заданий и выход. Соответственно вторая функция  –
это задание Б, для выполнения которого автор  программы  использовал  те  же
принципы построения подпрограммы, что и для выполнения подпрограммы  задания
А.

                          4. Блок-схема программы.
См. на следующей странице.



[pic][pic][pic][pic][pic]



                              5. Общие условия.
В программе использовались  два  вида  условий.  Первое  из  них  –  условие
оператора  IF.  Оно  присутствует  в  основном  модуле  программы,   который
управляет  подпрограммами  (т.  е.  процедурами  и  функциями)  и  выполняет
задание А или Б в зависимости от  выбора  пользователя  из  меню  программы.
Можно также выйти из программы без выведения на экран результатов.
Второе условие  –  это  условие  оператора  FOR,  которое  является  скрытым
условием. Оператор проверяет, все ли элементы массивов заполнены.



6. Исходный текст программы.
program lab6v13;
uses crt;
const
m1=20;
n1=20;
m2=100;
n2=100;
var
kl,cycle00,cycle01,null_el_a,null_el_b:integer;
a:array [0..n1,0..m1] of real;
b:array [0..m1,0..n1] of real;
x:array [0..n2] of real;
y:array [0..m2] of real;
mid_x,mid_y,sum_x,sum_y,delt_x,delt_y:real;
label
exitprogr,funct,startprg;
procedure labproc_q_a;
begin
null_el_a:=0;
null_el_b:=0;
for cycle00:=0 to n1 do begin
for cycle01:=0 to m1 do begin
a[cycle00,cycle01]:=int(random(40));
if a[cycle00,cycle01]=0 then null_el_a:=null_el_a+1;
b[cycle01,cycle00]:=int(random(50));
if b[cycle01,cycle00]=0 then null_el_b:=null_el_b+1;
end;
end;
window (1,5,75,7);
gotoxy (2,6);
write ('Количество нулей в матрице А: ',null_el_a:3);
clreol;
writeln (' ');
gotoxy (3,7);
write ('Количество нулей в матрице Б: ',null_el_b:3);
clreol;
end;
function mid_delt(mid_x,mid_y,delt_x,delt_y:real):real;
begin
sum_x:=0;
sum_y:=0;
for cycle00:=0 to m2 do begin
for cycle01:=0 to n2 do begin
x[cycle01]:=int(random(100));
y[cycle00]:=int(random(200));
sum_x:=sum_x+x[cycle01];
sum_y:=sum_y+y[cycle00];
end;
end;
mid_x:=sum_x/n2;
mid_y:=sum_y/m2;
delt_x:=mid_x/mid_y;
delt_y:=mid_y/mid_x;
end;
function menu:byte;
var str1,str2,str3:string[9];kl:byte;key:char;
begin
str1:='ФУНКЦИЯ';str2:='ПРОЦЕДУРА';str3:='ВЫХОД';
window(25,24,55,24);
textcolor(15);gotoxy(13,1);write(str2);
textcolor(15);gotoxy(25,1);write(str3);
textcolor(14);gotoxy(3,1);write(str1);kl:=1;
repeat
key:=readkey;
case key of
#75: begin
if kl=2 then begin kl:=1;
textcolor(15);gotoxy(13,1);write(str2);
textcolor(14);gotoxy(3,1);write(str1);
end;
if kl=3 then begin kl:=2;
textcolor(15);gotoxy(25,1);write(str3);
textcolor(14);gotoxy(13,1);write(str2);
end;
end;
#77: begin
if kl=2 then begin kl:=3;
textcolor(15);gotoxy(13,1);write(str2);
textcolor(14);gotoxy(25,1);write(str3);
end;
if kl=1 then begin kl:=2;
textcolor(15);gotoxy(3,1);write(str1);
textcolor(14);gotoxy(13,1);write(str2);
end;
end;
end;
until key=#13;
menu:=kl;
end;

begin
gotoxy (1,1);
write ('Лабораторная работа - 6, вариант - 13.');
startprg:
kl:=menu;
textcolor(15);
if kl=3 then goto exitprogr;
if kl=2 then labproc_q_a;
if kl=1 then goto funct;
goto startprg;
funct:
window (1,5,75,7);clrscr;
gotoxy (3,6);
write  ('Средние  значения  массивов  X  и  Y   и   их   отклонения   равны:
',mid_x:3:3,'; ',mid_y:3:3,'; ',delt_x:3:3,'; ',delt_y:3:3);
clreol;
goto startprg;
exitprogr:
clrscr;
end.


                        7. Входные и выходные данные.
Входные  данные  формируются  посредством  генератора  случайных   чисел   и
вносятся в программные массивы данных машиной  самостоятельно.  Это  сделано
для упрощения алгоритма  программы,  в  ущерб  вводу  данных  с  клавиатуры.
Причём в заданиях заносятся в массивы целочисленные данные. Это  с  деланно,
в частности, для задания А с целью увеличения количества нулей  в  матрицах.
Выводные данные в задании А представляют собой  целые  числа,  так  как  они
представляют собой количество нулей, а в задании Б – действительные числа.