Sei sulla pagina 1di 25

LA PROGRAMACIN ESTRUCTURADA

E l c onc e pt o de pr o gr am ac i n es tr uc t ura d a s ur ge e n la d c ad a d el 6 0 , e n v irt u d d e la nec es i da d d e c o nt ar c on t c n ic as de pro gr a m ac i n q ue perm it i er a n s im pl if ic ar la r es o l u c i n de pro b l em as c om p lej os . D ic ha t c n ic a , c o ns is t e e n r e al i za r u n a d i v is i n d e l pr o bl em a e n s egm en t os o par t es m s m an ej a b les , qu e p ud i er an s er c or ro b ora d as a is la d am ent e. A l r ea l i za rs e u na Com pr ob ac i n f u nc io n a l d e c a d a p art e p or s ep a rad o , e l e ns am bl e d e las m ism as e n u n a a p l ic a c i n n ic a, r ed uc e c o ns id er ab l em en te el ti e m po e n la l oc a l i za c i n d e err ores y, f u nd am en ta l m ente , i nc r em ent a l a c oh er e nc i a y e le g anc i a d el c d i go es c r it o. S in em ba rg o, l a es t r uc t ur ac i n por s i s o l a no er a s uf ic i en te . S e nec es it a ba q u e s us f un dam en t os f u er a n a s im il a dos po r l os l e ng uaj es d e pr o gr am ac i n . E l pr im er l e ng u aj e de a l to n i ve l d is e a do p ar a ens e a r e l f unc i on am i en to d e l a pro gr am ac i n es truc t ura d a f u e e l P as c al . Es t e le n gu aj e , a l ob l i ga r a ut i l i za r e s tric t as re g l as c o n r es pec t o a l a d ec l arac i n de v ar ia b l es , a l a es tr uc t ur ac i n d e l a a p l ic ac i n y a l f luj o d e c o n tro l , or i e nt a a l pro gr am ad or e n l a a dq u is ic i n d e b u e nos h b i tos de pro gr a m ac i n. A p art ir d el m is m o, s e f u er on d is e an d o otr os le n gu aj es d e m ayo r o m e nor n i ve l d e e s truc tu rac i n ex p lc it a qu e oc u p aro n l a a t en c i n de l os des a b ol l a dor es dur a nt e t od a la dc a d a s i g ui e nt e. Un ej em pl o d e e l lo es e l l engu aj e C, qu e f ue es c r i to e n l a dc a da d e l 7 0 p or D e nn is R itc h i e en l os l a bor a tor i os B e l l de l a AT &T ( er a e l t i em po en d on de u n pr o gr am ador es c ri b a s o l o, s i n c ol a bo rad or es , u n le n gu aj e o u n s is t em a op er at i v o! ! ) y s u his t or ia c orre par a le l a a l a d e l d es arr o ll o d e l s is t em a o p er at i v o UN IX p or Ke n T h om ps on e n l os m is m os l ab ora t or ios . Es b u en o s ab er qu e UN IX n ac e p or la nec es i da d d e la i n dus tr i a p or dis p o ner d e u n s is t em a o p era t i vo s i m ilar a l os ex is t en t es par a l as gr an d es c om pu ta d or as y s is t em as de la p oc a, es t o es , q ue p ud i er a c orr er e n u n e n tor n o de pr es t ac io n es m edi a nas c om o l a of rec i d a por e l p or en to nc es p o pu l ar PD P - 1 1 ( rec or de m os qu e e n e l J u an X X I I I es t u vo f u nc io n an d o u n P D P - 1 1 V AX , c on 6 t erm in a l es bo b as e im pres or a d e l n e a h as t a e l a o 1 98 8, e n q ue s e l o f u e rem p l a za n do p a u la t in am en t e por r ed es de P C). S i b ie n l a pr im er a v er s i n d e UN IX s e es c r ib i e n l e ng u aj e e ns am b la d or, l a s e h i zo u na r e v is i n q ue s e r es c r i b i e n un n ue v o l en g uaj e ( des arr o ll a do p or el m is m o K en T hom ps on ), d en om in a do le n gu aj e B i ns pi ra do e n o tr o l en g uaj e qu e t u vo p oc a h is t or i a ( e l BC P L) , q ue er a u n a s uer t e d e r ec r e ac i n d e l Pas c a l. E l l eng uaj e B f u e pos te ri or m ente r e v is a d o p or D e nn is R itc h i e , am pl i n do l o y o bt e ni e nd o un a n u e v a v ers i n a l a q u e d e no m in len gu aj e C. C on es t a n ue v a ver s i n, s e re s c ri bi r a UN IX . E n d e f in it i v a, ex is te un a f u ert e r e lac i n en tr e P as c al y C e n c u a nt o q ue un o h ere d a e l c o nc ep to de es tr uc t ur ac i n d e l otr o, au n qu e n o l o r ec r ea e n e l n i ve l y la t o ta l i da d de los alc a nc es pre t en d i dos y ac o ns ej a d o s p or l a Pr ogr am ac i n Es tr u c tur a da . Lu e go v in i er on o tr as v er s i on es d e C y P as c a l . E n p art ic ul ar , C + + y T ur b o P as c a l q ue i nc l u ye r on el par a d ig m a de l a or i en tac i n a o bj e tos . D ur an te m uc ho ti em po es t os l e ng uaj e s de Bo rl a nd ( en s us v er s io n es 3. 0 b aj o D O S y 4 .x /5 .x b aj o W indo ws ) f uer o n u nas d e l as v ers io n es m s d if u n d i das , d e las d is t i nt as v ers io n es d es a rro l l ad a s s o br e e l le n gu aj e or i g i na l . E n 1 9 94 , s a le a l m er c ad o l a p r im er a vers i n d e D e l ph i , p l at af o rm a vis u a l b aj o W indo ws bas a da en el nc l eo O bj ec t P as c a l. E l C y e l P as c a l pr im it i vo , a f e c i ert a, no t e n a n c om o pro p s it o s er u n l e ng uaj e o r i e nt a do a a p l ic ac io n e s a dm in is t ra t i va s . C arec a n de c a de n as d e c arac t eres , er a m u y po br e en e l tr a tam ie n to d e arc h i v os y e n f unc i o nes as oc ia d as a l as op er ac io n es d e en tr ad a/s a l id a. E n c am bi o, E l T ur b o C + +, e l T ur bo P as c a l y e l De l p hi en s us v ar ia d as vers i o nes , h a n r es u e lt o la m a yo r a de es tas d eb i l id a d es , y h ac i nd os e f ue rt es en e l par a d igm a d e or ie n ta c i n a o bj et os . S i n e m barg o, l os d es arro l l os a dm in is tra t i vos e n es t os l en g uaj es , s e ex t e nd i er o n c o ns i der a b lem en te e n e l m erc ad o d ur a nt e l a pr im era m it ad de la dc a da de los 9 0 . E n p art ic u l ar, d ir em o s qu e t a nt o T ur bo P as c a l c om o De l p h i n o s o l am ent e s on l e ng uaj es f uert em en te es t r uc tu r ad os , t am bi n s o n f uert em en te t ip if ic a d os . Q u e s i g n if ic a e s to ?. S ig n if ic a qu e NO p er m it e n m e zc l ar d if er e nt e s t i p os d e var i a b les . L a d ec la rac i n d e var i a b les ,

