Учебное пособие по Turbo Pascal

1.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
__________________________________
МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Коротких Т.Н.
ИНФОРМАТИКА
Учебное пособие
по Turbo Pascal
Москва
2011

2.

УДК:
ББК:
К
Утверждено учебным управлением МЭИ
в качестве учебного пособия для абитуриентов и студентов
Коротких Т.Н.
К
Информатика. Учебное пособие по Turbo Pascal. – М:
Издательство
, 2011. –
76 с.
ISBN
Учебное пособие предназначено для методического обеспечения
курса лекций по информатике. Даны основные понятия языка
программирования Turbo Pascal, рассмотрены основные типы данных,
основные операторы и циклы, встроенные процедуры и функции и
примеры их использования при создании программ. Приведены
примеры решения задач с одномерными массивами и матрицами,
символьными переменными.
Для учащихся и преподавателей колледжей, лицеев, средних и
высших учебных заведений, подготовительных курсов, мо жет быть
также рекомендовано для подготовки абитуриентов к ЕГЭ.
УДК:
ББК:
Коротких Татьяна Николаевна, 2011
ISBN
2

3.

Работа в среде Turbo Pascal
Для вызова Turbo Pascal надо в директории с файлами Паскаля
запустить файл turbo.exe.
Основные функциональные клавиши
Функц.
клавиши
F1
Назначение
Справка
F2
Запись редактируемого файла на диск
F3
Прочитать файл с диска
Отладочный режим. Отладка, начиная с позиции
курсора.
Включение полных окон: редактора/просмотра/выдачи
F5
Переключение между окнами:
F6
редактора/просмотра/выдачи
Отладка по шагам. Используется для выполнения
F7
следующей строки программы; если в строке есть
обращение к процедуре (функции), то входит в эту
процедуру и останавливается перед использованием
первого её оператора
Отладка по командам. Выполняет следующую строку
F8
программы; если в строке есть обращение к процедуре
(функции), исполняет её и не прослеживает её работу
Компиляция программы
F9
Перейти в главное меню
F10
Ctrl+F9 Компиляция и выполнение программы
Alt+ F5 Сменить окно редактора на окно вывода результатов
работы программы
Перейти в редактор
Alt+ Е
Alt+1/2/… Переключить редактор на файл 1/2/…
Выход из среды Турбо-Паскаль
Alt+Х
Перейти в меню файлов
Alt+F
Ctrl+F1 Cправка о стандартной процедуре, функции, константе
или переменной
Shift+F1 Выбор справки из доступных справочных сообщений
Alt+D/W Включить окно просмотра значений переменных
(Watch)
Alt+D/О Включить окно выдачи результата (Output)
F4
3

4.

Режимы работы
File
Режимы работы с файлом
New
Создать новый файл
Open
Открыть ранее созданный файл
Save
Сохранить на диске под текущим именем
Save as
Запись файла с новым именем на диск или
с указанием маршрута файла
Сменить каталог
Change dir
Временный выход в DOS
DOS shell
(для возврата набрать EXIT)
Выход в DOS
Exit
Edit
Search
Run
Редактирование файла
Поиск файла
Запуск программы на выполнение
Compile Компиляция программы
Debug
Режимы отладки
Watch
Ctrl+F5
Открыть окно наблюдения
и с помощью стрелок устанавливается размер и
местоположение окна
Tools
Инструменты
Options Опции
Window Окно
Help
Помощь
4

5.

Команды работы редактора
, , ,
Смещение курсора
Ctrl+
На слово вправо
Ctrl+
На слово влево
Home
В начало строки
End
В конец строки
PgUp
На страницу вверх
PgDn
На страницу вниз
Ctrl+Home В начало экрана
Ctrl+End
В конец экрана
Ctrl+Y
Удалить строку с курсором
Ctrl+Т
Удалить слово справа
Команды работы с блоком
Shift+ , , , Выделить блок
Ctrl+K B
Пометить начало блока
Ctrl+K K
Пометить конец блока
Ctrl+К Y
Удалить блок
Ctrl+К С
Копировать блок
Ctrl+К V
Переместить блок
Ctrl+К W
Записать блок на диск
Ctrl+К R
Считать блок с диска
Ctrl+К Р
Печатать блок
Ctrl+К I
Переместить помеченный блок вправо
Ctrl+К U
Переместить помеченный блок влево
Ctrl+К Н
Убрать засветку блока
5

6.

Элементы языка Паскаль
26 букв латинского алфавита: a..z или A..Z.
Арабские цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Шестнадцатеричные цифры: 0 .. 9, A,B,C,D,E,F.
Специальные символы: + — * / . , ‘ ; : = < > ( ) [ ] { } # ^ @ $ _.
Знаки логических операций (операций отношения):
=
- равно
<>
- не равно
<
- меньше
>
- больше
<=
- меньше или равно
>=
- больше или равно
Слово
имеет
определённый
смысл.
Слова
разделяются
пробелами или другими спецсимволами.
Имя
переменной
(идентификатор)

последовательность
латинских букв, цифр и знаков подчеркивания, начинающаяся с
буквы (до 63 символов, не содержит пробелов, не начинается с
цифры, не используются зарезервированные слова).
Зарезервированные слова: begin, end, if then else, procedure,
function и т.д.
Комментарий служит для пояснения программы и отдельных её
частей:
{текст}
(*текст*)
{ текст (*текст*) текст } – вложенные комментарии
6

7.

Правила языка Паскаль
Использовать буквы латинского алфавита (размер букв не
важен, кроме символьного и строкового типа данных).
Выделять в операторные скобки несколько операторов для
одновременного их выполнения.
В конце оператора ставить ; – это разделитель команд.
Несколько строк воспринимаются как одна (пока не встретится
разделитель ;).
Смысловые части выделять одинаковым отступлением от начала
строки.
Правила записи выражений
Выражения записываются в строчку (нет верхних и нижних
индексов):
(x1-a*x2)/(x1-x2)
Нельзя записывать подряд два знака операций.
:= – это операция присваивания:
a:=a+b;
Используются только круглые скобки.
Количество
открывающих
и
закрывающих
скобок
должно
совпадать.
Повторяющиеся действия вычисляют отдельно. Сложные и
большие выражения надо разбить на несколько простых выражений.
Следить, чтобы не было деления на 0 и извлечение корня из
отрицательного значения.
7

8.

Типы данных в Паскале
Данные
Константы
Не
изменяются
в
Переменные
процессе Значения
выполнения программы:
могут
изменяться
в
процессе выполнения программы:
Const
Var
a=5;
a:integer;
begin
a:=5;
Типы данных
8

9.

Целый тип
Название типа
Диапазон значений
Размер (байт)
Byte
0..255
1
ShortInt
-128..127
1
Integer
-32758..32757
2
Word
0..65535
2
LongInt
-2147483648.. -2147483647
4
Пример объявления переменных целых типов:
Var
i:Integer;
a:Word;
Операции для работы с целыми переменными
Знак операции
Назначение
Приоритет
+
Сложение
2
-
Вычитание
2
*
Умножение
1
div
Целая часть от деления
1
mod
Остаток от деления
1
Примеры: 5 div 2 = 2; (операнды и результат - целые)
3 div 5 = 0;
5 mod 2 = 1;
3 mod 5 = 3;
(-7) div 2 = -3;
(-7) div (-2) = 3;
(-14) mod 3 = 1;
(-10) mod 5 = 0.
9

10.

Встроенные процедуры и функции
Наименование
Abs(X)
Тип
результата
X
Действие
Модуль от числа X
Sqr(X)
X
Квадрат числа X
Sqrt(X)
Real
Корень квадратный от X
Chr(X)
Char
Символ с кодом X
Random(X)
Word
Случайное число 0.. X-1
(всего X значений)
Randomize;
целый
Odd(X)
Boolean
Генерирует новую последовательность случайных чисел при новом
запуске программы на выполнение
Возвращает True/False,
если Х-нечётное/чётное
Inc(X[,I])
X
Возвращает X+I,
если I отсутствует, то X+1
Dec(X[,I])
X
Возвращает X-I,
если I отсутствует, то X-1
Trunc(X)
целый
Round(X)
целый
Succ(X)
целый
Выделение целой части
вещественного числа X
Округление вещественного числа X
до ближайшего целого числа
Следующее за X число
Pred(X)
целый
Предыдущее перед X число
Ord(X)
целый
Int(X)
веществ.
Frac(X)
веществ.
Определяет номер элемента X в
последовательности
Выделяет целую часть вещественного
числа X
Выделяет дробную часть
вещественного числа X
Sin(X)
веществ.
Синус числа X
Cos(X)
веществ.
Косинус числа X
Sin(X)/Cos(X)
веществ.
Тангенс числа X
Arctan(X)
веществ.
Арктангенс числа X
Ln(X)
веществ.
Натуральный логарифм числа X
Exp(X)
веществ.
Экспонента числа X
10

11.

Вещественный тип
Название
Диапазон
Размер
Число значащих
(байт)
цифр
типа
Real
2.9 e-39 .. 1.7 e 38
6
11..12
Single
1.5 e -48 ..3.4 e 38
4
7..8
Double
5.0 e-324 .. 1.7 e 308
8
15..16
Extended
3.4 e -4932 .. 1.1 e 4932
10
19..20
Comp
-2 63 +1..+ 2 63 -1
8
19..20
Пример объявления переменной вещественного типа:
Var
X:Real;
Округление производится по формулам:
Round(X)=Trunc(x+0.5),
если X >= 0
Round(X)=Trunc(x-0.5),
если X < 0
Примеры:
Trunc(5.2) = 5;
Trunc(-1.8) = -1;
Trunc(-5.2) = -5;
Round(5.2) = 5;
Round(-1.8) = -2
Round(-5.2) = -5;
Логический тип (BOOLEAN)
Логический тип (Boolean) – это тип, в котором определены
только 2 значения: False и True.
Переменная логического типа занимает в памяти 1 байт.
Логическую переменную нельзя непосредственно ввести с
клавиатуры.
Т.к.
это
переменная
порядкового
типа,
то
за
False
закрепляется 0, а за True – 1.
Используемые логические операции в порядке приоритета:
Not, And, Or, Xor.
11

12.

Логические операции
X
Y
Not X
X And Y
X Or Y
X XOr Y
0
0
1
0
0
0
0
1
1
0
1
1
1
0
0
0
1
1
1
1
0
1
1
0
Примеры данных логического типа:
a) константы без имени:
False
b) константы именованные:
Const f= false;
c) константы типизированные:
Const t: boolean= true;
d) переменные:
Var d,f: boolean;
True
Примеры ввода данных логического типа:
Var
b:boolean;
k:Byte; {Дополнительная переменная для преобразования
типов друг в друга}
Begin
Write(‘Введите значение логической переменной: 0 – False,
1- True’);
Readln(k);
b:=Boolean(k); {Преобразование в логический тип}
{Или другим более простым способом}
b:=k=1; {Присваивает результат сравнения}
End.
Переменные логического типа выводятся словами False и True.
12

13.

Символьный тип (CHAR)
Переменные символьного типа занимают в памяти 1 байт и
принимают значения из множества символов ПЭВМ, порядковые
номера которых от 0 до 255. Для кодирования символов используется
код ASCII (American Standard Code for Information Interchange).
Первые
0..127
кодов
соответствуют
стандарту
ASCII,
вторая
половина 128..255 кодируется по-разному для разных типов ПЭВМ.
Примеры кодирования:
код 48 - ‘0’; 57 - ‘9’; 65 - ‘А’; 97 - ‘a’; 90 - ‘Z’; 122 - ‘z’.
Важен размер букв (т.к. коды прописных и строковых букв
различны.
Пример:
Над
Ord( A )=65;
символьными
Ord( a )=97.
переменными
можно
производить
операции отношения.
Примеры объявления переменной символьного типа:
a) константы без имени (задаются в апострофах): ‘a’
‘Z’
b) константы именованные:
Const space= ‘ ‘; c=‘#’;
c) константы типизированные:
Const d: char= ‘1’;
d) переменные:
Var e,f: char;
‘0’
Используемые функции:
- Ord – возвращает код символа
Пример: Ord( A )=65.
- Ord(X) - Ord( 0 ) – даёт возможность получить из
символа-цифры Х ( 0 , 1 ,… 9 ) цифру.
- Сhr – возвращает символ по коду
Пример: Chr(65)= A .
- UpCase – возвращает прописную букву
13

14.

(только для английских букв):
Пример:
UpCase ( a )= A .
- Pred(X) – возвращает символ, предшествующий этому
числу.
Пример:

- Succ(X)
Pred( C )= B .
возвращает
символ,
символом X в ASCII-таблице по коду
который
следует
за
Пример: Succ( C )= D .
Перечисляемый (перечислимый) тип (TYPE)
Перечисляемый тип данных
является нестандартным, должен
быть описан в секции описания типов TYPE и определяется набором
идентификаторов
в
круглых
скобках,
которые
данное
может
принимать. Под данное выделяется один байт памяти, максимальное
количество идентификаторов – 256, порядковые номера изменяются
от 0 до 255.
Примеры определения перечисляемых типов:
1) Развёрнутая схема объявления переменных перечисляемого типа:
TYPE
month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
colour=(white, red, black);
Var m1,m2:month;
A: colour;
2) Короткая схема объявления переменных перечисляемого типа
(анонимный тип):
Var m1,m2:(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
A: (white, red, black);
Переменных перечисляемого типа нельзя непосредственно
ввести с клавиатуры и вывести на экран.
14

15.

Один и тот же элемент не может входить в различные
типы.
С переменными перечисляемого типа можно производить
операции отношения.
Обязательно использовать круглые скобки в начале и в
конце перечисления элементов. Идентификаторы – без кавычек.
Первый элемент имеет номер 0, второй – 1 и т.д.
Перечисляемый тип позволяет:
- улучшить смысловую читаемость программ;
- чётко контролировать значения;
- представить данные в памяти ЭВМ.
Примеры данных перечисляемого типа:
a) константы без имени:
feb
b) константы именованные:
Const s= sep; f= feb;
c) константы типизированные:
Const a: month = sep;
d) переменные:
Var t,e : colour; a:month;
red
Порядковый номер jan равен 0, feb - 1 и т.д.
Пример ввода и вывода данных перечисляемого типа:
TYPE
colour=(red,yellow,green);
Var a: colour;
K:byte;
Begin
{ввода данных перечисляемого типа}
Writeln(‘Укажите цвет: 0 – красный, 1 – жёлтый, 2 – зелёный’);
Readln(k);
15

16.

a:= colour(k);
{вывод данных перечисляемого типа}
case a of
red:
writeln(‘красный’);
yellow:
writeln(‘жёлтый’);
green:
writeln(‘зелёный’);
end;
end.
Тип диапазон
Тип – диапазон является нестандартным, определяет диапазон
изменения данных любого порядкового типа и должен быть описан в
секции описания типов type. Задается своим минимальным и
максимальным элементом, между которыми ставятся две точки.
Пример определения типов диапазон:
Type
cifr=0..9;
logic=false..true;
letter=‘а’.. ‘z’;
leto=jun..aug;
Константы
и
переменные
типа
диапазон
определяются
соответствующим порядковым типом.
Тип диапазон имеет достоинства:
- наглядность;
-
экономия памяти;
-
дополнительный контроль правильности расчётов .
16

17.

Выражения и приоритеты
Выражения.
Из констант, переменных, обращений к стандартным функциям с
помощью
знаков
операций
и
круглых
скобок
составляются
выражения, вычисления по которым производится в соответствии с
приоритетами.
Приоритеты действий (в порядке их убывания):
0. Определение всех констант и переменных.
1. Действия в круглых скобках.
2. Функции.
3. Унарные операции: @
not
ун.+ ун. — .
4. Операции типа умножения: * / div
mod and
shr shl.
5. Операции типа сложения: + — or xor.
6. Операции сравнения: = < > <= >= <> IN.
При одинаковых приоритетах вычисления производятся слева
направо.
Примеры выражений и приоритетов:
4
2
5
1
6
3
b and not a or (e<t) xor odd(7)
3
9
4
12
5
1
14
6
10
7
13
8
2
(sqr(y)/arctan(x)-sqrt(y+10))/(pi*cos(y)+abs(x-7.0))
17

18.

Структура программы на Turbo Pascal
I) Заголовок программы:
Program <имя программы>(input, output);
Пример: Program primer;
Заголовок
компилятором.
программы
В
круглых
необязателен,
скобках
и
может
игнорируется
указываться
список
параметров.
Порядок
размещения
остальных
разделов
программы
произвольный, можно создавать несколько одинаковых разделов.
II) Раздел описаний:
1) Описание блоков: подключение библиотечных модулей.
Uses <используемые
модули Turbo Pascal, кроме модуля
SYSTEM>;
Пример: Uses CRT, DOS, GRAPH;
2) Описание меток:
Label <используемые метки>;
{Секция описания меток}
Пример: Label 1,2,alpha;
- В качестве меток могут использоваться целые числа без знака от
0 до 9999.
- Перечислять метки можно в произвольном порядке.
- Любая метка в разделе операторов может быть указана только
один раз.
- Сама метка ставится в теле программы перед оператором и
отделяется от него двоеточием.
18

19.

3) Описание типов:
Type <описания нестандартных типов данных>
{Секция описания типов}
Пример:
Type month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
summer=jun .. aug;
4) Описание констант:
Const <определение именованных и типизированных констант>
{секция описания констант}
Пример: Const n=5;
с=’ABBA’;
a:real=0.0;
eps=1.0e-5;
Константы не меняют своего значения во время выполнения
программы.
5) Описание переменных:
Var <описание используемых в программе переменных>
{секция описания переменных}
Пример:
Var a,b,c : byte;
ch:char;
s:string;
Они нужны для хранения и передачи данных внутри программы.
Переменная – это величина способная изменяться в процессе
выполнения программы.
Каждая переменная, до работы с ней должна быть описана, т.е.
указан тип переменной.
19

20.

Попытка
в
процессе
выполнения
программы
присвоить
переменной значение иного типа расценивается как ошибка в
программе.
6) Описание процедур и функций:
Procedure <> ;
Function <>:тип результата;
......
......
end;
end;
{Секция описания подпрограмм}
Все
используемые
процедуры
и
функции
должны
быть
объявлены до начала входа в основную программу.
7) Секция задания директив компилятору
Примеры:
{$ I prim.pas} - директива включения файла с текстом на Turbo
Pascal;
{$N+} - директива подключения сопроцессора;
{$E+} - директива подключения эмулятора.
Примечания:
- Каждая секция, кроме Uses, может отсутствовать или быть
вставлена несколько раз.
- Порядок следования секций, кроме Uses, произвольный.

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

21.

III) Операторная (исполняемая часть):
Раздел операторов – это основной раздел программы, где
задаются те действия, которые должны быть выполнены по данной
программе. Это тело программы.
Begin
<операторы>
End.
Операторы Turbo Pascal
Операторы Turbo Pascal могут быть разбиты на две группы:
1) Простые (присваивания, вызова процедур, перехода, пустой);
2) Сложные (условные, составные, цикла).
Оператор присваивания ( := )
Формат оператора:
<идентификатор переменной>:=<выражение>;
С помощью этого оператора переменной присваивается значение
выражения.
При этом переменная и выражение должны быть одного типа.
Исключения:
1)
Переменной
вещественного
типа
можно
присваивать
целочисленные выражения.
2)
Переменной строкового типа можно присваивать выражение
символьного типа.
21

22.

Примечание: оператор присваивания используется для любых
типов данных, но приведенный формат справедлив лишь для простых
и строковых типов, для которых есть смысл говорить о выражениях.
Пример:
var x,y: real;
begin
x:=x+2;
y:=ln(x)-exp(-x)+2*sqr(x)+sqrt(x);
end.
Операторы ввода – вывода
Ввод
Ввод осуществляется с помощью обращения к процедурам:
read(a1,a2, . . .,an); {осуществляет ввод с одной строки}
readln(a1,a2, . . .,an); {осуществляет ввод данных из строки и
переход на новую строку}
readln; {осуществляет переход на новую строку}
Ввод данных осуществляется с клавиатуры
в переменные,
указанные в списке ввода, с повторением на экране дисплея.
a1,a2,...,an

идентификаторы
переменных
целого,
вещественного, символьного, строкового типов.
Вводимые значения должны соответствовать типу переменных в
списке ввода, иначе появится сообщение об ошибке ввода - вывода.
Примечание: При вводе данных целого и вещественного типа
предшествующие вводимому данному пробелы, знаки табуляции и
Enter игнорируются, а последующие воспринимаются как признак
конца ввода; при вводе символов любой знак (пробел, табуляция,
Enter) воспринимается как вводимый символ. Cтроки следует вводить
с помощью оператора readln(...).
22

23.

Пример:
var
a,b,c : real;
h,d,e :char;
f: integer;
read(a,b,c,h,d,e,f);
_ _ 13.2_ _ 16.7 _ _ 5.2 _ re7 {вводимая строка}
Результат ввода: a=13.2 b=16.7 c=5.2 h= _
d= r
e= e
f=7.
Ввод
Ввод осуществляется с помощью обращения к процедурам:
read(a1,a2, . . .,an);
{осуществляет ввод с одной строки}
readln(a1,a2, . . .,an);
{осуществляет ввод данных из строки
и переход на новую строку}
readln;
{осуществляет переход на новую строку}
Примечания:
- Переменные
помощью
одного
целого
и
вещественного
типов,
оператора
(readln(a1,a2,
.
.
вводимые
.,an);),
с
должны
отделяться друг от друга пробелами или символами возврата каретки
(Enter).
- Процедура Read работает со сбоями, лучше использовать Readl.
- Переменные символьного типа набираются без пробелов и, если
считывается один символ, а случайно набрано больше, то считан
будет только один – первый.
- При вводе строковых переменных клавишу (Enter) нужно
нажимать лишь один раз в конце строки.
- Переменные логического и перечислимого типов вводятся с
клавиатуры с использованием процедуры преобразования типов.
23

24.

Вывод
Вывод осуществляется с помощью операторов:
write(a1,a2, . . .,an);
{осуществляет ввод с одной строки}
writeln(a1,a2, . . .,an);
{осуществляет ввод данных из строки
и переход на новую строку}
writeln;
{осуществляет переход на новую строку}
a1,a2,...,an – выражения целого, вещественного, символьного,
строкового и логического типов.
Примечания:
- Переменные целого, символьного, строкового типов выводятся в
реальную длину.
- Для отделения выводимых данных надо вставлять пробелы.
Пример: Writeln(a, ,b, ,c);
- Переменные логического типа выводятся словами False и True.
- Переменные перечислимого типа выводят с использованием
оператора выбора Case или константы.
Вывод выражений осуществляется на экран дисплея.
При этом возможен вывод по указанному формату (форматный
вывод).
Для целых символьных, строковых и логических выражений
возможен форматный вывод( :W) т.е. write(a:W) .
W – константа целого типа, определяющая число позиций,
выделяемых под выводимое выражение.
Примечание: Если число позиций больше, чем нужно, то
выводимое выражение снабжается предшествующими нулями, а если
меньше, то указанный формат игнорируется.
24

25.

Для вещественных выражений возможно использование двух
форматов: (:W и :W:D), т.е. write(a:W) и write(a:W:D). В первом
случае выражение выводится в экспоненциальной (5.345e+01), а во
втором – в форме с десятичной точкой (53.45).
W – константа целого типа, определяющая число позиций,
выделяемых под выводимое выражение.
D – константа целого типа, определяющая число позиций после
десятичной точки.
Пример: Вывести значения, введенные в предыдущем примере.
var
a,b,c : real;
h,d,e :char;
f: integer;
g:boolean;
...
g:=true;
writeln(a:9, b:5:2, c:7:3, h, d:2, e, f:5, g:7);
Результат ввода: a=13.2 b=16.7 c=5.2 h= _
d= r
e= e
f=7.
Результат вывода:
_1.32e+01_16.70 _ _ 5.200 _ re _ _ _ _7 _ _ _TRUE
Примеры ввода и вывода данных перечисляемого
и логического типов:
Ввод данных перечисляемого типа:
Пример: ввода месяца года и вывода соответствующего сезона.
Program primer1;
Type
month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
25

26.

var
m:month;
b=0..12;
begin
write(‘Введите месяц (1..12):’);
readln(b);
m:=month(b-1); {определение данного по коду}
{вывод данного перечисляемого типа}
case m of
mar..may: writeln( весна );
jun..aug: writeln( лето );
sep..nov:writeln( осень );
dec..feb: writeln( зима );
end;{ case}
end.
Ввод данных логического типа:
Пример: ввода и вывода соответствующей переменной.
Program prim2;
var
f:boolean;
b:0..1;
begin
write( Введите 0 - false или 1-true: );
readln(b);
if b=0 then
f:=false
else
f:=true;
writeln( f= , f);
end.
26

27.

Условный оператор IF
Условный оператор
IF позволяет выполнить действие в
зависимости от результата проверки некоторого условия.
Два формата оператора IF:
1) Полная форма условного оператора:
IF <условие> THEN<оператор 1 > ELSE<оператор 2 >;
где <условие> – выражение логического типа;
<оператор 1> – оператор Turbo Pascal, выполняемый, если
<условие> истинно;
<оператор 2> – оператор Turbo Pascal, выполняемый, если
<условие> ложно.
2) Краткая форма условного оператора:
IF <условие> THEN<оператор 1>;
Если условие ложно, то <оператор 1> не выполняется, а сразу
выполняются следующие за ним операторы.
Пример:
if x<>0 then
y:=1/x
else
y:=sqr(x);
Пример:
if (a=b) or (c=d) and(p=1) then
x:=x+1;
27

28.

Пример: найти наименьшее значение из трёх различных чисел.
program prim;
var
x,y,z,min: real;
begin
writeln( Введите x,y,z: );
readln(x,y,z);
min:=x;
if y<min then
min:=y;
if z<min then
min:=z;
writeln( Наименьшее число= ,min:6:2);
end.
Примечание:
<оператор
1>
и
<оператор
2>
могут
быть
условными. В этом случае может возникнуть неопределенность (к
какому then относится else). Эта неопределенность разрешается
следующим
образом:
else
относится
незанятому then.
Пример:
if b1 then
if b2 then
if b3 then
if b4 then
<оператор 1>
else
<оператор 2>;
28
к
ближайшему
левому

29.

<оператор 1> выполняется при условии b1 and b2 and b3 and b4 =
true;
<оператор 2> выполняется при условии b1 and b2 and b3 and not
b4= true .
Перед else не ставится точка с запятой, т.к. это один оператор
IF … THEN … ELSE…;
Для наглядности программы операторы, следующие за словами
THEN и ELSE можно писать на следующей строке.
Если за словами
THEN и ELSE
надо выполнить группу
операторов, то используют операторные скобки begin ... end;
Такая структура называется вложенной.
Пример:
if <условие> then
begin
<оператор 1>;
<оператор 2>;
end
else
begin
<оператор 3>;
<оператор 4>;
end;
29

30.

Пример: решить квадратное уравнение ax 2 +bx+c=0.
program prim;
var
a,b,c,d,x1,x2: real;
begin
writeln( Введите коэффициенты a,b,c: );
readln(a,b,c);
d:=b*b-4*a*c;
if d>0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln( x1= , x1:6:2, x2= , x2:6:2);
end
else
if d=0 then
begin
x1:=-b/(2*a);
writeln( x1= , x1:6:2);
end
else
writeln( Уравнение не имеет корней );
end.
30

31.

Условный оператор CASE
CASE – это условный оператор (оператор выбора или оператор
варианта).
C
помощью
операторов
из
этого
любого
оператора
количества
можно
выполнить
операторов
Turbo
один
Pascal
из
в
зависимости от значения некоторого выражения.
Формат оператора:
Case <выражение> of
<константа выбора 1>: <оператор 1>;
<константа выбора 2>: <оператор 2>;
...............................
<константа выбора N>: <оператор N>;
[ else<оператор>; ]
end;
<выражение>– выражение порядкового
типа (кроме Real и
String);
– перечень выражений (в частном случае констант) через запят ую
или .. (диапазон) того же типа, что и <выражение>;
<операторы> – любые операторы Turbo Pascal;
[ ] — часть оператора может быть опущена.
Примечания:
- <оператор i> выполняется в том случае, когда значение
выражения совпало с одной из констант, указанной
31
в <константе

32.

выбора i>; <оператор > выполняется в том случае, когда значение
выражения не совпало ни с одной из констант;
- тип данных <константы выбора> должен совпадать с
типом данных <выражения>;
- если
не
более
двух
<констант
выбора>,
то
лучше
использовать оператор If;
- повторение <констант выбора> не допускается;
- в разделе Else не требуется использовать составной
оператор Begin End даже при нескольких операторах;
- какой-либо упорядоченности <констант выбора> в списках
не требуется;
- если
раздел
Else
опустить,
то
не
перечисленные
<константы выбора> будут игнорироваться, т.е. сообщения не
возникнет; оператор выбора просто завершит свою работу;
- входить внутрь оператора выбора можно только через
Входить
Case.
внутрь
по
какому-либо
оператору
находящемуся вне оператора Case, запрещается.
Пример: Простейший калькулятор.
var
c: char;
a,b,y:real;
f:boolean; {остановка вычислений}
begin
f:=false;
repeat
writeln;
writeln( Введите a b );
readln(a,b);
32
перехода,

33.

writeln( Нажмите + - сложение, - вычитание, * - умножение, / деление );
readln(с);
case c of
+ : y:=a+b;
- : y:=a-b;
* : y:=a*b;
/ : y:=a/b
else
f:=true;
end;
if not f then
writeln( Результат= , y:6:2);
until f;
end.
Пример: Ввести число 0<k<20 и вывести: это число не простое
или простое.
var k:byte;
begin
writeln( Введите целое число 0<k<20 );
readln(k);
case k of
2,4,6,8..10,12,14..16,18: writeln( Число k – не простое );
1..3,5,7,11,13,17,19: writeln( Число k – простое )
else
writeln( Число k – вне диапазона 1..19 );
end;
end.
33

34.

Операторы цикла
Операторы цикла задают повторное выполнение операторов
(простых или структурных).
Существует три типа операторов цикла.
Оператор FOR
Оператор For – параметрический цикл предназначен для
выполнения
оператора
заранее
известное
число
раз
(детерминированный цикл).
Форматы оператора:
1) Оператор For с возрастанием параметра цикла:
For <параметр цикла>:=<начальное значение> to <конечное
значение> do <оператор>;
Должно выполняться условие:
<начальное значение> < <конечное значение>
2) Оператор For с убыванием параметра цикла:
For <параметр цикла>:=<начальное значение> downto <конечное
значение> do <оператор>;
<параметр
цикла>

идентификатор
переменной
любого
порядкового типа;
<начальное значение><конечное значение> – выражения того же
типа, что и параметр цикла.
34

35.

Если тело цикла состоит из нескольких операторов, то они
заключаются в операторные скобки begin ... end;.
Если
<начальное
значение>=<конечное
значение>,
то
цикл
выполняется один раз.
Если <начальное значение> > <конечное значение>, то цикл не
выполняется ни разу.
Порядок выполнения операторов:
1. Расчёт начального и конечного значений.
2. Параметру цикла присваивается начальное значение.
3. Проверяется условие: <параметр цикла> <= <конечному
значению> для to ,
<параметр цикла> >= <конечному значению> для downto.
4. При выполнении условия выполняется оператор,
<параметр цикла> увеличивается на единицу соответствующего
порядкового типа для to,
<параметр цикла> уменьшается на единицу соответствующего
порядкового типа для downto, осуществляется переход к 3.
При невыполнении условия оператор цикла завершается.
Примечания:
- Значение параметра цикла не сохраняется.
- Не рекомендуется изменять параметр цикла.
- Оператор цикла может быть ни разу не выполнен.
- Достоинство этого цикла в простоте.
- Досрочно выйти из цикла For можно с использованием
операторов перехода.
- По окончании цикла значение <параметра цикла> чаще
всего равно <конечному значению>.
35

36.

Пример: Распечатать в обратном порядке латинский алфавит.
program prim;
var
c: char;
begin
writeln( Латинский алфавит в обратном порядке: );
for c:= z downto а do
write(c);
end.
Пример: Вычислить сумму ряда
N
1
i
(N вводится).
i 1
program prim;
var
N,i:byte;
s: real;
begin
writeln( Введите N );
readln(N);
s:=0;
for i:=1 to N do
s:=s+1/i;
writeln( s= ,s:8:2);
end.
Пример: Сколько из N заданных точек с координатами x,y
принадлежат графику y=x 2 ?
36

37.

program prim;
var
N,i,k:integer;
x,y: real;
begin
writeln( Введите количество точек N );
readln(N);
k:=0;
for i:=1 to N do
begin
writeln( Введите координаты ,i, точки: );
readln(x,y);
if y=sqr(x) then
k:=k+1;
end;
if k=0 then
writeln( Нет точек, принадлежащих графику )
else
writeln( Количество точек, принадлежащих графику = ,k);
end.
37

38.

Оператор WHILE
Оператор
предназначен
While
для

цикл
с
выполнения
предусловием
группы
(цикл
операторов
ПОКА)
заранее
неизвестное число раз.
Формат оператора:
While <условие> do <оператор>;
<условие> – выражение логического типа, определяющее условие
нахождения внутри цикла. Оператор выполняется, пока <условие> истинно; выход из цикла осуществляется, если <условие> ложно;
<оператор> – любой оператор Turbo Pascal.
Примечания:
- оператор может быть ни разу не выполнен;
- <оператор> цикла должен изменять <условие>, чтобы цикл
мог закончиться;
- в качестве <условия> могут быть использованы логические
константа, переменная или выражение с логическим результатом
(False/True);
- сложное
тело
While
надо
представлять
составным
оператором begin ... end;.
Замечания для операторов цикла While и Repeat:
программисту надо следить за
1. правильностью задания начальных значений (до входа в
оператор цикла);
2. корректностью <условия>;
3. корректностью операторов, изменяющих <условие>.
38

39.

Пример: Вычислить сумму ряда 1+1/2 + 1/3 +1/4 ....
Включать в сумму члены ряда, большие или равные eps = 1.0 e -6.
program prim;
const eps=1.0e-6;
var
i:byte; s: real;
begin
s:=0;
i:=1;
while 1/i >= eps do
begin
s:=s+1/i;
i:=i+1;
end;
writeln( s= , s:6:2);
end.
Пример: Вычислить сумму всех чётных чисел от 100 до 200.
program prim;
var s,i:byte;
begin
s:=0;
i:=100;
while i <= 200 do
begin
s:=s+i;
i:=i+2;
end;
writeln( Сумма чётных чисел от 100 до 200 = , s:6:2);
end.
39

40.

Оператор REPEAT
Оператор Repeat – цикл с постусловием предназначен для
выполнения группы операторов заранее неизвестное число раз. Число
повторений определяется по ходу реализации циклического процесса.
Формат оператора:
Repeat
<оператор 1>;
<оператор 2>;
.........
<оператор n>
Until <условие>;
<условие> – выражение логического типа, определяющее условие
выхода из цикла, т.е. выход из цикла осуществляется, если <условие>
истинно.
<оператор> – любой оператор Turbo Pascal.
Примечания:
- Группа операторов будет выполнена хотя бы один раз;
- <оператор> цикла должен изменять <условие> выхода из
цикла, чтобы цикл мог закончиться;
- в качестве <условия> могут быть использованы логические
константа, переменная или выражение с логическим результатом
(False/True);
40

41.

Пример:
Вычислить сумму ряда 1+1/2 + 1/3 +1/4 ....
Включать в сумму члены ряда, большие или равные eps = 1.0 e -6.
program prim;
const
eps=1.0e-6;
var
i:byte;
s: real;
begin
s:=0;
i:=0;
repeat
i:=i+1;
s:=s+1/i;
until 1/i <eps;
writeln( s= , s:6:2);
end.
Операторы BREAK и CONTINUE
В теле любого цикла можно использовать операторы Break и
Continue. Эти процедуры позволяют реализовать более «хитрые»
циклы с условиями.
Оператор Break немедленно прекращает работу цикла; начинает
выполняться оператор, идущий после цикла.
41

42.

Пример:
Вычислить сумму N слагаемых ряда 1+1/2 + 1/3 +1/4 ... +1/ N.
Прервать суммирование, если слагаемое стало меньше eps.
program prim;
const eps=1.0e-6;
var
i,n:byte;
s: real;
begin
writeln( Введите N );
readln(N);
s:=1;
For i:=2 to N do
Begin
If 1/i < eps then
Break;
s:=s+1/i;
end;
writeln( s= , s:6:2);
end.
Оператор Continue, используемый в составе условного, отменяет
выполнение следующих за ним операторов тела цикла, не прекращая
цикл.
Оператор GOTO
Оператор
перехода
goto
передаёт
управление
какому-либо
оператору, помеченному меткой, изменяя тем самым стандартный
последовательный порядок выполнения операторов.
42

43.

Формат оператора:
goto <метка>;
В программе должен быть оператор, помеченный меткой
<метка> : <оператор>;
<метка> – целая константа 0..9999 или идентификатор, которые
должны быть описаны в секции описания меток label, и обязательно
должны встретиться где-нибудь в теле программы. Метка позволяет
именовать
некоторый
оператор
программы
и
таким
образом
ссылаться на него.
Замечание:
- С помощью оператора перехода нельзя переходить внутрь
подпрограмм и из подпрограмм в основную программу.
- Не рекомендуется переходить внутрь сложных операторов:
цикла, условных, составных.
Примечание:
Оператором перехода следует пользоваться реже, так как он
ухудшает структуру программы, затрудняет её понимание, делает
программу путаной и сложной в отладке.
Пример:
Найти
наибольший
общий
делитель
натуральных чисел n и m (алгоритм Евклида).
program prim;
label 1,2;
var
n,m,a,b,c:integer;
begin
writeln( Введите натуральные числа n,m );
readln(n,m);
a:=n;
43
(НОД)
двух

44.

b:=m;
1: if a=b
then
goto 2;
if a>b then
a:=a-b
else
b:=b-a;
goto 1;
2: c=a
then
writeln( НОД двух чисел , n, и ,m, = ,c);
end.
Пустой оператор
Пустой
оператор
не
выполняет
никаких
действий
и
не
отображается в программе, но может быть помечен меткой и отделен
от других ;. Он вводится для сохранения целостности языка Turbo
Pascal.
Пример:
if s>0 then
else
inc(s);
Пример:
label 1;
begin
. . . ..
goto 1;
.....
1: end.
44

45.

Составной оператор
Составной оператор
представляет собой
последовательность
операторов, заключенных в операторные скобки
begin . . . . . . . . . . end;
Используется там, где и обычный оператор.
Требуется там, где по конструкции языка Turbo Pascal должен
использоваться
один
оператор,
а
нужно
выполнить
несколько
операторов.
Составные операторы могут быть вложенными.
Замечание:
Надо следить за тем, чтобы число
begin и end в составных
операторах совпадало.
Массивы
Массив

это
совокупность
однотипных
элементов,
объединённых под одним именем и расположенных в памяти машины
подряд.
Массивы

это
данные
структурированного
типа,
представляющие собой фиксированное количество упорядоченных
однотипных элементов, снабженных индексами. Упорядочивание
производится по индексам. Индекс может быть один (одномерный
массив), два (двумерный массив – матрица), три (трёхмерный –
тензор) и т.д.
Любой массив характеризуется:
- размерностью – количеством измерений;
- границами
по
каждому
измерению,
определяющими
количество элементов по соответствующему измерению массива.
45

46.

Тип массив является нестандартным и должен быть описан в
секции описания типов TYPE.
Формат описания n-мерного массива:
Type
<имя типа массива>=array[<тип индексов 1>, <тип индексов 2>, . . . ,
<тип индексов n>] of <тип элементов>;
<имя типа массива> – идентификатор;
<тип индексов> определяет диапазон изменения и значения
индексов и может быть любого порядкового типа, за исключением
типа Longint, что обусловлено ограниченностью выделяемой под
массив памяти;
<тип элементов> – любой тип Turbo Pascal, за исключением
процедурного типа.
Примечания:
- Максимальный
размер
памяти,
выделяемой
массиву,
совпадает с размером области данных – 64 Кб (65535 байтов).
- Каждый элемент массива может быть явно обозначен, и к
нему возможен прямой доступ через указание индекса в [ ].
- Число
элементов
в
массиве
(диапазоны
индексов)
определяется при его описании и не может быть изменено в
дальнейшем.
- <тип элементов> может быть любым, включая массив, т.е.
возможны многомерные массивы. Многомерный массив хранится так,
что самый правый индекс увеличивается первым.
- Открытыми массивами называются массивы вида:
Аrray of <тип>. Они позволяют передавать в подпрограммы массивы
различной длины.
46

47.

- Функции Low и High возвращают значение нижней и
верхней границ массива.
- Выход
значений
индекса
за
границы
массива
катастрофичен.
Примеры описания типов массивов:
Type
month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
digit=1..5;
ch= a .. z ;
a1=array[1..10,1..15] of byte;
a2=array[digit] of char;
a3=array[byte,month] of month;
a4=aray[1..5] of array[month] of array[char] of ch;
a5=array[1..5,month,char] of ch;
Массивы типа a2 – одномерный, a1,a3 – двумерные, a4,a5 –
трёхмерные.
Данные
типа
массив
могут
быть
в
виде
переменных
типизированных констант.
1) Переменные описываются в секции описания переменных.
Формат описания:
Var <идентификатор массива>:<имя типа массива>;
Пример:
var
a,b,c:a3;
d,e:a4;
Допускается совмещение описания переменных и типов
47
и

48.

Пример:
var
a,b,c:array[1..5,month,char] of ch;
хотя такое описание нежелательно по следующей причине: массивы,
описанные
таким
способом,
невозможно
передать
в
качестве
фактического параметра в подпрограмму.
2)
Типизированные
константы
типа
массив
являются
фактически переменными с заданными начальными знач ениями,
определяются в секции описания констант в виде:
Const
<идентификатор массива> : <имя типа массива>=((<элементы 1-ой
строки через запятые>, . . .< элементы n -ой строки через запятые >));
Пример определения типизированной константы - массива:
Const
A: a2=((1,2,3,4,5),(6,7,8,9,10),(11,12,13,14,15));
Примечание:
Одномерные массивы символов фактически представляют собой
строки, а поэтому начальные значения типизированных констант
могут задаваться и как строки.
Например:
Const
bb:a1=( primer );
либо как показано ранее
Const
bb:a1=( p , r , i , m , e , r );
48

49.

Ввод/вывод значений элементов массива
1) Заполнение элементов массива с клавиатуры, вывод в столбик:
a) Пример ввода/вывода одномерного массива:
Program prim;
var
a:array[1..10] of real;
n,i:integer;
begin
write( Введите n= );
readln(n);
for i:=1 to n do
begin
writeln( Введите ,i, - элемент массива );
read(a[i]);
writeln( А( ,i, )= ,a[i]:6:3);
end;
end.
б) Пример ввода/вывода двумерного массива:
Program prim;
const
nn=100;
type
ind=1..nn;
dim=array[ind,ind] of real;
var
49

50.

a:dim;
n,i,j:ind;
begin
write( Введите n= );
readln(n);
writeln( Введите массив );
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
writeln( Mассив: );
for i:=1 to n do
begin
for j:=1 to n do
write(‘a[‘,i,’,’,j,’]=‘,a[i,j]:6:3);
writeln;
end;
end.
Ввод
и
вывод
массивов
производится
поэлементно
в
соответствии с типом элементов.
Примечание:
Одномерные массивы символов фактически представляют собой
строки, а поэтому могут вводиться одним оператором Readln.
Замечание:
В памяти ПЭВМ массивы располагаются последовательно в
порядке возрастания индексов, при этом правый индекс растёт
быстрее, чем левый.
50

51.

2) Заполнение элементов массива по формуле:
Program prim;
var
a:array[1..10] of real;
i:integer;
begin
for i:=1 to 10 do
a[i]:=sin(i)*sqr(i)+1;
writeln( Mассив: );
for i:=1 to 10 do
writeln( А( ,i, )= ,a[i]:6:3);
end.
3)
Заполнение элементов массива случайными числами
(генератор псевдослучайных чисел):
Program prim;
var
a:array[1..10] of integer;
i:integer;
begin
randomize;
for i:=1 to 10 do
a[i]:=random(40);
writeln( Mассив: );
for i:=1 to 10 do
writeln( А( ,i, )= ,a[i]);
end.
51

52.

Действия над массивами
1) Однотипные массивы могут быть присвоены друг другу. При
этом все элементы массивов присваиваются друг другу.
Пример:
a:=b;
e:=d;
Но недопустимо:
a:=e; {разные типы массивов}
3)
Другие
действия:
логические,
математические,
ввод
с
клавиатуры и вывод на дисплей или принтер можно выполнять
только с отдельными элементами массива.
Обращение к элементам массива производится указанием
идентификатора массива, за которым в квадратных скобках следуют
выражения через запятую, определяющие индексы.
Пример:
a[5,jan, d ]:= s ;
d[1,pred(mar),chr(122)]:= z ;
Действия, производимые над элементами массива, соответствуют
типу элементов массива.
В массиве одновременно доступны все его компоненты. Такой
доступ называется параллельным. Поэтому возможны сортировки
элементов по убыванию значений, по возрастанию или по какому либо
другому
признаку.
Возможны
преобразования массивов.
52
также
более
сложные

53.

Примеры сортировки одномерных массивов
1) Методом пузырька .
Сортировка
неоднократном
обменом
проходе
(метод
по
пузырька )
массиву
и
заключается
перестановке
в
соседних
значений в том случае, если есть инверсия, т.е. нарушение порядка
следования элементов массива. Упорядочивание завершается, если
при последнем проходе перестановок не было.
а) Пример сортировки по возрастанию с использованием флажка:
program sort1;
const nn=100;
type
ind=1..nn;
dim=array [ind] of real;
var
i,n:ind;
a: dim;
r:real;
f:boolean;
Begin
write( Введите n= );
readln(n);
writeln( Введите массив );
for i:=1 to n do
begin
write( a[ ,i, ]= );
readln(a[i]);
end;
f:=true;
53

54.

while f do
begin
f:= false;
for i:=1 to n-1 do
if a[i]>a[i+1] then
begin
r:=a[i];
a[i]:=a[i+1];
a[i+1]:=r;
f:=true;
end;
end;
writeln( Упорядоченный массив: );
for i:=1 to n do
writeln( А( ,i, )= ,a[i]:6:3);
End.
б)
Пример
сортировки
по
возрастанию
с
использованием
вложенных циклов:
Последовательно сравниваются пары соседних элементов a[i+1] и
a[i]. Если a[i]>a[i+1], то они переставляются. Таким образом,
наибольший
элемент
станет
последним.
В
следующем
цикле
следующий по старшинству элемент станет предпоследним и т.д.
program sort2;
const n=100;
var
а:array [1..n] of real;
54

55.

i,k:ind;
r:real;
Begin
write( Введите n= );
readln(n);
writeln( Введите массив );
for i:=1 to n do
begin
write( a[ ,i, ]= );
readln(a[i]);
end;
for i:=n DownTo 2 do
for k:=2 to i do
if a[i]>a[i+1] then
begin
r:=a[i];
a[i]:=a[i+1];
a[i+1]:=r;
end;
writeln( Упорядоченный по возрастанию элементов массив: );
for i:=1 to n do
writeln( А( ,i, )= ,a[i]:6:3);
End.
2) Методом выбора.
Метод выбора заключается в фиксации последнего элемента
массива, выборе максимального элемента из оставшихся 1,…,n-1
элементов и их перестановке; фиксации предпоследнего элемента,
выбору максимального из 1,...,n-2 элементов и их перестановке и т.д.
55

56.

Т.е. ищется максимальный элемент, запоминается его номер и по
окончании цикла этот элемент переносится в конец массива, затем то
же самое выполняется для всех, кроме последнего элемента и т.д.
Таким образом, упорядочивание производится за два цикла, один
из которых по i производится от n до 2, а второй по j - от 1 до i-1.
program sort3;
const
nn=100;
type
ind=1..nn;
dim=array [ind] of real;
var
i,n,m,j: ind;
a: dim;
r:real;
Begin
write( Введите n= );
readln(n);
writeln( Введите массив );
for i:=1 to n do
begin
write( a[ ,i, ]= );
readln(a[i]);
end;
for i:=n downto 2 do
begin
m:=i;
for j:=1 to i-1 do
if a[j]>a[m] then
m:=j;
56

57.

r:=a[i];
a[i]:=a[m] ;
a[m]:=r;
end;
writeln( Упорядоченный по возрастанию элементов массив: );
for i:=1 to n do
write(a[i]:8:3);
writeln;
readln;
End.
Подпрограммы
Подпрограмма – это относительно самостоятельный
фрагмент
программы, оформленный определенным образом и снабженный
именем. Подпрограммы связаны с основной программой с помощью
параметров.
Удобство использования подпрограмм заключается в том что
будучи описанными один раз с некоторым набором формальных
параметров,
они
могут
быть
неоднократно
использованы
с
различными наборами фактических параметров.
Подпрограммы используются для сокращения текста и объёма
программ. Их использование делает программы структурированными,
более понятными, читаемыми. Подпрограммы позволяют быстро
прослеживать основной алгоритм, они проще в отладке и менее
чувствительны к ошибкам программирования.
Целесообразно
использовать
подпрограмму
тогда,
когда
в
головной программе она используется несколько раз. Но скорость
выполнения программы в этом случае уменьшается.
57

58.

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

59.

Формат описания процедуры:
Procedure <имя процедуры> (<список формальных параметров>);
begin
<Тело процедуры>
end;
<имя процедуры> – идентификатор, который должен быть
уникальным как в программе, так и в процедуре;
<список формальных параметров> – списки идентификаторов
через запятую, с указанием их типов, следующие через ; , перед
некоторыми списками следует ключевое слово var.
Замечание:
В списке формальных параметров не могут использоваться новые
типы, не описанные заранее в секции описания типов Type.
Например:
procedure prim (var a:array[1..15] of real);
<Тело процедуры> содержит те же разделы, что и программа
(label, const, type, var, procedure, function), a также исполняемую
часть
процедуры,
задающую
последовательность
выполняемых
операторов и заключенную в операторные скобки
Begin
........
End;
При
этом
параметры,
в
теле
перечисленные
процедуры
в
списке
59
фигурируют
формальных
формальные
параметров,

60.

локальные переменные, описанные внутри процедуры и глобальные
переменные, описанные во внешней программе или подпрограмме.
2. Оператор вызова процедуры
Оператор
вызова
процедуры
предназначен
для
вызова
описанной ранее процедуры с некоторым набором фактических
параметров.
Формат оператора вызова:
<имя процедуры>(<список фактических параметров>);
<список фактических параметров> – это список идентификаторов
переменных или выражений через запятые, по количеству и типу
совпадающих со списком формальных параметров.
Формальные и фактические параметры
Формальные и соответствующие им фактические параметры
делятся на три группы:
1) параметры-значения (указываются в списке формальных
параметров без ключевого слова var;
2) параметры-переменные (указываются в списке формальных
параметров с ключевым словом var;
3) параметры-подпрограммы (процедуры и функции), которые
будут рассматриваться в дальнейшем в разделе “процедурный тип”.
Параметры-значения передаются в подпрограмму через стек
(область памяти размером 16 Кб для временного хранения (обмена)
60

61.

данными) путём записи в него копий передаваемых фактических
параметров. Могут быть любого типа, за исключением файлового.
Параметры-переменные передаются в подпрограмму через стек
путём записи в него адресов фактических параметров. Могут быть
любого типа, включая файловый тип.
Вследствие
различного
механизма
передачи
фактических
параметров существуют некоторые особенности их использования:
1.
Результатом
выполнения
подпрограмм
должны
быть
параметры-переменные;
2.
В качестве фактических параметров-значений могут быть
выражения, а в качестве фактических параметров-переменных только
идентификаторы переменных;
3.
Рекомендуется
передавать
массивы
как
фактические
параметры-переменные, что экономит время на создание копии
массива в стеке и память в стеке.
Пример описания и вызова процедур:
Вводится квадратная
матрица, используя процедуру, рассчитать произведение элементов
заданного столбца.
program prim;
const nn=20;
type
ind=1..nn;
matr=array[ind,ind] of real;
var
k,n,i,j:ind;
a:matr;
pr:real;
procedure proiz(n,k:ind; var a:matr; var pr:real);
var
i:ind;
61

62.

begin
pr:=1;
for i:=1 to n do
pr:=pr*a[i,k];
end;
Begin
write( Введите n= );
readln(n);
write( Введите номер столбца= );
write( k= );
readln(k);
writeln( Введите матрицу: );
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
proiz(n,k,a,pr);
writeln( pr= ,pr:6:2);
readln;
End.
Стандартные процедуры – READ, WRITE, READLN, WRITELN и т.д.
Функции
Функции предназначены для вычисления некоторого результата,
присваиваемого имени функции.
Основное различие между процедурой и функцией состоит в том,
что
процедура
только
выполняет
какую-либо
законченную
последовательность действий, не возвращая результата работы в
основную программу, а функция и выполняет действие и возвращает
62

63.

результат. Вызов функции может использоваться нар яду с другими
операндами в выражениях.
1) Описание функций
Описание состоит из заголовка и тела функции.
Формат описания функции:
Function <имя функции> (<список формальных параметров>):
<тип функции>;
begin
<Тело функции>
end;
<имя
функции>

идентификатор,
который
должен
быть
уникальным как в программе, так и в функции;
<список формальных параметров> – аналогичен используемому в
процедурах (в функциях может отсутствовать).
<тип функции> – тип присваиваемого имени функции результата
(может быть простого типа, строкового и типа указателя, однако не
может быть новым типом, не описанным заранее в секции описания
типов Type).
Например:
function prim(x,y:real):string[20];
<Тело
функции>
исключением,
что
аналогично
в
теле
телу
функции
процедуры,
обязателен
за
оператор,
присваивающий имени функции значение некоторого выражения.
63
тем

64.

2) Вызов функции
Для вызова функции следует в выражении, где используется её
значение,
указать
имя
функции
со
<списком
фактических
параметров>.
Вызов функции:
<имя функции>(<список фактических параметров>);
<список
фактических
параметров>
аналогичен
списку
фактических параметров процедур.
Пример
возведения
описания
и
вызова
положительного
функций:
числа
в
Написать
некоторую
программу
вещественную
степень ,т.е. C=A B (A>0) в соответствии с очевидным соотношением
С = eB ln A
program prim;
var
a,b,c: real;
k: shortint;
function z (x,y:real; var k:shortint): real;
begin
k:=0;
if x>0 then
z:=exp(y*ln(x));
if x=0 then
z:=0;
if x<0 then
begin
z:=exp(y*ln(x));
k:=-1
64

65.

end;
end;
Begin
write ( a= );
readln(a);
write( b= );
readln(b);
c:=z(a,b,k);
writeln( c= ,c:10:3);
if k=-1 then
writeln( При
отрицательном
аргументе
возможна
ошибка
вычислений );
readln;
End.
Стандартные функции – CHR, ORD, математические функции и т.д.
Рекурсия
Язык Паскаль допускает, чтобы подпрограмма вызывала самое
себя (рекурсивное обращение). Эта возможность связана с тем, что
при каждом обращении фактические параметры записываются в стек,
при
этом
сохраняются
фактические
параметры
предыдущих
обращений. В ряде случаев рекурсивное обращение может быть более
компактным и эффективным, но существует опасность переполнения
стека.
Пример рекурсивной функции (вычисление факториала) на основе
формулы n!=n*(n-1)!
(integer 7!, longint 15!)
65

66.

Function fact (n:byte):extended;
Begin
If n=0 then
fact:=1
else
fact:=n*fact(n-1);
End;
{в стек заносятся значения n и fact}
Program factorial;
{$N+,E+,S+}
var
n:integer;
{$I fact.pas}
Begin
Write( n= );
readln(n);
Write( n!= ,fact(n));
End.
В такой программе может произойти переполнение стека, так как
значения n и fact хранятся в стеке, поэтому лучше использовать
следующую функцию:
function fact (n:byte):extended;
var
F:extended;
Begin
If n=0 then
fact:=1
else
begin
66

67.

F:=fact(n-1);
fact:=n*F;
end;
End;
Опережающее описание forward
Если одна подпрограмма использует другую, а та, в свою
очередь, эту первую, то возникает проблема размещения этих
подпрограмм в программе. Ни одну подпрограмму нельзя поместить
перед
другой.
Чтобы
устранить
эту
проблему
используетс я
опережающее описание.
Опережающее описание – это заголовок подпрограммы, вместо
тела которого используется ключевое слово Forward (впереди).
Пример:
Процедура А вызывает процедуру В, а В, в свою очередь,
вызывает А.
Procedure B (i:byte);
Forward;
End;
Procedure A (j:byte);
Begin
……..
B(i);
……..
…….Procedure B[(i:byte)];
Begin
…….. A(j);
End;
67

68.

Список формальных параметров процедуры В может быть
опущен.
Строковый тип данных
Тип String является стандартным и не требует описания в секции
Type.
Тип String[ ] является нестандартным и может быть описан в
секции Type либо указан сразу при описании строковых переменных
в секции Var.
Данные
строкового
типа
представляют
собой
последовательность символов, максимальная длина которых равна
255. Существуют 3 типа данных:
1)
Переменные описываются в секции описания переменных
Var и могут принимать различные значения
Пример:
Var
Str:string [15];
MaxStr:string;
Пример:
Type
S=string [15];
Var Str:S;
2) Константы без имени представляют собой последовательность
символов, заключенных в апострофы, и могут использоваться в
строковых выражениях
3) Константы именованные определяются в секции Const
68

69.

Пример: Consr A=’Pascal’ ;
4) Типизированные константы описываются в секции Const и
представляют
собой
фактически
переменные
с
заданными
начальными значениями.
Пример: Const : string[15]=’First program’;
Обращение к элементам строки
По
существу
строки
эквивалентны
одномерным
массивам
символов, таким образом, описания
String [15] и Array [1..15] of char эквивалентны.
К элементу строки можно обращаться также как к элементу
массива, т.е. указанием имени переменной, за которым в квадратных
скобках следует выражение, определяющее номер элемента.
Пример:
Str:=’Turbo-Pascal’;
Writeln(Str[6]);
Writeln(Str[7]);
Операторы выведут на печать символы - и P.
Действия над строками
Присваивание. Переменной или типизированной константе
можно присвоить
Сложение строк или конкатенация.
Пример:
Str:= a + b ;
Str:=Str+ c ;
Str:= Turbo + - + Pascal ;
69

70.

Примечание:
Если
длина
выражения
справа
превосходит
длину
строки,
указанную при описании типа, то лишние символы отсекаются.
Операции отношения (<, >, <=, >=, =, <>). Выполняются слева
направо в соответствии с кодами символов. Если длина одной строк и
меньше длины другой, то недостающим символам присваивается
нулевой код.
Таким образом, справедливы следующие соотношения:
Turbo > Pascal ;
X < X6
Строки можно вводить с помощью Readln и выводить с
помощью Writeln.
Процедуры и функции для работы со строками
Процедуры и функции для работы со строками находятся в
модуле SYSTEM.
Приведем заголовки процедур и функций со списком формальных
параметров.
Функции
1) Function Length (S:string):byte;
Функция присваивает имени текущий размер строки S.
Пример:
S:= Turbo-Pascal ;
L:=Length(S);
Writeln(L);
Результат: L=12.
70

71.

2)Function Pos(SubStr,S:string):byte;
Осуществляет поиск последовательности символов
SubStr в
строке S. Результат равен позиции первого символа строки S, начиная
с которого SubStr входит в S, или 0, если она не найдена.
Пример:
S:= Turbo-Pascal ;
L:=Pos( Pascal ,S);
Writeln(L);
Результат: L=7.
3) Function Copy(S:string; Index:byte;Count:byte):string;
Функция
предназначена
для
копирования
Count
символов,
начиная с позиции Index, из строки S.
Пример:
S:= Turbo-Pascal ;
Writeln(Copy(S,1,5));
Результат: Turbo.
4) Function Concat(S1[,S2, ….,Sn]:string):string;
Объединяет несколько
строк в одну;
усекает, если число
символов больше 255. S1,S2,…Sn – объединяемые строки. То, что
приведено в квадратных скобках может быть опущено.
Пример:
Writeln(Concat( Turbo , - , Pascal ));
Результат: Turbo-Pascal.
5) Function UpCase(ch:char):char;
Функция переводит строчную букву ch в прописную.
Пример:
Var
71

72.

s:string;
i:byte;
begin
s:= primer ;
for i:=1 to length(s) do
s[i]:=UpCase(s[i]);
Writeln(s);
Результат: PRIMER.
ПРОЦЕДУРЫ
1) Procedure Str(X[:M[:N]]; var S:string);
Процедура преобразует десятичное число в строку.
X – выражение вещественного или целого типа, определяющее
преобразуемое число;
S – строка, в которую записывается символьное представление
числа;
M, N – константы целого типа, задающие формат выводимого
числа.
Пример:
X:=15.8;
Str(X:8:3,S);
Writeln(S);
Результат: _ _15.800 .
2) Procedure Val (S:string; var V; var Code:integer);
Преобразует символьное представление числа во внутреннее
представление (двоичную форму).
S – строка с символьным представлением числа;
72

73.

V – переменная целого или вещественного типа для записи
внутреннего представления числа;
Code – номер неправильного символа , либо 0 – если все символы
правильные.
Пример:
S:= _ _ 15.800 ;
Val (S,X,C);
L:=Pos( Pascal ,S);
Результат: X=15.8; C=0.
3) Procedure Insert (Source:string; var S:string; Index:byte);
Помещает подстроку Source в строку S с позиции Index. Если
длина
строки
превышает
255
символов,
то
лишние
символы
отбрасываются.
Пример:
S:= Turbo-Pascal ;
Insert ( - , S, 6);
Writeln(S);
Результат: Turbo - -Pascal.
4) Procedure Delete (var S:string; Index,Count : byt e);
Процедура удаляет Count символов из строки
позиции Index.
Пример:
S:= Turbo-Pascal ;
Delete (S, 6,1);
Writeln(S);
Результат: TurboPascal.
73
S, начиная с

74.

Литература
1. Фаронов В.В. Основы Турбо-Паскаля. – М.: Учебноинженерный центр "МВТУ-ФЕСТО-ДИДАКТИК", 1993. – 256 с.
2. Гусева А.И. Учимся программировать: Pascal 7.0. – М.: "ДиалогМИФИ", 2000. – 256 с.
74

75.

Оглавление
Работа в среде Turbo Pascal ................................................................... 3
Основные функциональные клавиши ........................................ 3
Режимы работы ............................................................................ 4
Команды работы редактора ........................................................ 5
Команды работы с блоком .......................................................... 5
Элементы языка Паскаль ........................................................... 6
Правила языка Паскаль .............................................................. 7
Правила записи выражений ........................................................ 7
Типы данных в Паскале .......................................................................... 8
Целый тип .................................................................................... 9
Вещественный тип ..................................................................... 11
Логический тип (BOOLEAN) .................................................... 11
Символьный тип (CHAR) .......................................................... 13
Перечисляемый (перечислимый) тип (TYPE) ......................... 14
Тип диапазон .............................................................................. 16
Выражения и приоритеты ......................................................... 17
Структура программы на Turbo Pascal ............................................. 18
Операторы Turbo Pascal ........................................................................ 21
Оператор присваивания ( := ) ...................................................
Операторы ввода – вывода .......................................................
Условный оператор IF ...............................................................
Условный оператор CASE .........................................................
Операторы цикла .......................................................................
Оператор FOR ............................................................................
Оператор WHILE .......................................................................
Оператор REPEAT .....................................................................
Операторы BREAK и CONTINUE .............................................
Оператор GOTO .........................................................................
Пустой оператор ........................................................................
Составной оператор ...................................................................
21
22
27
31
34
34
38
40
41
42
44
45
Массивы .................................................................................................... 45
Ввод/вывод значений элементов массива ................................ 49
Действия над массивами ........................................................... 52
Примеры сортировки одномерных массивов ........................... 53
Подпрограммы ......................................................................................... 57
Процедуры .................................................................................. 58
Функции ..................................................................................... 62
Рекурсия ..................................................................................... 65
Строковый тип данных ......................................................................... 68
Действия над строками ............................................................. 69
Процедуры и функции для работы со строками ...................... 70
Литература ................................................................................. 74
75

76.

Учебное издание
Коротких Татьяна Николаевна
ИНФОРМАТИКА
Учебное пособие по Turbo Pascal
Компьютерная верстка: Коротких Т.Н.
ЛР №
от
Подписано в печать с оригинала-макета
Формат 60х80 1/8. Бумага офсетная. Гарнитура Times. Печать
офсетная.
Усл. печ. л. 5,2. Тираж
. Заказ №
Издательство
76
English     Русский Правила