- •Курс лабораторних робіт
- •Порядок виконання контрольної роботи
- •Зміст пояснювальної записки
- •Лабораторна робота № 1
- •Варіанти
- •Контрольні питання
- •Лабораторна робота № 2
- •Варіанти
- •Контрольні питання
- •Лабораторна робота № 3 організація циклів і робота з одномірними масивами
- •Контрольныe питання
- •Лабораторна робота № 4
- •Варіанти
- •Контрольні питання
- •Список використаної і літератури, що рекомендується
- •Додаток 1
- •Алгоритм обчислення знаменника наступний:
- •Алгоритм обчислення значення виразу:
- •Алгоритм роботи процедури Input:
- •Алгоритм виконання головної програми:
- •Додаток 2
- •Алгоритм виконання функції f
- •Алгоритм виконання процедури Input
- •Опис головної програми
- •Додаток 3
- •{Головна програма}
- •Опис процедури Input
- •Опис процедури InputVector
- •Опис процедури OutputVector
- •Опис функції Summa
- •Опис головної програми
- •Додаток 4
- •Опис процедури Input
- •Опис процедури InputMatrix.
- •Опис процедури OutputMatrix.
- •Опис процедури Evaluate.
- •Опис головної програми
Алгоритм обчислення знаменника наступний:
Присвоюємо функції значення Flag:=True;
Обчислюємо знаменник і присвоюємо змінній х2 значення виразу в знаменнику: х2:=12.0*з+a-b;
Якщо знаменник дорівнює нулю (х2=0), функція Flag приймає значення рівне False і керування передається в основну програму (Exit).
Якщо знаменник не дорівнює нулю, значення функції Flag залишається рівним True і значення функції і змінної х2 передаються в основну програму.
У цьому фрагменті використаний умовний оператор if-then - див. [4].
Безпосереднє значення виразу визначимо за допомогою функції F. Функція F описана як Real. Змінні a, b, c (вхідні) передаються з основної програми. Значення функції F обчислюється і передається в основну програму.
Алгоритм обчислення значення виразу:
обчислюємо значення виразу в чисельнику : х1:=ArcTan(b)+c*b-a/4;
присвоюємо функції F значення вихідного виразу: F:=x1/x2 і керування передається в основну програму.
Введення змінної с здійснюємо за допомогою процедури Input. У заголовку процедури описаний параметр-змінна: Var с : integer - одержуване значення введеної змінної.
Алгоритм роботи процедури Input:
У циклі вводимо з клавіатури значення змінної с, одночасно перевіряється чи знаходиться значення с у діапазоні -32768 ... +32767 (діапазон значень для цілих чисел типу INTEGER). Тіло циклу розташоване між Repeat ...і ... Until. Докладніше про цикли див. [4].
Змінній с присвоюємо значення рівне цілій частині (функція trunc) змінної c c:=trunc(c);
Отримане значення змінної с передається в головну програму.
Алгоритм виконання головної програми:
У циклі Repeat .... Until(ch=’n’) or (ch:=’N’) виконуємо введення змінних , перевірку знаменника на нуль і обчислення значення виразу для одного комплекту даних a,b,c:
Вводимо значення змінної а: Readln(а);
Вводимо значення змінної b: Readln(b);
Звертаємося до процедури Input(с) для введення значення цілої змінної c (значення с передається в головну програму з процедури Input).
Перевіряємо значення функції Flag. Якщо воно True , то виводимо значення виразу на екран, інакше керування переходить на мітку L1, повторюємо введення змінних a, b, c доти, поки знаменник прийме значення, відмінне від нуля.
Після висновку результату на екрані дисплея з'являється повідомлення - Знову? (y/n), змінної ch присвоюється значення натиснутої клавіші (оператор ReadKey читає символ із клавіатури - N чи Y). Якщо ви натиснули N, виконання програми закінчується, якщо натиснули клавішу Y, - керування передається на початок циклу і ви можете повторити обчислення з новими значеннями змінних a,b,c.
Додаток 2
Приклад виконання лабораторної роботи № 2
ЛІСТИНГ ПРОГРАМИ Work2.pas
Program Work2;
{Варіант 30: a*b/4, якщо b > a
X = -55, якщо b = a
(b - 5)/a, якщо b < a
}
Uses CRT;
Const
inv1='Повторите введення';
inv2=' Ділення на нуль!!!!!!! ';
inv3='Результат ';
inv4='виходить за діапазон [-32768..32767]!!!!';
inv5=' значення, що вводиться, ';
invA='A';
invB='B';
Label L1;
var
a,b,x : Integer;
ch : Char;
{Обчислення значення X з перевіркою на допустимий діапазон
для змінної типу INTEGER}
function F (a,b:Integer; Var x:Integer) : Boolean;
Var x1 : Real;
s1 : String;
Begin
F:=True;
if b>a then x1:=b/4.0*a {Тільки так, інакше буде помилка обчислення!!!!}
else if b=a then x1:=-55
else if a=0 then
Begin
s1:=inv2+inv1;
Writeln(s1);
F:=False;
Exit;
End
else x1:=(b-5.0)/a;
{-і-і-і Перевірка результату на допустимий діапазон -і-і-і}
if (x1>=-32768)and(x1<=32767) then x:=trunc(x1)
else
Begin
s1:=inv3+inv4;
Writeln(s1);
Writeln(x1);
Writeln(inv1);
F:=False;
Exit;
End
End;
{Процедура введення вихідного значення змінної А з перевіркою на область
допустимих значень}
Procedure Input(Var A:integer; inv:String);
Label L;
Var aL :Real;
s1 : String;
Begin
L:
Write('Введіть значення '+inv,'===>');
Readln(aL);
if (aL>=-32768)and(aL<=32767) then A:=trunc(aL)
else
Begin
s1:=inv5+inv4;
Writeln(s1);
Writeln(inv1);
goto L;
End
End;
{Головна програма}
begin
Repeat
ClrScr;
Writeln(' Варіант 30');
Writeln(' a*b/4, якщо b > a');
Writeln(' X = -55, якщо b = a');
Writeln(' (b - 5)/a, якщо b < a');
Writeln;
L1:
Input(b,invB);
Input(a,invA);
if F(a,b,x) then Writeln ('x=',x)
else goto L1;
Writeln('Знову? (y/n)');
ch:=ReadKey;
Until (ch='n') or (ch='N');
end.
У контрольній роботі №2 необхідно обчислити значення цілої змінної Х в залежності від значень теж цілих змінних a і b з обліком області допустимих значень.
Програмі присвоєне ім'я Work2:
У фігурних дужках (коментар) записана умова задачі варіанта 30.
У поле виклику бібліотечних модулів USES записаний модуль CRT.
У поле завдання констант визначені значення строкових констант: inv1, inv2, inv3, inv4, inv5, inv, inv.
У поле міток описана мітка L1.
У поле опису змінних описані змінні - a, b, x : integer; ch : char.
Далі випливають описання функції F і процедури Input.
Записано головну програму, що викликає потрібні процедури і функції, відповідно до алгоритму рішення задачі.
Функція F визначена як BOOLEAN. У заголовку функції описані вхідні параметри a,b:integer (передаються з головної програми) і вихідний параметр x:integer ( передається в головну програму). У тілі функції використовуються локальні змінні x1: real і s1: string.
