Está en la página 1de 7

Prctica 05 Desarrolle:

1. Utilizando el concepto de recursividad, realice los siguientes algoritmos: a. Calcule el factorial de un nmero. Desarrollo Factorial_rec(N) (N es el nmero del que se hallar la factorial, siendo un valor entero, positivo o nulo) Si (N=0) Hacer Factorial_rec Si no Hacer Factorial_recN!Factorial_rec(N" ) Fin Si b. Calcular los primeros nmeros pares. Desarrollo #ares_rec(N) (N es el nmero de pares que se desean, siendo un valor entero, positivo) Si (N= ) $scri%ir (&) Si no $scri%ir (&!N) #ares_rec(N" ) Fin Si c. Calcular los nmeros menores !ue 100 de la serie de "ibonnacci. Desarrollo Fi%onacci_rec(N) (N es el nmero entero ' positivo, en este caso 00) Si ((N=0) o (N= )) Hacer Fi%onacci_recN Si no Hacer Fi%onacci_rec Fi%onacci_rec(N" )(Fi%onacci_rec(N"&) Fin Si #. $esolver el problema de las %orres de &anoi aplicando $ecursividad. 'upongamos !ue se tiene ( postes eti!uetados con ), *, C + suponga !ue en el poste ) se encuentra un nmero finito de discos de tama,o decreciente. 'upongamos para el desarrollo del algoritmo se tenga: - ( discos. .l /uego consiste en trasladar o mover los discos del poste ) al poste C, usando como au0iliar el poste *. 1as reglas del /uego son: 2 'olo puede moverse un disco cada vez espec3ficamente, + solo el disco superior de un poste se puede mover a otro poste. 2 unca puede 4aber un disco ma+or sobre otro menor. Desarrollo Hanoi_rec(N) (N es el nmero de discos, entero ' positivo, en este caso )) Si (N= ) $scri%ir *+over un disco de ,-./$N a 0$S1.N,2 Si no

Prctica 05
3+over N" discos de la torre ,-./$N a la 456.7.4-8 Hanoi_rec (N" , ,-./$N, 456.7.4-, 0$S1.N,) $scri%ir *+over un disco de ,-./$N a 0$S1.N,2 3+over N" discos de la torre 456.7.4- a la 0$S1.N,8 Hanoi (N" , 456.7.4-, 0$S1.N,, ,-./$N) Fin Si torre

torre

(. $ealizar el algoritmo !ue corresponda a realizar las acciones siguientes como: 5nsertar cola, eliminar cola + la funci6n cola vacia. Para el caso de una cola circular representada por la siguiente figura:
94I F.N K 4 I 9 0 $ 94I ) F.N L 94I ) F.N & . J 9 0 $ F / H

9 0 $ F / H

Desarrollo (9,74 : 9,749.-; $s la cola en s<= +46; 0e%ido a que se usar arre>los unidimensionales para representar la cola, +46 vendr<a a ser la capacidad m?ima de la cola= F-$N1$; .ndica la posici@n de la ca%ecera de la cola= F.N47; .ndica la posici@n del ltimo valor in>resado en la cola, 041,; $s el valor in>resado=) .nsertar_cola(9,74, +46, F-$N1$, F.N47, 041,) Si (F.N47A+46) 3Berifica que ha' espacio li%re8 Hacer F.N47F.N47( 34ctualiCa F.N478 ' 9,74DF.N47E041, Si (F.N47= ) 3Se insert@ el primer elemento de 9,748 Hacer F-$N1$ F Fin Si Si No $scri%ir *0es%ordamiento G 9ola llena2 Fin Si $limina_cola(9,74, F-$N1$, F.N47, 041,) Si (F-$N1$H=0) 3Berifica que la cola no este vacia8 041,9,74DF-$N1$E Si (F-$N1$=F.N47) 3Si ha' un solo elemento8 Hacer F-$N1$0 ' F.N470 3.ndica 9,74 vacia8 Si No Hacer F-$N1$F-$N1$( Fin Si

Prctica 05
Si No $scri%ir *Su%des%ordamiento G 9ola Bacia2 Fin Si 9ola_vacia(9,74, F-$N1$, I4N0) (I4N0; $s una varia%le %ooleana que indicara si la cola esta vacia) Si (F-$N1$=0) Hacer I4N0B$-040$-, Si No Hacer I4N0B$-040$-, Fin Si .nserta_circular(9,749.-, +46, F-$N1$, F.N47, 041,) (+46; $n este caso es L) Si ((F.N47=+46) ' (F-$N1$= )) o ((F.N47( )=F-$N1$) $scri%ir *0es%ordamiento G 9ola llena2 Si No Si (F.N47=+4?) Hacer F.N47 Si No Hacer F.N47F.N47( Fin Si Hacer 9,749.-DF.N47E041, Si (F-$N1$=0) Hacer F-$N1$ Fin Si Fin Si $limina_circular(9,749.-, +46, F-$N1$, F.N47, I41,) (+46; $n este caso es L) Si (F-$N1$=0) 3Berifica si la cola esta vacia8 $scri%ir *Su%des%ordamiento G 9ola vacia2 Si No Hacer 041,9,749.-DF-$N1$E Si (F-$N1$=F.N47) 3Si ha' solo un elemento8 Hacer F-$N1$0 ' F.N470 Si No Si (F-$N1$=+46) Hacer (F-$N1$ ) Si No Hacer F-$N1$F-$N1$( Fin Si Fin Si Fin Si 7. $ealizar un algoritmo para traducir una e0presi6n infi/a en postfi/a, 4aciendo uso de una pila, 8)9 es el numero m0imo de elementos !ue pueden alamacenar la pila. Desarrollo 9onv_postfiMa($l, $#,S1) +ientras ($l sea diferente de la cadena vacia) repetir 1omar el s<m%olo ms a la iCquierda de $l= -ecortar lue>o la e?presi@n= Si (el s<m%olo es parNntesis iCquierdo)

Prctica 05
$ntonces (#oner s<m%olo en #.74, se asume que ha' espacio en #.74) 7lamar a #one con #.74, 1,#$, +46 ' s<m%olo= Si No Si ($l s<m%olo es parNntesis derecho) $ntonces +ientras(#.74D1,#$E=Hparentesis iCquierdo)repet 7lamar a Ouita con #.74, 1,#$ ' 041, Hacer $#,SA" $#,S(041, Fin +ientras 7lamar a Ouita con #.74, 1,#$ ' 041, (Se quita el parNntesis iCquierdo de #.74 ' no se a>re>a a $#,S) Si no Si(el s<m%olo es un operando) 4>re>ar s<m%olo a $#,S Si No (es un operador) 7lamar a #ila_vacia con #.74, 1,#$, I4N0 +ientras (I4N0=F47S,) ' (la prioridad del operador sea menor o i>ual que la prioridad del operador que esta en la cima de #.74) 7lamar a Ouita con #.74, 1,#4 ' 041, Hacer $#,S A" $#,S(041, 7lamar a #ila_vacia con #.74, 1,#$ ' I4N0 Fin Si 7lamar a #one con #.74, 1,#$, +46 ' s<m%olo Fin Si Fin Si Fin Si 7lamar a #ila_vacia con #.74, 1,#$, I4N0 +ientras (I4N0=F47S,) repetir 7lamar a Ouita con #.74, 1,#$, 041, Hacer $#,S A" $#,S ( 041, 7lamar a #ila_vacia con #.74, 1,#$ ' I4N0 Fin +ientras $scri%ir $#,S

5. Sea la cola de prioridades siguiente mantenida en una Lista Unidireccional


Desarrollo

Realizar los algoritmos de insercin y eliminacin


Pinclude AiostreamQ Pinclude Astdli%=hQ usin> namespace stdF templateAclass 1.#,Q class colaF templateAclass 1.#,Q classnodo3 pu%lic; nodo(1.#, v, intprio, nodoA1.#,Q !si>)3 valor=vF prioridad=prioF si>uiente=si>F

Prctica 05 8 private; 1.#, valorF int prioridadF nodoA1.#,Q !si>uienteF friendclass colaA1.#,QF 8F templateAclass 1.#,Q class cola3 pu%lic; cola(); primero(N577), ultimo(N577)38 Rcola()F void 4nadir(1.#, v, intprio)F 1.#, 7eer()F private; nodoA1.#,Q !primero, !ultimoF 8F templateAclass 1.#,Q colaA1.#,Q;;Rcola()3 Shile(ultimo) 7eer()F 8 templateAclass 1.#,Q void colaA1.#,Q;;4nadir(1.#, v, intprio)3 nodoA1.#,Q !N,!au?,!au?&F N=neS nodoA1.#,Q(v,prio,ultimo)F if(Hprimero)3 TTsi esta vacio primero=NF ultimo=NF 8else3TT si ha' elementos if(N"QprioridadAprimero"Qprioridad)3 N"Qsi>uiente=primeroF primero=NF 8else3 au?=primeroF au?&=primero"Qsi>uienteF Shile(au?&H=N577UUN"QprioridadQau?&"Qprioridad)3 au?=au?&F au?&=au?"Qsi>uienteF 8 au?"Qsi>uiente=NF N"Qsi>uiente=au?&F if(au?&==N577)3 ultimo=NF 8 8 8 8 5

Prctica 05

templateAclass 1.#,Q 1.#, colaA1.#,Q;;7eer()3 nodoA1.#,Q !NF 1.#, vF N=primeroF if(Hprimero)3 return 0F 8 primero=N"Qsi>uienteF v=N"QvalorF delete(N)F if(Hprimero)3 ultimo=N577F 8 return vF 8

6. Sea la cola de prioridades siguiente mantenida en un Arreglo Bidimensional como se expresa en la igura siguiente:
Desarrollo

499.,N_B49., (N, F-$, F.N) .N.9., S. (F-$ = N V F.N = N( ) -etornar verdad S.N, -etornar falso F.N_S. F.N 499.,N_40.9.,N4- (F-$, F.N, N, B) .N.9., S. (F-$ = N V F.N = (F-$ = F.N G $scri%ir (*No e?iste espacio2) S.N, S. (F.N = ) F.N = N S.N, F.N = F.N " F.N_S. 4 D#-E DF.NE = B F.N_S. F.N 499.,N_$7.+.N4- (F-$, F.N, N, #-) .N.9., S. (B49., (F-$, F.N)) $scri%ir (*4rre>lo vacio2)

))

Prctica 05 S.N, B = 4 D#-E DF-$E S. (F.N = F-$) F.N = N ( F-$ = N S.N, S. (F-$ = ) F-$ = N S.N, F-$ = F-$ " F.N_S. F.N_S. F.N_S. F.N 499.,N_#-.N9.#47 () .N.9., $scri%ir (*.n>rese su opci@n2) $scri%ir (W D E .nsertarW) $scri%ir (* D&E $liminar2) 7eer (opc) S$/XN S$4 (opc) H49$9aso ; $scri%ir (*.n>rese el valor2) 7eer (B47) 40.9.,N4- (F-$, F.N, N, B) Saltar 9aso &; $7.+.N4- (F-$, F.N, N, B) Saltar F.N_S$/5N S$4 F.N

También podría gustarte