Dev - C++ - Duda Básica

   
Vista:

Duda Básica

Publicado por Pamafly (3 intervenciones) el 24/12/2015 12:57:02
Hola, tengo que hacer este ejercicio básico de C++:

No entiendo por qué tras darme los valores de A, B y C (correctos), me imprime un número sin sentido(32767).
Además, en la función de calcular la pendiente de la recta, sólo me ejecuta correctamente en el primer caso(pendiente = -1), en los siguientes no.

¿Dónde está el fallo?

Gracias.


Captura-de-pantalla-2015-12-24-a-las-12.37.27
Captura-de-pantalla-2015-12-24-a-las-12.37.36
Captura-de-pantalla-2015-12-24-a-las-12.37.42
Captura-de-pantalla-2015-12-24-a-las-12.37.47
Captura-de-pantalla-2015-12-24-a-las-12.37.57
Captura-de-pantalla-2015-12-24-a-las-12.43.31
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 Jordi

Duda Básica

Publicado por Jordi (9 intervenciones) el 24/12/2015 14:54:55
Hola Pamafly,

No estás declarando bien las variables. Las tienes que declarar de la siguiente forma:

1
2
3
4
Recta x = new Recta();
Recta y = new Recta(2, 3);
Recta z = new Recta(3, 4, 5);
Recta t = new Recta(z);
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

Duda Básica

Publicado por Pamaly (3 intervenciones) el 24/12/2015 15:46:26
Hola Jordi, gracias por tu comentario, pero esa declaración de las variables no sería sólo en caso de utilizar punteros?

Si lo declaro así, me da un error: "no viable conversion from Recta* to Recta".
Gracias.
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

Duda Básica

Publicado por Thanatos (73 intervenciones) el 25/12/2015 03:02:08
La función comprobacion() la tienes declarada para devolver un entero, como sólo muestra los valores de A, B y C, sería mejor declararla como void. Además la función imprime los valores por sí misma, así que no es necesario que utilices cout para usarla dentro de la función main.

Sobre el resultado de la función pendiente(), por ejemplo, para la recta:
1
Recta z(3, 4, 5);

Se realiza la operación: -3 / 4. Lo que debería dar como resultado -0.75. Pero al tratarse de una división entre enteros, se pierde la parte decimal, entonces el resultado de la operación termina siendo sólo cero. Luego ese cero, se le pasa a la variable pend, y ésta es devuelta por la función. Se puede obtener el resultado que buscas haciendo un casting a cualquiera de los operandos de la división o ambos como hice en este código:

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
#include <iostream>
 
class Recta {
    public:
        Recta();
        Recta(int, int);
        Recta(int, int, int);
        Recta(const Recta &);
        int getA() const;
        int getB() const;
        int getC() const;
        void setA(int);
        void setB(int);
        void setC(int);
        float pendiente() const;
        bool esPtePositiva() const;
        bool mayorPte(const Recta &) const;
        void comprobar() const;
    private:
        int A;
        int B;
        int C;
};
 
// constructores
Recta::Recta() : Recta(1, 1, 0) {}
Recta::Recta(int a, int b) : Recta(a, b, 0) {}
Recta::Recta(int a, int b, int c) : A(a), B(b), C(c) {} // constructor principal
Recta::Recta(const Recta & obj) : Recta(obj.A, obj.B, obj.C) {}
 
// getters
int Recta::getA() const { return A; }
int Recta::getB() const { return B; }
int Recta::getC() const { return C; }
 
// setters
void Recta::setA(int a) { A = a; }
void Recta::setB(int b) { B = b; }
void Recta::setC(int c) { C = c; }
 
// funciones
float Recta::pendiente() const {
    return (float)-A / (float)B;
}
 
bool Recta::esPtePositiva() const {
    return (pendiente() > 0) ? true : false;
}
 
bool Recta::mayorPte(const Recta & obj) const {
    return (pendiente() > obj.pendiente()) ? true : false;
}
 
void Recta::comprobar() const {
    std::cout << "A = " << A << "\tB = " << B << "\tC = " << C << std::endl;
}
 
int main() {
 
    return 0;
}

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Duda Básica

Publicado por Pelayo (3 intervenciones) el 29/12/2015 13:31:13
Muchas gracias Thanatos.
Un saludo!
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