Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обработка массива в Turbo Pascal: Цикл с шагом 3

Delphi , Синтаксис , Циклы

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

Проблема

У нас есть массив coords типа PointType с семью элементами:

const
  coords: array[0..6] of PointType =
    ((x:220, y:410),
     (x:120, y:110),
     (x:480, y: 60),
     (x:320, y:200),
     (x:560, y:190),
     (x:390, y:360),
     (x:600, y:440));

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

arrayLength := SizeOf(coords) div SizeOf(PointType);
for i := 1 to (arrayLength-2)
  do begin
    WriteLn(someFunction(coords[i-1], coords[i], coords[i+1]));
  end;
WriteLn(someFunction(coords[arrayLength - 2], coords[arrayLength - 1], coords[0]));
WriteLn(someFunction(coords[arrayLength - 1], coords[0], coords[1]));

Однако, мы хотим сделать это в один проход, не указывая последние две итерации явно.

Решение

Для решения этой задачи мы можем использовать оператор mod (остаток от деления) в Turbo Pascal. Оператор mod возвращает остаток от деления первого операнда на второй. Мы можем использовать это для циклической обработки массива:

arrayLength := SizeOf(coords) div SizeOf(PointType);
for i := 0 to (arrayLength-1)
  do begin
    WriteLn(someFunction(coords[i],
                         coords[(i+1) mod arrayLength],
                         coords[(i+2) mod arrayLength]));
  end;

В этом коде мы инициализируем i равным 0, а не 1, чтобы обработать первый элемент массива. Затем мы используем (i+1) mod arrayLength и (i+2) mod arrayLength для получения следующих двух элементов массива. Так как (i+1) mod arrayLength и (i+2) mod arrayLength могут дать отрицательные значения, когда i равен arrayLength-1, arrayLength-2 соответственно, оператор mod гарантирует, что мы всегда получаем положительные индексы массива.

Альтернативный ответ

Если количество элементов в массиве может меняться, мы можем использовать цикл while вместо цикла for для обработки всех элементов массива:

arrayLength := SizeOf(coords) div SizeOf(PointType);
i := 0;
while i < arrayLength do
begin
  WriteLn(someFunction(coords[i],
                       coords[(i+1) mod arrayLength],
                       coords[(i+2) mod arrayLength]));
  i := (i + 3) mod arrayLength;
end;

В этом коде мы инициализируем i равным 0 и используем цикл while для обработки всех элементов массива. В теле цикла мы увеличиваем i на 3 после каждой итерации, а оператор mod гарантирует, что i всегда остается в диапазоне допустимых индексов массива.

Создано по материалам из источника по ссылке.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Циклы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-08-27 02:45:57/0.013091802597046/1