Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование_занятие_5.doc
Скачиваний:
10
Добавлен:
14.05.2015
Размер:
126.98 Кб
Скачать

изучается:

Понятие типа данных, базовые типы данных.

Целочисленные типы данных.

Тип данных "действительное число".

Логический тип данных.

Знаковый тип данных.

Строковый тип данных.

Перечислимый тип данных.

Ограниченный тип данных.

базовый материал:

Алгоритм и его свойства. (из 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