Хранение данных
Предположим, что вы разработали компьютерную игру под названием "Враждебный пользователь", в которой игроки состязаются с замысловатым и недружественным компьютерным интерфейсом. Теперь вам необходимо написать программу, которая отслеживает ежемесячные объемы продаж этой игры в течение пятилетнего периода. Или, скажем, вам нужно провести инвентаризацию торговых карт героев-хакеров.
Очень скоро вы придете к выводу, что для накопления и обработки информации вам требуется нечто большее, чем простые базовые типы данных.
Массивы (списки). Введение
Для того чтобы было удобно работать с большим количеством данных, группе ячеек дают общее имя. Такую группу ячеек называют
массивом
Массив – это группа ячеек памяти одинакового типа, расположенных рядом и имеющих общее имя. Каждая ячейка в группе имеет уникальный номер.
При работе с массивами надо
научиться решать три задачи:
• выделять память нужного размера под массив
• записывать данные в нужную ячейку
• читать данные из ячейки
Массивы в языке Pascal
Традиционно в языке Паскаль используются статические массивы вида
var a: array [1..10] of integer;
Границы массива обязательно задаются константами, и изменить размер массива в ходе работы программы нельзя. Зато можно сделать индекс не только целого, но и, скажем, символьного или перечислимого типа. Например, для подсчета встречаемости каждой буквы можно использовать массив
var LettersCount: array ['a'..'z'] of integer;
и работать с ним в свое удовольствие:
LettersCount['z'] := 1;
LettersCount['d'] := LettersCount['d'] + 1;
Недостатки таких массивов известны: если заранее неизвестно, сколько элементов потребуется использовать, то под массив отводится память максимального размера. В итоге в большинстве случаев мы "запасаемся впрок", а иногда и этого "запаса" оказывается недостаточно. Именно поэтому такие массивы называются статическими: их размер статичен и должен быть задан на этапе компиляции программы. Однако в Pascal есть и динамические массивы, размер которых можно не только задавать, но и менять по ходу работы программы. Именно об этих массивах и о преимуществах их использования пойдет речь далее.
Создание массива
При создании массива в памяти выделяется место (определенное число ячеек)
1) Массивы можно создать простым перечислением элементов:
var a: array of integer;
SetLength(a, 3);
a[0] := 1;
a[1] := 2;
a[2] := 3;
2) Массивы можно составить из данных любых типов - целых или вещественных чисел, символьных строк
var a: array of char;
SetLength(a, 3);
a[0] := 'a';
a[1] := 'b';
a[2] := 'c';
3) Массив всегда "знает" свой размер. Для определения размера массива используется функция
length
. Часто размер массива хранят в отдельной переменной, чтобы была возможность легко изменить программу для работы с другим размером массива. Пример:
N := 10; //в переменной N храним размер массива
SetLength(a, N); // устанавливаем массиву а размер N
writeln(length(a)); //выводим размер массива
Размер массива можно задавать с клавиатуры.