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

3FP ProgramacióModular

El documento aborda el tema de Programación Modular, centrándose en el diseño descendente y el uso de funciones en programación, especialmente en el lenguaje C. Se explican las características de los algoritmos, diagramas de flujo, y la estructura de funciones, así como su declaración, invocación y el manejo de parámetros. Además, se enfatiza la importancia de la documentación y el mantenimiento en la programación modular.
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)
0 vistas14 páginas

3FP ProgramacióModular

El documento aborda el tema de Programación Modular, centrándose en el diseño descendente y el uso de funciones en programación, especialmente en el lenguaje C. Se explican las características de los algoritmos, diagramas de flujo, y la estructura de funciones, así como su declaración, invocación y el manejo de parámetros. Además, se enfatiza la importancia de la documentación y el mantenimiento en la programación modular.
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 DE

BURGOS

Tema 3: Programación Modular.


Funciones Objetivos
• Este tema:
• Conocer:
– Aprender a programar 1 las características de un algoritmo
módulos de programas 2 las reglas de un diagrama de flujo
– Diseñar descendente de los 3 las reglas de un algoritmo estructurado
6 la sintaxis de un lenguaje de programación
problemas. • Saber
– Hacer programas que usen 7 leer un algoritmo expresado en un diagrama de
flujo
funciones. 8 expresar algoritmos mediante diagramas de
flujo
9 traducir un algoritmo a un programa
estructurado
• Acostumbrarse a:
12 leer la documentación de las bibliotecas
de funciones
13 generar programas de fácil
mantenimiento, escribiendo la documentación
para otras personas

Curso 20012/13 Área de Lenguajes y Sistemas Informáticos Prg.:1


UNIVERSIDAD DE
BURGOS

Tema 3: Programación Modular.


Funciones
1 Diseño descendente. Trabajo hecho.
Vamos a casa.
2 Funciones en C.
3 Parámetros. 4 Datos globales ylocales.
Pablo, haz estos
informes
5 Ejercicios.

Pedro,
Toma imprime estos
informes
Ya
están

Curso 20012/13 Área de Lenguajes y Sistemas Informáticos Prg.:2


UNIVERSIDAD DE
BURGOS

0 Programación Modular
Técnica de programación por la cual el programa se divide en
módulos (partes independientes), cada uno de los cuales lleva
a cabo una única actividad, codificándose de forma
independiente de los otros módulos.

P r o g r a m a c ió n M o d u la r

P r o g r a m a P r in c ip a l

M ó d u lo 1 M ó d u lo 2 M ó d u lo 3 M ó d u lo 4

M ó d u lo 1 . 1 M ó d u lo 1 . 2 M ó d u lo 2 . 1 M ó d u lo 3 . 1

M ó d u lo 2 . 1 . 1 M ó d u lo 2 . 1 . 2

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:3


UNIVERSIDAD DE
BURGOS

1 Diseño Descendente (I)


Técnica consistente en dividir el problema principal
en subproblemas, y así sucesivamente hasta llegar
a problemas pequeños fáciles de solucionar.

Divide y Vencerás

y
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:4
UNIVERSIDAD DE
BURGOS

1 Diseño Descendente (II)


Características
• Cada programa consta de un módulo especial, denominado programa
principal, que controla todo lo que sucede.
• El programa principal transfiere el control a los diferentes módulos,
subprogramas, para que estos ejecuten sus funciones.
• Cada subprograma devuelve el control al programa principal al terminar
su tarea.
• Si la tarea a realizar por un módulo es demasiado compleja, éste puede
subdividirse a su vez en otros módulos más pequeños.
• Un módulo puede transferir temporalmente el control a otro módulo, pero
cada módulo debe devolver el control al módulo del cual lo recibió.
• Los módulos se codifican y se prueban por separado, permitiendo que
varias personas puedan trabajar en el desarrollo de forma simultánea en
diferentes partes del mismo programa.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:5
UNIVERSIDAD DE
BURGOS

1 Diseño Descendente (III)


Problema
Problemaprincipal
principal Programa
Programaprincipal
principal

Subproblema
Subproblema Subproblema
Subproblema Subprograma
Subprograma Subprograma
Subprograma
(módulo)
(módulo) (módulo)
(módulo)

P r o g r a m a c ió n M o d u la r

P r o g r a m a P rin c ip a l

M ó d u lo 1 M ó d u lo 2 M ó d u lo 3 M ó d u lo 4

