Лекция №1. Методы автоматизации программирования. Алгоритмические языки
Лекция №1. Методы автоматизации программирования. Алгоритмические языки
Целью программирования является описание процессов обработки данных. Данные - это представление фактов и идей в формализованном виде, пригодном для передачи и переработке в некоем процессе, а информация - это смысл, который придается данным при их представлении. Обработка данных - это выполнение систематической последовательности действий с данными. Данные представляются и хранятся на т.н. носителях данных. Совокупность носителей данных, используемых при какой-либо обработке данных, будем называть информационной средой. Набор данных, содержащихся в какой-либо момент в информационной среде, будем называть состоянием этой информационной среды. Процесс можно определить как последовательность сменяющих друг друга состояний некоторой информационной среды.
Подготовка любой задачи к решению с использованием ПК делится на следующие этапы:
1. Постановка задачи.
2. Формализация задачи.
3. Построение алгоритма.
4. Составление программы на языке программирования.
5. Отладка и тестирование программы.
6. Проведение расчётов и анализ полученных результатов.
Часто эту последовательность называют технологической цепочкой решения задачи на ЭВМ. Непосредственно к программированию относятся пункты 3, 4, 5.
На этапе постановки необходимо чётко сформулировать, что дано и что требуется найти. Здесь очень важно определить полный набор исходных данных, необходимых для получения результата.
Второй этап – формализация задачи. Здесь чаще всего задача переводится на язык математических формул, уравнений, отношений и т.д.
Третий этап – построение алгоритма. Под алгоритмом понимается «точное предписание, определяющее вычислительный процесс, ведущий от варьируемых начальных данных к искомому результату»(ГОСТ 19.781-74). Алгоритм включает систему правил, определяющих содержание и конечную последовательность действий (шагов и операций), выполняемых над некоторыми объектами с целью переработки исходных и промежуточных данных в искомый результат.
Четвёртый этап – составление программы на языке программирования. Можно написать программу на любом языке программирования (на том, каким вы владеете). Существует множество языков программирования: C/C++, Pascal, Basic, Delphi и т.д. Программист может пользоваться тем языком программирования, который больше всего соответствует его симпатиям.
Пятый этап – отладка и тестирование программы. На этом этапе выявляются и устраняются все программные ошибки и недочёты. Для тестирования программы программистом обычно составляется контрольный пример, включающий в себя все возможные варианты вычислительных процессов и изменений исходного материала.
И, наконец, шестой этап – завершение. Программа прогоняется с использованием фактических исходных данных. Проводится анализ полученных результатов.
Лекция№2. Назначение алгоритмического языка и требования, предъявляемые к нему
Лекция №3. Определение алгоритма. Способы описания алгоритмов
Существует много способов описания, представления алгоритмов. Мы остановимся на четырех: естественном языке, графическом языке, алгоритмическом языке и языке программирования.
Каждый вид представления имеет средства описания алгоритмов, ориентированные на своего исполнителя:
1. естественный язык— слова на естественном языке общения;
2. графический язык— графические схемы (блок-схемы) с описанием действий;
3. алгоритмический язык — определенные слова естественного языка, которым придается значение действия или команды для исполнителя;
4. язык программирования - команды языка программирования.
Во всех предложенных способах представления алгоритма, кроме последнего исполнителем является человек, а в последнем четвертом случае исполнитель-компьютер.
Изучение структуры, способов построения алгоритмов будет происходить последовательно в виде блок-схем и на алгоритмическом языке, а на языки программирования будем рассматривать в последующих главах.
Кон.
Синтаксические конструкции языка подразделяются на два типа: описания данных (величин) и операторов (команд).
Begin
{исполнительная часть}
End.
В более подробном рассмотрении программа на ТР состоит из следующих разделов:
q {заголовок}
q {описательная часть}
раздел подключаемых модулей;
раздел объявления меток;
раздел объявления констант;
раздел объявления типов;
раздел объявления переменных;
раздел объявления процедур и функций;
q {исполнительная часть}
раздел инструкций (операторов) программы, заключаемый в слова BEGIN и END;
в конце программы ставится признак останова - . (точка).
Заголовок программы состоит из зарезервированного слова program и имени программы, присваемое самим программистом для удобства работы с ней и отличия от других программ.. Например:
Program kvadr;
Более удобным способом отличия программ друг от друга является комментарий, помещенный в начало программы и содержащий краткую характеристику программы, например:
{Программа вычисления квадратного уравнения}
и тогда заголовок программы может отсутствовать. Комментарий(пояснительный текст) можно записать в любом месте программы, где разрешен пробел. Он не обрабатывается компилятором и не включается в исполняемый exe-файл. Текст комментария ограничивается фигурными скобками {} или символами (* *).
Описательная часть не выполняет никаких действий и служит для правильного выделения памяти под данные, используемые в программе, их характеристики – имена, тип, возможные значения.
В исполнительной части (разделе операторов) записывается последовательность исполняемых операторов. Каждый оператор выражает действие, которое необходимо выполнить. Исполняемые операторы отделяются друг от друга символом ";". Иногда описательная часть может отсутствовать. Без исполнительной части программа бессмысленна.
Идентификаторы пользователя применяются для обозначения меток, констант, переменных, процедур и функций, определенных самим программистом. Тип идентификатора должен быть указан в описательной части программы, до его использования. Общие правила написания идентификаторов:
- Состоят из букв, цифр и знаков подчеркивания.
- Специальные символы, а также пробелы не допускаются.
- Буквы русского алфавита не допускаются.
- Начинаются с буквы или знака подчеркивания. Только для меток допускается использование цифр.
- Максимальная длина идентификатора – 127 символов.
- Нельзя использовать зарезервированные слова языка ТР.
- При написании идентификаторов можно использовать как строчные, так и прописные буквы. Компилятор не делает различия между ними (MAS или mas – одно и тоже)
В самом общем виде структура программы имеет вид:
programИмяПрограммы;
Uses
ИмяМодуля1, ИмяМодуля2, …;
Label
ИмяМетки1, ИмяМетки2, …;
Const
ИмяКонстанты1 = ЗначениеКонстанты1;
ИмяКонстанты2 = ЗначениеКонстанты2;
Type
ИмяТипа1 = ЗначенияТипа1;
ИмяТипа2 = ЗначенияТипа2;
Var
ИмяПеременной1: ИмяТипа1;
ИмяПеременной2: ИмяТипа2;
ИмяПеременной3, ИмяПеременной4: Тип1;
ИмяПеременной5, ИмяПеременной6: Тип2;
{объявления процедур и функций программиста}
Begin
{инструкции основной программы}
End.
Разделы описания могут встречаться в программе любое количество раз и следовать в произвольном порядке, кроме раздела uses, который всегда расположен сразу после заголовка программы. Любой раздел, кроме раздела инструкций, может отсутствовать.
Разделы программы
Раздел uses.Позволяет подключить стандартные и пользовательские библиотечные модули, например модуль CRT. Он начинается с зарезервированного слова usesи имеет следующий вид:
usesИмяМодуля1, ИмяМодуля2, …;
Например:
uses CRT, GRAPH;
Раздел описания меток. Перед любым оператором в программе можно поставить метку, что позволяет выполнить прямой переход на этот оператор из любого места программы. Метка состоит из имени и следующего за ним ":", после которого и располагается помеченной меткой оператор. Все метки, используемые в программе, должны быть описаны в этом разделе. Он начинается с зарезервированного слова label и имеет следующий вид:
label ИмяМетки1, ИмяМетки2, …;
Например:
label MET, 1, 2;
Раздел описания констант. Хранение констант (постоянных величин) не требует памяти, компилятор их значения помещает прямо в текст исполняемой программы. Каждая константа принадлежит к определенному типу данных, но при определении константы его обычно не указывают. Он начинается с зарезервированного слова const и имеет следующий вид:
Const
ИмяКонстанты1 = ЗначениеКонстанты1;
ИмяКонстанты2 = ЗначениеКонстанты2;
Например:
Const
max = 1000;
str = 'Основы алгоритмизации и программирования';
Раздел описания типов данных. В языке ТР предусмотрено несколько стандартных типов и существует механизм создания новых типов данных. Каждое новое определение типа задает множество значений и связывает с этим множеством некоторое имя. Раздел описания типов данных – это раздел типов, определяемых пользователем, поэтому в простых программах он часто отсутствует. Он начинается с зарезервированного слова type и имеет следующий вид:
Type
ИмяТипа1 = ЗначенияТипа1;
ИмяТипа2 = ЗначенияТипа2;
Пример описания:
Type
matrica = array [1..row, 1..col] of real;
Var
mas: matrica;
Задан тип matrica– матрица с rowстрок и col столбцов. Далее в разделе описания переменных var необходимо указать переменную, относящуюся к этому типу.
Раздел описания переменных. Все переменные, используемые в программе, должны быть описаны в этом разделе. После того, как переменная описана, она может быть опознана компьютером, а в тексте программы к ней можно обратиться по имени.
Пример:
Var
mas: matrica;
x1, x2: real;
i,j: integer;
stroka: string;
Раздел описания процедур и функций. Данный раздел используется в программах, которые с целью удобства программирования были разбиты на более мелкие части – подпрограммы. Подпрограммой называется программная единица (часть программы), имеющая имя, по которому она может быть вызвана из других частей программы.
Подпрограммы делятся на процедуры и функции, которые могут быть стандартными и определенными пользователем. Стандартные процедуры и функции являются частью языка и вызываются без предварительного описания. В общем случае подпрограмма имеет ту же структуру, что и программа.
Объявление процедуры:
procedureИмяПроцедуры (ФормальныеПараметры);
(описательная часть процедуры)
Begin
(исполнительная часть процедуры)
end;
Объявление функции:
functionИмяФункции (ФормальныеПараметры): ТипРезультата;
(описательная часть функции)
Begin
(исполнительная часть функции)
ИмяФункции:= Результат;
end;
Раздел операторов. Этот раздел является основным, т.к. именно в нем выполняются действия, позволяющие получить результат, ради которого и создавалась программа.
Вegin
Оператор1;
……..
ОператорN;
End.
В одной строке можно размещать несколько операторов, отделяя их друг от друга точкой с запятой. Допускается перенос операторов с одной строки на другую. Если между операторами не поставлена точка с запятой, возникает ошибка, т.к. компилятор воспринимает конец оператора именно по этому знаку.
Например:
X:= 1
Y:= 2;
компилятором будет воспринято как X:= 1Y:= 2;. В итоге получается оператор, в котором используется два знака присваивания и неправильный идентификатор 1Y.
Константы.
Из всех подразделов описаний сейчас мы рассмотрим только описание констант и переменных, остальные - позже.
В Паскале константами являются любые явно заданные в программе данные (например, 7493, 'привет', 54.899). Следует обратить ваше внимание на то, что при записи числовых констант с дробной частью эта часть отделяется от целой не запятой, как, возможно, вы привыкли, а точкой. Для записи очень больших по модулю или очень малых (близких к нулю) чисел существует возможность записи их в так называемой экспоненциальной форме. С такой записью вы встречались в математике и физике, но называли ее стандартным видом числа.
Пример: 2 . 4 5 6 7 Е - 0 6
^мантисса ^порядок
Здесь буква "Е" отделяет мантиссу (совокупность значащих цифр числа с десятичной точкой после первой) от порядка (показателя степени десятки в стандартном виде числа). Вам предстоит научиться как читать числа в таком виде, так и записывать.
Константы, представляющие собой строковые величины, заключаются в апострофы.
Если одна и та же величина используется в программе несколько раз, то удобнее было бы обозначить ее каким-нибудь именем и использовать это имя везде, где требуется записать соответствующую константу. Кроме сокращения размера исходного текста программы, это позволит избежать случайных ошибок, а также упростит отладку программы. Описание именованных констант начинается служебным словом Const. Далее следуют записи вида: <Идентификатор>=<значение>;
Пример:
Const
Pi=3.14;
Name1='Татьяна';
Name2='Виктор';
R21=6.33187E+03;
W_W_W=934122;
Сonst
g = 9.8; - вещественная константа
nmax = 100; - целая константа
s = 'abcd'; - строковая константа
kod = $123; - шестнадцатеричная константа
Пример объявления типизированных констант:
Сonst
ocenka: byte = 5;
predmet : string = 'Информатика';
Без предварительного описания в программе можно использовать значения зарезервированных (предопределенных) констант.
Идентификатор | Тип | Значение | Описание |
true | boolean | true | Истина |
false | boolean | false | Ложь |
maxint | integer | 32 767 | Максим. целое |
maxlongint | integer | 2 147 483 647 | Макс. длинное целое |
Особенностью языка ТР является предоставляемая им возможность создания новых, пользовательских типов данных: перечисляемого и интервального.
Описание перечисляемого типа данных имеет следующий вид, например:
Type
days = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
Var
day: days;
Интервальныйтип задает две константы, определяющие границы диапазона для данной переменной - отрезок типа. Например:
Const
min = 1;
max = 31;
Type
days = min..max;
Var
day1, day2: days;
Перечисляемый и интервальный типы данных совместно с целыми, логическим и символьным относятся к порядковым типам. Порядковые типы обладают четырьмя характеристиками:
Все возможные значения данного порядкового типа представляют собой упорядоченное множество и каждое возможное значение связано с порядковым номером, который является целым числом.
Значения любого порядкового типа, за исключением целочисленного начинается с порядкового номера ноль (следующий порядковый номер 1, 2, 3…)
Порядковым номером значенияцелочисленного типа является само значение.
В любом порядковом типе каждому значению кроме первого есть предыдущее и каждому значению кроме последнего есть последующее.
Для работы с данными порядковых типов в ТР используются функции:
- Ord(s) – возвращает порядковый номер значения s в множестве, определенным типом s.
- Pred(s) –возвращает элемент, предшествующий s в списке значений типа.
- Succ(s) – возвращает значение, следующее за s в списке значений типа.
Например:
Var
d: (pen, note, book, pencil); àпеременная перечисляемого типа
………………
Ord (pen) àвернет значение0;
Pred (3) àвернет значение2;
Succ (2) àвернет значение3.
Оператор присваивания
Для изменения значения переменной используется оператор присваивания. Оператор содержит операцию присваивания, которая обозначается двумя символами :=. Слева от операции присваивания указывается имя переменной, которой нужно присвоить новое значение, справа – значение, которое следует присвоить указанной переменной. Один оператор от другого отделяется точкой с запятой. Оператор присваивания имеет вид:
ИмяПеременной:= выражение;
Знак ‘:=’читается, как "присвоить значение".
Например:
Sort:= 1; cena:= 12.34; x:= x+1; y:= x; name:= 'модель 1';
Оператор присваивания можно считать основным языком языка ТР, т.к. именно в нем выполняются практически все действия по обработке данных.
Следует знать:
Оператор присваивания используется для изменения значений переменных. Он предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, стоящей в левой части;
Имеется три вида выражений: арифметические, логические, символьные;
Тип результата, полученного при вычислении выражения, должен быть совместим по типу с переменной, которой он присваивается.
Необходимо следить за тем, чтобы тип переменной совпадал с типом выражения. Если переменная REAL, а выражение INTEGER, то оператор выполнится успешно, в противном случае компилятор выдаст сообщение об ошибке.
Например:
Var
X: integer; Y: real;
Begin
X:= 5;
Y:= 0.5;
Y:= Y + X; ------ так можно!
X:= Y;------------ так нельзя!
Нельзя с помощью оператора присваивания присвоить нескольким переменным одно и то же значение.
Например:
I:= J:= K:= M:= 0; ------------ так нельзя!
I:= 0; J:= 0; K:= 0; M:= 0; ------- нужно так!
Операторы ввода-вывода
Ввод данных.Ввод данных – это передача исходных данных в ОП ПК.
Для ввода данных в Паскале применяют операторы READ или READLN, которые имею одинаковый формат записи:
READ(список ввода);
В операторе после ключевого слова READ следует заключенный в круглые скобки список переменных, в котором переменные друг от друга отделяются запятыми. Оператор завершается точкой с запятой. Например:
VAR
A, B, C: REAL;
READ(A,B,C);
При выполнении оператора READ программа приостанавливает свои действия в ожидании ввода значений, которые по очереди в соответствии с приведенным в операторе списком будут присвоены переменным. Значения переменных могут вводиться с клавиатуры во время исполнения программы или читаться из файла. Тип вводимых значений должен соответствовать типу переменных.
Оператор READLN по своим действиям аналогичен оператору READ, за исключением того, что по окончании чтения значения последней переменной из списка ввода он дает указание на переход к началу новой строки. Оператор READLN может быть применен и без списка, тогда будет произведен переход на новую строку.
Вывод данных.Вывод данных – это передача данных после обработки из ОП на внешние устройства. Вывод данных организуется операторами WRITE и WRITELN. Формат записи имеет вид:
WRITE(список вывода);
В списке вывода приводят разделенные запятыми переменные и выражения типа INTEGER, REAL, BOOLEAN, CHAR, заключенные в кавычки строки символов:
WRITE(DAY[3], SIN(X), LETTERS, 'Результат =');
Формат вывода.Формат выводимых данных может быть изменен явным указанием числа отводимых позиций. Для этого после идентификаторов переменных в списке вывода указывается отведенная ширина поля для выводимой информации и точность представления числа (только для вещественных чисел). Эти две величины должны быть целыми и положительными, отделяться от имен и друг от друга двоеточием. Они соответственно указывают количество позиций в строке, отводимых под значение переменной, и количество мест под цифры дробной части. Например:
WRITE('I =', I:3, 'K =', K:5:2);
На экране появится
I =-12 K =3.25
В отличие от WRITE, оператор WRITELNавтоматически организует перевод курсора на новую строку. При его использовании последующий оператор WRITE, если он присутствует в программе, начинает вывод информации с новой строки. Оператор WRITELN без списка выводит пустую строку. Например, после выполнения операторов:
WRITELN('ЗАДАЧА');
WRITELN('I=', I:3, '; К=’, K:5:2);
WRITELN('Z=', Y);
на экране появиться следующая информация:
ЗАДАЧА
I=-12; K=3.25
Y=3.7800E+02
Операции DIV и MOD
Целочисленное деление DIV отличается от обычной операции деления тем, что возвращает целую часть частного, а дробная часть отбрасывается, например: 13 div 3 = 4. Результат div всегда равен нулю, если делимое меньше делителя. Например:
11 div 5 = 2
17 div –5 = -3
Взятие остатка от деления mod вычисляет остаток, полученный при выполнении целочисленного деления. Например:
10 mod 5 = 0
11 mod 5 = 1
Результат выполнения выражения заносится в переменную с помощью оператора присваивания.
Вызов стандартной функции осуществляется путем указания в нужном месте программы имени функции и ее аргумента, заключенного в круглые скобки. После вычисления значения функции ее вызов заменяется результатом.
Основные операции отношения
Операция | Название | Выражение | Результат |
= | Равно | A = B | true, если А равно В |
<> | Не равно | A <> B | true, если А не равно В |
> | Больше | A > B | true, если А больше В |
< | Меньше | A < B | true, если А меньше В |
>= | Больше или равно | A >= B | true, если А больше или равно В |
<= | Меньше или равно | A <= B | true, если А меньше или равно В |
in | Принадлежность | A in B | true, если А находится в списке В |
Операции отношениявыполняют сравнение двух операндов и определяют, истинно значение отношения или ложно. Результат проверки любого условия, каким бы сложным оно не было, всегда имеет тип – Boolean.
Следует знать:
В ТР нельзя записать двустороннее неравенство вида 1 < x < 2. Нужно использовать логическое выражение (x > 1) and (x < 2); and – логическое И (умножение).
Нельзя писать x=y=z. Нужно записывать так (x = y) and (x = z);
Логические выражения можно использовать в операторах присваивания и вывода. Например:
Const
a = 1; b = 2;
Var
fl: Boolean;
Begin
fl:= a > b;
writeln('a = ', a,'; b = ', b);
writeln('a > b – ', fl,'; a < b –', a < b);
End.
В ТР имеются две реализации ветвления. Это условный оператор IF и оператор выбора CASE.
Условный оператор IF
Условный оператор IF записывается двумя способами:
1-ый способ:
if <условие> then
Begin
<оператор1>;
<оператор2>;
. . .
End
Else
Begin
<оператор5>;
<оператор6>;
. . .
end;
2-ой способ:
if <условие> then
Begin
<оператор1>;
<оператор2>;
. . .
end;
Выполнение оператора начинается с вычисления условия и, если оно истинно, то выполняются операторы, стоящие после служебного слова then, а если ложно, то выполняются операторы, стоящие за служебным словомelse. Часть оператора, стоящая после служебного словаelse,может отсутствовать.
В этом случае выполнение передается операторам, стоящим после ';'.
Один оператор ifможет входить в другой оператор if. В этом случае говорят о вложенности операторов.
Графическое представление оператора IF представлено на следующих рисунках.
условие |
оператор1 |
оператор2 |
условие |
оператор |
да |
нет |
нет |
да |
Вариант 1.
if <условие1> then
if <условие2> then
<оператор1>
Else
<оператор2>
Else
<оператор3>;
Вариант 2.
if <условие1> then
<оператор1>
Else
if <условие2> then
<оператор2>
Else
<оператор3>;
Вариант 3.
if <условие1> then
if <условие2> then
<оператор1>
Else
<оператор2>;
Следует знать, что:
при вложенности операторов каждое elseсоответствует тому then, которое непосредственно ему предшествует;
конструкций со степенью вложенности более 2 – 3 следует избегать из-за сложности их анализа;
в условных операторах часто используется составной оператор begin… end;
в условных операторах не ставится ';' после then и перед else.
Оператор безусловного перехода GOTO имеет общий вид:
GOTO <метка>;
где метка – любое целое число без знака в диапазоне от 0 до 9999 или буквенное выражение. Метка ставится перед оператором, которому передается управление и отделяется от него двоеточием. Метка должна быть описана в разделе LABEL.
Оператор выбора Case
При реализации алгоритма, имеющего более двух ветвей, иногда вместо нескольких вложенных друг в друга операторов IF удобно использовать оператор выбора CASE. Общий вид оператора:
CASE <выражение-селектор> OF
<список1 значений селектора> : begin
<инструкции 1;>
end;
<список2 значений селектора> : begin
<инструкции 2;>
end;
…
<списокN значений селектора> : begin
<инструкции N;>
End
ELSE
Begin
<инструкции;>
end;
END;
Ветвь ELSE может отсутствовать.
Выполнение оператора CASE начинается с вычисления выражения-селектора. Инструкциимежду beginи end выполняются в том случае, если значение выражения после слова CASE совпадает со значением селектора из соответствующего списка. Если это не так, то выполняются инструкции, идущие после ELSE. Если же ELSEотсутствует, то управление передается оператору, стоящему за оператором CASE.
Селектор может иметь только следующий тип данных: интервальный, перечисляемый, логический, символьный и целый типы.
VAR
S: CHAR;
BEGIN
READLN(S);
CASE S OF
'0'..'9' : WRITE('Цифра');
'A'..'Z' : WRITE('Прописная буква');
'a'..'z' : WRITE('Строчная буква')
ELSE
WRITE('Другие символы');
END;
Следует знать, что:
1. Инструкция CASEявляется обобщением IF и используется для выбора одного из нескольких направлений дальнейшего хода программы;
2. Выражение-селектор должно иметь порядковый тип: чаще всего integer, реже – char и boolean.
3. Список выбора может состоять из произвольного количества значений или диапазонов, отделенных друг от друга запятыми. Границы диапазона записываются двумя константами через разграничитель "..". Тип констант должен совпадать с типом селектора.
4. Точка с запятой не ставится после последнего элемента списка выбора.
Оператор цикла с предусловием - WHILE используется для программирования итерационных циклов, т.е. если необходимо произвести некоторые повторяющиеся вычисления, но число повторов неизвестно, а также для программирования детерминированных циклов, если шаг изменения параметра цикла отличен от 1 и –1.
Общий вид оператора WHILE:
WHILE <логическое выражение> DO <оператор цикла>;
Или
WHILE <логическое выражение> DO
BEGIN
<блок операторов цикла>;
END;
Схема, реализующая оператор WHILE имеет следующий вид:
условие |
Операторы цикла |
нет
да
Оператор WHILE действует следующим образом:
сначала проверяется условие, и пока оно "истинно", выполняются все операторы цикла, записанные после DO. Как только логическое выражение принимает значение "ложь", происходит выход из цикла.
Следует знать, что:
Число повторений цикла определяется в ходе работы программы и заранее неизвестно;
Условие – это выражение логического типа, которое может принимать одно из двух значений: trueили false;
В теле цикла обязательно должен присутствовать оператор, оказывающий влияние на условие выполнения инструкций цикла;
ЦиклWHILE – это цикл с предварительным условием, это значит, что если проверяемое условие ложно, то операторы цикла вообще могут быть не выполнены. Цикл WHILE считается самым универсальным видом цикла;
В операторе WHILE никогда не ставится ";" после слова DO.
Оператор цикла FOR используют для программирования детерминированных циклов, т.е. в том случае, когда заранее известно число повторений цикла. Этот вид оператора цикла называют циклом со счетчиком или циклом с параметром. В нем важную роль играет переменная-параметр, который автоматически изменяет свое значение либо на 1, либо на –1.
Общий вид оператора FOR:
FOR I:= N1 TO N2 DO <оператор цикла>;
Или
FOR I:= N1 TO N2 DO
BEGIN
<блок операторов цикла>
END;
где I – параметр цикла; N1 – начальное значение параметра цикла; N2 – конечное значение параметра цикла. Схема, реализующая действие оператора FOR имеет вид:
I=N1,N2 |
Оператор или блок операторов цикла |
Параметры I, N1, N2 должны быть одного и того же скалярного типа, но не REAL. Параметр цикла I принимает последовательные значения от N1 до N2, увеличиваясь на 1.
Например, при реализации следующего оператора:
FOR K:= 1 TO 50 DO WRITELN(K:3);
на печать будут выданы натуральные числа от 1 до 50.
Если параметр цикла изменяется от большей величины к меньшей, уменьшаясь на –1, то оператор будет иметь вид:
FOR I:= N2 DOWNTO N1 DO <оператор цикла>;
Например, при выполнении оператора
FOR I:= 100 DOWNTO 50 DO WRITELN(K:3);
на печать будут выданы натуральные числа от 100 до 50.
Следует отметить, что внутри цикла нельзя изменять значения параметров I, N1, N2. После завершения цикла FOR значение параметра цикла I становится неопределенным. Нельзя передавать внутри цикла управление извне, минуя оператор FOR.
Следует знать, что:
- Оператор цикла FOR используется для организации циклов с фиксированным числом повторений;
- Количество повторений цикла определяется начальным и конечным значениями переменной-счетчика. Оператор FOR обеспечивает выполнение до тех пор, пока не будут перебраны все значения параметра цикла.
- Переменная-счетчик должна бытьпорядкового типа,чаще всегоinteger. Использование вещественного типа недопустимо.
- Параметр цикламожет изменяться (увеличиваться или уменьшаться) каждый раз при выполнении цикла только на единицу.
- Для досрочного выходаиз цикла можно использовать операторGOTO.
Вложенные циклы
В теле любого оператора цикла могут находиться другие операторы цикла. При этом, цикл, содержащий в себе другой, называется внешним, а цикл, находящийся в теле первого – вложеннымили внутренним. Правила организации внешнего и внутреннего циклов такие же, как и для простого цикла.
При программировании вложенных циклов необходимо соблюдать следующее условие: все операторы внутреннего цикла должны располагаться полностью в теле внешнего цикла.
Представленный ниже пример фрагмента программы вывода на экран таблицы умножения демонстрирует применение вложенных циклов.
Var
i, j: byte;
Begin
for i:= 1 to 10 do
for j:= 1 to 10 do
writeln(i, '*', j, ' = ', i*j);
End.
На блок-схеме наглядно показано, что при вложении циклов внутренний цикл выполняется полностью от начального до конечного значения параметра, при неизменном значении параметра внешнего цикла. Затем значение параметра внешнего цикла изменяется на единицу, и опять от начала и до конца выполняется вложенный цикл. И так повторяется до тех пор, пока значение параметра внешнего цикла не станет больше конечного значения, определенного в операторе FORвнешнего цикла.
I=N1,N2 |
Оператор или блок операторов цикла |
I=N1,N2 |
Пример программы вычисления суммы степеней для натурального числа N
, в которой используется вложенный цикл:
var
n, i, j: integer; a, s, p: real;
begin
write ('введите показатель степени: ');
readln (n);
s:= 0; {обнуление начального значения суммы}
for i:= 1 to n do {начало внешнего цик