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

Контрольные вопросы

  1. Перечислить действия, реализуемые при выполнении условного оператора.

  2. Какие действия выполняются оператором перехода?

  3. Что такое вычислительный процесс разветвляющейся структуры? Как организовать разветвление вычислений: а) на две ветви; б) на три ветви?

  4. Составить последовательность операторов для вычис­ления величины z = 0, если х < -2; z=l, если -2 x 2; z = -1, если х > 2.

  5. Зачем необходимо при отладке программы тестиро­вать все ветви алгоритма?

  6. Указать последовательность действий, выполняемых при организации циклических участков программы с задан­ным числом повторений.

  7. Указать назначение и правила организации цикла.

  8. Перечислить возможные способы организации цикла с заданным числом повторений в изучаемом языке програм­мирования.

Лекция №13

Тема: Циклические программы.

Цель: Сформировать и развить умения и навыки составления и записи на языке Раskal циклических программ.

Количество часов – 4часа

Циклическая структура программы позволяет производить многократные вычисления группы операторов при изменении одного или нескольких параметров одновременно. В языке ПАСКАЛЬ имеются операторы цикла FOR, WHILE, REPEAT.

Оператор цикла FOR используется для организации цикла с известным числом повторений.

Общий вид записи:

- при увеличении значения параметра

FOR i:=m1 TO m2 DO s;

- при уменьшении значения параметра

FOR i:=m1 DOWNTO m2 DO s;

Где i – параметр цикла (не может быть величиной действительного типа); m1 и m2 могут быть записаны константами или выражениями, совпадающими по типу с параметром цикла. Шаг изменения параметра цикла равен 1.

Оператор цикла с предусловием WHILE используется для организации цикла с неизвестным числом повторений, переводится как «пока ..делать». Общий вид записи оператора:

WHILE b DO s;

где b – логическое выражение; s – тело цикла.

Значение переменных, входящих в условие, должны изменяться в теле цикла, иначе цикл не будет завершён.

Оператор цикла с постусловием Repeat используется для организации цикла с неизвестным числом повторений.

Общий вид записи оператора:

REPEAT s UNTIL b;

где s – тело цикла; b – логическое выражение.

В отличие от оператора WHILE оператор REPEAT выполняет проверку условий в конце оператора, поэтому он обеспечивает хотя бы одно вычисление при значении логического выражения TRUE т.е. цикл выполняется пока условие не станет истинным (пока оно ложно).

Пример 1 Вычислить и вывести на печать значения функции

при значениях х, изменяющихся от 0 до 3 с шагом 0,1.

Программа, реализующая этот алгоритм с оператором IF, имеет вид

PROGRAM TABULFUN (INPUT, OUTPUT);

LABEL 50;

VAR A, X, Y: REAL;

BEGIN

READ (A);

X:=0;

50:Y:=(A*A*A)/(SQR(A)+X*X);

WRITELN(X,Y);

X:=X+0,1;

IF X<=3,01 THEN GOTO 50;

END.

Эту же программу можно определить число повторений и использовать оператор цикла FOR.

PROGRAM TABULFUN (INPUT, OUTPUT);

VAR A, X, Y: REAL;

I: INTEGER;

BEGIN

READ (A);

X:=0;

FOR I:=1 TO 31 DO

BEGIN

Y:=(A*A*A)/(A*A+X*X);

WRITELN(X,Y);

X:=X+0.1

END

END.

Фрагмент программы с оператором цикла имеет вид:

WHILE X<=3.01 DO

<тело цикла>

Фрагмент программы с оператором цикла REPEAT, аналогичный программе с оператором WHILE, имеет вид

REPEAT

<тело цикла>

UNTIL X>3.01

Пример 2.

Вычислите сумму.

…+.

Способ 1.

Program prim 3a (input, output);

Var s: real;

N: integer;

Begin

S:=0; N:=1;

Where N<=50 DO

Begin

S:=s+1/N;

N:=N+1;

END;

Writeln (‘s=’,s); end.

Способ 2.

Program prim 3б(input, output);

Var s: real;

N: integer;

Begin

S:=0; N:=1;

