Non capisco cosa sbaglio!!

di il
11 risposte

Non capisco cosa sbaglio!!

Un aiutino? il programma compila ma si blocca quando chiamo le funzioni
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

// prototipo funzioni

void generaVal(double teta1,double T1[]);
int contaVal(double teta2,double T2[]);


// main

int main(){

int seed;
seed=time(0);
srand48(seed);

double teta;
double T[1000];

printf("inserisici teta \n");
scanf("%lf", &teta);
do{
if ((teta<=0.0)||(teta>=1.0)){
printf("Errore inserisci teta compresa tra 0 e 1\n");;
scanf("%lf", &teta);}
}while((teta<=0.)||(teta>=1.));

printf("ciao1");

generaVal(teta,T);

printf("ciao1");

printf("%d",contaVal(teta,T));

return 0;
}

//definizione funzioni

void generaVal(double teta1,double T1[]){

double a1,a2,bi;
int i;

for(i=0;i<=1000;i++){

//genero a1 e a2 copresi tra 1 e 0 estremi esclusi

do{

a1=(double)lrand48()/RAND_MAX;
a2=(double)lrand48()/RAND_MAX;

}while((a1=1.)||(a2=1.)||(a1=0.)||(a2=0.));

bi=(cos(2*M_PI*a1))*(sqrt(-2*log(a2)));

T1=(bi*teta1)+10;
}
return;
}

//funzione conta valori

int contaVal(double teta2,double T2[]){

int c=0,j=0;

do{
if ((T2[j]>(10-(0.5*teta2)))||(T2[j]<(10+(0.5*teta2)))){

c++;
}

j++;

}while(j!=1000);

return c;
}

11 Risposte

  • Re: Non capisco cosa sbaglio!!

    Intanto inserisci il codice nei tag CODE o il codice che hai postato non si capisce.

    Poi nella for de i scrivere <1000 e non <=1000 e nella while non devi usare = ma ==
  • Re: Non capisco cosa sbaglio!!

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    
    // prototipo funzioni
    
    void generaVal(double teta1,double T1[]);
    int contaVal(double teta2,double T2[]);
    void getteta(double teta0);
    
    // main
    
    int main(){
    	
    	double teta;
    	double T[1000];
    	
    	int seed;
    	seed=time(0);
    	srand48(seed);
    	
    	getteta(teta);
    	generaVal(teta,T);
    	
    	printf("ciao1");
    	
    	printf("%d\n",contaVal(teta,T));
    	
    	return 0;
    }
    
    
    
    
    
    //definizione funzioni
    
    void generaVal(double teta1,double T1[]){
    	
    	double a1,a2,bi;
    	int i;
    	
    	for(i=0;i<1000;i++){
    		
    	//genero a1 e a2 copresi tra 1 e 0 estremi esclusi
    	
    		do{
    		
    			a1=(double)lrand48()/RAND_MAX;
    			a2=(double)lrand48()/RAND_MAX;
    	
    		}while((a1=1.)||(a2=1.)||(a1=0.)||(a2=0.));
    	
    		bi=(cos(2.*M_PI*a1))*(sqrt(-2.*log(a2)));
    	
    		T1[i]=(bi*teta1)+10.;
    	}
    	printf("%lf",T1[0]);
    	return;
    }
    
    	
    //funzione conta valori
    
    int contaVal(double teta2,double T2[]){
    	
    	int c=0,j=0;
    	
    	do{
    		if ((T2[j]>(10-(0.5*teta2)))||(T2[j]<(10+(0.5*teta2)))){
    			
    			c++;
    		}
    		
    		j++;
    			
    	}while(j!=1000);
    	
    	return c;
    }
    
    
    
    //funzione get teta
    
    void getteta(double teta0){
    	
    	printf("inserisici teta \n");
    	scanf("%lf", &teta0);
    	do{
    		if ((teta0<=0.0)||(teta0>=1.0)){
    			printf("Errore inserisci teta compresa tra 0 e 1\n");;
    		scanf("%lf", &teta0);}
    	}while((teta0<=0.)||(teta0>=1.));
    	
    	return;
    	
    }
  • Re: Non capisco cosa sbaglio!!

    Il pendolo semplice consiste di una piccola sfera, appesa ad un centro di sospensione mediante un filo ine-
    stensibile di massa trascurabile, libera di oscillare con un moto armonico attorno alla posizione verticale

    di equilibrio. Si vuole simulare la misura del periodo delle piccole oscillazioni del pendolo, generando 1000
    valori del periodo T secondo una distribuzione gaussiana, con media µT = 10 s e varianza sT come indicato
    in figura. La varianza e’ un parametro proporzionale alla larghezza della gaussiana. Si vuole calcolare la
    percentuale di dati compresi in un intervallo della curva gaussiana specificato.

    A tale scopo si implementi la seguente traccia in un programma chiamato nome_cognome.c:
    1. Si chieda all’utente il valore della deviazione standard sT , compresa tra 0 e 1 s, estremi esclusi. Se il
    valore non rispetta i limiti, dopo una stampa di avvertimento, il valore deve essere chiesto di nuovo
    finché non sia valido.
    2. Si generino 1000 valori dei periodi Ti

    . Per farlo si scriva una funzione generaValori di tipo void che
    prenda in ingresso il valore della sT e un array vuoto all’interno del quale i valori generati verranno
    salvati. Per ottenere i valori Ti distribuiti in modo gaussiano, bisogna, per ciascuno di essi:
    (a) Generare in modo random due variabili a1 e a2 comprese tra 0 e 1 estremi esclusi
    (b) Calcolare la variabile bi = cos(2pa1)
    v
    -2ln(a2). La variabile bi è distribuita in modo gaussiano

    con media 0 e varianza 1
    (c) Eseguire la trasformazione:

    Ti = bisT + 10

    .
    3. Si conti quanti dei valori appena generati appartengono all’intervallo [µT - 0.5sT , µT + 0.5sT ]. Questo
    conteggio deve essere effettuato tramite una funzione contaValori che prenda in ingresso almeno l’array
    dei Ti e la sT e ritorni il numero dei conteggi.

    il testo è questo io ho provato con il codice scritto sopra ma dopo aver eseguito getteta si blocca
  • Re: Non capisco cosa sbaglio!!

    Ti avevo dato delle indicazioni nella risposta precedente. Le hai viste?
  • Re: Non capisco cosa sbaglio!!

    Nel for ho messo solo < e nello stile mettere == che significa?
  • Re: Non capisco cosa sbaglio!!

    Nel while devi mettere a1 == 1.0 eccetera. È esattamente quello il motivo per cui si blocca, che metti un uguale solo. Non hai studiato?
  • Re: Non capisco cosa sbaglio!!

    While non stile .. il correttore...
  • Re: Non capisco cosa sbaglio!!

    Sono alle prime armi e questa cosa mi sfuggiva. Comunque ha funzionato grazie mille per le dritte
  • Re: Non capisco cosa sbaglio!!

    Ora se vado a stampare l'array T1 all' interno della funzione generaVal, mi genera tutti valori uguali.
  • Re: Non capisco cosa sbaglio!!

    Ovvero? Mostra il codice e usa i tag code.
  • Re: Non capisco cosa sbaglio!!

    No ho risolto avevo sbagliato la funzione getteta perchè l'avevo imposta di tipo void invece a me quel teta serviva. Grazie mille di tutto e mi scuso per la mia ignoranza.
Devi accedere o registrarti per scrivere nel forum
11 risposte