Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 Разработка программ линейн структуры.doc
Скачиваний:
8
Добавлен:
09.02.2015
Размер:
223.74 Кб
Скачать

Пример 1.2 выполнения задания

Найти значение функции

(1.2),

упростив вычисления за счет использования скобочных форм и/или дополнительных переменных (в этом предложении и в дальнейшем конструкция «А и/или Б» обозначает «или А, или Б, или А и Б одновременно»). Для контроля правильности результата выполнить вычисление по формуле (1.2) без использования скобочных форм и дополнительных переменных.

Проверить работу программы на значениях A=(1; -1; 2; -2; 4; -4), X=(0,5; 2).

  1. program Project1_2;

  2. {$APPTYPE CONSOLE}

  3. uses

  4. SysUtils, Math;

  5. var

  6. A, B, C, X, Y1, Y2: Real;

  7. begin

  8. {Ввод исходных данных}

  9. Write('ВведитеXиA: ');

  10. ReadLn(X,A);

  11. B:=A/2;

  12. C:=Sqr(B);

  13. {Вычисление выражения}

  14. { - с использованием дополнительных переменных}

  15. Y1:=(Power(B,X)-Log10(B+1))/C/(B-1);

  16. { - непосредственно по формуле (1.2)}

  17. Y2:=(Power(A/2,X)-Log10(A/2+1))/(IntPower(A/2,3)-Sqr(A/2));

  18. {Вывод вычисленных значений с надписями}

  19. WriteLn(' Y1 Y2 ');

  20. WriteLn(Y1:12:7,' ',Y2:12:7);

  21. ReadLn;

  22. end.

Представленная программа не предусматривает обработку исключений (см. Приложение 2), поэтому введём в задание дополнительные условия: при возникновении любого исключения, связанного с вычислением функции, предусмотреть в программе его обработку с выводом типа исключения и завершением работы программы нажатием клавиши Enter. В соответствие с ним в программу следует включить обработки всех (из числа рассмотренных в Приложении 2) исключений для вещественных данных, например, так.

  1. program Project1_2;

  2. {$APPTYPE CONSOLE}

  3. uses

  4. SysUtils, Math;

  5. var

  6. A, B, C, X, Y1, Y2: Real;

  7. begin

  8. {Ввод исходных данных}

  9. Write('ВведитеXиA: ');

  10. ReadLn(X,A);

  11. B:=A/2;

  12. C:=Sqr(B);

  13. try

  14. {Попытка вычислить выражения}

  15. { - с использованием дополнительных переменных}

  16. Y1:=(Power(B,X)-Log10(B+1))/C/(B-1);

  17. { - непосредственно по формуле (1.2)}

  18. Y2:=(Power(A/2,X)-Log10(A/2+1))/(IntPower(A/2,3)-Sqr(A/2));

  19. except

  20. {Вычислить выражение не удалось}

  21. on EZeroDivide do

  22. begin

  23. WriteLn('Исключение типа "деление на 0" ');

  24. WriteLn('Невозможно вычислить Y при A =',A,' и X =',X);

  25. WriteLn('Нажмите Enter для завершения работы программы.');

  26. ReadLn;

  27. Halt;//Завершить выполнение программы

  28. end;

  29. on EInvalidOp do

  30. begin

  31. WriteLn('Исключение типа "невыполнимая операция" ');

  32. WriteLn('Невозможно вычислить Y при A =',A,' и X =',X);

  33. WriteLn('Нажмите Enter для завершения работы программы.');

  34. ReadLn;

  35. Halt; //Завершить выполнение программы

  36. end;

  37. on EOverflow do

  38. begin

  39. WriteLn('Исключение типа'

  40. ,’ "переполнение вещественной переменной" ');

  41. WriteLn('Переменная не может хранить вычисленное значение');

  42. WriteLn('Нажмите Enter для завершения работы программы.');

  43. ReadLn;

  44. Halt; //Завершить выполнение программы

  45. end;

  46. end;//tryexcept

  47. {Вывод вычисленных значений с надписями}

  48. WriteLn(' Y1 Y2 ');

  49. WriteLn(Y1:12:7,' ',Y2:12:7);

  50. ReadLn;

  51. end.

Это позволит по каждому из исключений вывести краткое пояснение на русском языке о причине его возникновения, однако потребует дублирования операторов

  1. WriteLn('Нажмите Enter для завершения работы программы.');

  2. ReadLn;

  3. Halt;

так как запрещено совмещение с операторами onдругих операторов (в блокеexceptдопускается использовать либо только операторыon, либо только другие операторы).