Anda di halaman 1dari 28

25-4-2014

San Luis Potos, Mxico.


Unidad 6. Mdulos
Ing. Hctor Bazarte Torres
ITSLP/2014-1
ITSLP/APUNTES DE
PROGRAMACIN BSICA





ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 1
Unidad 6.- Mdulos
6.1 Diferencia entre Funciones y Procedimientos.
6.2 Activacin / Invocacin de Funciones y Procedimientos
6.3 Uso de Funciones y Procedimientos con Parmetros.

Introduccin

Las funciones son los bloques constructores de C, es el lugar donde se produce toda la actividad del
programa. Las funciones realizan una tarea especfica, como mandar a imprimir un mensaje en
pantalla, o abrir un archivo.
Es la caracterstica ms importante de C. Subdivide en varias tareas el programa, as slo se las
tendr que ver con diminutas piezas de programa, de pocas lneas, cuya escritura y correccin es una
tarea simple. Las funciones pueden o no devolver y recibir valores del programa.
Diseo modular de programas: Descomposicin modular
Hasta ahora hemos estado pensando los pasos que deberamos dar para resolver un cierto
problema, y hemos creado programas a partir de cada uno de esos pasos. Esto es razonable cuando
los problemas son sencillos, pero puede no ser la mejor forma de actuar cuando se trata de algo mas
complicado.
A partir de ahora vamos a empezar a intentar descomponer los problemas en trozos mas pequeos,
que sean mas fciles de resolver. Esto nos puede suponer varias ventajas:
Cada trozo de programa independiente ser mas fcil de programar, al realizar una funcin breve y
concreta.
El programa principal ser mas fcil de leer, porque no necesitara contener todos los detalles de
como se hace cada cosa.
Podremos repartir el trabajo, para que cada persona se encargue de realizar un trozo de
programa, y finalmente se integrara el trabajo individual de cada persona.
Esos trozos de programa son lo que suele llamar subrutinas, procedimientos o funciones. En el
lenguaje C, el nombre que ms se usa es el de funciones.
Concepto y caractersticas
Mdulo:
Es aqul que est constituido por una o varias instrucciones fsicamente contiguas y
lgicamente encadenadas, las cuales se pueden referenciar mediante un nombre y pueden
ser llamadas desde diferentes puntos de un programa.




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 2
Un mdulo puede ser:
Un programa
Una funcin
Una subrutina (o procedimiento)
Caractersticas de un Mdulo
Los mdulos deben tener la mxima cohesin y el mnimo acoplamiento. Es decir,
deben tener la mxima independencia entre ellos.
La salida del mdulo debe ser funcin de la entrada, pero no de ningn estado interno.
En la creacin de los mdulos deben cumplirse tres aspectos bsicos: descripcin,
rendimiento y diseo.
En la descripcin se definen las funciones y objetivos del programa. Para obtener el
mximo rendimiento se ha de comprobar que el programa realice el proceso aprovechando
al mximo todos los recursos de los que dispone. En cuanto al diseo, se debe comprobar la
estructura que sigue el mdulo, as como la estructura de los datos y la forma de
comunicaciones entre los diversos y diferentes mdulos.
Conforme se extiende el tamao de los algoritmos, se hace ms difcil su revisin,
actualizacin y/o correccin.
Una poltica comn para solventar este problema consiste en la modularizacin. Esto
significa que el algoritmo se fragmenta en partes llamadas mdulos. En realidad, es un
mtodo de diseo que tiende a dividir el problema, de forma lgica, en partes perfectamente
diferenciadas que pueden ser analizadas, programadas y puestas a punto independiente.
Realmente la programacin modular es un intento para disear programas, de forma tal
que cualquier funcin lgica pueda ser intercambiada sin afectar a otras partes del
programa.
Algunas ventajas de utilizar mdulos son:
Un programa modular es fcil de mantener y modificar.
Un programa modular es ms fcil de escribir y depurar (ejecutar, probar y poner a
punto).




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 3
Un programa modular es ms fcil de controlar. El desglose de un problema en mdulos
permite encomendar los mdulos ms complejos a los programadores ms
experimentados y los ms sencillos a los programadores nveles.
Posibilita el uso repetitivo de las rutinas en el mismo o en diferentes programas.
Desventajas del uso de mdulos:
No se dispone de algoritmos formales de modularidad, por lo que a veces los
programadores no tienen claras las ideas de los mdulos.
La programacin modular requiere ms memoria y tiempo de ejecucin.
Objetivos de la programacin modular:
Disminuir la complejidad.
Aumentar la claridad y fiabilidad.
Disminuir el coste.
Aumentar el control del proyecto.
Facilitar la ampliacin del programa mediante nuevos mdulos.
Facilitar las modificaciones y correcciones al quedar automticamente localizadas en un
mdulo.
Clasificacin de los mdulos
Pueden ser de dos tipos:
Funciones
Procedimientos
Estas funciones y procedimientos se escriben solamente una vez, pero pueden ser
referenciados (invocadas) en diferentes puntos de un programa, tantas veces como se
requiera de modo que se puede evitar la duplicacin innecesaria del cdigo.




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 4
6.1 Diferencia entre funcin y procedimiento
Las funciones y los procedimientos son conjuntos de instrucciones que realizar una tarea en
particular y permiten crear programas complejos, mediante un reparto de tareas que permite
construir el programa de forma estructurada y modular.

Desde un punto de vista acadmico, se entiende por procedimiento el conjunto de
sentencias a las que se asocia un identificador (un nombre), y que realiza una tarea que se
conoce por los cambios que ejerce sobre el conjunto de variables.

Y entendemos por funcin el conjunto de sentencias a las que se asocia un identificador (un
nombre) y que genera un valor nuevo, calculado a partir de los argumentos que recibe.

Los elementos que componen un procedimiento o funcin son:

1. Un identificador, que es el nombre que sirve para invocar a esa funcin o a ese
procedimiento.
2. Una lista de parmetros, que es el conjunto de variables que se facilitan al procedimiento
o funcin para que realice su tarea modularizada. Al hacer la abstraccin del sistema, y
modularlo en partes ms accesibles, hay que especificar los parmetros formales que
permiten la comunicacin y definen el dominio (tipo de dato) de los datos de entrada. Esa
lista de parmetros define el modo en que podrn comunicarse el programa que utiliza la
funcin y la funcin usada.
3. Un cuerpo o conjunto de sentencias. Las necesarias para poder realizar la tarea para la
que ha sido definida la funcin o el procedimiento. Dentro de las sentencias tambin se
encuentran las declaraciones de variables locales.
4. Un entorno. Entendemos por entorno el conjunto de variables globales al procedimiento o
funcin, que pueden ser usadas y modificadas dentro del mbito de la funcin. Esas
variables, por ser globales y por tanto definidas en un mbito ms amplio al mbito local de la
funcin, no necesitan ser explicitadas en la lista de parmetros de la funcin.

Es una prctica desaconsejable trabajar con el entorno de la funcin desde el mbito local de
la funcin. Hacerlo lleva consigo que esa funcin deja de ser independiente de ese entorno y,
por tanto, deja de ser exportable. Perderamos entonces el valor de la independencia
funcional, que es una de las propiedades de la programacin por mdulos.

Podemos pues concluir que el uso de variables globales dentro del cuerpo de un
procedimiento ofuncin es altamente desaconsejable.

En el lenguaje C no se habla habitualmente de procedimientos, sino slo de funciones. Pero
existen de las dos tipos de mdulos. Procedimientos seran, por ejemplo, la funcin printf no
se invoca para calcular valores nuevos, sino para realizar una tarea sobre las variables. Ms
claro se ve con la funcin scanf que, efectivamente, realiza una tarea que se conoce por los
cambios que ejerce sobre una variable concreta. Y funciones seran, por ejemplo, la funcin
strlen, que a partir de una cadena de caracteres que recibe como parmetro de entrada
calcula un valor, que es la longitud de esa cadena; o la funcin sin, que a partir de un ngulo
que recibe como valor de entrada, calcula el seno de ese ngulo como valor de salida.




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 5

En definitiva, una funcin o procedimiento es una porcin de cdigo, identificada con un
nombre concreto (su identificador), que realiza una tarea concreta, que puede ser entendida
de forma independiente al resto del programa, y que tiene muy bien determinado cmo se
hace uso de ella, con qu parmetros se la invoca y bajo qu condiciones puede ser usada,
cul es la tarea que lleva a cabo, y cul es el valor que calcula y devuelve.

