Umarým iþinizi görür :
[Not : hesaplamalar veya çevrimlerin doðru yapýlýp yapýlmadigini
kontrol etmedim ]
#include <iostream>
#include <fstream>
#include <string>
#include <math.h>
#define SIZE 20
void yazdir(double *);
double* hesapla(double *,int);
double tmp[3]={0};
int main ()
{
std::ifstream fin;
int i=0,sayac=0;
double girdi[SIZE],*cevap;
char dAdi[20];
std::cout<<"Dosyanýn adýný girin (max 20 karakter): ";
std::cin>>dAdi;
fin.open(dAdi);
while(!fin.eof() && sayac < SIZE)
{
fin>>girdi[i];
std::cout<<"Girdi degeri:" <<girdi[i]<<std::endl;
i++; sayac++;
}
fin.close();
cevap=hesapla(girdi,sayac);
yazdir(cevap);//yazdýrma fonksiyonunun çaðýrýlmasý
return 0;
}
double* hesapla(double *veri,int sayac)
{
int i=0;
double ort=0,med=0,var=0,toplam=0;
for (i =0;i<SIZE;i++)
{
toplam+=veri[i];
}
ort=toplam/sayac;
if((sayac-1)%2!=0)
{
med=(veri[(i+1)/2]+veri[(i+1)/2-1])/2;
}else{
// zaten mod 2in degeri 0 deðilse 1 den baþka þansý yoktur
// o nedenle 2. if ile fazladan kontrole gerek yok else yeterli
med=veri[i/2];
}
//yazdir burda cagrilmisti fakat henuz var hesaplanmamisti!!
toplam=0;//varyans hesabý için toplalamý tekrara kullanacaðýz o
yuzden sýfýrlýyoruz
for(i=0;i<sayac;i++)
{
// { ve } leri tek satýrlýk ifade bile olsa kullanmaya gayret et
veya en azýndan ifadeyi
// tablarla veya bosluklarla blok görünümü oluþturacak þekile sokmayý atlama
toplam+=pow((ort-veri[i]),2);
}
var = toplam/sayac;
tmp[0]=ort;
tmp[1]=med;
tmp[2]=var;
return tmp;
}
void yazdir(double *veri)
{
std::cout<<"Dosyanýzdaki sayýlarýn\n\tAritmetik ortalamasý: "
<<veri[0]<< std::endl;
std::cout<< "\tMedyaný: " << veri[1]<<std::endl;
std::cout <<"\tVaryansý: "<< veri[2]<< std::endl;
}
2008/5/8 Mustafa Ünal <mustafaunl_at_gmail.com>:
>
> burak çekil wrote:
> > merhabalar
> > c++ (projemde) da 20 adet sayýnýn ortalama, medyan ve varyans ýný
> > hesaplayan programýmda; ayrýca 20 adet sayýyý dosyadan alma kýsmýný
> > fonksiyonlar aracýlýðýyla yapma
> > kýsmýnda takýldým... yardýmcý olursanýz sevinirim.
> > Teþekkürler
> > *Programým:
> >
> > void yazdir(dizi[ ]) //fonksiyon aracýlýyla ekrana yazdýrma kýsmýný
> > fonksiyona yaptýrýyorum . ama dosya dan veri alma kýsmýný yapamadým...
> > int main ()
> > {
> > ifstream fin;
> > int i=0,sayac=0;
> > double tmp,toplam,ort,med,var;
> > char dAdi[16];
> >
> > const int B=20;
> > int dizi[B];
> >
> > cout<<"Dosyanýn adýný girin: ";
> > cin>>dAdi;
> >
> >
> > fin.open(dAdi); //dosyadan veri alma
> > while(!fin.eof())
> > {
> > fin>>tmp;
> > dizi[i]=tmp;
> > cout<<dizi[i]<<endl;
> > i++;
> > sayac++;
> > }
> > fin.close();
> >
> > for(i=0;i<sayac;i++)
> > {
> > toplam= toplam+dizi[i];
> > }
> > ort=toplam/sayac;
> >
> > if((sayac-1)%2!=0)
> > med=(dizi[(i+1)/2]+dizi[(i+1)/2-1])/2;
> > if((sayac-1)%2==0)
> > med=dizi[i/2];
> >
> > yazdir(dizi, B);//yazdýrma fonksiyonunun çaðýrýlmasý
> >
> > toplam=0;//varyans hesabý için toplalamý tekrara kullanacaðýz o
> > yuzden sýfýrlýyoruz
> >
> > for(i=0;i<sayac;i++)
> > toplam+=pow((ort-dizi[i]),2);
> > var = toplam/sayac;
> >
> >
> > return 0;
> > }
> >
> > void(int dizi[])
> > {
> > cout<<"Dosyanýzdaki sayýlarýn\n\tAritmetik ortalamasý: " <<ort<< endl;
> > cout<< "\tMedyaný: " << med<<endl;
> > cout <<"\tVaryansý: "<< var << endl;
> > }
> > *
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Linux-programlama mailing list
> > Linux-programlama_at_liste.linux.org.tr
> > http://liste.linux.org.tr/mailman/listinfo/linux-programlama
> >
> Dosya formatýn ne ?
> Bir tane tehlike var sen dosya bitene kadar okuyorsun ama sadece 20 tane
> deðiþkenin var. Sonraki sayýlar nereye gidecek ?
> Ayrýca dosyanýn düzgün açýlýp açýlmadýðýný test et. dizi int tmp double ?
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
-- Ömer Fadýl USTA http://www.bilisimlab.com/ _______________________________________________ Linux-programlama mailing list Linux-programlama_at_liste.linux.org.tr http://liste.linux.org.tr/mailman/listinfo/linux-programlamaReceived on Thu 08 May 2008 - 07:31:58 EEST