Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Как работать с дву мерным массивом   Найти похожие ветки 

 
Kolan ©   (2004-10-27 18:06) [0]

function TForm1.Get_Finder(A:array of extended):extended;
begin
 result:=A[1,1]*A[2,2]-A[1,2]*A[2,1];
end;
Получаю ошибку array type required. Я не ток массив передпл что-ли


 
Amoeba ©   (2004-10-27 18:09) [1]

type
 MyArr = array of array of extended;

function TForm1.Get_Finder(A:MyArr):extended;


 
Ega23 ©   (2004-10-27 18:12) [2]

Type
TMyArray=array of extended;

function TForm1.Get_Finder(A:TMyArray):extended;
begin
result:=A[1,1]*A[2,2]-A[1,2]*A[2,1];
end;


Попробуй так.


 
Ega23 ©   (2004-10-27 18:13) [3]

Ну да, забыл...
Конечно array of array of extended


 
Kolan ©   (2004-10-27 18:24) [4]

Че т о я тупю
type
DubleArr = array of array of extended;

Вот Ф-ция

procedure TForm1.Solve_System_by_Gauss(A:DubleArr; B:array of extended;var X:array of extended);
var
A_Rev:array [1..2,1..2] of extended;
begin
{Find_Reversed_Matrix(A,A_Rev);  }
end;


А вот я её вызываю

procedure TForm1.Solve_Equation();

var
J:array[1..2,1..2]of extended;    {Ìàòðèöà ßêîáè}
X_Start:array[1..2]of extended;  {Íà÷àëüíîå ïðèáëèæåíèå}
i:integer;  {Ñ÷åò÷èêè}
a,k:real; {Ïàðàìåòðû}
X_Next:array[1..2] of extended;
begin
a:=1;
k:=1;
X_Start[1]:=strtofloat(Get_X0());   {Íà÷àëüíîå ïðèáëèæåíèå}
X_Start[2]:=strtofloat(Get_Y0());   {Íà÷àëüíîå ïðèáëèæåíèå}

J[1,1]:=df_dx(X_Start[1],X_Start[2],a,k);
J[1,2]:=df_dy(X_Start[1],X_Start[2],a,k);
J[2,1]:=dg_dx(X_Start[1],X_Start[2],a,k);
J[2,2]:=dg_dy(X_Start[1],X_Start[2],a,k);

Solve_System_by_Gauss(J,X_Start,X_Next)
--Ошибка Incompatible types---
end;


 
Amoeba ©   (2004-10-27 18:27) [5]

И неудивительно. В заголовке ф-ии параметры B и X являются не динамическими а открытыми массивами. А это "две большие разницы".


 
begin...end ©   (2004-10-27 18:28) [6]


> [4] Kolan ©   (27.10.04 18:24)


> --Ошибка Incompatible types---

Ну так это естественно. Тип параметра, указанный в описании процедуры, не совпадает с типом передаваемой в неё переменной.


 
Ega23 ©   (2004-10-27 18:28) [7]

Ну всё правильно.
Обзови

type
TDubleArr = array of array of extended;
TSingleArr =  array of extended;

procedure TForm1.Solve_System_by_Gauss(A:DubleArr; B:TSingleArr; var X:TSingleArr);
var
A_Rev:array [1..2,1..2] of extended;
begin
{Find_Reversed_Matrix(A,A_Rev);  }
end;


Хотя я бы не стал настолько вольно обращаться со статическими и динамическими массивами.


 
Kolan ©   (2004-10-27 18:30) [8]

Так как же надо - то
PS устал я с этими матрицами. Основная задача вообше другая. Кстати в delphi нет процедур работы с матрицами?


 
Amoeba ©   (2004-10-27 18:34) [9]

Стандартных нет. Но существуют сторонние библиотеки.


 
begin...end ©   (2004-10-27 18:35) [10]


> [8] Kolan ©   (27.10.04 18:30)


> Так как же надо - то

Например - так, как написано в [7].

> Кстати в delphi нет процедур работы с матрицами?

Стандартных - нет. ИМХО. Если не считать SetLength для многомерных массивов. :-)


 
Ega23 ©   (2004-10-27 18:45) [11]

Всегда считал дин.массивы - злом. Нас в универе отправляли переделывать программу, если использовался дин.массив. всё через GetMem(N*SizeOf(TMyType)).


 
begin...end ©   (2004-10-27 18:48) [12]


> [11] Ega23 ©   (27.10.04 18:45)

Так ты, может быть, на Турбо Паскале писАл в универе? ;-)

Уж не знаю, за что динамические массивы можно злом считать...


 
Ega23 ©   (2004-10-27 18:51) [13]

Так ты, может быть, на Турбо Паскале писАл в универе? ;-)

Нет, Д5. Только нас учили базовым приёмом - указатели, выделение памяти, составление списков и т.п. Язык тут, ИМХО, не сильно важен.


 
Romkin ©   (2004-10-27 18:55) [14]

Ega23 ©  (27.10.04 18:51) [13] Ну если базовым - тогда да :)) Я ж еще на TP6 матрицы делал. Именно через GetMem. И функция была, которая возвращает указатель на элемент :)
Сколько крышечек в коде было...


 
Kolan ©   (2004-10-27 18:57) [15]

А не льза статически это сделать. Ведь A:array[1..n] of smth;
можно передать?


 
Kolan ©   (2004-10-27 19:00) [16]

Да и х с ним одномерным обойдусь. Думал все красиво сделать.


 
begin...end ©   (2004-10-27 19:02) [17]


> [15] Kolan ©   (27.10.04 18:57)

Если размерность массива больше 1, то всё равно придётся объявлять свой тип.
Но в случае статического массива, по-хорошему, придётся передавать в подпрограмму и действительное число строк и столбцов - ведь оно может меняться, я правильно понял твой случай? Так что уж лучше работать с динамическими массивами, предварительно объявив тип.
Если же массив - одномерный, то можно и открытым обойтись.


 
Ega23 ©   (2004-10-27 19:02) [18]

Сколько крышечек в коде было...

Эт-точно...  А ошибок-то..... Особенно если вызов рекурсивный...   :о)


 
begin...end ©   (2004-10-27 19:03) [19]


> [16] Kolan ©   (27.10.04 19:00)


> одномерным обойдусь. Думал все красиво сделать.

Вот тебе на. Матрица, и - одномерный массив? Или 2 одномерных массива?

Красивее не придумаешь...


 
Ega23 ©   (2004-10-27 19:04) [20]

Если честно, то я до сих пор боюсь этого SetLength....  :о)
Мне проще TList завести и с ним работать  :о)


 
Ega23 ©   (2004-10-27 19:06) [21]

Вот тебе на. Матрица, и - одномерный массив?

Конечно. Одномерный массив, размером N*M. По-сути, он и есть одномерный, это для удобства кодирования ты его многомерным сделать можешь. А реально - после окончания первой строки лежит начало второй. Индексирование - проще простого.


 
Kolan ©   (2004-10-27 19:07) [22]


> я правильно понял твой случай

Да нет я же как можно проше делаю, а то основное 3-4 ф-ции по 10-15 строк а работа сматрицами 8-10 да если еще универсално делать то...
А матрица у меня 2х2 и все



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.028 c
4-1096915697
Klopan
2004-10-04 22:48
2004.11.14
Обновить часть экрана.


4-1096743336
Sphinx
2004-10-02 22:55
2004.11.14
Блокировка сочетаний клавиш


8-1092313698
serg128
2004-08-12 16:28
2004.11.14
Как записать звук (с микрофона) в AVI файл?


14-1099037093
syte_ser78
2004-10-29 12:04
2004.11.14
К. Кастанеда


14-1098636223
StarkO
2004-10-24 20:43
2004.11.14
ЖСК - квартирный вопрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский