PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3....

37
PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 [email protected]

Transcript of PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3....

Page 1: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

PROGRAMACION ESTRUCTURADA:Tema 3. Programación Modular

Presenta: David Martínez Torres

Universidad Tecnológica de la Mixteca

Instituto de Computación

Oficina No. 37

[email protected]

Page 2: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

Contenido

1. Diseño descendente2. Funciones3. Funciones con paso de parámetros por valor4. Funciones con paso de parámetros por

referencia5. Funciones recursivas6. Referencias

Page 3: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

1. Diseño descendente

También conocido como diseño top-down o divide y vencerás. Consiste en empezar analizar un problema complejo e ir descomponiendo en subproblemas(módulos) e ir avanzando nivel a nivel, hasta obtener subproblemas fáciles de solucionar.

En lenguaje C, la solución de un problema se compone de un módulo principal, el cual invoca a funciones que resuelven una parte del problema dado, donde cada función puede particionarse en otras más.

Page 4: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

1. Diseño descendente

Entrada Cálculo Salida

Entradaaltura

Entradabase

Salidaaltura

Salidabase

Salidasuperficie

Lecturanum. Real

Validación

S = B * Alt

Cálculo superficie

de un rectángulo

Lecturanum. Real

Validación

Nivel 1

Nivel 2

Nivel 3

Nivel 4

Page 5: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

1. Diseño descendente

Ventajas

Facilita solución de problemas

Permite que cada desarrollador realice una parte de forma independiente.

Propicia la reutilización de código.

Consideraciones

Realizar una correcta descomposición

Correcta definición de las interfaces(argumentos)

Importante una correcta integración

Page 6: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones

La funciones son módulos que resuelven una parte de un problema complejo.

Componentes de una función en C

Prototipo de función

Llamadas a función (Paso de parámetros)

Definición o implementación de la función

Page 7: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones

Tanto el prototipo, llamada e implementación de la función, deben coincidir en todo: en tipo de retorno, nombre de la función y tipos de los parámetros, así como el orden de estos últimos.

Las funciones crean un espacio en memoria durante su ejecución y se libera ese espacio al terminar su ejecución.

Page 8: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

#include <stdio.h>int menu(); // prototipos de funcionesvoid introducir(…);

int main() { int opc; opc=menu(); //llamadas de función}

int menu() { //Implementación de función... }

void introducir(…) { //Implementación de función... }

2. Funciones

Page 9: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones (Prototipos)

Las funciones en C deben de ser declaradas antes de poder ser usadas, de manera que tenemos dos opciones:

1. El estándar ANSI C en la estructura de un programa indica que el prototipo de función se coloca antes de la implementación del main.

2. Puede no colocarse el propotipo e iniciar con la implementación de la función antes de la implementación del main (no recomendado de acuerdo al ANSI C).

Page 10: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones (Prototipos)

El uso de propotipos de función le indica al compilador la cantidad y tipo de dato de los parámetros o argumentos y el tipo de dato que retornará la función.

En el prototipo no es necesario definir el nombre de los argumentos.

Page 11: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones (Prototipos)

tipo nombre(lista_parámetros); //sintaxis

Ejemplo: prototipo de la función del cálculo de factorial:

#include <stdio.h>int factorial (int); //prototipo de funciónint main() { …}

Page 12: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones (Llamada de función)

La llamada a una función es cuando se solicita la ejecución de una función que ya se encuentra definida previamente.

En este caso se debe incluir el nombre de la función y entre paréntesis la lista de los datos que se envían como parámetros.

Page 13: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones (Llamada de función)

Los datos deben coincidir en número y tipo con los declarados en el prototipo y la definición de la función.

#include <stdio.h>int factorial (int); //prototipoint main() { …resultado=factorial(num); //llamada…}

Page 14: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

tipo nombre (lista_parámetros ) {declaracionesinstrucciones}

2. Funciones (implementación de función)

Page 15: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones (implementación de función)

miFuncionNula(){}

Al no declarar tipo de retorno, se considera entero

Será válida?

Page 16: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

2. Funciones (implementación de función)

Ejemplo: A continuación se muestra la implementación de la función que calcula el factorial de un número entero positivo.

int factorial (int n)

{

int i, mult;

mult =1;

for( i=n; i>1; i--)

mult = mult *i;

return mult;

}

Page 17: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

3. Funciones con paso de parámetros por valor

En la llamada de función, se pasa solo el contenido de los parámetros (variables) a la función que se invoca.

Estas funciones no modifican los valores de las variables de la función que la invocó.

El resultado que retorna es la solución del subproblema.

Page 18: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

3. Funciones con paso de parámetros por valor

Para que la función regrese algún valor es necesario utilizar la instrucción return

return provoca además la terminación de la ejecución de la función

Se recomienda que se coloque al final de la función

La sintaxis de la instrucción return es:

return expresión;

ejemplo:

return resultado;return 0;

Page 19: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

#include <stdio.h>int factorial (int); //prototipoint main() { …resultado=factorial(num); //llamada…}

int factorial (int n){

int i, mult;

mult =1;

for( i=n; i>1; i--)

mult = mult *i;

return mult;

}

Page 20: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

4. Funciones con paso de parámetros por referencia

En la llamada de función, se pasa la dirección de uno o más parámetros a la función que se invoca.

Desde la implementación de la función, se puede modificar el valor de variables que se pasaron por referencia.

Page 21: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

4. Funciones con paso de parámetros por referencia

Importante mencionar que en C no existe el paso de parámetros por referencia [2], todos los parámetros se pasan por valor. Sin embargo, es posible por medio de variables de tipo apuntador simular el paso por referencia.

Page 22: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

4. Funciones con paso de parámetros por referencia

Antes, introducción a apuntadores.

Un apuntador es una variable que contiene una dirección de memoria. Frecuentemente esta dirección es la localidad de otra variable.

La forma general de la declaración de una variable apuntador es:

tipo * nombreVariable;

Page 23: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

4. Funciones con paso de parámetros por referencia

Declaración de variables apuntador

int *intPtr;

float *floatPtr;

char *strPtr;

int **intPtrPtr;

Page 24: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

4. Funciones con paso de parámetros por referencia

Operadores a utilizar con apuntadores:

& Operador “de dirección o referencia”. Devuelve la dirección de memoria de la variable

* Operador “de indirección o desreferencia”. Devuelve el valor situado en la

dirección del operando. Se dice que da acceso a la variable que señala el apuntador.

Page 25: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

4. Funciones con paso de parámetros por referencia

int balance, value;

int *bal_ptr;

balance=3200; //step 1

bal_ptr = &balance; //step 2

value=*bal_ptr; //step 3

Page 26: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

4. Funciones con paso de parámetros por referencia

C sabe cuantos bytes copiar en value de la dirección apuntada por balptr, esto es, porque el compilador asume que el tipo base del apuntador determina el tipo de datos al cual está apuntando.

El siguiente fragmento de código es incorrecto:

int *int_ptr; double f;int_ptr = &f; // ERROR

Técnicamente correcto, pero no recomendado (usar un operador cast):

int_ptr = (int *) &f;

Page 27: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

Ejemplo del cuidado a tener con el operador cast

void main()

{

double x,y;

int *ptr;

x = 123.23;

ptr= (int *) &x; // Usa cast para asignar un double* a int*

y = *ptr; // Que hace esto?

printf("%.0f\n",y); // Que imprime?

}

Page 28: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la
Page 29: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

//Cálculo de una tabla de potencias

#include <stdio.h>#define N 7

//prototiposlong pot(int, int); //long int es implícitovoid impEncab(void);void impTabPot(int);

void main(void){impEncab();impTabPot(N); //paso por valor}

Page 30: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

…continuación del ejemplo//implementación de función

void impEncab(void) {

int i;

printf("\n ------- Tabla de potencias --------\n");

printf("1");

for(i=2; i<=N; i++)

printf("%9d", i);

putchar('\n');

printf("------------------------------------------------------\n");

}

Page 31: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

void impTabPot(int n){int i, j;for(i=1; i<=n; i++) {

for(j=1; j<=n; j++)if(j==1)

printf("%ld", pot(i,j));else

printf("%9ld", pot(i,j));putchar('\n');}

}

long pot(int m, int n){int i;long producto=1;for(i=1; i<=n; i++)

producto*=m;return producto;}

Page 32: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

5. Funciones recursivas

Una función recursiva es una función que se llama a sí misma, ya sea directa o indirecta a través de otra función.

Componentes

Caso base. Es el resultado más simple, lo que conoce la función.

Paso de recursión. Llamada a la misma función, pero con el problema poco menos complejo que el original. También puede incluir la palabra reservada return.

Page 33: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

5. Funciones recursivas

Calculo del factorial, ejemplo recursivo

33

Page 34: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

5. Funciones recursivas

34

Page 35: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

5. Funciones recursivas

int factorial(int n) //definición de la función

{

int fact;

if(n==0||n==1) //caso base

fact=1;

else

fact=n*factorial(n-1);

return fact;

} 35

Page 36: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

5. Funciones recursivas

Cálculo de la potencia, ejemplo de problema recursivo

36

Page 37: PROGRAMACION ESTRUCTURADA: Tema 3. Programacion modular · PROGRAMACION ESTRUCTURADA: Tema 3. Programación Modular Presenta: David Martínez Torres Universidad Tecnológica de la

7. Referencias

1. Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos. McGraw-Hill, México.

2. Deitel & Deitel (2001) C++ Como programar en C/C++.Prentice Hall

3. Kerrighan y Ritchie “El lenguaje de programación”. Prentice Hall

4. Gottfried, Byron (1999) “Programación en C” McGrawHill, México.

5. Levine Gutierrez, Guillermo (1990) Introducción a la computación y a la programación estructurada. McGraw-Hill, México.

6. Levine Gutierrez, Guillermo (1990) Introducción a la computación y a la programación estructurada. McGraw-Hill, México.

7. H. Schildt, C++ from the Ground Up, McGraw-Hill, Berkeley, CA, 1998

8. Keller,,AL;Pohl,Ira. A Book on C. 3 ª edición. Edit.Benjamin umnings.1995