Dev - C++ - Ayuda xfis apenas empiezo a programar y no se kitar un redondeo de una operación... hago algo mallll

 
Vista:

Ayuda xfis apenas empiezo a programar y no se kitar un redondeo de una operación... hago algo mallll

Publicado por Jimmy´s (1 intervención) el 23/04/2012 22:42:30
No es para Escuela u otra cosa (no estudio actualmente).... solamente es ke la semana pasada vi un vídeo en el you tube y pues me entro el gusanito por la programación y todo iba bien hasta que me encontré con mi primer problema... ya que al correrlo me da una cifra redondeada :( y no se ke hacer..... les dejo mi código para que le echen un vistazo, desde ahorita les pido una disculpa por la forma en que lo redacto puesto, como ya les dije son un chico mexicano que no conoce mucho sobre el tema y ademas no tengo nadie cercano que me pueda ayudar.... Es por eso que les pido de favor si alguien me puede ayudar con esto, darme sugerencias o sugerirme algún tutorial en verdad no saben como me harían feliz, ya que pienso que si me corrigen, más aprendo y esto del C la verdad es mejor que un Age of Empires o una peli de la señorita Esperanza Gomez. Invoco a los grandes Senseis....... ¬_¬ jejeje


// Programa que obtiene la Fuerza Gravitacional de 2 cuerpos

#include<iostream>
#include<stdio.h>
#define p printf
#define s scanf
#define pause system("pause");
int main()
{
double m1,m2,d,f;
double g=0.0000000000673;
p("\n\n\tHola yo solo sirv%c para obtener la Fuerza Gravitacional de 2 cuerpos\n\n\t",162);
p("\n\tPara obtenerla utilizo la siguiente f%crmula F=((m1*m2)/d^2)G\n\n\t\t\t\t\t",162);

pause
p("\n\n\tDonde: F=(G*m1*m2)/d^2\n\n\t");
p("\n\n\t F= Es la Fuerza Gravitacional que deseamos obtener\n\n");
p("\n\n\t G= 6.673x10^-11 (Nm^2/Kg^2) (Es la constante de Gravitaci%cn Universal)\n\n\t",162);
p("\n\n\t m1= Masa del 1er cuerpo esta tiene que estar en Kg\n\n");
p("\n\n\t m2= Masa del 2do cuerpo esta tambi%cn tiene que estar en Kg\n\n",130);
p("\n\n\t d^2= Es la Distancia que existe entre ellos y esta se eleva al cuadrado\n\n\t\t\t");
pause
p("\n\n\t Ahora ingresemos los datos para obtener la Fuerza Gravitacional\n\n\t");
p("\n\n\n\t\t\t F=((m1*m2)/d^2)G\n\n\t");
p("\n\n\n\t\t\t m1=");
s("%lf",&m1);
p("\n\n\n\t\t\t m2=");
s("%lf",&m2);
p("\n\n\n\t\t\t d=");
s("%lf",&d);
f=((m1*m2)/(d*d))*g;
p("\n\n\n\t\t La Fuerza Gravitacional es:%lf\n\n\t\t\t",f);
pause


return 0;
}
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

Ayuda xfis apenas empiezo a programar y no se kitar un redondeo de una operación... hago algo mallll

Publicado por Capitan Kirk (48 intervenciones) el 21/05/2012 09:56:34
Un poco tarde, hace algún tiempo que no ando por esta web, pero ahí va:

1. El especificador de formato %lf es necesario al leer datos de tipo double, pero es irrelevante al imprimirlos con printf.

2. No conviene redefinir mediante macros los nombres de funciones. Puede que te ahorre algo de escritura en principio, pero dificulta que otros puedan leer tu programa y puedes encontrarte con un cacao monumental, sobre todo si el programa se alarga (en este caso, por ejemplo, ya no podrías utilizar variables con los nombres p, s y f).

3. Con printf puedes utilizar especificadores de precisión y tipo de salida. Por ejemplo:

Sea x = 0.1
printf("%f", x) imprimirá x en coma fija con 6 cifras decimales. -> 0.100000
printf("%e", x) imprimirá x en formato exponencial con 6 cifras decimales -> 1.000000e-01
printf("%8.5f", x) imprimirá x en coma fija con 8 caracteres en total y 5 cifras decimales (en el número de caracteres se incluyen el punto decimal y el signo) -> _0.10000
printf("%12.5e", x) imprimirá x en formato exponencial con 12 caracteres y 5 cifras decimales (se incluyen el punto decimal. el signo, la letra 'e' , el signo del exponente y el propio exponente) -> _1.00000e-01
En estos dos últimos casos, si el formato no fuese suficiente para mostrar el número, pasará del formato. Así, si x=10000, en el primer caso simplemente mostrará _10000.00000 (te respetará el número de cifras decimales, no el resto).
Los guiones bajos indican espacios en blanco. Normalmente, el signo solamente lo imprime cuando es negativo, cuando es positivo pone un espacio en blanco. Si quieres forzar a que el signo aparezca siempre, pon un signo (+) inmediatamente después de '%':
printf("%+8.5f", x) -> +0.10000

El formato "%g" hará que se utilice el que resulte más corto de imprimir entre el de coma fija y el exponencial.

En cuanto al redondeo, siempre te mostrará las cantidades redondeadas al último dígito que te muestre. Este redondeo es en cuanto a presentación, no afecta a la variable en sí. Ahora bien, en el caso de valores de tipo float tienes una precisión de 7-8 dígitos, y de 15-16 dígitos en el caso de tipo double. Lógicamente, siempre tendrás redondeo en el último dígito, tanto en presentación si quieres mostrar todos los decimales, como en la propia variable. Si pides mostrar más decimales, simplemente te mostrará ceros a partir de la cifra 16. Haz las mismas operaciones con tipos float y double y imprime los resultados con 16 cifras decimales, verás que hay diferencias.
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