Page 161

3 Funciones

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

Observa que el vector criba ocupa memoria en la propia trama de activaci´on. Completa t´ u mismo el resto de acciones ejecutadas por el programa ayud´andote de una traza de la pila de llamadas a funci´ on con gr´ aficos como los mostrados.

3.5.3.

Vectores de longitud variable

Te hemos dicho en el apartado 2.1 que los vectores han de tener talla conocida en tiempo de compilaci´on. Es hora de matizar esa afirmaci´on. Los vectores locales a una funci´on pueden determinar su talla en tiempo de ejecuci´on. Veamos un ejemplo: eratostenes 2.c 1

eratostenes.c

#include <stdio.h>

2 3 4 5 6

int cuenta_primos(int n) //Cuenta el n´ umero de primos entre 1 y n. { char criba[n] ; int i, j, numprimos;

7

/* Inicializaci´ on */ criba[0] = 0; for (i=1; i<n; i++) criba[i] = 1;

8 9 10 11 12

/* Criba de Erat´ ostenes */ for (i=2; i<n; i++) if (criba[i]) for (j=2; i*j<n; j++) criba[i*j] = 0;

13 14 15 16 17 18

/* Conteo de primos */ numprimos = 0; for (i=0; i<n; i++) if (criba[i]) numprimos++;

19 20 21 22 23 24

return numprimos;

25 26

}

27 28 29 30 31

int main(void) { int hasta, cantidad ;

32

printf ("Introduce un valor:"); scanf ("%d", &hasta); cantidad = cuenta_primos(hasta); printf ("Primos entre 1 y %d: %d\n", hasta, cantidad ); return 0;

33 34 35 36 37

}

F´ıjate en c´ omo hemos definido el vector criba: la talla no es un valor constante, sino n, un par´ametro cuyo valor es desconocido hasta el momento en que se ejecute la funci´on. Esta es una caracter´ıstica de C99 y supone una mejora interesante del lenguaje.

3.5.4.

Par´ ametros vectoriales: paso por referencia

Este programa ilustra el modo en que podemos declarar y pasar par´ametros vectoriales a una funci´on: pasa vector.c 1

pasa vector.c

#include <stdio.h>

2 3

#define TALLA 3

Introducci´ on a la Programaci´ on con C

155

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement