C DİLİNDEKİ DİZİLER KONUSUNDA SORUN....

HPQ-User
28-03-2009, 23:52   |  #1  
OP CHIP Online
Teşekkür Sayısı: 29
30,996 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

I sormuş:
MRB.YENİ C DİLİ ÖĞRENİYORUM.BİR SORUYLA KARŞILAŞTIM AMA TAM OLARAK ÇÖZEMEDİM..
   SORU:ELEMANLARI TAMSAYI OLAN BİR A DİZİSİNE (20 ELEMANLI) RASTGELE SAYILAR ATAYAN, SONRA DİZİ ELEMANLARININ ARİTMETİK ORTALAMASINI HESAPLAYAN VE ELEMANLARDAN KAÇ TANESİNİ BU ORTALAMADAN BÜYÜK VE KÜÇÜK OLDUĞUNU SAYAN PROGRAMI YAZINIZ.ARİTMETİK ORTALAMAYI HESAPLAYAN KISMI VE KAÇ TANESİNİN ORTALAMADAN BÜYÜYK VE KÜÇÜK OLDUĞUNU SAYAN KISMI,İKİ AYRI FONKSİYON OLARAK TANIMLAYIP PROGRAMDA KULLANILACAKTIR.(kullanılacak değişkenler yerek olarak bildirilecektir.)


ben ortalamayı alan programı yazmaya çalıştım umarım doğrudur .....

main(){
int a[20];
int toplam,i,ort;
i=0,toplam=0;
  for(i=0 ; i>20; i++){
    toplam=toplam+i;
    }
  ort=toplam/20;
     printf("ort %d olarak bulundu",ort);
       getch();
       }

ama aynı anda kaç tanesinin büyük olduğunu kaç tanesinin küçük olduğunu sayan programı yazamadım.bu programı nasıl yazabilirim.

GÖRÜŞLERİNİZ İÇİN ŞİMDİDEN TEŞEKKÜRLER...

Soru Türü: Yazılım
İşletim Sistemi: Windows Vista
Sistem Özellikleri:
..

İnternet Tarayıcı: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)

_Neo_
29-03-2009, 17:18   |  #2  
_Neo_ avatarı
Yıllanmış Üye
Teşekkür Sayısı: 0
806 mesaj
Kayıt Tarihi:Kayıt: Haz 2007

programda rastgele sayı yazdırmak istersen rand() fonksiyonunu kullanabilirsin.Rand fonksiyonu rastgele sayı üreten bir fonksiyondur;ancak hep aynı sayılıları üretir.Bunun için srand(time(NULL); eklersen.O zaman aynı sırada sayı üretmeyecektir.

örnege bakabilirsin:(rastgele sayı uretimi)

bunları iki fonksiyon (aritmetik fonksiyon ve aritmetik ortalamdan buyuk kucuk bulma fonksiyonu ) ile yapabilrisin yada  fonksiyon yazmadan(main de) yapabilirsin.Fikrim:Tek tek aldıgın sayıları ve  buldugun aritmetik ortalama döngü ile karsılastırırsın (if/else)buyuk ve kucuk ıcın değişken tanımlarsın.Bcount=0,Kcount=0.Eger buyuk ise Bcount++ -> Bcount=Bcount+1; değilse Kcount++ dersin boylece hem buyuk hemde kucuk sayıların kactane olduguna bakarsın.


main(){

srand(time(NULL));
int a[20];
int toplam,i;

float ort;
i=0,toplam=0;
for(i=0;i<20; i++){

a=1+rand()%20 //1-20 sayısı arasında rastgele sayı atar.
toplam=toplam+a;
}
ort=toplam/20.0;
printf("ort %f olarak bulundu",ort);
getch();
}

Benim Program:ort buluyor ve buyuk olan sayıyı kucuk olanları buluyor.
bunu iki fonksiyon kullanarak yapıyor.Önce rand fonksiyonu(2 fonksiyon dısında bir fonksiyon hazır fonksiyon) kullanarak rastgele sayıları while döngüsü içinde atıyor.Sonra aritmetik adlı fonksiyona girip  main'deki  float yapısındaki k'ya  aritmetik değeri döndürüyor ve yazdırıyor.Ardından 2. fonksiyona gidiyor.3 değer alıyor 1.elimizdeki dizi 2.aritmetik ortalama 3.b dizisi ,void(=geriye bi şey dönmez, bulunan sayıları fonksiyon dısında main'de yazdırmak istediğimden bir dizi  gönderip buyuk ve kucuk kac sayı varsa  onları b[0]=Bcount ,b[1]=Kcount olarak diziye atıyorum.Diziler fonksiyon içinde değişirse ana fonksiyonda da değiştiğinden kolayca main'de bu sayıyı(Bcount,Kcount) yazdırıyorum.Eğer ki bilmediğin karışık gelen bi program ise,birazcık göz at.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void func2(int a[],int Aort,int b[]){
int i=0,Bcount=0,Kcount=0,esit=0;
while(i<20){
if(a<Aort)
Kcount++;
else if(a>Aort)
Bcount++;
else
esit ++;
i++;
}
b[0]=Kcount;
b[1]=Bcount;            //yorum: b[3]=esit; yaparak
                        //esit olanı yazdırabilirsin
}
float  Aritmetik(int x[]){
int i=0,sum=0;   
float y;
for(i=0;i<20;i++)
sum+=x;
return sum/20.0;//float sayı döndürür(ondalık sayı)
}

//ana fonksiyon:
int main()
{ int A[20],B[3],i=0;
float k;
srand(time(NULL));
while(i<20){
A=1+rand()%20; // 1-20 arası rastgele sayı atar.
printf("%d\n",A);//Rastgele alınan sayıları gösterir.
i++;

}
k=Aritmetik(A);

// %2.1f= 2 karakterlik ve noktadan sonra tek
//karakter olarak yaz(2.1 gibi)
printf("20 ramdom sayinin aritmetik ortalamasi:%2.1f\n\n",k);

func2(A,k,B);

printf("Ortalamadan buyuk %d sayi vardir.\nVe ortalamadan kucuk %d sayi vardir.\n",B[0],B[1]);
       
return 0;
}


Son Düzenleme: _Neo_ ~ 29 Mart 2009 20:16