0% encontró este documento útil (0 votos)
41 vistas37 páginas

Funciones en C: Conceptos y Ejemplos

El documento aborda el uso de funciones en el lenguaje de programación C, destacando su importancia para descomponer problemas complejos en subproblemas más manejables. Se introduce el principio de responsabilidad única (SRP) y se explica la estructura de las funciones, incluyendo su definición, implementación y llamada. Además, se discuten conceptos como parámetros por valor y por referencia, así como la posibilidad de pasar funciones como parámetros.

Cargado por

aij305230
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
41 vistas37 páginas

Funciones en C: Conceptos y Ejemplos

El documento aborda el uso de funciones en el lenguaje de programación C, destacando su importancia para descomponer problemas complejos en subproblemas más manejables. Se introduce el principio de responsabilidad única (SRP) y se explica la estructura de las funciones, incluyendo su definición, implementación y llamada. Además, se discuten conceptos como parámetros por valor y por referencia, así como la posibilidad de pasar funciones como parámetros.

Cargado por

aij305230
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Universidad Autónoma de Baja California

Facultadad de Química e Ingeniería


ISyTE

Lenguaje C
Unidad 4: Funciones
Concepto 2

Para resolver problemas complejos o de gran tamaño es conveniente


utilizar el concepto de reducción de problemas
Concepto 3

Lo anterior quiere decir que el problemase descompone en


subproblemas, los cuales a su vez pueden descomponerse en
sub-subproblemas, y así continuar hasta que el problema original queda
reducido a un conjunto de actividades básicas, que no se pueden o no
conviene volver a descomponer.
Concepto 4

En el lenguaje de programación C la solución de un problema se


expresa por medio de un programa pero la solución de un
subproblema, por medio de una función
Concepto 5

El uso de funciones tiene múltiples ventajas:


■ facilitan la lectura del programa al programador.

■ facilitan la escritura del programa.


■ permite el trabajo en paralelo.
■ permite la reutilización de código, al escribir la función e utilizarla
cuando sea necesaria.
■ facilita el mantenimiento de los programas.
Concepto 6

De esta manera, un programa en C está constituido por un


programa principal y un conjunto de funciones.

El programa principal consta generalmente de pocas líneas, las cuales


pueden ser llamadas a funciones.
Principio SOLID 7

SOLID Es un principio que se recomienda que se lleve acabo al momento


de desarrollar sistemas o software complejos, para facilitar las etapas del
análisis e implementación
■ Facilita que el código sea más manteniente.
■ Facilita que el Software sea Extendible.
■ Facilita que el Software sea Modificable.
Principio SOLID 8

Para este curso solo se llevará acabo la S del acrónimo ya que C es un


lenguaje estructurado y los demás principios es para diferentes
paradigmas de programación.

S ingle Responsability Principle (SRP)

O pen-Close Principle (OCP)

L iskov Substitution Principle (LSP)

I nterface Segregation Principle (ISP)

D ependency Inversion Principle (DIP)


SRP 9

(Single Responsability Principle) se refiere a que, todo modulo, clase o


función solo debe tener una responsabilidad dentro de la
funcionalidad de un programa.
SRP 10

ServicioMensajes

Add Mensaje Delete Mensaje Validar Mensaje Log

Enviar Mail
SRP 11

ServicioMensajes ServicioValidación

Add Mensaje Delete Mensaje Validar Mensaje

ServicioLog ServicioMail

Log Enviar Mail


Funciones 12

Función

Parámetros Salida
Proceso
Funciones 13

Una función Consta de tres partes


■ La parte de la definición(prototipo).
■ La parte de la implementación.
■ La parte de la llamada de la función (la utilización)
Definición e implementación 14

La definición o Prototipo, se refiere a que debemos definir que tipo de


dato va tener la salida y cuales parámetros debe tener como entrada la
función. Esta definición se hace antes de la función main o en un
archivo.h

La implementación se refiere a el código de la función y normalmente


se hace después de la función main o en un archivo.c diferente al
programa principal.
Definición e implementación 15

Sintaxis definición
Tipo_Dato n o m b r e _ f u n c i o n ( Tipo_Dato p a r a m e t r o s ) ;

Sintaxis implementación

Tipo_Dato n o m b r e _ f u n c i o n ( Tipo_Dato p a r a m e t r o s )
{
/∗ p r o c e d i m i e n t o s ∗/
return v a l o r ;
}
Definición e implementación 16

nombre de función

int nombre_funcion (int a, int b);

retorno de función
(int,void,float,int*,void*,etc) parámetros

Una función no puede tener como retorno un arreglo (int [] char [], etc),
por lo que se regresa un apuntador (asignado en memoria dinámica.)
Funciones 17

