practica 3 sub procesos

55
Introducción Un subproceso es en sí un programa completo, con sus propias declaraciones y sus instrucciones. Para poder distinguir a los subprogramas definidos debemos darle un nombre a cada uno. Los subprogramas pueden ser utilizados dentro de otros programas o subprogramas. Estos subprocesos se escriben solo una vez, pero pueden ser utilizados en diferentes puntos de un programa puesto que están diseñados para ejecutar alguna tarea específica. Los programas diseñados mediante la técnica “divide y vencerás”, son normalmente más fáciles de comprender, ya que la estructura de cada subproceso puede ser estudiada independientemente de los otros. En esta práctica utilizaremos las estructuras ya conocidas, como la estructura si, si sino entonces, para, mientras, repetir, etc. Pero además utilizaremos subprocesos que son un conjunto de actividades que tienen una secuencia lógica que cumple propósitos claros. Un Subproceso es un proceso en sí mismo, cuya funcionalidad es parte de un proceso más grande. La sintaxis para ello es la siguiente: SubProceso variable_de_retorno <- nombre_de_la_funcion (argumento_1, argumento_2,...) accion 1; accion 1; . . . accion n; FinSubproceso Sin embargo, está estructura no es rígida del todo debido a que también es posible crear funciones que no tengan ni argumentos ni valores de retorno.

Upload: isidro-martinez-gtz

Post on 11-Jan-2016

237 views

Category:

Documents


0 download

DESCRIPTION

Sub procesos

TRANSCRIPT

Page 1: Practica 3 Sub procesos

IntroducciónUn subproceso es en sí un programa completo, con sus propias declaraciones y sus instrucciones. Para poder distinguir a los subprogramas definidos debemos darle un nombre a cada uno. Los subprogramas pueden ser utilizados dentro de otros programas o subprogramas.

Estos subprocesos se escriben solo una vez, pero pueden ser utilizados en diferentes puntos de un programa puesto que están diseñados para ejecutar alguna tarea específica. Los programas diseñados mediante la técnica “divide y vencerás”, son normalmente más fáciles de comprender, ya que la estructura de cada subproceso puede ser estudiada independientemente de los otros.

En esta práctica utilizaremos las estructuras ya conocidas, como la estructura si, si sino entonces, para, mientras, repetir, etc. Pero además utilizaremos subprocesos que son un conjunto de actividades que tienen una secuencia lógica que cumple propósitos claros. Un Subproceso es un proceso en sí mismo, cuya funcionalidad es parte de un proceso más grande. La sintaxis para ello es la siguiente:

SubProceso variable_de_retorno <- nombre_de_la_funcion (argumento_1, argumento_2,...) accion 1; accion 1; . . . accion n; FinSubproceso

Sin embargo, está estructura no es rígida del todo debido a que también es posible crear funciones que no tengan ni argumentos ni valores de retorno.

Page 2: Practica 3 Sub procesos

Practicas con subproceso

Ejercicio 1.1Desarrolle un algoritmo que permita convertir calificaciones numéricas a letras, según la siguiente tabla:

Calificación numérica Valor en letra10 A9-8 B7-6 C5 F

Análisis PrevioI. Se debe solicitar la calificación, la cual debe ser mayor o igual que cinco y menor o igual que diez.

II. Mediante una serie de subprocesos la calificación será filtrada para determinar, por medio de redondeo, a que calificación en forma de letra corresponde el valor numérico. El argumento enviado a los subprocesos será la calificación numérica y se esperará como variable de retorno el valor en letra.

III. Finalmente se imprimirá el valor en letra de la calificación.

Diagrama de Flujo

Page 3: Practica 3 Sub procesos

Subprocesos “decision1”, “decision2”, “decision3” y “decision4”calif <- decision(a)

I. Pedir la calificación al programa principal.

II. En primera instancia la calificación ingresará al subprograma decision4 y en éste se evaluará la misma para saber si es mayor o igual que 9.5, en caso afirmativo la calificación asignada será A, en caso contrario mandará la calificación para que sea evaluada en decision3.

III. En decision3 la calificación será evaluada para saber si es mayor o igual que 7.5 y menor que 9.5 para asignar la calificación B, si la condición tampoco se cumple mandará la calificación par que sea evaluada en decision2 y así sucesivamente.

