Delphi Can
Ortalama aldırma - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Ortalama aldırma (/showthread.php?tid=5054)



Ortalama aldırma - xthief - 05-07-2020

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.


Ortalama aldırma - SimaWB - 05-07-2020

(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?


Ortalama aldırma - mrmarman - 05-07-2020

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. 

  1. Bir tane bölünecek toplam değişkeni belirleyerek,  ilk değer olarak 0'a eşitleyin. 
  2. alt alta üç tane if sorgusu ile her bir 0'dan farklı değer için bu değişkene 1 ekleyin.
  3. Üç 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


Ortalama aldırma - uparlayan - 05-07-2020

Ş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;



Cvp: Ortalama aldırma - xthief - 05-07-2020

(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. 

  1. Bir tane bölünecek toplam değişkeni belirleyerek,  ilk değer olarak 0'a eşitleyin. 
  2. alt alta üç tane if sorgusu ile her bir 0'dan farklı değer için bu değişkene 1 ekleyin.
  3. Üç 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.


Ortalama aldırma - mrmarman - 05-07-2020

@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.


Ortalama aldırma - uparlayan - 05-07-2020

Kimse mükemmel değil Smile


Cvp: Ortalama aldırma - xthief - 05-07-2020

(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.