M ó d u lo 1 .1 M ó d u lo 1 .2 M ó d u lo 2 .1 M ó d u lo 3 .1

M ó d u lo 2 . 1 . 1 M ó d u lo 2 . 1 . 2

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:6


UNIVERSIDAD DE
BURGOS

1 Diseño Descendente (IV)


Los subprogramas en algunos lenguajes de programación reciben
el nombre de: rutinas, subrutinas, procedimientos y funciones.

• Los módulos reciben del programa que los llama un


conjunto de datos y devuelve otro conjunto de datos
después de realizar alguna acción.
• Casi todos los lenguajes diferencian los módulos de
programa en función del número y tipo de datos que
devuelven al módulo que los llamo:
– Devuelven un conjunto vacío de datos.
– Devuelven un único dato.
– Devuelven un conjunto de datos no vacío.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:7
UNIVERSIDAD DE
BURGOS

1 Diseño Descendente (y V)
Las funciones como norma Las rutinas, subrutinas o
general en casi todos los procedimienos en general:
lenguajes:
Devuelven un solo valor simple a la Pueden devolver cero, uno o varios
unidad del programa que las llama. valores. Cuando no devuelven ningún valor,
realiza alguna tarea específica.
Se puede llamar utilizando su nombre en Se invocan con una llamada al mismo en
una expresión. una sentencia.
Un identificador Un identificador de procedimiento no
de función está está asociado a ningún tipo de datos y no se
asociado al tipo puede utilizar como operando.
de datos del valor a = log(b)
que devuelve.
log(z)>1 Si
expulsaCD
No
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:8
UNIVERSIDAD DE
BURGOS

2 Funciones en C (I)
Una función en C es un subprograma que realiza una tarea
específica, pudiendo recibir cero o más valores del módulo
que lo llama, y devolver cero o más valores a dicho módulo

• Están se definen por una serie de sentencias asociadas a


un identificador.
– Constituyen una unidad de programa (párrafo del lenguaje)
» Constan de una cabecera y un cuerpo.
• La tarea llevada a cabo en la función se ejecuta cada vez
que en el flujo del programa aparece el identificador de
la función (llamada a la función).
• Las funciones deben ser obligatoriamente declaradas
antes de ser invocadas en el cuerpo de la que la llama.

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:9


UNIVERSIDAD DE
BURGOS

2 Funciones en C (y II)
En C:
todas las sentencias son expresiones acabadas en ;
todos los subprogramas se denominan funciones
• Esto hace que la diferencia entre funciones según la cardinalidad del
conjunto de datos que devuelven no esté claramente diferenciada.
• Podemos considerar, al igual que hacen otros lenguajes, que:
– son propiamente funciones C las que:
• devuelven a la expresión que las llama un único valor,
• tienen asociado el tipo de datos del valor de retorno,
– son procedimientos las funciones C que:
• no devuelven ningún valor a la expresión que las llama,
• tienen asociado el tipo de datos vació (void),
– además las funciones C pueden devolver datos por referencia.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:10
UNIVERSIDAD DE
BURGOS ...

2.1 Definición de funciones en C (I)


La definición de una función no indica que se ejecuten las
sentencias que lo componen, sino que indica cuáles son las
sentencias y dónde están localizadas para cuando sea necesario.
La definición de una función consta de la cabecera de función y del cuerpo de la función.
Sintaxis:
Sintaxis:
tipoDeDato
tipoDeDato nombreFuncion
nombreFuncion ([listaParametrosFormales]){
([listaParametrosFormales]){
[declaraciones]
[declaraciones]
Cuerpo de
la función sentencias
sentencias
}}
tipoDeDato Representa el tipo de datos del valor que devuelve la función, es obligatorio.
nombreFuncion Identificador válido del nombre de la función, es obligatorio
listaParámetrosFormales Para pasar información al procedimiento y/o devolver
información a la unidad que lo invoca. No es obligatorio pasar argumentos.
Su formato es: tipo identArg1, tipo identArg2,... tipo identArgn

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:11


UNIVERSIDAD DE
BURGOS ...

2.1 Definición de funciones en C (II)


Sintaxis
Sintaxisde
deretorno:
retorno:
– Una función puede devolver un valor de return
return expresión;
expresión;
cualquier tipo simple, predefinido o definido por el usuario.
– Por defecto el valor devuelto es tipo es int.
– Si se quiere que no devuelva ningún valor se ha de especificar que
devuelve un valor del tipo void (procedimiento).
– Si no se pasan argumentos a una función la lista de parámetros
formales puede ser sustituida por la palabra reservada void.

