В статье рассматривается один из самых мощных циклических операторов языка паскаль – оператор For. Разберём синтаксис оператора, а так-же напишем пару примеров программ.
Цикл for
Часто цикл for называют циклом со счетчиком. Этот цикл используется, когда число повторений не связано с тем, что происходит в теле цикла. Т.е. количество повторений может быть вычислено заранее (хотя оно не вычисляется).
В заголовке цикла указываются два значения. Первое значение присваивается так называемой переменной-счетчику, от этого значения начинается отсчет количества итераций (повторений). Отсчет идет всегда с шагом равным единице. Второе значение указывает, при каком значении счетчика цикл должен остановиться.
Другими словами, количество итераций цикла определяется разностью между вторым и первым значением плюс единица. В Pascal тело цикла не должно содержать выражений, изменяющих счетчик.
Цикл for существует в двух формах:
for счетчик : = значение to конечное_значение do тело_цикла ;
for счетчик : = значение downto конечное_значение do тело_цикла ;
Паскаль с нуля [ч1]. Первая программа.
Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.
Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.
var i , n : integer ; begin write ( ‘Количество знаков: ‘ ) ; readln ( n ) ; for i : = 1 to n do write ( ‘(*) ‘ ) ; readln end .
Операторы цикла в паскале
Циклы — одна из самых больших тем в паскале , по совместительству одна из самых сложных.
Но так как сам по себе язык паскаль довольно простой , то и циклы не будут такими трудными для понимания.
Что такое цикл , для чего он нужен , как используется и другое
Что такое цикл. Цикл — это повторения определенного участка кода N количество раз. Циклы также можно встретить в повседневной жизни и при этом довольно часто. Например : мыть посуду пока она не закончится.
Циклы имеют свои условия окончания , например : пока a больше b.
В языке программирования pascal предусмотрено 3 вида циклов. Первый цикл это for , второй — while, третий — repeat. Все они немного отличаются друг от друга и все же они довольно простые.
Цикл For — схема работы

Цикл For также называют циклом с известным числом повторений.
Он обладает следующей структурой (изобразим её на блок-схеме):
Как видим на схеме, в цикле for имеются:
Сразу же приведём пример кода программы, цикл в которой соответствует блок схеме на рисунке выше:
var i, a:integer;begin for i:=1 to 10 do begin // начало тела цикла (у нас в нём будет 3 операции, как на блок-схеме выше) a := i; // получаем очередное значение счётчика (первый раз оно будет равно 1, а последний раз = 10) a := a + 2; // прибавляем к значению 2 write(a, ‘ ‘); // выводим с пробелом после значения end; // конец тела цикла readln();end.
— здесь в теле программы тоже три операции (но уже конкретные) и тот же диапазон значений счетчика, что и на блок-схеме. Запустите программу и посмотрите на результат.
Далее рассмотрим примеры решения задач, чтобы лучше понять как работает цикл for.
Структура
Чтобы записать конструкцию повтора с параметром, нужно набрать следующий код:
В примере зарезервированные слова языка для удобства написаны заглавными буквами, на практике можно использовать строчное начертание. Используемые переменные и операторы приведены в фигурных скобках. Они означают:
Отрабатывая конструкцию for, Pascal рассчитывает значение , присваивает := , после чего запускается повтор действий:
- проверка условия , при выполнении которого цикл останавливает свою работу;
- запуск оператора ;
- увеличение значения на единицу, то есть := + 1.

Поскольку количество повторений внутри тела for известно, данную конструкцию относят к детерминированным циклам.
Цикл while
Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.
Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.
var i , n : integer ; begin write ( ‘Количество знаков: ‘ ) ; readln ( n ) ; i : = 1 ; while i < = n do begin write ( ‘(*) ‘ ) ; i : = i + 1 end ; readln end .
Pascal: выход из цикла
Break и Continue
Для выхода из цикла предусмотрена процедура break в Паскале. Break досрочно прекращает выполнение циклов while, repeat и for.
Процедура Continue досрочно выходит из текущей итерации цикла, но, не завершая его, а переходя к следующей итерации.
Рассмотрим использование процедур выхода из цикла Continue и Break в Паскале (будем использовать цикл while):
Пример: Программа вывода на экран степеней двойки с использованием процедур break и continue
| 1234567891011 | var a : integer ; begin a : = 1 ; while a < 1000 do begin a : = a * 2 ; if a = 64 then continue ; if a = 256 then break ; write ( a : 4 ) ; end ; end . |
В результате программы на экране будут напечатаны: 2 4 8 16 32 128.
Число 64 пропущено, так как при условии a=64 происходит выход из текущей итерации (continue) и число не выводится на экран, а при a=256 выполнение цикла прерывается окончательно (break), так и не распечатав число 256.
Задача 8.
Решить рассмотренную задачу с процедурами
Пример
Чтобы понять, как будет выполняться for, далее, приведён пример, кода на языке паскаль для «чайников».
- s := 0;
- for a := 1 to 5 do
- begin
- s := s + a;
- end;
- writeln(s);
Разбираясь в написанных инструкциях, можно записать значения в каждой итерации:
- 1-я итерация: a = 1; s = 1;
- 2-я итерация: a = 2; s = 3;
- 3-я итерация: a = 3; s = 6;
- 4-я итерация: a = 4; s = 10;
- 5-я итерация: a = 5; s = 15.
В итоге пользователь увидит на экране число «15» – сумму чисел от 1 до 5.
Чтобы сделать первую программу более универсальной, следует заменить числа 1 и 5 переменными.
Табулирование функции на отрезке с заданным шагом
* Следует учесть, что эта тема не обязательна для школьного курса информатики, в основном предполагается ознакомление студентами.
Табулирование функции одной переменной
Пример:
На отрезке [a,b] с шагом h протабулировать функцию
и вывести на печать значения этой функции.
Алгоритм:
Для решения задачи в области определения функции вводится сетка – совокупность точек:
, где x0 = а, x1= x0+h,…, xi = xi-1+h, xn = b.
Тогда задача сводится к вычислению функции f в точках xi, то есть нужно вычислить:
f(x0), f(x1), …, f(xi), f(xn)
| var x , a , b , f , h : real ; begin writeln ( ‘отрезок от … и до …’ ) ; readln ( a , b ) ; writeln ( ‘шаг’ ) ; readln ( h ) ; x : = a ; while x < = b do begin f : = sqr ( x ) + ln ( abs ( x ) ) ; writeln ( ‘x= ‘ , x , ‘ f= ‘ , f ) ; x : = x + h ; end end . |
var x, a, b, f, h: real;begin writeln(‘отрезок от … и до …’); readln(a, b); writeln(‘шаг’); readln(h); x := a; while x
Пример:
Вычислить 7 значений функций
0.15x + ay= ———– a2 + x2
где начальное значение а=0.14х, шаг Δа=0.22
Результаты для x = 2:
a =0.28 y = 0.142212632404865a =0.5 y = 0.188235294117647a =0.72 y = 0.225743626062323a =0.94 y = 0.253911049225981a =1.16 y = 0.273121819814427a =1.38 y = 0.284533568186437a =1.6 y = 0.289634146341463
| var x , a , y , h : real ; i : integer ; begin writeln ( ‘ведите x’ ) ; readln ( x ) ; h : = 0.22 ; a : = 0.14 * x ; for i : = 1 to 7 do begin y : = ( 0.15 * x + a ) / ( sqr ( a ) + sqr ( x ) ) ; writeln ( ‘a =’ , a , ‘ y = ‘ , y ) ; a : = a + h ; end end . |
var x, a, y, h: real; i:integer; begin writeln(‘ведите x’); readln(x); h:=0.22; a := 0.14*x; for i:=1 to 7 do begin y := (0.15*x + a)/(sqr(a)+sqr(x)); writeln(‘a =’, a, ‘ y = ‘, y); a := a + h; endend.
Табулирование функции двух переменных
Пример:
xn≤x≤xk
Δх
у
уn≤y≤yk
Δу
вычислить значение функции
Например: если xn = 2; xk = 3уn = -1; yk = 1шаг Δх = 1, шаг Δy = 0.5то f1 = 22+ln|-1| = 4f2 = 22+ln|-0.5|= 3.30685281944005…
x= 2 y= -1 f= 4x= 2 y= -0.5 f= 3.30685281944005x= 2 y= 0 f= -∞x= 2 y= 0.5 f= 3.30685281944005x= 2 y= 1 f= 4x= 3 y= -1 f= 9x= 3 y= -0.5 f= 8.30685281944005x= 3 y= 0 f= -∞x= 3 y= 0.5 f= 8.30685281944005x= 3 y= 1 f= 9
| var xn , xk , yn , yk , f , hx , hy , x , y : real ; begin writeln ( ‘отрезок для x от … и до …’ ) ; readln ( xn , xk ) ; writeln ( ‘отрезок для y от … и до …’ ) ; readln ( yn , yk ) ; writeln ( ‘шаг для x’ ) ; readln ( hx ) ; writeln ( ‘шаг для y’ ) ; readln ( hy ) ; x : = xn ; y : = yn ; while x < = xk do begin while y < = yk do begin f : = sqr ( x ) + ln ( abs ( y ) ) ; writeln ( ‘x= ‘ , x , ‘ y= ‘ , y , ‘ f= ‘ , f ) ; y : = y + hy ; end ; x : = x + hx ; y : = yn ; end end . |
var xn, xk, yn, yk, f, hx, hy,x,y: real;begin writeln(‘отрезок для x от … и до …’); readln(xn, xk); writeln(‘отрезок для y от … и до …’); readln(yn, yk); writeln(‘шаг для x’); readln(hx); writeln(‘шаг для y’); readln(hy); x := xn; y := yn; while x
Задание:
Вычислить значение функции:
z(x, у) = sin x + cos y
при всех х, изменяющихся на интервале [-1, 1] с шагом Δх = 0.2, и у, изменяющихся на интервале [0, 1] с шагом Δу = 0.1.
Результат:
x=-1.00 y=0.00 z=0.16 x=-1.00 y=0.10 z=0.15 x=-1.00 y=0.20 z=0.14 x=-1.00 y=0.30 z=0.11 x=-1.00 y=0.40 z=0.08 x=-1.00 y=0.50 z=0.04 x=-1.00 y=0.60 z=-0.02 x=-1.00 y=0.70 z=-0.08 x=-1.00 y=0.80 z=-0.14 x=-1.00 y=0.90 z=-0.22 x=-1.00 y=1.00 z=-0.30 x=-0.80 y=0.00 z=0.28…
Дополните код в местах, где стоят троеточия:
| var x , y , z : real ; // описание переменных begin writeln ( ‘x y z(x,y)’ ) ; x : = – 1.0 ; y : = …; // начальное значение while ( x < = 1 ) do begin while ( … ) do //запуск внутреннего цикла begin z : = sin ( x ) + cos ( y ) ; write ( ‘ x=’ , x : 3 : 2 , ‘ y=’ , y : 3 : 2 , ‘ z=’ , z : 3 : 2 ) ; y : = y + …; writeln ( ) ; end ; writeln ( ) ; x : = …; // изменение параметра х на шаг y : = 0 ; end end . |
Exit и Halt
Процедура Pascal Exit служит для завершения работы того программного блока, в котором она используется (условный оператор, цикл, процедура…). Если Exit вызывается внутри процедуры или функции, то завершается работа данной процедуры/функции. Если процедура Exit находится в основном блоке программы, то это приводит к ее завершению.
Процедура halt в pascal завершает работу программы.
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:

См. также
Лекция №3.3: Ветвления. Массивы. Циклы
Источник: vkspy.info
Процедура Break

Процедура Break в Паскале выполняет прерывание цикла. Синтаксис:
Процедура Break выполняет переход к оператору, следующему после текущего блока цикла.
Код после вызова Break и окончанием блока цикла не выполняется. Состояние текущего цикла при этом прекращает отслеживаться.
Процедура Break может использоваться с циклами FOR и WHILE.
Учтите, что Break — это зарезервированное слово и оно не может быть переопределено.
Как прервать цикл в Паскале
Пример программы, которая использует процедуру Break для прерывания цикла, приведён ниже:
program breakproc; var i, j : byte; //**************************************************************** // Так делать нельзя, потому что тогда прерывание цикла // с помощью Break не будет работать //**************************************************************** procedure Break; begin end;> begin //Будут выведены 4 числа от 1 до 4 for i := 1 to 10 do begin Write(i:3); if i = 4 then Break; end; WriteLn; //Будут выведены 3 числа от 1 до 3 for i := 1 to 10 do begin if i = 4 then Break; Write(i:3); //. Этот код после вызова Break //уже не будет выполнен . end; WriteLn; //Прерывание вложенного цикла for j := 11 to 15 do //Цикл 1 begin for i := 1 to 10 do //Вложенный цикл 2 begin if i = 3 then Break; //Прерывает вложенный цикл 2, Write(i:3); //но цикл 1 будет выполнен до конца . end; Write(j:3); end; WriteLn; //Прерывание основного цикла for j := 11 to 15 do //Цикл 1 begin for i := 1 to 10 do //Вложенный цикл 2 begin if i = 3 then Break; //Прерывает вложенный цикл 2 Write(i:3); end; if j = 13 then Break; //Прерывает цикл 1 Write(j:3); end; ReadLn; end.
Обратите внимание на то, что код в теле цикла, расположенный после вызова Break, уже не будет выполняться (так как цикл прерывается в том месте, где вызывается процедура Break).
Также обратите внимание на то, как работает прерывание вложенного цикла: прерывается только вложенный цикл, а основной продолжает работать.
Также обратите внимание на нашу собственную процедуру Break в начале программы. Она закомментирована и не компилируется.
Однако, если вы её раскомментируете, то процедура Break будет переопределена. Ошибки компиляции это не вызовет — программа будет создана.
Но стандартная процедура Break не будет работать. То есть выйти из цикла с помощью процедуры Break вы не сможете, потому что вызываться будет уже не стандартная процедура из модуля SYSTEM, а ваша собственная процедура, объявленная в начале программы, которая не выполняет выход из цикла.
Источник: info-master.su
Переключение между окнами программ и их закрытие в среде Turbo Pascal
Иногда при создании программ возникает необходимость работы сразу с несколькими PAS-файлами. При этом все они могут быть открыты в среде Turbo Pascal. Для переключения между окнами нескольких открытых файлов программ используется клавиша [F6]. На рисунке ниже показан порядок переключения между четырьмя открытыми PAS-файлами. Смена окон программ происходит циклически, т.е. при смене окна последнего открытого файла появляется окно PAS-файла, открытого первым.
Для закрытия окна с текстом программы в среде Turbo Pascal необходимо нажать комбинацию «горячих клавиш» [Alt] + [F3] (см. рисунок ниже).
Для выхода из среды программирования Turbo Pascal в Windows нужно нажать комбинацию клавиш [Alt] + [X] (здесь [X] — клавиша клавиатуры с латинской буквой «икс»).
9.7.6. Перечень наиболее часто встречаемых «горячих клавиш» в среде Turbo Pascal
| Комбинация клавиш | Назначение |
| [F10] | Вход/выход в/из меню среды Turbo Pascal. |
| [F1] | Вызов помощи по вопросам работы в текущем окне среды Turbo Pascal. |
| [Ctrl] + [F1] | Вызов контекстной помощи (получение подсказки по работе с подсвеченной функцией или процедурой), либо вызов алфавитного перечня всех стандартных процедур, функций и служебных слов. |
| [F2] | Сохранение текста программы в файл с расширением.PAS. |
| [F3] | Открытие PAS-файла с текстом программы, ранее созданного на диске. |
| [Ctrl] + [F3] | Вызов калькулятора стека. |
| [Alt] + [F3] | Закрытие текущего окна (например, с текстом программы) в среде Turbo Pascal. |
| [Ctrl] + [F5] | Перемещение или изменение размеров текущего окна в среде Turbo Pascal. |
| [Alt] + [F5] | Просмотр результатов выполнения программы (вызов «экрана пользователя»). |
| [F6] | Смена текущего окна на следующее (например, при открытии одновременно файлов нескольких программ — переход от одной программы к другой). |
| [Alt] + [F9] | Компиляция текущей программы (текста PAS-файла в текущем окне). |
| [Ctrl] + [F9] | Компиляция и запуск текущей программы. |
| [Alt] + [X] | выход из среды Turbo Pascal в Windows/DOS (после окончания работы в среде). |
Графика среды Turbo Pascal
Создание двумерных графических объектов в среде Turbo Pascal возможно при вызове специального графического режима. При этом текстовая информация, которая до подключения графики находилась на «экране пользователя», удаляется графической канвой. Максимальные размеры канвы (холста) для рисования в среде Turbo Pascal составляют 640×480 точек экрана (по горизонтальной оси — 640 точек, по вертикальной оси — 480 точек). Причём, начало координат располагается в верхнем левом углу экрана, а вертикальная ось направлена вниз (см. рисунок).
program grafik;
uses graph;- подключаем графический модуль (файл graph.tpu)
var gd, gm, a, b, n, с: integer; – объявляем целые переменные
x1, y1, x2, y2: integer; – объявляем целые переменные
x,y,h: real; – объявляем действительные переменные
begin
gd:=detect; — определяем вид графического адаптера (SVGA 640×480, 16 цветов)
InitGraph (gd,gm, ‘ C:TP7BIN ‘); — инициализация графики (файл egavga.bgi)
SetGraphMode (n); — установить режим работы графического адаптера.
изображение искажено
n=1, 640×350 — изображение сжато
n=2, 640×480 – нормальное изображение >
c:=15;
SetBkColor (c); — устанавливаем цвет фона экрана
c:=1;
SetColor (c); — устанавливаем цвет линий и точек при рисовании

PutPixel (x1,y1,c); – рисуем точку с координатами x1,y1 цветом с;
SetLineStyle (a, 0, b); – устанавливаем стиль а и толщину b линии.
| a=0 a=1 a=2 a=3 |
Line (x1, y1, x2, y2); – рисуем линию от точки x1, y1 до точки x2, y2
MoveTo (x1, y1); — устанавливаем курсор в точку x1, y1 на графическом экране
LineTo (x1, y1); — рисуем линию от текущего положения курсора до точки x1, y1
Rectangle (x1,y2,x2,y2); — рисуем прямоугольник с диагональю x1,y1-x2,y2
Circle (x1,y1,a); — рисуем окружность с центром в точке x1,y1 и радиусом a
Ellipse (x1, y1, a1, a2, Rx, Ry); — рисуем дугу эллипса с центром в точке x1,y1, от центрального угла a1 до угла a2 в градусах (от 0 до 2p), с полуосями Rx, Ry
OutText (‘string’); – в текущем положении курсора выводим текст “string”
OutTextXY (x1,y1,‘text’); — в точке x1,y1 графического экрана выводим текст “text”
SetFillStyle (a, c); — устанавливаем стиль a (от 1 до 12) и цвет с (от 0 до 15) заливки объектов
| а=1 | a=7 |
| a=2 | a=8 |
| a=3 | a=9 |
| a=4 | a=10 |
| a=5 | a=11 |
| a=6 | a=12 |
Box (x1,y2,x2,y2); — рисуем залитый прямоугольник с диагональю x1,y1-x2,y2
FillEllipse (x1, y1, Rx, Ry);- рисуем залитый эллипс с центром в точке x1,y1 и полуосями Rx, Ry
FloodFill (x1, y1, c); — заливаем замкнутую фигуру, начиная с точки (x1, y1), цвет границ которой c
ClearDevice; — очистим графический экран (залить все цветом фона)
ReadLn; — ждем нажатия клавиши Enter (задержка картинки на экране)
CloseGraph; — отключаем графику (перейти в текстовый режим)
end. — конец программы
Пример готовой программы с комментариями
Program grafika_Tp;
uses graph;
var gd,gm: integer;
x1,y1,x2,y2: integer;
x,y: real;
S: string;
BEGIN
gd:=detect;
INITGRAPH(gd,gm,’BGI’);
setgraphmode(2);
Setbkcolor(15);
Setcolor(8);
Line(10,20,600,100);
MoveTo(200,300);
LineTo(300,200);
SetLineStyle(2,0,3);
LineTo(100,100);
x1:=320; y1:=240;
putpixel(x1,y1,12);
putpixel(x1+2,y1,1);
SetLineStyle(0,0,1);Setcolor(2);
Ellipse(x1,y1,10,90,100,200);
Ellipse(x1,y1,0,360,150,150);
x1:=150;y1:=10;x2:=310;y2:=220;
Rectangle(x1, y1, x2, y2);
Str(x1/9,S);
S:=’x1/9=’+S;
OutTextXY(100,400,S);
SetLineStyle(0,0,3);Setcolor(12);
x:=-3*Pi;
MoveTo(Round(x*30+300),Round(480-sin(x)*30-100));
while x <=3*Pi do begin
y:=sin(x);
x1:=Round(x*30+300); y1:=Round(480-y*30-100);
LineTo(x1,y1);
x:=x+0.1;
end;
readln;
closegraph;
end.
Результат выполнения программы:
Источник: cyberpedia.su