Операторы языка паскаль. На языке Паскаль существует три вида операторов цикла Операторы цикла с условием паскаль

Цикл – это многократно повторяющиеся фрагменты программ. Алгоритм циклической структуры – это алгоритм, содержащий циклы.
В ТР существует три оператора цикла:

  • цикл с предусловием;
  • цикл с постусловием;
  • цикл с параметром.

Для всех циклов характерны следующие особенности:

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

Оператор цикла с предусловием в Паскале

Оператор цикла с предусловием реализует следующую базовую конструкцию:

Формат записи:
While L do OP;
где:
While - пока не;
do – выполнить;
L – выражение логического типа;
OP –

Рис. 9.3. Структурная схема оператора цикла с предусловием

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

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

Пример 9.3. Составить программу вычисления функции y для заданного значения x.

где: C=2,7; n=2; a=0.5; 0

Program Ex_2;
Uses crt;
Var
y, C, a, t:real;
n:integer;
Begin
clrscr;
Writeln("Введите C, a, n"); Read(C, a, n);
Writeln("Результат:");
Writeln("t’:5,’y’:15);
t:=0;
While t<1 do
Begin
y:=C*exp(a*t)*cos(n*t);
Writeln(t:4:1,’ ‘:5, y:10);
t:=t+0.1;
End;
End.

Оператор цикла с постусловием в языке Паскаль

Оператор цикла с постусловием реализует следующую конструкцию:

Формат записи:
Repeat
OP
Until L;
где:
Repeat - повторять;
Until – пока не;
L – выражение логического типа;
OP – тело цикла; оператор (простой или составной).

Рис. 9.4. Структурная схема оператора цикла с постусловием

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

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

В отличие от цикла с предусловием, в цикле с постусловием тело цикла выполняется о крайней мере один раз не зависимо от условия.
В операторе цикла с постусловием ключевые слова Repeat и Until играют роль операторных скобок.
Пример 9.4. Составить программу вычисления функции y для заданного значения x.


где: C=2,7; n=2; a=0.5; 0

Program Ex_2;
Uses crt;
Var
y, C, a, t:real;
n:integer;
Begin
clrscr;
Writeln("Введите C, a, n");
Read(C, a, n);
Writeln("Результат:"); Writeln("t’:5,’y’:15);
t:=0;
Repeat
y:=C*exp(a*t)*cos(n*t);
Writeln(t:4:1,’ ‘:5, y:10);
t:=t+0.1;
Untile t>=1;
End.

Оператор цикла с параметром в языке Паскаль

Оператор цикла с параметром реализует следующую базовую конструкцию:

Рис. 9.5. Структурная схема оператора цикла с параметром.

Формат записи :
1. For P:=Pn to Pk do OP;
2. For P:=Pk downto Pn do OP;
где:
For - для;
to – до;
downto – уменьшая до
do – выполнить;
OP – тело цикла; оператор (простой или составной);
P - параметр цикла, переменная порядкового типа;
Pn, Pk – начальное и конечное значение параметра.

Работа оператора : Вычисляется начальное значение параметра цикла Pn и присваивается параметру P . Проверяется условие P ? Pk, и если оно True выполняютсяоператоры тела цикла OP . После чего наращивается значение P на единицу и опять проверяется условие P ?Pk . Если условие False осуществляется выход из цикла.
В операторе с downto шаг изменения параметра цикла равен –1 .

Примеры записи:

For i:=1 to n do n:=sqr(i)+1;
For s:=’A’ to ‘Z’ do R:=R+ord(s)/127;
For L:=False to True do H:= (False or L) And Not (L);

Пример 9.5. Составить программу вычисления функции y для заданного значения n.


где: C=2,7; a=0.5; t=0,1; 0

Program Ex_3;
Uses crt;
Var
y, C, a, t:real;
n:integer;
Begin
clrscr;
Writeln("Введите C, a, t");
Read(C, a, n);
Writeln("Результат:");
Writeln(‘n’:5,’y’:15);
For n:=1 to 10 do
Begin
y:=C*exp(a*t)*cos(n*t);
Writeln(n:4,’ ‘:5, y:10);
end;
End.

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

Y= 1+ 1/2+ 1/3 + …+ 1/ n

Очевидно, что с использованием только рассмотренных выше типов операторов можно составить программу лишь для фиксированного значения n. Например, при n=5 требуемые вычисления можно задать с помощью оператора присваивания вида:

Y:= 1+1/2+1/3+1/4+1/5

Если же значение n не фиксируется, а является исходным данным, вводимым в процессе выполнения программы (и даже константой, описанной в программе), то аналогичный оператор присваивания записать невозможно. Ибо запись вида Y:= 1+1/2+1/3+…+1/ n в языках программирования недопустима.

Для устранения возникающих трудностей служат операторы цикла . Они позволяют повторять выполнение отдельных частей программы. Можно выделить четыре ператора цикла , присутствующих в том или ином виде во всех языках программирования: простой арифметический оператор цикла (цикл с параметром с шагом 1), сложный арифметический оператор цикла (цикл с параметром произвольного шага), итерационный оператор цикла с предусловием , итерационный оператор цикла с постусловием .

Простой арифметический оператор цикла Паскаля (цикл с параметром)

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

На самом деле вычисление этой суммы можно осуществить по очень простому и компактному алгоритму: предварительно положим y=0 (с помощью оператора присваивания y:=0), а затем выполним оператор присваивания y:= y+1/ i для последовательных значений i= 1,2,…, n. При каждом очередном выполнении этого оператора к текущему значению y будет прибавляться очередное слагаемое. Как видно, в этом случае процесс вычислений будет носить циклический характер: оператор y:= y+1/i должен выполняться многократно, т.е. циклически, при различных значениях i.

Этот пример циклического вычислительного процесса является весьма типичным; его характерные особенности состоят в том, что

  • число повторений цикла известно к началу его выполнения (в данном случае оно равно значению n, которое предполагается заданным к этому времени);
  • управление циклом осуществляется с помощью переменной порядкового типа, которая в этом циклическом процессе принимает последовательные значения от заданного начального до заданного конечного значений (в нашем случае – это целочисленная переменная i, принимающая последовательные значения от 1 до n).

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

For V:= E1 to E2 do S,

где for (для), to (увеличиваясь к) и do (выполнять, делать) – служебные слова, V – переменная порядкового типа, называемая параметром цикла, Е1 и Е2 – выражения того же типа, что и параметр цикла, S – оператор, который и выполняется многократно в цикле, называемый телом цикла.

Заметим, что в Паскале после do должен стоять один оператор, если необходимо выполнить несколько действий, то они должны быть объединены в один составной оператор путем заключения в операторные скобки.

Этот оператор цикла Паскаля предусматривает присваивание параметру цикла V последовательных значений от начального значения, равного значению выражения Е1, до конечного значения, равного значению выражения Е2, т.е. при каждом повторении выполняется оператор присваивания V:= succ(V) , и выполнение оператора S при каждом значении параметра цикла V. При этом значения выражений Е1 и Е2 вычисляются один раз, при входе в оператор цикла, а значение параметра цикла V не должно изменяться в результате выполнения оператора S. Если заданное конечное значение меньше начального значения (что допустимо), то оператор S не выполняется ни разу.

В Паскале считается, что при нормальном завершении выполнения оператора цикла значение параметра цикла не определено.

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

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

Readln(n);
Y:= 0;
For i:= 1 to n do y:= y+1/i;

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

For V:= E1 downto E2 do S,

где downto (уменьшаясь к) – служебное слово, а все остальные слова и выражения имеют прежний смысл. Изменение параметра цикла от большего значения к меньшему происходит при выполнении присваивания V:=pred(V). Заметим, что начальное значение может быть меньше конечного значения. В этом случае оператор S не выполнится ни разу. Значение параметра цикла по завершении выполнения такого цикла так же считается неопределенным.

Следует запомнить и то, что для обоих вариантов записи цикла с параметром справедливо: если начальное и конечное значения равны, то тело цикла (оператор S) выполнится один раз.

Заметим так же, что параметр цикла может и не использоваться в теле цикла, так что основное его назначение – это управление числом повторений цикла. Например, значение y= x n, где n>=0 – целое, можно вычислить по следующему алгоритму: предварительно положить y=1, а затем n раз домножить это значение на x:

Пример кода программы цикла Паскаля

Readln(n);
Readln(x);
Y:= 1;
For i:= 1 to n do y:= y*x;

Как видно, здесь параметр цикла i служит лишь для того, чтобы тело цикла (оператор y:= y* x) выполнилось нужное число раз.

Арифметический оператор цикла Паскаля с произвольным шагом

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

Итерационные операторы цикла Паскаля

Итерационные циклы отличаются от циклов с параметром тем, что в них заранее неизвестно число повторений.

Пусть мы отправляемся за грибами и возвращаемся домой, когда корзина наполнится. Все грибники делятся на 2 категории:

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

Отсюда получаются два варианта реализации итерационных циклов:
с предусловием и с постусловием.

В цикле с предусловием сначала проверяется условие, а потом делается шаг. Грибник придет с полной или почти полной корзиной. В цикле с постусловием – сначала шаг, а потом проверка. Как всякий нормальный грибник, этот принесет полную или слегка переполненную корзину.

Какой алгоритм выбрать? Это зависит от конкретной задачи.

Если, сделав шаг без проверки, можно свалиться в яму, то лучше проверка вначале (как слепой с палочкой). Ну, а если шаг без проверки вас не пугает, то можно отложить ее до завершения шага.

Нужно также проанализировать событие, которого мы ожидаем. Если оно может случиться до первого шага, то нужен цикл с предусловием. А если событие не может случиться до первого шага, то нужен цикл с постусловием.

Оператор цикла Паскаля с постусловием

Рассмотрим теперь математическую задачу. Пусть нам необходимо вычислить сумму первых членов гармонического ряда, удовлетворяющих условию 1/i>= e, где 0< e<1, а i=1,2,3…...Эту задачу можно решить по следующему алгоритму: положить предварительно y=0 и i=0, а затем в цикле увеличивать i на 1, к значению y добавлять очередное слагаемое 1/ i до тех пор, пока текущее значение 1/ i впервые окажется больше заданного значения 0< e<1.

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

Для задания таких вычислительных процессов и служит оператор цикла Паскаля с постусловием. Этот оператор имеет вид:

Repeat S1; S2;…; Si until B,

где repeat (повторять) и until (до) – служебные слова, через Si обозначен любой оператор Паскаля, а через В – логическое выражение.

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

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

Readln(e);
i:=0;
y:=0;
Repeat
i:=i+1;
y:=y+1/i;
Until 1/i

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

Пример кода оператора цикла Паскаля с постусловием

Readln(n);
i:=0;
y:=0;
Repeat
i:=i+1;
y:=y+1/i;
Until i>n;

Оператор цикла Паскаля с предусловием

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

Пусть, например, дано вещественное число М. Требуется найти наименьшее целое неотрицательное число k, при котором 3 k> M. Эту задачу можно решить по следующему алгоритму: предварительно положить y=1 и k=0; затем в цикле домножать значение y на 3 и увеличивать значение k на 1 до тех пор, пока текущее значение y впервые окажется больше значения М. На первый взгляд, здесь можно воспользоваться оператором цикла с постусловием:

Пример кода оператора цикла Паскаля с постусловием

Y:=1; k:=0;
Repeat
y:=y*3;
k:=k+1;
Until y> M;

Однако нетрудно убедиться в том, что при M<1 будет получен неправильный результат k=1, тогда как должно быть получено k=0: в этом случае предварительно сформированное значение k=0 является окончательным результатом и действия, предусмотренные в цикле, выполняться не должны.

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

где while (пока), do (делать, выполнять) – служебные слова, В – логическое выражение, S – оператор. Здесь оператор S выполняется ноль или более раз, но перед каждым очередным его выполнением вычисляется значение выражения В, и оператор S выполняется только в том случае, когда значение выражения В true. Выполнение оператора цикла завершается, когда выражение В впервые принимает значение false. Если это значение выражение В принимает при первом же его вычислении, то оператор S не выполнится ни разу.

В рассматриваемой нами задаче правильное значение k при любом значении М может быть получено следующим образом:

Пример кода оператора цикла Паскаля с предусловием

Y:=1; k:=0;
While y Begin
y:=y*3;
k:=k+1;
End;

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

Отметим отличия и особенности хорошего стиля работы с рассмотренными циклическими операторами.

Цикл с предусловием While (пока условие истинно) Цикл с постусловием Repeat (до истинности условия)
  • До начала цикла должны быть сделаны начальные установки переменных, управляющих условием цикла, для корректного входа в цикл
  • В теле цикла должны присутствовать операторы, изменяющие переменные условия так, чтобы цикл через некоторое число итераций завершился
  • Цикл работает пока условие истинно (пока True)
  • Цикл работает пока условие ложно (пока False)
  • Цикл завершается, когда условие становится ложным (до False)
  • Цикл завершается, когда условие становится истинным (до True)
  • Цикл может не выполниться ни разу, если исходное значение условия при входе в цикл False
  • Цикл обязательно выполнится как минимум один раз
  • Если в теле цикла требуется выполнить более одного оператора, то необходимо использовать составной оператор
  • Независимо от количества операторов в теле цикла, использование составного оператора не требуется
Цикл со счетчиком (с параметром) For
  • Начальная установка переменной счетчика цикла до заголовка не требуется
  • Изменение в теле цикла значений переменных, стоящих в заголовке не допускается
  • Количество итераций цикла неизменно и точно определяется значениями нижней и верхней границ и шага приращения
  • Нормальный ход работы цикла может быть нарушен оператором goto или процедурами Break и Continue
  • Цикл может не выполниться ни разу, если шаг цикла будет изменять значение счетчика от нижней границы в направлении, противоположном верхней границе

Оператор, который выполняется в цикле, сам может быть циклом. Это относится ко всем видам циклов. В результате мы получаем вложенные циклы . Механизм работы вложенных циклов удобнее всего рассмотреть на примере вложенных циклов с параметром. Пусть нам нужно описать работу электронных часов, начиная с момента времени 0 часов, 0 минут, 0 секунд. Значение минут станет равным 1 только после того, как секунды «пробегут» все последовательные значения от 0 до 59. Часы изменят свое значение на 1 только после того, как минуты «пробегут» все последовательные значения от 0 до 59. Таким образом, вывод всех значений времени от начала суток до конца суток может быть представлен следующим фрагментом программы:

For h:=0 to 23 do
For m:=0 to 59 do
For s:=0 to 59 do
Writeln(h,":",m,":",s);

Для удобства реализации циклических структур на Паскале в последних версиях языка введены операторы break и continue , применяемые внутри циклов. Они расширяют возможности использования циклов и улучшают структуру программы.

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

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

Здравствуйте, дорогие читатели! Вот мы с вами и подошли к изучению циклов. Циклы в Паскаль. Что это такое? Как этим пользоваться? Для чего они нужны? Именно на эти вопросы я сегодня и отвечу.
Если вы читали , то знаете, что существует три вида алгоритмов: линейный, разветвляющийся и циклический. Мы с вами уже знаем, как реализовывать и алгоритмы на Паскале. Приступим к изучению последнего типа алгоритмов.
В языке Pascal, как и в большинстве языков программирования, существует три типа циклических конструкций.

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

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

Задача 1. Вывести все числа от 1 до числа, введенного с клавиатуры.

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

Как вы, наверное, уже поняли из названия, while — это цикл, в котором условие стоит перед телом. Причем тело цикла выполняется тогда и только тогда, когда условие true ; как только условие становится false

While имеет формат:

while < условие> do <оператор 1>; {Пока … делай ….}

Данный цикл подходит только для одного оператора, если же вы хотите использовать несколько операторов в своем коде, вам следует заключить их в операторные скобки — begin и end; .

Решение задачи.

Program example_while; var i, N: integer; { объявляем переменные } begin i:= 1; { Присваиваем i значение 1 } readln(N); { Считываем последнее число } while i <= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.

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

Repeat — полная противоположность while . Repeat — это цикл, в котором условие стоит после тела. Причем оно выполняется тогда и только тогда, когда результат условия false ;как только логическое выражение становится true , выполнение цикла прекращается.

Repeat имеет формат:

repeat { повторяй … }
<оператор 1>;
< оператор 2>;

until {до…} <условие>

Begin и end не требуются.

Решение задачи.

Program example_repeat; var i, N: integer;{ объявляем переменные } begin i:= 1; { Присваиваем i значение 1 } readln(N); { Считываем последнее число } repeat {после repeat не требуется begin и end } write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} until i = N + 1; {Например, i = 11, а N = 10. Цикл прекратится, так условие стало true.} end.

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

For — это цикл, в котором тело выполняется заданное количество раз.

Существует две формы записи этого цикла:

Первая форма

for <счетчик1> := <значение1> to <конечное_значение> do <оператор1>;

<счетчик1> будет увеличиваться на 1.

<значение1> — это начальное значение счетчика. Это может быть переменная или число.
<конечное_значение> : как только значение <счетчик1> станет больше <конечное_значение>

Если требуется написать несколько операторов в теле цикла, используем begin и end .

И <счетчик1>, и <конечное_значение>, и <значение1> — переменные целого типа.

Чаще всего в качестве счетчика используется переменная i.

Вторая форма

for <счетчик2> := <значение2> downto <конечное_значение> do <оператор1>;

После каждой итерации значение <счетчик2> будет уменьшатся на 1.

<значение2> — это начальное значение счетчика.
<конечное_значение> : как только значение <счетчик2> станет меньше <конечное_значение>, выполнение цикла прекратится.

Два важных примечания:

  1. Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение; конечное_значение].
  2. Изменять значение счетчика внутри тела нельзя ! Вот что выводит компилятор:

