Процедуры передачи управления
В Паскале есть несколько стандартных процедур, изменяющих последовательность выполнения операторов:
· break - завершает выполнение цикла, внутри которого записана;
· continue - выполняет переход к следующей итерации цикла;
· exit - выходит из программы или подпрограммы, внутри которой записана;
· halt - немедленно завершает выполнение программы.
Кроме того, для передачи управления используется оператор перехода goto (см. лабораторную работу №3).
Рассмотрим пример применения процедур передачи управления.
Пример #1.
Программа вычисления значения функции Сh x(гиперболический косинус) с помощью бесконечного ряда Тейлора с точностью по формуле:
y = 1 + x2/2! + x4/4! + x6/6! + ... + x2n/(2n)! + ...
Этот ряд сходится при любых значениях аргумента. При увеличении номера n модуль члена ряда Cn стремится к нулю. При некотором n неравенство |Cn| >= eps перестает выполняться, и вычисления прекращаются.
Общий алгоритм прост: задать начальное значение суммы ряда, а затем многократно вычислять очередной член ряда и добавлять его к ранее найденной сумме, пока абсолютная величина очередного члена ряда не станет меньше заданной точности.
До выполнения программы предсказать, сколько членов ряда потребуется просуммировать, невозможно. В цикле такого рода есть опасность, что он никогда не завершится - как из-за возможных ошибок в вычислениях, так и из-за ограниченной области сходимости ряда. Кроме того, в данном случае при увеличении абсолютной величины аргумента значения функции сильно возрастают и могут переполнить разрядную сетку. Поэтому для надежности программы необходимо предусмотреть аварийный выход из цикла с печатью предупреждающего сообщения по достижении некоторого максимально допустимого количества итераций.
Прямое вычисление члена ряда по приведенной выше общей формуле, когда х возводится в степень, вычисляется факториал, а затем числитель делится на знаменатель, имеет два недостатка, которые делают этот способ непригодным. Первый недостаток - большая погрешность вычислений. Второй недостаток связан с эффективностью вычислений: как легко заметить, при вычислении очередного члена ряда нам уже известен предыдущий, поэтому вычислять каждый член ряда "от печки" нерационально.
Для уменьшения количества выполняемых действий следует воспользоваться рекуррентной формулой получения последующего члена ряда через предыдущий Cn+1 = Cn * T, где T - некоторый множитель. Подставив в эту формулу Cn и Cn+1, получим выражение для вычисления Т:
Ниже приведен текст программы с комментариями.
program ch;const MaxIter = 500; { максимальное количество итераций }var x, eps : double; { аргумент и точность } c, y : double; { член ряда и его сумма } n : integer; { номер члена ряда } done : boolean; { признак достижения точности }begin writeln('Введите аргумент и точность:'); readln(x, eps); done := true; c := 1; y := c; { первый член ряда и нач. значение суммы } n := 0; while abs(c) > eps do begin c := c * sqr(x) /(2 * n + 1)/(2 * n + 2); { очередной член ряда } y := y + c; { добавление члена ряда к сумме } inc(n); if n > MaxIter then begin { аварийный выход из цикла } writeln('Ряд расходится!'); done := false; break end end; if done then writeln('Для аргумента ', x, ' значение функции: ', y, #13#10, 'вычислено с точностью', eps, ' за ', n, ' итераций'); readln;end.
Оператор для записей with. Оператор работы над записями with позволяет при обращении к полям указывать не имя переменной, а только идентификатор поля:
with human do
begin
name:='муха';
surname:='цокотуха';
date:=1924
end;
Этот фрагмент можно было задать иначе:
human.name:='муха';
human.surname:='цокотуха';
human.date:=1924;
ЗАДАНИЯ
Задача №1. Вычислить и вывести на экран в виде таблицы значения функции, заданной графически (см. задание 1 лабораторной работы № 3), на интервале от xнач до xкон с шагом dx. Интервал и шаг задать таким образом, чтобы проверить все ветви программы. Таблицу снабдить заголовком и шапкой. Пример результата выполнения программы на экране:
Таблица значений функции y=sin(x) для -4<x<4 с шагом 1
x
| y
| -4.00
-3.00
-2.00
-1.00
0.00
1.00
2.00
3.00
4.00
| 0.76
-0.14
-0.91
-0.84
0.00
0.84
0.91
0.14
-0.76
| Организовать ввод и вывод результатов с помощью файлов input.txt и output.txt
Формат входных данных
Первая строка входного файла содержит 3 вещественных числа — xнач, xкон и dx.
Формат выходных данных
Необходимо вывести для каждого допустимого значения результат вычисления функции ровно с 2 знаками после запятой. Каждое значение должно быть на отдельной строке.
Пример входного файла
| Пример выходного файла
| -1.5 1.5 1.0
| 0.75
0.25
-0.25
-0.75
|
Задача №2. Для десяти выстрелов, координаты которых задаются с клавиатуры, вывести текстовые сообщения о попадании в мишень из задания 2 лабораторной работы №3.
Формат входных данных
Первая строка входного файла содержит два числа n и R — количество выстрелов и значение R. Следующие n строк содержат координаты выстрелов — в i+1-й строке содержится пара вещественных чисел x, y — координаты i-го выстрела.
Формат выходных данных
Выходной файл должен содержать n строк. В i-й строке должно быть true, если соответствующий выстрел попадает в мишень и false в противном случае.
Пример входного файла
| Пример выходного файла
| 10 2
1 5
-1 5
|
true
true
|
Задача №3.Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от хнач до xкон с шагом dx с точностью е. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда. Номер варианта задания равен номеру компьютера.
Задача №4.Составить программу, в соответствии с вариантом, равным номеру компьютера, результаты вывести на экран и в файл (выходной файл должен также содержать, фамилии, номер группы).
Задача №5.Составить программу, в соответствии с вариантом, равным номеру компьютера, результаты вывести на экран и в файл.
Дополнительные задания
Задача №6*. Для любого целого числа N>7 найти все такие пары целых чисел x и y, что 3x+5y=N.
Задача №7*. Вычислить значение арифметического выражения:
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|