Инфоурок / Информатика / Другие методич. материалы / Краткий справочник по языку программирования "Паскаль"

Краткий справочник по языку программирования "Паскаль"

Курсы профессиональной переподготовки
124 курса

Выдаем дипломы установленного образца

Заочное обучение - на сайте «Инфоурок»
(в дипломе форма обучения не указывается)

Начало обучения: 22 ноября
(набор групп каждую неделю)

Лицензия на образовательную деятельность
(№5201 выдана ООО «Инфоурок» 20.05.2016)


Скидка 50%

от 13 800  6 900 руб. / 300 часов

от 17 800  8 900 руб. / 600 часов

Выберите квалификацию, которая должна быть указана в Вашем дипломе:
... и ещё 87 других квалификаций, которые Вы можете получить

Получите наградные документы сразу с 38 конкурсов за один орг.взнос: Подробнее ->>

Выбранный для просмотра документ P&F.doc

библиотека
материалов

Пhello_html_m48bab827.gifодпрограммы

Подпрограммы

hello_html_6e38897a.gif


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


Преимущества подпрограммы:

  1. Один и тот же фрагмент можно использовать многократно как в одной, так и в разных программах.

  2. Программу лучше писать небольшими частями. Такие программы легче читать, тестировать и отлаживать.


Виды подпрограмм:

  1. Процедуры

  2. Функции


Примечание:

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

  • Если эти объекты объявлены в разделе описания подпрограммы, то их называют локальными. Их использование возможно только в пределах данной подпрограммы.

Функции


Функция – подпрограмма возвращающее одно предопределенное значение.

Описание функций:

Function И_Ф (С_П): Т_З;

Раздел описаний

Begin

Раздел исполняемых операторов

End;

И_Ф – имя функции

  • задается в соответствии с обычными правилами Паскаля

  • является носителем результата

С_П – список параметров

  • содержит перечисление переменных и их типов;

  • список параметров может отсутствовать.

Т_З – тип значения функции.


Пример программы с использованием функции:

Вычислить сумму и произведения первых N натуральных чисел.

Program symm_or_proiz

Var N:integer;

Function symm: integer;

Var

y,i:integer;

Begin

y:=0;

For i:=1 to N do

y:=y+i;

symm:= y;

End;


Function proiz: integer;

Var

y,i:integer;

Begin

y:=1;

For i:=1 to N do

y:=y*i;

proiz:= y;

End;

Begin

Writeln (‘Введите число ’);

Readln (N);

Writeln (‘Сумма - ’, symm);

Writeln (‘Произведение - ’, proiz);

End.


Процедуры

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

Описание процедуры:

Procedure И_П (С_П);

Раздел описаний

Begin

Раздел исполняемых операторов

End;

И_П – имя процедуры

  • задается в соответствии с обычными правилами Паскаля

  • не является носителем результата, поэтому тип результата не указывается;

С_П – список параметров

  • содержит перечисление переменных

  • содержит перечисление типов переменных

  • Список параметров может отсутствовать

Обмен данными между процедурой, как модуля, и программы в целом производится с помощью параметров.


Основные различия между функциями и процедурами

  1. Функция возвращает одно единственное значение. Процедура возвращает сложные структуры.

  2. Заголовок функции завершается указанием типа возвращаемого значения. В заголовке процедуры такая информация отсутствует.

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

  4. Функция может быть операндом математического выражения. Процедура не может быть частью выражения.


Операнд – величина в выражении, над которой производится операция; аргумент операции.


hello_html_m48bab827.gif

- 2 -

Выбранный для просмотра документ Данные в Pascal.doc

библиотека
материалов

Лекции по Pascal

hello_html_m48bab827.gif

Данные в Pascal

hello_html_m7590005a.gif

Не структурированные типы данных (порядковые):


  1. Числовой тип данных: действительные числа:


п/п

Характеристики

Виды действительных чисел

в Pascal и их обозначение

Количество байт, выделяемых в памяти для хранения числа

Количество позиций для вывода числа

Используемый в Pascal промежуток действительных чисел

1

Real (базовый тип)

6

11-12

[2.9E-39;1.7E+38]

2

Single

4

7-8

[1.5E-45;3.4E+38]

3

Double

8

15-16

[5.0E-324;1.7E+308]

4

Extended

10

19-20

[3.4E-4932;1.1E+4932]


  1. Числовой тип данных: целые числа:


п/п

Характеристики

Виды целых чисел

в Pascal и их обозначение

Количество байт, выделяемых в памяти для хранения числа

Используемый в Pascal промежуток целых чисел

1

Integer (базовый тип)

2

[-32768;+32767]

2

ShortInt

1

[-128;+127]

3

LongInt

4

[-2 147 483 648;+2 147 483 647]

4

Byte

1

[0;+255]

5

Word

2

[0;+65 535]


  1. Символьный тип данных:


п/п

Характеристики

Обозначение

Количество байтов, выделяемых в памяти для хранения символа

Количество зарезервированных символов в Pascal

1

Char (базовый тип)

1 байт

256, нумерация 0..255


  1. Логический тип данных:


п/п

Характеристики

Обозначение

Количество байтов, выделяемых в памяти

Количество логических данных в Pascal

1

Boolean (базовый тип)

1 байт

Два: True и False



  1. Перечисляемый тип данных.

    1. Этот тип задается перечислением тех значений.

    2. Каждое значение имеет идентификатор.

    3. Соответствие между значениями перечисляемого типа и идентификатором устанавливается порядком следования (первое значение в списке получает порядковый номер 0, втрое 1, и т.д.)

    4. Максимальное количество значений (мощность множества) в перечисляемом типе 65536 (от 0 до 65535).

    5. Описание перечисляемого типа:

1 способ: Type <имя перечисляемого типа>=(<список значений, которые включает тип>);

2 способ: Var <имя перечисляемого типа>:(<список значений, которые включает тип>);


Пример:

Type Colors=(red, white, blue);

Var Colors:(red, white, blue);


  1. Тип-диапазон.

    1. Подмножество любого предопределенного порядкового типа, кроме типа-диапазона.

    2. Определять типа-диапазона:

1 способ: Type <имя типа-диапазона>=<мин. значение>..<макс. значение>;

2 способ: Var <имя типа-диапазона>: <мин. значение>..<макс. значение>;

    1. две точки между мин. и макс. значениями рассматриваются как один символ (между ними не допустимы пробелы);

    2. Левая граница диапазона не должна превышать правую.

    3. Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью.


Структурированные типы данных:


п/п

Характеристики

Обозначение

Тип структурных элементов

Количество байт, выделяемых в памяти

1

String (базовый тип)

Char

+1 байт


Способы хранения данных:


  1. Константы:

    1. Именованные.

      • Значение константы в процессе выполнения программы не может изменится. Имеет имя.

        1. Типизированные.

        2. Не типизированные.

    2. Неименованные.

      • Значение константы в процессе выполнения программы не может изменится. Имени нет.

  2. Переменные – не структурированный именованный способ хранения данных предопределенного типа.

  3. Массив данных – структурированный именованный способ хранения совокупности данных предопределенного типа, с указанием индекса элемента.

  4. Множества – структурированный именованный способ хранения совокупности неповторяющихся данных предопределенного типа.

  5. Записи - структурированный именованный способ хранения совокупности предопределенного типа, с указанием имени поля, в котором хранятся данные.

Примечание: все данные являются значениями констант, переменных, массивов и т.д.


Правила задания имен (идентификаторов)


  1. В имени могут использоваться только буквы латинского алфавита (прописные и строчные) и арабские цифры.

  2. Имя должно начинаться с буквы.

  3. За первой буквой могут следовать и буквы и цифры.

  4. Буквой считается символ подчеркивания.

  5. В имени не могут использоваться пробелы и специальные символы.

  6. Общее количество символов не может превышать 63.


Операции с данными


Арифметические операции


п/п

Название

Обозначение

Тип операндов

Результат операции

1

Сложение

+

Любой числовой

Тот же, что и тип операндов

2

Вычитание

-

Любой числовой

Тот же, что и тип операндов

3

Умножение

*

Любой числовой

Тот же, что и тип операндов

4

Деление

/

Любой числовой

Real

5

Присвоение знака числу

+ -

Любой числовой

Тот же, что и тип операндов

6

Деление без остатка (целочисленное деление)

div

Integer

Integer

7

Определение остатка при делении

Mod

Integer

Integer


Операции отношения


п/п

Название

Обозначение

Тип операндов

Результат операции

1

Больше

>

Любой

Boolean

2

Меньше

<

Любой

Boolean

3

Равно

=

Любой

Boolean

4

Не равно

<>

Любой

Boolean

5

Больше или равно

>=

Любой

Boolean

6

Меньше или равно

<+

Любой

Boolean


Логические операции


п/п

Название

Обозначение

Тип операндов

Результат операции

1

Эквиваленция

=

Boolean

Boolean

2

Логическое умножение, конъюнкция

And

Boolean

Boolean

3

Логическое сложение, дизъюнкция

Or

Boolean

Boolean

4

Логическое отрицание (унарная операция)

Not

Boolean

Boolean


Операции с символами и строками


п/п

Название

Обозначение

Тип операндов

Результат операции

1

Конкатенация

+

Char, String

String


Выражения


Выражение – языковая конструкция, предназначенная для вычисления значения предопределенного типа с помощью одного или нескольких операндов. (Частным случаем выражения является неименованная константа).

Состав выражения:

  • неименованные константы неструктурированных предопределенных типов данных;

  • обозначения структурных элементов, хранящих информацию (переменные, именованные константы, поля записей, элементы массивов и т.п.);

  • вызов функций;

  • обозначения операций и скобки (для расстановки приоритета пользователя в выполнении операций над значениями и данными).

Правила конструирования выражений:

  • нельзя пропускать знаки операций между операндами;

  • если числитель или знаменатель – математическое выражение, то они указываются в скобках;

  • значение выражения можно использовать только в процедуре вывода информации на экран или операторе присваивания;

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

Характеристики выражения:

  • Тип значения выражения, он определяется:

    • Операндами, которые участвуют в выражении;

    • Операциями, над операндами;

    • Если в записи выражения участвует хотя бы одна операция отношения то тип значения - логический.

- 4 -

Выбранный для просмотра документ Массивы.doc

библиотека
материалов

Мhello_html_m48bab827.gifассивы

Массивы

hello_html_6e38897a.gif


Массив данных – структурированный способ хранения совокупности данных предопределенного типа, с указанием индекса элемента

Характеристики массива:

  • размер - это количество элементов в массиве;

  • размерность – это количество индексов, которые необходимо указать для однозначного определения элемента в массиве данных;

  • тип хранимых данных;

  • способность изменять размер в процессе выполнения программы.


Виды массивов:

  • По размерности: одномерные и многомерные;

  • По типу хранимых данных: char, integer, real, set, string и др. предопределенные типы;

  • По способности изменять размер: статические и динамические.


Объявление массива:

  1. С использованием служебного слова Var:

Var ИМ: array [ТДИ] of ТД;

Где

  • ИМ – имя массива, задаваемое по правилам задания имен в Паскале.

  • ТДИ - тип данных индексов, которые ставятся во взаимооднознчное соответствие элементам массива, для их индексации, в случае двумерного массива указывается второй тип данных индексов;

  • ТД - тип данных (предопределенный), хранящихся в массиве.


Пример:

Var Mas: array[-1..20] of integer;


Объявлен массив с характеристиками:

  • размер – 22;

  • размерность – 1;

  • тип хранимых данных – целые числа;

  • статический.


Var M: array[byte, byte] of string;


Объявлен массив с характеристиками:

  • размер – 255х255;

  • размерность – 2;

  • тип хранимых данных – строковые данные;

  • статический.


  1. С помощью константы.

Const ИК=ЗК;

ИМ: array [НИ..ИК] of ТД;

Где

  • ИК – имя константы;

  • ЗК – значение именованной константы;

  • ИМ – имя массива, задаваемое по правилам задания имен в Паскале;

  • НИ – нижний индекс, обозначающий индекс первого элемента массива, в случае двумерного массива указывается второй тип данных индексов;

  • ТД - тип данных (предопределенный), хранящихся в массиве.


Пример:

Const n=5;

Var Mas: array[-5..n] of integer;{объявлен одномерный числовой массив под именем Mas, количество элементов 11}


Объявлен массив с характеристиками:

  • размер – 11;

  • размерность – 1;

  • тип хранимых данных – целые числа;

  • статический.


  1. С помощью процедуры задания типа.

Type

ИТ = array [ТДИ] of ТД;

Var

ИМ:ИТ;

Где

  • ИТ – имя типа (определяемого);

  • ТДИ - тип данных индексов, которые ставятся в соответствие элементам массива, для их индексации, в случае двумерного массива указывается второй тип данных индексов;

  • ТД - тип данных (предопределенный), хранящихся в массиве;

  • ИМ – имя массива, задаваемое по правилам задания имен в Паскале.


Пример:


Type Massiv=array[byte,byte] of string[10];

Var Mas: Massiv;


Объявлен массив с характеристиками:

  • размер – 255х255;

  • размерность – 2;

  • тип хранимых данных – строковые данные, не более 10 символов в одном данном;

  • статический.

Доступ к элементам массива:

  • Для использования данных, хранящихся в массиве, в выражениях, в операциях присваивания необходимо организовать доступ к данным;

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

Пример:

A[I] – I-ый элемент массива A;

F[1][3] – элемент 1 строки и 3 столбца двумерного массива F;

Mas[4,f] - элемент 4 строки и f столбца двумерного массива Mas.


Операции с элементами массива:

  • над элементами массива можно выполнять операции, которые определены для типа данных, хранимого в массиве;

  • задание (заполнение) значения элементу массива (операция присваивания);

  • с помощью операции присваивания. В качестве значения элемента массива может выступать:

  • значение выражения A[I]:=5+6*A;

  • значение функции F[1][3]:=random(4);

  • неименованной константы Mas[4,f]:=’школа’;

  • с помощью процедуры ввода информации Read (Mas[4,f]);

  • вывод элемента массива на экран Write(Mas[4][f]).


Элементарные операции над массивом:

  • операции над всеми элементами массива или над какой-либо их частью выполняются с помощью организации цикла;

  • если размерность массива превышает 1, то необходимо пользоваться вложенными циклами.

Пример:

For i:=1 to 5 do

A[i]:=random(128);

For i:=1 to 5 do

Writeln(a[i]);


Некоторые операции с массивом данных:

  1. Перестановка столбцов или строк в массиве местами.

  2. Подсчет суммы, разности произведения и т.п. элементов в массиве.

  3. Удаление элементов, столбцов или строк в массиве.

  4. Сортировка данных в массиве.

  5. Поиск элементов в массиве по заданным условиям.

hello_html_m48bab827.gif

- 3 -

Выбранный для просмотра документ Стандартные ф и п.doc

библиотека
материалов

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

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


hello_html_6e38897a.gif



Процедуры управления

  • Procedure Break

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

  • Procedure Continue

    • Завершает очередной итерационный цикл операторов повторения.

  • Procedure Exit

    • Позволяет немедленно выйти из текущей программы. При вызове тела основной программы завершает её работу.

  • Procedure Halt [(ExitCode: Word)]

    • Останавливает выполнение программы и возвращает управление в операционную систему. Необязательный параметр ExitCode определяет код завершения программы.

  • Procedure Run [(ErrorCode: Byte)]

    • Останавливает выполнения программы и генерирует ошибку периода выполнения программы. Необязательный параметр ErrorCode определяет код ошибки.

  • Procedure Dispose (var P: Pointer [,Destructor])

    • Уничтожает динамическую переменную, связанную с указателем Р. Необязательный параметр Destruction определяет – деструктор для динамического объекта.

  • Procedure FreeMem (var P: Pointer; Size: Word)

    • Уничтожает динамическую переменную, связанную с указателем Р. Необязательный параметр Destruction определяет метод деструктор для динамического объекта.

  • Procedure GetMam(var P: Pointer; Size: Word)

    • Создаёт новую динамическую переменную Р заданного размера Size.

  • Procedure Mark (var P: Pointer)

    • Записывает в указателе Р текущее состояние кучи.

  • Procedure New (var P Pointer [,Constructor]

    • Создает новую динамическую переменную, связанную с указателем Р. Необязательный параметр Constructor определяет метод – конструктор для динамического объекта.

  • Procedure Release (var P: Pointer)

    • Возвращает кучу в состояние, которое было сохранено в указателе Р процедурой Mark.

Функции динамического распределения памяти

  • Function MaxAvail: LongInt

    • Возвращает размер наибольшего непрерывного свободного блока кучи, соответствующий размеру наибольшей динамической переменной, которая может быть помещена в кучу.

  • Function MemAvail: LongInt

    • Возвращает количество имеющихся в куче свободных байт памяти.


Функция преобразования

Процедуры Pack и UnPack, определенные в стандартном Паскале, в Турбо Паскале не реализованы.

  • Function Chr (X: Byte): Char

    • Возвращается символ с заданным порядковым номером X.

  • Function Ord (X): LongInt

    • Возвращает порядковый номер, соответствующий значению X порядкового типа.

  • Function Round (R: Real): LongInt

    • Округляет значение R вещественного типа до ближайшего целого.

  • Function Trunc (R: Real): LongInt

    • Усекает значение вещественного типа до значения типа LongInt путем отбрасывания дробной части.

Арифметические функции

При компиляции в режиме использования сопроцессора или его эмуляции арифметические функции возвращают значение типа EXTENDED, в противном случае – типа Real.

  • Function Abs (R: Real): Real

    • Возвращает абсолютное значение аргумента.

  • Function ArcTan (R: Real): Real

    • Возвращает арктангенс аргумента.

  • Function Сos (R: Real): Real

    • Возвращает косинус аргумента.

  • Function Sin (R: Real):Real

    • Возвращает синус аргумента.

  • Function Exp (R: Real): Real

    • Возвращает экспоненту аргумента.

  • Function Frac (R: Real): Real

    • Возвращает дробную часть аргумента.

  • Function Ln (R: Real): Real

    • Возвращает натуральный логарифм аргумента.

  • Function Pi: Real

    • Возвращает значения числа π = 3.1415926535897932385.

  • Function Sqr (R: Real): Real

    • Возвращает аргумент в квадрате.

  • Function Sqrt (R: Real): Real

    • Возвращает квадратный корень аргумента.


Процедуры порядкового типа

  • Procedure Dec (var x [; DX: LongInt])

    • Увеличивает значения переменной Х на величину DX, а если параметр DX не задан – на 1.

  • Procedure Inc (var x [; DX: LongInt])

    • Увеличивает значения переменной Х на величину DX, а если параметр DX не задан – на 1.


Функции порядкового типа

  • Function Odd (x): Boolean

    • Проверяет, является ли аргумент нечетным числом.

  • Function Pred (x)

    • Возвращает предшествующее значение аргумента. Тип результата совпадает с типом аргумента.

  • Function Succ (x)

    • Возвращает последующее значение аргумента. Тип результата совпадает с типом аргумента.


Строковые процедуры

  • Procedure Delete (var S: String; Index, Count: Integer)

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

  • Procedure Insert (SubS S: String; Index: Integer)

    • Вставляет подстроку Subs в строку S, начиная с позиции Index.

  • Procedure Str (X[: Width [: Decimals]]; var S: String)

    • Преобразует численное значение Х в его строковое представление S.

  • Procedure Val (S: String; var X; var Code: Integer)

    • Преобразует строковое значение S в его численное представление Х. Параметр Code содержит признак ошибки преобразования (0 – нет ошибки).


Строковые функции

  • Function Concat (S1 [,S2,…SN]): String

    • Выполняет конкатенацию последовательности строк.

  • Function Copy (S: String; Index, Count: Integer): String

    • Возвращает подстроку из строки S, начиная с позиции Index и длиной Count символов.

  • Function Length (S: String): Byte

    • Возвращает текущую длину строки S.

  • Function Pos (SubS, S: String): Byte

    • Возвращает позицию, начиная с которой в строке S располагается подстрока Subs (0 – S не содержит SubS).


Функции для работ с указателями и адресами

  • Function addr(x):pointer

    • Возвращает адрес заданного объекта X.

  • Function assigned:(var p): Boolean

    • Проверяет, хранит ли указатель P значение, отличное от Nil, и возвращает True в этом случае.

  • Function Cseg: Word

    • Возвращает текущие значение CS.

  • Function Dseg: Word

    • Возвращает текущие значение DS.

  • Function Ofs(x): Word

    • Возвращает смещение заданного объекта.

  • Function Ptr(Seg. Ofs: Word): Pointer

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

  • Function Seg(x): Word

    • Возвращает сегмент для заданного объекта.

  • Function SPtr:Word

    • Возвращает текущее значение регистра SP.

  • Function Sseg:Word

    • Возвращает текущее значение регистра SS.


Процедуры разного назначения

  • Procedure Exclude (var S: set of T; I: T)

    • Исключает элемент Т из множества S.

  • Procedure FillChar (var X; Count: Word; Value)

    • Заполняет заданное количество Count последовательных байт переменной X указанным значением Value (выражение любого порядкового типа).

  • Procedure Include (var S: set of T; I: T)

    • Включает элемент Т во множество S.

  • Procedure Move (var X, Y; Count: Word)

    • Копирует заданное количество последовательных байт из источника Х в переменную Y.

  • Procedure Randomize

    • Инициализирует случайным значением (текущим системным временем) встроенный генератор псевдослучайных чисел.


Функции разного назначения

  • Function Hi (X: Word): Byte

    • Возвращает старший байт аргумента Х.

  • Function High (X)

    • Возвращает максимальное значение порядкового типа.

  • Function Lo (X: Word): Byte

    • Возвращает младший байт аргумента Х.

  • Function Low (X)

    • Возвращает минимальное значение порядкового типа.

  • Function ParamCount: Word

    • Возвращает число параметров, переданных программе в командной строке (строке вызова).

  • Function ParamStr (N: Byte): String

    • Возвращает N-ый параметр командной строки.

  • Function Random [(Range: Word)]

    • Возвращает псевдослучайное число. Если параметр Range опущен, функция возвращает вещественное число в диапазоне от 0 до 1, если указан - целое число в диапазоне от 0 до Range-1.

  • Function SizeOf (X): Word

    • Возвращает число байт, занимаемых аргументом.

  • Function Swap (X)

    • Производит перестановку старших и младших байт двухбайтного аргумента Х. Тип функции соответствует типу аргумента.

  • Function UpCase (C: char): Char

    • Преобразует латинскую букву в заглавную.


Процедуры ввода/вывода

  • Procedure Assign (var F; Name: String)

    • Связывает внешний файл Name с файловой переменной F.

  • Procedure ChDir (S: String)

    • Устанавливает пустой каталог.

  • Procedure Close (var F)

    • Закрывает открытый файл.

  • Procedure Erase (var F)

    • Удаляет внешний файл.

  • Procedure GetDir (D: Byte; var S: String)

    • Возвращает каталог по умолчанию S на данном диске D

  • Procedure MkDir (S: String)

    • Создает подкаталог S

  • Procedure Rename (var F)

    • Переименовывает внешний файл

  • Procedure Reset (var F)

    • Открывает существующий файл для чтения.

  • Procedure Rewrite (var F)

    • Создает и открывает новый файл.

  • Procedure RmDir (S: String)

    • Удаляет пустой подкаталог

  • Procedure Seek (var F; N: Length)

    • Устанавливает текущую позицию файла на указанный элемент (не используются с текстовыми файлами)

  • Procedure Truncate (var F)

    • Усекает размер файла до текущей позиции в файле (не используются с текстовыми файлами)


Функции ввода/вывода

  • Function EOF (var F): Boolean

    • Возвращает для файла F признак конца файла.

  • Function FilePos (var F): LongInt

    • Возвращает текущую позицию в файле (не используется с текстовыми файлами).

  • Function FileSize (var F): LongInt

    • Возвращает текущий размер файла (не используется с текстовыми файлами).

  • Function IOResult: Integer

    • Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода.


Процедуры для текстовых файлов

  • Procedure Append (var F: Text)

    • Открывает существующий файл для расширения.

  • Procedure Flush (var F: Text)

    • Выталкивает буфер файла вывода.

  • Procedure Read ([var F: Text;] V1 [, v2,…, VN])

    • Считывает одно или более значений из текстового файла в одну или более переменных.

  • Procedure Readln

    • Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла.

  • Procedure SetTextBuf (var F: Text; var Buf [; Size: Word])

    • Назначает буфер ввода/вывода для текстового файла. Параметр Size определяет длину буфера в байтах (если Size опущен, длина буфера равна 128 байтам).

  • Procedure Write ([var F: Text;] V1 [, v2,…, VN])

    • Записывает в текстовый файл одно или более значений.

  • Procedure Writeln

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


Функции для текстовых файлов

  • Function Eoln (var F: Text): Boolean

    • Возвращает признак конца строки.

  • Function SeekEof [ (var F: Text) ]: Boolean

    • Возвращает признак конца файла. Предварительно пропускает все пробелы, символы табуляции и признаки конца строк.

  • Function SeekEoln [ (var F: Text) ] : Boolean

    • Возвращает признак конца файла. В отличии от Eoln предварительно пропускает все пробелы и символы табуляции.


Процедуры для нетипизированных файлов.

  • Procedure BlockRead (var F: File; var Buf; Count: Word [; var Result: Word] )

    • Считывает в переменную Buf Count записей из файла F. Необязательный параметр Result содержит истинное количество считанных записей.

  • Procedure BlockWrite (var F: File; var Buf; Count: Word [; var Result: Word])

    • Передаёт Count записей из переменной Buf в файл F. Необязательный параметр Result содержит истинное количество переданных записей.

hello_html_m48bab827.gif

- 6 -

Молодежный образовательный центр г. Орска

Выбранный для просмотра документ Структура программы.doc

библиотека
материалов

Сhello_html_m48bab827.gifтруктура программной единицы

Структура программной единицы


hello_html_m7590005a.gif

Программная единица – программа и подпрограмма.


Структура программной единицы:


<объявление программной единицы>;

{раздел описаний}

Begin

{раздел исполняемых операторов}

End {символ окончания программной единицы}


  • Объявление программной единицы:

  • заголовок программы, где имя программы задается по правилу задания имен;

Program <имя программы>;

  • заголовок подпрограммы (процедуры или функции);

Function И_Ф (С_П): Т_З;

И_Ф – имя функции

  • задается в соответствии с обычными правилами Паскаля

  • является носителем результата

С_П – список параметров

  • содержит перечисление переменных и их типов;

  • список параметров может отсутствовать.

Т_З – тип значения функции.


Procedure И_П (С_П);

И_П – имя процедуры

  • задается в соответствии с обычными правилами Паскаля

  • не является носителем результата, поэтому тип результата не указывается;

С_П – список параметров

  • содержит перечисление переменных

  • содержит перечисление типов переменных

  • Список параметров может отсутствовать.

  • Раздел описаний;

    • Описание подключаемых модулей;

Uses <имя подключаемого модуля>;

    • Описание именованных не типизированных констант;

Const <имя константы>=<список значений полей константы>;

    • Описание именованных не типизированных констант

Const <имя константы> : <предопределенный тип константы> = < список значений полей константы>;

    • Описание переменных, массивов, записей, множеств;

Var <список имен объектов>: <Предопределенный тип объектов>;

    • Описание меток;

Label <список меток>;

    • Описание типов;

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

  • раздел исполняемых операторов – операторы программной единицы;

  • символ окончания программной единицы:

    • символ «.» используется для программы;

    • символ «;» используется для подпрограммы.


Примечание:

  • разделы описания могут следовать друг за другом в любом порядке и встречаться в разделе писания произвольное количество раз;

  • любой раздел описания или исполняемых операторов может быть пустыми;

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

  • подпрограммы должны быть объявлены в разделе описания программы.

  • Служебные слова BEGIN и END называют операторными скобками.


Пример:

Найти периметр прямоугольника по формуле S=2(a+b), где а и в – стороны прямоугольника.


Program perimetr;

Var

P,a,b:Integer;{Периметр и стороны – переменные целочисленного типа}

Begin

a:=25; {сторона а=25}

b:=38; {сторона в=38}

P:=2*(a+b); {вычисление периметра Р=2*(25+38)=126}

Write(Р); {Вывод на экран значения Р}

End.

hello_html_m48bab827.gif

- 2 -

Выбранный для просмотра документ Указатели.doc

библиотека
материалов

Ссылочный тип данных

Ссылочный тип данных

hello_html_6e38897a.gif


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

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

Размер сегмента данных определяется архитектурой микропроцессора и составляет, 64 кБ – это вызывает сложности при обработке больших массивов данных.

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

Сегмент – это участок памяти, имеющий длину 65536 байт (64 кБ) и начинающийся с физического адреса, кратного 16 (0, 16, 32, 48, …)

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

Параграф – фрагмент памяти в 16 байт.

Динамическая память – оперативная память компьютера, предоставляемая программе при ее работе, за вычетом сегмента данных, стека (16кБ) и тела программы.

Размер динамической памяти – определяется всей доступной памятью компьютера.

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

{$M Р1, Р2, Р3}

где Р1 – размер стека в байтах,

Р2 – минимальный объем динамической памяти в байтах,

Р3 – максимальный объем динамической памяти.

Эта директива должна быть указана в теле программы после Begin

Пример: {$M 1024, 1000, 2000}

Динамическая память в основном используется:

  1. Обработка массивов данных большой размерности.

  2. Разработка систем автоматизированного проектирования.

  3. Временное запоминание данных при работе с графическими и звуковыми средствами.

Примечание:

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

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

  3. Ни одна переменная в Pascal не может превысить объем 65520 байт (1 сегмент). Общий объем распределенных по динамической памяти переменных может значительно превышать объем сегмента.

hello_html_m227ca186.png


Адреса и указатели


Стандартная память компьютера 1 МБ (адресное пространство).

Адрес задается с помощью шестнадцати разрядных слов:

  1. Сегментом.

  2. Смещением.

Для адресации в адресном пространстве необходимо 20 двоичных разрядов, которые получаются из шестнадцати разрядных слов (сегмента и смещения) следующим образом:

  1. Содержание сегмента смещается влево на 4 разряда.

  2. Освободившиеся правые разряды заполняются нулями.

  3. Результат складывается с содержимым смещения.


Сегмент

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


Смещение


15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Адрес

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


Примечание:

  • Сегмент адресует память с точностью до параграфа,

  • Смещение адресует память с точностью до байта,

  • Каждому сегменту соответствует непрерывная и отдельно адресуемая область памяти.

  • Сегменты могут следовать в памяти:

    1. Один за другим без промежутков,

    2. Один за другим с некоторым интервалом,

    3. Прерывать друг друга.

Указатель – переменная целого типа, которая в качестве своего значения содержит адрес байта памяти.

Примечание:

  • Указатель можно рассматривать как совокупность двух слов (данных типа Word), трактуемых как сегмент и смещение.

  • С помощью указателя в динамической памяти можно разместить любой тип данных:

    • Byte, Char, Shorting, Boolean – занимает 1 байт, остальные несколько смежных.

  • Указатель адресует первый байт данных.

Указатели бывают следующих видов:

    • Типизированные:

Var имя_указателя:^тип_указателя;

  • Более предпочтительный способ объявления указателя в виде типизированной константы, с одновременным присвоением ему значения Nil:

Const Имя_указателя : ^ предопределенный_тип = Nil;

Пример: Const P : ^ Real = Nil;

  • Если мы объявляем указатель в разделе объявления переменных, то его начальное значение может быть произвольным, поэтому необходимо использовать процедуру New() или как указано в предыдущем пункте


Type

PointerT = ^Precord;

Precord = record;

Name : String[15];

Job : String[10];

Next : PointerT;

End;

Пояснения к фрагменту программы:

  • при объявлении типа PointerT есть ссылка на Precord, который в программе предварительно не объявлен,

  • указатель может ссылаться на еще не объявленный тип данных. Это необходимо для организации новых структур – списков.


    • Не типизированные:

Var имя_указателя:Pointer;

  • С их помощью размещаются данные, структура и тип которых меняются в ходе работы программы.

  • Ни типизированным указателям может быть присвоено значение любого типизированного указателя или наоборот,

  • С не типизированными указателями допустимы взаимные присваивания,

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


Операции с указателями:

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

Пример:

Var

P1, P2 : ^ Integer;

P3 : ^ Real;

P4 : Pointer;

Begin

P1: = P2; - допустимо

P1: = P3; - недопустимо, т.к. Р1 и Р3 – разных типов)

P4: = P3; - допустимо, т.к. Р4 – может быть любого типа.

P1: = P4; - допустимо, т.к. Р4 – может быть любого типа.

End.


  1. Сравнение указателей.

Сравнивать указатели можно только с Nil

Пример:

If P=Nil Then New(P);


Выделение и освобождение динамической памяти

Процедура New (P)

  • Выделение памяти под динамически размещаемую типизированную переменную.

  • После использования процедуры New() типизированный указатель приобретает некоторое значение – указатель на конкретный физический байт памяти.

  • По этому адресу можно разместить любое значение соответствующего типа.

Пример:


Var

P1, P2 : ^ Integer;

P3 : ^ Real;

Begin

New(P2);

New(P3);

P2^ : = 2;

P3^ : = 2*Pi;

……………

End.

  • Указатель Р2 приобретает значение HeapPtr, а сам HeapPtr увеличивает свое значение на 2 (длина внутреннего представления типа integer 2Б),

  • New(P3) вызовет повторное смещение указателя на 6 байт (длина внутреннего представления типа Real 6Б),

  • P2^ : = 2; - в область памяти по адресу P2 поместим значение 2,

  • P3^ : = 2*Pi; - в область памяти Р3 поместим значение 6.28



Примечание:

  • значение любого указателя – адрес,

  • для того чтобы воспользоваться значением, расположенным по этому адресу, необходимо воспользоваться обозначением «^» - каре, которое ставится после имени указателя,

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

  • Динамическая переменная состоит из двух частей:

    • Статической переменной. Это адрес – имя переменной.

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

  • в теле программы New() выделяет в динамической памяти необходимое количество смежных ячеек памяти, и адрес первой ячейки этого блока записывает в ячейках статической памяти, присваивая им имя динамической переменной.

  • Если указатель ссылается на тип данных, для которого требуется памяти больше, чем доступно для распределения в динамической памяти, то в этом случае происходит ошибка выполнения программы.

  • Процедура New() может быть использована в качестве функции, возвращающей указатель конкретного типа данных. Например процедура New(P1Int); и оператор присваивания P1Int:=New(P1); эквивалентны. Р1 имеет тип данных ^Integer, P1Int – тип данных Р1,

  • Использование указателей, которым не присвоено значение процедурой New() или другим способом, не контролируется системой и может привести к непредсказуемым значениям.


Процедура Dispose(P)


Dispose(P) – уничтожает динамическую переменную, на которую ссылается указатель типа Pointer.

Примечание:

  • Dispose(P) не меняет значение указателя Р, а только возвращает в динамическую память, ранее связанную с этим указателем память.

  • После использования процедуры Dispose(P) освободившийся указатель надо обнулить:

Dispose(P);

P:=Nil;

  • Повторное применение процедуры к свободному указателю приведет к возникновению ошибки.

  • В освободившимся блоке ячеек памяти могут быть размещены только объекты тех переменных, размеры которых либо равны числу освободившихся ячеек либо меньше этого числа.

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

  • Т.е. динамическая память – пуста, но из-за ее фрагментации в ней уже невозможно поместить новую переменную.


Процедура Mark(P)


Mark(P) – запоминает текущее значение указателя HeapPtr в переменной - указателе Р, т.е. адрес первой ячейки неиспользуемой части динамической памяти.


Процедура Release(P)


Release(P) – передвигает нижнюю границу свободного пространства динамической памяти HeapPtr с адреса, который она занимала после порождения последней динамической переменной в позицию (адрес), которая ранее была зафиксирована в указателе Р.


Пример:


Var P, P1, P2, P3, P4: ^Integer;

Begin

New(P1);

New(P2);

Mark(P);

New(P3);

New(P4);

…………

Release(P);

End.

Процедура Mark(P); в указатель P помещает значение HeapPtr, но память под эту переменную не резервируется.

Процедура Release(P); освобождает динамическую память от помеченного места до конца динамической памяти.


hello_html_m7289ae5e.png

Примечание:

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

- Если перед порождением первой динамической переменной в типизированной константе-указателе HeapOrg записать исходное состояние динамической памяти Mark(HeapOrg), то Release(HeapOrg) полностью высвобождает динамическую память от всех динамических переменных, которые до такого вызова порождались.

Пример:


Var p:Pointer;

P1, P2, P3, P4:^Real

Begin

...............

New(Pl);

New(P2);

Mark(P);

New(P3);

New(P4);

Mark(HeapPtr);

...............

Release(P);

Mark(HeapPtr);

...............

end.

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

Переменные РЗ и Р4, расположенные после Р2 будут уничтожены и адрес записанный в Р будет адресом первой ячейки неиспользованной динамической памяти:

новой нижней границы свободной области динамической памяти.


Процедуры GetMem и FreeMem


GetMem (P,Size) - выделяет в динамической памяти непрерывный блок ячеек с требуемым размером в Size байт и адрес первой ячейки этого блока присваивает указателю Р.

FreeMem (P,Size) - освобождает в куче непрерывный блок ячеек с размером в Size байт, начиная с адреса, записанного в указателе Р.

Примечание:

- процедура GetMem аналогична процедуре New, а процедура FreeMem - процедуре Dispose.

- Если в процедурах New и Dispose размер блока под объект динамической переменной определяется автоматически на основе типа выбранной динамической переменной, то в процедурах GetMem и FreeMem размер такого блока должен контролироваться программистом.

- При работе этой пары процедур возможна фрагментация динамической памяти.

- Освобождать стоит ровно столько памяти, сколько было зарезервировано и именно с того адреса» с которого она была зарезервирована.

- Память под динамические переменные выделяется блоками по 8 байт.

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


Function Check(Var P:Pointer; Size:Word):Boolean;

Begin

Check:=False;

If Size>MaxAvail Then Exit;

Check:=True;

GetMem(P,Size);

End;


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

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

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


hello_html_m48bab827.gif

- 7 -

Выбранный для просмотра документ Циклы.doc

библиотека
материалов


Оператор цикла с предусловием.

Форма записи:

while <условие> do <оператор>;

В качестве оператора может быть любой простой или составной оператор. Оператор выполняется только в том случае и до тех пор, пока условие истинно, причем условие проверяется каждый раз после выполнения оператора. Если с самого начала условие ложно, то есть имеет значение false, оператор цикла не выполнится ни разу.

Примеры:

  • Вычисление факториала:

while x <=N do

begin

Fact := Fact*x;

x := x + 1

end;

  • Вычислить у=х2 при х=2, 4, 6, 8, 10:

x:=2;

while x<=10 do

begin

y:=sqr(x);

writeln(‘x=’,x:3, ‘y=’,y:5);

x:=x+2

end;


Если в операторе цикла условие всегда истинно, то такой цикл называется бесконечным:

