Примеры решения задач на использование цикла с параметром.
Задача 1. «Звездное небо»:
На экране должно появиться N звезд.
Для определенности допустим, что N=100. То есть необходимо вывести 100 точек с помощью функции PutPixel (X,Y,Color). Получение каждой точки описывается последовательностью трех операторов:
X:=Random(GetMaxX); {получение координаты X}
В Информатика 0
Y:=Random(GetMaxY); {получение координаты Y} PutPixel(X,Y, White); {Вывод полученной точки на экран}
Эти операторы необходимо повторить 100 раз. Так как известно число повторений, то применим цикл с параметром.
В качестве параметра используем переменную I, конечное значение которой будет равно числу рисуемых на экране точек. Цикл будет выглядеть следующим образом:
Forl:=l to 100 do Begin X:=Random(GetMaxX);
Y:=Random(GetMaxY);
PutPixel(X,Y,White);
End;
Forl:=l toNdo Begin X:=Random(GetMaxX);
Y^Randon^GetMaxY);
PutPixel(X,Y,White);
End;
Полностью программа выглядит так :
Program PrgOl;
Uses Graph;
Var
Driver,Mode:Integer;
N,X,YJ:Integer;
Begin Randomize;
\Уп1еЬп('Введите количество звезд на небе');
ReadLn(N);
Driver:=Detect;
InitGraph(Driver,Mode,'c:\tp7\bgi');
SetBkColor(Black);
ForL-ltoNdo
Begin
X^Randon^GetMaxX);
Y:=Random(GetMaxY);
PutPixel(X,Y,White);
End;
SetTextStyle(0,0,4); {установка стиля текста} Ои1Тех1ХУ(100,100,'Звездное Небо'); {вывод текста в графическом режиме,} ReadLn; {начиная с пикселя 100,100} CloseGraph;
End.
Задача 2. Нарисовать
Program Prg02; ' Uses Graph;
Const N=100;
Var
Driver,Mode: Integer;
I: Integer;
Begin Driver:=Detect;
InitGraph(Driver,Mode,'c:\tp7\bgi');
SetBkColor(Black);
For I:=0 to 3 do
Rectangle(i*N,i*N,i*N+N,i*N+N);
ReadLn;
CloseGraph;
End.
Задача 3. Нарисовать: |
Создание данного рисунка возможно несколькими способами. Один из них состоит в том, чтобы вывести на экран компьютера 64 квадрата, соединенных согласно рисунку. 64 клетки - 64 квадрата. Предположим, что нам необходимо вывести один квадрат в точке 0,0 со стороной 50. Левая верхняя точка будет 0,0, а правая нижняя 50,50. Rectangle( 0, 0 , 50 , 50);
Теперь попытаемся вывести первые 8 квадратов. Из рисунка видно, что координаты Y у всех квадратов одинаковые, т.е. необходимо изменять координату X. Координата Х правой стороны 1 -го квадрата будет координатой левой стороны 2-го квадрата; коорди-
ната X правой стороны 2-го квадрата будет координатой левой стороны 3-го квадрата и т.д.
Rectangle( 0 ,0, 50 , 50);
Rectangle( 50,0, 2*50 , 50);
Rectangle( 2*50 , 0 , 3*50 , 50 );
Rectangle( 3*50 ,0 , 4*50 , 50);
Rectangle( 4*50, 0,5*50, 50);
Rectangle( 5*50, 0 , 6*50 , 50);
Rectangle( 6*50,0, 7*50 ,50);
Rectangle( 7*50,0 , 8*50 , 50 );
Мы видим, что левая граница квадратов Х*50, где Х изменяется от 0 до 7, а правая на 50 больше: (Х+1)*50, поэтому воспользуемся циклом с параметром.
For Х:=0 to 7 Do
Rectangle( X*50 , 0 , (X+l)*50, 50);
Для получения заданного рисунка эти действия нужно повторить 8 раз, но с различными координатами по Y.
(0,50)
(50,2*50)
(2*50,3*50)
(3*50,4*50)
(4*50,5*50)
(5*50,6*50)
(6*50,7*50)
(7*50,8*50) Верхняя граница рисунка - Y*50, где Y изменяется от 0 до 7, а нижняя на 50 больше:
(Y+l)*50, т.е. количество повторений известно, поэтому воспользуемся циклом с параметром.
For Y:=0 to 7 Do For X--0 to 7 Do
Rectangle( X*50 , Y*50, (X+l)*50 , (Y+l)*50);
Такая конструкция называется вложенным циклом. Выполняется конструкция следующим образом: для каждого значения параметра внешнего цикла выполняется вложенный цикл.
Program Prg03;
Uses Graph;
Const N=50;
Var
Driver.Mode: Integer;
X,Y:Integer;
Begin Driver:=Detect;
InitGraph(Driver,Mode,'c:\tp7\bgi');
SetBkColor(Black);
{1 способ} For X--0 to 8 do
LineCX^O^N^N);
For У--0 to 8 do
Line(0,Y*N,8*N,Y*N);
ReadLn;
ClearDevice;
f2 способ} For Y:=0 to 7 do
For X:=0 to 7 do
Begin
Rectangle(X*N,Y*N,X*N+N,Y*N+N);
If(x+y)mod2=0 then FloodFill(X*N+10,Y*N+10,White);}
End;
ReadLn;
CloseGraph;
End.
Упражнение 12.
Что получим в результате выполнения цикла:
1)ForI:=l to 4 do Rectang^Oj-^O, 100,(i+1 )*50);
2)ForI:=lto20do
If I mod 2=0 then LineRel(0,20) else LineRel(20,0);
3)ForI:=lto20do
If I mod 2 = 0 then L«ne(10,i*10,20,(i+l)*10) _______е1яеипе(10,0-Н)*10.20.1*10);________________________________
Цикл с параметром
Рассмотрим пример: нужно пдсчитать сумму элементов числовой последовательности определенной длины. Число элементов последовательности должен задать пользователь. Допустим, N - число элементов последовательности,
S - сумма введенных элементов.
Введем первый элемент последовательности: ReadLn(X), и на это число увеличиваем сумму: S:=S+X;
Эти два действия мы должны выполнить N раз. Поскольку действия повторяются, мы можем применить ЦИКЛ. Так как мы знаем, сколько раз он должен выполниться, то применим ЦИКЛ С ПАРАМЕТРОМ.
Forl:=l toNdo Begin ReadLn(X);
S:=S+X;
End;
Напоминаем, что вначале переменная S должна быть обнулена: S:=0. Окончательно программа выглядит следующим образом:
Var
S,X,N:Integer;
Begin
Write(' Введите количество элементов -');
ReadLn(N);
S:=0;
Forl-1 toNdo
Begin
ReadLn(X);
S:=S+X;
End;
WriteLn(' Сумма ',N,'элементов ^ ',S);
ReadLn;
End.
Пример 2.
Подсчитать произведение N элементов числовой последовательности определенной длины.
При решении данной задачи нужно обратить внимание на то, что, несмотря на кажущуюся простоту, задача имеет два подвоха.
Первый состоит в том, что начальное произведение необходимо задавать равным не 0, а 1. 1*: 1 ;(иначе оно до конца останется 0).
Второй - если и качестве значения очередною элемента будет введен 0, то про извсдение обратится в ноль. Ч тобы пою не произошло, перед умножением на заданное число необходимо делать проверку:
If Not (ХЧ)) Then Г: l^X .
Var
I'.X^ongInt;
N: Integer;
Begin Write(' Введите количес! во элементов -');
ReadLn(N);
P:=l;
Forl-l toNdo Begin
ReadLn(X);
If Not (X=0) Then P:=P*X
P:=P*X;
End;
WriteLnC Произведение ',N,' элементов ^ ',P);
ReadLn;
End.
Пример 3. Подсчитать во введенной строке количество букв 'а'.
* Напоминаем, что букв 'а', вообще говоря, четырехтрочная и прописная, русская и латинская.
Допустим, что введенная строка - S, а счетчик букв 'а' - К.
Нам необходимо выделять из строки каждую букву, сравнивать с буквой 'а' и, в случае совпадения, увеличивать счетчик на 1 (в начале программы он равен 0). Желательно чтобы учащиеся сами выяснили, что процедура Copy(S,I,l), где I изменяется от 1 до последнего символа строки, позволяет выделить из строки один символ с номером I.
Последний символ строки определяется функцией Length(S).
Var
S: String;
K,I:Byte;
Begin K:=0;
WriteLnC Введите строку');
ReadLn(S);
ForI:=ltoLength(S)do
If(Copy(S,I,l) = 'a') Or { Строчная латинская } (Copy(S,I,l) = 'A') Or { Прописная латинская } (Copy(S,I,l) = 'a') Or { Строчная русская } (Copy(S,I,l) = 'A') { Прописная русская } ThenK:=K+l;
WriteLnC В строке ',S,' букв а ',К);
ReadLn;
End.
Пример 5. Заменить в строке букву 'о' на 'а'.
Решение задачи состоит в том чтобы найти в строке буквы 'о', удалить их с помощью функции Delete и вставить необходимую букву с помощью функции Insert. Const
A:string[2]='a';
0:string[2]-'o';
Var S: String;
I:Byte;
Begin
WriteLn('BBeAHTe строку');
ReadLn(S);
For I:=l to Length(S) do IfCopy(S,I,l)=OThen
Begin
Delete(SJ,l);
Insert(A,S,I);
End;
WriteLn(' Получили ',S);
ReadLn;
End.
Пример 6.
Подсчитать количество слов в строке (считая, что слово - это последовательность символов, не имеющая пробела).
* Обратите внимание на то, что :
- пробелы могут поставить перед первым словом,
- число пробелов между словами может быть больше 1,
- могут быть пробелы в конце строки. Поэтому программа должна выглядеть следующим образом:
Var
S:String;
K,I:Byte;
Begin
WriteLn(' Введите предложение');
ReadLn(S);
K-l;
{Подсчет пробелов} Forl:=l to Length(S) do
^(^(SJ,!)-'' Then K:=K+1;
{Удаление лишних}
{Лишних пробелов между словами - двойных }
Forl:=l toLength(S)-! do
lfCopy(SJ,2)-' 'ThenK:=K-l;
{Первого пробела} IfCopy(S,l,l)= '' Theo IC:=K-1;
{Последнего пробела} IfCopy(S,Length(S),l)- '' Then K:=K-1;
WriteLnC В предложении ',S);
WriteLn( К , • слов(а)');
ReadLn;
End.
Упражнение 13.
Что получится в результате выполнения цикла ?
1)S:=0;
Forl:=l to 10 Do S:=S+I;
WriteLn(S);
2) S-0;
Forl:=l to 10 Do S:=S + I Div 5;
WriteLn(S);
3) 5:='Абракадабра';
Forl:=l toLength(S)Do IfCopy(S,l,l)='a'Then
Be.gin
Delete(S,I,l);
Insert('6',SJ);
End;
WriteLn(S);______________________________________________
Дата добавления: 2015-12-11; просмотров: 2185;