Sie sind auf Seite 1von 10

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
AREA DE SISTEMAS, COMPUTACION E INFORMATICA

Curso
Cdigo
Profesor

CICLO :

2013-II

: LENGUAJES DE PROGRAMACIN
: ST222 V
: Ing. Csar Aldo Canelo Sotelo

FUNCIONES
Las funciones son los bloques constructores de C y el lugar donde se da toda la
actividad del programa. La forma general de una funcin es:
especificador_de_ tipo nombre_de_la_funcin(lista de parmetros)
{
definicin de variables;
// variables locales
cuerpo de la funcin;
return (valor devuelto);
}
Especificador de tipo: especifica el tipo de datos que devuelve la sentencia return de la
funcin. El valor puede ser cualquier tipo vlido de C. Si no se especifica tipo, el
compilador asume que la funcin devuelve un resultado entero.
Nombre de la funcin: se usa para llamar a la funcin dentro del programa. Est permitido
el uso de letras, nmeros y el smbolo _ para dar nombre a la funcin. No se puede
empezar con un nmero. El nombre no puede contener espacios ni signos de puntuacin.
Lista de parmetros: lista de nombre de variables, separados por comas con sus tipos
asociados, que reciben los valores de los argumentos cuando se llama a la funcin. Una
funcin puede no tener parmetros, en cuyo caso la lista de parmetros contiene solo la
palabra clave void.
SENTENCIA RETURN
Tiene dos usos importantes:
1) Fuerza una salida inmediata de la funcin en que se encuentra. O sea, hace que la
ejecucin del programa vuelva al cdigo que llam a la funcin.
2) Se puede utilizar para devolver un valor.
VUELTA DE UNA FUNCIN
Hay dos formas en que una funcin puede terminar su ejecucin y volver al lugar en que se
le llam:

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

1) Cuando se ha ejecutado la ltima sentencia de la funcin y conceptualmente se


encuentra la llave } del final de la funcin.
2) Cuando se emplea la sentencia return para terminar la ejecucin, bien porque se
tiene que devolver un valor o bien para simplificar el cdigo y hacerlo ms
eficiente permitiendo mltiples puntos de salida. Una funcin puede tener varias
sentencias return.
VALORES DEVUELTOS
Todas las funciones, excepto aquellas de tipo void devuelven un valor. Este valor se
especifica explcitamente en la sentencia return. Si una funcin no es especificada como
void y si tampoco se especifica un valor de vuelta, entonces el valor devuelto por la
funcin queda tcnicamente indefinido. Mientras una funcin no se declare como void,
puede ser usada como operando en cualquier expresin vlida en C.
Las siguientes son expresiones vlidas en C:
x = potencia (y);
if (max (a, b) > 100) printf (mayor);
Sin embargo, una funcin no puede ser el destino de una asignacin. La siguiente expresin
es incorrecta:
intercambio( x, y) = 100;
Si se declara una funcin como void no puede ser usada en ninguna expresin. Por ejemplo,
suponga que funcion se ha definido como void. Las siguientes expresiones son incorrectas:
int num;
num= funcion( );
// No hay valor que asignar a num
LO QUE DEVUELVE main( )
Cuando se usa una sentencia return en main( ), devuelve un cdigo de terminacin
al proceso de llamada (que generalmente es el S.O.). El valor devuelto debe ser un entero.
Para muchos sistema operativos, el valor 0 indica que el programa ha terminado
normalmente. Si no se especifica un valor con return, entonces el compilador devuelve un
valor desconocido al S.O. Es una buena regla usar explcitamente una sentencia return.
./* Ejemplo 1 */
# include <stdio.h>
# include <conio.h>
void limpia_pantalla(void);
int main( )
{ limpia_pantalla();
// Se llama a la funcin limpia_pantalla.
return 0;
}
void limpia_pantalla( )
{ clrscr();
printf(" La pantalla est limpia\n ");
return;
// return aqu es opcional, no hace falta devolver ningn valor.
}
2

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

Este programa llama a la funcin limpia_pantalla que borra la pantalla y muestra el