Las funciones las vamos a manejar en archivos separados, en donde los


prototipos los ponemos en los archivos de cabecera los .h y las
implementaciones en el los .c
Ejemplo Definición e implementación 18

MisFunciones.h
#pragma once // bandera de que no se r e p i t a a l i n c l u i r
// p r o t o t i p o de l a f u n c i o n
f l o a t sumar ( f l o a t a , f l o a t b ) ;

MisFunciones.c
#include " M i s F u n c i o n e s . h "
// implementacion
f l o a t sumar ( f l o a t a , f l o a t b )
{
r e t u r n a+b ;
}
Llamada de función 19

La llamada de la función se refiere, que literalmente la tenemos que


llamarla o invocarla en el código para poder utilizarla, y para poder
llamarla es poner el nombre de la función y llenar sus parámetros
de entrada con el tipo de dato correspondiente.

Al llamar a la función, se ejecuta el código de la implementación y nos


regresa un valor (si su tipo de dato de la función es diferente a void) o
nada ( si el tipo de dato de la función es void).

Sintaxis de la llamada

nombre_funcion ( valor_parametro ) ;
Ejemplo llamada de función 20

Considerando los archivos MisFunciones.h y MisFunciones.c el


programa quedaría de la siguiente manera para llamar la función hecha
en esos archivos..

Programa.c
#include " M i s F u n c i o n e s . h "
#include < s t d i o . h>
i n t main ( v o i d )
{
f l o a t x =10;
f l o a t y =20;
f l o a t r e s u l t a d o = sumar ( x , y ) ;

p r i n t f ( "%d+%d = %d " , x , y , r e s u l t a d o ) ;
return 0;
}
Ejemplo llamada de función 21

Para compilar el programa se debe de incluir todos los archivos.c


Terminal
folder / ejemplo > gcc -Wall -Werror -pedantic -std=c99 MisFunciones.c programa.c
Variables locales 22

Son variables definidas dentro del bloque de código de una función tal
como la función main u otras funciones y su alcance está limitado
solamente a la función en la cual están definidas, al momento que la
función termina su ejecución estas variables dejan de existir en
memoria.
Variables globales 23

Son variables definidasantes del inicio del programa principal y su


alcance es muy amplio ya que cualquiera tiene acceso a ellas, en el
programa principal o cualquier otra las función.
Variables estáticas 24

Son similares a las variables locales, pero conservan su valor durante la


ejecución del programa o función. Es decir, comienzan a existir cuando
se llama a la función y conservan su valor aun cuando termina su
ejecución.
Parámetros por valor 25

Los parámetros por valor permiten pasar datos entre el programa


principal y las funciones, e incluso entre las mismas funciones.

En el parámetro se escribe una copia de la variable original. Si el


parámetro sufre una alteración en la función que lo recibe, la
variable original no se ve afectada
Parámetros por referencia 26

Los parámetros por referencia también permiten la comunicación entre el


programa principal y las funciones, o entre las mismas funciones.

Sin embargo, en este caso, en lugar de escribir una copia de la


variable en el parámetro se escribe la dirección de la misma. Si el
parámetro sufre una alteración en la función que lo recibe, la
variable original también se ve afectada.
Parámetros por referencia 27

Por ejemplo queremos hacer una función que intercambia los valores de
dos variables sin importar el tipo de dato que sean

funciones.h
#pragma once
void i n t e r c a m b i a r ( i n t ∗ a , i n t ∗ b ) ;

funciones.c
#include " f u n c i o n e s . h "
// Como son parametros por r e f e r e n c i a
// se u t i l i z a n como s i f u e r a n apuntadores
v o i d i n t e r c a m b i a r ( i n t ∗a , i n t ∗b )
{
i n t temp = ∗ a ;
∗ a = ∗b ;
∗b = temp ;
}
Parámetros por referencia 28

programa.c
#include < s t d i o . h>
#include " f u n c i o n e s . h "
i n t main ( v o i d )
{
i n t x = 10 , y = 20;

p r i n t f ( " x=%d , y=%d\n " , x , y ) ;


i n t e r c a m b i a r (&x , &y ) ;
p r i n t f ( " x=%d , y=%d\n " , x , y ) ;

return 0;
}
Parámetros por referencia 29

En C no existe la sobre escritura de funciones, por lo que las


funciones se deben de llamar de diferente nombre.
Por ejemplo hagamos una función de intercambio de valores
generalizada

funciones.h
#pragma once
#include < s t d l i b . h>
void i n t e r c a m b i a r ( i n t ∗ a , i n t ∗ b ) ;
v o i d i n t e r c a m b i a r g e n ( v o i d ∗ a , v o i d ∗ b , s i z e _ t tam ) ;
Parámetros por referencia 30

Para generalizarla simplemente compiamos lo que hay en memoria y la


pasamos a la otra variable.

funciones.c
#include " f u n c i o n e s . h "
#include < s t r i n g . h>
v o i d i n t e r c a m b i a r ( i n t ∗a , i n t ∗b )
{
i n t temp= ∗ a ;
∗ a = ∗b ;
∗b=temp ;
}
v o i d i n t e r c a m b i a r g e n ( v o i d ∗a , v o i d ∗b , s i z e _ t tam )
{
v o i d ∗ temp = m a l l o c ( tam ) ;
memcpy ( temp , a , tam ) ;
memcpy ( a , b , tam ) ;
memcpy ( b , temp , tam ) ;
f r e e ( temp ) ;
}
Parámetros por referencia 31

Utilizamos las funciones en nuestro programa principal


programa.c
#include < s t d i o . h>
#include " f u n c i o n e s . h "
i n t main ( v o i d )
{
i n t x = 10 , y = 20;
char a= ’ a ’ , b= ’ b ’ ;
f l o a t e =0.1 f , f =1.5 f ;

p r i n t f ( " x=%d , y=%d\n " , x , y ) ;


i n t e r c a m b i a r (&x , &y ) ;
p r i n t f ( " x=%d , y=%d\n " , x , y ) ;

p r i n t f ( " a=%c , b=%c \n " , a , b ) ;


i n t e r c a m b i a r g e n (&a , &b , s i z e o f ( char ) ) ;
p r i n t f ( " a=%c , b=%c \n " , a , b ) ;

p r i n t f ( " e=%f , f=%f \n " , e , f ) ;


i n t e r c a m b i a r g e n (&e , &f , s i z e o f ( f l o a t ) ) ;
p r i n t f ( " e=%f , f=%f \n " , e , f ) ;

return 0;
}
Parámetros por referencia 32

para compilar se compilan todos los archivos.c

compilar
g c c −Wa ll −Werror −p e d a n t i c −s t d=c99 programa . c f u n c i o n e s . c −o e j e m p l o . e x e
Paso de función por parámetro 33

En la práctica encontramos problemas cuyas soluciones se podrían


formular fácilmente si pudiéramos pasar funciones como parámetros.

Es decir, pasar una función a otra función como parámetro por referencia
(en el parámetro se escribe la dirección de la función)

Las llamadas por referencia se llevan a cabo por medio de apuntadores,


y un apuntador no es más que una variable que contiene la dirección de
otra variable o de una función y se representa por medio de los
operadores de dirección (&) e indirección (*)

A este tipo de función se le conoce como una función CALLBACK


Paso de función por parámetro 34

Parámetro como función


Tipo_Dato n o m b r e _ f u n c i o n ( Tipo_Dato ( ∗ f u n c i o n _ u s a r ) ( Tipo_Dato p a r a m e t r o s ) , Tipo_Dato p a r a m e t r o s ) ;

Por ejemplo
f l o a t b i s e c c i o n ( f l o a t ( ∗ f x ) ( f l o a t x ) , f l o a t x i , f l o a t xu , i n t i t e r , f l o a t t o l ) ;
Paso de función por parámetro 35

MisFunciones.h
#pragma once
i n t sumar ( i n t a , i n t b ) ;
int resta ( int a , int b ) ;
i n t operacion ( i n t (∗ f u n c i o n ) ( int , i n t ) , i n t a , i n t b ) ;

MisFunciones.c
#include " M i s F u n c i o n e s . h "
i n t sumar ( i n t a , i n t b )
{
r e t u r n a+b ;
}
int resta ( int a , int b)
{
r e t u r n a−b ;
}
i n t operacion ( i n t (∗ f u n c i o n ) ( int , i n t ) , i n t a , i n t b )
{
i n t r e s u l t a d o = (∗ f u n c i o n ) ( a , b ) ;
return r e s u l t a d o ;
}
Paso de función por parámetro 36

programa.c
#include< s t d i o . h>
#include " M i s F u n c i o n e s . h "
i n t main ( v o i d )
{
i n t x = 10 , y = 20;
p r i n t f ( "%d + %d = %d\n " , x , y , o p e r a c i o n ( sumar , x , y ) ) ;
p r i n t f ( "%d − %d = %d\n " , x , y , o p e r a c i o n ( r e s t a , x , y ) ) ;
return 0;
}
Paso de función por parámetro 37

Para compilar el programa se debe de incluir todos los archivos.c


Terminal
folder / ejemplo > gcc -Wall -Werror -pedantic -std=c99 MisFunciones.c programa.c

También podría gustarte