Основы программирования на языке Паскаль
как и раздел описаний |
|основной программы (описание процедур и функций - в том числе). Однако все |
|описанные здесь объекты "видимы" лишь в этой процедуре. Они здесь локальны |
|также, как и имена формальных параметров. Объекты, описанные ранее в |
|разделе описаний основной программы и не переопределенные в процедуре, |
|называются глобальными для этой подпрограммы и доступны для использования. |
|Легко заметить схожесть структуры программы целиком и любой из ее процедур.|
|Действительно, ведь и процедура и основная программа реализуют некий |
|алгоритм, просто процедура не дает решения всей задачи. Отличие в заголовке|
|и в знаке после End. |
|Формат описания функции: |
|Function <Имя функции> (<Имя форм. параметра 1>:<Тип>; |
|< Имя форм. параметра 2>:<Тип>?) : <Тип результата>; |
|<Раздел описаний> |
|Begin |
|<Тело функции> |
|End; |
|В теле функции обязательно должна быть хотя бы команда присвоения такого |
|вида: <Имя функции>:=<Выражение>; |
|Указанное выражение должно приводить к значению того же типа, что и тип |
|результата функции, описанный выше. |
|Вызов процедуры представляет в программе самостоятельную инструкцию: |
|<Имя процедуры>(<Фактический параметр 1>, < Фактический параметр 2>?); |
|Типы фактических параметров должны быть такими же, что и у соответсвующих |
|им формальных. |
|Вызов функции должен входить в выражение. При вычислении значения такого |
|выражения функция будет вызвана, действия, находящиеся в ее теле, будут |
|выполнены, в выражение будет подставлено значение результата функции. |
|Приведем простейший пример использования подпрограммы. |
|Задача: "Найти максимальное из трех введенных чисел". Для решения |
|воспользуемся описанием функции, принимающей значение максимального из двух|
|чисел, которые передаются в нее в виде параметров. |
|Program Fn; |
|Var |
|A,B,C :Real; |
|Function Max(A,B:Real):Real; {Описываем функцию Max с формальными} |
|Begin {параметрами A и B, которая принимает } |
|If A>B Then Max:=A {значение максимального из них } |
|Else Max:=B {Здесь A и B - локальные переменные } |
|End; |
|Begin |
|Writeln('Введите три числа'); |
|Readln(A,B,C); |
|Writeln('Максимальным из всех является ', Max(Max(A,B),C)) |
|End. |
|Обратите внимание на краткость тела основной программы и на прозрачность |
|действий внутри функции. Формальные параметры A и B, используемые в |
|подпрограмме, не имеют никакого отношения переменным A и B, описанным в |
|основной программе. |
|Существует два способа передачи фактических параметров в подпрограмму: по |
|значению и по ссылке. В первом случае значение переменной-фактического |
|параметра при вызове подпрограммы присваивается локальной переменной, |
|являющейся формальным параметром подпрограммы. Что бы потом ни происходило |
|с локальной переменной, это никак не отразится на соответствующей |
|глобальной. Для одних задач это благо, но иногда требуется произвести в |
|подпрограмме действия над самими переменными, указанными в качестве |
|фактических параметров. На помощь приходит второй способ. Происходит |
|следующее: при обращении к подпрограмме не происходит формирования |
|локальной переменной-формального параметра. Просто на время выполнения |
|подпрограммы имя этой локальной переменной будет указывать на ту же область|
|памяти, что и имя соответствующей глобальной переменной. Если в этом случае|
|изменить локальную переменную, изменятся данные и в глобальной. |
|Передача параметров по ссылке отличается тем, что при описании подпрограммы|
|перед именем переменной-формального параметра ставится служебное слово Var.|
|Теперь использование в качестве фактических параметров выражений или |
|непосредственных значений уже не допускается - они должны быть именами |
|переменных. |
|Еще один классический пример. Задача: "Расположить в порядке неубывания три|
|целых числа". |
|Program Pr; |
|Var |
| S1,S2,S3 :Integer; |
|Procedure Swap(Var A,B: Integer);{Процедура Swap с параметрами-переменными}|
| |
|Var C : Integer; {C - независимая локальная переменная} |
|Begin |
| C:=A; A:=B; B:=C {Меняем местами содержимое A и B} |
|End; |
|Begin |
|Writeln('Введите три числа'); |
|Readln(S1,S2,S3); |
|If S1>S2 Then Swap(S1,S2); |
|If S2>S3 Then Swap(S2,S3); |
|If S1>S2 Then Swap(S1,S2); |
|Writeln('Числа в порядке неубывания:V',S1,S2,S3) |
|End. |
| |
|Работа с файлами |
|Тип-файл представляет собой последовательность компонент одного типа, |
|расположенных на внешнем устройстве (например, на диске). Элементы могут |
|быть любого типа, за исключением самого типа-файла. Число элементов в файле|
|при описании не объявляется. Работа с физическими файлами происходит через |
|так называемые файловые переменные. |
|Для задания типа-файла следует использовать зарезервированные слова File и |
|Of, после чего указать тип компонент файла. |
|Пример: |
|Type |
|N = File Of Integer; {Тип-файл целых чисел} |
|C = File Of Char; {Тип-файл символов} |
|Есть заранее определенный в Паскале тип файла с именем Text. Файлы этого |
|типа называют текстовыми. |
|Введя файловый тип, можно определить и переменные файлового типа: |
|Var |
|F1 : N; |
|F2 : C; |
|F3 : Text; |
|Тип-файл можно описать и непосредственно при введении файловых переменных: |
|Var |
| Z : File Of Word; |
|Файловые переменные имеют специфическое применение. Над ними нельзя |
|выполнять никаких операций (присваивать значение, сравнивать и т.д.). Их |
|можно использовать лишь для выполнения операций с файлами (чтение, запись и|
|т.д.). |
|Элементы файла считаются расположенными последовательно, то есть так же, |
|как элементы линейного массива. Отличие же состоит в том, что, во-первых, |
|размеры файла могут меняться, во-вторых, способ обращения к элементам |
|совсем другой: невозможно обратиться к произвольному элементу файла; |
|элементы его просматриваются только подряд от начала к концу, при этом в |
|каждый момент времени доступен только один элемент. Можно представить себе,|
|что для каждого файла существует указатель, показывающий в данный момент на|
|определенный компонент файла. После проведения операции чтения или записи |
|указатель автоматически передвигается на следующий компонент. |
|Перед тем, как осуществлять ввод-вывод, файловая переменная должна быть |
|связана с конкретным внешним файлом при помощи процедуры Assign. |
|Формат: |
| Assign(<Имя фа
| | скачать работу |
Основы программирования на языке Паскаль |