mensaje La pantalla est limpia.
/* Ejemplo 2. Programa que utiliza funciones sin argumentos */
# include <stdio.h>
# include <conio.h>
cls();
// Declaracin de funciones
ingreso();
suma();
escribe();
int num1, num2, resultado;
// Variables globales
void main( )
{ cls();
ingreso();
suma();
escribe();
getch();
}
cls()
{ clrscr();
}
ingreso()
{ printf("Ingrese dos numeros enteros: ");
scanf("%d%d", &num1, &num2);
}
suma()
{ resultado=num1+num2;
}
escribe()
{ cls();
printf("La suma es = %d\n", resultado);
}
/* Ejemplo 3. Halla el mayor de dos enteros ingresados por el teclado */
# include <stdio.h>
# include <conio.h>
void compara(int a, int b)
// Bloque de la funcin en lugar de la declaracin.
{ if(a>b) printf("%d es mayor que %d\n", a, b);
else printf("%d es mayor que %d\n",b, a);
return;
}
main()
{ int num1, num2;
printf("Ingrese dos nmeros enteros:\n");
3

Lenguajes de Programacin
scanf("%d %d", &num1, &num2);
compara(num1, num2);

Ing. Csar Aldo Canelo Sotelo

// Se llama a la funcin con sus 2 argumentos

}
DONDE SE DEFINEN LAS FUNCIONES

Las funciones deben definirse antes de ser usadas.


Es aconsejable definir las funciones en la cabecera del programa. Esto no permite
luego usar las funciones en cualquier orden. A esto se llama prototipo de funcin.

// Ejemplo 4. Uso de la funcin compara para hallar el mayor de 2 nmeros enteros


# include <stdio.h>
# include <conio.h>
int compara(int a, int b);
// Definicin de prototipo de funcin
int main()
{ int num1, num2, resultado;
printf("Ingrese dos nmeros enteros:\n");
scanf("%d %d", &num1, &num2);
resultado=compara(num1, num2);
// Se llama a la funcin con sus 2 argumentos
printf("El mayor de los dos nmeros es: %d\n", resultado);
return 0;
}
int compara(int a, int b)
{ int mayor;
if(a>b) mayor=a;
else mayor=b;
return mayor;
}
En esta forma de programa se usan prototipo de funciones en la cabecera del programa, y
luego los bloques de las funciones se colocan en cualquier orden. La funcin en ambos
lugares debe tener el mismo nombre, mismo nmero y tipo de parmetros y mismo tipo de
valor devuelto.
AMBITO DE LAS FUNCIONES
El cdigo de una funcin es privado a esa funcin y se accede a l slo a travs de una
llamada a esa funcin. El cdigo y los datos que estn definidos dentro de una funcin no
pueden interactuar con el cdigo o los datos definidos dentro de otra funcin, porque las
dos funciones tienen un mbito diferente.
Las variables que estn definidas dentro de una funcin se llaman variables locales. Una
variable local comienza a existir cuando se entra en una funcin y se destruye al salir de
ella. As, las variables locales no pueden conservar sus valores entre distintas llamadas a la
funcin.

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

