Файл: Методы кодирования данных (Основные типы данных и их кодирование).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 27.04.2023

Просмотров: 241

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

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

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

Объект исследования - данные в компьютере.

Предмет исследования – методы кодирования данных для их представления в компьютере.

Для выполнения данного исследования необходимо выполнить следующие задачи:

  • рассмотреть основные типы данных в компьютере и их структуры;
  • рассмотреть современные мотоды кодирования данных;
  • изучить способы кодирования и декодирования данных при их передаче.

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

Глава 1. Понятия и сущность кодирования данных

1.1 Основные типы данных и их кодирование

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


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

Рассмотрим методы кодирования цифровых, текстовых, графических и звуковых данных.

Τᴀᴋᴎᴍ ᴏбᴩᴀᴈᴏᴍ, десятичное число 375,125(10) в двоично-десятичном коде будет выглядеть следующим образом: 001101110101.000100100101.

В дальнейшем эти двоично-десятичные коды по специальной программе переводятся в двоичную систему счисления.

Для кодирования символьных данных существуют две международные системы:

- Восьмиразрядная система ASCII (AMERICAN STANDARD CODE FOR INFORMATIONAL INTERCHANGE – американский стандартный код информационного обмена).

- Шестнадцати разрядная система кодирования UNICODE

Восьмиразрядная система ASCII осуществляет кодирование в пределах одного байта и позволяет получить 256 кодовых комбинаций (28=256).

Существует специальная кодовая таблица для кодирования символьных данных, которая имеет 16 строк и 16 столбцов

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

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

Изначально, типы данных делятся на простые и составные. Простой - это тип данных, объекты (переменные или постоянные) которого не имеют доступной программисту внутренней структуры. Для объектов составного типа данных, в противовес простому, программист может работать с элементами внутренней его структуры.[1]

Числовой тип данных разработан для хранения естественно чисел. Символьный - для хранения одного символа. Логический тип имеет два значения: истина и ложь. Перечислимый тип может хранить только те значения, которые прямо указаны в его описании.

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

В большинстве языков программирования, простые типы жестко связаны с их представлением в памяти компьютера. Компьютер хранит данные в виде последовательности битов, каждый из которых может иметь значение 0 и 1. Фрагмент данных в памяти может выглядеть следующим образом 00011011011100010110010000111011 ...

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


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

Беззнаковые типы данных, в отличии от соответствующих знаковых, имеют в два раза больший диапазон. Это из-за их машинного представления. В знаковых типах первый бит указывает на знак числа: 1 - отрицательное, 0 - положительное.

Исходя из машинного представления целого числа, в ячейке памяти из n бит может хранится 2n для беззнаковых, и 2n-1 для знаковых типов.

Рассмотрим теперь конкретные целочисленные типы в трёх языках.

  • C#
  • C++
  • Java

Таблица 1

Числа вещественного типа данных

Тип

Разрядность в битах

Диапазон чисел

byte

8

0 - 255

sbyte

8

-128 - 127

short

16

-32 768 - 32 767

ushort

16

0 - 65 535

int

32

-2 147 483 648 - 2 147 483 647

uint

32

0 - 4 294 967 295

long

64

-9 223 372 036 854 775 808 - 9 223 372 036 854 775 807

ulong

64

0 - 18 446 744 073 709 551 615

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

(1)

N=M∗10p

где N — записываемое число;

M — мантисса;

p (целое) — порядок.

Например: 14441544=1,4441544*107; 0,0004785=4,785*10-4.

Компьютер же на экран выведет следующие числа:

1,4441544E+7; 4,785E-4

Следовательно, в отведенной памяти хранится мантисса и порядок записываемого числа. Рассмотрим, например, типа данных, который хранится в 8 байтах или 64 битах. В данном случае, мантисса составляет 53 бита: 1 для знака числа и 52 для её значения; порядок 10 битов: 1 бит для знака и 10 для значения. Мы можем в данном случае говорить о диапазоне точности, то есть насколько малое и насколько большое число может хранить данный тип данных: 4,94×10−324 до 1.79×10308. Но, поскольку, память компьютера не безразмерна, да и далеко не всегда нужно, храниться несколько первых разрядов мантиссы, которые называются значащими.[3]

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


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

  • C#
  • C++
  • Java

Таблица 2

Типы данных

Тип

Разрядность в битах

Количество значащих цифр

Диапазон точности

float

32

7

от 1,5*10-45 до 3,4*1038

double

64

15

от 4,9*10-324 до 1,7*10308

decimal

128

28

от 1,0*10-28 до 7,9*1028

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

Символьный тип данных

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

  • C#
  • C++
  • Java

Таблица 3

Символьный тип данных

Тип

Разрядность в битах

char

16

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

Это тип данных, значения которых могут быть: true (правда) или false (ложь). Логическому типу данных соответствуют в С# и C++ тип bool, в Java - boolean.

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

Во внутреннем представлении, это целочисленный тип данных, только здесь пользователь вместо числе использует заранее определенные строковые значения. Чтобы прочувствовать эту концепцию, приведем пример на языке С++ (в С# и Java аналогично)

enum Forms {shape, sphere, cylinder, polygon};

Теперь переменные перечислимого типа Forms могут принимать лишь значения, определенные в примере кода. Это очень удобно, ведь мы уже оперируем не с числами, а с некими смысловыми значениями, замечу лишь, что для компьютера эти значения всё-равно являются целыми числами.

Массив

Далее перейдем к сложным типам данных. Первый из них - это массив. Массив - это набор однотипных переменных, расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу. Индекс массива — целое число, указывающее на конкретный элемент массива.[4]

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


В языках программирования нельзя оперировать всем массивом, работают с конкретным элементом. Чтобы доступиться до него в трёх рассматриваемых нами языках используют оператор "[]".

array[0]

Индекс имеет тип данных чаще всего int.

Структура

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

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

Например, есть колесо автомобиля. У колеса есть диаметр, толщина, шина. Шина в свою очередь является структурой, у которой есть свои параметры: материал, марка, чем заполнена. Естественно, для каждого параметра можно создать свою переменную или константу, у нас появится большое количество переменных, которые, чтобы понять к чему они относятся, нужно в именах общую часть выделять. Имена будут нести лишнюю смысловую нагрузку. Получается запутанная история. А так мы определяем две структуры, а затем параметры в них.

struct Tyre

{

Material material;

int mark;

};

struct Wheel

{

double diameter;

double thickness;

Tyre tyre;

}

Класс

Еще одним пользовательским типом данных является класс. Класс умеет всё, что и структура, но кроме параметров, у него есть и методы, и поддерживает большое количество вещей, связанных с объектно-ориентированным программированием.

1.2 Основные структуры данных

Структуры данных являются важной частью разработки программного обеспечения и одной из наиболее распространенных тем для вопросов на собеседованиях с разработчиками. Хорошая новость в том, что они в основном являются просто специализированными форматами для организации и хранения данных. Из этой статьи вы узнаете о 10 наиболее распространенных структурах данных.[5] Также сюда добавлены видеоролики (на английском языке) по каждой из структур, и код их реализации на JS. А чтобы вы немного попрактиковались, я добавил сюда задачи из бесплатной учебной программы freeCodeCamp.

Обратите внимание, что некоторые из этих структур данных включают временную сложность в нотации Big O. Это не относится ко всем из них, поскольку временная сложность иногда основана на реализации. Если вы хотите узнать больше о нотации Big O, посмотрите видео от Briana Marie.