Ejemplo 1: Programa que calcula el factorial de 'n' números introducidos desde teclado. Primera versión: /* Factorial de un número - versión 1- */ long int factorial (int x) /*definición de función*/ int i; long int fac = 1; for (i=2; i<=x; i=i+1) fac=fac*i; return (fac); int a; do printf ("\n Introduce el numero "); scanf ("%d", &a); if (a>0) printf ("El factorial es %ld", factorial (a)); while (a > 0); -1-
Segunda versión: void factorial (int x) /* definición de función */ int i; long int fac = 1; for (i=2; i<=x; i=i+1) fac=fac*i; printf ("El factorial de %d es %ld", x, fac); int a; do printf ("\n Introduce el número "); scanf ("%d", &a); if (a>0) factorial (a); while (a > 0); -2-
Ejemplo 2: Programa que calcula el máximo de 3 números enteros. Primera versión: /* Máximo de 3 números */ int maximo (int x, int y) /* definición de función */ if (x > y) return x; else return y; int a,b,c,res; printf ("Introduce los 3 números "); scanf ("%d %d %d", &a, &b, &c); res = maximo (a,b); printf ("El máximo es %d", maximo(res,c)); -3-
Segunda versión: /* Maximo de 3 números */ int maximo (int x, int y) /* definición de función */ int max; if (x > y) max=x; else max=y; return (max); int a,b,c; printf ("Introduce los 3 números "); scanf ("%d %d %d", &a, &b, &c); printf ("El máximo es %d ", maximo (maximo(a,b), c)); -4-
Ejemplo 3. Programa que convierte un carácter minúscula a mayúscula. char minus_mayus (char c2) /* definición de función */ char cf; if (c2 >= 'a' && c2 <= 'z') cf= 'A'+c2-'a'; else cf=c2; return (cf); char c1; printf ("Introduce carácter "); scanf ("%c",&c1); printf ("El carácter mayúscula es %c", minus_mayus (c1)); -5-
Ejemplo 4. Programa que calcula los múltiplos de 3,4,5,6 y 7 que hay entre 1 y 100. void multiplos (int a) /* definición de función */ int i; for (i=a*2; i<=100; i=i+a) printf (" %d", i); int i=3; while (i <= 7) printf ("\n Múltiplos del %d :", i); multiplos (i); i=i +1; -6-
Ejemplo 5: void modificar (int a) /* definición de función */ a=a *3; printf ("\n Valor desde la función %d", a); main () int a=2; printf (" \nvalor antes de llamar a la función %d", a); modificar (a); printf ("\n Valor después de llamar a la función %d", a); Salida del programa: Valor antes de llamar a la función 2 Valor desde la función 6 Valor después de llamar a la función 2-7-
Ejemplo 6: int func (int x) /* definición de función */ int y; y=x*x; return (y); int a, i; for (i=1;i<=5;i=i+1) a= func (i); printf ("%d ", a); -8-
Ejemplo 7 #include <math.h> int func (int x) /* definición de función */ int i; i=pow (x,2); return (i); int a, i; for (i=1;i<=5;i=i+1) a= i*i+func (i); printf ("%d ", a); En el ejemplo 7, tanto la función 'main' como 'func' tienen declaradas dos variables locales con el mismo nombre 'i'. Ambas variables son independientes, y no interfieren entre sí. -9-
Ejemplo 8: int a= 3; /* variable global */ int func (int x) /* definición de función */ a=a+x; return (a); int cont; for (cont=1;cont<=5;cont=cont+1) a= func (cont); printf ("%d ", a); La salida del programa 8 será: a= 3+1= 4 a= 4+2=6 a= 6+3=9 a= 9+4=13 a= 13+5= 18-10-
Ejemplo 9: #define N 25 int vector [N]; void lectura () int i; for (i=1; i<=n; i++) scanf ("%d", &vector[i]); main () lectura (); -11-
Ejemplo 10: #define N 25 #define M 50 void lectura (int A [], dim) int i; for (i=0; i<dim; i++) scanf ("%d", &A[i]); main () int V1[N], V2[M]; lectura (V1, N); lectura (V2, M); -12-
5.6.- EJEMPLOS DE UTILIZACION DE FUNCIONES. Ejemplo 11: int a= 100, b=200; int func1 (int x) /* definición de función */ if (x < 100) return (a+x); else return b; int func2 (int x) int prod=1; prod=prod*x; return (prod); int cont,c; for (cont=1;cont<=5;cont++) c=func2 (cont); printf ("%d ", func1 (c)); Ejemplo 12: -13-
int a= 100, b=200; int func1 (int x) /* definición de función */ int c; c=func2 (x); if (c < 100) return (a+c); else return b; int func2 (int x) int prod=1; prod=prod*x; return (prod); int cont; for (cont=1;cont<=5;cont++) printf ("%d ", func1 (cont)); -14-
Ejemplo 13: Declaración por adelantado. int a= 100, b=200; int cont; float func1 (); /*declaración por adelantado de func1*/ for (cont=1;cont<=5;cont++) printf ("%f ", func1 (cont)); float func1 (int x) /* definición de función */ char c; char func2 (); /*declaración por adelantado de func2 */ c=func2 (x); if (c < 100) return c*0.01; else return c*0.1; char func2 (int x) /* definición de función */ return x; Ejemplo 14: -15-
int a= 0, b=1; int func1 (int a) /* definición de función */ b= func2 (a+1) +1; return b; int func2 (int a) /* definición de función */ return (b+a); int cont; for (cont=1;cont<=5;cont++) b= b+ func1 (a+1) + 1; printf ("%d ",b); -16-
Ejemplo 15: int a= 0, b=1; int func1 (int a) /* definición de función */ int b; b= func2 (a+1) +1; return b; int func2 (int a) /* definición de función */ return (b+a); int cont; for (cont=1;cont<=5;cont++) b= b+ func1 (a+1) + 1; printf ("%d ",b); -17-
5.7.- DISEÑO MODULAR CON FUNCIONES. Ejemplo 16: Diseña un algoritmo que devuelva la suma de todos los números primos que hay entre 1 y 100. int primo (int x) int D; if (x==1) return 1; else D=2; while (x % D!= 0) D=D+1; if (D==x) return 1; else return 0; main () int suma=0, i; for (i=1; i<=100; i++) if (primo(i)) suma=suma+1; printf ("El número de números primos es %d", suma); Ejemplo 17: Hacer un programa en C que lea un array de números enteros y posteriormente modifique el array sumándole una unidad a cada elemento. -18-
#define n 5 void leervector (int A []) int i; for (i=0; i<n; i++) printf ("\n Introduce un número: "); scanf ("%d", &A[i]); void modifvector (int B []) int i; for (i=0; i<n; i++) B[i]++; void escribevector (int C []) int i; for (i=0; i<n; i++) printf ("\n%d", C[i]); main () int V[n]; leervector (V); modifvector (V); escribevector (V); Ejemplo 18: Tenemos un conjunto de 100 alumnos y para cada uno de ellos las calificaciones correspondientes a 7 asignaturas (numeradas del 1 al 7). Diseñar un algoritmo que imprima al final la nota media del curso de todos los alumnos. -19-
#define N_ALU 100 #define N_ASIG 7 void inicializa_vector (float A[]) int i; for (i=0; i<n_alu; i++) A[i]=0; void escribe_valores (float A[]) int i; for (i=0; i<n_alu; i++) printf ("\nla nota del alumno %d es %g", i,a[i]/n_asig); main () float notas[n_alu], calificacion; int i,j; inicializa_vector (notas); for (i=0; i<n_alu; i++) for (j=1; j<=n_asig; j++) printf ("\n Introduce la nota del alumno %d ", i); scanf ("%f", &calificacion); notas[i]=notas[i]+calificacion; escribe_valores (notas); Ejemplo 19: Hacer un programa en C que sume dos matrices de números. #define n 3-20-
void leermatriz (int matriz[][n]) /* lee matriz de 3*3 */ int i,j; for (i=0; i<n; i++) for (j=0; j<n; j++) printf ("\ndame el valor del elemento m (%d %d) ", i,j); scanf ("%d", &matriz[i][j]); void sumamatriz (int m1[][n],int m2[][n], int m3[][n]) int i,j; for (i=0; i<n; i++) for (j=0; j<n; j++) m3[i][j]=m1[i][j]+m2[i][j]; -21-
void vermatriz (int m[][n]) int i,j; for (i=0; i<n; i++) for (j=0; j<n; j++) printf ("\nel elemento m(%d %d)es %d", i,j, m[i][j]); main () int matriz1[n][n], matriz2[n][n], matriz3[n][n]; printf ("\n Introduce valores de la primera matriz"); leermatriz (matriz1); printf ("\n Introduce valores de la segunda matriz"); leermatriz (matriz2); sumamatriz (matriz1, matriz2, matriz3); vermatriz (matriz3); -22-
Ejemplo 20: Dada la estructura de tipo 'cliente' definida en los ejemplos anteriores, hacer una función en C que amplíe el saldo de las cuentas en un 5% si el último pago se ha realizado en los 6 primeros meses del año. int actualizar (int mes, int saldo) if (mes<=6) return (0.05*saldo); else return 0; main () int i; struct fecha int mes; int dia; int anyo;; struct cuenta int num_cuenta; char tipo_cuenta; char nombre[80]; float saldo; struct fecha ult_pago; cliente[100]; for (i=0; i<100; i++) cliente[i].saldo=cliente[i].saldo+ actualizar(cliente[i].ult_pago.mes, cliente[i].saldo); -23-
Ejemplo 21: Definir una estructura para caracterizar un punto mediante sus dos coordenadas en el plano (x e y) y otra para definir un rectángulo en función de dos puntos. Hacer posteriormente una función en C para determinar si dado un punto, éste se encuentra dentro del rectángulo. struct punto int x; int y; ; struct rectangulo struct punto pt1; struct punto pt2; ; struct punto makepoint (int x, int y) struct punto puntaux; puntaux.x=x; puntaux.y=y; return puntaux; -24-
int puntrect (struct punto p1, struct rectangulo rect) if ((p1.x >= rect.pt1.x) && (p1.x <= rect.pt2.x) && (p1.y >= rect.pt1.y) && (p1.y <= rect.pt2.y)) return 1; else return 0; main () struct punto puntx; struct rectangulo rect; rect.pt1=makepoint (3,4); rect.pt2=makepoint (6,10); puntx=makepoint (5,8); if (puntrect (puntx, rect)) printf ("\nel punto está en el rectángulo "); else printf ("\nel punto no está en el rectángulo "); -25-