Гипертекстовый учебник icon

Гипертекстовый учебник



НазваниеГипертекстовый учебник
Дата конвертации25.06.2012
Размер347.06 Kb.
ТипУчебник

Гипертекстовый учебник


по языку программирования

TURBOPascal.

(Создан в среде Microsoft Word

по учебнику О.А.Меженного “Самоучитель Turbo Pascal” )


Автор версии: Рыков Александр Васильевич,

учитель информатики школы №16,

первая квалификационная категория


Адрес: http://school1610.narod.ru/Proekt_Metodika/pascal_rykow.doc


10 июня 2003 г.

г.
Карпинск


Язык программирования TURBO PASCAL

  1. Введение в Turbo Pascal

    1. История языка Pascal

    2. Алфавит и зарезервированные слова

    3. Стандартные имена

  2. Операторы

    1. Оператор присваивания

    2. Составной оператор

    3. Условные операторы

    4. Операторы цикла

    5. Оператор перехода

    6. Пустой оператор

    7. Оператор Width

    8. Оператор In

  3. Структура программы

  4. Типы данных

    1. Простые типы

      1. Вещественные

      2. Порядковые

          1. Целочисленные

          2. Символьные

          3. Логические

          4. Перечислимые

          5. Диапазонные (интервальные)

    2. Строковые (строки)

    3. Структурированные типы

      1. Массивы

      2. Записи

      3. Множества

    4. Совместимость типов

      1. Совместимость по выражению

      2. Совместимость по присваиванию

    5. Приведение типов

    6. Файлы

    7. Объекты

    8. Ссылочные (указатели)

    9. Процедурные

  5. Процедуры и функции

    1. Процедуры

    2. Функции

    3. Сфера действия имён

    4. Параметры

    5. Рекурсия

    6. Опережающее описание

    7. Стандартные функции и процедуры

      1. числовые переменные

      2. строковые переменные

    8. Модули

      1. Стандартные модули

      2. Некоторые процедуры модулей System, Dos, Crt

      3. Создание модуля пользователя:




  1. Введение в Pascal

1. История создания языка программирования Pascal.

Язык программирования Pascal был разработан профессором Технического университета в г. Цюрихе Никлаусом Виртом в 1968 - 1970 годах и получил широкое распространение благодаря наглядности программ и легкости изучения. Язык был назван именем великого французского ученого Блеза Паскаля (1623-1662), который в 1640 году создал первую в мире вычислительную машину. Он даже смог построить и продать ~15 экземпляров, некоторые из которых из них дошли до наших дней.

Язык программирования Pascal послужил основой для разработки других языков программирования.

Первая версия Turbo Pascal использовалась не очень долго - она появилась в 1983 году, а уже в 1984 году ее заменила вторая версия, которая получила широкое распространение. К осени 1985 года появляется третья версия, еще более удобная в работе.

Четвертая версия (1988 год) представила Turbo Pascal в новом виде (появилась новая среда, компилятор стал встроенным). Осенью этого же года вышла пятая версия, в которой появился встроенный отладчик. А в 1989 году появилась версия 5.5, позволившая перейти к объектно-ориентированному программированию.

Шестая версия уже обеспечивала многооконный и многофайловый режим работы, использование мыши, применение объектно-ориентированного программирования, обладала встроенным ассемблером и имела другие возможности.

В 1992 году фирма Borland International выпустила два пакета программирования на языке Pascal - это Borland Pascal 7.0 и Turbo Pascal 7.0.

Пакет Turbo Pascal 7.0 использует новейшие достижения в программировании. Он может использоваться практически на любой машине и относительно дешев. Язык этой версии обладает широкими возможностями, имеет большую библиотеку модулей. Среда программирования позволяет создавать тексты программ, компилировать их, находить и исправлять ошибки, компоновать программы из отдельных частей, использовать модули, отлаживать и выполнять программы.

Программа состоит из синтаксических конструкций – команд (операторов, предложений), а команды из лексем (неделимых элементов языка): слов, чисел, символов операций и т.д. Слова, в свою очередь, подразделяются на служебные, стандартные имена и имена (идентификаторы), присваиваемые разным объектам.

  1. Алфавит и служебные (зарезервированные) слова

Алфавит:

  1. Прописные и строчные буквы: A,a, … Z,z. Символ подчёркивания ‘_’ – буква!

  2. Десятичные цифры: 0, … 9. Десятичные дроби разделяются точкой.

  3. Спецсимволы: + { } - . * / : = ; < ‘ > # [ ] $ ( ) ^ @ Пробел

и их комбинации:

:= присвоить значение; <> не равно; <= не больше; >= не меньше;

.. диапазон значений;

(* *) можно заменять фигурные скобки для комментария;

(. .) можно заменять квадратные скобки для типа string и массивов.

Служебные (зарезервированные) слова:


And

И

Mod

остаток

Array

Массив

Nil

ноль

Begin

Начало

Not

не

Case

Выбор

