Модуль позволяет работать с массивами с динамической длинной
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.
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