[Linux-programlama] Re: c++ fonksiyon tanımlama yardım

---------

[Linux-programlama] Re: c++ fonksiyon tanımlama yardım

From: Ömer F. USTA <omerusta_at_gmail.com>
Date: Thu, 8 May 2008 08:20:44 +0300
Message-ID: <956cd5870805072220p292ce624v3948c6e435c3284c@mail.gmail.com>

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-programlama
Received on Thu 08 May 2008 - 07:31:58 EEST

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.