Tanto los procedimientos como las funciones pueden ser vistos como cajas negras: un
cdigo del que desconocemos sus sentencias, al que se le puede suministrar unos datos de
entrada y obtener modificaciones para esos valores de entrada y/o el clculo de un nuevo
valor, obtenido a partir de los valores que ha recibido como entrada.

Con eso se consigue programas ms cortos; que el cdigo pueda ser usado ms de una vez;
mayor facilidad para gestionar un correcto orden de ejecucin de sentencias; que las
variables tengan mayor carcter local, y no puedan ser manipuladas fuera del mbito para el
que han sido creadas.
Funciones
Las funciones son bloques de instrucciones que tienen por objeto el alcanzar un
resultado que sustituir a la funcin en el punto de invocacin (las funciones devuelven un
resultado).
Cada funcin se evoca utilizando su nombre en una expresin con los argumentos
actuales o reales encerrados entre parntesis.
Para hacer una referencia a una funcin se invoca mediante un nombre y en caso de
existir, una lista de parmetros actuales necesarios (argumentos). Los argumentos deben
coincidir en cantidad, tipo y orden con los de la funcin que fue definida. La funcin
devuelve un valor nico.
Las funciones a que se hace referencia, se conocen como funciones de usuario puesto
que son definidas por l mismo y permiten su uso en forma idntica a las funciones
estndares. Para coordinar e iniciar el procesamiento, se utiliza un mdulo principal que es
colocado al final del algoritmo.
Declaracin de funciones
funcin nombre_funcin (par1, par2,par3,...) : tipo_del_resultado
Inicio
accin1
accin2




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 6
:
nombre_funcin Resultado_Obtenido
Fin

Donde:
par1,par2 .... Lista de parmetros formales o argumentos.
nombre_funcin Nombre asociado de la funcin, que ser un nombre de identificador
vlido.
accin1, accin2,.. Instrucciones que constituyen la definicin de las funcin, y que
debe contener una accin sola de asignacin que asigne un valor al
nombre de la funcin.
Ejemplo:
Obtener el sexto carcter de un nombre y si dicho carcter no existe, se asumir un
asterisco como tal.
Funcin SEXTO(n:string):carcter
Inicio
si longitud(n) >= 6 entonces
SEXTO Subcadena(n,6,1)
en caso contrario
SEXTO *
Fin
Invocacin a las funciones
Una funcin puede ser llamada slo mediante referencia de la forma siguiente:
nombre_funcin (lista de parmetros actuales)




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 7
Donde:
nombre_funcin Funcin que llama.
Lista de param. actuales Constantes, variables, expresiones, valores de funciones,
nombres de funciones o procedimientos.
Una llamada a la funcin implica los siguientes pasos:
A cada parmetro formal se le asigna el valor real de su correspondiente parmetro
actual (esta correspondencia se ver ms tarde y se denomina llamada por valor).

Se ejecuta el cuerpo de acciones de la funcin.

Se devuelve el valor de la funcin y se retorna al punto de llamada.
Ejercicio:
Calcular la potencia de un nmero.
funcion POTENCIA(x,n :entero): entero
Inicio
y 1
Desde i 1 hasta abs(n) hacer
y y*x
fin Desde
si n < 0 entonces
y 1/y
Fin si
POTENCIA y
Fin




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 8
Operacin de Mdulos y sus Parmetros
PASO DE PARAMETROS
Existen diferentes mtodos para el paso de parmetros a subprogramas, un mismo
programa puede producir diferentes resultados bajo diferentes sistemas de paso de
parmetros.
Los parmetros se clasifican de la siguiente manera:
1. Entradas: Las entradas proporcionan valores desde el programa que llama y que se
utilizan dentro de un procedimiento. En los subprogramas funcin las entradas son los
argumentos en el sentido tradicional.
2. Salidas: Las salidas producen los resultados del subprograma; de nuevo si se utiliza
el caso una funcin, mientras que con procedimientos pueden calcularse cero, una o varias
salidas.
3. Entradas/Salidas: Un solo parmetro se utiliza para mandar argumentos a un
programa y para devolver resultados.
Los mtodos ms empleados para realizar el paso de parmetros son:
Paso por valor (parmetro valor).
Paso por referencia o direccin (parmetro variable).
PASO POR VALOR
Se utiliza en muchos lenguajes de programacin (pascal, basic, modula-2, algol, etc),
debido a su analoga con los argumentos de una funcin, donde los valores se proporcionan
en el orden de clculo de resultados. Los parmetros se tratan como variables locales y los
valores iniciales se proporcionan copiando los valores de los correspondientes argumentos.
Los parmetros formales (locales a la funcin), reciben como valores iniciales los valores
de los parmetros actuales y con ello se ejecutan las acciones descritas en el subprograma.
La llamada por valor no devuelve informacin al programa que llama.
PASO POR REFERENCIA
Se utiliza cuando se requiere que ciertos parmetros sirvan como parmetros de salida, es
decir, devuelvan los resultados a la unidad o programas que llama. La unidad que llama
pasa a la unidad llamada la direccin del parmetro actual (que est en el mbito de la




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 9
unidad llamante). Una referencia al correspondiente parmetro formal se tratra como una
referncia a la posicin de memoria, cuya direccin se ha pasado. Entonces una variable
pasada como parmetro real es compartida, es decir, se puede modificar directamente por el
subprograma. Si el parmetro actual es una expresin, el subprograma recibe la direccin de
la posicin temporal que contiene el valor de la expresin.








