lunes, 14 de febrero de 2011

[Final/Parcial Resuelto] Final del 1er Turno Febrero-Marzo 2011

Enunciado (Final 07-02-2011)

1. De un archivo (datos.txt) lleno de numeros enteros se debe cargar una matriz de NxM elementos.(EL primer elemento es el numero de filas
el segudo el numero de columnas).
2. a-Crear una matriz de Nx4. Donde en la columna uno debe aparecer el menor elemento de cada fila de la matriz NxM,
en la segunda columna debe aparecer la posicion del minimo.
b-En la tercer columna debe aparecer el maximo y en la ultima su posicion.
c-Grabar esta matriz en un archivo llamado may_men_txt.
3. Calcular el promedio de los menores de la matriz calculada en 2 y mostrar en pantalla.
4. Generar una matriz de 5x5 elementos, esta matiz debe cargarse por filas con los 25 primeros elementos de la matriz del punto
1, en caso de que la matriz no tenga elementos suficientes (M*N<25), terminar de llenar la matriz con ceros.
5. Grabar en un archivo llamado mayor.txt, los elementos de la matriz calculada en el punto 4 que sean mayores al promedio calculado en 3.

Puntaje del examen:
punto 1 ..................... 11
punto 2 ..................... 22
punto 3 ..................... 11
punto 4 ..................... 17
punto 5 ..................... 19
uso de funciones ............ 5
comentarios y vocabulario ... 10
compilacion ................. 5

Código:

# include <iostream>
# include
<fstream>
# include
<cstdlib>
using namespace std;

void CARGARMAT (int M[][100], int &n, int &m)
{
int i;
int j;

ifstream A;

A.open(
"datos.txt");
if(A.fail())
{
cout
<<" error ";
system (
"pause");
exit(
1);
}

A.setf(ios::
fixed);
A.setf(ios::showpoint);
A.precision (
2);
A
>>n;
A
>>m;
for ( i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
A
>>M[i][j];
}
}
A.close ();
}

void GENERARCOL0Y1 (int M[][100], int n, int m, int MG[100][100])
{
int men;
int i;
int j;
int pos;

for(i=0; i<n; i++)
{
men
=M[i][0];
pos
=0;
for (j=0; j<m; j++)
{
if(M[i][j]<men)
{
men
=M[i][j];
pos
=j;
}
}
MG[i][
0]=men;
MG[i][
1]=pos;
}
}

void GENERARCOL2Y3 (int M[][100], int n, int m , int MG[][100])
{
int i;
int j;
int may;
int pos;

for(i=0; i<n; i++)
{
may
=M[i][0];
pos
=0;
for (j=0; j<m; j++)
{
if(M[i][j]>may)
{
may
=M[i][j];
pos
=j;
}
}
MG[i][
2]=may;
MG[i][
3]= pos;
}
}

void GENERAR_ARCHIVO_MAY_MEN_TXT (int MG[][100], int n)
{
int i;
int j;
ofstream A;
A.open (
"may_men.txt");
for(i=0; i<n; i++)
{
for(j=0; j<4; j++)
{
A
<<MG[i][j]<< " " ;
}
A
<<endl;
}
A.close ();
cout
<<"Archivo may_men.txt generado"<<endl;
}

void MOSTRAR (int Matriz[][100], int n, int m)
{
int i;
int j;

for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
cout
<<Matriz[i][j]<< " " ;
}
cout
<<endl;
}
}

double PROMEDIO (int MG[][100], int n)
{
int i;
int j;
int s;
double p;

s
=0;
p
=0;
for (i=0; i<n; i++)
{
s
=s+MG[i][0];
}

p
=(double)s/n;
return p;
}

void GENERAR5X5 (int M[][100], int n, int m, int MG2[][100])
{
int iindep;
int jindep;
iindep
=0;
jindep
=0;
int i;
int j;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
MG2[iindep][jindep]
=M[i][j];
jindep
++;
if(jindep==5)
{
jindep
=0;
iindep
++;
}
if(iindep==5)
{
return ;
}
}
}
}

void GENERAR_ARCHIVO_MAYOR_TXT (int MG[][100], int n, double p)
{
int i;
int j;
ofstream A;
A.open (
"mayor.txt");
for(i=0; i<n; i++)
{
for(j=0; j<4; j++)
{
if (MG[i][j]>p)
{
A
<<MG[i][j]<<endl;
}
}
}
A.close ();
cout
<<"Archivo mayor.txt generado"<<endl;
}

int main ()
{
int M[100][100],n,m,MG[100][100],MG2[100][100];
double prom;

//Punto 1
CARGARMAT(M,n,m);
cout
<<"Matriz Cargada de Archivo"<<endl;
MOSTRAR(M,n,m);

//Punto 2a
GENERARCOL0Y1(M,n,m,MG);
cout
<<"Matriz Generada Columna 0 y 1"<<endl;
MOSTRAR(MG,n,
4);

//Punto 2b
GENERARCOL2Y3(M,n,m,MG);
cout
<<"Matriz Generada Columna 2 y 3"<<endl;
MOSTRAR(MG,n,
4);

//Punto 2c
GENERAR_ARCHIVO_MAY_MEN_TXT(MG,n);

//Punto 3
prom=PROMEDIO(MG,n);
cout
<<"el promedio de la segunda matriz es "<<prom;

//Punto 4
GENERAR5X5(M,n,m,MG2);
cout
<<"Matriz Generada 5x5"<<endl;
MOSTRAR(MG2,
5,5);

//Punto 5
GENERAR_ARCHIVO_MAYOR_TXT(MG2,n,prom);

system (
"pause");
return 0;
}


Archivo "datos.txt"

7
9
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1
1 2 3 4 5 9 8 7 6
9 8 7 4 5 6 1 2 3
1 2 3 7 8 9 6 5 7
9 8 7 3 2 1 4 5 6
2 3 1 5 6 4 8 9 7


Nota: El examen dice hacer 5 funciones, yo hice alrededor de 8, al punto 2 lo dividi en 3 funciones e hice un "mostrar" para que vayamos viendo paso a paso como las matrices van cargandose, tambien defini a todas las matrices de 100x100 para que podemos reutilizar la ultima funcion ya nombrada

Agradecimientos Franco Degioanni, Emiliano Ortin