elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tengo un fallo en el siguiente ejercicio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tengo un fallo en el siguiente ejercicio  (Leído 2,935 veces)
juni85

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Tengo un fallo en el siguiente ejercicio
« en: 2 Junio 2010, 08:56 am »

Hola me gustaria cambiar el nombre de un empleado,pero al realizar todo no me lo cambia.
Si me lo podeis corregir lo agradeceria. El ejercio esta hecho con Netbeans

#include <stdlib.h>
#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Empleado{
public:
    string nombre;
    int edad;

public:

    Empleado(string nom, int ed=18){
     nombre=nom;
     edad=ed;
    }
   Empleado(){
      nombre=" ";
       edad=18;
   }
    void set_Empleado(string nom, int ed=18){
      nombre=nom;
      edad=ed;
    }

    void set_nombre(string nom){
        nombre=nom;
    }
     void set_edad(int ed){
        edad=ed;
    }
     string get_nombre(){
         return nombre;
     }
     int get_edad(){
         return edad;
     }

   
    void mostrarEmpleado();

    friend bool operator<(const Empleado &,const Empleado &);
 

};

Empleado leerEmpleado(){
    string nombre;
    int edad;
    cout<<"INTRODUCIR EMPLEADO "<<endl;
   
    cout<<"    Nombre :"<<endl;
    getline(cin,nombre);
    cout<<"    Edad :"<<endl;
    cin>>edad;
    char aux=getc(stdin);
    Empleado * pa =new Empleado(nombre,edad);
    return * pa;

}

void Empleado::mostrarEmpleado(){

cout<<"MOSTRAR TRABAJADOR "<<endl;
cout<<"Nombre : "<<nombre<<endl;
cout<<"Edad : "<<edad<<endl;

}


bool operator<(const Empleado & p,const Empleado & s){

   return p.nombre<s.nombre;

}


class listaEmpleado{

  public:

      vector<Empleado >v;

      void anadir1(Empleado e){
      v.push_back(e);
     }
   
      void anadir2(string nom,int ed){

       Empleado *e=new Empleado(nom,ed);
       v.push_back(*e);
             }
   

      bool borrar(string n){

         int i=0,u;

         u=v.size();
         bool borrado=false;
         while(i<u){
             if(v.nombre==n){
                 v=v[u-1];
                 v.pop_back();
                 borrado=true;
             }
             i++;
         }
         return(!borrado);
      }
   int get_edad(string n){
        int i=0;
        while(i<v.size()){
            if(v.nombre==n)return v.edad;
            i++;
        }
        return -1;
    }

   void listar(){
       int i=0,u;
       u=v.size();
         while(i<u){
       v.mostrarEmpleado();
       i++;
       }
   }

  int BuscarEmpleado(string d){
 
    int i=0,u;
       u=v.size();
       while(i<u){
           if(v.nombre==d){
            cout<<"encontrado"<<endl;

               return (1);
                  }
           i++;
         
       }
       cout<<"No encontrado"<<endl;
       return -1;

  }
 void cambiar_nombre(){
      string nom,nuevo;
      Empleado pa;
//Empleado *pa;
      int em;
     
      cout<<"Introduce el nombre del empleado a cambiar "<<endl;
      getline(cin,nom);
      em=BuscarEmpleado(nom);
      if(em==-1)cout<<"Nombre no valido "<<endl;
      else{
          cout<<"Introduce el nuevo nombre "<<endl;
          getline(cin,nuevo);
          pa.set_nombre(nuevo);
       //pa->set.nombre(nuevo);---el compilador se queda pillado
 }
       
     }

void ordenar(){
  sort(v.begin(),v.end());
}
void ordenarInv(){
  reverse(v.begin(),v.end());
}

void reset(){
    v.clear();
}


};




int main() {

    string nombre;
    listaEmpleado le;

    le.anadir2("Palomo",5);
    le.anadir1(leerEmpleado());
    le.anadir1(leerEmpleado());
    le.anadir1(leerEmpleado());
    cout<<"La edad de Palomo es "<<le.get_edad("Palomo")<<endl;

    le.listar();
    cout<<"Buscar Empleado"<<endl;
    cout<<"Introduce nombre del empleado a buscar "<<endl;
    getline(cin,nombre);
    le.BuscarEmpleado(nombre);
    cout<<"----"<<endl;
    le.BuscarEmpleado("Palomo");
    le.borrar("Palomo");
    le.listar();
    le.cambiar_nombre();
    le.listar();
    cout<<"FIN"<<endl;
    cout<<"\n\nVector ordenado\n\n"<<endl;
    le.ordenar();
    le.listar();
   
    le.ordenarInv();
    cout<<"\n\nVector ordenado al reves\n\n"<<endl;
    le.listar();


    return (0);
}





En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Tengo un fallo en el siguiente ejercicio
« Respuesta #1 en: 2 Junio 2010, 11:50 am »

Estaria bueno que pongas tu codigo entre etiquetas GeSHI, si no dudo que alguien lo quiera leer :P

[code=cpp][/code]

Mmmm yo mucho de C++ no conozco, pero hacer esto me parece un poco redundante...

