• Lunes 23 de Diciembre de 2024, 09:33

Autor Tema:  Programa Sencillo En C  (Leído 4255 veces)

ahi

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Programa Sencillo En C
« en: Lunes 25 de Febrero de 2008, 23:11 »
0
Hola, estoy creando un programa sencillo en C para averiguar la fórmula de las ecuaciones de segundo grado completas que sería la siguiente: (-b + sqrt(b*b - 4*a*c))/(2*a)

El código que estoy escribiendo es el siguiente:

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

int main(void)
{
   int a;
   int b;
   int c;
   
   double r;
   
   printf("Introduzca el valor de a: ");
   fflush(stdout);
   scanf("%d", &a);
   
   printf("Introduzca el valor de b: ");
   fflush(stdout);
   scanf("%d", &b);
   
   printf("Introduzca el valor de c: ");
   fflush(stdout);
   scanf("%d", &c);
   
   r = (-b + sqrt(b*b - 4*a*c))/(2*a);
   printf("%f\n", r);
   
   return 0;
}

Sólo estudio C por diversión y tengo el siguiente problema: He definido 3 variables int y una double, por lo tanto el resultado se convertirá en un double, pero en main he incluído una función int, entonces el resultado se convertirá en un número entero, ¿no es así?

Lo que quiero es que el resultado sea lo más preciso posible, por lo tanto, me conviene que el resultado tenga decimales, requisito que no se cumple con int, necesitaré que el resultado sea expresado en double. ¿Alguien sabe como hacerlo?

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Programa Sencillo En C
« Respuesta #1 en: Lunes 25 de Febrero de 2008, 23:31 »
0
No, el int del main está indicando que la función main va a devolver un numero entero. Generalmente 0 para indicar que el programa ha finalizado correctamente, bueno, eso tengo entendido. Lo que si puedo decirte es que ese int no tiene nada que ver con la variable r que es de tipo double.
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Programa Sencillo En C
« Respuesta #2 en: Lunes 25 de Febrero de 2008, 23:53 »
0
Cita de: "Mollense"
No, el int del main está indicando que la función main va a devolver un numero entero. Generalmente 0 para indicar que el programa ha finalizado correctamente, bueno, eso tengo entendido. Lo que si puedo decirte es que ese int no tiene nada que ver con la variable r que es de tipo double.
Acá te encontré algo:
§4  Valor devuelto por main
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

ahi

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #3 en: Martes 26 de Febrero de 2008, 16:24 »
0
Bueno, lo de que el int en main devuelve una variable entera, ya lo sabía, pero quiero saber qué debo poner en main para que devuelva una variable de doble precisión (con decimales)

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #4 en: Martes 26 de Febrero de 2008, 17:28 »
0
Cita de: "ahi"
Bueno, lo de que el int en main devuelve una variable entera, ya lo sabía, pero quiero saber qué debo poner en main para que devuelva una variable de doble precisión (con decimales)
Es que eso no se puede (o mas bien no se debe) hacer, porque el valor de regreso de main se utiliza para el manejo de errores por parte del sistema operativo, asi que no, no se puede.

Lo que podrias hacer, es otra funcion (diferente a main) y esa si puedes hacer que te devuelva lo que quieras.

Ejemplo:
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. float suma(float a, float b)
  5. {
  6.     // En el return debes poner el valor que quieras que regrese, puedes
  7.     // ponerlo directo como en mi ejemplo, o utilizar una variable temporal
  8.     // para el resultado
  9.     return a + b;
  10. }
  11.  
  12. int main()
  13. {
  14.     float x = 10;
  15.     float y = 20;
  16.     printf(&#34;La suma de %.2f mas %.2f es %.2f&#34;, x, y, suma(x, y));
  17.  
  18.     return 0;
  19. }
  20.  
  21.  

Saludos :hola:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

ahi

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #5 en: Martes 26 de Febrero de 2008, 22:34 »
0
ProfesorX, no me he enterado de nada  :blink:  (soy autodidacta en C y aún me queda mucho por aprender), he leído tu código y me he quedado en las mismas, si me pudieras aclarar mejor cómo puedo hacer que el programa me devuelva un resultado con decimales te lo agradecería.

fORU-

  • Miembro MUY activo
  • ***
  • Mensajes: 225
  • Nacionalidad: mo
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #6 en: Miércoles 27 de Febrero de 2008, 04:48 »
0
mmm, compa;ero si ocupa resultados precisos use variables del tipo float
con float puede introducir: .001 , 1.00, 2 , 5, 3.5555,etc.
y a la hora de imprimir el resulato puedes imprimir cuantas decimales quieras
ejemplo:

printf("%.3f",<variable tipo float>); // esto te imprimer una variable tipo float con 3 decimales
atte:fORU-

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #7 en: Miércoles 27 de Febrero de 2008, 09:26 »
0
Hola,
Código: Text
  1. #include &#60;stdio.h&#62;
  2. #include &#60;math.h&#62;
  3.  
  4. int main(void)
  5. {
  6. double a,b,c,r;
  7.  
  8. fflush(stdin);
  9. printf(&#34;Introduzca el valor de a: &#34;);
  10. scanf(&#34;%lf&#34;, &a);
  11.  
  12. fflush(stdin);
  13. printf(&#34;Introduzca el valor de b: &#34;);
  14. scanf(&#34;%lf&#34;, &b);
  15.  
  16. fflush(stdin);
  17. printf(&#34;Introduzca el valor de c: &#34;);
  18. scanf(&#34;%lf&#34;, &c);
  19.  
  20. r = (-b + sqrt(b*b - 4*a*c))/(2*a);
  21. printf(&#34;Resultado: %lf&#092;n&#34;, r);
  22.  
  23. return 0;
  24. }
  25.  
y por el momento olvídate de lo que devuelve la función main... los parámetros de entrada y salida de la función main se usan para su uso mediante el prompt del sistema en el viejo MS-DOS, de hecho, el verdadero prototipo de la función main debiera ser:
Código: Text
  1.  
  2. int main(int argc, char *argv)
  3.  
  4.  
donde argc te da el número de parámetros recibidos desde la interfaz de comandos (+ uno debido a que el primer parámetro siempre es la ruta de tu programa) y el segundo parámetro es una serie de apuntadores a una serie de textos recibidos desde la interfaz... Este mecanismo lo puedes comprobar con el programa ipconfig de tu ordenador, si llamas al programa sin pasarle parámetros te devuelve la info básica de tu IP, si en cambio, le pasas /all verás que te da info más detallada.
Sobre el int que devuelve el programa, se usa para usar multiproceso, esto es, cuando desde un programa llamas a otro mediante una función (p.ej. CreateProcess()) cuando la función que has llamado finalice su ejecución, te devolverá el valor que hayas puesto, de esta manera sabes si la función que has llamado ha finalizado correctamente o no... Imagina que tu función devuelve un -1 en caso de que lo de dentro de la raíz cuadrada sea negativo, si llamaras a este programa desde otro programa sabrías que en caso de recibir un 0 al término de la ejecución, funcionó perfectamente y si recibes un -1 es que el programa no finalizó correctamente.

Por este motivo, al principio todo el mundo programa con el siguiente prototipo:
Código: Text
  1.  
  2. void main()
  3.  
  4.  
y así te olvidas de momento de estas posibilidades...

Un saludo.
 :lightsabre:
No hay tonto más molesto que el ingenioso.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #8 en: Miércoles 27 de Febrero de 2008, 18:37 »
0
Cita de: "ahi"
ProfesorX, no me he enterado de nada  :blink:  (soy autodidacta en C

Yo tambien soy autodidacta en C/C++ (y ahora en C#/.NET), nunca me enseñaron en la escuela, yo aprendi Pascal :P, asi que no es pretexto para no aprender, solo esfuerzate un poco mas

Citar
cómo puedo hacer que el programa me devuelva un resultado con decimales

Te dije que NO ES POSIBLE hacer que la funcion main devuelva un decimal, pero puedes definir funciones que te devuelvan lo que quieras.

si quieres que una funcion te devuelva un float:

float suma()

si quieres que te devuelva un double

double suma()

si quieres que te devuelva un char

char cadena()

y asi sucesivamente.

Ahora, si lo que quieres es IMPRIMIR decimales de variables float/double, debes usar  la cadena de formato del printf

%d = imprime numeros enteros
%f = imprime numeros float/double
%.nf = imprime numeros float double con el numero n de decimales.
%s = imprime cadenas
%c = imprime caracteres

Código: Text
  1.  
  2. // Imprime los numeros con dos decimales(%.2f). Si quieres que los imprima con 4 decimales debes escribir %.4f.
  3. printf(&#34;La suma de %.2f mas %.2f es %.2f&#34;, x, y, suma(x, y));
  4.  
  5.  

Si quieres mas detalles, te recomiendo que compres un buen libro de C/C++. Todo eso y mas lo encontraras ahi ;)

Espero que ahora si te haya quedado aclarado

Saludos :hola:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

ahi

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #9 en: Miércoles 27 de Febrero de 2008, 19:36 »
0
Hola, gracias a todos, el programa ha funcionado tanto con el ejemplo de camamezo como con la manita que me hechó F0RU-, con respecto a ProfesorX he creado un programa a partir de su ejemplo, y compila, pero no funciona.

Con respecto a lo de Camamerzo que me habla de MS-DOS y de Ipconfig /all, yo no uso Windows, sino Debian Linux y compilo con Gcc, pero le entendí igualmente.

Al final he quedado con tres códigos fuente, los pego:

El que he creado a partir de la ayuda de F0RU- (funciona)

Código: Text
  1. #include &#60;stdio.h&#62;
  2. #include &#60;math.h&#62;
  3.  
  4. int main(void)
  5. {
  6.    int a;
  7.    int b;
  8.    int c;
  9.    
  10.    double r;
  11.    
  12.    printf(&#34;Introduzca el valor de a: &#34;);
  13.    fflush(stdout);
  14.    scanf(&#34;%d&#34;, &a);
  15.    
  16.    printf(&#34;Introduzca el valor de b: &#34;);
  17.    fflush(stdout);
  18.    scanf(&#34;%d&#34;, &b);
  19.    
  20.    printf(&#34;Introduzca el valor de c: &#34;);
  21.    fflush(stdout);
  22.    scanf(&#34;%d&#34;, &c);
  23.    
  24.    r = (-b - sqrt(b*b - 4*a*c))/(2*a);
  25.    printf(&#34;%.4f&#092;n&#34;, r);
  26.    
  27.    return 0;
  28. }
  29.  
  30.  

El código fuente de Camamezo

Código: Text
  1. #include &#60;stdio.h&#62;
  2. #include &#60;math.h&#62;
  3.  
  4. int main(void)
  5. {
  6. double a,b,c,r;
  7.  
  8. fflush(stdin);
  9. printf(&#34;Introduzca el valor de a: &#34;);
  10. scanf(&#34;%lf&#34;, &a);
  11.  
  12. fflush(stdin);
  13. printf(&#34;Introduzca el valor de b: &#34;);
  14. scanf(&#34;%lf&#34;, &b);
  15.  
  16. fflush(stdin);
  17. printf(&#34;Introduzca el valor de c: &#34;);
  18. scanf(&#34;%lf&#34;, &c);
  19.  
  20. r = (-b + sqrt(b*b - 4*a*c))/(2*a);
  21. printf(&#34;Resultado: %lf&#092;n&#34;, r);
  22.  
  23. return 0;
  24. }
  25.  

El que he creado a partir del ejemplo de ProfesorX (no funciona, pero compila)

Código: Text
  1. #include &#60;stdio.h&#62;
  2. #include &#60;math.h&#62;
  3.  
  4. float compuesto(float a, float b, float c)
  5. {
  6.  
  7. return (-b - sqrt(b*b - 4*a*c))/(2*a);
  8.  
  9. }
  10.  
  11. int main()
  12. {
  13.  
  14. float x;
  15. float y;
  16. float z;
  17.  
  18. printf(&#34;&#092;nIntroduzca el valor de a: &#34;);
  19. scanf(&#34;%f&#34;, &x);
  20.  
  21. printf(&#34;&#092;nIntroduzca el valor de b: &#34;);
  22. scanf(&#34;%f&#34;, &y);
  23.  
  24. printf(&#34;&#092;nIntroduzca el valor de c: &#34;);
  25. scanf(&#34;%f&#34;, &z);
  26.  
  27. printf(&#34;&#092;nEl resultado es: %2.f&#092;n&#34;, compuesto(x, y, z));
  28.  
  29. return 0;
  30. }
  31.  
  32.  

Gracias a todos.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #10 en: Miércoles 27 de Febrero de 2008, 20:12 »
0
Cita de: "ahi"
El que he creado a partir del ejemplo de ProfesorX (no funciona, pero compila)
cometiste un error aqui:
Código: Text
  1.  
  2. // debe ser %.2f, tu pusiste %2.f
  3. printf(&#34;&#092;nEl resultado es: %2.f&#092;n&#34;, compuesto(x, y, z));
  4.  
  5.  

Recomendaria ademas que lo perfeccionaras, aun tiene una falla, Cual es? pues resulta que debes poner una condicion en el caso que la raiz de b*b - 4*a*c sea negativa, pues en ese caso la raiz es imaginaria.

Saludos :hola:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

sagoher

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Programa Sencillo En C
« Respuesta #11 en: Domingo 2 de Marzo de 2008, 04:02 »
0
EI: Codigo removido, aca no hacemos el trabajo ajeno, sino que orientamos y ayudamos.