Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ_5.doc
Скачиваний:
16
Добавлен:
14.02.2016
Размер:
420.86 Кб
Скачать

Кафедра прикладной математики

ПРАКТИКУМ № 5.

ТЕМА: РЕАЛИЗАЦИЯ В ИНТЕГРИРОВАННОЙ СРЕДЕ ПРОГРАММИРОВАНИЯ TURBO PASCAL АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ.

Цель работы: приобретение навыков работы в интегрированной среде программирования TURBO PASCAL; получить навыки программирования алгоритмов циклической структуры и реализации их на ЭВМ.

Цикл – это фрагмент программы, повторяемый многократно. В паскале три оператора цикла – while, repeat и for. В принципе, без них можно обойтись, поскольку любой цикл можно реализовать с помощью условного оператора if и оператора перехода goto, но операторы цикла гораздо удобнее и нагляднее. У каждого из них есть предпочтительная область применения.

Все циклы имеют схожую структуру (рис.1.). Операторы, ради многократного выполнения которых организуется цикл, называют телом цикла. Остальные операторы служат для управления процессом повторения вычислений: это начальные установки, проверка условия продолжения цикла и модификация параметров параметра цикла. Один проход цикла называется итерацией.

Н а этапе начальных установок (до входа в цикл) задаются значения переменных, которые в нем используются. Эти значения могут задаваться явно или неявно.

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации (для этого применяется процедура continue), так и цикла в целом (процедура break и оператор goto). Передавать управление извне цикла не рекомендуется, потому что при этом не выполнятся начальные установки. Иными словами, выйти из цикла можно в любой момент, а войти – только в начало.

Индивидуальные задания

ЗАДАНИЕ № 1.

Составить алгоритм и написать программу, которая вычислит и выведет на экран в виде таблицы значения функции, заданной графически (см. задание № 1 практикума №4), на интервале от xнач до xкон с шагом dx. Интервал и шаг задать таким образом, чтобы проверить все ветви программы. Таблицу снабдить заголовком

ЗАДАНИЕ № 2.

Составить алгоритм и написать программу.

Номер

варианта

З А Д А Н И Е

1.

Значения функции определены при различных значениях аргумента . Определить координаты точки , которая ближе всего расположена к началу координат, т.е. к точке (0;0).

2.

Значения функций и определить в точках . Определить, при каком x расстояние между и минимально.

3.

Значения функции определены при . Определить, сколько значений функции f(x) при заданных x являются отрицательными и сколько положительными.

4.

Значения функции f(x)=sin(x)+cos(x) определены при . Определить, сколько значений функции f(x) принадлежит к окружности радиусом R, центр которой расположен в точке (a; b).

5.

Значения функции f(x)=3x2+2x+1 определены при . Определить, сколько точек функции f(x) при заданных x расположены выше прямой y=x+3.

6.

Значения функции f(x)=x2+2x-3 определены при . Определить значение функции, которое ближе всего расположено к точке с координатами (x1; y1). Значения x0, hx, xn, x1, y1 задать произвольно.

7.

Значения функций и определены в точках . Определить, при каком x расстояние между f1(x) и f2(x) максимально.

8.

Значения функции определены при . Определить, сколько значений функции f(x) при заданных x расположены выше и ниже прямой y=0,555.

9.

Значения функций и определены в точках . Найти среднее значение расстояния между f1(x) и f2(x) в заданных точках.

10.

Значения функции f(x)=sin(x) заданы в точках . Определить количество точек функции f(x), расположенных между прямыми y=0,5 и y=-0,5.

11.

Значения функции f(x)=cos(x) заданы в точках . Определить количество точек функции f(x), расположенных выше прямой y=0,5 и ниже прямой y=-0,5.

12.

Значения функции заданы в точках . Определить среднее значение положительных значений функции f(x).

13.

Значения функции f(x)=x2+2x+2 заданы в точках . Определить количество точек функции f(x), расположенных от вершины параболы на расстоянии не менее а. Значения x0, hx, xn, а задать произвольно.

14.

Пусть значения функций и заданы в точках . Определить, при каком x расстояние между f1(x) и f2(x) максимально.

15.

Значения функций f1(x)=3x3+2x2+x+5 и f2(x)=2x3-4x2+2x-5 определены в точках . Определить минимальное и максимальное расстояние между функциями f1(x) и f2(x) в заданных точках.

16.

Значения функций и определены в точках . Определить расстояние между максимальными значениями функций f1(x) и f2(x).

17.

Значения функции f(x)=4x3-3x2+2x-1 определены в точках . Определить расстояние между максимальным и минимальным значениями функции f(x).

18.

Значения функций f1(x)=4x2+x-3 и f2(x)=8x3+x2+2x-4 определены в точках . Определить расстояние между минимальными значениями функций f1(x) и f2(x).

19.

Значения функции определены в точках . Определить среднее значение для отрицательных значений функции f(x).

20.

Значения функции f(x)=sin(x)+cos(x) определены при . Определить минимальное значение среди положительных значений функции f(x).

21.

Значение функции заданы в точках . Определить число точек функции f(x), значения которых превосходят величину b=2,345.

22.

Значения функции f(x)=x4+x2+x-3 заданы в точках . Определить среднее значение для заданных значений функции f(x).

23.

Значения функций , и f3(x)=x2+x+1 заданы в точках . Определить максимальные значения функций f1(x), f2(x) и f3(x).

24.

Значения функции f(x)=3x4+2x3-3x2-3 заданы в точках . Определить, каких значений функции f(x) больше, положительных или отрицательных.

25.

Значения функции заданы в точках . Определить максимальное и минимальное значения функции f(x).

ЗАДАНИЕ № 3.

Дано n-значное число longint. Произвести с ним действия согласно номеру варианта, составить алгоритм и программу.

Номер

варианта

З А Д А Н И Е

1.

Подсчитать количество четных цифр в числе.

2.

Подсчитать количество нечетных цифр в числе.

3.

Подсчитать количество цифр в числе, делящихся на 3 без остатка.

4.

Подсчитать количество цифр в числе, не превосходящих заданной цифры, введенной с клавиатуры.

5.

В исходном числе, содержащем нечетное количество цифр, вывести центральную цифру.

6.

Вывести введенное число в зеркальном отображении.

7.

Вывести только те цифры числа, которые не делятся на 3 без остатка.

8.

Подсчитать количество цифр, значения которых больше заданной цифры.

9.

Вывести на экран только нечетные цифры в порядке их расположения в числе.

10.

Вывести на экран только повторяющиеся цифры и общее количество их повторений.

11.

Вывести наименьшую цифру.

12.

Вывести наибольшую цифру числа.

13.

Вывести цифры, лежащие в интервале [a, b].

14.

Вывести те цифры, которые при делении на p дают в остатке q (p>q>=0).

15.

Заменить нулями все четные цифры.

16.

Вывести только те цифры, значения которых совпадают с местом (разрядом) этой цифры в числе. Для упрощения задачи вводите каждую цифру только один раз.

17.

Вывести только цифры самого младшего и самого старшего разряда.

18.

Вывести сумму всех четных цифр числа.

19.

Вывести сумму всех нечетных цифр числа.

20.

Вывести сумму наибольшей и наименьшей цифр числа.

21.

Вывести сумму всех цифр числа.

22.

Вывести разницу между цифрами старшего и младшего разряда числа.

23.

Если цифра старшего разряда больше цифры младшего разряда, то исходное число увеличить вдвое, в противном случае вычесть из него число, равное цифре старшего разряда.

24.

Если цифра младшего разряда четная, то вывести все четные цифры числа, в противном случае – все нечетные.

25.

Вывести разницу между максимальной и минимальной цифрами числа.

ЗАДАНИЕ № 4.

Разработать схему алгоритма и составить программу вычисления функции при заданных значениях аргументов. Результаты вывести на экран дисплея.

Номер

варианта

З А Д А Н И Е

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

ЗАДАНИЕ № 5.

Составить алгоритм и написать программу, которая вычисляет и выводит на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от xнач до xкон с шагом dx с точностью . Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда.

Номер

варианта

З А Д А Н И Е

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

После выполнения данного практикума студент должен знать:

  • При написании любого цикла надо иметь в виду, что в нем явно или неявно присутствуют четыре элемента, реализующие: начальные установки, тело цикла, модификацию параметра цикла и проверку условия продолжения цикла.

  • Области применения оператора цикла:

    • оператор for применяется, если требуется выполнить тело цикла заданное число раз;

    • оператор repeat используют, когда цикл требуется обязательно выполнить хотя бы один раз, например, при анализе корректности ввода данных;

    • оператор while удобнее во всех остальных случаях.

  • Выражение, определяющее условие продолжения циклов while и repeat, вычисляется в соответствии с приоритетами операций и должно иметь тип Boolean.

  • Для принудительного перехода к следующей итерации цикла используется процедура continue, для преждевременного выхода из цикла – процедура break.

  • Чтобы избежать ошибок при программировании циклов, рекомендуется:

  • заключать в блок тело циклов while и for, если в них требуется выполнить более одного оператора;

  • проверять, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения, а также возможно ли выполнение других операторов;

  • проверять, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;

  • если количество повторений цикла заранее не известно, предусматривать аварийный выход из цикла по достижении некоторого достаточно большого количества итераций.

Приложение № 1.

ПЕЧАТЬ ТАБЛИЦЫ ЗНАЧЕНИЙ ФУНКЦИИ

Написать программу печати таблицы значений функции sin для аргумента, изменяющегося в заданных пределах с заданным шагом.

Исходными данными являются начальное значение аргумента xn, конечное значение аргумента xk и шаг изменения аргумента dx. Все величины – вещественные и могут принимать любые значения на числовой оси. Результатом работы программы должна быть таблица, состоящая из двух столбцов – значений аргумента и соответствующих им значений функции. Таблица должна выглядеть следующим образом:

X

Y

-4.00

0.76

-3.00

-0.14

-2.00

-0.91

-1.00

-0.84

0.00

0.00

1.00

0.84

2.00

0.91

3.00

0.14

4.00

-0.76

Опишем алгоритм в словесной форме:

  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.

ПИФАГОРОВЫ ЧИСЛА

Написать программу, которая выводит на экран все пифагоровы числа, не превышающие 15.

Пифагоровы числа – это тройки натуральных чисел, таких, что треугольник, длины сторон которого пропорциональны (или равны) этим числам, является прямоугольным.

Решать эту задачу будем методом перебора вариантов. Возведя в квадрат каждую пару натуральных чисел в заданных пределах, проверим, не является ли их сумма квадратом натурального числа:

{***************************************************}

{Программа: PYTHAGOR. }

{Программист: Иванов И.И. }

{Дата выполнения: 10 апреля 2006 г. }

{***************************************************}

Program PYTHAGOR;

Const n = 15;

Var a, b, c, cx : integer;

Begin

For a := 1 to n do

For b := a to n do

Begin

cx := sqr(a) + sqr(b);

c := trunc(sqrt(cx));

if (sqr( c ) =cx) and (c <= n) then writeln(a:3, b:3, c:3)

end

End. { PYTHAGOR }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]