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

Практика по программированию - 2012 ПЗ - II курс

Занятие №4

Тема: Программирование циклических алгоритмов. Вычисление конечных сумм. Вычисление суммы бесконечного ряда. Табулирование функции.

Краткие теоретические сведения:

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

Существует три вида цикла, имеющих собственные операторы на языке Паскаль для их записи. Эти виды имеют собственные условные названия: "Пока", "До", "С параметром". Друг от друга они несколько отличаются и используются каждый для своего класса задач.

Цикл «Для…» Цикл «Пока…» Цикл «Повторять…до»

Оператор цикла с параметром for (вариант 1):

For <перемен>:=<нач.зн.> to <кон.зн.> do <оператор>;

  • нач.зн. ≤ кон.зн., шаг изменения параметра цикла +1.

  • <перемен> – параметр цикла – переменная целого типа;

  • нач.зн., кон.зн. – начальное и конечное значения – выражения целого типа;

  • количество повторений цикла определяется по формуле |кон.зн.– нач.зн.|+1.

Если в цикле необходимо выполнить более одного оператора, то конструкция оператора будет иметь вид:

For <перемен>:=<нач.зн.> to <кон.зн.> do

begin

<оператор 1>;

<оператор 2>;

:

<оператор N>;

end;

Выполнение оператора начинается с вычисления начального значения. Выполняется присваивание <параметр цикла>:=<начальное значение>.

Затем циклически выполняется:

  1. Если параметр цикла меньше или равен конечному значению, то переход к п.2, иначе оператор заканчивает работу.

  2. Выполнение операторов после слова DO.

  3. <пар_цик> увеличивается на 1.

Оператор цикла с параметром for (вариант 2):

For <перемен>:=<нач.зн.> downto <кон.зн.> do <оператор>;

  • нач.зн. ≥ кон.зн., шаг изменения параметра цикла –1.

Выполняется этот цикл по следующему алгоритму:

1. переменной-параметру присваивается начальное значение;

2. выполняется тело цикла;

3. переменная-параметр автоматически увеличивается на 1 (в первом случае формата);

4. если параметр превышает конечное значение, то происходит выход из цикла, иначе - переход к пункту 2.

Примечание: при использовании Downto параметр автоматически уменьшается на 1, а выход из цикла происходит тогда, когда параметр становится меньше конечного значения.

Пример: Найти сумму квадратов всех натуральных чисел от 1 до 100.

Program Ex3;

Var A : Integer;

S : Longint;

Begin

S:=0;

For A:=1 To 100 Do S:=S+A*A;

Writeln(S)

End.

Оператор цикла с предусловием while:

While <условие> do <оператор>;

  • <условие> - выражение логического типа;

  • <оператор> выполняется до тех пор, пока выполняется <условие>. Проверка условия осуществляется вначале цикла;

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

  • количество повторений цикла, если задано конечное значение параметра цикла, определяется по формуле – (|кон.зн.–нач.зн|+1)/h, где h – шаг изменения параметра цикла.

Если в цикле необходимо выполнить более одного оператора, то конструкция оператора будет иметь вид:

While <условие> do

begin

<оператор 1>;

<оператор 2>;

:

<оператор N>;

end;

Пока значение выражения <условие> равно TRUE, выполняются <операторы>. Если условие FALSE, то выполнение оператора заканчивается.Здесь оператор выполняется до тех пор, пока логическое выражение TRUE. Для того чтобы цикл завершился, оператор в теле цикла должен в некоторый момент изменить значение логического условия. Если условие ложно изначально, то тело цикла не будет выполнено ни разу.

Если условие изначально истинно и в теле цикла нет действий, влияющих на истинность этого условия, то тело цикла будет выполняться бесконечное количество раз. Такая ситуация называется "зацикливанием". Прервать зациклившуюся программу может-либо оператор (нажав Ctrl+C), либо аварийный останов самой программы, в случае переполнения переменной, деления на ноль и т.п., поэтому использовать структуру цикла следует с осторожностью, хорошо понимая, что многократное выполнение должно когда-нибудь заканчиваться.

Пример: Найти сумму квадратов всех натуральных чисел от 1 до 100.

Program Ex1;

Var A: Integer;

S: Longint;

Begin

A:=1; S:=0;

While A<=100 Do

Begin

S:=S+A*A;

A:=A+1

End;

Writeln(S)

End.

Оператор цикла с постусловием repeatuntil:

Repeat

<оператор 1>;

<оператор 2>;

:

<оператор N>;

Until <условие>;

  • <условие> – выражение логического типа;

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

Циклы Whiledo и RepeatUntil могут быть использованы при составлении циклических программ с неизвестным числом повторений (итераций), т.е. когда конечное значение параметра цикла не задано. В этом случае этот цикл называется итерационным.

Оператор выполняется хотя бы один раз. Затем проверяется условие. Если его значение FALSE, то <тело цикла> повторяется, иначе оператор заканчивает работу.

Здесь оператор выполняется до тех пор, пока логическое выражение FALSE. В теле цикла можно указывать несколько любых операторов Паскаля без дополнительных операторных скобок. Для выхода из цикла необходимо, чтобы операторы тела цикла изменили значение логического условия на TRUE. Тело цикла этого оператора выполняется хотя бы один раз.

Пример: Найти сумму квадратов всех натуральных чисел от 1 до 100.

Program Ex2;

Var A : Integer;

S : Longint;

Begin

A:=1; S:=0;

Repeat

S:=S+A*A;

A:=A+1

Until A>100;

Writeln(S)

End.

Пример 1. Вычислить сумму .

Б

Программа:

Program Symma;

Var n,k:integer;

s:real;

Begin

Write('n=');

Readln(n);

s:=0;

For k:=1 to n do

S:=S+(sqr(k)+1)/(2*k+3);

Writeln('s=',s:5:3);

Readln;

End.

лок-схема:

Пример 2. Вычислить значения функции y = x sin(x), на интервале x  [n,m] с шагом hx.

Программа:

Program Zadacha;

Var

n,m,hx,x,y:real;

Begin

Write('n=');Readln(n);

Write('m=');Readln(m);

Write('hx=');Readln(hx);

x:=n;

While x<=m do

begin

y:=x*sin(x);

Writeln('y=',y:4:2);

x:=x+hx;

End;

Readln;

End.

Блок-схема:

Пример 3. Вычислить сумму значений функции y = 1 / x, c точностью до e = 0.01. Начальное значение аргумента x0 = 1, шаг аргумента hх = 0.3. Посчитать количество вычислений значения функции (итераций).

Программа:

Program Iteracia;

Const

e=0.01;

h=0.3;

Var

x,y,s:real;

k:integer;

Begin

x:=1;k:=0;s:=0;

Repeat

y:=1/x;

s:=s+y;

k

:=k+1;

x:=x+h;

Until y<e;

Writeln('s=',s:3:2);

Writeln('k=',k);

Readln;

End.

Б лок-схема:

Лабораторная работа №4

Вычисление конечных сумм. Вычисление суммы ряда с заданной точностью.

Составление таблиц значений функций.

Задание 1

Составьте программу, реализующую алгоритм вычисления суммы данного ряда.

Записать результат работы программы при заданном значении аргумента.

Номер варианта

Сумма ряда

Значение N

Исходные данные

1.

20

х=2,4

2.

20

х=0,8

3.

10

х=1,3

4.

10

х=1,3

5.

20

х=2,4

6.

15

х=0,8

7.

15

х=4,1

8.

20

х=3,2

9.

10

х=2,5

10.

15

х=2,1

11.

15

х=2,1

12.

10

х=2,1

13.

15

х=1,1

Задание 2

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

Номер варианта

Функция

Диапазон изменения аргумента

Шаг изменения аргумента

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

Задание 3

Составить программу для вычисления суммы бесконечного ряда с погрешностью ε.

а) Процесс суммирования прекращается, как только выполнится неравенство ε, где -текущий член ряда суммирования.

b) Процесс суммирования прекращается, как только выполнится неравенство ε, где -текущий член ряда суммирования, а - предыдуий член ряда.

Номер варианта

Сумма ряда

Точность вычислений

1.

ε=10-3

2.

ε=10-3

3.

ε=10-2

4.

ε=10-4

5.

ε=10-3

6.

ε=10-3

7.

ε=10-3

8.

ε=10-2

9.

ε=10-3

10.

ε=10-3

11.

ε=10-4

12.

ε=10-4

13.

ε=10-4

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