- •Функции ос, интерфейс пользователя.
- •Интерфейс пользователя
- •Интерфейс командной строки
- •Файловая структура. Диски, файлы, их имена.
- •Каталоги
- •Основные понятия
- •Работа с файлами
- •Работа с каталогами
- •Командная строка
- •Типы данных в Turbo Pascal. Порядковый, вещественный, структурированный. Совместимость и преобразование типов. Типы данных
- •Простые типы данных
- •Имена и доступ к файлам в Turbo Pascal.
- •Доступ к файлам.
- •Процедуры и функции для работы с файлами
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Операторы вводы/ вывода в Turbo Pascal.
- •Операции в Turbo Pascal. Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Условный оператор. Оператор выбора в Turbo Pascal.
- •Метки и оператор перехода.
- •Операторы циклов с предусловием, постусловием и с параметром в Turbo Pascal.
- •Арифметические циклы (циклы с параметром)
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Процедуры и функции в Turbo Pascal. Локализация переменных. Формальные и фактические параметры в Turbo Pascal. Процедуры и функции
- •Описание и вызов процедур и функций
- •Локальные и глобальные переменные в Turbo Pascal.
- •Переход в графический режим в Turbo Pascal. Масштабирование экрана. Процедуры и функции для работы с экраном в графическом режиме.
- •Понятие алгоритма и его свойства. Линейные, разветвляющиеся, циклические алгоритмы.
- •Алгоритмы поиска элементов из массивов данных. Двоичный (бинарный) поиск элемента в массиве
- •Интерполяционный поиск элемента в массиве
- •Алгоритмы выборки элементов из массивов данных. Алгоритмы сортировки данных.
- •Критерии Эффективности
- •Сортировка выбором
- •Сортировка пузырьком
- •Сортировка простыми вставками
- •Сортировка Шелла.
- •Сортировка быстрая
- •Сортировка поразрядная
Описание и вызов процедур и функций
Структура описания процедур и функций до некоторой степени похожа на структуру программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит собственно операторы процедур. Формат описания процедуры имеет вид:
procedure имя процедуры(формальные параметры);
раздел описаний процедуры
begin
исполняемая часть процедуры
end;
Формат описания функции:
function имя функции(формальные параметры):тип результата;
раздел описаний функции
begin
исполняемая часть функции
end;
Формальные параметры в заголовке процедур и функций записываются в виде:
var имя праметра:имя типа
и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type. Список формальных параметров может отсутствовать.
Вызов процедуры производится оператором, имеющим следующий формат:
имя процедуры(список фактических параметров);
Список фактических параметров- это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того, имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.
Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок, необходимо поместить следующую команду:
имя функции:=результат;
При вызове процедур и функций необходимо соблюдать следующие правила:
количество фактических параметров должно совпадать с количеством формальных;
соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти.
Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.
Локальные и глобальные переменные в Turbo Pascal.
Вложенные процедуры. Если блок какой-либо процедуры Р1 содержит внутри процедуру Р2, то говорят, что Р2 вложена в Р1.
Пример:
PROCEDURE P1(X: REAL; VAR Y: REAL);
VAR C: INTEGER;
PROCEDURE P2(VAR Z: REAL);
......................
END;
BEGIN
................
END;
Любые идентификаторы, введённые внутри какого-либо блока (процедуры, функции) для описания переменных, констант, типов, процедур, называются локальными для данного блока. Такой блок вместе с вложенными в него подпрограммами называется областью действия этих локальных переменных, констант, типов и процедур.
Пример:
PROCEDURET1;
VAR Y1,Y2:REAL;
PROCEDURESQ1;
VAR A,B,C,D:REAL;
BEGIN
(*Переменные A,B,C,D являются локальными для SQ1,
область их действия - процедура SQ1*)
.................
END;
BEGIN
(*Переменные Y1,Y2 -нелокальные переменные для SQ1 -
область их действия процедуры T1 и SQ1*)
.................
END;
Константы, переменные, типы, описанные в блоке PROGRAM, называют глобальными. Использование локальных переменных позволяет системе лучше оптимизировать программы, делает их более наглядными и уменьшает вероятность появления ошибок.
При написании программ, имеющих вложенные подпрограммы, необходимо придерживаться следующих правил:
Описывать идентификаторы в том блоке, где они используются, если это возможно.
Если один и тот же объект (переменная, тип, константа) используется в двух и более блоках, то описать этот объект надо в самом внешнем из них, содержащем все остальные блоки, использующие данный объект.
Если переменная, используемая в процедуре, должна сохранить свое значение до следующего вызова этой процедуры, то такую переменную надо описать во внешнем блоке, содержащем данную процедуру.
Локализация переменных дает программисту большую свободу в выборе идентификаторов. Так, если две процедуры А и В полностью отделены друг от друга (то есть не вложены одна в другую), то идентификаторы в них могут быть выбраны совершенно произвольно, в частности, могут повторяться. В этом случае совпадающим идентификаторам соответствуют разные области памяти, совершенно друг с другом не связанные.
Пример:
PROGRAM T2; VAR K: INTEGER;
PROCEDUREA;
VAR X,Z: REAL;
BEGIN (*Начало А*)
(* Через X, Z обозначены две величины - локальные переменные для А;
К- глобальная переменная для А*)
:::::::..
END;(*Конец А*)
PROCEDURE В;
VAR X,Z: REAL;
BEGIN(*Начало В*)
(* Через X, Z обозначены две другие величины - локальные переменные для В;
К- глобальная переменная для В*)
.................
END;(*Конец В*)
BEGIN(*Начало работы PROGRAM T2*)
(*К - единственная переменная, которую можно использовать в Т2*)
..............
END.
Если один и тот же идентификатор описан в блоке В и второй раз описан во вложенном блоке С, то надо помнить, что эти два одинаковых идентификатора соответствуют разным ячейкам памяти.
Пример:
PROGRAMT3;
VAR I: INTEGER; A: REAL;
Procedure P(VAR D: REAL);
VAR I: INTEGER;
BEGIN (*Начало Р*)
I:=3;
D:=I+10*D;
END;(*Конец Р*)
BEGIN
A:=2.0; I:=15; P(A); WRITELN(' I=',I,' A=',A)
END.
Глобальным переменным I и A отводятся две ячейки памяти. Первыми выполняются операторы А:=2.0 и I:=15. Затем вызывается процедура Р(А).
В процессе работы Р отводится ячейка для локальной переменной I и туда засылается число 3. После окончания работы процедуры Р эта ячейка I программой "забывается". После возврата на оператор WRITELN программа знает только одну ячейку I - глобальную, то есть ту, которая содержит число 15. Поэтому программа T3 выдаст на печать I=15, A=23.0, так как А=3+10*2.
Если локальная и глобальная переменные принадлежит к одному и тому же сложному типу, то этот тип надо описать в разделе TYPE, а сами переменные описывать через этот общий тип.
Пример:
PROGRAMT1;
TYPE AB=ARRAY[1..3] OF REAL;
VARA: AB;
PROCEDURE Q;
VARB: AB;.......
END.
В этом примере переменные А и В описаны через общий тип АВ. Если же локальная и глобальная переменные описаны одинаково, но не через общий тип, то транслятор может "не понять", что эти переменные принадлежат одному типу.
Замечание редактора. Две переменные принадлежат одному типу только в том случае, если они описаны с помощью одного идентификатора типа или, если они описаны в одной строке:
var a,b: array[1..3] of real;
В противном случае переменные принадлежат разным типам. Указанное правило относится к любым переменным, а не только в сравнении глобальных и локальных переменных. Пример:
vara: 1..3;
b: 1..3;
В этом случае переменные a и b относятся к разным типам.
Пример:
PROGRAMT2;
VAR A: ARRAY [1..3] OF REAL;
PROCEDURE Q;
VAR B: ARRAY [1..3] OF REAL;
....................................
END.
В этом примере переменные А и В - одинаковые массивы, то есть типы переменных одинаковы, но транслятор, тем не менее, не считает, что А и В - принадлежат одному типу.