6.4 Funciones definidas por el usuario

El mecanismo para trabajar con funciones es el siguiente, primero debemos declarar el prototipo de
la funcin, a continuacin debemos hacer la llamada y por ltimo desarrollar la funcin. Los dos
ltimos pasos pueden cambiar, es decir, no es necesario que el desarrollo de la funcin est debajo
de la llamada.

Antes de seguir debemos conocer las reglas de mbito de las funciones. El cdigo de una funcin es
privado a ella, el cdigo que comprende su cuerpo est oculto al resto del programa a menos que se
haga a travs de una llamada. Todas las variables que se definen dentro de una funcin son locales
con excepcin de las variables estticas.

SINTAXIS DEL PROTOTIPO:

tipo_devuelto nombre_funcion ([parmetros]);

SINTAXIS DE LA LLAMADA:

nombre_funcion ([parmetros]);

SINTAXIS DEL DESARROLLO:




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 10

tipo_devuelto nombre_funcion ([parmetros])
{
cuerpo;
}

Ejercicio 4.5.
Un mensaje es desplegado a travs de una funcin.

#include <stdio.h>
void saludo();
void primer_mensaje();
void main ( )
{
saludo();
primer_mensaje();
}
void saludo()
{
printf ("Buenos dias\n");
83
}
void primer_mensaje()
{
printf("Un programa esta formado ");
printf("por funciones\n");
}




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 11

La funcin primer_mensaje despliega un mensaje en pantalla, esta funcin es llamada desde la
funcin principal o main ().
Cuando se declaran las funciones es necesario informar al compilador el tamao de los valores que
se le enviarn y el tamao del valor que retorna. En el caso de no indicar nada para el valor devuelto
toma por defecto el valor int.

Al llamar a una funcin se puede hacer la llamada por valor o por referencia. En el caso de hacerla
por valor se copia el contenido del argumento al parmetro de la funcin, es decir, si se producen
cambios en el parmetro no afecta a los argumentos. C utiliza esta llamada por defecto. Cuando se
utiliza la llamada por referencia lo que se pasa a la funcin es la direccin de memoria del argumento,
por tanto, si se producen cambios, afectan tambin al argumento. La llamada a una funcin se puede
hacer tantas veces como se quiera.

PRIMER TIPO: Las funciones de este tipo ni devuelven valor ni se les pasan parmetros. En este
caso hay que indicarle que el valor que devuelve es de tipo void, y para indicarle que no recibir
parmetros tambin utilizamos el tipo void. Cuando realizamos la llamada no hace falta indicarle
nada, se abren y cierran los parntesis.

void nombre_funcion (void);
nombre_funcion();

Ejercicio 4.6.
El siguiente programa es muy similar al anterior, este tipo de funciones no tienen parmetros ni
devuelven ningn valor.