Решение задачи:

Program example_for; var i, N: integer; begin read(N); {предположим, что мы ввели 10} for i:= 1 to N do write(i, " "); {количество итераций - 10 - 1 + 1 = 10} end.

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

Давайте решим пару задач.

For1 . Даны целые числа K и N (N > 0). Вывести N раз число K.

Организовываем простой цикл от 1 до требуемого числа.

Program for1; var K, N, i: integer; begin read(K, N); for i:= 1 to N do write(K, " "); {Пишем К через пробел } end.

For2 . < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.

Так как A < B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

Program for2; var A, B, i, count: integer; begin read(A, B); for i:= A to B do write(i, " "); {выписываем числа от меньшего к большему} count:= B - A + 1; {считаем количество чисел} writeln; write("Количество чисел - ", count); end.

For9 . Даны два целых числа A и B (A < B). Найти сумму квадратов всех целых чисел от A до B включительно.

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

Program for9; var A, B, i, S: integer; begin read(A, B); S:= 0; {PascalABC делает это автоматически, но если у вас другой компилятор советуем обнулять переменные вручную} for i:= A to B do S:= S + Sqr(i); {складываем все квадраты} writeln; write("Сумма квадратов - ", S); end.

For13° . Дано целое число N (> 0). Найти значение выражения 1.1 – 1.2 + 1.3 – … (N слагаемых, знаки чередуются). Условный оператор не использовать.

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

Program for13; var N, A, i: integer; S: real; begin Write("N = "); readln(N); S:= 1.1; A:= 1; {Сначала положительное} for i:= 2 to N do {первую итерацию цикла мы уже произвели, поэтому начинаем отсчет с 2} begin A:= -A; {Теперь отрицательное} S:= S + A * (1 + i / 10); {Складываем} end; Writeln(S:5:1); {Отдадим под дробную часть одно знакоместо} end.

While1° . Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A.

Каждый раз вычитаем B из А, пока А — В >= 0.

Program while1; var A, B: integer; begin readln(A, B); while (A - B) >= 0 do A:= A - B; {Пока разница положительная, вычитаем. Необходимо предусмотреть вариант с кратностью А и B, поэтому >=} write(A); end.

While4° . Дано целое число N (> 0). Если оно является степенью числа 3, то вывести True, если не является - вывести False.

Действуем следующим образом: пока N делится нацело на три, делим N нацело. Затем, если N = 1 — число является степенью тройки; если N <> 1, тогда число — не степень тройки. Для того чтобы решить эту задачу, требуется знать, что такое , и как работают .

Program while4; var N: integer; begin readln(N); while N mod 3 = 0 do N:= N div 3; {Пока остаток от деления на три равен нулю, делим N нацело } writeln(N = 1); {логическое выражение} end.

На сегодня все! Не забывайте почаще заходить на наш сайт и кликать по кнопочкам, которые расположены перед комментариями.

В большинстве программ встречается необходимость многократного выполнения некоторого оператора (или блока операторов). Для организации подобного рода конструкций могут использоваться операторы цикла. В языке программирования Паскаль используются следующие виды операторов цикла: for, while, repeat (в PascalABC.NET используется также оператор цикла foreach ).

Блок операторов, который необходимо выполнить многократно называется телом цикла.

Оператор for в Паскаль

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

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

В зависимости от направления изменения параметра цикла (возрастание - to или убывание - downto ) в языке Паскаль оператор цикла for может быть записан в одной из двух форм:

  • for параметр := нач_знач to кон_знач do
  • оператор;
  • for параметр := нач_знач downto кон_знач do
  • оператор;

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

Рассмотрим работу цикла for .

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

  1. Сравнивается текущее значение параметра с конечным значением.
  2. Если условие параметр кон_знач истинно, то выполняется тело цикла, в противном случае оператор for завершает работу и управление передается оператору, следующему за циклом.

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

Задача. Вывести на экран список квадратов целых чисел от 10 до 1.

Решение. В поставленной задаче параметр цикла убывает.

{Фрагмент кода программы}

  • for i:= 10 downto 1 do
  • writeln(i:2, " ", i * i);

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

Пример 2. Известны оценки абитуриента на четырех экзаменах. Определить сумму набранных им баллов.

Задача. Известны оценки абитуриента на четырех экзаменах. Определить сумму набранных им баллов.

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

{Фрагмент кода программы}

  • s:= 0;
  • for i:= 1 to 4 do
  • begin
  • readln(mark);
  • s:= s + mark;
  • writeln(s);

Наверное, каждому школьнику известен язык программирования, который называется "Паскаль". Что же он представляет собой? Уже давно данный язык стал мертвым, ведь используется лишь в школах для обучения учеников и считается базой. Он относится к упрощенному варианту языка Algol. Но, в отличие от последнего, "Паскаль" может использоваться для написания реальных программ и даже игр. Ранее он имел достаточную популярность, но сейчас сохранился лишь, по сути, для учебных целей. Первое, что привлекает потенциальных программистов в "Паскале", - это возможности писать, сохраняя свойства английского языка, а не ломать головы над использованием специальных схем, которые приняты в языках, подобных С.

Создал "Паскаль" Никлаус Вирт в 1970 году. Назван язык в честь ученого Блеза Паскаля, который стал отцом первой в мире машины. Она могла складывать два разных числа. Прямым потомком языка "Паскаль" является "Модула-2". Последний представляет собой усовершенствованную версию.

Система программирования

Pascal ABC - язык программирования, представленный уже существующей системой. Однако описываемый является вариантом нового поколения.

Почему же создали "Паскаль АБС"? Для этого было две существенные причины:

  • устаревшие системы первоначального языка;
  • желание сформировать более современную и интегрированной среду программирования.

Язык включает в себя систему классического "Паскаля", элементы "Делфи" и собственные расширения. Появился он в 2002 году.

Существует также одноименный компилятор, который является мощной и современной Он способен работать как на Linux, macOS, так и на Windows.

Платформа.NET позволяет использовать некоторые дополнительные функции, а также программировать в структурном, объектно-ориентированном и функциональном стилях. Автором данного языка стал Михалкович. Влияние на него оказал не только "Паскаль" и "Делфи", но еще С# и "Питон".

Общая характеристика операторов

Операторы в языке программирования необходимы для того, чтобы написать программу. Они дают возможность выполнять те или иные функции и алгоритмы. Чем команды в "Паскале" отличаются от других элементов? Тем, что они подразумевают выполнение какого-либо действия. "Паскаль" устроен таким образом, что все операторы состоят из специальных служебных слов. Отделяются команды между собой и другими элементами при помощи символа точка с запятой (;). Все операторы условно делятся на группы:

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

Обе группы будут подробно рассмотрены ниже в статье.

Оператор процедуры

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

  • стандартные (прописаны в самом языке);
  • пользовательские (созданные программистом).

