pietrod21

Untitled

Mar 10th, 2011
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5. #define DT 0.001
  6.  
  7. double deltaE(double fE_0);
  8. double deltaY(double fL);
  9. void step(double *fdeltaE, double *fdeltaY, double fE_0, double fL);
  10.  
  11. int main(){
  12.     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 ");
  13.     double t=0, y=0, E_0, E, L, deltaE=0, deltaY=0,y_maxx=0;
  14.     int seed, j;
  15.     FILE *fp;
  16.     seed=time(0);
  17.     srand48(seed);
  18.     printf("immettere valore positivo di E_0 minore di 10 MeV \n");
  19.     scanf("%lf", &E_0);
  20.     while(E_0<0||E_0>10){
  21.     printf("errore! reimmettere valore positivo di E_0 minore di 10 MeV \n");
  22.     scanf("%lf", &E_0);
  23.     }
  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.     for(j=0;j<1000;j++){
  32.             while((y<L)&&(E_0>=0.5)){
  33.             step(&deltaE, &deltaY, E_0, L);
  34.             y+=deltaY;
  35.                 printf("%lf \n", y);
  36.             E-=deltaE;
  37.                 printf("%lf \n", E_0);
  38.             t+=DT;
  39.             if(y>y_maxx){y_maxx=y;}
  40.             }
  41.         fprintf(fp, "alla %d* propagazione erano rispettivamete y.max= %lf tempo finale= %lf ed energia finale= %lf \n", j+1, y_maxx, t, E);
  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;
  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