#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUM 20
#define MAXT 30

float old[NUM];
float matr[NUM][NUM];
float new[NUM];

int t;

void mult() {
	int i, j;

	for(i=0; i<NUM; i++) {
		new[i] = 0;
		for(j=0; j<NUM; j++) {
			new[i] += matr[i][j] * old[j];
		}
	}
}

void dump_matr() {
	int i;
	int j;
	float v;

	for(i=0; i<NUM; i++) {
		v = 0;
		for(j=0; j<NUM; j++) {
			fprintf(stderr, "%5.1f",matr[i][j]);
			v += matr[i][j];
		}
		fprintf(stderr, "\t%5.1f\n", v);
	}
}

void dump(float *arr) {
	int i;
	for(i=0; i<NUM; i++) {
		printf("%d\t%d\t%f\r\n", t, i, arr[i]);
	}
	printf("\r\n");
}

int main(int argc, char *argv[]) {
	int i;

	old[0] = 20;
	old[NUM-1] = 20;

	matr[0][0] = 1;
	matr[NUM-1][NUM-1] = 1;

	for(i = 1;i < NUM-1;i++) {
		old[i] = 10;
		matr[i][i-1] = 0.5;
		matr[i][i+1] = 0.5;
	}

	dump_matr();
	dump(old);

	for(t=1; t<=MAXT; t++) {
		mult();
		dump(new);
		memcpy(&old,&new,NUM);
	}
	
}
