Delphi для начинающих. Урок 10. Циклы. Работа с массивами

Уроки для начинающих   11 Июль 2011  Автор статьи: admin 

В прошлом девятом уроке мы говорили с вами о массивах, как о структуре данных. В этом уроке я покажу вам способы работы с массивами и обработки их элементов.

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

Для обработки нескольких элементов массива, программисты очень часто используют циклы. Циклы позволяют совершать ряд однотипных действий или операций. В языке программирования Pascal/Delphi существует всего 3 вида циклов: for, while, repeat. Их работу мы и разберем в следующем примере:

Пусть массив содержит 100 целочисленных переменных integer. Объявление такого массива в разделе var будет выглядеть следующим образом:

1
var a: array [0..99] of integer;

Требуется посчитать кол-во элементов массива, значение которых больше 10.

Рассмотрим реализацию поставленной задачи, используя существующие виды циклов.

Цикл for:

1
2
3
4
5
6
var i,n:integer;
begin
n:=0;
for i:=0 to 99 do
  if a[i]>10 then inc(n);
end;

Цикл for использует для своей работы переменную i типа integer. «for i:=0 to 99 do» означает, что в первой итерации цикла (сначала) i присвоится «0», а затем i будет увеличиваться с каждой итерацией цикла на 1 и, когда достигнет 99, после прохождения последней итерации, цикл закончится. Содержимое цикла идет либо после ключевого слова «do» и может указываться между ключевыми словами «begin» и «end». Внутри цикла мы проверяем, является i-ый элемент в массиве a большим 10. Если да, то увеличиваем показатель n на единицу. Перед циклом n нужно обнулить, т.е. присвоить нулю, чтобы счет начинался с нуля. Если необходимо, чтобы итерации в цикле шли в обратном порядке (от 99 до 0), то цикл приобретет следующий вид:

1
2
3
for i:=99 downto 0 do
  if a[i]>10 then inc(n);
end;

Цикл While:

1
2
3
4
5
6
n:=0;
i:=0;
while i<100 do begin
  if a[i]>10 then inc(n);
  inc(i);
end;

В этом цикле мы вручную увеличиваем счетчик итераций i, и пока i<100 цикл работает. Перед циклом следует вручную присвоить начальный показатель для счетчика итераций i. Цикл Repeat:

1
2
3
4
5
6
n:=0;
i:=0;
repeat
  if a[i]>10 then inc(n);
  inc(i);
until i=99;

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

Теперь давайте напишем небольшой пример заполнения массива целочисленных элементов случайными числами.

1
2
3
4
5
6
7
8
var a: array [0..99] of integer;
i: integer;
begin
randomize; // инициализация генератора чисел
  for i:=0 to 99 do begin
    a[i]:=random(100); // присваиваем элементу массива случайное целочисленное число (от 0 до 99)
  end;
end;

 

[note]Стоит отметить, что наиболее часто в коде используют цикл for (особенно при обработке массивов), потому что его преимуществом перед другими циклами является то, что в него уже встроен счетчик итераций, что делает код более удобным, освобождая его от лишних «inc(i)», «i:=0″… Особенно это удобно при использовании двойных циклов — да-да, бывают и тройные и четвертные — циклы могут вкладываться в другие циклы, когда нужно обработать сложные структуры.[/note]

В следующем уроке мы поговорим о процедурах и функциях и способах работы с ними. Подписывайтесь на рассылку уроков на ваш email, чтобы всегда быть в курсе событий нашего сайта!


Циклы в Java
Циклы в С++

  • Евгений

    Здравствуйте, если я не ошибаюсь, то в цикле «repeat» until i=100, а не 99

    • http://cybern.ru/ lordrp

      В цикле repeat — until сначала происходит выполнение действия, а затем проверка условия, поэтому для того, чтобы мы пробежали все значения меньше 100 стоит условие i=99

  • Евгений

    Почему цикл «while» неправильно считает?

    • http://cybern.ru/ lordrp

      В каком плане неправильно считает?

Научиться программировать

  • на Delphi

  • на Java

  • на C++