#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int dimension;
double **matrixA, **matrixB, **matrixProduct;

double radom(){
	return ((double) rand() / RAND_MAX) * 100.0;
}

double **create_matrix(){
	int line;
	double **matrix;
	matrix = (double**) malloc (dimension * sizeof(double*));

	for (line = 0; line < dimension; line++){
		matrix[line] = (double*) malloc (dimension * sizeof(double));
	}
	return matrix;
}

void fill_matrix(double **matrix){
	int line, column;
	for (line = 0; line < dimension; line++) {
		for (column = 0; column < dimension; column++) {
			matrix[line][column] = radom();
		}
	}
}

void initialize(int argc, char *argv[]){	
	dimension = 20;
	if (argc == 2)
		dimension = atoi(argv[1]);

	srand(time(NULL));

	matrixA = create_matrix();
	matrixB = create_matrix();
	matrixProduct = create_matrix();
	
	fill_matrix(matrixA);
	fill_matrix(matrixB);
}

void print_matrix(double **matrix){
	int i, j;
	for (i = 0; i < dimension; i++) {
		printf("\n");
		for (j = 0; j < dimension; j++)
			printf("%7.2f", matrix[i][j]);
	}
	printf("\n"); 
}

double scalar_product(double *line, double *column){
	int i;
	double total;
	total = 0.0;
	for (i = 0; i < dimension; i++){
		total += line[i] * column[i];
	}
	return total;
}