Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Понятие типа данных



Напомним о понятии «переменная».В алгоритмических языках под переменной понимают область памяти, где хранятся обрабатываемые данные. (Исходные, промежуточные и итоговые.). Название происходит от того, что при работе ЭВМ данные могут менять свои значения.Область памяти характеризуется размером и адресом начала.

Чтобы разные переменные человеку легче было отличать друг от друга, им даются имена (идентификаторы). (Компьютер отличает переменные друг от друга по их началу в памяти.)

Информацию, хранящуюся в переменной в момент обращения к этой переменной называют ЗНАЧЕНИЕМ переменной.

адрес начала и размер в памяти

| | |

+--+- память -+----------+

| | |

| ПЕРЕМЕННАЯ |

| / \ |

+- имя значение – тип

(возможный диапазон значений)

В переменных хранятся разные данные, разные по размеру и назначению. Компьютер работает и с числами, и с буквами, и с картинками. Выполняемые над разными объектами действия должны быть различны.

Для обеспечения принципа детерминированности (компьютер должен знать, что можно делать с разными данными), все данные разбиты на группы, с данными одной группы можно выполнять определенный набор действий. Заодно, договорились, что и размер места в памяти данных одного типа одинаков. Описанные группы данных называют данными одного типа. Типы данных так же имеют имена.

Будем изучать все типы данных по одной схеме:

1) имя типа
2) размер в памяти (кодирование)
3) набор операций
4) связь с данными других типов

К простейшим (базовым) типам данных относят такие, для которых достаточно только имени, чтобы компьютер понял, сколько места выделить в памяти для их хранения и какие операции с ними можно выполнять.

*** Классификация типов данных

типы данных

/ \

статические динамические

/ \ \

простые сложные +-стек

/ \ \---- ¦

стандартные нестандартные +-массив +-очередь

(базовые) (переменные) ¦ ¦

------- ¦ +-запись +-список

+-целое число +-перечисляемый ¦ ¦

¦ ¦ +-множество L-каталог

+-действительный L-ограниченный ¦

¦ (вещественный) (интервальный) +-файл

¦ ¦

+-логический +-граф

¦ ¦

L-символьный (строковый) L-дерево

* Сложные (структурные) типы данных. Данные этих типов, как и данные

базовых типов, занимают в памяти фиксированную область.

Фактически, являются совокупностью данных базового или самого

структурного (кроме файлов) типа.

Идентификатор заложен в транслятор (массив, запись, множество, файл).

Кодирование требует уточнений.

Набор внутритиповых операций связан с обращением к данным.

Набор операций связи с данными других типов связан с кодированием.

* Динамические типы данных. Область памяти, где хранятся данные этих

типов, может изменять со временем свои размеры.

В современных языках программирования специальных средств не имеют.

Идентификатор определяется программистом.

Кодирование определяется программистом.

Набор внутритиповых операций определяется программистом.

Набор операций связи с данными других типов определяется программистом.

***** БАЗОВЫЕ ТИПЫ ДАННЫХ

1 Базовые (простые) типы данных (базовые способы хранения информации).

Для работы с данными этих типов не требуется никаких уточнений,

достаточно только указать тип.

Идентификатор, кодирование и набор операций заложены в транслятор.

Есть возможность увеличения набора операций (функции пользователя).

3 Получение информации базовых типов происходит специальным оператором

присваивания, из константы или чтением с клавиатуры (или из файла).

Вывод данных базовых типов организуется единой стандартной командой.

Логический тип

Базовый тип данных - данные логического типа.

При оформлении условий используется тип данных - логический.

Другое название Булевый. Допустимые значения ["истина", "ложь"]. Данные этого типа хранят значения всевозможных условий, пори помощи которых образуются ветвления и циклы (вспомните урок про структуры алгоритмов).

Способы представления (хранения).

BASIC PASCAL C

не выделен, но <им.пер.>:boolean; не выделен, но

"истина"=-1 "истина"=true "истина"= 1

"ложь"= 0 "ложь"=false "ложь"= 0

целого типа целого типа

Основные операции. (Образование сложных условий.)
При работе с логическими данными используются операции:
унарная – отрицание. Как выполняются логические операции нетрудно разобраться с помощью таблиц истинности. В этих таблицах 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 - эквивалентность

имеются только в бейсике.

Специалисты по математической логике знают, как любую логическую формулу представить в виде набора операций, состоящих из конъюнкций (логическое «И»), дизъюнкций (логическое «ИЛИ») и отрицаний (логическое «НЕ»).

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).

10)Базовый тип данных - целое число.
(Имена типов приводятся согласно ЯП Паскаль)

Компьютер предназначен прежде всего, для работы с числами. Выделяют несколько типов целых чисел.

Целые натуральные (без знака) и целые со знаком. Кроме того, целые числа занимают разное количество байт.

Для числа без знака используется двоичная запись в выделенное место памяти. Поскольку счет идет с 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, обозначается наличием знака % в конце имени переменной.

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

1 Базовый тип данных - действительное число

Число представляется в нормальной нормированной форме, то есть разбивается на мантиссу - число в диапазоне от 0.1 до 1.0 и порядок. Диапазон значений зависит от записи (двоичная или двоично-десятичная), от размеров выделенных мест для хранения мантиссы и порядка.

2 Способы представления (хранения).

Несколько байт двоичной или двоично-десятичной записи.

Число представляется в нормальной форме, то есть разбивается

на мантиссу - число в диапазоне от 0.1 до 1.0 и порядок.

Диапазон значений зависит от записи (двоичная или двоично-десятичная),

от размеров выделенных мест для хранения мантиссы и порядка.

4 Основные операции.

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/b

возведение a в степень b a^b

функции

возведение x в квадрат sqr(x)

квадратный корень из x sqr(x) sqrt(x)

экспонента от x exp(x) exp(x)

10 в степени x - exp10(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 - - | =x-[x]

взятие модуля x abs(x) abs(x)

5 Связь с данными других типов.

В операциях среди аргументов допустимы данные целого типа, автоматически

произойдет их преобразование в данные действительного типа.

При округлении результат будет целого типа.

12)Строковый (литерный).

К базовым, с некоторой натяжкой, можно отнести тип данных «строка».

Способ хранения и набор операций со строками компьютеру известны, но, фактически, строка – это упорядоченный набор знаков. По умолчанию, для хранения строки выделено 256 байт, но при желании можно длину строк уменьшить, память сэкономить.

Из-за возможности доопределения, некоторые авторы учебников строковый тип данных к базовым не относят.

Вместе со знаками в памяти хранится длина строки, чтобы выводить не все 256 знаков. В языке pascal для хранения длины строки используется элемент набора с номером 0. В этот байт записывается число от 0 до 255.

В языке basic длина строки хранится отдельно, вместе с именем, поэтому можно использовать строки длиной 256 знаков.

Тип строка в языке pascal отмечается словом string, в языке basic, после имени переменной пишут знак доллара ’$’, в некоторых версиях вместо знака доллара используется знак «солнышко» - круг поверх косого креста.

0 1 2 3 4 5 6... 255

б у к в ы

код 5 код б код у код к код в код ы

Первый знак строки занимает 1 байт, второй – второй,...

Нулевой байт хранит длину строки.

pascal basic

var s:string; s$=”буквы”

begin s:=’буквы’; end. (s¤=”буквы”)

К операциям преобразования строк относим:

Выделение части строки (с указанного места указанной длины).

Конкатенация, соединение (склейка) двух строк в одну. (Часто операция обозначается знаком ‘+’ между аргументами.)

Удаление части строки.

Вставка одной строки внутрь другой.

Не реализованные в некотором языке операции вполне заменимы набором имеющихся.

Например, удалить часть строки можно путем склейки кусочка слева и кусочка справа. Средняя часть будет потеряна.

BASIC PASCAL

выполняем вырезку из строки =mid$(s$,m,l) =copy(s,m,l)

=left$(s,l)

=right$(s,l)

склеиваем две строки =s1$+s2$ =concat(s1,s2)

удаляем часть строки delete(s,m,l)

вставляем строку в строку insert(p,s,m)

замена фрагмента строки mid$(a$,m,x)=

О строке можно извлечь информацию:

Число – длину строки.

Номер места, начиная с которого одна строка находится внутри другой (поиск подстроки в строке).

Имеются просто команды преобразования числа в строку цифр и, обратно, строки цифр в число.

BASIC PASCAL

определяем длину строки =len(s$) =length(s)

ищем подстроку в строке =instr(s$,p$) =pos(p,s)

преобразуем число в строку =str$(x) str(n,s)

=bin$(x)

=oct$(x)

=hex$(s)

преобразуем строку в число =val(x$) val(s,n,c)

Строки используются для хранения последовательностей символов. В Паскале три типа строк:

Строка типа string может содержать до 255 символов. Под каждый символ отводится по одному байту, в котором хранится код символа. Еще один байт отводится под фактическую длину строки. Для коротких строк использовать стандартную строку неэффективно, поэтому в язык введена возможность самостоятельно задавать максимальную длину строки, например:

type str4 = string [4];

Здесь описан собственный тип данных с именем str4. Переменная этого типа занимает в памяти 5 байт. Длина строки должна быть константой или константным выражением.

Примеры описания строк:

const n = 15;

var s: string; { строка стандартого типа }

s1: str4; { строка типа str4, описанного выше }

s2: string [n]; { описание типа задано при описании переменной }

Инициализация строк, как и переменных других типов, выполняется в разделе описания констант:

const s3: string [15] = 'shooshpanchik';

Операции

Строки можно присваивать друг другу. Если максимальная длина результирующей строки меньше длины исходной, лишние символы справа отбрасываются:

s2:= 'shooshpanchik';

s1:= s2; { в s1 будут помещены символы "shoo" }

Строки можно склеивать между собой с помощью операции конкатенации, которая обозначается знаком +, например:

s1:= 'ком';

s2:= s1 + 'пот'; { результат - "компот" }

Строки можно сравнивать друг с другом с помощью операций отношения. При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны:

'abc' > 'ab'

'abc' = 'abc'

'abc' < 'abc '

Имя строки может использоваться в процедурах ввода-вывода:

readln (s1, s2);

write (s1);

При вводе в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (Enter) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине.

К отдельному символу строки можно обращаться как к элементу массива символов, например, s1[4]. Символ строки совместим с типом char, их можно использовать в выражениях одновременно, например:

s1[4]:= 'x'; writeln (s2[3] + s2[5] + 'r');





Дата публикования: 2015-11-01; Прочитано: 604 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.024 с)...