elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programación C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Programación C  (Leído 3,919 veces)
fruz

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Programación C
« 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;
}


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Programación C
« Respuesta #1 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
  1. // incluyes la libreria <stdio.h> para poder usar las funciones que contiene (printf() en este caso)
  2. #include <stdio.h>
  3.  
  4. int power(int m, int n); // prototipo de una funcion <power()> que recibe dos enteros <int> como parametros y devuelve otro entero <int>
  5.  
  6. /* prueba la funcion power */
  7. main() // funcion principal (lo que realmente se ejecuta. PD: Aunque funciona asi es recomendable poner <int main()> ya que devuelve un <int>
  8. {
  9.   int i; // declaras una variable <i> de tipo entero <int>
  10.   for (i = 0; i < 10; ++i) // bucle que empieza asignando 0 a <i>, se ejecuta mientras (i < 10) y en cada vuelta se suma 1 a <i> [(++i) es igual que (i = i+1) y que (i += 1)]
  11.      printf ("%d %d %d\n", i, power(2,i), power (-3,i); // muestra por pantalla 3 enteros, primero <i>, luego 2 elevado a <i> y luego -3 elevado a <i>
  12.   return 0; // devuelve 0, es lo que suele indicar que el programa se ha ejecutado correctamente hasta el final
  13. }
  14. /* power: eleva la base a la enesima potencia; n > = 0 */
  15. int power(int base, int n) // implementas la funcion cuyo prototipo has puesto al principio
  16. {
  17.   int i, p; // declaras dos variables enteras <int> que son <i> y <p>
  18.   p = 1 // asignas a p el valor 1. PD: Has olvidado el ;
  19.   for ( i = 1; i < = n; + + i) // bucle empezando en 1,  e incrementando de 1 en 1 mientras (i <= n)
  20.      p = p * base // asignas a <p> el producto de <p> por la variable <base> (primer parametro de la funcion. Se puede abreviar como p *= base
  21.   return p; // devuelve el valor que tiene <p> al terminar la funcion
  22. }


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Programación C
« Respuesta #2 en: 4 Abril 2019, 16:35 pm »

No funcionará. El operador de incremento es ++, no + +. No puede tener espacios en medio.
En línea

fruz

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Programación C
« Respuesta #3 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?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Programación C
« Respuesta #4 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Í 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:
  • Ser literal: Muestra tal cual lo que le pones.
Código
  1. printf("Hello World"); // Salida: Hello World
  • Usar especificadores de formato: Permite mostrar el valor de variables o funciones que devuelven algo.
Código
  1. int a = 3, b = 2;
  2. printf("La suma de %d + %d es %d", a, b, a+b); // Salida: La suma de 3 + 2 es 5
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.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
fruz

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Programación C
« Respuesta #5 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?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Programación C
« Respuesta #6 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.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
fruz

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Programación C
« Respuesta #7 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?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Programación C
« Respuesta #8 en: 7 Abril 2019, 03:04 am »

Al estar escrito con unos paréntesis, el compilador sabe que es una función.
Código
  1. int power; // variable power de tipo entero
  2. int power(); // funcion power que retorna un entero

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.
« Última modificación: 7 Abril 2019, 03:07 am por YreX-DwX » En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
fruz

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Programación C
« Respuesta #9 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.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
algunas dudas en programacion BATCH(nuevo en esto de programacion)
Scripting
stock_C 8 8,988 Último mensaje 19 Junio 2009, 18:08 pm
por frank30
programacion web vs programacion de escritorio
Programación General
lupitapro 2 7,557 Último mensaje 29 Mayo 2010, 05:51 am
por Dreamaker
Programacion Estructurada Vs Programacion Orientada a Objetos
Programación General
79137913 3 8,119 Último mensaje 1 Junio 2011, 18:02 pm
por 79137913
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines