Лабораторная работа № 5
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ С ИСПОЛЬЗОВАНИЕМ ВЛОЖЕННЫХ ЦИКЛОВ
Цель работы: овладеть практическими навыками разработки программ с использованием вложенных циклов.
Теоретические сведения.
Если тело какого-то цикла содержит другую циклическую структуру, то такие циклы называются вложенными. Цикл, который содержит другой цикл, называют внешним. Цикл, который содержится в теле другого цикла, называют внутренним.
Внешний и внутренний циклы могут быть трех видов: цикл с постусловием Repeat, цикл с предусловием While и цикл с параметром For.
Правила организации внешнего и внутреннего циклов такие же, как и для простых циклов каждого вида. Но при программировании вложенных циклов необходимо соблюдать следующее дополнительное условие: все операторы внутреннего цикла должны полностью располагаться в теле внешнего цикла. Так же следует помнить, что имена параметров внешнего и внутреннего циклов должны быть разными.
Каждое повторение внешнего цикла означает завершение всех внутренних циклов. При этом всем выражениям, которые управляют внутренними циклами, вновь присваиваются начальные значения.
Глубина вложенности циклов друг в друга не определена, в основном зависит от мощности компьютера.
Примеры выполнения заданий.
Пример 1. Подсчитайте, сколько чисел палиндромов лежит в промежутке от 100 до 1000 (число M называется палиндромом, если оно равно своему обращенному, например 383).
Выведите их на экран дисплея.
PROGRAM Primer_1;
var d:Integer; { Счетчик палиндромических чисел }
x,y,z: Integer; { Параметры циклов: это цифры трехзначного числа }
n:Integer; { Трехзначное число образованное цифрами x,y,z }
m:Integer; { Число образованное теми же цифрами в обратном порядке }
BEGIN
d:=0;
For x:=1 to 9 do
For y:=0 to 9 do
For z:=0 to 9 do
begin
n:=100*x+10*y+z; {Трехзначное число образованное цифрами x,y,z}
m:=100*z+10*y+x; {Число образованное теми же цифрами в обратном порядке}
If n=m then begin d:=d+1; Write (n,' ') end;
end;
WriteLn; WriteLn ('Результат: ',d)
END.
Пример 2. Вывести на экран таблицу умножения.
Program Primer_2;
Var a,I,J:Integer;
BEGIN
For I:=1 to 9 do
Begin
For J:=1 to 9 do Begin A:=i*J; Write(I,'*',J,'=',A:2,' '); End;
Writeln; {Перевод курсора на новую строку}
Writeln;{после каждой строки пропускаем одну строку}
End;
END.
По приведенной программе ответ получим в следующей форме:
Пример 3. Из отрезка [a, b] вывести числа, которые являются ступенью 6.
Program Primer_3;
Var a,b,p,x,k:Integer;
BEGIN
Writeln('Ввести концы отрезка');
Readln(a,b);
If a>b Then begin x:=a; a:=b; b:=x; end; {если начало отрезка введено больше конца}
k:=0; {счетчик искомых чисел}
Writeln('');
For x:=a to b do
Begin
p:=1; {для нахождения произведения}
While p<x do p:=p*6; {пока произведение меньше числа х}
If p=x {после выполнения цикла: если р=х, то}
Then Begin
Writeln (p); {выводим найденное число}
k:=k+1; {и считаем, что одно число уже вывели}
End;
End;
If k=0 {если счетчик искомых чисел остался равен 0, то нужных чисел нет}
Then Writeln('Степеней 6 на данном отрезке нет');
End.