КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример 1.2 выполнения заданияНайти значение функции (1.2), упростив вычисления за счет использования скобочных форм и/или дополнительных переменных (в этом предложении и в дальнейшем конструкция «А и/или Б» обозначает «или А, или Б, или А и Б одновременно»). Для контроля правильности результата выполнить вычисление по формуле (1.2) без использования скобочных форм и дополнительных переменных. Проверить работу программы на значениях A=(1; -1; 2; -2; 4; -4), X=(0,5; 2).
program Project1_2; {$APPTYPE CONSOLE} uses SysUtils, Math; var A, B, C, X, Y1, Y2: Real; begin {Ввод исходных данных} Write('Введите X и A : '); ReadLn(X,A); B:=A/2; C:=Sqr(B); {Вычисление выражения} { - с использованием дополнительных переменных} Y1:=(Power(B,X)-Log10(B+1))/C/(B-1); { - непосредственно по формуле (1.2)} Y2:=(Power(A/2,X)-Log10(A/2+1))/(IntPower(A/2,3)-Sqr(A/2)); {Вывод вычисленных значений с надписями} WriteLn(' Y1 Y2 '); WriteLn(Y1:12:7,' ',Y2:12:7); ReadLn; end.
Представленная программа не предусматривает обработку исключений (см. Приложение 2), поэтому введём в задание дополнительные условия: при возникновении любого исключения, связанного с вычислением функции, предусмотреть в программе его обработку с выводом типа исключения и завершением работы программы нажатием клавиши Enter. В соответствие с ним в программу следует включить обработки всех (из числа рассмотренных в Приложении 2) исключений для вещественных данных, например, так.
program Project1_2; {$APPTYPE CONSOLE} uses SysUtils, Math; var A, B, C, X, Y1, Y2: Real; begin {Ввод исходных данных} Write('Введите X и A : '); ReadLn(X,A); B:=A/2; C:=Sqr(B); try {Попытка вычислить выражения} { - с использованием дополнительных переменных} Y1:=(Power(B,X)-Log10(B+1))/C/(B-1); { - непосредственно по формуле (1.2)} Y2:=(Power(A/2,X)-Log10(A/2+1))/(IntPower(A/2,3)-Sqr(A/2)); except {Вычислить выражение не удалось} on EZeroDivide do begin WriteLn('Исключение типа "деление на 0" '); WriteLn('Невозможно вычислить Y при A =',A,' и X =',X); WriteLn('Нажмите Enter для завершения работы программы.'); ReadLn; Halt; //Завершить выполнение программы end; on EInvalidOp do begin WriteLn('Исключение типа "невыполнимая операция" '); WriteLn('Невозможно вычислить Y при A =',A,' и X =',X); WriteLn('Нажмите Enter для завершения работы программы.'); ReadLn; Halt; //Завершить выполнение программы end; on EOverflow do begin WriteLn('Исключение типа' ,’ "переполнение вещественной переменной" '); WriteLn('Переменная не может хранить вычисленное значение'); WriteLn('Нажмите Enter для завершения работы программы.'); ReadLn; Halt; //Завершить выполнение программы end; end;//try except {Вывод вычисленных значений с надписями} WriteLn(' Y1 Y2 '); WriteLn(Y1:12:7,' ',Y2:12:7); ReadLn; end.
Это позволит по каждому из исключений вывести краткое пояснение на русском языке о причине его возникновения, однако потребует дублирования операторов WriteLn('Нажмите Enter для завершения работы программы.'); ReadLn; Halt; так как запрещено совмещение с операторами on других операторов (в блоке except допускается использовать либо только операторы on, либо только другие операторы).
|