Of

с

Const

Константы

Or

или

Div

деление без остатка

Packed

упакованный

Do

Исполнить

Procedure

процедура

Downto

вниз до

Program

программа

Else

Иначе

Record

запись

End

Конец

Repeat

повторить

File

Файл

Set

множество

For

Для

Then

тогда

Function

Функция

To

до

Goto

перейти к

Type

тип

If

Если

Until

пока

In

В

Var

переменные

Label

Метка

While

пока

^ 2. Стандартные имена

  1. Имена стандартных типов данных: boolean (логический), char (символьный), integer (целый), real (действительный), text (текстовый файл) и т.д.

  2. Имена стандартных констант: false (ложь), true (истина), maxint (максимальное целое), pi (число ?) и т.д.

  3. Имена стандартных функций: abs, arctan, cos, exp, ln, sin и т.д.

  4. Имена стандартных процедур: read, readln, write,writeln, inc, dec и т.д.

Имена пользователя состоят из латинских букв, цифр и символа “_”. Цифра не может быть первым символом.

^ II. Операторы

  1. Оператор присваивания: a := b;

  2. Составной оператор: begin s1; s2; …; sn end; begin – end – операторные скобки

  3. Условные операторы:

    1. оператор if : if p then a1 else a2; (Если … То … Иначе)

    2. оператор if с составными операторами: if p then begin s1,s2, …sn end

else v1,v2, … vn end;

    1. о
      case x of

      1..5:s1;

      6,8,11:s2;

      7,9,10,12..20:s3;

      else

      s4;

      end;
      ператор case (Выбор): case p of диапазоны и списки:

a:s1;

b:s2;



n:sn

else sn+1

end;


  1. Операторы цикла:

    1. оператор while [Пока] (работает, пока условие = TRUE)

    2. оператор repeat [Повторять] until [Пока Не] (работает пока условие = FALSE)

      Цикл ^ While

      A:= 1;

      While a<300 do begin

      Writeln(a);

      A:=a*3;

      End;

      Цикл Repeat

      A:= 1;

      Repeat

      Writeln(a);

      A:=a*3;

      Until a>=300;

    3. оператор For: for i:=a to b do s; (От … До … Выполнять)

for i:=a downto b do s; Циклы могут быть вложенными.

      1. оператор перехода goto: goto 1; 1: writeln(‘Переход осуществлён’);

      2. пустой оператор: : goto 1; writeln; 1:end; перед End не обязательно ставить точку с запятой но в случае пустого – перед меткой обязательно.

      3. оператор Width: для работы с записями.

      4. оператор IN: для проверки принадлежности элемента множеству..

III. Структура программы

1. Заголовок

Program <имя_программы> {только латинские буквы} ? комментарий


2. Описательная часть

uses - присоединение библиотек и модулей;

label - объявление меток;

const - объявление констант; <константа> = <значение>;

type - описание типов; <имя типа> = <описание типа>;

var - объявление переменных; <список переменных> : <тип>;

procedure - объявление процедур пользователя;

function - объявление функций пользователя;


^ 3. Исполняющая часть

begin

<раздел команд>

end.

Заголовок и все разделы кроме исполняющей части необязательны. Заголовок программе присваивает программист. Строчные и заглавные буквы равноправны

!{Комментарий заключён в фигурные скобки} или в такие: (* заключён *)!

Особым видом комментария является директива ($ ….) Директивы служат для поддержки необходимой модели памяти или режимов функционирования среды программирования.

^ IV. Типы данных (Схема по О.А.Меженному)

Типы данных

  1. Простые

    1. Порядковые

      1. Интервальный (диапазонный)

      2. Перечислимый

      3. Логический СТАНДАРТНЫЕ

      4. Символьный

      5. Целочисленный

        • Byte (1 байт)

        • ShortInt (1 байт + 1 бит)

        • Word (2 байт)

        • Integer (2 байт + 1 бит)

        • LongInt (4 байт + 1 бит)

    2. Вещественные

      1. Single (4 байт)

      2. Real (6 байт)

      3. Double (8 байт)

      4. Comp (-2E+63+1 .. 2E+63+1, 19-20 значащих цифр, 8 байт)

      5. Extended (10 байт)

  2. Строковый (1 байт – 256 символов)

  3. Структурированные

    1. Регулярный (массивы)

    2. Комбинированный (записи)

    3. Множества

    4. Файлы

    5. Объекты

  4. Ссылочный (указатели)

  5. Процедурный


1. Простые

Стандартные

a) вещественные (Single, Real, Double, Extended, Comp)

Порядковые

a) целочисленные (Byte, Shortint, Word, Integer, Longint),

b) символьные (Char),

c) логические (Boolean).

Нестандартные

Нестандартные – тип, определяемый пользователем после слова type. К ним относятся:

  1. перечислимый – создаётся путём указания (перечисления) всех значений, которые могут принимать переменные этого типа, в виде списка слов-идентификаторов.

type <имя типа> = (<значение 1>,< значение 2>, …);

type week = (mon, tue, wed, the, fri, sat, sun);

color = (red, orange, jellow, green, lightblue, blue, violet);

Далее добавляем переменные этих типов:

var day : week;

cwet : color;

Нумерация элементов начинается с 0. (Функции: ord, pred, succ).

  1. диапазонный (интервальный) – сужение некоторого базового упорядоченного типа:

type <имя типа> = (<значение 1> ..< значение 2>);

type weekdays = (mon, tue, wed, the, fri, sat, sun);

workdays = (mon, tue, wed, the, fri);

months = 1..12;

var day1, day2 : weekdays;

day3 : workdays;

month = months;

  1. Строковый (string) – любая последовательность не более 255 символов.

!!!Их можно задать в разделе типов, в разделе констант или в разделе переменных!!!

type t = string[10];

const s = ‘Привет!’;

var top : t, w : string;

Применимые стандартные процедуры (4) и функции (4)

ФункцииConcat (объединение), Copy (возвращает подстроку из строки), Length (длина), Pos (ищет подстроку в строке).

ПроцедурыDelete (удаление подстроки), Insert (вставка подстроки), Str – (число в строку), Val - (строку в число).

^ 3. Структурированные типы данных.

Структурированные типы позволяют объединять элементарные значения в сложные структуры.

1) Массивы (регулярный тип) – совокупность данных, состоящих из фиксированного числа элементов одного типа – базового. Одномерные и двумерные (многомерные). Место элемента в массиве определяется его индексами, значит можно сортировать.

1 способ: var massiv : array [0..255] of integer;

2 способ: type

massiv=array [byte] of boolean;

var a1 : massiv;

2) Записи

Подобно массиву, запись - совокупность родственных данных, принадлежащих различным типам. Каждый элемент имеет собственное имя, соответственно применение операции сортировки – бессмысленно!

a=record {a – имя комбинированного типа}

x, y:m



z:n {x, y, zимена полей, m, nтипы, которым принадлежат поля}

end;

Информация о группе людей организуем в виде записей, где д/каждого члена коллектива – своя запись. Объявление такого типа Employee:

type

Employee = record

ID:word; {Идентификатор (личный номер)}

FirstName, SecondName, SurName:string[20];

{Имя, Фамилия, Отчество}

Standing:byte; {Стаж}

Salary:real; {Зарплата}

end;

var Assistant: Employee

Доступ к отдельным полям выполняется с помощью составных имён (имя_записи.имя_поля):

Пример 1.

Assistant.ID:=19876; ^ Write (Assistant.FirstName); Read(Assistant.SecondName);

Assistant.SurName := ‘Рыков’; a:= Assistant.Standing; b:= Assistant.Salary/100;


Write (Assistant.FirstName[1]) – вывод первой буквы имени. Всё как у строковых.

Write (‘Петров ’, Assistant.FirstName[1],‘. ‘,AssistantSecondName[1],‘.’); - вывод Фамилии И.О.

^ Оператор WITH

Оператор With – оператор над записями - with p do s;

Более коротко можно осуществить запись примера 1 так:

Пример 2.

With Assistant do

begin

ID:=19876; Write (FirstName); Read(SecondName);

SurName := ‘Рыков’; a:=.Standing; b:= Salary/100;

end;

Иерархические (вложенные) записи.

type

Address=record

PostСode :1..999999; {Почтовый код}

City, Street :string[20]; {Город, улица}

House :word; {Дом}

Apartment :word; {Квартира}

end; {address}

Date= record

Day :1..31; {Число}

Month :1..12; {Месяц}

Year :1900..2005; {Год}

end; {date}

NewEmployee=record

ID:word; {Идентификатор (личный номер)}

FirstName, SecondName, SurName:string[20];

{Имя, Фамилия, Отчество}

Standing :byte; {Стаж}

Salary :real; {Зарплата}

BirthDate :date; {Дата рождения}

Habitation :address; {Место жительства}

end;

var NewAssistant: NewEmployee;

Обращение к таким записям:

NewEmployee.Address.PostСode или NewEmployee.Date.Day

Записи с вариантами.

Иногда в структуре адреса необходима фиксированная (инвариантная) часть – группа полей, присутствующих постоянно, независимо от характера адреса, и вариантная часть – с изменяющимся набором полей.

type

NewAddress=record

PostСode :1..999999; {Почтовый код}

Street :string[20]; {Улица}

House :word; {Дом}

case City_or_Country :City, Country of

City : (City:string[20]; {Город}

Appartment :word; {Квартира}

Country : (Area, District,

Community :string[20]); {Населённый пункт}

end; {Newaddress}

!!! Это не оператор Case, а лишь похожая внешне конструкция, описывающая вариантную часть.

Примечания.

        1. В записи только одна вариантная часть и описана после инвариантной.

        2. Поле признака вариантной части не принадлежит никакой части и выносится в заголовок вариантной части.

        3. Идентификаторы всех полей записи – уникальны.

        4. Для некоторых меток – «пустой вариант». После двоеточия ( ) без перечня полей.

        5. Объём памяти определяется суммой длин полей. Для записи с вариантами – по самому объёмному варианту.

!!! К записям неприменимы арифметические и логические операции.

!!! Нельзя применять процедуры Read и Write. Но можно организовать считывание или вывод на экран каждого поля записи в отдельности (см. примеры 1,2).

^ 3) Множества

Множество – совокупность связанных данных, состоящая из элементов одного типа, который называется базовым. Однако, в отличие от массива (фиксированное число элементов), множество может включать произвольное число элементов.

Type

s=set of a {s = множество из a (базовый тип)}

Пример:

Type

a1=set of 1..3; {значения [], [1], [2], [1,2], [3], [1,3], [2,3], [1,2,3]. Всего 8 - 23}

a2= set of ‘a’..‘e’; { Всего значений 32 – 25}

a3= set of char; { Всего значений – 2256}

var x : a1; y : a2; z : a3;

Значения z [‘3’, ‘f’, ‘(‘, ‘#’, ‘я’, ‘Л’] или так: [chr(45), chr(54), chr(145), chr(245)]

!!! В множестве порядок элементов не фиксируется. [1,2,3,4,5] и [5,2,4,3,1,] – одно множество. Все элементы различны [1,2,3] и [1,1,2,3,3,3] – одно множество.

!!! Можно [1..8] и [1..3,7,9].

!!! Число элементов <= 256 (д/целых типов диапазон (0..255). Типы – Byte, Char, Boolean.

Но! Integer нельзя, Но! подходят интервальные типы, образованные на основе Integer.

Допустимые действия включают:

        1. проверку принадлежности элемента множеству;

        2. объединение (+), пересечение (*) и вычитание (-) множеств;

        3. сравнение (равенство/неравенство, принадлежность одного множества другому).

^ Проверка принадлежности элемента множеству – оператор In -> a in [1,2,3,4,5]

Объединение: [1,2,3,4] + [3,4,5] => [1, 2,3,4,5]. [1,2,3,4] + [7] => [1,2,3,4,7]

Пересечение: [1,2,3,4] * [3,4,5] => [3,4]. [1,2,3,4] * [5,6,7] => []. [1,2,A] * [2,B] => [2].

Вычитание:

[1,2,3,4] - [3,4,5] => [1,2]. [1,2] - [3,4] => [1,2]. [1,2,A] - [2,B] => [1,A].

[3,4,5] - [1,2,3,4] => [5]. [3,4] - [1,2] => [3,4]. [2,B] - [1,2,A] => [B].


Операции ‘*’ и ‘+’ взаимообратимы, но вычитание – нет!


Сравнение множеств (операции =, <>, <= (проверка вхождения множества слева в множество справа), >= (проверка вхождения множества справа в множество слева)

[
=
1,2,3] = [1,2,3] – True! [1,2,3] = [2,3,4] – False!

[1,2,3] = [3,2,1] – True! [1,2,3] = [1,1,2,2,3] – False!


[
<>
1,2,3] <> [1,2,3] - False! [1,2,3] <> [2,3,4] – True!

[1,2,3] <> [3,2,1] - False! [1,2,3] <> [1,1,2,2,3] – True!


[
<=
1,2,3] <= [1,2] - False! [1,2,3] <= [1,2,3,4,5] – True!

[1,2,3] <= [4,3,2,1] - True! [1,2,3] <= [1,3] – False!


[
>=
1,2,3] >= [1,2] - True! [1,2,3] >= [1,2,3,4,5] – False!

[1,2,3] >= [4,3,2,1] - False! [1,2,3] >= [1,3] – True!

Решето Эратосфена

program Prime;

uses crt;

const n=255;

var rjad, primes : set of 2..n;

next, i : integer;

begin clrscr; writeln;

rjad := [2..n]; primes := []; next :=2;

repeat

while not (next in rjad) do

next := next + 1;

primes := primes + [next];

i := next;

while i <= n do begin

rjad := rjad – [i]; i:=i+next;

end;

untile rjad=[];

for i:=2 to n do

if i in primes then Write(i:4);

readln

end.

4) Совместимость типов

a) Совместимость по выражению

Два типа данных считаются совместимыми в выражении, если соблюдается хотя бы одно из условий:

  • типы идентичны

  • Оба типа принадлежат вещественным типам (даже разным)

  • Оба типа принадлежат целочисленным типам (даже разным)

  • Один тип – поддиапазон другого

  • Оба типа – поддиапазоны одного и того же третьего (базового) типа

  • Оба типа – множества с совместимыми базовыми типапи

  • Один тип строковый, а второй – строковый или символьный

  • Один тип – нетипизированный указатель (Pointer), а второй – любой другой ссылочный тип

b) Совместимость по присваиванию.

Выражение считается совместимым по присваиванию с переменной, если соблюдается хотя бы одно из условий:

  • Типы идентичны, и ни один из них не является файлом или не принадлежит иному структурированному типу, компонентами которого являются файлы

  • Оба принадлежат совместимым порядковым типам, и при этом возможные значения выражения принадлежат диапазону значений, допустимых для переменной

  • Оба принадлежат вещественным типам, и при этом возможные значения выражения принадлежат диапазону значений, допустимых для переменной

  • Переменная относится к одному из вещественных типов, выражение – одному из целочисленных типов, и при этом возможные значения выражения принадлежат диапазону значений, допустимых для переменной

  • Переменная принадлежит строковому типу, выражение – символьному

  • Оба принадлежат совместимым множественным типам, и при этом возможные значения выражения принадлежат диапазону значений, допустимых для переменной

  • оба являются совместимыми типам указателей.

^ 5) Приведение типов

Иногда необходимо в операторе присваивания использовать переменные разных типов (приведение типов переменных):

var x : type1;

y : type2;

После того, как переменные x и y получат в программе некоторые значения, можно:

x : type1(y); {тип type2 приводится к типу type1}

y : type2(x); {тип type1 приводится к типу type2}

Пример:

var x : char;

y : byte;

x : byte(y); y : char(x);

При приведении типов преобразуемый тип и тип в который происходит преобразование, должны быть перечислимыми или указателями.

Второй вариант приведения типов - приведение типов значений.

type (expression); Expression – принадлежащее некоторому типу выражение, к-рое данный оператор может трактовать как принадлежащее типу Type (т.е. Expression приводится к типу Type.

byte (F); F приводится к типу byte (т.е. символ преобразуется в соответствующий код.

char (77); - число 77 преобразуется в символ.

Типизированные константы – они дают возможность объявлять переменные и сразу присваивать им значение:

const <имя константы 1> : <тип 1> = < переменная 1>);

const c : char = ‘a’;

n: integer = 5;

p: real = 1.73;

k: Boolean = true;

6) Файлы

a) Описание типов и объявление файлов Файл – совокупность данных, размещённых на внешнем носителе. данные в файле – элементы. Количество данных в Ф в описании не указывают. Элемент Ф не имеет индекса. Тип элементов может быть простым и сложным, но не может быть Ф.

Type <имя типа> = file of <базовый тип>

Var <список переменных> : file of <базовый тип>

Type myfile = file of integer;

list = file of string[20];

Var file1,file2 : myfile, druzia: list;

komanda : file of boolean;

b) Действия с Ф. Чтобы найти нужный элемент Ф, необходимо последовательно просмотреть все предыдущие элементы. Это называется последовательным доступом к Ф.

Для обработки Ф его необходимо открыть, выполнить нужные действия и закрыть.

Для определения конца Ф существует стандартная логическая функция:

EOF(<имя_Ф>). EOF=True – конец Ф достигнут, EOF=False – нет.

Команды (процедуры) работы с Ф:

assign(<имя_Ф>,<внешнее имя>) – обеспечивает связь между файловой переменной и файлом на внешнем носителе;

reset(<имя_Ф>) – открывает Ф для чтения из него данных;