IV. Los subprocesos se llaman uno tras otro hasta que pueda ser retornado un valor para la calificación en letra.

Diagrama de Flujo

Resultados

Page 4: Practica 3 Sub procesos

Posibles mejoras y errores detectadosEl algoritmo pide solamente esas calificaciones pero si se ingresa un número mayor a 10 o menor a 0 el programa no hará nada, en este caso como posible mejora habría que poner un mensaje de error que diga que ingreso una calificación inadecuada.

Problema 2Realice un algoritmo que permita calcular el monto a pagar en un estacionamiento, considerando lo siguiente:

a) Monto por la primera hora, 10 pesos

b) Después de la primera hora y un minuto, se cobrara 5 pesos adicionales y así por cada hora transcurrida.

Nota: El usuario dará el tiempo en minutos y el algoritmo también deberá mostrar el tiempo transcurrido en el siguiente formato hh:mm:ss

Análisis previo:I. Pedir el tiempo en minutos transcurrido en el estacionamiento.

II. Validar los minutos.

III. Evaluar si el automóvil a pasado menos de una hora,

IV. si a pasado menos de una hora entonces mostrar el monto a pagar y el tiempo transcurrido.

V. Si no se necesita de un proceso que evalué tiempo y monto (f<- evaluartiempoymonto (a,c,d,e,f) ) y el valor que regrese este proceso se guardara como valor

VI. Mostrar el valor

Page 5: Practica 3 Sub procesos

Diagrama de Flujo

Sub proceso f<- evaluartiempoymonto (a,c,d,e,f)I. Al ingresar el tiempo en minutos dividir el tiempo en horas y los minutos, para esto usar el modulo

II. Ya que se dividió el tiempo a las horas multiplicarlo por 5 por cada hora más transcurrida

III. Y sumarle los 10 pesos de la primera hora

IV. Regresar el valor resultante el diagrama principal

Posibles mejoras y errores detectadosEste caso se debe cuidar hay q hacer transformaciones de números para evitar que salgan decimales, si eso pasa el formato de hora resultante saldrá equivoco, es por esto que agregamos el modulo para poder dividir los minutos y las horas,

Page 6: Practica 3 Sub procesos

Ejercicio 1.3Desarrolle un algoritmo que dados 3 números, determine cuál es el mayor, el menor y los muestre en orden ascendente y descendente.

Análisis PrevioI. Solicitar los tres números.

II. Llevar a cabo los subprocesos necesarios para determinar cuál de ellos es el mayor, cuál el menor y cuál el de en medio.

III. Imprimir los resultados.

Diagrama de Flujo

Subproceso “máximo” max <- máximo(a,b,c)I. Se debe determinar cual es el valor más grande de los ingresados al programa.

II. Primero se compara si a es mayor o igual que b y que c.

III. Después se compara si b es mayor o igual que a y que c.

IV. Si ambas condiciones fallan, entonces el mayor es c.

Subproceso “minimo” min <- mínimo(a,b,c)

I. Se debe determinar cual es el valor más pequeño de los ingresados al programa.

II. Primero se compara si a es menor o igual que b y que c.

III. Después se compara si b es menor o igual que a y que c.

IV. Si ambas condiciones fallan, entonces el menor es c.

Page 7: Practica 3 Sub procesos

Subproceso “medio” med <- medio(a,b,c)I. Se debe determinar cual es el valor medio de los ingresados al programa.

II. Primero se compara si a es menor que el máximo y mayor que el mínimo.

III. Después se compara si b es menor que el máximo y mayor que el mínimo.

IV. Posteriormente se compara si c es menor que el máximo y mayor que el mínimo.

V. Si las condiciones fallan, entonces se determina si un par de valores son iguales.

Page 8: Practica 3 Sub procesos

Errores detectados y posibles mejoras El algoritmo es relativamente fácil y esta muy bien estructurado no hay posibles fallas hasta ahora, puesto que hasta los números negativos y reales los puede evaluar.

Ejercicio 4Realizar un algoritmo que al ingresar 2 números, permita al usuario sumarlos, restarlos, dividirlos o multiplicarlos. Realice el ejercicio 1) utilizando estructuras si, sino entonces y 2) utilizando una estructura según.

Análisis previo:I. Crear u menú con las operaciones las cuales se puede realizar

II. Pedir introducir el valor de la operación deseada

III. Si el numero es igual a suma, se llamara un proceso que realice una suma y retornara el valor

IV. Si el numero corresponde a la resta de dos números llamar un subproceso que reste dos números

V. Si el valor ingresado es correspondiente a la multiplicación entonces un proceso diferente haga la multiplicación y que lo regrese su valor final

VI. Si es correspondiente a la resta entonces llamar un proceso que haga la división y el resultado de él lo guarde

VII. Mostrar el resultado dependiendo de la operación realizada

Usando si sino entonces

Diagrama de Flujo

Page 9: Practica 3 Sub procesos

Subproceso suma d<-sumarnumeros(d,c,b)I. Pedir dos números

II. Hacer la suma de los números

III. Regresar al proceso principal el resultado

Subproceso resta d<-restadenumeros(c,b)I. Pedir dos números

II. Restar los números introducidos

III. Regresar al proceso principal el resultado

Page 10: Practica 3 Sub procesos

Subproceso multiplicación d<-multiplicaciondenumeros(c,b)I. Pedir dos números

II. Realizar la operación multiplicación a los números III. Regresar al proceso principal el resultado

Subproceso suma división d<-divisiondenumeros(c,b)I. Dividir los números

II. Pedir dos númerosIII. Regresar al proceso principal el resultado

Page 11: Practica 3 Sub procesos

Posibles mejoras y errores detectadosEn cuanto a les estructura “si si no entonces”, sería adecuado mandar un mensaje de error en caso de que escriban un número diferente a los proporcionados, como en la estructura según.

Ejercicio 1.5Construya un algoritmo que dados dos valores enteros, obtenga el resultado de la siguiente función:

resp={100∗a ,b=1100a ,∧b=2100 /a ,b=3

0 ,∧x=3

-----------------(1)

Análisis previoI. Se despliega el menú que contenga las operaciones disponibles de acuerdo con el valor de b.

II. Se solicita el valor b.

III. Se solicita el valor que se desea utilizar para realizar la operación.

IV. Se mandan los valores de a y b a un subproceso y se espera un resultado de salida.

V. Se imprime el resultado de salida.

Para cualquier otro valor de b

Page 12: Practica 3 Sub procesos

Diagrama de Flujo

Subproceso “decisión” c <- decision(a,b)I. De acuerdo con el valor de b el subprograma decidirá, mediante una estructura “según”, que operación efectuar con el valor de a.

II. Si b es igual a 1 será una multiplicación, si b es igual a 2 una exponenciación, si b es igual a 3 una división y de otro modo el valor retornado será cero.

IV. Regresar el valor de c al programa principa

Page 13: Practica 3 Sub procesos

Errores detectados y posibles mejoras

En cuanto a errores no se detecto ninguno, sin embargo, sería conveniente optimizar los tiempos de espera entre la aparición de las opciones de cálculos a realizar.

Ejercicio 6El número de sonidos emitidos por un grillo en un minuto, es una función de la temperatura (ver eq. 2). Construya un algoritmo que permita calcular la temperatura en grados centígrados °C con base al número de sonidos emitidos por un grillo.

FA=S4+40 ------------- (2)

Dónde:

FA = representa la temperatura en grados Fahrenheit.

S = número de sonidos emitidos por un grillo.

Page 14: Practica 3 Sub procesos

Análisis previo:I. Pedir numero de de sonidos emitidos por un grillo en un minuto.

II. Llamar un subproceso que realice la conversión de grados y la operación para sacar los grados según los sonidos emitidos, el valor resultante guardarlo

III. Mostrar el resultado en pantalla.

Sub proceso cent<-calculo de grados(s, fac)I. Dados los sonidos emitidos, realizar la operación para tener los grados centígrados

II. Convertir los grados centígrados a grados Fahrenheit.

Page 15: Practica 3 Sub procesos

Posibles mejoras y errores detectadosEste es un algoritmo básico solo usa una estructura secuencial no re quiere mucho algoritmo es por eso q no carece de errores hasta dónde puedo evaluarlo, sin en cambio es posible mejorarlo poniendo el primer valor en grados Fahrenheit y en grados centígrados como resultado.

Ejercicio 2.1Realice un algoritmo que al recibir como datos n números enteros, obtenga la suma de los números pares y el promedio de los impares.

Análisis PrevioI. Mediante una estructura de repetición “Repetir” se solicita una lista de números que deberá terminar en un cero.

II. Con esta lista de números se realizarán dos sumatorias, una para los pares y otra para los impares.

III. Mediante un subproceso se calculará el promedio de los impares, enviando como argumentos el número de datos y la sumatoria de los valores de los mismos.

V. Se imprimirán los resultados.

Subproceso “prome” Prom <- prome(Nimpar,I)I. Se calcula el promedio de los números impares mediante el proceso estándar que consiste en dividir la sumatoria de los datos entre el número de ellos.

II. Se retorna este valor al programa principal

Page 16: Practica 3 Sub procesos

Errores detectados y posibles mejorasComo posible mejora podamos agregar la suma de todos los números pares y los impares y además su promedio, errores no se detectaron ninguno.

Problema 2.21. Realice un algoritmo que dado un valor n, genere su tabla de multiplicar.

Análisis previo:I. Pedir el número de tabla de multiplicar que se desea.

II. Agregar un acumulador empezando desde uno que se incremente hasta llegar a 10.

III. Para cuando n sea menor o igual a 10

IV. Pedir que un subproceso realice la operación multiplicar

V. Mostrar el valor de la multiplicación

VI. Si el número no es menor o igual a 10 entonces termina el proceso

Page 17: Practica 3 Sub procesos

Subproceso result<-multiplicacion(n, inc)I. Dados el número de la tabla de multiplicar

II. Multiplicar el número dado por el acumulador (el cual cambiara cada que pase el ciclo)

IV. Regresar al proceso principal el número resultante

Page 18: Practica 3 Sub procesos

Posibles mejoras y errores detectados

Al igual que el problema anterior fue fácil, no requiere de mucha complejidad, por tanto no se hallaron errores, en cuanto a posibles mejoras, podríamos hacer que si quiera otra tabla de multiplicar la pida y se vuelva a hacer otra

Ejercicio 2.3Realice un algoritmo que dado un valor entero n positivo, muestre la siguiente serie, n será el número de elementos que se muestren de la serie.

Si n es 10, entonces se muestran 10 elementos: 2, 7, 10, 15, 18, 23, 26, 31, 34, 39.

Análisis PrevioI. Solicitar un entero positivo que corresponderá con el número de elementos de la serie.

II. Mediante una estructura de control “para”, utilizar un subprograma para calcular el valor de cada elemento de la serie e imprimirlo. Los argumentos del subprograma son el valor anterior de la serie y el lugar que ocupa en la misma.

Page 19: Practica 3 Sub procesos

Diagrama de Flujo

Subproceso “decisión” S <- decisión(i,S)I. Se determina si el elemento que sigue en la serie ocupa una posición par o impar y se toma una decisión con base en dicha determinación.

II. Si el elemento siguiente es par se suman 5 y si es impar se suman 7.

III. Se retorna el valor al proceso principal.

Errores detectados y posibles mejorasNo se encontraron ningún error en las pruebas, aunque como posible mejora nosotros el agregamos una coma para que se hiciera y viera mejor la serie

Page 20: Practica 3 Sub procesos

Problema 42. Realice un algoritmo que al recibir un valor entero positivo, permita calcular la sucesión de ULAM, el proceso termina cuando se llega a 1.

Sucesión de ULAM:

a) Inicia con un valor entero positivo.

b) Si el inicial es par, dividirlo entre 2. Si es impar multiplicarlo por 3 e incrementarlo en 1.

c) Repetir el proceso anterior para obtener la sucesión de ULAM, hasta llegar a 1.

Ejem:

Si el valor ingresado es 11, la sucesión es:

11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1

Análisis previoI. Pedir un número

II. Mientras que el numero no sea 0 hacer:

III. Llamar un subproceso que realice las divisiones correspondientes

IV. Mostrar el resultado del subproceso

V. Repetir el proceso hasta que sea igual a 1

Page 21: Practica 3 Sub procesos

Subproceso v<-sucesión(2, v)I. Si el número es para dividirlo entre 2

II. Si no es par multiplicarlo por 3 y sumarle uno,

III. Enviar el valor nuevo al proceso principal

Posibles mejoras y errores detectadosEn errores no se percibió ninguno, sin en cambio el problema no pedía la sucesión, nosotros como posible mejora le agregamos al diagrama de flujo la salida de la sucesión, con el fin de que se viera que es correcta la sucesión y no tiene un fallo

