ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Примеры решения задач на использование цикла с параметром.Задача 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; 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.
Создание данного рисунка возможно несколькими способами. Один из них состоит в том, чтобы вывести на экран компьютера 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); ______________________________________________ Не нашли, что искали? Воспользуйтесь поиском:
|