Программирование алгоритмов со структурой вложенных циклов

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

1. Для чего нужны разделы описания переменных и констант?

2. Что такое тип? Какие типы данных Вы знаете?

3. Чем отличаются переменные и константы?

4. Что такое типизированная константа?

5. Правила записи арифметических выражений.

6. Приоритет арифметических операций.

7. Какие существуют способы задания значений переменным и константам?

2. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЯЮЩЕЙСЯ

СТРУКТУРЫ

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

Оператор перехода имеет общий вид записи: GOTO N;

где N - метка оператора.

Условный оператор имеет два вида записи:

IF b THEN a; IF b THEN a, ELSE а2;

где b - логическое выражение (имеющее значение "истина" или "ложь"), а,а1,а2- операторы простой или составной. Оператор выбора имеет вид:

CASE <переключатель> OF

константа 1: оператор 1:

константа 2: оператор 2;

………

константа N; оператор N

END;

Пример 2.1

Найти действительные корни квадратного уравнения ах2 + bx + с = O Уравнение имеет решение, если дискриминант D = b2 - 4ac не является отрицательным.. Если D > O, то уравнение имеет корни

Если D = O, то x1 = х2.

Реализуем данный алгоритм в программу, в которой используются операторы перехода и условий.

PROGRAM KOREN;

VAR A, B, C, D, Xl,X2: REAL;

LABEL 100,200;

BEGIN

 

WRITELN (‘ INPUT A, B, C’);


READLN (A, B, C);

D: = B*B-4 *A*C

IF D < 0.0 THEN GOTO 100

ELSE BEGIN

Xl: = (-B + SQRT(D))/(2 * A);

X2: = (-B - SQRT(D))/(2*A);

WRITELN (‘Корни уравнения’); WRITELN (‘X1=’, Xl’, X2=’, X2)

END;

GOTO 200;

100: WRITELN (‘уравнение не имеет решения’)

200: END.

B данной программе условный оператор содержит составной оператор для фразы ELSE.

Для лучшего понимания передачи управления в программе используется режим трассировки (пошаговое выполнение). Для этого выберите команду RUN / Тгасе Into (или нажмите F7). Первый оператор в теле программы begin (строка 4) будет подсвечен (исполняющая полоса).

Теперь нажмите F7 еще раз, чтобы перейти к исполнению программы. Следующая исполняемая строка программы - оператор WRITELN в строке 5.

Снова нажмите F7. Ваш экран мигнет, затем высветит программу с исполняющей полоской на операторе READLN в строке 6. Произошло следующее: ТУРБО-ПАСКАЛЬ переключился на экран исполнения (экран, на котором высвечиваются результаты), выполнил первый оператор WRITELN и возвратился на редактирующий экран.

Снова нажмите F7. Вы опять окажетесь на исполняющем экране. Напечатайте три числа вещественного типа через пробел и нажмите Enter. Вы снова окажетесь на редактируемом экране с исполняющей полоской на строке 7 с оператором присваивания.

Нажмите клавишу F7 еще несколько раз. Проследите, куда передается управление и какие операторы выполняются.

Когда исполняющая полоска окажется на последнем операторе End, нажмите F7, и выполнение программы закончится. Заметьте, что исполняемая полоска исчезла.

Пример 2.2

Вычислить значение функции

Из математической формулировки задачи видно, что вычислительный процесс имеет три ветви. Ho есть значение аргумента (в данном случае x = b), при котором функция z не определена. Поэтому добавляется еще одна, четвертая ветвь.

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

Программа имеет вид:

PROGRAM USL;

VAR X, Y, Z: REAL;

LABEL 11,22;

BEGIN

WRITELN (‘INPUT X, A, B’);

READLN (X, A, B);

IF X< = A THEN BEGIN

Z:=LN(x+l);

GOTO 11

END;

IF (X > A) AND (X < B) THEN BEGIN

Z:=COS(X)+SQR(SIN (X));

GOTO 11

END;

IF X > B THEN BEGIN

Z:=EXP(X)+6;

GOTO 11

END;

WRITELN (‘Функция не определена’),

GOTO 22;

ll:WRTTELN(‘Z= ‘,Z)

22: END.

Пример 2.3

Определить, попадает ли точка A с координатами Ха и Ya внутрь круга с радиусом R. Центр круга совпадает с началом координат.

Очевидно, что точка A находится внутри круга, если ее расстояние от

начала координат, равное , будет меньше радиуса R, т.е. если

,< R ИЛИ .

Тогда программа этой задачи может быть такой: PROGRAM KRUG;

VAR XA, YA, R, L: REAL;

BEGIN

WRITELN (‘INPUT XA, YA, R’);

READLN (XA,YA,R);

L:=SQR (XA)+SQR(YA);

IFL<SQR(R)