def in e prec is am ent e e l r a ng o pos i b le de v a lor es as i g na b l es a u n i d en t if ic ad or y c u a l qu i er i nc om pa t ib i l i da d e n e l tr at am ie nt o d e l os m is m os es r ec ha za d a e n t iem pos de c om p i la c i n y/ o ej ec uc i n. Por ej e m plo, s i s e d ef i n e: T yp e nDa to1 = int eg e r; nDa to2 = r e al; l a s i gu i en t e as ig n ac i n es er r ne a: nDa to1 = 5 .2; pu es s e i nt e nt a as ig n ar un a c o ns t a nt e r e al en u n a v ar ia b l e q u e e s per a n ic am en t e un v a lor num r ic o en te r o . No s er ia il e g al , e n c am bi o: nDa to2 = 5; s im pl em ent e , p or qu e de n tr o de l r a ng o d e n m eros re a l es es ta c o nt e ni d o e l s ubc o nj u nt o d e l os en t eros . S i n em bar go , o bs er v e q u e nDa to2 = 5; nDa to1 = nD at o 2; ge n er ar a tam b i n u n er r or e n t i em pos d e c om pi l ac i n. P or q ue ?. P u es es e vi d en t e qu e, l a c ons t an te 5 a l s er as i gn a da a < nD a to 2 >, pa s a a s er c ons i de ra d o por < nD at o 2 > ya n o c om o un e n ter o s i n o c om o u n r ea l , es t o es , c om o e l v al or 5 .0 . P ar a po d er r e al i za r t al as i g nac i n , de b er em os c o n ve r t ir a l r e a l en en t er o . Es to es p os i b l e de la s i gu i e nt e m an er a: nDa to2 = 5; nDa to1 = T r un c( nD at o2 n D ato 1 = Ro und (nD ato 2 ) E v id e nt em en te es t a f uer t e c om pr o b ac i n d e t ip os ex i gi d a p or e l l en g uaj e, a yu d a a l pro gr am ad or a e vi t ar l a g en er ac i n de erro r es y ef ec t os la t era l es , as a c om o s er or de n ad o en el tr a tam i en to de la s v ar i ab l es . P or ot ra par te , Pas c a l c u en ta c on l os l l am ados p r oc e d im ie nt os y f u nc io n es , r ec u rs os im pres c i nd i b les p ar a l a a p l ic ac i n d e t c ni c as d e pro gr am ac i n es tr uc t ur a da . J u nt o a u n proc e d im ie nt o o f u n c i n , es pos i b le d ef i nir d is t in tos p ar m etros ( var i a bl es r ec i bi das ex t er nam en t e) , lo c u a l i nc r em ent a l a m odu l a ri d a d d e l pr ogr am a. A c on t in u ac i n pro gr am ac i n: dar e m os un c onj un t o de norm at i v as i nh er en t es a la bu e na y m ala

1. UN A AP L I C AC I N BI EN E SC RIT A es a q ue l l a qu e es c om pr ens i b l e p ara e l c om pi la d or, par a s i m is m o y par a otr o pr o gram ad or . 2. UN A AP L I C AC I N M AL E SC RIT A es a q ue l l a q u e s o lo s a t is f ac e a l c om pi l ad or. 3. UN A AP L I C AC I N BI EN E SC RIT A D EB E S ER M O DUL AR : es de c ir, q u e r es u lt a m as f c i l es c r i b ir un pr o gr am a s i s e lo di v i d e e n tro zo s p e qu e o s , no c om pl ej os y au t oc o nt e n id os . Es t o es , qu e pu e d an s er p rob a d os p or s ep ar ad o , s i n nec es i da d de de p en d er de l e nt or no do n de s er n f i n alm e nt e inc l u id os . S i los m d u los q ue c o nf orm an un a ap l ic ac i n n o es t n p er f ec t am en te d ef i n id os , a m ed id a qu e e l pr o gr am a aum en t a de t am a o, c om nm e nt e c om ie n za n a i n ter ac t u ar en tr e s i de f or m a no pr e v is t a y l a f al l a d e u n m d u lo t er m ina r e perc u ti e n do e n ot ras p art es , es t o es , e n o tros m du l os

d is t i nt os . S i es as , s e v a ge n era n do u n pr ogr es i v o y n o c i v o ef e c to de c as c a d a d e f al l as , qu e s e h ac en v is ib l es en d et erm in ad os l u g ares p un tu a l es de l a a p l ic ac i n p er o c u yo or ig e n es otr o m u y l ej a n o y d is t i nt o. E v i de nt em en te , e n t a le s c as os , e nc o n trar e l l ug ar e n d on d e s e g e ner a l a f a ll a or i g in a l p ue d e r es u lt ar m u y d if c i l. A ta l p u nt o, q u e en c as os ex tr em os , o b l ig a n a l pr o gram ad or a d es ec h ar b ue n a p art e d e l a a pl ic ac i n y a v o l ver a r es c r ib ir l a . Se d e be e v i t ar e s c ri bi r m d u los g ra n des , es c o n ve n i en t e m od u lar l os m d ul os . E n t eo r a, u n m du l o par a s er f c i l d e m an ej ar y l e er n o de b e te n er un a ex t ens i n m a yor a la de un p ar de pa nt a l las de l e d it o r d e t ex t os ut i l i za d o . E v id e nt em en te , l a r e a l id a d d e l pr ob l em a a des arr o l lar a v ec es p arec i er a n o c a b er e n un p ar d e pa n ta l l as . S i n em bar go , s i em pre es pos i b le s e gm e nt ar u na a p l ic ac i n l le v nd o l a a u n es q u em a d e f ras es q u e in v oq u en a r u ti n as d o n de s e r es ue l v e n l os de t al l es m e nor es . 4. UN PRO G R AM A B I EN E SC RIT O NO N E C E SIT A I N VO C AR V AR I AB L E S G LO B AL E S . E l us o d e v ar i ab l es g l ob a l es s on l os pr i nc i p a les c a us an tes d e l os ef ec t os l at er a les . Un m du lo d e p r o gr am a SI E M P RE d e be r es o l v er s u pr o ps i to e n f o rm a dir ec t a y te n er ref er enc i a das c l ar am e nt e las v ar ia b l es q ue ut i l i za . S i u n m d u l o (pr oc ed im i en to o f unc i n) r e q u ier e d e da t os pr o v e n ie nt es d e otr as p art es d e l pr ogr am a, s e l os d eb e s um in is tr ar a tr a v s de p ar m etros . A s u v e z, a q ue l l as va ri a b l es q u e s on d e us o i nt ern o de l m d u lo , d e be s er dec l ar ad as loc a lm ent e . U na v ar i ab l e l oc a l es a q ue l l a q u e s o lo ex is t e d en tr o d e u n a p or c i n l im ita d a d e l pr o gr am a, c on oc i da tam b i n c om o e l m bit o d e l a v ar ia b l e. L im it a nd o e l m bi to d e l a v ar ia b l e, s e e v it a n l os ef ec t os l at era l es y l a pr o gr am ac i n d es o rd e na d a. Pr es e n tar em os e l s ig u ie nt e ej em pl o , p ar a i lus tr ar es te c o nc e pt o y e l de l pu n to an t eri or :
<<< Programa ejemplo del uso de variables segn la programacin estructurada >>> Program Vectores; Uses CRT, PRINTER; Const nMaxVector = 20; <<< Declaracin de tipos >>> Type TipoRango = 1.. nMaxVector; TipoArreglo = Array [TipoRango] of real; <<< MDULO PPAL. DEL PROGRAMA >>> Var <<< Variables globales >>> Vector1, Vector2, VectorRes: TipoArreglo; nLong_Vector: TipoRango; cOpcion_Menu: Char; <<< Main >>> Begin <<< Defino en una variable la longitud de los vectores >>> nLong_Vector:= MaxVector; <<< Inicializo los vectores en cero >>> Crear_Vector_Vacio(Vector1, nLong_Vector); Crear_Vector_Vacio(Vector2, nLong_Vector); Crear_Vector_Vacio(VectorRes, nLong_Vector);

<<< Men de opciones >>> Repeat ClrScr; GotoXY(1, 20); Writeln (MENU DE OPCIONES); GotoXY(2, 20); Writeln (--------------------------------------); GotoXY(7, 20); Writeln (Cargar Vector A..(1)); GotoXY(8, 20); Writeln (Cargar Vector B..(2)); GotoXY(9, 20); Writeln(Sumar Vectores A y B..(3)); GotoXY(10, 20); Writeln(Listar Vector sumado.(4)); GotoXY(11, 20); Writeln(Fin del programa..(5)); GotoXY(14, 20); Writeln(Su Opcin: ); <<< Captura de la opcin >>> Repeat GotoXY (14, 31); Readln (cOpcion_Menu); Until (cOpcion_Menu >= 1) AND (cOpcion_Menu <= 5); <<< Una vez efectuada la captura de la opcin, derivo al proceso correspondiente >>> Case (cOpcion_Menu) of 1: CARGAR_VECTOR (Vector1, nLong_Vector); 2: CARGAR_VECTOR (Vector2, nLong_Vector); 3: SUMAR_VECTORES (Vector1, Vector2, VectorRes, nLong_Vector); 4: LISTAR_SUMA_VEC (VectorRes, nLong_Vector); 5:; End; Until (cOpcion_Menu <> 5);
End.

<<< ----------------------------------------------------------------------- >>> Procedure CREAR_VECTOR_VACIO (Var VectorGral: TipoArreglo; nLong_Vector: TipoRango); <<< Mdulo que inicializa en cero el total de los elementos del vector VectorGral, a fin de corregir la inicializacin por defecto que realiza el Pascal >>> Var i: TipoRango; Begin For i:= 0 to nLong_Vector do VectorGral[i] = 0.0; End; <<< ----------------------------------------------------------------------- >>> Procedure CARGAR_VECTOR (Var VectorGral: TipoArreglo; nLong_Vector: TipoRango) <<< Mdulo que permite el ingreso de datos a la estructura del vector VectorGral >>> Var i: TipoRango; Begin ClearScreen; GotoXY (0, 30); Writeln (MDULO DE CARGA DE VALORES AL VECTOR); GotoXY(1, 30); Writeln (-----------------------------------------);

for i:= 0 to nLong_Vector do Begin GotoXY(2 + i, 0); Writeln ("Elemento"); Writeln (i); Writeln (" = "); Readln (VectorGral [i]); End; End; <<< ----------------------------------------------------------------------- >>> Procedure SUMAR_VECTORES VECTOR (Var Vector1, Vector2, VectorGral: TipoArreglo; nLong_Vector: TipoRango); <<< Mdulo para realizar la sumatoria de los vectores Vector1, Vector2 y asentar el resultado en VectorRes >>> Var i: TipoRango; Begin for i:= 0 to nLong_Vector do VectorGral[i] = Vector1 [i] + Vector2 [i]; End; <<< ----------------------------------------------------------------------- >>> Procedure LISTAR_SUMA_VEC (Var VectorGral: TipoArreglo; nLong_Vector: TipoRango); <<< Mdulo que presenta los resultados contenidos en el vector de sumatoria VectorRes >>> Var i: TipoRango; Begin ClearScr; GotoXY (0,25); Writeln (RESULTADO DE SUMA DE VECTORES); GotoXY (1,25); Writeln ( ); for i:= 0 to nLong_Vector Do Begin GotoXY(2+i, 0); Writeln (Resultado elemento ); Writeln (i); Writeln (" = "); Writeln (VectorRes [i]); End; GotoXY (24, 30); Writeln (Pulse una tecla...); Readkey (); End; <<< ----------------------------------------------------------------------- >>>

S e o bs er v a q u e nu es tr o in t er s es e l d e g e n era r la c ar g a d e d os v ec t or es c on n m eros rea l es y r e a li za r s u s um ator i a. L as v ar ia b l e s a ut i l i za r e n c a da p roc e d im ie nt o , es t n i de nt if ic a d as a pr op i a dam en t e a tr a vs d e l p as aj e d e p ar m etr os ( po r s er d e dec l ar ac i n ex t er na a los pr oc ed im i en t o) y por var i a bl es l oc a l es nec es ar ias n ic am en te d ur a n te la ej ec uc i n de los pr oc es os . El proc e d im ie nt o Cr e ar _ V ect or _ V ac io( ) , r ea l i za l a i nic i a l i zac i n d e l t ot a l de los e l em en t os d e l v ec t or. O c urr e qu e e l P as c a l no in ic i al i za l a s v ar i ab l es p or d ef ec t o, p or l o c u a l, i nm ed ia tam en t e a s u dec l ar ac i n l as var i a b l es c o nt i en e n v a lor es a le at or i os , c a re nt es de s ig n if ic ac i n ( c om nm en t e de n om in ad os b as ur a ). Se h a i nc o rpo ra d o t am bi n, u n m en d e o pc io n es c o n p a nt a l la f ij a, s it ua d o en el c ue rp o pr i nc ip a l de la ap l ic ac i n . E l m en de o pc i on es , es aq u e ll a p art e d e la a p l ic ac i n qu e l e perm i te a l us u ar i o f i n al d e l

pro gr am a s e l ec c i on ar un a ac c i n . P ar a e ll o , d eb e s er pr es e nt ad a m u y c lar am en te , y, f un dam en t alm en t e, g e ner ar u n c o nt ro l ex ac t o s o br e la p os ib l e el e c c i n q ue r e a li za r e l us u ar i o. O bs r v es e q ue el r a ng o p os ib l e d e s e lec c i n, es t a c o m pr en di d o e ntr e l os c arac t er es 1 . . 5 . E l l ec t or , po dr p re g un ta rs e p or qu e s e h a d ec l ara d o a l a var i a b l e <c O pc io n _ Me n u > c om o ti p o c har y no c om o ti p o en t ero . O c urr e qu e e l t ip o e nt er o es s us c e p ti b l e d e g en er a r u n er r or de en tr ad a. Q u pas ar a s i s i e n do <c O pc io n _M e n u > un a var i a bl e e n ter a , e l o pe r a d or d el pro gr a m a pu ls ar e qu i v oc a d am ent e l a l e tra a ? . P ues , s e g e ner ar a u na c a nc e l ac i n d e la ap l ic ac i n en t iem p os de ej ec uc i n. Es te ti p o de pos i b les e r r or es l g ic os , d e be n s er s i em pre te n i dos e n c u en t a y e v it a dos . P or e ll o , el t i po c h ar , es e l m as ad ec ua d o, p u es l e perm it e a l us ua ri o la p u ls ac i n d e c ua l q ui er c ar c t er y l a es tr uc tur a d e c on tr ol do .. . wh i le , r ec h a za r t o da s e l ec c i n n o v li d a. 5. UN A AP L I C AC I N BI EN E SC RIT A DI S PO N E D E NO M BR E S D E V AR I AB L E S , FUN CIO N E S Y P RO C ED IM IE NT O S AUT O E X PL IC AT I VO S . E n es e nc ia , u na va ri a b le no es m as q ue un i de n tif ic a d or s im b l ic o s o bre un a p os ic i n r ea l d e m em ori a. Es c on v e n ie nt e q u e e l n om br e q ue s e le as i gn e a u n a v ar ia b l e, s ea lo m as c erc a n o pos i b le a l a f u nc i n qu e va a des em pe a r e n e l pr o gram a. Si s e r e qu i er e de un a v ar ia b l e c ar c t er p ar a un a op er ac i n de e nt rad a , s o br e u n m en de o pc io n es , l o m as ac er t ad o es tr a t ar de bus c ar l e un n om bre q ue e n s m is m o d es c r i ba p ar a qu e s e l a v a a ut i l i za r , es t o es , p or ej em pl o: cO p cio n_M enu : C ha r ; De es t a f or m a, m u y p os ib l em ent e n o d e bam os d es vi ar nu es tr a a t e nc i n v o l v i en d o a l a s ec c i n d e d ec l ar ac i n d e v ar i ab l es , c a da v e z q ue n os to p em os c on es t e id e nt if ic a dor en la lec t ur a o c or r ec c i n d e n u es tr o c d ig o. S ol o u n pr o gr am ad or d es or d e na d o, d is p on dr a u na dec l ar ac i n c om o l a s i gu i en t e, par a es te c as o : k1: C ha r; Ig u alm e nt e, los id e n t if ic a d or es de pr oc e d im ie nt os y f u nc io n e s , es c o n ve n i en t e def in ir l os l o m s a ut oex p l ic a t i vos p os i bl es . O bs er v e e l lec to r e l ej em pl o d e l p u nt o an t eri or . 6. UN A AP L IC AC I N BI EN E S CR IT A D E B E E ST AR DO C UM ENT AD A. S i u n s e gm en to de c d i g o es t a bi e n es c r it o , y e s f c i l de l e er, l a d oc um en t ac i n d e be c e ntr ars e e n des c r i b ir e l f u nc io n am i en to de l m is m o a u n n i v e l m as a l to , ex p l i c ar c om o i nt er ac t a c on e l r es to de l pr o gr am a y e n a l g un os c as os , c om ent ar la f i n al i da d d e las v ar ia b l es qu e s e ut i l i za n. De b e e v it ar s e l a d oc u m en ta c i n r ed u nd a nt e, qu e s e d es pr e nd e d e l a l n ea d e l c d ig o es c r i t o. Por ej em pl o, s e ri a poc o a d ec u a do u n a l ne a ex p l ic a t i va c om o l a s i gu i en t e: i: = i + 1 < < < in cr e me nt o en uno l a v ar i abl e > > > 7. UN A AP L IC AC I N B I EN ES C RIT A DE B E S ER F C I L D E L E E R Y EL EG ANT E . S e de b e p o n er s um o c ui d ad o en r es p et ar la C L AR ID A D es tr uc t ur a l d e l pro gr am a, a tr a vs de un a c or r ec ta i de nt ac i n d e l c d ig o. P ar a es to , p or ej em pl o, res u l ta c on v e n ie n te d is p o ner en l a m is m a c o lum na l os d el im it a d ores { } de los b lo q u e s , y t a bu l ar a s u v e z m s a l a der ec ha l as l n e as q ue enc i err a n. De ig u a l f orm a, c o n v ie ne pr oc e d er c o n l as i ns tr uc c io n es e nc er r a d as en un a es truc t ura f orm al d e c o ntr o l, es t o es , l os D o . .. W hil e , W hile {} y For ( ) . P or s u p ues t o, s e de b er pres t ar a te nc i n e n n o s o bre p as ar l as 8 0 c o lum nas de pa n ta l l a : na d a m as i nc om od o, q u e re a l i zar un s eg u im ie nt o d e u n a

ap l ic ac i n ex i g i n do l e a l e d it or c o ns ta nt es s o lic i tu d es d e s c r o l l a der ec h a e i zq u i er d a. S i u n a r ut i na es de m as ia do l ar ga y l a i de n tac i n n os o b l i ga a ex c e d er l as 80 c o lum nas , l a s o l uc i n NO CO N SI ST E E N AG LUT I N AR EL C D IG O , s i no m s ac er t ad am en te , e n S EG M ENT A R LO , es t o es , en di v i d ir l a ru t in a e n tr o zos a n m s pe q ue os .

LA MODULACIN PROCEDIMIENTOS

TRAVS

DE

FUNCIONES

Dij im os q ue l a pr og r am ac i n es tr uc tur a da o m od u la r, c o ns is te e n di v i d ir e l pro gr a m a e n s egm en t os m s p eq u e os qu e p u d ier a n s er pro b a dos a is l a dam en t e. Pro b ar a is la d am ent e u n s egm en t o, s ig n if ic a q ue el m is m o es s us c e pt i b le d e s er c he q ue a do pres c i n di e nd o d e l res t o de los s e gm en tos q u e c onf or m a n a l a ap l ic ac i n. O bs r v es e e l ej em pl o de la s um a d e v ec t or es d e l as p a g i nas a nt er i or es : c ad a m du lo es to ta lm en t e a u t n om o y r e al i za un a f unc i n i n eq u v oc a de ntr o d el c o nt ex to . E n n in g n c as o s e i n voc a n v ar ia b les g l o ba l es ; s i e l m du lo re q u ier e d e v ar ia b l es g e ne r a d as e n otr as p art es de l pr o g ram a, las c a pt ur a a t r a vs de l a lis t a d e p ar m etr os . T am bi n re p et im os , qu e e l l en g uaj e Pas c a l b ri n da a l a pro gr am ac i n es tr uc t u r ad a dc = f u er tes h err am ie nt as : l as f u nc io n e s y l os p roc e dim i en t os . E l pas aj e de p ar m etr os a u n a f u nc i n o pr o c ed im i en to , p ue d e s e r h ec ho p or va l or o por r ef er enc i a. C ua n do s e pas a u n pa r m etr o p or va l or , P as c a l r e a li z a u n a c o p ia tem p ora l de l a v ar ia b l e en al g n lu g a r d e l a m em or i a. Lu e g o, c a d a m od if ic ac i n qu e af ec t e a l a v ar i ab l e s e r ef l e j a n ic am en t e s o br e l a c op i a t em por a l . P or u lt im o, c ua n do f in a li za l a ej ec uc i n de l a r ut i na y s e r et or na a l pu n to de in v oc ac i n, s e d es ec h a l a c o p ia t e m pora l y l a s m od if ic ac i on es r ea l i za d as n o q u ed a n as e n ta d as . P or ej em pl o: V ar nV al or 1 , n V al or 2: R e al ; Beg in nV al or 1: = 2 .5 ; nV al or 2: = 4; W rit e ln ( P rod uc t o ( n V alo r 1, n V alo r 2)) ; W rit e ln ( nV a lo r1) ; W rit e ln ( nV a lo r2 ) ; End ; <<< ----------------------------------------------------------------------- >>> Funct ion P rodu ct o ( n V alo r 1 , n V alo r 2: R ea l ): R e al ; Beg in nV al or 1: = n Va lo r 1 * n V alo r 2 ; P rodu ct o : = n V al or 1 ; End ; E n es t e s im p le ej em pl o l os r es u lt ad os d e l as l ne as d e im pres i n s on los s ig u i en tes : 10 . 0 2. 5 4. 0 por l o c u a l, la as ig n a c i n n V a lor 1 : = n V a lo r1 * n Va l or 2 no ha a f ec ta d o e l c o n te n id o d e l a v ar ia b l e < n Va l or 1 > en e l c uer p o pr i nc i p a l d el pr o gram a. E n c am bi o , a l s er p as ad a un a v ar i a b le po r r ef er enc i a a un a f u nc i n o p roc e dim i en t o, P as c a l no le a p l ic a n i n gu n a c op i a tem p or a l y t o das s us m o dif ic ac i o nes s e as ie nt a n e n la d ir ec c i n de m em oria ac t u al d e l a v ar i ab l e. De es ta f orm a, l os c am b io s s o n p erm an e nt es y s e

m anti e n en a un d es p u s d e f i n a li za d a l a ej e c uc i n de l a r ut i na . R ec or d em os q ue p ara p as ar un a v ar i ab l e d e ti p o S I MP L E p or r ef er e nc ia , es n ec es ar i o p rec e d er la por la p a l abr a r es e r va d a " v ar " ( qu e l e i nd ic a a l c om pi la d or q ue n o ef ec t e u n a c op i a d el c o n te n i do e n un a nu e v a d ir ec c i n d e m em or i a, s i no q u e u t il i c e la d ir ec c i n ori g i n a l d e la var i a bl e) . N u es tr o ej em p lo , a hor a, s e c o n v ier te en : V ar nV al or 1 , n V al or 2: R e al ; Beg in nV al or 1 = 2. 5; nV al or 2 = 4; W rit e ln ( P rod uc t o( n V alo r 1, n V alo r 2)) ; W rit e ln ( nV a lo r1) ; W rit e ln ( nV a lo r2) ; <<< ----------------------------------------------------------------------- >>> Funct ion P rodu ct o ( V ar n V al or 1, n V al or 2: Re al) : Re al; Beg in nV al or 1: = n Va lo r 1 * n V alo r 2 ; P rodu ct o : = n V al or 1 ; End ; Do n de los r es u l ta d os de las l n eas d e im pr e s i n , p ara es t a n ue v a v ers i n, s er n : 10 . 0 10 . 0 4. 0 P or s u pu es t o , no s ie m pr e la r e a l i da d d e l a ap l ic ac i n n os ex i ge pas ar v ar i ab l es a u n proc e d im ie nt o / f u nc i n . E n n ues tr o ej em p l o, p o dr am os t e ne r i nt er s en t ra ns f er ir l e a l a f unc i n Pr o duc t o, d os v a lor es l i ter a l es . D e s er as , l a r ut i na de b er r ec ib ir i n d ef ec t i b lem en t e a l os p arm etr os s o l a m ente PO R V AL O R . P or ej em p lo : W r ite ln ( P rodu ct o ( 2. 5, 4)) ; Funct ion P rodu ct o ( n V alo r 1 , n V alo r 2: r ea l) : R ea l ; Beg in P rodu ct o ( n V al or 1 * nV al or 2) ; End ;

DATOS VS. INFORMACIN


Un d a to es un en te ( t an g i bl e o in t an g ib l e) qu e ex pr es a un a m a g n it ud o des c ri b e u n s u c es o . Los da tos s e ex p r es an ( o s o n c om un ic a d os ) a tr a vs de s m bo l os , t a l es c om o le tras , nm er os , s e a les m ec n ic as , m ov im ie n to s de m an o, l a v o z, di b uj os , e tc . Los d at os , en t onc es , s o n s m bo l os ( i d en t if ic ad os por a lg n s e nt i do hum a no ) qu e d es c r i be un hec ho o ex pr es a u n va l or per o q u e no c onti en e ni pu ed e b rin da r i n for ma ci n a lgu na . P or s m ism os , e nt onc es , n o t i en e n l a c a p ac id a d de c om un ic ar u n s i gn if ic a do y p or lo t a nt o n o pu e de n m od if ic ar e l c o m por tam i en t o de qu i e n l o r ec i be . P or l o ta n to , s e a d v i er t e q ue los da t os p or s m is m os no ex pr es a n u n s i g n if i c ad o , c on oc im ie nt o , i de as o c onc l us i n a l g un a. Lo i n ter es an t e de l o s d at os , s i n em bar g o, es q ue p u ed e n c on v er ti rs e e n i nf orm ac i n . Cu nd o ?. P ues b i en , c ua n do s o n as oc ia d o s de ntr o de u n c o nt e x to y s on s us c e p t ib l e s de f orm ar p art e d e u n s is tem a de c las if ic ac i n.

Ex pres a do e n t r m in o s c om p ut ac io n al es , d ir em os qu e los da tos s e c o n v i ert e n e n i nf orm a c i n c ua n do s e l es i nf i er e un a e nt id ad d e s ent i do y f orm an p ar te de un con junto o rd en ad o . E n r ea l i d ad , e n u n s is t e m a de c om put ac i n , l a "e n ti d ad d e s en t id o " es p ar te d e un pr o c es o c om pl ej o y n unc a t ot a lm ent e r es u e lt o (p or e j em pl o, l as c o ns truc c i on es c l s ic as d e s of t war e s o lo da n u n a s o l uc i n a pr ox im ad a a es te pr ob l em a a tr a vs de l p ara d i gm a en t id a d - re l a c i n , r e lac i o nes p er s is t e nt e s , in t egr i d ad r ef e re nc i a l, e tc . ) . E n c am bi o, e l c o nc e pt o d e or de n " e s u n atr i bu t o n orm al e n u na c o l ec c i n d e d at os d i s pu es to e n u n a es tr uc tur a c om pu tac i o na l . De lo ex pres a do s e d e s pr e n d e q ue " inf orm ac i n " N O es ig u al a u n "c onj u nt o d e d at os ". N ad a m s err n e o. P ara te rm in ar d e c om pr e n d er es te c o nc e p to , p ens em os s im p lem e nt e e n un a l is t a de n m eros es c r it as en u n pa p el . P ues b i en , s t as s on en t id a des n um ric as , qu e ex pres a n u n a m agn i tu d y. . . n ad a m s . E n c a m bio, s e c on v i er te n e n i nf orm ac i n , c u a nd o le as oc iam os u n a "e n ti d ad de s e n ti d o ". P or ej em p lo , ge n er am os s i g nif i c ad o , s i dec im os qu e l o s nm eros s o n n ot a s d e ex m en es . P ero e n re a l id a d, d ec ir qu e l os " n m eros ex p res a n no t as de ex m en es " p ue d e s er s i gn if ic a ti v o o no p ar a un a p er s o n a, e n vi rt u d s i p u ed e o no d es p e j ar u n a d u d a o a yu d ar l a e n l a tom a d e dec is i on es . P or ej em pl o, p ara u n d oc en te q ue t i e ne v ar ios c urs os d e a l um nos , un a l is ta de n o tas d e ex m en es es c r i tas en un pa p el no c o ns ti t u ye i nf orm ac i n a l gu n a, s a l vo qu e s e e nc u e ntr e n as oc ia d as a los n om bre s d e l os a l um nos . Y t am poc o s er s uf ic i e nt e s i , por ej em pl o , no es t i de n tif ic a d o a c u a l m at er ia c o rres p on d e, a o de c urs a d o, e tc . P or l o ta nt o , d ir em os qu e u n d at o es "s i gn if i c at i v o " c ua n do c ons ta d e s m bo los r ec o n oc i b les , s e enc u en tr a c om pl et o y ex pr es a u n a i de a n o am bi gu a . S ol o c o n da t os s ig n if ic a ti v os , q ue pu e da n s er c or r ec t am en t e in te r p r e ta d os , d i s pu es to e n un c o n tex t o, c o n en t id a d de s e nt i do y s us c e p ti b l es de po d er s er c l as if ic ad os s e c o ns tr u ye i nf orm ac i n. T IPO S D E D AT O S P ara pr oc es ar i nf or m a c i n en un a c om pu t ad ora es n ec es ar i o h ac er u na a bs tr ac c i n d e los da t os qu e tom am os d e l m un do r e a l - a bs tr a c c i n e n e l s en t id o d e qu e s e i gn or a n al g un as pro p i ed a des d e los o bj e tos r e a les , es d ec i r, s e s im pl if ic a n - . S e hac e un a s e lec c i n d e los da t os m s r epr es en t at i v os de la r ea l i da d a pa rt ir d e l os c ua l es p ue d a tra b aj ar l a c om put a dor a p ar a o bt en er u n os r es ul t ad os . Cu a lq u i er le n gu aj e s u m inis tr a en t eros , c ar ac t er es , nm er os s t os , pu es l a m em or i a de la da t os . E l t am a o de t od os l os l os qu e s e tr a baj a. u na s er i e de ti p os d e d at os s im pl es , c om o s o n los n m eros r ea l es . En r ea l i da d n os of rec e ta n s lo u n s u bc o nj u n t o de c om put a dor a es f i n it a. L os p u nt er os s o n tam b i n u n t ip o d e t ip os d e d at o s d ep e n de d e l a m q u i na y de l c om p il a d or s obr e

E n pr i nc ip i o, d ir em os qu e c on oc er la r e pr es e n tac i n i nt er n a d e es t os t i pos d e d at o s es nec es ar ia par a c o nf ec c i on ar pr o gr am a s d e c om put ac i n . E ST RU CT UR A D E D AT O S S e tr at a d e u n c o nj u nt o d e var i a bl es d e u n d et erm in a do t i p o a gru p a das y or g an i za d as d e a lg u na m aner a p ar a r e pr es e nt ar u n m od e lo d e da t os . L o qu e s e pr e t e n de c o n l as " es tr uc t uras de d at os " es f ac i l it ar un es q uem a l g ic o s o bre e l c u al m an ip u la r l os d a tos e n f u nc i n de l pro b l em a qu e ha ya q ue tr at ar y d e l al g or it m o q ue n os res u e l va l os as p ec t os re l at i v os a s u m anej o . E n g e ne r a l , l a pr im er a d if ic u l ta d a l a c ua l s e - enf r en t a u n a l um no a la h ora d e r es o l v er u n pr o b l em a r ad ic a e n es c o ge r l a es truc tu ra de da t os a dec ua d a. Es t e n o es u n t e m a l ig er o, n i m uc h o m en o s , p ues l a e lec c i n d e las es tr uc t ur as d e d a tos es t n m u y r e l ac i o na d a

a l os a l gor i tm os q u e d eb er em os es c ri b i r d es pu s . J us t am ent e, es t a "r e l ac i n en tr e es tr uc t ur as de d at os y a lg or itm os " es lo q u e ha pr e oc u p ad o ( y pr e o c up a) a l os t e r ic os d e la i nf orm t ic a e n t od os l os t i em pos . A l gu n as s n tes is h an da d o o ri g en a la t eor a d e M t od os Es t ruc tur a l es pr im er o y a l a M to d os O r ie n t ad os a O bj et os des p u s . Am bos t em as t ie n en s u or ig e n en los p ar a di g m as de l a Pr o gr am ac i n Es tr uc t ur a da y de l a Pr og ram ac i n O ri e nt ad a a O bj e t os y c o ns t i tu ye n l a r a z n d e s er d e l as m at er ias d e Pr o gr am ac i n I I y E DI I I, q ue e l a lum no c urs ar e n e l s eg u nd o a o d e es t a c arr era . S eg n s u c om por t am ien t o d ur a nt e la ej ec u c i n de l pr o gr am a d i s ti n gu im os l as s i g u ie nt es es tr uc t ur as d e d at os : E stt i ca s: s u tam a o en m em ori a es f ij o. Un a v e z d ef i n i da l a c an t id a d d e e lem e nt os qu e l a c o ns t i tu ye n , n o es p os ib l e h ac er v a ri ac i n al g un a . Por ej em pl o, l os ar re g los , reg is tr o s y c o nj u n tos . Din m i ca s : s u t am a o e n m em oria es v ari ab l e. A b arc a n a l os a rre gl os r ed ef i n i b les , pu n ter os , ar c h i v os , et c . Vo lt il e s : s o n a q ue l l as q u e s e d es tr u ye n un a v e z f i na l i za d a l a ej ec uc i n d e la ap l ic ac i n. E n g e ner a l, ab ar c a a t o das l as es tr uc t u r as q u e s e s o por t an en m em ori a RA M . P or ej em pl o, l os ar r e g los . P er ma ne nt e s : c o ns er v an l os d a tos y r es i de n f u er a d e l r e a d e ej ec uc i n d e los pro gr am as . U n ej em p l o t p ic o lo c ons t it u ye n l os arc h i v os .

T IPO S D E D AT O S AB ST R ACT O S Los t i pos d e da t os abs tr ac tos ( T DA ) p erm it e n des c r i b ir un a es truc t ura d e d at os en f unc i n de l as op er ac io n es q ue p ue d en ef ec t u ar , d ej an do a un la d o s u im p le m entac i n r ea l . Los T DA m e zc l an e s tr uc tu r as d e d at os f ig ura t i v as j u n to a u na s er i e d e op er ac i on es e lem en t al es q ue s e des e nt i en d en d e l a r ea l i da d d e l a inf orm ac i n a r e pres e nt ar. L as op er ac io n es n o s lo s on b s ic a , s in o qu e s e es c r ib e n s o br e un m o de l o de d at os , es to es , s i n at e nd er las e nt i da d es de or de n y d e s en t id o de l a inf orm ac i n ( o m ej or d ic h o , s i n at en d er los pr inc i p ios s obr e l as c u a les los d a tos s e t ra ns f orm an en inf o rm ac i n ). Es t o p erm ite q u e e l pr ogr am ad or s e c e n tre n ic am en t e e n e l m ode lo m at em t ic o qu e s us t e nt a a l T D A, y q u e s e c ar ac t er i za n p or e l e nc a ps u lam i en to . E s c om o u n a c aj a n e gr a q u e f unc io n a s im pl em ent e c on ec t n do l e u n os c ab l es . Es to p erm it e a um ent ar l a c om p lej i da d d e l os pr o gram as per o m ante n i en d o u n a c l ari d a d s uf ic i e nt e qu e no d es b or d e a l os des arr o l la d ores . Ad em s , en c as o d e q u e a l go f a l l e s er m s f c i l de te rm ina r s i l o q u e f a ll a es l a c aj a ne gr a o s o n l os c a b les . P or l t im o, in d ic ar em o s q ue u n T D A p u e de d ef i n ir a o tr o T DA . P or ej em p lo , en e l c urs ad o de es t a m at er i a v er em os c om o c ons tr ui r p il as , c o l as y r b o les a p a rti r de lis t as en l a za d a s . S i b ie n n os otr os tr a baj a r em os c on e l t i po de d a t o arc hi v o , d e h e c ho y c om o v erem os m s ad e l an te , l as l is tas e n l a za d as tam b i n p ue d en c ons tru irs e a p ar ti r d e o tros t i pos de d a tos , c om o b i e n pu e de n s er l os ar r eg l os y p u nt er o s . Q U E S U N M T O D O EST R UCT U R AL ? Un M to d o Es tr uc t ur a l ( d e a h or a en m s M .E .) s e c ons tr u ye a p art ir d e u n a es truc t ur a d e da t os , l a d ef i n ic i n de la s e nt i d ad es de s e nt i do y d e or d en s o bre un c o nj u nt o de d at os y s us r ut i nas d e pr o gr am ac i n . U n M. E . es s im pl em ent e un gr ad o de e vo l uc i n m a yor a un T D A pu es s e c en tr a en l os as pec tos r e l ac io n a do s c o n s u im p lem e nt ac i n re a l. E n c o ns ec u e nc ia , e l m ode l o d e d a tos a bs tr ac t os d e u n T D A qu e da rem p la za d o p o r u n s is t em a c o nc r et o d e r ep res e nt ac i n d e l a i nf or m ac i n. T od o es to im p lic a la n ec es id a d de :

Def in ir es tr uc t ur as c o nc r e t as de i nf orm ac i n aj us t ad as a l a pr o b l em tic a a r es o l v er Es t a b lec er un a e n ti d a d d e s e nt i d o y u n c r i t er io de or de n s obr e e l m od el o de da t os ( a l os f i n es d e c ons tr u ir " i nf or m ac i n ") Es t a b lec er c r i t er ios no am b ig u os d e b s qu e da , i ns erc i n y e l im in ac i n d e l a i nf orm ac i n At e ne rs e a u n c o nj u nt o d e r e g las r es p ec to a c om o es c r ib ir l os a l gor i tm os ( o pr oc es os de l ibr er a o p er ac i o na l ) At e ne rs e a un c o nj u nt o d e es pec if ic ac i on es s o bre c m o u ti l i z ar l os pr oc es os d e l ibr er a .

EJ E M PLO : E l s i gu i e nt e ej em pl o c om pl em ent a u na ex p l i c ac i n q u e s e r e al i za r e n c l as e .
Consignas del ME Criterio de orden: aleatorio Insercin: al final Eliminacin: por sustitucin Bsqueda: secuencial R a n g o d e C l a ve s : A 0 0 . . Z 9 9 (A00 = cdigo nulo) Observaciones: L a L . O . n o u t i l i za t c n i c a s d e p r o g r a m a c i n d e f e n s i va . L a L . O . h a s i d o e s c r i t a c o m o procesos dentro del programa principal. Sin embargo, en una situacin real, cada librera debe residir en una UNIT aparte (con su compilacin separada del resto del programa).

R20 A10 F40 M05

. . . .
Mximo ltimo

100

IM PO RT A NT E: es t e ej em pl o es t p e ns a d o par a q ue e l a l um no l o a n a lic e y l o u t i lic e c om o e lem en t o de es t u di o . N o c um pl e s us o bj et i v os , s i e l a lum n o h ac e u n tras l a do d e l a c od if ic ac i n a s us p r op i os p r o gr am as . E s te ej em pl o , t am poc o h a s id o c om p i la d o (s e enc u en tr a pr es e nt a d o s i n v er if ic ar s u s i nt ax i s ).


Program Modelo_de_ABM_en_Me; Uses Crt, Printer; Const Rangolnf = 1; RangoSup = 100; Type TipoCoordFila = 0 .. 25; TipoCoordColumna = 0 .,79; TipoRangoVector = Rangolnf.. RangoSup; TipoPosicion = (Rangolnf- 1) .. RangoSup; TipoCodigo = String [3]; TipoRegDatos = Record Codigo: TipoCodigo; .. End; TipoVector = Array [TipoRangoVector] of TipoRegDatos; TipoMe = Record Vector: TipoVector; Ultimo, Mximo: TipoPosicion; End;

Var Me: TipoMe; cOpcion: Char; Begin <<< Main >>> CrearEstructuraME (Me, Rangolnf-1, RangoSup); Repeat LimpiarPantalla; Menu_de_Opciones (cOpcion); Case cOpcion of A: Altas (Me); B: Bajas (Me); M: Modificaciones (Me); L: Listados (Me); S: Salida (); End; Until (cOpcion = S); End. <<< ----------------------------------------------------------------------- >>>

LIBRERA OPERACIONAL Forman parte todas las rutinas que acceden a la estructura de datos o manejan los ndices. No son consideradas como L.O., NINGN otro tipo de proceso. Una L.O no puede invocar ningn otro proceso de librera (interno o externo). Debe respetar todas las recomendaciones de la Programacin Estructurada.
<<< ----------------------------------------------------------------------- >>> Procedure CrearEstructura (Var Me: TipoMe; nlnf, nSup: TipoPosicion); <<< Establece las condiciones iniciales del M.E >>> Begin Me.Ultimo:= nlnf; Me.Maximo:= nSup; End; <<< ----------------------------------------------------------------------- >>> Function Buscarlnfo (Var Me: TipoMe; cCodigo:TipoCodigo; Var nPosicion:TipoPosicion): Boolean; <<< Devuelve una respuesta booleana indicando si un <cCodigo> es encontrado o no en el M.E. Si lo encuentra, devuelve en <nPosicion> la posicin. Si no lo encuentra, devuelve en <nPosicion> la posicin donde DEBERA ESTAR >>> Var iEncontrado: Boolean; Begin iEncontrado:= True; nPosicion:= 1; While (NOT iEncontrado) AND (nPosicion <= Me.Ultimo) do Begin if Me.Vector [nPosicion] = cCodigo Then iEncontrado:= True Else nPosicion:= nPosicion + 1; End; Buscarlnfo:= iEncontrado; End; <<< ----------------------------------------------------------------------- >>> Procedure Insertarlnfo (Var Me. TipoMe; nPosicion: TipoPosicion; Reg: TipoRegDatos); <<< Como se inserta al final, la variable <nPosicion> no es utilizada aqu. La conservamos por compatibilidad con el resto de los futuros Mtodos Estructurales. >>>

Begin Me.Ultimo:= Me.Ultimo + 1; Me.Vector[Me.Ultimo]:= Reg; End; <<< ----------------------------------------------------------------------- >>> Procedure Eliminarlnfo (Var Me: TipoMe; nPosicion: TipoPosicion); <<< Se elimina por sustitucin >>> Begin Me.Vector [nPosicion]:= Me.Vector [Me.Ultimo]; Me.Ultimo:= Me.Ultimo-1; End; <<< ----------------------------------------------------------------------- >>> Procedure Modificarlnfo (Var Me: TipoMe; nPosicion: TipoPosicion; Reg: TipoRegDatos); Begin Me.Vector[nPosicion]:= Reg; End; <<< ----------------------------------------------------------------------- >>> Procedure CapturarInfo (Var Me: TipoMe; nPosicion: TipoPosicion; Var Reg: TipoRegDatos); <<< Como se inserta al final, la variable <nPosicion> no es utilizada aqu. La conservamos por compatibilidad con el resto de los futuros Mtodos Estructurales. >>> Begin Reg:= Me.Vector[nPosicion] End; <<< ----------------------------------------------------------------------- >>> Function EstructuraLlena (Var Me: TipoMe): boolean; Begin EstructuraLlena:= Me. Ultimo = Me.Mximo; End; <<< ----------------------------------------------------------------------- >>> Function EstructuraVacia (Var Me: TipoMe): boolean; Begin EstructuraVacia:= Me.Ultimo = Rangolnf- 1; End; <<< ----------------------------------------------------------------------- >>> Function Primero (Var Me: TipoMe): TipoPosicion; Begin lf Me.Ultimo < Rangolnf Then Primero:= Rangolnf- 1 Else Primero:= Rangolnf; Endif; <<< ----------------------------------------------------------------------- >>> Function Ultimo (Var Me: TipoMe): TipoPosicion; Begin Ultimo:= Me.Ultimo; Endlf; <<< ----------------------------------------------------------------------- >>> Function Prximo (Var Me: TipoMe; nPosicion: TipoPosicion): TipoPosicion; Begin If Me.Ultimo < Me.Ultimo Then Prximo:= nPosicion + 1 Else Prximo:= Rangolnf- 1;

Endlf; <<< ----------------------------------------------------------------------- >>> Function Anterior { Var Me: TipoMe; nPosicion: TipoPosicion): TipoPosicion; Begin Anterior:= nPosicion - 1; Endlf; <<< ----------------------------------------------------------------------- >>>

LIB R ER AS AU X IL I AR E S S e h a s im pl if ic a d o e l c onc e pt o d e l i br er a a u x i l iar inc l u ye n d o a qu to d os l os pr oc es os qu e n o s on r u t i nas d e L i br er a O p er ac i o na l , n i pr oc es os de los m ens de opc i o nes . E n u na s it u ac i n r ea l , s e d eb er hac er un a c l as if ic ac i n d e l a s l i bre r a s y a gr up ar p roc es os d e s im i lar nd o le . P or ej em pl o: L i br er a aux i l i ar de p an t a ll a , L ibr er a a ux i li ar d e tra t am ie n t o de c a de nas , L ibr er a a ux i l iar d e e /s , etc . A dem s , c a d a l i bre r a aux i l i ar p or s ep ara d o, d e be r es i d ir e n u na UN IT a par t e, s i e nd o c om pi l ad a p or s e par a d o.
<<< ----------------------------------------------------------------------- >>> Procedure IngresarCodigo (Var cCodigo: TipoCodigo); <<< El formateo de pantalla no han sido incluido y queda a cargo del alumno. Rango vlido: A00 - Z99. >>> Begin Repeat Write (Ingrese el cdigo:); Readln (cCodigo); cCodigo[1]:= Upcase(cCodigo[1 J); Until (cCodigo [1] >= A) AND (cCodigo [1] <= T) AND (cCodigo [2] >= 0) AND (cCodigo [2] <= 9) AND (cCodigo [3] >= 0) AND (cCodigo [3] <= 9); End. <<< ----------------------------------------------------------------------- >>> Function CodigoNulo (cCodigo: TipoCodigo): Boolean; Begin CodigoNulo:= cCodigo = A00; End; <<< ----------------------------------------------------------------------- >>> Procedure IngresarRegDatos (Var Reg: TipoRegDatos; cCodigo: TipoCodigo); Begin Reg.Codigo:= cCodigo; <<< A continuacin de solicitan y validan los campos restantes del registro <REG> >>> End. <<< ----------------------------------------------------------------------- >>> Procedure MostrarRegDatos (Reg: TipoRegDatos); Begin <<< A continuacin se presentan el contenido de los campos del registro <REG> el formateo de pantalla queda a cargo del alumno >>> End; <<< ----------------------------------------------------------------------- >>> Procedure EditarRegDatos (Var Reg: TipoRegDatos); <<< Este proceso permite hacerla edicin (cambios) en los contenidos de un registro >>>

Begin <<< A continuacin se presentan el contenido de los campos del registro <REG> el alumno deber estudiar la forma de edicin ms adecuada. NO se puede obligar a ingresar toda la informacin nuevamente. ES usuario debera poder. cambiar contenidos en forma selectiva. >>> End; <<< ----------------------------------------------------------------------- >>> Procedure MostrarRegDatosLinea (Reg: TipoRegDatos; nFila: TipoCoordFila); Begin <<< Presenta los datos del <Reg> pero en una lnea de la pantalla >>> GotoXY (nFila, 0); Write (Reg.Cdigo); <<< Resto de campos >>> End; <<< ----------------------------------------------------------------------- >>> Procedure LimpiarPantalla; Var i: TipoCoordColumna Begin ClearScreen; <<< Tambin se podr poner un color de fondo, una trama, etc. luego se coloca una lnea de estado, en la fila 24 de la pantalla (es para mensajes emergentes) >>> GotoXY(0, 23); For i:= 1 to 79 do write (-); End; <<< ----------------------------------------------------------------------- >>> Procedure MensajePie (cMensaje: string); <<< Coloca un mensaje en la lnea de estado (fila 24) >>> Begin. GotoXY (0,24); Write (cMensaje); End; <<< ----------------------------------------------------------------------- >>> Procedure MensajeTitular (cMensaje: string); <<< Coloca un mensaje en la fila 0 >>> Var i, nLong: 1..255; Begin <<< Mensaje centrado >>> nLong:= ord (cMensaje[0]); GotoXY (0, nLong div 2); Write (cMensaje); <<< Subrayado >>> GotoXY (1, nLong div 2); For i:= 1 to nLong do write (-); End; <<< ----------------------------------------------------------------------- >>> Procedure LimpiaMensajePie;

<<< Limpia la lnea de estado (fila 24) >>> Begin GotoXY (0, 24); For i = 1 to 79 do write ( ); End; <<< ----------------------------------------------------------------------- >>> Function Confirma (cMensaje: string); Var cOpta: char; Begin Repeat GotoXY (0,24); Write (cMensaje + ); GotoXY (ord (cMensaje[0]) + 1, 24); cOpta:= Upcase (Readkey ()); Until (cOpta = S) OR (cOpta = N); Confirma:= cOpta = S; End; <<< ----------------------------------------------------------------------- >>> Function CaracterOk (cCar: char; cCadena: TipoOpcionPosible): boolean; <<< Verifica si un carcter se encuentra en una cadena >>> Var i:0..255; Begin i:= 1; While (cCar <> cCadena [i]) AND (i, = ord (cCadena [0])) Do i:= i +1; CaracterOk:= (i <= ord (cCadena [0])); End; <<< ----------------------------------------------------------------------- >>> Procedure Menu_de_Opciones (cOpcion: char); <<< Se utiliza una tabla para contener las opciones, a los fines de que el alumno pueda ver que este proceso puede ser escrito como una rutina de tipo general (para ello, se debe parametriza el vector con otros contenidos junto a la variable nUltimaOpcion). La solucin ms adecuada, seria construir un Mtodo Estructural para manejar mens de opciones >>> Const nUltimaOpcion = 5; Type TipoRangoOpciones:= 1.. nUltimaOpcion; TipoMenuOpciones:= Array [TipoRangoOpciones] of String [40]; TipoOpcionPosible:= String [nUltimaOpcion]; Var Topcion: TipoMenuOpciones; i: TipoRangoOpciones cOpcionPosible: TipoOpcionPosible; Begin Topcion [1]:= Altas..; Topcion [2]:= Bajas....; Topcion [3]:= Modificaciones....; Topcion [4]:= Listados..; Topcion [5]:= Salida...; cOpcionPosible- ABMLS; <<< El formateo de pantalla queda a consideracin del alumno >>> For i:= 1 to nUltimaOpcion do Begin Write (Topcion [i]); Write ( );

Writeln (cOpcionPosible [i]); End; Writeln; <<< Solicita opcin al usuario Repeat >>> Write (Su opcin:); Readln (cOpcion); cOpcion:= Upcase (cOpcion); Until CaracterOk (cOpcion, cOpcionPosible); End; <<< ----------------------------------------------------------------------- >>>

AP L I C AC I N S on l as ru t in as f u nc i on a l es a l Me n d e O pc io n es . S on es c r it as i n v oc a n d o pr oc es os d e l ibr er a op er ac io n al y aux i l i ar .
<<< ----------------------------------------------------------------------- >>> Procedure Altas (Var Me: TipoMe); Var cCodigo: TipoCodigo; nPosicion: TipoPosicion; Reg: TipoRegDatos; Begin LimpiarPantalla; MensajeTitular (ALTAS); IngresarCodigo (cCodigo); While (NOT EstructuraLlena (Me)) AND (NOT CodigoNulo (cCodigo)) Do Begin If Buscarlnfo (Me, cCodigo, nPosicion) Then MensajePie (Error: el cdigo + cCodigo + ya existe) Else Begin IngresarRegDatos (cCodigo, Reg); Insertarlnfo (Me, nPosicion, Reg); End; IngresarCodigo (cCodigo); LimpiaMensajePie (); End; End; <<< ----------------------------------------------------------------------- >>> Procedure Bajas (Var Me: TipoMe); Var cCodigo: TipoCodigo; nPosicion: TipoPosicion; Reg: TipoRegDatos; Begin LimpiarPantalla; MensajeTitular (BAJAS); IngresarCodigo (cCodigo); While (NOT Estructura Vacia (Me)) AND (NOT CodigoNulo (cCodigo)) Do Begin If NOT Buscarlnfo (Me, cCodigo, nPosicion) Then MensajePie (Error: el cdigo + cCodigo + NO existe) Else Begin Capturarlnfo (Me, nPosicion, Reg); MostrarRegDatos (Reg); If Confirma (Confirma [s/n] = ) Then Eliminarlnfo (Me, nPosicion);

End; IngresarCodigo (cCodigo); LimpiaMensajePie (); End; End; <<< ----------------------------------------------------------------------- >>> Procedure Modificaciones (Var Me: TipoMe); Var cCodigo: TipoCodigo; nPosicion: TipoPosicion; Reg: TipoRegDatos; Begin LimpiarPantalla; MensajeTitular (MODIFICACIONES); IngresarCodigo (cCodigo); While (NOT EstructuraVacia (Me)) AND (NOT CodigoNulo (cCodigo)) Do Begin If NOT Buscarlnfo (Me, cCodigo, nPosicion) Then MensajePie (Error: el cdigo + cCodigo + NO existe) Else Begin Capturarlnfo (Me, nPosicion, Reg); MostrarRegDatos (Reg); EditarRegDatos (Reg); If Confirma (Confirma cambios [s/n] = ) Then Modificalnfo (Me, nPosicion, Reg); End; IngresarCodigo (cCodigo); LimpiaMensajePie (); End; End; <<< ----------------------------------------------------------------------- >>> ProcedureLISTADO (Var Me: TipoMe); <<< Browser por pantalla. Presenta de a 20 lneas. >>> Const cLineaVacia = poner 80 espacios ; Var cOpta: Char; nPosicion, i, nlnicio, nFinal: TipoPosicion; Reg: TipoRegDatos; Begin LimpiarPantalla; MensajeTitular (LISTADO EN PANTALLA); MensajePie ([a]vanza - [r]etrocede - [i]mprime - [f]in de consulta ); nlnicio:= 1; if Ultimo (Me) < 20 Then nFinal:= Ultimo (Me) Else nFinal:= 20; Repeat <<< Limpia pantalla en la zona de los datos >>> For i:= 1 to 20 do Begin GotoXY (0, i + 2); Write (cLineaVacia); End; <<< Presenta los datos >>> nPosicion:= nlnicio;

While (nPosicion <= nFinal) Do Begin Capturarlnfo (Me, nPosicion, Reg); MostrarRegDatosLinea (Reg, nPosicion + 2); hPosicion:= Prximo (Me, nPosicion); End; <<< Espera que el usuario asuma una opcin (A - R - I - F) >>> Repeat cOpta:= Upcase (Readkey()); Until CaracterOk (cOpta, ARIF); Case cOpta of A: Begin <<< Pide avanzar >>> if nFinal + 20 < Ultimo (Me) Then Begin nlnicio:= nFinal + 1; nFinal-nFinal+ 20; End Else Begin if Ultimo (Me) = >20 Then nlnicio:= nUltimo (Me) -19 Else nlnicio:= 1; nFinal:= Ultimo (Me); End; End; R: Begin <<< Pide retroceder >>> if nlnicio -20 >= 1 Then Begin nFinai:= nincio - 1; nlnicio:= nlnicio - 20; End Else Begin nlnicio:= 1; if Ultimo (Me) < 20 Then nFinal:= Ultimo (Me) Else nFinal:= 20; End; End; P: Begin <<< Rutina de impresin. Queda a cargo del alumno >>> End; F: Begin <<< Salida. Convendra colocar un saludo, etc. >>> End; End; Until (cOpta = F); End.

RECURSIVIDAD
La rec urs i v id a d f or m a pa r t e de l r e per t or io p ara res o l v er p ro b lem a s en C om put ac i n y e s de l os m to d os m s po der os os y us a d os . Los a l gor i tm os rec ur s i v os of r ec e n s ol uc i on es es tr uc t ur a das , m od u l ar es y e le g an t em ent e s im pl es . L a r ec ur s i v id a d es un c o nc ep t o f un dam en t as e n m at e m tic as y e n c om put a c i n . U n a d ef i n ic i n r ec urs i v a d ic e c m o o b te n er c onc e pt os nu e v os em p le a nd o e l m is m o c on c ep t o q u e i n te n ta d es c ri bi r. E n t o da s i tu ac i n e n l a c u a l l a r es p u es t a pu e da s er ex pr es ad a c om o un a s ec u en c i a de m o vim i en t os , pas os o tr a ns f orm ac i o n es go b e r na d as p or un c onj un t o de r eg l as n o am bi gu as , l a f rm ul a r ec urs i v a es un b u en c a nd i d at o p a r a r es o l v er e l pr o b lem a. L os ra zo n am i e nt os rec urs i v os s e enc u en tra n en la bas e m is m a d e l as m at em t ic as p orq u e s o n n ec es ar i os p ar a d es c r ib ir c onc ep t os c en tr al es c om o e l d e n m er o: Ej em p lo : Def in ic i n d e F ac t or ia l : fac to ri al ( n) = n ! s i n > 0 fac to ri al ( n) = n *n - 1 * n - 2 *. .. * 1 si n > 0 e l v a lor de 0 ! s e d ef i n e c om o fac to ri al ( 0 ) = 1 P or l o ta n to , s u d ef i n i c i n r ec ur s i v a es : fac to ri al ( n) = 1 si n = 0 fac to ri al ( n) = n * f a ct ori a l ( n - 1) si n > 0 S i q uer em os c a lc u l ar e l f ac tor i a l d e 4, el r e s u lt ad o es e l s ig u i en te : fac to ri al fac to ri al fac to ri al fac to ri al (4) (3) (2) (1) = = = = 4 3 2 1 * * * * f ac t ori a l f ac t ori a l f ac t ori a l f ac t ori a l ( 3) ( 2) ( 1) ( 0) = = = = 4 * 6 = 24 3 *2 = 6 2* 1 = 2 1* 1 = 1

A hor a ve am os el al g or itm o r ec ur s i vo en Pas c a l Funct ion F a ct o ri al ( n : int eg e r ): int eg e r ; Beg in if n = 0 T hen F a ct o ri al : = 1 El s e Fa ct o ri a l : = F a ct ori a l (n - 1) * f a cto ri al ; End ; Com par e e l a l um no a h or a c on es t a v ers i n i t era t i va : Funct ion F a ct o ri al ( n : int eg e r) : int eg e r ; V ar Fa c, i: int eg e r; Beg in Fa c: = 1: For i: = 1 t o n do Fa c: = f a c * i: Fa ct o r i al : = F ac; End ;

RE L AC IO N E S D E R E CU RR E NC I A Las d ef i n ic io n es r ec u r s i v as d e f u nc i on es en m atem t ic as q u e ti e n en c om o ar g um en t os nm er os en t er os , s e l l am an r e l ac i o n es de r e c urr enc i a. Form a de u n a ec uac i n d e r ec u r r e nc i a: c 0 a r + c 1 a r - 1 + c 2 a r - 2 +. ... + c k a r - k = f (r ) fu nc i n m at em t ic a di s cr e ta do n de c i s on c o ns t a nt es , es l l am ada u n a ec uac i n d e r ec urr enc i a de c o ef ic i e nt es c ons ta nt es de ord e n k , c o nd ic i on a da a qu e c 0 y c k = 0 . Un a def in ic i n r ec ur s i v a d ic e c m o o bt e ner c onc e pt os nu e v os em p le a n d o e l m is m o c on c ep t o qu e i n te nt a d ef i n ir . E l p o d er d e l a r ec ur s i v id a d es q u e l os p roc e d im ie nt os o c onc ep t os c om p lej os pu e de n ex pr es ars e de un a f or m a s im pl e. Un r a zo n am i en to r ec u r s i v o t i e ne d os par t es : l a bas e y l a r e gl a r ec urs i va d e c ons tr uc c i n . L a bas e n o es rec ur s i v a y es e l p u nt o t an to de p art i da c om o d e t erm in ac i n d e l a d ef i n ic i n. Ej em p lo : B as e : L a s ec u enc i ac i n , i t er ac i n c o nd ic i o na l y s e l ec c i n s o n e s truc tu ras v l i d as d e c on tr ol qu e p u ed e n s e r c o ns id er a das c om o e nu nc i ad os . Re g la r ec ur s i va : L as es tr uc t ur as d e c on tro l q u e s e pu e de n f or m ar c om bi n an d o d e m aner a v li d a l a s ec u enc i ac i n i t erac i n c o nd ic i on a l y s el ec c i n t am bi n s on v l i dos . Un c o nj un to de o bj et o s es t def in i do r ec es i v am ent e s i em pre q u e: (B) a l gu n os e l em ent os d e l c o nj u nt o s e es p ec if ic a n ex p l c it am ent e (R) e l r es to d e los e le m entos d e l c o nj u n to s e d ef i n en e n t rm in os de l os e lem en tos ya def in i d os do n de (B) s e ll am a bas e (R) s e l l am a c l us ul a r ec ur s i v a O bs er vem os q ue : E l pr oc e d im ie nt o s e ll am a a s i m is m o E l pr ob l em a s e r es u e l v e, r es o l v i en d o e l m is m o pro b l em a p er o d e t am ao m en or La m a ner a e n l a c u al e l t am a o d e l pr ob l e m a dis m in u ye as e g ur a q u e el c as o bas e e ve n tu a lm ent e s e a lc a n zar

La rec urs i v i da d es u n m t od o p od er os o us a d o en i n te l i ge nc i a art if ic i a l, p u es a l g un os c onc e pt os c om pl ej os p u ed e n ex pr es ars e en un a f orm a s im p le . U n a d ef i n ic i n r ec u rs i v a d if i ere d e u na d ef i n ic i n c i r c u l ar e n q u e ti e n e un a f o rm a d e es c a p ar de s u ex p ans i n inf i ni t a. Es t e es c a pe s e enc u e ntr a e n l a d ef i n ic i n o porc i n n o r ec u rs i v a o t erm in a l de la def in ic i n .

No ta : d es d e u n p u nt o de v is t a es tr ic t am ent e a l go r tm ic o, s i l a d ef i n ic i n es c i rc u l ar e i nf i ni t a, no c ons t it u ye un a l g or itm o. Las f rm ul as r ec ur s i v as p u ed e n ap l ic ars e a s it uac i o nes t al es c om o pr ue b a d e te or e m as , s o luc i n de p r o b lem as c om bi n at or i os , a l g un o s ac e rt ij os , e tc . Def in ic in I : Cu a nd o u na l lam ad a r ec urs i v a es l a lt im a p os i c i n ej ec ut ad a d e l proc e d im ie nt o s e l l am a r ec ur s i v id a d d e c ol a , r ec urs i v id a d d e ex tr e m o f in a l o r ec urs i n de ex tr em o d e c o l a. Def in ic in I I: C u a nd o u n pr oc ed im i en to i nc l u ye un a l l am ad a a s i m is m o s e c o n oc e c om o rec ur s i n dir ec t a. Def in ic in I II : C u an d o u n pr oc ed im ie n to l la m a a o tr o pr oc e d im ie n to y es te c a us a qu e e l proc e d im ie nt o or i gi na l s e a i n v oc a d o, s e c on oc e c om o r ec urs i n i nd ir ec t a . A l pr inc i p i o al g un as per s o n as s e s ie n te n un p oc o i nc m o das c on la rec urs i v i da d, t a l v e z por q u e da l a im pr es i n d e s er u n c ic l o i n f in it o , per o e n r e al i d a d es m en os p el i gr os a u na r ec u rs i n i nf i n it a q u e un c ic lo i nf i ni t o, ya q ue un a rec urs i v i da d i nf i n it a pr on t o s e q u ed a s i n es p ac i o y t erm in a e l p r og r am a, m i e n tras q ue l a i t erac i n i nf i n it a pu ed e c on t in u ar m ie ntr a s no s e term i ne en f or m a m an u a l. Cu a nd o u n pr oc e d im ien t o r ec ur s i vo s e l lam a rec urs i v am ent e a s i m is m o va ri as v ec es , par a c ad a l lam ad a s e c r ea n c op i as i n de p e n d ie nt es de l as v ar i ab l es d ec l ara d as e n e l proc e d im ie nt o . E J EM PLO S Ej e mpl o 1: Nm e ro s de Fib on ac ci Los nm eros de F i bo n ac c i s e d ef i ne n c om o: F N , = F N - 1 . .. + F N - 2 p ar a N = > 0 F0 = F1 = 1 qu e d ef i n en la s ec u e n c i a: 1, 1, 2 ,3 ,5 , 8 , 13 , 21 ,3 4 , 55 , 89 ,1 4 4 P or ej em p lo , s i q u is i r am os e nc on tr ar F i b on ac c i de 5, e nt o nc es : Fi bo n ac c i Fi bo n ac c i Fi bo n ac c i Fi bo n ac c i ( 5) ( 4) ( 3) ( 2) = = = = F i bo n a c c i F i bo n a c c i F i bo n a c c i F i bo n a c c i ( 4) ( 3) ( 2) ( 1) + + + + F i b on ac c i F i b on ac c i F i b on ac c i F i b on ac c i ( 3) ( 2) ( 1) ( 0)

Res u el t o de m an er a r e c ur s i va , o bt e nem os e l s i gu i en t e a lg or itm o Fibon a c ci ( n e s n on e gat iv o ) - > non eg a t iv o com i enz a si n < 1 ent on c e s re gr e s a 1 sin o r eg re s a F ibo na c ci (n - 1) + F ibon a cc i ( n - 2) te rmi na

Ej e mpl o 2 : Con si de r e l a si gui ent e e cu ac i n r e cu r re nte : an = an-1 + 2 a0 = 1


n

E cu ac in ( n e s non e gat iv o ) - > non eg ativ o com i enz a si n = 0 ent on c e s re gr e s a 1 sin o r eg re s a 2 ^ n + a ( n - 1) te rmi na Los v a lor es d e los t r m inos d e un a s uc es i n pu e d en dars e d e m aner a ex p lc it a m ed i an t e f rm ulas c om o: S n = n 3n - 2n per o t am bi n p u ed e n def in ir s e p or m ed i o d e d es c r i pc io n es q u e i n v o luc r e n o tros trm i nos q u e l es an t ec e d en e n l a s u c es i n. Ej e mpl o 3: d ef ini c in r e cu rs iv a p ar a e lev a r u n n m e ro a un a p o ten ci a: Rec or dem os q u e u n n m er o e l e va d o a la po te nc ia c er o pr od uc e l a u n i da d ; l a p ot e nc i a d e u n nm er o s e o bt i en e m u lt i pl ic nd o l o p or s m ism o e le v a nd o a la po t enc i a m en os u n o . P or ej em p lo : 3 = 3 * ( 3 ) = 3 * ( 3 * 3 ) = 3 * ( 3 * 1) = 3 * ( 3) = 9 Pot en ci a ( n, k son e n t e ros ) - > e nte ro com i enz a si k = 0 ent on c e s re gr e s a 1 sin o r eg re s a n * p ote n ci a (n, k - 1) te rmi na Ej e mpl o 4: Nm e ro d e Com bin a cio ne s Rec urs i v am ent e, po d e m os def i nir e l n m ero d e c om b in ac i on es d e m obj et os t om ad os d e n , de n ot a do ( n,m ) p ar a n > = 1 y 0 < = m < = n p o r: (n,m ) = 1 s i m = 0 m = n n = 1 (n,m ) = ( n- 1,m ) + ( n - 1 , m - 1) en otr o c as o Comb in a cio ne s ( n, m so n ent e ro s ) - > e nte ro com i enz a si m = 0 o m = n o n = 1 ent on c e s re gr e s a 1 sin o r eg re s a co mbin ac ion e s ( n- 1, m) + comb ina c ion e s ( n - 1,m - 1) t e rmi na Ej e mpl o 5: Al g o rit mo de Eu cl id es Es t e a l g or itm o es c o n s i der a do e l m s v i ej o n o tr i v i al qu e n os p e rm ite e nc on tra r e l m x im o c om n d i v is or en tr e d os n m er os e nt er os d ad os . E l pas o es enc i a l qu e gar a nt i za l a v al i d e z d e l al g or itm o c ons is te en m os trar q u e e l m x im o
2 1 0 4 3

c om n d i v is or ( m c d) d e a y b , ( a > b > = 0) , es i g ua l a a s i b es c e ro, en otr o c as o e s ig u a l a l m c d de b y e l r em an e n te d e a d i v i d id o p or b , s i b > 0. M CD ( a ,b son ent er os ) - > ent e ro s com i enz a si b = 0 ent on c e s re gr e s a a sin o r eg re s a m c d ( b , a mod b) t e rmi na Ej em p los : mcd mcd mcd mcd (25 , (18 , (57 , (35 , 5 ) = m c d ( 5, 0) 6 ) = m c d ( 6, 0) 2 3) = m c d ( 2 3, 1 6) = m c d ( 1 6, = 5 = 6 1) = m c d ( 1 ,0) = 1 3) = m c d ( 3 , 1) = m c d ( 1, 0) = 1

Ej e mpl o 6: En co nt r a r e l n m e ro ma yo r de un ar r eg lo con te ni en d o n m er os e nte ro s . Un a s o l uc i n ut i l i za n d o r ec ur s i vi d ad di rec ta es e l s i gu i e nt e: M ayo r ( A e s un v e ct o r, l im lz q , l im De r s on ent er os) - > en te ro com i enz a si l im lz q = l im De r ent on c e s re gr e s a A[ l i mlz q ] sin o com i enz a m <- ( l imlz q + l im De r ) div 2 ma yo rlz q <- m a yor ( A, l im lz q , m) ma yo rD e r <- m a yo r ( A, m + 1, l im De r) si m a yor lz q > ma yo r De r ent on c e s m a yo r < - m a yo rlz q sin o r eg re s a ma yo rD er t e rmi na t e rmi na Ej e mpl o 7: B squ ed a bin a r a r e cu rs iv a e n un v e cto r d e ent er os BusquedaBinaria (A es un vector, limlzq, limDer son enteros, valor es la clave de bsqueda) -> booleano m -> es nonegativo comienza si limlzq > limDer entonces regresa A [limDer] = Falso sino comienza m <r (limlzq + limDer) div 2 si A [m] = (valor) entonces regresa verdadero sino si valor > A[m] entonces regresa BusquedaBinaria (A, m + 1, limDer, valor) sino

regresa BusquedaBinaria (A, limlzq, m-1, valor) termina termina CO N S ID E R AC IO N E S FIN AL E S Q u p as a s s e h a ce un a ll am ad a r ec ur s i v a qu e no te rm in a? S ab em os q ue u n a l l am ada r ec ur s i va a l m ac ena l os pa rm et ros q u e s e p as aro n a l proc e d im ie nt o, y otr a s v ar i ab l es nec es ar ia s p ara e l c orr ec to f un c i on am ie nt o d e l pro gr am a. P ort a nt e s is e pr od uc e un a l lam ad a r ec urs i va i nf i ni t a, es t o es , qu e n o t erm in a n u nc a, l le g a un m om ent o e n e l q u e n o q u ed ar m em oria p ara a lm ac e n ar m s d at os , y e n es e m om ent o s e ab or tar la ej ec uc i n de l pr ogr am a. Pa ra pr ob ar es t o s e p ue d e i n te nt ar hac er es t a ll am ad a en el pro gr am a f ac t or i a l def in i d o an t er iorm e nt e : Fac t or i a l ( - 1) P or s u pu es to no ha y qu e p as ar p ar m etros a un a f u nc i n q u e e s t n f uer a de s u d om i ni o , pu es el f ac t or ia l es t def in i do s o l am ent e p ara n m eros n o ne g a ti v os , p er o es un ej e m plo c l aro . Cu ndo ut il iz a r l a r ec ur s in? P ara em pe za r, d ir em os q u e n o t od os l os le n gu aj es d e pr ogr am ac i n adm it e n l a rec urs i v i da d. E n ta l c as o , l as s o l uc i on es a l g or tm ic as s er n i ter ac ti v as . T am poc o s e de b e ut i l i za r r ec ur s i n c ua n do la s ol uc i n it er at i v a s e a m u y c l ar a a s im pl e v is ta . S in em bar g o, p ar a m u c hos c as os , l as s ol uc i n i te ra t i va es m uc h o m s c om plic a do q u e un a s o luc i n r ec ur s i v a. S i es te es e l c as o , t ra baj ar NO rec urs i v am ent e r e duc e l a c l ar i da d de l pro gr am a. P or otr a pa r te , c as i t od os l os a lg or itm os b as ad os e n lo s es qu em as d e v ue l ta atr s y d i v i d e y v enc er s s on r ec ur s i v os , pu es d e a l g un a m an er a p ar e c e m uc h o m s n at ur al un a s o luc i n r ec ur s i v a . A un q ue p are zc a m ent i r a, es e n ge n era l m uc ho m s s e nc i ll o es c r i b ir u n pr o gr am a r ec ur s i v o qu e s u e q ui v a l en te i t er a t i vo . S i e l al um no no s e lo c r e e, pos i b l em ent e s e d eb a a q u e n o dom i ne t o da v a l a r ec ur s i vi d a d. Hem os d is pu es to de un T r a b aj o Pr c t ic o par a qu e r ea l ic es pr c tic as di v ers as , s im pl es y c om pl ej as , p ar a q u e p ue d as ac os t um brar te a d es arr o l la r a lg or itm o s rec urs i v os .

Potrebbero piacerti anche