Курс: Pascal. Xранение и обработка данных

Модуль: Массивы. Основы

Задачи

Задача

1/10

Массивы (списки). Введение

Ограничение по времени: 500 ms
Ограничение по памяти: 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Теория

Хранение данных

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

Массивы (списки). Введение

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

При работе с массивами надо научиться решать три задачи:
• выделять память нужного размера под массив
• записывать данные в нужную ячейку
• читать данные из ячейки


Массивы в языке 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));  //выводим размер массива
Размер массива можно задавать с клавиатуры.

Задача

Доработайте программу таким образом, чтобы в пятой строке вводилось значение переменной N с клавиатуры, а в шестой строке создавался массив размером N (значения элементов массива могут быть любыми)