Как в цикле for установить шаг паскаль
Перейти к содержимому

Как в цикле for установить шаг паскаль

  • автор:

Урок 3 — Циклы в Pascal

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

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

1 For — цикл с параметром

Цикл с параметром, известный также как цикл со счетчиком, используется при известном количестве повторений. Он имеет две формы записи. В любом случае он выполняет следующий после него оператор (как правило, это составной оператор заключенный в «операторные скобки» Begin..End), каждый раз изменяя переменную цикла с шагом 1

Счетчик – это переменная порядкового типа. Начальное и конечное значение должны быть того же типа, что и счетчик. Тело выполняется до тех пор пока условие истинно.

Условия выполнения цикла проверяются перед выполнением блока операторов. Если переменная цикла больше максимального значения (при to) или меньше минимального (downto), то цикл FOR не выполняется.

Формы записи, представленные выше, отличаются словами To и Downto . Если Вы используете цикл с To , то значение счетчика с каждым шагом будет увеличиваться на единицу, а если с Downto , то уменьшаться. Из этого следует, что в первом варианте начальное значение не должно превышать конечное, во втором — верно противоположное. В программе ниже, указанное пользователем количество раз, будут выводиться символы.

Здесь тело цикла не заключено в Begin-End , так как оператор всего один. Но если их будет больше, то операторные скобки обязательны. Стоит также отметить, что счетчик по выходу из цикла не будет иметь определенного значения, но если цикл закончиться раньше положенного, то счетчик сохранит последнее, записанное в него значение.

Другой пример — вычисление суммы чисел от A до B:

2 While – цикл с предусловием

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

While <выражение> Do <тело цикла>;

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

Пример программы написанный с использованием цикла While :

В данном коде использовался составной оператор Begin-End , так как операторов в теле цикла несколько.

3 Repeat – цикл с постусловием

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

В противоположность двум рассмотренным прежде циклам, этот прекращает свое выполнение тогда, когда условие становиться истинным, т. е. чтобы итерации продолжались условие должно быть ложно. Рассмотрим работу цикла с постусловием на примере:

Программа продолжает работать до тех пор, пока пользователь не допустит ошибку в ответе. Думаю, Вы заметили, что в примере (непосредственно в цикле) составной оператор Begin-End , несмотря на количество операторов не поставлен. Просто его роль выполняют слова repeat и until .

Для переходных манипуляций с циклом обычно используются три оператора:

  • Goto – переходит в отмеченную область;
  • Break – производит безусловный выход из цикла;
  • Continue – осуществляет переход к новой итерации.

4 Вложенные циклы

Циклы в паскаль могут вкладываться друг в друга. Житейский пример: например, у нас есть список студентов, у каждого из которых есть оценки — если мы захотим перебрать все оценки для каждого студента то один цикл (внешний) будет перебираться студентов, а второй (вложенный) — оценки конкретного студента. Обрабатывать списки (массивы) мы научимся дальше.

Рассмотрим вложенные циклы на примере цикла с параметром:

Вернувшись к терминологии, отметим, что в таких структурах одни циклы называются внешними, а другие внутренними. Так цикл 2 относительно цикла 1 является внутренним, а для цикла n он внешний.

Принцип работы вложенных циклов заключается в следующем. Сначала один раз выполняется цикл, идущий первым в программе, затем управление передается следующему циклу (№2), и если после него нет никаких других циклов, то он прокручивается до конца и снова единожды выполняется внешний цикл, иначе, если после цикла №2 стоит еще один вложенный цикл, то №2 выполняется один раз, передавая управление циклу идущему после него. Такой алгоритм продолжается до тех пор, пока самый внешний цикл не выполниться необходимое количество раз.

Предположим у нас есть вложенные циклы for :

Количество проходов по первому циклу = m1 , второму = m2*m1 , n-ому = mn*mn-1*mn-2*..*m2*m1 . В качестве доказательства предлагаю разобраться в следующей программе.

Имеются 5 циклов со счётчиками от i до h. В каждом из них при помощи переменных подсчитывается, сколько раз выполняется каждый цикл. Запустив программу на своем компьютере, Вы должны увидеть такой результат:


Результат работы вложенных циклов

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

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

Как в цикле for установить шаг паскаль

for is a keyword used in conjunction with other keywords to create loops.

Contents

loop with iterator variable

for used along with to / downto and do constructs a loop in which the value of a control variable is incremented or decremented by 1 passing every iteration.

behavior

In this example controlVariable is first initialized with the value of start (but cmp. § “legacy” below). If and as long as controlVariable is not greater than finalValue , the begin  …  end frame with all its statements is executed. By reaching end controlVariable is incremented by 1 and the comparison is made, whether another iteration, whether the statement-frame is executed again.

reverse direction

By exchanging to with downto , the variable – in the example controlVariable – is decremented by 1 and the condition becomes “as long as the control variable is not less than the final value.”

constraints

scope requirements

The control variable has to be local inside nested routines. A routine is nested, if routine variables tagged with the modifier is nested can store its address. Nevertheless, a global variable is always allowed as a control variable.

