Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #define pi 3.141592654
- void esperimento( double, double, double[]);
- void generacoppia(double[]);
- int sommario(double[], double, double, double, double);
- void esperimento( double mk, double s, double misure[]){
- int i;
- double x, r[2]={0};
- for(i=0; i<1000; i++){
- generacoppia(r);
- x=sin(2*pi*r[0])*sqrt(-2*log(r[1]));
- misure[i]=mk+x*s;
- }
- }
- void generacoppia( double r[] ){
- r[0]=((double)lrand48()+1.)/(RAND_MAX+2.);
- r[1]=((double)lrand48()+1.)/(RAND_MAX+2.);
- }
- int sommario(double misure[], double s, double mk, double s1, double s2){
- int i, cont=0;
- FILE *fp;
- if((fp=fopen("misure.dat", "w"))==NULL){
- printf("Errore nell'apertura del file misure.dat.\n");
- exit(EXIT_FAILURE);
- }
- for(i=0; i<1000; i++){
- fprintf(fp, "%d - %lf\n", i+1, misure[i]);
- if(misure[i]>=(mk+s2*s) && misure[i]<=(mk+s1*s)){
- cont++;
- }
- }
- return cont;
- }
- main(){
- int f;
- double mk, s, s1, s2, misure[1000]={0};
- srand48(time(0));
- printf("Il programma calcola la costante elastica k assumendo che questa vari secondo una distribuzione Gaussiana con media mk e variazione s. Si esamineranno poi i risultati compresi in un intervallo [m1,m2] che dovrai tu immettere.\n");
- printf("Inserisci ora mk appartenente a [800 N/m, 900 N/m] e s compreso tra [20 N/m, 30 N/m].\nmk = ");
- scanf("%lf", &mk);
- while(mk<800. || mk>900.){
- printf("Il valore di mk immesso è errato. Reinseriscilo. \nmk = ");
- scanf("%lf", &mk);
- }
- printf("s = ");
- scanf("%lf", &s);
- while(s<20. || s>30.){
- printf("Il valore di s immesso è errato. Reinseriscilo. \ns = ");
- scanf("%lf", &s);
- }
- esperimento( mk, s, misure );
- printf("Inserisci ora due valori s1 ed s2 entrambi compresi nell'intervallo [-3, 3] e con s1>s2.\ns1 = ");
- scanf("%lf", &s1);
- while( s1<-3. || s1>3. ){
- printf("Il valore di s1 immesso è errato. Reinseriscilo. \ns1 = ");
- scanf("%lf", &s);
- }
- printf("s2 = ");
- scanf("%lf", &s2);
- while(s2<-3. || s2>3.){
- printf("Il valore di s2 immesso è errato. Reinseriscilo. \ns2 = ");
- scanf("%lf", &s2);
- }
- while(s1<=s2){
- s1=-3.;
- s2=-3.;
- printf("s1 deve essere maggiore di s2! Reinseriscili. \ns1 = ");
- scanf("%lf", &s1);
- while( s1<-3. || s1>3. ){
- printf("Il valore di s1 immesso è errato. Reinseriscilo. \ns1 = ");
- scanf("%lf", &s);
- }
- printf("s2 = ");
- scanf("%lf", &s2);
- while(s2<-3. || s2>3.){
- printf("Il valore di s2 immesso è errato. Reinseriscilo. \ns2 = ");
- scanf("%lf", &s2);
- }
- }
- f=sommario(misure, s, mk, s1, s2);
- printf("La frazione delle misure comprese tra [%lf,%lf] è di %d/1000.\n", mk+s1*s, mk+s2*s, f);
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment