Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Разработать схему алгоритма и составить программу вычисления функции при заданных значениях аргументов. Результаты вывести на экран дисплея.
После выполнения данного практикума студент должен знать: v При написании любого цикла надо иметь в виду, что в нем явно или неявно присутствуют четыре элемента, реализующие: начальные установки, тело цикла, модификацию параметра цикла и проверку условия продолжения цикла. v Области применения оператора цикла: Ø оператор for применяется, если требуется выполнить тело цикла заданное число раз; Ø оператор repeat используют, когда цикл требуется обязательно выполнить хотя бы один раз, например, при анализе корректности ввода данных; Ø оператор while удобнее во всех остальных случаях. v Выражение, определяющее условие продолжения циклов while и repeat, вычисляется в соответствии с приоритетами операций и должно иметь тип Boolean. v Для принудительного перехода к следующей итерации цикла используется процедура continue, для преждевременного выхода из цикла – процедура break. v Чтобы избежать ошибок при программировании циклов, рекомендуется: ü заключать в блок тело циклов while и for, если в них требуется выполнить более одного оператора; ü проверять, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения, а также возможно ли выполнение других операторов; ü проверять, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла; ü если количество повторений цикла заранее не известно, предусматривать аварийный выход из цикла по достижении некоторого достаточно большого количества итераций. Приложение № 1.
ПЕЧАТЬ ТАБЛИЦЫ ЗНАЧЕНИЙ ФУНКЦИИ Написать программу печати таблицы значений функции sin для аргумента, изменяющегося в заданных пределах с заданным шагом. Исходными данными являются начальное значение аргумента xn, конечное значение аргумента xk и шаг изменения аргумента dx. Все величины – вещественные и могут принимать любые значения на числовой оси. Результатом работы программы должна быть таблица, состоящая из двух столбцов – значений аргумента и соответствующих им значений функции. Таблица должна выглядеть следующим образом:
Опишем алгоритм в словесной форме: 1. Ввести исходные данные: xn, xk, dx. 2. Вывести заголовок таблицы. 3. Принять xn в качестве первого значения аргумента. 4. Вычислить значение функции. 5. Вывести строку таблицы (текущее значение аргумента и соответствующее ему значение функции). 6. Перейти к следующему значению аргумента. 7. Если оно не превышает конечное значение, повторить шаги 4 – 6, иначе закончить. Шаги 4 – 6 повторяются многократно, поэтому для их выполнения надо организовать цикл. На каждом проходе цикла требуется хранить одно значение аргумента и одно значение функции, поэтому для них достаточно завести по одной переменной вещественного типа (x и y). Переменная x будет содержать текущее значение аргумента, а y – соответствующее ему значение функции:
{***************************************************} {Программа: TABL. } {Цель: табулирование функции. } {Программист: Иванов И.И. } {Дата выполнения: 10 апреля 2006 г. } {***************************************************} Program TABL; Var xn, xk, dx, x, y: real; Begin Writeln(‘Введите xn, xk, dx’); Read(xn, xk, dx); Wriyeln(‘---------------------‘); Writeln(‘| x | y ‘); Writeln( ‘--------------------‘); x: =xn; While x< =xk do begin y: =sin(x); Writeln(‘|’, x: 9: 2, ‘ |’, y: 9: 2, ‘ |’); x: =x+dx end; Writeln(‘----------------------‘) End. {TABL}
Следует обратить внимание, что условие продолжения цикла записано в его заголовке и проверяется до входа в цикл. Таким образом, если задать конечное значение аргумента, меньшее начального, даже при отрицательном шаге цикл не будет выполнен ни разу. Параметром этого цикла, т.е. переменной, управляющей его выполнением, является x. Для правильной работы цикла необходимо присвоить параметру начальное значение до входа в цикл, поэтому блок начальных установок цикла присутствует в явном виде. В данном случае при отсутствии этого оператора переменной x будет присвоено значение 0, поскольку в Паскале глобальные переменные обнуляются автоматически. Для перехода к следующему значению аргумента текущее значение наращивается на величину шага и заносится в ту же переменную. Перед запуском программы для параметра цикла необходимо проверить: ü присвоено ли ему начальное значение; ü изменяется ли он на каждой итерации цикла; ü верно ли записано условие продолжения цикла.
Приложение № 2. ВЫЧИСЛЕНИЕ СУММЫ РЯДА Написать программу вычисления значения функции sin с помощью степенного ряда с точностью по формуле Этот ряд сходится на всей числовой оси. Для достижения заданной точности требуется суммировать члены ряда до тех пор, пока абсолютная величина очередного члена не станет меньше или равна . Запишем в общем виде формулу для вычисления n-го члена ряда: На первый взгляд может показаться, что придется организовывать циклы для расчета факториала и степеней. При этом можно получить очень большие числа, при делении которых друг на друга произойдет потеря точности, поскольку количество значащих цифр, хранимых в ячейке памяти, ограничено. Кроме того, большие числа могут переполнить разрядную сетку. Легко заметить, что (n+1)-й член ряда вычисляется после n-го, поэтому программа получится более простой и эффективной, если находить член ряда не с «нуля», а умножением предыдущего члена на некоторую величину. Найдем эту величину. Для этого запишем формулу для (n+1)-го члена ряда, подставив в предыдущее выражение (n+1) вместо n: Теперь найдем выражение, на которое надо будет умножить Cn, чтобы получить Cn+1: Запишем алгоритм вычисления суммы в словесной форме: 1. Ввести исходные данные (аргумент и точность). 2. Задать начальные значения номеру члена ряда, первому члену ряда и сумме ряда. 3. Организовать цикл: 1) вычислить очередной член ряда; 2) добавить его к сумме ряда; 3) перейти к следующему члену ряда; 4) проверить, достигнута ли точность вычислений. 4. Вывести значение функции. Определить заранее, сколько членов ряда потребуется просуммировать для достижения точности, невозможно, поскольку при анализе условия выхода используется переменная, вычисляемая на каждой итерации цикла. Такие циклы потенциально опасны, поэтому для предотвращения зацикливания полезно предусмотреть аварийный выход из цикла по достижении некоторого максимально допустимого количества итераций с выдачей предупреждающего сообщения. Ниже приведен текст программы. На каждой итерации требуется хранить значение одного члена ряда, поэтому все члены ряда формируются в одной и той же переменной с:
{***************************************************} {Программа: SINUS. } {Цель: вычисление суммы ряда. } {Программист: Иванов И.И. } {Дата выполнения: 10 апреля 2006 г. } {***************************************************} Program SINUS; Const MaxIter = 500; Var x, eps, y, c: double; n: integer; done: boolean; Begin Writeln(‘Введите аргумент и точность: ’); Readln(x, eps); done: = true; c: =x; y: =c; n: =1; While abs( c ) > eps do begin c: =-c * sqr(x) / 2 / n / (2*n+1); y: =y + c; inc(n); if n < = MaxIter then continue; Writeln(‘|’Ряд расходится’); Done: = false; break end; if done then Writeln(‘Аргумент: ‘, x: 10: 6, ‘Значение функции: ’, y: 10: 6, ‘Вычислено с точностью ‘, eps: 8: 6, ‘за’, n, ‘итераций’); readln End. {SINUS}
Первый член ряда равен x, поэтому, чтобы при первом проходе цикла значение второго члена вычислялось правильно, начальное значение n должно быть равно 1. Максимально допустимое количество итераций удобно задать с помощью именованной константы. Для аварийного выхода из цикла применяется процедура break, которая обеспечивает переход к первому после цикла оператору. Поскольку выход в случае как аварийного, так и нормального завершения цикла происходит в одну и ту же точку программы, вводится булева переменная done, которая предотвращает печать значений функции после выхода из цикла, когда точность вычислений не достигнута. Создание подобных переменных-«флагов», принимающих значение «истина» в случае успешного окончания вычислений и «ложь» в противном случае, является распространенным приемом программирования.
Приложение № 3. КОЛИЧЕСТВО КВАДРАТОВ В ПРЯМОУГОЛЬНИКЕ Дан прямоугольник. Написать программу, определяющую, на сколько квадратов можно его разрезать, если каждый раз отрезать квадрат максимально возможной площади. Все длины сторон должны быть натуральными числами. Исходными данными являются два натуральных числа – длины сторон прямоугольника. Алгоритм решения задачи состоит в выборе большей стороны и определении, сколько раз в ней целиком поместится меньшая сторона. Для остатка большей стороны повторяется та же процедура. Цикл завершается, когда остаток становится равным нулю. Текст программы:
{***************************************************} {Программа: KVADRAT. } {Программист: Иванов И.И. } {Дата выполнения: 10 апреля 2006 г. } {***************************************************} Program KVADRAT; Var a, b, k, n, buf: integer; Begin Writeln(‘Введите стороны прямоугольника’); Read(a, b); n: = 0; Repeat If a< b then begin buf: = a; a: = b; b: = buf end; k: = a div b; a: = a mod b; Writeln(k, ‘ квадратов ‘, b, ‘ x ‘, b); Inc(n, k) Until a = 0; Writeln(‘Всего квадратов: ‘, n); Readln End. {KVADRAT}
Приложение № 4.
ПИФАГОРОВЫ ЧИСЛА |
Последнее изменение этой страницы: 2017-03-14; Просмотров: 1601; Нарушение авторского права страницы