При прописании определенного набора элементов в строке задействуется та или иная процедура.

Операторы ("Паскаль"), которые отвечают за стандартные действия, запомнить достаточно легко. Необходимо написать в разделе описаний слово uses и ввести описание процедуры. Есть такие стандартные элементы, которых нет необходимости вводить в первый блок. Таковыми являются задачи read, write и другие.

Пользовательские процедуры необходимо перед работой программы создать и поместить в раздел описаний или в модуль. При использовании последнего варианта его следует записать в раздел USES или PROCEDURE.

Оператор безусловного перехода

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

Перед тем как создавать отдел, необходимо знать о некоторых нюансах:

  • все описанные метки должны быть использованы;
  • если элементы имеют названия из чисел, то можно их не объявлять.

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

Операторы условия

Условный оператор, представленный конструкций IF-THEN-ELSE, используется для отображения ветвлений, в которых один из вариантов обязательно является ложью. Вычислительный процесс будет продолжаться по одному из представленных вариантов. Условно процесс делится на два вида:

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

Конструкция IF-THEN-ELSE представляет структурированные операторы. Данные слова являются служебными. При этом последнее не подлежит обязательному использованию.

Как же работает конструкция? С английского она переводится как «если-тогда-иначе». Если условие, заданное программой, верно, то выполняется то, что написано после слова then. А если же оно неверное, то действительным считается то, что записано после else или после строчки с then.

Составной оператор

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

Оператор выбора

Из-за того, что оператор IF способен работать лишь с двумя ветвлениями, была создана команда выбора CASE. В данной системе есть служебные слова - case, of, end, else. При этом последнее также может отсутствовать. До того как оператор сработает, должен быть объявлен параметр и его значение. Если ключ выбора совпадает с константами выбора, то выполняется тот оператор, который идет после последнего. Если правильности нет, то и все команды игнорируются. Выполняется тот вариант, который идет после слова ELSE или после оператора CASE.

Данный оператор выбора в "Паскале" не использует такую систему работы, как IF. Здесь нет явной проверки условия. Если рассматривать его работу более подробно, то можно заметить, что CASE вводит небольшой диссонанс в программу, так как оператор заканчивается словом END, к которому нет парного BEGIN. Его использовать намного удобнее, особенно если есть 5 и более вариантов выбора. Прописывать постоянно IF-THEN будет долго, да и это не есть удобным процессом.

Операторы ("Паскаль"): циклы

Что такое циклы? Они подразумевают собой повторение некоторых систем команд несколько раз до полного удовлетворения условия. В "Паскале" известно два :

  • цикл с параметром;
  • итерационный.

Что же представляет каждый? Первый всегда имеет известные параметры. Иногда его еще называют регулярным. Его основным отличием является то, что количество повторений цикла известно до его начала.

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

Отличить виды и типы циклов можно при помощи некоторых структур:

  • REPEAT: повторение с постусловием.
  • WHILE: повторение с предусловием.
  • FOR - оператор счета. Он используется в цикле с параметром.

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

Операторы ввода-вывода

За взаимодействие среды программирования с окружающей средой отвечают операторы ввода-вывода. Именно они позволяют вводить информацию и выводить результат на экран или на печать. Команда read позволит пользователю в запущенной программе указать свои данные. Как это происходит? Программа на время останавливается, на экране появляется мигающий курсор, который ожидает ввода данных от человека. Разница в работе двух операторов read и readln небольшая. Последний просто переносит курсор на следующую строку.

Оператор вывода ("Паскаль") - write(ln). Частичка LN позволяет продолжить вывод данных на следующей строке. Если в программе указать просто оператор, то будет выведена на экран пустая срока. Использовать в таком смысле данную команду не обязательно.

Имеются также операторы var, close. Их можно не использовать, если того не требует сама программа.

Основные операторы ("Паскаль") описаны в статье. Они помогут лучше написать программу, сами же работают достаточно быстро и без сбоев. Без них не сложится ничего у будущего программиста при работе с языком "Паскаль". Программы без операторов, увы, представить нельзя. А значит, ими необходимо уметь оперировать. Сложными могут показаться операторы цикла, однако следует потренироваться и проблемы все исчезнут. Удачи в работе!