Dev - C++ - Mi codigo compila pero float no funciona

 
Vista:

Mi codigo compila pero float no funciona

Publicado por Star640 (1 intervención) el 10/03/2019 02:46:30
Soy un principiante amateur y mis clases acaban de empezar, asi que mi codigo es muy basico, no me maten por favor.

El problema es que al momento de pedir el saldo de la cuenta me sale 3.05352e+033

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include<iostream>
using namespace std;
class Atm
{
    private:
        float S, Dpo, Rti, Pp, Ap, P, Peti;
        int N;
    public:
        float Saldo ()
        {
            cout<<"Tu saldo actual es de: "<<S<<"$";
        }
        float Deposito ()
        {
            cout<<"Introduzca el dinero a depositar: ";
            cin>>Dpo;
            S=S+Dpo;
            cout<<"Deposito exitoso, su saldo actual es de: "<<S<<"$";
        }
        float Retirar ()
        {
            cout<<"Introduzca la cantidad de dinero que desea retirar";
            cin>>Rti;
            S=S-Rti;
            cout<<"Retiro exitoso, su saldo actual es de: "<<S<<"$";
        }
        float Prestamo ()
        {
            cout<<"Introduzca la cantidad de dinero que desea pedir";
            cin>>Pp;
            S=S+Pp;
            cout<<"Prestamo exitoso, su saldo actual es de: "<<S<<"$. Tiene un adeudo de "<<Pp<<"$";
        }
        float Abonar ()
        {
         cout<<"Introduzca la cantidad de dinero que desea abonar";
         cin>>Ap;
         S=S-Ap;
         Pp=Pp-Ap;
         cout<<"Prestamo exitoso, su saldo actual es de: "<<S<<"$. Tiene un adeudo de "<<Pp<<"$";
        }
        float Saldopr ()
        {
            cout<<"Tu adeudo actual es de: "<<Pp<<"$";
        }
};
main ()
{
    float S;
    int N;
    S=5000;
    Atm C;
    x:
    cout<<"           ¡Hola usuario!"<<endl<<endl<<endl;
    cout<<"   1.- Saldo"<<endl<<"   2.- Realizar deposito"<<endl<<"   3.- Retirar efectivo"<<endl<<"   4.- Pedir prestamo"<<endl<<"   5.- Abonar a prestamo"<<endl<<"   6.- Saldo del prestamo"<<endl<<"   7.- Cerrar";
    cout<<endl<<endl<<"     ¿Que deseas hacer?"<<endl<<"     ";
    cin>>N;
    switch (N)
    {
        case 1:
            C. Saldo ();
            system ("pause>a");
            system ("cls");
            goto x;
            break;
        case 2:
            C. Deposito ();
            system ("pause>a");
            system ("cls");
            goto x;
            break;
        case 3:
            C. Retirar ();
            system ("pause>a");
            system ("cls");
            goto x;
            break;
        case 4:
            C. Prestamo ();
            system ("pause>a");
            system ("cls");
            goto x;
            break;
        case 5:
            C. Abonar ();
            system ("pause>a");
            system ("cls");
            goto x;
            break;
        case 6:
            C. Saldopr ();
            system ("pause>a");
            system ("cls");
            goto x;
            break;
        case 7:
            cout<<"Gracias por usar este programa"<<endl;
            system ("pause>a");
            return 0;
        default:
            cout<<"Opcion no valida, regresando al menu";
            system ("pause>a");
            system ("cls");
            goto x;
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Mi codigo compila pero float no funciona

Publicado por Alfil (1444 intervenciones) el 10/03/2019 08:20:37
En una clase debes tratar de separar lo que es la declaración de funciones y miembros de su definición, además la clase debe llevar un constructor de clase que garantice la consistencia de los datos en el momento de crearse el objeto.
Un constructor de clase tiene el mismo nombre que la clase Atm(); y su función es inicializar los datos miembro de la clase.

Otro tema importante es tratar de mantener la abstracción de la clase para que pueda ser reutilizada en el futuro, así como la claridad y buena elección de nombres de variables que indiquen el valor que representan.

La instrucción goto se considera mala practica y se debe evitar en todo momento.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
 
using namespace std;
 
class Atm
{
private:
    float S, Dpo, Rti, Pp, Ap, P, Peti;
public:
    Atm();
    float Saldo();
    void Deposito();
    void Retirar();
    float Prestamo();
    float Abonar();
    float Saldopr();
};
 
Atm::Atm()
{
    Dpo = Rti = Pp = Ap = P = Peti = 0.0f;
    S = 5000.0f;
}
 
float Atm::Saldo()
{
    return S;
}
 
void Atm::Deposito ()
{
    cin >> Dpo;
    S = S + Dpo;
}
 
void Atm::Retirar ()
{
    cin >> Rti;
    S = S - Rti;
}
 
float Atm::Prestamo ()
{
    cin >> Pp;
    S = S + Pp;
 
    return Pp;
}
 
float Atm::Abonar ()
{
    cin >> Ap;
    S = S - Ap;
    Pp = Pp - Ap;
 
    return Pp;
}
 
float Atm::Saldopr ()
{
    return Pp;
}
 
int main ()
{
    int N;
    Atm C;
    do{
        cout << " ¡Hola usuario!\n" << endl;
        cout << " 1.- Saldo\n"
             << " 2.- Realizar deposito\n"
             << " 3.- Retirar efectivo\n"
             << " 4.- Pedir prestamo\n"
             << " 5.- Abonar a prestamo\n"
             << " 6.- Saldo del prestamo\n"
             << " 7.- Cerrar\n\n"
             << " ¿Que deseas hacer?: ";
        cin >> N;
        cout << endl;
 
        switch( N )
        {
            case 1:
                cout << "Tu saldo actual es de: " << C.Saldo() << "$";
                system("pause>a");
                system ("cls");
                break;
            case 2:
                cout << "Introduzca el dinero a depositar: ";
                C.Deposito ();
                cout << "Deposito exitoso, su saldo actual es de: "<< C.Saldo() << "$";
                system ("pause>a");
                system ("cls");
                break;
            case 3:
                cout << "Introduzca la cantidad de dinero que desea retirar";
                C.Retirar ();
                cout << "Retiro exitoso, su saldo actual es de: " << C.Saldo() << "$";
                system ("pause>a");
                system ("cls");
                break;
            case 4:
                cout << "Introduzca la cantidad de dinero que desea pedir";
                cout << "Prestamo exitoso, Tiene un adeudo de " << C.Prestamo() << "$";
                cout << " y su saldo actual es de: " << C.Saldo() << "$.";
                system ("pause>a");
                system ("cls");
                break;
            case 5:
                cout << "Introduzca la cantidad de dinero que desea abonar";
                cout << "Abono exitoso, Tiene un adeudo de " << C.Abonar () << "$";
                cout << " y su saldo actual es de: " << C.Saldo() << "$.";
                system ("pause>a");
                system ("cls");
                break;
            case 6:
                cout << "Tu adeudo actual es de: " << C.Saldopr() << "$";
                system ("pause>a");
                system ("cls");
                break;
            case 7:
                cout << "Gracias por usar este programa" << endl;
                system ("pause>a");
                break;
            default:
                cout << "Opcion no valida, regresando al menu";
                system ("pause>a");
                system ("cls");
                break;
        }
    } while( N != 7 );
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mi codigo compila pero float no funciona

Publicado por Nacho (181 intervenciones) el 10/03/2019 08:36:50
No te matamos de momento.

Defines 2 veces la variable S. Le pones un valor en la función main() pero la que usas es la que está en la clase ATM, que tiene un valor aleatorio asignado al cargar el programa. Pásale el valor de S del main() a la S de C. Como S en ATM es privada pásaselo con la función Saldo() como Saldo(float saldo).

Si defines una función como float Algo() tienes que devolver algo con el return. Si no devuelves nada, aunque el compilador compile, puede no funcionar el programa.

El goto existe y a veces es lo mejor para usar, pero no es tu caso.

Ya vale de momento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Mi codigo compila pero float no funciona

Publicado por Alfil (1444 intervenciones) el 10/03/2019 18:24:45
Una pequeña aclaración sobre las clases

Supongamos la siguiente declaración de clase:

1
2
3
4
5
6
7
8
9
10
class Ejemplo{
public:
    Ejemplo( int ii = 0 ) :i(ii) {}
    void establecer( int ii ) { ii < 10 ? i = 10 : i = ii; }
    const int obtener() const { return i; }
 
    void func1();
private:
    int i;
};

El constructor Ejemplo y las funciones establecer y obtener al estar declaradas e implementadas en el interior de la clase actúan como una función inline, es decir, indican al compilador que cada llamada a la función inline deberá ser reemplazado por el cuerpo de esta función (equivalente a las macros en C). En la practica la función inline es utilizado solo cuando las funciones son pequeñas para evitar generar un ejecutable de tamaño considerable, tiene la ventaja de acelerar un programa si éste invoca regularmente a la función inline y permite resumir considerablemente el código, en particular para los accesadores de una clase.

La función func1() actúa como una función normal, es colocada en la pila y se ejecuta la llamada a la función CALL del ensamblador el cual ejecuta la función.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar