Программирование на языке Паскаль

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

Рубрика Программирование, компьютеры и кибернетика
Вид курс лекций
Язык русский
Дата добавления 18.12.2016
Размер файла 169,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Министерство образования Российской Федерации

ГОУ ВПО "Уральский государственный технический университет - УПИ"

Конспект лекций

Программирование на языке Паскаль

А.С. Партин

Научный редактор - проф., д-р техн. наук Р.А. Вайсбурд

УДК 004.438 (075.8)

ББК 32.973.26 - 018.1 я7

П18

Рецензенты:

кафедра информатики Уральской

государственной горно-геологической академии;

зав. лабораторией ИМ УрО РАН проф., д-р техн. наук А.Г. Залазинский

Автор - А.С. Партин

П18 Программирование на языке Паскаль: Конспект лекций / А.С. Партин. Екатеринбург: ГОУ ВПО УГТУ-УПИ, 2003. 77 с.

ISBN 5-321-00267-3

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

Библиогр.: 9 назв.

УДК 004.438 (075.8)

ББК 32.973.26 - 018.1 я7

ISBN 5-321-00267-3 © ГОУ ВПО «Уральский государственный

технический университет - УПИ», 2003

Содержание

  • Лекция 1. Введение. Структура программы. Типы данных
    • 1.1 Структура программы в зыке Паскаль
      • 1.2 Комментарии
      • 1.3 Раздел описания переменных
      • 1.4 Имена идентификаторов в языке Паскаль
      • 1.5 Типы данных в языке Паскаль
      • 1.6 Целые типы
      • 1.7 Вещественные типы
      • 1.8 Раздел описания констант
      • 1.9 Выражения-константы
      • 1.10 Исполнительная часть
    • Лекция 2. Простые и структурированные операторы. Выражения
      • 2.1 Операторы языка Паскаль
      • 2.2 Оператор присваивания
      • 2.3 Оператор вывода
      • 2.4 Оператор ввода
      • 2.5 Составной оператор
      • 2.6 Условный оператор
      • 2.7 Выражения
      • 2.8 Арифметические операции
      • 2.9 Логические выражения
      • 2.10 Логические операции
      • 2.11 Приоритеты операций
      • 2.12 Стандартные математические и арифметические функции
    • Лекция 3. Структурированные операторы
      • 3.1 Оператор выбора CASE
      • 3.2 Оператор цикла FOR
      • 3.3 Оператор цикла WHILE
      • 3.4 Оператор цикла REPEAT
    • Лекция 4. Пользовательские порядковые и составные типы. Процедуры и функции
    • 4.1 Раздел описания типов
      • 4.2 Интервальный тип
      • 4.3 Перечислимый тип
      • 4.4 Тип массив
      • 4.5 Строковый тип
      • 4.6 Процедуры и функции для работы со строками
      • 4.7 Типизированные константы
      • 4.8 Процедуры и функции
      • 4.9 Обращение к процедурам и функциям
    • Лекция 5. Процедуры и функции. Процедурные типы. Тип указатель
      • 5.1 Модификаторы VAR и CONST в описании формальных параметров
      • 5.2 Локальность и область действия
      • 5.3 Процедурные типы
      • 5.4 Тип указатель
      • 5.5 Нулевой указатель
    • Лекция 6. Работа с текстовыми файлами. Тип запись. Алгоритмы сортировки
      • 6.1 Файловые типы
      • 6.2 Процедуры и функции для работы с текстовыми файлами
      • 6.3 Стандартные текстовые файлы
      • 6.4 Тип запись
      • 6.5 Обращение к элементам записи
    • Лекция 7. Алгоритмы сортировки
      • 7.1 Алгоритмы сортировки
      • 7.2 Алгоритмы сортировки сравнениями
    • Лекция 8. Объектно-ориентированное программирование. Структура программного модуля
      • 8.1 Тип данных «объект»
      • 8.2 Тип данных «класс»
      • 8.3 Классификация стилей программирования
      • 8.4 Структура программного модуля
    • Лекция 9. Основы визуального программирования
      • 9.1 Формы
      • 9.2 Элемент управления «Поле ввода»
      • 9.3 Элемент управления «Кнопка»
      • 9.4 Элемент «Метка»
      • 9.5 Элемент «Группа переключателей»
    • Лекция 10. Основы визуального программирования
      • 10.1 Элемент «Изображение»
      • 10.2 Виды изображений
      • 10.3 Класс TPicture
      • 10.4 Класс TBitmap
      • 10.5 Оператор WITH
      • 10.6 Класс TCanvas
  • Библиографический список

Лекция 1 . Введение. Структура программы. Типы данных

Паскаль - алгоритмический структурированный язык высокого уровня.

Все языки делятся на языки низкого уровня и языки высокого уровня. К языкам низкого уровня относятся машинные языки или ассемблеры. Языки высокого уровня: Бейсик, Паскаль, Си, Фортран, Алгол, ПЛ/1 и т.д.

1.1 Структура программы в зыке Паскаль

Общий синтаксис структуры программы

[<Заголовок>]

[USES <Список библиотек>;]

<Описательная часть>

BEGIN

<Исполняемая часть>

END.

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

Вид заголовка

PROGRAM <Имя>[(<Параметры>)];

Пример

PROGRAM Summa;

PROGRAM Calc(Input,Output);

Параметры программы использовались только в ранних версиях Паскаля и в Delphi игнорируются.

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

1.2 Комментарии

В любое место в тексте программы могут быть вставлены комментарии. Комментарии должны быть заключены в фигурные скобки {…} или (*…*).

В Delphi также поддерживаются однострочные комментарии в стиле языка C, которые начинаются двумя слешами и заканчиваются в конце строки.

Пример

PROGRAM {Комментарий} Summa; // Программа
// вычисления суммы

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

Синтаксис

VAR

<Список имен 1>: <Тип 1>;

<Список имен 2>: <Тип 2>;

• • •

<Список имен N>: <Тип N>;

<Список имен 1>, <Список имен 2>, …, <Список имен N> - списки имен переменных через запятую, <Тип 1>, <Тип 2>, …, <Тип N> - типы переменных.

Пример

VAR

Count:Integer;

A,B:Real;

1.4 Имена идентификаторов в языке Паскаль

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

Пример

Count, x1, y2, Count_of_items

Имена идентификаторов могут иметь любую длину, но в разных версиях языка Паскаль значащими может являться только ограниченное количество первых символов, например, в DOS-версии значащими являются только первые 63 символа. Паскаль не чувствителен к регистру символов в именах, т.е., к примеру, имя Count можно записать как count или COUNT. В качестве имен нельзя использовать зарезервированные слова языка Паскаль, как, например, PROGRAM, BEGIN, END, VAR и т.д. В зависимости от версии Паскаля набор этих слов может изменяться. Например, в Delphi их около 65.

1.5 Типы данных в языке Паскаль

Общая классификация типов данных языка Паскаль представлена на следующем рисунке.

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

· порядковый номер элемента (функция Ord);

· значение предыдущего элемента (функция Pred);

· значение следующего элемента (функция Succ).

Для порядковых типов определены также функции Low и High, которые возвращают минимальное и максимальное возможные значения.

Символьный тип: Char. Представляет отдельные символы, задаваемые в одинарных кавычках, например 'a', 'B', '9', '+' и т.д. Для символьного типа определена функция UpCase(C), которая переводит символ C (только один символ, для строковых значений функция не определена) в верхний регистр.

Логический тип: Boolean. Дополнительно существуют еще три логических типа, выполняющие ту же роль, но имеющие фиксированный размер: ByteBool - 1 байт, WordBool - 2 байта и LongBool - 4 байта). Может иметь два значения: True (истина) и False (ложь).

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

Ord('A')=65, Pred('D')='C', Succ(False)=True, High(Word)=65535, UpCase('n')='N'

1.6 Целые типы

Название

Знаковый

Размер

Возможные значения

Integer

да

DOS: 2 байта (16 битов)

Delphi: 4 байта (32 бита)

-32768..32767

-2147483648..2147483647

-215..215-1

-231..231-1

Cardinal

нет

Delphi: 4 байта (32 бита)

0..4294967295

0..232

Shortint

да

1 байт (8 битов)

-128..127

-27..27-1

Smallint

да

2 байта (16 битов)

-32768..32767

-215..215-1

Longint

да

4 байта (32 бита)

-2147483648..2147483647

-231..231-1

Int64

да

Delphi: 8 байтов (64 бита)

? -9.2•1018..9.2•1018

263=9223372036854775808

-263..263-1

Byte

нет

1 байт (8 битов)

0..255

0..28-1

Word

нет

2 байта (16 битов)

0..65535

0..216-1

Longword

нет

Delphi: 4 байта (32 бита)

0..4294967295

0..232-1

Представления типа Integer (а также и некоторых других типов, которые будут рассмотрены в дальнейшем) зависит от платформы, на которой производится компиляция программы. Например, в 16-битной системе MS_DOS этот тип занимает 16 битов памяти, а в среде Delphi, которая работает в 32-битной системе Windows, тип Integer имеет размер 32 бита. В зависимости от этого он позволяет представлять различные диапазоны целых чисел.

Некоторые типы (как Cardinal, Int64 и Longword) определены только для 32-битных программ в среде Delphi.

1.7 Вещественные типы

Название

Размер

Возможные значения

Количество значащих цифр

Real

DOS: 6 байтов (48 битов)

Delphi: как Double

? 2.9•10-39..1.7•1038

11-12

Single

Delphi: 4 байта (32 бита)

? 1.5•10-45..3.4•1038

7-8

Double

1 байт (8 битов)

? 5.0•10-324..1.7•10308

15-16

ExtENDed

2 байта (16 битов)

? 3.6•10-4951..1.1•104932

19-20

Comp

4 байта (32 бита)

-263..263-1

19-20

Currency

Delphi: 8 байтов (64 бита)

? -9.2•1014..9.2•1014

19-20

Тип Real применялся в ранних версиях языка Паскаль, в Delphi он работает как Double. Для обеспечения обратной совместимости в Delphi имеется тип Real48, который работает как старый Real.

Тип Comp представляет целые числа от -263 до 263-1, но не является порядковым, а реализован как вещественный тип.

Тип Currency - это вещественные числа с фиксированной запятой с точностью 4 десятичных разряда, фактически представляет числа от 263/104 до (263-1)/104, т.е. хранится как тип Comp, а при выполнении с ним операций автоматически делится на 104.

1.8 Раздел описания констант

Синтаксис

CONST

<Имя 1> = <Значение 1>;

<Имя 2> = <Значение 2>;

• • •

<Имя N> = <Значение N>;

<Имя 1>, <Имя 2>, …, <Имя N> - имена описываемых констант, <Значение 1>, <Значение 2>, …, <Значение N> - константы или выражения-константы.

Пример

CONST

E = 2.7182818284590452354;

Str = 'Строковая константа';

HalfLen = (Length(Str)+1) div 2;

1.9 Выражения-константы

Выражения-константы могут являться либо константами, либо выражениями, в которых содержатся только константы и не могут употребляться переменные и функции, кроме следующих стандартных функций языка Паскаль: Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Ptr, Round,

SizeOf, Succ, Swap, Trunc.

1.10 Исполнительная часть

Исполнительная часть программы на языке Паскаль начинается ключевым словом BEGIN, заканчивается словом END (с точкой) и содержит последовательность операторов, разделенных между собой точкой с запятой.

Лекция 2. Простые и структурированные операторы. Выражения

2.1 Операторы языка Паскаль

Все операторы языка Паскаль делятся на простые и структурированные.

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

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

( Синтаксис

<Имя переменной> := <Выражение>

Тип значения выражения должен либо совпадать с типом переменной, либо являться преобразуемым к типу переменной. Например, целочисленное значение можно преобразовать к вещественному типу, но не наоборот. Символьное значение можно преобразовать к строковому, но нельзя к целому или вещественному и т.д.

2.3 Оператор вывода

Синтаксис

Write[Ln](<Список выражений>);

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

Синтаксис формата вывода

<Выражение>[:<Минимальная длина>[:<Точность>]]

<Минимальная длина> и <Точность> - целые числа. Если длина значения выражения при выводе на экран будет меньше, чем указанная минимальная длина, то оно будет дополнено слева соответствующим количеством пробелов. Точность задает количество десятичных знаков, которые будут напечатаны при выводе вещественных чисел. Если точность не указана, вещественные числа выводятся в экспоненциальной форме.

Пример

WriteLn(Pi,Sqrt(2)/2);

WriteLn('Sin(Pi/4)=',Sin(Pi/4):1:5);

Результат выполнения

3.14159265358979E+0000 7.07106781186548E-0001

Sin(Pi/4)=0.70711

2.4 Оператор ввода

Синтаксис

ReadLn(<Список имен переменных>);

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

2.5 Составной оператор

Синтаксис

BEGIN

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

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

• • •

<Оператор N-1>;

<Оператор N>

END

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

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

2.6 Условный оператор

Синтаксис

IF <Логическое выражение> THEN <Оператор 1>[ELSE <Оператор 2>]

Если значение логического выражения является истинным, происходит выполнение оператора 1. Если же значение логического выражения ложно и присутствует ключевое слово ELSE, выполняется оператор 2. Если значение логического выражения ложно и ключевое слово ELSE отсутствует, то ничего не происходит.

Пример

IF x<Min THEN Min:=x;

IF A>B THEN

A:=A-B

ELSE

IF B>A THEN

B:=B-A

ELSE

BEGIN

WriteLn('НОД = ',A);

Exit;

END;

2.7 Выражения

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

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

Операция

Обозначение

Описание

Сложение

+

Тип результата зависит от типов аргументов: для целых аргументов получается целый результат, а если хотя бы один из аргументов вещественный, результат тоже вещественный

Вычитание

-

Умножение

*

Деление

/

Результат всегда вещественный, даже если аргументы целые и делятся без остатка, например, 10/2 равно 5.0, а не 5

Целая часть от деления

div

Определены только для целых чисел, результат также целое число, например 13 div 5 = 2, 13 mod 5 = 3

Остаток от деления

mod

2.9 Логические выражения

Логическими выражениями называются выражения, которые принимают одно из значений логического типа (Boolean): истина (True) или ложь (False). Логические выражения конструируются при помощи логических операций.

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

Отношения: =, <>, <, >, <=, >=. Определены для всех скалярных типов, а также для строковых.

Логические связки: NOT (не - отрицание), AND (и), OR (или), XOR (исключающее или). Определены для аргументов логического типа. Рассмотрим действие логических связок при помощи таблиц истинности. При этом будем обозначать истину (True) единицей, а ложь (False) нулем.

A

NOT A

0

1

1

0

A

B

A AND B

A OR B

A XOR B

0

0

0

0

0

0

1

0

1

1

1

0

0

1

1

1

1

1

1

0

2.11 Приоритеты операций

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

Приоритет

Операции

1 (высший)

@, not, - (отрицание)

2

*, /, div, mod, and, shl, shr

3

+, - (вычитание), or, xor

4 (низший)

=, <>, <, >, <=, >=, in

Важно правильно записывать выражения в соответствии с этой таблицей приоритетов операций. Например, выражение A>0 AND B>0 будет интерпретироваться как (A>(0 AND B))>0, что вызовет ошибку, так как выражение A>(0 AND B) - логического типа, а 0 - числового. В данном случае выражение следует записывать так: (A>0) AND (B>0).

2.12 Стандартные математические и арифметические функции

Функция

Описание

Sin(X)

Синус угла (углы задаются в радианах)

Cos(X)

Косинус угла

Tan(X)

Тангенс угла

ArcSin(X)

Арксинус - функция, обратная Sin(X). Возвращает угол (в радианах), синус которого равен X

ArcCos(X)

Арккосинус угла

ArcTan(X)

Арктангенс угла

Abs(X)

Модуль X

Sqr(X)

Возведение X в квадрат

Sqrt(X)

Извлечение квадратного корня из X

Exp(X)

Вычисление ex

Ln(X)

Вычисление натурального логарифма X

Pi

Возвращает число р

Round(X)

Округление X до ближайшего целого:

Round(1.4) = 1, Round(1.6) = 2

Trunc(X)

Отсечение дробной части числа X:

Trunc(1.4) = 1, Trunc(1.6) = 1

Frac(X)

возвращает дробную часть числа:

Frac(15.41) = 0.41

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

3.1 Оператор выбора CASE

Синтаксис

CASE <Выражение> OF

<Список значений 1>:<Оператор 1>;

<Список значений 2>:<Оператор 2>;

• • •

<Список значений N-1>:<Оператор N-1>;

<Список значений N>:<Оператор N>

[ELSE

<Список операторов>]

END

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

Пример

CASE S[n] OF

'0'..'9':WriteLn('Цифра');

'A'..'Z','a'..'z':WriteLn('Буква');

'+','-','*','/':WriteLn('Операция');

ELSE

WriteLn('Неизвестный символ');

END;

3.2 Оператор цикла FOR

Синтаксис

FOR <Имя переменной> := <Выражение 1> {TO | DOWNTO} <Выражение 2> DO <Оператор>

Алгоритм действия оператора FOR для фраз TO/DOWNTO

1. Вычислить начальное и конечное значения переменной цикла (выражения 1 и 2).

2. Присвоить переменной цикла начальное значение.

3. Если значение переменной не больше/меньше конечного значения, то

А. Выполнить оператор.

Б. Изменить значение переменной цикла на следующее/предыдущее.

В. Перейти к шагу 3.

4. Конец оператора.

Действия, выполняемые на шаге 3.Б (изменение значения переменной цикла на следующее или предыдущее), требуют, чтобы <Выражение 1>, <Выражение 2> и переменная цикла имели одинаковый порядковый тип, так как такие действия определены только для порядковых типов. Если использована фраза TO и начальное значение больше конечного, либо фраза DOWNTO и начальное значение меньше конечного, то оператор не будет выполнен ни разу. После выполнения цикла значение переменной цикла изменяется и не должно использоваться.

Пример

FOR n:=1 TO 10 DO

WriteLn('n=',n);

Результат выполнения

n=1

n=2

. . .

n=10

3.3 Оператор цикла WHILE

Синтаксис

WHILE <Логическое выражение> DO <Оператор>

Принцип действия оператора можно сформулировать так: пока значение логического выражения истинно, выполнять оператор. Т.е. сначала происходит вычисление значения логического выражения. Если оно истинно, то выполняется оператор, и все повторяется сначала до тех пор, пока выражение не станет ложным.

Если выражение окажется ложным с самого начала, оператор не выполнится ни разу.

Пример

n:=1;

WHILE n<=10 DO

BEGIN

WriteLn('n=',n);

Inc(n);

END;

Результат выполнения

n=1

n=2

. . .

n=10

Функции Inc и Dec определены для порядковых типов.

Синтаксис

Inc(<Порядковая переменная>[,<Целое число>])

Dec(<Порядковая переменная>[,<Целое число>])

Они выполняют соответственно увеличение и уменьшение значения переменной на 1 или на указанное число.

Пример

Inc(n); { Увеличение значения пременной n на 1 }

Dec(n,5); { Уменьшение n на 5 }

3.4 Оператор цикла REPEAT

Синтаксис

REPEAT

<Список операторов>

UNTIL <Логическое выражение>

Список операторов в цикле REPEAT имеет такую же структуру, как и в составном операторе BEGIN END.

Действие оператора: выполнять список операторов до тех пор, пока логическое выражение не станет истинным. Сначала происходит выполнение списка операторов, затем выселяется значение логического выражения. Если оно ложно, все повторяется сначала до тех пор, пока выражение не станет истинным.

В отличие от оператора WHILE, цикл REPEAT заканчивается, когда выражение становится истинным. Также, в отличие от оператора WHILE, здесь сначала выполняется список операторов, и только потом вычисляется значение логического выражения, поэтому независимо от того, каким будет логическое выражение, список операторов выполнится хотя бы один раз.

Пример

n:=1;

REPEAT

WriteLn('n=',n);

Inc(n);

UNTIL N>10

Результат выполнения

n=1

n=2

. . .

n=10

Лекция 4. Пользовательские порядковые и составные типы. Процедуры и функции

4.1 Раздел описания типов

Синтаксис

TYPE

<Имя типа 1> = <Тип 1>;

• • •

<Имя типа 2> = <Тип 2>;

<Имя типа N> = <Тип N>;

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

4.2 Интервальный тип

Синтаксис

<Начальное значение>..<Конечное значение>

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

Пример

TYPE

Day_of_week = 1..7;

VAR

DOW:Day_of_week;

Letter:'A'..'Z';

• • •

DOW:=8; { Ошибка }

4.3 Перечислимый тип

Синтаксис

(<Имя 1>, <Имя 2>, …, <Имя N>)

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

Пример

TYPE

Color = (Red,Yellow,Green,Blue);

SubColor = Yellow..Blue;

VAR

C:Color;

Size:(Small,Middle,Big);

• • •

DOW:=Green;

IF Size=Big THEN Writeln('Большой');

Как и для любого из порядковых типов, для перечислимых определенны функции Pred, Succ, Ord и т.д. Например, Pred(Yellow)=Red, Succ(Green)=Blue. Порядковые номера элементов перечислимых типов начинаются с 0, т.е. Ord(Small)=0, Ord(Middle)=1 и т.д.

4.4 Тип массив

Синтаксис

ARRAY [<Тип индекса>] OF <Тип элемента>

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

Пример

TYPE

I100=ARRAY [1..100] OF Integer; { Массив из 100
целых чисел}

VAR

A:I100;

B:ARRAY [Char] OF (Letter,Digit);

C:ARRAY [1..10] OF ARRAY [1..20] OF Real;

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

Пример

VAR

C:ARRAY [1..10,1..20] OF Real;

Обращение к элементам массива

<Имя массива>[<Индекс 1>][<Индекс 2>]…[<Индекс N>]

или

<Имя массива>[<Индекс 1>,<Индекс 2>,…,<Индекс N>]

Пример

A[10]:=5;

FOR Ch:='A' TO 'Z' DO B[Ch]:=Letter;

FOR Ch:='0' TO '9' DO B[Ch]:=Digit;

C[2][3]:=C[2,4]-1;

4.5 Строковый тип

Синтаксис

STRING

или

STRING[<Максимальная длина>]

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

Пример

VAR

S:STRING;

S20:STRING[20]; { Строка максимальной длины 20 символов}

• • •

S:='Иванов';

IF S[4]<>'н' THEN Writeln('Ошибка');

S20:=S+' ушел в отпуск';

Writeln(S20);

4.6 Процедуры и функции для работы со строками

Функция Length(S) возвращает длину (количество символов) строки S. Для пустой строки функция возвращает 0.

Пример

Length('Пример')=6, Length('')=0

Функция Copy(S,<Начало>,<Длина>) возвращает часть строки (подстроку) S указанной длины, начиная с позиции, задаваемой параметром <Начало>.

Пример

Copy('Пример',2,3)='рим', Copy('Пример',4,10)='мер'

Процедура Insert(S1,S2,<Позиция>) вставляет строку S1 в строку S2 в указанной позиции.

Пример

S:='Пер';

Insert('рим',S,2);

Результат выполнения

S='Пример'

Процедура Delete(S,<Начало>,<Длина>) - удаляет часть строки заданной длины из S, начиная с указанной позиции.

Пример

S:='Периметр';

Delete(S,3,4);

Результат выполнения

S='Петр'

4.7 Типизированные константы

Типизированные константы, как и обычные, описываются в разделе описания констант, но их описание несколько отличается.

Синтаксис

CONST

<Имя>:<Тип> = <Значение>;

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

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

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

Синтаксис

Общий вид процедур и функций:

<Заголовок>

<Описательная часть>

BEGIN

<Исполнительная часть>

END;

Заголовок процедуры:

PROCEDURE <Имя>[(Формальные параметры>)];

Заголовок функции:

FUNCTION <Имя>[(Формальные параметры>)]:

<Тип результата>;

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

Синтаксис списка формальных параметров

[{VAR | CONST}] <Список имен 1>:<Тип 1>;

[{VAR | CONST}] <Список имен 2>:<Тип 2>;

. . .

[{VAR | CONST}] <Список имен N-1>:<Тип N-1>;

[{VAR | CONST}] <Список имен N>:<Тип N>

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

Пример

PROCEDURE PrintNumber(n:Real);

FUNCTION Sub(CONST S:STRING;St,En:Integer):STRING;

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

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

Синтаксис специального оператора присваивания

<Имя функции> := <Выражение>

Пример

FUNCTION Mul(A,B:Real):Real;

BEGIN

Mul:=A*B;

END;

В Delphi для возврата функциями значений в любой функции определена специальная переменная Result, которая имеет тип результата, указанный в заголовке функции. Присваивание этой переменной значения аналогично ранее рассмотренному специальному оператору присваивания.

Пример

FUNCTION Mul(A,B:Real):Real;

BEGIN

Result:=A*B;

END;

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

4.9 Обращение к процедурам и функциям

Синтаксис

Вызов процедур (в исполнительной части в качестве оператора):

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

Вызов функций (используются в выражениях):

<Имя функции>[(<Список фактических параметров>)]

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

Пример

PrintNumber(10);

Writeln(Mul(4,7));

PrintNumber(Mul(2,3)+8);

Лекция 5. Процедуры и функции. Процедурные типы. Тип указатель

5.1 Модификаторы VAR и CONST в описании формальных параметров

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

Пример

PROCEDURE VectorSum(x1,y1,x2,y2:Real;VAR x,y:Real);

BEGIN

x:=x1+x2;

y:=y1+y2;

END;

VAR x,y:Real;

• • •

VectorSum(3,7,5,10,x,y);

Результат выполнения

x=8, y=17

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

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

5.2 Локальность и область действия

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

Пример

VAR A,B,C:Integer;

PROCEDURE Test(A:STRING);

VAR

B:Char;

BEGIN

B:='B';

Writeln(A,B,C);

END;

BEGIN

A:=1;

B:=2;

C:=3;

Test('Str');

Writeln(A,B,C);

END.

Результат выполнения

StrB3

123

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

Пример

CONST

n:Integer=25;

PROCEDURE Test;

CONST

n:Integer=1;

BEGIN

Writeln('Local n=',n);

Inc(n);

END;

BEGIN

Test;

Test;

Writeln('Global n=',n);

END.

Результат выполнения

Local n=1

Local n=2

Global n=25

5.3 Процедурные типы

Синтаксис

Тип "процедура":

PROCEDURE [(Список формальных параметров>)]

Тип "функция":

FUNCTION [(Формальне параметры>)]:<Тип результата>

Рассмотрим использование процедурных типов на примерах. Предположим, что необходимо приближенно (численно) проинтегрировать некоторую функцию f(x) на отрезке [a,b] путем разбиения отрезка на n частей и приближенной замены интеграла суммой площадей прямоугольников, как показано на следующем рисунке.

Напишем функцию для численного интегрирования, к примеру, функции .

Функция Integr

FUNCTION Integr(a,b:Real;n:Integer):Real;

VAR

i:Integer;

dx,x:Real;

BEGIN

dx:=(b-a)/n;

Result:=0;

FOR i:=0 TO n-1 DO

BEGIN

x:=dx*I+dx/2;

Result:=Result+(Sin(x)+x/2)*dx;

END;

END;

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

Функция Integr

TYPE

Func=FUNCTION (x:Real):Real;

FUNCTION Integr(f:Func;a,b:Real;n:Integer):Real;

VAR

i:Integer;

dx:Real;

BEGIN

dx:=(b-a)/n;

Result:=0;

FOR i:=0 TO n-1 DO

Result:=Result+f(dx*I+dx/2)*dx;

END;

Теперь в качестве параметров передаются не только отрезок интегрирования и количество участков, но и функция, которую необходимо интегрировать. Таким образом, теперь можно интегрировать любую функцию без необходимости многократно дублировать код.

Пример использования функции Integr

FUNCTION f1(x:Real):Real;

BEGIN

f1:=Sin(x)+x/2;

END;

• • •

Writeln(Integr(f1,1,5,1000));

5.4 Тип указатель

Синтаксис

^<Тип>

Переменная типа указатель содержит адрес некоторой переменной описанного типа. Рассмотрим на примере тип указатель, а также оператор взятия адреса @ и оператор разыменования указателя ^.

Пример

VAR

A:Word;

B:Integer;

P:^Integer;

• • •

A:=10;

B:=1000;

P:=@B;

P^:=A; { B принимает значение 10 }

P:=@A; { Ошибка, если включена опция "Типизированный оператор @"

(по умолчанию эта опция выключена) }

После выполнения первых трех операторов присваивания переменные примут значения, приведенные на следующем рисунке (расположение переменных в памяти взято для примера).

5.5 Нулевой указатель

паскаль оператор логический арифметический

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

Пример (продолжение примера из параграфа 5.3)

PROCEDURE Test(f,G:Func); { G - первообразная f }

BEGIN

Writeln('Приближенное значение интеграла: ',

Integr(f,1,5,1000));

IF @G<>NIL THEN

Writeln('Точное значение интеграла: ',

G(5)-G(1));

END;

FUNCTION G1(x:Real):Real;

BEGIN G1:=Sqr(x)/4-Cos(x) END;

{ Первообразная функции }

FUNCTION f2(x:Real):Real;

BEGIN f2:=Sin(x)/x END;

{ Интеграл - не берущийся }

• • •

Test(f1,G1); { Напечатаются приближенное и точное значения }

Test(f2,NIL); { Напечатается только приближенное значение }

Лекция 6. Работа с текстовыми файлами. Тип запись. Алгоритмы сортировки

6.1 Файловые типы

Рассмотрим только работу с текстовыми файлами. Файловые переменные для текстовых файлов описываются с помощью типа Text.

Пример

VAR

F:Text;

Файловые переменные являются структурированными и содержат различную информацию, необходимую для работы с файлом на диске, с которым они связаны. Это имя файла, его размер, текущая позиция в файле и т.д. Если вы пишите процедуры или функции для работы с файлами, передавать в них файловые переменные можно только с модификатором VAR.

6.2 Процедуры и функции для работы с текстовыми файлами

Процедура или функция

Описание

Процедура Assign(F,<Имя>)

Назначает имя файла файловой переменной F

Процедура Reset(F)

Открывает файл для чтения. Если файла с назначенным именем нет, возникает ошибка ввода-вывода

Процедура Rewrite(F)

Создает файл и открывает его для записи. Если файл уже есть, он перезаписывается

Процедура Close(F)

Закрывает файл, открытый ранее процедурами Reset или Rewrite

Процедура

Read[Ln](F,<Список переменных>)

Читает из файла значения указанных переменных. ReadLn после чтения значений пропускает все оставшиеся данные до конца текущей строки и переходит на следующую

Процедура

Write[Ln](F,<Список значений>)

Работает, как и обычный оператор вывода, но данные записываются в текстовый файл, задаваемый переменной F

Функция Eof(F)

Возвращает истину, если достигнут конец файла при чтении

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

Входной файл (Test.txt)

>

Двумерный массив (A)

>

Выходной файл (Out.txt)

1.2 5 7.3

3.3 9 4

8 6 1.1

. . .

1

2

3

13.5

16.3

15.1

. . .

1

1.2

5

7.3

2

3.3

9

4

3

8

6

1.1

Текст программы

VAR

F:Text;

n,i:Integer;

A:ARRAY [1..100,1..3] OF Real;

BEGIN

Assign(F,'Test.txt');

Reset(F);

n:=0;

WHILE NOT Eof(F) DO

BEGIN

Inc(n);

Readln(F,A[n][1],A[n][2],A[n][3]);

END;

Close(F);

Assign(F,'Out.txt');

Rewrite(F);

FOR i:=1 to n DO

Writeln(F,A[n][1]+A[n][2]+A[n][3]);

Close(F);

END.

6.3 Стандартные текстовые файлы

В языке Паскаль имеется два стандартных текстовых файла: Input и Output.

Input - это файл для ввода, чтение из которого равносильно вводу данных с клавиатуры. Например, если в программе используется оператор ввода Readln(a,b), то он выполняется аналогично оператору Readln(Input,a,b).

Файл Output - стандартный текстовый файл для вывода, запись в который приводит к выводу данных на экран. Аналогично предыдущему оператор вывода Writeln(a,b) будет выполняться как Writeln(Output,a,b).

Файлы Input и Output можно использовать только в консольных приложениях.

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

Фамилия

Имя

Отчество

Факультет

Группа

Иванов

Петр

Николаевич

ММ

112

Петров

Иван

Алексеевич

ЭТ

2135

Каждый атрибут имеет свой тип. Как же можно описать такой список студентов в программе? Это можно сделать, например, с помощью нескольких массивов:

Пример

VAR

FIO:ARRAY [1..100,1..3] OF STRING;

Fakultet:ARRAY [1..100] OF (MM,RT,MT, … );

Group:ARRAY [1..100] OF Integer;

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

6.4 Тип запись

Синтаксис

RECORD

<Список имен 1>:<Тип 1>;

<Список имен 2>:<Тип 2>;

• • •

<Список имен N>:<Тип N>;

END

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

Пример

TYPE

Date=RECORD

Day:1..31;

Month:(Jan,Feb,Mar,…,Nov,Dec);

Year:Integer;

END;

Student=RECORD { К примеру со списком студентов}

Fam,Name,Pat:STRING;

Fakultet:(MM,RT,MT,FT, … );

Group:Integer;

END;

VAR

D:Date;

S:ARRAY [1..100] OF Student;

6.5 Обращение к элементам записи

Осуществляется с помощью оператора « . » (точка).

Пример

D.Day:=23;

D.Month:=Oct;

D.Year:=2002;

S[5].Fam:='Иванов';

S[5].Fakultet:=MM;

Переменные одного и того же типа «запись» можно присваивать друг другу:

Пример

S[4]:=S[5];

Таким образом, тип «запись» позволяет группировать данные различного типа в одной переменной (или, например, в одном элементе
массива).

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

Лекция 7. Алгоритмы сортировки

7.1 Алгоритмы сортировки

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


Подобные документы

  • История и основы структурного программирования в среде Turbo Pascal. Работа с различными типами данных. Операторы языка. Работа с символьными и строковыми переменами, одномерным, двумерным массивами. Классификация компьютерных игр. Игры на языке Паскаль.

    курсовая работа [28,8 K], добавлен 06.05.2014

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

  • Язык программирования Турбо Паскаль. Запись алгоритма на языке программирования и отладка программы. Правила записи арифметических выражений. Стандартное расширение имени файла, созданного системным редактором. Составной оператор и вложенные условия.

    курсовая работа [75,0 K], добавлен 21.03.2013

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

    учебное пособие [211,1 K], добавлен 30.03.2008

  • Сущность понятия "тип данных". Объектно-ориентированный стиль программирования. Простые типы данных в языке Паскаль: порядковые, вещественные, дата-время. Булевский (логический) тип. Синтаксис определения ограниченного типа. Регулярные типы (массивы).

    реферат [24,1 K], добавлен 01.12.2009

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

    курсовая работа [78,9 K], добавлен 28.12.2012

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

    курсовая работа [1,0 M], добавлен 03.07.2011

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

    лекция [55,7 K], добавлен 21.05.2009

  • Основы создания фрактальных композиций при помощи среды программирования Паскаль. Сущность и основа фрактальной графики. Графические возможности и операторы для рисования геометрических фигур в среде Паскаль. Примеры обозначения цветов на языке Паскаль.

    лабораторная работа [15,7 K], добавлен 12.06.2010

  • Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.

    курсовая работа [233,5 K], добавлен 14.12.2012

  • Этапы подготовки и решения задач на компьютере. Способы предоставления алгоритмов. Простые типы данных и их обработка. Основы работы с графикой и графическими операторами в Visual Basic. Организация линейной программы. Процедуры и функции в языке Паскаль.

    дипломная работа [1,9 M], добавлен 25.10.2015

  • Изучение символьных и строковых типов данных, алгоритма задачи на языке программирования Паскаль. Описания получения и установки отдельного символа строки, изменения регистра символов. Анализ создания и просмотра файла, поиска и сортировки информации.

    курсовая работа [440,7 K], добавлен 13.06.2011

  • Общая характеристика языков программирования. Описание языка Паскаль: основные субъекты языка; структура Паскаль-программы; типизация и объявление данных. Операторы присваивания и выражения. Структурные операторы, организация ветвлений и циклов.

    дипломная работа [276,6 K], добавлен 26.01.2011

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

    курсовая работа [254,0 K], добавлен 02.07.2011

  • Общая характеристика языка программирования Турбо Паскаль: операторы, циклы, файлы. Процедуры и функции модуля Crt. Структурная и функциональная схема программы учета учащихся, таблица идентификаторов. Список и описание использованных подпрограмм.

    курсовая работа [702,9 K], добавлен 29.01.2011

  • Совместимость и преобразование типов данных. Создание информационно-поисковой системы на языке программирования Паскаль. Описание интерфейса, каждого блока программы "Картотека больных". Рассмотрение результатов работы программы, сортирования данных.

    курсовая работа [368,9 K], добавлен 18.05.2015

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

    реферат [276,9 K], добавлен 27.02.2008

  • Понятие программы и ее основные составляющие. Операторы ввода и вывода. Разветвляющиеся алгоритмы. Цикл как многократное выполнение одинаковых действий. Особенности использования оператора выбора. Графики функций и системы координат. Рекурсия и анимация.

    презентация [663,7 K], добавлен 24.12.2010

  • Простые типы данных: порядковые, вещественные, дата-время. Стандартные процедуры и функции, применимые к целым типам. Кодировка символов в соответствии со стандартом ANSI. Структурированные типы: массивы; записи; множества. Указатели, динамическая память.

    реферат [83,3 K], добавлен 01.12.2009

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

    курсовая работа [567,5 K], добавлен 03.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.