Информатика - Учебное пособие

Типы  данных

 

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

Во многих языках программирования все используемые типы данных можно разделить на простые (скалярные) и структурные (сложные, составные).

 

ПРОСТЫЕ ТИПЫ ДАННЫХ

 

Простой (скалярный) тип данных - тип данных, значения которых не содержат составных частей.

Если для значений некоторого типа существует отношение порядка, то такой тип называют порядковым.

 

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

К любому из порядковых типов  применима  функция   ORD(x), которая возвращает порядковый значения аргумента x.  Например, для целого  типа  ORD(x)  =  x;  для  логического типа  имеем ORD(false)=0, ORD(true)=1.

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

Вещественный тип, строго говоря, тоже имеет конечное число значений, которое определяется форматом   внутреннего   представления вещественного числа в ЭВМ. Однако количество возможных значений здесь настолько велико, что  сопоставить  каждому

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

 

СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

 

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

Структурным типом данных называют множество значений  или переменных с одним общим именем.

Язык Си допускает   образование структур данных произвольной сложности, например, отдельные элементы структурных значений могут сами иметь структурный тип.

МАССИВ (РЕГУЛЯРНЫЙ ТИП ДАННЫХ)

 

Массив - это упорядоченная совокупность значений одинакового типа. Отдельные значения, образующие массив,  упорядочены таким образом, что каждому простому значению соответствует совокупность номеров (индексов), определяющих  его  местоположение в общей последовательности.

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

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

 

Основные характеристики массива:

1) имя;

2) тип элементов, из которых состоит массив;

3) размер, то есть количество элементов, входящих в массив;

4) размерность массива,   определяемая   количеством   индексов, необходимых для доступа к отдельному его элементу.

Массив реализует произвольный (прямой)  метод  доступа к отдельным его элементам. В

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

Массивы имеют следующие достоинства:

- позволяют объединять данные в осмысленные  группы,          имеющие одинаковые свойства и характеристики;

- обеспечивают автоматический доступ  по  индексам  к любому элементу массива;

- являются канонической конструкцией структурного представления данных, которая позволяет с   помощью   циклов   быстро   и   эффективно   выполнять   такие   действия   как   выделение подмножества данных, поиск, хранение и изменение значений элементов.

Системы счисления в программировании

 

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

Различают позиционные и непозиционные системы счисления. Единственной непозиционной системой счисления, используемой и в наше время, является римская система, в которой цифры обозначаются буквами латинского алфавита: I - 1, V - 5, X - 10, L - 50, C - 100, D

- 500, M - 1000. В непозиционных системах счисления каждый знак всегда изображает одно и то же число независимо от его положения в записи числа. Основные недостатки подобных систем - сложность записи больших чисел и трудоемкость выполнения арифметических операций.

Позиционная  система  счисления  -  система,  в  которой  значение  символа  (цифры)

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

Позиционная система счисления характеризуется базисом (основанием) - совокупностью символов, используемых для изображения числа. В распространенной десятичной системе счисления таких символов 10; это цифры: 0, 1, 2,..., 9. При решении задач с помощью ЭВМ наиболее часто применяется представление чисел в двоичной и шестнадцатеричной системах счисления. Для записи чисел в двоичной системе счисления используются всего два символа: 0 и 1. В 16-ричной системе счисления применяют базис, включающий в себя десятичный, плюс символы A, B, C, D, E, F, то есть, всего 16 символов.

 

Таблица 1. Представление чисел в системах счисления с различным основанием q

 

q = 10

q = 2

q = 16

q = 10

q = 2

q = 16

0

1

2

3

4

5

6

7

0

1

10

11

100

101

110

111

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1000

1001

1010

1011

1100

1101

1110

1111

8

9

A B C D E F

 

 

 

 

 

 

 
Вообще  число  N  в  позиционной  системе  с  основанием  q  можно  представить  в следующем виде:

 

 

 

 

 
N         an q n

an  1q n  1

 

...

a1q1    a0

a 1q  1

 

...

a  m q  m

 

(2.1)

 

 

 

 
с коэффициентами  ai

q . n   и m определяют количество разрядов соответственно в целой и

 

 
дробной части числа.

Обычно используется сокращенная запись числа, составленная только из коэффициентов:

 

 

 

 

 
N         an an

1...a1a0 .a

1...a  m .

 

 

 

 

 
Перевод чисел из одной системы счисления в другую

Наиболее   просто   перевести   число   из   любой   системы   в   десятичную.   Для   этого используется формула (2.1). Примеры.

 

 

 

 
1011012

1 25

1 23

1 22

1 20

 

 

 

 

 
32        8          4   1

 

4510 ,

 

 

 

 

 
1100,01012

1 23

1 22

1 2  2

1 2  4

 

 

 
12,312510 ,

 

 

 

 

 
2116

2 161

1 160

 

 

 

 

 

 

 
3310 ,

 

1DE,416

1 162

13 161

14 160

4 16 1

 

478,2510.

 

Что касается перевода десятичных чисел в другую систему счисления, он осуществляется отдельно для целой и дробной частей числа.

Для перевода целой части в систему счисления с основанием q производится деление исходного числа на q до остатка, меньшего q (этот остаток будет младшей цифрой числа в новой системе). Затем целая часть полученного числа снова делится на q и т. д. до тех пор, пока последнее частное не даст старшую цифру записи числа в системе с основанием q .

Деление производится в исходной системе счисления.

 

Примеры.

1) перевести число 69   в двоичную систему:

 

_ 69

68

1

2

 

_ 34

34

34

 
0

 

 

2

34

 
_ 17     2

34

 
16        _ 8

1          8

0

 

2

 

34

 
_ 4       2

34

 
4          _ 2       2

0          2          1

0

 

 

Ответ: 6910 = 10001012.

 

2) перевести число 479   в 16-ричную систему счисления:

 

_ 479

464

F

16

 

34

 
_ 29     16

  16      1

D

 

 

Ответ: 47910 = 1DF16.

Алгоритм  перевода  дробной части  числа  в  дробь  с  основанием  q:  исходная  дробь умножается на q; целая часть результата дает первую цифру дроби в новой системе. Оставшаяся дробная часть снова умножается на q, целая часть полученного результата дает вторую цифру новой дроби и т. д. Умножение выполняется в исходной системе счисления. получаемая дробь часто является бесконечной. Примеры.

 

1)  перевести число 0,3010  в двоичную систему счисления

2)  перевести число 0,2310  в 16-ричную систему счисления

 

0,

23

× 16

3

 

68

× 16

10 (A)

 

88

× 16

14 (E)

 

08

× 16

1

 

× 28

16

4

 

× 48

16

 

7

 

× 68

16

10 (A)

 

× 88

16

0,

30

×  2

0

 

60

×  2

1

20

×  2

0

 

40

×  2

0

 

80

×  2

1

 

60

×  2

1

 

20

×  2

 

0

 

40

×  2

0

 

80

×  2

1

 

60

×  2

 

 
. . .

 

. . .

 

Ответ: 0,3010 = 0,010011001…2.     Ответ: 0,2310 = 0,3AE147A…16.

 

Перевод двоичного числа в 16-ричную систему счисления: влево и вправо от знака разделения целой и дробной части разбить исходное число на тетрады (при этом неполные крайние тетрады дополняются нулями), затем заменить каждую тетраду соответствующим 16- ричным символом.

 

Пример: 1 0011 0010,0101 11002 = 132,5C16.

 

 
Перевод 16-ричного числа в двоичный код:  каждую  цифру  исходного  числа  нужно заменить соответствующей двоичной тетрадой.

 

Пример: EF2,1A816 = 1110 1111 0010 , 0001 1010 01002.

 

Двоично-десятичная система счисления

 

Для хранения больших объемов данных, представляющих собой десятичные числа, с целью сокращения потерь времени на перевод из десятичной системы в двоичную и обратно, в ЭВМ используется двоично-десятичное кодирование, при котором каждая цифра в записи десятичного числа представляется двоичной тетрадой. Существует несколько вариантов такого кодирования, одним из которых является код "8421". В этой системе каждая цифра десятичного числа замещается соответствующим двоичным числом. Например, число 319   представляется в виде 0011 0001 1001. Отметим, что это не есть запись числа в двоичной системе счисления. Если преобразовать 319 в двоичный код, то получается 319   = 1 0011 1111.

 

Арифметические операции в двоичной системе счисления

 

В принципе, арифметические операции над числами в любой позиционной системе счисления выполняются по тем же правилам, что и в десятичной системе. Требуется лишь знать таблицы сложения и умножения. Так, в двоичной системе счисления действуют следующие правила:

 

таблица сложения

таблица умножения

 

0 + 0 = 0          1 + 0= 1

0 + 1 = 1          1 + 1 = 10

 

0 × 0 = 0          1 × 0 = 0

0 × 1 = 0          1 × 1 = 1

 

 

 

 

 

 

 

 

 

 

 
До приобретения определенных навыков выполнения арифметических операций в непривычных системах счисления рекомендуется контролировать их правильность переводом, как операндов, так и результата, в десятичную систему счисления, что и делается в конце следующих примеров:

 

сложение

вычитание

умножение

деление

 

1101

1001

10110

 

1010

111

11

 

111

110

111

111

101010

 

110111            101

101      1011

111

101

101

101

0

 

13 + 9 = 22

10 – 7 = 3

7 × 6 = 42

55 : 5 = 11