Page 22: Practica 3 Sub procesos

Ejercicio 2.5Realice un algoritmo que al recibir como dato el monto de una compra, obtenga el pago total que un cliente debe realizar luego de aplicar un descuento, dada la siguiente tabla.

Monto de la compra Descuento

Menor a 800 pesos 0%

Entre 800 y 1500 pesos 10%

Entre 1500 y 5000 pesos 20%

Mayor a 5000 pesos 30%

Análisis PrevioI. Solicitar un monto de compra mayor a cero pesos.

II. Mediante una serie de subprocesos el monto de compra será filtrado para determinar con que descuento corresponde. El argumento enviado a los subprocesos será el monto de compra y se esperará como variable de retorno el total a pagar.

III. Finalmente se imprimirá el resultado.

Diagrama de Flujo

Page 23: Practica 3 Sub procesos

Subprocesos “decision1”, “decision2” y “decision3”T <- decisión(N)

I. Pedir el monto de pago al programa principal.

II. En primera instancia el monto ingresará al subproceso decision1 y en éste se evaluará para saber si es menor o igual que 800, en caso afirmativo el descuento asignado será 0%, en caso contrario mandará la calificación para que sea evaluada en decision2.

III. En decision2 la calificación será evaluada para saber si es menor o igual que 1500 y mayor que 800 para asignar el descuento de 10%, si la condición tampoco se cumple mandará la calificación par que sea evaluada en decision3 y así sucesivamente.

V. Los subprocesos se llaman uno tras otro hasta que pueda ser retornado un valor para el total a pagar.

Errores detectados y posibles mejorasErrores no se encontraron puesto que es fácil el problema, como posible mejora podríamos poner el monto original y además cuanto fue su descuento en pesos

Page 24: Practica 3 Sub procesos

Problema 63. Desarrolle un algoritmo que dado un valor n entero positivo, determine si es primo o no.

Nota: Se dice que un número es primo, si los únicos enteros positivos que lo dividen son exactamente 1 y n.

Análisis previo:I. Pedir un número

II. Pedir que un proceso evalué el numero de divisores que tiene

III. Si el numero de residuos 0 es mayor a 2 quiere decir que no es primo, y si es igual a 2 o inclusive menor quiere decir que es primo

IV. Mostrar si el número es primo o no es primo

Subproceso I. Evaluar todos los números antes del número dado incluyendo el 0

II. Definir un incremento

III. Mientras que el incremento no sea igual al número original

IV. Evaluar si tiene un residuo la división del incremento entre el numero original

V. Si es así agregar uno a el resultado

VI. Repetir el proceso hasta que sea mayor el número al incremento

Page 25: Practica 3 Sub procesos
Page 26: Practica 3 Sub procesos

Posibles mejoras y errores detectadosEn este problema fue difícil para alar un algoritmo que determinara si es primo o no, en cuanto a su desarrollo en diagrama de flujo fue fácil ya que se dio con el algoritmo, evaluamos en distintos números primos y no primos y en todos fue correcto, quiere decir que no hay errores, como posible mejora, podríamos agregar también porque números es divisible, el problema no lo pide pero sería una buena mejora para ver que efectivamente solo es primo si es divisible entre uno y por si mismo

Ejercicio 2.7Desarrolle un algoritmo que al recibir como dato un valor entero positivo, escriba los números perfectos que hay entre 1 y el valor dado. Además que muestre la cantidad de números perfectos que hay en dicho intervalo.

Un número se considera perfecto si la suma de todos sus divisores es igual al propio número, por ejemplo: 6, 28, 496, 8128.

Análisis PrevioI. Se solicita un entero positivo que se convertirá en el límite superior de un proceso de búsqueda de números perfectos desde 6 hasta el número dado.

II. El número deberá ser mayor que uno para que el procedimiento pueda empezar y en caso de que sea menor que 6 se desplegará una leyenda que indique que no existen números perfectos anteriores a dicho valor.

III. En caso de que el número sea igual o mayor que 6, se lleva a cabo un ciclo en el que analizará mediante un subproceso cada número entero desde 6 hasta el valor introducido y determinará si son números perfectos.

IV. El argumento del subproceso será el número que desea determinarse la perfección y la variable de retorno será un valor lógico, es decir, puede ser igual a cero o a uno dependiendo de si el número cumple o no las condiciones necesarias para ser perfecto.