immutable requirement

While inside in a loop, it is imperative not to mess with the loop variable. Plain assignments – e. g. controlVariable := 2  – are caught by the compiler reporting “Illegal assignment to for-loop variable «controlVariable»”. However, indirect manipulations are not prevented:

The global variable i is modified by calling foo . The program runs an infinite loop.

type restrictions

The type of controlVariable has to be enumerable. Assuming your system operates on ASCII you can do

or generally use any type that is enumerable.

other step widths

Other step widths than 1 or — 1 are not possible by utilizing this syntax. You have to use other loop constructs such as while  …  do and manually initialize, compare and change the controlVariable .

The matter, whether FreePascal could provide a syntax specifying other step widths, came up several times. In general it was regarded as “syntactic sugar”, though, and in order to stay compatible Pascal’s core, or Delphi’s extensions, in order to avoid any impetuous decisions, the developers remained rather conservative and rejected any changes in that direction.

limits

Note, as it is common in mathematics when writing sums [math]\displaystyle< \sum_^ >[/math] or products [math]\displaystyle< \prod_^ >[/math] the limits are inclusive.

This excerpt will print one line with 5 , though you might be fooled by such thoughts as “5 to 5 – the difference is zero. So the body must never be executed.” This is in fact wrong. Not the difference determines the number of iterations, but the cardinality of the set constructed by the expression [ start .. finalValue ] . This can be an empty set, or in the case of [ 5 .. 5 ] just the single-element set [math]\displaystyle < \left\<5\right\>>[/math] .

legacy

Assuming no other manipulations were made, after the loop the value of controlVariable will be final , unless the the proper condition was not met from the start, then it is undefined (remains unchanged).

In case of empty loops (where the body is never executed), even the start value is not loaded. Rationale: The controlVariable exists for usage inside the loop’s body. If the loop’s body is not entered, then the value might remain unused. We generally avoid unused values, i. e. any unnecessary assignment without successive reads.

short syntax

For single statements writing a surrounding begin  …  end frame can be skipped resulting in:

It is advised though, to make use of that only in justified cases, where the readability is improved and it is very unlikely the loop is expanded by any additional statement. Too many programmers inadvertently fell for the pitfall before and added a properly indented line forgetting it requires a surrounding begin  …  end then, too.

Make it a habit and always accompany for -loops with begin  …  end , leaving the option to possibly eliminate those at a later stage, prior a complete code freeze (but not right in the middle of development).

loop with elements

With for  …  in loops the variable that is changed every iteration represents an element out of a collection. This works on strings, arrays, sets, and any other custom collection that implements the required iterators. Looping over an empty collection simply does nothing.

In contrast to other loops, an index variable is not provided. In the above example ord ( thing ) will return an index, but it has to be additionally retrieved while it inherently exists yet still inaccessible. Proposals were made, whether and how to extend the syntax allowing to specify an index variable that is adjusted with every iteration.

special commands

Inside loops (including for -loops) two special commands tamper with the regular loop-program-flow. system . continue skips the rest of the statements in one iteration. Effectively in a for -loop the next element/index is immediately assigned to the control variable, the regular check is performed, and processing of all the statements might start from the top again. Additionally system . break instantly skips the whole loop altogether. This is different to system . exit , which exits the whole frame, but loops do not create frames (but blocks do).

Their usage however is usually discredited, since they “disqualify” the loop’s iteration condition. One has to know a loop’s body contains such commands, in order to actually determine how often a loop is executed. Without such, you can tell how many times a loop is run just by inspecting the loop’s head or tail respectively.

как в pascal в цикле for задать шаг 0.5

Сергей Куликов

var
i: integer;
l:real;
begin
write(‘enter w: ‘);
l:=0;
for i:=1 to 10 do
begin
write(l,’ ‘);
l:=l+(0.5);
end;
end.

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

В Паскале нельзя для цикла for использовать шаг кроме +1 или -1, которые регулируются служебными словами to и downto соответственно.

Но можно воспользоваться делением попалам.
К примеру нужно получить значения от 0 до 10 с шагом 0.5, тогда:

for i := 0 to 20 do
begin
h := i / 2;
… далее обращаемся не к i, а к h
end;

Хотя, я бы лучше советовал в таком случае воспользоваться циклом while, а лучше всего repeat…until

Урок 4 — Циклы for, while, repeat . Until в языке Паскаль

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

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

1) задать перед циклом начальное значение параметра цикла;

2) изменять параметр перед каждым новым повторением цикла;

3) проверять условие повторения цикла;

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

В языке Паскаль существует 3 вида циклов:

1) цикл с параметром или цикл типа for,

2) цикл с предусловием или цикл типа while,

3) цикл с постусловием или цикл типа repeat . until.

В цикле типа for число повторений известно заранее, в циклах типа while и repeat . until число повторений цикла заранее неизвестно, производится проверка условия повторения цикла: в цикле типа while — перед циклом, в цикле типа repeat . until — после его окончания.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *