2 boyutlu matrislerin function içinden kullanımı

Başlatan bunalmis, 02 Temmuz 2006, 11:36:37

z

A: array [0..100] of array [0..100] of byte;
B: array [0..100] of array [0..100] of byte;

Seklinde tanimlinmis  100x100 boyutunda Global tanimli A ve B matrislerimiz olsun.

for i:=0 to 100 do begin A=0; B=0; end;

gibi bir islemi yapmak yerine A,B,C,D,E gibi diger matrislerde de kullanabilmek icin bu islemi fonksiyon seklinde yazmak isteyelim.

Fonksiyonumuzun adi  kosegen olsun.

Kosegen(A) gibi bir kullanimla A matrisinin satir sutunlarini 0 ile dolsun.

Bu fonksiyona matris ismini nasil gonderecegimi beceremedim.

Yardimci olabilirmisiniz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

function bizimki(const A: array of Real): Real;
gibi birseyler vardi. Bu olmaz mi?

z

Hocam fonksiyona matrisle ilgili oyle bir isim yollamaliyimki fonksiyon icinde o isimin pesine
  • [y] getirdigimde matrisin x,y degeri anlasilsin.

    Senin yazimin tek boyutlu matris oldugunu soyluyor.

    Kosegen(Matris: Array of array of byte):bolean; gibi bir gosterime ise derleyici kiziyor.

    Ben fonksiyona oyle bir parametre yollamaliyimki, fonksiyon bunun iki boyutlu matris olarak kullanilacagini bilsin.

    Bu arada fonksiyonu cagiran tarafta da matris parametre bilgisini nasil yollayacagimi da bilmiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

dizinin uzunlugunu bulan fonksiyon kullanmak yerine dizinin uzunlugunu parametre olarak mi bildirmek istiyorsun?

z

A: array [0..100] of array [0..100] of byte;
B: array [0..100] of array [0..100] of byte;
C: array [0..100] of array [0..100] of byte;
D: array [0..100] of array [0..100] of byte;
E: array [0..100] of array [0..100] of byte;
F: array [0..100] of array [0..100] of byte;

Seklinde tanimlinmis 100x100 boyutunda Global tanimli matrislerim olsun.

Herhangi iki matrisi toplayıp herhangi bir matrise atayan örnek işlemi program içinde aşağıdaki gibi yazarız.


Örneğin C=A+B matris işlemi için kodlama yapalım.

for y:=0 to 100 do
   begin
      for x:=0 to 100 do
         begin
             C[x][y]:=A[x][y]+B[x][y]
         end;
   end;


Aynı şekilde, D ve E matisini toplayıp A'ya atamayı da istersek bu kez, yukarıdaki program parçacığını tekrardan yeni değişkenlere göre düzenleyip yazmamız gerekir.

Bu işlemi bu şekilde değilde fonksiyon çağırarak tek işlemde yapmak istiyorum.

Toplanacak matrislerin isimleriyle, toplam sonucunun yazılacağı matrisin ismini fonksiyona göndereyim, fonksiyon da bana  gerekli işlemi yapsın.

Fonksiyona matrislerin komple içeriğini değil sadece adresleri yollamak istiyorum.

C de bunu pointer kullanarak yapıyoruz fakat Delphide nasıl yapılır bilmiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

@SpeedyX

Sorum anlasılır oldumu?

Bir başka foruma da aynı soruyu sordum.
Yazmaya çalıştığım programda bu sorunu aşmadan ilerliyemeyeceğim.

Benim gibi Delphiyi kıçından öğrenmeye başlarsanız böyle oluyor işte.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

// var GunSaat : array[1..7, 1..24] of Real;


type
  multiArray = array[0..100, 0..100] of Integer;

function deneme(var s:multiArray); xxx;


seklinde denesek?

SpeedyX

type
  mx = array of array of integer;

function dizisil(var C: mx): Array;
var
  x, y: integer;
.
.
.
for y:=0 to length(C)-1 do // yada high(C)
   begin
      for x:=0 to length(C)-1 do // yada high(C)
         begin
             C[x][y]:=0;
         end;
   end;
.
.
.
end;


dizisil(A);


seklinde?

birumher

SpeedyX in yöntemi bence de uygun. Bir başka yöntem de matrisi bir class olarak yaratmak. Eğer örnek istersen bir çok matris işlemini bulabileceğin yardımı vs de olan açık kaynak kodlu bir "library" önerebilirim.

MMEMatrix 0.2b
Birkan.Herguner

Klein

type dblarr = array [0..100] of array [0..100] of byte;

var
Form1: TForm1;
A: dblarr;
b: dblarr;
c: dblarr;
implementation

{$R *.dfm}
procedure sumarr(var ary1:dblarr;
                var ary2:dblarr;
                var aryr:dblarr);
var
Y,x:integer;
begin
for y:=0 to 100 do
  begin
     for x:=0 to 100 do
        begin
            aryr
  • [y]:= ary1
  • [y]+ary2
  • [y]
            end;
      end;

    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     sumarr(c,a,b);
    end;