V. Finalmente para cada valor verdadero del subprocesos se imprimirá el resultado y se sumará una unidad a una variable contadora que determinará su lugar en la sucesión de números perfectos encontrados.

Page 27: Practica 3 Sub procesos

Diagrama de Flujo

Subproceso “Perfectos” Hey = perfectos (j)I. Se solicita el valor al proceso principal y se comienza un ciclo que encuentra todos los divisores del número y mediante una variable acumuladora hace la sumatoria de éstos.

II. Mediante una comparación se determina si la sumatoria es igual al valor introducido y en caso de cumplirse la condición se retorna el valor VERDADERO (uno) y en caso contrario se retorna el valor FALSO (cero).

Page 28: Practica 3 Sub procesos

Resultados

Errores detectados y posibles mejorasEste problema es un tanto complicado, sin embargo, no se encontraron errores a la hora de probar el programa

Problema 8

Realice un algoritmo que reciba un número entero positivo n, que muestre el siguiente patrón.

e.g. El valor ingresado fue 9.

Análisis previoI. Pedir que un proceso pida un numero y evalué si es mayor a 0 si no volver a pedir el numero

II. Definimos dos variables en 0 para nuestro proceso

III. Después introducir 2 variables que utilizaremos para espacios

IV. Tendremos que dividir en dos partes una parte para la derecha y otra para la izquierda

V. Derecha. Para cuando el incremento sea igual a el numero original

VI. Hacer que se imprima el incremento sin salta

VII. Repetir hasta que sea igual el numero

Page 29: Practica 3 Sub procesos

VIII. En el incremento dos hacer que se imprima dos espacios hasta que el incremento se igual al el numero original

IX. Izquierda. Del incremento del primer “para” imprimir el incremento y esta ves restar uno al incremento hasta que sea 0

Page 30: Practica 3 Sub procesos

Subproceso num<-imtroducirnumero(a)I. Pedimos un número

II. Evaluamos si el número es mayor o igual a 0

III. Si no lo es volver a pedir el numero hasta que se mayor a 0

Posibles mejoras y errores detectadosComo error se debe destacar que para números más grandes como 1 que requieren un espacio mayor la pirámide se deforma en las primeras filas, como se muestra aquí, como un error que detectamos es que si adentro de un “para” agregamos un sub proceso y en el tratamos de mostrar un resultado, la pirámide no se realizara bien, así que no se metió ningún subproceso dentro de un para

Page 31: Practica 3 Sub procesos

Practica 3 sub procesos

Ejercicio 1.1a 

Realice un algoritmo que obtenga el factorial de un número. El factorial de un número está determinada por la siguiente ecuación.

Ejercicio 1.1a 

Realice un algoritmo que obtenga el factorial de un número. El factorial de un número está determinada por la siguiente ecuación.

Ejercicio 2.1a 

Realice un algoritmo que obtenga el Fibonacci de un número. El Fibonacci de un número está determinada por la siguiente ecuación.

Page 32: Practica 3 Sub procesos

Ejercicio 2.1a 

Realice un algoritmo que obtenga el Fibonacci de un número. El Fibonacci de un número está determinada por la siguiente ecuación.

Ejercicio 3.1a 

Realice un algoritmo que obtenga la suma de dos números enteros no negativos. La suma de dos números enteros no negativos está determinada por la siguiente función.

suma (a ,b )={ a ,∧b=0suma (a ,b−1 )+1 ,∧b>0

Análisis previo

I. Pedir dos números enteros no negativosII. Evaluar si esos números son negativos

III. Si son negativos pedir otra ves los númerosIV. Si no son negativos entoncesV. Si b es igual a 0 entonces la suma es a

VI. Si no entonces al suma es igual a suma (a ,b−1 )+1

VII. Mostrar el resultado

Diagrama de flujo

Page 33: Practica 3 Sub procesos

Resultados

Page 34: Practica 3 Sub procesos

Ejercicio 3.1b

Realice un algoritmo que obtenga la suma de dos números enteros no negativos. La suma de dos números enteros no negativos está determinada por la siguiente función.

suma (a ,b )={ a ,∧b=0suma (a ,b−1 )+1 ,∧b>0

I. Pedir dos números enteros no negativosII. Evaluar si esos números son negativos

III. Llamar un proceso que evalué como se sumaran los númerosIV. Mostrar el resultado

Page 35: Practica 3 Sub procesos

V.

Sub proceso acum<-suma(a, b)

VI. Si son negativos pedir otra ves los númerosVII. Si no son negativos entonces

VIII. Si b es igual a 0 entonces la suma es a

IX. Si no entonces al suma es igual a suma (a ,b−1 )+1

X. Mostrar el resultado

Resultados

Page 36: Practica 3 Sub procesos

Ejercicio 4.1a Realice un algoritmo que obtenga la multiplicación de dos números enteros positivos. La multiplicación de dos números enteros no negativos está determinada por la siguiente función. 

 mult (a ,b )={ 0 ,∧b=0mult (a ,b−1 )+a ,∧b>0

Análisis Previo 1. Se solicitan los valores enteros positivos que se desean multiplicar. 2. Se mandan ambos valores como argumentos del subproceso “multiplicación” y se recibe como valor de retorno el resultado de la multiplicación. 3. Se imprimen los resultados. Diagrama de flujo 

Page 37: Practica 3 Sub procesos

Subproceso “multiplicación” Acum <- multiplicación(a,b)  1. Pedir los valores a multiplicar al programa principal. 2. Mediante un ciclo “para” desde 1 hasta b y una variable acumuladora se llevan a cabo b sumas de a consigo misma. 3. Se retorna al proceso principal el resultado de la multiplicación. 

Page 38: Practica 3 Sub procesos

Ejercicio 4.1b Realice un algoritmo que obtenga la multiplicación de dos números enteros positivos. La multiplicación de dos números enteros no negativos está determinada por la siguiente función. 

mult (a ,b )={ 0 ,∧b=0mult (a ,b−1 )+a ,∧b>0

 Análisis Previo 1. Se solicitan los valores enteros positivos que se desean multiplicar. 2. Se mandan ambos valores como argumentos del subproceso “multiplicación” y se recibe como valor de retorno el resultado de la multiplicación. 3. Se imprimen los resultados. Diagrama de flujo 

Page 39: Practica 3 Sub procesos

Subproceso “multiplicación” Acum <- multiplicación(a,b)  

1. Pedir los valores a multiplicar al programa principal. 2. De acuerdo con una estructura de control “si” se asigna un valor de retorno igual a cero si b es igual a cero, para cualquier otro valor de b se utilizará un subproceso recursivo. 3. Para el proceso recursivo se calcula la multiplicación con base en la suma de a con el resultado del subproceso multiplicación que tenga como argumentos el mismo valor de a y el valor de b disminuido en una unidad, el proceso anterior se repite hasta que b sea igual a cero. 1. Se retorna al proceso principal el resultado de la multiplicación. 

Errores detectados y posibles mejoras 

Page 40: Practica 3 Sub procesos

Para el caso del primer algoritmo, un posible error detectado consiste en que no está definida una multiplicación si alguno de los argumentos de entrada es igual a cero, sin embargo, este inconveniente es inexistente en el algoritmo que utiliza un subproceso recursivo. 

Ejercicio 5.1a Realice un algoritmo que obtenga la potencia de un número entero elevado a otro número entero, positivos ambos. La potencia de un número ab está determinada por la siguiente ecuación. 

pot (a ,b )={ 1 ,∧b=0pot (a ,b−1 )∗a ,∧b>0

 

Análisis previo 1. Se deben solicitar tanto el exponente como la base que se desean utilizar para la potenciación y estos deben ser enteros positivos. 2. Se envían el valor de la base y del exponente como datos al subproceso “exponenciación” y se recibe el resultado de la operación. 3. Finalmente se imprimen el resultado. Diagrama de Flujo

Subproceso “exponenciación” Acum <- exponenciación(a,b) 

1. Pedir el valor de la base y del exponente al programa principal. 2. Mediante un ciclo “para” desde 1 hasta b y una variable acumuladora se llevan a cabo b multiplicaciones de a por sí misma. 3. Se retorna al proceso principal el resultado de la exponenciación.

Page 41: Practica 3 Sub procesos

Ejercicio 5.1b Realice un algoritmo que obtenga la potencia de un número entero elevado a otro número entero, positivos ambos. La potencia de un número ab está determinada por la siguiente ecuación. 

  pot (a ,b )={ 1 ,∧b=0pot (a ,b−1 )∗a ,∧b>0

Análisis previo 4. Se deben solicitar tanto el exponente como la base que se desean utilizar para la potenciación y estos deben ser enteros positivos. 5. Se envían el valor de la base y del exponente como datos al subproceso “exponenciación” y se recibe el resultado de la operación. 6. Finalmente se imprimen el resultado. 

Page 42: Practica 3 Sub procesos

Diagrama de Flujo 

Subproceso “exponenciación” Acum <- exponenciación(a,b) 

1. Pedir el valor de la base y del exponente al programa principal. 2. De acuerdo con una estructura de control “si” se asigna un valor de retorno igual a uno si b es igual a cero, para cualquier otro valor de b se utilizará un subproceso recursivo. 3. Para el proceso recursivo se calcula la exponenciación con base en la multiplicación de a por el resultado del subproceso exponenciación que en este caso tiene como argumentos el mismo valor de a y el valor de b disminuido en una unidad, se repite el proceso anterior hasta que b sea igual a cero. 4. Se retorna al proceso principal el resultado de la exponenciación. 

Page 43: Practica 3 Sub procesos

Errores detectados y posibles mejoras Para el caso del algoritmo que utiliza un subproceso de naturaleza cíclica un posible error consiste en la incapacidad del algoritmo de recibir valores de cero para realizar la exponenciación. En el segundo algoritmo, él que utiliza un subproceso recursivo, existe un problema similar debido a que, a pesar de que en él ya está definido el resultado para exponentes iguales a cero, el resultado de cero elevado a la cero no está definido.  

Page 44: Practica 3 Sub procesos

ConclusiónDentro de la programación estructurada uno de las técnicas más ocupadas es la denominada “divide y vencerás”, la cual consiste en desmembrar un programa complejo en pedazos más fáciles de entender. Otra de las ventajas de esta técnica consiste en que es capaz de disminuir el volumen del código, debido a que en lugar de duplicar innecesariamente secciones enteras del mismo, sólo es necesario invocar a un solo proceso cuantas veces sea necesario.

En este caso, y con el fin de dar solución a los problemas descritos en secciones anteriores, se ha hecho uso de la técnica “divide y vencerás”; sin embargo, se han obtenido resultados mixtos. Por una parte algunos algoritmos parecieran ser más eficientes al haberse creado un subproceso diseñado para llevar a cabo una tarea específica, tal es el caso del que permite conocer una lista de números perfectos y cuyo subproceso consiste en determinar si un número es perfecto. En el otro extremo existen procesos, como él que mediante la introducción de dos valores enteros permite realizar cierta operación aritmética, los cuales se complican innecesariamente debido a la aplicación de dicha técnica.

En estos problemas la mayoría de ellos eran problemas que se resuelven fácilmente, o tienen cierto grado de complejidad que permita mostrar un uso adecuado y bien desarrollado de un sub proceso, claro que en algunos problemas si se podía apreciar bien la implementación de subprocesos. En casos como el de la pirámide de números no es conveniente usar un subproceso y adentro del imprimir o mostrar algún resultado puesto que se modifica el resultado final y no concuerda con lo que debería aparecer

Finalmente, es necesario aclarar que debido a la finalidad meramente pedagógica de estos ejercicios es comprensible que los alcances de la técnica “divide y vencerás” sean en muchos aspectos limitados, no obstante, de su gran valor académico para ilustrar la correcta aplicación de los principios que rigen el uso de subprogramas.

Page 45: Practica 3 Sub procesos

Referencias[1] Ing. Jorge Eloy Toledo Coronel, “Subprogramas” [Online], Apuntes, Facultad de Sistemas e Informática, Instituto Tecnológico del Istmo, Juchitán, Oaxaca, 2012. Disponible en: http://www.itistmo.edu.mx/jetc/Apuntes/UNIDAD_II.pdf

[2] María José Abasolo, “Subprogramas” [Online], Guía de Referencia Básica, Departamento de Matemáticas e Informática, Universidad de las Islas Baleares, Palma de Mallorca, 2003. Disponible en: http://dmi.uib.es/~abasolo/foninf/2002-2003/capitulos/4-subprogramas.html

[3] V. R. González, “El lenguaje de control”, en Control y Robótica, Ed. CFIE: Valladolid, 2005, pp. 55-70.