![]() |
![]() |
Altair |
![]()
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Содержание:
----- ----- ----- ----- ----- Одномерные и многомерные массивы (матрицы) в Паскале. Задание массивов. Тип массив в Паскале задается следующим образом: <имя типа> = ARRAY [<сп.индексов типов>] OF <тип> Где <имя типа> - правильный идентификатор. ARRAY, OF - зарезервированные слова (массив, из) [<сп.индексов типов>] - список из одного или нескольких индексных типов. (задается размерность массива) <тип> - любой тип Паскаля, кроме файлового. После описания типа массива, можно описывать переменные этого типа. Можно не описывать отдельно тип массив, а описать конкретную переменную, как переменную типа массив: <variable> : Array[<index>] OF <type> Где <variable> - правильный идентификатор. Array, OF- зарезервированные слова. <index> - индекс задающий размерность массива. <type> - любой тип Паскаля, кроме файлового. Вкачестве индексных типов можно использовать любые порядковые типы, кроме longint Оюычно в качестве индекстного типа употребляется тип-диапазон, в котором задаются границы изменения индексов. Вложенные массивы или многомерные или матрицы Собственно определение матрицы - прямоугольная сетка чисел, справедливо и для многомерных массивов. По сути это и есть матрица. Задать матрицу в Паскале можно следующим образом: const В данном случае мы описали матрицу размеров NNxMM. Т.е. матрица в понимании компилятора - это массив из массивов.
Глубина вложения массивов произвольна. Т.е. можно задать двухмерный, трехмерный, четырехмерный и так далее массивы. Если в программе два массива заданы одинаково, то одному массиву можно присвоить другой. К элементам массива обращаются по индексам. Пример. {вывод на экран элемент массива A с индексом 5} Нуль-основанный символьный массив - это такой массив, в котором индекс первого элемента равен нулю, а последнего - положительному ненулевому целому числу. Например:
Если вы включаете расширенный синтаксис (с помощью директивы компилятора {$X+}), то нуль-основанный символьный массив может быть инициализирован строкой, длина которой меньше чем объявленная длина массива. (в нулевом элемент такого массива хранится длинна строки. см. FAQ по строкам) Работа с матрицами, ввод матрицы, операции над матрицами, распространенные задачи с матрицами. Матрица - прямоугольная сетка чисел. Элементы матрицы - числа. Каждый элемент матрицы имеет два индекса - номер строки и номер столбца, в котором он расположен. Принято сначала указывать индекс строки, а затем индекс столбца. Создадим тип матрицы: const Очень часто при решении задач, необходимо проходить по всем элементам строки\столбца\строк и столбуов. Для этого используют цикл со счетчиком. (FOR ... TO ... DO ) Ввод матрицы: Опишем процедуры ввода и вывода на экран матрицы. const Сообщение отредактировано: volvo - 13.01.2009 13:35 |
![]() ![]() |
Altair |
![]() ![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Модуль для работы с динамическими массивами.
Модуль позволяет работать с массивами с динамической длинной 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 Прикрепленные файлы ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 2:38 |