You are on page 1of 48

Introduccin

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 estn diseados para ejecutar alguna tarea especfica.
Los programas diseados mediante la tcnica divide y vencers, son normalmente
ms fciles de comprender, ya que la estructura de cada subproceso puede ser estudiada
independientemente de los otros.
En esta prctica utilizaremos las estructuras ya conocidas, como la estructura si, si sino
entonces, para, mientras, repetir, etc. Pero adems utilizaremos subprocesos que son un
conjunto de actividades que tienen una secuencia lgica que cumple propsitos claros.
Un Subproceso es un proceso en s mismo, cuya funcionalidad es parte de un proceso
ms 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 rgida del todo debido a que tambin es posible crear
funciones que no tengan ni argumentos ni valores de retorno.

Practicas con subproceso


Ejercicio 1.1
Desarrolle un algoritmo que permita convertir calificaciones numricas a letras,
segn la siguiente tabla:
Calificacin numrica
10
9-8
7-6
5

Valor en letra
A
B
C
F

Anlisis Previo
I.
Se debe solicitar la calificacin, la cual debe ser mayor o igual que cinco
y menor o igual que diez.
II.
Mediante una serie de subprocesos la calificacin ser filtrada para
determinar, por medio de redondeo, a que calificacin en forma de letra
corresponde el valor numrico. El argumento enviado a los subprocesos ser la
calificacin numrica y se esperar como variable de retorno el valor en letra.
III.

Finalmente se imprimir el valor en letra de la calificacin.

Diagrama de Flujo

Subprocesos decision1, decision2, decision3 y


decision4
calif <- decision(a)
I.

Pedir la calificacin al programa principal.

II.
En primera instancia la calificacin 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 calificacin asignada ser A, en caso contrario mandar la
calificacin para que sea evaluada en decision3.
III.
En decision3 la calificacin ser evaluada para saber si es mayor o igual
que 7.5 y menor que 9.5 para asignar la calificacin B, si la condicin tampoco
se cumple mandar la calificacin 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 calificacin en letra.
Diagrama de Flujo

Resultados

Posibles mejoras y errores detectados


El algoritmo pide solamente esas calificaciones pero si se ingresa un nmero
mayor a 10 o menor a 0 el programa no har nada, en este caso como posible
mejora habra que poner un mensaje de error que diga que ingreso una
calificacin inadecuada.

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

Monto por la primera hora, 10 pesos

b)

Despus 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 tambin


deber mostrar el tiempo transcurrido en el siguiente formato hh:mm:ss
Anlisis previo:
I.
Pedir el tiempo en minutos transcurrido en el estacionamiento.
II.

Validar los minutos.

III.

Evaluar si el automvil 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

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
ms transcurrida
III.

Y sumarle los 10 pesos de la primera hora

IV.

Regresar el valor resultante el diagrama principal

Posibles mejoras y errores detectados


Este caso se debe cuidar hay q hacer transformaciones de nmeros 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,

Ejercicio 1.3
Desarrolle un algoritmo que dados 3 nmeros, determine cul es el mayor, el
menor y los muestre en orden ascendente y descendente.
Anlisis Previo
I.
Solicitar los tres nmeros.
II.
Llevar a cabo los subprocesos necesarios para determinar cul de ellos
es el mayor, cul el menor y cul el de en medio.
III.

Imprimir los resultados.

Diagrama de Flujo

Subproceso mximo max <- mximo(a,b,c)


I.
Se debe determinar cual es el valor ms grande de los ingresados al
programa.
II.

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

III.

Despus 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 <- mnimo(a,b,c)


I.
Se debe determinar cual es el valor ms pequeo de los ingresados al
programa.
II.

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

III.

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

IV.

Si ambas condiciones fallan, entonces el menor es c.

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 mximo y mayor que el
mnimo.
III.
Despus se compara si b es menor que el mximo y mayor que el
mnimo.
IV.
Posteriormente se compara si c es menor que el mximo y mayor que el
mnimo.
V.
Si las condiciones fallan, entonces se determina si un par de valores son
iguales.

Errores detectados y posibles mejoras


El algoritmo es relativamente fcil y esta muy bien estructurado no hay
posibles fallas hasta ahora, puesto que hasta los nmeros negativos y reales
los puede evaluar.

Ejercicio 4
Realizar un algoritmo que al ingresar 2 nmeros, permita al usuario sumarlos,
restarlos, dividirlos o multiplicarlos. Realice el ejercicio 1) utilizando estructuras
si, sino entonces y 2) utilizando una estructura segn.
Anlisis previo:
I.
Crear u men con las operaciones las cuales se puede realizar
II.

Pedir introducir el valor de la operacin 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 nmeros llamar un
subproceso que reste dos nmeros
V.
Si el valor ingresado es correspondiente a la multiplicacin entonces un
proceso diferente haga la multiplicacin y que lo regrese su valor final
VI.
Si es correspondiente a la resta entonces llamar un proceso que haga la
divisin y el resultado de l lo guarde
VII.

Mostrar el resultado dependiendo de la operacin realizada

Usando si sino entonces

Diagrama de Flujo

Subproceso suma d<-sumarnumeros(d,c,b)


I.
Pedir dos nmeros
II.

Hacer la suma de los nmeros

III.

Regresar al proceso principal el resultado

Subproceso resta d<-restadenumeros(c,b)


I.
Pedir dos nmeros
II.

Restar los nmeros introducidos

III.

Regresar al proceso principal el resultado

Subproceso multiplicacin d<-multiplicaciondenumeros(c,b)


I. Pedir dos nmeros
II. Realizar la operacin multiplicacin a los nmeros
III. Regresar al proceso principal el resultado

Subproceso suma divisin d<-divisiondenumeros(c,b)


I. Dividir los nmeros

II.
III.

Pedir dos nmeros


Regresar al proceso principal el resultado

Posibles mejoras y errores detectados


En cuanto a les estructura si si no entonces, sera adecuado mandar un
mensaje de error en caso de que escriban un nmero diferente a los
proporcionados, como en la estructura segn.

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

100a , b=1
a
resp= 100 ,b=2
100/a , b=3 -----------------(1)
Para cualquier otro valor de
0 ,x=3
b
Anlisis previo
I.
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 operacin.

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.

Diagrama de Flujo

Subproceso decisin c <- decision(a,b)


I.
De acuerdo con el valor de b el subprograma decidir, mediante una
estructura segn, que operacin efectuar con el valor de a.

II.
Si b es igual a 1 ser una multiplicacin, si b es igual a 2 una
exponenciacin, si b es igual a 3 una divisin y de otro modo el valor retornado
ser cero.
IV.

Regresar el valor de c al programa principa

Errores detectados y posibles mejoras

En cuanto a errores no se detecto ninguno, sin embargo, sera conveniente


optimizar los tiempos de espera entre la aparicin de las opciones de clculos a
realizar.

Ejercicio 6
El nmero de sonidos emitidos por un grillo en un minuto, es una funcin de la
temperatura (ver eq. 2). Construya un algoritmo que permita calcular la
temperatura en grados centgrados C con base al nmero de sonidos emitidos
por un grillo.
S
FA= + 40
------------- (2)
4
Dnde:
FA = representa la temperatura en grados Fahrenheit.
S = nmero de sonidos emitidos por un grillo.
Anlisis previo:
I.
Pedir numero de de sonidos emitidos por un grillo en un minuto.
II.
Llamar un subproceso que realice la conversin de grados y la operacin
para sacar los grados segn 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 operacin para tener los grados
centgrados
II.

Convertir los grados centgrados a grados Fahrenheit.

Posibles mejoras y errores detectados


Este es un algoritmo bsico solo usa una estructura secuencial no re quiere
mucho algoritmo es por eso q no carece de errores hasta dnde puedo
evaluarlo, sin en cambio es posible mejorarlo poniendo el primer valor en
grados Fahrenheit y en grados centgrados como resultado.

Ejercicio 2.1
Realice un algoritmo que al recibir como datos n nmeros enteros, obtenga la
suma de los nmeros pares y el promedio de los impares.
Anlisis Previo
I.
Mediante una estructura de repeticin Repetir se solicita una lista de
nmeros que deber terminar en un cero.
II.
Con esta lista de nmeros se realizarn 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 nmero de datos y la sumatoria de los valores
de los mismos.

V.

Se imprimirn los resultados.

Subproceso prome Prom <- prome(Nimpar,I)


I.
Se calcula el promedio de los nmeros impares mediante el proceso
estndar que consiste en dividir la sumatoria de los datos entre el nmero de
ellos.
II.

Se retorna este valor al programa principal

Errores detectados y posibles mejoras


Como posible mejora podamos agregar la suma de todos los nmeros pares y
los impares y adems su promedio, errores no se detectaron ninguno.

Problema 2.2
1.

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

Anlisis previo:
I.
Pedir el nmero 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 operacin multiplicar

V.

Mostrar el valor de la multiplicacin

VI.

Si el nmero no es menor o igual a 10 entonces termina el proceso

Subproceso result<-multiplicacion(n, inc)


I.
Dados el nmero de la tabla de multiplicar
II.
Multiplicar el nmero dado por el acumulador (el cual cambiara cada que
pase el ciclo)
IV.

Regresar al proceso principal el nmero resultante

Posibles mejoras y errores detectados


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

Ejercicio 2.3
Realice un algoritmo que dado un valor entero n positivo, muestre la siguiente
serie, n ser el nmero 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.
Anlisis Previo
I.
Solicitar un entero positivo que corresponder con el nmero 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.
Diagrama de Flujo

Subproceso decisin S <- decisin(i,S)


I.
Se determina si el elemento que sigue en la serie ocupa una posicin
par o impar y se toma una decisin con base en dicha determinacin.
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 mejoras


No se encontraron ningn error en las pruebas, aunque como posible mejora
nosotros el agregamos una coma para que se hiciera y viera mejor la serie

Problema 4
2.
Realice un algoritmo que al recibir un valor entero positivo, permita
calcular la sucesin de ULAM, el proceso termina cuando se llega a 1.
Sucesin 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 sucesin de ULAM, hasta
llegar a 1.
Ejem:
Si el valor ingresado es 11, la sucesin es:
11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
Anlisis previo
I.
Pedir un nmero
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

Subproceso v<-sucesin(2, v)
I.
Si el nmero 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 detectados


En errores no se percibi ninguno, sin en cambio el problema no peda la
sucesin, nosotros como posible mejora le agregamos al diagrama de flujo la
salida de la sucesin, con el fin de que se viera que es correcta la sucesin y
no tiene un fallo

Ejercicio 2.5
Realice 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
Menor a 800 pesos
Entre 800 y 1500 pesos
Entre 1500 y 5000 pesos
Mayor a 5000 pesos

Descuento
0%
10%
20%
30%

Anlisis Previo
I.
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

Subprocesos decision1, decision2 y decision3


