1. Мета роботи. P>
Метою роботи є написання програми мовою програмування
«Pascal» для DOS з використанням підпрограм і функцій, завдання дляяких позначені варіантом лабораторної роботи. p>
2. Постановка завдання.
Головним завданням програміста є створення найбільш простого, і,отже, швидкого алгоритму програми, що виконує обидва завдання - А та
Б, причому завдання А необхідно оформити у вигляді процедури, а завдання Б ввигляді функції. При цьому зробити програму якомога простіше у використанні. P>
3. Опис алгоритму програми.
Крім короткого основного модуля програми, який управляє процедурамиі функціями, в програму включені дві функції і одна процедура, вони ж іє підпрограмами, які було необхідно використовувати за умовоюлабораторної роботи.
Процедура представляє собою завдання А, в якому необхідно булопідрахувати кількість нулів у матрицях. У програмі матриці представленідвомірним масивом, числа в які заносяться автоматично за допомогоювипадкового їх генератора, після чого над ними проводяться обчислення.
Необхідно підкреслити, що як для занесення до матриці випадкових чисел,так і для підрахунку їх нульових елементів, використовувався один подвійний циклоператора FOR.
Перша функція - це програмне меню, яке надає користувачевіпрограми вибір обчислення завдань і вихід. Відповідно друга функція --це завдання Б, для виконання якого автор програми використав ті жпринципи побудови підпрограми, що і для виконання підпрограми завдання
А. p>
4. Блок-схема програми.
На нашій наступній сторінці. P>
p>
5. Загальні умови.
У програмі використовувалися два види умов. Перше з них - умоваоператора IF. Воно присутнє в основному модулі програми, якийуправляє підпрограмами (тобто процедурами і функціями) і виконуєзавдання А або Б в залежності від вибору користувача з меню програми.
Можна також вийти з програми без виведення на екран результатів.
Друга умова - це умова оператора FOR, яке є прихованимумовою. Оператор перевіряє, чи всі елементи масивів заповнені. P>
6. Оригінальний текст програми.program lab6v13;uses crt;constm1 = 20;n1 = 20;m2 = 100;n2 = 100;varkl, 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;labelexitprogr, funct, startprg;procedure labproc_q_a;beginnull_el_a: = 0;null_el_b: = 0;for cycle00: = 0 to n1 do beginfor cycle01: = 0 to m1 do begina [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;beginsum_x: = 0;sum_y: = 0;for cycle00: = 0 to m2 do beginfor cycle01: = 0 to n2 do beginx [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;beginstr1: = 'ФУНКЦІЯ'; 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;repeatkey: = readkey;case key of
# 75: beginif 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: beginif 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; p>
begingotoxy (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. p>
7. Вхідні та вихідні дані.
Вхідні дані формуються за допомогою генератора випадкових чисел івносяться в програмні масиви даних машиною самостійно. Це зробленодля спрощення алгоритму програми, на шкоду вводу даних з клавіатури.
Причому у завданнях заносяться в масиви цілочисельні дані. Це з удавано,зокрема, для завдання А з метою збільшення кількості нулів в матрицях.
Вивідні дані у завданні А є цілі числа, тому що вониявляють собою кількість нулів, а в завданні Б - дійсні числа. p>
p>