• Sábado 14 de Diciembre de 2024, 23:00

Autor Tema:  duda en C  (Leído 1359 veces)

cltomas

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
duda en C
« en: Sábado 19 de Marzo de 2011, 15:19 »
0
Tengo este trozo de código que forma parte de un programa que utiiza funciones:
Código: C
  1.  
  2.            resultado = cubo(n); /* Hacemos la llamada a la función */
  3.            printf("El cubo de %.2f  es %.2fn", n, resultado);
  4.  

Alguien me puede explicar, porque cuando coloco ese trozo al reves es decir:

Código: C
  1.  
  2.           printf("El cubo de %.2f  es %.2fn", n, resultado);
  3.           resultado = cubo(n); /* Hacemos la llamada a la función */  
  4.  
El programa me genera resultados inesperados, por ejemplo si ejecuto e programa con el codigo anterior,el cubo de 2 me da 0.00  <_< , pero si lo hago con el primer  trozo de código, me genera el resultado correcto  :rolleyes:

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: duda en C
« Respuesta #1 en: Sábado 19 de Marzo de 2011, 17:39 »
0
Porque en el primer trozo asignas un valor a la variable resultado ANTES de imprimirlo. En el segundo sin embargo primero imprimes el valor de la varuabke (que como no pones cómo has inicializado la variable pues será X) y después le asignas el valor devuelto por la función.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: duda en C
« Respuesta #2 en: Sábado 19 de Marzo de 2011, 17:40 »
0
Ja ja, esto si me dio risa, nunca habia visto alguien preguntar algo asi de obvio, pero bueno, supongo que nunca llevaste alguna materia de diseño de algoritmos.

Bueno, fuera de la risa te dare la respuesta (aunque es obvia), la razon es que en el segundo codigo:

Código: C++
  1.  
  2.           // resultado aun no contiene el valor del cubo, lo estas imprimiendo antes de calcularlo
  3.           printf("El cubo de %.2f  es %.2fn", n, resultado);
  4.           resultado = cubo(n); /* Hacemos la llamada a la función */  
  5.  
  6.  

la variable resultado aun no contiene el resultado del calculo, ya que estas imprimiendo antes de calcular, de hecho, si tu no le asignas un valor manualmente a la variable resultado despues de crearla, contendra un valor "indederminado" (basura) pero la razon de que contenga cero es que algunos compiladores "inicializan" automaticamente las variables globales con cero. Puedes comprobarlo si en lugar de declarar resultado como global, la declaras como local, y veras que ahora tendra un valor diferente de cero.

En programacion no aplica la regla de la multiplicacion "el orden de los factores no afecta el producto". En programacion, el orden en que se ejecutan las lineas SI puede afectar el resultado final de un programa, es  por eso que la programacion es mas delicada, y a veces mas dificl de encontrar y corregir errores (depurar) te encontraras muchisimos mas casos en que si cambias una sola linea de lugar, obtienes resultados totalmente diferentes, es por eso que hay que revisar con cuidado el codigo, pero afortunadamente en los compiladores modernos tenemos muchas herramientas para realizar la ejecucion de codigo linea por linea para depurarlo correctamente.

Saludos :)

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

cltomas

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: duda en C
« Respuesta #3 en: Sábado 19 de Marzo de 2011, 18:00 »
0
risa te da por la pregunta  <_< ... Deja decirte, soy un autodidacta y como tal tengo ingentes dudas, pero hay libros y manuales que dan las cosas por sentado que tu las sabes, y si  hubiera sabido  que en C o   cualquier otro lenguaje de programación el orden de los productos afecta el resultado, me lo hubiera pensado antes de hacer la pregunta, es más no la hubiera hecho.
Todos te dicen que un int almacena valores desde -32.768 a 32.767, pero nadie te dice de donde se obtiene ese valor, así que imaginate el tiempo que "pierdes" tratando de comprender de donde sale eso, no me basta con solo  saber que un int almacena de -32.768 a 32.767..
Así que si consideras que mi pregunta es demasiado obvia no la tendrías que haber contestado...De todas formas muchas gracias por tu respuesta ya me queda mucho más claro, mi problema..

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: duda en C
« Respuesta #4 en: Sábado 19 de Marzo de 2011, 20:10 »
0
Disculpa si pareci rudo y te ofendi, no me rei de ti, sino de la pregunta, es bueno que seas autodidacta, yo tambien lo soy de hecho yo aprendi a programar en C/C++ antes de llevar la materia, por cuestiones de trabajo, lo que me ayudo mucho cuando lleve el curso, pues ya sabia las bases del lenguaje :), tambien aprendi a programar en C#, y Java por mi cuenta, en la escuela no lleve ninguno de esos dos lenguajes, a lo que me referia es que se notaba que nunca llevaste algoritmos, eso no es malo, a menos que no sepas algoritmos por flojera de no haber estudiado bien la materia (conozco muchos casos de gente floja, que no pone empeño en aprender), pero si nunca llevaste algoritmos, solo significa que debes aprender mas. Es bueno que tengas el animo de aprender el porque, sigue asi.

Solo rematare con una frase mas, "No hay preguntas tontas, solo hay tontos que no preguntan" ;)

Saludos y suerte :)

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