ARGUMENTOS DE FUNCIONES
Si una funcin va a usar argumentos, se debe declarar variables que acepten los valores de
los argumentos. Estas variables se llaman parmetros formales de la funcin. Se comportan
como variables locales dentro de la funcin, crendose al entrar en la funcin y
destruyndose al salir de ella. Los argumentos correspondientes en el punto de llamada a la
funcin se llaman parmetros reales. As:
funcion_escribe( char c, char d)
{
cuerpo de la funcin
}
La declaracin de parmetros aparece entre parntesis.
DECLARACIONES DE FUNCIONES PROTOTIPO
Si se quiere utilizar un funcin es suficiente con definirla para que pueda ser invocada
desde cualquier punto del programa. Para poder utilizar una funcin el compilador necesita
conocer el tipo de valor que devuelve la funcin y los parmetros que acepta, de forma que
pueda comprobar que los tipos de parmetros reales coinciden con los tipos de parmetros
formales. Cuando una funcin llama a otra definida anteriormente, el compilador ya lo
sabe, pero qu ocurre cuando se llama a una funcin que no ha sido definida
previamente ? El compilador asumir que la funcin devuelve int y que todos los
parmetros son de tipo int, lo cual puede que no se corresponda con la definicin posterior
de la llamada.
Para que el compilador pueda conocer el tipo y los parmetros de las funciones
antes de su uso se utilizan prototipo de funciones. El formato de un prototipo de funcin es:
especificador_de_ tipo nombre_de_la_funcin(lista de parmetros);
Un prototipo lo que hace es declarar una funcin, es decir, indicar al compilador que
existe una funcin con un nombre, tipo y parmetros concretos. La definicin lo que
incluye es el cdigo de la funcin.
/* Ejemplo 5. Prototipo de funcin que no tiene parmetros */
#include <stdio.h>
void mostrar(void);
main()
{ mostrar();
return 0;
}
void mostrar(void)
{ int i;
for(i=0; i<10; i++)
5

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

printf(%d, i);
}
LLAMADA A UNA FUNCIN
En general, se pueden pasar argumentos a las funciones de dos formas: Llamada
por valor y llamada por referencia.
a) LLAMADA POR VALOR
En la llamada por valor, se copia el valor de un argumento en el parmetro formal
de la funcin. De esta forma, los cambios en los parmetros de la funcin no afectan a las
variables que se usan en la llamada. Lo que se pasa a la funcin es una copia del valor del
argumento. Lo que ocurra dentro de la funcin no tiene efecto sobre la variable utilizada en
la llamada.
/* Ejemplo 6 */
# include <stdio.h>
# include <conio.h>
int cuadrado(int x);
int main()
{ int y =10;
printf(%d %d, cuadrado(y), y );
return 0;
}
cuadrado(int x)
{ x = x*x;
return(x);
}
En este ejemplo se copia el valor del argumento de cuadrado( ), es decir 10, en el
parmetro x. Cuando se ejecuta la asignacin x = x*x, el nico elemento que se modifica es
la variable local x. La variable y, usada para llamar a cuadrado( ), todava tiene el valor de
10. De esta forma, la salida del programa es 100 10.
/* Ejemplo 7. Llamada a una funcin con paso por valor */
# include <stdio.h>
# include <conio.h>
void intercambio(int, int);
main()
{ int a=1, b=2;
printf("Los valores iniciales son a=%d y b=%d\n", a,b);
intercambio(a,b);
printf("\nLuego del intercambio los valores son a=%d y b=%d", a,b);
printf("\nLos valores iniciales en la funcin que invoc, no han cambiado");
}

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

void intercambio(int x, int y)


{ int aux;
aux=x;
x=y;
y=aux;
printf("\nLos valores intercambiados seran: a=%d y b=%d", x, y);
printf("\nDentro de la funcion intercambio los valores cambiaron");
}
b) LLAMADA POR REFERENCIA
En este mtodo, se copia la direccin del argumento en el parmetro. Dentro de la
funcin se usa la direccin para acceder al argumento usado en la llamada. Esto significa
que los cambios hechos a los parmetros afectan a la variable usada en la llamada a la
funcin. Para hacer una llamada por referencia a una funcin, se pasa un puntero al
argumento. Como esto hace que se pase la direccin del argumento a la funcin, es posible
cambiar el valor del argumento exterior de la funcin.
Los punteros se pasan a las funciones como cualquier otro valor. Previamente, es
necesario declarar los parmetros como tipo puntero.
Para pasar un valor por referencia, se utiliza el operador direccin & delante de la
variable enviada. Esto le indica al compilador que la funcin que se ejecutar tendr que
obtener la direccin de memoria en que se encuentra dicha variable.
/* Ejemplo 8. Llamada a una funcin con paso por referencia */
# include <stdio.h>
# include <conio.h>
void intercambio(int *, int *);
main()
{
int a=1, b=2;
printf("Los valores iniciales son a=%d y b=%d\n", a,b);
intercambio(&a,&b);
printf("Luego del intercambio los valores son a=%d y b=%d", a,b);
printf("\nLos valores iniciales en la funcin que invoc, han cambiado");
}
void intercambio(int *x, int *y)
{
int aux;
aux=*x;
*x=*y;
*y=aux;
printf("Los valores intercambiados seran: a=%d y b=%d\n",*x,*y);
printf("Son los valores dentro de la funcion intercambio\n\n");
}
7

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

SOBRECARGA DE FUNCIONES
Por lo general es recomendable dar nombres distintos a funciones diferentes, pero, cuando
algunas funciones ejecutan la misma tarea con objetos de distinto tipo, puede ser ms
conveniente darles el mismo nombre. El empleo del mismo nombre para diferentes
operaciones con tipos de datos distintos se denomina sobrecarga. Por ejemplo:
float suma ( float a, flota b);
int suma ( int a, int b);

// sumar dos valores reales


