procedure parametre
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
procedure parametre
Merhabalar...
Bir konuyu danışmak istedim.
Benim bu biçimde procedurum var.
Type
a=array of integer;
b=array of a;
procedure dene(d:b);
var
dizi:b;
begin
dizi:=d;
dizi[0][0]:=5;
end;
Burada diziye 5 atadığımda d parametreside 5 atanıyor.yani ikiside eşitleniyor. Bunu nasıl çözebilirim Teşekkürler....
Bir konuyu danışmak istedim.
Benim bu biçimde procedurum var.
Type
a=array of integer;
b=array of a;
procedure dene(d:b);
var
dizi:b;
begin
dizi:=d;
dizi[0][0]:=5;
end;
Burada diziye 5 atadığımda d parametreside 5 atanıyor.yani ikiside eşitleniyor. Bunu nasıl çözebilirim Teşekkürler....
s.a.
aynı şey fontlarla uğraşırken benimde başıma gelmişti.
@mkysoft un dediği gibi pointerları eşitlediği için ikisidedeğişiyordu.
ben assign metodunu kullanarak halletmiştim. gibi bir şey kullanmıştım.
belki işinize yarar.
kolay gelsin.
aynı şey fontlarla uğraşırken benimde başıma gelmişti.
@mkysoft un dediği gibi pointerları eşitlediği için ikisidedeğişiyordu.
ben assign metodunu kullanarak halletmiştim.
Kod: Tümünü seç
font.assign(yenifont)
belki işinize yarar.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Dinamik Kopya Oluştur
prosedür içinde parametre ile gelen diziyle aynı özellikte başka bir dizi oluşturmaktan başka çaren yok. dizi:=b satırı yerine aşağıdaki kodu kullan.
.. ile olan yerlerde dizi değişkeni üzerinde bağımsız olarak istediğin gibi çalışabilirsin. Kolay gelsin.
Kod: Tümünü seç
procedure dene(d:b);
var dizi:b; i,j,x,y:Integer;
begin
//dizi:=d; yerine
x:=high(d);
y:=high(d[0]);
SetLength(dizi,x+1,y+1);
for i:=0 to x do
for j:=0 to y do
dizi[i][j]:=d[i][j];
//bu satırları kullanırsan bağımsız bir kopya elde edersin.
..
dizi[0][0]:=5;//bu diğer diziyi etkilemez
..
SetLength(dizi,0,0);dizi:=nil;{işin bitince hafızadan aldığın yeri iade etmen gerekir}
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
Hocam buda pek mümkün değil çünkü b tipi array a tipi arrayların pointerlarını tutuyor. d arrayını memcopy yapsak bile pointerları kopyalamış olacak. Yine parametreyle gelen arrayla paylaşmış olacaz aynı değerleri. Belki arrayın 2.boyutu memcpy ile copyalanmış arraylara eşitlenebilir. Buda performans açısından çok farkedermi denemek lazım. Çünkü sonuçta bir fonksiyona call yapılıyor çok defa bu yöntemlede. @sabanakman'ın yöntemi en iyi yöntem gibi.Murat DİCLE yazdı:memcopy gibi birşeyle daha hızlı kopyalanabilir düşüncesindeyim.
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
Doğru söylüyorsun. Dizi içinde dizi olunca hafızadaki yerleri farklı olabilir. Sıradan gitmeyebilir. Ama belki tek bir diziyi kopyalamak söz konusu olabilir buda ne kadar gerekli ya da ne kadar performans sağlar tartışılır.undefined yazdı:Hocam buda pek mümkün değil çünkü b tipi array a tipi arrayların pointerlarını tutuyor. d arrayını memcopy yapsak bile pointerları kopyalamış olacak. Yine parametreyle gelen arrayla paylaşmış olacaz aynı değerleri. Belki arrayın 2.boyutu memcpy ile copyalanmış arraylara eşitlenebilir. Buda performans açısından çok farkedermi denemek lazım. Çünkü sonuçta bir fonksiyona call yapılıyor çok defa bu yöntemlede. @sabanakman'ın yöntemi en iyi yöntem gibi.Murat DİCLE yazdı:memcopy gibi birşeyle daha hızlı kopyalanabilir düşüncesindeyim.