Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pinecore en 10 Diciembre 2016, 06:14 am



Título: [C] Obtener valores decimales en un programa de distancia entre dos puntos
Publicado por: pinecore en 10 Diciembre 2016, 06:14 am
Un saludo a quien lea esto.

Soy principiante en "C" y escribí un intento de programa para obtener la distancia entre dos puntos de un plano cartesiano a manera de ejercicio.
El programa funciona perfectamente, excepto por un detalle: Me gustaría poder obtener las distancias en decimales y no sólo en enteros.
No sé que hacer, estuve experimentando pero no tuve éxito. Espero que me puedan ayudar.

Estoy en Windows y utilizo el compilador GNU CC compiler (creo, eso dice mi IDE).

Muchas gracias.
Código:
/** Programa para encontrar la distancia entre dos puntos **/

#include<stdio.h>
#include<math.h>

main() {
    //Primer punto
    int x1 = 0; //P1(x1,0)
    int y1 = 0; //P1(0,y1)

    //Segundo punto
    int x2 = 0; //P2(x2,0)
    int y2 = 0; //P2(0,y2)

    //Diferencias de X e Y.
    int difx;
    int dify;

    //Resultado
    int distancia;


    //Obtención de los valores para el primer punto.
    //x1
    printf("Introduce el valor \"X\" del primer punto:\n");
    scanf("%d", &x1); //Valor de equis en el primer punto.
    //y1
    printf("Introduce el valor \"Y\" del primer punto:\n");
    scanf("%d", &y1); //Valor de ye en el primer punto.

    //Obtención de los valores para el segundo punto.
    //x2
    printf("Introduce el valor \"X\" del segundo punto:\n");
    scanf("%d", &x2); //Valor de equis en el primer punto.
    //y2
    printf("Introduce el valor \"Y\" del segundo punto:\n");
    scanf("%d", &y2);

    if(x1 > x2){
        difx = x1 - x2;
    }else{
        difx = x2 - x1;
    }
    /**Función para obtener la diferencia de X, identificando quien es el mayor.**/

    if(y1 > y2){
        dify = y1 - y2; //Si Y1 es mayor, entonces se le resta y2 para evitar negativos.
    }else{
        dify = y2 - y1;
    }
    /**Función para obtener la diferencia de Y, identificando quien es el mayor.**/

    distancia = sqrt((1.0 + pow(difx,2)) + (1.0 + pow(dify,2)));
    printf("%d", distancia);
return 0;
}


Título: Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
Publicado por: engel lex en 10 Diciembre 2016, 06:27 am
Código:
int distancia

mientras que distancia sea de tipo int (entero) solo dará resultados enteros... necesitas que sea tipo float o double (según tus necesidades)

aquí mucho de lo que necesitas saber sobre las unidades de coma flotante (decimales)

https://es.wikipedia.org/wiki/Coma_flotante (https://es.wikipedia.org/wiki/Coma_flotante)



Título: Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
Publicado por: pinecore en 10 Diciembre 2016, 06:31 am
Ya lo intenté, y como resultado me da:
-784912405


Título: Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
Publicado por: engel lex en 10 Diciembre 2016, 06:39 am
2 cosas...

-primero tienes un error en tu formula

Código:
sqrt((1.0 + pow(difx,2)) + (1.0 + pow(dify,2)));

\sqrt{(1+x^{2})+(1+y^{2})}

y debe ser (pitagoras)

\sqrt{x^{2}+y^{2}}

-segundo cuidado con el uso de printf...

https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm (https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm)

%d es para digitos enteros en formato decimal (igual que %i)

para digitos de coma flotante usas %f


Título: Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
Publicado por: pinecore en 10 Diciembre 2016, 06:44 am
La fórmula está bien, tuve que usar los +1 porque el resultado del pow() me daba siempre, por ejemplo: si era 25, me daba 24, con el +1 arreglé eso.

Pero creo que debe de ser lo del printf, lo intentaré. Muchísimas gracias por darle seguimiento.

Edición:
Ya lo probé, era el printf, ya está todo perfecto.

Muchas gracias por la ayuda.


Título: Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
Publicado por: engel lex en 10 Diciembre 2016, 07:00 am
excelente! igual lee los links para evitar dudas más adelante... y algo que te puede causar dolor de cabeza más adelante si no sabes es la promoción de tipos así que aprovecho para dejartelo de estudio...

lee la primera parte de este articulo "conversión de tipos"
http://c.conclase.net/curso/?cap=009 (http://c.conclase.net/curso/?cap=009)

basicamente es el porqué esto da un resultado "incorrecto"... si te da 0 está bien... es debido a lo hablado en el articulo int/int = int

Código
  1. #include<stdio.h>
  2.  
  3. int main() {
  4.    float a = 3/4;
  5.    printf("%f", a);
  6. return 0;
  7. }


Título: Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
Publicado por: pinecore en 10 Diciembre 2016, 08:32 am
Muchas gracias por resolver mi problema y también por darme todos esos links, los voy a revisar todos.

Gracias por tu tiempo y la molestia.