Arama butonu
Bu konudaki kullanıcılar: 1 misafir
5
Cevap
345
Tıklama
0
Öne Çıkarma
Basit bir c sorusu
M
11 yıl
Yarbay
Konu Sahibi

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 >

M
11 yıl
Binbaşı

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 >
Bu mesaja 1 cevap geldi.
M
11 yıl
Yarbay
Konu Sahibi

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



G
11 yıl
Yarbay

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


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Muco53
_
11 yıl
Yarbay

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



Q
11 yıl
Yüzbaşı

quote:

Orijinalden alıntı: elektro_gadget

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






DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.