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?
function bizimki(const A: array of Real): Real;
gibi birseyler vardi. Bu olmaz mi?
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.
dizinin uzunlugunu bulan fonksiyon kullanmak yerine dizinin uzunlugunu parametre olarak mi bildirmek istiyorsun?
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.
@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.
// 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?
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?
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 (http://www.delphipages.com/edit/count.cfm?ID=1964)
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;