Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*3.2 VERSION*/
- /*WORKING*/
- #include <stdio.h>
- #include <stdlib.h>
- #define N 10
- #define M 20
- const float right = -5.0, left = 4.0, up = 2.0, down = 3.0;
- void normalize(float t[N][M]);
- void createL(float t[N][M]);
- void createU(float t[N][M]);
- void createR(float t[N][M]);
- void createD(float t[N][M]);
- void calcCorners(float t[N][M]);
- void printarray(float*);
- void initialize(float t[N][M]);
- float next(int, int, float t[N][M]);
- int round(float);
- int main() {
- float t[N][M], tNew[N][M], tTemp[N][M];
- float* ptr;
- float* ptrTemp;
- int i, j;
- ptr = &t[0][0];
- initialize(t);
- ptrTemp = &t[0][0];
- for (i=0; i<N; i++)
- {
- for (j=0; j<M; j++)
- {
- tTemp[i][j] = *(ptrTemp + M*i + j);
- }
- }
- for (i=0; i<N; i++)
- {
- if (i != 0 && i != N - 1)
- {
- for (j=0; j<M; j++)
- {
- if (j != 0 && j != M - 1)
- {
- tNew[i][j] = next(i, j, tTemp);
- }
- }
- }
- }
- createL(tNew);
- createR(tNew);
- createD(tNew);
- createU(tNew);
- calcCorners(tNew);
- normalize(t);
- printarray(ptr);
- printf("Time: 1\n");
- normalize(tNew);
- printarray(&tNew[0][0]);
- return 0;
- }
- int round(float num)
- {
- return num < 0 ? num - 0.5 : num + 0.5;
- }
- void normalize(float t[N][M])
- {
- int i, j, k;
- float min = t[0][0];
- for (i=0; i<N; i++)
- {
- for (j=0; j<M; j++)
- {
- if (t[i][j] < min)
- {
- min = t[i][j];
- }
- }
- }
- for (i=0; i<N; i++)
- {
- for (j=0; j<M; j++)
- {
- for (k=0; k<10; k++)
- {
- if (t[i][j] >= (k + min) && t[i][j] < (k + 1 + min))
- {
- t[i][j] = k;
- break;
- }
- }
- }
- }
- return;
- }
- void calcCorners(float t[N][M])
- {
- float ur, ul, dr, dl;
- ur = ( right + up ) / 2;
- dr = ( right + down ) / 2;
- ul = ( left + up ) / 2;
- dl = ( left + down ) / 2;
- t[0][0] = ul;
- t[0][M-1] = ur;
- t[N-1][0] = dl;
- t[N-1][M-1] = dr;
- return;
- }
- void createR(float t[N][M])
- {
- int i;
- for (i=0; i<N; i++)
- {
- t[i][M-1] = right;
- }
- return;
- }
- void createL(float t[N][M])
- {
- int i;
- for (i=0; i<N; i++)
- {
- t[i][0] = left;
- }
- return;
- }
- void createD(float t[N][M])
- {
- int i;
- for (i=0; i<M; i++)
- {
- t[N-1][i] = down;
- }
- return;
- }
- void createU(float t[N][M])
- {
- int i;
- for (i=0; i<M; i++)
- {
- t[0][i] = up;
- }
- return;
- }
- void initialize(float t[N][M])
- {
- int i, j;
- printf("Time: 0\n");
- for (i=0; i<N; i++)
- {
- for (j=0; j<M; j++)
- {
- t[i][j] = 1.0;
- }
- }
- createL(t);
- createR(t);
- createD(t);
- createU(t);
- calcCorners(t);
- return;
- }
- void printarray(float* pointer)
- {
- int i, j;
- for (i=0; i<N; i++)
- {
- for (j=0; j<M; j++)
- {
- printf("%.2f\t", *(pointer + M*i + j));
- }
- putchar('\n');
- }
- printf("\n------------------------------------------------------\n");
- return;
- }
- float next(int i, int j, float t[N][M])
- {
- float tNewElement;
- 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]);
- return tNewElement;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement