Основы программирования и баз данных
Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Системы счисления.
Системы счисления (продолжение)
Связи между системами счисления
Связи между системами счисления (продолжение)
Связи между системами счисления (продолжение)
Основы арифметики двоичных чисел
Диапазоны представления целых чисел
Единицы измерения ёмкости запоминающих устройств
Представление символьной информации. Кодовые таблицы
Практика
Понятие типа данных
Понятие типа данных (продолжение)
Создание Переменных/Объектов
Выражения. Операнды.
Идентификаторы. Константы
Арифметические операции
Операции сравнения
Логические операции
Базовые структуры данных – массивы
Базовые структуры данных – массивы (продолжение)
Базовые структуры данных – массивы (продолжение)
Базовые структуры данных – массивы (продолжение)
Динамические структуры данных. Стек.
Динамические структуры данных. Очередь.
Динамические структуры данных. Список.
Динамические структуры данных. Деревья
Основные операции над структурами данных

Основы программирования и баз данных. Модуль 2. Представление информации

1. Основы программирования и баз данных

1

2. Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ

Теория:
Системы счисления
Преобразования между системами счисления
Арифметика систем счисления
Диапазоны представления чисел
Единицы измерения информации
Кодировки, таблицы кодировок
Понятие типа данных
Выражения. Операнды. Знаки операций
Структуры данных
Практика:
Преобразования между системами счисления
Сложение и вычитание в двоичной и шестнадцатеричной системах
2

3. Системы счисления.

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Системы счисления.
Система счисления — способ записи чисел с помощью
набора специальных знаков, называемых цифрами.
Системы счисления подразделяются на
– позиционные
(например, десятичная)
– непозиционные (например, римская)
В позиционных системах счисления величина, обозначаемая
цифрой в записи числа, зависит от её положения в числе
(позиции).
Количество используемых цифр называется основанием
системы счисления
Материал из Википедии — свободной энциклопедии
3

4. Системы счисления (продолжение)

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Системы счисления (продолжение)
1) десятичная
103 102 101 100
1
1
0
9
Значение
1*103 +1*102 +0*101 +9*100 = 1109(10)
2) двоичная
23 22 21 20
1
1
0
Значение
1*23 +1*22 +0*21 +1*20 = 13(10)
1
3) восьмеричная
83
82 81 80
1
1
0
Значение
1*83 +1*82 +0*81 +7*80 = 583(10)
7
4) шестнадцатеричная
163 162 161 160
1
1
0
F
Значение
1*163 +1*162 +0*161 +15*160 = 4367(10)
4

5. Связи между системами счисления

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Связи между системами счисления
Перевод из десятичной в произвольную позиционную
систему счисления:
Для перевода необходимо делить с остатком искомое число на
основание системы счисления до тех пор, пока частное больше
нуля, и записать цифры всех остатков в обратном порядке.
Пример:
• 4410 переведём в двоичную систему:
• 44 делим на 2. частное 22, остаток 0
• 22 делим на 2. частное 11, остаток 0
• 11 делим на 2. частное 5, остаток 1
• 5 делим на 2. частное 2, остаток 1
• 2 делим на 2. частное 1, остаток 0
• 1 делим на 2. частное 0, остаток 1
Теперь, записав цифры всех остатков в обратном порядке, получим
число 1011002
5

6. Связи между системами счисления (продолжение)

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Связи между системами счисления (продолжение)
Перевод из двоичной в восьмеричную и
шестнадцатеричную системы
Для этого типа операций существует
упрощенный алгоритм.
Для восьмеричной — разбиваем число на
триады, преобразуем триады по таблице
Для шестнадцатеричной — разбиваем число
на тетрады, преобразуем тетрады по таблице
Пример:
– преобразуем 1011002
– восьмеричная
— 101 100 → 548
– шестнадцатеричная — 0010 1100 → 2C16
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
6

7. Связи между системами счисления (продолжение)

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Связи между системами счисления (продолжение)
Перевод из восьмеричной и
шестнадцатеричной систем в
двоичную
Для этого типа операций тоже существует
упрощенный алгоритм.
Для восьмеричной — преобразуем цифры
числа по таблице в триады
Для шестнадцатеричной — преобразуем
цифры числа по таблице в тетрады
Пример:
– преобразуем
– 548 → 101 100
– 2C16 → 0010 1100
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
7

8. Основы арифметики двоичных чисел

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Основы арифметики двоичных чисел
Поразрядное сложение с переносом
0 1 1 1
=?
0 1 1 1
= 7
0 1 1 0
=?
0 1 1 0
= 6
? ? ? ?
=?
1 1 0 1
=13
Сдвиг влево
0 0 1 1
=?
0 0 1 1
= 3
0 1 1 0
=?
0 1 1 0
= 6
1 1 0 0
=?
1 1 0 0
=12
Сдвиг вправо
1 1 0 1
=?
1 1 0 1 = 13
0 1 1 0
=?
0 1 1 0
= 6
0 0 1 1
=?
0 0 1 1
= 3
23 22 21 20 Значение(10)
0 0 0 0
0
0 0 0 1
1
0 0 1 0
2
0 0 1 1
3
0 1 0 0
4
0 1 0 1
5
0 1 1 0
6
0 1 1 1
7
1 0 0 0
8
1 0 0 1
9
1 0 1 0
10
1 0 1 1
11
1 1 0 0
12
1 1 0 1
13
1 1 1 0
14
1 1 1 1
15
8

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

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Диапазоны представления целых чисел
Кол-во бит
Запись с порядком
Обычная запись
8
-27 .. 27-1
-128 .. 127
16
-215 .. 215-1
-32768 .. 32767
32
-231 .. 231-1
-2147483648 ..
2147483647
9

10. Единицы измерения ёмкости запоминающих устройств

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Единицы измерения ёмкости
запоминающих устройств
1 бит
= двоичная цифра /логическое значение
8 бит
= 1 байт - символ (ASCII)
1 Кбайт = 210 байт
1 Мбайт = 220 байт
1 Гбайт = 230 байт
1 Тбайт = 240 байт
1 Пбайт = 250 байт
ГОСТ 8.417-2002
10

11. Представление символьной информации. Кодовые таблицы

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Представление символьной информации.
Кодовые таблицы
0 1 2 3 4 5 6 7 8 9 A B C D E F
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
0│ │►│ │0│@│P│`│p│А│Р│а│░│└│╨│р│Ё│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
1│☺│◄│!│1│A│Q│a│q│Б│С│б│▒│┴│╤│с│ё│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
2│☻│↕│"│2│B│R│b│r│В│Т│в│▓│┬│╥│т│Є│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
3│♥│‼│#│3│C│S│c│s│Г│У│г│││├│╙│у│є│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
4│♦│¶│$│4│D│T│d│t│Д│Ф│д│┤│─│╘│ф│Ї│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
5│♣│§│%│5│E│U│e│u│Е│Х│е│╡│┼│╒│х│ї│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
6│♠│▬│&│6│F│V│f│v│Ж│Ц│ж│╢│╞│╓│ц│Ў│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
7│ │↨│'│7│G│W│g│w│З│Ч│з│╖│╟│╫│ч│ў│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
8│ │↑│(│8│H│X│h│x│И│Ш│и│╕│╚│╪│ш│°│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
9│ │↓│)│9│I│Y│i│y│Й│Щ│й│╣│╔│┘│щ│∙│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
A│ │→│*│:│J│Z│j│z│К│Ъ│к│║│╩│┌│ъ│·│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
B│♂│←│+│;│K│[│k│{│Л│Ы│л│╗│╦│█│ы│√│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
C│♀│∟│,│<│L│\│l│|│М│Ь│м│╝│╠│▄│ь│№│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
D│ │↔│-│=│M│]│m│}│Н│Э│н│╜│═│▌│э│¤│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
E│♫│▲│.│>│N│^│n│~│О│Ю│о│╛│╬│▐│ю│■│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
F│☼│▼│/│?│O│_│o│⌂│П│Я│п│┐│╧│▀│я│ │
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
Однобайтные таблицы
(ASCII, ANSI, KOI-8R)
– для представления символов
используются 8-битные
числовые коды
– кодовая таблица позволяет
закодировать 256 различных
символов
Двухбайтная таблица (UNICODE)
– для представления символов
используются 16-битные
числовые коды
– кодовая таблица позволяет
закодировать 65536 различных
символов
11

12. Практика

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Практика
Преобразовать:
– 34, 65, 27, 54
– 10110, 1100, 10101, 1010
Сложение и вычитание:
– 19 + 5 в двоичной системе счисления
– 19 - 5 в двоичной системе счисления
Найти количество комбинаций 0 1:
– в одном байте
– в пяти битах
Преобразовать документ из одной кодировки в другую.
12

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

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Понятие типа данных
Тип данных определяет:
объем блока памяти, выделяемый для хранения значений:
– 1 байт для символьного типа
– 4 байта для целого типа
структурную организацию этого блока памяти:
– наличие или отсутствие знакового разряда для целого типа
– наличие знакового разряда, полей порядка и мантиссы для
плавающего типа
диапазон возможных значений:
– от 0 до 255 (от 00 до FF) для символьного типа
– от -2n-1 до 2n-1-1 для целого типа
набор возможных операций, применяемых к этим значениям:
– для значений плавающего типа не определена операция
вычисления остатка от деления
– к значениям логического типа применяются операции
отрицания, конъюнкции, дизъюнкции
13

14. Понятие типа данных (продолжение)

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Понятие типа данных (продолжение)
В различных языках программирования реализованы те или
иные из перечисленных ниже типов:
простые (скалярные) типы:







логический
символьный
целый
с плавающей точкой
строковый
перечислимый
ссылочный (указатель)
составные (структурные) типы:




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

15. Создание Переменных/Объектов

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Создание Переменных/Объектов
Что? Где? Зачем?
Синтаксис:
тип
данных
имя
=
значение
Примеры:
int a = 4
double b
double c = 1.57
15

16. Выражения. Операнды.

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Выражения. Операнды.
Выражение - математическая формула или иная символическая запись,
содержащая информацию о способе вычисления искомого значения.
Синтаксически выражение строится из операндов и операторов (знаков
операций).
Операнд в языках программирования ― аргумент операции, т.е. значение,
участвующее в вычислении.
– В зависимости от положения операнда относительно знака операции
операции подразделяются на:
• префиксные, например, -x,
• инфиксные,
например, a + b,
• постфиксные, например, x3.
– В зависимости от числа операндов операции подразделяются на:
• одноместные (унарные),
• двуместные (бинарные),
• многоместные операции.
16

17. Идентификаторы. Константы

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Идентификаторы. Константы
В качестве операндов в выражениях используются идентификаторы,
константы и другие выражения (возможно, заключенные в скобки)
Идентификатор (символическое имя)
– это лексема (последовательность допустимых символов языка
программирования, имеющая в нем смысл)
– используется для именование программных сущностей (переменных,
массивов, функций и др.)
– делает возможным ссылки на них в тексте программы
Константа (постоянная величина) — некоторая величина, не изменяющая
своего значения в рамках рассматриваемого процесса.
– Численные литералы (например, 0, -1 или 3.14159) всегда являются
константами.
Вычисление выражений выполняется в соответствии с приоритетами и
ассоциативностью операторов (операций)
17

18. Арифметические операции

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Арифметические операции
Изменение знака
Умножение
Деление
Остаток отделение
Сложение
Вычитание
*
/
%
+
-
18

19. Операции сравнения

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Операции сравнения
Равно
Не равно
Меньше
Меньше или равно
Больше
Больше или равно
Результат всех операций сравнения:
==
!=
<
<=
>
>=
True / False
19

20. Логические операции

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Логические операции
Отрицание
Логическое умножение(конъюнкция)
Логическое сложение (дизъюнкция)
not
and
or
A
B
not A
A and B
A or B
0
0
1
0
0
1
0
0
0
1
0
1
0
1
1
1
1
1
20

21. Базовые структуры данных – массивы

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Базовые структуры данных – массивы
Массив (индексный) — простая статическая структура данных,
предназначенная для хранения набора единиц данных, каждая из
которых идентифицируется индексом или набором индексов.
Индекс — обычно целое число, либо значение типа, приводимого к
целому, указывающее на конкретный элемент массива.
12 25 99 20 …
37
0
N-1
1
2
3

Количество используемых индексов массива может быть различным.
Массивы с одним индексом называют одномерными, с двумя —
двумерными и т. д.
Одномерный массив соответствует вектору в математике,
двумерный -- матрице.
Материал из Википедии — свободной энциклопедии
21

22. Базовые структуры данных – массивы (продолжение)

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Базовые структуры данных – массивы (продолжение)
Специфические типы массивов
– Статические массивы.
• Статическим называется массив, размер которого не может
изменяться во время исполнения программы
– Динамические массивы.
• Динамическим называется массив, размер которого может
меняться во время исполнения программы.
• Для реализации динамики язык программирования должен
предоставлять встроенную поддержку.
– Гетерогенные массивы.
• Гетерогенным называется массив, элементы которого могут
содержать значения, относящиеся к различным типам данных.
• Гетерогенные массивы удобны как универсальная структура для
хранения наборов данных произвольных типов, но требуют
усложнения механизма поддержки массивов в трансляторе языка.
Материал из Википедии — свободной энциклопедии
22

23. Базовые структуры данных – массивы (продолжение)

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Базовые структуры данных – массивы (продолжение)
Достоинства массивов
– легкость вычисления адреса элемента по его индексу (поскольку
элементы массива располагаются один за другим)
h
h
12 25 … 20 …
37
0
N-1
1

i

addr + i * h
– одинаковое время доступа ко всем элементам
– малый размер элементов: они состоят только из
информационного поля
23

24. Базовые структуры данных – массивы (продолжение)

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Базовые структуры данных – массивы (продолжение)
Недостатки массивов
– для статического массива
• отсутствие динамики — невозможность удаления или добавления
элемента без сдвига других
– для динамического и/или гетерогенного массива
• более низкое (по сравнению с обычным статическим)
быстродействие
• дополнительные накладные расходы на поддержку динамических
свойств и/или гетерогенности
Материал из Википедии — свободной энциклопедии
24

25. Динамические структуры данных. Стек.

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Динамические структуры данных. Стек.
Стек (англ. stack = стопка) — структура хранения данных с
дисциплиной доступа к элементам LIFO (Last In — First Out,
«последним пришёл — первым вышел»).
– Операцию добавления элемента на вершину (top) стека называют push,
извлечения — pop.
pop
push
99
19
25
top
12
33
10
Стек широко используется в программировании и является
неотъемлемой частью архитектуры современных процессоров.
– Компиляторы языков программирования высокого уровня используют
стек для передачи параметров при вызове подпрограмм, процессоры —
для хранения адреса возврата из подпрограмм.
25

26. Динамические структуры данных. Очередь.

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Динамические структуры данных. Очередь.
Очередь (англ. queue) — структура хранения данных с
дисциплиной доступа к элементам FIFO (First In — First Out,
"первый пришел - первый вышел").
– Добавление элемента возможно лишь в конец (tail) очереди, выборка только из начала (head) очереди, при этом выбранный элемент из
очереди удаляется.
– Операцию добавление элемента называют enqueue, выборки dequeue.
dequeue
10
head
enqueue
33
12
25
tail
– Очередь широко используется в программировании для синхронизации
процессов обработки (например, сообщений), моделирования систем
массового обслуживания и т.д.
26

27. Динамические структуры данных. Список.

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Динамические структуры данных. Список.
Связанный список — динамическая структура хранения данных,
каждый элемент которой состоит из:
– информационного поля (содержит значение элемента)
– одного (односвязный) или двух (двусвязный) указателей на соседние
элементы.
Список может быть сортированным или несортированным
Достоинства
– лёгкость добавления и удаления элементов
– размер списка ограничен только объемом доступной памяти
Недостатки
– сложно определить адрес элемента по его индексу (номеру) в списке
– на поле указателей расходуется дополнительная память (в массивах
указатели не нужны)
Материал из Википедии — свободной энциклопедии
27

28. Динамические структуры данных. Деревья

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Динамические структуры данных. Деревья
Двоичное дерево — абстрактная структура данных, являющееся
программной реализацией двоичного дерева (графа).
Дерево состоит из узлов (записей) вида
(data, l, r),

где data — некоторые данные привязанные к узлу,
– l, r — ссылки на узлы, являющиеся потомками данного узла.
Узел l называется левым потомком, а узел r — правым.
Материал из Википедии — свободной энциклопедии
28

29. Основные операции над структурами данных

Модуль 2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ
Основные операции над структурами данных
Создать (пустую) структуру данных
Добавить новый элемент
Удалить заданный элемент
Проверить структуру на наличие в ней элементов
Найти элемент(ы) с заданными свойствами
Извлечь значение заданного элемента
Получить элемент, следующий (в некотором порядке ) за текущим
Перебрать (в некотором порядке) все элементы структуры данных
Сортировать (в некотором порядке) все элементы структуры данных
Удалить всю структуру данных
29
English     Русский Правила