pietrod21

Untitled

Mar 11th, 2011
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.82 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define DT 0.001
  5.  
  6. double deltaE(double fE_0);
  7. double deltaY(double fL);
  8. void step(double *fdeltaE, double *fdeltaY, double fE_0, double fL);
  9.  
  10. int main(){
  11.     printf("il programma simula una particella che entra in un quadrato di lato l deciso dall-utente con energia iniziale decisa dall'utente e poi ad ogni passo toglie un energia delta E rispetto a quella data e faccia variare la posizione su y positivamente o negativamente \n \n ");
  12.     double t=0, y=0, E_0, E, L, deltaE=0, deltaY=0,y_maxx=0;
  13.     int seed, j;
  14.     FILE *fp;
  15.     seed=time(0);
  16.     srand48(seed);
  17.     printf("immettere valore positivo di E_0 minore di 10 MeV \n");
  18.     scanf("%lf", &E_0);
  19.     while(E_0<0||E_0>10){
  20.         printf("errore! reimmettere valore positivo di E_0 minore di 10 MeV \n");
  21.         scanf("%lf", &E_0);
  22.     }
  23.     printf("immettere valore positivo di L minore di 17 cm \n");
  24.     scanf("%lf", &L);
  25.     while(L<0||L>17){
  26.         printf("errore! reimmettere valore positivo di L minore di 17 cm \n");
  27.         scanf("%lf", &L);
  28.     }
  29.     fp=fopen("risultati.txt", "w");
  30.     for(j=0;j<1000;j++){
  31.         while((y<L)&&(E_0>=0.5)){
  32.             step(&deltaE, &deltaY, E_0, L);
  33.             y+=deltaY;
  34.             E-=deltaE;
  35.             t+=DT;
  36.             if(y>y_maxx){y_maxx=y;}
  37.         }
  38.         fprintf(fp, "alla %d* propagazione erano rispettivamete y.max= %lf tempo finale= %lf ed energia finale= %lf \n", j+1, y_maxx, t, E);
  39.         y=0; E=0; t=0;
  40.     }
  41.     fclose(fp);
  42. }
  43.  
  44. double deltaE(double fE_0){
  45.     double f, deltaE;
  46.     f=0.03+0.7*(lrand48()/(double)RAND_MAX);
  47.     deltaE=f*fE_0;
  48.     return deltaE;
  49. }
  50.  
  51. double deltaY(double fL){
  52.     double v, deltaL;
  53.     deltaL=0.05*fL+(0.03*fL)*((lrand48()/(double)RAND_MAX));
  54.     v=(lrand48()/(double)RAND_MAX);
  55.     if(v>0.5){
  56.         deltaL=-deltaL;
  57.     }
  58.     return deltaL;
  59. }
  60.  
  61. void step(double *fdeltaE, double *fdeltaY, double fE_0, double fL){
  62.     *fdeltaE=deltaE(fE_0);
  63.     *fdeltaY=deltaY(fL);
  64. }
Advertisement
Add Comment
Please, Sign In to add comment