Hinamarth

Particles beams

Dec 9th, 2011
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.51 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4.  
  5. void coordinate_N(double *, double *, int);
  6.  
  7. void coordinate_N(double x[], double y[], int N){
  8.   int i;
  9.   for(i=0; i<N; i++){
  10.     x[i]=((double)lrand48()/RAND_MAX)*2-1.;
  11.     y[i]=((double)lrand48()/RAND_MAX)*2-1.;
  12.   }
  13. }
  14.  
  15.  
  16. main(){
  17.   int N1, N2, R=1, cont=0, lim, i, j;
  18.   double r, x1[1000], y1[1000], x2[1000], y2[1000], cento;
  19.   FILE *fp;
  20.   srand48(time(0));
  21.   printf("Il programma simula una collisione tra due fasci di particelle pensati come cerchi di raggio uno, contenenti un certo numero di elementi\n");
  22.   printf("Per fare questo, però, ho bisogno che tu inserisca il numero N1 di particelle del primo fascio, il numero N2 di particelle del secondo fascio e un numero r minore di 0,0625.\n");
  23.   printf("\n");
  24.   printf("Inserisci N1.\n N1 = ");
  25.   scanf("%d", &N1);
  26.   while( N1<0 || N1>=1000 ){
  27.     printf("Il numero di N1 è negativo o troppo elevato. Riscrivilo, tenendo conto che 0<N1<1000!\n N1 = ");
  28.   scanf("%d", &N1);
  29.   }
  30.   printf("Inserisci N2.\n N2 = ");
  31.   scanf("%d", &N2);
  32.   while( N2<0 || N2>=1000 ){
  33.     printf("Il numero di N2 è negativo o troppo elevato. Riscrivilo, tenendo conto che 0<N1<1000!\n N2 = ");
  34.     scanf("%d", &N2);
  35.   }
  36.   printf("Inserisci r.\n r = ");
  37.   scanf("%lf", &r);
  38.  while( r<0 || r>0.0625 ){
  39.     printf("Il numero di r è negativo o troppo elevato. Riscrivilo, tenendo conto che 0<r<0,0625!\n r = ");
  40.     scanf("%lf", &r);
  41.   }
  42.  
  43.  coordinate_N(x1, y1, N1);
  44.  coordinate_N(x2, y2, N2);
  45.  
  46.  for(i=0; i<N2; i++){
  47.    lim=0;
  48.    for(j=0; j<N1; j++){
  49.       if(sqrt(fabs(pow((y2[i]-y1[j]),2)+pow((x2[i]-x1[j]),2)))<=r && lim<1){
  50.        printf("La particella %d del fascio di particelle numero 2 ha effettuato una collisione contro la particella %d del primo fascio. \n", i,j);
  51.        printf("\n");
  52.        cont++;
  53.        lim++;
  54.      }
  55.    }
  56.  }
  57.  printf("E' stato raggiunto il seguente numero di collisioni:\n %d\n", cont);
  58.  cento=(cont*100.)/N2;
  59.  printf("Il %g per cento di particelle del secondo fascio ha subito una collisione", cento);
  60.  
  61.  fp = fopen("beam1.dat", "w");
  62.  if((fp=fopen("beam1.dat", "w"))==NULL){
  63.    printf("Errore nell'apertura del file beam1.dat \n");
  64.    exit(EXIT_FAILURE);
  65.  }
  66.  fprintf(fp, "Coordinate del primo fascio: \n" );
  67.  for(i=0; i<N1; i++){
  68.    fprintf(fp, " %d  x = %g                  y = %g \n", i,x1[i],y1[i]);
  69.  }
  70.  fprintf(fp, "\n");
  71.  fprintf(fp, "Coordinate del secondo fascio: \n" );
  72.  for(i=0; i<N1; i++){
  73.    fprintf(fp, " %d  x = %g                  y = %g \n", i,x2[i], y2[i]);
  74.  }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment