Çözüldü C++ [0,100] aralığında rastgele üretilen 5 tane reel sayıyı hesaplama

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

umitoznehir

Femtopat
Katılım
8 Haziran 2022
Mesajlar
8
Daha fazla  
Cinsiyet
Erkek
[0,100] aralığında rastgele üretilen 5 tane reel sayının aritmetik, harmonik, geometrik ortalamasını ve varyansını hesaplayan programı yazınız.

Arkadaşlar, ödevim bu şekilde örneğini de bulamadım. Nasıl yapabilirim bilen varsa yardımcı olabilir mi?
 
Son düzenleyen: Moderatör:
Çözüm
C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <tuple>

using namespace std;

tuple<float, float, float, float, float> hesapla(float arr[], int size);

int main()
{
    srand(time(NULL));
    float arr [5];
    int size = sizeof(arr)/sizeof(arr[0]);
    
    for (int i = 0; i < size; i++) {;
        arr[i] = ((float)rand() / (float)RAND_MAX)*100;
    }
    
    auto [aritmetik, harmonik, geometrik, varyans, standart_sapma] = hesapla(arr, size);
    for (auto& num : arr) {
        cout<<num<<endl;
    }
    
    cout << "aritmetik ortalama: " << aritmetik << endl;
    cout << "harmonik ortalama: " << harmonik << endl;
    cout << "geometrik ortalama: " << geometrik << endl;
    cout << "varyans: " << varyans << endl;
    cout << "standart sapma: " << standart_sapma << endl;
    return 0;
}

tuple<float, float, float, float, float> hesapla(float arr[], int size)
{
    float aritmetik = 0, harmonik = 0, geometrik = 1, varyans = 0, standart_sapma = 0;

    for(int i = 0; i < size; i++) {
        aritmetik += arr[i];
        harmonik += (1 / arr[i]);
        geometrik *= arr[i];
    }
    
    aritmetik /= size;
    harmonik = size / harmonik;
    geometrik = pow(geometrik, (float)1 / size);
    
    for(int i = 0; i < size; i++) {
        varyans += (arr[i] - aritmetik) * (arr[i] - aritmetik);
    }
    
    varyans /= size;
    standart_sapma = sqrt(varyans);
    
    return make_tuple(aritmetik, harmonik, geometrik, varyans, standart_sapma);
}
5 adet reel sayı dediğinize göre program 2,1568879 gibi bir sayı da tanımlayabilir değil mi?
evet 0,100 arasında olması gerekiyor sadece.
İnternette fazlasıyla örneği var. Araştırmaya bile tenezzül etmemişsin, bize ödevini yaptırmaya çalışıyorsun.
Araştırdım bulamadım gelip burda agresif yorum yapmanın lüzumu yok uğraşmazsın olur biter.
 
C ve C++'da random mevzusu bir tık sıkıntı. Programlarda tamamen random sayı üretmek çok zor oluyor ben nasıl yapılır bilmiyorum açıkçası ancak kısmen random sayılarla istediğinizi yapan bir program yazabilirim.
 
Aynı sayıların çıkma ihtimali yolda giderken kafama ölmüş dedemin düşme ihtimalinden düşük olduğu için mod her zaman 0 olarak çıkacak muhtemelen.

C++:
#include <iostream>

#include <cstdlib>

#include <ctime>

#include <cmath>

using namespace std;
float toplam;
float harmonik_toplam;
float geometrik_carpim = 1;
float mod;
float counter_global;

int main() {

  float sayilar[5];

  srand(static_cast < unsigned > (time(0)));

  for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 500; j++) { //rastgeleliği artırmak için koyduğum saçma bir şey muhtemelen daha iyi alternatifi vardır ama bilmiyorum. Eğer Kaldırısanız
      rand(); //neden
      //koyduğumu görürüsünüz
    }
    float rnd_sayi = static_cast < float > (rand()) / (static_cast < float > (RAND_MAX / 100));
    sayilar[i] = rnd_sayi;
  }

  for (int i = 0; i < 5; i++) {
    for (int j = i + 1; j < 5; j++) {
      if (sayilar[j] == sayilar[i]) {
        int counter = 0;
        counter++;
        if (counter > counter_global) {
          counter_global = counter;
          mod = sayilar[j];
        }
      }
    }
    toplam += sayilar[i];
    harmonik_toplam += 1 / sayilar[i];
    geometrik_carpim *= sayilar[i];
  }
  for (int i = 0; i < 5; i++) {
    cout << sayilar[i] << endl;
  }
  cout << "Aritmatik Ort= " << toplam / 5 << endl;
  cout << "Harmonik Ort= " << 5 / harmonik_toplam << endl;
  cout << "Geometrik Ort= " << pow(geometrik_carpim, (1.0 / 5)) << endl;
  cout << "Mod= " << mod;

}
Kötü yazım veya olası hatalar için üzgünüm, bu programlamayı hiç kullanmadığım bir alan ve çok bilgim yok açıkçası.
 

Yeni konular

Geri
Yukarı