Şimdi Ara

Basit bir c sorusu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
6
Cevap
1
Favori
345
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar, bir c sorusu var, soruyu koda aktardım fakat kod çok uzun oldu, bunu kısaltma şansım var mı? Aklıma başka algoritma gelmedi.

    Soru : Klavyeden girilen N adet sayının negatif ve pozitif olanlarının ayrı ayrı ortalamasını bulan programın
    sözde kodunu yazınız ve akış diyagramını çiziniz.

    Yaptığım algoritma :

     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h> // Programın kapanmaması için ekliyoruz.

    int main()
    {

    int sayilarDizisi[] = {};
    int girilecekSayiMiktari = 0;
    float girilecekSayi = 0;
    int i, k;
    int diziUzunlugu = 0;
    int sayiGetir = 0;
    float pozitifSayilar = 0;
    float negatifSayilar = 0;
    int pozitifSayiAdeti = 0, negatifSayiAdeti = 0;
    float sonuc1 = 0, sonuc2 = 0;

    printf("Kac adet sayi gireceksiniz? : \n");
    scanf("%d", &girilecekSayiMiktari);

    for(i = 0; i < girilecekSayiMiktari;i++){
    printf("%d. sayiyi giriniz: \n", i+1);
    scanf("%f", &girilecekSayi);
    sayilarDizisi[i] = girilecekSayi;
    }

    for(k = 0; k < girilecekSayiMiktari; k++){
    sayiGetir = sayilarDizisi[k];
    if(sayiGetir > 0){
    pozitifSayiAdeti++;
    pozitifSayilar += sayiGetir;
    }
    else{
    negatifSayiAdeti++;
    negatifSayilar += sayiGetir;
    }
    }

    sonuc1 = pozitifSayilar / pozitifSayiAdeti;
    sonuc2 = negatifSayilar / negatifSayiAdeti;

    printf("Pozitif sayilarin ortalamasi = %f \n", sonuc1);
    printf("Negatif sayilarin ortalamasi = %f", sonuc2);
    getche(); // Programın kapanmaması için ekliyoruz.
    }




    < Bu mesaj bu kişi tarafından değiştirildi Muco -- 14 Ekim 2014; 19:37:01 >







  • hocam gördüğüm kadarıyla 2 değişkeni gereksiz yere kullanmışsınız o şekilde kısaltabilirsiniz birde ufak tefek mantık sıkıntıları var gördüğüm kadarıyla.

     

    printf("%d. sayiyi giriniz: \n", i+1);
    scanf("%f", &girilecekSayi);
    sayilarDizisi[i] = girilecekSayi;




    bu kısımda sayıyı %f ile okumuşsunuz ancak "sayilarDizisi" int tipinde bu sebeple siz %f ilede okusanız bu aktarım sırasında virgülden sonrasını kaybedeceksiniz.
    burayı kısaltmak için direk diziye okuma yapabilirsiniz şöyleki

     

    printf("%d. sayiyi giriniz: \n", i+1);
    scanf("%d", &sayilarDizisi[i]);



    %d olarak düzelttim çünkü "sayilarDizisi" dizisini integer tanımlamışsınız float istiyorsanız gerekli ayarlamaları yapmalısınız tabii.

      

    for(k = 0; k < girilecekSayiMiktari; k++){
    sayiGetir = sayilarDizisi[k];
    if(sayiGetir > 0){
    pozitifSayiAdeti++;
    pozitifSayilar += sayiGetir;
    }
    else{
    negatifSayiAdeti++;
    negatifSayilar += sayiGetir;
    }



    aynı şekilde burda da bi değişkeni gereksiz kullanmışsınız hocam.
    şöyle yapabilirsiniz.

     

    for(k = 0; k < girilecekSayiMiktari; k++){
    if( sayilarDizisi[k] > 0){
    pozitifSayiAdeti++;
    pozitifSayilar += sayilarDizisi[k];
    }
    else{
    negatifSayiAdeti++;
    negatifSayilar += sayilarDizisi[k];
    }



    bu şekilde bir float bir integer değişkenden kurtulabilirsiniz.



    < Bu mesaj bu kişi tarafından değiştirildi muratcangm -- 14 Ekim 2014; 20:23:16 >




  • quote:

    Orijinalden alıntı: muratcangm

    hocam gördüğüm kadarıyla 2 değişkeni gereksiz yere kullanmışsınız o şekilde kısaltabilirsiniz birde ufak tefek mantık sıkıntıları var gördüğüm kadarıyla.


    Çok sağolun hocam, gözümden kaçmış onlar. Teşekkürler
  • O diziyi o şekilde kullanamazsın ama. Şu bellek işini öğrenemediniz gitti. C ile program yazanların çoğunun kodları karambole çalışıyor. Hoş zaten diziye de gerek yok burada.

    #include<stdio.h> 

    int main()
    {
    int i, adet, n_adet = 0;
    printf("Kaç tane sayı gireceksiniz?: ");
    scanf("%d", &adet);

    float sayi, p_toplam = 0.0f, n_toplam = 0.0f;
    for(i = 1; i <= adet; ++i) {
    printf("%d. sayıyı giriniz: ", i);
    scanf("%f", &sayi);

    if(sayi < 0.0f) {
    n_toplam += sayi;
    ++n_adet;
    }
    else
    p_toplam += sayi;
    }
    printf("Pozitif sayı ortalaması: %.2f\n", p_toplam / (adet - n_adet));
    printf("Negatif sayı ortalaması: %.2f\n", n_toplam / n_adet);

    return 0;
    }




  • niye iki tane loop yaptıgını anlamadım onun yerine tek bir loop da aynı zamanda if-else kullanıp halledebilirdin. Yani dizi kullanmadan sayı pozitifse pozitif sayıları topladıgın degiskene ekleyebilirdin ikinci bir loop kullanmadan
  • quote:

    Orijinalden alıntı: elektro_gadget

    ... Şu bellek işini öğrenemediniz gitti. ...



  • Yapay Zeka’dan İlgili Konular
    C++ Basit Bir Soru
    12 yıl önce açıldı
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.