Другие языки программирования и технологии
Pascal. Двумерный массив
Как создать двумерный массив [1..n, 1..n]. С произвольным вводом переменной n?
Доброго времени суток.
>> var
>> n,i: integer;
>> mas: array [1..n,1..n] of integer;
Компилятор не пропустит такого безобразия, Grand...
А если по сути дела, то Krab Bark совершенно правильно предложил. Позволю себе продемонстрировать пример с динамическим выделением памяти.
{отключаем проверку компилятором границ массива. Необходимо для дин. массивов в Турбо Паскале}
{$R-}
type
MyType = Word; {для примера тип данных матрицы - беззнаковое целое}
PMyVector = ^MyVector;
{"строка" динамической матрицы}
MyVector = Array[1..1] of MyType;
MyArrayPtr = ^MyArray;
{сама матрица - представляется как массив указателей на "строки"}
MyArray = Array[1..1] of PMyVector;
var
DynamicArray : MyArrayPtr; {указатель на матрицу}
Count, i, j : Word;
begin
Write('Число элементов массива: ');
ReadLn(Count); {это ваша размерность матрицы}
{выделяем память под указатели на "строки"}
GetMem(DynamicArray, Count * SizeOf(PMyVector));
{и для каждой "строки" - выделяем память для хранения данных}
for i := 1 to Count do
GetMem(DynamicArray^[ i ], Count * SizeOf(MyType));
for i:=1 to Count do {Rows}
for j:=1 to Count do {Columns}
{немного изменяется способ обращения к элементу матрицы}
DynamicArray^[ i ]^[j] := i * j; {присвоение значений элементам}
{вывод на экран для проверки}
for i:=1 to Count do begin
WriteLn;
for j:=1 to Count do Write(DynamicArray^[ i ]^[ j ]:4);
end;
{освобождаем память в обратном порядке: }
{сначала - удаляем все "строки"}
for i := 1 to Count do
FreeMem(DynamicArray^[ i ], Count * SizeOf(MyType));
{а теперь и указатели на них ...}
FreeMem(DynamicArray, Count * SizeOf(PMyVector));
end.
Удачи!
>> var
>> n,i: integer;
>> mas: array [1..n,1..n] of integer;
Компилятор не пропустит такого безобразия, Grand...
А если по сути дела, то Krab Bark совершенно правильно предложил. Позволю себе продемонстрировать пример с динамическим выделением памяти.
{отключаем проверку компилятором границ массива. Необходимо для дин. массивов в Турбо Паскале}
{$R-}
type
MyType = Word; {для примера тип данных матрицы - беззнаковое целое}
PMyVector = ^MyVector;
{"строка" динамической матрицы}
MyVector = Array[1..1] of MyType;
MyArrayPtr = ^MyArray;
{сама матрица - представляется как массив указателей на "строки"}
MyArray = Array[1..1] of PMyVector;
var
DynamicArray : MyArrayPtr; {указатель на матрицу}
Count, i, j : Word;
begin
Write('Число элементов массива: ');
ReadLn(Count); {это ваша размерность матрицы}
{выделяем память под указатели на "строки"}
GetMem(DynamicArray, Count * SizeOf(PMyVector));
{и для каждой "строки" - выделяем память для хранения данных}
for i := 1 to Count do
GetMem(DynamicArray^[ i ], Count * SizeOf(MyType));
for i:=1 to Count do {Rows}
for j:=1 to Count do {Columns}
{немного изменяется способ обращения к элементу матрицы}
DynamicArray^[ i ]^[j] := i * j; {присвоение значений элементам}
{вывод на экран для проверки}
for i:=1 to Count do begin
WriteLn;
for j:=1 to Count do Write(DynamicArray^[ i ]^[ j ]:4);
end;
{освобождаем память в обратном порядке: }
{сначала - удаляем все "строки"}
for i := 1 to Count do
FreeMem(DynamicArray^[ i ], Count * SizeOf(MyType));
{а теперь и указатели на них ...}
FreeMem(DynamicArray, Count * SizeOf(PMyVector));
end.
Удачи!
Галымжан Калданов
Сложновато. Но все равно спасибо. Хотя мне почему-то кажется что решение другое, попроще. Т.к. "вспоминаю" самое начало паскаля. Попробую разобраться некуда деваться )
Создать массив с запасом по емкости или использовать динамическое выделение памяти.
Галымжан Калданов
Нужно чтобы n с клавы вводилась... ее значение будет использоваться в дальнейшем
program asdf;
var
n,i: integer;
mas: array [1..n,1..n] of integer;
begin
writeln( 'введите размер массива');
readln(n);
for i:=1 to n do
begin
тут массив вводим.. .
end;
end.
я точно не помню как, уже пол года паскаль не изучал.
var
n,i: integer;
mas: array [1..n,1..n] of integer;
begin
writeln( 'введите размер массива');
readln(n);
for i:=1 to n do
begin
тут массив вводим.. .
end;
end.
я точно не помню как, уже пол года паскаль не изучал.
Галымжан Калданов
Как раз так я и пробовал ((
n,i: integer;
mas: array [1..n,1..n] of integer; // тут ошибка n не задано
n,i: integer;
mas: array [1..n,1..n] of integer; // тут ошибка n не задано
Ну если было просто и в начале курса, то
const
n = 10;
var
a:array[0..n, 0..n] of ...;
Но динамические массивы явно лучше
const
n = 10;
var
a:array[0..n, 0..n] of ...;
Но динамические массивы явно лучше
Похожие вопросы
- Помогите решить задачу pascal. Двумерные массивы (подробно)
- Создать двумерный массив. Pascal
- Помогите сделать задания по програмированию(двумерные массивы)Turbo Pascal
- Вопрос по двумерному массиву в Pascal?
- помогите срочно надо Квадратные массивы тема: Двумерные массивы на языке C++
- дан двумерный массив С(3,4).Получите новый массив А путём увеличения всех элементов исходного массива на число С.
- Необходимо упорядочить строки двумерного массива, по возрастанию первого эл-та. СИ.
- .помогите пожалуйста двумерный массив на языке c++
- Как можно передать ДВУМЕРНЫЙ массив в функцию в С++, не создавая его, как глобальный. Пример ниже:
- Что такое Двумерный массив?