Título: Programación C Publicado por: fruz en 4 Abril 2019, 01:37 am Hola! ¿Alguien me puede explicar, línea por línea, lo que hace este programa de ejemplo del libro de Ritchie y Kernighan?
#include <stdio.h> int power(int m, int n); /* prueba la función power */ main() { int i; for (i = 0; i < 10; ++i) printf ("%d %d %d\n", i, power(2,i), power (-3,i); return 0; } /* power: eleva la base a la enésima potencia; n > = 0 */ int power(int base, int n) { int i, p; p = 1 for ( i = 1; i < = n; + + i) p = p * base return p; } Título: Re: Programación C Publicado por: K-YreX en 4 Abril 2019, 04:05 am Coloca tus códigos entre etiquetas de código GeSHi (puedes seleccionar el lenguaje apropiado en el desplegable que hay encima del cuadro de texto)... :rolleyes:
Código
Título: Re: Programación C Publicado por: MAFUS en 4 Abril 2019, 16:35 pm No funcionará. El operador de incremento es ++, no + +. No puede tener espacios en medio.
Título: Re: Programación C Publicado por: fruz en 4 Abril 2019, 20:49 pm No entiendo. ¿Cuál es el resultado de printf? Cuando en printf dice "power(2,i)" ¿llama a la fución power?
Título: Re: Programación C Publicado por: K-YreX en 4 Abril 2019, 22:07 pm La función <printf()> tiene unos parámetros que cuesta ver si no se conocen. Te dejo AQUÍ (http://www.cplusplus.com/reference/cstdio/printf/) un enlace a una página donde puedes ver todo lo relacionado con esa función.
El primer parámetro siempre es una cadena de <char> que puede:
Código
Código Puedes encontrar todos los especificadores de formato que hay en el enlace que te he dejado antes. Según el tipo de variable que quieres mostrar o literales (como en este caso) tienes que usar un especificador u otro. Título: Re: Programación C Publicado por: fruz en 7 Abril 2019, 01:40 am Lo que yo no entendía era que "power" en printf llama a la función "power" y está regresa el valor. Ahora lo entiendo.
Tengo una duda: ¿Cómo sabe el compilador que se trata de una función y no simplemente de una variable? Título: Re: Programación C Publicado por: K-YreX en 7 Abril 2019, 01:50 am Para que lo entiendas es como que el compilador coge lo que devuelve cada parámetro. Si es una variable simple coge el propio valor, si es una función coge el valor de retorno de la función o si es una operación coge su resultado.
Título: Re: Programación C Publicado por: fruz en 7 Abril 2019, 02:48 am Si entiendo bien cuando el programa llega a printf y encuentra "power" se ejecuta la función "power". ¿No podría pasar que lo tome cómo una variable?
Título: Re: Programación C Publicado por: K-YreX en 7 Abril 2019, 03:04 am Al estar escrito con unos paréntesis, el compilador sabe que es una función.
Código
Más que el compilador, el ensamblador, cuando traduce el programa de C a ensamblador ya traduce las instrucciones correspondientes para llamar a la función correspondiente. Eso puedes verlo si te adentras un poco más en las fases de compilación que sufre un código fuente y los ficheros que se generan en cada fase. Título: Re: Programación C Publicado por: fruz en 7 Abril 2019, 03:06 am Mi duda es cómo se sabe en printf que power no es una variable, que es una función.
Título: Re: Programación C Publicado por: K-YreX en 7 Abril 2019, 03:09 am Porque así se ha traducido en la compilación del programa. He editado mi mensaje anterior con otra explicación un poco más concreta pero sin entrar demasiado en materia.
Título: Re: Programación C Publicado por: fruz en 7 Abril 2019, 03:14 am Si no existiera
int power() al estar int power; ¿printf tomaría "power" como una variable? Título: Re: Programación C Publicado por: K-YreX en 7 Abril 2019, 03:19 am Existan las que existan <printf()> toma cada parámetros como lo que es:
Código
Código
Código
No sé si con esto ya queda más claro Título: Re: Programación C Publicado por: fruz en 7 Abril 2019, 03:31 am Ahora entiendo. El hecho de que tenga () lo hace una función y si no tiene es una variable. Perdón por mi ignorancia.
|