Sei sulla pagina 1di 140

ndice general

1. Introduccion
IFIF v memoriX itsD ytesD plrs F F F F F F F IFPF sdenti(doresF F F F F F F F F F F F F F F F F F F IFQF gonepto de 4progrm4F F F F F F F F F F F F F IFQFIF istrutur de un progrmF F F F F F F F IFQFPF elgoritmoF F F F F F F F F F F F F F F F F IFRF gonepto de 4funin4F F F F F F F F F F F F F F IFRFIF goneptos generlesF F F F F F F F F F F F IFRFPF xomreD lor de retorno y ergumentos IFRFQF v funin min@ A F F F F F F F F F F F IFSF okens F F F F F F F F F F F F F F F F F F F F F F F IFSFIF lrs lve del g F F F F F F F F F F F IFSFPF sdenti(dores F F F F F F F F F F F F F F IFSFQF gonstntes F F F F F F F F F F F F F F F F IFSFRF yperdoresF F F F F F F F F F F F F F F F F IFSFSF seprdores F F F F F F F F F F F F F F F F IFSFTF gomentrios F F F F F F F F F F F F F F F IFTF venguje g F F F F F F F F F F F F F F F F F F F F IFUF piheros F F F F F F F F F F F F F F F F F F F F F F IFVF vetur y esritur de dtosF F F F F F F F F F F IFWF reompildor y ompildor en vinuxF F F F F F IFWFIF gompildor F F F F F F F F F F F F F F F F IFWFPF wkeF F F F F F F F F F F F F F F F F F F F IFWFQF rjndo on iliotesF F F F F F F F IFWFRF vinux vinker uirks F F F F F F F F F F F IFWFSF heugging vinux epplitionsF F F F F F IFWFTF gF F F F F F F F F F F F F F F F F F F F F PFIF PFPF PFQF PFRF PFSF PFTF PFUF PFVF QFIF QFPF QFQF QFRF pses en l resoluion de prolemsF F F F hiseo de progrmsF F F F F F F F F F F F rogrmin modulrF F F F F F F F F F F rogrmin estruturd F F F F F F F F eorem de l progrmin estruturdX epresention gr( de los lgoritmosF F higrms de )ujo F F F F F F F F F F F F F higrms de nssiEsheidermn @xEAF F F grteres @tipo hrAF F F F F F F xmeros enteros @tipo intA F F F F xmeros enteros @tipo longA F F F xmeros reles @tipo )otA F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F de un funin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F T T U V V W W IH II II IP IP IP IQ IQ IQ IR IS IT IT IT IU IU IW IW PH

2. programacion estructurada.

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F estruturs sisF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F I F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

22

PP PQ PQ PR PS PS PT PU QT QU QU QU

3. Tipos de datos fundamentales. Variables

35

NDICE GENERAL

P QV QW RH

QFSF xmeros reles @tipo douleA F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F QFTF hurin y visiilidd de ls vrilesX wodos de lmenmientoF F F F F F F F F F F F F F F F QFUF gonversiones de tipo implits y explits@stingA F F F F F F F F F F F F F F F F F F F F F F F

4. Constantes

RFIF gonstntes numris F F F F F F F F RFIFIF gonstntes entersF F F F F F RFIFPF gonstntes de punto )otnte RFPF gonstntes rter F F F F F F F F F RFQF gdens de rteres F F F F F F F F RFRF gonstntes de tipo inumerin F F RFRFIF guli(dor onst F F F F F F

F F F F F F F

F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

41

RI RI RP RP RQ RQ RR

5. Operadores, expresiones y sentencias.

SFIF yperdores F F F F F F F F F F F F F F F F SFIFIF yperdores ritmtios F F F F F SFIFPF yperdores de signin F F F F SFIFQF yperdores inrementles F F F F SFIFRF yperdores relionles F F F F F SFIFSF yperdores lgios F F F F F F F F SFIFTF ytros operdores F F F F F F F F SFPF ixpresiones F F F F F F F F F F F F F F F F SFPFIF ixpresiones ritmtis F F F F F SFPFPF ixpresiones lgis F F F F F F F SFPFQF ixpresiones generles F F F F F F SFQF egls de preedeni y soitividd F SFRF entenis F F F F F F F F F F F F F F F F SFRFIF entenis simplesF F F F F F F F F SFRFPF enteni v nul F F F F F F SFRFQF entenis ompuests o loques TFIF fifuriones F F F F F F F F F F F F TFIFIF yperdor ondiionl F F F TFIFPF enteni if F F F F F F F F F TFIFQF enteni if FFF else F F F F F TFIFRF enteni if FFF else mltiple TFIFSF enteni swith F F F F F F TFIFTF entenis if nidds F F F TFPF fules F F F F F F F F F F F F F F F F TFPFIF enteni while F F F F F F TFPFPF enteni for F F F F F F F F TFPFQF enteni do FFF while F F F TFQF entenis rekD ontinueD goto F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

45

RS RS RT RT RU RU RV RW RW RW RW SH SH SH SH SI

6. Control del ujo de ejecucion.

52

SP SP SP SP SQ SQ SR SR SR SS SS ST SU SU SV SV SW TH TI TP TP

7. Tipos de datos derivados.

UFIF unteros F F F F F F F F F F F F F F F F F F F F UFIFIF gonepto de puntero o puntdor F F UFIFPF yperdores direin @8A e indirein UFIFQF eritmti de punterosF F F F F F F F F UFIFRF untero nulo F F F F F F F F F F F F F F UFPF etoresD mtries y dens de rteres F UFPFIF elin entre vetores y punteros F F UFPFPF elin entre mtries y punteros F F UFPFQF sniilizin de vetores y mtriesF F

F F F F @BA F F F F F F F F F F F F

57

NDICE GENERAL

Q F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F TQ TQ TQ TR TR TT TT TU TU TW

UFPFRF yhixegsx hi vse F F F F UFPFRFIF elgoritmo de l uruj F UFPFSF fihe ix vse F F F F F F UFPFSFIF fsqued seuenil F F F UFQF dens de rteresF F F F F F F F F F F F F UFQFIF helrin de vriles de den UFQFPF sniilizin de vriles de den UFQFQF vige hi gehixe F F F F F UFRF istruturs F F F F F F F F F F F F F F F F F F UFSF ipos de(nidos por el usurio F F F F F F F

8. Funciones.
VFIF VFPF VFQF VFRF VFSF VFTF VFUF

tilidd de ls funionesF F F F F F F F F F F F F he(niin de un funinF F F F F F F F F F F F F helrin y llmd de un funin F F F F F so de rgumentos por vlor y por refereni F v funin min@A on rgumentos F F F F F F F xmeros letoriosF F F F F F F F F F F F F F F F puniones pr dens de rteres F F F F F VFUFIF punin strlen@A F F F F F F F F F F F F F VFUFPF punin strt@A F F F F F F F F F F F F F VFUFQF puniones strmp@A y stromp@A F F F F VFUFRF punin strpy@A F F F F F F F F F F F F F VFVF unteros omo vlor de retorno F F F F F F F F VFWF so de rrys omo rgumentos un funin VFIHF unteros funionesF F F F F F F F F F F F F F F VFIIF roedimientosF F F F F F F F F F F F F F F F F F F VFIPF puniones reursivsF F F F F F F F F F F F F F F F VFIQF vlmds l sistem F F F F F F F F F F F F F F F WFIF WFPF WFQF WFRF WFSF punin printf@A F F F F F F F F F punin snf@AF F F F F F F F F F F wros gethr@A y puthr@A F F ytrs funiones de entrdGslid eeso pntll en vinux F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

71

UI UI UP UR US UT UU UU UU UU UV UV UV UW UW VH VH VI VP VR VR VS VV VW WH WI WQ

9. Funciones de entrada/salida.

81

10.El preprocesador.

IHFIF gomndo 5inludeF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHFPF gomndo 5de(neF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHFQF gomndos 5ifdefD 5ifndefD 5elseD 5endifD 5undef F F F F F F F F F F F F F F F F F F F F F F F F IIFIF grein desde l lne de omndos F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIFPF sntroduin l uso de l herrmient wke F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPFIF qestin dinmi de l memoriF F F F F F F F F F F F F F F F F F IPFPF iqve hi pxgsyxewsixy hi ve elqxeglx hi IPFQF wtries dinmisF F F F F F F F F F F F F F F F F F F F F F F F F IPFRF vists enlzds F F F F F F F F F F F F F F F F F F F F F F F F F F F IPFSF yiegsyxi ix vse ixveehe F F F F F F F F F F IPFSFIF helrin de un nodo F F F F F F F F F F F F F F F F F F IPFSFPF untero de eer y ol F F F F F F F F F F F F F F F F IPFSFQF il puntero nulo F F F F F F F F F F F F F F F F F F F F F F F F F F F F F wiwyse F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

88

11.Programas de varios fuentes 12.Gestion de memoria.

91 96

WT WU WV WV WV WW WW WW

NDICE GENERAL

R F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F WW IHH IHI IHP IHP IHP IHP IHQ IHQ IHQ IHR IHR IHR IHT IHU IHV IHW IIH IIH III IIP IIP IIP

IPFSFRF il operdor E b de selein de un miemro F F F F F F F F IPFTF gonstruion de un list enlzd en form linel F F F F F F F F F IPFUF list de listsF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPFVF yperiones lists dolemente enlzds F F F F F F F F F F F F F F IPFVFIF helrin de un list dolemente enlzd F F F F F F F IPFVFPF snsertr un elemento en un list dolemente enlzd F F IPFVFQF upresin de un elemento en un list dolemente enlzd IPFWF vse gsgvei F F F F F F F F F F F F F F F F F F F F F F F F IPFWFIF snsertr un elemento en un list irulr F F F F F F F F F F IPFWFPF upresin de un elemento en un list irulr F F F F F F F IPFIHF struturs dinmisF F F F F F F F F F F F F F F F F F F F F F F F F F i IPFIIF struturs dinmis tpis F F F F F F F F F F F F F F F F F F F F F i IPFIIFIFgyveF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPFIIFPFsveF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPFIIFQFeroles F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPFIIFRFiwix hi hipsxsgsyxi F F F F F F F F F F F F F F IPFIIFSFeroles finriosF F F F F F F F F F F F F F F F F F F F F F F F F IPFIIFTFyiegsyxi ix fyvi flxely F F F F F F F F IPFIIFUFeorrido preorden F F F F F F F F F F F F F F F F F F F F F F IPFIIFVFeorrido enorden F F F F F F F F F F F F F F F F F F F F F F F IPFIIFWFeorrido postorden F F F F F F F F F F F F F F F F F F F F F F IPFIIFIHF rofundidd de un rol inrio F F F F F F F F F F F F F F F IPFIIFIIF fyv fsxeIH hi fihe F F F F F F F F F F F F

13.Ficheros

IQFIF plujosF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQFPF untero psvi F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQFQF piheros de eerF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQFRF efs psgriy F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQFSF gsii psgriy F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQFTF igse hi geegii gehixe ix igixgsevi IQFUF vige hi geegii gehixe ix igixgsevi F IQFVF ysgsyx ix psgriy igixgsevi fsxesy F F F F F F IQFWF igse vige ix fsxesy F F F F F F F F F F F F F F F IRFIF enlisisF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IRFPF hiseoF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IRFQF rues e integrinF F F F F F F F F F F F F F F F F F F F F F F F F F F IRFRF eri(in y depurin de un progrmF F F F F F F F F F F F F F F F IRFSF pllos ms freuentesF F F F F F F F F F F F F F F F F F F F F F F F F F F IRFTF houmentin y mntenimientoF F F F F F F F F F F F F F F F F F F F F IRFUF iv gsgvy hi she hiv ypeiF F F F F F F F F F F F F F F F IRFVF wyhy pywevi hi ispsgegsx hi yqewe IRFWF itps estleer l extitud @orreinA de un progrmF F F F F IRFIHF egyi ix ve gevsheh hiv ypei F F F F F F F F F p F F F F F F F F F F F F F F F F F F F F

115

IIS IIS IIT IIU IIV IIV IIV IIW IPH IPI IPI IPP IPP IPQ IPR IPR IPS IPS IPT

14.Gestion de calidad.

121

15.Programacion Multimedia. 16.Programacion opengl.

ISFIF vireris hvF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPU ISFPF wetodosF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPU

127

128 129

17.Biblioteca de programas propios.

NDICE GENERAL

18.Las librerias del lenguaje C

IVFIF or tipoF F F F F F F F F F F F F F F F F F F F F F IVFIFIF pxgsyxi hi gegi F F F IVFIFPF gomproin lfti y de dgitos IVFIFQF lireris de entrdF F F F F F F F F F F IVFIFRF vireri tringFh F F F F F F F F F F F F IVFIFSF lireri mthFh F F F F F F F F F F F F F IVFIFTF puniones letoris F F F F F F F F F F IVFIFUF vireri timeFhF F F F F F F F F F F F F F IVFIFVF hvsfFr F F F F F F F F F F F F F F F IVFPF or orden lfetioF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F

130

IQH IQH IQI IQI IQI IQP IQP IQQ IQR IQR

19.Diseo de programas.

IWFIF egun el interfzF F F F IWFIFIF extoF F F F F F IWFIFPF entnsF F F F IWFIFQF snterrupionesF IWFPF egun el usoF F F F F F IWFPFIF tuegosF F F F F IWFPFPF hiseoF F F F F IWFPFQF gomuniionF IWFQF istrutur siF F F

137

IQU IQU IQU IQU IQU IQU IQU IQU IQU

Captulo 1

Introduccion
n progrm es un onjunto de rdenes pr un ordendorF ists rdenes se le deen dr en un ierto lengujeD que el ordendor se pz de omprenderF il prolem es que los lengujes que relmente entienden los ordendores resultn difiles pr nosotrosD porque son muy distintos de los que nosotros emplemos hitulmente pr hlrF isriir progrms en el lenguje que utiliz internmente el ordendor @llmdo lenguje mquin o digo mquinA odi(r en odigo mquin es un trjo duroD tnto l hor de rer el progrm omo @espeilmenteA en el momento de orregir lgn fllo o mejorr lo que se hizoF or esoD en l prti se emplen lengujes ms preidos l lenguje humnoD llmdos lengujes de lto nivelF xormlmenteD estos son muy preidos l idiom inglsD unque siguen uns regls muho ms estritsF

1.1. La memoria: bits, bytes, palabras


v memori de un omputdor est onstituid por un grn nmero de uniddes elementlesD llmds itsD que ontienen unos erosF n it isldo tiene muy ess utiliddY un onjunto deudo de its puede lmenr si ulquier tipo de informinF r filitr el eso y l progrminD si todos los ordendores grupn los its en onjuntos de VD que se llmn ytes u otetosF v memori se suele medir en uytes @IHPR ytesAD wytes o simplemente 4megs4 @IHPR uytesA y qytes o 4gigs4 @IHPR wytesAF ry que selr que l memori de un ordendor se utiliz siempre pr lmenr diversos tipos de informinF uizs l distinin ms importnte que h de herse es entre dtos y progrmsF e su vezD los progrms pueden orresponder pliiones @progrms de usurioD destindos un tre onretAD o l propio sistem opertivo del ordendorD que tiene omo misin el rrnrD oordinr y errr ls pliionesD s omo mntener tivos y esiles todos los reursos del ordendorF

1.2. Identicadores.
v memori de un omputdor onst de un onjunto enorme de plrsD en el que se lmenn dtos y progrmsF vs neesiddes de memori de d tipo de dto no son homognes @por ejemploD un rter lfnumrio oup un yteD mientrs que un nmero rel on IT ifrs oup V ytesAD y tmpoo lo son ls de los progrmsF edemsD el uso de l memori mi lo lrgo del tiempo dentro inluso de un mism sesin de trjoD y que el sistem reserv o lier memori medid que l v neesitndoF gd posiin de memori puede identi(rse medinte un nmero o un direinD y ste es el modo ms sio de referirse un determind informinF xo esD sin emrgoD un sistem modo o prtioD por l nul relin nemotni que un direin de memori suele tener on el dto ontenidoD y porque !omo se h diho ntes! l direin fsi de un dto mi de ejeuin ejeuinD o inluso en el trnsurso de un mism ejeuin del progrmF vo mismo ourre on prtes onrets de un progrm determindoF hds ls itds di(ultdes pr referirse un dto por medio de su direin en memoriD se h heho hitul el uso de identi(doresF n identi(dor es un nomre simlio que se re(ere un dto o progrm determindoF is muy fil elegir identi(dores uyo nomre gurde estreh relin on el sentido fsioD mtemtio o rel del dto que representnF es por ejemploD es lgio utilizr un identi(dor llmdo T

CAPTULO 1.

INTRODUCCION

slrioruto pr representr el oste nul de un empledoF il usurio no tiene nun que preouprse de direiones fsis de memoriX el sistem se preoup por l por medio de un tlD en l que se relion d identi(dor on el tipo de dto que represent y l posiin de memori en l que est lmendoF il gD omo todos los dems lengujes de progrminD tiene sus propis regls pr elegir los identi(doE resF vos usurios pueden elegir on grn liertd los nomres de sus vriles y progrmsD teniendo siempre uiddo de respetr ls regls del lenguje y de no utilizr un onjunto de plrs reservds @keywordsAD que son utilizds por el propio lengujeF ws delnte se explirn ls regls pr elegir nomres y ules son ls plrs reservds del lenguje gF fste deir por hor que todos los identi(dores que se utilien hn de ser delrdos por el usurioD es deirD hy que indir explitmente qu nomres se vn utilizr en el progrm pr dtos y funionesD y qu tipo de dto v representr d uno de ellosF ws delnte se volver sore estos oneptosF

1.3. Concepto de "programa".


n progrm en sentido informtio est onstituido por un onjunto de instruiones que se ejeutn ordinrimente de modo seuenilD es deirD d un ontinuin de l nteriorF eientementeD on ojeto de disminuir los tiempos de ejeuin de progrms rtios por su tmo o omplejiddD se est hiendo un grn esfuerzo en desrrollr progrms prlelosD esto esD progrms que se pueden ejeutr simultnemente en vrios proesdoresF v progrmin prlel es muho ms omplid que l seuenil y no se hr refereni ell en este ursoF enlogmente los dtos que mnejD ls instruiones que un proesdor digitl es pz de entender estn onstituids por onjuntos de unos y erosF e esto se llm lenguje de mquin o inrioD y es muy difil de mnejrF or elloD desde si los primeros os de los ordendoresD se omenzron desrrollr los llmdos lengujes de lto nivel @tles omo el portrnD el goolD etFAD que estn muho ms er del lenguje nturlF istos lengujes estn sdos en el uso de identi(doresD tnto pr los dtos omo pr ls omponentes elementles del progrmD que en lgunos lengujes se llmn rutins o proedimientosD y que en g se denominn funionesF edemsD d lenguje dispone de un sintxis o onjunto de regls on ls que se indi de modo inequvoo ls operiones que se quiere relizrF vos lengujes de lto nivel son ms o menos omprensiles pr el usurioD pero no pr el proesdorF r que ste pued ejeutrlos es neesrio trduirlos su propio lenguje de mquinF ist es un tre que reliz un progrm espeil llmdo ompildorD que trdue el progrm lenguje de mquinF ist tre se suele desomponer en dos etpsD que se pueden relizr junts o por seprdoF il progrm de lto nivel se suele lmenr en uno o ms (heros llmdos (heros fuenteD que en si todos los sistems opertivos se rterizn por un terminin !tmin llmd extensin! espeilF esD todos los (heros fuente de g deen terminr por @FAY ejemplos de nomres de estos (heros son lulosFD derivdFD etF v primer tre del ompildor es relizr un trduin diret del progrm un lenguje ms prximo l del omputdor @llmdo ensmldorAD produiendo un (hero ojeto on el mismo nomre que el (hero originlD pero on l extensin @FojAF in un segund etp se reliz el proeso de montje @linkgeA del progrmD onsistente en produir un progrm ejeutle en lenguje de mquinD en el que estn y inorpordos todos los otros mdulos que port el sistem sin intervenin explit del progrmdor @funiones de lirerD reursos del sistem opertivoD etFAF in un g on sistem opertivo indows el progrm ejeutle se gurd en un (hero on extensin @BFexeAF iste (hero es rgdo por el sistem opertivo en l memori ew undo el progrm v ser ejeutdoF n de ls ventjs ms importntes de los lengujes de lto nivel es l portilidd de los (heros fuente resultntesF uiere esto deir que un progrm desrrolldo en un g podr ser ejeutdo en un wintosh o en un mquin xsD on mnims modi(iones y un simple reompilin @esto en teoriD en l prti es ms omplidoAF il lenguje gD originlmente desrrolldo por hF ithie en los lortorios fell de l e8D fue posteriormente estndrizdo por un omit del exs @emerin xtionl tndrd snstituteA on ojeto de grntizr su portilidd entre distintos omputdoresD dndo lugr l exs gD que es l vrinte que tulmente se utiliz si universlmenteF

CAPTULO 1.

INTRODUCCION

1.3.1. Estructura de un programa.


n progrm g no es ms que un oleion de delriones de vriles gloles y de de(niiones de onstntesD mrosD tipos y funionesF n de ls funiones es espeilX se llm min @que en ingls signi( priniplA y ontiene el odigo del progrm priniplF xo nos detendremos explir l sintxis de l de(niin de funiones hst ms delnteD pero dees ser y que l de(niin de l funion min empiez on int min @voidA y sigue on el uerpo o o de l funion enerrdo entre un pr de llvesF v funion min dee devolver un vlor entero l (nl @tipimente el vlor HAD por lo que (nliz on un senteni return que devuelve el vlor HFS v estrutur tipi de un progrm g es estX smportion de funionesD vrilesD onstntesD etF he(niin de onstntes y mrosF he(niion de nuevos tipos de dtosF helrion de vriles glolesF he(niion de funionesF int min@voidA { helrion de vrilesY esignion de vrilesY rogrm priniplY return HY }

1.3.2. Algoritmo.
n lgoritmo es un mtodo pr resolver un prolemF eunque l populrizin del trmino h slegdo on el dvenimiento de l er informtiD lgoritmo proviene de wohmmed elEuhowirizmiD mtemtio pers que vivi durnte el siglo s y lnz grn reputin por el enunido de ls regls pso pso pr sumrD restrD multiplir y dividir nmeros deimlesY l trduin l ltn del pellido en l plr lgorismus deriv posteriormente en lgoritmoF il profesor xiklus irth Einventor de slD wodulEP y yeronE titul uno de sus ms fmosos lirosD elgoritmos C istruturs de dtos a rogrmsD signi(ndonos que slo se puede llegr relizr un uen progrm on el diseo de un lgoritmo y un orret estrutur de dtosF vos psos pr l resoluin de un prolem sonX IF hiseo del lgoritmo que desrie l seueni ordend de psosD sin migeddesD que onduen l soluin de un prolem ddoF @enlisis del prolem y desrrollo del lgoritmoFA PF ixpresr el lgoritmo omo un progrm en un lenguje de progrmin deudoF @pse de odi(E inFA QF ijeuin y vlidin del progrm por l omputdorF r llegr l relizin de un progrm es neesrio el diseo previo de un lgoritmoD de modo que sin lgoritmo no puede existir un progrmF vos lgoritmos son independientes tnto del lenguje de progrmE in en que se expresn omo de l omputdor que los ejeutF in d prolem el lgoritmo se puede expresr en un lenguje diferente de progrmin y ejeutrse en un omputdor distintY sin emrgoD el lgoritmo ser siempre el mismoF esD por ejemploD en un nlog on l vid diriD un reet de un plto de oin se puede expresr en espolD ingls o frnsD pero ulquier que se el lengujeD los psos pr l elorin del plto se relizrn sin importr el idiom del oineroF in l ieni de l omputin y en l progrminD los lgoritmos son ms importntes que los lengujes de progrmin o ls omputdorsF n lenguje de progrmin es tn slo un medio pr expresr un lgoritmo y un omputdor es slo un proesdor pr ejeutrloF nto el lenguje de progrmin omo l omputdor son los medios pr otener un (nX onseguir que el lgoritmo se ejeute y se efete el proeso orrespondienteF hd l imporE tni del lgoritmo en l ieni de l omputinD un speto muy importnte ser el diseo de lgoritmosF e l ensenz y prti de est tre se dedi grn prte de este liroF il diseo de l myor de los

CAPTULO 1.

INTRODUCCION

lgoritmos requiere retividd y onoimientos profundos de l tni de l progrminF in eseniD l soluin de un prolem se puede expresr medinte un lgoritmoF vs rterstis fundmentles que dee umplir todo lgoritmo sonX n lgoritmo dee ser preiso e indir el orden de relizin de d psoF n lgoritmo dee estr de(nidoF i se sigue un lgoritmo dos veesD se dee otener el mismo resultdo d vezF n lgoritmo dee ser (nitoF i se sigue un lgoritmoD se dee terminr en lgn momentoY o seD dee tener un nmero (nito de psosF v de(niin de un lgoritmo dee desriir tres prtesX intrdD roeso y lidF in el lgoritmo de reet de oin itdo nteriormente se tendrX intrdX ingredientes y utensilios empledosF roesoX elorin de l reet en l oinF lidX terminin del pltoF

1.4. Concepto de "funcin".


1.4.1. Conceptos generales.
n progrm esrito en g est formdo por un o vris funionesF gd funin expres l relizin del lgoritmo que resuelve un de ls prtes en que se h desompuesto el prolem ompleto en uestinF in el mtodo de nlisis desendenteD un prolem omplejo se desompone suesivmente en prtes d vez ms simples hst que result trivil su progrminF gon el lenguje gD d un de ess prtes se resuelve on un funinF pormlmenteD un funin tiene un nomre y est formd por un onjunto de sentenis que se ejeutn devolviendo un vlor l medio que l invoF odo progrm dee ontener l funin 4min4D que es l invod desde el sistem opertivo undo omienz l ejeuin del progrmF vs pliiones informtis que hitulmente se utiliznD inluso nivel de informti personlD suelen ontener deens y n ientos de miles de lnes de digo fuenteF e medid que los progrms se vn desrrollndo y umentn de tmoD se onvertirn rpidmente en sistems poo mnejles si no fuer por l modulrizinD que es el proeso onsistente en dividir un progrm muy grnde en un serie de mdulos muho ms pequeos y mnejlesF e estos mdulos se les h solido denominr de distints forms @suprogrmsD surutinsD proedimientosD funionesD etFA segn los distintos lengujesF il lenguje g he uso del onepto de funin @funtionAF e ul se l nomenlturD l ide es sin emrgo siempre l mismX dividir un progrm grnde en un onjunto de suprogrms o funiones ms peques que son llmds por el progrm priniplY sts su vez llmn otrs funiones ms espe(s y s suesivmenteF v divisin de un progrm en uniddes ms peques o funiones present !entre otrs! ls ventjs siguientesX IF wodulrizinF gd funin tiene un misin muy onretD de modo que nun tiene un nmero de lnes exesivo y siempre se mntiene dentro de un tmo mnejleF edemsD un mism funin @por ejemploD un produto de mtriesD un resoluin de un sistem de euiones linelesD FFFA puede ser llmd muhs vees en un mismo progrmD e inluso puede ser reutilizd por otros progrmsF gd funin puede ser desrrolld y omprod por seprdoF PF ehorro de memori y tiempo de desrrolloF in l medid en que un mism funin es utilizd muhs veesD el nmero totl de lnes de digo del progrm disminuyeD y tmin lo he l proilidd de introduir errores en el progrmF QF sndependeni de dtos y oultmiento de informinF n de ls fuentes ms omunes de errores en los progrms de omputdor son los efetos olterles o perturiones que se pueden produir entre distints prtes del progrmF is muy freuente que l her un modi(in pr dir un funionlidd o orregir un errorD se introduzn nuevos errores en prtes del progrm que ntes

CAPTULO 1.

INTRODUCCION

IH

funionn orretmenteF n funin es pz de mntener un grn independeni on el resto del progrmD mnteniendo sus propios dtos y de(niendo muy lrmente l interfz o omuniin on l funin que l h llmdo y on ls funiones ls que llmD y no teniendo ningun posiilidd de eso l informin que no le ompeteF vs funiones de g estn implementds on un prtiulr uiddo y riquezD onstituyendo uno de los spetos ms potentes del lengujeF is muy importnte entender ien su funionmiento y sus posiiliddesF

1.4.2. Nombre, Valor de retorno y Argumentos de una funcin


n funin de g es un porin de digo o progrm que reliz un determind treF n funin est soid on un identi(dor o nomreD que se utiliz pr referirse ell desde el resto del progrmF in tod funin utilizd en g hy que distinguir entre su de(niinD su delrin y su llmdF r explir estos oneptos hy que introduir los oneptos de vlor de retorno y de rgumentosF uizs lo mejor se empezr por el onepto ms prximo l usurioD que es el onepto de llmdF vs funiones en g se llmn inluyendo su nomreD seguido de los rgumentosD en un senteni del progrm prinipl o de otr funin de rngo superiorF vos rgumentos son dtos que se envn l funin inluynE dolos entre prntesis ontinuin del nomreD seprdos por omsF or ejemploD supngse un funin llmd power que lul x elevdo yF n form de llmr est funin es esriir l siguiente senteni @ls sentenis de g terminn on punto y omAX power@xDyAY in este ejemplo power es el nomre de l funinD y x e y son los rgumentosD que en este so onstituyen los dtos neesrios pr lulr el resultdo desedoF u ps on el resultdoc hnde preec ues en el ejemplo nterior el resultdo es el vlor de retorno de l funinD que est disponile pero no se utilizF in efetoD el resultdo de l llmd power est disponileD pues pree sustituyendo l nomre de l funin en el mismo lugr donde se h heho l llmdY en el ejemplo nteriorD el resultdo preeD pero no se he nd on lF e este menismo de sustituin de l llmd por el resultdo es lo que se llm vlor de retornoF ytr form de llmr est funin utilizndo el resultdo podr ser l siguienteX distni a power@xCQD yABeslY in este so el primer rgumento @xCQA es elevdo l segundo rgumento yD el resultdo de l poteni !el vlor de retorno! es multiplido por eslD y este nuevo resultdo se lmen en l posiin de memori soid on el identi(dor distniF iste ejemplo result tpio de lo que es un instruin o senteni que inluye un llmd un funin en el lenguje gF r poder llmr un funin es neesrio que en lgn otro ldoD en el mismo o en lgn otro (hero fuenteD prez l de(niin de dih funinD que en el ejemplo nterior es l funin powerF v de(niin de un funin es ni ms ni menos que el onjunto de sentenis o instruiones neesris pr que l funin pued relizr su tre undo se llmdF in otrs plrsD l de(niin es el digo orrespondiente l funinF edems del digoD l de(niin de l funin inluye l de(niin del tipo del vlor de retorno y de d uno de los rgumentosF e ontinuin se present un ejemplo de mo podr ser l de(niin de l funin power utilizd en el ejemplo nteriorF doule power@doule seD doule exponenteA { doule resultdoY FFF resultdo a FFF Y return resultdoY } v primer lne de l de(niin es prtiulrmente importnteF v primer plr doule indi el tipo del vlor de retornoF isto quiere deir que el resultdo de l funin ser un nmero de punto )otnte on uns IT ifrs de preisin @s es el tipo douleD omo se ver ms delnteAF hespus viene el nomre de l funin seguido deD entre prntesisD l de(niin de los rgumentos y de sus tipos respetivosF in este so hy dos rgumentosD se y exponenteD que son mos de tipo douleF e ontinuin se ren ls llves que

CAPTULO 1.

INTRODUCCION

II

ontienen el digo de l funinF v primer senteni delr l vrile resultdoD que es tmin de tipo douleF hespus vendrn ls sentenis neesris pr lulr resultdo omo se elevdo exponenteF pinlmenteD on l senteni return se devuelve resultdo l progrm o funin que h llmdo powerF gonviene notr que ls vriles se y exponente hn sido delrds en l eer @primer lneA de l de(niinD y por tnto y no he flt delrrls despusD omo se h heho on resultdoF gundo l funin es llmdD ls vriles se y exponente reien sends opis de los vlores del primer y segundo rgumento que siguen l nomre de l funin en l llmdF n funin dee ser tmin delrd ntes de ser llmdF edems de l llmd y l de(niinD est tmin l delrin de l funinF se ver ms delnte dnde se puede relizr est delrinF v delrin de un funin se puede relizr por medio de l primer lne de l de(niinD de l que pueden suprimirse los nomres de los rgumentosD pero no sus tiposY l (nl dee inluirse el punto y om @YAF or ejemploD l funin power se puede delrr en otr funin que l v llmr inluyendo l lne siguienteX doule power@douleD douleAY v delrin de un funin permite que el ompildor hequee el nmero y tipo de los rgumentosD s omo el tipo del vlor de retornoF v delrin de l funin se onoe tmin on el nomre de prototipo de l funinF

1.4.3. La funcin main( )


odo progrm gD desde el ms pequeo hst el ms omplejoD tiene un progrm prinipl que es on el que se omienz l ejeuin del progrmF iste progrm prinipl es tmin un funinD pero un funin que est por enim de tods ls demsF ist funin se llm min@A y tiene l form siguiente @l plr void es opionl en este soAX void min@voidA { senteniIY senteniPY FFF } vs llves {FFF} onstituyen el modo utilizdo por el lenguje g pr grupr vris sentenis de modo que se omporten omo un senteni ni @senteni ompuest o loqueAF odo el uerpo de l funin dee ir omprendido entre ls llves de pertur y ierreF

1.5. Tokens
ixisten seis lses de omponentes sinttios o tokens en el voulrio del lenguje gX lrs lveF sdenti(doresF gonstntesF gdens de rteresF yperdoresF eprdoresF il ompildor desompone el texto fuente o progrm en d uno de sus tokensD y prtir de est desomE posiin gener el digo ojeto orrespondienteF il ompildor ignor tmin los sngrdos l omienzo de ls lnesF

CAPTULO 1.

INTRODUCCION

IP

1.5.1. Palabras clave del C


in gD omo en ulquier otro lengujeD existen un serie de plrs lve @keywordsA que el usurio no puede utilizr omo identi(dores @nomres de vriles yGo de funionesAF ists plrs sirven pr indir l omputdor que relie un tre muy determind @desde evlur un omprinD hst de(nir el tipo de un vrileA y tienen un espeil signi(do pr el ompildorF il g es un lenguje muy onisoD on muhs menos plrs lve que otros lengujesF e ontinuin se present l list de ls QP plrs lve del exs gD pr ls que ms delnte se dr detlle de su signi(do @lgunos ompildores den otrs plrs lveD propis de d uno de ellosF is importnte evitrls omo identi(doresAX uto rek se hr onst ontinue defult do doule else enum extren )ot for goto if int long register return short signed sizeof stti strut swith typedef union unsigned void voltile while

1.5.2. Identicadores
n identi(dor es un nomre on el que se he refereni un funin o l ontenido de un zon de l memori @vrileAF gd lenguje tiene sus propis regls respeto ls posiiliddes de elein de nomres pr ls funiones y vrilesF in exs g ests regls son ls siguientesX IF n identi(dor se form on un seueni de letrs @minsuls de l l zY mysuls de l e l Y y dgitos del H l WAF PF il rter surydo o undersore @A se onsider omo un letr msF QF n identi(dor no puede ontener espios en lnoD ni otros rteres distintos de los itdosD omo por ejemplo @BDYFXECD etF AF RF il primer rter de un identi(dor dee ser siempre un letr o un @AD es deirD no puede ser un dgitoF SF e he distinin entre letrs mysuls y minsulsF esD ws es onsiderdo omo un identi(dor distinto de ms y de weeF TF exs g permite de(nir identi(dores de hst QI rteres de longitudF ijemplos de identi(dores vlidos son los siguientesX tiempoD distniID soeD sD veloidddelluz or el ontrrioD los siguientes nomres no son vlidosF IvlorD tiempoEtotlD dolres6D 7(nl in generl es muy onsejle elegir los nomres de ls funiones y ls vriles de form que permitn onoer simple vist qu tipo de vrile o funin representnD utilizndo pr ello tntos rteres omo sen neesriosF isto simpli( enormemente l tre de progrmin y !sore todo! de orrein y mntenimiento de los progrmsF is ierto que los nomres lrgos son ms loriosos de telerD pero en generl result rentle tomrse es peque molestiF

1.5.3. Constantes
vs vriles pueden mir de vlor lo lrgo de l ejeuin de un progrmD o ien en ejeuiones distints de un mismo progrmF edems de vrilesD un progrm utiliz tmin onstntesD es deirD vlores que siempre son los mismosF n ejemplo tpio es el nmero D que vle QFIRISWPTSRF iste vlorD on ms o menos ifrs signi(tivsD puede preer muhs vees en ls sentenis de un progrmF in g existen distintos tipos de onstntesX

CAPTULO 1.

INTRODUCCION

IQ

IF gonstntes numrisF on vlores numriosD enteros o de punto )otnteF e permiten tmin onsE tntes otles @nmeros enteros en se VA y hexdeimles @se ITAF PF gonstntes rterF gulquier rter individul enerrdo entre pstrofos @tl omo 99D 99D 9A9D 9C9D etFA es onsiderdo por g omo un onstnte rterD o en relidd omo un nmero entero pequeo @entre H y PSSD o entre EIPV y IPUD segn los sistemsAF ixiste un digoD llmdo digo egssD que estlee un equivleni entre d rter y un vlor numrio orrespondienteF QF gdens de rteresF n onjunto de rteres lfnumrios enerrdos entre omills es tmin un tipo de onstnte del lenguje gD omo por ejemploX 4espio4D 4isto es un den de rteres4D etF RF gonstntes simlisF vs onstntes simlis tienen un nomre @identi(dorA y en esto se preen ls vrilesF in emrgoD no pueden mir de vlor lo lrgo de l ejeuin del progrmF in g se pueden de(nir medinte el preproesdor o por medio de l plr lve onstF in gCC se utiliz preferentemente est segund formF ws delnte se vern on ms detlle estos distintos tipos de onstntesD s omo ls onstntes de tipo enumerinF

1.5.4. Operadores.
vos operdores son signos espeilesD veesD onjuntos de dos rteresD que indin determinds operiones relizr on ls vriles yGo onstntes sore ls que tn en el progrmF il lenguje g es prtiulrmente rio en distintos tipos de operdoresX ritmtios @CD ED BD GD 7AD de signin @aD CaD EaD BaD GaAD relionles @aaD `D bD `aD baD 3aAD lgios @88D ||D 3A y otrosF or ejemploD en l senteniX espio a espioiniil C HFS B elerion B tiempo B tiempoY pree un operdor de signin @aA y dos operdores ritmtios @C y BAF min los operdores sern vistos on muho ms detlle en prtdos posterioresF

1.5.5. separadores
vos seprdores onstn deX uno o vrios espios en lnoD tuldoresD rteres de nuev lne @denomindos 4espios en lno4 en onjuntoAD y tmin los omentrios esritos por el progrmdor se emplen pr seprr los dems tokensY por lo dems son ignordos por el ompildorF u ppel dole es yudr l ompildor desomponer el progrm fuente en d uno de sus tokens y yudr l progrmdor l her el progrm ms legileF is onveniente introduir espios en lno inluso undo no son estritmente neesriosD on ojeto de mejorr l legiilidd de los progrmsF

1.5.6. Comentarios
il lenguje g permite que el progrmdor introduz omentrios en los (heros fuente que ontienen el digo de su progrmF vos omentrios son ignordos por el ompildor por lo ul l misin de los omentrios es servir de expliin o lrin sore mo est heho el progrmD de form que pued ser entendido por un person diferente @o por el propio progrmdor lgn tiempo despusAF il progrm funion extmente igul sin ellosF vos rteres @GBA se emplen pr iniir un omentrio introduido entre el digo del progrmD el omentrio termin on los rteres @BGA todo lo que este entre ellos es ignordo por el ompildorF xo se puede introduir un omentrio dentro de otroF odo texto introduido entre los smolos de omienzo @GBA y (nl @BGA de omentrio son siempre ignordos por el ompildorF or ejemploX vrileI a vrilePY GB in est lne se sign vrileI el vlor ontenido en vriE leP BG

CAPTULO 1.

INTRODUCCION

IR

vos omentrios pueden tur tmin omo seprdores de otros tokens propios del lenguje gF n fuente freuente de errores no espeilmente difiles de detetr l progrmr en gD es el olvidrse de errr un omentrio que se h ierto previmenteF il lenguje exs g permite tmin otro tipo de omentriosD tomdo del gCCF odo lo que v en ulquier lne del digo detrs de l dole rr @GGA y hst el (nl de l lneD se onsider omo un omentrio y es ignordo por el ompildorF r omentrios ortosD est form es ms mod que l nteriorD pues no hy que preouprse de errr el omentrio @el (n de lne t omo ierreAF gomo ontrprtidD si un omentrio oup vris lnes hy que repetir l dole rr @GGA en d un de ls lnesF gon este segundo proedimiento de introduir omentriosD el ltimo ejemplo podr ponerse en l formX vrileI a vrilePY GG in est lne se sign vrileI el vlor ontenido en vriE leP

1.6. Lenguaje C
gules son ls rterstis que hen tn populr este lenguje de progrmin e idneo omo primer lenguje de progrmin en ls rrers profesionles de progrmdor @de pliiones y de sistemsA y del ingeniero de softwrec odemos itr lguns muy soreslientesX is muy portle @trnsportle entre un grn nmero de pltforms hrdwre y pltforms sofwreD sistems opertivosAF ixisten numerosos ompildores pr todo tipo de pltforms sore los que orrren los mismos proE grms fuentes o on ligers modi(ionesF is verstil y de jo nivelD por lo que es idneo pr tres reltivs l progrmin del sistemF e pesr de ser un exelente lenguje pr progrmin de sistemsD es tmin un e(iente y potente lenguje pr pliiones de propsito generlF is un lenguje pequeoD por lo que es reltivmente fil onstruir ompildores de g y dems es tmin fil de prenderF odos los ompildores suelen inluir potentes y exelentes iliotes de funiones omptiles on el estndr exsF vos diferentes frintes suelen dir sus ompildores funionliddes diverss que umentn l e(ieni y poteni de los mismos y onstituye un notle ventj respeto otros lengujesF il lenguje present un interfz exelente pr los sistems opertivos nix y indowsD junto on el y reditdo vinuxF is un lenguje muy utilizdo pr l onstruin deX sistems opertivosD ensmldoresD progrms de omuniionesD intrpretes de lengujesD ompildores de lengujesD editores de textosD ses de dtosD utiliddesD ontroldores de redD etF g es un lenguje ompildoX ntes de ejeutr un progrm esrito por nosotrosD suministrmos su odigo fuente @en un (hero on extension F un ompildor de gF il ompildor lee y nliz todo el progrmF i el progrm est orretmente esrito segun l de(niion del lengujeD el ompildor gener un nuevo (hero on su trduion odigo de mquinD y si noD muestr los errores que h detetdoF r ejeutr el progrm utilizmos el nomre del (hero generdoF i no modi(mos el odigo fuenteD no he flt que lo ompilemos nuevmente pr volver ejeutr el progrmX st on volver ejeutr el (hero generdo por el ompildorF r ejeutr sumtorioFD por ejemploD primero hemos de usr un ompildor pr produir un nuevo (hero llmdo sumtorioD luego podemos ejeutr el progrm esriiendo sumtorio en l line de ordenes nixF

CAPTULO 1.

INTRODUCCION

IS

v prinipl ventj de ompilr los progrms es que se gn en veloidd de ejeuionD y que undo el progrm se ejeut est ompletmente trduido odigo de mquin y se horr el proeso de trduion simultne que onllev interpretr un progrmF eroD demsD omo se trdue odigo de mquin en un fse independiente de l fse de ejeuionD el progrm trdutor puede dedir ms tiempo intentr enontrr l mejor trduion posileD l que proporione el progrm de odigo de mquin ms rpido @o que onsum menos memoriAF in g l indention @espiosD sltos de line y tuldoresA es solutmente super)uX indentmos los progrms unimente pr herlos ms legilesF in g se se donde empiez y donde un loque porque ste est enerrdo entre un llve iert @{A y otr errd @}A y d senteni est otd por omills @YAD pero no se pone despues de errr un llve @}AD hy un exepin est normX ls onstruiones strutD uy llve de ierre dee ir seguid de un punto y omF uiz hys reprdo en que ls lines que empiezn on 5inlude son espeiles y que ls trtmos de form diferenteX no se puede jugr on su formto del mismo modo que on ls demsX d senteni 5inlude dee oupr un line y el rter 5 dee ser el primero de l l lineF il ompildor es el elemento ms rterstio del lenguje gF gomo y se h diho nteriormenteD su misin onsiste en trduir lenguje de mquin el progrm g ontenido en uno o ms (heros fuenteF il ompildor es pz de detetr iertos errores durnte el proeso de ompilinD envindo l usurio el orrespondiente mensje de errorF il preproesdor es un omponente rterstio de gD que no existe en otros lengujes de progrminF il preproesdor t sore el progrm fuenteD ntes de que empiee l ompilin propimente dihD pr relizr ierts operionesF n de ests operiones esD por ejemploD l sustituin de onstntes simlisF esD es posile que un progrm hg uso repetids vees del vlor QFIRISWPTSRD orrespondiente l nmero F is posile de(nir un onstnte simli llmd s que se de(ne omo QFIRISWPTSR l omienzo del progrm y se introdue luego en el digo d vez que he fltF in relidd s no es un vrile on un determindo vlorX el preproesdor heque todo el progrm ntes de omenzr l ompilin y sustituye el texto s por el texto QFIRISWPTSR d vez que lo enuentrF vs onstntes simlis suelen esriirse ompletmente on mysulsD pr distinguirls de ls vrilesF il preproesdor reliz muhs otrs funiones que se irn viendo medid que se vy explindo el lengujeF vo importnte es reordr que t siempre por delnte del ompildor @de h su nomreAD filitndo su tre y l del progrmdorF xosotros usremos un ompildor onreto de gX gF u form de uso ms si es estX g (heroF Eo (hero ejeutle v opion Eo es revitur de outputD es deir slidD y ell le sigue el nomre del (hero que ontendr l trduion odigo mquin del progrmF hees tener presente que diho (hero solo se gener si el progrm g est orretmente esritoF gon ojeto de mntener el lenguje lo ms senillo posileD muhs sentenis que existen en otros lengujesD no tienen su orrespondiente ontrprtid en gF or ejemploD en g no hy sentenis pr entrd y slid de dtosF is evidenteD sin emrgoD que st es un funionlidd que hy que urir de lgun mnerF il lenguje g lo he por medio de funiones preprogrmds que se venden o se entregn junto on el ompildorF ists funiones estn grupds en un onjunto de lirers de digo ojetoD que onstituyen l llmd lirer estndr del lengujeF v llmd dihs funiones se he omo otrs funiones ulesquierD y deen ser delrds ntes de ser llmds por el progrm @ms delnte se ver mo se he esto por medio de l diretiv del preproesdor 5inludeAF

1.7. Ficheros
il digo de ulquier progrm esrito en g se lmen en uno o ms (herosD en el diso del ordendorF v mgnitud del progrm y su estrutur intern determin o onsej sore el nmero de (heros utilizrF gomo se ver ms delnteD l divisin de un progrm en vrios (heros es un form de ontrolr su mnejo y su modulriddF gundo los progrms son pequeos @hst SHIHH lnes de digoAD un solo (hero suele strF r progrms ms grndesD y undo se quiere mntener ms independeni entre los distintos suprogrmsD es onveniente reprtir el digo entre vrios (herosF eurdese dems que d vez que

CAPTULO 1.

INTRODUCCION

IT

se introdue un mio en el progrm hy que volver ompilrloF v ompilin se reliz nivel de (heroD por lo que slo los (heros modi(dos deen ser ompildos de nuevoF i el progrm est reprtido entre vrios (heros pequeos est operin se reliz muho ms rpidmenteF eurdese tmin que todos los (heros que ontienen digo fuente en g deen terminr on l extensin @FAD omo por ejemploX produtoFD soluionFD etF

1.8. Lectura y escritura de datos.


v letur y esritur @o entrd y slidA de dtos se reliz por medio de llmds funiones de un lirer que tiene el nomre de stdio @stndrd inputGoutputAF vs delriones de ls funiones de est lirer estn en un (hero llmdo stdioFhF e utilizn funiones diferentes pr leer dtos desde teldo o desde disoD y lo mismo pr esriir resultdos o texto en l pntllD en l impresorD en el disoD etF is importnte onsiderr que ls funiones de entrd y slid de dtos son verdders funionesD on tods sus rterstisX nomreD vlor de retorno y rgumentosF

1.9. Precompilador y compilador en Linux.


1.9.1. Compilador
qnu @gA es el nomre del ompildor del proyeto qxF gompil progrms esritos en gD CCD ojetive gD e inluso fortrm @ trves de gUUAF roximmente estrn disponiles slD wodulEPD ed Wx y otros muhos lengujes de desrrolloF g permite l progrmdor el ontrol totl del proeso de ompilionD ompuesto de utro etpsX repoesdoF gompilionF insmldoF inlzdoF e puede prr el proeso despues de d etp pr ir exminndo los resultdosF n ejemplo de omo se usX remos un rhivo llmdo rolFD que ontengX GB wi primer progrmBG 5inlude `stdioFhb int min@voidA { fprintf@stdoutD 4rolD puniono n4AY return HY } ehor pr ompilrlo esriimosX g rolF Eo rol FGrol v primer orden ompil el progrm y el segundo lo ejeutF

CAPTULO 1.

INTRODUCCION

IU

1.9.2. Make.
v myor prte del desrrollo de progrms neesit de vrios rhivos fuenteD por l simple rzon de que no es prtio usr miles de lines de odigo en un solo rhivoF gomo un proyeto grnde puede inluir muhos rhivos fuenteD seri un desperdiio reompilr todo si solo se h modi(do un rhivo de un progrm que y h sido ompildo @sin emrgoD esto ourre si se us g en l line de omndosAF v utilidd mke eler el desrrollo de softwre determinndo utomtimente que rhivos deen ser reompildos despues de her miosF wke tmien elimin l neesidd de esriir lines de omndo lrgs pr reonstruir los progrmsD y que lmen todos los omndos neesrios y los invo undo se neesitnF eunque wke tiene un funionliddD su uso es stnte simpleF wke est sdo en ojetivosD los ules son onjuntos de direiones pr mntener omponentes @ojet (lesD lirriesD etFA de un progrmF vos ojetivos espei(n el nomre del omponente rstrerD un list de rhivos fuente y otros ojetivos de los que depende el omponenteD y un list de omndos pr reonpilr el ojetivoF vs instruiones pr onpilr un omponente se llmn reglsD y l list de rhivos de los que depende el omponente se llmn dependenisF gundo se llm mke sore un ierto ojetivoD heque que que ls dependenis de los ojetivos se omprueenF i lgun de ls dependenis mio desde l ultim ompilionD se ejeutn ls regls del ojetivoF wke tmien reunstruye reursivmente ulquier rhivo ntiudo en l list de dependenisF isto es extremdmente onveniente en un proyeto grnde y modulrF wke us ojetivos y regls en un rhivo llmdo wke(le or mke(leF iste rhivo puede ontener ulquier numero de ojetivosF i mke se inii sin omndosD utomtimente intent reonstruir el primer ojetivo que enuentrF gonsider the following mke(leX progrmX (leIF (lePF grphisF g E (leIF (lePF g (leIFo (lePFo grphisF Elhv Eo progrm grphisFX grphisF drwF g E grphisF drwF r rs grphisF grphisFo drwFo rnli grphisF iste rhivo desrie omo ompilr un ejetule llmdo progrm y un iliote estti llmd grpE hisFF progrm depends on (leIFD (lePFD nd grphisF E if ny of these hve een modi(ed sine progrm ws lst uiltD mke will reuild progrmF grphisF is lso trgetD nd it depends on grphisF nd drwFF he indented lines under eh trget re rulesF sf progrm needs to e reuiltD wke will exeute the two rules tht hve een providedF hese lines must e indented with t hrtersY spes will not workF wke is rther prtiulr out syntxF he mke utility provides onvenient ess to environment vrilesF wke(les n setD omineD nd retrieve environment vriles s text stringsD nd inlude these vriles in trgets nd rulesF st is ommon to use the vrile gg to represent the g ompiler ommnd @whih in our se is gAD gpveq to represent the stndrd set of ommnd line options to pss to the ompilerD nd vhpveq to represent the options to pss to the linker @whih is normlly just the g ompilerD ut sometimes expliitly invoked with the ld ommndAF por exmpleD the previous mke(le n e rewritten s follows to tke dvntge of vrile sustitutionX ggag gpveqaEyP E Ell Epednti vsfaElhv Elpthred progrmX (leIF (lePF grphisF 6@ggA 6@gpveqA E (leIF (lePF 6@ggA (leIFo (lePFo grpE hisF 6@vsfA Eo progrm grphisFX grphisF drwF 6@ggA 6@gpveqA E grphisF drwF r rs grphisF grpE hisFo drwFo rnli grphisF

1.9.3. Trabajando con bibliotecas.


virries provide wy to pkge ode into reusle inry modulesF vinux softwre n use two types of lirriesX stti nd shredF e stti lirry is simply olletion of ojet (les tht hve een rhived into one (le with symol tleF tti lirries hve (le extension of FD nd they n e linked into progrms s norml ojet (lesF e shred lirry is similr to stti lirryD exept tht it permnently resides in

CAPTULO 1.

INTRODUCCION

IV

seprte (le nd is never diretly linked into n pplitionF hred lirries re linked t runtime y the operting system9s dynmi linkerF tti lirries re extremely simple to rete nd useF yne you hve reted the ojet (les you wish to pkge s lirryD omine them with the r ommndX 6 r rs somethingF (leIFo (lePFo (leQFo r is simple rhiving utilityF he r option spei(es n operting modeX it tells r to dd the given (les to the rhiveD repling ny existing (les with the sme nmesF spei(es tht the rhive should e reted if it does not lredy existF pinllyD s informs r tht this is n rhive of ojet (les @ieD stti lirryA nd tht symol tle should e ddedF yptionllyD you n leve out the s )g nd use the rnli utility to dd the symol tleY the resulting (le will e equivlentF o use stti lirryD pss it to g just s you would pss norml ojet (leF g will reognize the F (le extension s n rhive of ojet (lesF hred lirries re it more omplex to mnge thn stti lirriesD ut they re worth the extr e'ort in mny sesF hred lirries re not stored in exeutles tht use themY they re independent (lesD nd they re linked into exeutles t runtimeF sn mny ses shred lirries n e updted without reompiling progrms tht depend on themF st is possile for the operting system to lod shred lirry into memory oneD for use y multiple pplitionsF hred lirries follow very spei( nming sheme designed to keep inomptile versions seprteF ih shred lirry should e given unique se nme @or sonmeA of the form lipoofrFsoFnD where n is mjor relese numerF he mjor relese numer should e inremented whenever kwrds omptiility is rokenF winor version nd relese numers re dded to the end of the se nmeD so tht the (nl nme looks something like lipoofrFsoFPFIFQF he ldon(g utility is responsile for imposing snity upon the vrious versions of lirry tht might existF st serhes for lirries in ertin set of diretoriesD usully spei(ed in GetGldFsoFonf or the environment vrile vh vsfe erF por eh lirry it (nds with nme in the form liomethingFsoFmFnFr D it retes symoli link for liomethingFsoFmF sf two lirries hve the sme se nmeD ldon(g retes symoli link to the lter versionF epplitions referene these symoli links rther thn the full nmes of the lirriesF sf new relese of lirry is instlledD the symoli link is updted y ldon(g nd ll pplitions tht use the lirry will utomtilly referene the new versionF hred lirries re simple to reteF pirstD ompile your soures into ojet (les with the Efsg )g @this uses g to output positionEindependent odeD whih is more pltle to the dynmi linkerAF henD link with g9s Eshred )gF ou will lso need to inform the linker of the sonme you wish to useF o see how this is doneD tke look t the following exmpleX 6 g Efsg E fooF rF 6 g Eshred ElDE sonmeDlipoofrFsoFI fooFo rFo Eo lipoofrFsoFIFIFI 6 instll Em HUSS lipoofrFsoFIFIFI GusrGli 6 ldon(g 6 ln Es GusrGliGlipoofrFsoFI GusrGliGlipoofrFso he (rst ommnd produes the ojet (les fooFo nd rFoD nd the seond retes the shred lirryF xote the use of the El )g to send options diretly to the linkerF he lirry is then instlled to the stndrd lotion with resonle set of permissions @noteX this step will require write permission to GusrGliAD nd ldon(g is exeuted to set up the proper symoli linkF pinllyD nother symoli link is reted to the se nme of the lirryF his llows the lirry to e linked into progrm with the Elpoofr g optionF hred lirries re extremely verstileF yne they re linked into n pplitionD they t s prt of the progrmD exept tht the tul linking is done t runtimeF hred lirries n lso e mnully loded nd essed vi the dlopen g interfeF o link properly instlled shred lirry into n pplitionD use g9s El optionF por instneD to link with GusrGliGlipoofrFso @whih is symoli link to GusrGliGlipoofrFsoFIAD speify ElpoofrF sf the lirry resides in nonstndrd diretory @suh s the lirries in GusrGIITGliAD use the Ev option @EvGusrGIITGliAF hen the pplition is runD the runtime linker ttempts to lote the lirry @y nmeA nd mth its symols with the symols the pplition thinks it should hveF sf ny symols re missingD the linker reports n errorD nd the pplition fils to lodF ytherwiseD the shred lirry eomes prt of the pplitionF dlopenGdlsym is nother pproh to using shred lirriesF his interfe llows shred ojet (les to e opened nd essed mnullyF por exmpleD suppose tht lifooFso is shred ojet (le ontining funtion rF he following exmple will open the (le nd ll the funtionX 5inlude `dlfnFhb GB dlfnFh provides the dlopen@A interfe BG int min@A { void BhndleY void @BrA@voidAY GB ypen the lirry nd sve the hndle BG

CAPTULO 1.

INTRODUCCION

IW

hndle a dlopen@4lifooFso4DvhxyAY if @hndle aa xvvA { GB dlerror@A returns n error messge BG printf@4dlopen filedX 7sn4Ddlerror@AAY return IY }Y GB ettempt to (nd the ddress of r@A BG r a dlsym@hndleD4r4AY if @r aa xvvA { printf@4dlsym filedX 7sn4Ddlerror@AAY return IY }Y GB qoodD we found r@AD so ll it BG r@AY GB glose lifooFso BG dllose@hndleAY return HY } he vh xy )g in dlopen mens tht dlopen should ttempt to resolve ll symols tht the shred lirry depends on immeditely @shred lirries n depend on other lirriesD so this is serious onernAF he other option is vh veD whih instruts the dynmi linker to resolve symols s they re enounE teredF ometimes dynmilly loded lirry needs to ess symols in the prent pplitionF o llow these symols to e resolvedD ompile the pplition with the Erdynmi option nd the !exportEdynmi linker option @the orret syntx is EwlD!exportEdynmiAF he Erdynmi option llows unresolved symols in shred lirry to e mthed with symols in the prent pplitionD nd the !exportEdynmi option instruts the linker to generte extr symol informtion suitle for this purposeF

1.9.4. Linux Linker Quirks


he vinux linkerD qx ldD is omplex ut quirky toolF elthough omplete disussion of ld is fr eyond the sope of this ookD here re some hints tht might mke your life esierF ld @nd therefore gA is sensitive out the order in whih lirries nd ojet (les re spei(ed on the ommnd lineF sf lifooFso depends on lirFsoD lifooFso must e spei(ed (rst @s ounterintuitive s this my eAF he reson is tht ld only keeps trk of unresolved symols s it linksF sf lifooFso nd lirFso depend on eh otherD one of the lirries will hve to e spei(ed twie @for exmpleD Elfoo Elr ElfooAF his is di'erent from the ehvior of isul gCC9s linkerD nd this uses hedhes when porting gmes from indowsF sf the linker n9t (nd symol ut you9re sure tht you9ve given it the right lirriesD doule hek the order in whih they9re spei(ed on the ommnd lineF he vinux runtime linker does not respet the vh vsfe er environment vrile with setuid root exeutlesF his is it nnoyingD ut it is importnt for seurityY onsider the implitions of llowing users to modify the lirry serh pth for exeutles tht re run s the root userF xme ollisions re nnoyingD espeilly euse they n e extremely hrd to treF he EwrnEommon )g will use wrning to e printed whenever symols @glol vrilesD for instneA re omined etween ojet (lesF pinllyD keep in mind tht some vinux distriutions @notly ed rtA do not reognize GusrGlolGli s lirry diretoryD nd hene ny lirries pled there will not e essileF ou n (x this y editing GetGldFsoFonfF emeer to run the ldon(g progrm fter editing the lirry pth listF

1.9.5. Debugging Linux Applications.


vinux9s progrmming environment provides support for intertive deuggingF he g ompiler n generte symol informtion for deuggingD nd there re severl deuggers villeF e will egin y deE monstrting how to dd deugging informtion to n exeutleD nd then tke rief tour of two populr deugging environments for vinuxF gompiling por heugging sn order for deugger to nlyze n exeutE le9s ehvior in wy tht is useful to humnsD it needs to determine the ext lotions of the progrm9s vriles nd funtion entry pointsF his requires it of help from the ompilerY pplitions must e spei(E lly ompiled for deuggingD or symoli deuggers will e uselessF o ompile progrm with the neessry deugging support @nd in prtiulrD support for the gd deuggerAD use the Eggd )gX 6 g Eggd fooF Eo

CAPTULO 1.

INTRODUCCION

PH

foo st is good ide to disle optimiztion when deugging @tht isD do not use the Eyn ompiler optionAF elthough g nd gd llow you to deug optimized exeutlesD the results might e it surprising @sine optimiztionD y de(nitionD hnges the internls of progrmAF elthough the EfomitEfrmeEpointer ompiler option is sometimes used in the hope of improving performneD this option is inomptile with deugging in most ses @s it uses the ompiler to omit the instrutions tht usully keep trk of n importnt piee of informtionAF gompiling n exeutle for deugging will inrese its size nd most likely derese its performneY exeutles intended for puli relese should not e ompiled for deuggingF qx gd is the primry deugger for vinuxF st llows you to singleEstep progrmsD inspet vriles while progrms re runningD nd nlyze ore (les @memory dump (les generted utomtilly when pplitions rshD 'etiontely dued ore piesAF gd is n extremely powerful toolD ut its interfe is likely to throw eginners for loopF gd is textEsed intertive deuggerF yne progrm is loded into the deuggerD gd epts ommnds to diret the progrm9s opertionF here re lots of ommndsD ut there is lso nie online help filityF imply type help for n indexF

1.9.6. CVS.
gollortion is the only wy to get lrge progrmming tsk omplished in ny resonle mount of timeD ut oordintion n eome di0ult with even two or three developers working on projetF sn prtiulrD re must e tken to ensure tht one progrmmer9s work does not overwrite nother9sF st is lso importnt to keep development nd relese versions of piee of softwre seprteF hese prolems re ddressed y version ontrol softwreF he pilities of these tools vryD ut we will disuss the most populr toolD the gonurrent ersion ystem @gAF g is tool for mnging repositoriesD whih re simply diretory trees of soure ode with it of extr ontrol informtionF ih projet in repository is lled moduleF wodules re initilly imported into the repositoryD nd dditionl (les my e susequently ddedF sndividul developers my hek out modulesD mke hngesD nd ommit the updted (les k into the mster soure repository when they re (nishedF g keeps reord of the hnges mde to eh (leD nd llows individul (les or entire trees to e tgged with version designtionsF hevelopers n lso rete seprte rnhes of soure tree if they intend to mke sustntil nd possily dngerous modi(tionsF uessful rnhes n lter e merged k into the min soure treeF ht if two developers mke @on)itingA modi(tions to the sme (lec ome version ontrol systems physilly prevent this with strong (le lokingD ut g llows itF sn the se of on)itD g will prevent the most reent modi(tion from eing ommitted to the repositoryD ut insted will provide the developer with rejet (le listing the soure ode lines in questionF he developer must then merge his hnges with the other developer9s hnges y hnd nd then reEommit the (leF his would oviously e ontinuous hssle without it of oordintion etween developersY g does not reple ommunition nd mngementF st is est to void on)its in th (rst pleD ut sometimes they re inevitleF g is free toolD nd this hs plyed role in its lmost universl eptne in the vinux development ommunityF pree softwre would not e where it is tody without gF e frief g utoril e will now work through omplete exmple of using g to mnge smll projetF uppose tht we hve four (lesX wke(leD fooFD fooFhD nd minFF hese onstitute smll progrmE ming projetD ut their ontents re not relevnt for our purposesF e would like to rete g module out of these (les so tht other developers n join inF por now we9ll ssume tht ll developers hve lol ess to the mhine hosting the repositoryD though it is possile to use g remotelyF greting g wodule he (rst step is to rete repositoryD if one does not lredy existF e repository n host ny numer of modulesD nd it is ommon for softwre tems to use one entrl repository for ll of their projets @this filittes routine kupsD mong other thingsAF o rete repositoryD set the gyy environment vrile to suitle lotion nd type vs initF his will rete the g repository diretory nd initilize severl importnt ontrol (lesF he lotion of gyy is not espeilly importntD ut mke sure tht your ount hs write ess to itF sf repository lredy existsD mke sure the gyy environment vrile is set to the repository9s lotionF 6 export gyyaGhomeGoverodeGvs 6 vs init rning ho not rete g repository in the sme diretory s projet you wish to dd to the repositoryF his would result in n in(nite loopF g is remrkly rinded out some thingsD ut useful tool nonethelessF xow we need to import the initil set of soure (les to the repositoryF essuming tht we re in the projet9s diretory nd tht gyy is set orretlyD we use the ommnd vs import Em 4ome desriptive omE

CAPTULO 1.

INTRODUCCION

PI

ment4 projnme vendor lelD where projnme is the nme of the projet @foor for nowAD vendor is the nme of the orgniztion responsile for the projet @whih doesn9t mtter too muh to usAD nd lel is n indition of the softwre9s progressD suh s initil or strtF his ommnd will opy the projet9s (les into the g repository under the given projet nmeF he projet is now ontrolled y gD nd the originl (les my e sfely deletedF por the purposes of our tutorilD the orret import ommnd is vs import Em 4g ixmple4 exmple xyz strtF his must e exeuted from the diretory ontining the four soure (lesD nd gyy must point to the initilized repositoryF 6 vs import Em 4g ixmple4 exmple xyz strt x x x x exmpleGfooFh exmpleGfooF exmpleGminF exmpleGwke(le xo on)its reted y this import orking ith g rojet yne projet is in gD multiple developers n sfely ess the projet9s (les without too muh fer of olliding with one notherF ih developer should mke his own working opy of the projet @with the vs hekout ommndAF por our tutorilD swith to new diretory nd type vs hekout exmpleF g will opy the four exmple (les to new diretory lled exmpleF ou my now mke ny modi(tions you wish to the (lesD nd other developers min join in y heking out their own opies of the projetF rning ry to void editing (les in g repository diretlyF his defets the whole purpose of gD nd doing so is likely to use mssive hedhes for the next person to ommit his working opy to the repositoryF gEontrolled (les re mrked redEonly to help prevent this from hppeningF g is not designed to e nuisne @quite the oppositeD tullyAD ut it requires it of oopertion from its usersF hen you hve (nished mking modi(tions to projet9s (lesD you should ommit them k into the repository for everyone else to useF por exmpleD suppose tht we hve orreted n error in fooFD nd we wnt to integrte this modi(tion k into the mster soure treeF prom the diretory ontining our working opyD we would type vs ommit Em 4hesription of hngesF4F 6 vs ommit Em 4pixed typoF4 vs ommitX ixmining F gheking in fooFY GhomeGoverodeGtestvsGexmpleGfooFDv `! new revisionX IFIY previous revisionX IFH done fooF fut wht if someone hs mde on)iting modi(tions to the mster opy of fooFc st would e d to simply overwrite their hngesY they my hve spent lot of time on themF g oviously doesn9t know how to rewrite soure ode to integrte hnges @eyond ertinD very limited extentAD so we must intervene nd merge the hnges ourselvesF he trnstion might look something like thisX time intervlF ixeuted properlyD this fools the humn eye into pereiving smooth movement rther thn disrete stepsF ih sreen updte in n nimtion sequene is lled frmeD nd the numer of frmes drwn in set period of time is lled the frmerteF he qulity of n nimtion depends oth on the frmerte nd on the distne eh nimted ojet moves etween frmesF pooling the eye is not esyF sf itmp moves too quikly or ompleted frmes re not displyed frequently enoughD the illusion will egin to rek downD nd the viewer will egin to see eh frme s seprte imgeF his jittery nimtion n eome very distrtingD nd so it must e voided t ll ostsF

Captulo 2

programacion estructurada.
2.1. Fases en la resolucion de problemas.
il proeso de resoluin de un prolem on un omputdor ondue l esritur de un progrm y su ejeuin en l mismF eunque el proeso de diser progrms es un proeso retivoD se puede onsiderr un serie de fses o psos omunesD que generlmente deen seguir todos los progrmdoresF vs fses de resoluin de un prolem on omputdor sonX enlisisF il prolem se nliz teniendo presente l espei(in de los requisitos ddos por el liente de l empres o por l person que enrg el progrmF hiseoF n vez nlizdo el prolemD se dise un soluin que onduir un lgoritmo que resuelv el prolemF godi(in @implementinAF v soluin se esrie en l sintxis del lenguje de lto nivel @por ejemploD gA y se otiene un progrmF ijeuinD veri(in y depurinF il progrm se ejeutD se omprue rigurosmente y se eliminn todos los errores @denomindos ugs D en inglsA que puedn preerF wntenimientoF il progrm se tuliz y modi(D d vez que se neesrioD de modo que se umpln tods ls neesiddes de mio de sus usuriosF houmentinF isritur de ls diferentes fses del ilo de vid del softwreD esenilmente el nE lisisD diseo y odi(inD unidos mnules de usurio y de refereniD s omo norms pr el mntenimientoF vs dos primers fses onduen un diseo detlldo esrito en form de lgoritmoF hurnte l terer etp @odi(inA se implement el lgoritmo en un digo esrito en un lenguje de progrminD re)ejndo ls ides desrrollds en ls fses de nlisis y diseoF v fse de ompilin y ejeuin trdue y ejeut el progrmF in ls fses de veri(in y depurin el progrmdor us errores de ls etps nteriores y los eliminF gompror que mientrs ms tiempo se gste en l fse de nlisis y diseoD menos se gstr en l depurin del progrmF or ltimoD se dee relizr l doumentin del progrmF n lgoritmo es un mtodo pr resolver un prolem medinte un serie de psos preisosD de(nidos y (nitosF grterstis de un lgoritmoX preiso @indir el orden de relizin en d psoAD de(nido @si se sigue dos veesD otiene el mismo resultdo d vezAF (nito @tiene (nYun nmero determindo de psosAF

PP

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

PQ

n lgoritmo dee produir un resultdo en un tiempo (nitoF vos mtodos que utilizn lgoritmos se deE nominn mtodos lgortmiosD en oposiin los mtodos que implin lgn juiio o interpretin que se denominn mtodos heurstiosF vos mtodos lgortmios se pueden implementr en omputdorsY sin emrgoD los proesos heurstios no hn sido onvertidos filmente en ls omputdorsF in los ltimos os ls tnis de inteligeni rti(il hn heho posile l implementin del proeso heurstio en omputdorsF ijemplos de lgoritmos sonX instruiones pr montr en un iiletD her un reet de oinD otener el mximo omn divisor de dos nmerosD etF vos lgoritmos se pueden expresr por formuE lsD digrms de pujo o xE y pseudodigosF ist ltim representin es l ms utilizd en lengujes estruturdos omo gF

2.2. Diseo de programas.


hiseo de progrms xo existe un onjunto de regls pr esriir progrmsD sin emrgo hy psos omunes u tengo que herc enlisis del prolem gmo voy resolverloc hiseo del lgoritmo vo esrio usndo un lengF de progrmF godi(in gomprueo q gompilin est ien esrito re lo q tiene q her y lo he ijeuin y veri(in ienc gorregir errores hepurinc ensr ntes de odi(r hiseo del lgoritmoF vos errores grves no se godi(in detetn en ompiE linF wtodo de diseo pr mejorr l produtividd de un progrmF il progrm se divide en mdulos @prtes indtesA que relizn un ni tividd y que se odi(n de mner independiente in l etp de nlisis del proeso de progrmin se determin qu he el progrmF in l etp de diseo se determin omo he el progrm l tre soliitdF vos mtodos ms e(es pr el proeso de diseo se sn en el onoido por divide y venersF is deirD l resoluin de un prolem omplejo se reliz dividiendo el prolem en suprolems y ontinuin dividir estos suprolems en otros de nivel ms joD hst que pued ser implementd un soluin en l omputdorF iste mtodo se onoe tnimente omo diseo desendente @topEdownA o modulrF il proeso de romper el prolem en d etp y expresr d pso en form ms detlld se denomin re(nmiento suesivoF gd suprogrm es resuelto medinte un mdulo @suprogrmA que tiene un solo punto de entrd y un solo punto de slidF gulquier progrm ien disedo onst de un progrm prinipl @el mdulo de nivel ms ltoA que llm suprogrms @mdulos de nivel ms joA que su vez pueden llmr otros suprogrmsF vos progrms estruturdos de est form se die que tienen un diseo modulr y el mtodo de romper el progrm en mdulos ms pequeos se llm progrmin modulrF vos mdulos pueden ser plnedosD odi(dosD omprodos y depurdos independientemente @inluso por diferentes progrmdoresA y ontinuin ominrlos entre sF il proeso impli l ejeuin de los siguientes psos hst que el progrm se terminX IF rogrmr un mduloF PF gompror el mduloF QF i es neesrioD depurr el mduloF RF gominr el mdulo on los mdulos nterioresF il proeso que onvierte los resultdos del nlisis del prolem en un diseo modulr on re(nmientos suesivos que permitn un posterior trduin un lenguje se denomin diseo del lgoritmoF il diseo del lgoritmo es independiente del lenguje de progrmin en el que se vy odi(r posteriormenteF

2.3. Programacin modular.


v progrmin modulr es uno de los mtodos de diseo ms )exile y potentes pr mejorr l produE tividd de un progrmF in progrmin modulr el progrm se divide en mdulos @prtes independientesAD

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

PR

d un de ls ules ejeut un ni tividd o tre y se odi(n independientemente de otros mduE losF gd uno de estos mdulos se nliznD odi(n y ponen punto por seprdoF gd progrm ontiene un mdulo denomindo progrm prinipl que ontrol todo lo que suedeY se trns(ere el ontrol suE mdulos @posteriormente se denominrn suprogrmsAD de modo que ellos puedn ejeutr sus funionesY sin emrgoD d sumdulo devuelve el ontrol l mdulo prinipl undo se hy ompletdo su treF i l tre signd d sumdulo es demsido omplejD ste deer romperse en otros mdulos ms pequeosF il proeso suesivo de sudivisin de mdulos ontin hst que d mdulo teng solmente un tre espe( que ejeutrF ist tre puede ser entrdD slidD mnipulin de dtosD ontrol de otros mdulos o lgun ominin de stosF n mdulo puede trnsferir temporlmente el ontrol otro mduloY sin emrgoD d mdulo dee eventulmente devolver el ontrol l mdulo del ul se reie origiE nlmente el ontrolF vos mdulos son independientes en el sentido en que ningn mdulo puede tener eso direto ulquier otro mdulo exepto el mdulo l que llm y sus propios sumdulosF in emrgoD los resultdos produidos por un mdulo pueden ser utilizdos por ulquier otro mdulo undo se trns(er ellos el ontrolF hdo que los mdulos son independientesD diferentes progrmdores pueden trjr simultnemente en diferentes prtes del mismo progrmF isto reduir el tiempo del diseo del lgoritmo y posterior oE di(in del progrmF edemsD un mdulo se puede modi(r rdilmente sin fetr otros mdulosD inluso sin lterr su funin priniplF v desomposiin de un progrm en mdulos independientes ms simples se onoe tmin omo el mtodo de divide y veners @divide nd onquerAF e dise d mE dulo on independeni de los demsD y siguiendo un mtodo sendente o desendente se llegr hst l desomposiin (nl del prolem en mdulos en form jerrquiF puniones is un onjunto de sentenis que relizn un tre espe( y puede ser de(nido medinte HDIDFFFDn prmetrosF

2.4. Programacin estructurada


vos trminos progrmin modulrD progrmin desendente y progrmin estruturd se introduE jeron en l segund mitd de l dd de los sesent y menudo sus trminos se utilizn omo sinnimos unque no signi(n lo mismoF v progrmin modulr y desendente y se h exmindo nteriormenteF v progrmin estruturd signi( esriir un progrm de uerdo ls siguientes reglsX il progrm tiene un diseo modulrF vos mdulos son disedos de modo desendenteF gd mdulo se odi( utilizndo ls tres estruturs de ontrol sisX seueniF seleinF repetiinF i est fmilirizdo on lengujes omo fesgD slD pyex o gD l progrmin estruturd signiE ( tmin progrmin sin qyy @g no requiere el uso de l senteni qyyAF il trmino progrmin estruturd se re(ere un onjunto de tnis que hn ido evoluionndo desde los primeros trjos de idgr hijkstrF ists tnis umentn onsiderlemente l produtividd del progrm reduiendo en elevdo grdo el tiempo requerido pr esriirD veri(rD depurr y mntener los progrmsF v progrmE in estruturd utiliz un nmero limitdo de estruturs de ontrol que minimizn l omplejidd de los progrms yD por onsiguienteD reduen los erroresY he los progrms ms files de esriirD veri(rD leer y mntenerF vos progrms deen estr dotdos de un estruturF v progrmin estruturd es el onjunto de tnis que inorpornD reursos strtosD diseo desendente @topEdownAD estruturs sisF rogrmin estruturd signi( esriir un progrm de uerdo ls siguientes reglsX il progrm tiene un diseo modulr

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

PS

vos mdulos se disen de modo desendente gd mdulo se odi( utilizndo ls tres estruturs de progrmin sisX seueniD selein y repetiin v progrmin estruturd se uxili de los reursos strtos en lugr de los reursos onretos de que dispone un determindo lenguje de progrminF hesomponer un progrm en trminos de reursos strtosD segn hijkstrD onsiste en desomponer un determind in omplej en trminos de un nmero de iones ms simples pes de ejeutrls o que onstituyn instruiones de omputdors disponilesF il diseo desendente @topEdownA es el proeso medinte el ul un prolem se desompone en un serie de niveles o psos suesivos de re(nmiento @stepwiseAFv metodolog desendente onsiste en efetur un relin entre ls suesivs etps de estruturin de modo que se relionsen uns on otrs medinte entrds y slids de informinF is deirD se desompone el prolem en etps o estruturs jerrquisD de form que se puede onsiderr d estrutur desde dos puntos de vistX qu hec y mo lo hec

2.5. Teorema de la programacin estructurada: estructuras bsicas.


in myo de IWTTD fohm y topini demostrron que un progrm propio puede ser esrito utilizndo solmente tres tipos de estruturs de ontrolF seuenilesD seletivsD repetitivsF n progrm se de(ne omo propio si umple ls siguientes rterstisX osee un solo punto de entrd y uno de slid o (n pr ontrol del progrmF ixisten minos desde l entrd hst l slid que se pueden seguir y que psn por tods lus prtes del progrmF ods ls instruiones son ejeuthles y no existen ules in(nitos @sin (nAF v progrmin estruturd signi(X il progrm ompleto tiene un diseo modulrF vos mdulos se disen on metodolog desendente @puede herse tmin sendenteAF gd mdulo se odi( utilizndo ls tres estruturs de ontrol sisX seuenilesD seletivs y repetitivs @useni totl de sentenis qyyAF istruturin y modulridd son oneptos omplementrios @se solpnAF

2.6. Representacion graca de los algoritmos.


r representr un lgoritmo se dee utilizr lgn mtodo que permit independizr diho lgoritmo del lenguje de progrmin elegidoF illo permitir que un lgoritmo pued ser odi(do indistintmente en ulquier lengujeF r onseguir este ojetivo se preis que el lgoritmo se representdo gr( o numrimenteD de modo que ls suesivs iones no dependn de l sintxis de ningn lenguje de progrminD sino que l desripin pued servir filmente pr su trnsformin en un progrmD es deirD su odi(inF vos mtodos usules pr representr un lgoritmo sonX IF digrm de )ujo PF digrm xE @xssiEhneidermnA QF lenguje de espei(in de lgoritmosX pseudodigo RF lenguje espolD inglsFFF SF frmuls F il mtodo R no suele ser fil de trnsformr en progrmsF n desripin en espol nrrtivo no es stisftoriD y que es demsido miguF n frmulD sin emrgoD es uen sistem de representinF in emrgoD no es freuente que un lgoritmo pued ser expresdo por medio de un simple frmulF

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

PT

2.7. Diagramas de ujo


n digrm de )ujo @)owhrtAes un de ls tnis de representin de lgoritmos ms ntigu y l vez ms utilizdD unque su empleo h disminuido onsiderlementeD soro todoD desde l priin de lengujes de progrmin estruturdosF n digrm de )ujo es un digrm que utiliz los smolos @jsA estndr y que tiene los psos de lgoritmo esritos en ess js unids por )ehsD denominds lnes de)ujoD que indin l seueni en que se dee ejeutrF vos smolos estndr normlizdos por exs @revitur de emerin xtionl tndrs snstiE tuteA son muy vridosF in l pigur se represent un plntill de diujo tpi donde se ontemE pln l myor de los smolos utilizdos en el digrmY sin emrgoD los smolos ms utilizdos representnX vos higrms de )ujo se diujn generlmente usndo lgunos smolos estndresY sin emrgoD lgunos smolos espeiles pueden tmin ser desrrolldos undo sn requeridosF elgunos smolos estndresD que se requieren on freueni pr digrmr progrms de omputdor se muestrn ontinuinX

sniio o (n del progrm

sosD proesos o lnes de instruion de progrmF

yperiones de entrd y slid

om de desiines y mi(in

gonetor pr unir el )ujo otr prte del digrm

gint mgnti

hiso mgntio

gonetor de pgin

vnes de )ujo

enotin

hisplyD pr mostrr dtos

inv dtos l impresor

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

PU

il uso de )ehs signi( que l j no neesit ser esrit dejo de su predeesorF in emrgoD usr demsido de est )exiilidd ondue digrms de )ujo omplidos e ininteligilesF

2.8. Diagramas de nassi-scheiderman (N-S).


il digrm xE de xssi hneidermn Etmin onoido omo digrm de ghpin es omo un diE grm de )ujo en el que se omiten ls )ehs de unin y ls js son ontigusF vs iones suesivs se esrien en js suesivs yD omo en los digrms de )ujoD se pueden esriir diferentes iones en un jF n lgoritmo se represent on un retngulo en el que d nd es un in relizrX il digrm xE o tmin onoido omo digrm de ghpin es un tni de espei(in de lgoritmos que omin l desripin textulD propi del pseudodigoD on l representin gr( del digrm de )ujoF il digrm xE uent on un onjunto limitdo de smolos pr representr los psos del lgoritmoD por ello se poy en expresiones del lenguje nturlY sin emrgoD ddo que el lenguje nturl es muy extenso y se prest pr l migeddD solo se utiliz un onjunto de plrsD ls que se denomin plrs reservdsF vs plrs reservds ms utilizds sonX sniio pin veer isriir wientrs epit rst r snrementr herementr rer punin intero el grter gden vgio etornr vos smolos utilizdos en el digrm de ghpin son orresponden d tipo de estruturF hdo que se tienen tres tipos de estrutursD se utilizn tres smolosF isto he que los proesos del lgoritmo sen ms files de representr y de interpretrF on quells que se ejeutn un despus de otrF e tienen tres tipos de instruiones seuenilesX l delrin de vrilesD signinD instruin veer e instruin isriirF v myor de lgoritmos tn sore un onjunto de dtos suministrdos por el usurio y se esper que prtir de dihos vlores y desrrollndo los proesos progrmdos se genere informin de slid o resultdosF helrin de vriles eniendo en uent l omptiilidd on l myor de los lengujesD se reomiend que desde el diseo del progrm se utilie un form determind pr l delrin de ls vrilesF ist onsiste en esriir el tipo de dtos y l list de identi(dores que se tendrn de diho tipoD seprndo d identi(dor por medio de oms @DAF r mejorr l lridd de l delrin se puede olor dos puntos @XA pr seprr el tipo de dtos de l list de identi(doresF ijemploX interoX edd elX estturD pesoD sueldo gdenX nomreD direin eunque lgunos lengujes de progrmin permiten delrr ls vriles en el momento en que se ls neesitD es onsejleD en fvor de los uenos hitos de progrminD siempre delrr ls vriles ntes de utilizrls y el sitio ms deudo es el iniio del progrm o de l funinF esignin esignr un vlor un vrile equivle deir que se gurd diho vlor en l posiin de memori reservdo pr l vrile en meninF or lo tntoD pr poder relizr un signin es neesrio primero her delrdo un vrileD on lo ul se reserv un espio de memori su(iente pr gurdr un dto del tipo espei(doF n expresin de signin tiene l formX rile a expresin honde l expresin puede estr formd por un vlorD por un onjunto de vlores y operdores o por un funinF ijemplosX idd a IH isttur a IFVH

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

PV

esultdo a PBQ honde edd y resultdo son vriles de tipo entero y esttur de tipo rel que se supone delrds previmenteF n signin tiene tres prtesD un vrileD el signo igul y l expresin uyo vlor se sign l vrileF v vrile siempre v l izquierd del igulD mientrs que l expresin siempre estr l derehF ijemplosX interoX D a IH aBPCV in este ejemploD l vrile ontendr el vlor PVF snstruin veer v instruin vii se utiliz pr envir informin desde un dispositivo de entrd de dtos hi l memoriF in l memori los dtos son uidos medinte el identi(dor @nomre de vrileA utilizdo omo omplemento de l instruin viiF in digrm xE l instruin de entrd se represent sX veer `list de identi(dores de vrilesb ijemploX veer D honde 44 y 44 son ls vriles que reiirn los vlores y que deen herse delrdo previmenteF snstruin isriir ist instruin permite envir dtos desde l memori hi un dispositivo de slid omo l pntll o l impresorF v informin que se env puede ser onstnte o tmin el ontenido de vrilesF isriir `list de onstntes y vrilesb ijemploX isriir D gundo se esrien ms de un vrile es neesrio seprrls on oms @DA y los mensjes se esrien entre omills doles 4 4F i un vrile es esrit entre omills se mostrr el identi(dor y no el ontenidoF ijemplosX IF hiser un lgoritmo pr lulr el re y el permetro de un retngulo he(niin del prolem glulr re y permetro de un retngulo enlisis del prolem r desrrollr este prolem es neesrio onoer ls frmuls pr otener tnto el re omo el permetro de un retnguloF e a se y h a lturD ls frmuls utilizr sonX ere a B h ermetro a P B @ C hA htos de entrdX y h @se y lturA htos de slidX re y permetro roesosX re a B h ermetro a P B @ C hA hiseo de l soluin sniio interoX D hD D p veer D h aBh p a P @ C hA isriir 4reX4D isriir 4permetroX4D p pin lgoritmo PF n mestro dese ser que porentje de homres y que porentje de mujeres hy en un grupo de estudintesF he(niin del prolem

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

PW

glulr porentje de homres y mujeres en un grupo enlisis del prolem htos tener en uentX xmero homres xmero mujeres otl estudintes orentje homres orentje mujeres htos de entrdX nmero homresD nmero mujeres htos slidX porentje homresD porentje mujeres roesosX tot estudintes a nmF homres C nmF wujeres orFhomres a nmF romres G tot estudintesBIHH orFhomres a nmF mujeres G tot estudintesBIHH hiseo de l soluin sniio interoX nummD numhD totest elX porhD porm veer nummD numh totest a numm C numh porm a numm G totest B IHH porh a numh G totest B IHH isriir 4porentje mujeresX4D porm isriir 4porentje homresX4D porh pin lgoritmo QF n profesor prepr tres uestionrios pr un evluin (nlX eD f y gF e se que se trd S minutos en revisr el uestionrio eD V en revisr el uestionrio f y T en el gF v ntidd de exmenes de d tipo se entrn por teldoF gunts hors y untos minutos se trdr en revisr tods ls evluionesc he(niin del prolem glulr el tiempoD en hors y minutosD requerido pr li(r exmenesF enlisis del prolem e tienen tres tipos de exmen eD fD g y el tiempo en minutos requerido pr d tipo sonX eaS faV gaT il tiempo en minutos dee ser onvertido horsD I hor a TH minutos r psr de minutos hors se reliz operin divisin enterD pr onoer los minutos exedentes se utiliz l operin mduloF htos de entrdX nmero exmenes tipo eD f y g htos de slidX hors y minutos requeridos roesosX otl e a nmero tipo e B S otl f a nmero tipo f B V otl g a nmero tipo g B T iempo totl a totl e C totl f C totl g rors a tiempo totl G TH winutos a tiempo totl wod TH hiseo de l soluin sniio interoX numD numD numD totDtotD totD totminD horsD minutos veer numD numD num tot a num B S tot a num B V tot a num B T

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

QH

totmin a tot C tot C tot hors a totmin G TH minutos a totmin wod TH isriir 4trdrX4DhorsD 4hors y4D minutosD 4minutos4 pin lgoritmo QF istruturs seueniles vs estruturs de deisin o tmin llmds de selein permiten que el lgoritmo tome deisiones y ejeute u omit lgunos proesos dependiendo del umplimiento de un ondiinF e pueden mnejr tres tipos de deisionesX simpleD dole y mltipleF heisin simple y dole n deisin es simpleD undo solo se tiene determindo los psos seguir si el resultdo de l ondiin es verdderoD mientrs que si es flsoD l ejeuin del lgoritmo ontin despus de l estrutur ondiionlF n deisin undo se tiene un urso de in pr el so que el resultdo de l omprin se verddero y otro pr undo se flsoF in digrm de ghpin el smolo pr representr un deisin es el siguienteX r ver el gr(o seleione l opin 4hesrgr4 del men superior ysrvese que en l prte inferior se tienen los udros que indin dos posiiliddes de inD el onjunto de instruiones I o el onjunto de instruiones PD solo uno de los dosF i se trtse de un deisin simpleD solo se tendr instruiones en ls js que se uin dejo de l lusul iD mientrs que ls que estn jo xo estrn vsF ijemplosX IF e dese un lgoritmo pr otener el vlor soluto de un nmero he(niin del prolem inontrr el vlor soluto de un nmero enlisis del prolem r enontrr el vlor soluto del nmero es neesrio reordr que pr los enteros positivos el vlor es el mismoD mientrs que pr los enteros negtivos es neesrio mirlos de signoF htos de entrdX nmero htos de slidX vlor soluto roesoX nmero a nmero B @EIA hiseo de l soluin PF hdos dos nmeros ul es myorc y ul es menorc he(niin del prolem sdenti(r el myor y menor de dos nmeros enlisis del prolem htos de entrdX numID numP htos slidX myorD menor roesoX omprin hiseo de l soluin QF n empres dese lulr los nuevos slrios de sus empledos de l siguiente formX quienes gnn hst 6 SHHFHHH tendrn un inremento del IH 7D quienes devengn ms de 6 SHHFHHH y hst VHHFHHH reiirn un umento del V 7 y los dems del S 7F gul ser el vlor del umentoc gul ser el vlor del nuevo sueldoc he(niin del prolem glulr el vlor inrementr y el vlor del nuevo sueldo de los empledosF enlisis del prolem il porentje de inremento en el sueldo depende del vlor del sueldo tulD los sueldos ms jos tienen un myor inrementoX IH 7 pr sueldo `a 6 SHHFHHH V 7 pr 6 SHHFHHH ` sueldo `a 6 VHHFHHH S 7 pr sueldo b VHHFHHH htos de entrdX sueldo htos de slidX umentoD nuevo sueldo roesoX umento a sueldo B porentje donde porentje a SD V o IH 7

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

QI

nuevo sueldo a sueldo C umento hiseo de l soluin heisin mltiple wuhs deisiones deen tomrseD no solo entre dos lterntivsD sino de un onjunto myorF istos sos ien pueden soluionrse utilizndo ondiionles doles niddosY sin emrgoD en fvor de l lridd del lgoritmo y l filidd pr el progrmdorD es mejor utilizr un estrutur de deisin mltipleD l ul es fil de llevr un lenguje de progrminD y que stos inluyen lgun instruin on este (nF v deisin mltiple determin el vlor de un vrile y dependiendo de ste sigue un urso de inF is importnte tener en uent que solo se veri( l ondiin de iguldd entre l vrile y l onstnteF in digrm xE l estrutur de selein mltiple tiene l formX ijemploX un distriuidor de motoilets tiene un promoin de (n de o que onsiste en los siguienteF vs motos mr ryxhe tienen un desuento del S 7D ls de mr mh del V 7 y ls uzuki el IH 7D ls de otrs mrs el P 7 he(niin del prolem glulr el vlor del desuento y el vlor pgr por l motoiletF enlisis del prolem orentje desuento a S 7 pr motos rond orentje desuento a V 7 pr motos mh orentje desuento a IH 7 pr motos uzuki orentje desuento a P 7 pr motos otrs mrs htos de entrdX mrD vlor htos de slidX desuentoD vlor pgr roesoX desuento a vlor B porentje lor neto a vlor E desuento hiseo de l soluin RF istruturs de deisin SF istruturs de repetiin in l soluin de lgunos prolems es neesrio ejeutr repetids vees un instruin o un onjunto de instruionesF in lgunos sosD el nmero de repetiiones se onoe on nterioriddD mientrs que en otrs depende de lulos o estdos de vriles que se dn dentro de l soluin del prolemF r soluionr este tipo de prolems se utiliz un tipo de estruturs ls que se onoen omo estruturs de repetiinD ules o ilosF n ilo onsiste en un grupo de iones que se ejeutn repetids vees dependiendo del umplimiento de un ondiinF gilo wientrs iste ilo onsiste en un onjunto de instruiones que se repiten mientrs se umpl un ondiinF he igul mner que en los ondiionlesD l ondiin es evlud y retorn un vlor lgioD que puede ser verddero o flsoF in el so del ilo mientrs ls instruiones ontenids en l estrutur de repetiin se ejeutrn solmente si l evlur l ondiin se gener un vlor verdderoY es deirD si l ondiin se umpleY en so ontrrioD se ejeutr l instruin que pree despus de pin mientrsF e difereni de otros ilosD el ilo mientrs omienz evlundo l expresin ondiionlD si el resultdo es verddero se ejeutrn ls instruiones que estn entre el mientrs y el (n mientrsD l enontrrse l lne (n mientrs se volver evlur l ondiinD si se umple se ejeutrn nuevmente ls instruiones y s suesivmente hst que l ondiin deje de umplirseD en uyo soD el ontrol del progrm ps l lne que pree despus de (n mientrsF i en l primer psd por el ilo mientrs l ondiin no se umple ls instruiones que estn dentro del ilo no se ejeutrn ni un sol vezF in digrm de ghpin @xEAD est estrutur tiene l presentinX ijemplosX IF n lgoritmo pr mostrr los nmeros del I l IHF he(niin del prolem wostrr listdo de nmeros de I IHF enlisis del prolem

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

QP

htos de entrdX ninguno htos de slidX nmero roesoX ninguno hiseo de l soluin iste es un lgoritmo muy trivil pero permite revisr l pliin de l estrutur de repetiin wientrsF vo primero tener en uent es l delrin e iniilizin de l vrileX num a IF in este so no solo se est delrndo un vrile de tipo enteroD sino tmin se est signndo un vlor iniilD que ser el primer nmero mostrdoF v ondiin o expresin relionl on l ul se implement el ilo es num `a IHD ddo que num inii en ID l primer vez que se enuentr l instruin mientrsD l expresin es verdderD por tnto se ejeutn ls instruiones que preen l interior del iloF hespus de her mostrdo el ontenido de l vrile numD ste miD se inrement en IF PF veer n nmeros y enontrr el vlor promedioD el myor y el menor he(niin del prolem inontrr el promedioD el myor y el menor de vrios nmeros enlisis del prolem r soluionr este prolemD lo primero que hy que plnter es mo se sr undo terminr l letur de dtosD y que no se espei( l ntidd de nmeros que sern ingresdos y en el plntemiento del prolem no se d ningun ondiin que permit ser undo terminr el iloF iste tipo de prolems es muy omnF ry dos forms de ordr este ejeriioD l primer onsiste en preguntr l usurio on untos nmeros dese trjr y gurdr diho vlor en un vrile que se utilizr pr estleer el iloF v segund onsiste en preguntr despus de leer d dtoD si se dese ingresr otroF in este ejeriio se utilizr l primer estrtegiF htos de entrdX ntidd de nmerosD nmero htos de slidX promedioD myor y menor roesosX sum a sum C nmero promedio a sum G ntidd de nmeros hiseo de l soluin QF v serie pioni omienz on los nmerosX HD ID ID PD QD SD VD IQD PID FFF e requiere un lgoritmo pr generr los primeros IH nmerosF he(niin del prolem qenerr los IH primeros nmeros de l serie (oni enlisis del prolem v serie (oni se gener prtir de dos vlores iniiles que son el H y el ID que l sumrse dn omo resultdo IF il siguiente nmero se otiene sumndo el ltimo nmero otenido on el nteriorD en este so I C I a PD luego ser P C I a Q y s suesivmenteF htos de entrdX ninguno htos de slidX serie (oni roesosX aH aI faC hiseo de l soluin gilo r iste iloD l igul que los demsD permite ejeutr repetids vees un instruin o un grupo de ellsD pero difereni de otrs instruiones de repetiinD st mnej el vlor iniilD el vlor de inremento o deremento y el vlor (nl de l vrile de ontrol omo prte de l instruinF gundo l ejeutrse un lgoritmo se enuentr un instruin pr l vrile de ontrol @ontdorA tom el vlor iniilD se veri( que el vlor iniil no sorepse el vlor (nl y luego se ejeutn ls instruiones del iloF el enontrr l instruin (n prD se produe el inremento y se vuelve veri(r que l vrile de ontrol no hy superdo el lmite dmitidoD y se vuelven ejeutr ls instruiones que estn dentro del iloD y s suesivmente tnts vees omo se neesrio hst que se supere el vlor (nl estleidoF

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

QQ

il ilo pr termin en el momento en que l vrile de ontrol @ontdorA soreps el vlor (nlY es deirD que l iguldd est permitid y ls instruiones se ejeutn undo el ontdor es igul l vlor (nlF iste ilo puede presentrse de tres mnersX l primer es l ms omnD undo se produe un inremento de I en d iterinD en uyo so no es neesrio esriir explitmenteF in digrm xEX il segundo so de utilizin del ilo r es undo el inremento es diferente de ID en uyo so se esriir l plr inrementr seguid del vlor sumr en d iterinF in terer lugrD el ilo pr no siempre se inrement desde un vlor iniil hst un vlor myorD puede sueder que se requier que se disminuy desde un vlor iniil ltoD hst un vlor menorF in este so ser su(iente on esriir derementr en vez de inrementrF ijemplosX IF smprimir los nmeros del I l IH he(niin del prolem smprimir nmeros del I l IH enlisis del prolem htos de entrdX ninguno htos de slidX nmeros @I FFF IHA roesoX ninguno hiseo de l soluin PF smprimir los nmeros del S l SH on intervlos de SF he(niin del prolem smprimir nmeros de ino en ino enlisis del prolem htos de entrdX ninguno htos de slidX nmeros roesoX ninguno hiseo de l soluin QF hdo un nmero n mostrr los nmeros menores o igul steD en orden desendente he(niin del prolem smprimir nmeros en orden desendente enlisis del prolem htos de entrdX nmero htos de slidX nmeros roesoX ninguno hiseo de l soluin RF un lgoritmo que lee IH nmeros y muestr l sumtoriD el promedioD el nmero myor y el nmero menorF he(niin del prolem veer IH nmeros y sumrlosD determinr el promedioD el nmero menor y el nmero myorF enlisis del prolem htos de entrdX nmero htos de slidX sumtoriD promedioD nmero menor y nmero myor roesoX sum a sum C nmero promedio a sum G IH hiseo de l soluin v utilizin deud e ingenios de ls estruturs presentds permite el diseo de lgoritmos de eptle nivel de omplejiddD omo se h mostrdo en los ejemplosF ysrvese que d estrutur permite inluir ls nterioresD en el ltimo ejemplo se h utilizdo todos los oneptos presentdos en este doumentoF vos digrms xE permiten representr de form senill los psos que onformn un lgoritmo y por su ominin de texto e imgen son muy files de interpretrY no ostnteD es reomendle que quien se inii en el diseo de lgoritmos onoz otrs tnis omo el pseudodigo y el digrm de )ujoF

CAPTULO 2.

PROGRAMACION ESTRUCTURADA.

QR

pinlmenteD es menester notr que el diseo de lgoritmos no solo requiere onoer metodologs de representinD sino tmin desrrollr el pensmiento lgio pr generr soluiones y esto se onsigue medinte el desrrollo de ejeriiosF

Captulo 3

Tipos de datos fundamentales. Variables


il gD omo ulquier otro lenguje de progrminD tiene posiilidd de trjr on dtos de distint nturlezX texto formdo por rteres lfnumriosD nmeros enterosD nmeros reles on prte enter y prte frionriD etF edemsD lgunos de estos tipos de dtos dmiten distintos nmeros de ifrs @rngo yGo preisinAD posiilidd de ser slo positivos o de ser positivos y negtivosD etF in este prtdo se vern los tipos fundmentles de dtos dmitidos por el gF ws delnte se ver que hy otros tipos de dtosD derivdos de los fundmentlesF vos tipos de dtos fundmentles del g sonX htos enteros hr

signed hr unsigned hr
int

signed int signed short int signed long int unsigned int unsigned short int unsigned long int
htos reles )ot doule long doule v plr hr he refereni que se trt de un rter @un letr mysul o minsulD un dgitoD un rter espeilD FFFAF v plr int indi que se trt de un nmero enteroD mientrs que )ot se re(ere un nmero rel @tmin llmdo de punto o om )otnteAF vos nmeros enteros pueden ser positivos o negtivos @signedAD o ien esenilmente no negtivos @unsignedAY los rteres tienen un trtmiento muy similr los enteros y dmiten estos mismos uli(doresF in los dtos enterosD ls plrs short y long hen refereni l nmero de ifrs o rngo de dihos nmerosF in los dtos reles ls plrs doule y long puntn en est mism direinD unque on un signi(do ligermente diferenteD omo ms delnte se verF ist nomenltur puede simpli(rseX ls plrs signed e int son ls opiones por defeto pr los nmeros enteros y pueden omitirseF eurdese que en g es neesrio delrr tods ls vriles que se vyn utilizrF n vrile no delrd produe un mensje de error en l ompilinF gundo un vrile es delrd se le reserv QS

CAPTULO 3.

TIPOS DE DATOS FUNDAMENTALES. VARIABLES

QT

memori de uerdo on el tipo inluido en l delrinF is posile iniilizrD dr un vlor iniilD ls vriles en el momento de l delrinY y se ver que en ierts osiones el ompildor d un vlor iniil por defetoD mientrs que en otros sos no se reliz est iniilizin y l memori soid on l vrile orrespondiente ontiene sur informti @ominiones sin sentido de unos y erosD resultdo de operiones nteriores on es zon de l memoriD pr otros (nesAF euerd que en g tod vrile usd en un progrm dee delrrse ntes de ser usdF helrr l vrile onsiste en drle un nomre @identi(dorA y signrle un tipoF

3.1. Caracteres (tipo char).


vs vriles rter @tipo hrA ontienen un nio rter y se lmenn en un yte de memori @V itsAF in un it se pueden lmenr dos vlores @H y IAY on dos its se pueden lmenr PP a R vlores @HHD HID IHD II en inrioY HD I PD Q en deimlAF gon V its se podrn lmenr PV a PST vlores diferentes @normlmente entre H y PSSY on iertos ompildores entre EIPV y IPUAF v delrin de vriles tipo rter puede tener l formX hr nomreY hr nomreID nomrePD nomreQY e puede delrr ms de un vrile de un tipo determindo en un sol senteniF e puede tmin iniilizr l vrile en l delrinF or ejemploD pr de(nir l vrile rter letr y signrle el vlor D se puede esriirX hr letr a 99Y e prtir de ese momento qued de(nid l vrile letr on el vlor orrespondiente l letr F eurdese que el vlor 99 utilizdo pr iniilizr l vrile letr es un onstnte rterF in reliddD letr se gurd en un solo yte omo un nmero enteroD el orrespondiente l letr en el digo egssD que se muestr en l l PFQ pr los rteres estndr @existe un digo egss extendido que utiliz los PST vlores y que ontiene rteres espeiles y rteres espe(os de los lfetos de diversos psesD omo por ejemplo ls voles entuds y l letr pr el stellnoAF olviendo l ejemplo de l vrile letrD su ontenido puede ser vrido undo se desee por medio de un senteni que le signe otro vlorD por ejemploX letr a 9z9Y min puede utilizrse un vrile hr pr dr vlor otr vrile de tipo hrX rter a letrY GG ehor rter es igul 9z9 gomo un vrile tipo hr es un nmero entero pequeo @entre H y PSSAD se puede utilizr el ontenido de un vrile hr de l mism form que se utiliz un enteroD por lo que estn permitids operiones omoX letr a letr C IY letrminusul a letrmyusul C @99 E 9e9AY in el primer ejemploD si el ontenido de letr er un D l inrementrse en un unidd ps ontener un F il segundo ejemplo es interesnteX puesto que l difereni numri entre ls letrs minsuls y mysuls es siempre l mism @segn el digo egssAD l segund senteni ps un letr mysul l orrespondiente letr minsul sumndole dih difereni numriF eurdese pr onluir que ls vriles tipo hr son y se lmenn omo nmeros enteros pequeosF se ver ms delnte que se pueden esriir omo rteres o omo nmeros segn que formto de onversin se utilie en l llmd l funin de esriturF

CAPTULO 3.

TIPOS DE DATOS FUNDAMENTALES. VARIABLES

QU

3.2. Nmeros enteros (tipo int)


he ordinrio un vrile tipo int se lmen en P ytes @IT itsAD unque lgunos ompildores utilizn R ytes @QP itsAF il exs g no tiene esto ompletmente normlizdo y existen diferenis entre unos ompildores y otrosF vos ompildores de wirosoft pr gs utilizn P ytesF gon IT its se pueden lmenr PIT a TSSQT nmeros enteros diferentesX de H l TSSQS pr vriles sin signoD y de EQPUTV l QPUTU pr vriles on signo @que pueden ser positivs y negtivsAD que es l opin por defetoF iste es el rngo de ls vriles tipo intF n vrile enter @tipo intA se delrD o se delr y se iniiliz en l formX unsigned int numeroY int not a IHY in este so l vrile numero podr estr entre H y TSSQSD mientrs que not deer estr omprendid entre EQPUTV l QPUTUF gundo un vrile int se le sign en tiempo de ejeuin un vlor que qued fuer del rngo permitido @situin de over)ow o vlor exesivoAD se produe un error en el resultdo de onseuenis tnto ms imprevisiles unto que de ordinrio el progrm no vis l usurio de dih irunstniF gundo el horro de memori es muy importnte puede segurrse que el omputdor utiliz P ytes pr d entero delrndolo en un de ls forms siguientesX short numeroY short int numeroY gomo se h diho ntesD exs g no olig que un vrile int oupe P ytesD pero delrndol omo short o short int s que neesitr slo P ytes @l menos en los gsAF

3.3. Nmeros enteros (tipo long)


ixiste l posiilidd de utilizr enteros on un rngo myor si se espei( omo tipo long en su delrE inX long int numerogrndeY oD y que l plr lve int puede omitirse en este soD long numerogrndeY il rngo de un entero long puede vrir segn el omputdor o el ompildor que se utilieD pero de ordinrio se utilizn R ytes @QP itsA pr lmenrlosD por lo que se pueden representr PQP a RFPWRFWTUFPWT nmeros enteros diferentesF i se utilizn nmeros on signoD podrn representrse nmeros entre EPFIRUFRVQFTRV y PFIRUFRVQFTRUF min se pueden delrr enteros long que sen siempre positivos on l plr unsignedX unsigned long numeropositivomuygrndeY in lgunos omputdores un vrile int oup P ytes @oinidiendo on shortA y en otros R ytes @oiniE diendo on longAF vo que grntiz el exs g es que el rngo de int no es nun menor que el de short ni myor que el de longF

3.4. Nmeros reales (tipo oat)


in muhs pliiones hen flt vriles relesD pes de representr mgnitudes que ontengn un prte enter y un prte frionri o deimlF ists vriles se llmn tmin de punto )otnteF he ordinrioD en se IH y on notin ient(D ests vriles se representn por medio de l mntisD que es un nmero myor o igul que HFI y menor que IFHD y un exponente que represent l poteni de IH por l que hy que multiplir l mntis pr otener el nmero onsiderdoF or ejemploD se represent omo HFQIRISWPTSR IHF nto l mntis omo el exponente pueden ser positivos y negtivosF

CAPTULO 3.

TIPOS DE DATOS FUNDAMENTALES. VARIABLES

QV

vos omputdores trjn en se PF or eso un nmero de tipo )ot se lmen en R ytes @QP itsAD utilizndo PR its pr l mntis @I pr el signo y PQ pr el vlorA y V its pr el exponente @I pr el signo y U pr el vlorAF is interesnte ver qu lse de nmeros de punto )otnte pueden representrse de est formF in este so hy que distinguir el rngo de l preisinF v preisin he refereni l nmero de ifrs on ls que se represent l mntisX on PQ its el nmero ms grnde que se puede representr esD

223 = 8,388,608
lo ul quiere deir que se pueden representr todos los nmeros deimles de T ifrs y l myor prte !unque no todos! de los de U ifrs @por ejemploD el nmero WFPIQFRST no se puede representr on PQ itsAF or eso se die que ls vriles tipo )ot tienen entre T y U ifrs deimles equivlentes de preisinF espeto l exponente de dos por el que hy que multiplir l mntis en se PD on U its el nmero ms grnde que se puede representr es IPUF il rngo vendr de(nido por l poteniD

2127 = 1,7014 1038


lo ul indi el nmero ms grnde representle de est formF il nmero ms pequeo en vlor soluto ser del orden de

2128 = 2,9385 1039


vs vriles tipo )ot se delrn de l formX )ot numerorelY vs vriles tipo )ot pueden ser iniilizds en el momento de l delrinD de form nlog ls vriles tipo intF

3.5. Nmeros reales (tipo double)


vs vriles tipo )ot tienen un rngo y !sore todo! un preisin muy limitdD insu(iente pr l myor prte de los lulos tnios y ient(osF iste prolem se soluion on el tipo douleD que utiliz V ytes @TR itsA pr lmenr un vrileF e utilizn SQ its pr l mntis @I pr el signo y SP pr el vlorA y II pr el exponente @I pr el signo y IH pr el vlorAF v preisin es en este soD

252 = 4,503,599,627,370,496
lo ul represent entre IS y IT ifrs deimles equivlentesF gon respeto l rngoD on un exponente de IH its el nmero ms grnde que se puede representr ser del orden de P elevdo P elevdo IH @que es IHPRAX

21024 = 1,7977 10308


vs vriles tipo doule se delrn de form nlog ls nterioresX doule relgrndeY or ltimoD existe l posiilidd de delrr un vrile omo long douleD unque el exs g no grntiz un rngo y un preisin myores que ls de douleF iso depende del ompildor y del tipo de omputdorF ists vriles se delrn en l formX long doule relperoquemuygrndeY uyo rngo y preisin no est normlizdoF vos ompildores de wirosoft pr gs utilizn IH ytes @TR its pr l mntis y IT pr el exponenteAF

CAPTULO 3.

TIPOS DE DATOS FUNDAMENTALES. VARIABLES

QW

3.6. Duracin y visibilidad de las variables: Modos de almacenamiento.


il tipo de un vrile se re(ere l nturlez de l informin que ontiene @y se hn visto los tipos hrD intD longD )otD douleD etFAF il modo de lmenmiento @storge lssA es otr rtersti de ls vriles de g que determin undo se re un vrileD undo dej de existir y desde dnde se puede eder ellD es deirD desde dnde es visileF in g existen R modos de lmenmiento fundmentlesX utoD externD stti y registerF eguidmente se exponen ls rterstis de d uno de estos modosF IF uto @utomtioAF is l opin por defeto pr ls vriles que se delrn dentro de un loque {FFF}D inluido el loque que ontiene el digo de ls funionesF in g l delrin dee estr siempre l omienzo del loqueF in gCC l delrin puede estr en ulquier lugr y hy utores que onsejn ponerl justo ntes del primer uso de l vrileF xo es neesrio poner l plr utoF gd vrile uto es red l omenzr ejeutrse el loque y dej de existir undo el loque se termin de ejeutrF gd vez que se ejeut el loqueD ls vriles uto se ren y se destruyen de nuevoF vs vriles uto son vriles lolesD es deirD slo son visiles en el loque en el que estn de(nids y en otros loques niddosQ en lD unque pueden ser oultds por un nuev delrin de un nuev vrile on el mismo nomre en un loque niddoF xo son iniilizds por defetoD y ntes de que el progrm les signe un vlorD pueden ontener sur informti @onjuntos letorios de unos y erosD onseueni de un uso nterior de es zon de l memoriAF PF externF on vriles glolesD que se de(nen fuer de ulquier loque o funinD por ejemplo ntes de de(nir l funin min@AF ists vriles existen durnte tod l ejeuin del progrmF vs vriles extern son visiles por tods ls funiones que estn entre l de(niin y el (n del (heroF r verls desde otrs funiones de(nids nteriormente o desde otros (herosD deen ser delrds en ellos omo vriles externF or defetoD son iniilizds eroF n vrile extern es de(nid o red @un vrile se re en el momento en el que se le reserv memori y se le sign un vlorA un sol vezD pero puede ser delrd @es deirD reonoid pr poder ser utilizdA vris veesD on ojeto de herl esile desde diverss funiones o (herosF min ests vriles pueden oultrse medinte l delrin de otr vrile on el mismo nomre en el interior de un loqueF v vriles extern permiten trnsmitir vlores entre distints funionesD pero st es un prti onsiderd omo peligrosF QF sttiF gundo ierts vriles son delrds omo stti dentro de un loqueD ests vriles onE servn su vlor entre distints ejeuiones de ese loqueF hiho de otr formD ls vriles stti se delrn dentro de un loque omo ls utoD pero permneen en memori durnte tod l ejeuin del progrm omo ls externF gundo se llm vris vees suesivs un funin @o se ejeut vris vees un loqueA que tiene delrds vriles sttiD los vlores de dihs vriles se onservn entre dihs llmdsF v iniilizin slo se reliz l primer vezF or defetoD son iniilizds eroF vs vriles de(nids omo stti extern son visiles slo pr ls funiones y loques omprendidos desde su de(niin hst el (n del (heroF xo son visiles desde otrs funiones ni unque se delren omo externF st es un form de restringir l visiilidd de ls vrilesF or defetoD y por lo que respet su visiiliddD ls funiones tienen modo externF n funin puede tmin ser de(nid omo sttiD y entones slo es visile pr ls funiones que estn de(nids despus de dih funin y en el mismo (heroF gon estos modos se puede ontrolr l visiilidd de un funinD es deirD desde qu otrs funiones puede ser llmdF RF registerF iste modo es un reomendin pr el ompildorD on ojeto de que !si es posile! ierts vriles sen lmends en los registros de l g y los lulos on ells sen ms rpidosF xo existen los modos uto y register pr ls funionesF

CAPTULO 3.

TIPOS DE DATOS FUNDAMENTALES. VARIABLES

RH

3.7. Conversiones de tipo implcitas y explcitas(casting)


ws delnte se omentrn ls onversiones implits de tipo que tienen lugr undo en un expresin se mezln vriles de distintos tiposF or ejemploD pr poder sumr dos vriles he flt que ms sen del mismo tipoF i un es int y otr )otD l primer se onvierte )ot @es deirD l vrile del tipo de menor rngo se onvierte l tipo de myor rngoAD ntes de relizr l operinF e est onversin utomti e implit de tipo @el progrmdor no neesit intervenirD unque s onoer sus reglsAD se le denomin promoinD pues l vrile de menor rngo es promoiond l rngo de l otrF es puesD undo dos tipos diferentes de onstntes yGo vriles preen en un mism expresin relionds por un operdorD el ompildor onvierte los dos operndos l mismo tipo de uerdo on los rngosD que de myor menor se ordenn del siguiente modoX long doule b doule b )ot b unsigned long b long b unsigned int b int b hr ytr lse de onversin implit tiene lugr undo el resultdo de un expresin es signdo un vrileD pues diho resultdo se onvierte l tipo de l vrile @en este soD st puede ser de menor rngo que l expresinD por lo que est onversin puede perder informin y ser peligrosAF or ejemploD si i y j son vriles enters y x es douleD x a iBj ! j C IY in g existe tmin l posiilidd de relizr onversiones explits de tipo @llmds stingD en l litertur inglesAF il sting es pues un onversin de tipoD forzd por el progrmdorF r ello st preeder l onstnteD vrile o expresin que se dese onvertir por el tipo l que se dese onvertirD enerrdo entre prntesisF in el siguiente ejemploD k a @intA IFU C @intA msY l vrile ms es onvertid tipo intD y l onstnte IFU @que es de tipo douleA tminF il sting se pli on freueni los vlores de retorno de ls funionesF

Captulo 4

Constantes
e entiende por onstntes quel tipo de informin numri o lfnumri que no puede mir ms que on un nuev ompilin del progrmF gomo y se h diho nteriormenteD en el digo de un progrm en g pueden preer diversos tipos de onstntes que se vn explir ontinuinF vs onstntes se de(nen on l diretiv 5de(neF esiX 5de(ne gyxexi vlor gd line 5de(ne solo puede ontener el vlor de un onstnteF yserv que no hy operdor de signion entre el nomre de l onstnte y su vlor y o que l line no on punto y omF is prole que omets ms de un vez el error de esriir el operdor de signion o el punto y omF xo es oligtorio que el nomre de l onstnte se esri en mysulsD pero s un onvenio u % mplimente doptdoF

4.1. Constantes numricas


4.1.1. Constantes enteras.
n onstnte enter deiml est formd por un seueni de dgitos del H l WD onstituyendo un nmero enteroF vs onstntes enters deimles estn sujets ls misms restriiones de rngo que ls vriles tipo int y longD pudiendo tmin ser unsignedF il tipo de un onstnte se puede determinr utomtimente segn su mgnitudD o de modo explito postponiendo iertos rteresD omo en los ejemplos que siguenX PQRVR onstnte tipo int RSVIS onstnte tipo long @es myor que QPUTUA PSQu PSQ onstnte tipo unsigned int UQWl UQWv onstnte tipo long SVQul SVQv onstnte tipo unsigned long in g se pueden de(nir tmin onstntes enters otlesD esto esD expresds en se V on dgitos del H l UF e onsider que un onstnte est expresd en se V si el primer dgito por l izquierd es un ero @HAF enlogmenteD un seueni de dgitos @del H l WA y de letrs @eD fD gD hD iD pA preedid por Hx o por HD se interpret omo un onstnte enter hexdeimlD esto esD un onstnte numri expresd en se ITF or ejemploX HII onstnte otl @igul W en se IHA II onstnte enter deiml @no es igul HIIA Hxe onstnte hexdeiml @igul IH en se IHA Hxpp onstnte hexdeiml @igul ITPEIaPSS en se IHA

RI

CAPTULO 4.

CONSTANTES

RP

is prole que no hy neesidd de utilizr onstntes otles y hexdeimlesD pero onviene onoer su existeni y ser interpretrls por si hiier fltF v ventj de los nmeros expresdos en se V y se IT proviene de su estreh relin on l se P @ V y IT son potenis de PAD que es l form en l que el ordendor lmen l informinF

4.1.2. Constantes de punto otante


gomo es nturlD existen tmin onstntes de punto )otnteD que pueden ser de tipo )otD doule y long douleF n onstnte de punto )otnte se lmen de l mism form que l vrile orrespondiente del mismo tipoF or defetoD si no se indi otr osD ls onstntes de punto )otnte son de tipo douleF r indir que un onstnte es de tipo )ot se le de un f o un pY pr indir que es de tipo long douleD se le de un l o un vF in ulquier soD el punto deiml siempre dee estr presente si se trt de representr un nmero relF ists onstntes se pueden expresr de vris formsF v ms senill es un onjunto de dgitos del H l WD inluyendo un punto deimlF r onstntes muy grndes o muy peques puede utilizrse l notin ient(Y en este so l onstnte tiene un prte enterD un punto deimlD un prte frionriD un e o iD y un exponente entero @fetndo l se IHAD on un signo opionlF e puede omitir l prte enter o l frionriD pero no ms l vezF vs onstntes de punto )otnte son siempre positivsF uede nteponerse un signo @EAD pero no form prte de l onstnteD sino que on st onstituye un expresinD omo se ver ms delnteF e ontinuin se presentn lgunos ejemplos vlidosX IFPQ onstnte tipo doule @opin por defetoA PQFWTQf onstnte tipo )ot FHHVUR onstnte tipo doule PQeP onstnte tipo doule @igul PQHHFHA FVUReEP onstnte tipo doule en notin ient( @aFHHVURA FVUReEPf onstnte tipo )ot en notin ient(

4.2. Constantes carcter


n onstnte rter es un rter ulquier enerrdo entre pstrofos @tl omo 9x9 o 9t9AF il vlor de un onstnte rter es el vlor numrio signdo ese rter segn el digo egss @ver l PFQAF gonviene indir que en g no existen onstntes tipo hrY lo que se llm qu onstntes rter son en relidd onstntes entersF ry que selr que el vlor egss de los nmeros del H l W no oinide on el propio vlor numrioF or ejemploD el vlor egss de l onstnte rter 9U9 es SSF giertos rteres no representles gr(menteD el pstrofo @9A y l rr invertid @A y otros rE teresD se representn medinte l siguiente tl de seuenis de espeD on yud de l rr invertid @A xomre gonstnte en g egss sonido de lert fiv U nuev lne xv n IH tuldor horizontl r t W retroeso f V retorno de rro g r IQ slto de pgin pp f IP rr invertid WP pstrofo 9 9 QW omills   QR TQ rter nulo xvv H H vos rteres egss pueden ser tmin representdos medinte el nmero otl orrespondienteD eneE rrdo entre pstrofos y preedido por l rr invertidF or ejemploD 9HU9 y 9U9 representn el nmero U

CAPTULO 4.

CONSTANTES

RQ

del digo egss @sin emrgoD 9HHU9 es l representin otl del rter 9U9AD que es el sonido de lertF il exs g tmin dmite seuenis de espe hexdeimlesD por ejemplo 9xI9F

4.3. Cadenas de caracteres


n den de rteres es un seueni de rteres delimitd por omills @4AD omo por ejemploX 4isto es un den de rteres4F hentro de l denD pueden preer rteres en lno y se pueden empler ls misms seuenis de espe vlids pr ls onstntes rterF or ejemploD ls omills @4A deen estr preedids por @AD pr no ser interpretds omo (n de l denY tmin l propi rr invertid @AF is muy importnte selr que el ompildor sit siempre un yte nulo @HA diionl l (nl de d den de rteres pr selr el (nl de l mismF esD l den 4mes4 no oup R ytesD sino S ytesF e ontinuin se muestrn lgunos ejemplos de dens de rteresX 4snformti s4 49e94 4 den on espios en lno 4 isto es un 4den de rteres4Fn4

4.4. Constantes de tipo Enumeracin


in g existen un lse espeil de onstntesD llmds onstntes enumerinF ists onstntes se utilizn pr de(nir los posiles vlores de iertos identi(dores o vriles que slo deen poder tomr unos poos vloresF or ejemploD se puede pensr en un vrile llmd didelsemn que slo pued tomr los U vlores siguientesX lunesD mrtesD mierolesD juevesD viernesD sdo y domingoF is muy fil imginr otros tipos de vriles nlogsD un de ls ules podr ser un vrile oolen on slo dos posiles vloresX s y xyD o i y peviD u yx y yppF il uso de este tipo de vriles he ms lros y legiles los progrmsD l pr que disminuye l proilidd de introduir erroresF in reliddD ls onstntes enumerin son los posiles vlores de ierts vriles de(nids omo de ese tipo onretoF gonsidrese omo ejemplo l siguiente delrinX enum di {lunesD mrtesD mierolesD juevesD viernesD sdoD domingo}Y ist delrin re un nuevo tipo de vrile !el tipo de vrile di! que slo puede tomr uno de los U vlores enerrdos entre ls llvesF istos vlores son en relidd onstntes tipo intX lunes es un HD mrtes es un ID mieroles es un PD etF ehorD es posile de(nir vrilesD llmds diI y diPD que sen de tipo diD en l form @osrvese que en g deen preer ls plrs enum diY en gCC st que prez l plr diA enum di diID diPY GG en g di di ID di PY GG en CC y ests vriles se les pueden signr vlores en l form diI a mrtesY o preer en diversos tipos de expresiones y de sentenis que se explirn ms delnteF vos vlores enteros que se soin on d onstnte tipo enumerin pueden ser ontroldos por el progrmdorF or ejemploD l delrinD enum di {lunesaID mrtesD mierolesD juevesD viernesD sdoD domingo}Y soi un vlor I lunesD P mrtesD Q mierolesD etFD mientrs que l delrinD enum di {lunesaID mrtesD mierolesD juevesaUD viernesD sdoD domingo}Y soi un vlor I lunesD P mrtesD Q mierolesD un U juevesD un V viernesD un W sdo y un IH domingoF e puede tmin her l de(niin del tipo enum y l delrin de ls vriles en un ni senteniD en l form

CAPTULO 4.

CONSTANTES

RR

enum plo {orosD opsD espdsD stos} rtID rtPD rtQY donde rtID rtP y rtQ son vriles que slo pueden tomr los vlores orosD opsD espds y stos @equivlentes respetivmente HD ID P y QAF

4.4.1. Cualicador const


e puede utilizr el uli(dor onst en l delrin de un vrile pr indir que es vrile no puede mir de vlorF i se utiliz on un rryD los elementos del rry no pueden mir de vlorF or ejemploX onst int iaIHY onst doule x a {ID PD QD R}Y il lenguje g no de(ne lo que ourre si en otr prte del progrm o en tiempo de ejeuin se intent modi(r un vrile delrd omo onstF he ordinrio se otendr un mensje de error en l ompilin si un vrile onst (gur l izquierd de un operdor de signinF in emrgoD l menos on el ompildor de wirosoftD se puede modi(r un vrile delrd omo onst por medio de un puntero de l form siguienteX onst int iaIHY int BpY p a 8iY Bp a IY gCC es muho ms restritivo en este sentidoD y no permite de ningun mner modi(r ls vriles delrds omo onstF il uli(dor onst se suele utilizr undoD por motivos de e(ieniD se psn rgumentos por refereni funiones y no se dese que dihos rgumentos sen modi(dos por stsF

Captulo 5

Operadores, expresiones y sentencias.


5.1. Operadores
n operdor es un rter o grupo de rteres que t sore unD dos o ms vriles pr relizr un determind operin on un determindo resultdoF ijemplos tpios de operdores son l sum @CAD l difereni @EAD el produto @BAD etF vos operdores pueden ser unriosD inrios y ternriosD segn ten sore unoD dos o tres operndosD respetivmenteF in g existen muhos operdores de diversos tipos @ste es uno de los puntos fuertes del lengujeAD que se vern ontinuinF

5.1.1. Operadores aritmticos


vos operdores ritmtios son los ms senillos de entender y de utilizrF odos ellos son operdores inriosF in g se utilizn los ino operdores siguientesX umX C estX E wultipliinX B hivisinX G estoX 7 odos estos operdores se pueden plir onstntesD vriles y expresionesF il resultdo es el que se otiene de plir l operin orrespondiente entre los dos operndosF il nio operdor que requiere un expliin diionl es el operdor resto 7F in relidd su nomre ompleto es resto de l divisin enterF iste operdor se pli solmente onstntesD vriles o expresiones de tipo intF elrdo estoD su signi(do es evidenteX PQ 7 R es QD puesto que el resto de dividir PQ por R es QF i 7 es eroD es mltiplo de F gomo se ver ms delnteD un expresin es un onjunto de vriles y onstntes !y tmin de otrs expresiones ms senills! relionds medinte distintos operdoresF n ejemplo de expresin en l que intervienen operdores ritmtios es el siguiente polinomio de grdo P en l vrile xX SFH C QFHBx E xBxGPFH vs expresiones pueden ontener prntesis @FFFA que grupn lgunos de sus trminosF uede her prnE tesis ontenidos dentro de otros prntesisF il signi(do de los prntesis oinide on el hitul en ls expresiones mtemtisD on lguns rterstis importntes que se vern ms delnteF in osionesD l introduin de espios en lno mejor l legiilidd de ls expresionesF v dulidd rter entero del tipo hr he que pueds utilizr l sum o l rest @o ulquier otro operdor ritmetioA on vriles o vlores de tipo hrF or ejemplo e 99 C I es un expresin vlid y su vlor es 99 @oD equivlentementeD el vlor WVD y que o 99 equivle WUAF @euerdD no ostnteD que un rter no es un den en gD si que 44 C I no es 44FA RS

CAPTULO 5.

OPERADORES, EXPRESIONES Y SENTENCIAS.

RT

5.1.2. Operadores de asignacin


vos operdores de signin triuyen un vrile !es deirD depositn en l zon de memori orresE pondiente dih vrile! el resultdo de un expresin o el vlor de otr vrile @en reliddD un vrile es un so prtiulr de un expresinAF il operdor de signin ms utilizdo es el operdor de iguldd @aAD que no dee ser onfundido on l iguldd mtemtiF u form generl esX nomredevrile a expresionY uyo funionmiento es omo sigueX se evl expresion y el resultdo se deposit en nomredevrileD sustituyendo ulquier otro vlor que huier en es posiin de memori nteriormenteF n posile utiliE zin de este operdor es omo sigueX vrile a vrile C IY hesde el punto de vist mtemtio este ejemplo no tiene sentido @iquivle H a I3AD pero s lo tiene onsiderndo que en relidd el operdor de signin @aA represent un sustituinY en efetoD se tom el vlor de vrile ontenido en l memoriD se le sum un unidd y el vlor resultnte vuelve depositrse en memori en l zon orrespondiente l identi(dor vrileD sustituyendo l vlor que h nteriormenteF il resultdo h sido inrementr el vlor de vrile en un uniddF es puesD un vrile puede preer l izquierd y l dereh del operdor @aAF in emrgoD l izquierd del operdor de signin @aA no puede her nun un expresinX tiene que ser neesrimente el nomre de un vrileSF is inorretoD por tntoD esriir lgo s omoX C a Y ixisten otros utro operdores de signin @CaD EaD Ba y GaA formdos por los R operdores ritmtios seguidos por el rter de igulddF istos operdores simpli(n lguns operiones reurrentes sore un mism vrileF u form generl esX vrile opa expresionY donde op represent ulquier de los operdores @C E B GAF v expresin nterior es equivlente X vrile a vrile op expresionY

5.1.3. Operadores incrementales


vos operdores de inremento y deremento pueden ir delnte de un vrile @form pre(jA o detrs @form post(jAF v vrile dee ser de tipo entero @intD unsigned intD hrD etFAF in mos sos inreE mentn @CCA o derementn @!A en un unidd el vlor de l vrile enterF i i vle ID vldr P despues de ejeutr CCi o iCCD y vldr H despues de ejeutr !i o i!F ry un difereni importnte entre plir estos operdores en form pre(j o su(jF v expresin iCC primero se evlu omo el vlor tul de i y despues he que i o u e inremente su vlor en un uniddF v expresion CCi primero inrement el vlor de i en un unidd y despues se evlu o e u omo el vlor tul @que es el que result de efetur el inrementoAF vos operdores inrementles @CCA y @!A son operdores unrios que inrementn o disminuyen en un unidd el vlor de l vrile l que fetnF istos operdores pueden ir inmeditmente delnte o detrs de l vrileF i preeden l vrileD st es inrementd ntes de que el vlor de dih vrile se utilizdo en l expresin en l que preeF i es l vrile l que preede l operdorD l vrile es inrementd despus de ser utilizd en l expresinF e ontinuin se present un ejemplo de estos operdoresX i a PY j a PY m a iCCY GG despues de ejeutrse est senteni maP e iaQ n a CCjY GG despues de ejeutrse est senteni naQ y jaQ istos operdores son muy utilizdosF is importnte entender muy ien por qu los resultdos m y n del ejemplo nterior son diferentesF

CAPTULO 5.

OPERADORES, EXPRESIONES Y SENTENCIAS.

RU

5.1.4. Operadores relacionales


iste es un prtdo espeilmente importnte pr tods quells persons sin experieni en progrmE inF n rtersti impresindile de ulquier lenguje de progrmin es l de onsiderr lterntivsD esto esD l de proeder de un modo u otro segn se umpln o no ierts ondiionesF vos operdores relioE nles permiten estudir si se umplen o no ess ondiionesF es puesD estos operdores produen un resultdo u otro segn se umpln o no lguns ondiiones que se vern ontinuinF in el lenguje nturlD existen vris plrs o forms de indir si se umple o no un determind ondiinF in ingls ests forms son @yesD noAD @onD o'AD @trueD flseAD etF in snformti se h heho stnte generl el utilizr l ltim de ls forms itdsX @trueD flseAF i un ondiin se umpleD el resultdo es trueY en so ontrrioD el resultdo es flseF in g un H represent l ondiin de flseD y ulquier nmero distinto de H equivle l ondiin trueF gundo el resultdo de un expresin es true y hy que signr un vlor onreto distinto de eroD por defeto se tom un vlor uniddF vos operdores relionles de g son los siguientesX sgul queX aa wenor queX ` wyor queX b wenor o igul queX `a wyor o igul queX ba histinto queX 3a odos los operdores relionles son operdores inrios @tienen dos operndosAD y su form generl es l siguienteX expresionI op expresionP donde op es uno de los operdores @aaD `D bD `aD baD 3aAF il funionmiento de estos operdores es el siguienteX se evln expresionI y expresionPD y se omprn los vlores resultntesF i l ondiin repreE sentd por el operdor relionl se umpleD el resultdo es IY si l ondiin no se umpleD el resultdo es HF e ontinuin se inluyen lgunos ejemplos de estos operdores plidos onstntesX @PaaIA GG resultdoa H @Q`aQA GG resultdoa I @Q`QA GG resultdoa H @I3aIA GG resultdoa H

5.1.5. Operadores lgicos


vos operdores lgios son operdores inrios que permiten ominr los resultdos de los operdores relionlesD omprondo que se umplen simultnemente vris ondiionesD que se umple un u otrD etF il lenguje g tiene tres operdores lgiosX l negion o no logio @3A el operdor @88A y el operdor y @||AF in ingls son los operdores noD nd y orF u form generl es l siguienteX 3expresion expresionI || expresionP expresionI 88 expresionP il operdor 3 devuelve H si l expresion es verdder @distint de eroA y devuelve I si l expresion es fls @igul HAF il operdor 88 devuelve un I si tnto expresionI omo expresionP son verdders @o distints de HAD y H en so ontrrioD es deir si un de ls dos expresiones o ls dos son flss @igules HAF il operdor || devuelve I si l menos un de ls expresiones es iertF is importnte tener en uent que los ompildores de g trtn de optimizr l ejeuin de ests expresionesD lo ul puede tener vees efetos no desedosF or ejemploX pr que el resultdo del operdor 88 se verdderoD ms expresiones tienen que ser verddersY si se evl expresionI y es flsD y no

CAPTULO 5.

OPERADORES, EXPRESIONES Y SENTENCIAS.

RV

he flt evlur expresionPD y de heho no se evlF elgo preido ps on el operdor ||X si expresionI es verdderD y no he flt evlur expresionPF vos operdores 88 y || se pueden ominr entre s !quizs grupdos entre prntesis!D dndo vees un digo de ms difil interpretinF @PaaIA || @EIaaEIA GG resultdoa I @PaaPA 88 @QaaEIA GG resultdoa H @@PaaPA 88 @QaaQAA || @RaaHA GG resultdoa I @@TaaTA || @VaaHAA 88 @@SaaSA 88 @QaaPAA GG resultdoa H

5.1.6. Otros operadores


edems de los operdores vistos hst horD el lenguje g dispone de otros operdoresF in est sein se desrien lgunos operdores unrios diionlesF yperdor menos @!AF il efeto de este operdor en un expresin es mir el signo de l vrile o expresin que le sigueF eurdese que en g no hy onstntes numris negtivsF v form generl de este operdor esX E expresion yperdor ms @CAF iste es un nuevo operdor unrio introduido en el exs gD y que tiene omo (nlidd l de servir de omplemento l operdor @!A visto nteriormenteF e puede nteponer un vrile o expresin omo operdor unrioD pero en relidd no he ndF yperdor sizeof@AF iste es el operdor de g on el nomre ms lrgoF uede preer un funinD pero en relidd es un operdorF v (nlidd del operdor sizeof@A es devolver el tmoD en ytesD del tipo de vrile introduid entre los prntesisF eurdese que este tmo depende del ompildor y del tipo de omputdor que se est utilizndoD por lo que es neesrio disponer de este operdor pr produir digo portleF hy un peuliriddX si quiero ser lo que oup un tipo de dtosD tengo que indirlo entre prntesisX sizeof@)otAD pero si se trt de un vrileD puedo no usr prntesisX sizeof iF iso sD el ompildor no dr ningn mensje de error si uso un prntesis undo se un vrile sizeof@iAD s que puede resultr modo poner siempre el prntesisD sin prrse pensr si nos lo podrmos her horrdoF yperdor negin lgi @3AF iste operdor devuelve un ero @flseA si se pli un vlor distinto de ero @trueAD y devuelve un I @trueA si se pli un vlor ero @flseAF u form generl esX 3expresion yperdor om @DAF vos operndos de este operdor son expresionesD y tiene l form generlX expresion a expresionID expresionP in este soD expresionI se evl primeroD y luego se evl expresionPF il resultdo glol es el vlor de l segund expresinD es deir de expresionPF iste es el operdor de menos preedeni de todos los operdores de gF gomo se explir ms delnteD su uso ms freuente es pr introduir expresiones mltiples en l senteni forF yperdores direin @8A e indirein @BAF eunque estos operdores se introduzn qu de modo irunstnilD su importni en el lenguje g es solutmente esenilD resultndo uno de los puntos ms fuertes !y quizs ms difiles de dominr! de este lengujeF v form generl de estos operdores es l siguienteX BexpresionY 8vrileY il operdor direin 8 devuelve l direin de memori de l vrile que le sigueF or ejemploX vrileI a 8vrilePY hespus de ejeutrse est instruin vrileI ontiene l direin de memori donde se gurd el ontenido de vrilePF vs vriles que lmenn direiones de otrs vriles se denominn punteros @o puntdoresAD deen ser delrds omo tlesD y tienen su propi ritmti y modo de funionrF e vern on detlle un poo ms delnteF xo se puede modi(r l direin de un vrileD por lo que no estn permitids operiones en ls que el operdor 8 (gur l izd del operdor @aAD l estilo deX 8vrileI a nuevdireionY il operdor indirein B es el operdor omplementrio del 8F eplido un expresin que represente un direin de memori @punteroA permite hllr el ontenido o vlor lmendo en es direinF or ejemploX vrileQ a BvrileIY il ontenido de l direin de memori

CAPTULO 5.

OPERADORES, EXPRESIONES Y SENTENCIAS.

RW

representd por l vrile de tipo puntero vrileI se reuper y se sign l vrile vriE leQF gomo y se h indidoD ls vriles puntero y los operdores direin @8A e indirein @BA sern explidos on muho ms detlle en un sein posteriorF

5.2. Expresiones
hn preido lgunos ejemplos de expresiones del lenguje g en ls seiones preedentesF n expresin es un ominin de vriles yGo onstntesD y operdoresF v expresin es equivlente l resultdo que proporion l plir sus operdores sus operndosF or ejemploD ICS es un expresin formd por dos operndos @I y SA y un operdor @el CAY est expresin es equivlente l vlor TD lo ul quiere deir que ll donde est expresin pree en el progrmD en el momento de l ejeuin es evlud y sustituid por su resultdoF n expresin puede estr formd por otrs expresiones ms senillsD y puede ontener prntesis de vrios niveles grupndo distintos trminosF in g existen distintos tipos de expresionesF

5.2.1. Expresiones aritmticas


istn formds por vriles yGo onstntesD y distintos operdores ritmtios e inrementles @CD ED BD GD 7D CCD !AF gomo se h dihoD tmin se pueden empler prntesis de tntos niveles omo se deseeD y su interpretin sigue ls norms ritmtis onvenionlesF or ejemploD l soluin de l euin de segundo grdoX b b2 4ac x= 2a se esrieD en g en l formX xa@ECsqrt@@BAE@RBBAAAG@PBAY dondeD estritmente hlndoD slo lo que est l dereh del operdor de signin @aA es un expresin ritmtiF il onjunto de l vrile que est l izquierd del signo @aAD el operdor de signinD l expresin ritmti y el rter @YA onstituyen un senteniF in l expresin nterior pree l llmd l funin de lirer sqrt@AD que tiene omo vlor de retorno l rz udrd de su nio rgumentoF in ls expresiones se pueden introduir espios en lno entre operndos y operdores

5.2.2. Expresiones lgicas


vos elementos on los que se formn ests expresiones son vlores lgiosY verdderos @trueD o distintos de HA y flsos @flseD o igules HAD y los operdores lgios ||D 88 y 3F min se pueden empler los operdores relionles @`D bD `aD baD aaD 3aA pr produir estos vlores lgios prtir de vlores numriosF ists expresiones equivlen siempre un vlor I @trueA o un vlor H @flseAF or ejemploX a @@bA88@bdAA||@@aaeA||@eaaAAY donde de nuevo l expresin lgi es lo que est entre el operdor de signin @aA y el @YAF v vrile vldr I si es myor que y myor que dD si es igul e e es igul F

5.2.3. Expresiones generales


n de ls rterstis ms importntes @y en osiones ms difiles de mnejrA del g es su )exiilidd pr ominr expresiones y operdores de distintos tipos en un expresin que se podr llmr generlD unque es un expresin solutmente ordinri de gF eurdese que el resultdo de un expresin lgi es siempre un vlor numrio @un I un HAY esto permite que ulquier expresin lgi pued preer omo suEexpresin en un expresin ritmtiF epromenteD ulquier vlor numrio puede ser onsiderdo omo un vlor lgioX true si es distinto de H y flse si es igul HF isto permite introduir ulquier expresin ritmti omo suEexpresin de un expresin lgiF or ejemploX

CAPTULO 5.

OPERADORES, EXPRESIONES Y SENTENCIAS.

SH

@ E BPFHA 88 @ 3a dA e su vezD el operdor de signin @aAD dems de introduir un nuevo vlor en l vrile que (gur su izdD dej tmin este vlor disponile pr ser utilizdo en un expresin ms generlF or ejemploD supngse el siguiente digo que iniiliz I ls tres vriles D y X a a a IY que equivle X a @ a @ a IAAY in reliddD lo que se h heho h sido lo siguienteF in primer lugr se h signdo un vlor unidd Y el resultdo de est signin es tmin un vlor uniddD que est disponile pr ser signdo Y su vez el resultdo de est segund signin vuelve quedr disponile y se puede signr l vrile F

5.3. Reglas de precedencia y asociatividad


il resultdo de un expresin depende del orden en que se ejeutn ls operionesF il siguiente ejemplo ilustr lrmente l importni del ordenF gonsidrese l expresinX QCRBP i se reliz primero l sum @QCRA y despus el produto @UBPAD el resultdo es IRY si se reliz primero el produto @RBPA y luego l sum @QCVAD el resultdo es IIF gon ojeto de que el resultdo de d expresin quede lro e inequvooD es neesrio de(nir ls regls que de(nen el orden on el que se ejeutn ls expresiones de gF ixiste dos tipos de regls pr determinr este orden de evluinX ls regls de preedeni y de soitividdF edemsD el orden de evluin puede modi(rse por medio de prntesisD pues siempre se relizn primero ls operiones enerrds en los prntesis ms interioresF vos distintos operdores de g se ordenn segn su distint preedeni o prioriddY pr operdores de l mism preedeni o prioriddD en lgunos el orden de ejeuin es de izquierd derehD y otros de dereh izquierd @se die que se soin de izd dhD o de dh izdAF e este orden se le llm soitividdF

5.4. Sentencias
vs expresiones de g son uniddes o omponentes elementles de uns entiddes de rngo superior que son ls sentenisF vs sentenis son uniddes ompletsD ejeutles en s mismsF se ver que muhos tipos de sentenis inorporn expresiones ritmtisD lgis o generles omo omponentes de dihs sentenisF

5.4.1. Sentencias simples.


n senteni simple es un expresin de lgn tipo termind on un rter @YAF n so tpio son ls delriones o ls sentenis ritmtisF or ejemploX )ot relY espio a espioiniil C veloidd B tiempoY

5.4.2. Sentencia vaca nula


in lguns osiones es neesrio introduir en el progrm un senteni que oupe un lugrD pero que no relie ningun treF e est senteni se le denomin senteni v y onst de un simple rter @YAF or ejemploX Y

CAPTULO 5.

OPERADORES, EXPRESIONES Y SENTENCIAS.

SI

5.4.3. Sentencias compuestas o bloques


wuhs vees es neesrio poner vris sentenis en un lugr del progrm donde deer her un solF isto se reliz por medio de sentenis ompuestsF n senteni ompuest es un onjunto de delriones y de sentenis grupds dentro de llves {FFF}F min se onoen on el nomre de loquesF n senteni ompuest puede inluir otrs sentenisD simples y ompuestsF n ejemplo de senteni ompuest es el siguienteX { int i a ID j a QD kY doule msY ms a QFHY k a y C jY } vs sentenis ompuests se utilizrn on muh freueni en el ontrol de )ujo de ejeuionD l introduir ls sentenis que permiten modi(r el )ujo de ontrol del progrmF

Captulo 6

Control del ujo de ejecucion.


in prinipioD ls sentenis de un progrm en g se ejeutn seuenilmenteD esto esD d un ontiE nuin de l nterior empezndo por l primer y ndo por l ltimF il lenguje g dispone de vris sentenis pr modi(r este )ujo seuenil de l ejeuinF vs ms utilizds se grupn en dos fmiE lisX ls ifurionesD que permiten elegir entre dos o ms opiones segn ierts ondiionesD y los ulesD que permiten ejeutr repetidmente un onjunto de instruiones tnts vees omo se deseeD mindo o tulizndo iertos vloresF

6.1. Bifurcaciones
6.1.1. Operador condicional
il operdor ondiionl es un operdor on tres operndos @ternrioA que tiene l siguiente form generlX expresionI c expresionP X expresionQY ixpliinX e evl expresionIF i el resultdo de dih evluin es true @5HAD se ejeut expresionPY si el resultdo es flse @aHAD se ejeut expresionQF

6.1.2. Sentencia if
ist senteni de ontrol permite ejeutr o no un senteni simple o ompuest segn se umpl o no un determind ondiinF ist senteni tiene l siguiente form generlX if @expresionA senteniY ixpliinX e evl expresionF i el resultdo es true @5HAD se ejeut senteniY si el resultdo es flse @aHAD se slt senteni y se prosigue en l lne siguienteF ry que reordr que senteni puede ser un senteni simple o ompuest @loque { FFF }AF

6.1.3. Sentencia if ... else


ist senteni permite relizr un ifurinD ejeutndo un prte u otr del progrm segn se umpl o no un iert ondiinF v form generl es l siguienteX if @expresionA senteniIY else senteniPY ixpliinX e evl expresionF i el resultdo es true @5HAD se ejeut senteniI y se prosigue en l lne siguiente senteniPY si el resultdo es flse @aHAD se slt senteniID se ejeut senteniP y se prosigue en l lne siguienteF ry que indir qu tmin que senteniI y senteniP pueden ser sentenis simples o ompuests @loques { FFF }AF gundo el ompildor lee vris sentenis 4 if 4 niddsX soi d 4 else 4 on el 4 if 4 ms prximoF il operdor ondiionl 4 c 4 is un operdor ternrioF SP

CAPTULO 6.

CONTROL DEL FLUJO DE EJECUCION.

SQ

expI c expP X expQ e evl l expresin 4expI4F i tiene vlor distinto de eroD se evl l expresin 4expP4 y su resultdo ser el vlor de l expresinF i 4expI4 tiene vlor eroD se evl 4expQ4 y su resultdo ser el vlor de l expresinF v senteniX x a @ y`z A c y X z Y iene un efeto equivlente X if @ y ` z A xayY else xazY

6.1.4. Sentencia if ... else mltiple


ist senteni permite relizr un rmi(in mltipleD ejeutndo un entre vris prtes del progrm segn se umpl un entre n ondiionesF v form generl es l siguienteX if @expresionIA senteniIY else if @expresionPA senteniPY else if @expresionQA senteniQY else if @FFFA FFF else senteninY ixpliinX e evl expresionIF i el resultdo es trueD se ejeut senteniIF i el resultdo es flseD se slt senteniI y se evl expresionPF i el resultdo es true se ejeut senteniPD mientrs que si es flse se evl expresionQ y s suesivmenteF i ningun de ls expresiones o ondiiones es true se ejeut expresionn que es l opin por defeto @puede ser l senteni vD y en ese so puede eliminrse junto on l plr elseAF ods ls sentenis pueden ser simples o ompuestsF

6.1.5. Sentencia switch


v senteni que se v desriir ontinuin desrroll un funin similr l de l senteni if FFF else on mltiples rmi(ionesD unque omo se puede ver present tmin importntes diferenisF v form generl de l senteni swith es l siguienteX swith @expresionA { se expresionteIX senteniIY se expresiontePX senteniPY FFF se expresiontenX senteninY defultX senteniY } ixpliinX e evl expresion y se onsider el resultdo de dih evluinF i diho resultdo oinide on el vlor onstnte expresionteID se ejeut senteniI seguid de senteniPD senteniQD FFFD senteniF i el resultdo oinide on el vlor onstnte expresiontePD se ejeut senteniP seguid de senteniQD FFFD senteniF in generlD se ejeutn tods quells sentenis que estn ontinuin de l expresionte uyo vlor oinide on el resultdo luldo l prinipioF i ningun expresionte oinide se ejeut l senteni que est ontinuin de defultF i se dese ejeutr nimente un sentenii @y no todo un onjunto de ellsAD st poner un senteni rek ontinuin @en lgunos sos puede utilizrse l senteni return o l funin exit@AAF il efeto de l senteni rek es dr por termind l ejeuin de l senteni swithF ixiste tmin l posiilidd de ejeutr l mism sentenii pr vrios vlores del resultdo de expresionD poniendo vrios se expresionte seguidosF il siguiente ejemplo ilustr ls posiiliddes itdsX

CAPTULO 6.

CONTROL DEL FLUJO DE EJECUCION.

SR

swith @expresionA { se expresionteIX senteniIY rekY se expresiontePX senteniPY rekY defultX senteniQY }

6.1.6. Sentencias if anidadas


n senteni if puede inluir otros if dentro de l prte orrespondiente su senteniD e ests sentenis se les llm sentenis nidds @un dentro de otrAD por ejemploD if @ ba A if @ 3a HFHA a GY in osiones pueden preer di(ultdes de interpretin on sentenis ifFFFelse niddsD omo en el so siguienteX if @ ba A if @ 3a HFHA a GY else a HFHY in prinipio se podr plnter l dud de ul de los dos if orresponde l prte else del progrmF vos espios en lno !ls indentiones de ls lnes! preen indir que l senteni que sigue else orresponde l segundo de los ifD y s es en reliddD pues l regl es que el else pertenee l if ms ernoF in emrgoD no se olvide que el ompildor de g no onsider los espios en lno @unque se muy onveniente introduirlos pr her ms lro y legile el progrmAD y que si se quisier que el else perteneier l primero de los if no str mir los espios en lnoD sino que hr que utilizr llvesD en l formX if @ ba A { if @ 3a HFHA a GY } else a HFHY eurdese que tods ls sentenis if e ifFFFelseD equivlen un ni senteni por l posiin que oupn en el progrmF

6.2. Bucles
edems de ifurionesD en el lenguje g existen tmin vris sentenis que permiten repetir un serie de vees l ejeuin de uns lnes de digoF ist repetiin se relizD ien un nmero determindo de veesD ien hst que se umpl un determind ondiin de tipo lgio o ritmtioF he modo genrioD ests sentenis se les denomin ulesF vs tres onstruiones del lenguje g pr relizr ules son el whileD el for y el doFFFwhileF in generlD nos interesr usr while undo puede que l prte repetitiv no se llegue repetir nun @por ejemploX undo leemos un (heroD si el (hero est voD no hr dtos que leerAF he igul modoD doFFFwhile ser lo deudo undo demos repetir l menos un vez @por ejemploD pr pedir un lve de esoD se le dee preguntr l menos un vez l usurioD o quiz ms veesD si l tele orretmenteAF in unto forD es equivlente un whileD pero l sintxis hitul de l oren for he que se espeilmente til undo semos extmente unts vees queremos que se repit @por ejemploX IH vees ser for @iaIY i`aIHY iCCAAF

6.2.1. Sentencia while


ist senteni permite ejeutr repetidmenteD mientrs se umpl un determind ondiinD un senE teni o loque de sentenisF v form generl es omo sigueX while @expresiondeontrolA senteniY

CAPTULO 6.

CONTROL DEL FLUJO DE EJECUCION.

SS

ixpliinX e evl expresiondeontrol y si el resultdo es flse se slt senteni y se prosigue l ejeuE inF i el resultdo es true se ejeut senteni y se vuelve evlur expresiondeontrol @evidentemente lgun vrile de ls que intervienen en expresiondeontrol hr tenido que ser modi(dD pues si no el ule ontinur inde(nidmenteAF v ejeuin de senteni prosigue hst que expresiondeontrol se he flseD en uyo so l ejeuin ontin en l lne siguiente senteniF in otrs plrsD sentenE i se ejeut repetidmente mientrs expresiondeontrol se trueD y se dej de ejeutr undo expreE siondeontrol se he flseF ysrvese que en este so el ontrol pr deidir si se sle o no del ule est ntes de senteniD por lo que es posile que senteni no se llegue ejeutr ni un sol vezF

6.2.2. Sentencia for


por es quizs el tipo de ule ms verstil y utilizdo del lenguje gF u form generl es l siguienteX for @iniilizionY expresiondeontrolY tulizionA senteniY ixpliinX osilemente l form ms senill de explir l senteni for se utilizndo l onstruin while que ser equivlenteF hih onstruin es l siguienteX iniilizionY while @expresiondeontrolA { senteniY tulizionY } donde senteni puede ser un ni senteni termind on @YAD otr senteni de ontrol oupndo vris lnes @ifD whileD forD FFFAD o un senteni ompuest o un loque enerrdo entre llves {FFF}F entes de iniirse el ule se ejeut iniilizionD que es un o ms sentenis que signn vlores iniiles ierts vriles o ontdoresF e ontinuin se evl expresiondeontrol y si es flse se prosigue en l senteni siguiente l onstruin forY si es true se ejeutn senteni y tulizionD y se vuelve evlur expresiondeontrolF il proeso prosigue hst que expresiondeontrol se flseF v prte de tulizion sirve pr tulizr vriles o inrementr ontdoresF n ejemplo tpio puede ser el produto eslr de dos vetores y de dimensin nX for @pe aHFHD iaIY i`anY iCCA { pe Ca iBiY } rimermente se iniiliz l vrile pe ero y l vrile i IY el ilo se repetir mientrs que i se menor o igul que nD y l (nl de d ilo el vlor de i se inrementr en un uniddF in totlD el ule se repetir n veesF v ventj de l onstruin for sore l onstruin while equivlente est en que en l eer de l onstruin for se tiene tod l informin sore omo se iniiliznD ontroln y tulizn ls vriles del uleF ysrvese que l iniilizion onst de dos sentenis seprds por el operdor @DAF odemos slir de un ule for ntes de tiempo on l orden rek

6.2.3. Sentencia do ... while


ist senteni funion de modo nlogo whileD on l difereni de que l evluin de expreE siondeontrol se reliz l (nl del uleD despus de her ejeutdo l menos un vez ls sentenis entre llvesY sts se vuelven ejeutr mientrs expresiondeontrol se trueF v form generl de est senteni esX do senteniY while@expresiondeontrolAY donde senteni puede ser un ni senteni o un loqueD y en l que dee oservrse que hy que poner @YA ontinuin del prntesis que enierr expresiondeontrolD entre otros motivos pr que es lne se disting de un senteni while ordinriF

CAPTULO 6.

CONTROL DEL FLUJO DE EJECUCION.

ST

6.3. Sentencias break, continue, goto


v instruin rek interrumpe l ejeuin del ule donde se h inluidoD hiendo l progrm slir de l unque l expresiondeontrol orrespondiente ese ule se verdderF v senteni ontinue he que el progrm omiene el siguiente ilo del ule donde se hllD unque no hy llegdo l (nl de ls senteni ompuest o loqueF il lenguje g tmin permite l orden gotoD pr her sltos inondiionlesF u uso indisiplindo est muy ml vistoD porque puede yudr her progrms llenos de sltosD difiles de seguirF ero en sos onretos puede ser muy tilD por ejemploD pr slir de un ule muy niddo @un for dentro de otro for que su vez est dentro de otro forX en este soD rek slo sldr del for ms internoAF v senteni goto etiquet he sltr l progrm l senteni donde se hy esrito l etiquet orrespondienteF or ejemploX entenis FFF FFF if @ondiionA goto otrolugrY senteniIY senteniPY FFF otrolugrX senteniQY FFF ysrvese que l etiquet termin on el rter @XAF v senteni goto no es un senteni muy prestigid en el mundo de los progrmdores de gD pues disminuye l lridd y legiilidd del digoF pue introduid en el lenguje por motivos de omptiilidd on ntiguos hitos de progrminD y siempre puede ser sustituid por otrs onstruiones ms lrs y estruturdsF

Captulo 7

Tipos de datos derivados.


edems de los tipos de dtos fundmentles vistos en l ein PD en g existen lgunos otros tipos de dtos muy utilizdos y que se pueden onsiderr derivdos de los nterioresF in est sein se vn presentr los punterosD ls mtries y ls estrutursF

7.1. Punteros
ixisten dos oneptos importntes soidos d eld o posiin de memoriX su direin y su onE tenidoF gd eld o yte tiene soid un ni direin que indi su posiin reltiv en memori y medinte l ul se puede eder l posiin pr lmenr o reuperr informinF v informin lE mend en un posiin de memori es su ontenidoF v pigur IFT muestr un memoE ri de omputdor que onst de IFyHH posiiones en memori on direiones de y WWWF il ontenido de ests direiones o poE siiones de memori se llmn plrsD de modo que existen plrs de VD ITDQP y TR itsF or onsiguienteD si trj on un mquin de QP itsD signi( que en d posiin de memori de su omputdor puede lojr QP itsD es deir QP dgitosD ien eros o unosF iempre que un nuev informin se lmen en un posiinD se destruye @despreeA ulE quier informin que en ell huier y no se puede reuperrF v direin es permnente y niD el ontenido puede mir mientrs se ejeut un progrmF v memori entrl de un omputdor puede tener desde unos entenres de millres de ytes hst millones de ytesF gomo el yte es un unidd elementl de lmenmientoD se utilizn mltiplos pr de(nir el tmo de l memori entrlX uiloEyte @uf o uA igul IFHPR ytes @P9AEprtiE mente se tomn IFHHHE y wegyte @wf o wA igul IFHPR x IFHPR ytes @P9A Eprtimente se onsider un IFHHHFHHHEF

7.1.1. Concepto de puntero o apuntador


il vlor de d vrile est lmendo en un lugr determindo de l memoriD rterizdo por un direin @que se suele expresr on un nmero hexdeimlAF il ordendor mntiene un tl de direiones @ver l TFIA que relion el nomre de d vrile on su direin en l memoriF qris los nomres de ls vriles @identi(doresAD de ordinrio no he flt que el progrmdor se preoupe de l direin de memori donde estn lmendos sus dtosF in emrgoD en ierts osiones es ms til trjr on ls direiones que on los propios nomres de ls vrilesF il lenguje g dispone del operdor direin @8A que permite determinr l direin de un vrileD y de un tipo espeil de vriles destinds ontener direiones de vrilesF ists vriles se llmn punteros o puntdores @en ingls pointersAF es puesD un puntero es un vrile que puede ontener l direin de otr vrileF or supuestoD los punteros estn lmendos en lgn lugr de l memori y tienen su propi direin @ms delnte se ver que existen punteros punterosAF e die que un puntero punt un vrile si su ontenido es l direin de es vrileF n puntero oup de ordinrio R ytes de memoriD y se dee delrr o de(nir de uerdo on el tipo del dto l que puntF or ejemploD un puntero un vrile de tipo int se delr del siguiente modoX int BdireY SU

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

SV

lo ul quiere deir que prtir de este momentoD l vrile dire podr ontener l direin de ulquier vrile enterF v regl nemotni es que el vlor l que punt dire @es deir BdireD omo luego se verAD es de tipo intF vos punteros longD hrD )ot y doule se de(nen nlogmente los punteros intF

7.1.2. Operadores direccin (&) e indireccin (*)


gomo se h dihoD el lenguje g dispone del operdor direin @8A que permite hllr l direin de l vrile l que se pliF n puntero es un verdder vrileD y por tnto puede mir de vlorD es deirD puede mir l vrile l que puntF r eder l vlor depositdo en l zon de memori l que punt un puntero se dee utilizr el operdor indirein @BAF or ejemploD supngse ls siguientes delriones y sentenisD int iD jD BpY GG p es un puntero int p a 8iY GG p ontiene l direin de i Bp a IHY GG i tom el vlor IH p a 8jY GG p ontiene hor l direin de j Bp a EPY GG j tom el vlor EP vs onstntes y ls expresiones no tienen direinD por lo que no se les puede plir el operdor @8AF mpoo puede mirse l direin de un vrileF vos vlores posiles pr un puntero son ls direE iones posiles de memoriF n puntero puede tener vlor H @equivlente l onstnte simli prede(nid xvvAF xo se puede signr un direin solut diretmente @hr que her un stingAF vs siguientes sentenis son ileglesX p a 8QRY GG ls onstntes no tienen direin p a 8@iCIAY GG ls expresiones no tienen direin 8i a pY GG ls direiones no se pueden mir p a IUTSRY GG hr que esriir p a @int BAIUTSRY r imprimir punteros on l funin printf@A se deen utilizr los formtos 7u y 7pD omo se ver ms delnteF xo se permiten signiones direts @sin stingA entre punteros que puntn distintos tipos de vrilesF in emrgoD existe un tipo inde(nido de punteros @void BD o punteros voidAD que puede signrse y l que puede signrse ulquier tipo de punteroF or ejemploX int BpY doule BqY void BrY p a qY GG ilegl p a @int BAqY GG legl p a r a qY GG legl

7.1.3. Aritmtica de punteros.


gomo y se h vistoD los punteros son uns vriles un poo espeilesD y que gurdn informin !no slo de l direin l que puntn!D sino tmin del tipo de vrile lmendo en es direinF isto impli que no vn estr permitids ls operiones que no tienen sentido on direiones de vrilesD omo multiplir o dividirD pero s otrs omo sumr o restrF edems ests operiones se relizn de un modo orretoD pero que no es el ordinrioF esD l senteniX p a pCIY he que p punte l direin siguiente de l que puntD teniendo en uent el tipo de dtoF or ejemploD si el vlor puntdo por p es short int y oup P ytesD el sumr I p impli dir P ytes l direin que ontieneD mientrs que si p punt un douleD sumrle I impli dirle V ytesF min tiene sentido l difereni de punteros l mismo tipo de vrileF il resultdo es l distni entre ls direiones de ls vriles puntds por ellosD no en ytes sino en dtos de ese mismo tipoF vs siguientes expresiones tienen pleno sentido en gX

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

SW

p a p C IY p a p C iY p Ca IY pCCY

7.1.4. Puntero nulo


xormlmente un puntero iniilizdo deudmente punt lgun posiin espe( de l memoriF in emrgoD un puntero no iniilizdoD omo ulquier vrileD tiene un vlor letorio hst que se iniiliz el punteroF in onseueniD ser preiso segurrse que ls vriles puntero utilien direiones de memori vlidF ixisten dos tipos de punteros espeiles muy utilizdos en el trtmiento de sus progrmsX los punteros v o i d y null @nuloAF n puntero nulo no punt ningun prteD dto vlidoD en prtiulrD es deirD un puntero nulo no direion ningn dto vlido en memori F n puntero nulo se utiliz pr proporionr un progrm un medio de onoer undo un vrile puntero no direion un dto vlidoF r delrr un puntero nulo se utiliz l mro xvv D de(nid en los rhivos de eer hipFr D hsyFrD hvsfFr y sxqFr F e dee inluir uno o ms de estos rhivos de eer ntes de que se pued utilizr l mro xvv F ehor ienD se puede de(nir xvv en l prte superior de su progrm @ o en un rhivo de eer personlA on l lneX 5de(ne xvv n sistem de iniilizr un vrile puntero nulo esX hr Bp a xvvY elguns funiones g tmin devuelven el vlor xvv si se enuentr un errorF e pueden dir test pr el vlor xvv omprndo el puntero on xvvX hr BpY p a mllo@lPlBsizeof@hrAAY @ p aa x v v A puts @4irror de signin de memori4A Y o ien if @p 3 a x v v A F F F G B este if es equivlente if @ p A F X BG ytr form de delrr un puntero nulo es signr un vlor de yF or ejemploD int Bptr a @int BA G B ptr es un puntero nulo B GY il modelo @stingA nterior vrile punteroF @ int BI D no es neesrioD hy un onversin estndr de y un int Bptr a y Y xun se utiliz un puntero nulo pr referenir un vlorF gomo ntes se h omentdoD los punteros nulos se utilizn en un test ondiionl pr determinr si un puntero se h iniilizdoF in el ejemplo if @ptrA printf@4Ior de l vrile puntd por ptr esX dn4DBptrAY se imprime un vlor si el puntero es vlido y no es un puntero nuloF vos punteros nulos se utilizn on freueni en progrms on rrys de punterosF gd posiin del rry se iniiliz xvv Y despus se reserv memori dinmimente y se sign l posiin orrespondiente del rryD l direin de l memoriF in g se puede delrr un puntero de modo que punte ulquier tipo de dtoD es deirD no se sign un tipo de dto espe(oF il mtodo es delrr el puntero omo un puntero vold BD denomindo puntero genrioF void BptrY il puntero ptr puede direionr ulquier posiin en memoriD pero el puntero no est unido un tipo de dto espe(oF he modo similrD los punteros void pueden direionr un vrile )otD un hr D o un posiin ritrri o un denF xo onfundir punteros void y xvv F n puntero nulo no direion ningin dto vlidoF n puntero void direion dtos de un tipo no espei(doF n puntero void se puede igulr nulo si no se direion ningn dto vlidoF xulo es un vlorY void es un tipo de dtoF

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TH

7.2. Vectores, matrices y cadenas de caracteres


n rry @tmin onoido omo rregloD vetor o mtrizA es un modo de mnejr un grn ntidd de dtos del mismo tipo jo un mismo nomre o identi(dorF or ejemploD medinte l senteniX doule IHY se reserv espio pr IH vriles de tipo douleF vs IH vriles se llmn y se ede un u otr por medio de un sundieD que es un expresin enter esrit ontinuin del nomre entre orhetes FFFF v form generl de l delrin de un vetor es l siguienteX tipo nomrenumeroelementosY vos elementos se numern desde H hst @numeroelementosEIAF il tmo de un vetor puede de(nirse on ulquier expresin onstnte enterF r de(nir tmos son prtiulrmente tiles ls onstntes simlisF gomo y se h dihoD pr eder un elemento del vetor st inluir en un expresin su nomre seguido del sundie entre orhetesF e onsider ml estilo delrr l tll de los vetores on literles de enteroF is preferile utilizr lgun identi(dor pr l tllD pero teniendo en uent que este dee orresponder u e un onstnteX 5de(ne evve VH FFF hr evveY xo se puede usr vriles pr signr el tmo de un mtrizD pr her mtries de tmo vrile se usn otros proedimientosD on punteros y signion dinmi de memoriF por lo que il tmo de los vetores siempre se determin en tiempo de ompilionF in un vetor podemos lmenr un ntidd de elementos menor o igul que l delrd en su piE ddD nun myorD si lmenmos menos elementos de los que enD neesits lgun vrile uxilir que te permit ser en todo momento unts de ls elds ontienen informionF i des un elementoD hs de inrementr tu mismo el vlor de es vrileF in g no se puede operr on todo un vetor o tod un mtriz omo un ni entiddD sino que hy que trtr sus elementos uno uno por medio de ules for o whileF vos vetores @mejor dihoD los elementos de un vetorA se utilizn en ls expresiones de g omo ulquier otr vrileF ijemplos de uso de vetores son los siguientesX S a HFVY Wa QHF B SY H a QF B W E SGWY Q a @H C WAGQY n den de rteres no es sino un vetor de tipo hrD on lgun prtiulridd que onviene resltrF vs dens suelen ontener texto @nomresD frsesD etFAD y ste se lmen en l prte iniil de l den @ prtir de l posiin ero del vetorAF r seprr l prte que ontiene texto de l prte no utilizdD se utiliz un rter (n de texto que es el rter nulo @9H9A segn el digo egssF iste rter se introdue utomtimente l leer o iniilizr ls dens de rteresD omo en el siguiente ejemploX hr iuddPH a 4n estin4Y donde los IQ rteres del nomre de est iudd se de un deimourtoX el 9H9F il resto del espio reservdo !hst l posiin iuddIW! no se utilizF he modo nlogoD un den onstnte tl omo 4mr4 oup R ytes @pr ls Q letrs y el 9H9AF vs mtries se delrn de form nlogD on orhetes independientes pr d sundieF v form generl de l delrin esX tipo nomrenumero(lsnumeroolumnsY

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TI

donde tnto ls (ls omo ls olumns se numern tmin prtir de HF v form de eder los elementos de l mtriz es utilizndo su nomreD seguido de ls expresiones enters orrespondientes los dos sundiesD entre orhetesF in g tnto los vetores omo ls mtries dmiten los tipos de ls vriles eslres @hrD intD longD )otD douleD etFAD y los modos de lmenmiento utoD extern y sttiD on ls misms rterstis que ls vriles normles @eslresAF xo se dmite el modo registerF vos rrys stti y extern se iniilizn ero por defetoF vos rrys uto pueden no iniilizrseX depende del ompildor onreto que se est utilizndoF vs mtries en g se lmenn por (lsD en posiiones onseutivs de memoriF in iert formD un mtriz se puede ver omo un vetor de vetoresE(lF i un mtriz tiene x (ls @numerds de H xEIA y w olumns @numerds de H l wEIAD el elemento @iD jA oup el lugrX posiinelemento@HD HA C i B w C j e est frmul se le llm frmul de direionmiento de l mtrizF in g pueden de(nirse rrys on tntos sundies omo se deseeF or ejemploD l senteniD doule QSUY helr un hipermtriz on tres sundiesD que podr verse omo un onjunto de Q mtries de dimensin @SxUAF in l frmul de direionmiento orrespondienteD el ltimo sundie es el que vr ms rpidmenteF

7.2.1. Relacin entre vectores y punteros


ixiste un relin muy estreh entre los vetores y los punterosF he hehoD el nomre de un vetor es un puntero @un puntero onstnteD en el sentido de que no puede puntr otr vrile distint de qull l que puntA l direin de memori que ontiene el primer elemento del vetorF upngnse ls siguientes delriones y sentenisX doule vetIHY doule BpY FFF p a 8vetHY FFF il identi(dor vetD es deir el nomre del vetorD es un puntero l primer elemento del vetor vet F isto es lo mismo que deir que el vlor de vet es 8vetHF ixisten ms puntos de oinideni entre los vetores y los punterosX uesto que el nomre de un vetor es un punteroD oedeer ls leyes de l ritmti de punterosF or tntoD si vet punt vetHD @vetCIA puntr vetID y @vetCiA puntr vetiF epromente @y esto result quizs ms sorprendenteAD los punteros se les pueden poner sundiesD igul que los vetoresF es puesD si p punt vetH se puede esriirX pQapPBPFHY ! GG equivlente vetQavetPBPFHY i se supone que pavetD l relin entre punteros y vetores puede resumirse omo se indi en ls lnes siguientesX Bp equivle vetHD Bvet y pH B@pCIA equivle vetID B@vetCIA y pI B@pCPA equivle vetPD B@vetCPA y pP ue se pued her no signi( que se onsejle herloF in solutoF is msX dees evitr eder elementos on indies de vetor fuer de rngoF i no onviene her lgo si por que no omprue g si el siD el %ndie est en el rngo orreto ntes de eder los elementos yD en so ontrrioD nos sel un errorc or e(ieniF n progrm que mneje n vetores eder sus elementosD muy prolementeD en numeross osionesF i se h de ompror si el indie est en el rngo de vlores vlidosD d eso se penlizr on un pr de ompriones y el progrm se ejeutr ms lentmenteF g sri( seguridd por veloiddD de hi que teng iert fm @justi(dismA de lenguje peligrosoF

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TP

7.2.2. Relacin entre matrices y punteros


in el so de ls mtries l relin on los punteros es un poo ms omplidF upngse un delrin omo l siguiente int mtSQD BBpD BqY il nomre de l mtriz @mtA es un puntero l primer elemento de un vetor de punteros mt @por tntoD existe un vetor de punteros que tiene tmin el mismo nomre que l mtrizAD uyos elementos ontienen ls direiones del primer elemento de d (l de l mtrizF il nomre mt es pues un puntero punteroF il vetor de punteros mt se re utomtimente l rerse l mtrizF es puesD mt es igul 8mtHY y mtH es 8mtHHF enlogmenteD mtI es 8mtIHD mtP es 8mtPHD etF v direin se sore l que se direionn todos los elementos de l mtriz no es mtD sino 8mtHHF eurdese tmin queD por l relin entre vetores y punterosD @mtCiA punt mtiF eurdese que l frmul de direionmiento de un mtriz de x (ls y w olumns estlee que l direin del elemento @iD jA viene dd porX direin @iD jA a direin @HD HA C iBw C j eniendo esto en uent y hiendo BBp a mtY se tendrn ls siguientes forms de eder los elementos de l mtrizX Bp es el vlor de mtH B@pCIA es el vlor de mtI BBp es mtHH BB@pCIA es mtIH B@B@pCIACIA es mtII or otr prteD si l mtriz tiene w olumns y si se he q a 8mtHH @direin se de l mtrizF eurdese que esto es diferente del so nterior p a mtAD el elemento mtij puede ser edido de vris formsF fst reordr que diho elemento tiene por delnte i (ls ompletsD y j elementos de su (lX B@q C wBi C jA GG frmul de direionmiento B@mti C jA GG primer elemento (l i desplzdo j elementos @B@mt C iAAj GG j equivle sumr j un puntero B@@B@mt C iAA C jA ods ests reliones tienen un grn importniD pues implin un orret omprensin de los punteros y de ls mtriesF he tods formsD hy que indir que ls mtries no son del todo idntis los vetores de punterosX i se de(ne un mtriz explitmente por medio de vetores de punterosD ls (ls pueden tener diferente nmero de elementosD y no qued grntizdo que estn ontigus en l memori @unque se puede her que s lo senAF xo ser pues posile en este so utilizr l frmul de direionmiento y el eder por olumns los elementos de l mtrizF

7.2.3. Inicializacin de vectores y matrices.


v iniilizin de un rry se puede her de vris mnersX helrndo el rry omo tl e iniilizndolo luego medinte letur o signin por medio de un ule forX doule vetxY FFF for@i a HY i ` xY iCCA snf@4 7lf4D 8vetiAY FFF ! sniilizndolo en l mism delrinD donde es neesrio poner un punto deiml trs d ifrD pr que st se reonoid omo un vlor de tipo )ot o douleF en l formX

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TQ

doule vT a {IFD PFD QFD QFD PFD IF}Y )ot d a {IFPD QFRD SFI}Y GG dQ est implito int fIHH a {H}Y GG todo se iniiliz H int hIH a {ID PD Q}Y GG restntes elementos H int mtQP a {{ID P}D {QD R}D {SD T}}Y eurdese queD l igul que ls vriles eslres orrespondientesD los rrys on modo de lmenmiento externl y stti se iniilizn ero utomtimente en el momento de l delrinF in emrgoD esto no est grntizdo en los rrys utoD y el que se hg o no depende del ompildorF

7.2.4. ORDENACIN DE LISTAS


v ordenin de rrys es otr de ls tres usules en l myor de los progrmsF v ordenin o lsiE (in es el proedimiento medinte el ul se disponen los elementos del rry en un orden espei(doD tl omo orden lftio u orden numrioF n diionrio es un ejemplo de un list ordend lftimenteD y un gend telefni o list de uents de un no es un ejemplo de un list ordend numrimenteF il orden de lsi(in u ordenin puede ser sendente o desendenteF ixisten numerosos lgoritmos de ordenin de rrysX inserinD urujD seleinD rpido @quik sortADfusin @mergeADmontulo @hepADshellD etF

7.2.4.1. Algoritmo de la burbuja


v ordenin por uruj es uno de los mtodos ms files de ordeninF il mtodo @lgoritmoA de ordenin es muy simpleF e ompr d elemento del rry on el siguiente @por prejsAD si no estn en el orden orretoD se intermin entre s sus vloresF il vlor ms pequeo)ot hst l prte superior del rry omo si fuer un uruj en un vso de refreso on gsF v ordenin de rrys requiere siempre un intermio de vloresD undo stos no se enuentrn en el orden previstoF iD por ejemploD en l primer psd T y R no estn ordendos se hn de intermir sus vloresF uponiendo que el rry se denomin listX listH aTY listl aRY listP aIHY listQ aPY listR a VY pr intermir dos vloresD se neesit utilizr un terer vrile uxilir que onteng el resultdo inmeditoF esD por ejemploD si ls dos vriles son listH y listID el siguiente digo reliz el intermio de dos vrilesX uxalistHY listHalistIY listIauxY

7.2.5. BSQUEDA EN LISTAS


vos rrys @lists y tlsA son uno de los medios priniples por los ules se lmenn los dtos en progrms g F heido est usD existen operiones fundmentles uyo trtmiento es impresindile onoerF ists operiones eseniles sonX l squed de elementos y l ordenin o lsi(E in de ls listsF v squed de un elemento ddo en un rry @list o tlA es un pliin muy usul en el desrrollo de progrms en g F hos lgoritmos tpios que relizn est tre son l squed seuenil o en serie y l squed inri o diotmiF v squed seuenil es el mtodo utilizdo pr lists no ordendsD mientrs que l squed inri se utiliz en rrys que y estn ordendosF

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TR

7.2.5.1. Bsqueda secuencial


iste lgoritmo us el elemento ddoD reorriendo seuenilmente el rry desde un elemento l siguienE teD omenzndo en l primer posiin del rry y se detiene undo se enuentr el elemento usdo o ien se lnz el (nl del rryF or onsiguienteD el lgoritmo dee ompror primero el elemento lmendo en l primer posiin del rryD ontinuin el segundo elemento y s suesivmenteD hst que se enuentr el elemento usdo o se termin el reorrido del rryF ist tre repetitiv se relizr on ulesD en nuestro so on el ule whileF elgoritmo fusquede e utiliz un vrile lgiD en g tipo intD denomind inontrdoD que indi si el elemento se enontr en l squedF v vrile inontrdo se iniiliz flso@HA y se tiv verddero@IA undo se enuentr el elementoF e utiliz un operdor nd @en 88AD que permit evlur ls dos ondiiones de terminin de l squedX elemento enontrdo o no hy ms elementos @ndie del rry exede l ltimo vlor vlido del mismoAF gundo el ule se terminD el elemento o ien se h enontrdoD o ien no se h enontrdoF i el elemento se h enontrdoD el vlor de inontrdo ser verddero y el vlor del ndie ser l posiin del rry @ndie del elemento enontrdoAF i el elemento no se h enontrdoD el vlor de inontrdo ser flso y se devuelve el vlor EI l progrm llmdorF fusquede iniio oner inontrdo a flso oner sndie a primer indie del rry mientrs @ilemento no inontrdoA y @sndie ` ltimoA her si @eindie a ilementoA entones oner inontrdo erddero si no snrementr sndie (n mientrs si @inontrdoA entones retorno @sndieA si no retorno @EIA (nEsi in il lgoritmo nterior implementdo omo un funin pr un rry vist esX enum {peviD i}Y int fusquede@int vistweD int ilementoA { int inontrdo a peviY int i a H Y G B fsqued en l list hst que se enuentr el elemento o se lnz el (nl de l listF BG while @@3inontrdoA 8 8 @i ` a weEIAA { inontrdo a @@ei a a ilementoAciXiCCAY GBi se enuentr el elemento se devuelve l posiin en l listF B G } if @inontrdoA return @iAY else return @EIAY } in el ule while se h utilizdo el operdo ondiionl cX pr signr i si se enuentr el elementoD o ien inrementr el ndie iF

7.3. cadenas de caracteres.


vs dens de g son vetores de rteres @elementos de tipo hrA on un peuliriddX el texto de l den termin siempre en un rter nuloF il rter nulo tiene odigo egss H y podemos representrlo o tnto on el entero H omo on el rter 9H9 @reuerd que 9H9 es un form de esriir el vlor entero HAF yjo3 xo onfunds 9H9 on 9H9X el primero vle H y el segundo vle RVF

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TS

vs dens se delrn omo vetores de rteresD si que dees proporionr el numero mximo de rteres que es pz de lmenrX su piddF ist denD por ejemploD se delr on pidd pr lmenr IH rteresX hr IHY uedes iniilizr l den on un vlor en el momento de su delrionX hr IH a 4den4Y remos delrdo omo un vetor de IH rteres y lo hemos iniilizdo signndole l den 4den4F pijteX hemos lmendo en un den de menos de IH rteresF xo hy prolemX l longitud de l den lmend en es menor que l pidd de F e simple vistD 4den4 oup T ytesD pues ontmos en ell T rteresD pero no es s %F in reliddD 4den4 oup U ytesX los T que orresponden los T rteres que ves ms uno orrespondiente un rter nulo l (nlD que se denomin termindor de den y es invisileF euerdD puesD que hy dos vlores reliondos on el tmo de un denX su piddD que es l tll del vetor de rteresY su longitudD que es el numero de rteres que ontieneD sin ontr el termindor de l denF v longitud de l den dee ser siempre estritmente menor que l pidd del vetor pr no desordr l memori reservdF por que tod est ompliion del termindor de denc vo norml l trjr on un vrile de tipo den es que su longitud vri onforme evoluion l ejeuion del progrmD pero el tmo de un vetor es (joF or ejemploD si hor tenemos en el texto 4den4 y n ms trde deidimos gurdr en ell el texto 4texto4D que tiene un rter menosD il truo del termindor h permitido que l den derezF odemos onseguir tmien que rez voluntdF F F pero siempre que no se rese l pidd del vetorF ue ourre si intentmos iniilizr un zon de memori reservd pr solo IH hrs on un den de longitud myor que Wc istremos ometiendo un grvisimo error de progrmion queD posilementeD no detete el o ompildorF vos rteres que no en en se esrien en l zon de memori que sigue l zon oupd por l vrileF puede que modi(ques el ontenido de otrs vriles o que trtes de esriir en un zon que te est vetdD on el onsiguiente orto de l ejeuion del progrmF gomo result que en un vrile on pidd prD por ejemploD VH rteres solo en relmente UW rteres prte del nuloD doptremos un urios prti l delrr vriles de den que nos permitir lmenr los VH rteres @dems del nuloA sin rer un onstnte onfusion on respeto l numero de rteres que en en ellsX 5inlude `stdioFhb 5de(ne wevyx VH int min@voidA { hr den wevyxCI Y GB eservmos VI rteresX VH rteres y el termindor BG return HY } vos identi(dores de vetores esttios se onsidern punteros inmutles yD (n de uentsD ls dens son vetores esttios r efetur un opi de un denD hs de herlo rter rterF 5de(ne wevyx IH int min@voidA { hr originl wevyxCI a 4den4Y hr opiwevyxCIY int iY for @i a HY i `a wevyxY iCCA { opii a originl iY if @opii aa 9H9A rekY }

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TT

return HY } iste progrmD pide dos dens y onten l segund l primerX 5inlude `stdioFhb 5de(ne wevyx VH int min@voidA { hr wevyxCID wevyxCIY int longD longY int iY printf @4sntrodue un texto @mxF 7d rsFAX 4D wevyxAY gets@AY printf @4sntrodue otro texto @mxF 7d rsFAX 4D wevyxAY gets@AY long a strlen@AY long a strlen@AY for @iaHY i`longY iCCA longCi a iY longClong a 9H9Y printf @4gontenion de mosX 7s4D AY return HY }

7.3.1. Declaracin de variables de cadena


vs dens se delrn omo los restntes tipos de rrysF il operdor post(jo ontiene el tmo mximo del ojetoF il tipo seD nturlmenteD es hrD o ien unsigned hrX hr texto VI Y hr orden RH Y unsigned hr dtosY G B un lne de rteres de texto B G G B den utilizd pr reiir un orden del teldo B G G B puede ontener ulquier rter egss B G il tipo unsigned hr puede ser de inters en quellos sos en que los rteres espeiles presentes puedn tener el it de orden lto tivdoF i el rter se onsider on signoD el it de myor peso @orden ltoA se interpret omo hit de signo y se puede propgr l posiin de myor orden @pesoA del nuevo tipoF yserve que el tmo de l den h de inluir el rter HF in onseueniD pr de(nir un rry de rteres que onteng l den 4eghip4D esri hr ngden U Y

7.3.2. Inicializacin de variables de cadena


odos los tipos de rrys requieren un iniilizin @iniiinA que onsiste en un list de vlores seprdos por oms y enerrdos entre llvesF hr textoVI a 4 isto es un denF4Y hr textodemoPSS a 4ist es un den muy lrg4Y hr dentest a 4gul es l longitud de est denc4Y

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TU

vs dens texto y textodemo pueden ontener VH y PSR rteres respetivmente ms el rter nuloF v terer denD dentestD se delr on un espei(in de tipo inomplet y se omplet slo on el iniilizdorF hdo que en el literl hy QT rteres y el ompildor de el rter 9H9D un totl de QU rteres se signrn dentestF ehor ienD un den no se puede iniilizr fuer de l delrinF or ejemploD si trt de her nden a 4efg4 Y g le dr un error l ompilrF v rzn es que un identi(dor de denD omo ulquier identi(dor de rry se trt omo un vlor de direinD omo un puntero onstnteF gmo se puede iniilizr un den fuer de l delurinc ws delnte se verD pero podemos indir que ser neesrio utilizr un funin de den denomind strpy @ A F

7.3.3. LECTURA DE CADENAS


v letur usul de dtos se reliz on l funin snf @ A D undo se pli dtos den el digo de formto es 7sFv funin d por termind l den undo enuentr un espio @un lnoA o (n de lneF isto puede produir nomls l no poder ptr dens on lnos entre rteresF esD por ejemploD trte de ejeutr el siguiente progrmX G B iste progrm muestr mo snf lee dtos den B G 5inlude `stdioFhb void min@A { hr nomre QHY G B he(ne rry de rteres B G snf @4 7s4D nomreAY G B veer l den B G print f @ 4 7s n4D nomreAY G B isriir l den nomre B G } il progrm de(ne nomre omo un rry de rteres de QH elementosF upong que introdue l entrd epe wrgollesDundo ejeut el progrm se visulizr en pntll epeFis deirD l plr wrgolles no se h signdo l vrile den nomreF v rzn es que l funin snf @ A termin l operin de letur siempre que se enuentr un espio en lno o (n de lneF es puesD Dulser l mejor form pr letur de densD undo ests dens ontienen ms de un plr @so muy usulAc il mtodo reomenddo ser utilizr un funin denomind gets @ IF v funin gets @ Apermitir leer l den ompletD inluyendo ulquier espio en lnoD termin l leer el rter de (n de lneF il prototipo de l funin est en el rhivo st d v y F h F v funin sign l den l rgumento trnsmitido l funinD que ser un rry de rteres o un puntero @hrBA memori lireD on un nmero de elementos su(iente pr gurdr l den ledF i h hido un error en l letur de l denD devuelve xvvF G B vetur de rteres hstd (n de lned B G hr VI Y gets @A Y

7.4. Estructuras
n estrutur es un form de grupr un onjunto de dtos de distinto tipo jo un mismo nomre o identi(dorF or ejemploD supngse que se dese diser un estrutur que gurde los dtos orresponE dientes un lumno de primeroF ist estruturD l que se llmr lumnoD deer gurdr el nomreD l direinD el nmero de mtrulD el telfonoD y ls nots en ls IH signtursF gd uno de estos dtos se denomin miemro de l estruturF il modelo o ptrn de est estrutur puede rerse del siguiente modoX strut lumno { hr nomreQIY hr direionPIY unsigned long nomtriulY unsigned long telefonoY )ot notsIHY }Y

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TV

il digo nterior re el tipo de dto lumnoD pero n no hy ningun vrile delrd on este nuevo tipoF ysrvese l neesidd de inluir un rter @YA despus de errr ls llvesF r delrr dos vriles de tipo lumno en g se dee utilizr l senteni inluyendo ls plrs strut y lumno @en gCC st utilizr l plr lumnoAX strut lumno lumnoID lumnoPY GG esto es g lumno lumnoID lumnoPY GG esto es g CC donde tnto lumnoI omo lumnoP son un estruturD que podr lmenr un nomre de hst QH E rteresD un direin de hst PH rteresD el nmero de mtrulD el nmero de telfono y ls nots de ls IH signtursF min podrn herse de(nido lumnoI y lumnoP l mismo tiempo que se de(n l estrutur de tipo lumnoF r ello str her hehoX strut lumno { hr nomreQIY hr direionPIY unsigned long nomtriulY unsigned long telefonoY )ot notsIHY } lumnoID lumnoPY r eder los miemros de un estrutur se utiliz el operdor punto @FAD preedido por el nomre de l estrutur y seguido del nomre del miemroF or ejemploD pr dr vlor l telefono del lumno lumnoI el vlor WHQRSTD se esriirX lumnoIFtelefono a WHQRSTY y pr gurdr l direin de este mismo lumnoD se esriirX lumnoIFdireion a 4gG enny vne IDPEe4Y in este soD nuevolumno es un estrutur de tipo lumnoD y lseQHH es un vetor de estruturs on espio pr lmenr los dtos de QHH lumnosF il nmero de mtrul del lumno PTR podr ser edido omo lsePTRFnomtriulF vos miemros de ls estruturs pueden ser vriles de ulquier tipoD inluyendo vetores y mtriesD e inluso otrs estruturs previmente de(nidsF vs estruturs se diferenin de los rrys @vetores y mtriesA en vrios spetosF or un prteD los rrys ontienen informin mltiple pero homogneD mientrs que los miemros de ls estruturs pueden ser de nturlez muy diferenteF edemsD ls estruturs permiten ierts operiones gloles que no se pueden relizr on rrysF or ejemploD l senteni siguienteX lsePWV a nuevolumnoY he que se opien todos los miemros de l estrutur nuevolumno en los miemros orrespondientes de l estrutur lsePWVF ists operiones gloles no son posiles on rrysF e pueden de(nir tmin punteros estrutursX strut lumno BptY pt a 8nuevolumnoY ehorD el puntero pt punt l estrutur nuevolumno y esto permite un nuev form de eder sus miemros utilizndo el operdor )eh @EbAD onstituido por los signos @EA y @bAF esD pr eder l telfono del lumno nuevolumnoD se puede utilizr ulquier de ls siguientes sentenisX ptEbtelefonoY @BptAFtelefonoY

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

TW

donde el prntesis es neesrio por l myor prioridd del operdor @FA respeto @BAF vs estruturs dmiten los mismos modos utoD extern y stti que los rrys y ls vriles eslresF vs regls de iniilizin ero por defeto de los modos extern y stti se mntienenF or lo demsD un estrutur puede iniilizrse en el momento de l delrin de modo nlogo omo se iniilizn los vetores y mtriesD por medio de vlores enerrdos entre llves {}F or ejemploD un form de delrr e iniilizr l vez l estrutur lumnonuevo podr ser l siguienteX strut lumno { hr nomreQIY hr direionPIY unsigned long nomtriulY unsigned long telefonoY )ot notsIHY } lumnonuevo a {4wike mith4D 4n wrtn VUD Po e4D TPRIWD RPIUWR}Y dondeD omo no se proporion vlor pr ls notsD sts se iniilizn eroF vs estruturs onstituyen uno de los spetos ms potentes del lenguje gF in est sein se h trtdo slo de her un reve presentin de sus posiiliddesF gCC generliz este onepto inluyendo funiones miemro dems de vriles miemroD llmndolo lseD y onvirtindolo en l se de l progrmin orientd ojetosF ls n vrile de tipo estrutur sirve pr muy pooD lo relmente interesnte son ls tlsD es deir los rrys de estruturs gonsideriones iempre que neesite informin de distinto tipo neesito un estrutur gundo lmene informin del mismo tipo @pueden ser registrosA uyo tmo mximo es onoido de ntemno uso rrys @vetoresA

7.5. Tipos denidos por el usuario


gon l delrin 4typedef4 se puede soir explitmente un identi(dor un tipoF typedef int enteroY typedef int vetorIHY typedef hr BdenY typedef )ot mtrizIHHIHHY hespusD los identi(dores se pueden usr pr delrr vriles y funionesX vetor vY mtriz D D Y e pueden onstruir jerrqus de tiposX typedef doule eslrY typedef eslr vetorxY typedef vetor mtrizxY il uso de 4typedef4 tiene lguns ventjsX ermite revir expresiones lrgsF pilit l doumentin del progrmF pilit l modi(in del progrm yD por tntoD su trnsporte entre mquins diferentesF ermite l progrmdor pensr en trminos de l pliin @lto nivelA y no en trminos de l representin internF ist plr reservd del lenguje g sirve pr l rein de nuevos nomres de tipos de dtosF wedinte est delrin es posile que el usurio de(n un serie de tipos de vriles propiosD no inorpordos en el lenguje y que se formn prtir de tipos de dtos y existentesF or ejemploD l delrinX typedef int ixiyY de(ne un tipo de vrile llmdo ixiy que orresponde intF gomo ejemplo ms ompletoD se pueden delrr medinte typedef ls siguientes estrutursX 5de(ne wexyw QH 5de(ne weevwxy RHH strut slumno { GG se de(ne l estrutur slumno hr nomrewexywY short eddY }Y typedef strut slumno evwxyY GG evwxy es un nuevo tipo de vrile typedef strut slumno BevwxyY strut lse {

CAPTULO 7.

TIPOS DE DATOS DERIVADOS.

UH

evwxy lumnosweevwxyY hr nomprofesorwexywY }Y typedef strut lse gveiY typedef strut lse BgveiY gon est de(niin se ren ls utro plrs reservds pr tiposD denominds evwxy @un estruE turAD evwxy @un puntero un estruturAD gvei y gveiF ehor podr de(nirse un funin del siguiente modoX int ndelse@evwxy unlumnoD gvei lseA { evwxy otrolumnoY otrolumno a @evwxyA mllo@sizeof@evwxyAAY otrolumnoEbedd a PQY FFF lseEblumnosHalumnoY FFF return HY } il omndo typedef yud prmetrizr un progrm ontr prolems de portiliddF qenerlmente se utiliz typedef pr los tipos de dtos que pueden ser dependientes de l instlinF min puede yudr doumentr el progrm @es muho ms lro pr el progrmdor el tipo evwxyD que un tipo delrdo omo un puntero un estrutur omplidAD hindolo ms legileF

Captulo 8

Funciones.
8.1. Utilidad de las funciones.
gomo se expli un funin es un prte de digo independiente del progrm prinipl y de otrs funionesD que puede ser llmd envindole unos dtos @o sin envirle ndAD pr que relie un determind tre yGo proporione unos resultdosF vs funiones son un prte muy importnte del lenguje gF in los prtdos siguientes se desrien los spetos ms importntes de ls funionesF ods ls vriles delrds en el uerpo de un funin son 4loles4 es funinX lo existen durnte l ejeuin del loque en el que se hn delrdoF rte esenil del orreto diseo de un progrm de ordendor es su modulriddD esto es su divisin en prtes ms peques de (nlidd muy onretF in g ests prtes de digo reien el nomre de funionesF vs funiones filitn el desrrollo y mntenimiento de los progrmsD evitn erroresD y horrn memori y trjo inneesrioF n mism funin puede ser utilizd por diferentes progrmsD y por tnto no es neesrio reesriirlF edemsD un funin es un prte de digo independiente del progrm prinipl y de otrs funionesD mnteniendo un grn independeni entre ls vriles respetivsD y evitndo errores y otros efetos olterles de ls modi(iones que se introduznF wedinte el uso de funiones se onsigue un digo limpioD lro y elegnteF v deud divisin de un progrm en funiones onstituye un speto fundmentl en el desrrollo de progrms de ulquier tipoF vs funionesD y ompildsD pueden gurdrse en lirersF vs lirers son onjuntos de funiones ompildsD normlmente on un (nlidd nlog o reliondD que se gurdn jo un determindo nomre lists pr ser utilizds por ulquier usurioF

8.2. Denicin de una funcin.


v de(niin de un funin onsiste en l de(niin del digo neesrio pr que st relie ls tres pr ls que h sido previstF v de(niin de un funin se dee relizr en lguno de los (heros que formn prte del progrmF v form generl de l de(niin de un funin es l siguienteX tipovlorderetorno nomrefunion@list de rgumentos on tiposA { delrin de vriles yGo de otrs funiones odigo ejeutle return @expresinAY GG opttivo } v primer lne reie el nomre de enezmiento @hederA y el resto de l de(niin !enerrdo entre llves! es el uerpo @odyA de l funinF gd funin puede disponer de sus propis vrilesD delrds l omienzo de su digoF ists vrilesD por defetoD son de tipo utoD es deirD slo son visiles dentro del loque en el que hn sido de(nidsD se ren d vez que se ejeut l funin y permneen oults pr el resto del progrmF i ests vriles de de(nen omo sttiD onservn su vlor entre distints llmds l funinF min pueden herse visiles l funin vriles gloles de(nids en otro (hero @o en UI

CAPTULO 8.

FUNCIONES.

UP

el mismo (heroD si l de(niin est por dejo de donde se utiliznAD delrndols on l plr lve externF il digo ejeutle es el onjunto de instruiones que deen ejeutrse d vez que l funin es llE mdF v list de rgumentos on tiposD tmin llmdos rgumentos formlesD es un list de delriones de vrilesD preedids por su tipo orrespondiente y seprds por oms @DAF vos rgumentos formles son l form ms nturl y diret pr que l funin rei vlores desde el progrm que l llmD orresponE dindose en nmero y tipo on otr list de rgumentos Elos rgumentos tulesE en el progrm que reliz l llmd l funinF vos rgumentos formles son delrdos en el enezmiento de l funinD pero no pueden ser iniilizdos en lF gundo un funin es ejeutdD puede devolver l progrm que l h llmdo un vlor @el vlor de retornoAD uyo tipo dee ser espei(do en el enezmiento de l funin @si no se espei(D se supone por defeto el tipo intAF i no se dese que l funin devuelv ningn vlorD el tipo del vlor de retorno deer ser voidF v senteni return permite devolver el ontrol l progrm que llmF uede her vris sentenis return en un mism funinF i no hy ningn returnD el ontrol se devuelve undo se lleg l (nl del uerpo de l funinF ve plr lve return puede ir seguid de un expresinD en uyo so st es evlud y el vlor resultnte devuelto l progrm que llm omo vlor de retorno @si he fltD on un onversin previ l tipo delrdo en el enezmientoAF vos prntesis que englon l expresin que sigue return son opttivosF il vlor de retorno es un vlor nioX no puede ser un vetor o un mtrizD unque s un puntero un vetor o un mtrizF in emrgoD el vlor de retorno s puede ser un estruturD que su vez puede ontener vetores y mtries omo elementos miemrosF gomo ejemplo supngse que se v lulr menudo el vlor soluto de vriles de tipo douleF n soluin es de(nir un funin que rei omo rgumento el vlor de l vrile y devuelv ese vlor soluto omo vlor de retornoF v de(niin de est funin podr ser omo sigueX doule vlors@doule xA { if @x ` HFHA return ExY else return xY } in lgunos lengujes de progrmin se llm proedimientos @en ingls proedureA o surutins ls funiones que no devuelven ningn vlorD y se reserv el nomre funin pr ls que s dn un resultdoF

8.3. Declaracin y llamada de una funcin


he l mism mner que en g es neesrio delrr tods ls vrilesD tmin tod funin dee ser delrd ntes de ser utilizd en l funin o progrm que reliz l llmdF he tods formsD hor se ver que qu hy un myor )exiilidd que en el so de ls vrilesF in g l delrin de un funin se puede her de tres mnersX IF wedinte un llmd l funinF in efetoD undo un funin es llmd sin que previmente hy sido delrd o de(nidD es llmd sirve omo delrin suponiendo int omo tipo del vlor de retornoD y el tipo de los rgumentos tules omo tipo de los rgumentos formlesF ist prti es muy peligros @es fuente de numerosos erroresA y dee ser evitdF PF wedinte un de(niin previ de l funinF ist prti es segur si l de(niin preede l llmdD pero tiene el inonveniente de que si l de(niin se mi de lugrD l propi llmd ps ser delrin omo en el so nteriorF QF wedinte un delrin explitD previ l llmdF ist es l prti ms segur y l que hy que trtr de seguir siempreF v delrin de l funin se he medinte el prototipo de l funinD ien fuer de ulquier loqueD ien en l prte de delriones de un loqueF

CAPTULO 8.

FUNCIONES.

UQ

gCC es un poo ms restritivo que gD y olig delrr explitmente un funin ntes de llmrlF v form generl del prototipo de un funin es l siguienteX tipovlorderetorno nomrefunion@list de tipos de rgumentosAY ist form generl oinide sustnilmente on l primer lne de l de(niin Eel enezmientoED on dos peques diferenisX en vez de l list de rgumentos formles o prmetrosD en el prototipo st inluir los tipos de dihos rgumentosF e pueden inluir tmin identi(dores ontinuin de los tiposD pero son ignordos por el ompildorF edemsD un segund difereni es que el prototipo termin on un rter @YAF gundo no hy rgumentos formlesD se pone entre los prntesis l plr voidD y se pone tmin void preediendo l nomre de l funin undo no hy vlor de retornoF vos prototipos permiten que el ompildor relie orretmente l onversin del tipo del vlor de retornoD y de los rgumentos tules los tipos de los rgumentos formlesF v delrin de ls funiones medinte los prototipos suele herse l omienzo del (heroD despus de los 5de(ne e 5inludeF in muhos sos !prtiulrmente en progrms grndesD on muhos (heros y muhs funiones!D se puede rer un (hero @on l extensin FhA on todos los prototipos de ls funiones utilizds en un progrmD e inluirlo on un 5inlude en todos los (heros en que se utilien dihs funionesF v llmd un funin se he inluyendo su nomre en un expresin o senteni del progrm prinipl o de otr funinF iste nomre dee ir seguido de un list de rgumentos seprdos por oms y enerrdos entre prntesisF e los rgumentos inluidos en l llmd se les llm rgumentos tulesD y pueden ser no slo vriles yGo onstntesD sino tmin expresionesF gundo el progrm que llm enuentr el nomre de l funinD evl los rgumentos tules ontenidos en l llmdD los onvierte si es neesrio l tipo de los rgumentos formlesD y ps opis de dihos vlores l funin junto on el ontrol de l ejeuinF il nmero de rgumentos tules en l llmd un funin dee oinidir on el nmero de rgumentos formles en l de(niin y en l delrinF ixiste l posiilidd de de(nir funiones on un nmero vrile o indetermindo de rgumentosF iste nmero se onret luego en el momento de llmrlsF vs funiones printf@A y snf@AD que se vern en l sein siguienteD son ejemplos de funiones on nmero vrile de rgumentosF gundo se llm un funinD despus de relizr l onversin de los rgumentos tulesD se ejeut el digo orrespondiente l funin hst que se lleg un senteni return o l (nl del uerpo de l funinD y entones se devuelve el ontrol l progrm que reliz l llmdD junto on el vlor de retorno si es que existe @onvertido previmente l tipo espei(do en el prototipoD si es neesrioAF eurdese que el vlor de retorno puede ser un vlor numrioD un direin @un punteroAD o un estruturD pero no un mtriz o un vetorF v llmd un funin puede herse de muhs formsD dependiendo de qu lse de tre relie l funinF i su ppel fundmentl es lulr un vlor de retorno prtir de uno o ms rgumentosD lo ms norml es que se llmd inluyendo su nomre seguido de los rgumentos tules en un expresin ritmti o de otro tipoF in este soD l llmd l funin he el ppel de un operndo ms de l expresinF ysrvese mo se llm l funin seno en el ejemplo siguienteX a d B sin@lphA G PFHY in otros sosD no existir vlor de retorno y l llmd l funin se hr inluyendo en el progrm un senteni que onteng solmente el nomre de l funinD siempre seguido por los rgumentos tules entre prntesis y terminndo on un rter @YAF or ejemploD l siguiente senteni llm un funin que multipli dos mtries @nxnA e y fD y lmen el resultdo en otr mtriz gF ysrvese que en este so no hy vlor de retorno @un poo ms delnte se trt on detlle l form de psr vetores y mtries omo rgumentos de un funinAX prodmt@nD eD fD gAY ry tmin sos intermedios entre los dos nterioresD omo suede por ejemplo on ls funiones de enE trdGslid que se vern en l prxim seinF hihs funiones tienen vlor de retornoD reliondo de ordinrio on el nmero de dtos ledos o esritos sin erroresD pero es muy freuente que no se hg uso de diho vlor y que se llmen l modo de ls funiones que no lo tienenF v delrin y l llmd de l funin vlors@A ntes de(nidD se podr relizr de l form siguienteF upngse que se re un (hero prueF on el siguiente ontenidoX

CAPTULO 8.

FUNCIONES.

UR

GG (hero prueF 5inlude `stdioFhb doule vlors@douleAY GG delrin void min @voidA { doule zD yY y a EQHFVY z a vlors@yA C yByY GG llmd en un expresion } v funin vlors@A reie un vlor de tipo douleF il vlor de retorno de dih funin @el vlor soluto de yAD es introduido en l expresin ritmti que lul zF v delrin @doule vlors@douleAA no es estritmente neesri undo l de(niin de l funin est en el mismo rhivo usrF que min@AD y dih de(niin est ntes de l llmdF rototipo de ls funiones il prototipo de l funin es l delrin de l funin gontienen l eer de l funin termind en Y eomendle pr que el ompildor relie omproiones

8.4. Paso de argumentos por valor y por referencia


so de prmetros so por vlor o por opiF so de informin slo de entrdF e he un opi del vlorF i se modi( el vlor dentro del suprogrm ste no qued modi(do fuer del suprogrmF so por refereni o por direinF so de informin de entrdGslid o slo slidF e le ps el originl @l direin de memoriA por tnto ulquier modi(in qued re)ejd undo el suprogrm terminF rmetros onstntes o de slo leturF so de informin slo de entrd uy modi(in produir un error en tiempo de ompilinF or defeto los prmetros de un funin se psn por vlorF so por refereni o por direinF r que el pso se por refereni en l llmd l funin se le ps l direin de l vrile @dee ir preedid de 8AF wientrs que en los prmetros formles el prmetro dee delrrse omo puntero @tipohtoBA rmetros onstntes o de slo leturF e utiliz l plr reservd onst que indi l ompildor que es de slo leturF in gD el menismo de pso de vlores ls funiones es por vlor siempreF or esoD undo se quiere produir el efeto lterl de modi(r el vlor de un vrileD hy que psr su direin usndo el operdor de direin 4 8 4F in l sein nterior se h omentdo que en l llmd un funin los rgumentos tules son evludos y se psn opis de estos vlores ls vriles que onstituyen los rgumentos formles de l funinF eunque los rgumentos tules sen vriles y no expresionesD y hy un orrespondeni iunvo entre mos tipos de rgumentosD los mios que l funin reliz en los rgumentos formles no se trsmiten ls vriles del progrm que l h llmdoD preismente porque lo que l funin h reiido son opisF il modi(r un opi no reperute en el originlF e este menismo de pso de rgumentos un funin se le llm pso por vlorF gonsidrese l siguiente funin pr permutr el vlor de sus dos rgumentos x e yX void permutr@doule xD doule yA GG funion inorret { doule tempY temp a xY x a yY y a tempY } v funin nterior podr ser llmd y omprod de l siguiente formX

CAPTULO 8.

FUNCIONES.

US

5inlude `stdioFhb void min@voidA { doule aIFHD aPFHY void permutr@douleD douleAY printf@4 a 7lfD a 7lfn4D D AY permutr@D AY printf@4 a 7lfD a 7lfn4D D AY } gompilndo y ejeutndo este progrm se ve que y siguen teniendo los mismos vlores ntes y despus de l llmd permutr@AD pesr de que en el interior de l funin los vlores s se hn permutdo @es fil de ompror introduiendo en el digo de l funin los printf@A orrespondientesAF v rzn est en que se hn permutdo los vlores de ls opis de y D pero no los vlores de ls propis vrilesF vs vriles podrn ser permutds si se reiiern sus direiones @en reliddD opis de dihs direionesAF vs direiones deen reiirse en vriles punteroD por lo que los rgumentos formles de l funin deern ser punterosF n versin orret de l funin permutr@A que ps direiones en vez de vlores ser omo sigueX void permutr@doule BxD doule ByA { doule tempY temp a BxY Bx a ByY By a tempY } que puede ser llmd y omprod de l siguiente formX 5inlude `stdioFhb void min@voidA { doule aIFHD aPFHY void permutr@doule BD doule BAY printf@4 a 7lfD a 7lfn4D D AY permutr@8D 8AY printf@4 a 7lfD a 7lfn4D D AY } el menismo de pso de rgumentos medinte direiones en lugr de vlores se le llm pso por refereniD y deer utilizrse siempre que l funin de devolver rgumentos modi(dosF n so de prtiulr inters es el pso de rrys @vetoresD mtries y dens de rteresAF iste punto se trtr on ms detlle un poo ms delnteF fste deir hor que omo los nomres de los rrys son punteros @es deirD direionesAD dihos dtos se psn por refereniD lo ul tiene l ventj diionl de que no se gst memori y tiempo pr psr ls funiones opis de ntiddes grndes de informinF n so distinto es el de ls estrutursD y onviene tener uiddoF or defeto ls estruturs se psn por vlorD y pueden representr tmin grndes ntiddes de dtos @pueden ontener rrys omo miemrosA de los que se relizn y trnsmiten opisD on l onsiguiente prdid de e(ieniF or est rznD ls estruturs se suelen psr de modo explito por refereniD por medio de punteros ls mismsF

8.5. La funcin main() con argumentos


gundo se ejeut un progrm desde wEhy telendo su nomreD existe l posiilidd de psrle lgunos dtosD telendolos ontinuin en l mism lneF or ejemploD se le puede psr lgn vlor numrio o los nomres de lgunos (heros en los que tiene que leer o esriir informinF isto se onsigue por medio de rgumentos que se psn l funin min@AD omo se he on otrs funionesF

CAPTULO 8.

FUNCIONES.

UT

es puesD l funin min@A se le pueden psr rgumentos y tmin puede tener vlor de retornoF il primero de los rgumentos de min@A se suele llmr rgD y es un vrile int que ontiene el nmero de plrs que se telen ontinuin del nomre del progrm undo ste se ejeutF il segundo rgumento se llm rgvD y es un vetor de punteros rter que ontiene ls direiones de l primer letr o rter de dihs plrsF e ontinuin se present un ejemploX int min@int rgD hr BrgvA { int ontY for @ontaHY ont`rgY ontCCA printf@4il rgumento 7d esX 7sn4D ontD rgvontAY printf@4n4AY return HY }

8.6. Nmeros aleatorios.


in un progrm de gestin o un utilidd que nos yud dministrr un sistemD no es hitul que podmos permitir que ls oss ourrn l zrF ero los juegos se enuentrn muhs vees entre los ejeriios de progrmin ms ompletosD y pr un juego s suele ser onveniente que hy lgo de zrD pr que un prtid no se extmente igul l nteriorF qenerr nmeros l zr @nmeros letoriosA usndo g no es difilF i nos eimos l estndr exs gD tenemos un funin llmd rnd@AD que nos devuelve un nmero entero entre H y el vlor ms lto que pued tener un nmero entero en nuestro sistemF qenerlmenteD nos interesrn nmeros muho ms pequeos @por ejemploD del I l IHHAD por lo que reortremos usndo l operin mdulo @ 7D el resto de l divisinAF mos verlo on lgn ejemploX r otener un nmero del H l W hrmos x a rnd@A 7 IHY r otener un nmero del H l PW hrmos x a rnd@A 7 QHY r otener un nmero del IH l PW hrmos x a rnd@A 7 PH C IHY r otener un nmero del I l IHH hrmos x a rnd@A 7 IHH C IY r otener un nmero del SH l TH hrmos x a rnd@A 7 II C SHY r otener un nmero del IHI l IWW hrmos x a rnd@A 7 IHH C IHIY ero todv nos qued un detlle pr que los nmeros letorios que otengmos sen rzonlesX los nmeros que gener un ordendor no son relmente l zrD sino pseudoEletoriosD d uno luldo prtir del siguienteF odemos elegir ul queremos que se el primer nmero de es serie @l semillAD pero si usmos uno pre(jdoD los nmeros que se generrn sern siempre los mismosF or esoD ser onveniente que el primer nmero se se en el reloj interno del ordendorX omo es si imposile que el progrm se pong en mrh dos ds extmente l mism hor @inluyendo milsims de segundoAD l serie de nmeros l zr que otengmos ser distint d vezF v semill l indimos on srndD y si queremos srnos en el reloj interno del ordendorD lo que hremos ser srnd@time@HAAY

CAPTULO 8.

FUNCIONES.

UU

ntes de her ningun llmd rnd@AF r usr rnd@A y srnd@AD deermos dir otro (hero nuestr list de inludesD el llmdo stdliX 5inlude `stdliFhb i dems queremos que l semill se tome prtir del reloj interno del ordendor @que es lo ms rzonleAD deeremos inluir tmin timeX 5inlude `timeFhb mos ver un ejemploD que muestre en pntll un nmero l zr entre I y IHX 5inlude `stdioFhb 5inlude `stdliFhb 5inlude `timeFhb min@A { int nY srnd@time@HAAY n a rnd@A 7 IH C IY printf@4n nmero entre I y IHX 7dn4D nAY }

8.7. Funciones para cadenas de caracteres


in gD existen vris funiones tiles pr el mnejo de dens de rteresF vs ms utilizds sonX strlen@AD strt@AD strmp@A y strpy@AF us prototipos o delriones estn en el (hero stringFhD y son los siguientes @se inluye ontinuin un expliin de mo se utiliz l funin orrespondienteAF

8.7.1. Funcin strlen()


il prototipo de est funin es omo sigueX unsigned strlen@onst hr BsAY ixpliinX u nomre proviene de string lengthD y su misin es ontr el nmero de rteres de un denD sin inluir el 9H9 (nlF il pso del rgumento se reliz por refereniD pues omo rgumento se emple un puntero l den @tl que el vlor l que punt es onstnte pr l funinY es deirD st no lo puede modi(rAD y devuelve un entero sin signo que es el nmero de rteres de l denF v plr onst impide que dentro de l funin l den de rteres que se ps omo rgumento se modi(dF

8.7.2. Funcin strcat()


il prototipo de est funin es omo sigueX hr Bstrt@hr BsID onst hr BsPAY ixpliinX u nomre proviene de string ontentionD y se emple pr unir dos dens de rteres poniendo sP ontinuin de sIF il vlor de retorno es un puntero sIF vos rgumentos son los punteros ls dos dens que se dese unirF v funin lmen l den omplet en l primer de ls densF igegsx3 ist funin no prev si tiene sitio su(iente pr lmenr ls dos dens junts en el espio reservdo pr l primerF isto es responsilidd del progrmdorF

8.7.3. Funciones strcmp() y strcomp()


il prototipo de l funin strmp@A es omo sigueX int strmp@onst hr BsID onst hr BsPA ixpliinX u nomre proviene de string omprisonF irve pr omprr dos dens de rteresF gomo rgumentos utiliz punteros ls dens que se vn omprrF v funin devuelve ero si ls dens son igulesD un vlor menor que ero si sI es menor !en orden lftio! que sPD y un vlor myor que ero si sI es myor que sPF v funin stromp@A es ompletmente nlogD on l difereni de que no he distinin entre letrs mysuls y minsulsAF

CAPTULO 8.

FUNCIONES.

UV

8.7.4. Funcin strcpy()


il prototipo de l funin strpy@A es omo sigueX hr Bstrpy@hr BsID onst hr BsPA ixpliinX u nomre proviene de string opy y se utiliz pr opir densF tiliz omo rgumentos dos punteros rterX el primero es un puntero l den opiD y el segundo es un puntero l den originlF il vlor de retorno es un puntero l den opi sIF is muy importnte tener en uent que en g no se pueden opir dens de rteres diretmenteD por medio de un senteni de signinF or ejemploD s se puede signr un texto un den en el momento de l delrinX hr s a 4isto es un den4Y GG orreto in emrgoD ser ilito her lo siguienteX hr sIPH a 4isto es un den4Y hr sPPHY FFF GG i se dese que sP onteng un opi de sI sP a sIY GG inorretoX se he un opi de punteros strpy@sPD sIAY GG orretoX se opi tod l den

8.8. Punteros como valor de retorno


e modo de resumenD reurdese que un funin es un onjunto de instruiones g queX is llmdo por el progrm prinipl o por otr funinF eie dtos trvs de un list de rgumentosD o trvs de vriles externF eliz un serie de tres espe(sD entre ls que pueden estr lulos y operiones de letuE rGesritur en el disoD en teldo y pntllD etF hevuelve resultdos l progrm o funin que l h llmdo por medio del vlor de retorno y de los rgumentos que hyn sido psdos por refereni @punterosAF il utilizr punteros omo vlor de retorno permite superr l limitin de devolver un nio vlor de retornoF uede devolverse un puntero l primer elemento de un vetor o l direin se de un mtrizD lo que equivle devolver mltiple vloresF il vlor de retorno puntero void @void BA es un puntero de tipo indetermindo que puede signrse sin sting un puntero de ulquier tipoF vos punteros void son utilizdos por ls funiones de reserv dinmi de memori llo@A y mllo@AD omo se ver ms delnteF

8.9. Paso de arrays como argumentos a una funcin


r onsiderr el pso de rrys @vetores y mtriesA omo rgumentos de un funinD hy que reordr lguns de sus rterstisD en prtiulr su relin on los punteros y l form en l que ls mtries se lmenn en l memoriF iste tem se v presentr por medio de un ejemploX un funin llmd prod@A pr relizr el produto de mtriz udrd por vetor @{x}a{y}AF r que l de(niin de l funin est omplet es neesrio dr ls dimensiones de l mtriz que se le ps omo rgumento @exepto l ID es deirD exepto el no de (lsAD on ojeto de poder reonstruir l frmul de direionmientoD en l que interviene el nmero de olumns pero no el de (lsF il enezmiento de l de(niin ser omo sigueX void prod@int nD doule IHD doule xD doule yA {FFF} hiho enezmiento se puede tmin estleer en l formX void prod@int nD doule @BAIHD doule BxD doule ByA {FFF}

CAPTULO 8.

FUNCIONES.

UW

donde el prntesis @BA es neesrio pr que se 4puntero vetor de tmo IH4D es deirD puntero punteroF in prntesis ser 4vetor de tmo IHD uyos elementos son punteros4D por l myor prioridd del operdor sore el operdor BF v delrin de l funin prod@A se puede her en l formX void prod@intD doule IHD doule xD doule yAY o ienD void prod@int nD doule @BAIHD doule BxD doule ByAY r l llmd st simplemente utilizr los nomres de los rgumentosX doule IHIHD xIHD yIHY FFF prod@n(lsD D xD yAY FFF in todos estos sos es un puntero punteroD mientrs que x e y son punterosF

8.10. Punteros a funciones.


he modo similr omo el nomre de un rry en g es un punteroD tmin el nomre de un funin es un punteroF isto es interesnte porque permite psr omo rgumento un funin el nomre de otr funinF or ejemploD si pfun es un puntero un funin que devuelve un entero y tiene dos rgumentos que son punterosD dih funin puede delrrse del siguiente modoX int @BpfunA@void BD void BAY il primer prntesis es neesrio pues l delrinX int Bpfun@void BD void BAY GG inorreto orresponde un funin llmd pfun que devuelve un puntero enteroF gonsidrese el siguiente ejemplo pr llmr de un modo lterntivo ls funiones sin@A y os@xAX 5inlude `stdioFhb 5inlude `mthFhb void min@voidA { doule @BpfA@douleAY Bpf a sinY printf@4 7lfn4D @BpfA@QFIRISWPTSRGPAAY Bpf a osY printf@4 7lfn4D @BpfA@QFIRISWPTSRGPAAY } ysrvese mo l funin de(nid por medio del puntero tiene l mism signture que ls funiones seno y osenoF v ventj est en que por medio del puntero pf ls funiones seno y oseno podrn ser psds indistintmente omo rgumento otr funinF

8.11. Procedimientos.
gundo se delr tipo 4void4X e puede invor l funin omo si fuer un senteni sltrlines @IHAY xo se puede poner l funin en un expresin donde se requier un vlorF

CAPTULO 8.

FUNCIONES.

VH

8.12. Funciones recursivas.


n ojeto es reursivo undo puede de(nirse en funin de s mismoF in el elemento utilizdo pr l reursin es l funin hiretX n funin se llm s mismF sndiretX n funin e llm un he refereni otro suprogrm f y este su vez e in d llmd un funin los prmetros y ls vriles loles tomn nuevos vlores il espio pr lmenr todos los vlores neesrios ree medid que se hen ms llmds que no (nlizn in el uerpo deer her un o vris instruiones donde se estlee l ondiin de slid pr que l reursin no se in(nit v reursividd es l posiilidd de que un funin se llme s mismD ien diret o indiretmenteF n ejemplo tpio es el lulo del ftoril de un nmeroD de(nido en l formX x3 a x B @xEIA3 a x B @xEIA @xEPA3 a x B @xEIAB@xEPABFFFBPBI v funin ftorilD esrit de form reursivD ser omo sigueX unsigned long ftoril@unsigned long numeroA { if @ numero aa I || numero aa H A return IY else return numeroBftoril@numeroEIAY } upngse l llmd est funin pr xaRD es deir ftoril@RAY gundo se llme por primer vez l funinD l vrile numero vldr RD y por tnto devolver el vlor de RBftoril@QAY pero ftoril@QA devolver QBftoril@PAY ftoril@PA su vez es PBftoril@IA y ddo que ftoril@IA es igul I @es importnte onsiderr que sin ste u otro so prtiulrD llmdo so seD l funin reursiv no terminr nun de llmrse s mismAD el resultdo (nl ser RB@QB@PBIAAF or lo generl l reursividd no horr memoriD pues h de mntenerse un pilU on los vlores que estn siendo proesdosF mpoo es ms rpidD sino ms ien todo lo ontrrioD pero el digo reursivo es ms ompto y menudo ms senillo de esriir y omprenderF

8.13. Llamadas al sistema


system i hy lgo que no sepmos o podmos herD pero que lgun utilidd del sistem opertivo s es pz de her por nosotrosD podemos her que ell trje por nosotrosF v form de llmr otrs rdenes del sistem opertivo @inluso progrms externos de si ulquier tipoA es utilizr l orden systemF or ejemploD podrmos mostrr l list de (heros de l rpet tul on l orden lsD sX 5inlude `stdioFhb 5inlude `stdliFhb int min@A { printf@4il ontenido de l rpet tul esXn4AY system @4ls4AY return HY }

Captulo 9

Funciones de entrada/salida.
e difereni de otros lengujesD g no dispone de sentenis de entrdGslidF in su lugr se utilizn funiones ontenids en l lirer estndr y que formn prte integrnte del lengujeF vs funiones de entrdGslid @snputGyutputA son un onjunto de funionesD inluids on el ompildorD que permiten un progrm reiir y envir dtos l exteriorF r su utilizin es neesrio inluirD l omienzo del progrmD el rhivo stdioFh en el que estn de(nidos sus prototiposX 5inlude `stdioFhb donde stdio proviene de stndrdEinputEoutputF

9.1. Funcin printf()


v funin printf@A imprime en l unidd de slid @el monitorD por defetoAD el textoD y ls onstntes y vriles que se indiquenF v form generl de est funin se puede estudir viendo su prototipoX int printf@4dendeontrol4D tipo rgID tipo rgPD FFFAY ixpliinX v funin printf@A imprime el texto ontenido en dendeontrol junto on el vlor de los otros rgumentosD de uerdo on los formtos inluidos en dendeontrolF vos puntos suspensivos @FFFA indin que puede her un nmero vrile de rgumentosF gd formto omienz on el rter @ 7A y termin on un rter de onversinF gonsidrese el ejemplo siguienteD int iY doule tiempoY )ot msY printf@4esultdo noX 7dF in el instnte 7lf l ms vle 7fn4D iD tiempoD msAY en el que se imprimen Q vriles @iD tiempo y msA on los formtos @ 7dD 7lf y 7fAD orrespondientes los tipos @intD doule y )otAD respetivmenteF v den de ontrol se imprime on el vlor de d vrile interldo en el lugr del formto orrespondienteF i usmos 7 7 se mostrr el smolo de porentje en pntllF grter ipo de rgumento grter ipo de rgumento dD i int deiml o otl unsigned u int unsigned xD hexF unsigned hr s den de hr f )ot notin deiml eD g )ot notF ientfF o reve p puntero @void BA lf doule vo importnte es onsiderr que dee her orrespondeni uno uno @el I on el ID el P on el PD etFA entre los formtos que preen en l dendeontrol y los otros rgumentos @onstntesD vriles o expresionesAF intre el rter 7 y el rter de onversin puede herD por el siguiente ordenD uno o vrios de los elementos que ontinuin se indinX VI

CAPTULO 9.

FUNCIONES DE ENTRADA/SALIDA.

VP

n nmero entero positivoD que indi l nhur mnim del mpo en rteresF n signo @EAD que indi linemiento por l izd @el defeto es por l dhAF n punto @FAD que sepr l nhur de l preisinF n nmero entero positivoD l preisinD que es el no mximo de rteres imprimir en un stringD el no de deimles de un )ot o douleD o ls ifrs mnims de un int o longF n uli(dorX un @hA pr short o un @lA pr long y doule e ontinuin se inluyen lgunos ejemplos de uso de l funin printf@AF il primer ejemplo ontiene slo textoD por lo que st on onsiderr l dendeontrolF printf@4gon ien ones por ndDnviento en pop tod velDn4AY il resultdo sern dos lnes on ls dos primers estrofs de l fmos poesF xo es posile prtir deE ndeontrol en vris lnes on rteres introD por lo que en este ejemplo podr her prolems pr dir ms estrofsF n form lterntivD muy senillD lr y ordendD de esriir l poes ser l siguienteX printf@4 7sn 7sn 7sn 7sn4D 4gon ien ones por ndD4D 4viento en pop tod velD4D 4no ruz el mr sino vuelD4D 4un velero ergntnF4AY in este so se estn esriiendo R dens onstntes de rteres que se introduen omo rgumentosD on formto 7s y on los orrespondientes sltos de lneD y que en l indention es lireF n ejemplo que ontiene un onstnte y un vrile omo rgumentos es el siguienteX printf@4in el o 7s gn 7ld ptsFn4D 4IWWQ4D ene(iosAY donde el texto IWWQ se imprime omo den de rteres @ 7sAD mientrs que ene(ios se imprime on formto de vrile long @ 7ldAF is importnte her orresponder ien los formtos on el tipo de los rgumentosD pues si no los resultdos pueden ser muy diferentes de lo esperdoF v funin printf@A tiene un vlor de retorno de tipo intD que represent el nmero de rteres esritos en es llmdF 5inlude `stdioFhb min@A { )ot x a IPFSTY printf@4il vlor de x es 7f4D xAY printf@4 pero lo podemos esriir on P deimles 7SFPf4D xAY printf@4 o solo on uno 7SFIf4D xAY printf@4 o on U ifrs 7UFIf4D xAY printf@4 o linedo l izquierd 7EUFIf4D xAY printf@4 o sin deimles 7PFHf4D xAY printf@4 o solo on un ifr 7IFHf4D xAY }

9.2. Funcin scanf().


v funin snf@A es nlog en muhos spetos printf@AD y se utiliz pr leer dtos de l entrd estndr @que por defeto es el teldoAF v form generl de est funin es l siguienteX int snf@4 7xI 7xPFFF4D 8rgID 8rgPD FFFAY

CAPTULO 9.

FUNCIONES DE ENTRADA/SALIDA.

VQ

donde xID xPD FFF son los rteres de onversinD mostrdos en l l VFPD que representn los formtos on los que se esper enontrr los dtosF v funin snf@A devuelve omo vlor de retorno el nmero de onversiones de formto relizds on xitoF v den de ontrol de snf@A puede ontener rteres dems de formtosF hihos rteres se utilizn pr trtr de detetr l preseni de rteres idntios en l entrd por teldoF i lo que se dese es leer vriles numrisD est posiilidd tiene esso intersF e vees hy que omenzr l den de ontrol on un espio en lno pr que l onversin de formtos se relie orretmenteF in l funin snf@A los rgumentos que siguen l dendeontrol deen ser psdos por refereniD y que l funin los lee y tiene que trsmitirlos l progrm que l h llmdoF r elloD dihos rgumentos deen estr onstituidos por ls direiones de ls vriles en ls que hy que depositr los dtosD y no por ls propis vrilesF n exepin son ls dens de rteresD uyo nomre es y de por s un direin @un punteroAD y por tnto no dee ir preedido por el operdor @8A en l llmdF rter rteres ledos rgumento ulquier rter hr B dD i entero deiml on signo int B u entero deiml sin signo unsigned int o entero otl unsigned int xD entero hexdeiml unsigned int eD iD fD gD q nmero de punto )otnte )ot s den de rteres sin 9 9 hr hDl pr shortD long y doule v modi(dor pr long doule or ejemploD pr leer los vlores de dos vriles int y doule y de un den de rteresD se utilizrn l senteniX int nY doule distniY hr nomrePHY snf@4 7d 7lf 7s4D 8nD 8distniD nomreAY en l que se estlee un orrespondeni entre n y 7dD entre distni y 7lfD y entre nomre y 7sF ysrvese que nomre no v preedido por el operdor @8AF v letur de dens de rteres se detiene en unto se enuentr un espio en lnoD por lo que pr leer un lne omplet on vris plrs hy que utilizr otrs tnis diferentesF in los formtos de l den de ontrol de snf@A pueden introduirse orhetes FFFD que se utilizn omo sigueF v senteniD snf@4 7ef nt4D sAY GG se leen solo los rteres indidos lee rteres hst que enuentr uno diferente de @9e9D9f9D9 9D9n9D9t9AF in otrs plrsD se leen slo los rteres que preen en el orheteF gundo se enuentr un rter distinto de stos se detiene l letur y se devuelve el ontrol l progrm que llm snf@AF i los orhetes ontienen un rter @AD se leen todos los rteres distintos de los rteres que se enuentrn dentro de los orhetes ontinuin del @AF or ejemploD l senteniD snf@4 7n4D sAY lee todos los rteres que enuentr hst que lleg l rter nuev lne 9n9F ist senteni puede utilizrse por tnto pr leer lnes ompletsD on lnos inluidosF eurdese que on el formto 7s l letur se detiene l llegr l primer delimitdor @rter lnoD tuldor o nuev lneAF is responsilidd del progrmdor psr orretmente los dtos snf F n error que puede tener grves onseuenis onsiste en psr inorretmente l direin de memori o en l que dejr el vlor leidoF iste progrmD por ejemploD es erroneoX snf @4 7d4D AY

CAPTULO 9.

FUNCIONES DE ENTRADA/SALIDA.

VR

v funin snf no est reiiendo l direion de memori en l que reside D sino el vlor lmendo en F i snf interpret diho vlor omo un direion de memori @os o que heAD gurdr en ell el numero que le de teldoF el ompildor no neesrimente u detetr el error3 il resultdo es tstro(oF ytro error tipio l usr snf onsiste en onfundir el tipo de un vrile yGo l mr de formto que le orrespondeF or ejemploD imgin que es un vrile de tipo hrF iste intento de letur de su vlor por teldo es erroneoX snf @4 7d4D 8AY e snf le estmos psndo l direion de memori de l vrile F rst hi ienF eroD solo oup un yte y snf le estmos diiendo que rellene R ytes on un numero entero prtir de es direin de memoriF ytro error de onseuenis grvisimsF v mr de formto deud pr leer un numero de tipo hr huier sido 7hhdF u snf @4 7hhd4D 8AY

9.3. Macros getchar() y putchar()


vs mros gethr@A y puthr@A permiten respetivmente leer e imprimir un slo rter d vezD en l entrd o en l slid estndrF v mro gethr@A reoge un rter introduido por teldo y lo dej disponile omo vlor de retornoF v mro puthr@A esrie en l pntll el rter que se le ps omo rgumentoF or ejemploX puthr@99AY esrie el rter F ist senteni equivle printf@44AY mientrs que a gethr@AY equivle snf@4 74D 8AY gomo se h diho nteriormenteD gethr@A y puthr@A son mros y no funionesD unque pr si todos los efetos se omportn omo si fuern funionesF il onepto de mro se ver on ms detlle en l siguiente seinF ists mros estn de(nids en el (hero stdioFhD y su digo es sustituido en el progrm por el preproesdor ntes de l ompilinF or ejemploD se puede leer un lne de texto omplet utilizndo gethr@AX int iaHD Y hr nmeIHHY while@@ a gethr@AA 3a 9n9A GG se leen rteres hst el 9n9 nmeiCC a Y GG se lmen el rter en xme nmeia9H9Y GG se de el rter (n de den

9.4. Otras funciones de entrada/salida


vs funiones fprintf@A y fsnf@A se emplen de modo nlogo printf@A y snf@AD pero en lugr de leer y esriir en l slid y en l entrd estndrD lo hen en un rhivo de disoF hiho rhivo deer her sido ierto previmente medinte l funin fopen@AD que funion omo se expli ontinuinF in primer lugr hy que delrr un puntero rhivo @se trt del tipo psviD un tipo derivdo que est prede(nido en el (hero stdioFhAD que servir pr identi(r el rhivo on el que se v trjrF hespus se re el rhivo on l funin fopen@AD que devuelve omo vlor de retorno un puntero l rhivo iertoF e fopen@A hy que psrle omo rgumentos el nomre del rhivo que se quiere rir y el modo en el que se v utilizr diho rhivoF e ontinuin se present un ejemploX psvi BpfY GG delrin de un puntero rhivo pf a fopen@4nomre4D 4modo4AY donde nomre es el nomre del rhivo y modo es un rter que indi el modo en el que el (hero se dese rirX

CAPTULO 9.

FUNCIONES DE ENTRADA/SALIDA.

VS

r slo letur @redA w esritur desde el omienzo del rhivo @writeA esritur did l (nl del rhivo @ppendA rC letur y esritur wC esritur y letur r slo letur @rhivo inrioA w esritur desde el omienzo del rhivo @rhivo inrioA esritur did l (nl del rhivo @rhivo inrioA il puntero pf devuelto por fopen@A ser xvv @aHA si por lgun rzn no se h onseguido rir el (hero en l form desedF vos prototipos de ls funiones fsnf@A y fprintf@A tienen l formX int fprintf@psvi BfpD 4den de ontrol4D tipo rgID tipo rgPD FFFAY int fsnf@psvi BfpD 4den de ontrol4D 8rgID 8rgPD FFFAY y l form generl de llmr dihs funionesD que es ompletmente nlog l form de llmr printf@A y snf@AD es l siguienteX fprintf@fpD 4dendeontrol4D otrosrgumentosAY fsnf@fpD 4dendeontrol4D otrosrgumentosAY vos rgumentos de fsnf@A se deen psr por refereniF n vez que se h termindo de trjr on un (heroD es onveniente errrlo medinte l funin flose@AD en l formX flose@fpAY ixisten tmin uns funiones llmds sprintf@A y ssnf@A que son nlogs fprintf@A y fsnf@AD susE tituyendo el puntero (hero por un puntero un den de rteres lmend en l memori del ordendorF es puesD ests funiones leen yGo esrien en un den de rteres lmend en l memoE riF ry otrs funiones similres fprintf@A y fsnf@AD ls funiones fred@A y fwrite@AD que leen y esrien en diso rhivos inriosD respetivmenteF gomo no se relizn onversiones de formtoD ests funiones son muho ms e(ientes que ls nteriores en tiempo de gF vs 4funiones4 put@D fpA y get@fpA son simismo mros de(nids en stdioFh que esrien o leen un rter de un (hero determindo por un puntero (hero @psvi BfpAF ixisten tmin funiones pr eder un (hero de modo diretoD es deirD no seuenilF il eso seuenil lee y esrie ls lnes un detrs de otrD en su orden nturlF il eso direto permite leer y esriir dtos en ulquier ordenF vs funiones remove@A y renme@A se utilizn pr orrr o mir el nomre un (hero desde un progrmF ixisten en g ms funiones y mros nlogs ls nterioresF r ms detlles sore l utilizin de tods ests funionesD onsultr un mnul de gF

9.5. Acceso a pantalla en Linux


ursesFh in vinuxD hy un iliote llmd 4urses4D que es l que deeremos inluir si queremos usr lgo ms que el simple 4printf4X nos permitir orrr l pntllD esriir en uns ierts oordendsD mir olores o prienis del textoD diujr reudrosD etF iso sD el mnejo es omplido hy que tener en uent que en vinux @y en los nix en generlA podemos enontrrnos on que nuestro progrm se use desde un terminl ntiguoD que no permit oloresD sino slo negrit y surydoD o que no tulie l pntll ontinumenteD sino slo en iertos momentosF is lgo d vez menos freuenteD pero si queremos que nuestro progrm funiones siempreD deeremos llevr ierts preuionesF or esoD el primer pso ser tivr el eso pntll on initsr y terminr on endwinF edemsD undo quermos segurrnos de que l informin prez en pntllD deermos usr refreshF gomo primers rdenesD vmos usrX ler pr orrr l pntllF move pr desplzrnos ierts oordendsF

CAPTULO 9.

FUNCIONES DE ENTRADA/SALIDA.

VT

printw pr esriir en pntllF gon todo estoD un primer ejemplo serX 5inlude `ursesFhb min@A { initsr@AY ler@AY move@IHDIHAY printw@4hol4AY refresh@AY geth@AY endwin@AY } n detlle importnteX l hor de ompilr hy que dir l opin de que enle l lirer nursesD ien desde ls opiones de nuestro entorno de desrrollo @si usmos ejutD uhevelop o lgn otroAD o ien desde l lne de omndosX ejemploF !lnurses Eo si queremos esriir en pntll usndo oloresD tendremos que deir que queremos omenzr el modo de olor on strtolor@AY durnte l iniilizinF iso sD ntes deermos ompror on si hsolors@A si nuestro terminr puede mnejr olores @tenemos de(nid un onstnte pevi pr poder omprorloAF intones podrmos de(nir nuestros pres de olor de fondo y de primer plnoD on initpirD sX initpir@ID gyvygexD gyvyfveguAY @nuestro pr de olores I ser texto zul lro sore fondo negroAF r usr estos oloresD ser muy preido lo que y onoemosX ttron@gyvyes@IAAY si queremos ompror ls tels extendidsD hrmos keypd@stdsrD iAY durnte l iniilizin y en uerpo del progrm y podrmos usr rdenes omo tel a geth@AY if @tel aa uivipA FFF mos ver un ejemplo que junte todo estoX 5inlude `ursesFhb min@A { int telY initsr@AY if@hsolors@A aa peviA { endwin@AY printf@4u terminl no permite usr olores3n4AY exit@IAY } strtolor@AY rek@AY noeho@AY keypd@stdsrD iAY ler@AY initpir@ID gyvygexD gyvyfveguAY ttron@gyvyes@IAAY

CAPTULO 9.

FUNCIONES DE ENTRADA/SALIDA.

VU

mvddstr@PDIHD4hol4AY ttro'@gyvyes@IAAY refresh@AY tel a geth@AY if @tel aa uivipA printw@4rs pulsdo izquierd4AY geth@AY endwin@AY }

Captulo 10

El preprocesador.
vs lines que empiezn on un plr predeid por el rter 5 son espeilesF vs plrs que empiezn on 5 se denominn diretivsF il ompildor no lleg ver nun ls lines que empiezn on un diretivF ue queremos deir extmente on que no lleg verlsc il ompildor g esD en reliddD un progrm que ontrol vris etps en el proeso de trduion de g odigo de mquinF he momentoD nos interes onsiderr dos de ellsX el preproesdor el trdutor de g odigo de mquin @el ompildor propimente dihoAF il preproesdor del lenguje g permite sustituir mros @sustituin en el progrm de onstntes simlis o textoD on o sin prmetrosAD relizr ompiliones ondiionles e inluir rhivosD todo ello ntes de que empiee l ompilin propimente dihF il preproesdor de g reonoe los siguientes omndosX 5de(neD 5undef 5ifD 5ifdefD 5ifndefD 5endifD 5elseD 5elif 5inlude 5prgm 5error vos omndos ms utilizdos sonX 5inludeD 5de(neF

10.1. Comando #include.


gundo en un rhivo F se enuentr un lne on un 5inlude seguido de un nomre de rhivoD el preproesdor l sustituye por el ontenido de ese rhivoF v sintxis de este omndo es l siguienteX 5inlude 4nomredelrhivo4 5inlude `nomredelrhivob v difereni entre l primer form @on omills 4FFF4A y l segund form @on los smolos `FFFbA estri en el diretorio de squed de dihos rhivosF in l form on omills se us el rhivo en el diretorio tul y posteriormente en el diretorio estndr de lirers @de(nido normlmente on un vrile de entorno del wEhy llmd sxgvhiD en el so de los ompildores de wirosoftAF in l form que utiliz los smolos `FFFb se us diretmente en el diretorio estndr de lirersF in l prtiD los rhivos del sistem @stdioFhD mthFhD etFA se inluyen on l segund formD mientrs que los rhivos hehos por el propio progrmdor se inluyen on l primerF iste omndo del preproesdor se utiliz normlmente pr inluir rhivos on los prototipos @delrionesA de ls funiones de lirerD o on mdulos de progrmin y prototipos de ls funiones del propio usurioF istos rhivos suelen tener l extensin BFhD unque puede inluirse ulquier tipo de rhivo de textoF

VV

CAPTULO 10.

EL PREPROCESADOR.

VW

10.2. Comando #dene.


il omndo 5de(ne estlee un mro en el digo fuenteF ixisten dos posiiliddes de de(niinX 5de(ne xywfi textointroduir 5de(ne xywfi@prmetrosA textointroduironprmetros entes de omenzr l ompilinD el preproesdor nliz el progrm y d vez que enuentr el idenE ti(dor xywfi lo sustituye por el texto que se espei( ontinuin en el omndo 5de(neF or ejemploD si se tienen ls siguientes lnes en el digo fuenteX 5de(ne i PFUIVPVIVPVRSW FFF void min@voidA { doule Y a @IFCIFGiAB@IFEPFGiAY FFF } l terminr de tur el preproesdorD se hr relizdo l sustituin de i por el vlor indido y el digo hr queddo de l siguiente formX void min@voidA { doule Y a @IFCIFGPFUIVPVIVPVRSWAB@IFEPFGPFUIVPVIVPVRSWAY FFF } iste menismo de sustituin permite de(nir onstntes simlis o vlores numrios @tles omo iD sD siD etFA y poder mirls filmenteD l vez que el progrm se mntiene ms legileF he l form nlog se pueden de(nir mros on prmetrosX or ejemploD l siguiente mro lul el udrdo de ulquier vrile o expresinD 5de(ne geh@xA @@xAB@xAA void min@A { doule D Y FFF a UFGgeh@CIFAY FFF } hespus de psr el preproesdor l lne orrespondiente hr queddo en l formX a UFG@@CIFAB@CIFAAY ysrvese que los prntesis son neesrios pr que el resultdo se el desedoD y que en el omndo 5de(ne no hy que poner el rter @YAF ytro ejemplo de mro on dos prmetros puede ser el siguienteX 5de(ne gweh@DdA @ C dA void min@A { doule D rD sY a gweh@sDrBsAY FFF }

CAPTULO 10.

EL PREPROCESADOR.

WH

on lo que el resultdo serX a @s C rBsAY il resultdo es orreto por l myor prioridd del operdor @BA respeto l operdor @CAF gundo se de(ne un mro on rgumentos onviene ser muy uiddoso pr prever todos los posiles resultdos que se pueden lnzrD y grntizr que todos son orretosF in l de(niin de un mro pueden utilizrse mros de(nids nteriormenteF in muhs osionesD ls mros son ms e(ientes que ls funionesD pues relizn un sustituin diret del digo desedoD sin perder tiempo en opir y psr los vlores de los rgumentosF is reomendle tener presente que el omndo 5de(neX xo de(ne vrilesF us prmetros no son vrilesF in el preproesmiento no se reliz un revisin de tiposD ni de sintxisF lo se relizn sustituiones de digoF is por ests rzones que los posiles errores seldos por el ompildor en un lne de digo fuente on 5de(ne se deen nlizr on ls sustituiones y relizdsF or onvenin entre los progrmdoresD los nomres de ls mros se esrien on mysulsF ixisten tmin muhs mros prede(nids lguns vriles interns del sistemF hei peh de ompilin psvi xomre del rhivo vsxi xmero de lne swi ror de ompilin e puede de(nir un mro sin textosustituir pr utilizrl omo sel lo lrgo del progrmF or ejemploX 5de(ne gywryve v utilidd de est lne se oservr en el siguiente prtdoF

10.3. Comandos #ifdef, #ifndef, #else, #endif, #undef


no de los usos ms freuentes de ls mros es pr estleer loques de ompilin opionlesF or ejemploX 5de(ne gywryve void min@A { GG si est de(nid l mro llmd gywryve 5ifdef gywryve printf@4hol4AY 5else GG si no es s printf@4dios4AY 5endif } il digo que se ompilr ser printf@4hol4A en so de estr de(nid l mro gywryveY en so ontrrioD se ompilr l lne printf@4dios4AF ist ompilin ondiionl se utiliz on freueni pr desrrollr digo portle vrios distintos tipos de omputdoresY segn de qu omputdor se trteD se ompiln uns lnes u otrsF r eliminr un mro de(nid previmente se utiliz el omndo 5undefX 5undef gywryve he form similrD el omndo 5ifndef pregunt por l noEde(niin de l mro orrespondienteF n uso muy importnte de los omndos 5ifdef y 5ifndef es pr evitr omndos 5inlude del mismo (hero repetidos vris vees en un mismo progrmF

Captulo 11

Programas de varios fuentes


11.1. Creacin desde la lnea de comandos
is stnte freuente que un progrm no est formdo por un nio fuenteD sino por vriosF uede ser por her el progrm ms modulr deido su omplejiddD por reprto de trjo entre vris personsD etF in ulquier soD l grn myor de los ompildores de g sern pes de juntr vrios fuentes independientes y rer un nio ejeutle prtir de todos ellosF mos ver mo onseguirloF impezremos por el so ms senilloX supondremos que tenemos un progrm priniplD y otros dos mdulos uxilires en los que hy lguns funiones que se usrn desde el progrm priniplF or ejemploD el primer mdulo @xyFgA podr ser simplementeX void uno@A { printf@4punin unon4AY } y el segundo mdulo @hyFgAX void dos@int numeroA { printf@4punin dosD on el prmetro 7dn4D numeroAY } n progrm prinipl simpleD que los utilizseD ser @iFgAX 5inlude `stdioFhb int min@A { printf@4istmos en el uerpo del progrmFn4AY uno@AY dos@QAY return HY } r ompilr los tres fuentes y rer un nio ejeutleD desde l myor de los ompildores de hos o indows str on eder l lne de omndosD y teler el nomre del ompildor seguido por los de los tres fuentesX gg xy hy i @gg es el nomre del ompildorD en el so de uro g y de uro gCCY ser fgg pr el so de forlnd gCCD gg pr ymnte gCCD etFAF intones el ompildor onvierte los tres (heros fuente @FgA (heros ojeto @FyftAD los enlz y re un nio ejeutleD que se llmr xyFii @porque xy es el nomre del primer fuente que hemos indido l ompildorAD y uy slid en pntll serX istmos en el uerpo del progrmF punin uno punin dosD on el prmetro Q in el so de qgg pr vinux @o de lgun de sus versiones pr indowsD omo winqD o hevgCCD que se s en lAD tendremos que indirle el nomre de los (heros de entrd @on extensinA y el nomre del (hero de slidD on l opin EoX g unoF dosF tresF Eo resultdo ero puede her ompildores en los que l situin no se tn senillF uede ourrir que l ompilr el progrm priniplD que erX WI

CAPTULO 11.

PROGRAMAS DE VARIOS FUENTES

WP

int min@A { printf@4istmos en el uerpo del progrmFn4AY uno@AY dos@QAY return HY } el ompildor nos d un mensje de errorD diiendo que no onoe ls funiones 4uno@A4 y 4dos@A4F xo deer ser nuestro soD si l ompilr le hemos indido los fuentes en el orden orreto @gg xy hy iAD pero puede ourrir si se los indimos en otro ordenD o ien si tenemos muhos fuentesD que dependn los unos de los otrosF v form de evitrlo ser indindole que ess funiones existenD y que y le llegrn ms trde los detlles en onreto sore mo funionnF r deirle que existenD lo que hrmos ser inluir en el progrm prinipl los prototipos de ls funiones @ls eersD sin el desrrolloA que se enuentrn en otros mdulosD sX 5inlude `stdioFhb GB rototipos de ls funiones externs BG void uno@AY void dos@int numeroAY int min@A GB guerpo del progrm BG { printf@4istmos en el uerpo del progrmFn4AY uno@AY dos@QAY return HY } ist mism soluin de poner los prototipos l prinipio del progrm nos puede servir pr sos en los queD teniendo un nio fuenteD quermos delrr el uerpo del progrm ntes que ls funiones uxiliresX 5inlude `stdioFhb GB rototipos de ls funiones BG void uno@AY void dos@int numeroAY int min@A GB guerpo del progrm BG { printf@4istmos en el uerpo del progrmFn4AY uno@AY dos@QAY return HY } void uno@A { printf@4punin unon4AY } void dos@int numeroA { printf@4punin dosD on el prmetro 7dn4D numeroAY } in iertos ompildores puede que tengmos prolems on este progrm si no inluimos los prototipos l prinipioD porque en 4min@A4 se enuentr l llmd 4uno@A4D que no hemos delrdoF el poner los prototipos ntesD el ompildor y se qu tipo de funin es 4uno@A4 @sin prmetrosD no devuelve ningn vlorD etFAD y que los dtos onretos los enontrr ms delnteF he hehoD si quitmos ess dos lnesD este progrm no ompil en uro gCC IFHI ni en ymnte gCC TFHD porque undo se enuentr en 4min@A4

CAPTULO 11.

PROGRAMAS DE VARIOS FUENTES

WQ

l llmd 4uno@A4D d por supuesto que v ser un funin de tipo 4int4F gomo despus le deimos que es 4void4D protestF @in mioD qggD que suele ser ms exigenteD en este so se limit visrnosD pero ompil el progrm sin prolemsAF v soluin hitul en estos sos en que hy que delrr prototipos de funiones @espeilmente undo se trt de funiones omprtids por vrios fuentesA suele ser grupr estos fuentes en 4(heros de eer4F or ejemploD podrmos rer un (hero llmdo itiwvyFr que ontuvieseX GB itiwvyFr BG void uno@AY void dos@int numeroAY GB rototipos de ls funiones BG y en el fuente prinipl esriirmosX 5inlude `stdioFhb 5inlude 4ejemploFh4 int min@A { printf@4istmos en el uerpo del progrmFn4AY uno@AY dos@QAY return HY } equ es importnte reordr l difereni en l form de indir los dos (heros de eerX `stdioFhb e indi entre orhetes ngulres porque el (hero de eer es propio del ompildor @el ordendor lo usr en los diretorios del ompildorAF 4ejemploFh4 e indi entre omills porque el (hero r es nuestro @el ordendor lo usr en el mismo diretorio que estn nuestros fuentesAF pinlmenteD onviene her un onsiderinX si vrios fuentes distintos neesitrn eder itiwE vyFrD deermos evitr que este (hero se inluyese vris veesF isto se suele onseguir de(niendo un vrile simli l primer vez que se enlzD de modo que podmos ompror prtir de entones si dih vrile est de(nidD on 5ifdefD sX GB itiwvyFr mejordo BG 5ifndef itiwvyr 5de(ne itiwvyr void uno@AY void dos@int numeroAY GB rototipos de ls funiones BG 5endif

11.2. Introduccin al uso de la herramienta Make


wke es un herrmient que muhos ompildores inorporn y que nos puede ser de utilidd undo se trt de proyetos de un ierto tmoD o l menos redos prtir de stntes fuentesF u uso norml onsiste simplemente en teler weuiF intones est herrmient usr su (hero de on(gurinD un (hero de texto que deer llmrse 4mke(le4 @podemos drle otro nomreY y veremos moAF iste (hero de on(gurin le indi ls dependenis entre (herosD es deirD qu (heros es neesrio utilizr pr rer un determindo 4ojetivo4F isto permite que no se reompile todos y d uno de los fuentes si no es estritmente neesrioD sino slo quellos que se hn modi(do desde l ltim ompilinF in generlD el ontenido del (hero 4mke(le4 ser lgo preido estoX ojetivoX dependenis rdenes @in l primer lne se esrie el ojetivoD seguido por dos puntos y por l list de dependenE isY en l segund lne se esrie l orden que hy que dr en so de que se neesrio reompilrD preedid por un tuldorAF i queremos dir lgn omentrioD st on preederlos on el smolo 5F mos rer un ejeutle llmdo ifeFii prtir de utro (heros fuente llmdos xyFgD hyFgD iFgD geyFgD usndo uro gCCF esD nuestro primer mke(le podr ser un (hero que ontuviese el

CAPTULO 11.

PROGRAMAS DE VARIOS FUENTES

WR

siguiente textoX ifeFiiX xyFg hyFg iFg geyFg gg EeifeFii xyFg hyFg iFg geyFg is deirX nuestro ojetivo es onseguir un (hero llmdo ifeFiiD que queremos rer prtir de vrios (heros llmdos xyFgD hyFgD iFg y geyFgF v orden que queremos dr es l que pree en l segund lneD y que permiteD medinte el ompildor ggD rer un ejeutle llmdo ifeFii prtir de utro fuentes on los nomres nterioresF @v opin 4Ee4 de uro gCC permite indir el nomre que queremos que teng el ejeutleY si noD se llmr xyFiiD porque tomr su nomre del primero de los fuentesAF r qu nos sirve estoc he momentoD nos permite horrr tiempoX d vez que telemos weuiD se lee el (hero weuipsvi y se ompr l feh @y horA del ojetivo on l de ls dependenisY si el (hero ojetivo no existe o si es ms ntiguo que lgun de ls dependenisD se reliz l orden que pree en l segund lne @de modo que evitmos esriirl omplet d vezAF in nuestro soD d vez que teleemos weuiD ourrir un de ests tres posiiliddes i no existe el (hero ifeFiiD se re uno nuevo utilizndo l orden de l segund lneF i y existe y es ms reiente que los utro fuentesD no se reompil ni se he ndD todo qued omo estF i y existeD pero se h modi(do lguno de los fuentesD se reompilr de nuevo pr otener un (hero ifeFii tulizdoF iso sD estmos dndo por supuesto vris oss si evidentesX ue tenemos l herrmient weui y est esile @en el diretorio tul o en el erAF ue hemos redo el (hero weuipsviF ue existen los utro (heros fuente xyFgD hyFgD iFg y geyFgF ue existe el ompildor gg y est esile @en el diretorio tul o en el erAF ymos mejorndo este weuipsvi rudimentrioF v primer mejor es que si l list de dependenis no e en un ni lineD podemos prtirl en dosD emplendo l rr invertid ifeFiiX xyFg hyFg 5yjetivo y dependenis iFg geyFg 5 ws dependenis gg EeifeFii xyFg hyFg iFg geyFg 5yrden dr el rer el weuipsvi hmos gndo en veloidd de teleo y en que no se reompilse todo nuevmente si no se h modi(do ndF ero en unto un fuente se modi(D nuestro weuipsvi reompil todos otr vezD unque los dems no hyn midoF isto podemos mejorrlo diendo un pso intermedio @l rein d (hero ojeto yftA y ms ojetivos @d (hero yftD prtir de d (hero fuenteAD sX 5 greion del (hero ejeutle prueFexeX unoFoj dosFoj tresFoj t EeprueFexe unoFoj dosFoj tresFoj 5 greion de los (heros ojeto unoFojX unoF t E unoF dosFojX dosF t E dosF tresFojX tresF t E tresF istmos detllndo los psos que normlmente se dn l ompilrD y que muhos ompildores relizn en un ni etpD sin que nosotros nos demos uentX primero se onvierten los (heros fuente @(heros on extensin gA digo mquin @digo ojetoD (heros on extensin yftA y (nlmente los (heros ojeto se enlzn entre s @y on ls iliotes propis del lengujeA pr dr lugr l progrm ejeutle @en wshos y indows normlmente sern (heros on extensin iiAF es onseguimos que undo modi(quemos un nio fuenteD se reompile slo este @y no todos los demsD que pueden ser muhosA y despus se pse diretmente l proeso de enlzdoD on lo que se puede gnr muho en veloidd si los mios que hemos heho l fuente son pequeosF @xotX l opin 4E4 de uro gCC es l que le indi que slo ompile los (heros de g yftD pero sin enlzrlos despusAF i tenemos vrios weuipsvi distintos @por ejemploD d uno pr un ompildor diferenteD o pr versiones ligermente distints de nuestro progrmAD nos interesr poder utilizr nomres distintosF isto se onsigue on l opin 4Ef4 de l orden weuiD por ejemplo si telemos weui Efife l herrmient weui usr un (hero de on(gurin llmdo ife o ien ifeFweuF odemos mejorr ms n estos (heros de on(gurinF or ejemploD si preedemos l orden por dD dih orden no preer esrit en pntll ifeFiiX xyFg hyFg iFg geyFg dgg EeifeFii xyFg hyFg iFg geyFg si preedemos l orden por 8 D se repetir pr los (heros indidos omo 4dependenis4F ry que usrlo en onjunin on l mro 6BBD que he refereni todos los (heros dependientesD o 6cD que se re(ere los (heros que se hyn modi(do despus que el ojetivoF opieguriddX unoF dosF tresF 8opy 6BB Xfuentes n ltim onsiderinX podemos rer nuestrs propis mrosD on l intenin de que nuestro weuipsvi resulte ms fil de leer y de mntenerD de modo que un versin ms legile de nuestro primer (hero serX pixi a unoF dosF tresF gywsv a t prueFexeX 6@pixiA 6@gywsvA EeprueFexe 6@pixiA is deirD ls mros se de(nen poniendo su nomreD el signo igul y su de(niinD y se emplen preedindols de 6 y enerrndols entre prntesisF ero todv hy ms que no hemos vistoF vs herrmients weui suelen permitir otrs posiiliddesD omo l omproin de ondiiones @on ls diretivs 43if4D 43else4 y similresA o l relizin de operiones @on los operdores estndr de gX CD BD 7D b#bD etAF uien quier profundizr en estos y otros detllesD puede reurrir l mnul de l herrmient weui que inorpore su ompildorF elgun difereni en vinuxc osF lo hy que

CAPTULO 11.

PROGRAMAS DE VARIOS FUENTES

WS

reordr que en los sistems nix se distingue entr mysuls y minsulsD por lo que l herrmient se llm mkeD y el (hero de dtos wke(le o mke(le @preferile l primer nomenlturD on l primer letr en mysulsAF he igul modoD el nomre del ompildor y los de los fuentes se deen esriir dentro del wke(le extmente omo se hyn redo @hitulmente en minsulsAF

Captulo 12

Gestion de memoria.
12.1. Gestin dinmica de la memoria.
egn lo visto hst horD l reserv o signin de memori pr vetores y mtries se he de form utomti on l delrin de dihs vrilesD signndo su(iente memori pr resolver el prolem de tmo mximoD dejndo el resto sin usr pr prolems ms pequeosF esD si en un funin enrgd de relizr un produto de mtriesD sts se dimensionn pr un tmo mximo @IHHD IHHAD on dih funin se podr lulr ulquier produto de un tmo igul o inferiorD pero un en el so de que el produto se por ejemplo de tmo @QD QAD l memori reservd orresponder l tmo mximo @IHHD IHHAF is muy til el poder reservr ms o menos memori en tiempo de ejeuinD segn el tmo del so onreto que se vy resolverF e esto se llm reserv o gestin dinmi de memoriF ixisten en g dos funiones que reservn l ntidd de memori desed en tiempo de ejeuinF hihs funiones devuelvenD es deirD tienen omo vlor de retornoD un puntero l primer posiin de l zon de memori reservdF ists funiones se llmn mllo@A y llo@AD y sus delrionesD que estn en l lirer stdliFhD son omo sigueX void Bmllo@int nytesA voidBllo@int ndtosD int tmodtoA v funin mllo@A us en l memori el espio requeridoD lo reserv y devuelve un puntero l primer elemento de l zon reservdF v funin llo@A neesit dos rgumentosD el numero de elds de memori deseds y el tmo en ytes de d eldY se devuelve un puntero l primer eld de memoriF v funin llo@A tiene un propiedd diionlX iniiliz todos los loques eroF ixiste tmin un funin llmd free@A que dej lire l memori reservd por mllo@A o llo@A y que y no se v utilizrF ist funin us omo rgumento el puntero devuelto por llo@A o mllo@AF v memori no se lier por defetoD sino que el progrmdor tiene que lierrl explitmente on l funin free@AF il prototipo de est funin es el siguienteX void free@void BA e ontinuin se present un ejemplo de gestin dinmi de memori pr el produto de mtriz por vetor {y}a{x}F ry que tener en uent que reservndo memori por seprdo pr d (l de l mtrizD no se grntiz que ls (ls estn ontigus en l memoriF or otr prteD de est form se pueden onsiderr (ls de distinto tmoF il nomre de l mtriz se delr omo puntero vetor de punterosD y los nomres de los vetores omo punterosF upngse que x es un onstnte simli prede(nid on el nmero de (lsF GG delriones doule BBD BxD ByY void prod@int D doule BBD doule BD doule BAY FFF GG reserv de memori pr l mtriz a llo@xD sizeof@doule BAAY WT

CAPTULO 12.

GESTION DE MEMORIA.

WU

for @iaHY i`xY iCCA iallo@xD sizeof@douleAAY FFF GG reserv de memori pr los vetores x e y x a llo@xD sizeof@douleAY y a llo@xD sizeof@douleAY FFF prod@xD D xD yAY FFF GG de(niion de l funion prod@A void prod@int xD doule BBmtD doule BxD doule ByA {FFF} gon gestin dinmi de memori es ms fil utilizr mtries de(nids omo vetores de punteros que mtries utntis @tmin sts podrn utilizrse on memori dinmiX str reservr memori pr ls x (ls l vez y signr onvenientemente los vlores l vetor de punteros iAF il ejemplo nterior quedr del siguiente modoX GG delriones doule BBD BxD ByY void prod@int D doule BBD doule BD doule BAY FFF GG reserv de memori pr el vetor de punteros a llo@xD sizeof@doule BAAY GG reserv de memori pr tod l mtriz H a llo@xBxD sizeof@douleAAY GG signin de vlor pr los elementos del vetor de punteros for @iaIY i`xY iCCA i a iEICxY GG el resto del progrm ser idntio FFF

12.2. REGLAS DE FUNCIONAMIENTO DE LA ASlGNAClN DE MEMORIA


gomo y se h omentdo se puede signr espio pr ulquier ojeto dto de gF vs regls pr utilizr ls funiones mllo @ A D l I o @ A D rello @ A y free @ A omo medio pr otenereierr espio lire de memori son ls siguientesX IF il prototipo de ls funiones est en stdl iFhF 5inlude `stdliFha intB dtosY FFF dtos a @intBAmllo@sizeof@intAAY PF vs funiones mllo @ A D llo A D rdllo @ A devuelven el tipo voidBD lo ul exige her un onversin l tipo del punteroF 5inlude `stdliFhb void min @ A i douleB veY int nY ve a @douleBAllo@nDsizeof@doiileAAY i QF vs funiones de signin tienen omo rgumento el nmero de ytes reservrF RF il operdor sizeof permite lulr el tmo de un tipo de ojeto pr el que est signndo memoriF strut punto { )ot x D y D z Y sY strut puntoBp a @strut puntoBAmllo@sizeof@strut puntoAAY SF v funin rello @ A permite expndir memori reservdF 5inlude `stdliFhb int BvaxvvYY int nY snf @4 7d4D Y 8nA v a @intBArello@vDnAY v a @intBArello@vDcBnAY TF vs funiones de signin de memori devuelven xvv si no hn podido reservr l memori requeridF doule4 vY v a mllo@lHHHBsizeof@douleAAY if @v aa xvvA i puts @4irror de signin de memoriF4 A exit@EIAY Y } U e puede utilizr ulquier funin de signin de memori pr reservr espio de ojetos F ms omplejosD tles omo estrutursD rrysD en el lmenmiento lireF 5inlude `stdliFhb strut omplejo )ot xDyY IY void min@A s strut omplejoB pzY G B untero estrutur omplejo B G int nY snfG4 7d4D Y 8nA G B esign memori pr un rry de tipo omplejo B G pz a @strut omplejo BAllo@nDsizeof@strut omplejoAAY if @pz a a xvvA i puts @4irror de signin de memoriF4A Y exit@EIAY I VF e pueden rer rrys multidimensionles de ojetos on ls funiones de signin de memoriF r un rry idimensionl n x mD se sign en primer lugr memori pr un rry de punteros @de s elementosAD y despus se sign memori pr d (l @ m elementosA on un ule desde y nE IF 5inlude `stdliFhb doule BBmtY int nDmDiY mt a @douleBBAmllo@nBsizeof@douleBAAYGB rry de punteros B G for @iayY i`nY

CAPTULO 12.

GESTION DE MEMORIA.

WV

iCCA { mtila@douleBAmllo@mBsizeof@douleAAYGB(l de m elementos B G s I WF od memori reservd on lgun de ls funiones de signin de memori se puede lierr on l funin free @ A F r lierr l memori de l mtriz dinmi mtX doule BBmtY for @iayY i`nY iCCA i free@mtil A Y

12.3. Matrices dinamicas.


n nomre de un rry es relmente un puntero onstnte que se sign en tiempo de ompilinX )ot mQHY G B m es un puntero onstnte un loque de QH lotBG )ot4 onst p a @ f l o t B A m ~ l l o @ Q H B s i z e o f o A Y m y p son punteros onstntes loques de QH nmeros reles @)otAF v delrin de m se denomin ligdur estti deido que se sign en tiempo de ompilinY el smolo se enlz l memori signd unque el rry no se utiliz nun durnte l ejeuin del progrmF or el ontrrioD se puede utilizr un puntero no onstnte pr posponer l signin de memori hst que el progrm se est ejeutndoF iste tipo de enle o ligdur se denomin ligdur dinmi o ligdur en tiempo de ejeuin )ot4 p a @)otBArnl~o@Qyxsizeof@)otAAY n rry que se delr de este modo se denomin rry dinmioF gomprr los dos mtodos de de(niin de un rry H )ot mQHIY G B rry esttio B G )otB pa@)otBAmllo@QHBsizeof@)oDaitAAYB rry dinmioBG G il rry esttio m se re en tiempo de ompilinY su memori permnee signd durnte tod l ejeuin del progrmF il rrv dinmio se re en tiempo de ejeuinY su memori se sign slo undo se ejeut su delrinF xo ostnteD l memori signd l rry p se lier tn pronto omo se invo l funin free @ A D de este modo free @pAY

12.4. Listas enlazadas


n list enlzd es un olein o seueni de elementos dispuestos uno detrs de otroD en l que d elemento se onet l siguiente elemento por un enle o puntero F v ide si onsiste en onstruir un list uyos elementos llmdos nodos se omponen de dos prtes o mposX l primer prte o mpo ontiene l informin y esD por onsiguienteD un vlor de un tipo genrio @denomindo htoD ipoilementoD nfoD etFA y l segund prte o mpo es un puntero @denomindo enle o sgteA que punt l siguiente elemento de l listF vs lists se pueden dividir en utro tegors X vists simplemente enlzdsF gd nodo @elementoA ontiene un nio enle que onet ese nodo l nodo siguiente o nodo suesorF v list es e(iente en reorridos diretos @@`delnte AF vists dolemente enlzdsF gd nodo ontiene dos enlesD uno su nodo predeesor y el otro su nodo suesorF v list es e(iente tnto en reorrido direto @delnte A omo en reorrido inverso @trs AF vist irulr simplemente enlzdF n list enlzd simplemente en l que el ltimo elemento @olA se enlz l primer elemento @ezA de tl modo que l list puede ser reorrid de modo irulr @en nillo AF vist irulr dohlenzente enlzdF n list dolemente enlzd en l que el ltimo elemento se enlz l primer elemento y vieversF ist list se puede reorrer de modo irulr @en nilloA tnto en direin diret @delnte A omo invers @trs AF or d uno de estos utro tipos de estruturs de listsD se puede elegir un implementin sd en rrys o un implementin sd en punterosF gomo y se h omentdo ests implementiones di(eren en el modo en que sign l memori pr los dtos de los elementosD mo se enlzn juntos los elementos y mo se ede dihos elementosF he form ms espe(D ls implementiones pueden herse on ulquier de stsX esignin(jD o esttiD de memori medinte rryF esignin dinmi de memori medinte punterosF hdo que l signin (j de memori medinte rrys es ms ine(ienteD utilizremos en este ptulo y siguientesD l signin de memori medinte punterosD dejndo omo ejeriio l letor l implementin medinte rrysF

12.5. OPERACIONES EN LISTAS ENLAZADAS


n list enlzd requiere unos ontroles pr l gestin de los elementos ontenidos en ellsF istos ontroles se mni(estn en form de operiones que tendrn ls siguientes funionesX helrin de los tipos nodo y puntero nodoF sniiulizin o reinF snsertr elementos en un listF iliminr elementos de un listF fusr elementos de un lisf @ompror l existeni de elementos en un listAF eorrer un list enlzd @visitr d nodo de l listAF gompror si l list est vF

CAPTULO 12.

GESTION DE MEMORIA.

WW

12.5.1. Declaracin de un nodo


n list enlzd se ompone de un serie de nodos enlzdos medinte punterosF gd nodo es un ominin de dos prtesX un tipo de dto @enteroD relD doleD rter o tipo prede(nidoA y un enle @punteroA l siguiente nodoF in gD se puede delrr un nuevo tipo de dto por un nodo medinte ls plrs reservds s t rut que ontiene ls dos prtes itdsF strut xodo I int dtoY strut xodoB enleY sY typedef strut xodo i int d t o Y strut xodo 4enleY Ixyhy Y v delrin utiliz el tipo strut que permite grupr mpos de diferentes tiposD el mpo dto y el mpo enleF gon typedef se puede delrr l vez un nuevo identi(dor de strut xodoDen el so nterior se h elegido x y h yF hdo que los tipos de dtos que se puede inluir en un list pueden ser de ulquier tipo @enterosD dolesD rteres o inluso densAD on el ojeto de que el tipo de dto de d nodo se pued mir on filiddD se suele utilizr un senteni vypedf pr delrr el nomre de ilemento omo un sinnimo del tipo de dto de d mpoF il tipo ilernento se utiliz entones dentro de l estrutur nodoD omo se muestr ontinuinX typedef doule ilementoY svrut nodo i ilemento dtoY trut nodo BenleY IY intonesD si se neesit mir el tipo de elemento en los nodosD slo tendr que mir l senteni de delrin de tipos que fet ~I ementoFiempre que un funin neesite referirse l tipo del dto del nodoD puede utilizr el nomre tFDl ernentoF

12.5.2. Puntero de cabecera y cola


xormlmenteD los progrms no delrn relmente vriles de nodosF in su lugrD undo se onstruye y mnipul un list enlzdD l list se ede trvs de uno o ms punfevos los nodosF il eso ms freuente un list enlzd es trvs del primer nodo de l list que se llm ez o eer de l listF n puntero l primer nodo se llm puntero ezF in osionesD se mntiene tmin un puntero l ltimo nodo de un list enlzdF il ltimo nodo es l ol de l listD y un puntero l ltimo nodo es el puntero olF min se pueden mntener punteros otros nodos de un list enlzdF gd puntero un nodo dee ser delrdo omo un vrile punteroF or ejemploD si se mntiene un list enlzd on un puntero de eer y otro de olD se deen delrr dos vriles punteroX strut nodo Bptr EezY strut nodo BptrEolY il tipo strut nodo vees se simpli( utilizndo l delrin typedef F es podemos esriirX typedef typedef ptrnodo ptrnodo strut nodo xyhyY strut nodoB ptrnodoY ptrEeyY ptrEolY v onstruin y mnipulin de un list enlzd requiere el eso los nodos de l list trvs de uno o ms punteros nodosF xormlmenteD un progrm inluye un puntero i primer nodo @ezA y un puntero l ltimo nodo @olAF in ulquier formD el ltimo elemento de l list ontiene un vlor de yD esto esD un puntero nulo @ x vv A que sel el (nl de l listF

12.5.3. El puntero nulo


v plr x v s D represent el puntero nuloD que es un onstnte espeil de gF e puede utilizr el puntero nulo pr ulquier vlor de puntero que no punte ningn sitioF il puntero nulo se utilizD normlmenteD en dos situionesX y sr el puntero nulo en el mpo enle o siguiente del nodo (nl de un list enlzdF gundo un list enlzd no tiene ningn nodoD se utiliz el puntero x v v omo puntero de ez y de olF l list se denomin list vF in un progrmD el puntero nulo se puede esriir oino xvvD que es un onstnte de l iliote il estndr stdliFh9F puntero nulo se puede signr un vrile puntero on un senteni de signin ordinriF il puntero de ez y de ol en un list enlzd puede ser xvvD lo que indir que l list es v @no tiene nodosAF ste suele ser un mtodo usul pr onstruir un listF gulquier funin que se esrie pr mnipulr lists enlzds dee poder mnejr un puntero de ez y un puntero de ol nulosF

12.5.4. El operador - > de seleccin de un miembro


i p es un puntero un estrutur y m es un miemro de l estruturD entones p miemro m de l estrutur puntd por F Eb m ede l il smolo 4Eb4 se onsider omo un operdor simple @en vez de ompuestoD l onstr de dos smolos independientes 4 E 4 y 4b4F e denomin operudor de selein de miemro o tmin operdor de selein de omponenteF he modo visul el operdor E b m reuerd un )eh que punt del puntero p l ojeto que ontiene l miemro mF uponiendo que un progrm h

CAPTULO 12.

GESTION DE MEMORIA.

IHH

de onstruir un list enlzd y rer un puntero de eer ptrEez un nodo x o d o D el operdor B de indirein plido un vrile puntero represent el ontenido del nodo puntdo por ptrEezFis deirD Bpt rEez es un tipo de dto ~ o d o F el igul que on ulquier ojetoD se puede eder los dos miemros de BptrEez en l pigur IRFSF or ejemploD l senteni siguiente esrie los dtos del nodo eerF p r intf @4 7lf4D@BptrEdezdA FdtoAY @BptrEezA miemro d t o del nodo dpuntddo por ptrEez reuin vos prntesis son neesrios lrededor de l primer prte de l expresin @ 4ptrEezA y que los operdores unitrios que preen l dereh tienen prioridd ms lt que los operdores unitrios que preen en el ldo izquierdo @el steriso de indireinAF in los prntesisD el signi(do de pt rEe v produir un error de sintxisD l intentr evlur ptrEezFdto ntes de l indirein o desrefereniF s E b m signi( lo mismo que tilizndo el operdor de selein Eb @ BpA Fm s se pueden imprimir los dtos del primer nodo de l list printf @4 7lf4 ptrEezEbdtoA Y D irror no de los errores tpios en el trtmiento de punteros es esriir l expresin Bp o ien pEb undo el vlor del puntero p es el puntero nuloD y que omo se se el puntero nulo no punt ndF

12.6. Construccion de una lista enlazada en forma lineal


n lgoritmo pr l rein de un list enlzd entr los siguientes psosX so s F helrr el tipo de dto y el puntero de ev o primeroF uso PF esignr memori pr un elemento del tipo de(nido nteriormente utilizndo lgun de ls funiones de signin de memori @mdilo @ A D lio @ A D relio @ A A y un st pr l onversin de voidB l tipo puntero nodoY l direin del nuevo elemento es p t rEnuevoF so QF grer itertivmente el primer elemento @ezA y los elementos suesivos de un list enlzd simplementeF uso RF epetir hst que no hy ms entrd pr el elementoF n list enlzd onst de un nmero de elementos y d elemento tiene dos omponentes @mposAD un puntero i siguiente elemento de l list y un vlorD que puede ser de ulquier tipoF vos psos pr l onstruion de un list il (nl de l list se mr signndo el vlor nulo l mpo puntero del ltimo elementoF e mnejn dos punteros uxilires pr poder eder l primer elemento y l ltimoF e us un vrile genri pr representr los elementos de l listF snsertr un elemento en un list il lgoritmo empledo pr dir o insertr un elernento en un list enlzd vr dependiendo de l posiin en que se dese insertr el elementoF v posiin de inserin puede serX y y y y in l ez @elemento primeroA de l listF in el (nl de l list @elemento ltimoAF entes de un elemento espei(doF hespus de un elemento espei(doF snsertr un nuevo elemento en l ez de un list eunque normlE mente se insertn nuevos dtos l (nl de un estrutur de dtosD es ms fil y ms e(iente insertr un elemento nuevo en l ez de un listF il proeso de inserin se puede resumir en este lgoritmoX IF esignr un nuevo nodo puntdo por n u e v o que es un vrile puntero lol que punt l nuevo nodo que se v insertr en l listF PF itur el nuevo elemento en el mpo dto @snfoAdel nuevo nodoF QF rer que el mpo enle siguiente del nuevo nodo punte l ez @primer nodoA de l list originlF RF rer que ez @puntero ezA punte l nuevo nodo que se h redoF he(niin de dtosX 5 de(ne xvv H typedef hr syheyY strut list { syhey dtoY strut list BsiguienteY }Y typedef strut list iviwixyY typedef iviwixy BixvegiY

CAPTULO 12.

GESTION DE MEMORIA.

IHI

ixvegi nodoD prinipioD (nY nodo a mllo@ sizeof@iviwixyA AY nodo Eb dto a 9e9Y nodo a xvvY prinipio a (n a nodoY nodo a mllo @ sizeof@iviwixyA AY nodo Eb dto a 9f9Y nodo Eb siguiente a xvvY (n Eb siguiente a nodoY (n a (n Eb siguienteY etirr un elemento nodo a prinipioY prinipio a prinipio Eb sigY nodo Eb siguiente a xvvY void ypionQ @ixvegi pA { if @ paaxvv A printf@4xo hy elementos en oln4AY else listr@pAY } void listr @ixvegi pA { while @ pEbsig 3a xvv A { printf@4 74D pEbdtoAY papEbsigY } printf@4 74D pEbdtoAY printf@4n4AY } void leerden@hr BsD int lonA { int iaHY while @ @siagethr@AA 3a 9n9 A if @ i`@lonEIA A iCCY sia9H9Y } void mensje@A { printf@4rogrm gyven4AY printf@4iste progrm permite mnejr un golX 4AY printf@4vist endendn4AY printf@4on disiplin pspy @primero en entrrD 4AY printf@4primero en slirAn4AY } void preguntr@A { printf@4nue opion @ IEenidirD PEetirrD 4AY printf@4QEvistrD RE erminrA c n4AY }

12.7. lista de listas.


vs lists de lists se trt de un list enlzd @simple o doleA en l que uno de sus elementos es su vez un list @simple o doleA

CAPTULO 12.

GESTION DE MEMORIA.

IHP

ijemplo xomre sdiom pri ult i se quiere lmenr l informin de l medlls onseguids por los distintos pses en un olimpidF r d ps se quiere ser su nomreD su idiom y l informin de ls medlls onseguidsF he d medll de d ps se quiere onoer el nomre del deportist que l onsiguiD el nomre de l prue en l que l onsigui y el tipo de medll @oroD plt o roneA

12.8. Operaciones listas doblemente enlazadas


rst hor el reorrido de un list se reliz en sentido direto @delnteA oD en lgunos sosD en sentido inverso @hi trsAF in emrgoD existen numeross pliiones en ls que es onveniente poder eder los elementos o nodos de un list en ulquier ordenF in este so se reomiend el uso de un list dolemente enlzdF in tl listD d elemento ontiene dos punterosD prte del vlor lmendo en el elementoF n puntero punt l siguiente elemento de l list y el otro puntero punt l elemento nteriorF v pigur IRFT muestr un list dolemente enlzd y un nodo de dih listF

12.8.1. Declaracin de una lista doblemente enlazada


n list dolemente enlzd on vlores de tipo int neesit dos punteros y el vlor del mpo dtosF in un estrutur se grupn estos dtos del modo siguienteX typedef i n t stemY strut unnodo s stem dtoY strut unnodo BdelnteY strut unnodo BtrsY sY tEypedef strut unnodo xodoY

12.8.2. Insertar un elemento en una lista doblemente enlazada


il lgoritmo empledo pr dir o insertr un elemento en un list dole vr dependiendo de l posiin en que se dese insertr el elementoF v posiin de inserin puede serX y y y y in l ez @elemento primeroA de l listF in el (nl de l list @elemento ltimoAF entes de un elemento espei(doF hespus de un elemento espei(doF snsertr un nuevo elemento en l ez de un list dole il proeso de inserin se puede resumir en este lgoritmoX IF esignr un nuevo nodo puntdo por nuevo que es un vrile puntero lol que punt l nuevo nodo que se v insertr en l list doleF PF itur el nuevo elemento en el mpo dito @ ~ n f o A nuevo nodoF del QF rer que el mpo enle delnte del nuevo nodo punte l ez @primer nodoA de l list originlD y que el mpo enle tErs del nodo ez punte l nuevo nodoF R rer que ez @puntero ezA punte l nuevo nodo que se h redoF F ghdigo g typedet int stemY typedf strut tipoEnodo i stem dtoY strut tipoEnodoB delnteY strut tipopnodoB trsY }xodoY xodoB nuevoY nuevo a @xodoBArnllo@sizeof x o d o A A Y @ nuevo E b dto a e n t r d nuevo E b delnte a ezdY nuevo E b trs a xDDY ez E b trs a nuevoY ez a nuevoY in este momentoD l funin de insertr un elemento en l list termin su ejeuin y l vrile lol nuevo despree y slo permnee el puntero de ez ez que punt l nuev list dolemente enlzdF snserin de un nuevo nodo que no est en l ez de list v inserin de un nuevo nodo en un list dolemente enlzd se puede relizr en un nodo intermedio de ellF il lgoritmo de l nuev operin insertr requiere ls siguientes etpsX IF esignr el nuevo nodo puntdo por el puntero nuevoF PF itur el nuevo elemento en el mpo dto @lnfoA del nuevo nodoF QF rer que el mpo enle delnte del nuevo nodo punte l nodo que v despus de l posiin del nuevo nodo @ o ien xIDv si no hy ningn nodo despus de l nuev posiinAF il mpo trs del nodo siguiente l nuevo tiene que puntr nuevoF RF v direin del nodo que est ntes de l posiin desed pr el nuevo nodo est en l vrile puntero nteriorFrer que nterior Eb delnte punte l nuevo nodoF il enle trds del nuevo nodo dee de puntr nt er lor F ghdigo g nuevo a @xodoBAmllo@sizeof@xodoAA Y nuevo E b dto a entrd Y nuevo E b delnte a nterior E b delnteY nterior E b delnte E b trs a nuevoY G B mpo trs del siguiente punt l nodo nuevo redo B G nterior E b delnte a nuevoY nuevo E b trs a nteriorY

12.8.3. Supresin de un elemento en una lista doblemente enlazada


v operin de eliminr un nodo de un list dole supone relizr el enle de dos punterosD el nodo nterior on el nodo siguiente l que se dese eliminr on el puntero delnte y el nodo siguiente on el nterior on el puntero trs y lierr l memori que oupF il lgoritmo pr eliminr un nodo que ontiene un dto es similr l lgoritmo de orrdo pr un list simpleF ehor l direin del nodo nterior se enuentr

CAPTULO 12.

GESTION DE MEMORIA.

IHQ

en el puntero trs del nodo orrrF vos psos seguirX IF fsqued del nodo que ontiene el dtoF e h de tener l direin del nodo eliminr y l direin del nteriorF PF il puntero delnte del nodo nterior tiene que puntr l puntero delnte del nodo eliminrD esto en el so de no ser el nodo eerF QF il puntero trs del nodo siguiente orrr tiene que puntr l puntero trs del nodo eliminrD esto en el so de no ser el nodo ltimoF RF in so de que el nodo eliminr se el primeroD ezDse modi( ez pr que teng l direin del nodo siguienteF SF or ltimoD se lier l memori oupd por el nodoF v odi(in se present en l siguiente funinX void eliminr @xodoBB ezD item entrdA xodoB tulY int enontrdo a yY itul BezY G B ~ u i ede squed B G while @@tul3axvvA 8 8 @3enontrdoAA E enontrdo a @tulEbdto a E entrdAY if @3enontrdoA tul a tul E b deldritY s G B inle de nodo nterior on s i q i i i ~ n t eB G if @tul 3 a xvvA i G B e distinque entre q u e el nodo sed el eer o del resto de l list B G if @tul a a 4ezdA i 4ez a tulEbdelnteY if @tulEbdelnte 3 a xvvA tulEbdelnteEbtrs a xvvY I else if @tulEbdelnte 3 a xvvA G B xo es el iiltimo nodo B G { tul E b trs Ebdelnte a tul E b delnteY tul E b delnte E b trds a tul E b trsY i else { G B ltimo nodo B G tul E b trs E b delnte a xvvY free@tuIAY i }

12.9. LISTAS CIRCULARES


in ls lists lineles simples o en ls doles siempre hy un primer nodo y un ltimo nodo que tiene el mpo de enle nuloF n iistu irulrD por propi nuturule~u tiene ni prinipio niD(nF in no emrgoD result til estleer un nodo prtir del ul se ed l list y s poder eder sus nodosF v pigur IRFW muestr un list irulr on enle simpleY podr onsiderrse omo un list linelD de tl mner que el ltimo nodo punt l primeroF vs operiones que se relizn sore un list irulr son similres ls operiones sore lists linelesD teniendo en uent que el TItFirrio nodo no punt nulo sino l p r i m e r o F v rein de un list irulr se puede her on un enle simple o un enle doleF gonsidermos que l list irulr se enlz on un solo enleD l relizin on enle delunt y utrs es similr

12.9.1. Insertar un elemento en una lista circular


il lgoritmo empledo pr dir o insertr un elemento en un list irulr vr dependiendo de l posiin en que se dese insertr el elementoF v posiin de inserin puede vrirD onsidermos que e he oino nodo nterior l del nodo de eso l list vvFD y que sD@EF tiene l direin del ltimo nodo insertdoF e ontinuin se esrie l delrin de un nodoD un funin que re un nodo y l funin que insert el nodo en l list irulrF sFypedef h r B stemY typedf s t r u t iX e m e n t F o i stem d t o Y stru t ilemento4 s i gu i eritFe Y I xodo Y xodoB xuevoxodo @ t F e m x i xodo B Y @xodoBAmllo@s E b dto a Y E b siyuiente d X uY r e t Eu r n Y } vo i d n se r E t g i r E II I r @ xodo B B i xodoB nuevo Y nuevo a xuevoxodo @entrddii if @Bve 3 a xstvsDA GB s nuevo b siguiente a @B s Bv a nuevoY }

12.9.2. Supresin de un elemento en una lista circular


v operin de eliminr un nodo de un list irulr sigue los mismos psos que los ddos pr eliminr un nodo en un list linelF ry que enlzr el nodo nterior on el nodo siguiente l que se dese eliminr y lierr l memori que oupF il lgoritmo pr eliminr un nodo de un list irulrX IF fsqued del nodo que ontiene el dtoF PF e enlz el nodo nterior on el siguienteF QF in so de que el nodo eliminr se el referenido por el puntero de eso l listD modi( vg pr que teng l direin del nodo nteriorF R or ltimoD se lier l mernori oupd por el nodoF F s@D DX se in l funin de eliminr hy que tener en uent l rtersti de list irulrD s pr detetr si l list es de un solo nodo ourre que se punt l mismoF De a a v D E b s i g u i ente si est expresin es iert l list onst de un solo nodoF e ontinuin se esrie el digo de l funin eliminr pr un list irulrF r ello reorre l list on un puntero l nodo nteriorD por es rzn se ede l dto on l senteni tu~I b s iyui ente bdtoF E E isto permiteD en el so de enontrrse el nodoD tener en d r t u d I el nodo nteriorF hespus del ule es neesrio volver preguntr por el mpo dtoD y que no se ompr el nodo vg y el ule puede her termindo sin enontrr el nodoX gdigo g void eliminr @xodoBB vD stem entrdA i xodoB tul Y int enontrdo a y Y tul a BvY G B fule de squed B G while @@tulEbsiguiente 3a BvA 88 @3enontrdoAA i enontrdo a @ t u d

CAPTULO 12.

GESTION DE MEMORIA.

IHR

l E b i g u i n t E Y d t o if @3enontrdoA aa e n t r d A Y { tul a tul E b siguienteY I I enontrdo a @tulEbsiyui~enteEbdto a entrdAY a G B inle de nodo nterior on s i g i i i e n t e B G if @enontrdoA { xodoB p Y p a tulEbsiguienteY G B xodo il eliminr B G if @Bv a a @BvAEbsiguienteA G B vist on un solo nodo B G Bv a xvvY else { if @ p aa BvA i Bv a tulY G B e o r r el elemento referenido por vY el nuevo eso s d list es el nterior B G } tulEbsiguiente a pEbsiquienteY i f r e e @s Y i }

12.10. Estructuras dinmicas.


e les sign memori en tiempo de ejeuinF ueden expndirse y ontrerseF e ren durnte l ejeuin invondo l funin 4mllo4F vs estruturs dinmis se onstruyen on punteros ixiste un funin que re un relizin del ojetoF n omponente del ojeto es un puntero que 4punt4 otro ojeto del mismo tipoF e onsigue tener un onjunto de ojetos reliondos que puede umentr y disminuir en tiempo de ejeuinF vs estruturs dinmis se mnejn on de(niiones de dtos reursivsF strut list { hr dtoY strut list BsiguienteY } nodoY il ompildor no reserv memori pr ese tipo de ojetosF v rein del ojeto y sigin de memori se he en tiempo de ejeuinD invondo l funin de iliote 4mllo4X mllo @ tmo A vos vlores de ese tipo que se ren durnte l ejeuin no se pueden identi(r por el nomre de vrileD que es slo un identi(dor genrioF e sign memori on 4mllo@A4 e lier memori on 4free@ A4

12.11. Estructuras dinmicas tpicas


12.11.1. COLA.
vist endendD on disiplin pspyF n ol es un estrutur de dtos que lmen elementos en un list y permite eder los dtos por uno de los dos extremos de l list @pigF ISFRAF n elemento se insert en l ol @prte (nlA de l list y se suprime o elimin por l frente @prte iniilD ezA de l listF vs pliiones utilizn un ol pr lmenr elementos en su orden de priin o onurreni vos elementos se eliminn @se quitnA de l ol en el mismo orden en que se lmenn yD por onsiguienteD un ol es un estrutur de tipo pspy @(rstEiid(rsEoutDprimero en iitrrGGcrimero en slir o ien primero en llegrGprimero en ser servidoAF il serviio de tenin lientes en un lmn es un ejemplo tpio de olF v in de gestin de memori intermedi @huferingAde trjos o tres de impresor en un distriuidor de impresors @spoolerA es otro ejemplo tpio de ol9F hdo que l impresin es un tre @un trjoA que requiere ms tiempo que el proeso de l trnsmisin rel de los dtos desde l omputdor l impresorD se orgniz un ol de trjos de modo que los trjos se imprimen en el mismo orden en que se reiieron por l impresorF iste sistem tiene el grn inonveniente de que si su trjo personl onst de un ni pgin pr imprimir y delnte de su petiin de impresin existe otr petiin pr imprimir un informe de QHH pginsF deer esperr l impresin de ess QHH pgins ntes de que se imprim su pginF hesde el punto de vist de estrutur de dtosD un ol es similr un pilD en donde los dtos se lmenn de un modo linel y el eso los dtos slo est permitido en los extremos de l olF vs iones que estn

CAPTULO 12.

GESTION DE MEMORIA.

IHS

permitids en un ol sonX y y y y grein de un ol vF eri(in de que un ol estd vF edir un dto l (nl de un olF iliminin de los dtos de l ez de l olF es igul que ls pilsD ls ols se pueden implementr utilizndo rrys o lists enlzdsF in est sein se onsider l iinplementin utilizndo rrysF v de(niin de un old h de ontener un rry pr lmenr los elementos de l olD y dos mrdores o punteros @vrilesA que mntienen ls posiiones frente y (nl de l ol Y es deirD un mrdor puntndo l posiin de l ez de l ol y el otro l primer espio vo que sigue l (nl de l olF gundo un elemento se de l olD se veri( si el inrdor (nl punt un posiin vlidD entones se de el elemento l ol y se inrement el mrdor (nl en IF gundo un elemento se elimin de l olD se he un prue pr ver si l ol est v yD si no es sD se reuper el elemento de l posiin puntd por el mrdor @punteroA de ez y ste se inrement en IF iste proedimiento funion ien hst l primer vez que el puntero de ez o eer lnz el extremo del rry y el rry qued o ien vo o ien llenoF n ol dee mnejr diferentes tipos de dtosY por est irunstniD se de(ne en primer lugr el tipo genrio ipohtoFv lse gol ontiene un list @listAuyo mximo tmo se determin por l onstnte wxmF e de(nen dos tipos de vriles puntero o mrdoresD frente y f iFndIF sts son los punteros de eer y ol o (nl respetivmenteF vs operiones tpis de l ol sonX snsertrDiliminrDviD l lenDy prenteuF snsertr tom un elernento del tipo ipohto y IH insert en el (nl de l olF iliminr elimin @quitA y devuelve el elemento de l ez o frente de l olF v operin prente devuelve el vlor del elemento en el frente de l olD sin eliminr el elemento yD por tntoD no modi( l olF v operin vi omprue si l ol est vD es neesrio est omproin ntes de eliminr un elementoF llen omprue si l pil est llenD est omproin se reliz ntes de insertr un nuevo miemroF i ls preondiiones pr snsertr y iliminr se violnD el progrm dee imprimir un mensje de error y terminrF ispei(in del tipo ol v delrin del tipo de dto gol y los prototipos de ls operiones de l ol se lmen en un rhivo de eer 4olrryFh4F 5inlude `stdioFhb 5inlude `stdliFhb 5de(ne wx9i9m Iy y typedef strut i int frenteY int (nlY ipohto listwxmY }golY G B yperiones del t i p o de dtos g o l B G G B operiones de modiiin d l ol B G void grergol@golB A Y G B iniiliz l ol omo v i d B G void snsertr@golB Dipohvo elementoAY ipohto iliminr@golB A Y void forrrol @golB A Y G B eso sd ol B G ipohto prente@goI A Y G B mtodos de veri(in del estdo de l ol B G inI vongitud@goI AY inI vi@goI A Y int llen@goI AY v delrin que se h heho del tipo gol ontiene un rry pr el lmenmiento de los elementos de l ol y dos mrdores o punterosX uno puntndo l posiin de l ez o eer de l ol y l otr l primer espio vo ontinuin del (nl de l olF gundo un elemento se de l olD se he un test @prueA pr ver si el mrdor (nl punt un posiin vlidD ontinuin se de el elemento l ol y el mrdor (nl se inrement en IF gundo se quit @eliminA un elemento de l olD se reliz un test @prueA pr ver si l ol est vD y si no es sD se reuper el elemento que se enuentr en l posiin puntd por el mrdor de ez y el mrdor de ez se inrement en IF iste proedimiento funion ien hst l primer vez que el mrdor (nl lnz el (nl del rryF i durnte este tiempo se hn produido eliminionesD hr espio vo l prinipio del rryF in emrgoD puesto que el mrdor (nl punt l extremo del rryD implir que l ol est llen y ningn dto ms se dirF e pueden desplzr los dtos de modo que l ez de l ol vuelve l prinipio del rry d vez que esto suedeD pero el desplzmiento de dtos es ostoso en trminos de tiempo de omputdorD espeilmente si los dtos lmendos en el rry son estruturs de dtos grndesF il medio ms e(ienteD sin emrgoD pr lmenr un ol en un rryD es utilizr un tipo espeil de rry que junte el extremo (nl de l ol on su extremo ezF l rry se denomin rry irulr y permite que el rry ompleto se utilizr pr lmenr elementos de l ol sin neesidd de que ningn dto se despleF yperiones de l ol n ol permite un onjunto limitdo de operionesD pr iniilizr l olD pr dir un nuevo elemento @ snsertrA o quitrGeliminr u n elemento @iliminrAF il tipo gol proporion tmin frenteDque permite ver el primer elemento de l olF r est implementinD on rry irulrD el tipo ol es el siguienteX 5de(ne wxm IHH typedef strut int frenteY int (nlY ipohto listwxmY }golY grerol v primer operin que se reliz sore un ol es iniilizrl pr que ontinuin puedn dirse elementos l olF void grergol@golB A i Ebfrente a y Y Eb(nl a y Y I snsertr entes de que omiene el proeso de inserinD el ndie (nl punt l ltimo elemento insertdoF il nuevo elemento se sit en l posiin siguienteF il lulo de ls posiiones suesivs se onsigue

CAPTULO 12.

GESTION DE MEMORIA.

IHT

medinte el operdor resto @ 7 A F hespus de situr el elemento de l listD el ndie (nl se dee tulizr pr puntr en l siguiente posiinF G B insertr elemento en l ol B G void snsertr@golB sipohto elementoA { G B terminr si l ol est8 llen B G if @llen@AA i puts @4desordmiento old4A Y exit @IAY s G B signr elemento d listd y t u d l i z r (nl B G Ebtinl a @Eb(nl C IA8 wdxdmY Eblistd Ebf inll a elementoY iliminr v operin ~l iminr orr o elimin un elemento del frente de l olD un posiin que se referenE i por el ndie fr enteFgomienz el proeso de eliminin vnzndo frente y que se estlei que refereni l nterior elementoF frente a @frentEe C IA 7 wxmY in el modelo irulrD l ez se dee volver posiionr en el siguiente elemento de l list utilizndo el operdor resto @ 8 A F il digo fuente esX G B orrr elemento del frente de sd old y devuelve su vlor ipohto iliminr@golB A i ipomto duxY GBsi list est vD trminr ev progrm B G @vid@sbAA if { puts@4gIiminuFinde uni old v4A Y exit @IAY I G B dvdnzuFI frente y devolvr primero d e l frente B G Ebfrente a @ E b t r e n t C I A 7 wdx9sdmyY ux a E b l ~ t ~ E b f r e n t Y ieturn uxY t prente v operin i9rente otiene el elemento del frente de l olD un posiin que se refereni por el ndie frenteF ipohto prente@goI A i i p o h t o uxY GBsi l ol e s t 8 viiD tprminiir el progrm B G if @vi@@IA A puts @4ilemento rente de und o l d v u F 4 A Y exit @IAY vi vs operiones que preguntn por el estdo de l ol pueden implementrse preguntndo por los mpos frente y f inuFIFv operin oviF prue si l ol no tiene elementosF int vi@goI yA s return @F r e n t e f aa yF f vt9kilA Y i llen v operin HI s e n d prue si l ol no puede ontener ms elementosF int llen@goId A i return @Ffrente a X @gAF(iiuFlClAwx9rmgAAY I

12.11.2. PILA.
vist endendD on disiplin vspyF n pil @stkA es un olein ordend de elementos los que slo se puede eder por un nio lugr o extremo de l pilF vos elementos de l pil se den o quitn @orrnA de l mism slo por su prte superior @imA de l pilF ste es el so de un pil de pltosD un pil de lirosD etF vs operiones que sirven pr de(nir un pil y poder mnipulr su ontenido son ls siguientes @no tods ells se implementn l de(nir un pilAF ipo de dtoY hto que se lmen en l pilF snsertr @pushAY snsertr un dto en l pilF uitr @popAY r @quitrA un dto de l pilF il vY gompror si l pil no tiene elementosF il llenY gompror si l pil est llen de elementosF vimpir pilY uitr todos sus elementos y dejr l pil vF mo de l pilY xmero de elementos mximo que puede ontener l pilF gimY ytiene el elemento im de l pilF n pil se puede implementr medinte rmys o medinte lists enlzdsF n implementin estti se reliz utilizndo un rry de tmo (jo y un implementin dinmi medinte un list enlzdF in g pr de(nir un pil on rrys se utiliz un estruturF vos miemros de l estrutur pil inluyen un list @rryA y un ndie o puntero l im de l pilY dems un onstnte on el mximo nmero de elementosF il tipo pil junto l onjunto de operiones de l pil se pueden enerrr en un rhivo de inlusin @pi hAF es utilizr un rry pr ontener los elementos de l pil hy que tener lF en uent que el tmo de l pil no puede exeder el nmero de elementos del rry y l ondiin pil llen ser signi(tiv pr el diseoF il mtodo usul de introduir elementos en un pil es de(nir elfondo de l pil en l posiin y del rry y sin ningn elemento en su interiorD es deirD de(nir un pil viY ontinuinD se vn introduiendo elementos en el rry @en l pilA de modo que el primer elemento dido se introdue en un pil v y en l posiin yD el segundo elemento en l posiin I D el siguiente en l posiin P y s suesivmenteF gon ests operiones el puntero @puntdorA que punt l im de l pil se v inrementndo en I d vez que se de un nuevo elementoY es deirD el puntero de l pil lmen el ndie del rry que se est utilizndo omo im de l pilF vos lgoritmos de introduir insertr dushA y quitr sr @ p o p A dtos de l pil utilizn el ndie del rry omo puntero de l pil sonX snsertr @ p u s h A IFveri(r si l pil no e s t llenF PFsnrementr en I el puntero de l pilF cFelmenr elemento en l posiin del puntero de l pilF uitr @popA IFsi l pil no est vF PFveer el elemento de l posiin del puntero de l pilF QFherementr en I el puntero de l pilF in el so de que el rry que de(ne l

CAPTULO 12.

GESTION DE MEMORIA.

IHU

pil teng mnioil elementosD ls posiiones del rryD es deirD el ndie o puntero de l pilD estrn omprendids en el rngo y mnioilEI elementosD de modo que en un pil llen el puntero de l pil punt mnioilE I y en un pil viu el puntero de l pil punt E I D y que yD terimenteD ser el ndie del primer elementoF ispei(in del tipo pil v delrin de un pil inluye los dtos y operiones y itdos nteriorE menteF IF htos de l pil @tipo i poutED que es onveniente de(nirlo medinte typedefAF PF eri(r que l pil no est llen ntes de intentr insertr o poner @`#`push A elemento en l un A pil Y veri(r que un pil no est v ntes de intentr quitr sr @ q m p ~un elemento de l pilF i ests preondiiones no se umplen se dee visulizr un mensje de error y el progrm dee terminrF Q F r9 i I aivf devuelve s @verdderoA si l pil est v y y @flsoA en so ontrrioF RF i i d l l n d devuelve I @verdderoA si l pil est llen y y @flsoA en so ontrrioF ists funiones se utilizn pr veri(r ls operiones del prrfo PF S F vDi m p i r 9 i ~ F e lirnpi o v l pilD dejndol sin elementos y disponile pr otrs tresF I TF ~ i r n ~devuelve el vlor situdo en l im de l pilD pero no se derernent el puntero de l D~D pilD y que l pil qued inttF yperiones de veri(in del estdo de l pil e dee proteger l integridd de l pilD pr lo ul el tipo i I h de proporionr operiones que omprueen el estdo de l pilX pil vi o pil llenuF esimismo se h de de(nir un operin que resture l ondiin iniil de l pilD que fue determind por el onstrutor greri l @im de l pil E s A D vimpirpilF v funin ilvi omprue @veri(A si l im de l pil es EIF in ese soD l pil est v y se devuelve un I @verdderoAY en so ontrrioD se devuelve y @flsoAF G B veri(r pil v B G int ilid@IId A { GBdevuelve el vlor lgio rrsultdnte de expresin im return Fim a a E I Y i aa EI B G v funin ilvlen omprue @veri(A si l im es wxmilEsF in ese soD l pil est llen y se devuelve un I @verdderoAY en so ontrrioD se devuelve y @flsoAF G B veri(r si l pil est l l e n i B G int ilvlen @il A i G B devuelve vlor l q i o de sd e x p r e i r i i m d return Fim a a wxmilEIY I or ltimo l operin vimpir i 9 g a a wxdrndilEI BG reiniiliz l im su vlor iniil on l pil v @EIAF I ~ ~ I G B quitr todos los elementos d c l p i l B G i void vimpiril@ilB A { Ebim a EIY i

12.11.3. Arboles
il rol es unDestrutur de dtos muy importnte en informti y en ienE is de l omputinF vos roles son estruturs no lineles ontrrio que l los rrys y ls lists enlzds que onstituyen estruturs linelesF vos roles son muy utilizdos en informti pr representr frmuls lgeris omo un mtodo e(iente pr squeds grndes y omplejsD lis ts dinmis y pliiones diverss tles omo inteligeni rti(il o lgoE ritmos de ifrdoF gsi todos los sistems opertivos lmenn sus rhivos en roles o estruturs similres rolesF edems de ls pliiones itE dsD los roles se utilizn en diseo de ompildoresD proeso de texto y lgoE ritmos de squedF in el ptulo se estudir el onepto de rol generl y los tipos de roE les ms usulesD inrio y inrio de squedF esimismo se estudirn lguE ns pliiones tpis del diseo y onstruin de rolesF n rol onst de un onjunto (nito de elementosD denomindos nodos y un onjunto (nito de lnes dirigidsD denominds rmsD que onetn los nodosF il nmero de rms soido on un nodo es el grdo del nodoF he(niin IX n rol onst de un onjunto (nito de elementosD llmdos nodos y un onjunto (nito de lnes dirigidsD llmds rmsD que onetn los nodosF he(niin PX n rol es un onjunto de uno o ms nodos tles queX IF ry un nodo disedo espeilmente llmdo rzF PF vos nodos restntes se dividen en nPo onjuntos disjuntos tles que DFFF Den donde d uno de estos onjuntos es un rolF e  cDFFF se les denomin suroles del rzF i un rol no est voD entones el primer nodo se llm rzF ysrvese en l de(niin P que el rol h sido de(nido de modo reursivo y que los suroles se de(nen omo rolesF edems del rz exif Xn muhos trminos utilizdos en l desripin de los triutos de un rolF in l pigur ITFRD el nodo e es el rzF tilizndo el onepto de roles genelgiosD un nodo puede ser onsiderdo omo pdre si tiene nodos suesoresF istos nodos suesores se llmn hijosF or ejemploD el nodo f es el pdre de los hijos i y pF il pdre de r es el nodo hF n rol puede representr diverss generiones en l fmiliF vos hijos de un nodo y los hijos de estos hijos se llmn desendientes y el pdre y uelos de un nodo son sus sendientesF or ejemploD los nodos iD pD s y t son desendientes de fF gd nodo no rz tiene un nio pdre y d pdre tiene ero o ms nodos hijosF hos o ms nodos on el mismo pdre se llmn hermnosF

CAPTULO 12.

GESTION DE MEMORIA.

IHV

n nodo sin hijosD tles omo iD sD tD q y r se llmn nodos hojF il nivel de un nodo es su distni l rzF il rz tiene un distni ero de s mismD por lo que se die que el rz est en el nivel yF vos hijos del rz estn en el nivel s D sus hijos estn en el nivel P y s suesivmenteF n os importnte que se prei entre los niveles de nodos es l relin entre niveles y hermnosF vos hermnos estn siempre l mismo nivelD pero no todos los nodos de un mismo nivel son neesrimente hermnosF or ejemploD en el nivel P @pigF ITFSAD g y h son hermnosD l igul que lo son qD r e sD pero h y q no son hermnos y que ellos tienen diferentes pdresF ixisten vris forms de diujr los triutos de los roles y sus nodosF n mino es un seueni de nodos en los que d nodo es dyente l siguienteF gd nodo del rol puede ser lnzdo @se lleg lA siguiendo un nio mino que omienz en el rzF in l pigur ITFSD el mino desde el rz l hoj sD se represent por epsF snluye dos rms distints ep y psF v ltur o profundidd de un rol es el nivel de l hoj del mino ms lrgo desde l rz ms unoF or de(niin9 l ltur de un rol vo es yF v pigur ITFS ontiene nodos en tres niveles X yD I y PF u ltur es Q F n rol se divide en surolesF n surol es ulquier estrutur onetd por dejo del rzF gd nodo de un rol es l rz de un surol que se de(ne por el nodo y todos los desendientes del nodoF il primer nodo de un surol se onoe omo el rz del surol y se utiliz pr nomrr el surolF edemsD los suroles se pueden sudividir en surolesF in l pigur ITFSD fgh es un surol l igul que i y pqrsF ysrvese que por est de(niinD un nodo simple es un surolF or onsiguienteD el surol f se puede dividir en suroles g y h mientrs que el surol p ontiene los suroles qD r e sF e die que qD rD sD g y h son suroles sin desendientesF il onepto de surol ondue un de(niin reursiv de un rolF n rol es un onjunto de nodos queX IF y ien es voD o ien PF iene un nodo determindo llmdo rz del que jerrquimente desienden ero o mh surolesD que son tmin rolesF n rol est equilirdo undoD ddo un nmero mximo de k hijos pr d nodo y l ltur del rol hD d nodo de nivel I ` h E I tiene extmente k hijosF il rol est equilirdo perfetmente undo d nodo de nivel I ` h tiene extmente k hijosF epresentin de un rol eunque un rol se implement en un lenguje de progrmin omo g medinte punterosD undo se h de representr en ppelD existen tres forms diferentes de representinF v primer es el digrm o rt de orgnizin utilizd hst hor en ls diferentes (gursF il trmino que se utiliz pr est notin es el de rol generlF epresentin en niveles de profundidd iste tipo de representin es el utilizdo pr representr sistems jerrquios en modo texto o nmero en situiones tles omo fturinD gestin de stoks en lmenesD etF or ejemploD en ls pigurs ITFV y ITFW se prei un desomposiin de un omputdor en sus diversos omponentes en un estrutur rolF ytro ejemplo podr ser un distriuin en rol de ls piezs de un tiend de remios de utomviles distriuids en niveles de profundidd segn los nmeros de prte o digos de d repuesto @motorD ujD terD pilotoD froD emelleedorD etFAF epresentin de list ytro formto utilizdo pr representr un rol es l list entre prntesisF st es l notin utilizd on expresiones lgerisF in est representinD d prntesis ierto indi el omienzo de un nuevo nivelY d prntesis errdo omplet un nivel y se mueve hi rri un nivel en el irolF v notin en prntesis de l pigur ITFQ esX e @ @ D hA D i D p D @qDrDsAAF

12.11.4. RESUMEN DE DEFINICIONES


IF hdo un onjunto i de elementosX H H n rol puede estr vioY es deirD no ontiene ningn elementoD n rol no vo puede onstr de un nio elemento e i i denomindo un nodoD o ien n rol onst de un nodo e t iD onetdo por ros diretos un nmero (nito de otros 9 rolesF PF he(niionesX y y il primer nodo de un rolD normlmente diujdo en l posiin superiorD se denomin rz del rolF vs )ehs que onetn un nodo otro se llmn ros o rmsF vos nodos terminlesD esto esD nodos de los ules no se dedue ningn nodoD se denominn hojsF y y y y y y vos nodos que no son hojs se denominn nodos internos o nodos no terminlesF in un rol un rm v de un nodo n D un nodo nPDse die que n D es el pdre de nP y que nP es un hijo de nDF s D se llm sendiente de nvsi n D es el pdre de nvo si n D es el pdre de un sendiente de nPF IIX se llm desendiente de n D si n D es un sendiente de nPF n mino de n D nPes un seueni de ros ontiguos que vn de nD nPF v longitud de un mino es el nmero de ros que ontiene @en otrs plrs el nmero de nodos E IAF il nivel de un nodo es l longitud del mino que lo onet l rzF v profundidd o ltur de un rol es l longitud del mino ms lrgo que onet el rz roles y SHS n surol de un rol es un suonjunto de nodos del rolD onetdos

CAPTULO 12.

GESTION DE MEMORIA.

IHW

por rms del propio rolD esto es su vez un rolF e un surol de un rol eX si pr d nodo n de eD e ontiene tmin todos los desendientes de n en eF e se llm un surol ompleto de eF n rol est equilirdo undoD ddo un nmero mximo u de hijos de d nodo y l ltur del rol hD d nodo de nivel k ` hEI tiene extmente u hijosF il rol est equilirdo perfetmente entre d nodo de nivel s`h tiene extmente u hijosF

12.11.5. Arboles Binarios.


n rol inrio es un rol en el que ningn nodo puede tener ms de dos surolesF in un rol inrioD d nodo puede tenerD eroD uno o dos hijos @surolesAF e onoe el nodo de l izquierd omo hijo izquierdo y el nodo de l dereh omo hijo derehoF in ls listsD despus de d elemento h otroD el siguiente @o ningunoD si hmos llegdo l (nlAF ero tmin nos puede interesr tener vris posiiliddes despus de d elementoD vrios hijosD por ejemplo QF he d uno de estos Q hijos sldrn otros QD y s suesivmenteF ytendrmos lgo que reuerd un rolX un trono del que nen Q rmsD que su vees se sudividen en otrs Q de menor tmoD y s suesivmente hst llegr ls hojsF ues eso mismo ser un rolX un estrutur dinmi en l que d nodo @elementoA puede tener ms de un siguienteF n rol inrio no puede tener ms de dos surolesF n rol inrio es un estrutur reursivF gd nodo es el rz de su propio surol y tiene hijosD que son res de roles llmdos los suroles dereho e izquierdo del nodoD respetivmenteF n rol inrio se divide en tres suonjuntos disjuntosX {A { s D s D F F FsDb { h D h D F F Fh } xodo ruz uhrol izquierdo de uhdrhol dereho de in ulquier nivel nD un rol inrio puede ontener de I P nodosF il nmero de nodos por nivel ontriuye l densidd del rolF iquilirio v distni de un nodo l rz determin l e(ieni on l que puede ser lolizdoF or ejemploD ddo ulquier nodo de un rolD sus hijos se puede eder siguiendo slo un mino de ifurin o de rmsD el que ondue l nodo desedoF he modo similrD los nodos nivel P de un rol slo pueden ser edidos siguiendo slo dos rms del rolF v rtersti nterior nos ondue un rtersti muy importnte de un rol inrioD su lne o equilirioF r determinr si un rol est equilirdoD se lul su ftor de equilirioF il ftor de equilirio de un rol inrio es l difereni en ltur entre los suroles dereho e izquierdoF i de(nimos l ltur del surol itquierdo omo r D y l ltur del surol dereho omo r D entones el ftor de equilirio del rol f se determin por l siguiente frmulX f a r E r F tilizndo est frmul el equilirio del nodo rz los oho roles de l pigur ITFIH son @ u A y @ h A yD @ Ay por de(niinD @RE s D @ e ARD@fb EID @ g A s D @ h APF n rol est perfetmente equilirdo si su equilirio o lne es ero y sus suroles son tmin perfetmente equilirdosF hdo que est de(niin ourre rrmente se pli un de(niin lterntivF n rol inrio est equilirdo si l ltur de sus suroles di(ere en no ms de uno @su ftor de equilirio es EID yD C s A y sus suroles son tmin equilirdosF n rol inrio ompleto de profundidd n es un rol en el que pr d nivelD del y l nivel nEI tiene un onjunto lleno de nodos y todos los nodos hoj nivel n oupn ls posiiones ms l izquierd del rolF n rol inrio ompleto que ontiene P4 nodos nivel n es un rol llenoF n rol lleno es un rol inrio que tiene el mximo nmero de entrds pr su lturF isto suede undo el ltimo nivel est llenoF v pigur ITF sQ muestr un rol inrio ompletoY el rol de l pigur ITFIR @TA se orresponde on uno llenoF il ltimo so de rol es un tipo espeil denomindo rol degenerdo en el que hy un solo nodo hoj @iA y d nodo no hoj slo tiene un hijoF n rol degenerdo es equivlente un list enlzdF in l pigur ITFIS se muestrn roles llenos y ompletosF v estrutur de un rol inrio se onstruye on nodosF gd nodo dee ontener el mpo dto @dtos lmenrA y dos mpos punterosD uno i surol izquierdo y otro l suhrol derehoD que se onoE en omo puntero izquierdo @izquierdoD izdoA y puntero dereho @derehoD dhoA respetivmenteF n vlor x vv indi un rol voF xos entrremos en los roles inriosD en los que d nodo puede tener un hijo izquierdoD un hijo derehoD mos o ninguno @dos hijos omo mximoAF r puntulizr un msD trtremos los roles inrios de squedD en los que tenemos pre(jdo un ierto ordenD que nos yudr enontrr un ierto dto dentro de un rol on muh rpidezF iste 4orden pre(jdo4 ser el siguienteX pr d nodo tendremos que l rm de l izquierd ontendr elementos menores que lF l rm de l dereh ontendr elementos

CAPTULO 12.

GESTION DE MEMORIA.

IIH

myores que lF 5inlude `stdioFhb 5inlude `stdliFhb strut rol { GB il tipo se en sX BG int dtoY GB E un dto @enteroA BG strut rolB hijoszqY GB E puntero su hijo izquierdo BG strut rolB hijoherY GB E puntero su hijo dereho BG }Y void isriir@strut rol BpuntA { if @puntA GB i no hemos llegdo un hoj BG { isriir@puntEbhijoszqAY printf@4 7d 4DpuntEbdtoAY isriir@puntEbhijoherAY }Y GB GB GB wir l izqd reursivmente BG isrie el dto del nodo BG luego mir por l dereh BG }Y void snsertr@strut rol BBpuntD int vlorA { strut rol B tula BpuntY if @tul aa xvvA GB i hemos llegdo un hoj BG { Bpunt a @strut rol BA mllo @sizeof@strut rolAAY GB eservmos memori BG tula BpuntY tulEbdto a vlorY GB qurdmos el dto BG tulEbhijoszq a xvvY GB xo tiene hijo izquierdo BG tulEbhijoher a xvvY GB xi dereho BG } else GB i no es hoj BG if @tulEbdto b vlorA GB enuentr un dto myor BG snsertr@8tulEbhijoszqD vlorAY GB wir por l izquierd BG else GB in so ontrrio @menorA BG snsertr@8tulEbhijoherD vlorAY GB wir por l dereh BG }Y GB guerpo del progrm BG int min@A { strut rol Brol a xvvY snsertr@8rolD SAY snsertr@8rolD QAY snsertr@8rolD UAY snsertr@8rolD PAY snsertr@8rolD RAY snsertr@8rolD VAY snsertr@8rolD WAY isriir@rolAY return HY }

12.11.6. OPERACIONES EN RBOLES BlNARlOS


n vez que se tiene redo un rol inrioD se pueden relizr diverss operiones sore lF il her uso de un operin u otr depender de l pliin que se le quier dr l rolF elguns de ls operiones tpis que se relizn en roles inrios sonX heterminr su lturF heterminr su nmero de elementosF y rer un opiF y isulizr el rol inrio en pntll o en impresorF y heterminr si dos roles inrios son idntiosF y forrr @eliminr el rolAF y i es un rol de expresin9D evlur l expresinF y i es un rol de expresinD otener l form de prntesis de l expresinF ods ests operiones se pueden relizr reorriendo el rol inrio de un modo sistemtioF il reorrido de un rol es l operin de visit l rolD o lo que es lo mismoD l visit d nodo del rol un vez y slo unF v visit de un rol es neesri en muhs osionesD por ejemploD si se dese imprimir l informin ontenid en d nodoF ixisten diferentes forms de visitr o reorrer un rol que se estudirn ms trdeF r visulizr o onsultr los dtos lmendos en un rol se neesit reorrer el rol o visitr los nodos del mismoF el ontrrio que ls lists enlzdsD los roles inrios no tienen relmente un primer vlorD un segundo vlorD terer vlorD etF e puede (rmr que el rz viene el primeroD pero Dquinviene ontinuinc ixisten diferentes mtodos de reorrido de rol y que l myor de ls pliiones inris son stnte sensiles l orden en el que se visitn los nodosD de form que ser preiso elegir uiddosmente el tipo de reorridoF n reorrido de un rol inrio requiere que d nodo del rol se proesdo @visitdoA un vez y slo un en un seueni predetermindF ixisten dos enfoques generles pr l seueni de reorridoD profundidd y nhurF in el reorrido en profundiddD el proeso exige un mino desde el rz trvs de un hijoD l desendiente ms lejno del primer hijo ntes de proseguir un segundo hijoF in otrs plrsD en el reorrido en profundiddD todos los desendientes de un hijo se proesn ntes del siguiente hijoF in el reorrido en nhurD el proeso se reliz horizontlmente desde el rz todos sus hijosD ontinuin los hijos de sus hijos y s suesivmente hst que todos los nodos hn sido proesdosF in otrs plrsD en el reorrido en nhurD d nivel se proes totlmente ntes de que omiene el siguiente nivelF il reorrido de un rol supone visitr d nodo slo un vezF v designin trdiionl de los reorridos utiliz un nomre pr el nodo rz @xAD pr el surol izquierdo @sA y pr el surol dereho @hsF egn se l estrtegi seguirD los reorridos se onoen omo enorden @inorderADpreorden dreorderA y postorden @postorderA reorden inorden ostorden @nodoEizquierdoEderehoA @xshA @izquierdoEnodoEderehoA @sxhA @izquierdoEderehoEnodoA @shxA

12.11.7. Recorrido preorden


il reorrido preorden9 @xshA onllev los siguientes psosD en los que el rz v ntes que los surolesX IF eorrer el rv @xAF PF eorrer el surol izquierdo @sA en preordenF QF eorrer el surol dereho @hA en preordenF hdo ls rterstis reursivs de los rolesD el lgoritmo de reorrido tiene nturlez reursivF rimeroD se proes l rzD ontinuin el surol izquierdo y ontinuin el surol derehoF r proesr el surol izquierdoD se he un llmd reursiv l proedimiento preorden y luego se he lo mismo on el surol derehoF il lgoritmo reursivo orrespondiente pr un rol esX

CAPTULO 12.

GESTION DE MEMORIA.

III

si no es vio entones iniio v e r los dtos en el r i G de reorden @surol iGquierdo del r r i l z de A reorden @surol dereho del r d i v de A (n egl in el reorrido preordenD el rz se proes ntes que los suroles izquierdo y derehoF i utilizmos el reorrido preorden del rol de l pigur ITFPP se visit primero el rz @nodo e AF e ontinuin se visit el surol izquierdo de eD que onst de los nodos fD h y i F hdo que el surol es su vez un rolD se visitn los nodos utilizndo el orden x s h F or onsiguienteD se visit primero el nodo fD despus h @izquierdoA yD por ltimoD i @derehoAF e ontinuin se visit el surol dereho de eD que es un rol que ontiene los nodos D p y he nuevo siguiendo el orden xshD se visit primero el nodo gD ontinuin p @izquierdoA yD por ltimoD q @derehoAF in onseueni el orden del reorrido preorden pr el rol de l pigur ITFPP es qF eEfEhEiEgEpEqF n re(nmiento del lgoritmo esX lgoritmo preyrden @vl riU `puntero nodosbA eorrer un rol inrio en seueni nodoEizdoEdho re riz es el nodo de entrd del rol o surol ost d nodo se proes en orden I si @riz no es nuloA I proesr @rizA P preyrden @riz E b urolzdoA Q preyrden @riz E b surolhho P return v funin preorden muestr el digo fuente en g del lgoritmo y itdo nteriormenteF il tipo de los dtos es enteroF typedef int ipoilementoY strut nodo { ipoilemento dtosY strut nodo BhijoEizdoD BhijoEdhoY }Y typedef strut nodo xodoY void preorden @xodo B p A s if @A i printf @4 7d 4 D p E b ddtosA Y reyrden@p E b hijoEizdoAY reyrden@p E b hijoEdhoAY I I qr(s de ls llmds reursivs de preorden il reorrido reursivo de un rol se puede mostrr gr(mente por dos mtodos distintosX I A pseo preorden del rolY PA reorrido lgortmioF n medio gr(o pr visulizr el reorrido de un rol es imginr que se est dndo un pseo lrededor del rol omenzndo por l rz y siguiendo el sentido ontrrio ls gujs del relojD un nodo ontinuin de otro sin psr dos vees por el mismo nodoF il mino seldo por un lne ontinu que omienz en el nodo I @pigF ITFPI A muestr el reorrido preorden ompletoF in el so de l pigur ITFPP el reorrido es e r h i g p qF il otro medio gr(o de mostrr el reorrido lgortmio reursivo es similr ls diferentes etps del lgoritmoF es l primer llmd proes l rz del rol e F e ontinuin se llm reursivmente proesr surol izquierdoD proes el nodo fF v terer llmd proes el nodo hDque es un surol formdo por un nio nodoF in ese puntoD se llm en preordenD on un puntero nuloD que produe un retorno inmedito l surol pr proesr su surol derehoF heido que el surol dereho de h es tmin nuloD se vuelve l nodo f de modo que v proesr @visitrA su surol derehoD iF hespus de proesr el nodo iD se hen dos llmds msD un on el puntero izquierdo null de i y otr on su puntero dereho nullF gomo el surol h sido totlmente proesdoD se vuelve l rz del rol y se proes su surol derehoD gF hespus de proesr g D llm pr proesr su surol izquierdo p F e hen dos llmds on nullD vuelve l nivel donde est el nodo 9 pr proesr su rm dereh q F en se relizn dos llmds msD un l surol izquierdo null y otr l surol derehoF intones se retorn en el rolD se onluye el reorrido del rolF

12.11.8. Recorrido enorden


il reorrido en orden @inorderA proes primero el surol izquierdoD despus el rz y ontinuin el surol derehoF il signitido de in es que l rz se proes entre los surolesF i el rol no est voD el mtodo impli los siguientes psosX IF eorrer el sujrol izquierdo @IAen inordenF PF isitr el nodo rz @xAF QF eorrer el surol dereho @ s A A en inordenF il lgoritmo orrespondiente esX inorden@eA si el rol no est vio e n t o n e s iniio eorrer el surol i z q u i erdo isitr el nodo r i z eorrer el surol dereho (n n re(nmiento del lgoritmo esX lgoritmo enorden @vdl ri z ` p u r i v e r o nodosbA i eorrer un 8Dol inrio en l seueni izquierdoEnodoEdereho pre rz en el nodo de entrdd de un rol o surol post d nodo se h de p r E o e s d r en orden I si @rz no es n u l o A I enorden @riz E b surol s z y i i i erdoA P proesr @rizA Q enorden @rdi z~EsiiiirolherehoA P retorno f i n enorden in el rol de l pigur ITFPQD los nodos se hn numerdo en el orden en que son visitdos durnte el reorrido enordenF il primer surol reorrido es el surol izquierdo del nodo rz @rol uyo nodo ontiene l letr SFiste surol onst de los nodos S D h y i y es su vez otro rol on el nodo f omo rzD por lo que siguiendo el orden sxhDse visit primero hD ontinuin f @nodo rzA yD por ltimoD i @derehAF hespus de l visit este surol izquierdo se visit el nodo rz e yD por ltimoD se visit el surol dereho que onst de los nodos D p y q F e ontinuinD siguiendo el orden sxh pr el surol derehoD se visit primero p D despus @nodo rzA yD por ltimoD q F or onsiguienteD el orden del reorrido inorden de l pigur ITFPQ es hE f E i E eE p E gE qF v siguiente funin visit y esrie el ontenido de los nodos de un rol inrio de uerdo l reorrido inyrdenFv funin tiene omo prmetro un puntero l nodo rz

CAPTULO 12.

GESTION DE MEMORIA.

IIP

del rolF void enorden @xodo BpA s if @A I enorden@p Eb hijoEizqdoAY printf @4 7d 4Dp E b dtosA Y enorden @p Eb hijoEdhoAY G B reorrer surol izquierdo B G G B visitr l rz B G G B reorrer surol dereho B G }}

12.11.9. Recorrido postorden


il reorrido postorden @shxA proes el nodo rz @postA despus de que los suroles izquierdo y dereho se hn proesdoF e omienz situndose en l hoj ms l izquierd y se proesF e ontinuin se proes su surol derehoF or ltimo se proes el nodo rzF vs etps del lgoritmo sonX IF eorrer el surol izquierdo @sA en postordenF PF eorrer el surol dereho @hA en postordenF QF isitr el nodo rz @xAF il lgoritmo reursivo pr un rol e esX si e no est vio entones iniio ostorden @surol izquierdo del r z d e e A ostorden @ s u r o l dereho del r z de e A isitr l rz de e (n il re(nmiento del lgoritmo esX lgoritmo postorden @vl riz `puntero nodobA eorrer un rol inrio en seueni izquierdEderehEnodo pre rz es el nodo de entrd de un rol un surol post d nodo h sido proesdo en orden i @rznoesnuloA spostyrden @rz E b urolszdoA Ppostyrden @rz Eb urolhhoA Qproesr @rizA P retorno (n postorden i se utiliz el reorrido postorden del rol de l pigur ITFPRD se visit primero el surol izquierdo eF iste surol onst de los nodos f D h y i y siguiendo el orden shxDse visitr primero h @izquierdoAD luego i @derehoA yD por ltimoD f @nodoAF e ontinuinD se visit el surol dereho e que onst de los nodos D p y qF iguiendo el orden shx pr este rolD se visit primero p @izquierdoAD despus q @derehoA yD por ltimoD @nodoAF pinlmente se visit el rz e @nodoAF es el orden del reorrido postorden del rol de l pigur ITFPR es hEiEfEpEqEgEeF v funin postorden que implement en g el digo fuente del lgoritmo orrespondiente void postorden @xodo BpA { if @A t postorden @p E b hijoEizqdoAY postorden @p E b hijoEdhoAY printf @4 7d 4Dp E b dtosAY I I

12.11.10. Profundidad de un rbol binario


v profundidd de un rol inrio es un rtersti que se neesit onoer on freueni durnte el desrrollo de un pliin on rolesF v funin rofundidd evl l profundidd de un rol inrioF r ello tiene un prmetro que es un puntero l rz del rolF il so ms senillo de lulo de l profundidd es undo el rol est vo en uyo so l profundidd es yF i el rol no est voD d surol dee tener su propi profundiddD por lo que se neesit evlur d un por seprdoF vs vriles profundiddID profundiddh lmenrn ls profundiddes de los suroles izquierdo y dereho respetivmenteF il mtodo de lulo de l profundidd de los suroles utiliz llmds reursivs l funin rofundidd on punteros los respetivos suroles omo prmetros de l mismF v funE in rofundidd devuelve omo resultdo l profundidd del surol ms profundo ms s @l misE m del rzAF int rofundidd @xodo B p A { if @3pA return y else Y i int profundiddI a rofundiddd @p E b hijoEizqdoAY int profundiddh a rofundidd @ p E b hijoEdhoA Y if @profundiddI 9b pro(mdiddhA return profundiddI C IY else return profundiddh C IY I i

12.11.11. RBOL BINAR10 DE BSQUEDA


vos roles vistos hst hor no tienen un orden de(nidoY sin emrgoD los roles inrios ordendos tienen sentidoF istos roles se denominn roles inrios de squedD deido que se pueden usr en ellos un trmino utilizndo un lgoritmo de squed inri similr l empledo en rrysF n rol inrio de squed es quel que ddo un nodoD todos los dtos del surol izquierdo son menores que los dtos de ese nodoD mientrs que todos los dtos del surol dereho son myores que sus propios dtosF il rol inrio del ijemplo ITFV es de squedF grein de un rol inrio de squed upongmos que se dese lmenr los nmeros V Q I PH IH S R en un rol inrio de squedF iguiendo l reglD ddo un nodo en el rol todos los dtos su izquierd deen ser menores que todos los dtos del nodo tulD mientrs que todos los dtos l dereh deen ser myores que los dtosF sniilmente el rol est vo y se dese insertr el VF v ni elein es lmenr el V en el rzX e ontinuin viene el QF que Q es menor que VD el Q dee ir en el surol izquierdoF e ontinuin se h de insertr I que es menor que V y que QD por onsiguiente ir l izquierd y dejo de QF il siguiente nmero es PHD myor que VD lo que impli dee ir l dereh de VF gd nuevo elemento se

CAPTULO 12.

GESTION DE MEMORIA.

IIQ

insert omo un hoj del rolF vos restntes elementos se pueden situr filmenteF n propiedd de los roles inrios de squed es que no son nios pr los mismos dtosF yiegsyxi i x fyvi flxely hi fihe he lo expuesto se dedue que los roles inrios tienen nturlez reursiv y en onseueni ls operiones sore los roles son reursivsD si ien siempre tenemos l opin de relizrls de formc itertivF ists operiones sonX y fsquedu de un nodoF snserin de un nodoF ueorrio de un rolF forrudo de un nodoF fsqued v squed de un nodo omienz en el nodo rz y sigue estos psosX IF v lve usd se ompr on l lve del nodo rzF PF i ls lves son igulesD l squed se detieneF QF i l lve usd es myor que l lve rzD l squed se renud en el surol derehF i l lve usd es menor que l lve rzD l squed se renud on el surol izquierdoF fusr un informin espe( i se dese enontrr un nodo en el rol que onteng l informin sore un person espe(F v funin usr tiene dos prmetrosD un puntero l rol y un nmero de intrul pr l person requeridF gomo resultdoD l funin devuelve un puntero l nodo en el que se lmen l informin sore es personY en el so de que l informin sore l person no se enuentr se devuelve el vlor yF il lgoritmo de squed es el siguienteX IF gompror si el rol est voF in so (rmtivo se devuelve yF i l rz ontiene l personD l tre es filX el resultdo esD simplementeD un puntero l rzF PF i el rol no est voD el surol espe(o depende de que el nmero de mtrul requerido es ms pequeo o myor que el nmero de mtrul del nodo rzF QF v funin de squed se onsigue llmndo reursivmente l funin usr on un puntero l surol izquierdo o dereho omo prinetroF il digo g de l funin u s r F esX xodoB usr @xodoB p D i int usddoA if @ 3 p A return y Y else i f @usdo a a p E b nummdtA return pY else if @usdo ` p E b nummdtA return usr @ p E b i z d i i D usdoAY else G return usr @ p E b d h D usdoAY i snsertr un nodo n rtersti fundmentl que dee poseer el lgoritmo de inserin es que el rol resultnte de un inserin en un rol de squed h de ser tmin de squedF in eseniD el lgoritmo de inserin se poy en l lolizin de un elementoD de modo que si se enuentr el elemento @luveA usdoD no es neesrio her ndY en so ontrrioD se insert el nuevo elemento justo en el lugr donde h do l squed @es deirD en el lugr donde hr estdo en el so de existirAF entes de insertr V hespus de insertr V pigur ITFPTF snserin en un rol inrio de squedF or ejemploD onsidrese el so de dir el nodo V l rol de l pigur ITFPTF e omienz el reorrido en el nodo rz PSY l posiin V dee estr en el surol izquierdo de PS @V ` PSAF in el nodo IHD l posiin de V dee estr en el surol izquierdo de IHD que est tulmente voF il nodo V se introdue omo un hijo izquierdo del nodo I yF punin insertr @ A v funin insertr que pone nuevos nodos es senillF e deen delrr tres rE gumentosX un puntero l rz del rolD el nuevo nomre y nmero de mtrul de l personF v funin rer un nuevo nodo pr l nuev person y lo insert en el lugr orreto en el rol de modo que el rol permnez omo inrio de squedF v operin de inserin de un nodo es un extensin de l operin de squedF vos psos seguir sonX IF esignr memori pr un nuev estrutur nodoF PF fusr en el rol pr enontrr l posiin de inserin del nuevo nodoD que se olor omo nodo hojF QF inlzr el nuevo nodo l rolF il digo g de l funinX void insertr @xodoBB rizD int nuevomtD hr BnuevoEnomreA i if @ 3 @BrizAA Briz a grerxodo@nuevoEmtD nuevoEnomreA Y else if @nuevomt i @BrizA E b nummtA insertr @8@@BrizA E b izdAD nuevomtD nuevoEnomreAY else insertr @ 8 @ @BrizA E b dhAD nuevomtD nuevoEnomreAY I i el rol est voD es fil insertr l entrd en el lugr orretoF il nuevo nodo es l rz del rol y el puntero riz se pone puntndo ese nodoF il prmetro riz dee ser un prmetro refereni y que dee ser ledo y tulizdoD por es rzn se delr puntero puntero @xodoB BA F i el rol no est voD se dee elegir entre insertr el nuevo nodo en el surol izquierdo o derehoD dependiendo de que el nmero de mtrul de IP nuev person se ms pequeo o myor que el nmero de mtrul en l rz del rolF iliminin v operin de eliminin de un nodo es tmin un extensin de l operin de squedD si ien ms omplej que l inserin deido que el nodo suprimir puede ser ulquier y l operin de supresin dee mntener l estrutur de rol inrio de squed despus de l eliminin de dtosF vos psos seguir sonX IF fusr en el rol pr enontrr l posiin de nodo eliminrF PF ejustr los punteros de sus nteesores si el nodo suprimir tiene menos de P hijosD o suir l posiin que ste oup el nodo ms prximo en lve @inmeditmente superior o inmeditmente inferiorA on ojeto de mntener l estrutur de rol inrioF eorridos de un rol ixisten dos tipos de reorrido de los nodos de un rolX el reorrido en nhur y el

CAPTULO 12.

GESTION DE MEMORIA.

IIR

reorrido en profundiddF in el reorrido en nhur se visitn los nodos por nivelesF r ello se utiliz un estrutur uxilir tipo ol en l que despus de mostrr el ontenido de un nodoD empezndo por el nodo rzD se lmenn los punteros orrespondientes sus hijos izquierdo y derehoF he est form si reorremos los nodos de un nivelD mientrs mostrmos su ontenidoD lmenmos en l ol los punteros todos los nodos del nivel siguienteF il reorrido en profundidd se reliz por uno de tres mtodos reursivosX preordenD inorden y postordenF il primer mtodo onsiste en visitr el nodo rzD su rol izquierdo y su rol derehoD por este ordenF il reorrido inorden visit el rol izquierdoD ontinuin el nodo rz y (nlmente el rol derehoF il reorrido postorden onsiste en visitr primero el rol izquierdoD ontinuin el dereho y (nlmente el rzF preorden en orden postorden z szdo szdo szdo z hho hho hho z heterminin de l ltur de un rol v lturu de un rol depender del riterio que se sig pr de(nir diho oneptoF esD si en el so de un rol que tiene nodo rzD se onsider que su ltur es ID l ltur del rol es PD y l ltur del rol es RFor ltimoD si l ltur de un rol on un nodo es I D l ltur de un rol vo @el puntero es x v v A es yF v ltur de un rol es I ms que l myor de ls lturs de sus suroles izquierdo y derehoF

Captulo 13

Ficheros
13.1. Flujos.
n )ujo @stremA es un strin que se re(ere un )ujo o orriente de dtos que )uyen entre un origen o fuente @produtorA y un destino o sumidero @onsumidorAF intre el origen y el destino dee existir un onexin o nl @`#`pipeFA por l que irulen los dtosF v pertur de un rhivo supone estleer l onexin del progrm on el dispositivo que ontiene l rhivoD por el nl que omuni el rhivo on el progrm vn )uir ls seuenis de dtosF ry tres )ujos o nles iertos utomtimenteX extern psvi BstdinY extern psvi BstdoutY extern psvi BstderrY ists tres vriles se iniilizn l omenzr l ejeuin del progrm pr dmitir seuenis de rteresD en modo textoF u ometido es el siguienteX stdin stdout stderr soi l entrd estndr @teldoA on el progrmF soi l slid estndr @pntllA on el progrmF soi l slid de mensjes de error @pntllA on el progrmF es undo se ejeut printf @4glle wyorAF Y se esrie en stdoutD en pntllY si se 8xA dese leer un vrile enter on snf@4 7d4D Y se ptn los dgitos de l seueni de entrd 9sA stdinF il eso los rhivos se he on un ufetE intermedioF e puede pensr en el u'er omo un rry donde se vn lmenndo los dtos dirigidos l rhivoD o desde el rhivoY el hufer se vuel undo de un form u otr se d l orden de virloF or ejemploD undo se llm un funin pr leer del rhivo un denD l funin lee tntos rteres omo quepn en el ufetEF e ontinuin se otiene l den del uferY un posterior llmd l funin otendr l siguiente den del u'er y s suesivmente hst que se quede vo y se llene on un llmd posterior l funin de leturF il lenguje g trj on rhivos on uferD y est disedo pr eder un mpli gm de dispositivosD de tl form que trt d dispositivo omo un seueniD pudiendo her seuenis de rteres y seuenis inrisF gon ls seuenis se simpli( el mnejo de rhivo en gF

13.2. Puntero FILE


vos rhivos se uin en dispositivos externos omo intsD rtuhosD disosD diso omptosD etF y tienen un nomre y uns rterstisF in el progrm el rhivo tiene un nomre interno que es un puntero un estrutur prede(nid @puntero rhivoAF ist estrutur ontiene informin sore el rhivoD tl omo l direin del u'er que utilizD el modo de pertur del rhivoD el ltimo rter ledo del u'er y otros detlles que generlmente el usurio no neesit serF il identi(dor del tipo de l estrutur es psvi y est delrd en el rhivo de eer stdioFhX typedef strut { short levelY unsigned )gsY GBestdo del rhivoX leturD inrio FFF BG hr fdY unsigned hr holdY short sizeY IIS

CAPTULO 13.

FICHEROS

IIT

unsigned hr Bu'erD BurpY unsigned istempY short tokenY }psviY il detlle de los mpos del tipo psvi puede mir de un ompildor otroF el progrmdor le interes ser que existe el tipo psvi y que es neesrio de(nir un puntero psvi por d rhivo proesrF wuhs de ls funiones pr proesr rhivos son del tipo psvi BD y tienen rgumento@sA de ese tipoF

13.3. Ficheros de cabecera.


il sistem de rhivos de g est disedo pr seuenis que son independientes del dispositivoF ixisten dos tipos se seuenisX eueni de texto que es un ristr de rteres orgnizdos en lnes terminds por el rter slto de lneF eueni inri que es un ristr de ytes on un orrespondeni uno uno on los dispositivosF in eseni g trj on dos tipos de rhivo seueniles @textoA y inrios @registrosAF ods ls operiones de (heros se relizn trvs de llmds funiones que estn de(nids en en (hero de eer gyxsyFr o syFrF isto permite un grn )exiilidd y filidd l hor de trjr on (herosF wedinte un operin de pertur se soi un seueni un rhivo espei(doD est operin de pertur se reliz medinte un puntero de tipo psvi donde estn de(nids ls rterstis del (hero @nomreD estdoD posiinDFFFAF n vez ierto el (hero esriiremos y sremos informin medinte ls funiones implementds y por ltimo errremos los (heros iertosF vos progrms se omunin on el entorno leyendo y esriiendo (herosF n (hero se onsider omo )ujo de dtos que se proesn seuenilmenteF il onepto de (hero es mplioD onjunto de dtos que se puede leer y esriir repetidmenteF )ujo de ytes generdos por un progrmF )ujo de 4ytes4 reiidos desde o envidos hi un dispositivo perifrio @teldoD monitorD FFFAF ods ls lses de (heros se mnejn si de l mism formF vos (heros se mnejn on funiones de iliote uys delriones se inorporn l progrm on l ordenX 5 inlude `stdioFhb vs funiones pr mnejo de (heros usn el soporte que proporion el sistem opertivoF entes de relizr ulquier operin sore un (heroD hy que rirloF in el entorno se dispone siempre de tres (heros iertosX el rir un (heroD l funin 4fopen4 lo soi on un )ujo de dtos y devuelve un puntero un ojeto de tipo psvi que se us pr mntener el estdo del )ujoF hespus ese puntero se utiliz pr ls operiones sore el (heroF ods ls entrds se produen omo si d rter fuer leido llmndo 4fget4F ods ls slids se produen omo si d rter fuer esrito llmndo 4fput4F il (hero se puede errr on 4flose4F il puntero psvi mntiene informin sore el estdo del )ujo de dtosX n indidor de errorD que tom vlor distinto de ero undo l funin enuentr un error de letur o de esriturF n indidor de (n de (heroD que result distinto de ero undo l funin enuentr el (nl de (hero undo est leyendoF n indidor de posiinD que indi el siguiente 4yte4 que se lee o se esrie en el )ujo de dtosD si el (hero puede soportr pregunts sore l posiinF n 4u'er4 de (heroD que indi l direin y tmo de un 4rry4 que utilizn ls funiones pr leer y esriirF

CAPTULO 13.

FICHEROS

IIU

5 inlude `stdioFhb min@ A { psvi BfpY FFF fp a fopen @ 4dtos4D 4r4 AY FFF flose @ fp AY FFF }

13.4. ABRIR FICHERO


r proesr un rhivo en g @y en todos los lengujes de progrminA l primer operin que hy que relizr es rir el rhivoF v pertur del rhivo supone onetr el rhivo externo on el progrmD e indir mo v ser trtdo el rhivoX inrioD de rteresD etF il progrm ede los rhivos trvs de un puntero l estrutur psviD l funin de pertur devuelve diho punteroF v funin pr rir un rhivo es fopen @ A y el formto de llmd esX fopen@nomreErhivoD modoAY den gontiene el identi(dor externo del rhivoF gontiene el modo en que se vu u trtr el rhivoF v funin devuelve un puntero psviD trvs de diho puntero el progrm he refereni l rhivoF v llmd fopen @ A se dee de her de tl form que el vlor que devuelve se signe un vrile puntero psviDpr s despus referirse dih vrileF v funin fopen re un seueni pr que pued ser utilizd y vinuld on un rhivoF hespus devuelve el puntero l rhivo soidoD si es xvv es que se h produido un error en l perturF e utiliz un puntero de tipo psvi pr rir ese (heroF irve pr los dos tipos de (herosF geer `stdioFhbF psvi Bnomrepuntero(heroY fopen@hrnomrerhivoDhrmodoperturAY wodo de perturX r ere un rhivo de texto pr leturF w gre un rhivo de texto pr esriturF ere un rhivo de texto pr dir informinF r ere un rhivo inrio pr leturF w gre un rhivo inro pr esriturF ere un rhivo inrio pr dir informinF rC ere un rhivo de texto pr letur G esriturF wC gre un rhivo de texto pr letur G esriturF C ere o gre un rhivo de texto pr dir informinF rC ere un rhivo inrio pr letur G esriturF wC gre un rhivo inro pr letur G esriturF C ere o gre un rhivo inrio pr dir informin v funion fopen devuelve un punteroD si se produjese un errorD l funion devolver xvvD por lo que es mejor tener en uent ls posiles uss de errorX psvi BpfY pfafopen@htosFtxtDrAY if @pfaaxvvA printf@error l rir el rhivoAY

CAPTULO 13.

FICHEROS

IIV

13.5. CIERRE FICHERO


vos rhivos en g trjn on un memori intermediD son on huferF v entrd y slid de dtos se lmen en ese u'erD volndose undo est llenoF el terminr l ejeuin del progrm podr ourrir que hy dtos en el hgferF si no se volsen en el rhivo quedr este sin ls ltims tulizionesF iempre que se termin de proesr un rhivo y siempre que se termine l ejeuin del progrm los rhivos iertos hy que errrlos pr que entre otrs iones se vuelque el u'erF n vez terminds ls operiones de esritur y letur hy que errr l seueni @rhivoAF e reliz medinte l llmd l funin flose@A que ierr un (hero determindo o flosell@A que ierr todos los rhivos iertosF ists funiones esrie l informin que todv se enuentre en el u'er y ierr el rhivo nivel de sistem opertivoF ems funiones devuelve giy si no hy prolemsF v eer que utilizn es `stdioFhbF int flose@puntero(heroAY int flosell@AY

13.6. ESCRITURA DE CARACTERES Y CADENAS EN SECUENCIALES


pgGgX isrie un rter en el (hero ierto por el puntero que se pone omo prmetroF i todo se produe orretmente l funin devuelve el propio rterD si hy lgn error devuelve iypF v eer que utiliz es `stdioFhbF int int int int fput@vrilehrDpuntero(heroAY fput@rter9Dpuntero(heroAY put@vrilehrDpuntero(heroAY put@rter9Dpuntero(heroAY

pX isrie el ontenido de l den puest omo primer prmetro de l funinF il rter nulo no se esrie en el (heroF i se produe lgn error devuelve iyp y si todo v ien devuelve un vlor no negtivoF v eer `stdioFhbF int fputs@vriledenDpuntero(heroAY int fputs@textoDpuntero(heroAY psxpX isrie en el (hero ulquier tipo de vlorD densD nmeros y rteresF ist funin tiene el mismo formto que printfF ry que indirle el punteroD el identi(dor de formto y nomre de l vriles o vriles esriirF geer `stdioFhbF fprintf@puntero(heroDtextoAY fprintf@puntero(heroidenti(dorDvrAY fprintf@puntero(hident@esAformtoDvrile@sAAY

13.7. LECTURA DE CARACTERES Y CADENAS EN SECUENCIALES


pqigGpqiX hevuelve el rter ledo del (hero e inrement el indidor de posiin del rhivoF i se lleg l (nl del (hero l funin devuelve iypF odos los vlores que lee los trnsform rterF geer es `stdioFhbF vrhrafget@puntero(heroAY vrhraget@puntero(heroAY pqiX vee un determindo nmero de rteres de un (hero y los ps un vrile de tipo denF vee rteres hst que enuentr un slto de lneD un iyp o l longitud espei(d en l funinF i se proE due un error devuelve un puntero xvvF v geer es `stdioFhbF fgets@vriledenDtmoDpuntero(heroAY itiwvyX 5inlude `stdioFhb void letr@voidAY void frse@voidAY psvi Bpunt(hY void min@voidA { int optY

CAPTULO 13.

FICHEROS

IIW

lrsr@AY if@@punt(hafopen@4hlFtxt4D4r4AAaaxvvA { printf@4irror en l pertur4AY exit@HAY } printf@4IFvii vie e vien4AY printf@4PFvii gehixenn4AY printf@4ilegir opionX 4AY snf@4 7d4D8optAY 1ush@stdinAY lrsr@AY swith@optA { se IX letr@AY rekY se PX frse@AY rekY } geth@AY flose@punt(hAY } void letr@voidA { hr taHY for@Yt3aiypYA { taget@punt(hAY printf@4 74DtAY } } void frse@voidA { hr frseQIY fgets@frseDQHDpunt(hAY printf@4 7s4DfrseAY }

13.8. POSICION EN FICHEROS SECUENCIALES Y BINARIOS


isxhX vlev el indidor de posiin l prinipio del rhivoF xo devuelve ningn vlorF v eer que utiliz es `stdioFhbF rewind@puntero(heroAY pqiyX qurd el vlor tul del indidor de posiin del rhivoF il segundo termino es un ojeto del tipo fpost que gurd l posiinF il vlor lmendo slo es vlido pr posteriores llmds fsetposF hevuelve hssxy hi giy si se produe lgn error y giy si todo v ienF geer `stdioFhbF int fgetpos@puntero(heroD8ojetofpostAY piyX hesplz el indidor de posiin del rhivo l lugr espei(do por el segundo termino que es un ojeto fpostF iste vlor tiene que her sido otenido por un llmd fgetposF hevuelve hssxy hi giy si hy errores y giy si v todo ienF geer `stdioFhbF int fsetpos@puntero(heroD8ojetofpostAY ivvX hevuelve el vlor tul del indidor de posiin del rhivoF iste vlor es el nmero de ytes que hy entre el omienzo del rhivo y el indidorF hevuelve !I si se produe un errorF geer `ioFhbF vrlong atell@puntero(heroAY

CAPTULO 13.

FICHEROS

IPH

piypX hetermin el (nl de un (hero inrioF e utiliz siempre que se relizn onsultsD informes y listdosD v soido un ule que reorre todo el (heroF geer `stdioFhbF piiuX it el indidor del rhivo en l posiin indid por l vrile de tipo long @en segunE do terminoA desde el lugr que le indiquemos medinte el terer termino de l funin @medinte un onstnteAF hevuelve !I si hy errorD si no hy error devuelve l nuev posiinF v geer es `ioFhbF feof@puntero(heroAY vrlongafseek@puntero(heroDlongdesplDintorigenAY iiui hesde el prinE ipio del (hero iiug hesde l posiin tulF iiuixh hesde el (nl del (hero

13.9. ESCRITURA Y LECTURA EN BINARIOS


psiX isrie los dtos de un estrutur un (hero inrio e inrement l posiin del rhivo en el nmero de rteres esritosF ry que tener en uent que el modo de pertur del (hero dee ser inrio geer `stdioFhbF fwrite@8etiestruDtmoestruDnoregDpunter(heroAY piehX vee registros de un (hero inrioD d uno del tmo espei(do en l funin y los siE t en l estrutur indid en primer termino de l funinF edems de leer los registros inrement l posiin del (heroF ry que tener en uent el modo de pertur del (heroF geer `stdioFhbF fred@8etiestruDtmoestruDnoregDpunter(heroAY

Captulo 14

Gestion de calidad.
14.1. Anlisis.
v primer etp en l produin de un sistem de softwre es deidir extmente qu se supone h de her el sistemF ist etp se onoe tmin omo nlisis de requisitos o espei(iones y por est irunstni muhos trtdists suelen sudividir l etp en otrs dosX enlisis y de(niin del prolemF ispei(in de requisitosF v prte ms difil en l tre de rer un sistem de softwre es de(nir ul es el prolemD y ontinuin espei(r lo que se neesit pr resolverloF xormlmente l de(niin del prolem omienz nlizndo los requisitos del usurioD pero estos requisitosD on freueniD suelen ser impreE isos y difiles de desriirF e deen espei(r todos los spetos del prolemD pero on freueni ls persons que desrien el prolem no son progrmdores y eso he impreis l de(niinF v fse de espei(in requiere normlmente l omuniin entre los progrmdores y los futuros usurios del sistem e iterr l espei(inD hst que tnto el espei(dor omo los usurios estn stisfehos de ls espei(iones y hyn resuelto el prolem normlmenteF in l etp de espei(iones puede ser muy til pr mejorr l omuniin entre ls diferenE tes prtes implids onstruir un prototipo o modelo senillo del sistem (nlY es deirD esriir un progrm prototipo que simule el omportmiento de ls prtes del produto softwre desedoF or ejemploD un progrm senillo Einluso ine(ienteEpuede demostrr l usurio l interfz propuesE t por el nlistF is mejor desurir ulquier di(ultd o mir su ide originl hor que despus de que l progrmin se enuentre en estdo vnzdo oD inlusoD termindF il modeldo de dtos es un herrmient muy importnte en l etp de de(niin del prolemF ist herrmient es muy utiE lizd en el diseo y onstruin de ses de dtosF eng presente que el usurio (nlD normlmenteD no onoe extmente lo que dese que hg el sistemF or onsiguienteD el nlist de softwre o progrmdorD en su soD dee intertur on el usurio pr enontrr lo que el usurio deser que hg el sistemF in est etp se dee responder pregunts tles omoX gules son los dtos de entrdc u dtos son vlidos y qu dtos no son vlidos9 c uin utilizr el sistemX espeilists uli(dos o usurios ulesquier @sin forminAc u interfes de usurio se utilizrnc Dgules son los mensjes de error y de detein de errores deselesc gmo dee tur el sisE tem undo el usurio omet un error en l entrdc u hiptesis son posilesc ixisten sos espeilesc Dgules el formto de l slidc u doumentin es neesric u mejors se introduirn EprolementeEl progrm en el futuroc Dgmodee ser de rpido el sistemc gd unto tiempo h de mirse el sistem despus que se hy entregdoc il resultdo (nl de l fse de nlisis es un espei(in de los requisitos del s6wreF H H SS hesripin del prolem previ y detlldmenteF rototipos de progrms que pueden yudr resolver el prolemF

14.2. Diseo.
v espei(in de un sistem indi lo que el sistem dee herF v etp de diseo del sistem indi mo h de herseF r un sistem pequeoD l etp de diseo puede ser tn senill omo esriir un lgoritmo en pseudodigoF r un sistem grndeD est etp inluye tmin l fse de diseo de lgoritmosD pero inluye el diseo e interin de un nmero de lgoritmos diferentesD on freueni slo osquejdosD IPI

CAPTULO 14.

GESTION DE CALIDAD.

IPP

s omo un estrtegi pr umplir todos los detlles y produir el diE go orrespondienteF is preiso determinr si se pueden utilizr progrms o suprogrms que y existen o es preiso onstruirlos totlmenteF il proyeto se h de dividir en mdulos utilizndo los prinipios de diseo desE endenteF e ontinuinD se dee indir l interin entre mdulosY un digrm de estruturs proE porion un esquem lro de ests reliones9F in este puntoD es importnte espei(r lrmente no slo el propsito de d mduloD sino tmE in elpujo de duros entre mdulosF or ejemploD se dee responder ls siguientes preguntsX u dtos estn disponiles l mdulo ntes de su ejeuinc u supone el mduloc u hen los dtos despus de que se ejeut el mduloc or onsiguienteD se deen espei(r en detlle ls hiptesisD entrd y slid pr d mduloF n medio pr relizr ests espei(iones es esriir un preE ondiinD que es un desripin de ls ondiiones que deen umplirse l prinipio del mdulo y un postondiinD que es un desripin de ls ondiiones l (nl de un mduloF or ejemploD se puede desriir un suprogrm que orden un list @un rryA de l form siguienteX suprogrm ordenr @eD nA {yrden un list en orden sendente} preondiinX e es un rry de n enterosD I`a n `a wxF postondiinX evII `a evPI ` F F F ` a enD n es inlterle} or ltimoD se puede utilizr pseudodigo pr espei(r los detlles del lgoritmoF is importnte que se emplee stnte tiempo en l fse de diseo de sus progrmsF il resultdo (nl de diseo desE endente es un soluin que se fil de trduir en estruturs de ontrol y estruturs de dtos de un en F lenguje de progrmin espe(o E nuestro soD gE il gsto de tiempo en l fse de diseo ser horro de tiempo undo se esri y depur su proE grmF

14.3. Pruebas e integracin.


gundo los diferentes omponentes de un progrm se hn implementdo y omprodo individulE menteD el sistem ompleto se ensml y se integrF v etp de prues sirve pr mostrr que un progrm es orretoF vs prues nun son filesF idgr hijkstr h esrito que mientrs que ls prues relmente muestrn lpreseni de erroresD nunE puede mostrr su useniF n prue on xito en l ejeuin signi( slo que no se hn desE uierto errores en ess irunstnis espe(sD pero no se die nd de otrs irunstnisF in teoE r el nio modo que un prue puede mostrr que un progrm es orreto si todos los sos posiles se hn intentdo y omprodo @es lo que se onoe omo prue exhustivAY es un situin tniE mente imposile inluso pr los progrms ms senillosF upongmosD por ejemploD que se h esriE to un progrm que lule l not medi de un exmenF n prue exhustiv requerir tods ls omE iniones posiles de mrs y tmos de lsesY puede llevr muhos os ompletr l prueF v fse de prues es un prte esenil de un proyeto de progrminF hurnte l fse de prueE s se neesit eliminr tntos errores lgios omo puedF in primer lugrD se dee pror el progrE m on dtos de entrd vlidos que onduen un soluin onoidF i iertos dtos deen estr dentro de un rngoD se deen inluir los vlores en los extremos (nles del rngoF or ejemploD si el vlor de entrd de n e en el rngo de I IHD se h de segurr inluir sos de prue en los que n est entre I y IHF min se deen inluir dtos no vlidos pr ompror l pidd de detein de errores del progrmF e hn de pror tmin lgunos dtos letorios yD por ltimoD intentr lguE nos dtos relesF

14.4. Vericacin y depuracin de un programa.


v veri(in o ompilon de un progrm es el proeso de ejeuin del progrm on un mpli vriedd de dtos de entrdD llmdos dtos de test o prueD que determinrn si el progrm tiene errores o ugsF r relizr l veri(in se dee desrrollr un mpli gm de dtos de testX vloE res normles de entrdD vlores extremos de entrd que omprueen los lmites del progrm y vlores de entrd que omprueen spetos espeiles del progrmF v depurin es el proeso de enontrr los errores del progrm y orregir o eliminr dihos erroresF gundo se ejeut un progrmD se pueden produir tres tipos de erroresX IF irrores de ompilinF e produen normlmente por un uso inorreto de ls regls del lenE guje de progrmin y suelen ser errores de sintusisF i existe un error de sintxisD l ompuE tdor no puede omprender l instruinD no se otendr el progrm ojeto y el ompildor imprimir un list de todos los errores enontrdos durnte l ompilinF PF irrores de ejeuinF istos errores se produen por instruiones que l omputdor puede omprender pero no ejeutrF ijemplos tpios sonX divisin por ero y res udrds de nmeE ros negtivosF in estos sos se detiene l ejeuin del progrm y se

CAPTULO 14.

GESTION DE CALIDAD.

IPQ

imprime un mensje de errorF Q F irrores lgiosF e produen en l lgi del progrm y l fuente del error suele ser el diseE o del lgoritmoF istos errores son los ms difiles de detetrD y que el progrm puede funionr y no produir errores de ompilin ni de ejeuinD y slo puede dvertir el error por l otenin de resultdos inorretosF in este so se dee volver l fse de diseo del lgoritmoD modi(r el lgoritmoD mir el progrm fuente y ompilr y ejeutr un vez msF v veri(in o ompilirn de un progrm es el proeso de ejeuin del progrm on un mpli vriedd de dtos de entrdD llmdos dtos de rest o pruehuD que determinrn si el progrm tiene errores in ug AF r relizr l veri(in se dee desrrollr un mpli gm de dtos de testX vloE res normles de entrdD vlores extremos de entrd que omprueen los lmites del progrm y vlores de entrd que omprueen spetos espeiles del progrmF v depurin es el proeso de enontrr los errores del progrm y orregir o eliminr dihos erroresF gundo se ejeut un progrmD se pueden produir tres tipos de erroresX IF irrores de ompilinF e produen normlmente por un uso inorreto de ls regls del lenE guje de progrmin y suelen ser errores de sintusisF i existe un error de sintxisD l ompuE tdor no puede omprender l instruinD no se otendr el progrm ojeto y el ompildor imprimir un list de todos los errores enontrdos durnte l ompilinF PF irrores de ejeuinF istos errores se produen por instruiones que l omputdor puede omprender pero no ejeutrF ijemplos tpios sonX divisin por ero y res udrds de nmeE ros negtivosF in estos sos se detiene l ejeuin del progrm y se imprime un mensje de errorF Q F irrores lgiosF e produen en l lgi del progrm y l fuente del error suele ser el diseE o del lgoritmoF istos errores son los ms difiles de detetrD y que el progrm puede funionr y no produir errores de ompilin ni de ejeuinD y slo puede dvertir el error por l otenin de resultdos inorretosF in este so se dee volver l fse de diseo del lgoritmoD modi(r el lgoritmoD mir el progrm fuente y ompilr y ejeutr un vez msF

14.5. Fallos mas frecuentes.


ompror si se sle fuer de un vetor gonsideriones gontrolr siempre los lmites de los rrys mo onoido en tiempo de ompilin ilementos del mismo tipo gsi tods ls operiones on rry se relizn on sus elementosF il mnejo de dens g es omplidoF F F y peligrosoF v posiilidd de que se lmenen ms rteres de los que en en un zon de memori reservd pr un den h ddo lugr un teni de rking muy omunX el over)ow exploit @que signi( provehmiento del desordmientoAD tmien onoido por smsh the stk @mhr e l pilAF i un progrm g lee un den on snf o gets es vulnerle este tipo de tquesF v ide si es l siguienteF i es un vrile lol un funionD reside en un zon de memori espeilX l pilF odemos desordr l zon o de memori reservd pr l den esriiendo un texto ms lrgo del que e en ellF gundo eso ourreD estmos oupndo memori en un zon de l pil que no nos perteneeF odemos onseguir si esriir informion en un zon de l pil reservd informion omo l direion de retorno de l funionF il exploit se s en signr l direion de retorno el vlor de un direion en l que hremos esrito un rutin o o espeil en odigo mquinF omo onseguimos introduir un rutin en odigo mquin en un progrm jenoc in l propi den que provo el desordmientoD odi(ndol en inrio3 v rutin de odigo mquin suele ser senillX efetu un simple llmd l sistem opertivo pr que ejeute un interprete de ordenes nixF il interprete se ejeutr on los mismos permisos que el progrm que hemos reventdoF i el progrm tdo se ejeut on permisos de rootD hremos onseguido ejeutr un interprete de ordenes omo rootF il ordendor es nuestro3 omo podemos proteger nuestros progrms de los over)ow exploitc uesD pr o empezrD no utilizndo nun snf o gets diretmenteF gomo es posile leer de teldo rter rter @lo veremos en el pitulo dedido (herosAD podemos de(nir nuestr propi funion de letur de densX un funion de letur que ontrole que nun se esrie en un zon de memori ms informion de l que eF hdo que gets es tn vulnerle los over)ow exploitD el ompildor de g te dr un viso undo l usesF xo te sorprendsD puesD undo ves un mensje omo esteX the e gets9 funtion is dngerous nd should not e usedF en el so de vinux @y los nix en generlA podemos redirigir dems los mensjes de error hi otro sitio distinto del resto de mensjes @que in destindos pntllAF isto se onsigue on el smolo Pb X lulesultdos b vloresFtxt Pb erroresFtxt ist orden pone en mrh un progrm llmdo luE lesultdosD gurd en el (hero vloresFtxt los mensjes que normlmente preern en pntllD y

CAPTULO 14.

GESTION DE CALIDAD.

IPR

gurd en el (hero erroresFtxt los mensjes de errorF ist polti de seprr los mensjes de informin y los mensjes de error es fil de llevr nuestros progrmsF fst on que los mensjes de error no los mndemos pntll on rdenes omo printfD sino que los mndemos un (hero espeil llmdo stderr @slid estndr de erroresAF goneptos sios sore depurin v depurin es el nlisis de un progrm pr desurir fllosF il nomre en ingls es deugD porque esos fllos de progrmin reien el nomres de ugs @ihosAF r eliminr esos fllos que hen que un progrm no se omporte omo deerD se usn uns herrmients llmds depurdoresF istos nos permiten vnzr pso pso pr ver mo vnz relmente nuestro progrmD y tmin nos dejn ver los vlores de ls vrilesF gomo nuestros onoimientos y nos permiten her progrms de un iert omplejiddD es el momento de ver forms de desurir dnde estn los posiles erroresF vo hremos desde vrios entornos distintosF

14.6. Documentacin y mantenimiento.


v doumentin de un prolem onst de ls desripiones de los psos dr en el proeso de resoE luin de un prolemF v importni de l doumentin dee ser destd por su deisiv in)uenE i en el produto (nlF rogrms poremente doumentdos son difiles de leerD ms difiles de depurr y si imposiles de mntener y modi(rF v doumentin de un progrm puede ser interriu y externF v doumentin intern es l ontenid en lnes de omentriosF v doumenrin exrem inluye nlisisD digrms de )ujo yGo pseudodigosD mnules de usurio on instruiones pr ejeutr el progrm y pr interpretr los resultdosF v doumentin es vitl undo se dese orregir posiles errores futuros o ien mir el proE grmF les mios se denominn muntenimiento del progrumF hespus de d mio l douE mentin dee ser tulizd pr filitr mios posterioresF is prti freuente numerr ls suesivs versiones de los progrms IFHD IFID PFHD PFID etF @i los mios introduidos son imporE tntesD se vr el primer dgito IFHD PFHD FFFsD en so de pequeos mios slo se vr el segundo dgito PFHDPFI FFFsFA gundo el produto softwre @el progrmA se h termindoD se distriuye entre los posiles usuriosD se instl en ls omputdors y se utiliz @produinAFin emrgoD y unqueD prioriD el progrm funione orretmenteD el softwre dee ser mntenido y tulizdoF he hehoD el oste tpio del mntenimiento exedeD on reesD el oste de produin del sistem originlF n sistem de softwre produir errores que sern detetdosD si on seguriddD por los usuE nos del sistem y que no se desurieron durnte l fse de prueF v orrein de estos errores es prE te del mntenimiento del softwreF ytro speto de l fse de mntenimiento es l mejor del softwre diendo ms rterstis o modi(ndo prtes existentes que se dpten mejor los usuriosF ytrs uss que oligrn revisr el sistem de softwre en l etp de mntenimiento son ls siguientesX IA gundo un nuevo hrdwre se introdueD el sistem puede ser modi(do pr ejeutrE lo en un nuevo entornoY PA i min ls neesiddes del usurioD suele ser menos ro y ms rpidoD modi(r el sistem existente que produir un sistem totlmente nuevoF v myor prte del tiempo de los progrmdores de un sistem se gst en el mntenimiento de los sistems existentes y no en el diseE o de sistems totlmente nuevosF or est usD entre otrsD se h de trtr siempre de diser proE grms de modo que sen files de omprender y entender @legilesA y files de mirF

14.7. EL CICLO DE VIDA DEL SOFTWARE.


ixisten dos niveles en l onstruin de progrmsX qullos reltivos pequeos progrms @los que normlmente relizn progrmdores individulesA y quellos que se re(eren sistems de desrrollo de progrms grndes @proyetos de softwreA y queD generlmenteD requieren un equipo de progrmE dores en lugr de persons individulesF il primer nivel se denomin progrmin peque eslY el segundo nivel se denomin progrmin grn eslF v progrmin en peque esl se preoup de los oneptos que yudn rer pequeos proE grms Equellosque vm9n en longitud desde uns pos lnes uns pos pginsEF in estos proE grms se suele requerir lridd y preisin mentl y tniF in reliddD el inters myor desde el punto de vist del futuro progrmdor profesionl est en los progrms de grn esl que requiere de unos prinipios slidos y (rmes de lo que se onoe omo ingenieri de softwre y que onstituye un onjunto de tnis pr filitr el desrrollo de progrms de omputdorF istos progrms o mejor proyetos de softwre estn relizdos por equipos de persons dirigidos por un diretor

CAPTULO 14.

GESTION DE CALIDAD.

IPS

de proyetos @nlist o ingeniero de softwreA y los progrms pueden tener ms de IHHFHHH lnes de digoF il desrrollo de un uen sistem de softwre se reliz durnte el ilo de vid que es el perodo de tiempo que se extiende desde l onepin iniil del sistem hst su eventul retird de l omerE ilizin o uso del mismoF vs tividdes humns relionds on el ilo de vid implin proE esos tles omo nlisis de requisitosD diseoD implementinD odi(inD pruesD veri(inD doumentinD mntenimiento y evoluin del sistem y osoleseniF in eseni el ilo de vid del softwre omienz on un ide iniilD inluye l esritur y depurin de progrmsD y ontin durnte os on orreiones y mejors l softwre originlRF il ilo de vid del softwre es un proeso itertivoD de modo que se modi(rn ls suesivs etE ps en funin de l modi(in de ls espei(iones de los requisitos produidos en l fse de diseE o o implementinD o ien un vez que el sistem se h implementdoD y prodoD pueden preer errores que ser neesrio orregir y depurrD y que requieren l repetiin de etps nterioresF v pigur PFIQ muestr el ilo de vid de softwre y l disposiin tpi de sus diferentes etps en el sistem onoido omo ilo de vid en sdD que supone que l slid de d etp es l entrd de l etp siguienteF

14.8. MTODOS FORMALES DE VERIFICACIN DE PROGRAMAS


eunque l veri(in forml de progrms se sle fuer del mito de este liroD por su importni vmos onsiderr dos oneptos lveD ser9os @(rmionesA y preondiionesGpostondiiones invE rintes que yuden doumentrD orregir y lri(r el diseo de mdulos y de progrmsF PFUFIF eseriones9 n prte importnte de un veri(in fmml es l doumentin de un progrm trvs de serE tos o (rmiones Esentenis lgis er del progrm que se delrn verdders EF n serE to se esrie omo un omentrio y desrie lo que se supone se verddero sore ls vriles del proE grm en ese puntoF n serto es un frse sore un ondiin espe( en un ierto punto de un lgoritmo o proE grmF reondiiones y postondiiones vs preondiiones y postondiiones son (rmiones senills sore ondiiones l prinipio y l (nl de los mdulosF n preondiin de un proedimiento es un (rmin lgi sore sus prE metros de entrdY se supone que es verdder undo se llm l proedimientoF npostondiin de un proedimiento puede ser un (rmin lgi que desrie el mio en el estdo delprogrm proE duido por l ejeuin del proedimientoY l postondiin desrie el efeto de llmr l proediE mientoF in otrs plrsD l postondiin indi que ser verdder despus que se ejeute el proeE dimientoF egls pr prue de progrms n medio til pr pror que un progrm he lo que relmente h de her es proporionr serE iones que expresen ls ondiiones ntes y despus de que se ejeutdF in relidd ls seriones son omo sentenis o delriones que pueden ser o ien verdders o ien flssF v primer serinD l preondiin desrie ls ondiiones que hn de ser verdders ntes de ejeutr Fv segund serinD l postondiinD desrie ls ondiiones que hn de ser verdders despus de que se h ejeutdo @suponiendo que l preondiin fue verdder ntesAF il modelo generl esX {preondiinA {a @postondiinA {a ondiiones logis que son verdders ntes de que se ejeute} ondiiones logis que son verdders despues de que se ejeute} lnvrintes de ules n invrinte de ule es un ondiin que es verdder ntes y despus de l ejeuin de un uleF vs invrintes de ules se utilizn pr demostrr l orrein @extitudA de lgoritmos itertivosF tilizndo invrintesD se pueden detetr errores ntes de omenzr l odi(in y por es rzn reduir tiempo de depurin y prueF lnvrintes de ule omo herrmients de diseo ytr pliin de los invrintes de ule es l espei(in del uleX iniiinD ondiin de repeE tiin y uerpo del uleF

14.9. Etapas a establecer la exactitud (correccin) de un programa.


e pueden utilizr invrintes pr estleer l orrein de un lgoritmo itertivoF upongmos el lgoritmo y estudido nteriormenteF GBlulr l sum de e s y s D e l l D F F FenEllBG um a y Y j a yY

CAPTULO 14.

GESTION DE CALIDAD.

IPT

while @ j `a nEIA um a um C e j l Y j a jClY I GBinvrinteX um es l sum de los elementos e y e j E l B G vos siguientes utro puntos hn de ser verdderosX IF il invrinte dee ser iniilmente verdderoD ntes de que omiene l ejeuin por priE mer vez del uleF in el ejemplo nteriorD um es y y j es y iniilmenteF in este soD el invrinte signi( que um ontiene l sum de los elementos e y I e j E I s D que es verE dd y que no hy elementos en este rngoF PF n ejeuin del ule dee mntener el invrinteF isto es si el invrinte es verddero ntes de ulquier iterin del uleD entones se dee demostrr que es verddero despus de l iterinF in el ejemploD el ule de e j s um y ontinuin inrement j en s F or onsiguienteD despus de un ejeuin del uleD el elemento dido ms reientemente um es e j E I s Y esto es el invrinte que es verddero despus de l iterinF QF il invrinte dee pturr l extitud del lgoritmoF isto esD dee demostrr que si el invE rinte es verddero undo termin el uleD el lgoritmo es orretoF gundo el ule del ejemE plo terminD j ontiene n y el invrinte es verdderoX um ontiene l sum de los elementos e y s e jEIs D que es l sum que se trt de lulrF RF il ule dee terminrF isto esD se dee demostrr que el ule termin despus de un nmeE ro (nito de iterionesF in el ejemploD j omienz en y y ontinuin se inrement en I en d ejeuin del uleF or onsiguienteD j eventulmente exeder n on independeni del vlor de n F iste heho y l rtersti fundmentl de while grntizn que el ule termiE nrF v identi(in de invrintes de ulesD yud esriir ules orretosF e represent el invrinte omo un omentrio que preede d uleF rogrmin segur ontr fllos n progrm es seguro ontr fllos undo se ejeut rzonlemente por ulquier que lo utilieF r onseguir este ojetivo se hn de ompror los errores en dtos de entrd y en l lgi del proE grmF upongmos un progrm que esper leer dtos enteros positivos pero lee E PSF n mensje tpio visulizr nte este error suele serX irror de rngo in emrgoD es ms til un mensje tl omo esteX EPS no es un nmero vlido de os or fvor vuelv introduir el nmero ytrs regls prtis onsiderr sonX gompror dtos de entrd no vlidos snf @4 7f 7d4DqrupoDxumeroA Y FFF if @xumero ba y A g r e g r xumero totl else m n e j r el error gd suprogrm dee ompror los vlores de sus prmetrosF esD en el so de l funin umsntervlo que sum todos los enteros omprendidos entre m y nF int umsntervlo @int mDint nA preondiion X m y n son enteros tles que m ia n postondiionX hevuelve umsntervlo a mC@mClAC F F F C n m y n son inlterles i n t umDsndieY um a y Y f o r @sndiea mY sndieian YsndieCCA um a um C sndieY return umY

14.10. FACTORES EN LA CALIDAD DEL SOFTWARE


v onstruin de softwre requiere el umplimiento de numeross rterstisF intre ells se desE tn ls siguientesX if iieni v e(ieni de un softwre es su pidd pr her un uen uso de los reursos que mnipulF rnsportilidd @portiliddA v trnsportilidd o portilidd es l filidd on l que un softwre puede ser trnsportdo sore diferentes sistems fsios o lgiosF erif iilidd v veri(ilidd Efilidd de veri(in de un softwreE es su pidd pr soportr los proE edimientos de vlidin y de eptr juegos de test o ensyo de progrmsF sntegridd v integridd es l pidd de un softwre proteger sus propios omponentes ontr los proesos que no teng el dereho de ederF pil de utilizr n softwre es fil de utilizr si se puede omunir onsigo de mner modF gorrein gpE idd de los produtos softwre de relizr extmente ls tres de(nids por su espei(inF oustez gpidd de los produtos softwre de funionr inluso en situiones normlesF ixtensiilidd pilidd que tienen los produtos de dptrse mios en su espei(inF ixisten dos prinipios fundmentles pr onseguir est rterstiX y diseo simpleY desentrlizinF eutilizin gpidd de los produE tos de ser reutilizdosD en su totlidd o en prteD en nuevs pliionesF gomptiilidd pilidd de los produtos pr ser omindos on otrosF

Captulo 15

Programacion Multimedia.
15.1. Librerias SDL.
imple hiretwedi vyer @hvA es un onjunto de iliotes desrrollds on el lenguje g que proE porionn funiones sis pr relizr operiones de diujdo PhD gestin de efetos de sonido y msiD y rg y gestin de imgenesF nder vinuxD one n use sdlEon(g to determine wht ompiler nd linker )gs re required for hvF sdlEon(g !)gs will print out the ompiler )gs sdlEon(g !lis will print out the linker )gs por exmpleD ompile nd link ginst the hv lirry o gCC sdltestF Eo sdltest sdlEon(g !)gs !lis enother exmple tht uses the hvmixer lirryD s well o gCC sdltestF Eo sdltest sdlEon(g !)gs !lis Elhvmixer

15.2. Metodos.
oxelD pixelD texelF

IPU

Captulo 16

Programacion opengl.

IPV

Captulo 17

Biblioteca de programas propios.


omprion de vetores omplejos mtries lulo diferenil

IPW

Captulo 18

Las librerias del lenguaje C


ods ls versiones del lenguje g ofreen on un iliote estndr de funiones en tiempo de ejeuin que proporionn soporte pr operiones utilizds on ms freueniF ists funiones permiten relizr un operin on slo un llmd l funin @sin neesidd de esriir su digo fuenteAF vs funiones estnur o pree(nidusD omo s se denominn ls funiones perteneientes l iliote estndrD se dividen en gruposY tods ls funiones que perteneen l mismo grupo se delrn en el mismo rhivo de eerF vos nomres de los rhivos de eer estndr utilizdos en nuestro progrm se muestrn ontinuin enerrdos entre orhetes tipo nguloX `ssertFhb `Iimi ts Fhb `stdrgFhb `timeFhb `typeFhb `mth Fhb `stdefFhb e r rno Fh EFFsetjmpFhb `stdioFhb `)otFhb `signlFhb `stringFhb in los mdulos de progrm se pueden inluir lnes 5inlude on los rhivos de eer orrespondientes en ulquier ordenD y ests lnes pueden preer ms de un vezF r utilizr un funin o un mroD se dee onoer su nmero de rgumentosD sus tipos y el tipo de sus vlores de retornoF ist informin se proporionr en los prototipos de l funinF v senteni 5inlude mezl el rhivo de eer en su progrmF

18.1. Por tipo.


gontrolX fopen flose fseek rewind

18.1.1. FUNCIONES DE CARCTER


il rhivo de eer `gi F rb de(ne un grupo de funionesGmros de mnipulin de rteresF ods ls funiones devuelven un resultdo de vlor verddero @distinto de eroA o flso @eroAF r utilizr ulquier de ls funiones @l UFQA no se olvide inluir el rhivo de eer g i Fr en l prte superior de ulquier progrm que hg uso de ess funionesF int islph@int A vetr mysul o minsulF int isdigit @int A hgito deimlF int isupper@int A vetr mysul @eE AF int islower @int A vetr minsul @Ez F A int islnum@int A letr o dgitoY islph@A s lisdigit@A int isntrl@int A grter de ontrolF int isxdigit@int A hgito hexdeimlF int isprint@int A grter imprimile inluyendo iegsyF int isgrph@int A grter imprimile exepto iegsyF int issE pe@int A iegsyD eexgi hi qsxeD xie vsxieD iyxy hi geyD efveg sxD efvegs~x isgevF int ispunt@int A grter imprimile no espioD dgito o letrF int toupper@int A gonvierte letrs mysulsF int tolower@int A gonvierte letrs minsulsF elguns funiones inorpords l iliote de funiones ompruen rteres espeilesD priniplE mente efetos de legiiliddF ists funiones son ls siguientesX isntrl@A hevuelve verddero si es un rter de ontrol @digos egss y QIA y flso en so ontrrioF isgrph@A hevuelve verddero si es un rter imprimile @no de ontrolA exepto espioY en so ontrrioD se devuelve flsoF isprint@A hevuelve verddero si es un rter imprimile @digo egss QP IPUA inluyendo un espioY en so ontrrioD se devuelve flsoF H ispunt@A hevuelve verddero si es ulquier rter de puntuin @un rter imprimile distinto de espioD letr o dgitoAY flsoD en so ontrrioF isspe@A hevuelve verddero si es rter un espioD nuev lne tulin @ t A o tulin vertil @ vAF

IQH

CAPTULO 18.

LAS LIBRERIAS DEL LENGUAJE C

IQI

ixisten funiones que sirven pr mir rteres mysuls minsuls o vieversF tolower @A gonvierte el rter minsulD si y no lo esF toupper@A gonvierte el rter mysulD si y no lo esF

18.1.2. Comprobacin alfabtica y de dgitos


ixisten vris funiones que sirven pr ompror ondiiones lftisX H islph@A hevuelve verE ddero @distinto de eroA si es un letr mysul o minsulF e devuelve un vlor flso si se ps un rter distinto de letr est funinF H islower@A hevuelve verddero @distinto de eroA si es un letr minsulF e devuelve un vlor flso @yAD si se ps un rter distinto de un minsulF H isupper @A hevuelve verddero @distinto de eroA si es un letr mysulD flso on ulquier otro rterF vs siguientes funiones ompruen rteres numriosX o isdigit@A gomprue si es un dgito de y WD deE volviendo verddero @distinto de eroA en ese soD y flso en so ontrrioF H isxdigit @A hevuelve verddero si es ulquier dgito hexdeiml @ y WDe ulquier otro soF pD o ien f A y flso en vs siguientes funiones ompruen rgumentos numrios o lftiosX H islnum@A hevuelve un vlor verdderoD si es un dgito de y W o un rter lftio @ien mysul o minsulA y flso en ulquier otro soF

18.1.3. librerias de entrada.


veer y esriir un rterX fget get fput put gethr puthr veer y esriir un denX fgets gets fputs puts veer y esriir on 4u'er4X fred fwrite veer y esriir on formtoX fprintf printf fsnf snf sprintf ssnf gdens strpyD strnpyY strt vireris por rhivoF

18.1.4. Libreria String.h


v iliote estndr de g ontiene l iliote de den sxqFIID que inorpor ls funiones de mnipulin de dens utilizds ms freuentementeF il rhivo de eer hsyFr tmin soport iG de densF elgunos frintes de g tmin inorporn otrs iliotes pr mnipulr densD pero omo no son estndur no se onsiderrn en est seinF vs funiones de den tienen rgumentos delrdos de form similr X hr BsY o ienD onst hr BsIY isto signi( que l funin esper un den que puede o no modi(rseF gundo se utiliz l funinD se puede usr un puntero hr o se puede espei(r el nomre de un vrile rry hrF gundo se ps un rry un funinD g ps utomtimente l direin del rry hrFv l IPFI resume lguns de ls funiones de den ms usulesF mempy @ I voidB mempy@voidB slD onst voidB sPD sizeEt nAY eemplz los primeros n ytes de B s Ion los primeros n ytes de B s PF hevuelve sIF strt hr Bstrt @hr B d e s t i n o D onst hr B f u e n t e AY ede l den fuente l (nl de destinoF ontenF hevuelve l den destinoF strhr @ A hrB strhr@hrB sD int hAY hevuelve un puntero l primer ourreni de h en s l F hevuelve xvv si h no est en slF strmp @ A int strmp@onst hr BsD onst hr BsPAY gompr lftimente l den s s P y devuelveX y s i s l a sP `y s i sl ` sP by si sl b sP strmpi @ A int strmpi@onst hr BsID onst hr BsPAY sgul que strmp @ A D pero sin distinguir entre mysuls y minsulsF strpy @ I hr Bstrpy@hr B d e s t i n o D onst hr B f u e n t e A Y gopi l denDfuente l den destinoF hevuelve l den destinoF strspn@A sizeEt strspn@onst hrB sD onst hrB sPAY hevuelve l longitud de l suden ms lrg de sIque omienz on el rter sI y y no ontiene ninguno de los rteres de l den sPF strlen @ A sizeEt strlen @onst hr B s A hevuelve l longitud de l den sF strnt @ A hrB strnt@hrB sD onst h r 4 s P D sizeEt nAY ede los primeros n rteres de sP s IF hevuelve s IFi n ba s t r Ien @ sP A D entones strnt @ s D sPD nA tiene el mismo efeto que strt @sD sPA F strnmp int strnmp@onst hrB s D onst hrB sPD sizeEt nAY gompr sI on l suden formd por los primeros n rteres de sP F hevuelve un entero negtivoD ero o un entero positivoD segn que sl lexiogr(mente se menorD igul omyorquelsudensPFin P s t r l e n @ s P A D e n t o n e s strnmp@sID s P D nA y strmp @slD sP A tienen el mismo efetoF strnset hr Bstrnset@hr BsD int hD sizeEt nAY gopi n vees el rter h en l den s prtir de l posiin iniil de s @s y AF il mximo de rteres que opi es l longitud de s F

CAPTULO 18.

LAS LIBRERIAS DEL LENGUAJE C

IQP

strprk @ A hrB strprk@onst hrB slD onst hrB sPAY hevuelve l direin de l primer ourreni en sIde ulquier de los rteres de s PD hevuelve xvv si ninguno de los rteres de s P pree en s l F strrhr @ hrB strrhr@onst hrB s D int AY hevuelve un puntero l ltim ourreni de en sFhevuelve xvv si no est en sF v squed l he en sentido inversoD desde el (nl de l den l pnmer rterD hst que enuentr el rter F strspn@A sizeEt strspn@onst hrB slD onst hrB sPAY hevuelve l longitud de l suden izquierd @ s l y A F F F A ms lrg de s l que ontiene nimente rteres de l den sPF strstr @ A hr Bstrstr@onst hr BsID onst hr BsPAY fus l den sP en si y devuelve un puntero los rteres donde se enuentr sP strtok @ A hrB strtok@hrB slD onst hrB sPAY enliz l den s I en tokens @omponentes lxiosAD stos delimitdos por rteres de l den sPFv llmd iniil s trtok @ sID sP A devuelve l direin del primer token y sit xvv l (nl del tokenF hespus de l llmd iniilD d llmd suesiv strtok @xvvD sP A devuelve un puntero l siguiente token enontrdo en s l F ists llmds min l den s l D reemplzndo d seprdor on el rter xvvF

18.1.5. libreria math.h


hentro del (hero de eer mthFh tenemos eso muhs funiones mtemtis prede(nids en gD omoX os@xAX ero oseno sin@xAX ero seno tn@xAX ero tngente tnP@yDxAX ero tngente de yGx @por si x o y son HA eil@xAX il vlor entero superior x y ms erno l os@xAX goseno osh@xAX goseno hiperlio exp@xAX ixponenil de x @e elevdo xA fs@xAX lor soluto )oor@xAX il myor vlor entero que es menor que x fmod@xDyAX esto de l divisin xGy log@xAX vogritmo nturl @o neperinoD en se eA logIH@xAX vogritmo en se IH pow@xDyAX x elevdo y sin@xAX eno sinh@xAX eno hiperlio sqrt@xAX z udrd tn@xAX ngente tnh@xAX ngente hiperli i neesit psr un ngulo expresdo en grdos rdinesD pr poder utilizrlo on ls funiones trigonom8iesD multiplique los grdos por piGIVHD donde pi a QFIRISWF vs funiones logrtmis y exponeniles suelen ser utilizds on freueni no slo en mtemtisD sino tmin en el mundo de l empres y los negoiosF ists funiones requieren tmin el rhivo de inlusin we r F rF exp@xID expl@xA glul el exponenil e D donde e es l se de logritmos nturles de vlor PFU IVPVPF vlor a exp @ S F y A Y n vrinte de est funin es e x p l D que lul e utilizndo un vlor l o n g doule @lrgo doleAF log@xAD logl@xA v funin log lul el logritmo nturl del rgumento x y logI @xAlul el itdo logritmo nturl del rgumento x de vlor lonq doule @lrgo doleAF H logly@xAD loglyl@xA glul el logritmo deiml del rgumento xD de vlor rel doule en I ogl H @ s y de vlor rel l o n g doule en log yI @xAY x h de ser positivoF

18.1.6. Funciones aleatorias


vos nmeros letorios son de grn utilidd en numeross pliiones y requieren un trto espeil en ulquier lenguje de progrminF g no es un exepin y l myor de los ompildores inorporn funiones que genern nmeros letoriosF vs funiones usules de l iliote estndr de g sonX rndD rndomD rndomize y srndF ists funiones se enuentr en el rhivo v r F t i F H rnd@voidA v funin rnd gener un nmero letorioF il nmero luldo por rnd vr en el rngo entero de y exhE weF v onstnte exhEwe se de(ne en el rhivo h v D s f F II en form hexdeiml @por ejemploD UpppAF in onseueniD segrese inluir diho rhivo en l prte superior de su progrmF gd vez que se llm rnd @ A en el mismo progrmD se otiene un nmero entero diferenteF in emrgoD si el progrm se ejeut un y otr vezD se devuelven el mismo onjunto de nmeros letoriosF n mtodo pr otener un onjunto diferente de nmeros letorios es llmr l funin srnd@ A o l mro rndomizeF v llmd l funin rnd@ A se puede signr un vrile o situr en l funin de slid printf @ A F test a rnd@AY printf @4iste es un nmero H dl edtor io 7dn4D n d @ A A r Y rndomize@voidA v mro rndom i ze iniiliz el generdor de nmeros letorios on un semill letori otenid prtir de un llmd l funin timeF hdo que est mro llm l funin timeD el rhivo de eer s wi F r se inluir en el progrmF xo devuelve ningn vlorF G B progrm pr generr IH nmeros ledtorio B G 5inlude `stdioFhb 5inlude `stdliFhb 5inlude `tiFmeF hb 5inlude `onioFhb fnt m i n @voidA i int iY lrsroY G B limpi l pntlld B G rndomize @ A Y for @ialY i`aIHY i C C A pr iFntt @4Vd 9sD r n d @ A A Y return HY } H srnd@semilIA v funin srnd iniiliz el generdor de nmeros letoriosF e utiliz pr (jr el punto de omienzo pr l generin de series de nmeros letoriosY este vlor se denomin

CAPTULO 18.

LAS LIBRERIAS DEL LENGUAJE C

IQQ

semi I IdF i el vlor de semiII es ID se reiniiliz el generdor de nmeros letoriosF gundo se llm l funin rnd ntes de her un llmd l funin srndDse gener l mism seueni que si se huiese llmdo l funin srnd on el rgumento semiIl tomndo el vlor IF rndom @numA v mro rndom gener un nmero letorio dentro de un rngo espei(do @y y el lmite superior espei(do por el rgumento numAF hevuelve un nmero entero entre y y numEIF GB progrm pr generr enontrr el myor de IH nmeros letorios entre y y IHHH 4G 5inlude `stdioFhb 5inlude `stdliFhb 5inlude `timeFhb 5inlude `onioFhb 5de(ne yi IHHH 5de(ne we@xDyA @ @xAb@yAc X @yA @xA A int min @voidA i int mxDiY lrsr @ A Y rndomize @ A Y mx a rndom@HiAY for @iaPY i`aIHY i C C A i int yY y a rndom@HiAY mx a we@mxDyAY s printf@4iI myor nmero letorio generdoX 7d4D mxAY return y Y I in este otro ejemplo de generin de nmeros letoriosD se (j l semill en SH y se gener un nmero letorioF 5inlude `stdioFhb 5inlude `stdliFhi 5inlude `onioFhb int min @voidA i lrsr @ A Y srnd@SHAY printf@4iste es un nmero letorioX 7d4DrndyA Y return y Y }

18.1.7. Libreria time.h.


v fmili de miroproesdores VHxVT tiene un sistem de reloj que se utiliz priniplmente pr onE trolr el miroproesdorD pero se utiliz tmin pr lulr l feh y l horF il rhivo de eer swiFr de(ne estrutursD mros y funiones pr mnipulin de fehs y horsF v feh se gurd de uerdo on el lendrio gregorinoF vs funiones timeDlokD Estrdte y Estrtime devuelven l hor tul omo el nmero de segundos trnsurridos desde l medinohe del I de enero de IWUH @hor universlD qwAD el tiempo de g empledo por el proeso invonteD l feh y hor tulD respetivmenteF v estrutur de tiempo utilizd inluye los miemros siguientesX strut tm s int int int int int int int int int GB GB GB GB GB GB GB GB GB tmEseY tmEminY tmEhourY tmEmdyY tmmonY tmjerY tmEwdyY tmjdyY tmEisdtY segundos B G minutos B G hors B G d del mes I QI B G mesD H pr ineD I pr peD F F F B G o desde IWHH B G ds de l semn desde domingo @HETA B G d del o desde el I de ine@HEQTSA B G siempre y pr gmtime B G sY H lok @voidA v funin lok determin el tiempo de proesdorD en uniddes de likD trnsurrido desde el prinipio de l ejeuin del progrmF i no se puede devolver el tiempo de proesdor se devuelve EsF iniio a lok@AY (n a lok@AY H time @horA v funin time otiene l hor tulY devuelve el nmero de segundos trnsurridos desde l medinohe @HyXyyXyyA del I de enero de IWUHF iste vlor de tiempo se lmen entones en l posiin puntd por el rgumento horF i hor es un puntero nuloD el vlor no se lmenF il prototipo de l funin esX timeEt time @timeEt BhorAY il tipo t imeEh est de(nido omo tipo long en t i m e F hF o loltime@horA gonvierte l feh y hor en un estrutur de tipo tm F u prototipo es strut tm Bloltime@onst timeEt 4tptrAY H mktime@tA gonvierte l feh en formto de lendrioF om l informin del rgumento y determin los vlores del d de l semn @tmEwdy A y del d respeto l iniio del oD tmin onoido omo feh julin @tmjdyAFu prototipo es timeEt mktime@strut tm BtptrA v funin devuelve EI en so de produirse un errorF in este ejeriio se pide el oD mes y dY esrie el d de l semn y los ds psdos desde el I de enero del o ledoF is utilizdo un rry de dens de rteresD su estudio se he en ptulos posterioresF 5inlude `stdioFhb 5inlude `timeFhb hr Bdis s a { 9s 9sD 4vunes4D 9s wrt es 9s D 4wiev oIes s9 D 9 4tueves4D 4iernes4D 4gdo4D4homingo4} Y int min @voidA strut tm fehY int nyoD mesD diY G B intrdX oD mes y di B G printf @4eoX 4 A Y snf @4 7d4D8nyoA Y print f @ 4wes X s9 A Y snf @4 7d4 8mesA Y D print f @ 4hiX 9s I Y snf @4 7d4D8diA Y esign feh l estrutur fehD en formto estleido B G GB fehFtmyer a nyo E IWHHY fehFtmEmon a mes E IY fehFtmEmdy a diY fehFtmEhour a y Y fehFtmEmin a y Y fehFtmEse a IY fehFtmEisdst a EIY mktime enuentr el d de l semn y el d del oF hevuelve EI si errorF GB BG if @mktime@8fehA a a EIA i puts @ 4 irror en l fehF4 A exit @EIAY Y I G B il domingoD l funin le onsider di y B G if @fehFtmwdy aa y A fehFtmEwdy a U Y printf@9nhi de l semnX 7dY di del o X 7d4D fehFtmEwdyDfehFvmydyClAY GB isrie el d de l semn B G printf@4nis el di de l semnD 8 s n 4 D disehFtmwdyAY return yYs i queremos ompror l feh y hor del sistemD lo podemos her on ls funiones disponiles en timeFhD que s son prte del estndr exs gD por lo que deern estr disponiles pr si ulquier ompildorX hentro de timeFhD tenemos de(nido un tipo llmdo timet que representr un iert feh @inluyendo horAF v myor de los sistems lo representn internmente omo un entero lrgo @el nmero de segundos desde iert fehAD unque es lgo que nosotros no nos deer her flt ser si usmos diretmente ese tipo timetF enemos tmin un tipo de registro @strutA prede(nidoD llmdo

CAPTULO 18.

LAS LIBRERIAS DEL LENGUAJE C

IQR

strut tmD que gurd l informin desglosd del dD el mesD el oD l horD etF vos priniples mpos que ontiene son stosX int int int int int int int int tmhourY tmmdyY tmminY tmmonY tmseY tmwdyY tmydyY tmyerY GB GB GB GB GB GB GB GB hor @H E PQA BG hi del mes @I E QIA BG winutos @H E SWA BG wes @H E II X H a ineroA BG egundos @H E SWA BG hi de l semn @H E T X H a homingoA BG hi del o @H E QTSA BG eo menos IWHH BG y el modo de usrls se ve en el fuente nteriorX printf@4in onretoD l hor esX 7PdX 7HPdX 7HPdn4D fehEbtmhourD fehEbtmminD fehEbtmseAY di'time lul l difereni entre dos fehsF mktime re un dto de tipo strut tm B prtir de otro inompletoF is til por ejemplo pr ser el d de l semn si onoemos el dD mes y oF

18.1.8. STDLIB.H
g inluyen un serie de funiones de utilidd que se enuentrn en el rhivo de eer hvsfFr y que se listn ontinuinF s@nAD ls@nA int s @int nA long ls@Iong nA devuelven el vlor soluto de nF div@numD denomA divEt div@int numD i n t denomA glul el oiente y el resto de numDdividido por denom y lmen el resultdo en q u o t y remD miemros int de l estrutur divEtF il siguiente ejemplo lul y visuliz el oiente y el resto de l divisin de dos enterosF 5inlude `stdliFhb 5inlude `stdioFhb int min @voidA { divEt resultdoY resultdo a div@lTD RAY print f @ 4goiente 7d4D resultdoFquot A Y printf @4esto d4D resultdoFremA Y return H Y } div @nunD denomA glul el oiente y resto de num dividido por denom y lmen los resultdos de quot y remD miemros long de l estrutur ldivEtF typedef strut { long int quotY long int remY } ldivEtY G B oiente B G G B resto BG resultdo a ldiv@ITHHvD RHvAY

18.2. Por orden alfabetico.


e ontinuin se inluyen en form de tl lguns de ls funiones de lirer ms utilizds en el lenguje gF s@intAD stdliFh X hevuelve el vlor soluto de i os@douleAD mthFhX hevuelve el ro oseno de d sin@douleAD mthFhX hevuelve el ro seno de d tn@douleAD mthFhX hevuelve el ro trgente de d tof@sAD stdliFh X gonvierte l den s en un nmero de dole preisin toi@sAD stdliFh X gonvierte l den s en un nmero entero

CAPTULO 18.

LAS LIBRERIAS DEL LENGUAJE C

IQS

eil@dAD mthFhX edondeo superior de d lok@AD timeFhX hevuelve l hor del reloj del ordendorF r psr segundosD dividir por l onstnte gvyguiig os@douleAD mthFhX hevuelve el oseno de d exit@uAD stdliFh X gerrr todos los rhivos y u'ersD terminndo el progrmF exp@dAD mthFhX ilevr e l poteni d @eaPFUUIVPFFFA expIH@dAD mthFhX elev IH l poteni de d fs@douleAD mthFhX hevuelve el vlor soluto de d flose@fAD stdioFhX gierr el rhivo fF feof@fAD stdioFhX hetermin si se h enontrdo un (n de rhivoF fget@fAD stdioFhX veer un rter del rhivo fF fgets@sDiDfAD stdioFhX veer un den sD on i rteresD del rhivo f )oor@douleAD mthFhX hevuelve un vlor redondedo inferiormente dF fmod@douleDdouleAD mthFhX hevuelve el resto de dIGdP @on el mismo signo de dIA fopen@sIDsPAD stdioFhX ere un rhivo llmdo sID pr un operin del tipo sPF hevuelve el puntero l rhivo iertoF fprintf@fDFFFAD stdioFhX isrie dtos en el rhivo fF fput@DfAD stdioFhX isrie un rter en el rhivo fF free@pAD mlloFhX vier un loque de memori l que punt pF fsnf@fDFFFAD stdioFhX vee dtos del rhivo fF get@fAD stdioFhX ver un rter del rhivo fF gethr@AD stdioFhX vee un rter desde el dispositivo de entrd estndrF log@douleAD mthFhX hevuelve el logritmo nturl de dF logIH@douleAD mthFhX hevuelve el logritmo en se IH de dF logP@douleAD mthFhX hevuelve el logritmo en se P de dF mllo@nAD mlloFhX eserv n ytes de memoriF hevuelve un puntero l prinipio del espio reserE vdoF pow@douleDdouleAD mthFhX hevuelve dI elevdo l poteni dPF printf@FFFAD stdioFhX isrie dtos en el dispositivo de slid estndrF rnd@voidAD stdliFh X hevuelve un vlor letorio positivoF round@xAD mthFhX redondeo l entero ms proximo xF snf@FFFAD stdioFhX intrd por teldoF sin@douleAD mthFhX hevuelve el seno de dF sqrt@douleAD mthFhX hevuelve l rz udrd de dF

CAPTULO 18.

LAS LIBRERIAS DEL LENGUAJE C

IQT

strmp@sIDsPAD stringFhX gompr dos dens lexiogr(menteF stromp@sIDsPAD stringFhX gompr dos dens lexiogr(menteD sin onsiderr mysuls o miE nsulsF strpy@sIDsPAD stringFhX gopi l den sP en l den sI strlen@sIAD stringFhX hevuelve el nmero de rteres en l den sF system@sAD stdliFh X s l orden s l sistem opertivoF tn@douleAD mthFhX hevuelve l tngente de dF time@pAD timeFhX hevuelve l tngente de dF toupper@AD stdliFh X onvierte un letr mysulF

Captulo 19

Diseo de programas.
19.1. Segun el interfaz.
19.1.1. Texto. 19.1.2. Ventanas. 19.1.3. Interrupciones.

19.2. Segun el uso.


19.2.1. Juegos.
simulionX qr(osD sonidoD (si relistD inmersivosD se elevd ion primer personX qr(osD ion ontinu estrtegi en tiempo relX es lt estrtegi por turnosX ejugilidd olX heisionesD personjeD snterionD histori uzzleX oluion prolems

19.2.2. Diseo.
simulion

19.2.3. Comunicacion.

19.3. Estructura basica.


wotoresX qr(oD onidoD seD intrdD lid gomponentesX snterfzD erhivosX gon(gurionD idiomD esponsiliddesX hiseo gr(oD odi(ionD oordinionD mrketingD gestion de internet ilo de produtoX etuliziones

IQU

Diccionario.
Letra A
elgoritmoF ethlonF

Letra B
fus fyteF

Letra C
ghEywF gompilxaidn gompildorF gomputdorF g ghe

Letra D
hisqueteF hhF hiso duro

Letra E
iioF

Letra H
rrdwre rertzio

Letra I
snlF sntrpreteF snternet IQV

CAPTULO 19.

DISEO DE PROGRAMAS.

IQW

Letra L
venguje de progrminF venguje ensmldorF venguje mquinF

Letra M
wemoriF wemori uxilirF wemori entrlF wiroproesdorF wrF wdemD wonitorF

Letra O
yrdendorF

Letra P
entiumF ortiliddF roesdor uertosF

Letra S
softwreF

Letra U
nidd gentrl de roesoF

Letra V
ideo

Bibliograa.
eprend g omo si estuvier en primeroF isuel superior de ingenieros industrilesF niversidd de xvrrF tvier tlon qri de l puente y otrosF sntroduon l progrmon on gF heprtmento de vengujes y istems snformtios niversitt tume sF endrs wrzl e ssel qri gy hi vixqeti 4g4F engel ls gentro de glulo niversidd de rgoz inero E IWWI sfx VREUUQQEPQPEH gurso de gD xho gnes

IRH

Potrebbero piacerti anche