T <- decisin(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 calificacin para
que sea evaluada en decision2.
III.
En decision2 la calificacin ser evaluada para saber si es menor o igual
que 1500 y mayor que 800 para asignar el descuento de 10%, si la condicin
tampoco se cumple mandar la calificacin 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 mejoras


Errores no se encontraron puesto que es fcil el problema, como posible
mejora podramos poner el monto original y adems cuanto fue su descuento
en pesos

Problema 6
3.
Desarrolle un algoritmo que dado un valor n entero positivo, determine si
es primo o no.
Nota: Se dice que un nmero es primo, si los nicos enteros positivos que lo
dividen son exactamente 1 y n.
Anlisis previo:
I.
Pedir un nmero
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 nmero es primo o no es primo

Subproceso
I.
Evaluar todos los nmeros antes del nmero dado incluyendo el 0
II.

Definir un incremento

III.

Mientras que el incremento no sea igual al nmero original

IV.
Evaluar si tiene un residuo la divisin del incremento entre el numero
original
V.

Si es as agregar uno a el resultado

VI.

Repetir el proceso hasta que sea mayor el nmero al incremento

Posibles mejoras y errores detectados


En este problema fue difcil para alar un algoritmo que determinara si es primo
o no, en cuanto a su desarrollo en diagrama de flujo fue fcil ya que se dio con
el algoritmo, evaluamos en distintos nmeros primos y no primos y en todos fue
correcto, quiere decir que no hay errores, como posible mejora, podramos
agregar tambin porque nmeros es divisible, el problema no lo pide pero sera
una buena mejora para ver que efectivamente solo es primo si es divisible entre
uno y por si mismo

Ejercicio 2.7
Desarrolle un algoritmo que al recibir como dato un valor entero positivo,
escriba los nmeros perfectos que hay entre 1 y el valor dado. Adems que
muestre la cantidad de nmeros perfectos que hay en dicho intervalo.
Un nmero se considera perfecto si la suma de todos sus divisores es igual al
propio nmero, por ejemplo: 6, 28, 496, 8128.
Anlisis Previo
I.
Se solicita un entero positivo que se convertir en el lmite superior de un
proceso de bsqueda de nmeros perfectos desde 6 hasta el nmero dado.
II.
El nmero 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 nmeros perfectos anteriores a dicho valor.
III.
En caso de que el nmero sea igual o mayor que 6, se lleva a cabo un
ciclo en el que analizar mediante un subproceso cada nmero entero desde 6
hasta el valor introducido y determinar si son nmeros perfectos.
IV.
El argumento del subproceso ser el nmero que desea determinarse la
perfeccin y la variable de retorno ser un valor lgico, es decir, puede ser igual
a cero o a uno dependiendo de si el nmero 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 sucesin de nmeros perfectos encontrados.
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 nmero y mediante una variable acumuladora
hace la sumatoria de stos.
II.
Mediante una comparacin se determina si la sumatoria es igual al valor
introducido y en caso de cumplirse la condicin se retorna el valor
VERDADERO (uno) y en caso contrario se retorna el valor FALSO (cero).

Resultados

Errores detectados y posibles mejoras


Este 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 nmero entero positivo n, que


muestre el siguiente patrn.
e.g. El valor ingresado fue 9.

Anlisis previo
I.
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.

Despus 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

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

Subproceso num<-imtroducirnumero(a)
I.
Pedimos un nmero
II.

Evaluamos si el nmero 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 detectados


Como error se debe destacar que para nmeros ms grandes como 1 que
requieren un espacio mayor la pirmide 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
pirmide no se realizara bien, as que no se meti ningn subproceso dentro de
un para

Practica 3 sub procesos


Ejercicio 1.1a
Realice un algoritmo que obtenga el factorial de un nmero. El factorial de un
nmero est determinada por la siguiente ecuacin.

Ejercicio 1.1a
Realice un algoritmo que obtenga el factorial de un nmero. El factorial de un
nmero est determinada por la siguiente ecuacin.

Ejercicio 2.1a

Realice un algoritmo que obtenga el Fibonacci de un nmero. El Fibonacci de


un nmero est determinada por la siguiente ecuacin.

Ejercicio 2.1a

Realice un algoritmo que obtenga el Fibonacci de un nmero. El Fibonacci de


un nmero est determinada por la siguiente ecuacin.

Ejercicio 3.1a
Realice un algoritmo que obtenga la suma de dos nmeros enteros no
negativos. La suma de dos nmeros enteros no negativos est determinada por
la siguiente funcin.

suma ( a , b ) =

,b=0
{suma ( aa,b1
) +1,b>0

Anlisis previo
I.
II.
III.
IV.
V.

VI.

Pedir dos nmeros enteros no negativos


Evaluar si esos nmeros son negativos
Si son negativos pedir otra ves los nmeros
Si no son negativos entonces
Si b es igual a 0 entonces la suma es a
s uma ( a , b1 )+ 1
Si no entonces al suma es igual a

VII.

Mostrar el resultado

Diagrama de flujo

Resultados

Ejercicio 3.1b
Realice un algoritmo que obtenga la suma de dos nmeros enteros no
negativos. La suma de dos nmeros enteros no negativos est determinada por
la siguiente funcin.

suma ( a , b ) =

I.
II.
III.
IV.

,b=0
{suma ( aa,b1
) +1,b>0

Pedir dos nmeros enteros no negativos


Evaluar si esos nmeros son negativos
Llamar un proceso que evalu como se sumaran los nmeros
Mostrar el resultado

V.

Sub proceso acum<-suma(a, b)


VI.
VII.
VIII.

IX.
X.

Si son negativos pedir otra ves los nmeros


Si no son negativos entonces
Si b es igual a 0 entonces la suma es a
s uma ( a , b1 )+ 1
Si no entonces al suma es igual a
Mostrar el resultado

Resultados

Ejercicio 4.1a
Realice un algoritmo que obtenga la multiplicacin de dos nmeros enteros positivos.
La multiplicacin de dos nmeros enteros no negativos est determinada por la
siguiente funcin.

mult ( a , b )=

{mult ( a ,0,b=0
b1 )+ a ,b >0

Anlisis Previo
1.

Se solicitan los valores enteros positivos que se desean multiplicar.

Se mandan ambos valores como argumentos del subproceso multiplicacin y


se recibe como valor de retorno el resultado de la multiplicacin.
2.

3.

Se imprimen los resultados.

Diagrama de flujo

Subproceso multiplicacin
Acum <- multiplicacin(a,b)

1.

Pedir los valores a multiplicar al programa principal.

Mediante un ciclo para desde 1 hasta b y una variable acumuladora se llevan a


cabo b sumas de a consigo misma.
2.

3.

Se retorna al proceso principal el resultado de la multiplicacin.

Ejercicio 4.1b
Realice un algoritmo que obtenga la multiplicacin de dos nmeros enteros positivos.
La multiplicacin de dos nmeros enteros no negativos est determinada por la
siguiente funcin.
mult ( a , b )=

{mult ( a ,0,b=0
b1 )+ a ,b >0

Anlisis Previo
Se solicitan los valores enteros positivos que se desean multiplicar.

1.

Se mandan ambos valores como argumentos del subproceso multiplicacin y


se recibe como valor de retorno el resultado de la multiplicacin.
2.

Se imprimen los resultados.

3.

Diagrama de flujo

Subproceso multiplicacin
Acum <- multiplicacin(a,b)

1.

2.

3.

1.

Pedir los valores a multiplicar al programa principal.


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.
Para el proceso recursivo se calcula la multiplicacin con base en la suma de
a con el resultado del subproceso multiplicacin 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.
Se retorna al proceso principal el resultado de la multiplicacin.

Errores detectados y posibles mejoras


Para el caso del primer algoritmo, un posible error detectado consiste en que no est
definida una multiplicacin 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 nmero entero elevado a otro


nmero entero, positivos ambos. La potencia de un nmero

ab

est determinada por

la siguiente ecuacin.
pot ( a , b )=

{ pot ( a , 1,b=0
b1 )a ,b> 0

Anlisis previo
Se deben solicitar tanto el exponente como la base que se desean utilizar para la
potenciacin y estos deben ser enteros positivos.
1.

Se envan el valor de la base y del exponente como datos al subproceso


exponenciacin y se recibe el resultado de la operacin.
2.

3.

Finalmente se imprimen el resultado.

Diagrama de Flujo

Subproceso exponenciacin

Acum <- exponenciacin(a,b)


1.

2.

3.

Pedir el valor de la base y del exponente al programa principal.


Mediante un ciclo para desde 1 hasta b y una variable acumuladora se llevan a
cabo b multiplicaciones de a por s misma.
Se retorna al proceso principal el resultado de la exponenciacin.

Ejercicio 5.1b

Realice un algoritmo que obtenga la potencia de un nmero entero elevado a otro


nmero entero, positivos ambos. La potencia de un nmero

ab

est determinada por

la siguiente ecuacin.

pot ( a , b )=

{ pot ( a , 1,b=0
b1 )a ,b> 0

Anlisis previo
Se deben solicitar tanto el exponente como la base que se desean utilizar para
la potenciacin y estos deben ser enteros positivos.
4.

Se envan el valor de la base y del exponente como datos al subproceso


exponenciacin y se recibe el resultado de la operacin.
5.

Finalmente se imprimen el resultado.

6.

Diagrama de Flujo

Subproceso exponenciacin
Acum <- exponenciacin(a,b)
1.

Pedir el valor de la base y del exponente al programa principal.

2.

3.

4.

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.
Para el proceso recursivo se calcula la exponenciacin con base en la
multiplicacin de a por el resultado del subproceso exponenciacin 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.
Se retorna al proceso principal el resultado de la exponenciacin.

Errores detectados y posibles mejoras


Para el caso del algoritmo que utiliza un subproceso de naturaleza cclica un posible
error consiste en la incapacidad del algoritmo de recibir valores de cero para realizar la
exponenciacin. 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.

Conclusin
Dentro de la programacin estructurada uno de las tcnicas ms ocupadas es
la denominada divide y vencers, la cual consiste en desmembrar un
programa complejo en pedazos ms fciles de entender. Otra de las ventajas
de esta tcnica consiste en que es capaz de disminuir el volumen del cdigo,
debido a que en lugar de duplicar innecesariamente secciones enteras del
mismo, slo es necesario invocar a un solo proceso cuantas veces sea
necesario.
En este caso, y con el fin de dar solucin a los problemas descritos en
secciones anteriores, se ha hecho uso de la tcnica divide y vencers; sin
embargo, se han obtenido resultados mixtos. Por una parte algunos algoritmos
parecieran ser ms eficientes al haberse creado un subproceso diseado para
llevar a cabo una tarea especfica, tal es el caso del que permite conocer una
lista de nmeros perfectos y cuyo subproceso consiste en determinar si un
nmero es perfecto. En el otro extremo existen procesos, como l que
mediante la introduccin de dos valores enteros permite realizar cierta
operacin aritmtica, los cuales se complican innecesariamente debido a la
aplicacin de dicha tcnica.
En estos problemas la mayora de ellos eran problemas que se resuelven
fcilmente, 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 poda apreciar bien la implementacin de subprocesos. En
casos como el de la pirmide de nmeros no es conveniente usar un
subproceso y adentro del imprimir o mostrar algn resultado puesto que se
modifica el resultado final y no concuerda con lo que debera aparecer

Finalmente, es necesario aclarar que debido a la finalidad meramente


pedaggica de estos ejercicios es comprensible que los alcances de la tcnica
divide y vencers sean en muchos aspectos limitados, no obstante, de su
gran valor acadmico para ilustrar la correcta aplicacin de los principios que
rigen el uso de subprogramas.

Referencias
[1]
Ing. Jorge Eloy Toledo Coronel, Subprogramas [Online], Apuntes,
Facultad de Sistemas e Informtica, Instituto Tecnolgico del Istmo, Juchitn,
Oaxaca, 2012. Disponible en:
http://www.itistmo.edu.mx/jetc/Apuntes/UNIDAD_II.pdf
[2]
Mara Jos Abasolo, Subprogramas [Online], Gua de Referencia
Bsica, Departamento de Matemticas e Informtica, 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. Gonzlez, El lenguaje de control, en Control y Robtica, Ed.
CFIE: Valladolid, 2005, pp. 55-70.