Пример 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, либо только другие операторы).

Наши рекомендации