C++ tek çift değerleri bulma

Katılım
15 Ağustos 2014
Mesajlar
3.321
Makaleler
2
Çözümler
5
Daha fazla  
Cinsiyet
Erkek
Profil Kapağı
1522193036
Selamlar bugün hocam böyle bir ödev verdi:
Kullanıcıdan 4 adet sayı istenilecek. Bu sayılardan tek olanların aritmetik ortalamasını, çift olanların geometrik ortalamasını hesaplayarak ekrana yazan programı yazınız.

Yeni başladı dersler ve bildiğim şeyler printf, scanf, if, else fonksiyonları. For, while döngülerini de yeni yeni öğreniyorum.
Şimdi sizden programı yazmanızı istemiyorum. Öğrenmek istediğim ben nasıl bu sayıların tek çift olduğunu anlayıp onları belli bir adrese atayacağım? Tek çift bulma konusunda sıkıntı yok onun kodunu yazdım önceki ödevde:
Kod:
#include <stdio.h>
int main(){
 
    int a;
    printf("Bir sayi girin\n");
    scanf("%d",&a);
 
    if (a%2==0){
     
        printf("Sayi cift");
    }
    if (a%2!=0){
        printf("Sayi tek");
    }
    return 0;
    }

Ama sorun bu değil zaten. Ben tek çiftleri programın bulup bunların ortalamasını alınacak tek bir değişkene indirilmesi.

Buna ek olarak ödevimde sadece bir tane "scanf" fonksiyonu kullanabiliyorum. Yol gösterebilir misiniz?
 
Son düzenleyen: Moderatör:
Dostum toplamTek ve toplamCift adında iki adet değişken oluştur. İlk blokta toplamCift += a yap, ikinci blokta da toplamTek += a yap. Ardından da if bloklarının altına gerekli işlemleri bu iki değişken üzerine kur. Ayrıca ikinci if bloğunun başına else ifadesi gelmesi gerek.
 
Yok hocam bu kodu kullanmayacağım. Yeni bir şey yazmaya çalışıyorum. Döngü kullanmam gerekiyor sanırım ama aklım çalışmıyor şuan.
Ek olarak şöyle bir sorun var ki: Aritmetik ortalama alırken dediğinizi kullanabilirim toplamtek/4 yazarak. Ama geometrik ortalama alırken 4 sayıyı çarpıp 4.dereceden karekökünü almam lazım geometrik ortalama için.
 
C++:
#include <iostream>
#include <math.h>

using namespace std;

int main(){
    //4 adet sayı gir
    //çift olanların geometrik ortalamasını hesapla ve ekrana yaz
  
    int a,b,c,d;
    int i = 0;
    int aaa,bbb,ccc,ddd;
  
    cout << "Birinci sayi: ";
    cin >> a;
  
    cout << "ikinci sayi: ";
    cin >> b;
  
    cout << "ucuncu sayi: ";
    cin >> c;
  
    cout << "dorduncu sayi: ";
    cin >> d;
  
    if(a % 2 == 0){
        i++;
    }
    else{
        a = 1;
    }
  
    if(b % 2 == 0){
        i++;
    }
    else{
        b = 1;
    }
  
    if(c % 2 == 0){
        i++;
    }
    else{
        c = 1;
    }
  
    if(d % 2 == 0){
        i++;
    }
    else{
        d = 1;
    }
  
    cout << "Toplam cift sayi degerimiz: " << i << endl;
  
    cout << pow(a*b*c*d, 1.0/(float)i); //geometrik ortalamamız
    return 0;
}

4 adet sayımızı aldık.
Her çift sayı için i değerimizi 1 arttırdık. i değerimiz toplam çift sayı değerimize eşit oldu. i değerimizi kökün derecesi için kullanacağız.
Çift sayı olmayanlara 1 değerini atadık, böylece çarpımın sonucunu etkilemedi.

Aşağıdaki resimde site aracılığı ile doğrulama yaptım.

1571257277609.png

Hem tek hem çift değer için biraz daha kafa yormalıyız :)

Edit: Kafayı yordum. Tek sayıları da hesaplamak için verileri çoğalttım.

C++:
#include <iostream>
#include <math.h>


using namespace std;

int main(){
    //4 adet sayı gir
    //çift olanların geometrik ortalamasını hesapla ve ekrana yaz
    
    int a,b,c,d; //çift sayılar için
    int i = 0, j = 0;
    int aaa,bbb,ccc,ddd; //tek sayılar için
    
    cout << "Birinci sayi: ";
    cin >> a;
    aaa = a;
    
    cout << "ikinci sayi: ";
    cin >> b;
    bbb = b;
    
    cout << "ucuncu sayi: ";
    cin >> c;
    ccc = c;
    
    cout << "dorduncu sayi: ";
    cin >> d;
    ddd = d;
    
    if(a % 2 == 0){
        i++; //sayı çift olduğu için, çift sayacına 1 ekledik.
        aaa = 1; //sayı çift olduğu için, tek sayıların ortalamasına etki etmesin diye, tek sayılardaki muadilini 1'e eşitledik.
    }
    else{
        a = 1; //sayı tek olduğu için çift sayılardaki muadilini 1'e eşitledik. böylece çiftlerin ortalamasına etki etmedi.
        j++; //sayı tek olduğu için tek sayacına 1 ekledik.
    }
    
    if(b % 2 == 0){
        i++;
        bbb = 1;
    }
    else{
        b = 1;
        j++;
    }
    
    if(c % 2 == 0){
        i++;
        ccc = 1;
    }
    else{
        c = 1;
        j++;
    }
    
    if(d % 2 == 0){
        i++;
        ddd = 1;
    }
    else{
        d = 1;
        j++;
    }
    
    cout << "Toplam cift sayi degerimiz: " << i << endl;
    cout << "Toplam tek sayi degerimiz: " << j << endl;
    
    cout << "Cift sayilarin geometrik ortalaması: " << pow(a*b*c*d, 1.0/(float)i) << endl;
    cout << "Tek sayilarin geometrik ortalaması: " << pow(aaa*bbb*ccc*ddd, 1.0/(float)j) << endl;
    return 0;
}

C++ bilgim giriş seviyesinde. Belki daha kolay yöntemden de yapılabilirdi ama bilgilerim buna yetti. Umarım yararlı olur.
 
Son düzenleme:
Ah, çok teşekkür ederim mantığını kavramaya çalışıyorum. Ek olarak tek sayıların aritmetik ortalaması alınacaktı. En son kod satırında

cout<<"Tek sayilarin aritmetik ortalamasi" << (aaa+bbb+ccc+ddd)/4 <<endl;

olarak değiştirmeyi düşündüm ama sorun çıktı. Bir de ona yardım edebilir misiniz?
 
Sanırım hocanız c++ değil c kodunda ödev vermiş. Çünkü yazdığınız koda bakılırsa c kullanıyorsunuz.
Sorunun çözümü:
C:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

int main()
{
    int tek_carpim, cift_toplam, sayi;
    int cift_adet, tek_adet;
    cift_adet = 0;
    tek_adet = 0.0;
    tek_carpim = 1;
    cift_toplam = 0;
    for(int i=0; i < 4; i++)
    {
        printf("Sayi gir: ");
        scanf(" %d", &sayi);
        if (sayi % 2 == 0)
        {
            cift_toplam += sayi;
            cift_adet++;
            sayi = 0;
        }
        else
        {
            tek_carpim *= sayi;
            tek_adet += 1;
            sayi = 0;
        }
    }
    printf("Cift sayilarin a.o %f\n", (float)cift_toplam/cift_adet);
    printf("Tek sayilarin g.o %f", pow(tek_carpim, (1.0/tek_adet)) );
    printf("\nPress any key to continue...");
    getch();
    return 0;
}
 
Sanırım hocanız c++ değil c kodunda ödev vermiş. Çünkü yazdığınız koda bakılırsa c kullanıyorsunuz.
Sorunun çözümü:
C:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

int main()
{
    int tek_carpim, cift_toplam, sayi;
    int cift_adet, tek_adet;
    cift_adet = 0;
    tek_adet = 0.0;
    tek_carpim = 1;
    cift_toplam = 0;
    for(int i=0; i < 4; i++)
    {
        printf("Sayi gir: ");
        scanf(" %d", &sayi);
        if (sayi % 2 == 0)
        {
            cift_toplam += sayi;
            cift_adet++;
            sayi = 0;
        }
        else
        {
            tek_carpim *= sayi;
            tek_adet += 1;
            sayi = 0;
        }
    }
    printf("Cift sayilarin a.o %f\n", (float)cift_toplam/cift_adet);
    printf("Tek sayilarin g.o %f", pow(tek_carpim, (1.0/tek_adet)) );
    printf("\nPress any key to continue...");
    getch();
    return 0;
}
Çok teşekkür ederim. Garip bir sistem var okulda C olarak görüyoruz ama kodları C++'da yazıyoruz. Yani şuan aktif olarak C++ kullanıyorum hiç C'ye elim dokunmadı. Döngüler konusu kafama tam oturmadı onu anlamaya çalışıyorum. Tekrardan çok teşekkürler.
Peki bu değişkenlere atadığımız 0,1,0.1 değerlerini açıklayabilir misiniz?
 
Son düzenleme:
Çarpmada etkisiz eleman olduğu için atarken 1 atadım.
Diğerleride toplama işlemleri olduğu için 0 atadım.
Döngü kurup kurmamak size kalmış.
Ancak eğer hocanız sizden 4 sayı yerine 50 sayı alınacak kullanıcıdan derse, bu şekilde daha basit oluyor.
Döngüler konusunu derste anlamadıysanız youtube veya benzer bir platformdan öğrenmeye çalışın.
İyi çalışmalar.
 
Ah, çok teşekkür ederim mantığını kavramaya çalışıyorum. Ek olarak tek sayıların aritmetik ortalaması alınacaktı. En son kod satırında

cout<<"Tek sayilarin aritmetik ortalamasi" << (aaa+bbb+ccc+ddd)/4 <<endl;

olarak değiştirmeyi düşündüm ama sorun çıktı. Bir de ona yardım edebilir misiniz?

Çift ve tek sayıları hesaplarken eğer sayı çift ise, tek sayıları hesaplarken kullandığımız muadiline 1 değerini atamıştık.
Örneğin c sayısı çift ise, ccc sayısına 1 değerini atadık ve i değerini 1 arttırdık.
Aşağıdaki formülde atadığımız 1 değerlerini siliyoruz ve sadece tek sayıları hesaplamış oluyoruz.

C++:
cout << "Tek sayilarin aritmetik ortalaması: " << (float)(aaa+bbb+ccc+ddd-i)/float(j) << endl;
 
Son düzenleme:
Çift ve tek sayıları hesaplarken eğer sayı çift ise, tek sayıları hesaplarken kullandığımız muadiline 1 değerini atamıştık.
Örneğin c sayısı çift ise, ccc sayısına 1 değerini atadık ve i değerini 1 arttırdık.
Aşağıdaki formülde atadığımız 1 değerlerini siliyoruz ve sadece tek sayıları hesaplamış oluyoruz.

C++:
cout << "Tek sayilarin aritmetik ortalaması: " << (float)(aaa+bbb+ccc+ddd-i)/float(j) << endl;
Teşekkür ederim size de :)
Burada tek sorun printf ve scanf kullanmam gerektiği ve scanf'i sadece bir kere kullanabileceğimdi. E cin de scanf yerine geçiyor 1'i çok aşmışız :D Ama çok teşekkür ederim mantığını oturtmamda yardımcı oluyor.
 
Uyarı! Bu konu 7 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Geri
Yukarı