Solución Ex. Junio’06 GrA - Programación C++ Pág. 1 1. JUEGO DEL AHORCADO.............................................................................................................1 2. CLASES.............................................................................................................................................3 1. Juego del Ahorcado #include #include #include #include <fstream.h> <time.h> <stdlib.h> <string.h> void Jugar(char *pal); int Menu(); void CargaPalabra(char *palabra); void main() { char pal[80]="",ch[2]; while(1){ int opc=Menu(); if (opc==3)break; else if(opc==1) CargaPalabra(pal); else if (opc==2) Jugar(pal); } } void Jugar(char *pal) { char ch; int len=strlen(pal); char *adivinados = new char[len+1]; char usados[30]; //son 26 las letras int nusados=0; //llevar las cuentas int intentos=0; for (int i=0;i<len;i++) adivinados[i]='X'; while(1){ cout << "\nAdivinados: "; for ( i=0;i<len;i++) cout << adivinados[i]<<" "; cout << " -> Dar digito:?"; cin >> ch; usados[nusados++]=ch; //guardamos el digito bool esta=false; for ( i=0;i<len;i++) { if (ch==pal[i]) { adivinados[i]=ch; esta=true; } } if (esta==false) intentos++; //sino ha acertado if (intentos==9){ cout << "Ahorcado....La palabra es:"<<pal; break; //termina el while }else{ for ( i=0;i<len;i++) if (adivinados[i]=='X') break; if (i==len) { Informática II - Fundamentos de Programación Paul Bustamante Solución Ex. Junio’06 GrA - Programación C++ Pág. 2 cout << "Enhorabuena...La palabra es:"<<pal<<endl; break; }else{ cout << "\tIntentos:"<<intentos; cout << " Digitos ya usados: "; for ( i=0;i<nusados;i++) cout<<usados[i]<<" "; } } } delete [] adivinados; } void CargaPalabra(char *palabra) { char file[40]; cout << "Nombre del fichero:?"; cin >> file; fstream fin(file,ios::in|ios::nocreate); int num=0; while(!fin.eof()) { fin>>palabra; num++; } cout << "Se ha seleccionado 1 de "<<num<<" palabras"<<endl; fin.close(); //empezar de nuevo fin.open(file,ios::in|ios::nocreate); srand(time(NULL)); int n=rand()%num; //elegir cualquier palabra num=0; while(!fin.eof()) { fin>>palabra; if (num==n) break; //se termina la busqueda num++; } fin.close(); } int Menu() { int opc; cout << "\n** Juego del Ahorcado **"<<endl; cout << "1. Cargar Palabra"<<endl; cout << "2. Jugar"<<endl; cout << "3. Salir"<<endl; cout << "\tOpc:?"; cin >> opc; return opc; } Informática II - Fundamentos de Programación Paul Bustamante Solución Ex. Junio’06 GrA - Programación C++ 2. Pág. 3 Clases - Agenda #include <fstream.h> #include <string.h> class Agenda { public: virtual void mostrarInfo(){;} }; class Persona { char nombre[20]; //Apellido, nombre char dir[20]; //direccion long telf_fijo; long telf_movil; public: Persona(){} friend void operator>>(istream&ci, Persona &p){ cin.ignore(); cout << "Nombre:?"; cin.getline(p.nombre,20); cout << "Direccion:?"; cin.getline(p.dir,20); cout << "Telf.Fijo:?"; cin>>p.telf_fijo; cout << "Telf.Movil:?"; cin>>p.telf_movil; } friend void operator<<(ostream&co, Persona &p){ cout << "\t"<<p.nombre; cout << " Dir.:"<<p.dir; cout << " Fijo::"<<p.telf_fijo; cout << " Movil::"<<p.telf_movil<<endl; }; } class Empresa { char nombre[15]; char puesto[20]; long telf; public: Empresa(){} friend void operator>>(istream&ci, Empresa &e){ cin.ignore(); cout << "Empresa:\n"; cout << "Nombre:?"; cin.getline(e.nombre,15); cout << "Direccion:?"; cin.getline(e.puesto,20); cout << "Telefono:?"; cin>>e.telf; } friend void operator<<(ostream&co, Empresa &e){ cout << "\tEmpresa:\n"; cout << "\t"<< e.nombre; cout << "\tDir.: "<< e.puesto; cout << "\tTelf:"<< e.telf << endl; } }; Informática II - Fundamentos de Programación Paul Bustamante Solución Ex. Junio’06 GrA - Programación C++ Pág. 4 class Contactos:public Agenda { Persona p; Empresa e; char correo[20]; public: Contactos(){} friend void operator>>(istream&ci, Contactos *c){ cin >>c->p; cout << "Correo:?"; cin >> c->correo; cin>> c->e; } void mostrarInfo(){ cout << p; cout << "\tCorreo:" << correo << endl; cout << e; } }; int Menu(); void main() { Agenda *Lista[40]; int num=0; while(1){ int opc=Menu(); if (opc==5) { //libera for (int i=0;i<num;i++) delete Lista[i]; break; } else if(opc==1){ Contactos *contact1=new Contactos(); cin >> contact1; Lista[num++]=contact1; } else if(opc==2){ for (int i=0;i<num;i++) { cout << "Contacto "<<i+1<<":\n"; Lista[i]->mostrarInfo(); } } else if(opc==3){ char name[40]; cout << "Nombre del fichero:?"; cin >> name; fstream fout(name,ios::out|ios::binary); if (!fout) cout << "Error.."<<endl; for(int i=0;i<num;i++) fout.write((char*)Lista[i],sizeof(Contactos)); cout << i << " Datos grabados en " <<name << endl; fout.close(); } else if(opc==4){ //cargamos en la lista char name[40]; cout << "Nombre del fichero:?"; cin >> name; fstream fin(name,ios::in|ios::nocreate|ios::binary); if (!fin) { cout << "No puede abrir el fichero" << endl;} else{ int cont=0; while(true){ Informática II - Fundamentos de Programación Paul Bustamante Solución Ex. Junio’06 GrA - Programación C++ Pág. 5 Contactos *contact1=new Contactos(); Lista[num] = contact1; //copia el leido if (!fin.read((char*)Lista[num],sizeof(Contactos))) { delete contact1; //borra el ultimo break; } num++; cont++; } } } } } cout << cont << " Datos cargados de " <<name << endl; fin.close(); int Menu() { int opc; cout << "\t\t** Menu Contactos **"<<endl; cout << "\t\t1. Agregar Contacto"<<endl; cout << "\t\t2. Ver Contactos"<<endl; cout << "\t\t3. Grabar Contactos"<<endl; cout << "\t\t4. Cargar Contactos"<<endl; cout << "\t\t5. Salir"<<endl; cout << "\t\t\tOpc:?"; cin >> opc; } return opc; Informática II - Fundamentos de Programación Paul Bustamante