read(<имя_Ф>, <имя переменной>) – читает (вводит данные из Ф в ОП;

close(<имя_Ф>) – закрывает Ф;

rewrite(<имя_Ф>) – открывает Ф для записи в него данных;

write(<имя_Ф>, <имя переменной>) – записывает (выводит) данные в Ф.

<имя_Ф> - имя, заданное в разделе объявления переменных.

<имя переменной> - имя Ф данных на внешнем носителе, взятые в кавычки ‘c:\schoolsite\schoolsite.htm

Задача 1. Создать Ф записей с информацией о компьютерах: марка (marka), объём винчестера (fdd), объём ОП (ram), быстродействие (speed). Вывести содержимое Ф на экран.

program Computer1;

Uses Crt;

type comp = record

marka : string[15];

hdd, ram : real;

speed : integer;

end;

myfile = file of comp;

var f1 : myfile;

I, n : integer;

c1 : comp;

begin clrscr;

write (‘Введите количество компьютеров - ’); readln(n);

assign(f1, ‘c:\turbopas\computer’); {Открываем Ф для записи в него данных}

rewrite(f1);

for i:=1 to n do begin

write (‘Введите марку компьютера - ’); readln(c1.marka);

write (‘Введите объёмы его HDD и RAM - ’); readln(c1.hdd, c1.ram);

write (‘Введите быстродействие - ’); readln(c1.speed);

write (f1,c1); {Записываем введённые данные в Ф}

end;

close(f1);

writeln (‘ Марка Объём винчестера RAM Быстродействие’);

reset(f1); {Открываем Ф для считывания данных}

for i:=1 to n do begin

read(f1,c1); {Считываем данные из Ф}

write (c1.marka:15, c1.hdd:25,c1.ram:32, c1.speed:40); writeln;

end;

writeln(‘Нажми Enter’); readln; clrscr;

writeln(‘Выводим записи с быстродействием > 166 МГц’);

reset(f1); {Открываем Ф для считывания данных}

while not eof(f1) do begin

read(f1,c1);

if c1.speed>166 then

writeln(c1.marka:15, c1.hdd:8.2, c1.ram:8:2);

end;

readln

end.

Для обработки Ф прямого доступа необходимо перед выполнением команд read или write следует обеспечить доступ к k-му элементу Ф (нумерация начинается с нуля) с помощью команды

seek(<Имя_файла>),k


V. Процедуры и функции

В языке Pascal имеется две разновидности подпрограмм - процедуры и функции. Подпрограммы делятся на стандартные и ппрг. пользователя. Стандартные ппрг. находятся в модулях: System, Crt, Dos, Graph и т.д. Структура любой подпрограммы аналогична структуре всей программы. Подпрограмма должна быть описана до того, как она будет использована в программе или другой подпрограмме.

Все параметры подпрограмм можно разделить на локальные (т.е. доступные только ей самой) и глобальные (доступные как подпрограмме, так и вызывающей её программе). Обмен данными с подпрограммой осуществляется только с помощью глобальных параметров. Выход из процедуры можно осуществлять с помощью команд: exit, break, continue, halt.

1. Процедура - procedure

Подпрограмма-процедура предназначена для выполнения какой-то законченной последовательности действий. Структура любой процедуры такова:

procedure <Имя_процедуры> (<Список формальных параметров>);

^ Uses <Используемые_модули>;

label <Используемые_метки>;

const <Имя_константы> = <Значение_константы>;

type <Имя_типа> = <Определение_типа>;

var <Имя_переменной> : <Тип_переменной>;

begin

<Тело_процедуры>;

end;

В списке формальных параметров перечисляют переменные и указывают их типы. Различают параметры-аргументы (другой термин параметры-значения) и параметры-результаты (другой термин параметры-переменные). Перед списками параметров-результатов каждого! типа необходимо слово var.

НО!!! массивы фиксированных размеров нельзя! определять словом array!!!

Для вызова процедуры из основной программы следует записать оператор, состоящий из имени процедуры и списка фактических параметров процедуры, указываемого в круглых скобках.

^ Фактическими параметрами-аргументами могут быть: константы, переменные, выражениями, а параметрами-результатами – только переменные. Типы данных в команде вызова не указывают. Между фактическими и формальными параметрами должно быть соответствие по типам и количеству. Имена могут не совпадать.

Процедуру можно вызвать так:

<имя процедуры>(<список фактических параметров>);

Команда вызова работает так: значения фактических параметров присваиваются соответствующим формальным параметрам процедуры, выполняется процедура, определяются параметры-результаты, значения которых присваиваются (возвращаются) соответствующим фактическим параметрам команды вызова. Переменные, описанные в разделе var основной программы – глобальные. Они действуют во всех процедурах данной программы. Переменные, описанные в конкретной процедуре – локальные и действуют только в данной процедуре.

2. Функции - function

Подпрограмма-функция возвращает в точку вызова только один результат простого стандартного типа. Функцию описывают так:

function (<список формальных параметров>): <тип функции>;

<разделы описаний и объявлений функции>;

begin

<имя_переменной := выражение>;

end.

Результат функции возвращается в основную программу через её имя (так же, как и sin, cos). Вызов функции осуществляется только из выражений с помощью указателя функции:

<имя>(<список фактических параметров>);

Пример из программы ^ Точки:



function rasst(i,j: integer): longint; {Функция - расстояние м/у точками}

begin

rasst: =round (sqrt (sqr(x[i]-x[j]) +sqr(y[i]-y[j])));

end;

procedure init; {Инициализация адресов и МИН}

begin

l:=1;h:=2;b:=rasst(1,2);

end;



begin clrscr; {основная программа}



init;

for i:=1 to n-1 do

for j:=i+1 to n do begin

r:=rasst(i,j);



end;



readln

end.

^ 3.Сфера действия имён

К
Для любой подпрограммы доступны все имена, объявленные в ней, а также во всех «объемлющих подпрограммах и в самой программе (т.е. «выше»). Однако для той же подпрограммы недоступны все имена, объявленные во вложенных в неё подпрограммах (или «ниже»). Здесь понятие локальные и глобальные переменные относительны
аждое имя в программе доступно в своей подпрограмме:

Program A;

var x,y,z;

Procedure B;

var m,n;

Function D;

var g,h;

Procedure E;

var k,l;

Function c;

var p,r,s;


4. Параметры

Параметры, указываемые в операторе вызова процедуры, называются фактическими, а параметры, перечисленные в заголовке описания процедуры, - формальными.

Procedure ProcName (a,b,c:Type_1;d,e,f:Type_2;… x,y,z: Type_n);

Здесь a, b, c, …, x, y, z – формальные параметры, а Type_1, …, Type_n – типы данных, их может быть любое количество.

Если в описании подпрограммы имеются формальные параметры, то при её вызове непременно должны указываться фактические параметры. Количество и типы должны совпадать.

Параметры-значения передают значения в процедуру (т.е. конкретные значения).

Параметры-переменные применяют тогда, когда необходимо передавать значения не только из программы в процедуру, но и обратно.

Отличить эти параметры друг от друга очень просто: в перечень формальных параметров в описании процедуры вводится VAR. Параметры, введённые до слова VAR, являются параметрами-значениями, а те, которые после, - параметрами-переменными.

Procedure ProcName (a,b,c:Type_1;d,e,f:Type_2;var x,y,z:Type_n);

Здесь a,b,c,d,e,f – параметры-значения, x,y,z - параметры-переменные.

^ Заголовок процедуры Формальные параметры




Procedure ProcName (x: Integer; var y: real);




Параметр-значение Параметр-переменная


ProcName (number; power);




Вызов процедуры в теле программы Фактические параметры


Параметр-значение - копирует значение некоторой переменной из программы и передаёт его в процедуру. Процедура манипулирует этим значением, и после завершения работы процедуры эта копия теряется, но исходное значение переменной остаётся неизменным.

Параметр-переменная – предоставляет доступ процедуре непосредственно к самой переменной из программы. Процедура манипулирует переменной, и после завершения работы процедуры эта переменная возвращается в программу с новым значением.

Иными словами, параметр-значение позволяет передавать данные в одном направлении, параметр-переменная – в обоих.

То же самое относится и к функциям. Применение VAR в описании функции нежелательно (моветон!), т.к. функция должна возвращать единственное значение (по определению).

5. Рекурсия

В TurboPascal допускается в теле программы оператора вызова самой себя. Такие программы называются рекурсивными, а такой способ вызова – рекурсией.

Function Factorial (a: integer): integer;

begin

if a=0 then Factorial := 1;

else Factorial := a * Factorial(a-1)

end;

^ 6. Опережающее описание

program operejenie;

var i : integer; j : real;

procedure a (x: integer); forward;

procedure b (y : real);

begin

. . .

a(i) {Вызов ещё не определённой процедуры}

end;

procedure a;

begin

. . .

b(j)

end;

^ 7. Стандартные функции и процедуры

a). Числовые переменные

Функции

Комментарий




Функции

Комментарий

abs(x)

|x|




trunc(x)

Отбрасывает дробную часть

arctan(x)

arctg(x)




int(x)

Отбрасывает дробную часть

cos(x)

cos(x)




frac(x)

Дробная часть

sin(x)

sin(x)




odd(x)

True (х–нечётное), false (х– чётное)

exp(x)

ex




random(x)

Случайное от 0 до x

ln(x)

ln(x), x>0




upcase(x)

Лат. строчная – прописная

sqrt(x)






Процедуры:

sqr(x)

x2




inc(x,y)

Увеличивает х на у

ord(x)

ASCII-код символа




inc(x)

Увеличивает х на 1

succ(x)

Следующее значение x




dec(x,y)

Уменьшает х на у

Pred(x)

Предыдущее значение x




dec(x)

Уменьшает х на 1

round(x)

Округление х










b). Стандартные функции и процедуры (строковые переменные)

Функции

Комментарий




Процедуры

Комментарий

length (S)

Длина строки




insert

(S1,S2,m)

Вставка строки S1 в строку S2, начиная с позиции m.

Copy (S,M,N)

N символов строки S, начиная с m-го




delete(S,m,n)

Удаление n символов из строки S, начиная с позиции m.

concat

(s1,s2,…,Sn)

Объединение всех строк в одну




str(<число>, <строка>)

Число -> строка

pos(S1,S2)

Номер символа, с которого начинается вхождение S1 в S2.




val(S1,N1,N2)

Засылает в числовую N1 числовой образ строки S1. Если можно, то S2=0, иначе № первого недопустимого символа строки

8. Модули

Подпрограммы, имеющие универсальное значение, следует объединять в библиотеки и модули.

Модуль – это программная единица. Он содержит описание констант, типов данных, переменных и подпрограмм.

a). Стандартные модули

System

Содержит часто используемые функции. Загружается по умолчанию.

String

Содержит функции для работы со строковыми переменными.

Printer

Модуль для работы с принтером

Graph

Содержит процедуры и функции для графических построений

Overlay

Модуль для работы с большими программами

^ Dos, Windows

Дают возможность работать с ОС (выполнять программы ОС и получать данные от ОС)

Graph3, Turbo3

Обеспечивают совместимость с предыдущими версиями TP

b). Некоторые процедуры модулей System, Crt

Exit

Выход из подпрограммы, остановка основной программы

Halt

Остановка выполнения программы и передаёт управление ОС

Break

Принудительный выход из циклов for, while, repeat

Continue

Переход к выполнению следующей итерации в циклах for, while, Repeat

Delay(n)

Приостановка выполнения программы на n микросекунд

ClrScr

Очистка экрана

Textcolor (цвет)

Цвет текста (0-15)

Textbackground(цвет)

Цвет фона экрана (0-15)

^ Некоторые функции модуля Crt

Readkey

Приобретает значение нажатого пользователем символа на клавиатуре

Keypressed

Логическая Ф. Получает значение True при нажатии любой клавиши

^ Некоторые процедуры модуля Dos

Exec(‘<полное имя exe-файла>’, ’<параметры программы>’ или ’’)

Для выполнения exe-файла изнутри текущей программы (Необходима директива $M $2000,0,1000 в начале программы

GetTime(Hour, Minute, Second, SotiSec)

Присваивает значения текущего времени (час, мин, с, сотые доли с)

GetDate(Year, Month, Day, Number)

Присваивает значения переменным типа Word значения текущей даты (год, месяц, день, день недели)

c) Структура модуля

Модуль – самостоятельная, отдельно компилируемая единица. Структурой М. напоминает структуру программы.

^ Unit <Заголовок>;

interface {интерфейсный раздел}

implementation {Раздел реализации}

<текст подпрограмм пользователя>

begin

{Раздел инициализации (может отсутствовать)}

End.

Примечание: Слово End – пара слову Unit, а не Begin.

Исходный текст модуля пишется с расширением .PAS. При компиляции модуля на диске создаётся файл с объектным кодом .TPU.

^ Интерфейсный раздел обеспечивает взаимодействие модуля с другими модулями. В нём объявляются глобальные константы, типы, переменные, процедуры и функции.

Разделы интерфейсного раздела: ^ Uses, Const, Type, Var.

Кроме того, в нём же должны быть представлены заголовки глобальных подпрограмм данного модуля.

В разделе реализации содержатся описания процедур и функций, заголовки которых находятся в интерфейсном разделе.

Разделы интерфейсного раздела: ^ Uses, Label, Const, Type, Var.

Создание модуля пользователя:

Пример: Модуль для вычисления тангенса и степени xy.

Unit Matemat;

interface

uses Crt;

function tg(x: real):real;

function stepen(x,y: real):real;

implementation

function tg(x: real):real;

begin

tg := sin(x)/cos(x);

end;

function stepen(x,y: real):real;

begin

stepen := exp(y * ln(x));

end;

begin clrscr;



end.

Литература:

              1. О.А.Меженный «Самоучитель Turbo Pascal». Диалектика, Москва – Санкт-Петербург - Киев, 2004 г.

              2. Я.Н.Глинский, В.Е.Анохин, В.А.Ряжская «Turbo Pascal и Delphi». Учебное пособие. DiaSoft, Москва – Санкт-Петербург - Киев, 2001 г.

              3. Д.М.Ушаков, Т.А.Юркова «Паскаль для школьников». Питер, Москва – Санкт-Петербург - Нижний Новгород – Воронеж - Ростов-на-Дону - Екатеринбург – Самара – Новосибирск – Киев – Харьков - Минск







Похожие:

Гипертекстовый учебник iconДокументы
1. /Учебник по менеджменту/glava1.doc
2. /Учебник...

Гипертекстовый учебник iconУчебник истории нового века Современный учебник истории и работа с ним в общеобразовательной школе Экспертиза учебников (новые подходы) Учебник это…
Соблюдают концептуальное единство дидактических подходов к реализации учебных курсов
Гипертекстовый учебник iconУчебник для 1 класса. М.: Академкнига/Учебник, 2008 Агаркова Азбука: учебник для 1 класса. М.: Академкнига/Учебник, 2008
Чуракова Н. А. Русский язык: учебник для 1 класса. – М.: Академкнига/Учебник, 2008
Гипертекстовый учебник iconДокументы
1. /Тяжелая атлетика. Учебник для ИФК. Под ред. Воробьева А.Н. 1981/P1010177_0001.djvu
Гипертекстовый учебник iconДокументы
1. /readMe.txt
2. /Учебник JAVA/PART1.DOC
Гипертекстовый учебник iconДокументы
1. /Учебник древнегреческого языка для нефилологических факультетов университетов А. Ч. Козаржевский/dr_yaz001.doc
Гипертекстовый учебник iconДокументы
1. /Учебник магии/КАННИНГЕМ скотт учебник по колдовству.doc
Гипертекстовый учебник iconУчебник по обучению грамоте и чтению 1 Академкнига/Учебник

Гипертекстовый учебник iconКалендарно-тематическое планирование уроков по геометрии 7 класс
Учебник: Геометрия, 7-9: Учебник для общеобразовательных учреждений/ Л. С. Атанасян, В. Ф. Бутузов, С. Б. Кадомцев и др. – М.: Просвещение,...
Гипертекстовый учебник iconУчебник для вузов. Спб.: Питер, 2004. 668 с.: ил. Isbn 5-94723-759-8
Данный учебник отвечает всем требованиям обра­зовательного стандарта
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов