You are on page 1of 9

Ejemplo 3.5.

2:
La secuencia de Fibonacci es muy conocida en los circulos matemticos y
tiene la particularidad que cada nmero es igual a la suma de 2 anteriores
trminos. La serie de Fibonacci comienza con los nmeros 0 y 1,
produciendo la siguiente secuencia: 0, 1, 1, 2, 3,5, 8, 13,.,., etc. Muestre
todo. Muestre todos los nmeros de Fibonacci que un nmero dado.

Solucin:

Definicin de variables:

m: mximo nmero Fibonacci a mostrar


a : ensimo nmero Fibonacci
b : ensimo +1 nmero Fibonacci

Diagrama N/S

Leer m
a=0
b= 1
Imprimir a
mientras ( b < m)
Imprimir b
c=a+b
a=b
b=c

El algoritmo va calculando cada trmino de la secuencia como la suma del trmino


ensimo y el trmino ensimo + 1. Observe la necesidad de una tercera variable
a la que llamamos c, y sirve para no perder el valor de la suma cuando
cambiamos a y b.
Ejemplo 3.5.3:
Calcule los divisores comunes de dos nmeros.Por ejemplo los divisores
comunes de 6 y 18 1,2,3 y 6.

Solucin:
Definicin de variables:
a: primer nmero
b: segundo nmero
i: posibles divisores

El algoritmo va generando los posibles divisores (i), desde la unidad y


mientras este sea menor que ambos nmeros. Observe el uso del operador de
relacin AND (en C++ es &&), pues es necesario considerar el caso de que
uno sea mltiplo del otro (por ejemplo 4 y 8).

El operador MOD obtiene el resto de la divisin entera entre sus argumentos


y por lo tanto si estas divisiones tienen como resto cero, i divide a los
nmeros. En C++ el operador MOD se implementa haciendo que ambos
argumentos sean de alguno de los tipos enteros (int, long int, unsigned int,
etc.) y operndolos con %.

Diagrama N/S

Leer a, b
i= 1
mientras ( i<= a AND i<=b )
a MOD i == 0 AND
b MOD i==0
V F
Imprimir i
i=i+1

Ejemplo 3.5.4:
Factorizar un nmero ingresado por teclado. Por ejemplo 8 = 2 x 2 x2.
Solucin:

Definicin de variables:

n: nmero cuyos factores se desean obtener


i: posibles factores

No debemos confundir el trmino factorizar que significa encontrar todos los


factores primos de un nmero y el trmino factorial que significa el producto
de todos los nmeros consecutivos desde la unidad hasta el mismo nmero.

Para encontrar todos los factores de un nmero necesitamos generar los


posibles valores que puedan dividir a dicho nmero. Esto se logra con la
variable i que inicializamos en 2, no se considera el 1 porque es un factor de
todos los nmeros. El bucle se ejecuta mientras estos posibles factores
i sean menores que el nmero n. Si i divide exactamente a n entonces le
sacamos el factor i mediante la divisin entera n = n / i, y lo imprimimos. En
este caso i no aumenta en una unidad, pues deber volver a probar si i es
nuevamente un factor de n. El incremento de i ocurre solamente cuando i no
dividi a n ejecutndose la parte correspondiente al else.

Diagrama N/S

Leer n
i=2
mientras (i< =n )
n MOD i == 0
V F
n = n/ i
Imprimir i i = i+ l

Ejemplo 3.5.5:
Escriba un algoritmo que diga si un nmeroes primo.
Solucin:
Definicin de variables:
n: nmero a evaluar
i: posible divisor
band: 0 indica que no es primo

Un nmero es primo, cuando solamente es divisible por la unidad y por s


mismo. Entonces, necesitamos encontrar un nmero i mayor que 1 pero
menor a n, que divida exactamente a n, para afirmar que n no es primo. Si
esta bsqueda no es satisfactoria el nmero ser primo.
Suponemos pues, que todo nmero es primo, hasta que se demuestre lo
contrario; as que usaremos un indicador bandera (flag) representado por la
variable band. Si band = 1 el nmero es primo y no lo es cuando band = 0.
Comenzamos inicializando los posibles divisores i, igual a n/2, pues no
existen divisores que sean mayores que la mitad del nmero, para ir
preguntando si i divide a n, en este caso debemos cambiar band a cero,
indicando que el nmero n ha sido dividido por otro nmero i diferente de 1 y
de e1 mismo, y por lo tanto n ya no ser primo. Al terminar el bucle,
Preguntamos por band si fuera igual a 1, el n ser primo y no primo en caso
contrario.

Diagrama N/S

Leer n
i=n/2
band =1
mientras (i >1 )
n MOD i == 0
V F
band = 0 i=i-l
band = =1
V F

Imprimir Imprimir
"Es primo "No es primo"

Ejemplo 3.5.6:
Escriba un programa que permita reducir una fraccin a su mnima
expresin. Por ejemplo: 28/64 = 7/16.
Solucin:

Definicin de variables:

a : numerador
b: denominador
i: posible divisor de a y b

Basta con probar si i divide al numerador y al denominador al mismo tiempo, para


cada i desde 2 y mientras sea menor a ambos nmeros. Si es un divisor de a y
b, entonces simplificar la fraccin en caso contrario probar con el siguiente i.

Diagrama N/S

Leer a, b

i=2
mientras ( i< =a AND i<=b)

a MOD i == 0 AND
b MOD i= = 0

V F
a=a/i
i = i+ l

b=b/i

Imprimir
a, , b

Ejemplo 3.5.7:
Lea un nmero y forme otro nmero con las cifras en orden inverso. As si el
nmero es 12345 el nuevo nmero ser 54321.
Solucin:

Definicin de variables:

n: numero cuyos dgitos se invertirn


inv: nmero invertido

Para obtener un nuevo nmero inv, formado por los dgitos de n, pero en
orden invertido, debemos obtener cada uno de los dgitos de n, e ir
desplazndolos un valor posicional (unidad, decena, centena, etc.). Cada uno
de los dgitos, pueden ser obtenidos al buscar el resto de la divisin entera
entre 10 (n MOD 10) y se debe ir incrementando el valor posicional
mediante la multiplicacin del resto por 10, y su acumulacin en la variable
inv. Se puede usar la divisin entera (que de manera estndar se representa
mediante el operador DIV, y que en C++, se implementa con el operador /)
siempre y cuando sus argumentos sean de tipo entero. El ciclo se ejecuta
mientras el nmero an tenga dgitos que obtener (mientras n sea mayor
que cero), luego del cual imprimimos inv.

Diagrama N/S

Leer n

inv = 0

mientras ( n >0 )

inv = 10*inv + n MOD 10


n = n DIV 10

Imprimir
inv

Ejemplo 3.5.8:
Un nmero se considera perfecto cuando la suma de sus divisores es igual al
nmero. Por ejemplo 6 tiene como divisores a 1, 2 y 3 y como 1+2+3= 6, el
nmero 6 ser perfecto; 28 tiene como divisores a 1,2, 4, 7, 14, luego 28 es
perfecto pues 1+2+ 4+7+14=28, lo mismo ocurre con 496 y 8128. Escriba
un programa que lea un nmero y diga si es perfecto
Solucin;

Definicin de variables:

n: numero a evaluar
s: suma de los divisores
i: posibles divisores

Basta con obtener sus divisores y sumarlos. Utilizaremos la siguiente


estrategia, comenzando desde la mitad del nmero n iremos probando los
posibles divisores i, disminuyendo i de uno en uno, mientras i sea mayor que
cero.

En caso de que n sea dividido exactamente por i acumular i en s, y probar


siguiente i. Al final del bucle preguntamos si la suma s, result ser igual al
nmero digitado n, en cuyo caso imprimiremos que n es perfecto.

Diagrama N/S

Leer n
s=0
i=n/2
mientras (i >0 )
n MOD i == 0
V F
s=s+1
i=i-l
s = =1
V F

Imprimir Imprimir
"Es perfecto" "No es perfecto"

Ejemplo 3.5.9:
Los nmeros Amstrong o cubos perfectos, son aquellos que sumados a los
cubos de sus dgitos nos dan el mismo nmero. Por ejemplo 153 es un cubo
perfecto pues 13 + 53 + 33 = 153. Lea un nmero y diga si es o no, un cubo
perfecto.
Solucin:
Definicin de variables:

n: nmero a evaluar
se: suma de los cubos de sus cifras
temp: se iguala inicialmente a n, y sirve para trabajar en el algoritmo sin
perder n

De manera similar al ejercicio anterior pero esta vez obtenemos cada dgito
para elevarlo al cubo y acumularlo en sc. Si se resulta ser igual a n, entonces
el nmero es un cubo perfecto.

Pruebe el algoritmo con los siguientes cubos perfectos: 1, 153, 370, 371 y
407.

Diagrama N/S

Leer n
sc = 0
temp = n
mientras (temp >0 )
sc = sc + (temp MOD 10)3
temp = temp DIV 10
n = = sc
V F
Imprimir Imprimir
"Cubo perfecto" "No es cubo perfecto

You might also like