Слайд 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 Слайд 26 Слайд 27 Слайд 28 Слайд 29 Слайд 30 Слайд 31 Слайд 32 Слайд 33 Слайд 34 Слайд 35 Слайд 36 Слайд 37 Слайд 38 Слайд 39 Слайд 40 Слайд 41 Слайд 42 Слайд 43 Слайд 44
1: Циклические алгоритмы Лекция 5
2: План лекции Оператор безусловного перехода Повторяющиеся действия Циклы с предусловием Циклы с постусловием Циклы со счетчиком Сложноциклические структуры Решение задач.
3: Оператор безусловного перехода Оператор безусловного перехода – goto. goto ; Для его использования, необходимо описать метки в разделе описаний, на которые будет осуществляться переход. Label metka1, metka2; Меткой может быть число от 1 до 9999, либо последовательность латинских букв и цифр.
4: Оператор безусловного перехода Оператор перехода предназначен для указания того, что выполнение программы должно продолжаться с точки программы, обозначенной меткой, значение которой стоит в операторе перехода. Метка в тексте программы располагается непосредственно перед помеченным оператором и отделяется от него двоеточием. Пример: …. . goto m1; …. . …. . m1: write (a,b); ….
5: Оператор безусловного перехода Пример использования оператора безусловного перехода: LabelVar m1, m2;a,b,c : real; VarBegin a,b,c : real;read(a,b); Beginif b0 then read (a,b); write (На 0 делить нельзя!) if b0 then else goto m1; begin c:a/b; c:a/b; write (c); write (c); goto m2;end m1 : write (На 0 делить нельзя !);End. m2: End. Из пример очевидна неэффективность использования оператора безусловного перехода.
6: Циклический алгоритм Циклический алгоритм реализует повторение некоторых действий. Иными словами циклические алгоритмы включают в себя циклы. Циклом называется последовательность действий, выполняемых многократно, каждый раз при новых значениях параметров.
7: Повторяющиеся действия Повторяющиеся действия можно реализовать с помощью условного оператора и оператора безусловного перехода. Так как язык Паскаль является структурным языком, использование операторов безусловного перехода считается не совсем уместным в Паскаль-программах, однако для того чтобы рассмотреть организацию циклических алгоритмов с помощью разветвляющейся структуры с безусловным переходом рассмотрим один из примеров.
8: Повторяющиеся действия Задача 1. Найти максимальное число из десяти положительных чисел. Решение задачи можно построить по следующему алгоритму: 1) i0 2) p0 3) задать очередное значение x 4) если xp, то px 5) ii1 6) если i
9: Повторяющиеся действия Label m1; Var p, i, x : integer; Begin p:0; i:0; m1 : read(x); if xp then p:x; inc(i); if i
10: Повторяющиеся действия В данном примере продемонстрированы повторяющиеся действия (циклические, цикл). Телом цикла называют те операторы, которые повторяются. … m1 : read(x); if xp then p:x; inc(i); if i
11: Операторы цикла На языке Паскаль различают следующие операторы цикла: Циклы с предусловием ( while ); Циклы с постусловием ( repeat … until ); Циклы со счетчиком ( for ).
12: Циклы с предусловием While – это оператор цикла итеративного типа с предусловием, так как в нем анализ конца цикла производится до выполнения операторов тела цикла. Он используется, когда количество повторений операторов тела цикла заранее неизвестно и определяется в процессе выполнения цикла. По операторам continue и break можно перейти на анализ условия конца цикла или первый оператор после цикла соответственно. while do begin end; Таким образом, организовывать повторяющиеся (циклические) действия в программе будет более правильно без использования операторов безусловного перехода.
13: Циклы с предусловием while B(x) do S; где B(x) – логическое выражение , в том случае, когда это выражение будет иметь значение Ложь, произойдет выход из цикла; S – один оператор, простой или составной; он должен включать операторы тела цикла, в том числе оператор изменения операторов логического выражения B(x)
14: Циклы с предусловием Задача 2. Лист бумаги делят пополам, полученную половину снова делят пополам и т. д. Определить, какое количество делений потребуется, для того чтобы получить частицу размером с атом. Начальная масса листа 1 грамм, масса атома 10-24 грамм. Var m,ma : real; k :integer; Begin k:0; m:1; ma:1e-24; while mma do begin m:m/2; inc (k); end; writeln (k) End.
15: Циклы с предусловием При использовании цикла с предусловием надо помнить следующее: значение условия выполнения цикла должно быть определено до начала цикла; если значение условия истинно, то выполняется тело цикла, после чего повторяется проверка условия. Если условие ложно, то происходит выход из цикла; хотя бы один из операторов, входящих в тело цикла, должен влиять на значение условия выполнения цикла, иначе цикл будет повторяться бесконечное число раз.
16: Циклы с предусловием Задача 2. Определить значение суммы S1/x11/x2…1/xn, где n – количество слагаемых. Var s, x : real; i, n :integer; Begin i:0; s:0; read (n); while i
17: Циклы с предусловием Var s, x : real; i, n :integer; Begin i:0; s:0; read (n); while i
18: Циклы с предусловием В случае использования оператора break исполнение программы завершится, т. е. произойдет выход из цикла и вывод накопленной суммы до введенного значения x0. В случае использования оператора continue произойдет переход на выполнение первого оператора тела цикла, и как следствие будет пропущены операторы стоящие после continue в теле цикла. Таким образом будет пропущена операция деления на 0. Операторы break и continue могут использоваться так же и в других циклах : циклах с постусловием и циклах со счетчиком.
19: Циклы с постусловием Repeat … until – это оператор цикла итеративного типа с постусловием, так как в нем анализ конца цикла производится после выполнения операторов тела цикла. Он используется, когда количество повторений операторов тела цикла заранее неизвестно и определяется в процессе выполнения цикла. Операторы тела цикла выполняются хотя бы 1 раз. repeat until
20: Циклы с постусловием
21: Циклы с постусловием Задача 3. Дано x1. Вычислить и вывести степени x. Вычисления производятся до тех пор, пока вычисляемое значение не станет более 108 Var k,x : integer; y : longint; Begin read (x); k:0; y:1; repeat y:yx; inc (k); write (x, в степени ,k, есть ,y); until y1e8; End.
22: Сравнение циклов с постусловием и предусловием Есть небольшое отличие в организации цикла repeat по сравнению с while: для выполнения в цикле repeat нескольких операторов не следует помещать эти операторы в операторные скобки begin . . . end. Зарезервированные слова repeat и until действуют как операторные скобки.
23: Сравнение циклов с постусловием и предусловием Конструкция repeat . . . until работает аналогично циклу while. Различие заключается в том, что цикл while проверяет условие до выполнения действий, в то время как repeat проверяет условие после выполнения действий. это гарантирует хотя бы одно выполнение действий до завершения цикла. Так же истинность логического выражения в операторе repeat … until свидетельствует о завершении цикла, тогда как в операторе while – выполнение тела цикла.
24: Циклы со счетчиком Циклы со счетчиком составляют такую конструкцию, в которой выполнение исполнительной части должно повторяться заранее определенное число раз. Циклы со счетчиком используются довольно часто, и поэтому в языке Паскаль для этих целей имеется специальная конструкция. for : to/downto do to – используется при шаге изменение управляющей переменной цикла равном 1. downto – используется при шаге изменение управляющей переменной цикла равном -1.
25: Циклы со счетчиком Примеры : for x:1 to 10 do begin …. end; for y:100 downto 10 do begin …. end;
26: Циклы со счетчиком Задача 4. Найти максимальное число из десяти положительных чисел. Var p, i, x : integer; Begin p:0; for i:1 to 10 do begin read (x); if xp then p:x; end; writeln(p); End.
27: Циклы со счетчиком Управляющая переменная цикла со счетчиком не может быть вещественного типа. В тех случаях, когда тело цикла выполняется заданное, известное количество итераций, но шаг цикла отличен от 1 или -1, то используют циклы while, repeat … until. Пример: … x:0; repeat x:x2; … until x10; …
28: Ситуации «зацикливания» Рассмотрим несколько примеров циклов : for i:100 to 10 do 2) while true do …. …. 3) x5; 4) y:10; repeatwhile y5 do inc (x);begin …… until x
29: Сложноциклические структуры Циклы могут быть простые и вложенные (кратные, циклы в цикле). Для решения многих задач так же используют структуру вложенных циклов, которую и называют сложноциклической. Вложенными могут быть циклы любых типов : for, while, repeat … until. Пример : … for x:1 to 10 do begin …. for y:1 to 5 do begin … end; … end; …
30: Сложноциклические структуры
32: Сложноциклические структуры Var i, j, n: integer; b, bs, sbg, g: real; Begin writeln (Введите количество учеников : ); read (n); sbg:0; for i:1 to n do begin writeln ( Введите баллы ,i ,-го ученика); bs:0; for j:1 to 5 do begin printf ( Количество баллов за решение ,j, –й задачи: ); read (b); bs:bsb; end;
33: Решение задач Задача 6. Вычислить , где xi - i-тый член суммы. Var s, i, n : integer; Begin read (n); s:0; for i:1 to n do begin read (x); s:sx; end; write (s); End.
34: Решение задач Задача 7. Вычислить знакопеременную сумму Var i, p : integer; s: real; Begin s:0; p:-1; for i:1 to 20 do begin p:p(-1); s:sp/i; end; write (s); End.
35: Решение задач Задача 8. Вычислить Var p, i, n : integer; Begin read (n); p:1; for i:1 to n do begin read (x); p:px; end; write (p); End.
36: Решение задач Задача 9. Вычислить Var i, j : integer; p: real; Begin p:1; j:23; for i:1 to 12 do begin p:p i / j; j:j-2; end; write (p); End.
37: Решение задач Задача 10. Напишите программу табулирования функции для получения таблицы функции yxsin(x) при изменении х на отрезке от - π до π с шагом π /5 . Var x,y: real; Begin x:-3. 14; repeat y:xsin(x); writeln (x:6:2, , y:6:2); x:xpi/5; until x3. 14; End.
38: Решение задач Задача 11. Вычислить приближенно площадь фигуры, ограниченной функцией yx2 и прямой y25, разбивая отрезок изменения х на 10 частей и суммируя площади прямоугольников с основаниями равными 1/10 отрезка изменения х, и высотой, определяемой значением функции в середине основания.
39: Решение задач Задача 11. Вычислить приближенно площадь фигуры, ограниченной функцией yx2 и прямой y25, разбивая отрезок изменения х на 10 частей и суммируя площади прямоугольников с основаниями равными 1/10 отрезка изменения х, и высотой, определяемой значением функции в середине основания. Var s, x, p : real; Begin s:0; x:-4. 5; while x
40: Решение задач Задача 12. Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить сколько клеток будет через 3,6,9,12, . . . , 24 часа. Var a,t : integer; Begin t:0; a:1; while t
41: Решение задач Задача 13. Начав тренировки, спортсмен в первый день пробежал 5 км. Каждый следующий день он увеличивал дневную норму на 10 от нормы предыдущего дня. Через сколько дней он будет пробегать в день более 20 км. ? Var d : word; s : real; Begin d:1; s:5; repeat inc (d); s:s1. 1; until s20; writeln (d) ; End.
42: Решение задач Задача 14. Определить m – количество трехзначных натуральных чисел, сумма цифр которых равна n(1
43: Решение задач Задача 15. Вычислить Var i, j, n : integer; p, s : real; Begin read (n); p:1; for i:1 to n do begin s:0; for j: 1 to 2n do s:si/(2ii1); p:ps; end; writeln (p) ; End.