Introducción Declaración Definición o implementación Llamada

Anuncio
Fundamentos de Informática
1
2
Introducción
„
„
Un programa en C consta de una o más funciones.
{
„
Declaración
La función main es la primera función que se ejecuta y que llama a
las otras funciones directa o indirectamente.
„
Una función es una “caja negra” que realiza ciertas
acciones de una forma independiente, devolviendo si es
necesario ciertos valores de salida a partir de unos valores
de entrada.
{
{
Las funciones pueden ser programadas por el usuario o utilizar las que
ya están programadas y agrupadas en librerías.
Ejemplo: funciones scanf y printf de la librería stdio.
Declaración o prototipo de la función (¿cómo se usa?):
{
tipo nombre_de_funcion ( decl_list_arg );
tipo: declara el tipo del valor que devuelve la función (void, si
no devuelve ningún valor).
„
nombre_de_funcion: identificador de la función.
„
decl_list_arg: lista de declaraciones de parámetros formales
(que incluyen el tipo y el nombre de los parámetros).
Representan los valores que deben ser pasados a la función.
Ejemplos:
double potencia( double base, int exponente );
void escribe_importe( double importe );
double lee_importe();
„
Similar al concepto matemático de función.
Ejemplos:
y = f(x) ;
var1 = sqrt(var2) ;
Esta independencia permite la reusabilidad de las funciones en
otros puntos del programa e incluso en otros programas.
{
3
4
Definición o implementación
„
Mediante la implementación indicamos qué hace la función
{
„
Llamada
„
tipo nombre_de_funcion ( decl_list_arg ){
declaraciones_de_variables_locales
sentencias
...
Cuerpo de la función
return expresion;
}
Mediante la llamada se ejecuta la función (se ejecuta el código que
aparece en la implementación)
{
nombre_de_funcion ( lista_parametros_reales )
{
Lista de parámetros reales: contiene los valores que se le pasan a la
función separados por comas.
Si la función no tiene parámetros formales, entonces en la llamada no
aparece ningún valor entre los paréntesis.
{
Sentencia return
{
{
{
{
{
Puede aparecer en cualquier parte del cuerpo (normalmente, al final)
Cuando se ejecuta la sentencia return se termina la ejecución de la función
En las funciones que devuelven valores, indica qué valor se devuelve
En las funciones de tipo void la sentencia return aparece sin la expresión
Ejemplos:
return 4.5;
return importe*1.13 + total;
Sólo es correcto para
return ;
funciones de tipo void
„
„
Las funciones se ejecutan cada vez que se ejecuta una llamada en el
código del programa
Ejemplos:
resultado = potencia( 2.3 * suma, 5 );
gasto = lee_importe();
escribe_importe( gasto );
return potencia(2,3) + potencia(2,exponente);
Dpto. de ATC, Universidad de Sevilla - Página 1 de 5
Fundamentos de Informática
5
6
Variables locales y parámetros formales
„
{
„
„
El ámbito de una variable es la porción de código
donde la variable está disponible
(se puede acceder a ella)
{
{
{
Cuando una variable está disponible en una porción de
código, diremos que es visible o conocida.
{
Estudiaremos dos ámbitos:
{
{
Variables locales o automáticas
{
Global
Local a las funciones
„
Se declaran dentro de la función (al principio del cuerpo)
Sólo son visibles dentro del cuerpo de la función
Se crean automáticamente cuando comienza la ejecución de la
función
Se destruyen automáticamente cuando se termina la ejecución de
la función
Deben ser inicializadas dentro de la función
Parámetros Formales
{
{
Sólo son visibles dentro de la función
Se inicializan automáticamente con los valores de los parámetros
reales (en la llamada a la función).
7
Ejemplo 1a
8
Ejemplo 1b
double potencia( double, int );
Variable local de
void main() {
la función main
int contador;
for (contador=1; contador<10; contador++)
printf( “%lf ”, potencia( 1.0/contador, contador ) );
}
double potencia( double base, int exponente ) { Parámetros de la
función potencia
int contador;
double resultado = 1;
Variables locales de
if (exponente < 0) {
la función potencia
base = 1 / base;
exponente = -exponente;
}
for (contador=0; contador<exponente; contador++)
resultado = resultado * base;
return resultado;
}
double potencia( double, int );
La variable contador de la
función main sólo es visible
en la zona sombreada
void main() {
int contador;
for (contador=1; contador<10; contador++)
printf( “%lf ”, potencia( 1.0/contador, contador ) );
}
double potencia( double base, int exponente ) {
Tenemos dos variables
int contador;
contador diferentes.
double resultado = 1;
if (exponente < 0) {
base = 1 / base;
exponente = -exponente;
}
for (contador=0; contador<exponente; contador++)
resultado = resultado * base;
return resultado;
}
Dpto. de ATC, Universidad de Sevilla - Página 2 de 5
Fundamentos de Informática
9
10
Variables globales
Ejemplo 1c
double potencia( double, int );
Los parámetros se
inicializan en la llamada
void main() {
a la función
int contador;
for (contador=1; contador<10; contador++)
printf( “%lf ”, potencia( 1.0/contador, contador ) );
}
double potencia( double base, int exponente ) {
int contador;
Los parámetros y las variables
double resultado = 1;
locales de la función potencia sólo
if (exponente < 0) {
son visibles en la zona sombreada.
base = 1 / base;
exponente = -exponente;
}
for (contador=0; contador<exponente; contador++)
resultado = resultado * base;
Utilizamos los parámetros igual que
return resultado;
las variables locales
}
„
Variables globales
{
{
{
Se declaran fuera de las funciones
Son visibles en todo el código que sigue a su
declaración
Existen durante toda la ejecución del programa
11
Ejemplo 1a
12
Ejemplo 1b
double potencia( double, int );
void ejemplo();
double potencia( double, int );
void ejemplo();
int contador = 3;
int exponente = 0;
void main() {
printf( “%d\n”, contador );
printf( “%d\n”, sumador );
}
int contador = 3;
int exponente = 0;
void main() {
printf( “%d\n”, contador );
printf( “%d\n”, sumador );
}
ERROR: La variable sumador
no es visible
Las variables globales contador y exponente
son visibles en la zona sombreada
Las variables locales y los
parámetros ocultan a las globales
con su mismo nombre
int sumador;
int sumador;
double potencia( double base, int exponente ) {
int contador = 0;
…
}
double potencia( double base, int exponente ) {
int contador = 0;
…
En esta zona no son visibles las
}
void ejemplo() {
contador++;
sumador = sumador + contador;
}
void ejemplo() {
contador++;
sumador = sumador + contador;
}
La variable global sumador es
visible en la zona sombreada
Dpto. de ATC, Universidad de Sevilla - Página 3 de 5
variables globales contador y
exponente, sino la variable local
contador y el parámetro exponente.
Fundamentos de Informática
13
14
Ejemplo 2
double potencia( double, int );
void ejemplo();
int contador = 3;
void main() {
printf( “%d\n”, contador );
printf( “%lf\n”, potencia(2,3) );
printf( “%d\n”, contador );
ejemplo();
printf( “%d\n”, contador );
}
3
8.000000
3
5
void ejemplo() {
contador = contador + 2;
}
EDIFICIO: CUESTIONES
GENERALES
PLANTA DE UN PISO
DETALLE DE UNA HABITACIÓN
double potencia( double base, int exponente ) {
int contador = 0;
…
}
15
Funciones
„
„
16
Ejemplo 1a
MENU PRINCIPAL
-----------------Calculadora.... c
Conversiones... v
Terminar....... t
------------------total: 3432
Dividir un problema en fragmentos más pequeños:
más fáciles de resolver, de implementar y de
depurar
Ventajas:
{
{
{
Reusabilidad del código
Facilita el trabajo en grupo
Facilita el mantenimiento del código: podemos cambiar
el código de una función sin modificar el resto del
programa.
Programa principal
mostrar_menu
leer_opcion
Dpto. de ATC, Universidad de Sevilla - Página 4 de 5
calculadora
conversiones
Fundamentos de Informática
17
Ejemplo 1b
„
Ejemplo 1c
Cada módulo se implementa con las
siguientes funciones:
{
{
{
{
{
18
main: programa principal
char mostrar_menu( double valor );
char leer_opcion();
double calculadora( double valor );
void conversiones( double valor );
char mostrar_menu( double valor );
char leer_opcion();
double calculadora( double valor );
void conversiones( double valor );
void main() {
double total = 0;
char opcion;
do {
opcion = mostrar_menu( total );
if (opcion == ‘c’)
total = calculadora( total );
else if (opcion == ‘v’)
conversiones( total );
} while ( opcion != ‘t’ );
}
char mostrar_menu( double total ) {
… leer_opcion() …
}
Dpto. de ATC, Universidad de Sevilla - Página 5 de 5
Descargar