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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa NIF
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa NIF  (Leído 3,015 veces)
LGG

Desconectado Desconectado

Mensajes: 4



Ver Perfil
Programa NIF
« en: 2 Mayo 2015, 20:23 pm »

Este es el enunciado del ejercicio:

Crea una clase Nif que se usará para mantener DNIs con su correspondiente letra. Los atributos de la clase serán el número de DNI (entero largo) y la letra que le corresponde.
La clase dispondrá de los siguientes métodos:
- Inicializador que reciba el número de DNI y establezca automáticamente la letra que le corresponde.
- Accedentes y mutador para el número de DNI (ajustando automáticamente la letra).
- Leer() : que pida el número de DNI (ajustando automáticamente la letra).
- Método que nos permita mostrar el NIF (DNI, un guión y la letra en mayúsculas; por ejemplo: 395469-F).
La letra se calculará con un método auxiliar (privado) de la siguiente forma:
se obtiene el resto de la división entera del número de DNI entre 23 y
se usa la siguiente tabla para obtener la letra correspondiente:

Código:
0 - T 			12 - N
1 - R 13 - J
2 - W 14 - Z
3 - A 15 - S
4 - G 16 - Q
5 - M 17 - V
6 - Y 18 - H
7 - F 19 - L
8 - P 20 - C
9 - D 21 - K
10 - X 22 - E
11 - B



Me lo han pedido en forma de proyecto, como no puedo adjuntar archivos comprimidos (que yo sepa) os los copio aquí:



1r archivo.
Guardado como: "main.cpp"

Código
  1. #include <stdlib.h>
  2. #include <iostream>
  3. #include "Nif.h"
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9. Nif p
  10. ;
  11. char l, resp;
  12. long int d;
  13.  
  14. p.setDni(d);
  15. p.setLetra(l);
  16.  
  17. do{
  18.    p.Leer(d);
  19.  
  20.    p.Letra(d,l);
  21.  
  22.    p.show();
  23.  
  24.    cout<<endl;
  25.    cout<<"Quieres introducir otro numero? si<s> no<n>"<<endl;
  26.    cin>>resp;
  27. }while(resp=='s');
  28.  
  29. system("pause");
  30. return 0;
  31. }




2o archivo.
Guardado como: "Nif.h"


Código
  1. #ifndef NIF_H
  2. #define NIF_H
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class Nif
  8. {
  9. private:
  10.    long int dni;
  11.    char letra;
  12.  
  13. public:
  14.  
  15.   Nif(){dni=0; letra='nada';}
  16.   Nif(long int d, char l){dni=d; letra=l;}
  17.   ~Nif(){cout<<"Destructor invocado.\n";};
  18.  
  19.   void setDni(long int d){dni=d;}
  20.   void setLetra(char l){letra=l;}
  21.  
  22.   long int getDni()const {return dni;}
  23.   char getLetra()const {return letra;}
  24.  
  25.   void Leer(long int d);
  26.   void Letra(long int d, char l);
  27.   void show();
  28.  
  29. };
  30.  
  31. #endif





3r archivo.
Guardado como: "Nif.cpp"



Código
  1. #include "Nif.h"
  2.  
  3.  
  4. using namespace std;
  5.  
  6.  
  7. void Nif::Leer(long int dni){  
  8.   cout<<endl;
  9.   cout<<"Introduzca el numero del DNI(8 car):  "<<endl;
  10.   cin>>dni;
  11.  
  12. }
  13.  
  14. void Nif::Letra(long int dni, char letra){
  15. int resto;
  16. resto=dni%23;
  17. switch(resto){
  18.     case 0:
  19.     letra=='T';
  20.     break;
  21.     case 1:
  22.        letra=='R';
  23.     break;
  24.     case 2:
  25.        letra=='W';
  26.     break;
  27. case 3:
  28.        letra=='A';
  29.     break;
  30. case 4:
  31.        letra=='G';
  32.     break;
  33. case 5:
  34.        letra=='M';
  35.     break;
  36. case 6:
  37.        letra=='Y';
  38.     break;
  39. case 7:
  40.        letra=='F';
  41.     break;
  42. case 8:
  43.        letra=='P';
  44.     break;
  45. case 9:
  46.        letra=='D';
  47.     break;
  48. case 10:
  49.        letra=='X';
  50.     break;
  51. case 11:
  52.        letra=='B';
  53.     break;
  54. case 12:
  55.        letra=='N';
  56.     break;
  57. case 13:
  58.        letra=='J';
  59.     break;
  60. case 14:
  61.        letra=='Z';
  62.     break;
  63. case 15:
  64.        letra=='S';
  65.     break;
  66. case 16:
  67.        letra=='Q';
  68.     break;
  69. case 17:
  70.        letra=='V';
  71.     break;
  72. case 18:
  73.        letra=='H';
  74.     break;
  75. case 19:
  76.        letra=='L';
  77.     break;
  78. case 20:
  79.        letra=='C';
  80.     break;
  81. case 21:
  82.        letra=='K';
  83.     break;
  84. case 22:
  85.        letra=='E';
  86.     break;
  87.    }
  88. }
  89.  
  90. void Nif::show(){
  91. cout<<"-------------------------------------------"<<endl;
  92.    cout<<endl;
  93.    cout<<"La letra correspondiente a tu DNI es: <"<<getLetra()<<endl;
  94.    cout<<endl;
  95.    cout <<"El NIF es: " <<getDni()<<"-"<<getLetra()<<endl;
  96. cout<<endl;
  97.    cout<<"-------------------------------------------"<<endl;
  98.    cout<<endl;
  99. }





El programa me compila pero a la hora de escribir (en la función "show") no me sale el numero del dni ni la letra bien...no sé donde esta el problema! Podrían ayudarme por favor????


Gracias,



LGG

Mod: los códigos deben ir en etiquetas GeSHi


« Última modificación: 2 Mayo 2015, 20:56 pm por engel lex » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Programa NIF
« Respuesta #1 en: 2 Mayo 2015, 22:13 pm »

La función setLetra es absurda, ya que la letra ha de estar siempre acorde al DNI.

En el switch, pusiste "letra=='W'". Eso es el operador para comparar. El operador para asignar es "=".

No pongas el nombre del parámetro de esa función ("letra") igual al nombre del campo de la clase, "letra" también.


En línea

LGG

Desconectado Desconectado

Mensajes: 4



Ver Perfil
Re: Programa NIF
« Respuesta #2 en: 3 Mayo 2015, 01:02 am »

Ya he modificado todo lo que me has dicho.. y aun no me sale bien.

De momento el código me ha quedado así:


1r archivo
Guardado como: "main.cpp"

Código:
#include <stdlib.h>
#include <iostream>
#include "Nif.h"

using namespace std;

int main(){

    Nif p
    ;
    char l, resp;
    long int d;

    p.setDni(d);

do{
    p.Leer(d);
   
    p.letra_dni(d,l);

    p.show();
   
    cout<<endl;
    cout<<"Quieres introducir otro numero? si<s> no<n>"<<endl;
    cin>>resp;

}while(resp=='s');
   
system("pause");
return 0;
}

2o archivo
Guardado como: "Nif.h"

Código:
#ifndef NIF_H
#define NIF_H
#include <iostream>

using namespace std;

class Nif
{
private:
   long int dni;
   char letra;
   
public:
   
   Nif(){dni=0; letra='nada';}
   Nif(long int d, char l){dni=d; letra=l;}
   ~Nif(){cout<<"Destructor invocado.\n";};
   
   void setDni(long int d){dni=d;}
     
   long int getDni()const {return dni;}
   char getLetra()const {return letra;}
   
   void Leer(long int d);
   void letra_dni(long int d, char l);
   void show();

};

#endif

3r archivo
Guardado como: "Nif.cpp"

Código:
#include "Nif.h"


using namespace std;


void Nif::Leer(long int dni){ 
   cout<<endl;
   cout<<"Introduzca el numero del DNI(8 car):  "<<endl;
   cin>>dni;
   
}

void Nif::letra_dni(long int dni, char letra){
int resto;
resto=dni%23;
switch(resto){
    case 0:
        letra='T';
    break;
    case 1:
        letra='R';
    break;
    case 2:
        letra='W';
    break;
case 3:
        letra='A';
    break;
case 4:
        letra='G';
    break;
case 5:
        letra='M';
    break;
case 6:
        letra='Y';
    break;
case 7:
        letra='F';
    break;
case 8:
        letra='P';
    break;
case 9:
        letra='D';
    break;
case 10:
        letra='X';
    break;
case 11:
        letra='B';
    break;
case 12:
        letra='N';
    break;
case 13:
        letra='J';
    break;
case 14:
        letra='Z';
    break;
case 15:
        letra='S';
    break;
case 16:
        letra='Q';
    break;
case 17:
        letra='V';
    break;
case 18:
        letra='H';
    break;
case 19:
        letra='L';
    break;
case 20:
        letra='C';
    break;
case 21:
        letra='K';
    break;
case 22:
        letra='E';
    break;
    }
}

void Nif::show(){
    cout<<"-------------------------------------------"<<endl;
    cout<<endl;
    cout<<"La letra correspondiente a tu DNI es: <"<<getLetra()<<endl;
    cout<<endl;
    cout<<"El NIF es: " <<getDni()<<"-"<<getLetra()<<endl;
    cout<<endl;
    cout<<"-------------------------------------------"<<endl;
    cout<<endl;
}


Supongo que siguen habiendo cosas mal... como verás estoy empezando con la programación y hay cosas (básicas) que se me escapan aún... gracias por la ayuda, y a ver si pueden ayudarme a acabar este ejercicio, porqué me está dando guerra la verdad..


LGG
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Programa NIF
« Respuesta #3 en: 3 Mayo 2015, 13:32 pm »

Vamos a ver. No puede haber ningún método ni constructor al que le pases la letra. La letra se calcula sola siempre.
Luego, siempre que le pongas un nuevo DNI, tienes que volver a calcular la letra. Siempre.

Modifica los métodos para cumplir esas reglas, y vuelve a ver los errores.
En línea

LGG

Desconectado Desconectado

Mensajes: 4



Ver Perfil
Re: Programa NIF
« Respuesta #4 en: 3 Mayo 2015, 16:15 pm »

Muchas gracias, ya lo he arreglado y me ha salido bien!!!

He cambiado un par de cosas más, éste es el resultado del código:

Código:
#include <stdlib.h>
#include <iostream>
#include "Nif.h"

using namespace std;

int main(){

    Nif p
    ;
    char resp;

do{
   
    p.Leer();

    p.show();
   
    cout<<endl;
    cout<<"Quieres introducir otro numero? si<s> no<n>"<<endl;
    cin>>resp;
   
}while(resp=='s');
   
system("pause");
return 0;
}



Código:
#ifndef NIF_H
#define NIF_H
#include <iostream>

using namespace std;

class Nif
{
private:
    long int dni;
    char letra;
    void letra_dni();
   
public:
   
    Nif(){dni=0;}
    Nif(long int d){dni=d;letra_dni();}
    ~Nif(){cout<<"Destructor invocado.\n";};
   
    void setDni(long int d){dni=d;letra_dni();}
    long int getDni()const {return dni;}
   
    void Leer();
    void show();

};

#endif

Código:
#include "Nif.h"


using namespace std;


void Nif::Leer(){ 
   cout<<endl;
   cout<<"Introduzca el numero del DNI(8 car):  "<<endl;
   cin>>dni;
   
   letra_dni();
}

void Nif::letra_dni(){
int resto;
resto=dni%23;

switch(resto){
    case 0:
    letra='T';
    break;
    case 1:
        letra='R';
    break;
    case 2:
        letra='W';
    break;
case 3:
        letra='A';
    break;
       case 4:
        letra='G';
    break;
        case 5:
        letra='M';
    break;
        case 6:
        letra='Y';
    break;
case 7:
        letra='F';
    break;
case 8:
        letra='P';
    break;
case 9:
        letra='D';
    break;
case 10:
        letra='X';
    break;
case 11:
        letra='B';
    break;
case 12:
        letra='N';
    break;
case 13:
        letra='J';
    break;
case 14:
        letra='Z';
    break;
case 15:
        letra='S';
    break;
case 16:
        letra='Q';
    break;
case 17:
        letra='V';
    break;
case 18:
        letra='H';
    break;
case 19:
        letra='L';
    break;
case 20:
        letra='C';
    break;
case 21:
        letra='K';
    break;
case 22:
        letra='E';
    break;
    }
}

void Nif::show(){
    cout<<"-------------------------------------------"<<endl;
    cout<<endl;
    cout<<"La letra correspondiente a tu DNI es: "<<letra<<endl;
    cout<<endl;
    cout<<"El NIF es: " <<dni<<"-"<<letra<<endl;
    cout<<endl;
    cout<<"-------------------------------------------"<<endl;
    cout<<endl;
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines