Другие языки программирования и технологии

Как задать двумерный динамический массив в Паскале?

Количество строк и столбцов задается пользователем в ходе выполнения программы. Пробовала определить таким образом: type matr=array[0..0,0..0] of integer; ptr=^matr; var mas:ptr; Выделяем память: getmem(mas,strok*stolb*sizeof(integer); К элементу матрицы обращаемся так: a^[i,j] Но при просмотре матрицы ее элементы выводятся не по порядку. Вводим: 1 2 3 4 5 6 7 8 9 При выводе: 1 2 4 4 5 7 7 8 9 Подскажите пожалуйста, в чем может быть ошибка.
Двумерные массивы Паскаля – матрицы
Двумерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов) . Положение элементов в двумерных массивах Паскаля описывается двумя индексами. Их можно представить в виде прямоугольной таблицы или матрицы.

Рассмотрим двумерный массив Паскаля размерностью 3*3, то есть в ней будет три строки, а в каждой строке по три элемента:
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a 21 – это элемент, стоящий во второй строке и в первом столбце. http://www.pascal.helpov.net/index/two-dimensional_arrays_pascal_programming По этой ссылке Вы найдёте полный и подробный ответ.
Aqil Huseynzade
Aqil Huseynzade
52 664
Лучший ответ
В Паскале такого сделать не получится. Просто язык уже старый, там многого нет.
Зато в современных языках типа Java или C# такое можно делать с легкостью.
Нуртай Даиров
Нуртай Даиров
97 950
пиши в агент или аську 452371863
Максим ...
Максим ...
68 014
У тебя компилятор не знает, как по двумерному индексу найти нужный элемент - реальные границы изменения индексов ему не заданы. Так просто это сделать не получится.
В стандартном Паскале работа с динамическими массивами вообще делается через пень-колоду, фактически это был язык обучения программированию, а не реального программирования, чего стоит хтя бы передача массивов в функцию.
Для работы с двумерными динамическими массивами в стандартном Pascal есть два способа - объявить одномерный динамический массив и пересчитывать каждую комбинацию значений индексов явно или через специальную функцию в значение единственного индекса или объявить массив указателей на динамические массивы и потом выделить память под эти массивы, что еще хуже. Так что лучше и проще первый способ.
В более современных версиях Pascal, вроде PascalABC.NET, поддержка динамических массивов реализована нормально, без трюков с указателями и пересчетом индексов.
Сергей Давыдов
Сергей Давыдов
56 928
Delphi и всё там проще и легче

<c#>
Гугл в помощь!
Grigore Savca
Grigore Savca
243