#include <stdio.h>
#include <conio.h>
void mostrar(void);
void main(void)
{
printf("Estoy en la principal\n");




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 12
mostrar();
printf("De vuelta en la principal");
getch();
}
void mostrar(void)
{
printf("Ahora he pasado a la funcin, presione
cualquier tecla\n");
getch();
}

SEGUNDO TIPO: Son funciones que devuelven un valor una vez que han terminado de realizar sus
operaciones, slo se puede devolver uno. La devolucin se realiza mediante la sentencia return, que
adems de devolver un valor hace que la ejecucin del programa vuelva al cdigo que llam a esa
funcin. Al compilador hay que indicarle el tipo de valor que se va a devolver poniendo delante del
nombre de la funcin el tipo a devolver. En este tipo de casos la funcin es como si fuera una
variable, pues toda ella equivale al valor que devuelve.

tipo_devuelto nombre_funcion (void);
variable = nombre_funcion ();

Ejercicio 4.7.



Este programa calcula la suma de dos nmeros introducidos por el usuario, la funcin suma ()
devuelve el resultado de la operacin a la funcin principal a travs de la funcin return ().

#include <stdio.h>
#include <conio.h>




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 13
int suma(void);
void main(void)
{
int total;
printf("Suma valores\n");
total=suma();
printf("\n%d",total);
getch();
}
int suma(void)
{
int a,b,total_dev;
printf("valores: ");
scanf("%d %d",&a,&b);
total_dev=a+b;
return total_dev;
}

TERCER TIPO: En este tipo las funciones pueden o no devolver valores pero lo importante es que las
funciones pueden recibir valores. Hay que indicar al compilador cuntos valores recibe y de qu tipo
es cada uno de ellos. Se le indica ponindolo en los parntesis que tienen las funciones. Deben ser
los mismos que en el prototipo.

void nombre_funcion (tipo1, tipo2tipoN);
nombre_funcion (var1, var2varN);

Ejercicio 4.8.




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 14
Este programa utiliza una funcin de nombre resta(), que tiene dos parmetros, los parmetros son
los operandos de una resta, adems la funcin devuelve el resultado de la operacin a la funcin
principal a travs de la funcin return().

#include<stdio.h>
int resta(int x, int y); /*prototipo de la funcin*/
main()
{
int a=5;
int b=93;
int c;
c=resta(a,b);
printf("La diferencia es: %d\n",c);
return(0);
}
int resta(int x, int y) /*declaracion de la funcin*/
{
int z;
z=y-x;
return(z); /*tipo devuelto por la funcin*/
}

Ejercicio 4.9.
Realiza un programa que lea un nmero entero y determine si es par o impar.

/*Lee un numero entero y determina si es par o impar */
#include <stdio.h>
#define MOD %




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 15
/* %, es el operador que obtiene el resto de la divisin
entera */
#define EQ ==
#define NE !=
#define SI 1
#define NO 0
void main ( )
{
int n, es_impar(int);
printf ("Introduzca un entero: \n");
scanf ("%d", &n);
if ( es_impar (n) EQ SI )
printf ("El numero %d es impar. \n", n);
else
printf ("El numero %d no es impar. \n", n);
}
int es_impar (int x)
{
int respuesta;
if ( x MOD 2 NE 0 ) respuesta=SI;
else
respuesta=NO;
return (respuesta);
}

Ejercicio 4.10.
Realiza un programa en C que sume, reste, multiplicaque y divida con datos introducidos por el
usuario.




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 16

#include<stdio.h>
int resta(int x, int y); /*prototipo de la funcin*/
int suma(int x, int y); /*prototipo de la funcin*/
main()
{
int a,b,c,d;
printf("Introduce el valor de a: ");
scanf("%d",&a);
printf("\nIntroduce el valor de b: ");
scanf("%d",&b);
c=resta(a,b);
d=suma(a,b);
printf("La diferencia es: %d\n",c);
printf("La suma es: %d\n",d);
return(0);
}
int resta(int x, int y) /*declaracin de la funcin*/
{
int z;
z=y-x;
return(z); /*tipo devuelto por la funcin*/
}
int suma(int x, int y) /*declaracin de la funcin*/
{
int z;
z=y+x;




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 17
return(z); /*tipo devuelto por la funcin*/
}

Ejercicio 4.11.
Realiza una funcin que eleve un nmero al cubo.

#include<stdio.h>
int cubo(int base);
void main(void)
{
int res,num;
printf("Introduzca un numero:");
scanf(" %d",&num);
res=cubo(num);
printf("El cubo de %d es: %d\n",num,res);
}
int cubo(int x)
{
int cubo_res;
cubo_res=x*x*x;
return(cubo_res);
}

Ejercicio 4.12.
Realiza una funcin que eleve un nmero a un exponente cualquiera.

#include<stdio.h>




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 18
int cubo(int base,int expo);
void main(void)
{
int res,num,ex;
printf("Introduzca una base:");
scanf(" %d",&num);
printf("Introduzca un exponente:");
scanf(" %d",&ex);
res=cubo(num,ex);
printf("El numero %d elevado es: %d\n",num,res);
}
int cubo(int x, int y)
{
int i,acum=1;
for(i=1;i<=y;i++)
acum=acum*x;
return(acum);
}

Ejercicio 4.13.
Realiza una funcin que obtenga la raz cuadrada de un nmero.

# include <stdio.h>
# include <math.h>
void impresion(void);
main()
{




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 19
printf("Este programa extraer una raiz
cuadrada.\n\n");
impresion();
return(0);
}
void impresion(void)
{
double z=4;
double x;
x=sqrt(z);
printf("La raz cuadrada de %lf es %lf \n",z,x);
}
Nota: mbito de variables (locales y globales)
Las variables son locales cuando se declaran dentro de una funcin. Las variables locales slo
pueden ser referenciadas (utilizadas) por sentencias que estn dentro de la funcin donde han sido
declaradas.
Las variables son globales cuando son conocidas a lo largo de todo el programa, y se pueden usar
desde cualquier parte del cdigo. Mantienen sus valores durante toda la ejecucin. Deben ser
declaradas fuera de todas las funciones incluida main ().
Parmetros de una funcin
Es muy frecuente que nos interese adems indicarle a nuestra funcin ciertos datos especiales con
los que queremos que trabaje. Por ejemplo, si escribimos en pantalla nmeros reales con frecuencia,
nos puede resultar til que nos los muestre con el formato que nos interese. Lo podramos hacer as:
escribeNumeroReal ( float n ) {
printf ("%4.2f", n);
}
Y esta funcin se podra usar desde el cuerpo de nuestro programa as:
float x;
main() {
x= 5.1;




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 20
printf("El primer numero real es: ");
escribeNumeroReal(x);
printf(" y otro distinto es: ");
escribeNumeroReal(2.3);
}

Estos datos adicionales que indicamos a la funcin es lo que llamaremos sus parmetros.
Como se ve en el ejemplo, tenemos que indicar un nombre para cada parmetro (puede haber varios)
y el tipo de datos que corresponde a ese parmetro. Si hay mas de un parmetro, deberemos indicar
el tipo y el nombre para cada uno de ellos:

sumar ( int x, int y ) {
...
}
Valor devuelto por una funcin
Tambin es habitual que queramos que nuestra funcin realice una serie de clculos y nos
devuelva el resultado de esos clculos, para poderlo usar desde cualquier otra parte de nuestro
programa. Por ejemplo, podramos crear una funcin para elevar un nmero entero al cuadrado as:

int cuadrado ( int n ) {
return n*n;
}
main() {
int numero;
int resultado;
numero= 5;
resultado = cuadrado(numero);
printf("El cuadrado del numero es %d", resultado);




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 21
printf(" y el de 3 es %d", cuadrado(3));
}

Podemos hacer una funcin que nos diga cual es el mayor de dos nmeros reales as:

float mayor ( float n1, float n2 ) {
if (n1>n2)
return n1;
else
return n2;
}
Invocacin a las funciones
Una funcin puede ser llamada slo mediante referencia de la forma siguiente:
nombre_funcin (lista de parmetros actuales)
Donde:
nombre_funcin Funcin que llama.
Lista de param. actuales Constantes, variables, expresiones, valores de funciones,
nombres de funciones o procedimientos.
Una llamada a la funcin implica los siguientes pasos:
A cada parmetro formal se le asigna el valor real de su correspondiente parmetro
actual (esta correspondencia se ver ms tarde y se denomina llamada por valor).

Se ejecuta el cuerpo de acciones de la funcin.

Se devuelve el valor de la funcin y se retorna al punto de llamada.
Ejercicio:




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 22
Calcular la potencia de un nmero.
funcion POTENCIA(x,n :entero): entero
Inicio
y 1
Desde i 1 hasta abs(n) hacer
y y*x
fin Desde
si n < 0 entonces
y 1/y
Fin si
POTENCIA y
Fin
Los mtodos ms empleados para realizar el paso de parmetros son:
Paso por valor (parmetro valor).
Paso por referencia o direccin (parmetro variable).


Elaboracin de programas
1. El siguiente programa calcula el cubo de los nmeros del 1 al 5 utilizando una funcin definida por
el usuario.




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 23





ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 24
2. Vamos a acceder a las funciones primera y segunda desde la funcin main.




prctico

3. Utilizacin del mismo identificador de variable en diferentes funciones mostrando su localidad.




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 25

Crear una funcin que borre la pantalla dibujando 25 lneas en blanco. No debe devolver ningn
valor.
Crear una funcin que calcule el cubo de un numero real (float). El resultado deber ser otro nmero
real. Probar esta funcin para calcular el cubo de 3.2 y el de 5.
Crear una funcin que calcule cual es el menor de dos nmeros enteros. El resultado ser otro
nmero entero.
Crear una funcin llamada signo, que reciba un nmero real, y devuelva un nmero entero con el
valor: -1 si el nmero es negativo, 1 si es positivo o 0 si es cero.
Crear una funcin que devuelva la primera letra de una cadena de texto. Probar esta funcin para
calcular la primera letra de la frase Hola
Crear una funcin que devuelva la ltima letra de una cadena de texto. Probar esta funcin para
calcular la ltima letra de la frase Hola.
Crear una funcin que borre la pantalla dibujando 25 lneas en blanco. No debe devolver ningn
valor.




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 26
Crear una funcin que reciba un nmero y muestre en pantalla el permetro y la superficie de un
cuadrado que tenga como lado el nmero que se ha indicado como parmetro.
Crear una funcin pedirEntero, que reciba como parmetros el texto que se debe mostrar en
pantalla, el valor mnimo aceptable y el valor mximo aceptable. Deber pedir al usuario que
introduzca el valor tantas veces como sea necesario, volvrselo a pedir en caso de error, y devolver
un valor correcto. Probarlo con un programa que pida al usuario un ano entre 1800 y 2100.
Crear una funcin escribirTablaMultiplicar, que reciba como parmetro un nmero entero, y escriba
la tabla de multiplicar de ese numero (por ejemplo, para el 3 deber llegar desde 3x0=0 hasta
3x10=30).
Crear una funcin esPrimo, que reciba un numero y devuelva el valor 1 si es un numero primo o 0
en caso contrario.
Crear una funcin que reciba una cadena y una letra, y devuelva la cantidad de veces que dicha
letra aparece en la cadena. Por ejemplo, si la cadena es "Barcelona" y la letra es 'a', debera devolver
2 (aparece 2 veces).
Crear una funcin que reciba un nmero cualquiera y que devuelva como resultado la suma de sus
dgitos. Por ejemplo, si el nmero fuera 123 la suma seria 6.
Crear una funcin que reciba una letra y un nmero, y escriba un triangulo formado por esa letra,
que tenga como anchura inicial la que se ha indicado. Por ejemplo, si la letra es * y la anchura es 4,
debera escribir
****
***
**
*
1. Escribir el programa que ordena las lneas de un texto ledo desde la entrada estndar, donde
cada lnea tiene diferente longitud, segn lo descrito en la seccin de arreglo de
apuntadores.
2. Escribir una funcin que convierta una cadena s a un nmero de punto flotante usando
apuntadores. Considerar que el nmero tiene el siguiente formato 99999999.999999, es
decir, no se dar en notacin cientfica. La funcin deber suministrrsele una cadena y
deber devolver un nmero.
3. Escribir un programa que encuentre el nmero de veces que una palabra dada (esto es, una
cadena corta) ocurre en una sentencia (una cadena larga).
Leer los datos de la entrada estndar. La primera lnea es una sola palabra, en la
segunda lnea se tiene un texto general. Leer ambas hasta encontrar un caracter de
nueva lnea. Recordar que se debe insertar un caracter nulo antes de procesar.
La salida tpica podra ser:




ITSLP/APUNTES DE PROGRAMACIN BSICA 2014
U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s

Pgina 27
La palabra es "el"
La sentencia es "el perro, el gato y el canario"
La palabra ocurrio 3 veces.

Anda mungkin juga menyukai