Sesión 05: Repaso C (2) - Funciones
Repaso
Diagrama de Flujo
Vble1
Vble2
Vble3
.
vbleN
Vble1 <- vble
Vble2 <- valor
Vble3 <- constante
. . .
VbleN <- expresión
NO (falsa)
SI (verdadera)
CONDICION
secuencias
1
secuencias
2
VBLE_CONTROL
Valor 1
secuencias
1
Valor 2
secuencias
1
OtrosValores
. . .
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
Pseudocódigo
Otras
secuencias
<- vble
<- valor
<- constante
. .
<- expresión
SI (condicion) ENTONCES
secuencia 1 | camino 1
SINO
Secuencia 2 | camino 2
FIN_SI
SEGUN(vble_control)HAGA
valor 1
secuencias 1
valor 2
secuencias 2
. . .
otrosValores
otras secuencias
FIN_SEGUN
Lenguaje C
Vble1
Vble2
Vble3
.
vbleN
=
=
=
.
=
vble;
valor;
constante;
.
expresión;
if (condicion) {
código_secuencia1;
}
else {
código_secuencia2;
}
switch(vble_control) {
case 1: cod_secuencia1;
break;
case 2: cod_secuencia2;
break;
. . .
default: cod_secuencias;
}
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Repaso
Diagrama de Flujo
Pseudocódigo
Lenguaje C
Falso
MQ(CONDICIÓN)
MIENTRAS(condición)HAGA
secuencia
FIN_MIENTRAS
verdadero
Cuerpo del bucle
while(condición){
secuencia;
}
Falso
PARA VC DESDE LI HASTA LF DE INC HAGA
secuencia
FIN_PARA
PARA VC=LI, LF,INC
verdadero
Cuerpo del bucle
Cuerpo del
bucle
verdadero
MQ(CONDICIÓN)
HAGA
secuencia
MIENTRAS QUE(condición)
for(expre1;expre2;expre3){
secuencia;
}
do{
secuencia
}while(condición);
Falso
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
A continuación…
Introducción a las Funciones
Estructura de las funciones
Variables y Funciones
Archivos de cabecera
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Estructura de un programa
/*Encabezado
Titulo:
Autor:
Fecha:
Descripción:
//Directivas
#include <librerias.h>
#define MACROS
//Inicio
int main (void){
//Declaración Variables Locales
//Ingreso de Datos
//Proceso
return 0;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Estructura de un programa
 Se tiene un solo archivo fuente.
 Todo lo que hace el programa se implementa
dentro de la función main.
 Sólo hemos declarado variables locales.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
#include <stdio.h>
ProblemasRepetición
de esta metodología
int main(void){
int a[3],b[3],c[3];
int i;
de código
printf(" Ingrese el vector: ");
1
for(i=0;i<3;i++) {
scanf("%d",&a[i]);
}
printf(" vec1 = [%d %d %d]\n\n",a[0],a[1],a[2]);
2
printf(" Ingrese el vector: ");
1
for(i=0;i<3;i++) {
scanf("%d",&b[i]);
}
printf(" vec2 = [%d %d %d]\n\n",b[0],b[1],b[2]);
2
for(i=0;i<3;i++) {
c[i]=a[i]+b[i];
}
printf(" vec3 = [%d %d %d]\n\n",c[0],c[1],c[2]);
2
Código
Repetitivo y
engorroso
return 0;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Problemas de esta metodología
• Programación repetida.
• A medida que el problema se hace mas complejo
el main tiende a crecer mucho y hacerse mas
difícil de entender.
• Poca reutilización de código.
Solución al problema: USO DE
FUNCIONES
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Ventajas del uso de funciones
1
2
3
• Al dividir el problema en módulos o partes se
comprende más fácilmente
• Al hacer modificaciones es más fácil sobre un
módulo en particular que en todo el algoritmo.
• En cuanto a los resultados, se probarán mucho mejor
comprobando si cada módulo da el resultado correcto que
si se intenta probar de un golpe todo el programa
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Ventajas del uso de funciones
MOD 1.1.1
MOD 1.1
P
R
O
C
E
S
O
MOD 1
MOD 1.1.2
=
MOD 1.2.1
MOD 1.2
=
MOD 1.2.2
=
MOD 2.1.1
MOD 2.1
MOD 2
=
MOD 2.1.2
=
MOD 2.2.1
MOD 2.2
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
=
=
MOD 2.2.2
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Funciones
Conjunto de instrucciones que realizan una
acción especifica y que tienen un nombre que
las representa.
printf(“la vble es: %d”, vble);
potencia = pow(base,exp);
raiz = sqrt(vble);
Una función sirve para facilitar la programación,
ahorrar espacio, tiempo y para facilitar la
portabilidad de los programas.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Funciones
 La forma más razonable de encarar el desarrollo
de un programa complicado es aplicar lo que se
ha dado en llamar "Programación Top – Down”.
 Esto implica que, luego de conocer cual es la
meta a alcanzar, se subdivide esta en varias
tareas.
 Luego a estas se las vuelve a dividir en otras
menores. Y así se continúa hasta llegar a tener
un gran conjunto de pequeñas y simples tareas.
 Luego sólo queda resolver cada una de ellas
por separado.

Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Funciones
 Tal es el criterio con que está
estructurado el lenguaje C, que una de
sus herramientas fundamentales son
las funciones.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Funciones
Todo programa tiene al menos una función:
int main (void){
...
}
Desde la funcion main se puede estructurar todo
el programa por medio de llamados a las
Funciones
PROGRAMA
PROGRAMA
main()
main()
f1
f4
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
f2
f3
fn
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Funciones
main()
f2()
f1()
f3()
f4()
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Funciones
Programa
int Main(void)
{
int a, b;
Func1();
--------------Func2();
--------------return 0;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
Func1
__
__
__
return
Func2
Func3
__
__
__
return
---Func3()
---return
16
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Funciones
 El uso de funciones permite dividir grandes
tareas.
 Se ahorra programación repetida.
 Se evita reinventar la rueda gracias a la
reutilización de código.
 Hace que los programas sean más modulares,
mas fáciles de leer y mas fáciles de editar .
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Funciones
Las funciones permiten agrupar una serie de
operaciones de tal manera que se puedan
utilizar más tarde sin tener que preocuparnos
por
cómo
están
implementadas,
simplemente sabiendo lo que harán.
El uso de funciones es una práctica común y
recomendable ya que permite modularizar
nuestro código, simplificando así el desarrollo y la
depuración del mismo.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Ejemplo
Programa que recibe el radio de una esfera y
calcula el volumen y el area de la superficie de la
esfera y los muestra.
#include <stdio.h>
int main (void)
{
float r,v,a;
r = leaRadio ();
v= calVolumen (r);
a= calArea (r);
muestreArVol (a,v);
return 0;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
A continuación…
Introducción a las Funciones
Estructura de las funciones
Variables y Funciones
Archivos de cabecera
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Partes de una Función
En el momento de crear mi_función
debo seguir tres pasos fundamentales:
1
2
3
• Declaración del prototipo de la función
• Definición de la función
• Llamado a la función
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
1
Prototipo de una Función
Consiste en informarle al Compilador los
tamaños de los valores que se le enviarán y el
tamaño de los valores que ella retornará al
programa invocante. Convencionalmente se
escribe al principio del programa
tipo_retorno nombre(tipo_1 param_1, tipo_N param_N);
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Prototipo de una Función
tipo_retorno nombre(tipo_1 param_1, tipo_N param_N);
tipo_retorno
Es un tipo de dato de los que maneja C (int, float, char,…..). Si la
función no retorna nada, en ese lugar se utiliza la palabra void.
nombre
Es el nombre de la función es el nombre que le damos al conjunto de
instrucciones que ella representa.
tipo_dato_parametros
Son todos aquellos tipos de los parámetros que la función necesita
para su funcionamiento. Si la función no necesita parámetros se
escribe la palabra “void”.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Ejemplo prototipo funciones
tipo_retorno nombre(lista_Parametros);
float mi_funcion(int i, int j) ;
int otra_funcion(void) ;
void otra_mas(float p) ;
char la_ultima_funcion(float z, char y, int x) ;
Nota: En el prototipo no es necesario indicar variables.
Sólo el tipo de dato. Si se indican variables el compilador
no las toma en cuenta
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Ejemplo prototipo funciones
• Escribir el prototipo de función para la suma de dos
números flotantes
• float suma(float num1, float num2);
• float suma(float, float);
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
2
Definición de la función
 La definición de la función consiste en expresar
COMO la funcion va a realizar su tarea.
 Se comienza poniendo el encabezado de la
función y entre “{ }” se expresan las instrucciones
de la funcion
float suma(float num1, float num2){
...
...
...
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
2
Definición de la función
Tipo de dato retornado
por la función
Nombre de la función
Cuerpo de la
función
float suma(float num1, float num2){
float res;
Argumentos a la
res = num1 + num2;
función.
return res;
}
Variable retornada por la función
•En el campo de los parametros, se estan declarando variables.
•En el cuerpo de la funcion:
Se pueden declarar todas las variables necesarias y pueden
operarse.
Se utiliza la palabra return para expresar cual va a ser el valor
que la funcion va a devolver!!!
Compare esta funcion con la funcion main() !!!!
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Definición de la función
La definición de una función puede ubicarse en
cualquier lugar del programa, con sólo dos
restricciones:
1. Debe hallarse luego de su prototipo.
2. No puede estar dentro de la definición de otra
función ( incluida main() ).
La definición
debe
comenzar
con un
encabezamiento, que debe coincidir totalmente
con el prototipo declarado para la misma, y a
continuación del mismo, encerradas por llaves se
escribirán las sentencias que la componen
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Definición de la función
• Una función debe ser declarada antes de ser usado, por ello suele ser
común colocar las declaraciones antes de la función main.
#include <archivo_cabecera>
protipo_funciones;
declaracion_variables_globales;
int main(void) {
declaracion_variables_locales;
funcion_1();
funcion_2();
. . .
funcion_N();
return 0;
}
funcion_1() {
codigo_funcion_1;
}
. . .
funcion_N() {
codigo_funcion_N;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
#include <archivo_cabecera>
float suma(float,float);
int main() {
. . .
return 0;
}
float suma(float num1, float num2)
{
float res;
res = num1 + num2;
return res;
}
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Definición de la función
void saludar(void) {
printf(“Hola
parce!!\n”);
}
void re_saludar(int N){
int i;
for(i=0;i<N;i++) {
printf(“Hola !!\n”);
}
}
int ver_algo(void){
return algo;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
Para indicar no retorno de
datos se usa la palabra clave
void,
hay
tres
casos
básicamente:
1. Cuando una función no
tiene
argumentos
de
entrada ni retorna nada.
2. Cuando una función tiene
argumentos de entrada
pero no devuelve nada.
3. Cuando una funcion no
pide
argumentos
de
entrada pero devuelve
algo.
2010/1
Universidad
2009/1
2010/1
Santo Tomás
3
Llamado a la función
Una vez se ha declarado y definido la función,
podemos pasar a la fase en el que la funcion ya se
puede utilizar.
raiz=sqrt(a);
printf(¨el valor es: %d¨, val );
Para hacer que las instrucciones contenidas en una
función, se ejecuten en determinado momento, no es
necesario más que escribir su nombre como una línea de
sentencia en el programa.
varRetorno = nomb_funcion(TipoDatosParametros);
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Llamado a la función
Convencionalmente en C los nombres de las
funciones se escriben en minúscula y siguen las
reglas de las variables, se distinguen de las
variables porque van seguidas de parentesis.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Llamado a la función
varRetorno = nomb_funcion(TipoDatosParametros);
#include <stdio.h>
0
float suma(float,float);
int main() {
f1();
f2();
return 0;
}
f1(){
. . .
}
main()
1
f1()
3
2
7
FIN
6
f2()
5
4
f3()
f2() {
f3();
. . .
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Llamado a Funciones
 Para hacer que las instrucciones contenidas en una
función, se ejecuten en determinado momento, no
es necesario más que escribir su nombre como una
línea de sentencia en el programa.
 Dentro de esos paréntesis está ubicados los datos
que se les pasan a las funciones. Está permitido
pasarles ninguno ó una lista de ellos separados por
comas, por ejemplo:
 raiz=sqrt(a), printf(¨el valor es: %d¨, val ) .
 El valor de retorno puede ser cargado a una
variable o no (Depende del programador).
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Llamado a la función
#include <stdio.h>
float suma(float,float);
int main() {
int a = 3, b = 2, c = 0, d
= 3;
int e, f, g, h, i, k;
d = suma(2,-4);
c = suma(a,b);
f = suma(2,c++);
g = suma(++c,d++);
h = suma(suma(1,a),d);
return 0;
}
float suma(float num1, float
num2) {
float res;
res = num1 + num2;
return res;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
Una
función
se
puede invocar las
veces que se desee.
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Ejemplos
Realice el prototipo y la definición de la funcion invocada en el main()
int doble(int);
Prototipo
#include <stdio.h>
void main(){
int x,resul;
scanf(“%d”,&x);
resul=doble(x);
printf(“El doble de %d es %d”,x,resul);
}
int doble(int n){
int y;
y= 2*n;
return y;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
Llamado
Definición
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Ejemplos
#include <stdio.h>
• Realizar
programa
que pida dos números y que
int mayor(int
a,int b); //Prototipo
Prototipo
encuentre el mayor, realice una función mayor() que
int mayor(int a,int b){ //Definicion Func.
sea
la que encuentre el mayor entre dos #s.
if (a>b){
return a;
}
else{
return b;
}
Definición
}
int main(void){
int num1,num2,num3;
printf(“Ingrese 2 #s a comparar”);
scanf(“%d%d”, &num1,&num2);
num3=mayor(num1,num2);
printf(“El mayor es: %d”, num3);
return 0;
Circuitos
Digitales
} Digitales
Circuitos
Sistemas
Digitales
III
II III
Llamado
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Ejemplos
• Realice programa que sume dos numeros.
Hagalo utlizando una funcion que se llame
suma()
Prototipo
Llamado
Definición
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
A continuación…
Introducción a las Funciones
Estructura de las funciones
Variables y Funciones
Archivos de cabecera
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Param. por valor
Parámetros a Funciones
Cuando se hace un llamado a una
función, si la función tiene lista de
parámetros,
estos
parametros
pueden ser pasados a las función
para que los procese, de la siguiente
manera:
–Por valor.
–Por referencia(Apuntadores).
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo 40
Tomás
Param. por valor
Parámetros a Funciones
Por Valor: El dato se le pasa a la función,
realizandole una copia en memoria al
valor de la variable y NO se le pasa la
variables en sí.
• Se garantiza que dicha variable no sea
afectada de ninguna manera por la función
invocada.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo 41
Tomás
Ejemplo
#include <stdio.h>
void doble(int); //prototipo Func doble
int main(void){
int cont;
for(cont=0; cont<4; cont++){
printf(“cont en main es: %d”,cont);
doble(cont);
printf(“cont en main es: %d”,cont);
}
return 0;
}
Escribir que valores de
la variable cont son
impresos en pantalla
por
el
siguiente
programa.
void doble(int cont){
printf(“cont en doble es: %d”,cont);
cont=2*cont;
printf(“cont en doble es: %d”,cont);
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo 42
Tomás
Visibilidad y Duración
La visibilidad o Scope de una variable es la parte del
programa en la que esa variable está definida y puede ser
utilizada.
La duración o Lifetime hace referencia al tiempo que
transcurre entre la creación de una variable y el instante
en que es destruida.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo 43
Tomás
Clasificación de Variables
LocalesAutomaticas
Una variable local se
declara dentro de una
función, son visibles solo
dentro de la funcion
Ocultan
a
las
variables globales
con
el
mismo
nombre.
“Nacen” y “mueren”
con la función. A no
ser que se declaren
(static)
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
Globales
Una variable global se
declara fuera de todas
las funciones es visible
en todo el programa
Se le puede cambiar el
valor en cualquier parte
del
programa
y
lo
mantiene.
Se
recomienda
usar
pocas o ninguna variable
global.
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Clasificación de Variables
• Si son variables automatica(por defecto), la
variable se crea y se destruye cada vez que
pasa por el bloque.
• Si es una variable static, la duración de dicha
variable es hasta que finalice el programa.
• Las Variables Globales existen durante todo
el programa.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Visibilidad y Duración
Ejemplo
#include <stdio.h>
void contCinco(void); //prototipo Func.
Analice el
siguiente
programa: Prueba
de escritorio
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
int main(void){
int cont;
for(cont=0; cont<10; cont++){
printf("cont en main es: %d \n",cont);
contCinco ();
}
return 0;
}
void contCinco(void){
static int contStatic=1;
int cont;
for(cont=contStatic;cont<contStatic+5;cont++){
printf("cont en funcion es: %d \n",cont);
}
contStatic=cont;
}
2010/1
Universidad
2009/1
2010/1
Santo 46
Tomás
Ejemplo
#include <stdio.h>
void contCinco(void); //prototipo Func.
int cont=0;
int main(void){
while(cont<10){
printf("cont en main es: %d \n",cont);
contCinco ();
cont++;
}
return 0;
}
Analice el
siguiente
programa: Prueba
de escritorio
void contCinco(void){
static int contStatic=1;
for(cont=contStatic;cont<contStatic+2;cont++){
printf("cont en funcion es: %d \n",cont);
}
contStatic=cont;
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo 47
Tomás
Resumen
El ámbito de un elemento en C depende de donde se sitúe la definición y de los
modificadores que le acompañan.
En resumen, se puede decir que un elemento definido dentro de una función tiene
ámbito local, o si se define fuera de cualquier función, se dice que tiene un ámbito
global.
program.c
#include < libreriaX.h>
#define CONST 10
int funcion1(void); //Prototipo de funcion1
/*Las vbles. declaradas aquí tienen un ambito global. Cualquier función dentro de este mismo
archivo puede hacer uso de ellas.*/
int main(void)
{
…..
}
int funcion1()
{
/*Las vbles. declaradas aquí tienen un ambito local a funcion1. Ninguna otra función puede hacer
uso de ellas.*/
/*Los apuntadores le permiten a otras funciones manipular estas vbles*/
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
#include <stdio.h>
#define N 2
//prototipo Funciones
int ingresoDato (void);
int suma (int a, int b);
int acum1 (void);
int acum2 (void);
void mostrar(void);
int z=0;
int main (void){
int x, y, a, b;
x = ingresoDato();
y = ingresoDato();
z = suma (x,y);
for (i=0; i<N; i++){
a = acum1 ();
b = acum2 ();
}
mostrar();
return 0
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
int ingresoDatos (void){
int a;
printf(“Ingrese el dato: %d\n",cont);
scanf(“%d”, &a);
return a;
}
int suma (int a, int b){
int c = 0;
c = a + b++;
return c;
}
int acum1 (void){
int cont1 = 0;
cont1 = suma(cont1,1);
return cont1;
}
z x y a b a b c cont1cont2
0 2
8 3 5 1
1 5
3 5
0
8
6 0
0
1
0
0
1
2
int acum2 (void){
static int cont2 = 0;
cont2 = suma(cont2,1);
return cont2;
}
void mostrar (void){
printf (“%d\n”, ? );
}
2010/1
Universidad
2009/1
2010/1
Santo 49
Tomás
A continuación…
Introducción a las Funciones
Estructura de las funciones
Variables y Funciones
Archivos de cabecera
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Creación Archivos Cabecera
Hasta ahora todos los programa se han escrito en un solo
archivo (.c), solo se ha hecho uso de la inclusión de
algunas bibliotecas (archivos .h) del sistema.
Los programas grandes son más fáciles de gestionar si
se dividen en varios archivos fuente, también llamados
módulos, cada uno de los cuales puede contener una o
más funciones.
Al tener estructurado nuestras funciones en archivos
independientes al archivo en donde está alojado el main(),
trae grandes ventajas en cuanto a portabilidad de código,
facilidad de reúso, mantenimiento y depuración de los
programas, ….
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Archivos .c y .h
Se puede decir que, convencionalmente :
Los archivos .c contienen:
• Las definiciones de las funciones,
• Declaración de variables globales y locales,
• Inclusión de archivos de cabecera, ….
Los archivos .h contienen:
• La declaración de los prototipos de las
funciones,
• Definición de Macros,
• Definición de nuevos tipos de datos, ….
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Creación de Librerías
Archivos .c y .h
No existe una única forma de dividir
los archivos, ni el contenido de cada uno
de ellos, ni cuantos archivos se deben
crear (La mejor forma de hacerlo se
aprende con la experiencia).
Una opción puede ser: Crear un archivo .c que
contenga todas las definiciones de las funciones creadas
y un archivo .h que contenga todos los prototipos y
todas las macros. Método facilista, pero no independiza
las funciones entre si.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Archivos .c y .h
Otra opción puede ser: crear por cada función un
archivo .c y solo un archivo .h que contenga todos los
prototipos y todas las macros(RECOMENDADO).
Otra opción mas puede ser: crear por cada función
un archivo .c y otro archivo .h que contenga todos los
prototipos y todas las macros. Otro .h que contenga
información común entre todas las funciones, como
macros comunes. Es el que da mas independencia y
portabilidad a las funciones, pero se requiere de mayor
atención a las hora de incluir bibliotecas comunes.
Es normal utilizar la directiva de preprocesamiento:
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
#ifndef FLAG
…….
#endif
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Archivos .c y .h
A la hora de crear sus archivos tenga en
cuenta que:
Cuando se compila un archivo .c, el
compilador debe conocer los prototipos de
las funciones que son llamadas o que son
definidas dentro del archivo.
Los archivos .c son compilados por separado y
el enlazador es el encargado de reunir cada
uno de los archivos compilados y de obtener
el EJECUTABLE.
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
program.c
Ejemplo
program.c
#include < libreriaX.h>
#include "archivo.h"
#include < libreriaX.h>
#define CONST1 10
int varGlobal;
int funcion1(void);
int funcion2(int);
int funcion3(float);
int main(void){
…..
}
funcion1.c
int varGlobal;
int main(void){
{
…..
}
int funcion1(void){
int varLocal;
printf("%d",CONST1);
…..
}
archivo.h
#define CONST1 10
int funcion1(void);
int funcion2(int);
int funcion3(float);
archivo.c
#include < libreriaX.h>
#include "archivo.h"
funcion2.c
extern int varGlobal;
int funcion1(void){
int varLocal;
printf("%d",CONST1);
…..
}
int funcion2(int x){
int varLocal= CONST1;
…..
}
int funcion2(int x){
int varLocal= CONST1;
…..
}
int funcion3(float x){
int varLocal;
varLocal=2*CONST1;
….
}
int funcion3(float x){
int varLocal;
varLocal=2*CONST1;
….
}
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
#include < libreriaX.h>
#include "archivo.h "
extern int varGlobal;
int funcion1(void){
int varLocal;
printf("%d",CONST1);
…..
}
#include < libreriaX.h>
#include "archivo.h "
extern int varGlobal;
int funcion2(int x){
int
varLocal=
CONST1;
…..
}
funcion3.c
#include < libreriaX.h>
#include "archivo.h "
extern int varGlobal;
int funcion3(float x){
int varLocal;
varLocal=2*CONST1;
….
}
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Compilando
Archivo
Fuente 1
Archivo
Fuente 2
Archivo
Fuente 3
Archivo
Fuente n
COMPILADOR
Archivo
objeto 1
Archivo
objeto 2
Archivo
objeto 3
Archivo
objeto n
Librerias
internas
ENLAZADOR
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Bibliografía
 Joyanes Aguilar, Luis. PROGRAMACIÓN EN C.
Metodología, algoritmos y estructura de datos
Capitulo3.
 H.M. Deitel, P.J. Deitel. Como programar en C y
C++
 Google
Circuitos
Digitales
Circuitos
Sistemas
Digitales
Digitales
III
II III
2010/1
Universidad
2009/1
2010/1
Santo Tomás
Fin de la sesión 3
Descargar

microe.udea.edu.co