Файл: Сравнительный анализ описания данных для различных языков программирования.pdf

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

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

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

Добавлен: 29.03.2023

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

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

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

ВВЕДЕНИЕ

Развитие технологий в 20 веке, в том числе вычислительной техники, привело к тому, что в настоящее время ИТ-технологии проникли практически по все стороны человеческой жизни. Разумеется, что любое «умное» устройство будь то компьютер, микроконтроллер поддерживающий температуру в доме, томограф в больнице или светофор на улице в своей деятельности использует некие алгоритмы именуемые программой. Для создания этих программ используются разнообразные языки программирования. В мире в настоящее время используется большое количество языков программирования для создания разнообразного программного обеспечения. Так, например, в индексе популярности языков программирования выпускаемом на протяжении более десятка лет компанией TIOBE (TIOBE Index) учитывается более 250 языков программирования.[20]

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

Целью данной работы является получение общего представление о типах данных, исследование описания типов данных для различных конкретных языков программирования использующихся в методических материалах в процессе обучения по дисциплине «Основы алгоритмизации и программирования» [6],[11],[12], проведение сравнительного анализа сопоставимых типов, наглядное демонстрирование некоторых приемов и правил работы с разными типами данных в различных языках программирования в связи с применении различных типов данных в разных языках программирования высокого уровня, поскольку они являются одними из главных компонентов для всех современных программ.

1.Общие понятия о типах данных

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

Данные можно разделить на 4 основных вида [1]: Константы – данные, которые заданы и зафиксированы и не могут изменять свое значение в ходе выполнения программы, переменные - данные, которые могут изменять свое значение в ходе выполнения программы; массивы – это данные, которые представляют собой последовательность элементов; списки – это данные представляющие собой последовательность однотипных элементов, при этом каждый элемент, начиная со второго имеет своего предшественника, а все кроме последнего имеют предшествующий. Помимо линейных списков существуют и другие типы списков, такие как стеки, деревья, очереди и т.п. [4]


В обычном, «математическом» представлении написанного на бумаге условия или решения некой задачи можно «на глаз» определить какие переменные или значения используются решении этой задачи. Человек в силу своего опыта и общепринятых норм записи математических выражений может определить и классифицировать является ли какой-то параметр комплексным или целым числом, является ли запись некоей функцией или некоторым логическим сравнением. Для определения значения даже не важен контекст. При взгляде на выражение 2 x 2 = 4 любому человеку ясно что у нас производится действие умножения двух целых (натуральных) чисел и вычисляется результат который также является целым числом, причем знак умножения в данном случае является русской буквой «х».

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

При этом каждый тип таких данных по своему обрабатывается или хранится в памяти ЭВМ, к различным типам данных можно применять различные операции соотносящиеся с этим типом. [10]

Таким образом мы подошли к понятию типов данных использующихся в языках программирования определенным стандартом ISO «Разработка систем и программного обеспечения. Словарь». Тип данных это класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены.[19]

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

К примеру, Б. Страуструп, автор языка С++, описывает следующие фундаментальные типы данных в С++: логический, символьный, целый, с плавающей запятой, перечислимые, тип void и типы которые можно строить поверх перечислимых.[16] А. И. Гусева для языка Pascal 7.0 разделяет типы на следующие: простые, структурированные, процедурные типы, тип указатели и объекты, в свою очередь простые (стандартные) делятся на целые, вещественные, логические, символьные, строковые, тип указатель и т.д.[5], а в языке Qbasic всего два фундаментальных типа – числовой(с различными вариантами) и строковый.

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


Рис. 1. Виды классификаций типов данных

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

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

Вещественные типы представлены числами с дробной частью (при этом надо учитывать, что в языках для представления этих чисел в десятичном виде вместо запятой используется точка). [12]

Тип целые (целочисленный) предназначен для целых чисел, которые в свою очередь могут иметь различную длину, а также иметь положительное или отрицательное значение при явном указании знака. На рисунке 2 показан пример спецификации целого (int) для языка С++.[16]

Рис. 2. Варианты типа int в С++ в зависимости от спецификатора

Символьный тип хранит символ который может быть в различных кодировках. Символом может являться какая либо буква, знак, цифра. По сути дела символьный тип представляет сопоставление символа коду (числу) для различных кодовых таблиц. [17]

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

Логический тип принимает лишь два значения – истина (true) (1) или ложь (false) (0). Широко используется в операторах цикла для проверки какого-либо условия, при ветвлении и т.п.

Тип void присутствует только в языке С++ (из рассматриваемых нами) - тип данных, который означает вообще отсутствие любого типа данных.[15]

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


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

Тип данных массив описывает непрерывную последовательность элементов одного типа.

Строковый тип данных хранит строку символов. Его можно рассматривать как одномерный массив, но в рассматриваемых нами языках программирования Pascal и Qbasic он выделен в отдельный тип базовый тип. [6], [11]

Тип данных запись в общем случае состоит из объединения различных произвольных типов данных. В свою очередь типы составляющие запись сами могут являться записями. В языке программирования С++ наименование этого типа – структура.[16]

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

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

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

2. Сравнительны анализ описания типов данных

Для проведения сравнительного анализа описания различных сопоставимых типов данных используем три языка программирования Qbasic, Pascal и С++.

Язык программирования Qbasic является продолжением развития языка программирования BASIC ( Beginner's All-purpose Symbolic Instruction Code) созданного в 60-х годах профессорами Дартмурского Колледжа (США) Дж. Кемени и Куртисом. Несмотря на то, что программы, написанные на этом языке, могут выполняться только внутри его среды (интерпретатор) он является одним из простым и понятных языков для начала обучения программированию.[10]

Язык программирования Pascal был создан в конце 60-х годов 20-го века швейцарцем Н. Виртом и назван именем математика и философа Блеза Паскаля. Изначально он задумывался как язык для обучения студентов структурному программированию. Однако поскольку в Паскале были реализованы прогрессивные идеи того времени, он получил распространение среди практикующих программистов. На нем начали писать не только прикладные, но даже системные программы. В последних версиях языка имелась возможность работы не только в среде DOS, но и Windows. Дальнейшим развитием языка стал PascalABC.NET поддерживающий широкие возможности платформы .NET. [3]


Язык программирования С++ созданный Б. Страуструпом в начале 80-х годов 20 века путем усовершенствования и развития языка С под собственные нужды. В настоящее время он является одним из популярнейший языков программирования. Язык С++ постоянно динамично развивается, вносимые изменения стандартизируются Международной организацией по стандартизации (International Organization for Standardization, ISO) в данный момент действует стандарт ISO/IEC 14882:2017 [ISO/IEC 14882:2017] Programming languages — C++ и разрабатывается новый. [18] Исходя из этого использование книг написанных о языке С++ Б. Страуструпом представляется вполне логичным и обоснованным.

2.1. Базовые целочисленные типы

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

В языке программирования Qbasic ими являются следующие типы числовых данных – целые (integer), целые длинные («long integer» или long). [10]

Для языка программирования Pascal определено 5 таких типов: shortint, integer, longint, byte и word. [14]

Для языка С++ определен тип int который может принимать различные виды в зависимости от спецификатора signed который определяет знак (как положительные, так и отрицательные значения) и спецификатора unsigned –беззнаковый (только лишь положительные значения). Второй тип спецификатора для типа int определяет длину short и long. Таким образом тип целые может принимать следующие виды: short int, unsigned short int, int, unsigned int, long int, unsigned long int. Тип int в зависимости от архитектуры процессора может занимать 2 байта (16 бит) или 4 байта (32 бита). В результате этого принимаемые значений также могут варьироваться в различных диапазонах. Но в любом случае размер должен быть больше или равен размеру типа short и меньше или равен размеру типа long. [8] Начиная с версии C++11 введен спецификатор long long для int, который гарантирует выделение под значение 8 байт. Соответственно int может получать тип signed long long, signed long long int и аналогично со спецификатором unsigned в различных диапазонах.

Так как все эти типы имеют разные принимаемый диапазон, а соответственно и объем, который выделяется для них в памяти, сведем все данные (без учета long long для С++) в единую таблицу 1.

Таблица 1.

Сопоставление целочисленных типов данных QBasic, Pascal, С++.

QBasic

Pascal

С++

Тип

Размер

байт

Диапазон

значений

Тип

Размер

байт

Диапазон

значений

Тип

Размер

байт

Диапазон

значений

shortint

1

-128/127

byte

1

0/255

integer

2

-32768 /

32767

integer

2

-32768 /

32767

short int

2

-32768 /

32767

word

2

0 / 65535

unsigned

short

2

0 / 65535

unsigned int

2/4

в зависимости от архитектуры 0 / 4294967295

long integer

4

- 2147483648/

2147483647

longint

4

-2147483648/

2147483647

long int

4

-2147483648 /

2147483647

unsigned long

4

0 / 4294967295