Vous êtes sur la page 1sur 577
Algoritmos a fondo CON IMPLEMENTACIONES EN C y JAVA INCLUYE DIAGRAMAS DE FLUJO y UML ING. PABLO AUGUSTO SZNAJDLEDER ay Alfaomega Algoritmos a fondo Con implementaciones en C y Java Ing. Pablo Augusto Sznajdieder Ad Alfaomega ‘Szngjdleder, Pablo ‘Algaritmas a‘fondo : con implemantaciones an y Java .- 1a ed. - ‘Buanos Aires : Alfaomega Grupo Exttor Argertino, 2012 ‘576 p. ; 28x21 cm. SBN 978-987-1600-27-6 1. Informatica. Tula COD 005.3 (Geos pronniaa a Fepreduccion toate parcial Ge esta. obra, su tatamienta Inormanco Wo ks trnamision Por CustaLer etra tarma‘e medio 2h autorzacion eccria de Attaomaga Grupo Editor Arenting A. Rovisién de estilo: Vanaca Garcia y Juan Mican Diagramacién: Diego Ay Revisién de armado: Vanesa Garcia iterates hanrucattsema gs. 20m mit ‘Todos las derechos rezervados © 2012, nor Allaomega Cuno Edltor Argentine 5, Paraguay 1307, PBL oficina 11 ISBN 878-987-1008-27-5 (Gueca nacho capt que breve ta tey 11.723 NOTA IMPORTANTE: La informacion contensda en esta obra tiene un fin exclishamente didactica y, por io tant, no esta presto aprovecnamiento a ive! protecona! ©industras. Lar Iclcaciones fecricas y Programas ncluaos han isa eaborados con gFan euado por el autor yreproducidos bajo estictas norms de cartra. Allaareoa Grupo Eaior Aspentina 5A. no sera lundicarserte responsable [Bor ereres u omisiones; vies y perlcios que oe pudieranabrbutr al uso de la infermacién comgeendica en eate libra, nl por i wkzwclen Inoeneds que puciera daraee. Les nombres comerciales que aparecen en sale Horo zon marces repstradas de aus propictarios y se mencionan unicamente con fines fidacticos, por que situomega Grupo Edinr Amgenno S.A. no aeume hingurs respareaDoded bor el Uso Gue se 06. HFCCTACION. Ja.que no imnmge ningun derecho e gest Ge marca. Los dates de las lemons y pantatas son fcheion. a no‘ser que ae e=pectiaue lo Contrast. [Los mpervincuios aos que se hace referencia no pecesarlarnente son administracos por a ectaral por io que;ne'somos responsabies ie ‘sux canlenidoso de su eisponibildad en Enea. ‘Empresas del pune: ‘Argentine: Asomega Grupe Eltor Aepentino; 5A. Parguay 1307 PB. “17°, Suenas Ares, gentina, CP 1057 Tel: 4-17) 407-7189 / 0887 - Emi: vertaa@atacmegaecitoccom ar ‘Mesies: Atacmega Grupo Edt, BA. de CV. ‘Pragoras 1139, Col De! Vale, lice, O-F, Manica, ©. 03100 ‘el: (92-25) 2975-2002 -Faxc (92-20) 9970-2420/ 2490, Bn costo: O7-800-420-4380 [E-mat:stancionaicienteGattaamaga comm ‘Cotomaia: uraomega Colemisana 5. (Carers 19 No. 04.878, Bogota, Commons (Pax ca7-1) 2100122 - Fax (37-1) coue04e. + E-mat ctenteOataonegacom.ce Gre: ataomega Grupo Eater 5.8. ‘Doctor La Siewa 1437 -Provencia. Santiago. C2ile Te: oP) 289-4268 - Fax: (00-2) 235-0780 - Emel: agecteeatiaomeds Ci ‘Superman. por Octaviano Sanaidleder A los amores de mi vida: mi esposa Analia y mi hijo Octaviano. Ellos son el motor que impulsa todo lo que hago. Ala memoria de Naum, quien paso a vivir en nuestros corazones. Siempre me preguntaba: —{Como va ese libro, Pablo? Agradecimiantos Ami mama Nélida, que no solo pone su casa a mi disposicion sino que, adlemas, siempre me prepara él té. A mi editor y amigo Damian Fernandez, que no para de ofrecerme inmejorables oportunidades. ‘A Graciela Sosisky y Domingo Mandrafina quienes, hace ya varios afios, me dieron la oportunidad de incorporarme a la catedra de Algoritmos. A Adriana Adamoli por su colaboracion y por el aporte de muchos de los ejercicios que se encuentran en la Web. A Juan Grande quien, GTalk mediante, siempre estuvo presente Para darme una mano. ‘A Marcelo Grillo, Gustavo Baez y a todos los promotores de Alfaomega por la amabilidad, la cordialidad y la excelente estadia que me han hecho pasar durante mi viaje a Mexico. ‘Allos maestros Alberto Templos Carbajal, Sergio Fuenlabrada y Edna ‘Miranda por sus valiosisimos aportes. indo - Ing. Pablo A. Sznajdleder Mensaje del Editor Los conocimiantos son esanciales en wl desempafo protesional, Sin ellos es imposible Jograr las habilidades para competirlaboralmente. La universidad o las instituciones de ‘seem rn Sas ttc a! Scheer am Sr mas adelante en beneficio propio y de la sociedad. El avanceede la ciencia ‘dela tecnica haca nacsser ectusizarcontinuamente esos conacimventos. Cusnda ‘58 toms la decision de embarcarse en una vida profesional, se adquiere un compromiso dde por vida: manteneree al dia en los conocimientos del area u aficio que se ha decicido desempefar. ‘Atiaornaga tena por rrision otroceries a estudiantes y protesionales conacimiantos.ac- ‘uaizados dentro de lineamientos pedagogicos que facilten su utlizacion y permitan de- sarollar las competencias requerdas por Una profesién determénada. Alfaomaga espera Sr su compariera profesional en este viaje de por vida por el mundo del canocimiento. ‘Atlaomega hace uso de los medios imprasos tradicionales en combinacién con las tec- nologias de la informacién y las comunicaciones (TT) para faciiiar el aprendizaje. Libros ‘como esta tienen su complemento en una pagina Web, en donde al alumno y su profesor ‘encontrarn materiales adicionales, informacion actusizada, pruebas (test) de autoeva- luacién. clapositivas y vinculos.con obras sitios Web ralacionados. Esta obra contiene numeroses grafices, cuadras y otros recursos para despertar el inte- res del estudiante, y facatarie la comprensién y apropiacion del conacimiento. ‘Cada capitulo se desarolla con argumentos presentados en forma sencilla y esiructu- ada claramenta hacia los objatvos y metas propuestas. Cada capitulo concluye con divereas actividades pedagégicas para asequrar la asimilacién dal conocimiento y su extension y actualizacion futures. Los libros de Alfaomega estén disefiados para ser utlizados dentro de los procesos de feneeflanza-aprandizaje, y pueden sar usades coma textos guia en diversas cursos 0 ‘como apoyo para malorzar el desarrollo profesional. ‘Mfaomega espera conbrbuir asia la formacién y el desarrollo de profesionales exitosos pes: dab aseriad Aigoritmos a fonda - Ing. Pablo A. Sznajdleck vi Alfuomega vil Pablo Augusto Sznajdieder Es Ingeniero en Sisterias de Informacién, egresado de la Universidad Tecnolégica Na- ional (UTIN-FRBA} en 1999. ‘Actualmente, 2s profesor an ia eatecka de “Algantmos y Estructura de Datos” en a UTN- [FRA pasando también por la Universidad Nacional de Sen Martin (UNSAM) y el Institu- to de Tecnologia ORT Argentina. “Trabajé como instructor Java para Sun Mycrosystems, Oracle eInformixIBM entre otras empresas lideres. [Desde 1905 trabajaen sistemas, pincipalmente, en el desarcilo de aplicaciones empre- ssaiales distribuidas: primero en G/Ge+ y luego, en Java/JEE. En 1096 comenad a trabajar con Instnictor Jave para Sun Microsystems y, desde e200, ‘50 deser>pefia como consuitor en la biisqueda y seleccién de RRHH capacitados en dicha tecnologi. ponienda especial atencin en a identiicacion de jovenes estudiantes. sin experiencia laboral previa, pere-con gran potencial profesional. ‘Tene las vertiicaciones internacionales Sun Certified Java Programmer (SCJP. 1997) y ‘Sun Cartiied Java Developer (SCID. 1908} y, ademas, esta certiicado camo Insinuctor (Oficial Java por Sin Microsystems (1997). En el 2006 publicé Halaundo pascal, Algortmas y estructura de datos cuya contenido ccubre por completo los temas que abarca la asignatura de igual nombre en UTN-FRBA. Enel 2009 patticipd como revisor técrico en al libro Andisisy dseria de slgovitmos (Lo- paz, Jeder, Vega). En of 2010 publicé sulibro sobre desarrolla de aplicaciones. Java: Java 2 fondo, Estucho del lenguaye y desarrollo de aplicaciones. ey essvcsz.com Revisor técnico: Alberto Tempios Carbajal Es Inganiero en computacidn de la Facultad de Ingenieria de la UNAM y ejarce. desde 1983. ‘coma Profesor de dicha facultad en las Divisones de Ingenieria Eléctrca en dstinias asig- natura de la carera de Ingenieria en Gomputaciin y Educacién Continua. Desde 1988, es Protzsor a tiempo completo y ha ocupado los siguientes cargos: Coordinscor das carre- +25 de Ingeniero en Computaciin y, de manera temporal, de Ingeniero Eiéctrico Electronica ¢ Ingeniero en Talecomurscaciones, Jats ds! Departamento de Inganiera en Computacitn. ‘Seoretano Académico de las Divisiones de Ingenieria Eléctica y Estudios de Postgrada y (Cooregnacior de Postgrado an la Secretaria de Postorado + Investigacion de ls Facultad de ‘ngeniera. También ha sito cofundador de dos empresas de computacsin y ssescr en esa imam érea de diversas comparigs. ‘Actualments, es miembro de diferentes comitis, evaluadar de planes de estudio del area dda computacién para diferentes arganismos nacionales y es responsable de un proyecto: de ‘nvestigacitn e innevacion teenotagica sabre el Diseio de algont os para bots. Su produc fividad, principalmerta, estd orianiada a la docencia Alfuomega Algoritmos a fonda - Ing. Pablo A. Sznajdkedar Contenido - a 8 ems et roti 1.222 Dies deers a Mervaria y operaciones atméticas y Oe A pe New i ‘Los tos de aator prowetos Der e enum C — 1731 Meapan manga et La furcen de bteca scart - Blopermnor oe arecoON BB ‘Algoritmos 2 fondo - Ing. Pablo A. Sznajdieder ory ve uw 1371 kaarectua oe peprocesaoor ane = 1992 Simectader const Operadores artméticos sa TB Converion de thos de datza type cain —. 152 Sopemdar % Cries 0 “restat) 183 Operadores lactones. Expresiones logics oe 181 Operndores Babee ac Operadores de bits T-1O.1 Reprecentacion tinaris dels tooe enero 12 raga Representacien hesaciecrl Repaesertacon henadecrnal de rurmers eras agate. ; are epresensscien ects) Seen ‘Operates oboe de bes. — Resumen eu Ser Contention cet pagina Web BR ABO. 1321 pe concent ities 1972.1 etwacion yup or Ectoee para Estructuras bisicas de control y logics algontmica co \Gperadores de decplazamienio tts >> y= besser eee -Gonienida 27 aa a4 a7 42 Contenido de ts pagina Web de acoye.. 27.1 Mapa concept... 272 Adeevaumceres 273 Videohtore 272.1 Uw deleetnae para dona aoa 63 274 Preseniacines! 2 Fc hcl ekg ops: n Conceptos miciaies - ae 321 Metoasege top down 322 Moguos 0 suberooamas a 320 Furciones.. Tae aoe Funciones definitas pore! prograrnadior 32:1 Pretetpe-de una uncon 332 rrecwrauna hnctn.. 323 Oesanets os una Anco eae 74 v4 73 234° Comereion as nomenciaira perenne TE B33 Furciones ave no ttorran ningun var (poceamae vad a) 98 Ativan a eabecera 1A) Legbilidad y reusablidad del coaigo.— BA) Abatracclin are 73 342° Argurentos yporérehos ico cance eins varies (2eopa) 02 3520 Vernties gonales eee Begumertios BOF Valor eterna 302 Sloperpaorde reireccion * aensca) 2 363 Aegumenies por referencia a0 305 veruties estmicas (mociicanorsisic) aa 42.22 Delermbarsl un carkcter ex urea 421 Stpeceasioscnr. 0 422° Furciones para vammento oe craters. 101 £22) Gemma ain cnc im ge ramen ancen exit. 101 Alfuomega AAlgoritmos a fonda - Ing. Pablo A. Sznajdledar 73 ‘Algoritmos 2 fondo - Ing. Pablo A. Sznajdieder ane ‘on epee Tipas de datos estructurados.. Acceso directo sobre amays ‘Acceze Increcto sobre serays. (Qperaciones sobre aways Caracas tongs Ge un ray 144 1 12 are rays necting ‘Eemuctums eon esmmpe ce oo a3 G2 2 SRSEBE ER BE BSBESRS 210 210 accesourecto mregetos 213 215 218 uy Rees ay ay 3.2 Leer yesertirun archive de esis — Presentaciones BRURERRE BERD aaa Tipo Abstracto de Dato (TAD) nT "9.1 Iroducctn “9.2 Capos ge abstraccion ‘9.3 Thos de datos ‘9.4 Resumen © (9.5 Contenido ae Inpagins Web. cs apoyo, Ey 20 5 10, Analisis de ejercicios integrador@s a 70.) imoeuccien ie 1022 Use decarays eundives - 10.2.3 Manterer aren (pmquerics) entmemoda..— Alfuomega nm P PESESRE RR RES PeeeR aE treenar un var respetance al omderermentc, 1.8 esouctura Pua (LIFO) 101 tmpementacon as westructue BS 11.02 Gperacenes poner (puan) y sacar op) 11.82 Deterrrar ss pte tone stnarton 9 no 117 esouctura Goi IFO) a 1-72 Wnpleneniar ua co sobee una esta cuba — VATS Opamcenas ence y desenene 1118 Neds que contienen miltisles datos. 11.81 Nedo con mufcies campox. iis 1182 Nedaoonun unea var os tee stmct SEH RRO RRRHR EMER EE BG TLIO Ly subi TDD Areys.de coins 11103 ma ae pas - Contenido de la pagina Web de scoye.. THT Mapa-concepiil a 122 Aidooeskaciores at AAlgoritmos a fonda - Ing. Pablo A. Sznajdledar Moduéo 2 Programaci6n orientada a objetos 12, Encapsulamiento a través de clases y abjetos...._... 232 au 121 Inteduzcten.. 122 Gases y onjetos ERERREE SRERE EEE 128 Lictses codons de coractoes, TERI Cmmetere SREB enn EIT Argumenioe entnea de comand en 14.1) Anceso ales caracteres de un sng 1342) Meyoscues yminuseues W248 ay Oe ae 14, ast es * e ae 1252 Templates y generaizacknes ..... ad om: lenguale ron = : = = = a0 xr a0 an a - “ a = a “ a = eee = Se eect 22 ee = eo ee z cee = 2S eo Eo ee ee, Er = a = Es = a o sa = = = 2 5 PERS EREER EEE B ‘Algoritmos 2 fondo - Ing. Pablo A. Sznajdieder F i KIN- Contenido ee 422 Modula 3 Metodos eo cle, —w—- Apligaeién practic ee = S16. Compresin de archivos mediante el algoritmo Caos cenercae. a ‘208 de ‘Desaceplaerto Ge clases ana: ‘Sipaen de ciuero dea factor oe beton 13 La blerare Corearatie. a6 DDeeacaplar aun Meso. La hleriace Comparator — 14.3 Colecciones de obpet0=, a 14.5.1 Commie as implerertizcion o 142 Slmatzdo Cotections sot 14.0 Excepciones ei a 14.0.1 Erores agens va eneses Racos o 146.2 Becepciones declathves ye declares 1485 Stlome trcetchfrlly = 146.4 Elmetod pentstacimace. “4.8 Conterigo det pana Web ee BBOY enn noom 148.1 Mapa concepts = 14831 Sa = Vad Presentaccnest 18. Esiructuras de datos dindmicas Eneales en Java 15.2 Listas (motementaciones de List YE2.1 La clace Artic 3823 Cemparacon entre Arrays! y Lnkernt 122.9 roaicoon ef natas de completes sommes, 13281 Aaceroskaloraa or slevents dela 13212 Elmar un elowenin de eioccién, 15.23 nator emer ena colecidn 132.0 Flas yooas. 193 Mapas pmplementacianes ce Map) 103.1 Tapes ce cepersion (rasreae) 18.1 mpsauccion = m 1392 tenrinatenniibe i iit Teesoeaba a YSS.3 tone una hashish mepetarde ot orien an ue 1812 Imelemeriacion eb estrucra ge aioe 117.3 Contenida de la pauina Web de nove... 17.81 Mapa concept. 17.82 Adloerauaciones.— 1792) Prasertacenan 18, Arboles, BEERS EGERGEE 6 GRGGBOR GARDRGRD GS E & Spryen ee “82° yee drbotbinano. 3 1 Estructures de datos combinadas...._ oe Yee) Niveios coun abel rar” AS Seats eis et aS 1822 Recomer los nots sun are arent 3 Resumen... - 28 1922 Racers en ampttuse “por nhses” 10 Contersao des pagma Wet ee spoy 430 1.24 FRecomaoe anprotundians (preorder, paste 35.01 Mapa conceptut 38 emeoe ey 3202 Auoetusciones - 238 18.2.5. Imclewentacin Bera del recor en preorder 42 1503 Promntancres" 40 19.20. Impiementncion ner de recorion en postorden 3 Aifuome; AAlgoritmos a fonda - Ing. Pablo A. Sznajdledar 143 Aba! binario en Java, ableton 1831 Enfoque tassdo-enuna cee waa 1832 Recomeo por roveles “an arenas : 1823 Reconos precrden, postorden eincren. ha TES? Enfogue tesada en atieios 14 Apo! Barto ce Suscueca : 184.1) Creer un Atbot finan os Busca EE — 1642 Ereapuinmerto de a lagcay esuctira ct (nem DOK 1843 Apeperin element al ARE mated agregeh— recon rrr NEA2 Busqueda de un serena sobre un ABE metodo nuscan. 7 185.6 impemertecien ie un “Autosuggest 2 a Sena 1,7 Gonteniao ae is pagina Wes ae apoyo. = 1871 Maca concent 2 1873 Preeniociones : 18, Compigjidad algortmica a 182 Concestos miciaies ace a ae EReBERE 1B. Aniisis del laotino de a busqueda secuencit. 022 1199 nastacton © grande (eota superior asimetia) —-929 183.1 Aran axtmagommo ce im busqueaa rare. OE a8 a8 ‘Aigoritmos a fonda - Ing. Pablo A. Sznajdledar Cantenida - x mz ua mo me 20.71 Conteris ae la pagina Wer de ap=ya. ie Sort lage conenou! ae L111 Algor heansort.ondenamieni pnennee ue a 2.2 ote y concur, 21.3 Greaoy, agertenas vormee "214 Procramacion anamica 2.5 Resumen 21.6 Cortenie do ta pa Web de apes 22. Aigoritnos sobre grafos 88 22.2 Oetincwon ae orate 22.3 xpmotiema det carencs minima 20.4 Arbol de cubrimient manemo (MST) 22.5 Resumen & "22. Corteniaa Geta pagina Websde apoyo Hille c eione sacopnrsemesnareeng ec fe Alfvomegse tani [Saterairercage con amerece -} 200 ects inpencla para certs Capitulo t Introduccién a los algoritmos y ‘computadoras Mana conceptual + Autoevaiuacin + Videotutoriat instalacin y uso de Eclipse para C + Frosentacionast Capitulo 2 Estructuras bésicas de control y logica algoritmica © Mapa conceptual * Autoevaluacin Videotutorial: - Uso del debugger para depurar un programa ‘= Presentaciones Capitulo 3 Funciones, modularizacién y metodologia top-down + Mapa conceptual * Autoevaluacion * Videotutorial: - Mantener archivos de funciones separados del progra- ma principal + Presentaciones" Capitulo 4 Tipos de datos afanuméricos © Maps conceptual © Autoevaluacién + Presentaciones* Capitulo 5 Punteros a caracter © Mapa conceptual * Autoevaluacion = Presentacionas* Capitulo 6 Punteros, arrays y aritmética de direcciones © Mapa conceptual * Autoevaluacién Videotutorial: - Pasar argumantos en linea de comandos con Eclipse la programacion de Alfaomega ‘© Presentaciones" Capitulo? Tipos de datos estructurados «© Mapa conceptual * Autoevaluacion « Videotutoriaies: = Algoritma de la burbuja ~ Algoritmo de la busqueda binaria « Presentaciones* Capitulo 8 Operaciones sobre archives © Mapa conceptual * Autoevaluacion « Videotutoriaios: - Leer y escribir un archive ~ Leer y esenbir un archive de registros + Presentaciones" Capitulo 8 Tipo Abstracto de Dato (TAD) © Mapa conceptual * Autoevaluacion ‘ Presentaciones Capital 10 Analisis de ejercicios integradores + Mapa conceptual ‘© Autoovaluacién ** Presentaciones! Capito 11 Estructuras de datos dinamicas lineabes «© Mapa conceptual © Autosvaluacion * Presentaciones’ Capitulo 12 Encapsulamiento a través de clases y abjetos + Mapa conceptual © Autosvaluacién ++ Presentaciones’ ‘Capitulo 13 Intraduceién al lenguaje de programacién Java ‘© Mapa conceptual + Autoevaluacion © Videotutorial: - Instalary utilizar Eclipse para Java ‘© Pracentacionest ‘Capitulo 14 Programacién orientada a objetos © Mapa conceptual © Autoevaluacion = Videctutovial: - Uso dl javadoc ‘* Presentaciones* ‘Capitulo 15 Estructuras de datos dindmicas lineales en Java © Mapa conceptual + Autoevaluacsn ‘© Precentaciones" ‘Capitulo 16 Compresién de archives mediante el algoritma de Hutiman ‘© Mapa conceptual © Autoevaluscion Videotutorial: + Algoritma ie Huffman ‘© Prasentacionest Capitulo 17 Recursivided ‘+ Mapa conceptual ‘© Autoevaluacion ‘© Prasentacionest Capitulo 18 Arboles. ‘© Mapa conceptual "© Autoovaluseion © Presentaciones* Contenido - XVI (Capitulo 19 Complejidad algoritmica ‘Mapa concentual Autoevaluacion Videotutorial: ~ Algoritmo heapsort, ordenamienta por monticulos Presentaciones Capitulo 20, \Aigoritmos de ordenamiento Mapa conceptual ‘Autogvaluacion Presantaciones Capitulo 21 Estrategia algortmica ‘Mapa conceptual ‘Autoevaluacion Videotutorial = Problema de Jos billates por programacién dinémica Presentaciones" Capitulo 22 Algoritmos sobre grafos Mapa conceptual ‘Autoevaluacion Videatutoriales: - Algoriima de Dikstra por reddy = Algoritmo de Dikstra por dindmica = Algoritmo de Prim Algoritmo de Kruskal Presentaciones" (Cédigo fuente de-cada capitulo Hipervinculos de intorés. Fa de erratas. Guia para el docente de las competencias especiticas ‘que se desarrollan con este libro" Alfuomega Para tener acceso al materia da la pagina Web de apoyo del libra: 1. trata pagina htpy/virtualalfsomega com.mx 2. Registrarse coma usuario del stio y propietario del Ebro. 3 Ingresar al apartad ds inscrincion de lores y registrar la siguiente clave de acceso 4. Para navega ens plataforms viral derecursos dellibro, usarlos nombres de Usuario Contrasefa definides en elpunto nimem dos. E] acceso a estas recursos as imvtado. ‘Si quiere un numero extra de accesos, escriba a wetrmaster@atfaomega.com mx Estimaclo profesor: Si desea acceder a los cantenides exclusives para docentes, por {favor contacte al representante de la editorial que lo susle visita @ escribanos a: \webmaster@alizomega.com.mx Conceptos para recordar: bo este icanc se encuentran (fetriciones importantes que retuarran lo saplicado en ls pagina. Comentarios 0 informacién extra: este icono ayuda 8 comprender mejor o ampéar el taxin principal Corteidos mteractvos: ncaa a presanca ce cotaridoe entra Alfaomega Algoritmos a fonda - Ing. Pablo A. Sznajdkedar Xa (Cuando llag6 a nuastras manos libra de Algoritmos a fondo ‘escrito por a! Ing. Pablo Augusto Sznajdleder, esperébamos tun documento con explicacsones complejas como la mayo- ria de las obras que abordan el tema pero, por el contra- rio, conforme Ieiames el manuscrite nos encontrames can un texto ameno que leva al lector en un proceso paulatino, teérice-metodologice y persistente en la construccion del conacimiento. Una construccion del conocimienta aeampasada, ya que para e! autor un tema es verdadero si, y sola si, leva un pro- ‘e250 de reftexion, que permite evidenciar que el conacimian- to ee indudable, provocando en el lector poces sobresaltos vy dudas, i autor conduce con orden sus razonamientos, empezan- do por fos conceptos mas simples y ficiles de comprender ppara ascender paco a poco, de forma gradual, hasta llegar ‘al conacimienta de lo. més compleja, # inclusa suponienda ln orden entre jos que no se preceden naturalments. provo- cando en los estudiantes el rigor teérico-metadalégico que 2 eepers an los eepecisistae Geiss reas cf iormnates ¥ computecién, El texto as persistente ya que el autor cuida el hacer recuen- tos integrales dal conocimiento y revisiones amplas de lo ‘aprendido, que le parmiten al lector estar seguro de que no se ‘omAig alghn aspecto del toma tratado, fo cual evita aburir al Jector con repsticiones innacesarias. ‘Ademas, resaitael uso de los diagramss Chapin, que'son una version modificada de los disgramas Nessi-Shneiderman, ‘que como tecnica de representacion del comportamisnto es- Derado de un sigoritms, permite. los estudiantes establecer lun modelo estructural libre de “princes” 0 “beurcaciones” ‘que aumentan, de forma artificial, la complejidad original del slgontmo, Algoritmo’ a fondo Facilita ol proceso: de aprendizaja y migracién do un lenguaja ‘de programacién 2 ctros, ya que preserta les ejemplos y algo riimos en dos lenguajas de programacién Cy Java, peritien- do al estudiante una transicién paulatina de la programacién estructurada a la orientacién a objetos, apoyandase en este proceso con al uso de los diagramas de UML. ‘Sendo un tema primordial para la resolucién da sigontmos el uso de estructuras de datos, el autor dedica varios capitulos Bla Giscusien de estas, iniciando con las estructuras de datos mas simples, pasando por operaciones sobre archivos y ter- mminando con una ampla explicacion del uso de las astructuras ‘de datos dinamices lingales en Java. El autor, adicionalmente, afrece videos coma complamenta a laexposicién de temas complejos, con el objetivo de disminui la dificullad en su comprensién, las cuales pueden ser vistos ‘en Internet. Este recurso perme el desarrallo del aprendizaje ‘eutocidacta del estudiante a su propio ritmo y, para el dacente. puede ser un recurso didaetico que facaits su labor Por su organizacién y contenido, este libro puad ser utitzado ‘com libro de texto siendo una guia en el proceso de ensefian- 12e-aprencizge o también, como libra de consulta para una @ ‘varias asignaturas ya que los contenidos pueden ser aborda- ‘dos de manera independiente, El libro pusde emplearse en asignaturas tales como Funda- mentos de Programacion, Estructures de Datos ycsroesta.en | signatura de Algoritmas Compartacionales, esto dependera ‘de [06 contanidos del programs de estudio correspondiente. Finalmente, a nuestro parecer, el libro despertaré la curiosidad ‘de los estudiantes y los animari a continuar por el carina de laconstruceion de sistemas de computo, por lo cual es posible ‘que este libro sea su primar paso para ingresar al fascinante mundo de las Ciencias Computacionaies. ‘Gd. de ico, maya da 2012 Alfuomega ‘Algorttmos a fondo 85 un libro cl nivel universitario pansado para cubrir Iss necesidades de los alumnos que cursan las materias de Algortmos I Ily lil, teniendo en cuenta el sprencizajs basado en competencias, Ls obra comienza desde “cera” explicando los conceptos de “aigontmo”. “estructuras ‘de conta’, “variables”, “fenguajes de programacion’, etcetera: y Hega hasta el andlists © implementacién de aigortmes complejas come ser los diferentes sigomtmas de ordena- mento (quicksort, heapsort, etc), revorridos sobre arbolas. grafos y recursion. ‘Se estucian estructuras de datos estaticas y dinamicas, inesies y no lineaies. Comen- :zando con programacién estructurada « implementaciones en lenguaje C, hasta legar 2 la programacsén oriantada 2 abjefos con implementaciones en languaje Java, previo paso por C++ El fibro se desarrolla como un “curso de pragramacién” donde se guia al alumna en. un proceso de aprencizaje durante el cual podra adquiri la lbgica necesaria para disefiar © implementar algoritmos. ‘Cada capitula introduce un mayor rivel de dificuttad, ya sea incorporando nuevos con- ‘eeptos y recureas, 0 bien profundizando en técricas de programacion mas complejas. EE. putor remavca la idea de “curso de programacion” ya que esta es totalmente opuesta ‘lconcepto de“libro tradicenal” que, generalmente, presenta una-estructura mucho mas Tigida, po “iecionario” o “enciciopedia". ‘Cualquier alumni universitario deberia pacer leer el libro y aprender a programar por si solo sin experimentar ringin tipo de difcultad ya que eate es uno de los peincipales ‘objetivos dal libro. [Ls obra se complementa con una sens tutonales grabadios en video en los que el sutor ‘expla temas que dada su naturaleza resultarian extremadamente tediosos de leer. Algoritmos a fondo se cartpane de cuatro médulos que agrupan os diferentes capatulos, ‘sagun el siguiente entero: E! Médulo 1 “Programacsén estructurada", comierza desde “cero” y llega hasta al ac- tudio de “estructuras dinémicas lineales", pasando por “adminitracion de archivos”, anays, TADS, sicéiera, La implamentacin de los algoritmos y conceptos que aqui se estudian se basa en los diagremas de Chapin; la estructura de estos diagramas es mucho mas rigida que la del diagrama de fujo tradicional y ayuda al alumna a pensar en algoritmes compuestos por bloques de “Uieca entrada” y “Unica selida”. Este razonamiento constituye una de las Dremisas fundamentsles de is progremacion estructureds. ‘Todas las algortmos y programas que Se exponen en el iro cuentan con su comespon- dente cediicacion en lenguaje-C, documented y explicads. Dentro del macula 1, se incluyen capitulas que explican el lenguaje programacian Cque, ‘como sabemos, as suficientementa complejo por si mismo. Principalmente, el manejo ‘cadenas de caracteres y las conceptos de “dreccion de” y “contenido de” para poder pasarle argumentos por referencia a las funciones. Dems esté decir que el concepto de modularizacion es fundamental. Tanto es asi que se estudia a parts del Capaulo 3 y se aplica de abi en adelante. En el Modulo 2 “Programacién onentada a objetos”, se explican los conceptos da pro- ‘grzmacién oriantada a abjetos. comeneanda por laidea de “encapsulamiento”. Es deci: disefar clases cuyos metocos encapsulen algortmos complejos de forma tal un progra- ‘macior con menos conocimientos © menos expenancia los pueda utlizer Sin tener que reccuparse por comprender su implementacian. Aigoritmos fondo - Ing, Pablo A. Sznajdledk Alfuomega xxi ‘Durante este médulo se reaka la transiin etre ls lnguaes Cy Java: para emortiguar ste prozeco ee esticia tambien alge de codigo G++. En C++ 52 explican los conceptos de “clase y objeto”, encapsulamiente y generalizacio- ‘nas mediante el uso de templates. Los temas fusrtes de la programacién orientada a objstos como ser polimorfismo, interfaces, factories, coleceiones y clasas gonéricas oa batan drectaments en Java. Ei Madu 3 “Apicacion précticaes,en s mismo, un eercointegrador cuyo desarolo requerira apScar gran parta de los conccimientos adqurddos durarta los dos méduios fanterorss Esiaros hblando de un programa compresaridescomprecor de archivos bbasado en al “algarimo de Huffman”. Aq ve obtendra sufcente evidencia de las come petencias adquindas hasta al momento. Esta aplicacion constituys un excalents ejercicio que inducind al alumna a aplicar los principales conceptos estudiados deede el comienzo del libre: arrays, archives y listas. | algoritmo utiliza un arbal binano para generar los codigos Hufiman que reemplazaran alos byt da ia Fuanta de information original. El heche de quo ol tema “arbol bina" ‘aun ne aya sido estuciado representa ura excelente oportunidad para anlar las con- ‘captor de abstracciiny encapsuiamionto orpuestos en los eaptuos dal Media 2 cobra programacion onentada a objtos. El Méduio 3 s6 complamanta con un setup que incluye clases utitarias con las que at slum padrérecorter un arbol brari, leery escrib “bit por bs en un archivo, etcetera. En l Madulo 4 “Conceptos avancados". se estucian algortimos y estructuras de datos se revsten mayor nivel de complepdod. ‘Comenzando por é/ tema de recursion, s@ comparan las impementaciones recursivas @ itaratvas de diferentes funciones, Por ejemplo, el easo tipico de la funcion factorial y el aso extrema da la funcion de Fibonacci cuya version recursiva es incapaz de recive, ‘nun bempo razonable, Ios trmnas de i see superioes a0. Se anaizan estrucuras de datos no lineses:arboles y grafos: siempre apicndoas ala solucién ds casos cotcianas para captarelinterés dal lactoc Por sjempio, una estructura Ge datos y un algorimo que parmitan implamentar un aufosuggest como al qua usica ‘Google en su buscador ‘Durante los diferentes capitulos de este médulo, se explican alporitmos complejos Cama sarlos diterentes métodos de ordenamiant, implementaciones akrnativas ma Sante “programacion cindmica” los algoetmos tracicionales Gus operan sobre grafos: Dysira, Pom y Kruskal i docente debe saber que. en cada captuio, se mencionan las competencias espe citcas a desarolary que of ia pagina Web del libro cispone de una guia datalada de Jas corpetancas que $e desarbtan a 0 largo de! ira y las evidencsas que sa pueden recolcta Alfuomega Algoritmos a fonda - Ing. Pablo A. 8 aided Médulo 1 / Programacién estructurada Tete Mel ell uel} PEE eee meet ley Estudiar el teorema de ia programacion estructurada y las estructurss de con- ‘trol que este teorema descri Gonocer las heramiantas impresin- dibles de programacién: languaje de programacién, compilador, entamo de asarrolle (IDE), etcetera. Dasara, comity ecutar nuestro primer programa de computaci Cadificar algoritmos en el lenguaje de programacién C. (Compilar y sjecutar programas. Alfuomega ‘Linireduceién a los algoriimos ya la programacién de computadoras 1.1 Introduccion Este capftulo introduce al lector en ios concepts inicsies sob algortmos y programs- cin. Aquelios lectores que nunea han programado encontraran aqui los conccimientos basicos pera hacerlo. Los contenidos son netaments introductorios ya que pratencen brindarle al lector Iss ppautas, las expresiones y la jerga que necesitara conocer pare poder leary comprender los capitlos sucesives. or lo antag, la profundidad con la que se tratan los temas aqui expuestos os de un ni vel nicial, ya que cada uno de estos temas seré anaizad en delle egado el momento, fn los eaptulos que asi lo requieran. ci joritmo septo de 1.2.1 Definicion de algoritmo y problema LUamamos “algoriimo” al conjunto finto y ardenadio de acciones con las que poderos resolver un delerminads problema. [Uamamos “problema” a una situacién qua se nos presenta y que, mediante la aplicacién deun algontimg, pretendemos resolver. Los algoritmos estén presentes en nuestra vida cotidiana y, ain sin saberio, plicamos algoritmos cada ver que se nos presenta un problema sin importar cual sea su grado de compiejidad. Para ejerplificar esto imaginemos que estamos dando un paseo por la ciudad y que, al Hogar a una esquina, tenemos que cruzer la calle. Intutivamente, aplicaremos el siguicnte algoritmo: Esperar a que la luz del sematora peatonal este en verde (esrezarSema foro} © Gruzarlacale(cruzarCal le} Este algortmo esta compuesto por las accionas: y cruza en ese orden, y es extremadamente simple gracias @ que cada una de estas engioba a tro canjunto de acciones mas puntuales y especificas. Por ejemplo: Lwaceitn esperar Sena: © Observar la iuz dal sarndtoro (chcervarLu2); © Silsluresta en “rojo” o en “Verde intermtsnts” entoncas © Sila distancia hacia la otra calzada es mayor que la distancia que pademos avanzar dani un nuevo paso entonces avanzarPaso; Subir a colada do la vreca che ener (rub rCalza Algoritmos a fonda - Ing. Pablo A. Sznajdkedar foncepto de algaritme ‘Como vemos, cada accién puede descomponerse en acciones mas puntuales y espe- cfices. Por io tanto, cada una de las seciones. dal aigontmo 58 resusive con sui propio slgortmo 0 secuencia fnta y ordensda de accionas. ‘Cuando una accion se descompone en acciones ms puntuales y especiticas decimos ‘que es un “medulo”. Podames saguir profundizanda cada aocién tanta coma queramos. Par ejemplo, analice- ‘mos la accién (o ef mddulo} ba}arCa! zac: esta.accion se resuelve: Jevantando un pie, adelantandolo, incinando el cuerpo hacia adelante, yy spoyando el pie en la cabe, (Claro que “levantar un pie" implica tensionar un cenjunto de musculos, etoétera, 1.2.2 Analisis del enunciado de un problema Resuita evidente que, si vamos a disefiar un algoritmo para resolver un determinado problema, tenemos que tener totalmente estuciado '¢ analzado el contexta dicho problema, Esto implica ‘© Comprender al aleance. ‘+ Idenfiicar los datas de entrada. © Idantiicar los datas de salida.o resultados. E. andlisc anterior es fundamental para poder dicefiar una esirategia de soluckin que ‘Serd la piedra fundamental para el desarrofo del algoritmo. 1.2.2.1 Analisis del problema FRepasemos of contexto del problema de “eruzar ia calle” que formulamos mas ariba: CCaminando por la ciudad llegamos a una esquina y pretencamos cruzar la calla. Para Poder cruzar con la mayor seguridad posible, tenemos que esperar que el semaforo habilie el paso peatonal. Hasta que esto ocura nas encontraremos detenidos al lado dal somdforo y una vaz que este lo parmita avanzarames, place a paso, hasta llegar a la ‘veredade enirente, Se considera que el semdfors habilta el paso peatonal cuando emite una Iu2 “verda fa. En cambio siel semdiom emite una luz “raja” o "verde intermitanto” ‘se recomianda esperar 1.2.2.2 Datos de entrada En este contaxio padamas idantiicar los siguientes datos de entrada: ‘= Nuactra posicién inicial - pasicién en danca nos detuvimos a esperar a que al sem foro habilte el paso peatonal. Lallamaremes posInicial © Luz del semaiora- o color del luz que el seméforo esta emitiendo. Lolamaremos Luz. ‘Distancia de avance de paso - que distancia avarzamos cada vez que damos un ‘nuevo paso. La liamaremos dist?asc. © Posicion de la vereda da enfrenta, La Ramaremos po: donde nos dirigimas. 1 ya que as alli hacia Algoritmo’ a fondo (Cuando una aoc se descompane en ‘acciones mes puntules y especticas Jaltamamos “médulo”. Alfuomega , [Acard Bohm y Giseeppe Jaci ecb cma de a rogram Si eabuckrade, dio wun stale ie 1086, ‘David Harel rastreé fos onigenes de ta opramacin sxbuchrad hasta la cesta: (OG deh redoch ‘de von Neumann y ef feorema de fa for- ‘manors de ena. La cart ecra en 1968 po Dikaba, titulads “Go To Considered Harmful’ ‘reawivd el debate. En la Web de apoyo, conor el vn- cl a a pigina Web pers da Co- mdoBarm, ‘Linireduceién a los algoriimos ya la programacién de computadoras 1.2.2.3 Datos de salida Si bien en este problema no se idenifican datos de sada resuita evidente que hmga de ejecutar la secuencia de ecciones del algaritme nuastra posicién actual deberd ser Ja misma que la posicidn de ia vereda de anfrente. Es decir si lamamos pm muestra pposicién ectual resutaré que su valoral inicio dal algoritmo sera; ial yal final 1.2.3 Memoria y operaciones aritméticas y logicas Ena vida real, cuardio cbservamos la luz del semaforo almacenamros este dato en algin lugar de nuestra memoria para poder evaiuar si corresponde cruzar la calle 0 no, Generaiments, los datos de entrada ingresan al sigontmo a través. de una sccién que Nlamamos “lectura” 0 “ingreso de dios’ y permanecen en la memoria el tiempo durante el cua el algoritma se ests ejecutand, Por otro lado, ol hecho de evsiuar si correspond o ne cruzar a calle impica resizar una ‘peracson logica. Esto es: determinar sla propasicion “el sernfora emitehuz roja o verde intermitenta® resulta ser verdadora o falsa. ‘También realizaremos una operacién kigica cuando ectamos crurando la calla y tenga- mas que determina si comesponde dar un ruave paso o no. Recordemos que lama- mos p a nuestra posicidn actual, posFinal ala posiciin da la vereda de erérente y dist@as0 alla distancia que avanzamos dando un nuevo paso. Por lo tanto, cores- onde dar otra paso si se verfica que posFinal > p+dist Paso. Aqui ademas dela ‘peracsén logica eslamos realizando una operacién arimética: la suma pdistP aco, En resumen, estos son los recursos que tenemas disponibles para disefar y desarrollar salgontmos: = Lamemoria. ‘+ Laposibiidad de realizar operaciones aritméticas. ‘© Laposibiidad de realizar operaciones légicas. 1.2.4 Teorema de la programacién estructurada Este teorema establece que todo sigovtmo puede resclverse mecéante el uso de tres estructuras basicas lamadias “estructuras de control". La estructura secuencial” 0 “accin simple” ‘+ Laestructura de decision” 0 “accion candicional”. * La“estnucturaiterativa’ o “accion de repeticion’. Dos de estas estructuras las hemos ulizada en nuestro ejemplo de cruzar la calle. La estructura secuencial es la mis sencila y simplemente implica ejecutar una accién, luego otra y asi sucesivamente. Laestructura de decieién la utilzamos para evaluar si correcpondia dar un nueve paso en funcidn de nuestra ubicacion actual yla ubieacion de la vereda de entrente Sin embargo, para resolver el problema hemos utlizado una estructura tabir la estructura “ir a” 0, en inglés, “go to" o “goto”. Esta estructura quedé descariada luego de que el teorema de la peagramacién estructurada demastrara que con una. adecuada combina ion de las tres estructuras de control antes mencionadas es posible resolver cualquier Alfaomega algoritmo sin tener que recurrir al “goto” fo estructura “ira"). Para gjamplifcarie vamos a replantear el desarrollo de los algartmos anterioras y ream plazaremos a estructura “ir a” (goto) por una estructura iterativa: la estructura “repetir miontras que" Algoritmos a fonda - Ing. Pablo A. Sznajdkedar 1.3 Conceptos de programanin rarSensfore: ‘Sin “irs (solucién comecta) © abservarLuz; ‘© Repetir mientras que la luz esté.en “rojo” on “verde intermitenta” hacer o srangarfase: 3 sensrisee: ) Gjlrcictanca hacia i ora catznda | + Repetirmiontras quo la ctancia fs mayor que laistancia que pode- ‘mon avanzar dando un auewo -entonces: oT janzarPaso; © subirCalzada; . ‘Como vemos, la combinacién “accién conticional + goto” se puede reemplazar por una ‘estructura de rapeticin. Si bien ambos desarrofos son equivalentes la nueva version Major porque evita al uso del goto, estructura que quedo en desuso porque trae grandes problemas de mantenibilidad 13G0 En general. estudiamos algoritmos para aplicarios a la reschucion de problemas mediante 1 uso dela computadara, Las computadoras tienen memoria y tienen la capacidad de resolver operaciones artmicas y lagieas. Par io tanto, son herramienta fundamental para cjecutar los algerimas que vamos a desarolla ara que una computadora pusda efecular las acciones que componen un algortma tencremos que especificarias o descibilae de forma tal que las pusda comprendat. TTados ascuchamos alguna vez que “las computadloras solo entiencen 1 (unos) y 0 {ceros)" y, etectivamente, esto ea asi, pero para nosotres (simples humans) espaci- ‘ear las Sceiones de nuestros sigaritmas como diferentes combinaciones de unos y ‘eros seta una tarea verdaderaminte dif. Afortunedamenta, existen los lenguajes dds programacin que proveen una solicion a este problema. 1.3.1 Lenguajes de programacién Las computadoras entiondan al lenguaje binario (unos y cemes}'y nosoires, los humanos, fentandamas languajes naturales aspanl, inglés, portugues, atc.). Los languajes de programacién son lenguajes formales que s@ campanen de unconjunto de palabras, generalmente en inglés. y reglas sintécticas y seménticas Podemas ullizar un lenguaje de programacién para escrisir 0 caditicar nuestra algoritmo vy luego, con un programma especial llamado “compilader”, podremas generar los “unos \y cers” que representan sus acciones. De esta manera, la computadora serd capaz de comprender y converte al igontmo an un programa de computscion. Alfuomega langage C+ fue ran madiae os de oe aos cchenis por are ‘Skoustup, cone objet de evander allenguaj do programacin € con m= _canismos que petmtan la manipulacion Alfaomega {Lintroducesén a los algoriimos ys la program: le computadoras Existen muchos lenguajes de programacion: Pascal, C. Java, COBOL, Basic, Small, etc., y también axisten muchos lenquaies. derivados dé los anteriores: Delphi (darivada de Pascal), C++ (derivacode C), C# (dervadade C++), Visual Basic (derivado ce Basic}, stoétera. En ecto libro utilizaramos ol lenguaje da programacién Cy, para los capitulos de encap- sulamiento y programacién orientada a objetos, C++ y Java, 1.3.2 Codificacién de un aigoritmo Cuande escribimes las acciones da un algoritmo en algiin Ienguaje de programacién ‘dacimos que lo estamos “codificando”. Genersiments, cada accion se codifica en una linea de e6ciga. Al conjunto de lineas de cécigo, que cbtenemas luego de codificar el algortmo, to llama- mas “cddigo fuanita’ i cédtigo fuente dabe estar contenido en un archive de tat cuyo nombre debe tener tuna extension determinad que dependerd del lenguajs de programaci6n que haysmos utiizade. Por ejemplo, si coctficamos en Pascal entonces al nombre del archivo debe tener la extansion “ pas". Si codificamos en Java entonces is extensién del nombre dal archive deberd ser “java” y si al algentmo fue codificado en C entonces al nombre dt archive deberd tener Ia extension "." 1.3.3 Bibliotecas de funciones Los lenguajes de pragramacién proveen bibliatecas 0 conjuntos de funciones a través de Jas cuales se afrece Caria funcionalidad basica que permite, por ejemplo, leer y escribir datos sobre cualquier dispositive de enirada/salida como podria ser la consola Es deck, gracias a que los lengusjes proveen estos conjuntos de funciones ios progra- adores estamos exentos de programarias y simplemente nos imitaremas a utlizarlas. fen C, por jamplo, cuando necesitemos mostrar un mensaje en la pantalla Utilzaremos la funcion print ©’ y cuande queramos leer datos a través dal teclado uti- lizaremos la funcién scanf. Ambas funciones forman parte de la bibicteca estindar de centrada/salida de C, también conocida como “stcio h”. 1.3.4 Programas de computacion Un programa es un algorimo que ha side codificado y eompdado y que, por lo tanto, Puede ser sjecutado en una computadors. i algortma constituye la logica del programa. El programa se limita a ejecutar cada una dels acciones del algoritmo. Por esto, sie algoriimo tiene algun error enionces el pro- (grama también lo tendra y siel algortmo es légicamiente perfacto antonces al programa tambsin lo sera. i procesa para crear un nuevo pragrama es el siguiente: © Disefar y desarollar su algorima, ‘+ Gotifcar el algoritmo uiiizando un lenguaje de programacibn. ‘+ Gompitario para obtener el codigo de maquina o arctivo ejecutable tos “unas y cerus"), Dado que el algoritmo es la partelogica del programa muchas veces utlizarernas ambos términos como sinénimos ya que pera hacer un programa primero necesitaremas disefar su lgaritmo. Por otro lado, si desarrolamos un algortmo seguramente sera para, luego, codificarlo y compilaio, es deci, programario. 1 Representacion grafica de elgarimos 1.3.5 Consola Lemamos “consola’ al conjunto compuasta por el teclado y la pantalla de la. computa dora en modo texto. Cuando hablemos de ingreso de datos par consola nos estaremos refriendo al taclado y cuandelhablemos de mostrar datos por consola astaremos hablar do de ia pantalla. siempre en modo texto 1.3.6 Entrada y salida de datos Lsmames “entrada” al conjunto de datos externas que ingresan al algoritmo. Por ejerm- pla, el ingreso de datos por taclado, la informacién que se lea a través de algun dispo- 'stivo como podria ser un lector de cdigo de barras, un scanner de huellas digitaes, eicétera, Llemames “salida” a la informacién que el algoritma errite sobre algin dispositiva como ‘seria consola, una impresora, un archivo, eicétera. La consola es ol dispositive de entrada y salida por omision. Es decir, si hablamos de ingrese de datos y no esnecificamos nada mas sera porque el ingreso de datos Io ha- remos a través del teclado. Anatogamente, si hablamos de mostrar certs informacion y Ro especificamos mas detalles nos estaremos refriende a mostreria por la pantalla de la ‘computadora, en mado texto. 1.3.7 Lenguajes algoritmicos Lemamos “lenguaje algoritmico” a tado recurso que perita desoriir can mayar'@ me- nor nivel de details los pasos que companen un algaritmo. Los lenguajes de progremacion, por ejemplo, son langusjes algorttmicos ya que. como ‘veremos més adelante, la codificacion del aigoritmo es en si msma una dascripcion dtalada de los pasos que le componen. Sin embargo, para descrbir un slgontmo no siempre sera necesario llegar al nivel da detale que implica codificaria. Una apcién valida es utizar un “pseudocodigo”. 1.3.8 Pseudocddigo El pseudocodigo sume de mezelar un lenguajé natural (por ejemplo, al espanol) con ‘lertas convenciones sintactcas y eamantcas propia dun lenguaja d programacien. Justamente, el aigontmo que resuelve el problema de “cruzarla calle” tue desarrollado ublizando un peewdocodigo. Los diagramas también parmiten deta los pasos que componen un algortma; por 1o tanto, con longuajesalgotmicos. En acta bo profuncizaremos onal uso Ga iagramas para ego cociicaros con el Ienguaje de programacin C. 1.4 Reprosantaciongrafica da algoriimos _ - Los algaritmos pueden representarse mediante el uso de dlagramas. Los dlagramas pro- ‘veon una visién simpificada de la Negica dal algorimo y son una herramianta importanti- ‘sima que utlizaremos para analizar y dooumantar los sigoritmos ¢ programas que vamos adesarrolar, En este libro, ulizaremes una versicn madificada de los diagramas deNassi-Shneiclerman, ‘también conocidos.como diagramas Chapin. Estos diagramas se componen da un con junto de smbolos que parmiten representar cada una de las astructwas de contol que ‘describe ol teorema de la programacdn estructurada: la estructura secuencial a estruc- tura de decision y la estructura de repeticion. Aigoritmos fondo - Ing, Pablo A. Sznajdledk Alfuomega Alfuomega {Lintroducesén a los algoriimos ys la programacién de computadoras 1.4.1 Representacion grafica de la estructura secuencial o accion simple Laestructura secuencial se representa en un recuadko a, si se traia de un ingreso 0 egre- 5p de datos se utiliza un trapecio como observamos a continuscien: it a Lammas =a as Nota: las flachas grises na son parte da los simbolos de entrada y salida, simplemente ‘son iustrativas, 1.4.2 Representacion grafica de la estructura de decision Esta estructura decide entre ejecutar un conjunto da scciones u otro en funcién de que ‘58 cumpla ono una determinada condicin o expresion logica Informalmente, diremos que una “expresion logica” es un enunciade susceptible de ser verdadero 0 falsa, Por ejemplo. “2 es pee” 0 “5 es mayor que &”. Ambas expresiones ‘ienen valor de verdad, la primera es verdadera y la segunda es falsa. La estructura se representa dentro de una “casa con dos habitaciones y tacho a dos aguas". En “el altlla” indicamos la expresién lagica que la estructura debe evaluae, Si esta expresn resuita ser verdadera enfonces se ejecutardn las acciones ubicadss en la seocién inquiarda. En cambio ci la exprasin resulta ser falsa se ejecutarin las accianes que estén ubicadas en la seccidn derecha. Fg. 12 Representaccn gros dea exmuturs conacin Eneste caso, sise verifiea expresionLogica seejecutardn las acciones sccicnl y accion? En cambio, si expres ionlogics resulta se falsa se sjecutara inicamente a 5. Las tlechas.gnses son iustrativas y no Son parta del diagram. 1.4.3 Representaci6n grafica de la estructura de repeticion La estructura de repetici6n se representa en una “esja” con una cabecera que indica la ‘expresion logica que se debe cumplir para seguir eecutendo las acciones contenidas en Ja seccion pencipal exprenonL ogi ecient Fig 1.3 Reoreceniaccn grea def extrucur ce rapticion. Algoritmos a fonda - Ing. Pablo A. Sznajdkedar 1d Representacién grafica de algarimos Eneste caso, mientras expresicnliogica resute ser verdadera se repetirén una y olra ver las acciones. accion, accion2 y accion’. Perio tanto, dentro de alguna da @s- tes acciones deberd suceder algo que haga que la condicién del ciclo se dje de cumpli Ds fo contraria, el aigonitma se quedaré terando dena de este ciclo de repaticiones. ‘Con In estudiada hasta aqui, podemas representar graficamante el aigontme que resuel- ve el problema de cruzar la calle. eaereSerafere rurarcals ©) Fig. 1.4 Biagrama dal algotime proc E! diagrama principal comienza con una G y finaliza con una F, iniciales de “Comien- 20" y “Fin”, cada una encerrada denim de un circulo. Logo, las acciones simplas esperarSemaforo y cruzarCal le se representan dentro de rectingulos, una datras de la otra. Como cada une de estas accionss cormesponde a un médulo tendremas que provesr también sus propios diagramas, 1.4.4 Representacién grafica de médulos 0 funciones ‘Como estudiames anterigmenta, un modulo representa un algoritma que resuelve un problema especiica y puntual Para representar, grficaments, las scciones que compo- ‘nen a.un madulo, utitzaremos un paralelograma con si nombre del modulo coma snca- bezado y una R (nici de “Retomo”) encerrada dentro de un cculo para indicar que el méduio finalz6 y que se retomara el conéro| a algaritma o programa principal. a. 1.5 Encaberane y frefacin de un mock, ‘Con esto, podemos desarrollar los disgramas de los médulos espe cruzartal jemaforo y Fag Le Mocun experarsen Algoritmos a fondo - Ing, Pablo A. Sznajdleder Alfuomega Alfuomega {Lintroducesén a los algoriimos ys la programacién de computadoras Enel diagrama del modulo e=perarSens foro, leemos el color dela luz que actuaiman- te est emitiendo el sematoro y lo “mantsnemas en memoria” asociandolo al identifca- dor Luz. Esto lo hacemos indicanda el nombre del identificador dentro del simbolo de Jectura @ ingreso de datos. Luego ingresamoe a una estructura de repeticion que iterard mientras que la expresi¢n logics (1uz = "Rojo") OR (luz = “Verde intermitente”) resulte verdadara, [Las acciones encerradas dentro de esta estructura se repetiran una yotra vez mientras la ‘condicién anterior continde verifeandose, Estas accianas son: esperar yvolver a lear Ja luz que emite el sematoro. Evidentemiente, en algin momento, e!semaforo emit la luz “verde fia”, la condicién de Ja cabecera ya na se verificara y el ciclo de repeticiones dejara de Rerar Veamos ahora el diagrama del madula. cruz2rCalle, I asParo pesinicin, posPinal pe posicial a Be penisipass ®) Pig. 17 Moonta sruesecalie, El andlisis de este médulo es similar al anterior Aqui primero invocamas al médulo Esjarceizads yuege, ngresamos/los datos dist Paso (distancia que avanzamos al darun nuevo paso), posinicial y posFinz] (la posicsin donde estamos paredos yl posicion de la vereda de enfrente respectivamente), A.continuacion, “asignamos” al Ideniificader p el valor de pos Inicisl y luego, ingresamos a una estructura de repe- {ition que iterard mientras que e2 ventique la expresion logica posFinal > pdistPaso Dentro de la estructura derepsticson, tenemos que avanzar un paso. Si bien en el primer andlsis del algoritmo habiamos definido un médulo =vanzazPasc, en este caso, preferi co reemplazaro directamente por la acciinc pe prasirase Pig 1.8 Acracion y acuasncar Esta accion indica que a p (dantificador que contiene nuestra pasicién le asignamos la ssuma de su valor actual més el valor de ant main() printf ("Hola Munda\n"); return 0; ' . “Tadias tos programas C se codifican dentre de la funcin main. La palabra “main” (que significa “principal” es una palabra reservada y se utliza como encaberado del progra- maprincipal. Para emitir el mensaje "Hola Mundo” en la consola, utlizamos la funcién ‘Como ‘comentamos anteriorments ests funcién es parte dé Ia biblioteca estindar de entraday salida de C Hamada “stdion”, Lafuncien printt recibe como argumento una cadena de caracteres y la imprime fen la consola. Notemos que al texto que qusremos imprimir le agregamos el caracter especial \n (dase “barra ene"), Este caracter representa un salto de linea. racticamente, todos los programas C comienzan con la clrectiva (de preprocesador): Hinclude '-1 siendo n la cantidad de bits utilzades en dicha representa ion. 7 byte implican=8, 2 byies implica n=16, elcétera. 1.6.5 Los caracteres Los caracteres se representan como valores numéncos enteros positives. Cada caréc- ter tiene asignado un valor numérico definido en Ia tabla ASCII. En esta tabla se define (ue el cardcter ‘A’ #2 representa con el valor 65, al cardcter con el O6'y asi suresi- vamente, Para representar al cardcier ‘a' se utiliza el valor 97, el 'b’ se representa con cl valor 98, el caracter ‘O" con al valor 42, ef 1’ con al 49, etoétara, Por lotanto, para representar cada carécter alcanzara con 1 byte de memoria y a carac- teres requerin n bytes de memoria. Algoritmos a fonda - Ing. Pablo A. Sznajdkedar 117 Las variables Liss variables representan un espacio de a memoria dela comptadora. A través de una ‘variable, podemos almacenar termporalmente datos para tenerios cfsponibles durante la Sjecucisn del programs Fora uilzar una variable, tenemos que especificar un nombre y un tipo de datos. Al ‘nombre dela variabe lo lamas “identiicador”.En general, un idertiicador debe co- ‘menzar-con una letra y no puede cantensr espacios en blanco, signos de pantuscign Nombres de variates oidentiticadoces inearrectos son: (© pusde comenzar ean un rimoro) ha (no puede comenzar con un signo "menas") 2 nacimiesto (no pusde tener espacios en blanco) niente (ne puede tener el sino “menas") 9 pe pusde tener el signa “mas") Los valores que mantienen las variables pueden cambiar durante la ejecucién del progra~ ‘ma, justamente por es0, son “Variables”. Para que una variable adqueara un dterminado valor se Io tendremos que asignar manuslmente con el operadar de asignacién o bien leer un valor a través de algun dispositive de entrada y almacenario en la variable. Esto Jo representaremos graficamente de la siguiente manera: Fg. E11 Represerfacion rics de ectira y asioracin, En las figuras vemos representadas, de izquierda.a derecha, las Ssguientes acciones: ‘= Leo un valor por eansola yo asigno-a la variable ‘© Asigno el valor 10 ala variable 2b. ‘= Asigno a lavariable © el valor que contiane la variable b “mds 1" Recordemos que para defini una variable es necesario especificar su tipo de datos lo ‘que significa que una variable solo podr contaner datos del mismo tipo. Es diacir, la ‘variable puede tomar diferentes valores durante la sjecucién del programa, pero tados ‘estos valores siempre seran del mismo tipo: el tipo de datos con el que la variable fue definida 1.7.1 Convencion de nomenciatura para variables 'Sibien al lenguaje da programacién solo exige que los nombres da las variables 0 idanti- ‘fcadores respeten las restricciones mencionadas més arriba, en este lio, acioptaremos Ia siguianie convencién de nomenciatura: AAigoritmes a fondo - Ing. Pablo A. Sznajdledar 7 Alfuomega 18 £ ‘Bi ecuador divide al globo en et hemnis- ‘erie norte y ef hemistaro sur, @s una tt ‘naa imagnana (uncireula maxima) que ‘se enoventa, sxactamenta a misma cistancia de ls plas gsogficas. Alfaomega ‘Linireduceién a los algoriimos ya la programacién de computadoras Nombres simples: deen escribirse complatamente en minuscula, Por ejemplo: f=! nombre, edad, direccton, etostera Nombres compusstos: si el nombre de la variable esté compuesto por dos.o mas pala- bras entonces cada palabra, a excepcin de la primers, debe comenzar en mayiscula. Por ejemplo: F221 9, etoetera. Nunca ef nombre de una variable deberia comanzar en maylseula ni escribirea comple tamente en maydscula. 1.7.2 Los tipos de datos Dependiand del ipo de datos que detnamcs para una variable, esta astarérepresen- tando una mayor o menor cantidad de bytes de memoria y, por lo tanto, nos permitira lmacenar mayor menor cantdad da informacion, Segin su contenido, os datas pueden clasticarse como numérica, allarumiicos logicos. Por sjamplo: la dreccién postal da una persona es un dato alfanumérico, Este ipo da ata represenia una sucesson de caracteres afabeticas y/o rumecos como pod'a eer “Ay. Dal Libertador Nro. 2385, piso 6” En cambio, ls edad de una persona es un dato numérica, entero posiiva y acotada ya que, como analzamos mas amba, 255 es una edad absurda ala que un ser human funca podra legar. Es decir qus este data es un nimera entero corto y sin bit de signa 0 unsigned ya que ninguna persona podra tener una edad negative. Eiilomatrajede un auto, por ejemplo, es un valor entera positivay, potencialmente, muy grande. No pod representarse en 1 byte (255), ni siquaera en 2 bytes (65535). Tendre- ‘mos que utlizar una mayor cantdad de bytes. esta tipo de dator lo larnaramos entero Targa, Este data tarbain x unsigned ya que un auto no puede tenar un Klometraje negative. La distancia (expresaca en kikimetros) que existe entre dos cudades ea un dato que ppusde represantarse an 2 bytes. Esto ee desprende dal siguiente razonamiro: Como al ‘metro del ecuador ea de aproximadarrente 12710 km entonces el perimato de la Te- tra ge puede calcul como 1'dkimetra = 4007 km, también aproximado, Es deci que, fel peor de los casos, una ciudad puede estar en wn punto de la Tera yla ora pueds estar justo al oo lado del mundo y aun asi, a distancia nunca ser mayor que la rad Ge perimeta de a Tera: 20087 kr. Ei salia de una cuenta hancara es un valor numérica real, Es decir probablementa tenga Gacimales y podra ser positive o negative. A este tipo de datos lo llamamos fletante. La representacin intera de los numeros con punts fatana ia analaaremos mas adelante. Sagin saa a grado de pracsién quo demande ol valor real qua ionamos que raprasantx, su tipo pod ser simplarente “botante”o bien flotante de Goble precisin Por timo, los datas ligicos e boolesnos son aquellos que Genen valor de verdad. Esta ‘lor puede ser verdadero o also. En general ublizamos este Hpo de dato para almane- nar el resultado de una operacion kigics. 1.7.3 Los tipas de datos provistos por el lenguaje C Los Jengusjes de programacién proveen tipos de datos con los cuales se puede defini (o deciarar varies. Como vimos mas ariba, para utiizar una variable serd necesario defini su identiicador (Pombre de la variable) y su tipo de datos. En C-dsponemos de los siguientes bpos: Algoritmos a fonda - Ing. Pablo A. Sznajdkedar 7 Las variables Naturaleza Tipo Bytes _| Descripcion shot 7 [enter corto Tipos suméticas nt 2 | ears ters 4 | mara ow {| Serer cone) Tipos numencos oat 7} totante ‘tanta (oresies) | double 8 | totante dole precisin Nota muy importante: Las cantidades da bytes na siempra cerdn las mencionadas en la tabla ye que estas dependeran del compiladar y de la arquitectura dal hardware en dor da ectemos corpilanda y ejacutanda nuestro programa. Sin embargo, en este libra, por cunstionss didacticas, consideraremos que esta serd la cantidad de bytes de memoria reservada para cada tipo dedato. ‘A cada uno de'os tipas de datos enteros se les puede aplicar el modificador d ‘con lo que padremos indicar si queremas o no que se doje sin efecto el bt de signa, Con ‘esto, aumentamos al ranga de valoras positives qua admite el ipo de datos a cosia de sacrifice ls posibiidad de aimacenar valores negativos. Los datos logicas o booleanos s@ manejan como tipos enteros, consideranda que el ‘valor 0 es “falso” y cualquier otro valor distnta de 0 es “verdadero”. En otras lenguaies, como Pascal o Java, se proves ol tipo de dates boolean, pera en C las datos logicos ‘emplemente G2 trabsjan como i. Por sitimo, las datos alfanuméricos 0 “cadenas de caracteres” se represerian como “conjuntas de variables" de fipa char. Aestos “conjuntos” selos denemina arrays, un tema qué estudiaremos en detalla mas adelante 1.7.3.1 Notacién hungara La notacién hingars #5 una convancién de nomenciatura que propont:anteponer al nombre de I variable un pref que, a simple vista, permita identiicar su tipo de datos, ("de string), Fin (["b" de boolean), Si bien la notacién hingara cuenta con una importante comunidad de detractores que Sseguran que. ala larga, complica la legitwidad y a mantenibilidad del cécigo fuente, personalmente considero que, en ciertas ocasionas, se puede utilizar 1.7.4 La funcién de biblioteca print £ ‘Como ya sabernos (ag funcién print permite mostrar datos en la consola. La salida puede estar compuesta por un taxta fijp (text litera o par una combinacién da texto Iiteral y contenido variable como veremos en el siguiente programa. include ine main) ‘ghar nosbre[20]; Tae ee double 2iturs; print ("Ingrese su nombre: *)7 scant (*§s",nombre} 7 print£("Ingrese su edad: Scant ("sci", sedad)3 print? scantt" yrese su altura *)3 *,ealtara) ; AAlgoritmos a fonda ~ I 7 Las variables printf("Ud. es ts, tiene id anios y una altura de $f) inenbre jaded paltura)s return 0; ! . Scant recibe come primer argument una mascara que indica el pode les datos quella funcién debe leer Los marcadores coinciden con los que utiliza printf, por tanto con Xs le indicamos qua lea una cadena de caracteres y.con id y Lif Ie indicamas que Jea un entera yun flotante respectivamente. PPara que una funcién pueda modifcar el valor de un argumienia tenemos que pasarte su reierencia © su direccidn de memoria. Esto lo cbtenemos anteponiendo el operadar {lease “operadar ampersand”} al identificadar de la variable cuyo valor querermos. que la funcién pueda modiicar. Veamos las siguientes lineas- printé |" Ve Scan ("HIE galtur Utiizamos scant para leer un valor entero y asignario en la variable: edd, luego usa mos scant para leer un valor fotante y asignarlo en la variable 2iui Ei caso de las cadenas de caracteres as diferente. Camo comentamos més arriba, las oa- ddenas ge mangjan como arrays (o conjures) de carecteres. Si bien este tema io estudia- remos més adelante, es importante caber que elidentifiadior de unarray es en si mismo su direceion de memora, raz6n por la cual na fue nacesaria anteponer al operador & a la variable nonbre scant (* Nota: en todos los casos scant lee desde el teclado valores atfanuméricos. Lugo, de- endiendo de la méscara, convierte estos valores en fos tipas de datos que corresponda ‘ylos asigna en sus respectivas variables. 1.7.6 El operador de direccion & El operador & se llama “operador de direccién” y aplicado a una variable nos permite ‘obtener au referencia e dirscoién de memoria. ‘Tendrarnos que ulizar este operador cada var que necesitemos que una funcién pueda modifica l valor de alguna variable que le pasernos come argumento. 1.7.7 Las constantes ‘Los aigomtmos resusiven situsciones problematicas que surgen de la realidad, donde fexisten valores que nunca cambiaran. Dos ejemplos tipicos son los numemos 21 y = ‘Cuyas aproximacionas son: 2.141592054 y 2.718281828 reepectivamente, 1.7.7.1 La directiva de preprocesador 4iefine Esta directive permite definir valores constantes dela siguiente manera: ‘Fdofine NOMERO ‘tdefine IEMEROT 2t Alfuomega Alfuomega {Lintroducesén a los algoriimos ys la programacién de computadoras Ei preprocesadar de Creemplazard cada aparicion de NUMERO I y NUMERO_E por sus respactivos y correspondiantes valores. 7 1.7.7.2 El modificador const Sia la declaracién de una variable ks odeé ser madificade. Por ejemplo: int temperaturaliaxina = 43; picamas el modificador const su valor ya na [Luego, cualquier intente de asignar ot valora la variable tenperaturaiaxina en et ‘sédigo dal programa generand un error de compilacién. 1.7.8 Nomenclatura para las constantes ‘Adoptaremos la siguiente convencién de nomenciatura para losmombres de las constan- tes definidas con ladirectiva # Las consiantes deben escribirse complatamenta en maylecula. Luego, si sa trata de tn nombre compuesto por dos 0 més palabras, cada una dabe separarse de Ia anterior mediante al cardicter quién bajo 0 undarecore. En cambio, para las constantas declaradas con el modificador convencién de nomenclatura para variables estudieda més amba, respetaremas la Comenzamos el capitulo explicanda que las recursos que tenemas para disefiar y de- sarrollaralgoritmos son la memoria y ia capacidad de ejecutar operaciones arimeticas y lagicas, Todos los lenguajes da programacién proveen un conjunto de operadores con los que ademas realizar operaciones entméticas. En C estos aperadares son los siguientes: aritmético: Veamos un ejemplo. Problema 1.1 Laer dos valores enteras @informar su suma. Analisis En acto pratloma, los datos de entrada con fos dos valores muméricos enteres que in- resard o! usuario, La sada del aigortma sera un mensaje en la consolainformando la Suma de ostos valores. El proceso impica sumar los dos valores y mostrar el resultado sna pantala Algoritmos a fonda - Ing. Pablo A. Sznajdkedar 1.8 Operadores ani ‘Comenzamas el algorit mo emitiendo un mensaje para informatie al usuario que debe in- .gresar dos valores numéricos eters. A continuacién, leemos los valores que el usuario ‘va a ingresar, quedardn asignacios en las variables 2 yb. Luego asignamos ena varia- ble c la suma +b y mostramas el resultado intercalando los valores de las variables 5, by © conlas cadenasliteraies "+" 0 "=". La codificacsén del algoritmo es la siguint Hincloda paras 8) int a,b,cr print€ ("Ingrese dos valores entercs: "}; scant ("ed ad*,ta, ib); c=al peintE("id 4 ld = Ad\n", a,b,c] return 0; 1 . El algoritmo hubiera sido, practicamente, el misma si en lugar de tener que mostrar la ‘suma ds las dos valores ingresads por i usuario nos hubiers pedida qua mostremas ‘su diferencia 0 su producto. Pero, qué sucedenia si nos pidieran que mostremos. su ‘cociente? Lo analizaremos a continuacién: Problema 1.2 Leer das valores numdioos anteros @ inormar su cocienta, Analisis En este problema, los datos de entrada son los dos valores enteros que ingresaré el Usuario a travas del teclado (los Lamaremos 2 yt) y's salida sera su cocsente jun ni mero flotants). Algoritmo’ a fondo Alfuomega Alfvomega ‘Linireduceién a los algoriimos ya la programacién de computadoras Ahora bien, existela posibilidad de que el usuario ingrese como segundo valor el ndmmera ( (cere). En este caso, no padremos mostrar el cociente ya quella civisidn por ceroes una indeterminacin, asi que tendremos que emitir un mensaje nformand las causas por las ‘cuales no 38 podra efectuar la operacion. Para resolver este slgoriima utiizaremos una estructura condicional que nos permit decidir, en funcién del valor da b, entre mostrar un mensaje de error y realizar la division e inforrar elcociente. Veamnos ef algonitme: Leemos dos valores en las variables a yb y luego preguntamos si el valor de b es ero, Para esto, ullizamos ol aperador de comparacion == (Kase “igual igual}. Si ofecti- \vamante b vale cero entonces mostramos un mensae de error informanda lo sucedio, Sino asignamos a la variable 2 elresultado de ladvision 2/b y lo mostramos fan a consola. Ei cédigo fuenta os al siguiente: Hinelude orci) dime a,b; double cociente; BELntf("Ingrese dos valores: "); scant ("id 4d", ca, aaah dat ay print? (*Ingrese-un valor: sscané("id", Gn) + if( ald == 4) print ("id es impar\n",n)s ) weturn 0; \Veamos otro ejemplo en el cual tendremos que ultllzar los operadores aritméticos de méduloy division. Problema 1.4 Se ingresa un valor numérico de @ digitos que representa una fecha con al siquionte formato; aaaammdd. Esta 2s: los 4 primeras digitos representan el afa, ios siguientes 2 digitos representan el mes y los 2 digitos restantes rapreserian al da. Se pida informar por separada al ia, ol mes y allan da lafecha ingresada Analisis i dato que ingresard al algoritmo es un valor numérico de 8 digitos camo al siguiente: 2008 1015. Si este fuera el caso, entonces la salids deberd ser: Algoritmos a fonda - Ing. Pablo A. 8 aided 1.8 Operadores aritmiiicos Es decir, el problema consiste en desmenuzar ef mero ingresado por el usuario para ‘separar ios primeros 4 digitos, despues los siguientes 2 dipitos y lusgo. los 2 uttimos. ‘Supongamos que atectivamente elvalor ingresado es 20081015 entonces silo drvidimes Por 10 obtendremos a! siguiente resultado: ‘20081015 / 10 =2008101,5 Pero si en lugar de dividitle por 10 lo dividimas por 100 el resultado sera: ‘20081015 / 100 = 200810, 15 ‘Siguiondo of mismo razonamianto, stl numero la dividimas por 10000 entonces ei resul- tad que obtendremos sera: ‘20081015 / 10000 = 2008, 1015 Side este valor farmamos solo la parte entera tendremas 2008 que coincide con el aio representado en la facha que ingrasé el usuario. Por oto lado, el esto obtanido en la division anterior seré: 1015. Esto coincide con el ‘mes y el dia, por lo tanto, aplicando un razonamiento similar podremos separar y mostrar ‘estos valores. Para reprosentar la “divisién entera’ en los diagramas, utilzaremos ef operador div. Este opsrador no existe/en C, pero nos permitir diferenciar, visualmenta, entre una divi- ‘siéq real o fiotanie yuna division entera. Se Sorese urea fea * r ania Fw 10000 Fag. 1.18 Gepars tes sige 6 un names enter Para codifcar esta algontmo debemos tener en cuenta que el valor que ingresaré el Usuario representa una fecha con formato asaammdd. Es dec que, en el peor de los ‘casos este valor sera 90997231 y no lo podemos slmacenar en 2 bytes ya que exceds Bor mucho su capacidad (22767 o 65638). Por este motivo, utilzaremos 4 bytes que nos ppermitien almacenar nimeres de hasta 2*-1 que superan los B digs, es decir. traba- Jatemes con variables de tipa Lon. Algoritmos a fondo - Ing, Pablo A. Sznajdleder Alfuomega Alfvomega {Lintroducesén a los algoriimos ys la programacién de computadoras Recordernas que. por cuestiones didécticas, consideramas que elipo int representa 2 bytes yeltipo long representa & bytes. Ei codigo fuente 2s el siguiente: Hinelude ime nain() 4 ong £; dat dia, mes, anioy dint resto; printf (*Ingrese una fecha: Scant ("tld") cf), £/100007, 4200005 printé ("Dias Slo" dia): Print é ("Mest td\n"/mes) Prints (*Anio: td\nt anio) return 0; } . ecordemas que al operador de ivisién /retara un sullace del misma tipo de datos aque el mayor tipo de sus operandos, Como, en asta caso, etde tipo long entonces sl cociente tambsin lo sera. Es dec que la dvisicn sera entera 1.8.3 Operadores relacionales Estos operadores permiten evalucy la relacion que existe entre dos valores numérica. Ya hemes mencionada y uflizado al opersdor de comparscson == (gual iquall para ‘compara’ si un numere es igual a ot, Ahora veremas ia Esta completa que ineluye a fos ‘operadores. “mayor”, “menor”, “mayor 0 igual’. “menor o igual” y “cistnto”. Operador = ual. stinta de. Goma veremos mas adelante, el operador | (signo de admiracion) es el nperador lagica cde negacién loperador “not”), por lo tanto, el operader != puede leerse come “distinta”, “no igual” o “not equals”. AAlgoritmos a fonda ~ I 1.9 Expresionas idgicas 2 Lismamos expresién logics a Una proposicion que es susceptibie de ser verdadera 0 {folsa. Es decir, una proposiciin que tiene valor de verdad. Por ejemplo, las siguientes proposiciones son expresiones logicas cuyo valor de verdad es verdadera: ‘© La Tierra gira alrededior del Sol ‘© EEUU. tiene dos costes, ‘© 2"as manor que” 5 o simplemente 25), = 5H ‘las siguentes propasiciones son expresiones lgicas cuyo valor de verdad es falc: + La Tiers es el centro dal univers + EEUU. queda en Europa, ; +) 28s mayor que" 5(o simplemente 255) y + Sia En cambio, no son exprasiones kigicas las siguientes propasiciones: = Hoy hace tra, © La pared estd bastanie sucia. ‘© Los nimeros impares tienen major "Chi". Las expresiones ldgicas pueden comibinarse entre siformando nuevas expresiones 16g ‘cas con su correspondiente valor de verdad. Para esto, se ublizen los operadores logicas. 1.9.1 Operadores légicos Las expresiones logicas pusdien conectaree a través de los operadores ligicas y asi se btienen exprasionss logicas compusstas cuyo valor de verdad depanderd Glo valores de verdad de las exprasiones lbgicas simples quelas componen. Los operadores logicas son los siguientes: CS oh “and 6 produsiol or" 0 sums lgica “nal” 0 negacién ‘Con los operadores légions podemos conaciar dos o mis expracionas lagicas y asi ob- ‘fener una nueva exprasin logica con su comespondiente valor de verdad, Sean las expresiones légices. py q_ cada una con su correspondiente valor de-verdad enfonces el valor de verdad de la expresion logica h = p && q ‘serd verdadera o fatso ‘segin la siguiente table: P 4 be pee, verdadara verdadero verdadero verdadara {also ‘also also verdadero ‘so Tako Taleo = Aigoritmos a fonda - Ing. Pablo A. Sznajdleck Alfuomega Alfuomega ‘Linireduceién a los algoriimos ya la programacién de computadoras Esdecy, 1 p es verdadero y q 6s verdader entonces la expresion logica poi q también jo es. En cambio, si alguna de las dos expresiones lagicas (o las dos) es falea fentonces su producto logice tambien lo send. \Veamos ahoralla tabla del operadar || (operador “or: P q vardadera verdadero ‘verdaders so also verdadero talsa also also Goma vemos, Is suma ldgica siempre results verdadera a no ser que al valor dé verdad delos des operandas sea falso. Eioperader | (operedor “not” nisga al valor de verdad del operanda. Es deci, si al ‘perando es verdadere entoness su negacion sera falsa. En-cambio, si al oparando es {also su negacion sera verdadera, P he verdadera Taso ‘iso verdadero 1.10 Operadores de bits En este apartado, estudiaremos operadores que permiten manipular los bits de las bytes \inculados a lna-varables entaras qua declaramac an los programas. La complejidad del tema excede a la que venimos.manejando én este capitulo introduc- foro razin pola cual le recomendo a lector pasar por alo estalctira ya ae, oportl- riamanta, cua lo conaidere adecusdo le recomend rtomarl. 1.10.1 Representacion binaria de los tipos enteros (Mas arriba estudigmos que un valor numérico entero se puede representar en un conjun- to de bytes. Cuanto mas grande seal cantidac de bytes de este Conjunto, mayor ser ka ‘liversidad de valores enteros que parmfia abarcar. Enel lenquaje de programacién C. estos.conjuntos de bytes estén representacos porlos fipos de datos: char, short, int y Long. Para facitarel andlsis, nos manejaremos con valores pequeios desancilando ejemplos bbasados en el ipa char que, como ya sabemos, representa un canjunto de un dion {byte con bit de signo. Sea lavariable © definida de ls siguiente manera: Internamente, eu representacion sera 0300110 ‘Luego, si multiplicames su valor por ‘Su representacién pasard a ser: 011010 ya obtenemos alinvertr todos los bs del numero postive luego, sumando 1 alresuttado. Algoritmos a fonda - Ing. Pablo A. Sznajdkedar 1.10 Operadares de bits 1.10.2 Operadores de desplazamiento de bits (>> y <<) Los operadores de desplazamianto (shit en inglés) permiten mover los bits de una varia- ble entera hacia la izquierda (shift left) o hacia la derecha (shift right (Confinuando con la variable c declarada mas arriba. si hacemos: © pasara avaler 19. Veamos: : opio0i10 cy Da ‘oooT9at7 @ YY sien lugar de correr sus bits hacia la derecha los corremas hacia la ixquiewa: op100110 ‘7007400 ale Qué sucederd i coremos los bits de = 2 lugares hacia la izquierda? opioort0 38 “10071000 152 El resultado que dabariamos obtener es 182. Sin embargo, coma Ia variable es de tipo chaz solo admite valores positvos no mayores a 127. De esta manera, la asignacion ‘desbordard la eapacidad de la variable y la acignard un valor absurdo @ ireal. 1.10.3 Representacion hexadecimal Le representacién hexadecimal facta, enormemente, la tarea de trabajar con bits (di- sites binario} ya que un solo digto- hexadecimal permite representar 4 digits binarios. La siguiente tabla muestra la eombinacién binaria quo representa cada uno da los 16 digitos hexadecimales. Hexadecimal Binario Hexadecimal ‘Binario o ‘ooo a 1000 1 ‘000 a "1001. z ‘oot zy 1010 = OT a iT £ oto c 1100 5 O10 - D. TOT e “ote e “To T Ont F Tit Fig 1.16 Coieasen tana a os chgtos hawaseceraia. ‘Asi, para representar l niimero binario'01111011 (123 decimal} solo seran necesarias los digitos hexacecimalee: 7B. i 1011 5 oritmos a fonda - Ing. Pablo A. Sznajdieder at Alfuomega Alfuomega {Lintroducesén a los algoriimos ys la programacién de computadoras En C podemos ular! sistema hexadecimal para representar valores enteros. Para jsto, tenemos que anteponer el pretyo Ox (éass “cero equis") al nirmero hexadecimal. Las siguientes lineas de codigo muestran diferentes formas de expresar al mismo valor numérico entero. Ahoralas variables 2 y b tienen el mismo valor numérico: 123. Representacién hexadecimal de niimeros enteros negativos Lavepresentacin hexadecimal de niimeros enteros esta separada dala representacin binara intema que el nimero adquiere cuando esta en memoria. Por esto, al nlrmero (x88 (10001000) representa al valor +136 aunque su bit mats sgndicaliva sea 1. Para representar el valor entero -136, uillznremos 0x88 1.10.4 Representacion octal Ei sistema octal es altemativo a sistema hexadecimal. En este caso, cada digito actal (0 7) representa un conjunto da 3 digites binarios. Octal Binaria Octal Binario 0 00) a 700 1 ‘oor 5 701 2 10) & 710 3 ott 7 Tit Fig 1.17 Coxslcarion tiara de be egos octane C permite axprasar valores octales anteponiende al numero al prafio 0 (ease “coro”. (ae cece i pe mint rar tt Binaro: on on) on ‘Octal: T 7 a 1.10.5 Operadores ldgicos de bits Sean las siguientes variables declaradas ¢ incializadias como vamas a continuaciée: unsigned char a = Ox6. ed char & = 0x21 Podiemos obtener su producto y su uma logiea de la siguiente manara: Producto légico Suma légica z ‘OTTO000T 7 a ‘OrTOOOUT ow [ooror707 5 E ‘OOTOT 01 45 ‘ooTo0D0T 3 =a ‘OTT 107 Tos Flo 1.18 Coerasones loci de its Algoritmos a fonda - Ing. Pablo A. Sznajdkedar 1.41 Resumen 3 El praducto kigice entre das valores enfarns se obtiene comparando uno a uno las bits de sus posicianes homsnimss. Luego. si ambos bits vaien 1 el bt resultants para esa pposicion también tendra este vator. En cambio, para obtenerla suma logica aleanza-con que alguno delos bits deuna misma pposicion 265 1 para que al bt resutante también tengs este valor. 1.11 Resumen ‘alos lectoras qua nunca antas han programado un primer acercamiento a la materia. Entre estas nociones hasicas @ intraductorias crea conveniente dastacar los conceptos de “algoritmo y problema”, las estructuras de conirol que describe el teorema de la pro ‘gramacion estructurada y ia idea de variables y tipos de datos. ‘Ademés, con la ayuda de los videotutoriales, a lectar halved podido compilar sus prime- ros programas en al lenguaje C_ En al proxima capitulo, nos concantraremos en estudiar con mayor rivel de detalle as ‘estructurgs secuencial, concicional iteratva, incrementando ai a nivel de complojicad > 1.12 Contenido de la pagina Web de apoyo _ jal mareado con asiorisce (') solo esta disponible para docantas 1.12.1 Mapa conceptual 1.12.2 Autoevaluaciones 1.12.3 Videotutorial 1.12.3.1 Instalacion y uso de Eclipse para C 1.12.4 Presentaciones* Alfuomega SUE Ra eee et ee)| Pere bot u(r) FETE i de depuracian: 2 ‘© Analizar y resolver problemas contex- ‘tualizades, Competencias especificas Dominar los conceptos basicos de la programacién. Analizar problemas y representar su solucién mediante algoritmos. ‘Conocer las caracteristicas principales del lenguaje C_ Codificar algorifmos en el lenguaje de programacidn C. Compilar y sjecutar programas. CConstruir programas utiizande estructuras condicionales y repetitivas para aumentar su funcionalidad. Alfaomega ructuras basicas de conisal y légica slgorimica 2.1 Introduccion Enel capitulo anterice, estuciamas el teorema de la pragramacién estructurada que des- cibe tres estructures basicas de control con las que demuestra que es posible resolver ‘cualquier problema computacional. Eneste capitulo, estuciaremos las diferentes implementaciones que proves C para estas cestructuras ¥, ademas, analizaremes problemas con mayor grado de complejidad que hos permitran integrar tados los conceptes que incorporamos aio lamgo del Capitulo 1. En este caso, simplementa, haremos un breve repaso pars recordar que la estructura Secuencia consiste an sjecutar, secuencialmente, una accion simple detras de otra. Recerdemas. también, que se considera accidn simple a las acciones de beer, escribie, jasignar valor a una variable @ invecar a un madulo o funeién. Laestructura de decision permite decidir entre sjecutar uno u otro conjunto-de accianes fen funcién de que se cumpla o no una determinads condicién logics. En al capitulo anterior, explicamas ol uso-del if. Mas adolanta, en acte mismo capitulo, \veremos que existen obras estructuras selectivas como por ejemplo la decision miltiple (switch) yl inline. Comenceros par analzar un problema extremadamente simple. Problema 2.1 [Leer dos valores numéricos enteros e indicar cual es el mayor y cual es e! menor. Consi- darar qua ambos valores son diforontes. Analisis Los datos de entrada para este problema son los dos valores que ingresard el ususmio. ‘Nuestra tarea serd compararios para determinar cual es mayor y cuales menor, i enunciada dice que debemos conciderar que los valores erin diferentes. Por lo tanto, ara ruse andi la posed de que los valores sean iquales no sera tomada en Uamaremos 2 al primer valor y b al segunda. Para comparetios uilizaremos una es- tructura de decision que nos permitiré determingy si a es mayor que. Si esto resuita verdadero, enfonces = serail mayor y b serd el menor. De lo cantraro, ila condicion anterior resulta falsa, b sera ol mayor y 3 el menor ya que, como mencionamas més famba, 2 y © no serén iguales. Algoritmos a fonda - Ing. Pablo A. Sznajdkedar 2.8 Eniructura de decisian ar Po, 21 Compare cs vilresmumésacs, En ol algovitmo ubiizamos las variables mayor y senor. Una verquecomparamos 2 ‘con by determinamos cual es el mayor y cual es el menor, asignamos sus valores 8 ‘ste vale yong, mosaics mie corer El codigo fuente es siguiente: ‘Algoritmo’ a fondo - Ing. Pablo A. Sznajdleder Alfaomegs Alfuomega 2. Esinicturas basicas dei nimal_y togica algorimica Para resolver este problema. uflizamos una estructura de decisién que nos perritié de- terminar cual es el mayor valor. Luego. por descarte, ef otro 28 el menor. 2.3.1 Estructuras de decision anidadas Cuando en una estructura de decisién utilzamos otra estructura de dacisién, decimos que ambas son estructuras anidadas. En el siguiente problema, uilizaremos estructuras de decissén anidadas para determiner, entre tres valores numéicos, cul es el mayoe, jes el del mecio y cual es el mence Problema 2.2 Leer tres valores numéricos enteros, incicar cual es el mayor, cual es el del media y cusl, fl manor. Considerar que los tres valores seran diferentes. \Veamos primero el algaritma y luego lo analizaremos “harese ea valores” abe = Fo, 22 Compare wes vues y termina cues nC, recy menor Analisis Lzemos fs tes valores y comenzamos a compararpregurtand ei 22%, Siesto se ve- ries entoncas pregurtamos si =>= Si esto tambien aa verica entancae, coma =>! a>, no hay dudas de que a #5 el mayor. Luego tanemos que comparar b y c para ver oudl esta en segundo ¥ on farce lugar ‘Siresulta que 22> pero no se verifica que (@5 decir que c es mayor que a) sera porgua ces olmayor, > almacio y b almenor. Por atro lado, sino se verifica que 2>b preguntamas si boc. Si esto es asi, entonces el mayor sera © (ya que © ea mayorqu sy > eemayorque <) Preguniamos st =>c Y podremos decucir cual esta en sequnoy tercer gar Algoritmos a fonda - Ing. Pablo A. 8 2.3 Esiactura de decision Pra finalizes, ses falso que b>< entonces el mayor seré c, medio b ymenor =, codize usta es a! siguiente: 40 2. Esinicturas basicas dei nimal_y togica algorimica printf ("Mayort d\n" ;nayor) + Brint#(*Medio: d\n" medio) print ("Menor! Sd\o";menor) ; return } Para resolver este gjercicio recurimos al uso de estructuras de decision anidadas. El lector habra notado que, s medida qua anidamos mas estructuras de decision, resulta ‘mis eomplicado de seguir el cddigo fuente. (Quizes un mejor andiisis del problema hubiera sido e! siguionte: Si ab G4 a>c enionces el mayor es 2, el del media sera al maximo valor entre by y elimenor sera al minima valor entre estos. Sila condicién anterior no se veriica serd porque = no es.el mayor valor. Supongamos tanionces que b>2 << boc. En este caso, el mayor sara b los valores madio y menar serdn almiximo enize 2 yc yelminima entre 2 y c respectivamente, Siguiendo este ands, el algorimo podria plantearse de la siquionte manera: rma «= MAXIE.) menor « Mati) frrodia + MAxtin. mencr «mania. Fig. 23 Compurstes vom y termina suse manera y mance Para mplementar esta solucién, utlizaremos la estructura de selsccién en linea o f-ing. Aifuomega Algoritmos a fonda - Ing. Pablo A. 8 2.3 Extroctura de decision 2.3.2 Seleccidn en linea o if-inline Esta estructura implementa un if en una dnica linea de eédige y funciona ast resul condicion ? expresion!zexpresion2; Si condicion resulta verdadera el #-inine reterna la expresion ubicada entre al signo de interregacién y los dos puntos. Si cor: resulta falsa entonces el valor de re- ‘tomo serd la expresion ubicada inmedatamente después de los dos puntos, Por ejempic: sean las variables 2 y b enteras y cada una con un valor numético, ¥ 1a variable n=yor también enters, entonces: 2 btarb} // asigno « m pe Esta lines debe interpretarse de la siguisnte manera: si se vetifica que =b enfonces ‘elifinine retoma 2 fexpresin ubicada entre el signo de intermagecion y los das pun tos]. Sila expresién logica no se verifca entonces el valor de retome dal iHnlne sera b (expresion ubicada luego de los dos puntos), Elresultado del i-inine lo asignamos a la variable LUtiizando el inline podemos codificar la segunda versién del problema 22 haciendo (que sa mas legible al reducir|a cantidad ds “ifes” anidados. Hinclude eeaiel ‘char nombre[] = "Pablo"; int edad = 5 double altura = 1.70; printf ("ML nombre ef 46, tengo 44 anios y mids 4if metros.\n" ponbre redad altura) Aqui utlizares ol aperador de asignacién = para asignar el valor “Pablo” a la variable nombre. Esto solo se puede hacer al momento de defini la variable, Incluso, como no hemos dimensionado la cantidad de caracteres que el array nombre puede contener, G cimensionara el conjunto de caracteres con tants elemerios coma sea necesario para ‘mantener la cadena "Pablo" mds 1 para contenar el "\0" Receriendo al lector medificar el programa anterior dela siguiente manera: Algoritmos a fonda - Ing. Pablo A. Sznajdkedar

Vous aimerez peut-être aussi