Hinamarth

Ideal gas

Dec 10th, 2011
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.36 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4.  
  5. void distanza(double[][3], double[]);
  6.  
  7. void distanza(double pos[][3], double distance[]){
  8.   int i;
  9.   FILE *fp;
  10.   if((fp=fopen("distanza.dat", "w"))==NULL){
  11.     printf("Errore nell'apertura di distanza.dat");
  12.     exit(EXIT_FAILURE);
  13.   }
  14.   fp=fopen("distanza.dat", "w");
  15.   fprintf(fp,"Distanze degli atomi\n");
  16.   fprintf(fp,"\n");
  17.   for(i=0; i<500; i++){
  18.     distance[i]=sqrt(pow(pos[i][0],2)+pow(pos[i][1],2)+pow(pos[i][2],2));
  19.     fprintf(fp,"%d - x = %lf                y =%lf                 z=%lf\n", i,pos[i][0],pos[i][1],pos[i][2]);
  20.   }
  21. }
  22.  
  23.  
  24. main(){
  25.   int R=1, i, j, cont=0;
  26.   double R1, R2, pos[500][3], distance[500], data[500], temp;
  27.   srand(time(0));
  28.   printf("Dato un gas perfetto composto da 500 atomi racchiusi in una sfera di raggio R = 1, vogliamo calcolare quanti atomi sono racchiusi in due sfere di raggio R1 e R2 entrambi minori di R.\n");
  29.   printf("Per fare questo ho bisogno che tu inserisca i valori di R1 e R2. Attenzione deve valere questa affermazione : R1 < R2 < R.\n");
  30.   printf("Inserisci R1.\n R1 = ");
  31.   scanf("%lf", &R1);
  32.   printf("\n");
  33.   printf("Inserisci R2.\n R2 = ");
  34.   scanf("%lf", &R2);
  35.   printf("\n");
  36.   while(R1>R2 || R1>R || R2>R){
  37.     printf("Hai sbagliato i valori dei raggi! Reinseriscili!\n");
  38.     printf("R1 = ");
  39.     scanf("%lf", &R1);
  40.     printf("R2 = ");
  41.     scanf("%lf", &R2);
  42.   }
  43.   for(i=0; i<500; i++){
  44.     for(j=0; j<3; j++){
  45.       pos[i][j]=(double)lrand48()/RAND_MAX;
  46.       while(pos[i][j]>=1){
  47.     pos[i][j]=(double)lrand48()/RAND_MAX;
  48.       }
  49.     }
  50.   }
  51.   distanza(pos, distance);
  52.   for(i=0; i<500; i++){
  53.     data[i]=distance[i];
  54.   }
  55.   for( i=0; i<499; i++ ){
  56.     for( j=499; j<i; j--){
  57.       if(data[j-1]>data[j]){
  58.     temp=data[j-1];
  59.     data[j-1]=data[j];
  60.     data[j]=temp;
  61.       }
  62.     }
  63.   }
  64.  
  65.   for(i=0; i<500; i++){
  66.     if(data[0]==distance[i]){
  67.       printf("L'atomo con distanza minore è quello di cordinate:\n x = %g\n y = %g\n z = %g\n", pos[i][0], pos[i][1], pos[i][2]);
  68.     }
  69.    if(data[499]==distance[i]){
  70.       printf("L'atomo con distanza maggiore è quello di cordinate:\n x = %g\n y = %g\n z = %g\n", pos[i][0], pos[i][1], pos[i][2]);
  71.     }
  72.    if(distance[i]>=R1 && distance[i]<=R2){
  73.      cont++;
  74.    }
  75.   }
  76.  
  77.   printf("Gli atomi che hanno distanza compresa tra R1 = %g e R2=%g sono %f del totale.\n", R1, R2, (float)cont/500);  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment