/* Kodutöö 2. Variant 4.
 * Sisestatakse kaks massiivi A (n,m) ja B (k,l). 
 * Ridade ja veergude arv reaalarvulised 1<=n<=10.
 * Moodustatakse massiiv C - massivide summa.
 * Massiiv C dimensioonid min(n,k) ja min(m,l).
 * Massiiv C kuvatakse ridade kaupa.*/

#include <stdio.h> 

//Prototüübid
int SisestusN();
int SisestusM();
int SisestusL();
int SisestusK();
int	SisestusCRida(int, int);
int SisestusCVeerg(int,int);
void MaatriksSisestus(int, int, int, int, double[][10], double[][10]);
void VäljastusAlgne(int, int, int, int, double[][10], double[][10]);
void MaatriksLiitmine(int, int, double[][10], double[][10], double[][10]);
void CVäljastus(int, int, double[][10]);

int main(void)
{
	int n = SisestusN();
	int m = SisestusM();
	int l = SisestusL();
	int k = SisestusK();
	double A[n][m];
	double B[k][l];
	int CRida =	SisestusCRida(n, k);
	int CVeerg = SisestusCVeerg(m,l);
	double C[CRida][CVeerg];
	
	MaatriksSisestus(n, m, l, k, A, B);
	VäljastusAlgne(n, m, l, k, A, B);
	MaatriksLiitmine(CRida, CVeerg, A, B, C);	
	CVäljastus(CRida, CVeerg, C);
	return 0;	
}

//Sisestus
int SisestusN()
{
	int n;
	do	
	{	
		printf("Sisestage A veergude arv \n");
		scanf("%d", &n);
		if(n <= 1 || n >= 10)		
		{
		printf("Sisestatud väärtus ei sobi, sisestage täisarv vahemikus 1...10.");
		}								
	} while(n <= 1 || n >= 10);				
	return n;
}

int SisestusM()
{
	int m;
	do	
	{	
		printf("Sisestage A ridade arv \n");
		scanf("%d", &m);
		if(m <= 1 || m >= 10)		
		{
		printf("Sisestatud väärtus ei sobi, sisestage täisarv vahemikus 1...10.");
		}								
	} while(m <= 1 || m >= 10);	
	return m;
}

int SisestusL()
{
	int l;
	do	
	{	
		printf("Sisestage B veergude arv \n");
		scanf("%d", &l);
		if(l <= 1 || l >= 10)		
		{
		printf("Sisestatud väärtus ei sobi, sisestage täisarv vahemikus 1...10.");
		}								
	} while(l <= 1 || l >= 10);	
	return l;
}

int SisestusK()
{
	int k;
	do	
	{	
		printf("Sisestage B ridade arv \n");
		scanf("%d", &k);
		if(k <= 1 || k >= 10)		
		{
		printf("Sisestatud väärtus ei sobi, sisestage täisarv vahemikus 1...10.");
		}								
	} while(k <= 1 || k >= 10);	
	return k;
}


int SisestusCRida(int n, int k)
{
	int CRida;
	if(n < k)
	{ 
		CRida = n;
	}else
	{
		CRida = k;
	}	
	return CRida;
}
int SisestusCVeerg(int m, int l)
{
	int CVeerg;
	if(m < l)
	{ 
		CVeerg = m;
	}else
	{
		CVeerg = l;
	}	
	return CVeerg;
}

void MaatriksSisestus(int n, int m, int k, int l, double A[][m], double B[][l])
{
	int i, j, Kontroll;	//järjenumbrid, scanf kontrolli muutuja
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			do
			{
			printf("Sisestada A väärtus veerg [%d], rida [%d]", i,j);
			Kontroll = scanf("%lf", &A[i][j]);
				if(Kontroll == 0)	
				{
				printf("Sisestatud väärtus ei sobi, sisestage reaalarv");
				scanf("%*s");		//A[i][j] ei anta väärtust
				}
			} while(Kontroll == 0); //reaalarvu kontroll	
		}
	}
	for(i=0;i<k;i++)
	{
		for(j=0;j<l;j++)
		{
			do
			{
			printf("Sisestada B väärtus veerg [%d], rida [%d]", i,j);
			Kontroll = scanf("%lf", &B[i][j]);
				if(Kontroll == 0)	
				{
				printf("Sisestatud väärtus ei sobi, sisestage reaalarv");
				scanf("%*s");		
				}
			} while(Kontroll == 0); 	
		}
	}
}

void VäljastusAlgne(int n, int m, int k, int l, double A[][m], double B[][l])
{
	int i, j;
    printf("\nSisestatud maatriks A:\n");
    for(i = 0; i < m; i++)
        {
			for(j = 0; j < n; j++)
			{
			printf("%lf ", A[i][j]);
			}
		printf("\n");

		}
	printf("\nSisestatud maatriks B:\n");
    for(i = 0; i < l; i++)
        {
			for(j = 0; j < k; j++)
			{
			printf("%lf ", B[i][j]);
			}
		printf("\n");
        }
}

void MaatriksLiitmine(int CRida, int CVeerg, double A[][CVeerg], double B[][CVeerg], double C[][CVeerg])
{
	int j, i;
	for(i=0; i<CVeerg; i++)
	{
		for(j=0; j<CRida; j++)
		{
			C[i][j]= A[i][j] + B[i][j];
			
		}
	}
}
void CVäljastus(int CRida, int CVeerg, double C[][CVeerg])
{
	int j, i;
	printf("\nMaatriks C:\n");
	for(i=0; i < CRida; i++)
	{
		for(j=0; j < CVeerg; j++)
		{
			printf("%lf ", C[i][j]);
		}
		printf("\n");
	}
}