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

Алгоритм виконання функції f

  1. Спочатку функції F присвоюється значення TRUE і перевіряється b>a.

  2. Якщо умова виконується, тоді обчислюється значення x1:=b/4.0*a.

  3. Інакше перевіряється b=a.

  4. Якщо так, то х1:=-55.

  5. Якщо ж ця умова не виконується , то залишається умова b<a, у якій треба перевірити на нуль знаменник a виразу (b-5)/a.

  6. Якщо ця умова (a=0) виконується (знаменник у виразі (b-5)/a дорівнює нулю), обчислюється складений оператор після THEN, взятий у дужки - begin ... end:

  • У цьому випадку стрічкова змінна s1:=inv1+inv2 буде дорівнює:

Ділення на нуль!!!!!!! Повторіть введення’.

  • Це повідомлення виводиться на екран.

  • Функція F приймає значення FALSE і керування передається по EXIT в головну програму.

  1. У випадку, якщо знаменник не дорівнює нулю, обчислюється значення x1:=(b-5.0)/a.

  2. Далі перевіряється, чи входить значення х1 у допустимий діапазон (для змінних типу INTEGER).

  3. Якщо так, то ціла змінна одержує значення х:=trunc(x1).

  4. Якщо значення х1 виходить за допустимий діапазон, то:

  • s1:=inv3+inv4 (‘Результат виходить за діапазон [-3268...32767]!!!!’);

  • значенння S1 виводиться на екран - Writeln(s1);

  • виводиться на екран отримане значення Х1 - Writeln(x1);

  • і нове запрошення - Writeln(Inv1) (‘Повторіть ввод’).

  • Функція F приймає значення FALSE і керування по EXIT передається в головну програму.

Далі описана процедура введення вихідного значення змінної А з перевіркою на область допустимих значень. Ім'я процедури - Input. У заголовку описані формальні параметри A:integer і inv:string (ім'я змінної). У тілі процедури використовуються локальні змінні al:real і s1:string, у полі опису міток визначена мітка L.

Алгоритм виконання процедури Input

  1. На екран повідомляємо про введення змінної А - Write(‘Введіть значення ’+ inv,'===>'). При виконанні цього оператора на екрані з'являється повідомлення: Введіть значення А===>.

  2. Вводимо з клавіатури її значення - READLN(a).

  3. Перевіряємо чи входить ці значення в допустимий діапазон:

  • якщо так, то A:=TRUNC(a),

  • якщо ні, то змінна s1отримує значення s1:=inv5+inv4

(' значення, що вводиться, виходить за діапазон [-32768...32767]!!!’).

  • На екран виводиться значення inv1 (‘Повторіть введення’).

  • Керування передається на мітку L для повторного введення значення А.

Ця процедура може бути використана для введення і контролю діапазону будь-якої цілої змінної типу INTEGER.

Опис головної програми

  1. У циклі REPEAT ... UNTIL очищається екран (ClrScr), виводиться на екран вид вихідного завдання, через процедуру INPUT вводяться змінні a і b, через функцію F обчислюється шукане значення x.

  • Якщо значення функції F дорівнює False, керування передається на мітку L1 для повторного введення змінних а і b .

  • Якщо значення функції F дорівнює TRUE, - виводиться результат (змінна х).

  1. На екрані з'являється ‘Знову? (Y/N)’.

  2. Змінна ch:=ReadKey і в залежності від відповіді керування передається на початок циклу (ch:=Y’) чи програма закінчує виконання (ch:= ‘N’).

Додаток 3

Приклад виконання лабораторної роботи № 3

ЛІСТИНГ ПРОГРАМИ Work3.pas

program Work3;

{$N+,E+}

{ Варіант 60 - елементів масиву типу LONGINT.

Знайти суму перших K від’ємних елементів масиву A.

}

Uses CRT;

Const NN=20; {Максимальна довжина вектора}

inv=' N';

inv=' К';

inv1='Повторіть введення';

inv4='виходить за діапазон [-2147483648..2147483647]!!!!';

inv5=' значення, що вводиться, ';

Type ArrayA=Array [1..NN] of LongInt;

Var k,N:integer;

A:Array;

ch:char;

{введення значення N, 1<=N<=NN}

Procedure Input(inv:String; NN:Integer; Var N:integer);

Begin

Repeat

Write('введіть значення'+inv,'=====>');

Readln(N);

Until (N<=NN) and (N>=1);

End;

{введення N значень компонентів вектора A[i], -2147483648<=A[i]<= 2147483647}

Procedure InputVector(N:integer;Var A:arrayA);

Label L;

Var i :integer;

Ra:Real;

s1:String;

Begin

for i:=1 to N do

Begin

L:

Write('введіть значення елемента вектора A[',і,']=====>');

Readln(Ra);

if (Ra>=-2147483648.0)and(Ra<=2147483647.0) then A[i]:=trunc(Ra)

else

Begin

s1:=inv5+inv4;

Writeln(s1);

Writeln(inv1);

goto L;

End

End;

End;

{Висновок значень компонентів вектора A пострічно}

Procedure OutputVector(N:integer; A:arrayA);

Var i :integer;

Begin

Writeln(' -і-і-і- Вихідний вектор -і-і-і-');

for i:=1 to N do

Write(A[i]:11,' ');

Writeln;

End;

{Перебування суми перших K від’ємних елементів масиву A довжиною N}

Function Summa(k,N:Integer; A:ArrayA):Extended;

Var i,Kk:integer;

S:Extended;

Begin

Kk:=1; {Лічильник від’ємних елементів масиву}

S:=0;

for i:=1 to N do

if (A[i]<0) and (Kk<=k) then

Begin

S:=S+A[i];

Kk:=Kk+1

End;

Summa:=S

End;