programacion estructurada: tema 3. programacion modular · programacion estructurada: tema 3....
TRANSCRIPT
![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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/1.jpg)
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
![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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/8.jpg)
#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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/19.jpg)
#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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/28.jpg)
![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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/29.jpg)
//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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/30.jpg)
…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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/31.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/33.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/34.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/35.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/36.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033119/5f08482a7e708231d4213c69/html5/thumbnails/37.jpg)
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