Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторки програмування.doc
Скачиваний:
12
Добавлен:
16.05.2015
Размер:
385.02 Кб
Скачать

Алгоритм обчислення знаменника наступний:

  • Присвоюємо функції значення 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.