Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции_ по алгоритм и структуре.doc
Скачиваний:
54
Добавлен:
07.08.2019
Размер:
1.34 Mб
Скачать
  1. Основные понятия структур

    1. Концепция типа данных, простейшие типы данных, стандартные типы данных, органические типы (диапазоны)

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

  • целое число

  • вещественное число

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

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

  • различные множества допустимых значений,

  • храниться в памяти компьютера различным образом,

  • занимать различные объёмы памяти

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

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

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

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

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

В чистом виде таких языков не встречается, но близкие примеры - MS Visual Basic - тип variant, Пролог. В этих языках переменная может принимать значение любого типа, в параметры функции можно передавать значения любых типов, и вернуть функция также может значение любого типа.

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

Например, выражение a + b, может значить

  • сложение чисел, если a и b имеют числовые значения.

  • соединение строк в одну, если a и b имеют строковые значения.

  • недопустимая (ошибочная) операция, если типы значений a и b несовместимы.

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

2. Языки с неявным определением типов. BASIC является примером языка без типов, но это строго типизированный язык в нём различаются:

  • строковые типы (добавляется символ $),

  • массивы (добавляется [])

  • числовые типы (ничего не добавляется).

3 . Языки с типом, определяемым пользователем. Известны языки, в которых типы данных определяются автоматически, а не задаются пользователем.

Каждой переменной, параметру, функции приписывается определённый тип данных.

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

При этом правила обращения с переменными, выражениями и параметрами разных типов могут быть как очень строгими (С++), так и весьма либеральными (Си).

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

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

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

На практике языки программирования поддерживают несколько моделей определения типов одновременно

Практическое применение. Типы языков программирования не всегда строго соответствуют подобным математическим типам.

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

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

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

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

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

  • комплексные;

  • логические переменные

Представляющие собой отдельные значения, множества значений или множества множеств.

Любая константа, переменная, выражение или функция относится к некоторому типу.

Основные принципы концепции типа следующие:

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

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

3. Каждая операция или функция требует аргументов для ее определения и дает результат определенного типа. Если операция допекает аргументы нескольких типов, например «+» используется как для сложения вещественных чисел, так и для сложения целых чисел, то тип результата регламентируется вполне определенными правилами.

4. Важнейшие основные операции — сравнение и присваивание, т. е. Проверка отношения равенства (и порядка в случае упорядочен­ных типов) и действие по "установке равенства".

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

Тип данных определяет:

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

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

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

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

Все типы языка С++ можно разделить на:

  • Простые (скалярные), могут быть стандартными и определенными программистом.

  • Составные (агрегатные)

  • Функциональные.

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

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

  • перечисления,

  • функции,

  • структуры,

  • объединения

  • классы.

Простые типы делятся на:

  • целочисленные типы

  • типы с плавающей точкой.

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

int (целый); Размер типа int стандартом ANSI не определяется. Он зависит от реализации. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного — 4 байта.

char (символьный); Символьный тип (char). Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера. Как правило, это 1 байт.

Тип char, как и другие целые типы, может быть со знаком или без знака.

В величинах со знаком можно хранить значения в диапазоне от –128 до 127. При использовании спецификатора unsignedзначения могут находиться в пределах от 0 до 255. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.

wchar_t дабл-ю-чар-подчеркивание-ти (расширенный символьный); Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short.

bool (логический); Логический тип (bool). Величины логического типа могут принимать только значения true и false. Внутренняя форма представления значения false — 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.

float (вещественный); типа данных для хранения вещественных значений: Внутреннее представление вещественного числа состоит из мантиссы и порядка. Длина мантиссы определяет точность числа, а длина порядка — его диапазон.

Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long). Например, константа 2E+6L будет иметь тип longdouble.

Таблица - Диапазоны значений простых типов данных для IBM PC

№ п.п.

Тип

Диапазон значений

Размер (байт)

2

3

4

Bool

true и false

1

signed char

–128 … 127

1

Unsigned char

0 … 255

1

signed short int

–32 768 … 32 767

2

Unsigned short int

0 … 65 535

2

signed long int

–2 147 483 648 … 2 147 483 647

4

Unsigned long int

0 … 4 294 967 295

4

Float

3.4e–38 … 3.4e+38

4

Double

1.7e–308 … 1.7e+308

8

long double

3.4e–4932 … 3.4e+4932

10

double (вещественный с двойной точностью). типа данных для хранения вещественных значений: СМ. float

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

short (короткий); Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта.

long (длинный); Спецификатор long означает, что целая величина будет занимать 4 байта.

signed (со знаком); При использовании спецификатора signed старший бит числа интерпретируется как знаковый ( 0 — положительное число, 1 — отрицательное).

unsigned (без знака). Константам, встречающимся в программе, приписывается тип в соответствии с их видом. Программист может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned). Например, константа 32L имеет тип long и занимает 4 байта.

ПРИМЕЧАНИЕ

Типы shortint,longint,signedint иunsignedint можно сокращать до short,long, signed иunsignedсоответственно.