Тема 7.2 Вложенные циклы

Download Report

Transcript Тема 7.2 Вложенные циклы

© М.Е.Макарова
http://uchinfo.com.ua
На этом уроке вы узнаете
• Что такое вложенные циклы.
• Как они применяются в
программах.
• Как можно сократить количество
повторений цикла.
• Для чего используются команды цикла?
• Как записывается команда цикла FOR?
• Как в цикле записать команду присваивания,
чтобы она вычисляла сумму чисел?
Количество?
• Какое начальное значение должно быть у
переменной, в которой накапливаем
произведение чисел?
• Как записывается команда цикла, в которой
счетчик цикла уменьшается?
• Можно ли изменять значение верхней границы
цикла в теле цикла?
• Можно ли в теле цикла использовать команду
сравнения?
Цикл называется вложенным, если
он находится в теле другого цикла.
for i:=0 to n do
begin
for j:=0 to m do
begin
for k:=0 to w do
begin
end;
end;
end;
Цикл i
Внутренний цикл должен полностью
находиться в теле внешнего цикла.
Цикл j
Цикл k
Сколько можно купить быков, коров и телят, если бык стоит
10 рублей, корова - 5 рублей, теленок – 0,5 рубля и на 100
рублей надо купить 100 животных.
Решение
B – количество быков
K - количество коров
T- количество телят.
После этого можно записать
два уравнения:
10b+5k+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
Program Pokupka1;
Uses Crt;
Var b, k, t:integer;
Begin
Clrscr;
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('Bkov ',b,' korov ',k,' telyat ', t);
readln;
end.
Сколько раз будет проверяться условие в данной программе?
Значение b изменяется 11 раз – от 0 до 10;
k - 21, t - 201 Таким образом, условие будет проверяться
11*21*201 = 46431 раз.
11*21*201 = 46431
Если известно количество быков и коров
то количество телят можно вычислить по
формуле:
Program Pokupka2;
t:=100-(b+k);
Uses Crt;
Цикл по переменной t можно исключить.
Var b, k, t:integer;
Begin
Количество повторений проверки
условия становиться 11*21=231
Clrscr;
for b:=0 to 10 do
for k:=0 to 20 do
begin
t:=100-(b+k);
if 20*b+10*k+t=200
then
writeln('Bkov ',b,' korov ',k,' telyat ', t);
end;
readln;
end.
В кассе есть монеты по 2, 5 и 10 копеек.
Сколькими способами можно выдать сдачу
на некоторую сумму Sum?
Program Sdacha;
Uses Crt;
Var Sum, Xmax, Ymax, Zmax, x, y, z, p:integer;
Begin
Clrscr;
Writeln ('Vvedite Summu'); Readln (Sum); p:=0;
Xmax:=Sum div 2; Ymax:=Sum div 5; Zmax:=Sum div 10;
Writeln (' 2 5 10 Vsego monet');
Writeln ('______________________');
for x:=0 to Xmax do
for y:=0 to Ymax do
for z:=0 to Zmax do
if 2*x+5*y+10*z=Sum
then
begin
writeln(x:3,y:3,z:3,x+y+z:8);
p:=p+1;
end;
If p=0 then writeln('Variantov net')
else writeln ('Vsego ', p,' variantov');
readln;
end.
СТО, СОТ и ТОС – трехзначные числа.
Определить цифры С, Т и О и вывести их на
экран
СТО =С*100+Т*10+О
Program Summa;
Uses Crt;
Var c, t, o, p, Cto, Toc, Cot:integer;
Begin Clrscr;
Writeln (' CTO+COT=TOC');
Writeln;
for c:=1 to 9 do
for t:=1 to 9 do
for o:=0 to 9 do
begin
Cto:=c*100+t*10+o;
Cot:=c*100+o*10+t;
Toc:=t*100+o*10+c;
if Cto+Cot=Toc then
begin
writeln(Cto:4,Cot:4,Toc:4);
p:=p+1;
end;
End;
If p=0 then writeln('Variantov net')
else writeln ('Vsego ', p,' variantov');
readln; end.
•Какой цикл можно назвать вложенным?
•Какие правила записи вложенных циклов?
•Могут ли циклы «пересекаться» друг с другом?
•Для чего нужно стараться сократить количество
повторений циклов?
1. Определить сколько существует «счастливых» автобусных
билетов в одной серии с номерами от 000000 до 999999.
«Счастливым» считается билет, сумма первых трех цифр
которого равна сумме вторых трех цифр.
2. С клавиатуры вводится 10 различных произвольных
чисел.
а) Найти разность между наибольшим и наименьшим из
них.
б) Порядковый номер наибольшего и наименьшего числа.
3. Вычислить:
y  1  2  ... 10
Эту задачу нужно решать с конца, т.е., использовать
цикл с уменьшающимся счетчиком.