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

Лекция 3

Базовые и производные типы

Представление данных. 1

Типы данных. 2

Базовые типы.. 3

Производные типы.. 4

Скалярные типы.. 4

Структурированные типы.. 4

Описание информационного объекта в программе. 5

Определение и объявление объекта. 5

Примеры описаний программных объектов. 5

Определение и инициализация переменных целых типов. 6

Определение и инициализация переменных вещественных типов. 7

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

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

Определение и инициализация переменных-указателей.. 7

Определение и инициализация переменных-ссылок. 8

Форматы некоторых производных типов и их интерпретация. 9

Атрибуты информационного объекта. 12

Класс памяти информационного объекта. 12

Область действия идентификатора информационного объекта программы 14

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

Пространство имен.. 17

Основные правила написания и оформления программ.. 18

Представление данных

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

Переменная:

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

• в каждый конкретный момент времени может иметь только одно значение, которое может изменять в процессе работы программы;

• характеризуется набором некоторых характеристик, называемых атрибутом, и состоянием (значением);

Например, определения переменных:

char symbol;

unsigned short counter;

обеспечивают выделение, соответственно, одного и двух байтов памяти:

Данные представляются в программе в виде констант (мы их рассматривали) и переменных. - student2.ru

Память программы – совокупность переменных, имена которых заданы в программе;

Состояние памяти программы – совокупность состояний (значений) переменных программы.

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

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

Атрибуты данных

Информационный объект в программе характеризуют его атрибуты:

• имя (идентификатор)

• адрес

• значениев конкретный момент времени

• тип

• класс памяти(определяет местонахождение и время существования памяти, сопоставленной с именемобъекта):

- место размещения (регистр, стек, сегмент данных, динамическая память и т.п.);

- время жизни (постоянное, в течение выполнения программы или временное,
в течение выполнения блока);

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

• область действия идентификатора-часть программы, в которой идентификатор объекта можно использовать для доступа к связанной с ним области памяти:

Типы данных

Представление данных связано сихтипом. Концепция типа данных основывается на следующих положениях:

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

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

Статическая типизация(C, C++, Java) предполагает, что тип значения информационного объекта можно определить по его виду или описанию и для переменных он остается неизменным.

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

Язык программирования должен:

l иметь стандартные (предопределенные) типы данных;

l иметь возможность описания новых (пользовательских) типов данных:

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

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

Тип информационного объекта:

определяет:

• внешнее представлениеобъекта на языке программирования;

• внутреннее представлениеобъекта в памяти компьютера;

• требуемоедля объектаколичество памяти при ее начальном распределении;

• множество значений, которые могут принимать величины этого типа;

• способ доступа к элементамсоставных данных;

• совокупность операций и функций, которые можно применять к величинам этого типа;

• интерпретирует двоичные коды значений при последующих обращениях к информационному объекту;

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

С++ обладает средствами, которые позволяют:

l использовать базовые (простые, встроенные, фундаментальные, стандартные) типы данных;

l описывать новые (производные) типы данных.

Базовые типы

К базовым типам относятся:

· арифметические типы

o обобщенные целые (интегральные) типы:

o целые

§ short – короткий целый

§ int –целый

§ long – длинный целый

o символьный

§ char– символьный

§ wchar_t – широкосимвольный

o логический

§ bool

o вещественные типы:

o float – вещественный

o double – вещественный с удвоенной точностью

Таблица 1.6 Базовые типы С++:

название типа нижняя граница диапазона верхняя граница диапазона точность десятичн . разрядов размер в байтах
bool false true  
char signed char -128  
unsigned char  
short short int signed short -32 768 32 767  
unsigned short 65 535  
int signed int -2 147 483 648 2 147 483 647  
unsigned int 4 294 067 295  
long signed long long int 2 147 483 648 2 147 483 647    
unsigned long 4 294 067 295  
float -3.4*1038 3.4*1038
double -1.7*10308 -1.7*10308
void        
void *      
               

Б.Страуструп отмечает, что в большинстве приложений можно обойтись выделенными типами (int, char, bool, double); остальные базовые типы являются вариациями и предназначены для оптимизации и решения специальных задач.

Производные типы

Из базовых типов и типа void, с помощью знаков операций и разделителей *, &, [ ], ( ) и механизмов определения типов структурированных данных, можно конструировать множество производных типов.

Производные типы:

· скалярные;

· структурированные;

· функции;

Скалярные типы

К скалярным типам относятся:

· арифметические типы,

· «пустой» тип void,

· указатели,

· ссылки,

· перечисляемый типenum

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

Объявление перечисляемого типа:

enum имя_типа {значение_1, значение_2, …, значение_n};

Например:

enum color {red, green, blue, black, white}; // определение типа-перечисления

или

enum color {red, green=2, blue, black=7, white}; // определение типа-перечисления

color my_color = red; // определение переменной типа color с инициализацией

Структурированные типы

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

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

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

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

Наши рекомендации