Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и языки программирования. Учебно-методический комплекс.pdf
X
- •1. СИЛЛАБУС ДИСЦИПЛИНЫ ДЛЯ СТУДЕНТОВ
- •Тема 1. Понятие алгоритма, свойства, типы, исполнители
- •Структура программы.
- •Имена, ключевые слова и знаки операций
- •Тема 7. Символьные типы данных.
- •Обработка символьных данных.
- •Тема 9. Строки. Строковые процедуры.
- •Функции
- •Тема 11. Множества (Set)
- •Работа с текстовыми файлами
- •Тема 13. Записи
- •Тема 14. Построение изображений на экране
- •Отображение точки на экране
- •Отображение линий на экране
- •Построение прямоугольников на экране
- •Построение многоугольников
- •Построение дуг, эллипсов и окружностей
- •Основная литература
- •Дополнительная литература
- •ГЛОССАРИЙ

друг от друга точкой с запятой. Оператор описания var содержит
описание используемых в программе величин. Для каждой из них
задается имя, по которому к ней будут обращаться, и ее тип.
На алгоритмическом языке Паскаль любой алгоритм простой
структуры имеет следующий стандартный вид:
Program <имя (заголовок) алгоритма>;
Uses <список подключаемых библиотек, если они нужны>;
{ комментарии, если нужны }
Label <список меток (имен участков программ), если они
нужны>; { комментарии }
Const <список констант (не изменяемых величин), если они
нужны>; { комментарии }
Type <список имен и типов структур данных, если они нужны>;
{ комментарии }
Var <список имен и типов переменных, если они нужны>;
{ комментарии }
{ < условия задачи и применимости алгоритма > }
{ < цель составления и выполнения алгоритма > }
Begin
<команды ввода входных данных, если они нужны>;
{ комментарии }
<тело алгоритма (команды управления и преобразования
алгоритма)>;
{ комментарии }
<команды вывода результатов (выходных данных), если они
нужны>;
{ комментарии }
End.
Алфавит и лексемы
Все тексты на языке пишутся с помощью его алфавита.
Алфавит Паскаля включает:
• прописные и строчные латинские буквы, знак подчерки-
вания _ ;
• цифры от 0 до 9 ;
• специальные символы, например +, *, { и @ ;
• пробельные символы: пробел, табуляцию и переход на
новую строку.
11

Из символов составляются лексемы (tokens ), то есть мини-
Десятич-
Шестнадцате
С плавающей
С
2
$0101
–0.26
1.2e4
'k'
'абырвалг'
15
$FFA4
.005
0.1E–5
#186
'I''m fine'
21.
^M
мальные единицы языка, имеющие самостоятельный смысл:
• константы;
• имена (идентификаторы);
• ключевые слова;
• знаки операций;
• разделители (скобки, точка, запятая, пробельные символы).
Лексемы языка программирования аналогичны словам естественного языка. Например, лексемами являются число 128, имя Aliya,
ключевое слово goto и знак операции сложения +. Компилятор при
синтаксическом разборе текста программы определяет границы
одних лексем по другим, например разделителям или знакам
операций. Из лексем строятся выражения и операторы. Рассмотрим
каждый вид лексем подробнее.
Константы
Константа — величина, не изменяющая свое значение в
процессе работы программы. Классификация констант Паскаля
приведена в таблице 1.
Таблица 1. Классификация констант Паскаля
Целые Вещественные
Символь-
ные
-ричные
точкой
порядком
ные
Стро-
ковые
Десятичные целые константы представляются в естественной
форме. Шестнадцатеричная константа состоит из шестнадцатеричных
цифр (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F), предваряемых знаком $.
Вещественные константы записываются с точкой перед дроб-
ной частью. Либо целая, либо дробная часть могут отсутствовать.
Вещественная константа с порядком представляется в виде мантиссы и порядка. Мантисса записывается слева от знака E или e,
порядок — справа от знака. Значение константы равно произведению
мантиссы и возведенного в указанную в порядке степень числа 10. В таблице 1.1 представлены числа 1,2 104 и 0,1 10–5 . Пробелы
внутри числа не допускаются.
12

Символьные константы служат для представления любого
символа из набора, используемого в данном компьютере. Так как под
каждый символ отводится 1 байт, всего используется 256 символов.
Каждому символу соответствует свой код. В операционной системе
MS-DOS для кодировки символов используется стандарт ASCII,
являющийся международным только в первой половине кодов (от 0
до 127), вторая половина кодов (от 128 до 255) является национальной и различна для разных стран. Первые 32 символа являются управляющими: хотя многие из них имеют графическое
представление, предназначены они для передачи управляющих
сигналов внешним устройствам, например монитору, принтеру или
модему. Символьные константы записываются в одной из трех форм:
1. Символ, заключенный в апострофы.
2. Десятичный код символа, предваряемый знаком #. Приме-
няется для представления символов, отсутствующих на клавиатуре
(в таблица 1.1 в виде #186 приведено представление символа ¦ ).
3. Буква, предваряемая знаком ^. Используется для представ-
ления управляющих символов. Код буквы должен быть на 64 больше,
чем код представляемого таким образом символа (в таблица 1.1
в
виде ^M представлен символ с кодом 13).
Строковая константа — это последовательность любых ASCII-
символов, расположенная на одной строке и заключенная в апострофы. Если требуется представить сам апостроф, он дублируется.
Максимальная длина строковой константы — 126 символов.
Имена, ключевые слова и знаки операций
Имена в программах служат той же цели, что и имена людей, —
чтобы обращаться к программным объектам и различать их, то есть
идентифицировать. Поэтому имена также называют идентификато-
рами.
Имена дает программист, при этом следует соблюдать следующие правила:
1. имя должно начинаться с буквы (или знака подчеркивания);
2. имя должно содержать только буквы, знак подчеркивания и
цифры;
3. прописные и строчные буквы не различаются;
4. длина имени практически не ограничена.
Например, правильными именами будут Vasia, A, A13, A_and_B
и _____, а неправильными — 2late, Big gig и Sюр. Имена даются эле-
13

ментам программы, к которым требуется обращаться: переменным,
Порядковые (дискретные) типы данных
Арифметические типы данных
Целые
Вещественные
Логический
Символьный
shortint
longint
real
comp
константам, процедурам, функциям, меткам и т. д.
Ключевые (зарезервированные) слова — это идентификаторы,
имеющие специальное значение для компилятора. Их можно исполь-
зовать только в том смысле, в котором они определены. Например,
для оператора перехода определено ключевое слово goto, а для
описания переменных — var. Имена, создаваемые программистом, не
должны совпадать с ключевыми словами.
Знак операции — это один или более символов, определяющих
действие над операндами. Внутри знака операции пробелы не допускаются. Например, операция сравнения 'меньше или равно' обозначается <=, а целочисленное деление записывается как div. Операции
делятся на унарные (с одним операндом) и бинарные (с двумя).
Тема 3. Предопределенные типы переменных (простые),
стандартные функции
Переменные и типы данных
Переменная - это программный объект, значение которого
может изменяться в процессе работы программы.
Тип данных - это характеристика диапазона значений, которые
могут принимать переменные, относящиеся к этому типу данных.
Все используемые в программе переменные должны быть описаны в специальном разделе var по следующему шаблону:
var <имя_переменной_1> [,<имя_переменной_2,_>:<имя_типа_1>;
<имя_переменной_3> [,<имя_переменной_4,_>:<имя_типа_2>;
Язык Pascal обладает большим набором разнообразных типов
данных, однако сейчас мы укажем лишь некоторые из них (см. табл.1).
Обо всех же типах данных мы поговорим в следующей лекции, там же
приведем и различные примеры описания переменных
Таблица 1. Базовые типы данных языка Pascal
boolean
(литерный)
char
byte
integer
word
14
single
double
extended

Компиляторы языка Pascal требуют, чтобы сведения об объеме
памяти, необходимой для работы программы, были предоставлены до
начала ее работы. Для этого в разделе описания переменных (var)
нужно перечислить все переменные, используемые в программе.
Кроме того, необходимо также сообщить компилятору, сколько
памяти каждая из этих переменных будет занимать. А еще было бы
неплохо заранее условиться о различных операциях, применимых к
тем или иным переменным...
Все это можно сообщить программе, просто указав тип будущей
переменной. Имея информацию о типе переменной, компилятор
"понимает", сколько байтов необходимо отвести под нее, какие
действия с ней можно производить и в каких конструкциях она может
участвовать.
Для удобства программистов в языке Pascal существует множество стандартных типов данных и плюс к тому возможность создавать новые типы.
Конструируя новые типы данных на основе уже имеющихся
(стандартных или опять-таки определенных самим программистом),
нужно помнить, что любое здание должно строиться на хорошем
фундаменте. Поэтому сейчас мы и поговорим об этом "фундаменте".
На основании базовых типов данных строятся все остальные
типы языка Pascal, которые так и называются: конструируемые.
Типы данных, конструируемые программистом, описываются в
разделе type по следующему шаблону:
type <имя_типа> = <описание_типа>;
Например:
type lat_bukvy = 'a'..'z','A'..'Z';
Базовые типы данных являются стандартными, поэтому нет
нужды описывать их в разделе type. Однако при желании это тоже
можно сделать, например, дав длинным определениям короткие
имена. Скажем, введя новый тип данных
type int = integer;
можно немного сократить текст программы.
Стандартные конструируемые типы также можно не описывать в разделе type. Однако в некоторых случаях это все равно
приходится делать из-за требований синтаксиса. Например, в
списке параметров процедур или функций конструкторы типов
использовать нельзя.
15

Порядковые типы данных
Количество
байтов
битов
shortint
1
8
-128..127
-27..27-1
Среди базовых типов данных особо выделяются порядковые
типы. Такое название можно обосновать двояко:
1. Каждому элементу порядкового типа может быть сопо-
ставлен уникальный (порядковый) номер. Нумерация значений
начинается с нуля. Исключение - типы данных shortint, integer и
longint. Их нумерация совпадает со значениями элементов.
2. Кроме того, на элементах любого порядкового типа опре-
делен порядок (в математическом смысле этого слова), который
напрямую зависит от нумерации. Таким образом, для любых двух
элементов порядкового типа можно точно сказать, который из них
меньше, а который - больше2).
Типы данных, относящиеся к порядковым
Опишем теперь порядковые типы данных более подробно.
1. Логический тип boolean имеет два значения: false и true, и для
них выполняются следующие равенства:
2. ord(false)=0, ord(true)=1, false<true,
3. pred(true)=false, succ(false)=true,
4. inc(true)=false, inc(false)=true,
dec(true)=false, dec(false)=true.
5. В символьный тип char входит 256 символов расширенной
таблицы ASCII (например, 'a', 'b', 'я', '7', '#'). Номер символа, возвращаемый функцией ord(), совпадает с номером этого символа в
таблице ASCII.
6. Целочисленные типы данных сведем в таблицу:
Тип данных
byte
integer
word
longint
1
2
2
4
8
16
16
32
0..255
-32768..32767
0..65535
-2147483648..2147483647
Диапазон
0..28-1
15
..215-1
-2
16
0..2
-2
-1
31
..231-1
перечислением их элементов. Например:
7. Перечисляемые типы данных задаются в разделе type явным
8. type week =(sun,mon,tue,wed,thu,fri,sat)
0 1 2 3 4 5 6
16

Напомним, что для этого типа данных:
Количество
байтов
Диапазон
(абсолютной величины)
single
4
1.5*10
-45
..3.4*1038
inc(sat) = sun, dec(sun) = sat.
9. Интервальные типы данных задаются только границами
своего диапазона. Например:
10. type month = 1..12;
budni = mon..fri;
11. Программист может создавать и собственные типы данных,
являющиеся комбинацией нескольких стандартных типов. Например:
type valid_for_identifiers = 'a'..'z','A'..'Z','_','0..9';
Этот тип состоит из объединения нескольких интервалов,
причем в данном случае изменен порядок латинских букв: если в
стандартном типе char 'A' < 'a', то здесь, наоборот, 'a' < 'A'. Для
величин этого типа выполняются следующие равенства:
inc('z')='A'; dec('0')='_', pred('a')='9'; ord('b')= 2.
Вещественные типы данных
Напомним, что эти типы данных являются арифметическими, но
не порядковыми.
Тип
real
double
extended
comp
6
8
10
8
2.9*10
5.0*10
3.4*10-
-2
-39
-324
4932
63
+1..263-1
..1.7*1038
..1.7*10
..1.1*10
308
4932
Операции и выражения
Арифметические операции
Как мы уже упоминали, для каждого типа данных определены
действия, применимые к его значениям. Например, если переменная
относится к порядковому типу данных, то она может фигурировать в
качестве аргумента стандартных функций ord(), pred() и succ() (см. п.
"Совместимость типов данных" ниже). А к вещественным типам эти
функции применить невозможно.
Итак, поговорим теперь об операциях - стандартных действиях,
разрешенных для переменных того или иного базового типа данных.
Основу будут составлять арифметические операции, но, конечно же,
17

мы не забудем и о логическом типе данных (операции, определенные
для значений символьного типа, будут подробно рассмотрены в
лекции 5).
Замечание: Все перечисленные ниже операции (за исключением унарных '-' и not) требуют двух операндов.
1. Логические операции (and, or, not, xor) применимы только к
значениям типа boolean. Их результатом также служат величины типа
boolean. Приведем таблицы значений для этих операций:
not and tru e false or tru e false xor true f alse
true
false
fa lse true
true f alse
tru e false t rue
false false false
true true true
tru e false false
fa lse true
true f alse
2. Операции сравнения (=, <>, >, <, <=, >=) применимы ко всем
базовым типам. Их результатами также являются значения типа
boolean.
3. Операции целочисленной арифметики применимы, как легко
догадаться, только к целым типам. Их результат - целое число, тип
которого зависит от типов операндов.
a div b - деление а на b нацело (не нужно, наверное, напоминать,
что деление на 0 запрещено, поэтому в таких случаях операция
выдает ошибку). Результат будет принадлежать к типу данных,
общему для тех типов, к которым принадлежат операнды. Например,
(shortint div byte = integer). Пояснить это можно так: integer - это
минимальный тип, подмножествами которого являются одновременно и byte, и shortint.
a mod b - взятие остатка при делении а на b нацело. Тип
результата, как и в предыдущем случае, определяется типами
операндов, а 0 является запрещенным значением для b. В отличие от
математической операции mod, результатом которой всегда является
неотрицательное число, знак результата "программистской" операции
mod определяется знаком ее первого операнда. Таким образом, если в
математике (-2 mod 5)=3, то у нас (-2 mod 5)= -2.
a shl k - сдвиг значения а на k битов влево (это эквивалентно
умножению значения переменной а на 2
k
). Результат операции будет
иметь тот же тип, что и первый ее операнд (а).
a shr k - сдвиг значения а на k битов вправо (это эквивалентно
k
делению значения переменной а на 2
нацело). Результат операции
будет иметь тот же тип, что и первый ее операнд (а).
18

and,or,not,xor - операции двоичной арифметики, работающие с
битами двоичного представления целых чисел, по тем же правилам,
что и соответствующие им логические операции.
4. Операции общей арифметики (+, -, *, /) применимы ко всем
арифметическим типам. Их результат принадлежит к типу данных,
общему для обоих операндов (исключение составляет только
операция дробного деления /, результат которой всегда относится к
вещественному типу данных).
Другие операции
Помимо арифметических, существуют и другие операции,
специфичные для значений некоторых стандартных типов данных
языка Pascal. Эти операции мы рассмотрим в соответствующих
разделах:
#, in, +, *, [] : см. лекцию 5
@, ^ : см. лекцию 10
Тема 4. Операторы Ввода-вывода
Оператор вывода WRITELN
Операторы write и writeln предназначены для вывода на экран
информации о действиях, которые необходимо совершить поль-
зователю. Эти операторы выдают подсказку, предназначенную для
создания комфортных условий работы пользователя.
Текст, находящийся в апострофах, и является подсказкой,
выводится на экран без изменения, а вместо имени переменной Sum
выводится число. Посредством одного оператора write или writeln на
экран монитора могут быть выведены одновременно несколько
константных сообщений и/или несколько значений различных переменных. Например:
Необходимо обратить особое внимание на корректную расста-
новку запятых. Все символы, заключенные между открывающимися
и закрывающимися апострофами в списке переменных в операторах
write и writeln, выводятся на экран как элементы текста.
19

Окончание Ln, как и в операторе readln, означает перенос
курсора на начало следующей строки на экране.
Так, к примеру, может выглядеть программа:
В операторе READLN в круглых скобках указываются имена
переменных, которым будут присвоены вводимые с клавиатуры
значения. Тем самым компилятору сообщается информация, необ-
ходимая ему для определения места размещения в памяти принятой
информации. Число переменных в списке может быть любым: если
переменных больше одной, то они разделяются запятыми. В операторе Readln окончание Ln означает, что значения переменных
вводятся поочередно (в столбец), т.к. окончание означает переход
курсора на следующую строку экрана после ввода значений.
Например:
Ввод данных осуществляется следующим образом:
Если в операторе нет окончания Ln, то ввод данных осуществляется в одну строку через запятую.
Ввод данных осуществляется следующим образом:
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
