изучается:
Понятие типа данных, базовые типы данных.
Целочисленные типы данных.
Тип данных "действительное число".
Логический тип данных.
Знаковый тип данных.
Строковый тип данных.
Перечислимый тип данных.
Ограниченный тип данных.
базовый материал:
Алгоритм и его свойства. (из 1 урока)
Переменная. (из 1 урока)
«Основные (базовые) типы данных»
Понятие типа данных |
Напомним о понятии «переменная».
В алгоритмических языках под переменной понимают область памяти, где хранятся обрабатываемые данные. (Исходные, промежуточные и итоговые.). Название происходит от того, что при работе ЭВМ данные могут менять свои значения.
Область памяти характеризуется размером и адресом начала.
Чтобы разные переменные человеку легче было отличать друг от друга, им даются имена (идентификаторы). (Компьютер отличает переменные друг от друга по их началу в памяти.)
Информацию, хранящуюся в переменной в момент обращения к этой переменной называют ЗНАЧЕНИЕМ переменной.
адрес начала и размер в памяти
| | |
+--+- память -+----------+
| | |
| ПЕРЕМЕННАЯ |
| / \ |
+- имя значение – тип
(возможный диапазон значений)
В переменных хранятся разные данные, разные по размеру и назначению. Компьютер работает и с числами, и с буквами, и с картинками. Выполняемые над разными объектами действия должны быть различны.
Для обеспечения принципа детерминированности (компьютер должен знать, что можно делать с разными данными), все данные разбиты на группы, с данными одной группы можно выполнять определенный набор действий. Заодно, договорились, что и размер места в памяти данных одного типа одинаков. Описанные группы данных называют данными одного типа. Типы данных так же имеют имена.
Для успешной работы с типами данных, для каждого типа нужно знать:
- представление в памяти компьютера (кодирование), от этого зависит диапазон возможных значений; - перечень возможных действий над данными такого типа; - как связаны данные конкретного типа с данными других типов.
Будем изучать все типы данных по одной схеме:
1) Имя типа 2) размер в памяти (кодирование) 3) набор операций 4) связь с данными других типов
К простейшим (базовым) типам данных относят такие, для которых достаточно только имени, чтобы компьютер понял, сколько места выделить в памяти для их хранения и какие операции с ними можно выполнять.
Целочисленные типы |
Базовый тип данных - целое число. (Имена типов приводятся согласно ЯП Паскаль)
Компьютер предназначен прежде всего, для работы с числами. Выделяют несколько типов целых чисел.
Целые натуральные (без знака) и целые со знаком. Кроме того, целые числа занимают разное количество байт.
Для числа без знака используется двоичная запись в выделенное место памяти. Поскольку счет идет с 0, то:
для одного байта диапазон [0..255] (byte) {=2^8-1}
для двух байт - [0..65535] (unsign) {=2^16-1}
для четырех байт - [0..4294967295] {=2^32-1}
Для числа со знаком самый старший бит выделен для знака 0 - число положительное, 1 - отрицательное.
В целом, отрицательное число образуется из положительного за два шага: 1) в двоичной записи числа обратим цифры "1" в цифры "0" и наоборот, 2) к полученному числу добавим 1 (действие выполняем в двоичной системе счисления).
Очевидно появление цифры "1" на первом месте, если там был "0".
Такое кодирование решает три задачи:
1) образование положительного числа из отрицательного выполняется теми же двумя операциями (убедитесь сами!)
2) числа "+0" и "-0" представляются одинаково.
3) кодирование самообратимо { k(k(x))=x }
00000101 - число 5 в 1 байте 00000101 - исходное 11111010 - после инверсии 11111011 - после добавления 1 11111011 - число -5 в 1 байте
11111011 - исходное 00000100 - после инверсии 00000101 - после добавления 1
Описанный способ представления отрицательных чисел называется «дополнительное кодирование». Дополнение до 1, которая при сложении числа А с числом –А уйдет за пределы выделенной области, останется 0.
Прежде встречались:
- прямое кодирование – просто у отрицательных чисел вписывалась 1 в старший бит. Тое есть число 0 можно было писать 00000000 и 10000000 (+0 и -0!!!)
- обратное кодирование – у числа 0 менялись на 1, а 1 на 0. Тоже в наличии значения +0 и -0 соответственно 00000000 и 11111111
В зависимости от выделяемой памяти имеются:
для одного байта диапазон [-128..+127] (shortint)
для двух байт - [-32768..+32767] (integer)
для четырех байт - [-2147483648..+2147483647] (longint)
В языке PASCAL
имя типа диапазон значений
byte 1 байт, без знака, 0..255
word 1 байт, без знака, 0..65535
shortint 1 байт, со знаком, -128..+127
integer 2 байт, со знаком, -32768..+32767
longint 4 байт, со знаком, -2147483648..+2147483647
Способ кодирования – двоичное представление и дополнительный код для отрицательных чисел.
Основные операции. BASIC PASCAL
сложение a и b a+b a+b
вычитание a и b a-b a-b
умножение a на b a*b a*b
Делить целые числа нельзя! – Результат – не целое число.
деление нацело a на b a\b a div b
остаток от деления a на b a mod b a mod b
взятие модуля a abs(a) abs(a)
логические И от a и b a and b a and b
ИЛИ от a и b a or b a or b
отрицание a not a not a
Связь с данными других типов.
В языке pascal различают 5 типов целочисленных данных, связь между ними автоматическая, то есть аргументы операций приводятся к одному типу, выполняется операция. Попытка сохранения результата в другом типе, например word как integer, может привести к ошибкам. Числа, большие чем 32767, будут показаны как отрицательные.
Пока другие типы не изучались, связь целочисленных типов с ними рассматривать не будем.
В языке basic программу можно написать не обращая внимания на типы. Имеющийся целочисленный тип соответствует паскалевскому типу integer, обозначается наличием знака % в конце имени переменной.
Тип «действительное число» |
Базовый тип данных - действительное число
Для представления (хранения) действительного числа выделяется несколько байт двоичной или двоично-десятичной записи.
Число представляется в нормальной нормированной форме, то есть разбивается на мантиссу - число в диапазоне от 0.1 до 1.0 и порядок. Диапазон значений зависит от записи (двоичная или двоично-десятичная), от размеров выделенных мест для хранения мантиссы и порядка.
Записать действительное число можно в экспоненциальной форме (с плавающей запятой), когда мантисса и порядок разделены латинской буквой е, или в форме с фиксированной запятой, когда в качестве десятичного знака используется точка. Независимо от записи в программе, в памяти компьютера действительное число хранится в нормальной нормированной форме.
-11 <- порядок
у = 6,7 х 10
| 0.67е-10
мантисса в памяти компьютера 67e-12 0.000000000067 с плавающей запятой с фиксированной запятой
В языке паскаль используется только двоичное представление.
В зависимости от количества выделенных байтов и их распределения, сколько под мантиссу и порядок, различают имена типов: real, single, double, extended, comp.
Для использования этих типов (кроме real) требуется подключение математического сопроцессора, которое выполняется командой {$N+}, обычно в начале программы.
Тип Диапазон Точность Байт
Real 2.9e-39..1.7e38 11-12 6
Single 1.5e-45..3.4e38 7-8 4
Double 5.0e-324..1.7e308 15-16 8
Extended 3.4e-4932..1.1e4932 19-20 10
Comp -9.2e18..9.2e18 19-20 8
В языке basic, тип одинарной точности (4 байта) отмечается знаком ! в конце имени переменной, а тип двойной точности (8 байт) отмечается знаком #.
Выше отмечалось, что на «бейсике» можно писать программы не особо задумываясь о типах данных. Все числовые переменные, по умолчанию, считаются переменными двойной точности, то есть занимают 8 байт памяти. Преобразование типов выполняется автоматически, в том числе округление при переводе действительных чисел в целые.
Встречается двоично-десятичное кодирование чисел, когда в одном байте записываются в двоичной форме две десятичные цифры числа.
В языке BASIC A% \указывает целый тип числа )2 байта).
В языке BASIC A! \указывает действительный тип. одинарной точности (4 байта).
A# \указывает действительный тип. двойной точности (8 байт).
Имена и кодирование мы прошли.
Основные операции с действительными числами это:
сложение a и b
вычитание из a и b
умножение a на b
деление a на b
возведение a в степень b.
BASIC PASCAL Как получить
a+b a+b
a-b a-b
a*b a*b
a/b a/b
a^b | exp(b*ln(a))
Кроме операций, имеются функции:
возведение x в квадрат sqr(x)
квадратный корень из x sqr(x) sqrt(x)
экспонента от x exp(x) exp(x)
логарифм натуральный от x log(x) ln(x) |log (x)= ln(x)/ln(a)
логарифм десятичный от x - log(x) | a
синус от x sin(x) sin(x)
косинус от x cos(x) cos(x)
тангенс от x tan(x) - |=sin(x)/cos(x)
котангенс от x - - |=1/tg(x) _____
арксинус от x - - |=arctg(x/V1-x*x)
арккосинус от x - - | =pi-arcsin(x)
арктангенс от x atn(x) arctan(x)
арккотангенс от x - | =pi/2+arctg(x)
[x] - целая часть от x int(x) trunc(x)
округление до целого x - round(x) | =[x+0.5]
{x} - дробная часть от x - frac(x) | =x-[x]
взятие модуля x abs(x) abs(x)
Связь с данными других типов.
В операциях среди аргументов допустимы данные целого типа, автоматически произойдет их преобразование в данные действительного типа.
При округлении и взятии целой части результат будет целого типа.
BASIC PASCAL Как получить
[x] - int(x) trunc(x)
round(x) | =[x+0.5]
данные логического типа |
Базовый тип данных - данные логического типа.
При оформлении условий используется тип данных - логический.
Другое название Булевый. Допустимые значения ["истина", "ложь"]. Данные этого типа хранят значения всевозможных условий, пори помощи которых образуются ветвления и циклы (вспомните урок про структуры алгоритмов).
Способы представления (хранения).
BASIC PASCAL C
не выделен, но <им.пер.>:boolean; не выделен, но
"истина"=-1 "истина"=true "истина"= 1
"ложь"= 0 "ложь"=false "ложь"= 0
целого типа целого типа
Основные операции. (Образование сложных условий.) При работе с логическими данными используются операции: унарная – отрицание. Как выполняются логические операции нетрудно разобраться с помощью таблиц истинности. В этих таблицах 1 соответствует истине, 0 обозначает ложь.
отрицание │ A │not A│
─┼───┼─────┼
│ 0 │ 1 │
│ 1 │ 0 │
Имеются бинарные (с двумя аргументами) операции:
not a not a отрицание
a and b a and b логическое И
a or b a or b логическое ИЛИ
a xor b a xor b исключающее ИЛИ
Эти операции реализованы и в бейсике, и в паскале.
Операции
a imp b - импликация (следование)
a eqv b - эквивалентность
имеются только в бейсике.
Специалисты по математической логике знают, как любую логическую формулу представить в виде набора операций, состоящих из конъюнкций (логическое «И»), дизъюнкций (логическое «ИЛИ») и отрицаний (логическое «НЕ»).
таблицы истинности бинарных операций
A │ B │and│ or│xor│eqv│imp
──┼───┼───┼───┼───┼───┼───
0 │ 0 │ 0 │ 0 │ 0 │ 1 │ 1
0 │ 1 │ 0 │ 1 │ 1 │ 0 │ 1
1 │ 0 │ 0 │ 1 │ 1 │ 0 │ 0
1 │ 1 │ 1 │ 1 │ 0 │ 1 │ 1
BASIC PASCAL
not a not a отрицание
a and b a and b логическое И
a or b a or b логическое ИЛИ
a xor b a xor b исключающее ИЛИ
a imp b - импликация (следование)
a eqv b - эквивалентность
Образуются данные логического типа при сравнении данных одинакового типа на совпадение (равны, не равны).
Если тип упорядочен, допустимы сравнения: > , >= , < , >= .
В языке PASCAL есть функция определения четности числа:
odd(x) = true , если аргумент четный,
= false , если аргумент нечетный.
В языке BASIC можно перемешивать данные числовых и логического типа:
функция y=F(x) при x>a
=G(x) при x<=a
может быть записана y=-F(x)*(x>a)-G(x)*(x<=a).
знаковый тип данных |
Базовый тип данных – знак.
Для работы с текстами, например с текстами программ, компьютер должен уметь рисовать буквы. Сталкиваемся с графической информацией. Экран делится на знакоместа, размер каждого обычно 8х8 точек-пиксел. Стандартно получается 25 или 50 строк по 80 знаков в каждой. Знакоместу соответствует 2 байта. Соответственно, видеопамять экрана занимает 4000 (8000)байт.
В одном байте хранится код – номер одной из возможных картинок. Таких картинок может быть 256 штук. 8х8 черно-белых точек занимают 8 байт. Всего знакогенератор занимает 2048 байт.
Второй байт определяет цвет текста и фона знака.
Среди картинок – изображение заглавных и маленьких букв английского и национального (русского) алфавита, цифр, знаков препинания и арифметических операций.
Какой номер-код кокой картинке-букве соответствует определяется специальной таблицей ASCII-кодов (американский стандартный код представления информации).
Ниже представлено, как изображение буквы А хранится в 8 байтах памяти.
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
=32 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
=80 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
=144 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
=144 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
=248 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
=144 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
=144 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
=0 |