tsounakis

Mama eisai spiti? Giati se pairnw kai milaei

Mar 20th, 2020
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 10
  4. #define M 20
  5.  
  6. const float right = -5.0, left = 4.0, up = 2.0, down = 3.0;
  7.  
  8. void createL(float t[N][M]);
  9. void createU(float t[N][M]);
  10. void createR(float t[N][M]);
  11. void createD(float t[N][M]);
  12. void calcCorners(float t[N][M]);
  13. void printarray(float*);
  14. void initialize(float t[N][M]);
  15. void loadTemp(float tTemp[N][M], float*);
  16. float next(int, int, float t[N][M]);
  17.  
  18. int main() {
  19.     float t[N][M], tNew[N][M], tTemp[N][M];
  20.     float* ptr;
  21.     float* ptrNew;
  22.     float* ptrTemp;
  23.     int i, j, k;
  24.     int time;
  25.    
  26.     ptr = &t[0][0];
  27.     ptrNew = &tNew[0][0];
  28.    
  29.     initialize(t);
  30.     printarray(ptr);
  31.    
  32.     while(1)
  33.     {
  34.         ptrTemp = &t[0][0];
  35.         printf("Enter an integer for the time: ");
  36.         scanf("%d", &time);
  37.        
  38.         if (time!=0)
  39.         {
  40.             loadTemp(tTemp, ptrTemp);
  41.             for (k=0; k<time; k++)
  42.             {
  43.                 for (i=0; i<N; i++)
  44.                 {
  45.                     if (i != 0 && i != N - 1)
  46.                     {
  47.                         for (j=0; j<M; j++)
  48.                         {
  49.                             if (j != 0 && j != M - 1)
  50.                             {
  51.                                 tNew[i][j] = next(i, j, tTemp);
  52.                             }
  53.                         }
  54.                     }
  55.                 }
  56.                 createL(tNew);
  57.                 createR(tNew);
  58.                 createD(tNew);
  59.                 createU(tNew);
  60.                 calcCorners(tNew);
  61.                 ptrTemp = &tNew[0][0];
  62.                 loadTemp(tTemp, ptrTemp);
  63.                 /*printarray(&tTemp[0][0]);*/
  64.             }
  65.         }
  66.         else
  67.         {
  68.             return 0;
  69.         }
  70.         printarray(ptrNew);
  71.       /*  printarray(ptrTemp);*/
  72.     }
  73.    
  74.     return 0;
  75. }
  76.  
  77. void loadTemp(float tTemp[N][M], float* ptrTemp)
  78. {
  79.     int i, j;
  80.     for (i=0; i<N; i++)
  81.     {
  82.         for (j=0; j<M; j++)
  83.         {
  84.             tTemp[i][j] = *(ptrTemp + M*i + j);
  85.         }
  86.     }
  87.     return;
  88. }
  89.  
  90. void calcCorners(float t[N][M])
  91. {
  92.     float ur, ul, dr, dl;
  93.     ur = ( right + up ) / 2;
  94.     dr = ( right + down ) / 2;
  95.     ul = ( left + up ) / 2;
  96.     dl = ( left + down ) / 2;
  97.     t[0][0] = ul;
  98.     t[0][M-1] = ur;
  99.     t[N-1][0] = dl;
  100.     t[N-1][M-1] = dr;
  101.     return;
  102. }
  103.  
  104. void createR(float t[N][M])
  105. {
  106.     int i;
  107.     for (i=0; i<N; i++)
  108.     {
  109.         t[i][M-1] = right;
  110.     }
  111.     return;
  112. }
  113.  
  114. void createL(float t[N][M])
  115. {
  116.     int i;
  117.     for (i=0; i<N; i++)
  118.     {
  119.         t[i][0] = left;
  120.     }
  121.     return;
  122. }
  123.  
  124. void createD(float t[N][M])
  125. {
  126.     int i;
  127.     for (i=0; i<M; i++)
  128.     {
  129.         t[N-1][i] = down;
  130.     }
  131.     return;
  132. }
  133.  
  134. void createU(float t[N][M])
  135. {
  136.     int i;
  137.     for (i=0; i<M; i++)
  138.     {
  139.         t[0][i] = up;
  140.     }
  141.     return;
  142. }
  143.  
  144. void initialize(float t[N][M])
  145. {
  146.     int i, j;
  147.     printf("Time: 0\n");
  148.     for (i=0; i<N; i++)
  149.     {
  150.         for (j=0; j<M; j++)
  151.         {
  152.             t[i][j] = 1.0;
  153.         }
  154.     }
  155.     createL(t);
  156.     createR(t);
  157.     createD(t);
  158.     createU(t);
  159.     calcCorners(t);
  160.     return;
  161. }
  162.  
  163. void printarray(float* pointer)
  164. {
  165.     int i, j;
  166.     for (i=0; i<N; i++)
  167.     {
  168.         for (j=0; j<M; j++)
  169.         {
  170.             printf("%.2f\t", *(pointer + M*i + j));
  171.         }
  172.         putchar('\n');
  173.     }
  174.     printf("\n------------------------------------------------------\n");
  175.     return;
  176. }
  177.  
  178. float next(int i, int j, float t[N][M])
  179. {
  180.     float tNewElement;
  181.     tNewElement = 0.1 * (t[i-1][j-1] + t[i-1][j] + t[i-1][j+1] + t[i][j-1] + 2 * t[i][j] + t[i][j+1] + t[i+1][j-1] + t[i+1][j] + t[i+1][j+1]);
  182.     return tNewElement;
  183. }
Add Comment
Please, Sign In to add comment