IPB
ЛогинПароль:

> Динамические массивы и матрицы
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 килобайт ) Кол-во скачиваний: 1226


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.04.2024 13:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"