t:=true;

while t do x:=x+5;


Оператор цикла с постусловием.

Форма записи:

repeat

<оператор1>;

<оператор2>;

until <условие>;

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

Примеры:

  • Вычислить у=х2 при х=2, 4, 6, 8, 10.

x:=2;

repeat

y:=sqr(x);

writeln(x:3,y:5);

x:=x+2

until x>10;

  • Вводить символы с клавиатуры до тех пор, пока не будет введен символ “!”

repeat

writeln(‘введите символ’);

readln(c)

until c=’!’;



Выбранный для просмотра документ записи.doc

библиотека
материалов

Зhello_html_m48bab827.gifаписи

Записи


hello_html_6e38897a.gif

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


Описание записей:

  • описание записей через тип данных:

Type

<имя записи>=record

<список имен полей>:<предопределенный тип полей>;

<список имен полей>:<предопределенный тип полей>;

…….;

end;

  • непосредственное описание записей:

Var

<имя записи> : record

<список имен полей>:<предопределенный тип полей>;

<список имен полей>:<предопределенный тип полей>;

…….<перед end точка с запятой не ставится>

end;

Где

  • список имен полей – один или более идентификаторов полей записи;


Пример:

Type

Round=record

x,y:Real;

R:Real

End;

Var

Circle1, Circle2:Round;

Massive: Array[1..5] Of Round;








Type

Birthday=record

Day, Month: byte;

Year: word

End;

Var

C: record

Name: string;

BD: BirthDay

End;

Begin

C.Bd.Year:=1980;

end.


Характеристики записи:

  1. Количество полей.

  2. Тип полей.


Доступ к полям записи:

  • Указывается имя записи.

  • Ставится точка.

  • Указывается имя поля записи.

  • И т.д., до тех пор пока не закончится вложенность полей.


Пример:

Circle1.x – запись Circle1, поле x.

Krugi[i].x – запись Krugi[i] (I- элемент массива Krugi), поле x

C.Bd.Year – запись C, поле Bd.Year


Операции с полями записей:

  1. Присваивание.

    1. В случае совпадения количества, соответствия типов двух записей возможно присваивания записей. Т.е. пусть у нас имеется эквивалентные по характеристикам 2 записи A и B, то допустимо следующее:

A := B;

Пример:

Circle1:=Circle2;

Circle2:=Krugi[1];

Krugi[5]:=Krugi[3];


    1. Присваивание значений полям записи.

Пример:

Circle1.x:=5;

Circle1.y:=8;

Circle1.R:=2;

Read(Krugi[i].R);

Writeln(Krugi[i].x);

C.Bd.Year:=1980;


Оператор With

Для упрощения доступа к полям записи используется оператор With.

Формат оператора: With <имя записи> Do <группа операторов>

Где -

Имя записи – идентификатор записи, к полям которой необходимо упростить доступ.

Группа операторов – оператор или их группа, которые необходимо выполнить.

Пример:

  • такую часть программной единицы

Circle1.x:=5;

Circle1.y:=8;

Circle1.R:=2;

Можно заменить на .

With Circle Do

Begin

X:=5;y:=8;R:=2;

End;


  • перечислим эквивалентные структуры:

1) c.bd.month:=9;


2) with c.bd do

month:=9;


3) with c do

with bd do

month:=9;


Записи с вариантными полями


  • описание записей через тип данных:

Type

<имя записи>=record

<список имен полей>:<предопределенный тип полей>;

<список имен полей>:<предопределенный тип полей>;

…….

Case <выражение> of

<Значение1>: (<список имен полей>:<предопределенный тип полей>);

<Значение2>: (<список имен полей>:<предопределенный тип полей>);

…….;

end;


Примечание:

  • вариантная часть может состоять из произвольного числа частей;

  • каждый вариант определяется значением (неименованной константой) и заключенными в круглые скобки списком полей и их типом;

  • в записи возможна одна вариативная часть;

  • вариативная часть должна располагаться после фиксированных полей;

  • END ставится только кType, и не ставится к Caseof;

  • выражение должно давать значение предопределенного порядкового типа;

  • выражение не влияет на количество вариантов;

  • имена полей должны быть уникальны в пределах той записи, где они объявлены. Если записи содержат поля – записи, то имена полей могут повторяться на любом уровне вложенности.


Пример:

Var

Forma = record

Name: string;

Case byte of

0: (BirthPlace: string[40]);

1: (Country: string[20];

EntryPort: string[20];

EntryDate: 1..31;

ExiDate: 1..31)

End;

hello_html_m48bab827.gif

- 2 -

Самые низкие цены на курсы переподготовки

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

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

Обучение проходит заочно прямо на сайте проекта "Инфоурок", но в дипломе форма обучения не указывается.

Начало обучения ближайшей группы: 22 ноября. Оплата возможна в беспроцентную рассрочку (10% в начале обучения и 90% в конце обучения)!

Подайте заявку на интересующий Вас курс сейчас: https://infourok.ru


Общая информация

Номер материала: ДВ-260057
Курсы профессиональной переподготовки
124 курса

Выдаем дипломы установленного образца

Заочное обучение - на сайте «Инфоурок»
(в дипломе форма обучения не указывается)

Начало обучения: 22 ноября
(набор групп каждую неделю)

Лицензия на образовательную деятельность
(№5201 выдана ООО «Инфоурок» 20.05.2016)


Скидка 50%

от 13 800  6 900 руб. / 300 часов

от 17 800  8 900 руб. / 600 часов

Выберите квалификацию, которая должна быть указана в Вашем дипломе:
... и ещё 87 других квалификаций, которые Вы можете получить

Похожие материалы

Получите наградные документы сразу с 38 конкурсов за один орг.взнос: Подробнее ->>