Você está na página 1de 12

Como siempre los ejercicios deben hacerse en programas separados, adems en todos ellos se pedir una funcin main

aparte de las funciones o procedimientos solicitados, dicha funcin main llamar a las funciones y procedimientos correspondientes. 1. Realice un programa en C: Que muestre un saludo por pantalla, utilizar un procedimiento. 2. Que mediante una funcin calcule el cuadrado de un nmero cualquiera y lo muestre en pantalla. 3. Que muestre por pantalla los nmeros del 1 al 100, utilizar recursividad. 4. Que realice la media de dos nmeros, utilizar una funcin. 5. Que mediante un procedimiento calcule el cuadrado de un nmero cualquiera y lo muestre en pantalla. 6. Que pida un nombre, un apellido y un lugar y a raz de ah muestre en pantalla una pequea historia, se debe usar un procedimiento. 7. Que muestre un men con las opciones sumar, restar, multiplicar y dividir, el programa solicitar una opcin y realizar la tarea elegida, se debe usar un procedimiento para mostrar el men, pedir los datos en el main y despus usar funciones para realizar los clculos. 8. Que pida por pantalla un nmero del 1 al 10 y mediante un procedimiento muestre por pantalla el nmero escrito en letras. 9. Que mediante procedimientos y funciones realice las operaciones bsicas con arrays de ordenar por el mtodo de la burbuja y buscar mediante una bsqueda binaria o dicotmica. 10. Que pida por pantalla una temperatura en grados Celsius, muestre un men para convertirlos a Fahrenheit o Kelvin y muestre el equivalente por pantalla, utilizar funciones. 11. Que muestre por pantalla si un nmero es par o impar, utilizar una funcin. 12. Que rellene un array de 20 enteros, utilizar un procedimiento. Que muestre el contenido del array anterior mediante un procedimiento. 13. Que muestre una tabla de multiplicar de un nmero cualquiera por pantalla, el nmero se pedir en el programa principal. 14. Que muestre 3 nmeros ordenados de ascendentemente y descendentemente, utilizar un procedimiento para cada operacin. 15. Que verifique que un carcter introducido es un nmero, utilizar funciones. 16. Que transforme un nmero del 0 al 999 a nmeros romanos, utilizar funciones. 17. Que gestione un array de 20 alumnos con sus cdigos, nombres, apellidos, direcciones, telfonos, correos. Las operaciones posibles son insertar, modificar, borrar, buscar y ordenar array. Se deben utilizar funciones. 18. Que se encargue de encriptar un mensaje, para ello se sumar 2 al cdigo ASCII del carcter. Usar funciones. 19. Que desencripte el mensaje anterior. 20. Que eleve un nmero cualquiera a una potencia cualquiera, mostrar en pantalla el resultado, se debe utilizar la recursividad.

21. Que detecte si un nmero es primo, utilizar recursividad. 22. Que realice los diferentes mtodos de ordenacin de arrays utilizando las funciones: Relleno de un array. Copia un array a otro. Mostrar en pantalla todos los valores. Ordenar por burbuja. Ordenar por seleccin. Ordenar por insercin. Ordenar por quick sort. 23. Que implemente la lgica de un juego de adivinar un nmero, para ello se seguirn las siguientes instrucciones: Los nmeros se almacenarn en un array de 10 posiciones. Uno de los jugadores debe introducir dichos nmeros. El otro jugador debe adivinar el nmero escribindolo por pantalla, el programa le dir si el nmero secreto es mayor o menor al introducido. En caso de acertar se mostrar por pantalla una felicitacin y el nmero de intentos realizados. 24. Que gestione un restaurante, para ello se seguirn las siguientes instrucciones: El restaurante dispone de una carta de 10 comidas, de las cuales debemos saber el nombre, el precio de venta y el tipo de comida que es (aperitivo, carne, pescado, postre). Se debe poder aadir, modificar o eliminar cualquier plato de la carta. Cuando se realiza un pedido se introducirn los platos requeridos y al final se mostrar por pantalla el precio total. Cuando se cierra el restaurante el programa mostrar por pantalla el dinero total ganado.

En programacin esto se gestiona mediante procedimientos y funciones, muchos de ellos los importamos en libreras (como la stdio.h) y otros podemos realizarlos nosotros mismos.

Procedimiento
Un procedimiento es un fragmento de cdigo cuya funcin es la de realizar una tarea especfica independientemente del programa en el que se encuentre. Con los procedimientos se pueden crear algoritmos de ordenacin de arrays, de modificacin de datos, clculos paralelos a la aplicacin, activacin de servicios, etc. Prcticamente cualquier cosa puede realizarse desde procedimientos independientes.

Funcin
Una funcin es exactamente lo mismo que un procedimiento salvo por un detalle, una funcin puede devolver un valor al programa principal y un procedimiento no . Con las funciones podemos realizar todas las tareas que se hacen con los procedimientos pero adems pudiendo devolver valores (como por ejemplo el rea de un tringulo).

Estructura y uso
Como se puede ver los conceptos de procedimiento y funcin son bastante similares, incluso podramos definir un procedimiento como una funcin que no retorna ningn valor. Ambos poseen la misma estructura: Tipo_Dato_Retorno Nombre (Parmetros){ sentencias; retorno; (slo en el caso de las funciones) } Para un procedimiento el Tipo_Dato_Retorno es siempre void, o lo que es lo mismo, nada. En el caso de las funciones se puede poner cualquier tipo de dato, int, float, char, etc. Ahora vamos a plantear un algoritmo que calcule el rea de un tringulo, veamos como se podra hacer mediante un procedimiento y una funcin: Procedimiento: #include <stdio.h> #include <stdlib.h> void areatriangulo (void) { float base, altura; printf("Introduce base: "); scanf("%f",&base); printf("Introduce altura: ");

scanf("%f",&altura); printf("El rea es: %2.2f \n",(base*altura)/2); } int main(int argc, char *argv[]) { areatriangulo(); system("PAUSE"); return 0; } Funcin: #include <stdio.h> #include <stdlib.h> float areatriangulo (void) { float base, altura; printf("Introduce base: "); scanf("%f",&base); printf("Introduce altura: "); scanf("%f",&altura); return (base*altura)/2; } int main(int argc, char *argv[]) { float area; area=areatriangulo(); printf("El rea es: %2.2f \n",area); system("PAUSE"); return 0; } Recordemos, un procedimiento siempre se declarar con valor de retorno void y una funcin se declarar con cualquier tipo de dato como valor de retorno y en su cdigo se aadir la sentencia return y el valor que se desea devolver al programa que lo llama. Es muy recomendable definir todos los procedimientos y funciones antes de la funcin principal main, el motivo de esto es que en C todas las funciones y procedimientos deben

definirse antes de la primera lnea de cdigo en que se usa. En caso de que incumplamos sta norma a la hora de compilar tendremos errores. Para llamar a un procedimiento o funcin debemos hacerlo de la siguiente forma: En un procedimiento escribimos su nombre seguido de los parmetros entre parntesis: areatriangulo(); En una funcin debemos declarar antes una variable que almacene el dato que la funcin va a devolver, la variable debe ser del mismo tipo que el que retorna la funcin. Seguidamente llamamos a la funcin escribiendo la variable seguido del operador de asignacin, el nombre de la funcin y los parmetros entre parntesis: float area; area=areatriangulo(); Implementar funciones y procedimientos en nuestros programas es una muy buena prctica que se debe hacer siempre que se pueda, ayuda a mantener organizado el cdigo y nos permite reutilizar funcionalidades en otras secciones del programa.

Parmetros.
A la hora de crear funciones y procedimientos puede que sea necesario que trabajemos con datos que se encuentran alojados en el programa que los llama, para eso existen los parmetros. Los parmetros son valores que se mandan a un procedimiento o funcin para que stos puedan trabajar con ellos. Para utilizar los parmetros en un procedimiento o funcin debemos declarar el tipo de dato y su identificador, exactamente igual que si declaramos una variable. Veamos el programa del rea del tringulo pasando por parmetros los datos de base y altura: #include <stdio.h> #include <stdlib.h> void areatriangulo (float base, float altura) { printf("El rea es: %2.2f \n",(base*altura)/2); } int main(int argc, char *argv[]) { float base, altura;

printf("Introduce base: "); scanf("%f",&base); printf("Introduce altura: "); scanf("%f",&altura); areatriangulo(base,altura); system("PAUSE"); return 0; } Es muy importante que las variables se pasen en el mismo orden que como se han definido en los parmetros. En caso de que no sea as podemos tener resultados inesperados en la ejecucin del programa. Recuerda que los identificadores son palabras en lenguaje humano legible mediante el cual manejamos celdas de memoria, da igual como se llamen en el programa, en las funciones y en los procedimientos.

Paso de parmetros por valor y por referencia.


El paso de parmetros a procedimientos y funciones es un recurso bastante potente de cara a trabajar con datos, adems tenemos la posibilidad de pasar estos parmetros de varias formas, por valor o por referencia, esto lo especificamos cuando definimos el procedimiento o funcin. El paso por valor es el que acabamos de ver, mediante el paso por valor el procedimiento o funcin reciben los valores indicados para poder trabajar con ellos, su declaracin es la siguiente: Procedimiento - void areatriangulo (float base, float altura) Funcin - float areatriangulo (float base, float altura) A veces necesitaremos modificar varios de estos datos que hemos pasado en los parmetros, para ello es posible declarar los parmetros de tal forma que se puedan modificar, a esto se le llama paso por referencia. Gracias al paso por referencia un procedimiento o funcin no slo realiza unas operaciones y devuelve (en el caso de las funciones) un valor, sino que tambin puede modificar los valores que se pasan como parmetros. Para poder realizar el paso de parmetros por referencia es necesario que en la declaracin del procedimiento o funcin se especifique el espacio de memoria donde se encuentra alojado el dato, esto se realiza as: Procedimiento - void areatriangulo (float *base, float *altura) Funcin - float areatriangulo (float *base, float *altura)

Lo que acabamos de definir como parmetros no son las variables en s, sino un puntero que apunta a la direccin de memoria donde se encuentra alojado el valor, as podremos modificarlo. Para llamar a un procedimiento o funcin pasando los parmetros por valor se hace de la forma que hemos visto: Procedimiento - areatriangulo(base, altura); Funcin - area=areatriangulo(base, altura); Para llamar a un procedimiento o funcin pasando los parmetros por referencia se hace de la siguiente forma: Procedimiento - areatriangulo(&base, &altura); Funcin - area=areatriangulo(&base, &altura); As lo que pasamos como parmetros no es el valor de la variable, sino la direccin de memoria donde se encuentra el dato, de sta forma el procedimiento o funcin podr modificar su valor directamente. Veamos el caso de un programa que intercambia los valores de dos variables, en uno utilizaremos parmetros por valor y en el otro por referencia: Por valor: #include <stdio.h> #include <stdlib.h> void intercambio(int num1, int num2){ int aux; aux=num1; num1=num2; num2=aux; printf("El intercambio es: num1=%d num2=%d\n",num1,num2); } int main(int argc, char *argv[]) { int num1=3, num2=5; printf("Vamos a intercambiar: num1=%d num2=%d\n",num1,num2);

intercambio(num1,num2); printf("El resultado tras el intercambio es: num1=%d num2=%d\n",num1,num2); system("PAUSE"); return 0; } Por referencia: #include <stdio.h> #include <stdlib.h> void intercambio(int *num1, int *num2){ int aux; aux=*num1; *num1=*num2; *num2=aux; printf("El intercambio es: num1=%d num2=%d\n",*num1,*num2); } int main(int argc, char *argv[]) { int num1=3, num2=5; printf("Vamos a intercambiar: num1=%d num2=%d\n",num1,num2); intercambio(&num1,&num2); printf("El resultado tras el intercambio es: num1=%d num2=%d\n",num1,num2); system("PAUSE"); return 0; } Compila ambos cdigo y observa la diferencia, es en sta caracterstica donde radica el potencial del paso por valor y por referencia.

Variables locales y globales.


Gracias al concepto de procedimiento y funcin podemos tener dentro de un mismo programa varios subprogramas, los cuales se irn llamando entre ellos para poder realizar

las tareas pertinentes, esto est muy bien pero es posible que necesitemos realizar tareas con variables alojadas en otros sitios, o necesitemos declarar nuevas, o simplemente no deseemos usar parmetros. Para solucionar esto existe el concepto de variables locales y variables globales. Las variables locales son aquellas que declaramos al principio del cuerpo de un procedimiento o funcin, esto incluye a las declaradas en la funcin principal main. Las variables globales son aquellas que las podemos definir en la zona de importacin de libreras #include y la definicin de constantes con #define. Su utilidad radica en poder operar con su valor en cualquier procedimiento o funcin sin necesidad de pasarla como parmetro. Veamos el ejemplo del tringulo usando variables globales: #include <stdio.h> #include <stdlib.h> float base, altura; void areatriangulo (void) { printf("El rea es: %2.2f \n",(base*altura)/2); } int main(int argc, char *argv[]) { printf("Introduce base: "); scanf("%f",&base); printf("Introduce altura: "); scanf("%f",&altura); areatriangulo(); system("PAUSE"); return 0; } Como se puede comprobar, el programa funciona exactamente igual que en su versin con parmetros, no obstante muchos desarrolladores no recomiendan hacer uso de sta tcnica debido a que en proyectos medios o grandes puede resultar confuso manejar variables globales sin un determinado estndar que regule su uso.

El modo ms comn de operar es mediante el uso de parmetros as que durante el curso y posteriormente seguiremos con esa tcnica, no obstante si puede interesarte practicar los ejercicios que hemos visto hasta ahora usando variables globales.

Recursividad.
El ltimo punto de ste captulo se lo voy a dedicar a la recursividad, una tcnica bastante comn e importante para desarrollar determinados algoritmos. La recursividad no es ms que la tcnica de desarrollar una funcin que se llama a s misma. La recursividad normalmente la veremos en funciones que realicen clculos matemticos, donde para realizar un clculo repetitivo la funcin tendr que llamarse a s misma y as ir desarrollando el clculo. Una cosa importante que hay que tener en cuenta es que para realizar funciones recursivas debemos tener muy claro que queremos hacer, planificarlo bien y no complicarnos si no es necesario, para ello podemos hacer uso de todos los elementos que conocemos, parmetros por referencia, funciones, bucles, variables que indiquen el fin del ciclo, etc. El ejemplo ms tpico que se suele utilizar para explicar la recursividad es el de un programa que calcula el factorial de un nmero, el factorial de un nmero responde a la siguiente frmula matemtica: n! = n * (n-1)! Es decir, que el factorial de un nmero es la multiplicacin de ese nmero por el factorial del nmero inmediatamente anterior. As si queremos saber el factorial de 5 sera: 5! = 5 * 4! O lo que es lo mismo: 5! = 5 * 4 * 3 * 2 * 1 Veamos esto primero mediante un programa normal usando un bucle while: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int num, num2;

printf("Introduce nmero: "); scanf("%d",&num); num2=num; while (num2!=1){ num2=num2-1; num=num*num2; } printf("El factorial es: %d \n", num); system("PAUSE"); return 0; } Ahora vemoslo mediante el uso de una funcin recursiva: #include <stdio.h> #include <stdlib.h> int factorial(int num){ if (num==0) { return 1; } else { return num * factorial(num-1); } } int main(void) { int num; printf("Introduce nmero: "); scanf("%d",&num); printf("El factorial es: %d \n", factorial(num)); system("PAUSE"); return 0; } Como podis observar el resultado es el mismo pero el cdigo ha variado bastante, la funcin recursiva ha cumplido perfectamente su cometido, no obstante si ves que te resulta

un concepto demasiado abstracto y prefieres utilizar los bucles adelante, tu eres el programador y eres completamente libre de dar la solucin que desees. - See more at: http://programavideojuegos.blogspot.mx/2013/05/curso-basico-de-c-710procedimientos.html#sthash.Sy12LEnh.dpuf
See more at: http://programavideojuegos.blogspot.mx/2013/05/25-ejercicios-de-procedimientosy.html#sthash.ZyuG9HHb.dpuf

Você também pode gostar