THEN WRITELN (‘Точка А внутри круга’) ELSE WRITELN (‘Точка A вне круга’)

END.

Задания к теме № 2

Задачи 11-20

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


11)


11)


12)



13) В =

14)

15)

16) d =

17)

18) y =

19) K =

20) m =

Задачи 21-30

Выяснить, принадлежит ли точка с координатами X, Y замкнутой области, заданной уравнениями. Область показать на графике.

21)

22)

23)

24)

25)

26)

27)

28)

29)

30)


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

1. Что такое вычислительный процесс разветвляющейся структуры?

2. Каковы две формы записи условного оператора?

3. B чем разница по смыслу между полной и кратной формой записи
условного оператора?

4. Может ли условный оператор содержать в себе другие условные
операторы?

5. Может ли условный оператор содержать оператор перехода?

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

7. Для чего предназначен оператор выбора?

8. Можно ли в примере 2.3 вместо условного оператора использовать
оператор выбора?


3. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ

Циклическая структура программы позволяет производить многократные вычисления группы операторов при изменении одного или нескольких параметров одновременно. B языке ТУРБО-ПАСКАЛЬ имеются три оператора цикла.

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

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

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

FOR I:= m1 TO m2 DOS;

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

FOR I:=m1 DOWNTO m2 DO S;

где I - параметр цикла;


m1 - начальное значение параметра;

m2 - конечное значение параметра;

S - тело цикла, состоящее из простого или составного оператора.

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

WHlLE b DO S;

где b - логическое выражение; S - тело цикла, состоящее из простого или составного оператора.

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

REPEAT S UNTIL b;

где S - тело цикла, состоящее из одного или нескольких простых операторов; b - логическое выражение.

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

3,1. Вычисление суммы и произведения

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



При первом выполнении цикла вычисляется значение S1 = S0 + у1, которое должно быть равно y1. Поэтому начальному значению суммы перед циклом следует присвоить значение ноль.

ПримерЗ.1.1

Составить программу для вычисления функции


 
 

PROGRAM SYMMA,

VAR I: INTEGER;

W:REAL; CONST N = 10;

BEGIN

W: = O; {начальное значение суммы}

FOR I: = 1 TO N DO

W: = W + cos(I) /I;

WRITELN (‘SUMMA =’, W: 7: 4)

END.

Аналогично накапливается и произведение, с той лишь разницей, что для его накопления используется формула Pj = Pi-l · уi, а начальное значение произведения должно быть равно единице.

Программирование алгоритмов со структурой вложенных циклов

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


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


Пример 3.2.1 Составить программу для вычисления функции



(символом "П"обозначено накопление произведения).

PROGRAM PROIZV;

VOR I, J: BYTE;

Z: REAL;

BEGIN

Z: = 1

FOR I: = 1 TO 10 DO

FOR J: = 1 TO 5 DO

Z: = Z * ABS (SIN(I) * COS(J)) / (I + J); WRITELN(‘PROIZVEDENIE=’, Z: 8: 4)

END.

Задания к теме № 3


Задачи 31-40

Вычислить сумму и произведение:

31) а) б)

32) а) б)

33) а) б)

34) а) б)

35) а) б)

36) а) б)

37) а) б)

38) а) б)

39) а) б)

40) а) б)

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

1)Каково назначение операторов цикла?

2)Укажите отличительные особенности каждого из трех операторов цикла.

3)Будет ли выполняться циклическая часть программы, если логическое
выражение является ложным с самого начала в операторе цикла WHILE?

4)Чему равен шаг изменения параметра цикла в операторе FOR?

5)Будет ли выполняться циклическая часть программы, если логическое
выражение истинно с самого начала в операторе REPEAT?

6)Как изменяются параметры внешнего и внутреннего циклов во вложенных
циклах?

3.3. Итерационные циклы 3.3.1. Табулирование функции

Задача табулирования функции на интервале от Хнач до Хкон с шагом h является очень распространенной.


Пример 3.3.1

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

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

Можно использовать цикл с заданным числом повторений, вычисляемым по выражению

где xk и Xn - конечное и начальное значение аргумента;

h - шаг изменения аргумента;

скобки ] [ означают, что берется целая часть от деления.

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

PROGRAM TABULl;

VAR XN, XK, HX, A, X, Y: REAL

I, N: ENTEGER;

BEGIN

READLN (XN, XK, HX, A);

N:=TRUNC(XK-XN) / HX) + 1; {Выделение целой части числа} X:=XN;

FOR I:=1 TO N DO

BEGIN

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

WRITELN (X, Y);

X:=X+HX

END

END.

При использовании других операторов цикла для реализации данной задачи будут отсутствовать описания переменных целого типа I, N и оператор присваивания, вычисляющий число повторений N. Т.к. заранее неизвестно число повторений, то здесь имеет место итерационный цикл. Выход из цикла выполняется по некоторому критерию. B данном случае критерием выхода из цикла будет являться условие сравнения текущего значения аргумента X с его конечным значением X к.

Программа, использующая оператор цикла WHILE:

PROGRAM TABUL2;

VAR XN, XK, HK, A, X, Y: REAL;

BEGIN

READLN(XN, XK, NX, A); X:=XN;'

WHILE X<=XK DO

BEGIN

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

WRITELN(X, Y);

X:=X+HX

END

END.

Программа, использующая оператор цикла REPEAT: PROGRAM TABUL3;

VAR XN, XK, HX, A, X, Y: REAL;

BEGIN

READLN(XN, XK, HK, A);

X:=XH;

REPEAT

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

WRITELN(X, Y);


X:=X + HX

UNTIL X>XK

END.

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

Ниже приводится программа, содержащая операторы управления и реализующая пример 3.3.1.

PROGRAM TABUL4;

VAR XN, XK, HX, A, Y: REAL;

LABEL 10;

BEGIN

READLN (XN, XK, HK, A);

X:=XN;

10: Y:=(A*A*A)/(SQR(A) + X*X); WRITELN(X:4:1, Y:8:4);

X:=X + HX;

IF Х<=ХК THEN GOTO 10

END.

3.3.2. Вычисление суммы членов бесконечного ряда

с заданной точностью

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


Пример 3.3.2.1

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

Здесь имеет место итерационный цикл, т.к. заранее неизвестно, при

каком n выполняется условие .

 

Обозначим переменные: Е-заданная точность, S - сумма ряда, N -номер члена ряда, Y - значение члена ряда.

PROGRAM SUMMA1;

VAR Y, S, E: REAL;

N: MTEGER;

LABEL 10, 20;

BEGIN

 

READLN (E);

S:=0;

N:=0; 10:Y:=l/(EXP(5*LN(N)); {Y=l/N^5}

S:= S + Y:

IF ABS(Y)<E THEN GOTO 20;

N:=N+ 1;

GOTO 10;

20: WRITELN (‘SUMMA=’, S:10:5,‘N=‘, N)

END.

Для разработки этой программы можно использовать оператор цикла REPEAT. Тело цикла включает в себя вычисление члена ряда, накопление суммы и вычисление номера члена ряда.

PROGRAM SUMMA2;

VAR Y, S: REAL;

N: INTEGER,

ВЕGIN

READLN (E);

S:=0;

N:=0;

REPEAT

Y:=l/EXP(5*LN(N));

S:=S + Y;

N:=N + 1

UNTIL Y<E;

WRITELN(‘SUMMA=’, S, ‘N=’, N)

END.

Пример 3.3.2.2

Определить количество членов ряда C1=1; Cn=4n+Cn-1 (n=2, 3,...), которые не превышают 180.

Параметром, изменяющимся в этом цикле, является номер члена ряда n. Переменную C будем считать простой переменной. Тогда формула для вычисления текущего члена ряда имеет вид C = 4n +C. Чтобы использовать эту формулу для вычисления второго члена ряда, необходимо задать перед циклом начальное значение C равное 1.

PROGRAM KOLICH;

VAR C, N: ITEGER;

CONST M=180;

BEGIN

C:=1;

N:=1;

WRITE (C);

REPEAT

N:=N+1;


C:=4*N+C;

WRITE (C)

UNTIL C>180;

WRITELN;

WRTTELN(‘KOLICH=’, N)

END.

Задачи 41-50

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

Таблица 1

    Исходные Диапазон и шаг
вариан Функция Условие данные изменения
та       аргумента
         
  t 2 t>2 а = -0,5 b = 2 t [0,2;3] t =0,15
  a=l,5 x [0,8;2] x = 0,1
  а = 2,8 b = -0,3 x [l;2] х = 0,05
44
           
  x l,4 x>l,4     а= 1,65 х [0,7; 2] х = 0,1
  x 2 х>2 а = 2,3 х [0,2; 2,8] х = 0,2

Окончание табл. 1

         
46 x>a х а а = 2,5 x [l;5] x = 0,5
  bx<l bx 1 b=l,5 x [0,l;l] х = 0,1
  x>3 x 3,5 а =1,2 x [2;5] х = 0,25
  x>l x l а =20,3 х [0,5; 2] x =0,1
  x 0,5 x>0,5 t = 2,2 x [0,2;2] x = 0,2

Задачи51-60

5 1. Вычислить сумму ряда, члены которого находятся по формуле

и превышают 0,01, где c= 10; i=l,2,....

52. Определить сумму членов ряда а1, =1 ak =ak-1·5k, (где k = 2,3,...),
которые не превышают 200.

53. Определить, через сколько итераций члены ряда , (где a = 47;

i= 1,2,...) станут меньше 1.

54. Найти сумму членов ряда (где i = 1, 2,..,), меньших 1.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: