Алгоритм вычисления знаменателя следующий:
¨ Присваиваем функции значение 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 и управление передается в основную программу.
Ввод переменной С осуществляем с помощью процедуры InputC. В заголовке процедуры описан формальный параметр-переменная: Var с : integer - получаемое значение вводимой переменной. Алгоритм работы процедуры InputC: ¨ В цикле вводим с клавиатуры значение переменной сL, одновременно проверяется находится ли значение сL в диапазоне -32768 ... +32767 (диапазон значений для целых чисел типа INTEGER). Тело цикла расположено между Repeat ...и ... Until. Подробнее о циклах см. [4]. ¨ Переменной с присваиваем значение равное целой части (функция trunc) переменной cL c:= trunc( cL); ¨ Полученное значение переменной с передается в основную программу. Алгоритм выполнения главной программы: В цикле Repeat .... Until(ch=’n’) or (ch:=’ N’) выполняем ввод переменных , проверку знаменателя на ноль и вычисление значения выражения для одного комплекта данных a, b, c: · Вводим значение переменной а: Readln(а); · Вводим значение переменной b: Readln(b); · Обращаемся к процедуре InputC(с) для ввода значения целочисленной переменной c (значение с передается в основную программу из процедуры InputC). · Проверяем значение функции Flag. Если оно True , то выводим значение выражения на экран, иначе управление переходит на метку L1, повторяем ввод переменных a, b, c до тех пор, пока знаменатель примет значение, отличное от нуля. · После вывода результата на экране дисплея появляется сообщение - Опять? (y/n), переменной ch присваивается значение нажатой клавиши (оператор ReadKey читает символ с клавиатуры - N или Y). Если вы нажали N, выполнение программы заканчивается, если нажали клавишу Y, - управление передается на начало цикла и вы можете повторить вычисление с новыми значениями переменных a,b,c.
ПРИЛОЖЕНИЕ 3 Пример выполнения контрольной работы № 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 c учетом области допустимых значений. Программе присвоено имя Work2: · В фигурных скобках (комментарий) записано условие задачи варианта 30. · В поле вызова библиотечных модулей USES записан модуль CRT. · В поле задания констант определены значения строковых констант: inv1, inv2, inv3, inv4, inv5, invA, invB. · В поле меток описана метка L1. · В поле описания переменных описаны переменные - a, b, x : integer; ch : char. · Далее следуют описания функции F и процедуры Input. · Записана главная программа, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи. Функция F определена как BOOLEAN. В заголовке функции описаны входные параметры a,b:integer (передаются из основной программы) и выходной параметр x:integer ( передается в основную программу). В теле функции используются локальные переменные x1: real и s1: string.
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (255)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |