
- •Лекция 5
- •Операторы ввода информации Read, ReadLn
- •Операторы вывода Write, WriteLn
- •Форматный вывод
- •Простые операторы
- •Оператор присваивания
- •Оператор безусловного перехода Goto
- •Структурированные операторы
- •Составной оператор
- •Условный оператор If
- •Один оператор If может входить в состав другого оператора If. В таком случае
- •Условный оператор Case
- •Пример. Для 100 целых значений x рассчитать значение y.
- •Операторы цикла
- •Особенности выполнения оператора For
- •Оператор цикла Repeat…Until
- •Особенности выполнения оператора Repeat
- •Оператор While
- •Технология программирования
- •Пример.
- •Диаграммы Найси-Шнейдермана For While Repeat
- •Вложенные циклы
- •Пример.

Диаграммы Найси-Шнейдермана For While Repeat

For
Program P1; Var i,S:integer; Begin
S:=0;
For i:=1 to 5 do
S:=S+i;
Writeln(‘S=’,S:
5);
End.
Программы
While |
Repeat |
Program P2; |
Program P3; |
Var i,S:integer; |
Var i,S:integer; |
Begin |
Begin |
S:=0; i:=1; |
S:=0; i:=1; |
While i<=5 do |
Repeat |
Begin |
S:=S+i; |
S:=S+i; |
I:=i+1; |
I:=i+1; |
Until i>=6; |
End; |
Writeln(S); |
Writeln(‘S=’,S); |
End. |
End. |
|
Вложенные циклы
Для решения задачи достаточно часто требуется использовать две и более циклические конструкции, одна из которых расположена внутри другой (других). Такие конструкции называются вложенными циклами. Какие именно циклы при этом используются, роли не играет, они могут быть организованы
посредством любых рассмотренных ранее операторов (For, While, Repeat … Until).
Пример.
Старинная задача. Сколько можно купить быков, коров и телят, если бык стоит 10 рублей, корова
– 5 рублей, теленок – полтинник (0,5 рубля), при условии, что на 10 рублей надо купить 100 голов скота.
Решение: обозначим через b – количество быков, k – количество коров, t – количество телят. После этого можно записать два уравнения:
10b + 5 k + 0,5t = 100 |
и |
b + k + t = 100 |
|
Преобразуем их: |
|
|
|
20b + 10k + t = 200 |
и |
b + k + t = 100 |
|
На 100 рублей можно купить: |
|
||
не более 10 быков, т.е. 0 ≤ b ≤ 10, |
|||
не более 20 коров, т.е. |
0 ≤ k ≤ 20, |
||
не более 200 телят, т.е. 0 ≤ t ≤ 200. |
|||
Таким образом, получаем: |
|
||
Var b, k, t: Integer; |
|
|
|
Begin |
|
|
|
For b: = 0 To 10 Do |
|
|
|
For k: = 0 To |
20 Do |
|
|
For t: = 0 To |
200 Do |
|
If (20*b+10*k+t=200) and (b+k+t=100) Then WriteLn ( ‘быков ‘ ,b, ‘ коров ‘ ,k, ‘ телят ‘ ,t)
End.
Сколько раз будет проверяться условие в данной программе (сколько раз будет выполняться оператор If)? Переменная b принимает 11 различных значений (от 0 до 10), для каждого значения переменной b переменная k изменяется от 0 до 20, а для каждого значения переменной k переменная t изменяется от 0 до 200.
Таким образом, условие будет проверяться 11 * 21* 201 = 46431 раз. Но если известно количество быков и коров, то количество телят можно вычислить по формуле
t = 100 – (b + k) и цикл по переменной t можно исключить.