Matrislerde aranılan satırdaki en küçük değerin konumu bulma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Matrislerde aranılan satırdaki en küçük değerin konumu bulma

Mesaj gönderen badkursat »

Arkadaşlar bu aralar matris işlemleri ile uğraşmaktayım ve optimizasyon problemleri ile ilgili bir uygulama geliştirmeye çalışıyorum. Matrislerle işlemler yapmak zorundayim ve istediğim satırın içindeki enk değeri buluyorum ama bana gerekli olan konumu bulamıyorum. Sayac koymayı denedim ama pek başarılı olamadım. Yaptığım olay kısaca 4x4 lük bir matris oluşturma ve ilk satırın içindeki en küçük değerin sütun numarasını bulmak. Daha sonra bu sütun numarasını kullanarak en son sütun ile konumunu bulduğum bu sütunu bölmek ve başka bir sütuna bu bölümü yazdırmak. Bir fikriniz varsa yada bu tarz matris işlemlerinin olduğu bir kaynak varsa yazarsanız sevinirim.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Matrislerde aranılan satırdaki en küçük değerin konumu b

Mesaj gönderen SimaWB »

Matris oluşturmak için ben şöyle bir yol izliyorum:

Kod: Tümünü seç

type
  TSatir = TArray<Integer>;
  TMatris = TArray<TSatir>;
bu şekilde tanımlamaları yaptıktan sonra istediğiniz boyutlarda matris tanımlayabilirsiniz.
Örneğin; 3x3'lük bir matris tanımlayalım:

Kod: Tümünü seç

var
  BirMatris: TMatris;
begin
  BirMatris := TMatris.Create(
                        TSatir.Create(8,2,4), 
                        TSatir.Create(1,5,6), 
                        TSatir.Create(5,6,3)
                    );
Böyle bir yapı sayesinde, matris boyutlarını istediğiniz gibi başlangıçta ayarlamış olursunuz. Bundan sonra; örneğin birinci satırdaki maksimum değeri bulmak istiyorsak (birinci satırın indeksinin sıfır olduğunu hatırlatayım):

Kod: Tümünü seç

MaxDeger := MaxIntValue(BirMatris[0])); // yada MinIntValue ile minimum değer
Bulduğunuz değerin hangi sütuna ait olduğunu, yani satır içindeki indeksini basit bir döngü ile bulabilirsiniz...
There's no place like 127.0.0.1
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Re: Matrislerde aranılan satırdaki en küçük değerin konumu b

Mesaj gönderen badkursat »

Cevabınız için çok teşekkür ederim benim için değerli bilgiler var. Bende sorunumu şu şekilde çözdüm benim sorunum bulduğum en küçük değerin arrayin içinde kaçıncı değer olduğu ile ilgiliydi. Onuda biraz klasik bir yöntem olan sayaç koyarak çözdüm. ,

Örneğin böle bir arrayim vardı:

amacfonk : array[0..100] of extended ;

StringGrid' de girdiğim değerleri bu Array' in içine kaydettim:

for sütun := 0 to StringGrid3.ColCount-1 do amacfonk[sütun] := StrToFloat(StringGrid3.Cells[sütun,0]);

Daha sonra da bu dizinin içinden en küçük değerimi bulup sonra tekrar karşılaştırdım ve her eşit olmama durumunda sayacımı bir arttırdım.

enk := amacfonk[0];
for sütun := 0 to StringGrid3.ColCount - 1 do
if enk > amacfonk[sütun] then enk := amacfonk[sütun];
sütun := 0;
while enk <> amacfonk[sütun] do inc(sütun);


Şimdiki sorunumda şu Matrislerde bölüm yapmam gerekiyor ve bazen sıfır değeri karşıma çıkıyor sayının sıfıra bölümü anlamsız olduğundan program hata vermekte bunu nasıl bir kontrol ile çözebilirim acaba çözemedim eğer bir fikriniz varsa çok minnettar kalırım. Şimdiden cevabınız için teşekkür ederim.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Matrislerde aranılan satırdaki en küçük değerin konumu b

Mesaj gönderen SimaWB »

Basit bir şekilde; "if" kullanarak, bölenin sıfır olup olmadığını kontrol edebilirsiniz. Böylece hesaplama yapmadan sonucu istediğiniz değer kabul edersiniz. Yada kodunuzu try-except bloğu içerisinde yazıp, EDivByZero hatasını yakaladığınızda istediğinizi yaptırırsınız.

Not : amacfonk dizisinin en küçük değerinin indeksini bulmak için tavsiye;

Kod: Tümünü seç

function EnKucukDegerinIndeksi(const Arr: array of Extended): Integer;
var
  I: Integer;
  EnKucuk: Extended;
begin
  Result := Low(Arr);  EnKucuk := Arr[Result];
  for I := Low(Arr) + 1 to High(Arr) do
    if EnKucuk > Arr[I] then
    begin
      EnKucuk := Arr[I];
      Result := I;
    end;
end; 
There's no place like 127.0.0.1
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Re: Matrislerde aranılan satırdaki en küçük değerin konumu b

Mesaj gönderen badkursat »

Eyvallah kardeşim çok saol çok işime yaradı yazdığın fonksiyon.
Cevapla