Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Основы программирования и алгоритмические языки [13].doc
Скачиваний:
35
Добавлен:
02.05.2014
Размер:
660.48 Кб
Скачать

Алгоритм выполнения функции 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(aL).

  3. Проверяем входит ли это значение в допустимый диапазон:

  • если да, то A:=TRUNC(aL),

  • если нет , то переменная 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’).

Приложение 4 пример выполнения контрольной работы № 3 листинг программыWork3.Pas

program Work3;

{$N+,E+}

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

Найти сумму первых K отрицательных элементов массива A.

}

UsesCRT;

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

invN=' N';

invK=' K';

inv1='Повторите ввод';

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

inv5='Вводимое значение ';

TypeArrayA=Array [1..NN] of LongInt;

Vark,N:integer;

A:ArrayA;

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[',i,']=====>');

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;