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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Obtener valores decimales en un programa de distancia entre dos puntos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Obtener valores decimales en un programa de distancia entre dos puntos  (Leído 3,158 veces)
pinecore

Desconectado Desconectado

Mensajes: 4


Ver Perfil
[C] Obtener valores decimales en un programa de distancia entre dos puntos
« 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;
}


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
« Respuesta #1 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



En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
pinecore

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
« Respuesta #2 en: 10 Diciembre 2016, 06:31 am »

Ya lo intenté, y como resultado me da:
-784912405
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
« Respuesta #3 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

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

para digitos de coma flotante usas %f
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
pinecore

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
« Respuesta #4 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.
« Última modificación: 10 Diciembre 2016, 06:47 am por pinecore » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
« Respuesta #5 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

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. }
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
pinecore

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [C] Obtener valores decimales en un programa de distancia entre dos puntos
« Respuesta #6 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Obtener puntos acceso en java
Java
eagle17 3 3,316 Último mensaje 15 Octubre 2010, 19:10 pm
por Debci
Como obtener puntos de una CubicCurve2D?
Java
_teiki 0 1,651 Último mensaje 3 Abril 2011, 23:45 pm
por _teiki
Problema con puntos en decimales y miles « 1 2 3 4 5 »
PHP
Alarkon_88 40 14,235 Último mensaje 15 Septiembre 2016, 04:10 am
por Alarkon_88
el resultado de la división no me con puntos decimales
Programación C/C++
alexfajam 1 2,527 Último mensaje 6 Septiembre 2017, 22:29 pm
por ivancea96
Programa calculo de distancia y pendiente entre dos puntos
Programación C/C++
Davorso 0 2,224 Último mensaje 2 Octubre 2019, 19:52 pm
por Davorso
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines