Как сделать шаг в цикле for паскаль

Добавил пользователь Владимир З.
Обновлено: 18.09.2024

← →
Андреев ( 2003-12-29 20:32 ) [0]

что-то не пойму. неужели в Pascal нет оператора задающего шаг.
В смысле for i=1 to 20 step 2 как на бэйсике?
Что мне теперь if вставлять?

← →
Stilgar ( 2003-12-29 20:37 ) [1]

while do или repeat until (описано в любом учебнике)

← →
jack128 ( 2003-12-29 21:11 ) [2]


> for i=1 to 20 step 2

аналог на паскале

for i := 1 to 20 do
if i mod step = 0 then

← →
Adil Aliyev ( 2003-12-30 01:09 ) [3]

for i=1 to 20 step 2
print i
next i

for i:=1 to 20 do begin
if i mod step=0 then begin
write(i);
end;
end;

← →
Германн ( 2003-12-30 01:16 ) [4]

Можно еще и так:

for i:=0 to 9 do Write(i*2+1);

Здесь нет ни умножения как в примере Германн © (30.12.03 01:16) [4], здесь нет ни деления, как в примере Adil Aliyev (30.12.03 01:09) [3]. Для доказательства моей правоты можете заглянуть в ассемблер:)

← →
Adil Aliyev ( 2003-12-30 01:43 ) [6]

Dima_dvp, правильно. Да, оператор for работает быстрее чем while но моем примере используется if поэтому они одиноково.

← →
Германн ( 2003-12-30 02:04 ) [7]

2 Dima_dvp © (30.12.03 01:22) [5]

Первое. В моем примере меньше человеко-часов программистского труда. Точнее человеко-секунд. Да и пальцы меньше страдают от клавы. :)))
Второе. Ваш пример не соответствует сабжу, поскольку начинается с нуля, а не с единицы. :)))

← →
Adil Aliyev ( 2003-12-30 02:54 ) [8]

>2 Dima_dvp © (30.12.03 01:22) [5]
>
>Первое. В моем примере меньше человеко-часов программистского >труда. Точнее человеко-секунд. Да и пальцы меньше страдают >от .клавы. :)))
>Второе. Ваш пример не соответствует сабжу, поскольку начинается >с нуля, а не с единицы. :)))

i := 1;
while (i

← →
Palladin ( 2003-12-30 02:55 ) [9]


> Андреев (29.12.03 20:32)

понял бы, еслиб книжки читал.

← →
Юрий Зотов ( 2003-12-30 04:57 ) [10]

Ого, какие нешуточные споры тут пошли. а ну-ка, и я влезу в драку.
:о)

> Андреев (29.12.03 20:32)

Паскаль с самого начала строился, так, чтобы в нем было все необходимое, но не было ничего лишнего. А задание шага в цикле for - это избыточная языковая конструкция, поэтому в Паскале ее и нет. Вы же не удивляетесь, например, тому, что бейсик не поддерживает ассемблерные вставки?

А Ваш пример в общем виде реализуется так. Пусть Step - это нужный шаг цикла, а Min и Max - его пределы. Тогда пишем:
var
i, j: integer;
.
for i := 0 to (Max - Min) div Step do
begin
j := Min + i * Step;
. // И теперь вместо i используем j
end;

> Dima_dvp © (30.12.03 01:22) [5]

Уж если оптимизировать код, то надо учесть, что циклы repeat и while работают медленнее, чем for (за счет большего количества операций с памятью, а не с регистрами), а вместо умножения или деления на 2 можно использовать более быстрые операции сдвига. Тогда получим почти вариант 4:
for i := 1 to 10 do WriteLn(i shl 1);

Это сработает быстрее, чем [5], даже если в [5] вместо i+2 или двух Inc(i) написать Inc(i,2).

← →
Dima_dvp ( 2003-12-31 01:26 ) [11]

Юрий Зотов © (30.12.03 04:57) [10]
>> (за счет большего количества операций с памятью, а не с регистрами)

Не знаю как в Delphi, но в C компилятор поймает, что переменная существует только в этом цикле и нигде больше, поймёт, что это счётчик и поместит её в регистр (при соответствующих настройках компилятора)

← →
Pat ( 2003-12-31 01:37 ) [12]

>Dima_dvp © (31.12.03 01:26) [11]
Loop veriable для for"а в Делфи тоже помещается в регистр, даже если эта переменная используется вне этого цикла. Кстати, на BP7 она была обыкновенной переменной в памяти, поэтому в цикле for можно было делать переприсваивание переменной цикла (чего не сделаешь в Делфи (стандартными средствами))

Паскаль - Урок 6: Циклы while, for, repeat

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

1. Цикл с параметром в Паскале - FOR

Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта - счетчик который обычно обозначается буквой i или j.

Внешний вид цикла с параметром в паскале:

После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to - это до .. в порядке возрастания, также есть downto - до .. в порядке убывания.

Блок - схема цикла с параметром:

2. Цикл с предусловием в Паскале - WHILE

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

Структура цикла с предусловием:

- логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;

- любые выполняемые операторы языка.

Порядок выполнения цикла:

Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

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

Паскаль - Урок 6: Циклы while, for, repeat

Примечание: в прямоугольных блоках показано любое действие, которое выполняется в цикле или после него (шаг цикла), в овалах - начало или конец всей программы или её части. Главную роль в данной блок - схеме играет её центральная часть.

Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30

3. Цикл с постусловием - Repeat - until.

Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после выполнения тела (действий) цикла. Это обеспечивает его выполнение хотя бы один раз в отличие от ранее разобранных циклов.

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

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

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

Формат записи, структура цикла:

Выводы:

1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).

2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.

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

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

- Цикл For (со счетчиком);

- Цикл While (с предусловием);

- Цикл Repeat (с постусловием).

Оператор цикла For

Цикл for позволяет выполнить серию действий заданное число раз.

Общая форма цикла for такова:

for i:=start to limit do

for i:=start downto limit do

где start и limit – переменные программы

Слово start – обозначает здесь начальное значение переменной a, limit – ее конечное значение. Тело цикла должно состоять из одного оператора, но можно поместить в тело цикла несколько операторов, для этого их нужно взять в логические скобки begin – end.

Цикл for выполняется следующим образом. Сначала производится инициализация (присваивание начального значения) i– его начальным значением становится start.

Если i меньше или равно limit , тело цикла выполняется (при значении i равном start). Всякий раз, когда тело цикла завершается, значение i автоматически увеличивается на 1, и тело цикла выполняется вновь, но уже с новым (следующим по порядку) значением i.

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

Если в теле цикла находится несколько операторов, обрамленные парой слов-ограничителей begin и end, то общая форма цикла выглядит следующим образом:

for i := start to limit do

В этой структуре при каждом входе в тело цикла будут выполняться предложение 1, предложение 2, . предложение n.

В варианте цикла For со словом downto (вместо to) переменная пробегает последовательность значений от начального к конечному в обратном порядке, уменьшая каждый раз на 1. Внешне это выглядит так:

for i:= limit downto start do

Наберите следующую программу. Компьютер выведет на экран в столбик 15 случайных чисел от 8 до 39.

var c, s : integer;

writeln('15 случайных чисел от 8 до 40');

for c:=1 to 15 do

к нему прибавляется 8, получаем случайное число от 8 до 39>

Самостоятельно измените программу так, чтобы на экране были напечатаны в строчку 8 случайных дробных чисел от 5 до 25.

Напечатать таблицу стоимости порций сыра стоимостью 280 рублей от 100 г до 1 кг с шагом 100 г.

writeln('таблицa стоимости порций сыра');

for c:=1 to 10 do

writeln (c*100,' г стоит ',k,' рублей');

Задачи для самостоятельного решения

  1. Вычислить сумму первых 10 натуральных чисел. Использовать счетчик типа S=S+A, т.е. счетчик суммы. Использовать управляющую переменную цикла.
  2. Напечатать таблицу перевода расстояний в дюймах в сантиметры (1 дюйм=2.54 см) для значений от 1 до 10 дюймов с шагом 1.
  3. Вычислить сумму квадратов первых 7 натуральных чисел.
  4. Вычислить все числа Фибоначчи от 3-го до N-го. Числа Фибоначчи образуют последовательность, у которой каждый очередной член равен сумме двух предыдущих:
    0 → 1 → 1 → 2 → 3 → 5 → 8 → 13 → 21 → 34 .
    2+3=5 13+21=34

Выполните задания с For1 по For25 по электронному задачнику (стр.25). Открыть его можно в режиме Помощь – Электронный задачник РТ.



Информатика в школе

Цикл со счетчиком в Паскале

28 мая, 2014 Andrey K

Цикл — это набор команд, которые многократно выполняются до тех пор, пока выполняется (или не выполняется) некоторое условие.

В паскале существуют 3 способа организации цикла (типа):

1) Цикл со счетчиком

2) Цикл с постусловием

3) Цикл с предусловием

Рассмотрим первый тип — цикл со счетчиком.

Данный тип используется в случаях, когда известно количество повторений (итераций) в цикле. В Паскале цикл со счетчиком выглядит так:

где i — переменная-счетчик; a — начальное значение переменной i; b — конечное значение переменной i.
Набор команд, которые выполняются в цикле называют телом цикла.

Переменная i изменяется от 1 до 4 (с шагом 1). Пока i будет изменятся — будет выполняться команда writeln(‘Привет’).

На экране мы увидим:

Привет
Привет
Привет
Привет

Количество повторений в цикле со счетчиком можно по формуле (b-a)+1 . (В нашем случае: (4-1)+1 = 4. Все верно!)

Если цикл будет выглядеть так:

Мы увидим тот же результат, что и в предыдущем примере. Убедимся, используя формулу: (105-102)+1 = 4. Цикл выполнится 4 раза.

Вопрос! Что мы увидим после выполнения следующего кода программы?

Привет
Пока
Привет
Пока

НЕТ! На экране мы увидим следующее:

Привет
Привет
Привет
Привет
Пока

В цикле будет выполнятся только одно действие writeln(‘Привет’). только оно относится к телу цикла. Команда writeln(‘Пока’) — вне тела цикла.

Как сделать так, чтобы обе команды входили в тело цикла?

Необходимо использовать ОПЕРАТОРНЫЕ СКОБКИ!

Теперь тело цикла состоит из двух команд.

Рассмотрим несколько классических примеров использования цикла со счетчиком.

Задача 1.

Посчитать сумму чисел от 1 до 100. (1+2+3+…+100) (не используя формулу суммы членов арифметической прогрессии)

Задача, как вы уже поняли, решается с помощью цикла со счетчиком. Мы можем изменять переменную-счетчик в цикле от 1 до 100. Это даст нам ряд чисел, которые нужно сложить:

Объявим дополнительно переменную S. В эту переменную будем записывать сумму на каждом шаге цикла. До выполнения цикла S=0.

На каждом шаге цикла переменная S будет изменяться с прибавлением текущего значения переменной i

(Новое значение S:= текущее значение S + текущее значение i)

Программа будет иметь вид:

Задача 2.

Посчитать сумму пяти введенных с клавиатуры чисел

Результат представить в виде:

Начнем наши рассуждения.

Нам необходимо ввести 5 чисел, следовательно можем использовать цикл со счетчиком

Что же должно выполняться в цикле?

Задача 3.

Найти сумму нечетных чисел от 1 до 1000.

Задача аналогична задаче 1. Отличие в том, что на числа накладывается условие: числа должны быть нечетными.

Определить четность можно, используя оператор MOD — остаток от деления.

Таким образом к переменной S будут прибавляться только те i, которые удовлетворяют условию.

если бы условие было сложным, например: найти сумму нечетных чисел и чисел, которые делятся на 10 — мы бы использовали запись:

Т.е. помимо нечетных чисел в сумме будут участвовать числа, которые делятся на 10 (использовали OR для объединения двух множеств).

Читайте также: