- •«Паскаль»
- •Этапы полготовки и решения задач на компьютере.
- •Алгоритм. Основные свойства. Способы представления алгоритмов
- •Язык программирования Паскаль. Структура языка. Алфавит языка. Классификация данных и операторов.
- •Встроенные процедуры и функции языка Паскаль. Структура программы на языке Паскаль.
- •Var «список- объявлений переменных»
- •Сложные типы данных
- •Var а,в : mn ; { Переменные типа: mn }
- •Обработка данных
- •Организация обработки данных
- •Ввод-вывод данных. Основные виды работ с файлами любых типов. Основные понятия. Классификация файлов
- •Модульное программирование
- •Связанные структуры
- •Очередь
- •Объектно-ориентированное программирование
- •Инкапсуляция (Определение объекта)
- •Наследование и переопределение. Принцип конструирования программ
- •Полиморфизм
Организация обработки данных
Как правило, в программах не удается ограничиться операторами присваивания. Для большинства реально используемых алгоритмов характерна широкая разветвленность процесса вычислений. При этом в зависимости от конкретных исходных данных или промежуточных результатов применяются разные правила обработки данных. Для организации процесса вычислений в Паскале имеются операторы: перехода, разветвления, циклов, пустой, составной, присоединения и вызова подпрограмм.
Характерной особенностью алгоритмов является их цикличность, когда какая-либо последовательность действий должна выполняться многократно, циклически. Для удобного и компактного описания циклических алгоритмов в Паскале имеются операторы цикла с параметром цикла и итеративного типа с предусловием и с постусловием.
GОТО - оператор перехода.
Операторы программ располагаются в памяти и выполняются последовательно, в порядке их записи. Но могут быть ситуации (условия), когда надо пропустить группу операторов. Такие пропуски производятся в программах с помощью операторов перехода.
Оператор перехода предназначен для указания того, что выполнение программы должно продолжаться с точки программы, обозначенной меткой, значение которой стоит в операторе перехода. Метка в тексте программы располагается непосредственно перед помеченным оператором и отделяется от него двоеточием. Оператор можно помечать несколькими метками; в этом случае после каждой из них ставится двоеточие. Помечают операторы только в том случае, если к ним нужен переход.
Форма оператора перехода: GOTO метка ;
где GOTO означает "перейти на метку, стоящую перед оператором, к которому должен быть осуществлен переход"; метка – идентификатор или целое число без знака.
Все метки, используемые в программе, должны быть объявлены в разделе LABEL. После выполнения оператора GOTO следующим выполняется оператор, метка которого совпадает с меткой, стоящей после слова GOTO, т. е. оператор, помеченный такой меткой.
Пример:
LABEL M1,M2,25; ...
GOTO M1; ... GOTO 25; ... GOTO M2;
M1: A:=В; ... M2: 25: С:=D;
Все метки локальны в блоке; на Паскале не допускается переход:
внутрь сложного оператора (составного, условного, варианта, цикла);
в процедуру или функцию и из процедуры или функции в вызвавшую их программу.
Составной оператор и пустой оператор
Составной оператор (блок) - это группа операторов, ограниченная операторными скобками BEGIN и END. Например:
BEGIN X:=Y; Y:=Z; Z:=X END;
Точка с запятой может не быть после BEGIN и перед END. После END может быть:
пробел, если следующий оператор END или слово ELSE;
точка с запятой, если следующим является выполняемый оператор;
точка, если это конец программы.
Составной оператор используется для ограничения:
раздела операторов программ, процедур и функций;
групп операторов в условных операторах, операторах выбора варианта и цикла.
В составном операторе могут быть другие составные операторы произвольной глубины вложенности. Например:
BEGIN ...
BEGIN ... - вложенный составной !
END; ... оператор
END;
Пустой оператор представляется символом ; и не вызывает никаких действий. Он может использоваться для установки метки и, в случае необходимости, после ключевых слов THEN или ELSE в операторах IF;, причем перед ELSE пустой оператор располагается по умолчанию, без символа ;. Например:
M1: ; IF ... THEN IF ... THEN ...
ELSE ...
{ здесь - пустой оператор - по умолчанию, без ' ; ' }
ELSE ...
Там, где стоит многоточие, располагаются операторы.
Циклы
Циклы используют в случае, если некоторые действия надо выполнить многократно, каждый раз с новыми данными. Операторы цикла определяют действия, которые надо выполнить многократно, и количество их повторений. Вход в циклы может быть только через операторы заголовка цикла. Завершение цикла может быть в соответствии с условиями, определенными заголовком цикла, или по оператору перехода на оператор вне тела цикла.
К операторам цикла относят операторы FOR, WHILE и REPEAT. Если количество повторений заранее известно, то целесообразно использовать оператор FOR. А если количество повторений определяется условиями - операторы WHILE или REPEAT.
FOR - оператор цикла с параметром
Оператор FOR - это оператор цикла с параметром (с шагом). Он используется, если количество повторений тела цикла может быть определено до начала его выполнения.
TO
FOR I := IN IK DO S;
DOWNTO
Заголовок цикла
где I - параметр цикла, управляющая переменная, идентификатор;
IN, IK - выражения для определения начального и конечного значений I; ТО - определяет шаг изменения параметра цикла I: DI = 1;
DOWNTO - определяет шаг изменения параметра цикла I: DI = -1;
S - один оператор, простой или составной; тело цикла.
Правила формирования и выполнения цикла FOR:
I, IN и IK могут быть любого ординального типа, в том числе целыми, логическими, перечисляемыми и диапазонными;
I, IN и IK должны быть совместимого типа;
значение I не должно изменяться операторами в теле цикла;
так как анализ конца цикла производится до выполнения тела цикла, то при IN >IK для ТО (и при IN < IK для DOWNTO) тело цикла не выполняется ни разу;
после завершения цикла FOR параметр цикла имеет значение:
а) после нормального завершения: I = IK;
б) при котором выполнился оператор GOTO;
значения IN и IK определяются один раз, в начале выполнения оператора FOR, и сохраняются во время выполнения оператора FOR;
DI определяет для I целого типа приращение значения I, а для параметров перечисляемого типа - приращение номера значения I;
для каждого I тело цикла выполняется один раз;
после каждого выполнения тела цикла к параметру цикла I добавляется его приращение DI.
Пример: Дан массив А на 5 вещественных значений. Надо определить и вывести сумму его положительных элементов.
CONST A:ARRAY[1..5] OF REAL=(1,-2,3,-4,5);
VAR S:REAL; I : INTEGER;
BEGIN
S := 0;
FOR I:=1 TO 5 DO
IF A[I]>0 THEN S:=S+A[I];
WRITELN ('S=',S:12)
END.
WHILE - оператор цикла итеративного типа с предусловием
Оператор цикла WHILE - это цикл итеративного типа с предусловием, так как в нем анализ конца цикла производится до выполнения операторов тела цикла. Он используется, когда количество повторений операторов тела цикла заранее неизвестно и определяется в процессе выполнения цикла. Операторы тела цикла при определенных условиях не должны выполняться ни разу.
Форма цикла: while B(Х) do s;
где В(Х) - логическое выражение; условие завершения цикла;
S - один оператор, простой или составной; тело цикла; в нем должны быть операторы для изменения операндов логического выражения В(Х).
Тело цикла WHILE выполняется только в случае, если результат выражения В(Х) истинный; если он ложный, тело цикла не выполняется. Если результат выражения В(Х) ложный до начала первого выполнения тела цикла, то тело цикла не выполняется ни разу.
REPEAT - оператор цикла итеративного типа с постусловием
Оператор цикла REPEAT - это цикл итеративного типа с постусловием, так как в нем анализ конца цикла производится после выполнения операторов тела цикла. Он используется, когда количество повторений операторов тела цикла заранее неизвестно и определяется в процессе выполнения цикла. Операторы тела цикла должны выполняться хотя бы один раз. Схема цикла REPEAT представлена на рис. 21.
Форма цикла REPEAT:
REPEAT S
UNTIL B(X) ;
где В(Х) - логическое выражение; условие завершения цикла;
S - один и более операторов тела цикла; в нем должно быть изменение операндов выражения В(Х).
REPEAT и UNTIL B(X) определяют начало и условие завершения цикла. Тело цикла REPEAT выполняется хотя бы один раз. После каждого выполнения тела цикла анализируется значение результата выражения В(Х): если оно ложно (false), выполнение тела цикла повторяется, если истинно (TRUE) - цикл завершается.
Дополнительные операторы для циклов.
Язык Паскаль имеет 2 стандартные процедуры: BREAK и CONTINUE. Они могут использоваться в циклах всех видов: FOR, REPEAT и WHILE. Вызовы этих процедур могут быть только в пределах тела цикла. Обе процедуры без параметров. Вызовы этих процедур можно назвать полноправными операторами языка, потому что они компилируются не в вызов подпрограмм, а в машинные команды безусловного перехода.
Процедура BREAK прекращает выполнение ближайшего охватывающего цикла. Управление передается на оператор, следующий за данным циклом.
Процедура CONTINUE вызывает прекращение текущей итерации (выполнения) ближайшего охватывающего цикла и переход к анализу конца цикла и выполнению следующей итерации.
Пример: (Использование процедур BREAK и CONTINUE).
CONST A:ARRAY [1..5] OF INTEGER=(1,2,-3,-4,5);
VAR S,I: INTEGER;
BEGIN S:=0;{Суммирование всех элементов, кроме A[I]<=0:}
FOR I:=1 TO 5 DO BEGIN
IF A[I]<=0 THEN CONTINUE;
WRITELN ('A[',I,']=', A[I]);
S:=S+A[I];
END;
WRITELN ('S = ',S); { - вывод суммы }
S := 0; { Суммирование до первого A[I] < 0: }
FOR I:=1 TO 5 DO BEGIN
IF A[I]<0 THEN BREAK;
S := S + A[I];
END;
WRITELN ('S = ',S); { - вывод суммы }
END.
В первой части примера производится суммирование и вывод всех элементов массива А, кроме отрицательных и нулевых элементов массива. Во второй - при обнаружении первого отрицательного элемента происходит переход за тело цикла суммирования.
Лекция №5.
