Matrislerde aranılan satırdaki en küçük değerin konumu bulma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Matrislerde aranılan satırdaki en küçük değerin konumu bulma
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.
Re: Matrislerde aranılan satırdaki en küçük değerin konumu b
Matris oluşturmak için ben şöyle bir yol izliyorum:
bu şekilde tanımlamaları yaptıktan sonra istediğiniz boyutlarda matris tanımlayabilirsiniz.
Örneğin; 3x3'lük bir matris tanımlayalım:
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):
Bulduğunuz değerin hangi sütuna ait olduğunu, yani satır içindeki indeksini basit bir döngü ile bulabilirsiniz...
Kod: Tümünü seç
type
TSatir = TArray<Integer>;
TMatris = TArray<TSatir>;
Ö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)
);
Kod: Tümünü seç
MaxDeger := MaxIntValue(BirMatris[0])); // yada MinIntValue ile minimum değer
There's no place like 127.0.0.1
Re: Matrislerde aranılan satırdaki en küçük değerin konumu b
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.
Ö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.
Re: Matrislerde aranılan satırdaki en küçük değerin konumu b
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;
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
Re: Matrislerde aranılan satırdaki en küçük değerin konumu b
Eyvallah kardeşim çok saol çok işime yaradı yazdığın fonksiyon.