Программирование - на главную
    Главная   |    Рассылки   |    Форум программистов

  Программирование в Интернет
PHP
ASP .NET
Perl
SSI
JavaScript
CSS
HTML
Разное
  Программирование под Windows
Pascal, Delphi
C++, Builder
BIOS
Алгоритмы
Разное
  Программирование графики
DirectX
OpenGL
Графика
  Разное
Форум программистов
Партнерские программы
Создать интернет-магазин
Рассылки
Написать
  Навигация: Главная > Программирование под Windows > Pascal, Delphi > Программирование для начинающих от CompDocs - 3  

Программирование для начинающих от CompDocs - 3

Итак, продолжим. Сегодня мы поговорим о столь важном понятии, как циклы.

Циклы служат для циклического выполнения участков кода и применяются практически в каждой программе или скрипте. Мы рассмотрим классический цикл - цикл for. Давайте сразу на примере:

var i:integer;
begin
for i:=1 to 10 do
writeln('Цикл: ', i);
end.

Итак, в первой строке мы объявили переменную i типа integer - целые числа в промежутке от -32768 до + 32767 - про это мы говорили в прошлой статье. Сейчас нас больше всего интересует третья строка - for i:=1 to 10 do

Тут и применяется наш оператор цикла for. Итак, прочитать вышеуказанную строку можно примерно так: пусть i будет равно от 1 до 10, выполнять: далее идет выполнение следующей строчки кода, т.е. writeln('Цикл: ', i);

Обратите внимание, что при этом i сохраняет все свойства переменной. А при инициализации цикла, т.е. при первой цикле, i присваивается инициализирующее значение, в нашем случае единица. Далее, выполняется код цикла, после чего идет увеличение i на единицу - таков цикл for с указанием параметра to. Все это продолжается до 10. После чего, выполнение цикла завершается.

В результате работы вышеуказанного примера, мы получим на экране следующее:

Цикл: 1
Цикл: 2
Цикл: 3
Цикл: 4
Цикл: 5
Цикл: 6
Цикл: 7
Цикл: 8
Цикл: 9
Цикл: 10

Так суть цикла должна быть понятнее. К стати, я использовал еще не совсем знакомый Вам оператор writeln. На самом деле, writeln этот тот же, знакомый уже нам, write, только текст он выводит с новой строчки.

Теперь давайте рассмотрим некоторые особенности оператора циклов for. Итак, прежде всего, мы можем сделать спадающий цикл, т.е. значение переменной цикла будет не возрастать на 1 с каждым новым циклом, а уменьшатся, для этого to заменяем на downto. Например: for i:=10 downto 1 do

Обратите внимание на то, что в данном случае циклическим кодом является лишь одна строчка кода после цикла. Если же Вам нужно выполнять 2 или более строчки кода в цикле, их нужно объединить посредствам begin ... end, например, так:

var i:integer;
begin
for i:=1 to 10 do
begin
writeln('Цикл (строка кода цикла 1): ', i);
writeln('Цикл (строка кода цикла 2): ', i);
writeln('Цикл (строка кода цикла 3): ', i);
end;
end.

При желании Вы можете изменять значение переменной цикла прямо в цикле, о чем я Вам уже говорил:

var i:integer;
begin
for i:=1 to 10 do
begin
i:=i+1; writeln('Цикл: ', i);
end;
end.

Вот такой простой код, будет работать уже очень интересно, он будет выдавать лишь четные числа:

Цикл: 2
Цикл: 4
Цикл: 6
Цикл: 8
Цикл: 10

Надеюсь, понятно почему, но все же разъясню. Итак, ход выполнения программы дошел до цикла. Начало цикла, что бы не содержала переменная i, ее значение становится равным 1. Начинается выполнение первого цикла. Что мы видим? i:=i+1; Т.е. i уже равно 1+1=2. Далее выполняется оставшейся участок кода. После выполнения первого цикла, начинается второй цикл. Оператор for увеличивает значение переменной i на 1. Если бы мы не увеличили значение переменной i на единицу в самом цикле, оно сейчас было бы равно 1, а во втором цикле - 1+1. Но так как оно уже увеличено на 1, то во втором цикле i=2+1. Далее опять начинается выполнение кода цикла и опять идет i:=i+1; т.е. i=3+1=4. Ну и т.д., пока i не дойдет до 10 - конец нашего цикла.

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

var i,j:integer;
begin
for i:=1 to 10 do
for j:=1 to 10 do
writeln('Цикл: ', i, j);
end.

Не всегда новичкам сразу понятна суть столь легкого и важного кода. Итак, допустим выполнение программы дошло до строчки for i:=1 to 10 do т.е. до начала цикла с переменной i. Ок, первый цикл цикла с переменной i начинается. Что дальше? А дальше идет цикл с переменной j. И пока он не отработает, цикл с переменной i не перейдет на второй круг.

Т.е. будет примерно так: начало обеих циклов i=1 j=1,2,3,4,5,7,8,9,10 i=2 j=1,2,3,4,5,7,8,9,10 ... i=10 j=1,2,3,4,5,7,8,9,10 конец обеих циклов.

Ну, пожалуй, последнее, из самого важного про классический цикл for и циклы вообще это предотвращение бесконечного цикла. Как правило, бесконечные циклы образовуются, когда значение переменной цикла некорректно изменяется в теле цикла, например, так:

var i:integer;
begin
for i:=1 to 10 do
begin
i:=i-1; writeln('Цикл: ', i);
end;
end.

Что выходит? А выходит то, что при каждом новом цикле, оператор for будет увеличивать значение переменной цикла i на 1, а далее оно будет... уменьшатся на 1 в теле цикла! Т.е. оно не когда не достигнет окончательного для цикла значения 10.

Продолжение следует.

© http://www.ru-coding.com/
Условия использования материалов сайта.
  Счетчики и ссылки

Rambler's Top100


  На правах рекламы
Copyright © 2005-2012 Ru-Coding.com - все о программировании.