PDA

Visualizza la versione completa : [C] Piano cartesiano e distribuzione normale


frizzo28
24-02-2007, 16:52
Ciao a tutti dovrei realizzare il seguente programma:
"Realizzare un programma che dato in input media e varianza sia in grado di disegnare sul piano cartesiano il grafico di una distribuzione normale";
x calcolare la normale ho scritto la formula e funziona ora il problema è come faccio a fare il grafico dato che il risultato della funzione è sempre un numero tio 0.00457?

il grafico dovrebbe essere una cosa del genere:

http://ishtar.df.unibo.it/stat/img/gaussstandard.gif

P.S. Come compilatore uso turbo c++ della borland
grazie
ciao

oregon
24-02-2007, 17:04
Lo scali, moltiplicandolo per una costante ...

frizzo28
24-02-2007, 17:28
Il problema è per quanto moltiplico?
perchè il risultato potrebbe essere 0,00394
oopure 0,010859
la risoluzione di turbo c è 640 x480
come potrei fare x trovarmi i punti?
grazie

oregon
24-02-2007, 17:53
Puoi calcolare la funzione due volte.

La prima volta trovi il massimo e determini la costante.

La seconda volta utilizzi la costante in modo da essere sicuro che ci stia tutta.

frizzo28
24-02-2007, 18:18
Originariamente inviato da oregon
Puoi calcolare la funzione due volte.

La prima volta trovi il massimo e determini la costante.

La seconda volta utilizzi la costante in modo da essere sicuro che ci stia tutta.
scusami sono abbastanza niubbo del c potresti spiegarmi meglio nn ho capito cosa intendi?
grazie

oregon
24-02-2007, 20:44
Con quale codice vorresti visualizzare la funzione?

frizzo28
24-02-2007, 21:28
Il codice C che ho sritto finora è questo:

#include<conio.h>
#include<iostream.h>
#include<graphics.h>
#include<math.h>

void main()

{
double e=2.71828;
double p,x,m,var,sca,appo;
clrscr();
//Dati programma
x=16;
m=7;
var=12;



sca= sqrt(var);
appo=-(pow(x-m,2)/(2*var));
p=(1/(sca*sqrt(2*M_PI)))*pow(e,appo);
cout<<"Risultato: "<<p;
getch();
//Fine Dati programma

int d=DETECT,t;

initgraph(&d,&t,"c:\\tc\\bgi");
setbkcolor(GREEN);
cleardevice();

getch();
closegraph();

}
Della grafica come vedi ho messo solo l'inizializzazione perchè non so come proseguire...
P.S. Il p c'è il risultato; per disegnare il grafico dovrei trovare un po di punti modificando il valore della x e ricalcolado ogni volta p...
grazie
ciao

oregon
24-02-2007, 21:47
Originariamente inviato da frizzo28
per disegnare il grafico dovrei trovare un po di punti modificando il valore della x e ricalcolado ogni volta p...

Esatto ... lo farai in un ciclo in cui cambiera' il valore di x.

Questo ciclo lo esegui due volte.

Una prima volta trovi il valore massimo di p tra tutti quelli restituiti e alla fine trovi la costante con cui moltiplicare i vari p per farli stare tutti nel grafico.

La seconda volta utilizzi la costante per scalare correttamente tutti i p ...

frizzo28
24-02-2007, 22:20
Finora ho fatto così:

#include<conio.h>
#include<iostream.h>
#include<graphics.h>
#include<math.h>

double normale(int x,int m,int var);

void main()

{

double ris,max=0.0;
int x,m,var;
clrscr();
//Dati programma

m=7;
var=12;
//Fine Dati programma

//Ciclo per vedere il valore massimo
for(x=0;x<100;x++)
{
ris=normale(x,m,var);
if(ris>max)max=ris;
}
cout<<ris;
getch();
/*
int d=DETECT,t;

initgraph(&d,&t,"c:\\tc\\bgi");
setbkcolor(GREEN);
cleardevice();

getch();
closegraph();
*/
}



double normale(int x,int m,int var)
{
double e=2.71828;
double sca,appo,p;
sca= sqrt(var);
appo=-(pow(x-m,2)/(2*var));
p=(1/(sca*sqrt(2*M_PI)))*pow(e,appo);
return p;
}

Solo che come numero max mi restituisce 7.947585e-155
come faccio a trovare la costante ora?
grazie ciao

P.S. dovrebbe venire una cosa tipo questa : http://www.stattucino.com/berrie/dsl/index.html

oregon
24-02-2007, 23:26
Mi sembra troppo piccolo come valore massimo .. ne sei sicuro?

Loading