Advertisement
tsounakis

3.2

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