Çözüldü C++ elde edilen değerlerin ortalamasını almak

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

Kenan Atay

Yoctopat
Katılım
26 Kasım 2022
Mesajlar
10
Daha fazla  
Cinsiyet
Erkek
Sorumuz: n'den m'e kadar olan (n ve m kullanıcıdan girilecek 3 basamaklı sayılar) 3 basamaklı doğal sayılardan rakamları toplamı 10 olanların ortalamasını hesaplayıp ekrana yazdıran bir program yazınız.

Rakamları toplamı 10 olan sayıları(c) ve kaç tane (deger) olduklarını buldum. Ortalamasını nasıl alacağımızı bulamadım. Denediğim kodlar hata verdi.

Kod:
#include <stdio.h>
#include <conio.h>
int main()
{

int c,m,n,deger=0;
printf("bir sayi giriniz:");
scanf("%d",&n);
printf("bir sayi giriniz:");
scanf("%d",&m);

for(c=n;c<=m;c++){
  int toplam;
  int onlar,yuzler,birler;
 
  birler=c%10;
  onlar= (c%100)/10;
  yuzler=c/100;
  toplam=onlar+yuzler+birler;
 
 
    if(toplam==10){
    deger+=1;
printf("%d ",c);
printf("deger %d\n",deger);
  }
 

 
}
getch();
return 0;
}
 

Dosya Ekleri

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    3 KB · Görüntüleme: 30
Son düzenleyen: Moderatör:
Çözüm
Değerlerden her zaman M'nin N'den büyük olduğunu varsayarak böyle bir kod yazdım. Umarım işinizi görür.
Ortalamaya gelirsek; rakamları toplamı 10 olan sayıları, toplam adındaki bir değişkende topladım. Sayaç adındaki değişkene de bu sayıların adedini atadım. Daha sonra toplamı bulduğum sayı adedine böldüm. Burada ortalamayı float olarak aldım ki bu sayede ondalıklı değer olarak gösterebilsin.
C:
#include <stdio.h>
main(){
    int n,m,y;
    int Rtoplam=0;
    int toplam=0;
    int sayac=0;

    printf("\n n degerini giriniz");
    scanf("%d",&n);
   
    printf("\n m degerini giriniz");
    scanf("%d",&m);

    for (int i=n;i<=m;i++){
        y=i;
        Rtoplam=0;
       
        for(int j=0;j<3;j++){
            Rtoplam=Rtoplam+(y%10);
            y=y/10;
       
        }
        if(Rtoplam==10){
            toplam=toplam+i;
            sayac++;
        }
    }
   
    float ortalama=(toplam/sayac);
    printf("\n ortalama :%f",ortalama);
}
Birler, onlar, yüzler ve toplam değişkenlerin tanımlamasını for dongusunden önce yapmanız daha sağlıklı olur bence. Onun dışında dikkatimi çeken sorun yoktu kodda.
 
Bayağı bir geç yazıyorum sanırım ama ancak yeni gördüm konuyu. Öncelikle belirtmeliyim ki C++ öğrenmeye daha yeni başladım, dolayısıyla hatam olabilir, maruz görün. Konuyu cevaplama sebebim zaten öğrenmek.

Not: konu başlığında C++ olarak belirtilmiş ama kod aslında daha çok bir C kodu. Ben C++ ile cevaplayacağım.

C++:
#include <iostream>
#include <string>


void print_num(std::string str, std::string value)
{
    std::cout << str << value << "\n";
}

bool check_if_3_digits(int n, int m)
{
    std::string n_str = std::to_string(n);
    std::string m_str = std::to_string(m);

    return ((n_str.length() == 3) && (m_str.length() == 3)) ? true : false;
}


int main()
{
    int n, m;
    double sum = 0, count = 0;

    std::cout << "Enter a starting number: ";
    std::cin >> n;


    std::cout << "Enter a ending number (inclusive): ";
    std::cin >> m;

    if (!check_if_3_digits(n, m))
    {
        std::cout << "The two numbers must always have 3 digits! Aborting...";
        return 0;
    }


    for (n; n <= m; n++)
    {
        int sum_of_digits = (n % 10) + ((n % 100) / 10) + n / 100;
        
        // Bu da başka bir yolu.
        // std::string stringified = std::to_string(n);
        // int sum_of_digits = (int)stringified[0] + (int)stringified[1] + (int)stringified[2] - 48 * 3;
        

        if (sum_of_digits == 10)
        {
            ++count;
            sum += n;
        }

    }

    if (!count)
    {
        std::cout << "No number found!" << "\n";
        return 0;
    }

    print_num("SUM is ", std::to_string(sum));
    print_num("COUNT is ", std::to_string(count));
    print_num("AVERAGE is ", std::to_string(sum / count));

    return 0;
}
 
Değerlerden her zaman M'nin N'den büyük olduğunu varsayarak böyle bir kod yazdım. Umarım işinizi görür.
Ortalamaya gelirsek; rakamları toplamı 10 olan sayıları, toplam adındaki bir değişkende topladım. Sayaç adındaki değişkene de bu sayıların adedini atadım. Daha sonra toplamı bulduğum sayı adedine böldüm. Burada ortalamayı float olarak aldım ki bu sayede ondalıklı değer olarak gösterebilsin.
C:
#include <stdio.h>
main(){
    int n,m,y;
    int Rtoplam=0;
    int toplam=0;
    int sayac=0;

    printf("\n n degerini giriniz");
    scanf("%d",&n);
   
    printf("\n m degerini giriniz");
    scanf("%d",&m);

    for (int i=n;i<=m;i++){
        y=i;
        Rtoplam=0;
       
        for(int j=0;j<3;j++){
            Rtoplam=Rtoplam+(y%10);
            y=y/10;
       
        }
        if(Rtoplam==10){
            toplam=toplam+i;
            sayac++;
        }
    }
   
    float ortalama=(toplam/sayac);
    printf("\n ortalama :%f",ortalama);
}
 
Çözüm

Yeni konular

Geri
Yukarı