// sumar dos valores enteros

Para el compilador lo nico comn entre dos funciones con el mismo nombre, es el
nombre.
RECURSIVIDAD
Se llama recursividad a un proceso mediante el que una funcin se llama a s misma
de forma repetida, hasta que se satisfaga alguna determinada condicin. Las funciones en C
pueden emplearse recursivamente, es decir, una funcin puede llamarse a s misma ya sea
directa o indirectamente. El proceso se utiliza para computaciones repetitivas en las que
cada accin se determina en funcin de un resultado anterior.
Para resolver un problema recursivamente se deben satisfacer dos condiciones:
1) El problema se debe escribir en forma recursiva.
2) El programa debe incluir una sentencia de condicin de fin.
Por ejemplo, para calcular el factorial de un nmero entero positivo, el problema se
expresara as:
n! = 1 x 2 x 3 x . . . . x n
Sin embargo podemos expresar la solucin del problema de otra forma, escribiendo
n! = n x (n1)!
Esta es la forma recursiva, en la que la accin deseada (el clculo de n!) se expresa en
trminos de un resultado anterior [ el valor de (n1)! , que se supone conocido ]. Tambin
sabemos que 1!=1 por definicin. Esto ltimo proporciona una condicin de fin para el
proceso recursivo.
/* Ejemplo 9. Clculo del factorial de un nmero empleando una funcin */
#include <stdio.h>
#include <conio.h>
long int factorial(int n);
main()
8

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

{ int numero;
printf("Ingrese un entero positivo: ");
scanf("%d", &numero);
printf("\nEl factorial es: %ld", factorial(numero));
getch();
}
long int factorial(int n)
{
int i;
long int producto= 1;
if(n>1)
for(i=2; i<=n; i++)
producto*=i;
return(producto);
}
/* Ejemplo 10. Factorial de un nmero empleando una funcin recursiva */
#include <stdio.h>
#include <conio.h>
long int factorial(int n);
main()
{
int numero;
printf("Ingrese un entero positivo: ");
scanf("%d", &numero);
printf("\nEl factorial es: %ld", factorial(numero));
getch();
}
long int factorial(int n)
{
if(n<=1)
return(1);
else
return(n*factorial(n-1));
}
Programa Propuestos
1. Disee un programa que calcule la media de una serie de n nmeros (n<=20). El
programa debe hacer uso de una funcin para leer los nmeros y devolver su suma.
2. Disee un programa que use un men de opciones para calcular el rea de un polgono.
En cada opcin se debe invocar a una funcin que calcule el rea del un tringulo, un
cuadrado y un crculo.

Lenguajes de Programacin

Ing. Csar Aldo Canelo Sotelo

3. Disee un programa que ingrese n veces por el teclado 3 nmeros enteros, y mediante
una funcin clasifique dichos nmeros en orden ascendente (n<= 10).
4. Disee un programa que ingrese varios nmeros por el teclado y para cada nmero
ingresado, invoque a una funcin que determine y muestre el factorial del nmero
ingresado.
5. Disee un programa que ingrese n nmeros (n<=10) y para cada nmero ingresado, se
invoque a una funcin que determine si el nmero ingresado es un nmero capica. Los
valores de n y nmero deben ser ledos en la funcin principal. El valor de nmero debe
ser pasado como argumento a la funcin invocada.
6. Disee un programa que determine el promedio de prcticas de los alumnos de un
curso. En el programa principal se deben ingresar las 4 notas, se debe invocar a una
funcin que reciba como argumentos las cuatro notas. La funcin debe determinar el
promedio eliminando la nota ms baja. La funcin debe retornar el promedio y ste
debe mostrarse en la funcin principal.
7. Disee un programa que implemente una funcin bisiesto, que determine si un ao es
o no bisiesto.
8. Disee un programa que utilizando una funcin, ingrese un nmero entero y luego la
imprima en forma invertida.
9. Disee un programa recursivo que calcule los n primeros elementos de la serie de
Fibonacci.
10. Disee un programa que use un men de opciones para calcular el rea de un polgono.
En cada opcin se debe invocar a una funcin que calcule el rea del un tringulo, un
cuadrado y un crculo.
11. Disee un programa que ingrese varios nmeros por el teclado y para cada nmero
ingresado, invoque a una funcin que determine y muestre el factorial del nmero
ingresado.

10

Das könnte Ihnen auch gefallen