ЗНАЕТЕ ЛИ ВЫ?

Алгоритмическая структура «Цикл».



Операторы повторений.

В алгоритмическую структуру «цикл» входит серия команд, выполняемая многократно. Такая последовательность команд называется телом цикла. Циклические алгоритмические структуры бывают двух типов:

- циклы со счетчиком, в которых тело цикла выполняется определенное количество раз;

- циклы с условием, в которых тело цикла выполняется, пока условие истинно.

В языке Delphi имеются три оператора, с помощью которых можно реализовать алгоритмическую структуру «цикл».

 

1. Счетный оператор цикла For имеет следующую структуру:

For <параметр цикла>:= <нач.знач> to <кон.знач> do <оператор>;

Здесь For, to, do – зарезервированные слова (для, до, выполнить);

<параметр цикла> - переменная любого порядкового типа;

<нач.знач> - начальное значение – выражение того же типа;

<кон.знач> - конечное значение – выражение того же типа;

<оператор> - произвольный оператор Delphi.

Блок схема цикла со счетчиком имеет вид рис. 109.

 

 

Рис. 109 Блок-схема выполнения цикла со счетчиком

 

Оператор For работает следующим образом. Сначала вычисляется выражение <нач.знач> и осуществляется присваивание параметру цикла начального значения. После этого циклически повторяется:

- проверка условия <параметр_цикла>:=<кон_знач>; если условие выполнено, оператор For завершает свою работу;

- выполнение оператора <оператор>;

- наращивание переменной <параметр цикла> на единицу.

Можно использовать изображение блок-схемы с блоком модификации.

 

 

Рис. 110 Блок-схема цикла со счетчиком

с блоком модификации.

 

Оператор For выполняет циклически только один оператор. Если нужно выполнить в цикле последовательность операторов, их необходимо заключить в операторные скобки begin .. end.

 

Пример. Составить проект, в котором подсчитывается сумма чисел от 1 до n.

 

Создадим графический интерфейс проекта по образцу рис. 111.

 

Рис. 111 Окно подсчета суммы

 

Алгоритм вычисления суммы представим в виде блок-схемы (рис. 112):

 

Рис. 112 Блок-схема подсчета суммы чисел от 1 до n.

 

Текст обработчика события OnClick для кнопки будет следующим:

procedure TForm1.Button1Click(Sender: Tobject);
var i, S, n: Integer;
Begin
S:=0;
n:=StrToInt(Edit1.Text);
for i:= 1 to n do S:= S + i;
Edit2.Text:=IntToStr(S);
End;

Цикл for выполняется от 0 до числа, введённого в компонент Edit1.

 

Рис. 113 Работающее приложение

 

Следует отметить еще два обстоятельства. Во-первых, условие, управляющее работой оператора For, проверяется перед выполнением оператора. Если условие не выполняется в самом начале работы оператора, то он не выполнится ни разу. Другое обстоятельство – шаг наращивания параметра строго постоянен и равен (+1).

Существует другая форма оператора:

For <параметр цикла>:= <нач.знач> downto <кон.знач> do <оператор>;

Замена зарезервированного слова to на downto означает, что шаг наращивания параметра цикла равен (-1), а управляющее условие приобретает вид <параметр цикла>:= <кон.знач>. Отличие оператора For..to..do от For..downto..do заключается в том, что первый оператор организует прямой цикл (начальное значение всегда должно быть меньше конечного), а второй – обратный (начальное значение должно быть больше конечного).

 

2. Оператор цикла While с предпроверкой условия:

While <условие> do <оператор>;

Здесь while, do – зарезервированные слова (пока [выполняется условие], делать);

<условие> - выражение логического типа;

<оператор> - произвольный оператор Delphi.

Блок-схема цикла с предусловием имеет вид рис. 114.

 

Рис. 114 Блок-схема цикла с предусловием

 

Оператор начинает свою работу с вычисления и проверки условия. Если условие выполняется, то выполняется <оператор>, после чего вычисление выражения <условие> и его проверка повторяются. Если <условие> не выполняется, то оператор цикла while прекращает работу.

При использовании оператора цикла While следует иметь в виду, что он выполняет циклически только один оператор. Если нужно выполнить в цикле последовательность операторов, их необходимо заключить в операторные скобки begin .. end. В теле цикла While должен быть хотя бы один оператор, влияющий на изменение значения параметра условия. В противном случае произойдет зацикливание программы.

Предыдущий пример с использованием цикла while будет выглядеть следующим образом:

 

procedure TForm1.Button1Click(Sender: Tobject);
vari, S, n: Integer;
Begin
S:= 0;
i:= 1;
n:= StrToInt(Edit1.Text);
while i<=n do
Begin
S:= S + i;
i:= I + 1;
end;
Edit2.Text:=IntToStr(S);
end;

 

3. Оператор цикла Repeat с постпроверкой условия:

Repeat <тело цикла> until <условие>

Здесь repeat, until – зарезервированные слова (повторять [до тех пор], пока [не будет выполнено условие]);

<тело цикла> - произвольная последовательность операторов Delphi;

<условие> - выражение логического типа.

Оператор цикла с постпроверкой условия целесообразно использовать в тех случаях, когда тело цикла нужно выполнить не менее одного раза и заранее не известно общее количество повторений цикла.

Блок-схема цикла с постусловием представлена на рис. 114.

 

 
 

 

 


Рис. 115 Блок-схема цикла с постусловием

 

Операторы, заключенные между словами repeat и until, составляют тело цикла и выполняются до тех пор, пока не выполнится условие. Так как условие проверяется в конце цикла, то операторы цикла проверяются минимум один раз. В теле цикла может находиться произвольное число операторов без операторных скобок. Необходимо учитывать, что, по крайней мере, один из операторов тела цикла должен влиять на изменения значения параметра условия. В противном случае произойдет зацикливание программы.

C использованием цикла Repeat пример будет выглядеть так:

 

procedure Tform1.Button1Click(Sender: Tobject);
vari, S, n: Integer;
begin
S:= 0;
i:= 1;
n:= StrToInt(Edit1.Text);
Repeat
S:= S + i;
i:= i + 1;
until i>n;
Edit2.Text:=IntToStr(S);
end;

Задания

  1. Составить проект, в котором требуется ввести целое число n и рассчитать:

а) 2n;

б) n!;

в) ;

г) ;

n корней

  1. Составить проект, в котором требуется ввести действительное число а, целое число n и рассчитать:

а) а(а + 1)(а + 2)…(а + n - 1);

б) ;

в) sin(a) +sin2(a) + sin3(a) + … + sinn(a)

  1. Составить проект, в котором нужно определить количество натуральных чисел, сумма кубов которых не превышает 50000.
  2. Составить проект расчета значения функции y=sin(x) для х, изменяющегося от 0 до 10 с шагом 1. Для вывода значений функции использовать компонент TMemo (Текстовая область), который позволяет выводить текст в несколько строк. Инструкция добавления строки в компонент Memo1 имеет следующий вид: Memo1.Lines.Add (‘Новая строка’).
  3. Составить проект, в котором в компонент TMemo выводятся числа от 1 до 100 и их квадраты.

 

Рис. 116 Окно работающего приложения

 

  1. Составить проект расчета значения функции y= для х, изменяющегося от 0 до 10 с шагом 0,5.
  2. Радиус основания цилиндра равен 2, а высота его h. Составить программу, которая выводит на экран таблицу расчета значений объема цилиндра для значений высоты от 0,5 до 5 с шагом 0,5.
  3. Составить проект расчета суммы всех четных чисел от 30 до 60.
  4. Составить проект, в котором с помощью вложенных циклов выводится таблица умножения.

 

Рис. 117 Окно работающего приложения

 

  1. Составить проект «Вклад», с помощью которого вкладчик, положивший деньги в банк, сможет рассчитать, какую сумму он получит по окончании срока действия договора с банком, если по условиям договора вклад положен в банк на определенное количество лет под определенный процент, который не должен изменяться до окончания действия договора.

Рис. 118 Графический интерфейс проекта «Вклад»

 

  1. Бизнесмен взял ссуду m тысяч рублей в банке под 20% годовых. Составить программу, вычисляющую через сколько лет его долг превысит s тысяч рублей, если за это время он не будет отдавать долг?
  2. Создать проект «Моделирование биологических процессов», в котором определяется потомство одной бактерии через 6 часов после ее рождения (каждая бактерия живет 1 час, и каждые полчаса порождает одну новую – всего две за свою жизнь). Определить время, которое потребуется для увеличения бактерий до некоторого введенного количества.
  3. Создать проект, в котором кнопка должна пропрыгать форму слева направо через 50 точек. Для задания паузы используйте команду sleep(t), где t – время задержки в миллисекундах.

 

Компонент TTimer

Кроме рассмотренных циклических операторов в среде программирования Delphi для реализации повторения действий часто используется компонент TTimer (Таймер) с панели System. Компонент TTimerможно рассматривать как циклический оператор, в котором цикл повторяется через задаваемый интервал времени. Компонент Timer является невизуальным, т.е. во время работы программы он не отображается на форме. Поэтому его значок можно поместить в любое место формы.

У таймера главным событием является OnTimer, которое возникает после заданного интервала времени.

 

Основные свойства TTimer

  1. Свойство Interval (Интервал)– определяет промежуток времени в миллисекундах, через который периодически вызывается событие OnTimer. Период времени может составлять от 1 до 65535 мс.

 

  1. Свойство Enabled (Разрешение) – разрешает (значение True) или запрещает (значение False) работу таймера.

 

Рассмотрим работу таймера на примере задачи №13 из заданий к параграфу 5.13

 

Пример.Создать проект, в котором кнопка должна пропрыгать форму слева направо через 50 точек.

 

Для создания графического интерфейса проекта поместим на форму кнопку и таймер. У компонента таймер установим свойство Interval равным 250 (¼ секунды).

 

Рис. 119 Графический интерфейс проекта

 

Дважды щелкнем по таймеру, при этом откроется обработчик события OnTimer, в который запишем оператор, заставляющий кнопку двигаться слева направо с интервалом в 50 точек.

 

procedure TForm1.Timer1Timer(Sender: TObject);
Begin
Button1.Left:=Button1.Left+50;
end;

 

С помощью таймера можно также вывести на форму текущее время.

 

Пример.Создать проект, показывающей работу электронных часов.

 

Разместим на форме компоненты надпись и таймер, зададим интервал у таймера равным 1 секунде (значение 1000). Надпись будет нужна для вывода текущего времени.

 

Рис. 120 Графический интерфейс проекта

 

Введем дополнительную переменную а типа TDateTime (дата/время). В эту переменную запишем текущее время, используя стандартную функцию Time. Затем преобразуем его в текстовое представление с помощью функции TimeToStr.

Обработчик события OnTimer запишется следующим образом:

 

 

procedure TForm1.Timer1Timer(Sender: TObject);
var а: TDateTime;
Begin
а:=Time;
Label1.Caption:=TimeToStr(а);
end;

Рис. 121 Окно проекта «Электронные часы»

 





Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.234.255.5 (0.013 с.)