sábado, 26 de febrero de 2011

[Final/Parcial Resuelto] Parcial 3 - 2 Cuatrimestre 2008 (UNC) - El de los Telefonos

Gente aca va otra entrega de parciales/finales resueltos. Saludos

Enunciado:





Codigo:

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

void leer_datos (double datos[10][6])
{
int i;
int j;
ifstream A;
A.open(
"telefonos.txt");
if(A.fail())
{
cout
<<" error al buscar el archivo";
system (
"pause");
exit (
1);
}
A.setf(ios::
fixed);
A.setf(ios::showpoint);
A.precision(
2);
for(i=0; i<10; i++)
{
for(j=0; j<6; j++)
{
A
>>datos[i][j];
}
}
A.close();
}

void MOSTRAR(double datos[10][6])
{
int i;
int j;
for(i=0; i<10; i++)
{
for(j=0; j<6; j++)
{
cout
<<setw(8)<<datos[i][j]<< " " ;
}
cout
<<endl;
}
}

double buscar_depto(double datos[10][6])
{
int i;
int j;
double mayor;
double depto;

mayor
=datos[0][2];
depto
=datos[0][0];
for(i=0; i<10; i++)
{
if(datos[i][2]>mayor)
{
mayor
=datos[i][2];
depto
=datos[i][0];
}
}

return depto;
}

double buscar_piso(double datos[10][6])
{
int i;
int j;
double piso;
double mayor;
mayor
=datos[0][10];
piso
=datos[0][1];
for(i=0; i<10; i++)
{
if(datos[i][10]>mayor)
{
mayor
=datos[i][10];
piso
=datos[i][1];
}
}
return piso;
}

void buscar_mejor_cliente_por_piso(double datos[10][6], double clientes[10][2], int &nCliente)
{
int i;
int j;
int k;
int icliente;
int enc;
int cliente;
double piso;
double mejorcliente;
double mayoresllamadastotales;

icliente
=0;
for(k=1; k<=50; k++)
{
enc
=0;
piso
=k;
mayoresllamadastotales
=0;
mejorcliente
=0;
for(i=0; i<10; i++)
{
if (((datos[i][3]+datos[i][5])>mayoresllamadastotales)&&(piso==datos[i][1]))
{
enc
=1;
mayoresllamadastotales
=(datos[i][3]+datos[i][5]);
mejorcliente
=datos[i][0];
}
}
if(enc==1)
{
clientes[icliente][
0]=piso;
clientes[icliente][
1]=mejorcliente;
icliente
++;
}
}
nCliente
=icliente;
}

void MOSTRAR_CLIENTES(double clientes[10][2], int n)
{
int i;
cout
<<"\n\nMatriz Clientes "<<endl;
for(i=0; i<n; i++)
{
cout
<<"Piso "<<clientes[i][0]<< " Mejor cliente "<<clientes[i][1];
cout
<<endl;
}
}

void guardar_resultados(double clientes[10][2], int n)
{
int i;
ofstream A;
A.open(
"mejores_clientes.txt");
for(i=0; i<n; i++)
{
A
<<"Piso "<<clientes[i][0]<< " Mejor cliente "<<clientes[i][1];
A
<<endl;
}
A.close();
}

int main()
{
double datos[10][6];
double clientes[10][2];
int cantidad_de_pisos;
double depto, piso, cliente_1, cliente_2;
leer_datos(datos);
depto
= buscar_depto(datos);
piso
= buscar_piso(datos);
cout
<< "\n\n";
cout
<< "Cliente con mas llamadas locales: " << depto << endl;
cout
<< "Piso con mas minutos de llamadas interurbanas: " << piso;
cout
<< "\n\n";
buscar_mejor_cliente_por_piso(datos, clientes, cantidad_de_pisos);
MOSTRAR(datos);
MOSTRAR_CLIENTES(clientes, cantidad_de_pisos);
guardar_resultados(clientes, cantidad_de_pisos);
system(
"pause");
return 0;
}


Archivo "telefonos.txt"

21 2 20 30.5 22 43.7
71 7 12 20.3 17 12
41 4 98 92.1 45 99.2
7 4 98 92.1 45 66.2
22 2 7 31.0 22 44.0
12 13 74 73.5 76 87.3
23 2 7 31.0 22 30.0
42 4 98 92.1 45 66.2
72 7 12 20.3 17 12.9
43 4 98 92.1 45 20.2


Nota: lo que varia del enunciado es que casi todas las variables son double, sino no podria andar. (para hacerlo andar tal cual como pide el enunciado deberiamos abordar temas que no le compete a "Informatica-EFN"). Tambien se ha usado 10 filas en el archivo en vez de 20 para no hacer demasiado extenso el archivo con datos.

Agradecimientos Emiliano Ortin