Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    22

    [C] array in input popolato in un'altra funzione

    Io ho ho popolato un array in una funzione void che chiamo nel main,nella funzione void tramite un ciclo do-while popolo un array unidimensionale con il risultato di certe espressioni , dopo di questa devo costruire un altra funzione, non void, che prende come input l'array contenente quei risultati.Come posso fare, non posso restituire niente dalla prima funzione quindi non saprei come passare l'array, ho provato a fare qualcosa con i puntatori ma niente.Qualche idea???



    codice:
    
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<time.h> 
    #include<math.h> 
    #define G 9.806 
    #define LEN 100  
    
     
    void Error(void);
     
    void grav(double ,double  arr[LEN]); 
    
    double perc(double arr[LEN], double, double);  
    
    int main(){   
    
    double si,si1,si2,arr[LEN],per;     
    
    srand48(time(0));       
    
    printf("\n Simuliamo l'accellerazione di gravità!!!! \n");    
    
    do{   
    
    printf("\n Inserisci il valore della deviazione standard, 0<si<1;\n");   
    scanf("%lf", &si);   
    if(si<=0 || si>=1){   
    Error();   
    printf("\n Inserisci il valore della deviazione standard, 0<si<1;\n");   
    scanf("%lf", &si);} 
    } while(si<=0 || si>=1);   
    
     grav(si,arr);     
    
    do{   
    printf("\n Inserisci il valore della deviazione standard1, 0<si<1;\n");   
    scanf("%lf", &si1);   
    if(si1<=0 || si1>=1){   
    Error();   
    printf("\n Inserisci il valore della deviazione standard1, 0<si<1;\n");   
    scanf("%lf", &si1);} 
    } while(si1<=0 || si1>=1);      
    
    
    do{   
    printf("\n Inserisci il valore della deviazione standard2, 0<si<1;\n");   
    scanf("%lf", &si2);   if(si2<=0 || si2>=1){   
    Error();   
    printf("\n Inserisci il valore della deviazione standard2, 0<si<1;\n");   
    scanf("%lf", &si2);} 
    } while(si2<=0 || si2>=1);         
    
    
    per=perc(arr,si1,si2);         
    
    
    printf("\n La percentuale che gk sia compreso tra s1 e s2 e' del:%lf %\n", per/100);         } 
    
    
    
    void Error(void){   printf("\nERRORE!!!! il valore deve essere compreso tra 0 e 1!!!\n"); }  
    
    
    void grav(double si, double arr[LEN]){   
    
    FILE *gd;   
    
    double p1,p2,y,gk;   
    
    int it=1,i=1;       
    
    gd=fopen("g.dat","w");       
    arr[0]=si;       
    
    do{        
    
    p1=(double)lrand48()/RAND_MAX;       
    p2=(double)lrand48()/RAND_MAX;       
    y=sqrt(fabs(-2*log(p1)*sin(2*M_PI*p2)));       
    gk=(y*si)+G;       
    arr[i]=gk;                      
    it++;       
    i++;        
    fprintf(gd, "\nIl valore di gk è:%lf",gk); 	   	     
    }   while(it!=101);    
    fclose(gd);  
    
    }    
    
    
    !!!!!!!!!!!!!!!!!!!!!!!
    Questa è la funzione importante, devo passare l'array
     che nella precedente funzione contiene i valori di gk (arr[i]),
     e poi calcolare la percentuale, l'algoritmo l'ho impostato ma non so 
    come passare l'array, qualcuno mi puo spiegare come si fa???!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
    double perc(double arr[LEN],double si1, double si2){     
    
    double per=0,p,q,val;     
    int i=1;   
    do{     
    
    arr[i]=val;   
    if(si1<si2){si1=p;si2=q;}   
    if(si1>si2){si2=p;si1=q;}   
    if(val<(G+q)&& val>(G+p)){per++;}   
    i++;   
    }   while(i!=100);   
      
    return per;     
    }

  2. #2
    Da quel che ho capito vorresti utilizzare i valori inseriti dalla funzione grav nell'array arr, esatto?
    Potresti provare passando l'array arr per riferimento:

    Dichiari la funzione così
    codice:
    void grav(double si, double *arr)
    poi la richiami come hai fatto.

    Il resto dovrebbe essere apposto, ma dando una rapida occhiata forse c'è un errore dove dice arr[i]=val; non dovrebbe essere val = arr[i]; ?

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Non credo ci sia un problema ! hai l'array dichiarato nel main lo passi prima a una funzione
    che ne modifica il valore , essendo gli array passati per indirizzo la modifica avviene all'arrey
    dichiarato nel main poi lo passi all'altra funzine
    non occorre specificare la grandezza dell'array nella funzione chiamata


    un piccolo esempio
    codice:
    #include<stdio.h>
    
    int main()
    {
    
     double  my_array[LEN];
    
     funzione1(my_array);
     funzione2(my_array);  //il valore  di my_arrey è stato modificato dalla funzione1 void
    
    
    }
    
    void funzione1(double arr[])
    {
         for(i=0;i<LEN;i++)
             arr[i]=i;
    
    }
    
    int funzione2(double arr[])
    {
    
        //arr corrisponde a my_array già modificato  da funzione1
    
    }

    Spero di essere stato utile
    Tecnologia

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma sbaglio o lo fai già?

    Ovvero passi già l'array ... dunque hai postato perché hai errori, malfunzionamenti oppure ...?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    22

    Re: ciao

    Originariamente inviato da torn24
    Non credo ci sia un problema ! hai l'array dichiarato nel main lo passi prima a una funzione
    che ne modifica il valore , essendo gli array passati per indirizzo la modifica avviene all'arrey
    dichiarato nel main poi lo passi all'altra funzine
    non occorre specificare la grandezza dell'array nella funzione chiamata


    un piccolo esempio
    codice:
    #include<stdio.h>
    
    int main()
    {
    
     double  my_array[LEN];
    
     funzione1(my_array);
     funzione2(my_array);  //il valore  di my_arrey è stato modificato dalla funzione1 void
    
    
    }
    
    void funzione1(double arr[])
    {
         for(i=0;i<LEN;i++)
             arr[i]=i;
    
    }
    
    int funzione2(double arr[])
    {
    
        //arr corrisponde a my_array già modificato  da funzione1
    
    }

    Spero di essere stato utile


    Ah ok io pensavo l'array prendesse quei valori solo nel ciclo, però anche facendo così:

    codice:
    double perc(double arr[],double si1, double si2){
    double per=0,p,q,val;      
    int i=1;    
    do{       
    val=arr[i];    
    if(si1<si2){si1=p;si2=q;}    
    if(si1>si2){si2=p;si1=q;}    
    if(val<(G+q)&& val>(G+p)){per++;}    
    i++;    }   while(i!=100);      
     return per;      
    }

    mi da tutti i valori dell'array uguali a 0, ho controllato con dei printf, quindi non ha passato niente, o forse non è questo il modo giusto per esaminare le varie locazioni di memoria??Grazie a tutti

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    22
    Ho risolto! grazie a tutti ciao!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.