10
ЧИСЛОВЫЕ ТИПЫ.
ОПЕРАТОР ПРИСВАИВАНИЯ.
Язык программирования Паскаль, как и любой другой, имеет свой алфавит. Это набор символов (разрешенный к использованию и воспринимаемый компилятором), с помощью которого могут быть образованны величины, выражения и операторы данного языка. Алфавит языка включает в себя все символы, представленные в кодировочной таблице, которая в настоящий момент загружена в оперативную память или хранится в ПЗУ. Каждому символу соответствует индивидуальный числовой код от 0 до255.
Алфавит языка составляют:
Символы, используемые для составления идентификаторов
2. Символы - разделители:
Символ пробела (код 32). Основное назначение этого символа - разделение ключевых слов и имен.
Управляющие символы (коды от0 до 31). Эти символы могут применяться при описании строчных и символьных констант. Управляющие символы с кодом 9(табуляция), а также 10 и 13 (замыкающие строку) используются в качестве разделителей при написании программ.
3. Специальные символы : }#(+ .; >]$), /<@ ^‘ * - : = [ {
Символ ";" ставится после завершения каждого оператора, за исключением последнего оператора end, после которого ставится точка, тем самым информируя компилятор об окончании текста программы.
4. Составные символы - группа символов, которые воспринимаются компилятором как единое целое:
<= >= := (* *) (. .) ..
Некоторые специальные символы являются также знаками операций. Левая квадратная скобка ([) эквивалентна паре символов, состоящей из левой круглой скобки и точки ((.). Аналогично правая квадратная скобка (]) эквивалентна паре символов, состоящей из точки и правой круглой скобки (.)).
5. Зарезервированные слова. Зарезервированные слова имеют строго определенное назначение, которое не может быть изменено. Поэтому описание пользовательских идентификаторов, идентичных зарезервированным словам ,не допускается!
Для Турбо-Паскаля безразличен регистр клавиатуры, поэтому вы можете использовать в своей программе как строчные, так и прописные буквы.
В математике принято классифицировать переменные в соответствии с некоторыми важными характеристиками. Производится строгое разграничение между вещественными, комплексными и логическими переменными, между переменными, представляющими отдельные значения и множество значений и так далее.
При обработке данных на ЭВМ такая классификация еще более важна. В любом алгоритмическом языке каждая константа, переменная, выражение или функция бывают определенного типа.
В языке ПАСКАЛЬ существует правило: тип явно задается в описании переменной или функции, которое предшествует их использованию. Концепция типа языка ПАСКАЛЬ имеет следующие основные свойства:
любой тип данных определяет множество значений, к которому принадлежит константа, которые может принимать переменная или выражение, или вырабатывать операция или функция;
тип значения, задаваемого константой, переменной или выражением, можно определить по их виду или описанию;
каждая операция или функция требует аргументов фиксированного типа и выдает результат фиксированного типа.
Отсюда следует, что транслятор может использовать информацию о типах для проверки вычислимости и правильности различных конструкций.
Обязательное описание типа приводит к избыточности в тексте программ, но такая избыточность является важным вспомогательным средством разработки программ и рассматривается как необходимое свойство современных алгоритмических языков высокого уровня.
Тип данных определяет:
формат представления данных в памяти компьютера;
множество допустимых значений, которые может принимать принадлежащая к выбранному типу переменная или константа ;
множество допустимых операций, применимых к этому типу.
Множество типов языка Паскаль можно разделить на две группы:
а) стандартные (предопределенные) типы;
б) типы, определяемые пользователем (пользовательские типы).
К стандартным типам относят:
группу целых типов ( Schortint, Integer, Longint, Byte, Word);
группу вещественных типов (Single, Real, Double, Extended, Comp);
группу булевских типов ( Boolean);
символьный тип (Char);
строковые типы (String);
указательный тип (Pointer);
текстовый тип (Text).
Символьный тип, а также целые и булевские относят к, так называемым, порядковым типам. Порядковые типы характеризуются следующими свойствами:
а) Множество допустимых значений любого порядкового типа представляет собой упорядоченную последовательность, каждый элемент которой имеет свой порядковый номер. Порядковый номер представляется целым числом. Первое значение любого порядкового типа имеет порядковый номер 0, следующее значение имеет порядковый номер 1 и так далее. Исключение составляют порядковые типы Integer, Shortint, Longint Порядковым номером значений этих типов является само значение.
б) К любому значению порядкового типа можно применить стандартную функцию ORD, возвращающую порядковый номер этого значения.
в) Для любого значения порядкового типа можно определить предыдущее и последующее значение с помощью стандартных функций PRED и SUCC (кроме булевских).
В данный момент нас больше интересуют простые типы, к которым относятся :
-целочисленный типы,
-логический тип,
-вещественный тип.
-символьный тип,
-перечисляемый тип,
-интервальный тип,
Числа
Числа в языке ПАСКАЛЬ обычно записываются в десятичной системе счисления. Они могут быть целыми и действительными. Положительный знак числа может быть опущен. Целые числа записываются в форме без десятичной точки, например: 217 -45 8954 +483
Действительные числа используются в форме с десятичной точкой или в форме с применением десятичного порядка, который изображается буквой Е (0,2*10-12 - это 0.2Е-12, что означает 0,2 умножить на 10 в степени -12):
28.6 0.65 -0.018 4.0 5Е12 -1.72Е9 73.1Е-16
ПАСКАЛЬ допускает запись целых чисел и фрагментов действительных чисел в форме с порядком в шестнадцатеричной системе счисления: $7F $40 $ABC0
Выражение
Выражение состоит из констант, переменных, указателей функций, знаков операций и скобок. Выражение задает правило вычисления некоторого значения. Порядок вычисления определяется старшинством (приоритетом) содержащихся в нем операций. В языке ПАСКАЛЬ принят следующий приоритет операций:
унарная операция not, унарный минус -, вычисление функции, возведение в степень;
операции типа умножения * / div mod and shl shr
операции типа сложения + - or xor
операции отношения = <> < > <= >= in {}
Выражения входят в состав многих операторов языка ПАСКАЛЬ, а также могут быть аргументами встроенных функций.
Целые числа
В Турбо-Паскале имеется пять встроенных целочисленных типов: integer (целое), shortInt (короткое целое), longInt (длинное целое), byte (длиной в байт) и word (длиной в слово). Каждый тип обозначает определенное подмножество целых чисел, как это показано в следующей таблице:
Верхнее граничное значение различных переменных целочисленных типов задано в Турбо Паскале 7.0 как константа и имеет соответствующее имя: MaxInt=32767=215-1;
MaxLongint=2147483647=231-1.
Значение одного целочисленного типа может быть явным образом преобразовано к другому целочисленному типу с помощью приведения типов.
На множестве целых чисел определены только операции, результат которых также есть целое число. Такими операциями являются :
3 div 2=1; (-9) div 2=-4;
3 mod 3=0; 15 mod (-9) =-6; 5 mod 3 =2.
Между результатами операций mod и div существует связь:
a mod b=a-(a div b)*b.
Операции отношения, примененные к целым операндам, дают результат логического типа TRUE или FALSE ( истина или ложь ).
В языке ПАСКАЛЬ имеются следующие операции отношения: равенство =, неравенство <>, больше или равно >=, меньше или равно <=, больше >, меньше < .
Применимы следующие стандартные (встроенные) функции, результат выполнения которых имеет целый тип:
TRUNC(x) - отбрасывает дробную часть числа х;
ROUND(x) - округляет число х до целого;
ABS(x) - вычисляет абсолютное значение числа х;
SQR(x) - возводит в квадрат число х.
DEC(x) - уменьшает значение переменной на 1;
INC(x) - увеличивает значение переменной на 1;
и процедура
RANDOMIZE , включающая датчик случайных целых чисел.
Действительные числа
Действительные числа не могут храниться в целочисленных переменных и выступать в качестве их значений. Эти числа можно представить
с фиксированной запятой, например, -2.345, 345.7, 5.0 и т.п.
с плавающей запятой с фиксированным числом цифр.
Запись значения в формате с плавающей запятой обычно включает три значения - m, b и e - таким образом, что [pic] , где b всегда равен 10, а m и e являются целочисленными значениями в диапазоне вещественного типа. Эти значения m и e далее определяют диапазон представления и точность вещественного типа.
Имеется пять видов вещественных типов:
Вещественные типы различаются диапазоном и точностью связанных с ними значений :
- Single с одинарной точностью
1.5x10-45 до 3.4x1038
от 7 до 8
4 байта
Double с удвоенной точностью
5.0x10-324 до 1.7x10308
от 15 до 16
8 байт
Extended с повышенной точностью
3.4x10-4932 до 1.1x104932
от 19 до 20
10 байт
Comp
-263+1 до263-1
8 байт
Сложный тип содержит только целочисленные значения в диапазоне от -263+1 до 263-1, что приблизительно равно-9.2x1018 и 9.2x1018.
Для обработки действительных чисел предусмотрены следующие операции:
сложение;
вычитание;
умножение;
деление.
Примечание. Операции возведение в степень нет, но существует такое вычисление EXP(LN(a)*x), которое равно ах, при a>0
В Паскале определены следующие функции, дающие результат вещественного типа:
ABS(x)- модуль х;
ARCTAN(x)- arctgx;
COS(X)- cosx;
EXP(x)- ex
FRAC(x)- дробная часть числа х;
INT(x)- аналог функции Trunc, но с вещественным результатом
LN(x)- натуральный логарифм от х;
RANDOM(x)- случайное число из [0,x];
SIN(x)- sinx
SQR(x)- х2
SQRT(x)- корень квадратный из х.
Также существует константа Pi =3.1415926535897932385.
Оператор присваивания
Оператор присваивания состоит из идентификатора переменной или пользовательской функции, символа « : =» и выражения.
ИМЯ1:= значение; выражение; ИМЯ2
Если в правой части оператора стоит значение, то переменной с именем ИМЯ1 присвоится это новое значение.
Если в правой части стоит идентификатор, то значение этой переменное присвоится переменной с именем, которое стоит в левой части оператора.
Если в правой части - выражение, то выполнение оператора присваивания приводит к вычислению значения, определяемого выражением, и присваиванию этого значения переменной с именем ИМЯ1.
Допускается присваивание значений не только простых, но и структурированных типов, таких как массивы, записи и множества.
Обязательным является требование, чтобы тип выражения в правой части оператора и тип переменной или результата в левой части оператора были совместимыми по присваиванию.
Вопросы для самопроверки.
1. Есть ли разница (с точки зрения языка Паскаль) между числами 100 и 100.0, между 20 и 2Е1? По какому признаку (величине или форме записи) целые числа отличаются от вещественных чисел?
2. Привести примеры положительного и отрицательного целых чисел, не представимых в Паскале.
3. Укажите диапазоны целых и вещественных чисел языка Паскаль.
4. Можно ли утверждать, что в Паскале значение выражения (1/3)*3-1 равно 0?
5. Почему при записи формул на Паскале их "вытягивают" в линию? Почему знак умножения всегда выписывают явно?
6. Вычислить: 24/(3*4)-24/3/4+24/3*4.
7.Сколько операций выполняется при вычислении выражения [pic] Как сократить число операций?
Почему в Паскале аргумент функции всегда записывают в скобках?
Как на Паскале записать синус от х градусов?
Какое значение будет иметь переменная х после выполнения операторов х:=10; х:=х+3?
Записать оператор присваивания, который меняет знак у значения переменной t.
Чему равны значения переменных х и у после выполнения операторов х:=2; у:=5; х:=у; у:=х?
Поменять местами значения переменных х и у.
Поменять местами значения переменных х,у и z так, чтобы в х оказалось значение переменной у,в у- значение переменной z, а в z -прежнее значение переменной х.
Определить операцию div через другие операции и стандартные функции.
Указать порядок выполнения операций в выражении:
-a mod b + a div b * c.
18. Правильны ли следующие операторы присваивания? Ответ обосновать.
а) k:=k mod 3 + k*cos(0); б) x:=x*2 div 6 + x/4.
19. Указать неправильные записи чисел и объяснить :
1)0006; 4)-0; 7) 7,0; 10) 7.;
2)+ .3; 5) 2/3; 8) Е-1; 11) 0056;
8Е0; 6) 0Е-4: 9) 2*Е5; 12) 0Е7.
20. Определить тип выражения:
1) 1+0.0; 20/4; 5/1; 3*1.7
2) sqr(5.0); sqr(4); sqrt(16); pred(-8);
3) sin(0); succ(-2); trunc(-3.14); trunc(5.89).
21. Если у - вещественная переменная, а n-целая,то какие из следующих операторов присваивания правильные, а какие нет и почему?
1) y:=n+1; n:=4.0; y:=y div 2; n:=n/4;
2) n:=y-1; y:=trunc(y) n:=n/2; y:=n*5/2;
n:=sqr(sqrt(n)) n:=n div 2; n:=y mod 2; y:=n div y.
22. Записать в общепринятой форме:
1) (-b+sqrt(sqr(b)-4*a*c))/(2*a); 2) a/b*(c+d)-(a-b)/b/c+1e-8;
3) x1+arctan(y2-alpha)/2*abs(x4-ln(5)*y5)/exp(-1);
1Е3+beta/(x2-gamma*delta)-abs(x1+sin(alpha)).
Задания.
1.Записать на Паскале следующие числа (в дробной части указывать до 4 цифр):
2.Записать следующие числа без десятичного порядка:
1
3/8
-12,4*107
1,9(3)
7!
-15Е-2
0.0789Е4
2
6,28(5)
-1/3
3*10-7
1/10000
-0.253Е3
1Е0
3
LXIII
1/4
e
-32,7*105
345Е-3
2Е1
4
6!
-120,3(9)
3
107
-0.00034Е5
567Е-2
5
-7/11
6,345
0,34*10-8
7,(3)
-35Е1
0.0009Е5
6
7/9
-4,2*106
32,7(12)
10!
-0.1111Е4
1Е4
7
6,28123
-1/6
5*10-6
1/100000
2222Е-3
4Е1
8
XXXIV
10/3
-0,897*105
-0.037Е4
987Е-3
9
4!
-11,7(24)
2/7
10-10
-0.5Е1
0.9Е5
10
1/6
-0,38*104
11,2(8)
3!
-0.003Е4
0Е1
11
1236,1228
-3/8
1,5*10-6
1/1000
11112Е-3
2Е2
12
IV
1/11
-6,(123)
-32,7*105
-0.00027Е4
346Е-2
13
8!
-11,2(4)
4
106
-90Е1
0.0001Е5
14
5/7
-24,8*106
2,3(5)
6!
-5Е1
0.0789Е5
15
6,28
-1/6
5*10-6
1/100000
-0.123Е4
1Е1
16
LXIV
11/4
-32,7*105
666Е-3
9Е1
17
5!
-0,7(4)
2
106
-0.00027Е4
234Е-2
3.Записать на Паскале следующие формулы:
1
x2+2x-3
[pic]
[pic]
sin3x
2
(a+x)(b+y)
[pic]
[pic]
tg2x
3
(a-x)(a+x)(a-y)
[pic]
[pic]
cos2x2
4
2x+4y-cyx
[pic]
[pic]
3x+1
5
1,3х-(3ху - 6)у
[pic]
cos3y3
(1+х)5
6
(ax+by)-(cx+1)
[pic]
[pic]
[pic]
7
13ax-cy+11x
[pic]
tgx2
[pic]
8
[(a-bx)c+y]х
[pic]
|tgx|
[pic]
9
ax+b+cyz
[pic]
[pic]
[pic]
10
ax(by+cx)
[pic]
cos3y
[pic]
11
5x-43y+5c
[pic]
[pic]
[pic]
12
(ax-b)x+cх
[pic]
[pic]
cos33x
13
a(bx+cyz)
[pic]
[pic]
[pic]
14
(ax+by)cx
[pic]
[pic]
[pic]
15
3ax-4cy+5
[pic]
[pic]
[pic] 0
16
[(ax-b)x+c]х
[pic]
[pic]
[pic]
17
a+bx+cyz
[pic]
[pic]
[pic]
4. Вычислить значения выражений:
1
trunc(6.9);
20 div 6;
round(6.2);
2 mod 3;
2
trunc(-1.8);
32 div 4; 1)
round(-1.8);
32 mod 4;
3
trunc(6.2);
2 div 5; 1)
round(5.99);
3 mod 30;
4
trunc(5.99);
123 div 0;
round(-0.5) ;
56 mod 10;
5
trunc(10.8);
20 mod 6;
round(6.9);
20 div 6;
6
trunc(-0.8);
32 mod 4;
round(1.1);
3 div 5;
7
trunc(-1.99)
3.0 mod 3; 2)
round(100.1);
78 div 4;
8
trunc(6.6);
66 div 10;
round(4.89);
66 mod 10;
9
trunc(-56.8);
12 div 0;
round(-90.1);
12 mod 4;
10
trunc(0.2);
4 mod 3;
round(12.5);
4 div 3;
11
trunc(7.99);
40 div 6;
round(-7.9);
40 mod 6;
12
trunc(0.8);
66 mod 10;
round(4.57);
6 div 10;
13
trunc(-10.8);
44 div 4;
round(-9.9);
44 mod 4
14
trunc(-0.99)
10 div 6;
round(0.7);
6 mod 10;
15
trunc(6.78)
4 div 6;
round(0.12);
44 mod 5;
16
trunc(-11.2)
5 div 10;
round(-23.7);
5 mod 10;
17
trunc(0.567)
34 div 4;
round(67.1);
4 mod 34;