Advertisement
Guest User

ProgConc

a guest
Feb 13th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <math.h>
  4. #include <time.h>
  5.  
  6. #define TEMP_FROID 0.00
  7. #define TEMP_CHAUD 256.00
  8.  
  9. void printMatrix(float* mat1, int size);
  10.  
  11. void initializeMatrix(float* mat1, int size){
  12.     int i,j;
  13.     int numCell=0;
  14.     int n = sqrt(size);
  15.     int sup = (pow(2,n-1)-pow(2,n-4));
  16.     int inf = (pow(2,n-1)+pow(2,n-4));
  17.     //printf("numCell >= %d && numCell < %d\n",sup,inf); //DEBUG
  18.     for(i=0;i<size;i++){
  19.         for(j=0;j<size;j++){
  20.             if(i >= sup && i < inf && j >= sup && j < inf)
  21.                 mat1[size*j+i]=TEMP_CHAUD;
  22.             else
  23.                 mat1[size*j+i]=TEMP_FROID;
  24.             numCell++;
  25.         }
  26.     }
  27. }
  28.  
  29. void fillCenter(float* mat1, int size) {
  30.     int n = (int) sqrt(size);
  31.     int sup = (int) (pow(2, n - 1) - pow(2, n - 4));
  32.     int inf = (int) (pow(2, n - 1) + pow(2, n - 4));
  33.     int i=sup;
  34.     int j=inf;
  35.     for (i = sup; i < inf; i++) {
  36.         for (j = sup; j < inf; j++) {
  37.             mat1[size*j+i] = TEMP_CHAUD;
  38.         }
  39.     }
  40.  
  41. }
  42.  
  43. void nextStep(float* mat1, float* mat2, int size){
  44.     printf("Avant :\n");
  45.     printf("mat1\n");
  46.     printMatrix(mat1,size);
  47.     int i=1;
  48.     int j=1;
  49.     for (i = 1; i < size - 1; i++) {
  50.         for (j = 1; j < size - 1; j++) {
  51.             mat2[size*j+i] = (mat1[size*(j-1)+i] / 6) + (mat1[size*j+i] * 2 / 3) + (mat1[size*(j+1)+i] / 6);
  52.         }
  53.     }
  54.     //    System.out.println("mat2");
  55.     printf("mat2\n");
  56.     printMatrix(mat2,size);
  57.     for (i = 1; i < size - 1; i++) {
  58.         for (j = 1; j < size - 1; j++) {
  59.             mat1[size*j+i] = (mat2[size*j+(i-1)] / 6) + (mat2[size*j+i] * 2 / 3) + (mat2[size*j+(i+1)] / 6);
  60.         }
  61.     }
  62.     fillCenter(mat1, size);
  63.     printf("\n Après \n");
  64.     printMatrix(mat1,size);
  65. }
  66.  
  67. void printMatrix(float* mat1, int size){
  68.     int i,j;   
  69.     for(i=0;i<size;i++){
  70.         for(j=0;j<size;j++){
  71.             printf("%06.2f |",mat1[size*j+i]); //%06.2f affichage un peu plus beau.
  72.         }
  73.         printf("\n");
  74.     }
  75. }
  76.  
  77. int main(int argc, char** argv){
  78.     printf("##Debut Programme##\n");
  79.     int opt;   
  80.  
  81.     /*
  82.     ** get parameters.
  83.     */
  84.     while ((opt = getopt(argc,argv,"s:m:a:i:e:t:")) != -1){
  85.         switch(opt){
  86.             case 's':
  87.                 printf("avec option -s\n");
  88.                 printf(" -- %s\n",optarg);
  89.             break;
  90.            
  91.             case 'm':
  92.                 printf("avec option -m\n");
  93.                 printf(" -- %s\n",optarg);
  94.             break;
  95.  
  96.             case 'a':
  97.                 printf("avec option -a\n");
  98.                 printf(" -- %s\n",optarg);
  99.             break;
  100.  
  101.             case 'i':
  102.                 printf("avec option -i\n");
  103.                 printf(" -- %s\n",optarg);
  104.             break;
  105.  
  106.             case 'e':
  107.                 printf("avec option -e\n");
  108.                 printf(" -- %s\n",optarg);
  109.             break;
  110.  
  111.             case 't':
  112.                 printf("avec option -t\n");
  113.                 printf(" -- %s\n",optarg);
  114.             break;
  115.  
  116.             default:
  117.                 printf("no Options\n");
  118.             break;
  119.         }
  120.     }
  121.  
  122.     //10 000 iterations.
  123.     float Mat1[16][16];
  124.     float Mat2[16][16];
  125.     int size=16;
  126.     int iteration=0;
  127.     initializeMatrix(&(Mat1[0][0]),size);
  128.     initializeMatrix(&(Mat2[0][0]),size);
  129.     printMatrix(&(Mat1[0][0]),size);
  130.     printf("##début de l'algorithme##\n");
  131.    
  132.     time_t debutTemp,finTemp;
  133.     debutTemp = time(NULL);
  134.     printf("%ju secs since the Epoch\n",debutTemp);
  135.  
  136.     while(iteration!=10000){
  137.         nextStep(&(Mat1[0][0]), &(Mat2[0][0]), size);
  138.         iteration++;
  139.     }
  140.     finTemp = time(NULL);
  141.     printf("##fin de l'algorithme en %ju secondes ##\n",finTemp - debutTemp);
  142.     return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement