Динамические массивы и матрицы |
Динамические массивы и матрицы |
Altair |
8.11.2004 16:31
Сообщение
#1
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Модуль для работы с динамическими массивами.
Модуль позволяет работать с массивами с динамической длинной Constructor INIT; Инициализирует массив. Требуется запустить лишь один раз - в начале работы с массивом, но после определения начальной длины Procedure SetSizeArray(_Size:word); Устанавливает длинну массива равную _Size. При первом запуске, после нее требуется запустить конструктор. Function GetSizeArray:Word; Возвращает текущую длинну массива. Лучше использовать ее и не открывать доступ к переменной sizeofarray, т.к. последствия могут быть непредсказуемые. Procedure EnteringArray(visible:Byte;VideoMode:Byte); Процедура ввода массива. Не очень надежна, т.к. нет поддержки backspace, но зато возможен ввод в графическом режиме и возможно управлять отображением вводимых чисел. (Для вывода, скажем звездочек вместо вводимых символов, ставим параметр visible=<код звездочки> Videomode может иметь RText или RGraph - соответственно ввод в текстовом и ввод в графическом режиме. Внимание: если тип режима указан неверно, произойдет ошибка периода исполнения. Procedure PrintCRTarray(Videomode:byte); Вывод на экран массива. Возможны 2 режима как и у метода для ввода массива. Procedure QSort(left,right:integer); Быстрая сортировка массива. Procedure HSort; Пирамидальная сортировка массива. Полезна если вы уверены что массив почти или полностью отсортирован. Function GetMaxElem:Telem; Возвращает максимальный элемент массива. Function GetMinElem:Telem; Возвращает мимнимальный элемент массива. Function GetNumMaxElem:Word; Возвращает номер максимального элемента в массиве. (Первого, если таких элементов несколько) Function GetNumMinElem:Word; Возвращает номер минимального элемента. Function ElemInArray(T:Telem):Word; Проверяет вхождение элемента в массив. 0 - если не найдено, иначе индекс элемента. Procedure InvertArray; Инвертирует массив. Вот программа демонстрирующая возможности модуля. Исходный код Program TEST_UNIT_ARRAYS; Uses CRT,Arrays; var a:TArrayWork; i,c:integer; dlinna:word; poisk:Telem; begin CLRSCR; Writeln('Введите длинну:'); readln(dlinna); a.SetSizeArray(dlinna); a.Init; {теперь можно работать} writeln; a.EnteringArray(RealkeyV,RText); writeln('Введенный массив:'); A.PrintCRTArray(RText); writeln; a.hsort; writeln('Отсортированный массив:'); a.printcrtarray(RText); writeln; writeln('Инвертированный:'); a.InvertArray; a.printcrtarray(rtext); writeln; writeln('максимальный элемент: ',a.GetMaxElem); Writeln('минимальный элемент: ',a.GetMinElem); writeln('Номер Макс. элемента: ',a.getnummaxelem); writeln('номер минимального элемента :',a.getnumminelem); write('введите искомый элемент: '); readln(Poisk); if a.eleminarray(poisk)=0 then writeln('не найден!') else Writeln('номер искомого элемента: ',a.eleminarray(poisk)); write('Введите новую длинну: ');readln(dlinna); If dlinna<=a.GetSizeArray then a.SetSizeArray(dlinna) else begin a.setsizearray(dlinna); {a.init;} end; writeln('Элементы массива: '); a.printcrtarray(rtext); readln(a.arr^[dlinna-1]); a.printcrtarray(rtext); end. В присоединенном файле сам модуль. (исходник). ЗЫ: при реализации динамического массива, использовался алгоритм, предложенный volvo Сообщение отредактировано: klem4 - 20.12.2005 21:22 Прикрепленные файлы ARRAYS.PAS ( 5.59 килобайт ) Кол-во скачиваний: 10608 -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
10.11.2004 19:57
Сообщение
#2
|
Гость |
Работа с динамическими массивами
Для того, чтобы работать с динамическими массивами, необходимо перед началом работы выделить память под такой массив, а после использования массива - освободить выделенную память: { Дополнительная информация о реализации динамических массивов (ООП - версия) доступна здесь: Модуль для работы с дин. массивом |
volvo |
25.11.2004 19:13
Сообщение
#3
|
Гость |
Работа с динамическими матрицами
Для того, чтобы работать с динамическими матрицами, проще всего представить матрицу, как массив векторов (массив, содержащий указатели на строки матрицы). Перед началом работы с такой матрицей нужно сначала выделить память под массив указателей на строки, и только потом выделять память для хранения самих данных. После использования матрицы выделенная память освобождается в обратной последовательности: { Дополнительная информация о реализации динамических матриц (ООП - версия) доступна здесь: Модуль для работы с дин. матрицей |
Артемий |
26.09.2007 20:29
Сообщение
#4
|
Помощник капитана Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: 2 |
Динамическая матрица с использованием функций ptr(), seg(), ofs() для получения указателя на нужное число.
const Сообщение отредактировано: volvo - 10.01.2009 14:08 -------------------- Dum spiro spero!
|
Текстовая версия | 22.12.2024 9:17 |