Ejemplo de definición de funciones:

void bell(void){
printf("\a"); double lonCircunferencia(double r){
return; return 2 * r * M_PI;
} }

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:12


UNIVERSIDAD DE
BURGOS

2.1 Definición de funciones en C (y III)


Cabecera de modulo
/*************************************** *Dependencias funcionales: *
*Nombre: Nombre de la función * * Lista de los ficheros fuente, *
*Sinopsis: Descripción de la función * *módulos o variables globales de que *
* del módulo * *depende este módulo *
*Ejemplo de llamada: * *Pseudocódigo: *
* Prototipo del módulo * * Especificación del módulo *
* Ejemplo de una llamada * *Autor/Autores: Nombre del autor o de *
*Argumentos de entrada: * * los autores del módulo *
* Lista de los argumentos que recibe * *Fecha: Fecha de última modificación.*
*el módulo. Por cada uno: * *Versión: Última versión del módulo *
* - Nombre de la variable * *Lista de versiones: *
* - Tipo * * Lista con las diferentes versiones *
* - Descripción * *del módulo *
*Valores de retorno: * * Incluir: Número de versión, Fecha, *
* Lista de los posibles valores que * * Modificaciones principales. *
*puede retornar el módulo o situaciones* *Referencia a las fuentes consultadas: *
*en las que puede concluir su * * Fuentes bibliográficas o de los *
*ejecución * *programas consultados *
***************************************/

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:13


UNIVERSIDAD DE
BURGOS

2.2 Llamadas a funciones (invocación)


Las funciones se llaman dentro de otra función.
Sintaxis
Sintaxisde
dela
lallamada:
llamada:
[variable=]
[variable=] nombreFunción([listaParámetrosActuales])[;]
nombreFunción([listaParámetrosActuales])[;]

Variable Especifica la variable donde va a ser almacenado el valor devuelto


por la función.
La llamada puede prescindir del valor devuelto por la función.
nombreFuncion Identificador válido del nombre de la función llamada.
listaParámetrosActuales Son una lista de expresiones separadas por comas.
Las expresiones son evaluadas, los valores resultantes son pasados a la función y
asignados a sus correspondientes parámetros formales. El número de parámetros de
la lista debe ser igual al número de parámetros formales y deben coincidir en tipo.
char a, b;
a= minusc_a_mayusc('c');
b= minusc_a_mayusc(a);
bell();

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:14


UNIVERSIDAD DE
BURGOS

/*--------------------------------------------------------+
|Nombre: 40circu.c |
Ej.: 40circu
|Sinopsis: El programa pide un radio y muestra el valor de|
|la longitud de su circunferencia y el área de su circulo |
|Descripción de la ejecución del programa: |
| c:>40circu |
|Directivas de compilación: Compilar en modo |
|ansi, con todos los avisos activos, compilado con gcc |
|Lista de códigos de salida de la aplicación: |
| Devuelve 0. |
|Organización: [Link] |
|Autor: CPA |
|Fecha: 30-oct-2006 |
|Versión: v2.0 |
|Lista de versiones: |
| v2.0 30-oct-06 versión con funciones |
| v1.0 1-sep-02 versión inicial |
|Información del copyright del programa: |
| Programa pertenece a [Link]. Este programa |
|puede (debe) difundirse entre los alumnos para aprender C|
+--------------------------------------------------------*/ 40 circu
r long r area
longCircun areaCircul

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:15


UNIVERSIDAD DE
BURGOS
#include<stdio.h> /*Directivas al preprocesador*/

#define PI 3.1416 /*cte.*/ Ej.: 40circu


/**Calcula la longitud de una circunferencia de radio r. Inicio
@param r E/ del valor del radio
@return la longitud*/
double longCircun(double r){
return 2 * PI * r; radio
}

/**Calcula la área de un circulo de radio r.


@param r E/ del valor del radio longitud = longCircun(radio)
@return el área*/
double areaCircul(double radio){
return PI * radio * radio;
}
area = areaCirul(radio)
int main(){ /*Definición de la función ppal.*/
double radio,
longitud, area; Circunferencia:
printf("\tIntroduce un radio de la circunferencia ");
scanf("%lf", &radio); longitud
longitud = longCircun(radio); Círculo: area
area = areaCircul(radio);
printf("Circunferencia: %f\tCirculo %f\n",longitud,area);
return 0;
}
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Fin Prg.:16
UNIVERSIDAD DE
BURGOS

2.3 Declaración de funciones


(prototipo de función) (I)
Una función no puede ser llamada a menos que la declaración o la
definición de la función este definida antes de la sentencia que la invoca.
• Hay ocasiones en las que es necesario llamar a una función que todavía no ha
sido definida. Para solucionar este problema se debe informar al compilador que
la definición de la función se encuentra después de la llamada a la función.
• Para dar esta información al compilador se utiliza la declaración de funciones
prototipos.
Sintaxis
Sintaxisde
dela
ladeclaración:
declaración:
tipoDeDato
tipoDeDato nombreFuncion
nombreFuncion ([listaParametrosFormales]);
([listaParametrosFormales]);
tipoDeDato Representa el tipo de datos del valor que devuelve la función, es obligatorio.
nombreFuncion Identificador válido del nombre de la función, es obligatorio
listaParámetrosFormales Permite el tipo de los parámetros formales y opcionalmente su nombre .
Formato: tipo [identArg1],tipo [identArg2],...tipo [identArgn]

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:17


UNIVERSIDAD DE
BURGOS
/*-------------------------------------------+
|Nombre: 42tMult.c |
|Sinopsis: El programa muestra las tablas de |
| multiplicar de un número en base decimal, |
| en base octal y en base hexadecimal |
Ej. Tablas de
|Descripción de la ejecución del programa:
| c:>42tMult
|
| multiplicar
|Directivas de compilación: |
| Compilar en modo ansi, con todos los
| avisos activos, compilado con bcc
|
|
42tMult
|Lista de códigos de salida de la aplicación:|
| Devuelve 0. |
n n
|Organización: [Link] |
|Autor: CPA |
|Fecha: 1-sep-2002 | pideEntero tMult
|Versión: v3.0 |
|Lista de versiones: | /*Directiva al preprocesador*/
| v4.0 26-oct-07 f() y generar n tablas. |
#include<stdio.h>
| v3.0 1-sep-02 usar expresiones y vari. |
| v2.9 1-sep-02 usar expresiones | /*Declaración de funciones*/
| v2.0 22-ago-02 usar % y ctes: 22Mult5.c |int pideEntero(void); /*(prototipos)*/
| v1.0 21-ago-02 comentado prg: 12Mult5.c |void tMult(int n);
| v0.1 20-ago-02 versión inicial | /*Definición del módulo ppal.*/
|Información del copyright del programa: |
int main(){
| Programa pertenece a [Link] |
| Este programa puede (debe) difundirse | tMult(pideEntero());
| entre los alumnos para aprender C | return 0;
+-------------------------------------------*/}

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:18


UNIVERSIDAD DE
BURGOS
i++; x+=n; /*4*/
Ej. Tablas de multiplicar del 5
/*Definición de otros módulos*/
printf("%u *%2u =%4u\t%o *%2o =%4o\t"
"%X *%2X =%4X\n", i,n,x, i,n,x, i,n,x);
/**Pide un número y lo lee del teclado. i++; x+=n; /*5*/
@return el número leído*/ printf("%u *%2u =%4u\t%o *%2o =%4o\t"
int pideEntero(void){ "%X *%2X =%4X\n", i,n,x, i,n,x, i,n,x);
int n; i++; x+=n; /*6*/
printf("Introduce un número "); printf("%u *%2u =%4u\t%o *%2o =%4o\t"
scanf("%u", &n); "%X *%2X =%4X\n", i,n,x, i,n,x, i,n,x);
return n;
i++; x+=n; /*7*/
}
printf("%u *%2u =%4u\t%o *%2o =%4o\t"
"%X *%2X =%4X\n", i,n,x, i,n,x, i,n,x);
/**Muestra las tablas de un nº en base
10, 8, y 16. i++; x+=n; /*8*/
@param n E/ número de la tabla a mostrar printf("%u *%2u =%4u\t\t\t"
@return nada*/ "%X *%2X =%4X\n", i,n,x, i,n,x);
void tMult(int n){ i++; x+=n; /*9*/
int i=0, x=0; printf("%u *%2u =%4u\t\t\t"
printf("\tTablas de multiplicar "
"del %d\nen base 10\t" "%X *%2X =%4X\n", i,n,x, i,n,x);
"en base 8\ten base 16\n",n); i++; x+=n; /*10*/
printf("%u *%2u =%4u\t%o *%2o =%4o\t" printf("\t\t\t\t%X *%2X =%4X\n",i,n,x);
"%X *%2X =%4X\n", i,n,x, i,n,x, i++; x+=n; /*11*/
i,n,x);
i++; x+=n; /*1*/ printf("\t\t\t\t%X *%2X =%4X\n",i,n,x);
printf("%u *%2u =%4u\t%o *%2o =%4o\t" i++; x+=n; /*12*/
"%X *%2X =%4X\n", i,n,x, i,n,x, printf("\t\t\t\t%X *%2X =%4X\n",i,n,x);
i,n,x); i++; x+=n; /*13*/
i++; x+=n; /*2*/
printf("%u *%2u =%4u\t%o *%2o =%4o\t" printf("\t\t\t\t%X *%2X =%4X\n",i,n,x);
"%X *%2X =%4X\n", i,n,x, i,n,x, i++; x+=n; /*14*/
i,n,x); printf("\t\t\t\t%X *%2X =%4X\n",i,n,x);
i++; x+=n; /*3*/ i++; x+=n; /*15*/
printf("%u *%2u =%4u\t%o *%2o =%4o\t"
"%X *%2X =%4X\n", i,n,x, i,n,x, printf("\t\t\t\t%X *%2X =%4X\n",i,n,x);
i,n,x); }
Curso 2014/15 Área de Lenguajes y Sistemas Informáticos Prg.:19
UNIVERSIDAD DE
BURGOS

