Описание переменных
Перед началом выполнения программы под все переменные (за исключением динамических) должно быть выделено место в памяти ЭВМ. То есть все переменные, используемые в программе, должны быть описаны и транслятор «должен знать» о них. В некоторых языках программирования используются правила умолчания, так в Фортране тип и размер переменной определяется по первой букве имени, и часто этот раздел отсутствует: при встрече новой переменной по тексту программы для нее автоматически определяется размер и выделяется место (она заносится в таблицу). Но язык Паскаль разрабатывался как «надежный» язык программирования, с максимально возможным поиском формальных ошибок. Поэтому в нем все переменные, участвующие в программе, должны быть описаны в данном разделе.
Общий вид описания переменных выглядит следующим образом:
Var <имя1>[,<имя2>...] :<тип>; ...
Например:
Var x:real;
i,j,k:integer;
Так как по свойству массовости алгоритма переменные присутствуют в каждой программе, то в реальных программах всегда в наличии и этот раздел.
Раздел описания процедур и функций будет рассмотрен далее.
Контрольные вопросы
1. Какие группы символов входят в алфавит языка Паскаль?
2. Что такое служебные слова?
3. Приведите примеры метасимволов для описания общих конструкций языка программирования.
4. Из каких элементов состоит программа на языке Паскаль?
5. Что такое в структуре программы блок?
6. Какие бывают разделы описаний?
7. Как отделяются операторы друг от друга?
8. Как записываются комментарии?
9. Для чего используются идентификаторы (имена)?
10. Какие есть правила образования идентификаторов (имен)?
11. Что такое метка и для чего они используются?
12. Каким образом рекомендуется располагать конструкции программы для ее большей наглядности?
13. Каким образом описываются метки?
14. Какие различия между константами и переменными?
15. Как описываются константы?
16. Как определяется тип описываемых констант?
17. Что такое типизированные константы?
18. Как описываются типы?
19. Как описываются переменные?
20. Какой раздел описаний чаще всего присутствует в простых программах?
Глава 3. Простые типы данных
Иерархия типов
В Паскале любая переменная характеризуется своим типом. Под типом здесь понимается множество значений, которые может принимать переменная, и множеством операций, допустимых над данной переменной.
Паскаль является типизированным, или статическим языком, то есть тип переменной определяется при ее описании и не может быть изменен в процессе выполнения программы. Транслятором контролируется допустимость операций с величинами данного типа, чем повышается надежность программы.
Паскаль имеет развитую систему типов. На основе стандартных типов можно конструировать данные произвольной структуры и сложности, адекватно отражающие информационную природу задачи, используя раздел описания типов.
Турбо-Паскаль наследует систему типов стандартного языка, но несколько расширен, что представлено на схеме рис. 3.1.
Базовыми являются стандартные типы, на основе которых по определенным правилам образуются все остальные. Новые типы, появившиеся в Турбо-Паскале, отмечены звездочкой, в языке Delphi введены и еще дополнительные типы. Каждому типу соответствует свое имя, указываемое при описании переменных или введении новых типов.
Рис. 3.1. Иерархия стандартных типов языка Паскаль.
Целые типы
В Паскале есть только один целый тип – Integer. В Турбо-Паскале это группа из пяти типов, обозначающих множества целых чисел в разных диапазонах. Их характеристики приведены в табл. 3.1.
Таблица 3.1. Целые типы данных
Обозначение целого типа | Диапазон значений | Размер памяти в байтах |
Shortint | -128...127 | |
Integer | -32768...32767 | |
Longint | -2 147 483 648...2 147 483 647 | |
Byte | 0...255 | |
Word | 0...65535 |
Целая константа – это последовательность цифр со знаком или без знака. Константы записываются в десятичной системе счисления, но в Турбо-Паскале может использоваться и шестнадцатеричная. В этом случае перед числом ставится знак $ и разрешается дополнительно к цифрам использовать буквы от А до F ($f5). Обычно шестнадцатеричная система счисления используется с целыми типа Byte и Word. Пример описания типа:
Const X:Word=$ff25;
Var i:byte;
l,m:integer;
Над целыми значениями допустимы следующие арифметические операции:
+ сложение,
- вычитание,
* умножение,
/ деление.
Если первые три операции дают целый точный результат, то последняя – вещественный, который может быть приближенным, например 1/3=0.3333333. Для точного выполнения деления используются операции целочисленной арифметики:
div – деление нацело;
mod– остаток от целочисленного деления. Например:
1 div 3 = 0
1 mod 3 = 1
Кроме этого, над целыми числами в Турбо-Паскале допускается применять логические операции, обычно над данными типа Byte и Word. Так же над всеми простыми типами данных, включая целые, допустимо использование операций отношения (сравнения). Эти два класса операций будут рассмотрены с логическим типом данных.
Вещественные типы
В Паскале есть только один вещественный тип – Real. В Турбо-Паскале это группа из пяти типов, обозначающих множества вещественных чисел в разных диапазонах и с различной точностью, ориентированных на представление информации в конкретных процессорах – фирмы Intel. Их характеристики приведены в табл. 3.2.
Таблица 3.2. Вещественные типы данных
Обозначение типа | Диапазон значений | Число десятичных цифр мантиссы | Размер памяти в байтах |
Real | 2.9*10-39 ... 1.7*10+38 | 11-12 | |
Single | 1.5*10-45 ... 3.4*10+38 | 7-8 | |
Double | 5.0*10-324 ... 1.7*10+308 | 15-16 | |
Extended | 3.4*10-4932 ... 1.1*10+4932 | 19-20 | |
Comp | -9.2*10+18 ...9.2*10+18 | 19-20 |
Использование последних четырех типов возможно только с использованием математического сопроцессора (должна быть включена соответствующая опция транслятора). Тип Comp хотя и считается вещественным, но на самом деле содержит целые числа из весьма большого диапазона.
Вещественные константы имеют две формы представления: с фиксированной и плавающей точкой. В первом случае число представляется как целая и дробная часть:
[<знак>]<целая часть>.<дробная часть>
Наличие точки является признаком вещественного типа числа.
В представлении с плавающей точкой, или экспоненциальном, число условно разбивается на две части: мантиссу и порядок (иначе называемый характеристикой), поэтому в общем виде число выглядит как:
[<знак мантиссы>]<целая часть мантиссы> [.<дробная часть мантиссы>] E [<знак порядка>]<порядок>
Здесь буква Е является разделителем, отделяющим мантиссу от порядка или характеристики. Числа представляются только в десятичной системе счисления, например
1234.5610 = 1.23456E3 ( 1,23456×103) = 1234.56E0 ,
то есть положение десятичной точки зависит от значения порядка и может изменяться.
Таким образом, признаком вещественного числа является наличие точки или разделителя. Так, число «единица» может быть представлено в трех разных форматах:
1Е0 – вещественное число с плавающей точкой;
1.0 – вещественное число с плавающей точкой;
1 – целое число.
Над вещественными значениями допустимы следующие операции:
+ сложение;
- вычитание;
* умножение;
/ деление.
Все они дают вещественный результат, если хотя бы один операнд вещественный.
Применение операций отношения дает логический результат.
Логический тип
Логический тип основан на правилах Булевой алгебры, широко используемой в цифровой электронике. Этот тип определяет всего два значения True (истина) и False (ложь), которые и являются константами. Описывается этот тип словом Boolean, определенным как
Type Boolean = (False,True);
Над значениями логического типа определены следующие операции:
NOT – «НЕ», логическое отрицание или инверсия, в отличие от остальных выполняется над одним операндом (унарная операция);
OR – «ИЛИ», логическое сложение или дизъюнкция;
AND – «И», логическое умножение или конъюнкция;
XOR – «исключающее ИЛИ», сложение по модулю 2 (в стандартном Паскале отсутствует).
Пусть А и В – логические значения, тогда результат операций будет определяться по табл. 3.3:
Таблица 3.3. Логические операции
А | В | not A | A or B | A and B | A xor B |
True | True | False | True | True | False |
True | False | False | True | False | True |
False | True | True | True | False | True |
False | False | True | False | False | False |
В Паскале, как и в цифровой электронике, True кодируется единицей, а False – нулем (0 – низкое напряжение, 1 – высокое; при использовании обратной логики – наоборот). Поэтому логические операции разрешены не только над логическими значениями, но и над целыми, представляемыми в двоичной системе счисления. Например, если А=21 (101012), а В=9 (10012), и они описаны как байты, то:
not A = 111010102 = 23410
A or B = 000111012 = 2910
A and B = 00000001
Обычно их используют над беззнаковыми целыми типа Byte или Word.
Шесть операций отношения или сравнения:
> < = ¹ ³ £ ,
применимые ко всем простым типам и многим структурированным, всегда дают логический результат. Более того, и над логическими значениями допускается выполнение операций отношения:
True > False ® True,
True < False ® False.
Возможны даже такие записи:
Var i:boolean;
...
For i:=False to True do
<оператор>;
Здесь оператор выполнится два раза, сначала со значением i = False , затем i = True.
Литерный тип
В качестве данных в Паскале могут выступать отдельные символы или литеры. Этот тип данных описывается словом Char и занимает 1 байт. Значениями здесь являются 256 символов кодировочной таблицы ASCII (American Standard Code for Information Interchange – Стандартный американский код обмена информацией), используемой в ОС DOS.
При записи констант, если символьное значение имеет графическое представление, то оно изображается символьным знаком, заключенным в апострофы, например:
'*' 'A' '!'
Если символ нельзя отобразить в тексте программы (служебные и неотображаемые символы), то можно воспользоваться эквивалентной формой записи
#<целочисленный код символа>.
Например:
#$7F – Delete, стереть последний символ. Символом DEL, состоящим в двоичном коде из всех единиц, можно было забить любой символ. Устройства и программы игнорировали DEL так же, как NUL. Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило забиванием его кода дырочками (обозначавшими логические единицы).
#7 – Bell, звонок, звуковой сигнал. Имеет отношение не к монитору, а ко встроенному динамику.
Если используются специальные символы, называемые управляющими кодами (то есть с использованием префиксной клавиши Ctrl), то можно использовать запись, например вида ^C (символ с кодом 3: ext – конец текста). Все коды с номерами 0-31 являются управляющими, и их можно представить в таком виде. Например, BEL можно записать как ^G.
Над значениями литерного типа можно выполнять только операции отношения.
Перечисляемый тип
Часто в программах число используется не в качестве арифметической величины, а как указатель некоторого элемента множества. В Паскале предусмотрена возможность называть элементы множества своими именами, то есть можно определить новый тип путем явного перечисления всех его возможных значений, причем каждое такое значение будет определяться только именем. Считается, что значения перечисляемого типа указаны в порядке возрастания, начиная с нулевого, поэтому над этими элементами можно выполнять операции отношения. Причем наиболее часто используются операции = и ¹.
При описании этого типа используется список, заключенный в круглые скобки, а его значения (константы) являются именами:
(<имя1>[,<имя2>...])
Например:
Type
Color = (Red,Yellow,Green); {Светофор}
Day = (Mon,Tue,Wed,Thu,Fri,Sat,Sun);
Var c:Color;
d:day;
...
If d>Fri Then Writeln ('Выходной день');
Для любого перечисляемого типа Т, определенного записью
T = (w0,w1,...,wn) ,
справедливы свойства:
1. Различимости
wi ¹ wj , если i ¹ j.
2. Упорядоченности
wi < wj , если i < j.
Причем значениями типа Т могут быть только w0, w1, ..., wn. Более того, эти имена должны быть уникальны, то есть не должны повторяться ни в других типах, ни при описании переменных.
Дата добавления: 2016-06-29; просмотров: 8660;