Version:0.9 StartHTML:0000000105 EndHTML:0000017777 StartFragment:0000000152 EndFragment:0000017743
/******************************************************/
/*************** Isidro Pastor Jorda ******************/
/******************************************************/
/****************** Telematica ************************/
/******************************************************/
/************* Practica 8 Ejercicio 3 *****************/
/******************************************************/
#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>
const int MAX = 10;
typedef int Matriz[MAX][MAX];
void MostrarMatriz(Matriz M, int filas, int columnas);
void InicializaMatriz(Matriz M, int reset);
int main()
{
int i,j;
int filas, columnas, filas2, columnas2;
int opcion;
Matriz m1,m2,suma;
InicializaMatriz(m1, 0);
InicializaMatriz(m2, 0);
InicializaMatriz(suma, 0);
ifstream fentrada;
ofstream fsalida, fsalida2, fsalida3;
cout << " Practica 8 Ejercicio 1 \n";
cout << " Lectura de una matriz de un fichero y grabar nuevo fichero \n";
cout << " Elige lo que que quieres hacer: \n";
cout << " 1.- Lee las dos matrices de matriz1.dat y matriz2.dat y las suma en matriz3.dat\n";
cout << " 2.- Introducir la matriz 1 y grabarla en el fichero matriz1.dat\n";
cout << " 3.- Introducir la matriz 2 y grabarla en el fichero matriz2.dat\n";
cout << " Opcion elegida -> ";
cin >> opcion;
switch (opcion)
{
case 1:
fentrada.open("matriz1.dat");
if (!fentrada)
cout << "\n Error abriendo el fichero matriz1.dat";
else
{
fentrada >> filas;
fentrada >> columnas;
for (i = 0; i < filas; i++)
{
for (j = 0; j < columnas; j++)
fentrada >> m1[i][j];
fentrada.ignore(); // con esto saltamos el salto de linea y ponermos cursor en la linea siguiente
fentrada.ignore();
}
fentrada.close();
MostrarMatriz(m1, filas, columnas);
// }// while
} // else
fentrada.open("matriz2.dat");
if (!fentrada)
cout << "\n Error abriendo el fichero matriz2.dat";
else
{
fentrada >> filas2;
fentrada >> columnas2;
for (i = 0; i < filas2; i++)
{
for (j = 0; j < columnas2; j++)
fentrada >> m2[i][j];
fentrada.ignore(); // con esto saltamos el salto de linea y ponermos cursor en la linea siguiente
fentrada.ignore();
}
fentrada.close();
MostrarMatriz(m2, filas2, columnas2);
// }// while
} // else
if ( filas == filas2 && columnas == columnas2)
{
fsalida3.open("matriz3.dat");
if (!fsalida3)
cout << " Error abriendo el fichero matriz3.dat";
else
{
for (i = 0; i < filas; i++)
{
for ( j = 0; j < columnas; j++)
{
suma[i][j] = m1[i][j] + m2[i][j];
fsalida3 << suma[i][j] << " ";
}
fsalida3 << endl;
}
fsalida3.close();
}
MostrarMatriz(suma, filas, columnas);
}
else
cout << "\n No se ha podido realizar la suma con exito\n";
break;
case 2:
do
{
cout << "\n Introduce el numero de filas (Maximo 10)-> ";
cin >> filas;
}
while( filas < 0 || filas > 10);
do
{
cout << "\n Introduce el numero de columnas (Maximo 10)-> ";
cin >> columnas;
}
while( columnas < 0 || columnas > 10);
for (i = 0; i < filas; i++)
{
for (j = 0; j < columnas; j++)
{
cout << "\n Introduce la posicion " << i << " " << j << " -> ";
cin >> m1[i][j];
system("CLS");
MostrarMatriz(m1, filas, columnas);
}
}
fsalida.open("matriz1.dat");
if (!fsalida)
cout << " Error abriendo el fichero matriz1.dat";
else
{
fsalida << filas << endl;
fsalida << columnas << endl;
for (i = 0; i < filas; i++)
{
for (j = 0; j < columnas; j++)
fsalida << m1[i][j] << " ";
fsalida << endl;
}
fsalida.close();
} // else
break;
case 3:
do
{
cout << "\n Introduce el numero de filas (Maximo 10)-> ";
cin >> filas2;
}
while( filas2 < 0 || filas2 > 10);
do
{
cout << "\n Introduce el numero de columnas (Maximo 10)-> ";
cin >> columnas2;
}
while( columnas2 < 0 || columnas2 > 10);
for (i = 0; i < filas2; i++)
{
for (j = 0; j < columnas2; j++)
{
cout << "\n Introduce la posicion " << i << " " << j << " -> ";
cin >> m2[i][j];
system("CLS");
MostrarMatriz(m2, filas2, columnas2);
}
}
fsalida2.open("matriz2.dat");
if (!fsalida2)
cout << " Error abriendo el fichero matriz2.dat";
else
{
fsalida2 << filas2 << endl;
fsalida2 << columnas2 << endl;
for (i = 0; i < filas2; i++)
{
for (j = 0; j < columnas2; j++)
fsalida2 << m2[i][j] << " ";
fsalida2 << endl;
}
fsalida2.close();
} // else
break;
}// switch
system("PAUSE");
return 0;
}
/******************************************************************
* Funcion: MostrarMatriz
* Descripcion: Funcion para mostrar por pantalla la matriz tabulada
*
*
* Parametros:
*
* Nombre E/S Descripcion
* ------ ----- -----------
* M E Matriz a mostrar por pantalla
*
*
* Valor devuelto:
* void, la funcion solo muestra por pantalla la matriz
*******************************************************************/
void MostrarMatriz(Matriz M, int filas, int columnas)
{
cout << endl << endl;
for (int i = 0; i < filas; i++ )
{ for (int j = 0; j< columnas; j++)
{
if (M[i][j] < 10) // Si el numero es menos que 10 introducimos 3 espacios para que quede bien la salida por pantalla
cout << " " << M[i][j];
else
if (M[i][j] < 100) // Si es mas pequeño que 100 introduciremos el numero con solo 2 espacios de separacion
cout << " " << M[i][j];
else
cout << " " << M[i][j]; // Y si fuera mayor que 100 entonces un espacio simple para separar las columnas
}
cout << endl;
}
cout << endl;
}
/******************************************************************
* Funcion: InicializaMatriz
* Descripcion: Funcion que inicializa una matriz al valor de reset
*
*
* Parametros:
*
* Nombre E/S Descripcion
* ------ ----- -----------
* M E/S Matriz a inicializar
* reset E Valor usado para inicializar la matriz
*
* Valor devuelto:
* void, la matriz no devuelve nada pero modifica el vector
*******************************************************************/
void InicializaMatriz(Matriz M, int reset)
{
for (int i = 0; i < MAX; i++ )
for (int j = 0; j< MAX; j++)
M[i][j] = reset;
return;
}