2.3 Declaración de funciones (II)


Estética del programa
• Los prototipos de las funciones se colocan al comienzo del programa antes
de todas las definiciones de funciones propias del programador (incluida la
función main).
• La sintaxis de una función prototipo coincide con la sintaxis de la cabecera
de una definición de la función, excepto que esta termina con un punto y
coma.
• El compilador comprobará que los tipos de datos de los parámetros actual de
una llamada a la función se deben adecuar a los tipos de datos del prototipo
de la función.
• Cuando se efectúa una llamada a una función, primero se realizan las
conversiones aritméticas usuales sobre sus argumentos, estos argumentos
son comparados con los correspondientes parámetros formales de la
definición del prototipo de la función.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:20
UNIVERSIDAD DE
BURGOS

3 Pasando parámetros a funciones (I)


• Un parámetro es una variable que sirve para comunicarse
datos entre la función y la unidad que lo llama.
• Esa comunicación puede ser en una dirección o en las dos
direcciones:
si el valor es proporcionado a la función por la unidad que lo llama son
parámetros de entrada,
si es devuelto por el subprograma a la unidad que lo referencia so parámetros
de salida.
si el valor es proporcionado a la función por la unidad que lo llama para ser
modificado son parámetros de entrada/salida,

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:21


UNIVERSIDAD DE
BURGOS

3 Pasando parámetros a funciones (II)


Un parámetro es una variable cuyo valor es
Parámetros de entrada proporcionado a la función por la unidad que
lo llama (parámetros de entrada), o bien es
devuelto por el subprograma a la unidad que
lo referencia (parámetros de salida).
Función Una función no puede ser llamada a menos que la
declaración o la definición de la función este
definida antes de la sentencia que la invoca.

Hay dos formas de pasar los parámetros a sus


Parámetros de salida correspondientes parámetros formales, cuando
se efectúa la llamada a una función.
– Por valor
– Por referencia, por dirección o por variable

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:22


UNIVERSIDAD DE
BURGOS

3 Pasando parámetros a funciones (III)


Las sentencias de llamada a funciones constan de dos partes:
– Un nombre de la función,
– Una lista de parámetros actuales, son los valores que se le pasan a la función
nombreFunción(pa1, pa2, pa3, …);
En la declaración de una función, cuando se incluyen parámetros, estos
se denominan formales o ficticios, y su misión es contener los valores de
los parámetros actuales cuando se invoca a la función.
tipoRetorno nombreFunción(tipo1 pf1,tipo2 pf2,tipo3 pf3,…);
El valor de los parámetros formales no se conoce cuando se declara la
función, sin embargo, cuando se ejecuta la sentencia de llamada es
obligatorio que tenga valores asignados, o de lo contrario se producirá un
error.
Por cada parámetro formal se crea reserva una zona de memoria en el
momento de ser llamada la función como si fuera una variable que sólo
se conoce en una ejecución de la función y se libera al final de la
función.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:23
UNIVERSIDAD DE
BURGOS

3 Pasando parámetros a funciones (IV)


Parámetros por valor
• Los parámetros por valor son los • Son parámetros unidireccionales que
protagonistas de lo que se denomina se emplean para proporcionar
paso por valor.
valor información a una función, es decir
• El parámetro actual en el paso por sólo pueden actuar como parámetros
valor puede ser una variable, una de entrada.
constante o una expresión. • Como el subprograma trabaja a
• Cuando un parámetro se pasa por partir de sus parámetros formales, si
valor: durante la ejecución se modifica el
– Se crea un espacio de memoria para valor de un parámetro formal
el parámetro formal, correspondiente a un paso por
– Se evalúa el parámetro actual y valor, el contenido de la posición de
– El valor resultante es almacenado en memoria de las variables de los
la zona de memoria que se reservó parámetros actuales no se ven
el parámetro formal
alterado.
Cuando se llama a una función en C
los argumentos especificados en la llamada son pasados por valor.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:24
UNIVERSIDAD DE
BURGOS

3 Pasando parámetros a funciones (V)


Ejemplo de parámetros por valor
/*----------------------------------------+ /*Directivas al preprocesador*/
|Nombre: 63valor.c | #include<stdio.h>
|Sinopsis: El programa nos hace un ejemplo|
| de paso por valor | /*Declaración de prototipos*/
|Descripción de la ejecución del programa:| void modificar(int);
| c:>63valor |
|Directivas de compilación: | /*Definición de la f() ppal.*/
| Compilar en modo ansi, con todos los | int main(){
|avisos activos. Compilado con bcc | int a=2;
|Lista de códigos de salida de la | printf("= %d (desde main antes de "
|aplicación: Devuelve 0. | "llamar a la función)\n", a);
|Organización: [Link] | modificar(a);
|Autor: CPA | printf("= %d (desde main después de "
|Fecha: 10-abr-2004 | "llamar" a la función)\n",
|Versión: v1.1 | a);
|Lista de versiones: | }
| v1.1 10-abr-04 cambios de salidas |
| v1.0 18-nov-02 versión inicial | /*Definición de funciones*/
|Información del copyright del programa: | void modificar(int b){
| Programa pertenece a [Link] | b*= 3;
| Este programa puede (debe) difundirse | printf("= %d (desde la "
|entre los alumnos para aprender C | "función modificar)\n", b);
+----------------------------------------*/ }
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:25
UNIVERSIDAD DE
BURGOS

3 Pasando parámetros a funciones (VI)


Parámetros por referencia
Pasar parámetros por referencia, por variable o por dirección significa que lo
transferido no son los valores, sino las direcciones de las variables que contienen
esos valores, con lo cual los parámetros actuales pueden verse modificados.
• Los parámetros por variable son los • Pueden emplearse como parámetros
protagonistas de lo que se denomina – unidireccionales (E/ o /S) o
paso por referencia.
referencia – bidireccionales (E/ y/S).
• El parámetro actual en el paso por • El parámetro formal queda
referencia sólo puede ser una asociado a la misma posición de
dirección de memoria. memoria que su correspondiente
• Cuando un p. se pasa por referencia: parámetro actual, por lo que
– Se crea un espacio de memoria para el cualquier modificación que el
parámetro formal (una dirección), subprograma realice sobre el
– Se evalúa el parámetro actual y contenido del parámetro formal se
– La dirección resultante es almacenada
efectúa sobre el parámetro actual
en la zona de memoria que se reservó
el parámetro formal.
correspondiente y repercute en el
módulo que hace la llamada.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:26
UNIVERSIDAD DE
BURGOS

3 Pasando parámetros a funciones (VII)


Operadores para parámetros por referencia
& Operador de dirección. Este operador da la dirección de
memoria de su operando.
* Operador indirección. Este operador accede a un valor
indirectamente a través de un dirección de memoria.
Son operadores unarios, precedencia 2 y se asocian de derecha a izquierda
Ejemplo:
int *pa, /*pa contiene una dirección de memoria
que puede contener a un valor entero*/
a=2, b; /*a y b son variables que contiene a un
valor entero*/
pa= &a; /*pa almacena la dirección de a*/
b = *pa; /*b es asignado el valor almacenado en la
dirección especificada por pa*/
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:27
UNIVERSIDAD DE
BURGOS

3 Pasando parámetros a funciones (VIII)


Ejemplo de parámetros por referencia
/*----------------------------------------+ /*Directivas al preprocesador*/
|Nombre: 64variab.c | #include<stdio.h>
|Sinopsis: El programa nos hace un ejemplo|
| de paso por variable | /*Declaración de prototipos*/
|Descripción de la ejecución del programa:| void modificar(int*);
| c:>64variab |
|Directivas de compilación: | /*Definición de la f() ppal.*/
| Compilar en modo ansi, con todos los | int main(){
|avisos activos. Compilado con bcc | int a=2;
|Lista de códigos de salida de la | printf("= %d (desde main antes de "
|aplicación: Devuelve 0. | "llamar a la función)\n", a);
|Organización: [Link] | modificar(&a);
|Autor: CPA | printf("= %d (desde main después de "
|Fecha: 10-abr-2004 | "llamar" a la función)\n",
|Versión: v1.1 | a);
|Lista de versiones: | }
| v1.1 10-abr-04 cambios de salidas |
| v1.0 18-nov-02 versión inicial | /*Definición de funciones*/
|Información del copyright del programa: | void modificar(int *b){
| Programa pertenece a [Link] | *b = *b * 3;
| Este programa puede (debe) difundirse | printf("= %d (desde la "
|entre los alumnos para aprender C | "función modificar)\n", *b);
+----------------------------------------*/ }
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:28
UNIVERSIDAD DE
BURGOS

4 Datos globales y locales


• Los datos de un programa (constantes y variables)
se pueden clasificarse por varios criterios:
» ¿Cuál es la vida del dato?
» ¿Cuál es el ámbito del dato?
» ¿Dónde se declara el dato?
» ¿Dónde se almacena el dato?

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:29


UNIVERSIDAD DE
BURGOS

4.1 Vida del dato


Vida es el tiempo desde que se almacena hasta que se deja de almacenar en el ordenador

• Una llamada a función


– Se crea al llamar a una función, y desaparece ese dato
al acabar la ejecución de esa invocación a esa función
• Una ejecución del programa
– Se crea al ejecutar un programa, y desaparece al
acabar esa ejecución.
• Varios programas.
– Se crea al ejecutar un programa y sigue existiendo
después de esa ejecución. (se tratará en tema C)
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:30
UNIVERSIDAD DE
BURGOS

4.2 Ámbito de los datos (I)


Ámbito es el rango de código que puede acceder a una dato

• Los identificadores que acceden a los datos han


de ser declarados antes de poder ser accesibles
• Un dato puede ser:
– local a una función,
– global/local a una fichero fuente,
– global a todo el programa.

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:31


UNIVERSIDAD DE
BURGOS

4.2 Ámbito de las variables (y II)


• Cuando una función encuentra un identificador de
datos el compilador procede de la siguiente
forma:
– Primero busca en su lista de variables locales.
– Si no la encuentra, busca en su lista de parámetros
formales.
– Si no la encuentra tampoco en la lista de parámetros
formales, buscará en la lista de variables globales.
– Si no ha encontrado la variable, entonces se produce
un error de compilación.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:32
UNIVERSIDAD DE
BURGOS

4.3 Declaración de datos (I)


• Una variable local es aquella que se declara dentro de
una función, y sólo está disponible durante la ejecución
de ésta. Una variable local sólo puede ser utilizada en la
función en la que ha sido definida.

• Las variables declaradas fuera de todo bloque se


denominan variables globales.
Pueden ser utilizadas en todas las funciones del
programa, esto es, tanto en el función principal como en
todos los funciones que están en ese fichero fuente
siempre que se encuentren definidas después de la
declaración.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:33
UNIVERSIDAD DE
BURGOS

4.3 Declaración de datos (II)


int x;
main(){
Ámbito de x
char t;

Ámbito de t

} /*main*/

void funcionC (int k ){


const float PI = 3.14159;

… Ámbito de k y PI
} /* funcionC*/

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:34


UNIVERSIDAD DE
BURGOS

4.3 Declaración de datos (III)


/*Declaración de prototipos*/
/*----------------------------------------+ void funcionA(void);
|Nombre: iNumero
65global.c
es una variable global | void funciónB(void);
|Sinopsis: El ser
puede programa nos hace un ejemplo|
utiliza en funcionA, /*Declaración de Variable global*/
| de datos
en funciónB y enlocales y globales
el programa | int inumero;
|Descripción de la ejecución del programa:|
principal /*Definición de la f() ppal.*/
| c:>65global | int main(){
|Directivas de compilación: | inumero= 35;
| Compilar en modo ansi, con todos los | funcionA();
|avisos activos. | funcionB();
|Lista de códigos de salida de la | }
|aplicación: Devuelve 0. |
|Organización: [Link]
i, j son variables locales de | void funcionA(){ /*Definición de f()*/
|Autor: funcionA,
CPA y sólo pueden ser | int i, j;
|Fecha: utilizadas
10-sep-2003 en funcionA. | printf("iNumero: %d", iNumero);
|Versión: v1.1 | scanf("%d%d", &i, &j);
|Lista de versiones: | printf("i=%d\tj=%d\n", i, j);
| v1.1 10-sep-03 revisión de estilo | return;
| v1.0 18-nov-02 versión inicial | }
|Información del copyright del programa: |
i es variable local de
| Programa pertenece a [Link] | void funcionB(){
| Este funcionB,
programay sólo puede
puede ser
(debe) difundirse | float i;
utilizada
|entre los en funcionB.
alumnos para aprender C | printf("iNumero: %d", iNumero);
+----------------------------------------*/ scanf("%f",i);
/*Directivas al preprocesador*/ printf("i = %f\n",i);
#include<stdio.h> return;
Curso 2007/08 Área de Lenguajes y Sistemas
} Informáticos Prg.:35
UNIVERSIDAD DE
BURGOS

4.4 Almacenes de datos


• En registros de la CPU datos automáticos locales de la función no estáticos
datos registro locales de la función no estáticos

• en memoria principal
– pila del programa parámetros formales de la función
datos automáticas locales de la función no estáticos
datos volátiles locales de la función no estáticos
– zona de datos del programa datos locales de la función estáticos
datos globales
– dentro del código del programa literales simples

• en memoria secundaria

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:36


UNIVERSIDAD DE
BURGOS

4.5 Resumen clasificación de datos (en C)

identifica
se dor
Vida Am bito se declara alm acena reservado Nom bre
cabecera de f() - (def) Parámetro formal
pila de prg. volatil
1 llamada Variable .
a f() local 1 f() auto (def) local
dentro de f() registro CPU
register
zona de datos static local estática
local un .c global del local módulo
1 ejecución fuera de f()'s
global prg programa - (def)Constante global al programa.
del prg
referencias a variables
prototipo dentro de f() ----------------- extern
que están ámbito

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:37


UNIVERSIDAD DE
BURGOS

4.6 Efectos laterales (I)


Un efecto lateral es la modificación o uso de una variable de una
unidad situada en un nivel superior de la jerarquía de módulos por parte de un
subprograma, sin la declaración expresa del parámetro formal en la
cabecera del mismo, y la no inclusión de la variable global en la
lista de parámetros actuales, en la llamada al subprograma.

La transferencia de información entre


programas y subprogramas sólo debe
tener lugar a través de la lista de
parámetros

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:38


UNIVERSIDAD DE
BURGOS

Ventajas del uso de funciones


• Facilita el diseño descendente.
• Los procedimientos se pueden ejecutar más de una vez
en mismo programa, e incluso en diferentes programas,
ahorrando tiempo de programación (reutilización).
• Facilita la división de las tareas de programación
entre un equipo de programadores.
• Los procedimientos se pueden comprobar de forma
individual, y estructurarse el bibliotecas específicas.
Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:39
UNIVERSIDAD DE
BURGOS

Tabla de precedencia de operadores


Categoría Operadores Precedencia Asociatividad Operador

Paréntesis () 1  agrupar

+ - ++ --
Unarios 2  unario
& *
Multiplicativos * / % 4 
Aditivos + - 5  aritmético

Desplazamiento << >> 6 


= *= /= %=
Asignaciones 15  asignación
+= -= <<= >>=
Evaluar , 16  evalua

Curso 2007/08 Área de Lenguajes y Sistemas Informáticos Prg.:40


UNIVERSIDAD DE
BURGOS

Resumen
Prototipo

Llamada

Definición

Curso 2012/13 Área de Lenguajes y Sistemas Informáticos Prg.:41


UNIVERSIDAD DE
BURGOS

Ejercicios

Rehaced los ejercicios de los temas anteriores


separando en funciones

las operaciones de E/

las operaciones de cálculos

las operaciones de /S

Curso 2012/13 Área de Lenguajes y Sistemas Informáticos Prg.:42

También podría gustarte