Código:
...
class Empleado{
public:
    string nombre;
    int edad;

public:
    Empleado(string nom, int ed=18){
     nombre=nom;
     edad=ed;
    }
...

Creo que con un public seria mas que suficiente... (Que me corriga si no alguien experto en el lenguaje)

Salu10.


« Última modificación: 2 Junio 2010, 12:03 pm por nicolas_cof » En línea

M3LiNdR1

Desconectado Desconectado

Mensajes: 131



Ver Perfil WWW
Re: Tengo un fallo en el siguiente ejercicio
« Respuesta #2 en: 2 Junio 2010, 13:18 pm »

Estaria bueno que pongas tu codigo entre etiquetas GeSHI, si no dudo que alguien lo quiera leer :P

[code=cpp][/code]

Mmmm yo mucho de C++ no conozco, pero hacer esto me parece un poco redundante...

Código:
...
class Empleado{
public:
    string nombre;
    int edad;

public:
    Empleado(string nom, int ed=18){
     nombre=nom;
     edad=ed;
    }
...

Creo que con un public seria mas que suficiente... (Que me corriga si no alguien experto en el lenguaje)

Salu10.

Debe estar mal, seguramente el primer public tiener que ser un private, a nose que quieras acceder a esos dos campos desde fuera la clase. (No me mirado el codigo entero).
En línea

Va baixar davant dels meus...ulls molt suaument...sense alterar la quietud de la nit,amb un somriure ple de confiança com sino se li escapes res...


C/C++ - Prolog - Java - PHP - Python - SQL - ASP.NET - C# - javascript
pizarron

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Tengo un fallo en el siguiente ejercicio
« Respuesta #3 en: 3 Junio 2010, 09:33 am »

nicolas_cof, tenes razón que un public al principio seria suficiente, pero algunos utilizan los modificadores además como separador entre los data members y los métodos, una forma de dejar la declaración de la clase un poco más legible.

M3LiNdR1, que no sea private no quiere decir que esté mal, el código va a compilar y va a funcionar como espera, pero corre el riesgo de tener esas propiedades expuestas y que luego en caso de error sea complejo encontrar la falla.


juni85, tu error esta en el método cambiar_nombre() :

Código
  1. void cambiar_nombre(){
  2.      string nom,nuevo;
  3.      Empleado pa;
  4. //Empleado *pa;
  5.      int em;
  6.  
  7.      cout<<"Introduce el nombre del empleado a cambiar "<<endl;
  8.      getline(cin,nom);
  9.      em=BuscarEmpleado(nom);
  10.      if(em==-1)cout<<"Nombre no valido "<<endl;
  11.      else{
  12.          cout<<"Introduce el nuevo nombre "<<endl;
  13.          getline(cin,nuevo);
  14.          pa.set_nombre(nuevo);
  15.       //pa->set.nombre(nuevo);---el compilador se queda pillado
  16. }

Estás llamando a set_nombre() a un objeto creado solo en este método que no apunta a ninguno de los elementos del vector de Empleados. Lo que yo haría sería crear una referencia hacia el empleado que se está buscando y cambiarle el nombre :

Código
  1. void cambiar_nombre(){
  2.      string nom,nuevo;
  3.      int em;
  4.  
  5.      cout<<"Introduce el nombre del empleado a cambiar "<<endl;
  6.      getline(cin,nom);
  7.  
  8.      // Busca al empleado en el vector por el nombre
  9.      int indiceEmpleado;
  10.      for( indiceEmpleado = 0; indiceEmpleado < v.size(); indiceEmpleado++ ){
  11.            if( v[indiceEmpleado].get_nombre() == nom )
  12.                  break;
  13.      }
  14.  
  15.      // Si el indice encontrado es igual al tamaño del vector, el nombre no fue encontrado
  16.      if( indiceEmpleado == v.size() ){
  17.            cout<<"Nombre no valido "<<endl;
  18.      }
  19.      else{
  20.          // Creo la referencia al empleado encontrado para poder trabajar en ese elemento
  21.          Empleado & pa = v[indiceEmpleado];
  22.          cout<<"Introduce el nuevo nombre "<<endl;
  23.          getline(cin,nuevo);
  24.          pa.set_nombre(nuevo);
  25.      }
  26. }

De paso, echale una mirada a BuscarEmpleado() que tiene errores.

Saludos.
« Última modificación: 3 Junio 2010, 09:36 am por pizarron » En línea

juni85

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: Tengo un fallo en el siguiente ejercicio
« Respuesta #4 en: 8 Junio 2010, 08:19 am »

Gracias por la ayuda al final lo hice asi:
CAMBIAR NOMBRE
cout<<"Introduce el nombre del empleado a cambiar "<<endl;
      getline(cin,nom);
      em=BuscarEmpleado(nom);
      if(em==-1)cout<<"Nombre no valido "<<endl;
      else{
          cout<<"Introduce el nuevo nombre "<<endl;
          getline(cin,nuevo);
       
       while(i<u){
           if(v.nombre==nom){
            cout<<"encontrado"<<endl;
            v.set_nombre(nuevo);
               }
           i++;
          }
         }

BUSCAR EMPLEADO

bool borrar(string n){

         int i=0,u;

         u=v.size();
         bool noborrado=true;
         while(i<u && noborrado){
             if(v.nombre==n){
                 v=v[u-1];
                 v.pop_back();
                 noborrado=false;
             }
             i++;
         }
         return(!noborrado);
      }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda ejercicio de c (fallo al apilar)
Programación C/C++
baisa 1 3,787 Último mensaje 5 Abril 2011, 22:32 pm
por ssaammuu
JSP-tengo un fallo a la hora de crear el textfield
Desarrollo Web
juni85 0 2,636 Último mensaje 5 Junio 2011, 21:15 pm
por juni85
Tengo un problema con un ejercicio
Programación Visual Basic
Senior++ 5 2,790 Último mensaje 18 Junio 2011, 18:49 pm
por Senior++
Tengo un ejercicio al que no doy forma.Necesito un empujón
Programación C/C++
el gusanillo 5 3,881 Último mensaje 30 Julio 2019, 06:45 am
por el gusanillo
TENGO PROBLEMAS CON 'SWITCH' EN UN EJERCICIO
Programación C/C++
BARIS514 3 3,298 Último mensaje 5 Marzo 2020, 03:09 am
por BARIS514
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines