Алгоритм выполнения функции 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 в основную программу. 7. В случае, если знаменатель не равен нулю, вычисляется значение x1:=(b-5.0)/a. 8. Далее проверяется, входит ли значение х1 в допустимый диапазон (для переменных типа INTEGER). 9. Если да, то целая переменная получает значение х:=trunc(x1). 10. Если значение х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. Вводим с клавиатуры ее значение - READ LN(a L). 3. Проверяем входит ли это значение в допустимый диапазон: ¨ если да, то A:=TRUNC(a L), ¨ если нет , то переменная s1получает значение s1:=inv5+inv4 (‘Вводимое значение выходит за диапазон [-32768...32767]!!!’). ¨ На экран выводится значение inv1 (‘Повторите ввод’). ¨ Управление передается на метку L для повторного ввода значения А. Эта процедура может быть использована для ввода и контроля диапазона любой целочисленной переменной типа INTEGER. Описание главной программы 1. В цикле REPEAT ... UNTIL очищается экран (ClrScr), выводится на экран вид исходного задания, через процедуру INPUT вводятся переменные a и b, через функцию F вычисляется искомое значение x. ¨ Если значение функции F равно False, управление передается на метку L1 для повторного ввода переменных а и b . ¨ Если значение функции F равно TRUE, - выводится результат (переменная х). 2. На экране появляется ‘Опять? (Y/N)’. 3. Переменной ch:=ReadKey и в зависимости от ответа управление передается на начало цикла (ch:=’Y’) или программа заканчивает выполнение ( ch:= ‘N’).
ПРИЛОЖЕНИЕ 4 Пример выполнения контрольной работы № 3 ЛИСТИНГ ПРОГРАММЫ Work3.pas program Work3; {$N+,E+} { Вариант 60 - элементы массива типа LONGINT. Найти сумму первых K отрицательных элементов массива A. } Uses CRT; Const NN=20; {Максимальная длина вектора} invN=' N'; invK=' K'; inv1='Повторите ввод'; inv4='выходит за диапазон [-2147483648..2147483647]!!!!'; inv5='Вводимое значение '; Type ArrayA=Array [1..NN] of LongInt; Var k,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; {Главная программа} Begin Repeat ClrScr; Input(invN,NN,N); {ввод конкретной длины массива N<=NN } {ввод числа считаемых отрицательных элементов массива K<=N} Input(invK,N,K); InputVector(N,A); OutputVector(N,A); Writeln('Сумма первых K отрицательных элементов массива A=', Summa(k,N,A):15:0); Writeln('Повторить? (y/n)'); ch:=ReadKey; Until (ch='n') or (ch='N'); End. Для получения результата в контрольной работе №3 (вариант 60) необходимо ввести фактическое значение длины массива N (1<= N<= NN), значение числа считаемых отрицательных элементов массива К ( K<= N) и значения элементов исходного массива A[i], i=1,...,N (с проверкой на диапазон LONGINT ). Имя программы - WORK3. · В фигурные скобки включены директивы компилятора (см. Прил. 8 ) для обработки вещественной суммы типа EXTENDED: ¨ $N+ - использовать числовой сопроцессор (реализовать операции с плавающей точкой аппаратно); ¨ $E+ -включить режим программной эмуляции сопроцессора. · В поле описания библиотек, констант и переменных заданы стандартный модуль CRT, определены константы: NN, invN, invK, inv1, inv4, inv5. · Описан собственный тип данных ArrayA для описания массива длиной NN, элементы которого имеют тип LongInt, - Type ArrayA=Array[1..NN] of Longint; · Описаны переменные k, N:Integer и массив A:ArrayA; задана символьная переменная ch. · Далее идут описания процедур Input, InputVector, OutputVector, и функции Summa. · Записана главная программа, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи.
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (211)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |