Динамические массивы
Автор работы: Пользователь скрыл имя, 20 Ноября 2013 в 17:51, курсовая работа
Описание работы
Любая программа, написанная на любом языке программирования, работает с данными. Каждый язык программирования имеет свой набор инструментов для их обработки. В исходном виде вся необходимая для работы программы информация представляет собой поток нулей и единиц (биты), сгруппированных в байты, размещаемых в оперативной памяти. Для работы с этими данными язык программирования предоставляет различные типы данных, определяющие множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.
Содержание работы
Введение. 3
Типы данных. 4
Типы данных Free Pascal. 6
Массивы. 7
Динамический массив в Free Pascal. 10
Заключение 17
Список литературы 18
Файлы: 1 файл
Динамические массивы.doc
— 99.50 Кб (Скачать файл)Федеральное агентство связи
Сибирский
Государственный Университет
Межрегиональный центр переподготовки специалистов
Курсовая работа
По дисциплине: Информатика и программирование
Выполнил: Снигирёв А.А.
Группа: ББЗ-31
Вариант: №2
Проверил: Бунцев И.А.
Новосибирск, 2013 г
Оглавление
Введение.
Любая программа, написанная на любом языке программирования, работает с данными. Каждый язык программирования имеет свой набор инструментов для их обработки. В исходном виде вся необходимая для работы программы информация представляет собой поток нулей и единиц (биты), сгруппированных в байты, размещаемых в оперативной памяти. Для работы с этими данными язык программирования предоставляет различные типы данных, определяющие множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.
Концепция типа данных появилась в языках программирования высокого уровня как естественное отражение того факта, что обрабатываемые программой данные могут иметь различные множества допустимых значений, храниться в памяти компьютера различным образом, занимать различные объёмы памяти и обрабатываться с помощью различных команд процессора.
В рамках данной курсовой работы мы в общих чертах рассмотрим существующие типы данных, типы данных, реализованные в языке программирования Free Pascal, и более подробно изучим динамические массивы.
Стоит отметить, что информационные технологии в целом (программирование в частности) динамическая отрасль, поэтому некоторая информация может оказаться уже не актуальной. Каждый день изобретаются новые языки программирования, концепции разработки и архитектурные решения. С другой стороны типизация данных это одно из фундаментальных понятий и не думаю, что в этой области произойдут кардинальные изменения.
Типы данных.
Как правило, типы в языках программирования не всегда строго соответствуют подобным типам в математике. Например, тип «целое число» большинства языков программирования не соответствует принятому в математике типу «целое число», так как в математике указанный тип не имеет ограничений ни сверху, ни снизу, а в языках программирования эти ограничения есть. Как правило, в языках и системах имеется множество целых типов, отличающихся допустимым диапазоном значений (определяемым объёмом занимаемой памяти).
Типы данных бывают следующие:
- Простые.
- Перечисляемый тип. Может хранить только те значения, которые прямо указаны в его описании.
- Числовые. Хранятся числа. Могут применяться обычные арифметические операции.
- Целочисленные: со знаком, то есть могут принимать как положительные, так и отрицательные значения; и без знака, то есть могут принимать только неотрицательные значения.
- Вещественные: с запятой (то есть хранятся знак и цифры целой и дробной частей) и с плавающей запятой (то есть число приводится к виду m*be, где m — мантисса, b — основание показательной функции, e — показатель степени (порядок) (в англоязычной литературе экспонента), причём в нормальной форме 0<=m<b, а в нормализованной форме 1<=m<b, e — целое число и хранятся знак и числа m и e).
- Числа произвольной точности, обращение с которыми происходит посредством длинной арифметики.
- Символьный тип. Хранит один символ. Могут использоваться различные кодировки.
- Логический тип. Имеет два значения: истина и ложь, при троичной логике может иметь и третье значение — «не определено» (или «неизвестно»). Могут применяться логические операции. Используется в операторах ветвления и циклах. В некоторых языках является подтипом числового типа, при этом ложь=0, истина=1.
- Множество. В основном совпадает с обычным математическим понятием множества. Допустимы стандартные операции с множествами и проверка на принадлежность элемента множеству. В некоторых языках рассматривается как составной тип.
- Составные (сложные).
- Массив. Является индексированным набором элементов одного типа. Наиболее популярны: одномерный массив — вектор (в случае чисел) или строковый тип (в случае символов), двумерный массив — матрица.
- Строковый тип. Хранит строку символов. Аналогом сложения в строковой алгебре является конкатенация (прибавление одной строки в конец другой строки). В языках, близких к бинарному представлению данных, чаще рассматривается как массив символов, в языках более высокой абстракции зачастую выделяется в качестве простого.
- Запись (структура). Набор различных элементов (полей записи), хранимый как единое целое. Возможен доступ к отдельным полям записи. Например, struct в C или record в Pascal.
- Файловый тип. Хранит только однотипные значения, доступ к которым осуществляется только последовательно (файл с произвольным доступом, включённый в некоторые системы программирования, фактически является неявным массивом).
- Класс.
- Другие типы данных. Если описанные выше типы данных представляли какие-либо объекты реального мира, то рассматриваемые здесь типы данных представляют объекты компьютерного мира, то есть являются исключительно компьютерными терминами.
- Указатель. Хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.
- Ссылка.
Типы данных Free Pascal.
Язык программирования Free Pascal предоставляет нам следующие типы данных:
- Простые типы:
- Символьный тип:
- Char (1 байт)
- Целые числа:
- Shortint = -127…127 (1 байт)
- Integer = -2147483648…2147483647 (4 байта)
- Longint = -2147483648…2147483647 (4 байта)
- Smallint = -32768…32767 (2 байта)
- Int64 = -263…263 (8 байтов)
- Byte = 0…255 (1 байт)
- Word = 0…65535 (2 байта)
- LongWord = 0…4294967295 (4 байта)
- Cardinal = 0 .. 4294967295 (4 байта)
- Действительные числа:
- Real = 2.9E-39…1.7e38 (8 байтов)
- Single = 1.5E-45…3.4E38 (4 байта)
- Double = 5.0E-324…1.7E308 (8 байтов)
- Extended = 3.4Е-4932…3.4E+4932 (10 байтов)
- Comp = -263…263 (8 байтов)
- Currency = -922337203685477.5808…
922337203685477.5807 (8 байтов) - Логические:
- Boolean (1 байт)
- ByteBool (1 байт)
- WordBool (2 байта)
- LongBool (4 байта)
- Перечислимый тип
- Интервальный тип
- Составные типы:
- Массив
- Строка
- Запись
- Множество
- Файл
Массивы.
Из всего этого многообразия типов нас интересуют на данный момент массивы. Их и рассмотрим в следующем разделе.
Массив — упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.
Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.
Поддержка индексных массивов (свой синтаксис объявления, функции для работы с элементами и т. д.) есть в большинстве высокоуровневых языков программирования. Максимально допустимая размерность массива, типы и диапазоны значений индексов, ограничения на типы элементов определяются языком программирования и/или конкретным транслятором.
В языках программирования, допускающих объявления программистом собственных типов, как правило, существует возможность создания типа «массив». В определении такого типа может указываться размер, тип элемента, диапазон значений и типы индексов. В дальнейшем возможно определение переменных созданного типа. Все такие переменные-массивы имеют одну структуру. Некоторые языки поддерживают для переменных-массивов операции присваивания (когда одной операцией всем элементам массива присваиваются значения соответствующих элементов другого массива).
Пример статического массива на языке Паскаль:
{Одномерный
массив целых чисел.
Нумерация элементов от 1 до 15}
a: array [1..15] of Integer;
{Двумерный массив символов. Нумерация по столбцам по типу Byte (от 0 до 255) по строкам от 1 до 5}
multiArray : array [Byte, 1..5] of Char;
{Одномерный
массив из строк.
Нумерация по типу word (от 0 до 65536)}
rangeArray : array [Word] of String;
Пример статического массива на С/С++:
int Array[10];
// Одномерный массив
целых чисел размера 10
// Нумерация элементов от 0 до 9
double Array[12][15];
// Двумерный массив вещественных
чисел двойной точности
// размера 12 на 15.
// Нумерация по столбцам от 0 до 11,
по строкам от 0 до 14
Существуют специфичные типы массивов:
- Динамические массивы
Динамическим называется массив, размер которого может меняться во время исполнения программы. Язык программирования, поддерживающий динамические массивы, должен предоставлять возможность для изменения размера массива. Динамические массивы делают работу с данными более гибкой, так как не требуют предварительного определения хранимых объёмов данных, а позволяют регулировать размер массива в соответствии с реальными потребностями. Обычные (не динамические) массивы называют ещё статическими.
Пример динамического массива на Delphi:
byteArray : Array of Byte;
// Одномерный массив
multiArray : Array of Array of string;
// Многомерный массив
Пример динамического массива на С++:
float *array1;
// Одномерный массив
int **array2;
// Многомерный массив
array1 = new float[10];
// выделение 10 блоков размером
типа float
array2 = new int*[16];
// выделение 16 блоков размером
типа указателя на int
for(int i = 0; i < 16; i++)
{
array2[i] = new int[8];
}
- Гетерогенные массивы
Гетерогенным называется массив, в разные элементы которого могут быть непосредственно записаны значения, относящиеся к различным типам данных. Массив, хранящий указатели на значения различных типов, не является гетерогенным, так как собственно хранящиеся в массиве данные относятся к единственному типу — типу «указатель». Гетерогенные массивы удобны как универсальная структура для хранения наборов данных произвольных типов. Отсутствие их поддержки в языке программирования приводит к необходимости реализации более сложных схем хранения данных. С другой стороны, реализация гетерогенности требует усложнения механизма поддержки массивов в трансляторе языка.
Динамический массив в Free Pascal.
Одним из вариантов динамического массива в Free Pascal является так называемый открытый массив. Это массив, при описании которого указывается тип составляющих его элементов, но не определяются границы изменения индексов:
имя_открытого_массива: array of array of … тип;
Например:
var
massiv_1: array of real;
massiv_2: array of array of char;
massiv_3: array of array of array of byte;
Распределение памяти и указание границ индексов по каждому измерению открытых массивов осуществляется в ходе выполнения программы с помощью функции SetLength:
SetLength(имя_массива, список_
Для освобождения выделенной памяти нужно выполнить оператор:
имя_массива:=NIL;
Все объявленные в программе
статические переменные, которые
мы рассматривали до этого момента,
размещаются в одной непрерывно
Динамическое размещение данных осуществляется компилятором непосредственно в процессе выполнения программы. При динамическом размещении заранее неизвестно количество размещаемых данных. Кроме того, к ним нельзя обращаться по именам, как к статическим переменным.
Оперативная память ПК представляет собой совокупность элементарных ячеек для хранения информации – байтов, каждый из которых имеет собственный номер. Эти номера называются адресами, они позволяют обращаться к любому байту памяти.
Free Pascal имеет гибкое средство управления памятью – указатели.