Repeat

S:=s+1/N;

N:=N+1;

Untel N>50;

Writeln (‘s=’, s);

END.

Вычислить на ЭВМ значение интеграла приведенного в табл. 5.6, на заданном отрезке интегрирования [a, b] (в соответствии с вариантом задания). Считать заданное число разбиений отрезка интегрирования n и численный метод решения. Включить в программу вычисления точного значения интеграла и относительную погрешность вычисления в процентах.

Таблица 5.6

Вариант задания

Подынтегральная функция f(x)

Метод численного решения

Число отрезков n

Интервал интегрирования [a, b]

Требуемая точность 

1

Трапеций

60

[1; 4]

10-4

2

Прямоугольников

50

[1; 2,5]

0,510-3

3

Трапеций

40

[1; 3]

10-4

4

»

60

10-4

5

»

60

0,510-3

6

»

100

[0; 1]

10-4

7

Прямоугольников

50

[1; 2,5]

10-4

8

Трапеций

50

[0; 3]

0,510-3

9

Прямоугольников

100

[0; 2]

10-5

10

Трапеций

60

[0; ]

10-4

11

Прямоугольников

80

[1; 2]

0,510-4

12

Трапеций

50

[1; 2]

10-4

13

Прямоугольников

50

[0; 2]

10-4

14

Трапеций

100

[1; 2]

10-5

15

»

50

[1; 2]

0,510-3

В

Таблица 5.7

табл. 5.7 приведены выражения для первообразных функций .

Вариант задания

Первообразные функции

Вариант задания

Первообразные функции

1

9

2

10

3

11

4

12

5

13

6

14

7

15

8

Пример выполнения работы

Вычислить на ЭВМ методом трапеции значение интеграла

для a = 0; b = ;

k = 0,5, разбивая отрезок интегрирования на 60 частей. Для контроля вычислить точное значение интеграла и оценить на ЭВМ относительную погрешность метода.

Вычислить точное значение интеграла. Для k  0,9

.

Схема алгоритма решения задачи представлена на рис. 5.6. Блок 3 задает начальное значение суммы z, равное (fa + fb)/2; накопление суммы организованно циклически. Перед циклом значению x присваивается значение левого конца интервала интегрирования a. При каждом прохождении цикла в блоке 7 значение x увеличивается на шаг x, в блоке 8 вычисляется текущее значение ординаты функции f(x) и прибавляется к сумме z. После выполнения цикла (n-1) раз осуществляется переход к блоку 9, где вычисляется окончательное значение интеграла. Блоки 10, 11 вычисляют точное значение интеграла и относительную погрешность z в процентах.

Программа, реализующая схему алгоритма (рис. 5.6), имеет вид:

Программа на языке ПАСКАЛЬ:

PROGRAM PRIM5(INPUT, OUTPUT);

{ЛАБОРАТОРНАЯ РАБОТА п5}

{СТУДЕНТ ГРУППЫ РЛ – 21 ИВАНОВ И.И}

VAR A, B, K, X, Z, ZT, DZ, DX: REAL;

N, I:INTEGER;

BEGIN

WRITELN(‘ВВЕДИТЕ A, B, N’);

READ(A, B, N);

K: = 0.5;

Z: = (SQR(SIN(A))/(1+2*K*COS(A)+K*K)+

SQR(SIN(B))/(1+2*K*COS(B)+K*K))/2;

DX: = (B-A)/N; X: = A;

FOR I: =1 TO N-1 DO

BEGIN

X: = X+DX;

Z: = Z+SQR(SIN(X))/(1+2*K*COS(X)+K*K);

END;

Z: =Z*DX; ZT: = PI/2;

DZ: = ABS(ZT-Z)*100;

WRITELN(‘ПРИБЛИЖЕННОЕ ЗНАЧЕНИЕ Z=’, Z:9:5);

WRITELN(‘ТОЧНОЕ ЗНАЧЕНИЕ ZT=’, ZT:9:5);

WRITELN(‘ОТНОСИТЕЛЬНАЯ ПОГРЕШНОСТЬ ’,DZ:9:5);

END.