6 libro fundamentos cap__modularidad_ecler mv
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

6 libro fundamentos cap__modularidad_ecler mv

  • 504 views
Uploaded on

Capitulo 06 modularidad en c++, phyton, algoritmo ...

Capitulo 06 modularidad en c++, phyton, algoritmo

Procedimiento simple
Procedimiento con argumento
Funciones
Funciones recursivas

En Pseudocódigo, C++ y Phyton

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
504
On Slideshare
504
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
7
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Pág. 1 Algoritmica I- Modularidad Modularidad DEFINICIÓN La Modularidad es la sub división de un algoritmo, o programa en partes más pequeñas, llamadas módulos, cada una de las cuales debe ser lo más independiente posible de la aplicación principal y de las restantes partes. La programación modular es una de las técnicas fundamentales de la programación. Se apoya en el diseño descendente y en la filosofía de “divide y vencerás”, es decir se trata de dividir el problema dado, en problemas más simples en que cada uno de los cuales lo implementaremos en un módulo independiente. Gráfico 01. Esquema de modularidad Siempre existirá un módulo o programa principal que es con el que comienza la ejecución de todo el programa, y a partir de él iremos llamando al resto. Cada vez que se llama a un subprograma se le pasa la información que necesita en la llamada, a continuación comienza a ejecutarse el subprograma llamado, y cuando termine su ejecución, devuelve el control a la siguiente instrucción a la de llamada en el programa que lo llamó. Así cabe mencionar que los módulos también se les conoce como, sub algoritmos, subprogramas y sub subrutinas.
  • 2. Pág. 2 Ecler Mamani Vilca A nivel general podemos clasificar en dos: • Procedimientos • Funciones Diferencias entre procedimientos y funciones Estos subprogramas son similares aunque presentan diferencias entre ellos: 1. Las funciones devuelven un sólo valor al algoritmo principal. Los procedimientos pueden devolver cero, uno o más valores. 2. A un nombre de procedimiento no se puede asignar un valor y por consiguiente ningún tipo está asociado con un nombre de procedimiento. 3. Una función se referencia utilizando su nombre en una expresión, mientras que un procedimiento se referencia por una llamada o invocación al mismo Argumentos Un argumento representa el valor que se transfiere a un parámetro del procedimiento cuando se llama al procedimiento. El código de llamada proporciona los argumentos cuando llama al procedimiento. Cuando se llama al procedimiento Function o Sub, se incluye una lista de argumentos entre paréntesis que van inmediatamente después del nombre del procedimiento. A diferencia de la definición de parámetros, los argumentos no tienen nombres. Cada argumento es una expresión que puede contener cero o más variables, constantes y literales. El tipo de datos de la expresión evaluada normalmente debe coincidir con el tipo de datos definido para el parámetro correspondiente, y en algún caso, debe poder convertirse al tipo del parámetro. Parámetros Un parámetro representa un valor que el procedimiento espera que se transfiera cuando es llamado. La declaración del procedimiento define sus parámetros. El nombre de cada parámetro actúa como una variable local dentro del procedimiento. El nombre del parámetro se utiliza del mismo modo que cualquier otra variable.
  • 3. Pág. 3 Algoritmica I- Modularidad PROCEDIMIENTO Un procedimiento es un subprograma o un sub algoritmo que ejecuta una determinada tarea, pero que tras ejecutar no necesariamente debe devolver un valor aun cuando tengan argumentos. En realidad los argumentos son parámetros (variables) de entrada cuando ejecutas un programa. En Python y C++ los procedimientos son funciones sin parámetros de retorno. El uso de las variables de en un procedimiento son como locales y la estructura del programa similar al del programa principal. Algoritmo Python C++ //Procedimiento Sub nombre_modulo( ) //procesos FinSub #Procedimiento nombre_modulo( ): #procesos //Procedimiento nombre_modulo( ){ //procesos } //Programa principal Inicio //llamando al modulo nombre_modulo( ) Fin #Programa principal //llamando al modulo nombre_modulo( ) //Programa principal main( ) { //llamando al modulo nombre_modulo( ); } a) Procedimientos sin argumentos Son aquellas que no reciben argumentos de entrada al módulo. Ejemplo 01. Crear dos módulos, el primero que escriba una etiqueta y para el segundo que permita calcular un número al cuadrado. a) Análisis del problema El cuadrado es: Cuad Num * Num Declaración de variables y argumentos Programa principal Invocación a etiqueta ( ), cuadrado ( ) Sub Programa Etiqueta ( ) Variable de Salida: Texto Sub Programa cuadrado ( ) Variable de Entrada: Numerico real : Num Variable de Salida: Numerico real : Cuad
  • 4. Pág. 4 Ecler Mamani Vilca b) Algoritmo c) Codificación En Pseudocódigo // Ejem. 01. Procedimiento sin argumentos Sub etiqueta ( ) Escribir “======================” Escribir “ Procedimiento sin Argumentos” Escribir “======================” Fin Sub cuadrado ( ) Escribir “Ingrese un Número” Leer Num Cuad Num * Num Escribir “ El cuadrado es ”, Cuad Fin //Programa principal Inicio etiqueta ( ) //Invoca al modulo cuadrado ( ) //Invoca al modulo Fin En Phyton # Ejem. 0. Procedimiento sin argumentos def etiqueta(): print "=======================" print " Procedimiento sin argumentos" print "=======================" def cuadrado( ): print "Ingrese numero" n = float(raw_input()) cuad = n * n print n," al cuadrado es ",cuad #Programa principal en Python etiqueta() #Invoca al modulo cuadrado()#Invoca al modulo
  • 5. Pág. 5 Algoritmica I- Modularidad b) Procedimientos con argumentos Son aquellas que reciben argumentos de entrada al módulo mas no emiten un valor como retorno. Ejemplo 02. Realizar un procedimiento con argumento que permita generar la tabla de multiplicar. a) Análisis del problema En referencia la ejercicio 02, de la unidad de bucles. Se tiene: Para i 1 hasta 20 Hacer prod i * m Escribir i,” X“, m,”=”,prod Declaración de variables y argumentos: Programa principal Invocación a Tabla (multip) Variable de Entrada: Numérico entero multip Sub Programa Tabla ( real m) Argumento de entrada: Numérico real m En C++, void declara una función que no tiene valor de retorno, en los nuevos compiladores de C++ ya no es necesario declararlos. En C++ //Ejem. 01. Procedimiento sin argumentos #include<conio.h> #include<iostream.h> void etiqueta ( ) { cout<<"====================="<<endl; cout<<" Procedim. sin argumentos ”<<endl; cout<<"====================="<<endl; } void cuadrado ( ){ //Variable local float Cuad, Num; cout<<"Ingrese un Numero "; cin>>Num; Cuad=Num * Num; cout<<"El cuadrado es "<<Cuad; getch(); } //Programa principal main( ){ etiqueta ( ); //Invoca al modulo cuadrado ( ); //Invoca al modulo }
  • 6. Pág. 6 Ecler Mamani Vilca Algoritmo d) Codificación En Pseudocódigo // Ejemplo de procedimiento con argumentos //llama el argumento m Sub tabla (real m ) Para i 1 hasta 20 Hacer prod i * m Escribir i,” X“, m,”=”,prod Fin //Programa principal Inicio Escribir “Ingrese multiplicador” Leer multip tabla (multip ) Fin En Phyton # Ejem .02 Procedimiento con argumentos #llama el argumento m def tabla(m): for i in range (1,20): prod = i * m print i," x ",m," = ",prod #Programa principal print "Ingrese multiplicador " multi = float(raw_input( )) tabla(multi) En C++ // Ejem .02 Procedimiento con argumentos #include<conio.h> #include<iostream.h> #llama el argumento m tabla (float m) { int i; float prod; for (i=1;i<=20;i++){ prod = i*m; cout<<i<<"x"<<m<<"=" <<prod<<endl; } } //Programa principal main( ){ float multi; cout<<"Ingrese multiplicador"; cin >>multi; tabla(multi); }
  • 7. Pág. 7 Algoritmica I- Modularidad FUNCIÓN Una función es un módulo de código con un nombre asociado que realiza una serie de tareas y devuelve un valor. Desde el punto de vista matemático, una función es una operación que toma uno o a varios operandos, y devuelve un resultado. Y desde el punto de vista algorítmico, es un subprograma que toma uno o varios parámetros como entrada y devuelve a la salida un único resultado. f(p1,p2,...,pn) donde p1, p2, ..., pn son los parámetros y f es el nombre de la función. Cabe recordar que para el uso de las funciones en muchas ocasiones es necesario usar variables globales. Variable global Una variable global es aquella que se define fuera del cuerpo de cualquier función. El ámbito de una variable global son todas las funciones que componen el programa, cualquier función puede acceder a dichas variables para leer y escribir en ellas. Es decir, se puede hacer referencia a su dirección de memoria en cualquier lugar del programa. Variable local Es aquella cuyo ámbito se restringe a la función que la ha declarado se dice entonces que la variable es local a esa función. Esto implica que esa variable sólo va a poder ser manipulada en dicha sección, y no se podrá hacer referencia fuera de dicha sección. Un ejemplo en C++, observamos una modificación para “int i” como variable global y “float prod”, es una variable local. En C++ //Ejem. tipos de variables #include<conio.h> #include<iostream.h> int i; //Variable global tabla (float m) { float prod; //Variable local for (i=1;i<=20;i++){ prod = i*m; cout<<i<<"x"<<m<<"=" <<prod<<endl; } getch( ); }
  • 8. Pág. 8 Ecler Mamani Vilca Sintaxis: Algoritmo Python C++ //función Sub nombre (parametro) //procesos Retorna valor FinSub //función nombre(tipo parametro){ //procesos return valor; } #función nombre(parametro ): #procesos return valor //Programa principal Inicio //Ingreso de datos //llamando al modulo nombre(parametro ) Fin //Programa principal main( ) { //Ingreso de datos // Llamando al modulo nombre(parametro); } #Programa principal #Ingreso de datos nombre(parametro ) La sentencia return 0, break o exit (0), le permite terminar la ejecución de una función. Cuando el valor devuelto es diferente de 0, es cuando retorna un valor, con fines didácticos utilizaremos los ejemplos anteriores. Ejemplo 03. Realizar una función que genere un número al cuadrado. a) Análisis del problema Declaración de variables y argumentos: Programa principal Invocación a cuadra (num) Argumento de entrada: Numérico real num Sub Programa cuadra ( real ) Argumento de recepción Numérico real n b) Algoritmo Pseudocódigo // Función numero al cuadrado Sub cuadra (real n) Retorna n*n Fin //Programa principal Inicio Escribir “Ingrese un numero” Leer num Escribir num,”^ 2 =”,cuadra(num) Fin En Phyton # Función numero al cuadrado def cuadra(n): return n*n #Programa principal print "Ingrese un numero" num = float(raw_input()) print num,"^2 =",cuadra(num)
  • 9. Pág. 9 Algoritmica I- Modularidad c) Codificación Función recursiva La recursividad es una función que se llama así misma generando secuencias en forma descendente, ya sea directamente o indirectamente. La función recursiva al principio cuesta un poco entender cuando se está aprendiendo a programar. No todas las funciones son recursivas son particularidades. Si hacemos una comparación visual en la parte inferior, observamos que dentro del monitor mayor se encuentra dentro de un segundo y este último en un tercer monitor, ha esto podemos denominar una recursividad visual. La definicion de recursividad algunas veces puedes causar algo de humor, siempre y cuando se entienda bien, para ejemplo tenemos en un diccionario cuya definición indica: En C++ // Función numero al cuadrado #include<conio.h> #include<iostream.h> cuadra (float m){ return m*m; } //Programa principal main( ){ float num; cout<<"Ingrese un numero "; cin>>num; //imprime directamente la función cout<<num<<"^2 = " <<cuadra(num); getch(); }
  • 10. Pág. 10 Ecler Mamani Vilca "Recursion". Consulte la sección "Recursividad". Recursividad. Vease “recursión” Una de las apliaciones mas entendibles es usando las matemáticas visuales, nos referimos a los fracales, los fractales gráficos son formas que se repiten entre si, cuya función principal es la recursividad, veamos algunos de ellos. Sintaxis: PSeudocódigo Python C++ #función recursiva Sub nombre(n): #el bucle se rompe Si n ==0 Entonces return 0 Sino : retorna nombre(n - 1) // desciende de n hasta 1 #función recursiva def nombre(n): #el bucle se rompe if n == 0: return 0 else : return nombre(n - 1) // desciende de n hasta 1 //función recursiva nombre(tipo n) { // el bucle se rompe if (n==0) return 0; else return nombre(n-1); //desciende de n hasta 1 } #programa principal nombre ( numero) #programa principal nombre ( numero) //programa principal main( ) { //llamando al modulo nombre ( numero); } Ejemplo 04. Realizar una función recursiva, cuenta regresiva. a) Análisis del problema Cuenta atrás espera que su parámetro, n, sea un entero positivo. Si n el parámetro es cero, muestra la palabra “Despegando….!”. En otro caso, muestra n y luego llama a la función llamada regresiva (ella misma) pasándole como argumento n-1. Triángulo de Sierpiński Curva T Curva de Koch
  • 11. Pág. 11 Algoritmica I- Modularidad Que sucede si llamamos a la función de la siguiente manera?, regresiva (n), donde n= 10. La ejecución de cuenta atrás comienza con n=10, y puesto que n no es cero, da como salida el valor 10, y luego se llama a sí misma, veamos en una prueba de escritorio: Condición n = 10 Iteración Función Escribir F 10 regresiva(n) = 10 10 F 9 regresiva (regresiva(n-1) = 10-1) 9 F 8 regresiva(regresiva(n-1) = 9-1) 8 F 7 regresiva(regresiva(n-1) = 8-1) 7 F 6 regresiva(regresiva(n-1) = 7-1) 6 F 5 regresiva(regresiva(n-1) = 6-1) 5 F 4 regresiva(regresiva(n-1) = 5-1) 4 F 3 regresiva(regresiva(n-1) = 4-1) 3 F 2 regresiva(regresiva(n-1) = 3-1) 2 F 1 regresiva(regresiva(n-1) = 2-1) 1 Verdad Corte regresiva(regresiva(n-1) = 0) “Despegando¡” La ejecución de regresiva atrás comienza con n=10, y puesto que n no es cero, muestra el valor 10 y luego se llama a sí misma ...hasta llegar a cero, la ejecución de cuenta atrás llega a n=0, y puesto que n es cero, muestra la palabra “Despegando…¡”. Declaración de variables y parámetros Programa principal Invocación a regresiva (entero num ) Sub regresiva ( entero n ) Parámetro de salida: retorno regresiva (n-1); b) algoritmo Pseudocódigo //Ejemplo cuenta regresiva Sub regresiva (n) Si n=0 Entonces Escribir “Despegando…..¡” retorna 0 SiNo Escribir n #llamando a sí mismo retorna regresiva (n-1) FinSi #Programa principal Inicio Escribir "Ingrese un numero "; Leer num regresiva(num) Fin
  • 12. Pág. 12 Ecler Mamani Vilca En Phyton #Ejemplo de función recursiva cuenta # regresiva def regresiva (n): if n==0: print “Despegando…..¡” return 0 else: print n #llamando a sí mismo return regresiva (n-1) #Programa principal print "Ingrese un numero " num=int(raw_input()); regresiva(num) En C++ // Ejemplo cuenta regresiva #include<conio.h> #include<iostream.h> regresiva (int n){ if (n==0) cout<<”Despegando…..¡” return 0; else cout<<n<<endl; //llamando a si mismo return regresiva (n-1); } //Programa principal main(){ int num; cout<<"Ingrese un numero "; cin>>num; regresiva(num); getch(); }
  • 13. Pág. 13 Algoritmica I- Modularidad Ejercicios 1. Realizar una función recursiva para imprimir y numerar n veces el nombre de “Hola”. a) Análisis del problema Utilizaremos el bucle que genera la recursividad para imprimir la numeración. Función Interacción Impresión, n,“Hola” n = 5 5 5 “Hola” n -1 (5-1) 4 4 “Hola” n -1 (4-1) 3 3 “Hola” n -1 (3-1) 2 2 “Hola” n -1 (2-1) 1 1 “Hola” n -1 (1-1) 0 Como n=0, termina Declaración de variables y argumentos: Programa principal Invocación a nombre (cantidad) Argumento de entrada: Numérico real num Sub Programa nombre ( cantidad ) Argumento de recepción Numérico entero cantidad
  • 14. Pág. 14 Ecler Mamani Vilca b) Algoritmo 2. Realizar una función recursiva en Phyton que muestra la tabla de multiplicar. a) Análisis del problema Conociendo que la recursividad generar los bucles en orden decreciente, agregaremos un contador k, el cual genera la iteración ascendente Función Iterac. k 0 p 12 ,p k*m k," x ",m," = ",p N = 8 8 k k +1 (0+1 = 1) P (1*12) = 12 1 x 12 = 12 N -1 (8-1) 7 k k +1 (1+1 = 2) P (2*12) = 12 2 x 12 = 24 N -1 (7-1) 6 k k +1 (2+1 = 3) P (3*12) = 12 3 x 12 = 36 N -1 (6-1) 5 k k +1 (3+1 = 4) P (4*12) = 12 4 x 12 = 48 N -1 (5-1) 4 k k +1 (4+1 = 5) P (5*12) = 12 5 x 12 = 60 N -1 (4-1) 3 k k +1 (5+1 = 6) P (6*12) = 12 6 x 12 = 72 N -1 (3-1) 2 k k +1 (6+1 = 7) P (7*12) = 12 7 x 12 = 84 N -1 (2-1) 1 k k +1 (7+1 = 8) P (8*12) = 12 8 x 12 = 96 n -1 (1-1) 0 Declaración de variables y argumentos: Programa principal Invocación a tabla (cantidad,multimplicador) Argumento de entrada: Numérico entero cantidad,multimplicador Sub tabla ( n,m ) Argumento de recepción Numérico entero n,m En pseudocódigo //Imprime n veces hola Sub nombre( n ) Si (n=0) Entonces //si n llega ha ser 0 la iteracion se rompe retorna 0; //se detiene Sino Escribr n, " Hola" retorna nombre(n-1) // decrementa desde n hasta 1 FinSub //Programa principal Inicio Escribir "Ingrese la cantidad de nombres a imprimir ==> " Leer cantidad nombre(cantidad);//función recursiva Fin
  • 15. Pág. 15 Algoritmica I- Modularidad 3. Realizar una función recursiva en C++ que muestre la potencia de un base x a la potencia n. a) Análisis del problema Usaremos la recursividad para generar bucles con el cual repetir las veces de “x” se multiplique por “n”. En Phyton #Tabla de multiplicar con recursividad #Variable globlal k=0 def tabla(n,m): global k if (n==0):#si n llega ha ser 0 la iteracion se rompe return 0 else: k=k+1 #contador para imprimir ascendentemente p=k*m print k," x ",m," = ",p return tabla(n-1,m) #punto recursivo #Programa principal cantidad=int(raw_input("Hasta que numero desea la tabla ==> ")) multiplicador=int(raw_input(" Ingrese multiplicador ==> ")) tabla(cantidad,multiplicador)#funcion recursiva En C++ # include<conio.h> # include <iostream.h> int potencia(int base,int exponente) //funcion recursiva { int pot; if (exponente==0) return 0; else { // productoria pot=base*potencia(base,exponente-1); return pot; } } main ( ) { int base,exponente,resultado; cout<<" Ingresa la base X = "; cin >>base; cout<<"Ingresa la exponente n = "; cin>>exponente; resultado=potencia(base,exponente); cout<<" La potencia es igual a = "<<resultado; getch(); }
  • 16. Pág. 16 Ecler Mamani Vilca 4. Realizar un algoritmo que permita convertir números decimales a binario usando recursividad. b) Análisis del problema Para el caso de convertir un numero decimal a binario es excelente el método de recursividad, pues la conversion normal de cambio de base se realiza en forma descendente. Realizaremos una prueba para 8 que es en binario 1000. binario (num/2) num Escribir num mod 2 8 1 1 mod 2 = 1 8/2=4 2 2 mod 2 = 0 4/2=2 4 4 mod 2 = 0 2/2 = 1 8 8 mod 2 = 0 5. Graficar el fractal de Tcuadrado. a) Análisis del problema Puede ser generado a partir de usar este algoritmo : Pseudocódigo //Numero decimal a binario con recursividad Sub binario( num) Si (num = 0) Entonces Retorno 0 Sino binario(num/2) //divide entre hasta que sea cero FinSi //escribe bit de resto printf("%d",num%2); FinSub //Programa Principal Inicio Escribir "Ingrese un numero en decimal " Leer n binario(n) Fin
  • 17. Pág. 17 Algoritmica I- Modularidad 1. Imagen 1: 1. Comience con un cuadrado. 2. Restar un medio cuadrado de la longitud original y la anchura (un cuarto de la zona) desde el centro. 2. Imagen 2: 1. Comience con la imagen anterior. 2. Escala abajo una copia de una mitad de la longitud original y anchura. 3. De cada uno de los cuadrantes de imagen 1, restar la copia de la imagen. 3. Imágenes 3-6: 1. Repita el paso 2. En C++ #include <conio.h> #include <graphics.h> #include <dos.h> void Cfractal(int x,int y,int radio) { rectangle(x-radio,y-radio,x+radio,y+radio); if(radio>10) { Cfractal(x-radio,y-radio,radio/2); Cfractal(x-radio,y+radio,radio/2); Cfractal(x+radio,y-radio,radio/2); Cfractal(x+radio,y+radio,radio/2); } } void main() { int driver=DETECT,x; initgraph(&driver,&x,"c:bc5bgi"); Cfractal(getmaxx()/2,getmaxy()/2,100); getch(); }