Autor
|
Tema: [C] Obtener valores decimales en un programa de distancia entre dos puntos (Leído 3,158 veces)
|
pinecore
Desconectado
Mensajes: 4
|
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. /** 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
|
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
Mensajes: 4
|
Ya lo intenté, y como resultado me da: -784912405
|
|
|
En línea
|
|
|
|
engel lex
|
2 cosas... -primero tienes un error en tu formula sqrt((1.0 + pow(difx,2)) + (1.0 + pow(dify,2))); y debe ser (pitagoras) -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
Mensajes: 4
|
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
|
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=009basicamente 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 #include<stdio.h> int main() { float a = 3/4; return 0; }
|
|
|
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
Mensajes: 4
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Obtener puntos acceso en java
Java
|
eagle17
|
3
|
3,316
|
15 Octubre 2010, 19:10 pm
por Debci
|
|
|
Como obtener puntos de una CubicCurve2D?
Java
|
_teiki
|
0
|
1,651
|
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
|
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
|
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
|
2 Octubre 2019, 19:52 pm
por Davorso
|
|