Меню Новости Программы Статьи Форум Контакты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Статьи
 

СтатьиПрограммированиеPascal

 

Динамический массив в Pascal

Автор: Blacksus

Как-то раз, изучая Turbo Pascal, я столкнулся с проблемой отсутствия в нем динамических массивов. Два дня были потрачены на безрезультатные поиски решения этой проблемы. Но, к сожалению, в интернете было больше вопросов, чем ответов, связанных с этой проблемой. А все ответы были примерно одинаковыми, приводился код:

Складывалось такое впечатление, что люди, которые это писали, либо не читали сам вопрос, либо никогда не включали Turbo Pascal, и просто не понимали, что этот пример работает только на Delphi.

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

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

Для начала приведу общую схему этого массива, рисунок 1.

Рисунок 1

Как видно из рисунка, организация этой структуры полностью идентична двумерному массиву. Доступ к элементам будет осуществляться с помощью специальных процедур, они будут рассмотрены ниже. Ссылка «link» всегда указывает на первый элемент списка, он нужен для процедуры поиска нужного элемента.

Теперь разберемся с процедурами, типами и переменными.

Объявление пользовательских типов:

Глобальные переменные, используемые в процедурах. aa - ссылка, указывающая на первый элемент массива. Эта переменная является самим массивом.

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

Функция извлечения данных из элемента массива. В нее передаются следующие параметры: i - номер строки, j - номер столбца. Возвращаемое значение - данные элемента массива.

Процедура сохранения данных в элемент массива. В нее передаются следующие параметры: i - номер строки, j - номер столбца, el - значение, которое будет сохранено.

Процедура для создания массива. В нее передаются следующие параметры: myi - количество строк, myj - количество столбцов.

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

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

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


Рабочий исходник программы можно скачать тут.

При желании, можно написать процедуру-аналог SetLength, которая будет на лету устанавливать размер массива, но с этим, я думаю, вы справитесь сами.

   

 

Сайт создан в системе uCoz