- •1. Структура (состав) языка
- •2. Алфавит
- •3. Лексическая структура языка
- •4. Структура программной единицы
- •5. Стиль записи программ на языке Паскаль
- •6. Типы данных в Паскале
- •6.3 Классификация типов данных в Турбо Паскале
- •6.4 Порядковые типы
- •6.4.2 Булевский (логический) тип
- •Repeat тело_цикла until (логическое_выражение);
- •6.4.3 Целые типы Выделяют целые типы ------------- со знаком – shortint, integer, longint)
- •1 Группа функций:
- •2 Группа функций:
- •3 Группа функций:
- •6.4.4 Перечисляемый тип.
- •6.4.6 Символьный тип
- •6.5 Вещественные типы.
- •7. Выражения в языке Паскаль.
- •10. Вычисление по формулам.
- •10.1 Оператор присваивания .
- •10.2 Характер использования переменных в математике и в программах.
- •10.3 Бесконечности
- •10.4 Нестандартные операции
- •6.6 Строки
- •1) Операции присваивания и сравнения.
- •3) Заполнение строки одним символом
- •4) Стандартные функции и процедуры для работы со строками:
- •5) Подпрограммы преобразования из строкового представления в числовое и наоборот:
- •8. Совместимость и преобразование типов.
- •Совместимость типов
- •8.2 Тип результата арифметических выражений.
- •8.3 Преобразование (приведение) типов и значений.
- •8.3.1 Явное преобразование (приведение) типов.
- •8.3.2 Неявное преобразование или приведение типов.
- •9. Простейший ввод-вывод на Паскале
- •Стандартные файлы Input и Output
- •9.2 Процедуры ввода информации (с клавиатуры.
- •9.3 Процедуры вывода в тр.
- •10. Вычисление по формулам (продолжение)
- •10.6. Уточнение многоместных (n - арных) операций
- •11. Средства языка Паскаль для циклов с известным числом повторений.
- •12. Табулирование функций
- •13. Разветвляющиеся алгоритмы
- •13.1 Таблица ситуаций и команда выбора.
- •13.2 Средства языка Паскаль для программирования разветствляющихся алгоритмов
- •13.4 Описание ситуаций
- •13.5 Запись команды выбора (case) (уточнение таблицы ситуаций) с помощью набора команд ветвления
- •13.6 Запись последовательных команд ветвления в случае, когда соседние зависимые ситуации имеют общие признаки.
- •13.6.1 Восходящий подход
- •13.6.2 Нисходящий подход
- •14. Циклы с неизвестным числом повторений
- •15. Структурированные типы данных. Массивы
- •15.1 Классификация (особенности) структурированных типов данных
- •15. 2. Определение массива
- •15.3 Объявление массива на Турбо Паскале
- •15.4 Хранение элементов массива. Доступ к элементам и частям массива
- •15.5 Уточнение команд обработки массива
- •16. Правила разработки цикла
- •15. 6 Действия над массивами
- •17. Множества.
- •17.1 Множества в Паскале и в математике. Сходства и различия между ними.
- •17.2 Объявление множества на Паскале
- •17.3 Присваивание значений множествам. Конструктор множества
- •17.4 Операции над множествами.
- •17.5 Сравнение множеств.
- •17.6 Применение множеств.
- •18. Вспомогательные алгоритмы (подпрограммы).
- •18.1 Три способа записи повторяющихся команд
- •18.2 Понятие блока
- •18.3 Объекты подпрограммы (то, над чем выполняются действия).
- •18.4 Свойства локальных и глобальных объектов
- •Свойства глобальных объектов:
- •18.5 Выделение памяти под локальные и глобальные переменные
- •18.6 Передача параметров в подпрограммы.
- •Фактические параметры
- •18.7 Подпрограммы, возвращающие значение (функции)
- •18.8 Особенности использования процедур и функций в Турбо Паскале
- •18.9. Побочный эффект (side effect)
- •18.10 Опережающее определение процедур и функций.
- •18.11 Рекурсия и итерация.
- •18.12 Процедуры и функции как параметры.
- •18.13 Директивы подпрограмм
- •Директива forward
- •Директивы far и near
- •Директива external
- •Директива assembler
- •Директива inline
- •Директива interrupt
- •Отладка и тестирование программ, содержащих подпрограммы
- •18.14.1 Нисходящее тестирование и подпрограммы-заглушки
- •18.14.2 Восходящее тестирование и программы-тестеры
- •18.14.3 Рекомендации по отладке программ, содержащих подпрограммы
- •18.14.4 Использование отладчика для трассировки процедур
- •18.14.5 Область действия идентификаторов и переменные в окне Watch
- •18.15. Получение доступа а параметрам командной строки, запуск внешних программ.
- •19. Записи.
- •19.1 Понятие записи. Объявление записи в программе.
- •19.4 Действия над записями
- •19.5 Записи с вариантами
- •19.2 Доступ к полям записи.
- •19.3 Оператор with
- •Замечание1:Порядок частей – именно такой, как показано: фиксированная часть всегда первая (или единственная)
- •19.6 Типизированные константы - записи
- •20. Модули (Unit)
- •20.1 Что такое модуль?
- •20.2 Зачем нужны модули и какие есть средства, аналогтчные (в какой-то мере) модулям
- •Интерфейсная секция
- •Секция реализации
- •Секция инициализации
- •Подключение других модулей к данному (модулю)
- •20.4 Ссылки на описания модуля
- •Пример создания модуля
- •Использование модулей. Режимы Compile, Build и Make при компиляции модулей
- •Косвенные и перекрестные ссылки на модули
- •Пример модуля (стек)
- •Модули и большие программы
4) При описании подпрограммы после заголовка надо ставить точку с запятой.
5) Соответствие между формальными и фактическими параметрами устанавливается по порядку их записи слева направо.
6) Количество и тип формальных и фактических параметров должны совпадать.
7) Для формальных параметров – переменных соответствующим фактическим параметром может быть только переменные (не значение).
8) Для формальных параметров – значений соответствующим фактическими параметрами могут быть константы, переменные, вызовы функций, выражения.
9) Имена формальных и фактических параметров обычно не совпадают.
копирование
при вызове стекФактические параметры
(в вызывающей
п/п)
копия a
область памяти под форм. пар-р x
(x:=a)
Var
копия b
область памяти под форм. пар-р y
(y:=b)
a:...;
адрес с
область памяти под адрес факт. пар-ра
z
(z:=адрес_с^)
область памяти в стеке под копии значений и адреса фактических параметров вызова
b: ...;
c:
...; вызов: p(a, b, c);
наложение при вызове
вызываемая
п/п:
Procedure
P (x, y : read:
Var z: char);begin
..x:=1;
y:=2;
z:=3;
..............
end;
ПРИМЕР. Вычислить с помощью процедуры сумму 3-х чисел:
Program P;
Var
описание глобальных переменных
a, b, c, s: char;
procedure summa(x, y, z: real;
var g: real);
begin
описание
процедуры
g:=x+y+z;
end
begin
c:=1;
b:=2; ввод значений
фактических параметров
a:=3;
s:=0;
writeln(‘s=’,s); до
вызова
summa(a,b,c,s);
вызов процедуры
writeln(‘s=’,s); после вызова
end.
В результате выполнения данной программы на экран будет выведено две строки:
s = 0
s = 6
В этом примере x, y, z и g - в заголовке процедуры - формальные параметры. При вызове процедуры в формальные параметры примут значения соответствующих фактических:
x=a, y=b, z=c, g=s
причем g и s станут синонимами.
Что произойдет, если из заголовка удалить слово Var Переменная g становится параметром - значением.
Что будет выведено на экран В этом случае при вызове процедуры внутри процедуры g - примет значение 6. Это значение будет размещено в стеке и при выходе из процедуры там же и останется. Ввиду того, что не была установлена связь между фактическим и формальным параметром, значение S останется после вызова = 0. На экран будет выведено ,то значение s , которое она имела до вызова процедуры, т.е. s=0.
18.7 Подпрограммы, возвращающие значение (функции)
В том случае, если подпрограмма возвращает одно значение, удобно использовать другую форму подпрограммы - функцию.
Заголовок и тело такой подпрограммы отличаются от заголовка и тела процедуры.
На Паскале отличия проявляются в том, что 1) вместо слова procedure пишется function и справа от круглых скобок через двоеточие указывается тип возвращаемого значения; 2) в теле функции должен быть оператор присваивания типа
имя_функции:= возвращаемое значение.
Заголовок
функции имеет вид:
function имя(список_формальных_параметров) : тип_возвращаемого_значения ;
ПРИМЕР. Рассмотренная задача нахождения суммы трех чисел может быть оформлена с помощью функции; 1)
var 3)
a, b, c, s : real;
function summa (x, y, z : real) : real;
begin
summa : = x+ y+ z; // в Delphi result:= x+ y+ z; --- возврат знвчения
end;
begin 2)
a := 1;
b := 2; ввод начальных значений
c := 3;
s := 0;
4) writeln(‘s=’,s:8:4); --- до
s := summa(a,b,c,); --- вызов функции
writeln(‘s=’,s:8:4); --- после
end.
Из примера важно выделить два момента:
1-й момент. Форма описания и вызова процедуры и функции отличаются. В отличие от процедуры функция задает не просто набор действий как этап вычислительного процесса (это было в случае процедуры), а задает правило вычисления одного значения (с помощью определенных действий). Поэтому и форма вызова функции другая, чем у процедуры - вызов функции может размещаться или в составе какого-либо выражения или в правой части оператора присваивания (R-value).
В общем случае при вычислении выражения, содержащего вызов функции, выполняются следующие действия:
а) вычисляются значения выражений для фактических параметров функции;
б) значения фактических параметров присваиваются соответствующим формальным параметрам ;
в) выполняются действия в теле функции над формальными параметрами (с переданными им значениями фактических параметров) и вычисляется возвращаемое функцией значение;
г) возвращаемое значение подставляется в выражение, из которого (в котором) осуществляется обращения к функции;
д) вычисляется значение выражения с использованием возвращенного функцией значения.
2-ой момент В теле функции обязательно должна быть хотя бы одна строчка в которой имени функции присваивается возвращаемое значение. (в Delphi вместо этого д.б. строка вида: result:= возвращающие значение;)
Обычно делают две следующих ошибки при записи функции:
Должно быть имя := значение
begin
f(x) := x*3.14*2;
end;
Нет параметра при вызове функции
Begin
g:=25;
g := g * a;
end;
В первом случае сделано две ошибки:
1-я синтаксическая: Нарушен синтаксис, т.к. для возврата из функции значения должен быть записан оператор присваивания в форме имя := значение.
2-я семантическая: для f(x) -компилятор посчитает, что вызов функции стоит слева от знака присваивания.
Во втором случае ошибка (синтаксическая) заключается в том, что имя функции используется в выражении в правой части оператора присваивания так же как имя переменной, т.е. без списка параметров, что не совпадает с тем, что записано в заголовке этой функции (там написано, что функция с параметром).
Примечания.
Возвращаемым значением может быть значение простого типа или строкового типа или ссылочного типа. Если в теле функции отсутствует оператор присваивания имени функции какого - либо значения, то возвращаемое значение функции считается неопределенным.
Часто бывает так, что необходимо
возвращать разные значения функции в
зависимости от наступления или не
наступления различных ситуаций. В этом
случае в теле цикла появляется несколько
операторов присваивания имени
функции возвращаемого значения. В таких
функциях трудно понять, какой из них
на самом деле возвращает в данный момент
значение, и поэтому такие функции
труднее отлаживать. Целесообразно
придерживаться следующего правила:
если необходимо вычислить возвращаемое
значение в нескольких местах тела
функции, то нужно ввести специальную
вспомогательную переменную для
такого присваивания, а затем непосредственно
перед завершением тела функции, записать
оператор присваивания, где слева
- имя функции, а справа - имя вспомогательной
переменной:
function fact(n:byte):longint;
var
i:word; //параметр (счетчик) цикла for
f:longint; //вспомогательная переменная
begin
f:=1;
for i:=1 to n do
f := f * i;
fact := f;
end;
