miércoles, 27 de abril de 2011

[Ejercicio repeticion] 3 Ejercicios Clasicos

- Diseñar un algoritmo que permita ingresar n números (con n ingresado por teclado), ninguno de ellos igual a cero. Se pide sumar los positivos, obtener el producto de los negativos y luego mostrar ambos resultados.

- Escribir un programa que pida por teclado una serie de números enteros, posteriormente escriba por pantalla cual es el mayor y el menor y en que posicion entraron. el ingreso termina con un cero.

- Escribir un programa que pida por teclado una serie de pares ordenados, contar cuantos estan en el 1er, 2do, 3er, 4to cuadrante y tambien cuantos estan sobre el eje x y el eje y, el ingreso finaliza con el ingreso del par nulo.


/*
- Diseñar un algoritmo que permita ingresar n números (con n ingresado por teclado),
ninguno de ellos igual a cero. Se pide sumar los positivos, obtener el producto de los
negativos y luego mostrar ambos resultados.
*/
#include
<iostream>
using namespace std;
int main ()
{
int suma,n,prod,c,nro;
cout
<<"ingrese lo cantidad de numeros a ingresar"<<endl;
cin
>>n;
suma
=0;
prod
=1;
c
=0;
while(c<n)
{
cout
<<"ingrese un numero "<<endl;
cin
>>nro;
if(nro!=0)
{
c
++;
if(nro>0)
{
suma
=suma+nro;
}
else
{
prod
=prod*nro;
}
}
else
{
cout
<<" 0 no es valido ";
}
}
cout
<<"la suma de los numeros positivos es "<<suma<<endl;
cout
<<" el producto de los negativos es "<<prod<<endl;
system (
"pause");
return 0;
}



/*
- Escribir un programa que pida por teclado una serie de números enteros, posteriormente
escriba por pantalla cual es el mayor y el menor y en que posicion entraron. el ingreso
termina con un cero.
*/
#include
<iostream>
using namespace std;
int main ()
{
int mayor,posMayor,menor,posMenor,c,nro;

mayor
=-99999;//le asigno un nro muy chico para que el menor sea el primer nro
posMayor=0;
menor
=99999;//le asigno un nro muy grande para que el mayor sea el primer nro
posMenor=0;
c
=0;
cout
<<"ingrese un numero "<<endl;
cin
>>nro;
while(nro!=0)
{
c
++;
if(nro<menor)
{
menor
=nro;
posMenor
=c;
}
if(nro>mayor)
{
mayor
=nro;
posMayor
=c;
}
cout
<<"ingrese un numero "<<endl;
cin
>>nro;
}
if(c!=0)
{
cout
<<"Menor "<<menor<<endl;
cout
<<"Posicion del Menor "<<posMenor<<endl;
cout
<<"Mayor "<<mayor<<endl;
cout
<<"Posicion del Mayor "<<posMayor<<endl;
}
else
{
cout
<<"no ingreso ningun numero"<<endl;
}
system (
"pause");
return 0;
}



/*
- Escribir un programa que pida por teclado una serie de pares ordenados, contar
cuantos estan en el 1er, 2do, 3er, 4to cuadrante y tambien cuantos estan sobre
el eje x y el eje y, el ingreso finaliza con el ingreso del par nulo.
*/
#include
<iostream>
using namespace std;
int main ()
{
int x,y,cEjeY,cEjeX,cCuadrante1,cCuadrante2,cCuadrante3,cCuadrante4;

cout
<<"ingrese x e y"<<endl;
cin
>>x>>y;

cEjeY
=0;
cEjeX
=0;
cCuadrante1
=0;
cCuadrante2
=0;
cCuadrante3
=0;
cCuadrante4
=0;

while((x!=0)||(y!=0))
{
if((x==0)||(y==0))
{
if(x==0)
{
cEjeY
++;
}
else
{
cEjeX
++;
}
}
else
{
if(x>0)
{
if(y>0)
{
cCuadrante1
++;
}
else
{
cCuadrante4
++;
}
}
else
{
if(y>0)
{
cCuadrante2
++;
}
else
{
cCuadrante3
++;
}
}
}
cout
<<"ingrese x e y"<<endl;
cin
>>x>>y;
}

cout
<<"cEjeX "<<cEjeX<<endl;
cout
<<"cEjeY "<<cEjeY<<endl;
cout
<<"cCuadrante1 "<<cCuadrante1<<endl;
cout
<<"cCuadrante2 "<<cCuadrante2<<endl;
cout
<<"cCuadrante3 "<<cCuadrante3<<endl;
cout
<<"cCuadrante4 "<<cCuadrante4<<endl;

system (
"pause");
return 0;
}

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

martes, 22 de febrero de 2011

[Final/Parcial Resuelto] Parcial 3 - 2 Cuatrimestre 2008 (UNC)

Gente aca les dejo la resolucion de parcial, digamos de nivel medio, tiene archivo y vectores, espero les sea de utilidad.

Enunciado:



Codigo:


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

void CARGAR(double V[100], int &n)
{
char nom [20];
int i;

ifstream A;
cout
<<"Ingrese nombre del archivo"<<endl;
cin
>>nom;
A.open(nom);
if(A.fail())
{
cout
<<"error no se cuentra el archivo";
system (
"pause");
exit (
1);
}
A.setf(ios::
fixed);
A.setf(ios::showpoint);
A.precision (
2);

i
=0;
while(!A.eof())
{
A
>>V[i];
i
++;
}
n
=i;

A.close();
}

void MOSTRAR (double V[100], int n)
{
int i;

cout
<<"El vector es"<<endl;
for(i=0; i<n; i++)
{
cout
<<V[i]<<endl;
}
}

double PROMEDIO(double V[100], int n)
{
int s,i;
double prom;

for(i=0; i<n; i++)
{
s
=s+V[i];
}
prom
=(double)s/n;

return prom;
}


double DESVIACION (double V[100], int n, double promedio)
{
double s,desv;
int i;

s
=0;
for(i=0;i<n;i++)
{
s
=s+pow(V[i]-promedio,2);
}
desv
=sqrt(s/n);

return desv;
}

void SALIDA(double V[100], int n, double desv)
{
int i;
double nro;

ofstream A;
A.open(
"salida.txt");
A.setf(ios::showpoint);
A.setf(ios::
fixed);
A.precision(
10);
for(i=0; i<n; i++)
{
nro
=(double)V[i]-desv;
A
<<abs(nro)<<endl;
}
cout
<<"Distancias en el archivo salidas.txt"<<endl;
A.close();
}

int main ()
{
double V[100];
int n;
double p,d;

CARGAR(V,n);
MOSTRAR(V,n);
p
=PROMEDIO(V,n);
d
=DESVIACION(V,n,p);
SALIDA(V,n,d);
cout
<<"Promedio "<<p<<endl;
cout
<<"Desviacion "<<d<<endl;

system (
"pause");
return 0;
}


El "archivo.txt"

45
455
44
54
4


El "archivo2.txt"

0.215
0.142
0.2455
0.144
0.154
0.1


Nota: pueden probar cualquiera de los dos archivos
Recordar: p=(double)s/n; se pone double por que si s y n son enteros dara un entero por mas que p sea un double, para evitar esto ponemos un (double) adelante de la operacion y tenemos resuelto el problema.
Ayuda Memoria: "sqrt" es para calcular la raiz, "abs" para el valor absoluto, ambas pertenecientes a la libreria cmath.

Agradecimientos Emiliano Ortin

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