1. Conversor Dec-Bin y Bin-Dec

Anuncio
Solución Ex. Junio’06 GrD - Programación C++
Pág. 1
INDICE
1.
CONVERSOR DEC-BIN Y BIN-DEC ............................................................................................................ 1
2.
CLASES - INMOBILIARIA ............................................................................................................................ 2
1.
Conversor Dec-Bin y Bin-Dec
// Ejercico para convertir un número Decimal a Binario
// Paul Bustamante - Tecnun
// Copyright @ PBM
#include <iostream.h>
#include <string.h>
#include <math.h>
void Dec2Bin( int NumDec, char *NumBin);
void Bin2Dec(char *NumBin, int &NumDec );
void main()
{
int num,opc;
char NumBin[80];
while(1){
cout <<"** Menu **\n1. Dec to Bin\n2. Bin to Dec\n3. Salir\n\t Opc: ?";
cin >> opc;
if (opc==1){
cout << "\tNumero decimal:?";
cin >> num;
Dec2Bin(num,NumBin);
cout << "\tEl Numero "<< num << " en binario es:" << NumBin << endl;
}else if (opc==2){
cout << "\tNumero Binario:?";
cin >> NumBin;
Bin2Dec(NumBin,num);
cout << "\tEl Numero "<< NumBin << " en decimal es:" << num << endl;
}else if (opc==3) break;
}
}
void Dec2Bin( int NumDec, char *NumBin)
{
int cont=0;
int num=NumDec;
//numerador
while(1){
int val = num/2;
int r = num%2;
if (val<2) {
NumBin[cont++]='0'+ r;
NumBin[cont++]='0'+ val;
//el ultimo
break;
}
NumBin[cont++]='0'+ r; //guardamos el resto
num=val;
}
NumBin[cont]=0;
//final de la cadena
//invertimos el numero
Informática II - Fundamentos de Programación
Paul Bustamante
Solución Ex. Junio’06 GrD - Programación C++
Pág. 2
int len=strlen(NumBin);
for (int i=0;i<len/2;i++) {
char a = NumBin[i];
NumBin[i]=NumBin[len-1-i];
NumBin[len-1-i] = a;
}
}
void Bin2Dec(char *NumBin, int &NumDec )
{
NumDec=0;
int len = strlen(NumBin);
for (int i=len-1;i>=0;i--){
NumDec += (NumBin[i] - '0') * pow( 2, len-1-i );
}
}
2.
Clases - Inmobiliaria
// Ejercico de Clases: Herencia y Polimorfismo
// Paul Bustamante - Tecnun
// Copyright @ PBM
#include <fstream.h>
#include <iomanip.h>
class Inmo
{
int tipo;
//1: vivienda 2:local
double precio;
char direccion[40];
double m2;
//area, en metros cuadrados
bool venta;
//true:venta false:alquiler
public:
Inmo(int tip){ tipo=tip; }
int GetTipo(){ return tipo; }
virtual void MostrarInfo()
{
venta? cout << "\tEn Venta.."<<endl : cout << "\tEn Alquiler.."<<endl;
cout << "\tPrecio:" << setw(10)<<precio ;
cout << "\tArea:" << m2 <<endl;
cout << "\tDireccion:" << direccion <<endl;
}
friend void operator>>(istream& ci, Inmo* in)
{
int v;
cout << "Venta (1) o Alquiler(0):?"; cin>>v;
if (v==1) in->venta=true;
else in->venta=false;
cout << "Precio:?";
cin >> in->precio;
cout << "Area(m2):?";
cin >> in->m2;
cin.ignore();
cout << "Direccion:?"; cin.getline(in->direccion,40);
}
};
class Vivienda : public Inmo
{
int numHab;
int numBan;
bool trastero;
bool garage;
public:
Informática II - Fundamentos de Programación
Paul Bustamante
Solución Ex. Junio’06 GrD - Programación C++
};
Pág. 3
Vivienda(int tip):Inmo(tip){;}
friend void operator>>(istream& ci, Vivienda* viv)
{
char ch;
cin >> (Inmo*)viv;
cout << "Num.Habitaciones:?"; cin >> viv->numHab;
cout << "Num.Banos:?"; cin >> viv->numBan;
cout << "Trastero (s/n):?"; cin >>ch;
if (ch=='s') viv->trastero=true; else viv->trastero=false;
cout << "Garage (s/n):?"; cin >>ch;
if (ch=='s') viv->garage=true;
else viv->garage=false;
}
void MostrarInfo()
{
cout << "Vivienda:"<<endl;
Inmo::MostrarInfo();
cout << "\tNumero de habitaciones:"<<numHab;
cout << "\tNumero de Banos:"<<numBan<<endl;
cout << "\tOpciones:";
trastero? cout << "CON trastero, " : cout << "SIN trastero, ";
garage? cout << "CON garage"<<endl : cout << "SIN garage"<<endl;
}
class Local : public Inmo
{
int numOf;
//numero de oficinas
char Actividad[40]; //bar, peluquería, informática, etc.
bool almacen;
//true: tiene almacen
public:
Local(int tip):Inmo(tip){;}
friend void operator>>(istream& ci, Local* loc)
{
char ch;
cin >> (Inmo*)loc;
//para ejecutar el opera. de Inmo
cout << "Actividad:?"; cin.getline(loc->Actividad,40);
cout << "Num.Oficinas:?"; cin >> loc->numOf;
cout << "Almacen (s/n):?"; cin >>ch;
if (ch=='s') loc->almacen=true; else loc->almacen=false;
}
void MostrarInfo()
{
cout << "Local:"<<endl;
Inmo::MostrarInfo();
cout << "\tNumero de Oficinas:"<<numOf<<endl;
cout << "\tActividad:"<<Actividad<<endl;
cout << "\tOpciones: ";
almacen? cout << "CON almacen"<<endl : cout << "SIN almacen"<<endl;
}
};
int Menu()
{
int opc;
cout<<"\t***** Menu *****"<<endl;
cout<<"\t1.Introducir oferta \n\t2.Ver Ofertas. \n\t3.Grabar Ofertas. \n\t
4.Leer Ofertas\n\t5.Salir"<<endl;
cout<<"\t opcion:? ";
cin>>opc;
return opc;
}
Informática II - Fundamentos de Programación
Paul Bustamante
Solución Ex. Junio’06 GrD - Programación C++
Pág. 4
/************** Función Principal ****************/
void main()
{
Inmo *Lista[40];
int cont=0,tipo;
while(1){
int opc=Menu();
if (opc==5) {
for (int i=0;i<num;i++) delete Lista[i]; //liberar memoria
break;
}
if (opc==1){
cout << "Introducir Viviendas(1) o Locales(2):?";
cin >> tipo;
if (tipo==1){
Vivienda *v1 = new Vivienda(1);
cin >> v1;
Lista[cont++]=v1;
}
else {
Local *l1 = new Local(2);
cin >> l1;
Lista[cont++]=l1;
}
}
else if (opc==2){
cout << "Que tipo desea ver: Viviendas(1), Locales(2), Todas(3):?";
cin >> tipo;
cout << "\n******** Listado *********"<<endl;
for (int i=0;i<cont;i++){
if (Lista[i]->GetTipo()==tipo)
//1 o 2
Lista[i]->MostrarInfo();
else if (tipo==3)
Lista[i]->MostrarInfo();
//muestra todos
}
cout << "******** Fin del Listado *********\n"<<endl;
}
else if (opc==3){ //grabar los objetos a disco
fstream fout("pp.dat",ios::out | ios::binary);
for (int i=0;i<cont;i++){
//primero escribe el tipo, para saber qué leer
fout.write((char*)Lista[i]->GetTipo(),sizeof(int));
if (Lista[i]->GetTipo()==1)
fout.write((char*)Lista[i],sizeof(Vivienda));
else if (Lista[i]->GetTipo()==2)
fout.write((char*)Lista[i],sizeof(Local));
}
fout.close();
}
else if (opc==4){ //Leer de disco
//hacer la opción de lectura. Primero leer el Tipo de Objeto
}
}
}
Informática II - Fundamentos de Programación
Paul Bustamante
Descargar