pietrod21

Untitled

Mar 12th, 2011
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.85 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, L, deltaE=0, deltaY=0,y_maxx=0, temp;
  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.     temp=E_0;
  24.     printf("immettere valore positivo di L minore di 17 cm \n");
  25.     scanf("%lf", &L);
  26.     while(L<0||L>17){
  27.         printf("errore! reimmettere valore positivo di L minore di 17 cm \n");
  28.         scanf("%lf", &L);
  29.     }
  30.     fp=fopen("risultati.txt", "w");
  31.     temp=E_0;
  32.     for(j=0;j<1000;j++){
  33.         while((y<L)&&(E_0>=0.5)){
  34.             step(&deltaE, &deltaY, E_0, L);
  35.             y+=deltaY;
  36.             E_0-=deltaE;
  37.             t+=DT;
  38.             if(y>y_maxx){y_maxx=y;}
  39.         }
  40.         fprintf(fp, "alla %d* propagazione erano rispettivamete y.max= %lf tempo finale= %lf ed energia finale= %lf \n", j+1, y_maxx, t, E_0);
  41.         y=0; E_0=temp; t=0;
  42.     }
  43.     fclose(fp);
  44. }
  45.  
  46. double deltaE(double fE_0){
  47.     double f, deltaE;
  48.     f=0.03+0.7*(lrand48()/(double)RAND_MAX);
  49.     deltaE=f*fE_0;
  50.     return deltaE;
  51. }
  52.  
  53. double deltaY(double fL){
  54.     double v, deltaL;
  55.     deltaL=0.05*fL+(0.03*fL)*((lrand48()/(double)RAND_MAX));
  56.     v=(lrand48()/(double)RAND_MAX);
  57.     if(v>0.5){
  58.         deltaL=-deltaL;
  59.     }
  60.     return deltaL;
  61. }
  62.  
  63. void step(double *fdeltaE, double *fdeltaY, double fE_0, double fL){
  64.     *fdeltaE=deltaE(fE_0);
  65.     *fdeltaY=deltaY(fL);
  66. }
Advertisement
Add Comment
Please, Sign In to add comment