Размеры массива
Есть двумерный динамический массив А(0..X,0..Y) типа матрицы и нужно найти эти X и Y. Допустим X=Length(A), но как найти Y не знаю.
Ну или хотя бы кол-во всех элементов в массиве найти, тож чето не могу найти такой функции. Хелп народ.
Допустим X=Length(A), но как найти Y не знаю.
width(y)
:)))
вообще на сколько я помню (5 лет уже на паскале проги не писал) Length возвращает длину строки. Вернет ли оно размер массива по Х? может быть, но наверное только в случае если это байтовский массив.
А вообще не пойму зачем вычислять размер массива, если Ты сам его задаеш?
width(y)
:)))
вообще на сколько я помню (5 лет уже на паскале проги не писал) Length возвращает длину строки. Вернет ли оно размер массива по Х? может быть, но наверное только в случае если это байтовский массив.
>Вообще Length возвращает нужное мне значение, тоьлко не X, а X+1. Поэтому лучше использовать High(A).
А вообще не пойму зачем вычислять размер массива, если Ты сам его задаеш?
>Собственно ты прав можно и не искать длину массива а восплользоваться данными при заполнении. Но так как там много вариантов конечного массива а еще и обработка массивов процедурой, в которой никак не обойтись без длин, то прога вырастает раз в 4-5. Это конечно не страшно =))), но при отладке хочется повеситься... Ну должны же быть какие то функции.
Хотя б чтоб найти кол-во элементов в массиве!
Хотя б чтоб найти кол-во элементов в массиве! [/QUOTE]
Так ведь никто не мешает написать самому такую функцию. Есть ещё вариант - двумерный массив есть одномерный массив одномерных массивов.:) Может быть, тебе эта мысль что-то даст.;)
Количество элементов посчитать просто - умножь длину на ширину (array [1..i, a..j]; i*j; ), по-моему не такая уж и проблема узнать, чему равны эти i и j. Они же чем-то задаются?
>Да ты приколист. Ради интереса спрашиваю: читал предыдущие посты?
>Можно конечно и даже идеи есть, но а вдруг есть такая стандартная функция.
Как правильно написать проверку задана ли переменная X?(А точнее элемент массива A[j], хотя принцип должен быть одинаковым)
По-моему, такой функции нет. Могу ошибаться.
Как правильно написать проверку задана ли переменная X?(А точнее элемент массива A[j], хотя принцип должен быть одинаковым)
Как вариант, можно задать сразу все переменные при инициализации массива. Например, можно присвоить им какие-то одинаковые значения.
Как вариант, можно задать сразу все переменные при инициализации массива. Например, можно присвоить им какие-то одинаковые значения.
>Ведь для того чтоб задать все элементы массива нужно знать его размеры что мне и нужно. То что ты предложил это то же самое что и использование размеров массива при его инициации, но так как вариантов конечных массивов может быть много(и размеры у них могут быть разные) то намного более экономно написать универсальную процедуру вывода массива X на Y. Да и для обработки тоже удобнее написать пару универсальных процедур.
Короче мне нужно знать вот что:
Пользователь задает значение некой переменной X, и нужно узнать задал ли он значение или же оставил пустой. Что то типа:
IF (X задан) THEN операторы;
Что именно нужно написать в условии???
type Arr=array of real;
...
function CountY(A: array of Arr):byte;
var i:integer;
begin
for i:=0 to 1000 do
begin
try
if A[0]<>0 then continue;
except
on IndexOutOfRangeException do
begin
Result:=i;
break;
end
end;
end;
end;
Все, наконец-то получил эти долбаные размеры. Если кому интересно то размер Y в массиве A(0..X,0..Y) находится так(я не думаю что ктото будет создавать дин. массив с колвом элементов больше чем 1000*(X+1), заполнять заколебается =))) :
Недумаю что это хорошее решение. Вместо того чтобы запомнить размер массива, Ты будеш вычислять его каждый раз с помщью этой не очень-то хорошей функции.
Если уж так влом держать где-то отдельно размеры массива, то сделай структуру (record), в которой будет массив и его размеры:
TYPE
tt = ARRAY of ARRAY of byte;
tArr = record
m: tt;
sizeX, sizeY: integer;
end
VAR
MyArr : tArr;
ну и юзаеш себе теперь MyArr.m[MyArr.SizeX][My.ArrSizeY] - ячейка с максимальными координатами в массиве.
P.S. С синтаксисом может напутал (давно это было)
Все, наконец-то получил эти долбаные размеры. Если кому интересно то размер Y в массиве A(0..X,0..Y) находится так(я не думаю что ктото будет создавать дин. массив с колвом элементов больше чем 1000*(X+1), заполнять заколебается =))) :
type Arr=array of real;
...
function CountY(A: array of Arr):byte;
var i:integer;
begin
for i:=0 to 1000 do
begin
try
if A[0]<>0 then continue;
except
on IndexOutOfRangeException do
begin
Result:=i;
break;
end
end;
end;
end;
Всё гораздо проще чем ты предстваляешь себе:
TMatrix = array of array of real;
//инициализация матицы 10x10
SetLength(MyMatrix,10,10);
//дело в том, что это массив
//динамических массивов
RowLength:=Length(MyMatrix); //кол-во строк
//длина i-строки
ColLength:=Length(MyMatrix);
//в случае прямоугольного массива
if RowLength >0 then ColLength:=Length(MyMatrix[0]);
Т.к. динамический массив в Delphi - это объект, поддерживаемый системой, то функция Length - просто обращается к соответствующему полю у объекта, что очень эффективно :)
Всё гораздо проще чем ты предстваляешь себе:
TMatrix = array of array of real;
//инициализация матицы 10x10
SetLength(MyMatrix,10,10);
//дело в том, что это массив
//динамических массивов
RowLength:=Length(MyMatrix); //кол-во строк
//длина i-строки
ColLength:=Length(MyMatrix);
//в случае прямоугольного массива
if RowLength >0 then ColLength:=Length(MyMatrix[0]);
Т.к. динамический массив в Delphi - это объект, поддерживаемый системой, то функция Length - просто обращается к соответствующему полю у объекта, что очень эффективно :)
Я согласен это просто, но проблема в том что массив надо передать в процедуру, например:
procedure Smthng(Array:array of real);
begin
...
Length(Array) - проходит намана
Length(Array[0]) - компилятор начинает ругаться Error'ами.
...
Как тут быть?
Я согласен это просто, но проблема в том что массив надо передать в процедуру, например:
procedure Smthng(Array:array of real);
begin
...
Length(Array) - проходит намана
Length(Array[0]) - компилятор начинает ругаться Error'ами.
...
Как тут быть?
Так у тебя же array of real, а Length(Arr[Index1][Index2]...[IndexN]) доступна когда у нас массив массивов - т.е. многомерный массив. Вот компилер и ругается - несовместимый тип: реал И массив или строка