Merhaba
3 Alanım var [BIRINCISAYI], [IKINCISAYI], [UCUNCUSAYI],
Bu üç alanın ortalamasını aldırmak istiyorum, alanların hepsi 0 dan büyük ise 3'e, alanlardan herhangi biri 0 ise 2'ye bölecek, alanlardan 2 tanesi 0 ise 1'e bölecek.
Bir türlü sorunu aşamadım. Yardımcı olursanız minnettar olurum.
(05-07-2020, Saat: 18:23)xthief Adlı Kullanıcıdan Alıntı: [ -> ]Bir türlü sorunu aşamadım.
Neler yaptınız da aşamadınız?
Takıldığınız yer neresi?
Yada aldığınız hata mesajı nedir?
Merhaba
* Bakış açısını soruyu lineer kurarak sadeleştirin.
* Yani 1 değer için 1'e, 2 değer için 2'ye, 3 değer için 3'e böleceğiz gibisinden. Yönerge şu şekildedir.
- Bir tane bölünecek toplam değişkeni belirleyerek, ilk değer olarak 0'a eşitleyin.
- alt alta üç tane if sorgusu ile her bir 0'dan farklı değer için bu değişkene 1 ekleyin.
- Üç değeri de, içeriği sıfır olup olmadığını önemsemeden parantez içinde toplayıp, parantez sonunda bu toplam değere bölün.
Kolay gelsin
Şuna benzer bir şey olabilir...
var
A, B, C: Integer; // ortalaması alınacak alanlar
X, Y: Integer; // X bölen, Y Sonuc...
begin
A := 1;
B := 0;
C := 33;
X := Ord(A > 0) + ord(B > 0) + ord (C > 0);
if X < 1 then X := 1;
Y := (A + B + C) div X;
ShowMessage(X.ToString);
ShowMessage(Y.ToString);
end;
(05-07-2020, Saat: 18:42)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba
* Bakış açısını soruyu lineer kurarak sadeleştirin.
* Yani 1 değer için 1'e, 2 değer için 2'ye, 3 değer için 3'e böleceğiz gibisinden. Yönerge şu şekildedir.
- Bir tane bölünecek toplam değişkeni belirleyerek, ilk değer olarak 0'a eşitleyin.
- alt alta üç tane if sorgusu ile her bir 0'dan farklı değer için bu değişkene 1 ekleyin.
- Üç değeri de, içeriği sıfır olup olmadığını önemsemeden parantez içinde toplayıp, parantez sonunda bu toplam değere bölün.
Kolay gelsin
Muharrem Hocam çok teşekkür ederim.
Dediğiniz gibi yaptığımda sorunum çözüldü.
Farklı bir yol ile deniyordum, neden parantez içerisine alıyoruz açıklayabilir misiniz?
(05-07-2020, Saat: 19:02)uparlayan Adlı Kullanıcıdan Alıntı: [ -> ]Şuna benzer bir şey olabilir...
var
A, B, C: Integer; // ortalaması alınacak alanlar
X, Y: Integer; // X bölen, Y Sonuc...
begin
A := 1;
B := 0;
C := 33;
X := Ord(A > 0) + ord(B > 0) + ord (C > 0);
if X < 1 then X := 1;
Y := (A + B + C) div X;
ShowMessage(X.ToString);
ShowMessage(Y.ToString);
end;
Teşekkürler Sayın Hocam.
@
xthief
Cevap "matematik".
* İşlemler/parantezler ile ilişkili öncelikler sonucu belirler.
Örnek :
A = 2
B = 1
C = 3
için
(A + B + C) / 3 = 2
iken parantez olmazsa
A + B + C / 3 = 4
toplamaya göre bölme işlemi önceliklidir. Parantez bu önceliği değiştirmenizi sağlar.
Bu yeterince açık mıdır?
Ayrıca bölme sonucu Tamsayı olmayabilir, ortalama için @
uparlayan integer vermiş ama real tipi bir değişken ( Sonuc : Double ) kullanmanızı öneririm.
(05-07-2020, Saat: 20:27)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]@xthief
Cevap "matematik".
* İşlemler/parantezler ile ilişkili öncelikler sonucu belirler.
Örnek :
A = 2
B = 1
C = 3
için
(A + B + C) / 3 = 2
iken parantez olmazsa
A + B + C / 3 = 4
toplamaya göre bölme işlemi önceliklidir. Parantez bu önceliği değiştirmenizi sağlar.
Bu yeterince açık mıdır?
Ayrıca bölme sonucu Tamsayı olmayabilir, ortalama için @uparlayan integer vermiş ama real tipi bir değişken ( Sonuc : Double ) kullanmanızı öneririm.
Evet işlem önceliğini atlamışım. Teşekkür ediyorum.
Double kullanmıştım zaten.