Está en la página 1de 433
VCE OSM ELIA LCL con aplicaciones en Pascal, Delphi Y Visual Da Vinci 4 ya Vee E. aT) Giusti — eer mete Oelur Ter Universidad Nacional de La Plata RR Ing. Armando E. De Giusti Universipad NACIONAL De LA PLATA ~ CONICET Equipo del uo! (Laboratorio de Investigacion y Desarrollo en !nformatica) - UNLP Lic, Maria C. Madoz Lic, Rodolfo A. Bertone Lic, Laura C. Lanzarini .C. Gladys Gorga Ms Claudia C, Russo Lic, Raul Champredonde Algoritmos, datos y programas con aplicaciones en Pascal, Delphi y Visual Da Vinci Argentina » Bolivia» Brasil + Colombia » Corea Rica = Chile * Ecuador «El Salvador + Espafia + Guatemala » Honduras » México * Nicaragua » Panama » Paraguay + Perd» Puerto Rico * Republica Dominicana = Uruguay «Venezuela, 1 Progam dion Enrique Baumann Gereats de Divisins Esreban Lo Pret Disetio de tapa e interior: Diego Linares iastreci6n de taper Claudia Deleau para Lines®¢Color Producciss Laura G. Lago ~ Cristian RodsigueeTabscer Copyright © 2001 eeaRsoN EDUCATION S.A ‘Ax Regimiento de Patios 1959 (C1266AAB), Buenos Ace, Rep. Argentina PRENTICE HALL Y PEARSON EDUCACION som marcas de propisad de PEARSON EDUCATION S.A. ISBN: 987-9460-64.2 Primera Edicdn: Diciembre de 2001 Quela hecho el depésito que dspone la ey 11.723 Ee libro ne puede se seproducido cotal ni parialment en ningun forma ei por ningin medio o proced- imieno, ser eprogrico, feoeopia, microfilmacion, mimeogrfio o cualquier ouo sistema mecinco, fotoqul= rico, electénisa, informiico, magncico,clectodptico,etéera, Cualquier reproduccin sin el permiso pre vio por escrito de'a editorial viola derechos reservados, legal yconstiuye un del. Impreso en Beas por RR Donnelley, en el mes de diciembre de 2001. Rua Epiacaba 90 -Vila Arps todo alone qu han pasado por la etre Programacin de Compasadorst lead ia creaciin de a Lienianra en informésen dela Universidad Nacional de La Plt Eipeciaimante a aqualloraumnar han Wabajadey rabjan como colaboradores 'y auloresAd-Honorem an Programacin de Compuradat A todas los miembros del Laboratoria de lnesigacién y Desarll en nformiie (UD) "ue comparten con log sores el wabsjodaro de docenia«invesi@acion Prdlogo De la experiencia docente ai texto universitario Uno de los desafios mas interesantes de la actividad académica es tratar de escribir un texto Universitario destinado a intraducir conceptos basicos para la formacién del lector. Los autores, con una larga actividad docente y de investigacion en Informatica, han tratado ‘de superar ios limites de la simple transmisién de informacién, buscando iniciar en el lector- 4alumno un aprencizaje de los fundamentos conceptuales de cada tema Este objetivo nos ha obligaco a cambiar el estilo habitual de escritura de articulos “cientii- cos" por un planteo mas coloquial que conduzca répidamente a casos concretos que demues- ‘en en forma clara las noclones conceptuales de interés. Alo largo de més de doce afos, los autores han coordinado y dictado cursos basicos de Informatica en la Universidad Nacional de La Plata. Precisamente, esta experiencia se traduce lena seleccién de [os ternas, a organizacién y el enfoque de los mismas, [a eleccién de los fer= ‘guales de ejempiliicacién y las conclusiones de cada capitulo y del texto en general La elaboracién del libro ha demostrado, una vez més, lariqueza de Ia vétedra universitara fen la generacién de ideas. Los profesores-autores han repasado y ciscutido interactivamente ‘su enfogue para explicar cada uno de los temas seleccionades ante los aluminas y han tratado {de encontrar una sintesis escrita que reflejara del modo mas claro posible ol objetivo formati- vv0 buscado. ‘Alo largo de estos aftos los autores han realizado rumerosas publicaciones relacionadas ‘con la temtica del texto y han elaborado herramientas especialmente orientadas a un primer ‘ivel formativo en Programacién. Tal vez la mas destacada que se incorpora en la ejemplifica- cién de este libro es el ambiente y lenguaje Ge programacién Visual Da Vinci, actualmente uti- lzada en diferentes Universidadas del pais y del exterior. ‘Creemos que la elaboracién del texto en si ha actuado como un estimulo para formalizes y sintetzar los conceptos esenciales de un Curso inicial de Algortmica y Estructuras de Datos, ‘objetivo que supera el de au utiizacién en la cétedra de Programacion de Computadoras da la Facultad de Informatica de la une. La tematica y su inclusién en las carreras de Informatica Laintroduccién de los temas de especificacién y expresién de algortmos, combinados con ef tratamiento de las estructuras de datos basicas de los lenguajes de programacién, constituye €l nicleo de la mayoria de los textos iniciales de Informatica. En general, el paradigma de pro- ‘gramacién €8 procedural, con énfasis en la modulacién y la programacién estructurada, En ee aspecto, este libro sigue ia linea de With, buscando potenciar el tratamiento de os algortmos con las nociones de eficiencia-corracc'6n y, al mismo tiempo, extender los conceptos de tipes {de datos a tipos definidos por el usuario ytioos abstractos de datos. Entre jos aportes nuevos se cuenta con un Anexo dedicado al lengua y ambients Visual 1a Vine! a cual puede obtener bxemente an interna) y dos capitulos asociados con la pro- ‘ramacién orientaca a eventos y al ienguaje Desh, que tabi Se pueden completar con un curso especice ejempiicado que est cisponibe en internet. Objetivos, alcance y enfoque de este texto Este libro tiene tres ojes fundamentales: Ia especificacién y expresién de algoritmos, analizan- do su correccin y eficiencia; l tratamiento de estructuras de datos simpies y comouestas has- tallegar al concepta de tipo abstracto de datos, y la contextualizacion de la expresién de algo- ritmos en el ambito més amplio del desarrollo de los sistemas de software, es deci, de la Ingeniaria de Sofware, En ol enfoque se trata de combinar el tratamiento algoritmico con la sleccién de las estruc- turas de datos, sin dejar de lado aspectos requeridos por la Ingenieria de Sofware, como lo ‘son a documentacién y la reusabilidad, Para esto se ha elegido un lenguaje Désico de ejempi- ficactén como Pascal, combinandolo (segin el tema en tratamiento) con el lenguaje elemental tami’ de un robot mévil Visual Da Vinci y en los capitules finales con Delph (utlizado para la intro- duccién a la progremacién orientada a eventce}. Cuando ha sido necesario también se ha re ‘curido a Abs, para tratar de dar consistencia a los concepts con la herramienta de implemen tacién! 1 objetivo formatvo, basado en un enfoque concreto de casos que musstran fos concep- tos en la programacién de algoritmos, conduce a que en el texto se intercalen los temas pura ‘mente algortmices (estructuras de control, recursividad, eficiencia, verfcacién) con el trata- miento de diferentes estructuras de datos (estiticas, dinémicas, recursivas) tratando de resolver distintas clases de problemas en base a diferentes enfoques algoritmicos, con diferen- tos estructuras de datos: se trata que e! lector lumrio asimile el concepto esencial que un es ppecilista en Informatica debe ser un Analista del mundo real, capacitado para elegir aternati- ‘vas de solucion wilizando computadoras en funcién del probiema a resoiver, del contexto de dicho problema en el ambiert real, de los recursos disponibles y de las restricclones concre tas de implementacién de la solucién, La expectativa de los autores Los autores consideran que este texto (que es ura evolucién del material de cétedra que han ublicado desde 1996, incluyendo una primera versién del libro editada por la Fundacién Cien- cias Exactas) ¢s un aporte que naturalmente se enriquecerd con las correcciones, madificacio- nes, sugerencias y extensiones que propangan docentes y alumnos que lo utlcen. De ringin modo vemos el texto como algo defritivo 0 consolidad, sino como una expre- sién ordenada dea experiencia docente de los autores en un tema de formacién basica en In- formatica ‘Como todas las Ciencias, a Informatica tal como la hemos conocido y tal como la tratamos hoy, esta cambiando: la transformacién se refleja en las metodoiogias, herramientas, tecnolo- Sas e, incluso, en la formacién de recursos humanos en la discipina Por todo esto creemas que este texto est destinado a cambi zarse, acompaftando el cambio en la Clencie Informatica, ; a transformarse y actual- Ing. Armando E. De Glust! Ue. Maria C. Mado2 - Lic, Redorfo A. Bertone Llc. R. Marcelo Naiouf - Lic. Laura C. Lanzarni C.C. Gladys Gorga - Ms Claudia C. Russo ‘ic, Raull Champredonde Tabla de contenidos Capitulo 4 Conceptos basicos 1.1 Dafiniciones 1.2 Modelzacion de problemas del mundo real 412.1 Otros modelos conocidos del mundo real 1.2.2 La especificacién de los problemas del mundo real 1.2.3 La expresién de soluciones ejecutables en una computadora 1.8. Del problema real a su solucién por computadora . 1.3.1 Importancia del contexto 1.32 Descomposicén de problemas, Concepto de modularizacion 1.3.3 Concapte de algoritmo . 1.3.4 Las partes de un programa 1.4 Software 1.4.1 Etapas an ia resolucion de problemas con computador Conclusiones ns Capitulo 2 Aigoritmos 2.1 Estructuras de control 2.1.1 Estructuras de control bésicas 2.1.2 Estructura esquemética de un programa 2.2 Importancia de la documentacién de un algoritmo 2.8 Correcién de algortmos. Importancia de la verficacion 2.4 Eficiencia de un algoritmo 25 Descompasicién de problemas 2.5.1 Modularizacion .. 2.52 Alcance de los datos Conclusiones Capitulo 3 Tipos de datos simples 3.1 Tipos de datos 8.1.1 Tipo de dato numérico " 13 4 18 16 16 16 7 18 19 20 a 24 28 36 38 38 40 4“ 4“ 43 60 6 64 64 8.1.2 Tipo de dato l6aico 3.1.3 Tipo de dato caréctor 8.2. Constantes y variables... 82:1. Declaraciones 3.22 Asignaciones 3,8 Funciones predafinidas .. 3.3.1 Funciones sobre los tipos de datos numérico 8.3.2 Funciones sobre ol tipo de datos cardcter nu 84 Tipos ordinales 3.4.1. Funciones sobre tioos de datos ordnales. 3.8 Tipos de dates. 3.5.1 Declaracién de tigos 3.5.2 Tipos, asignaciones y subprogramas. 3.6 Tipos de datos definidos por el usuario 3.6.1 Tipo de dato erumerativo 3.6.2 Tipo de dato subrango 3.6.3 Tipo de dato conjunto .. 3.6.4 Tipo de dato string S822egeRssay Conclusiones Ejercicios Capitulo 4 Procadimientos y funciones. Parémetros 99 4.1 Subpragramas 0 médulos .. 102 4.1.1 Alcance de un médulo 103 4.2 Procedimientos 4.3 Funciones .. 44 Parametros 105 108 107 441 Correspondencia entre parémetros actuales y formales 107 4.4.2 Métodos para el pasaie de parémetros 7 108 4.4.3 implementacién da pasale de parémetros de Pascal ~ 108 4.4.4 lmplementacion de pasaje de pardmetros de Visual Da Virc 43 4.5 Variables locales y variables globales 118 4.8 Procadimientos y Funciones con pardmetros 114 Conctusiones 7 Capitulo 5 Ezstructuras de datos compuestas 119 5.1 Introduction 122 5.2 Registros 123 ‘52.4 Declaracién de registos 126 | ‘Acceso a los campos de un registro Anidamiento de registtoS ‘Operaciones sabre registros Lasentencia with 127 Declaracién de pies Operaciones sobre pllas 141 142 149 Deciaracion de colas 5.42 Operaciones sobre colas 555 Concepte de tipo defnide por el usuario. Extensions a pllas y coles Conclusiones nnn Elorcicios Capitulo 6 Datos compuestos indexados: areglos 153, 6.1 Clasifcacién de las estructuras de datos 156 62 Arrogios 181 6.21 Vectores 187 622 Matrices 187 6.23 Aneglos n-dimensionales 174 6.24 Artegios como pardmetros 176 6.3. Gomparacién de estructuras de datos arregio con pilaS Y COS eevnnnsnnnnnnn, 177 6.3.1. Resuitado de la ejecucién del algortmo anterior un 179 Conctusiones 180 Ejerccios tet Capitulo 7 Recursividad 183 74 Recursvidad 186 7.1.4 Aspectos a tener en cuenta en una solucien recursiva 186 7.1.2 Casos do estudio 188 72 Seceln de n roraa yi pla do actvacion yee onctusiones . 495 Fjorcices 195 Referencias bibiogrsicas 196 Capitulo 8 Andisis de algortos: concepto de efciencia 197 8.1 El concepto de efciencia 200 8.2 Analisis de eficioncia de un algortmo 200 . 201 83 Analisis de aigoritmos segin su tiempo de ejecucién 8.3.1 Qué medir? : . 83.2 Programas eficientes 8.353 Tiempo de ejecucién de un algortmo 204 8.4 Analisis de algortmos segun su aprovechamiento de memoria 208 208 2.5 Eficiencia en algoritmos recursivos ... sm . 86 Estmando el tiempo de ejecucién de un algortmo recursive 209 B.7 Algoritmo de BOSqUEdA runnin tn 210 8.7.1 Introduecién 210 8.7.2 Busqueda Lineal 212 8.7.3 Busqueda binasia . ata 8.7.4 Andlsis de los algortmos de busqueda 216 8.8 Algoritmos de ordenacién sn ‘8.8.1 Consideraciones generales BB2 Método de Seleccién .nernennnn 8.83 Método de intercambio 0 Bubujeo 8.84 Método de insercién 8.5 Anélsis de los métodos de orceracién elementales 8.8.6 Analisis del peor caso de los aigoriemos de ordenacién 89 Ordenacién por indices 230 8.10 Métodos de ordenacién eficientes 206 236 8.10.1 Sorting by Merging 8.11. Recursividad y eficiencia 285: CConclusiones . - 246 Ejercicios, “ ssn 248, Capitulo 9 287 250 251 254 258 259 261 Datos compusstos enlazados:listas, 4rboles y grafos 9.1 Ustas como estructura de datos 9.1.1 Punteros 9.1.2 Operaciones con lstas 18.1.3 Conelusiones sobre listas 92 Arboles 192.1 Representacion de aol binario 92.2 Conclusiones 23 Grafos 93.1 Representacion de Grafos 9.3.2 Buscando un camino entre Gos Vértices del a Conclusiones o Ejeccicios 268, art an el Capitulo 10 Intcoduccién a tipos abstractos de datos .. 273. 10.1 Abstracciones de datos o 276 102 Concepios sobre tipos de datos 276 10.2.1 Sistema de Tipos 10.3 Médulos, interfaz @ implementacién 10.4 Encapsulamiento de datos 10.5 Diterencia entre tipo de dato y tipo abstract de dato . 105.1 Ventajas del uso de 10 respecto do la programacion convencional 10:52 Fomas de abraccn: pos de doe aerate toe de oe igh. 281 286 10.6 Requerimientos y disefio de un to 287 Conctusiones 288 Ejercicios 288 Capitulo 11 Analisis de algoritmos se sn 11.1 Repaso a conceptos basicas del andlisis de algoritmos 11.1.4 Clasificacion de algoritmos ues 11.1.2 Andlisis de caso promedio y caso peor 11.2 Relaciones basioas de Recurrencia 112.4 Caso 1: Ley CN=CN-1 +N 11.22 Caso 2: Ley ON = CN/2.+1 11.28 Caso 3: Ley ON = CN/2. +N 41.24 Caso 4: Ley CN = 20N/2 +N 11.25 Caso 5: Ley CN = 20N/2 +1 11.3 Soluciones recursivas y no recursivas. 11.3.1 Caso 1: La sete de Fibonacci 11.3.1 Cas02 La construccién de una regia graduada 11.3.8 Caso 8: Construccién de un fractal 113.8 Caso 4: Soluciones recursivas y no-recursivas en el ejemplo de arbolas 289 292 297 298 11.3.5 Transformacién de soluciones recursivas en no recursivas. 310 11.4 Soluciones de algortmos con estricturas de datos estéticas 0 dindmicas 310 11.4.1 Colas: att 411.5 Analisis de algortmos no numéricos: tratamiento de stings 314 11.5.1 Algoritmo trivia! (fuerza bruta, “Brute Force") 315 11.52 Algoritmo de Knuth-Moris-Pratt 3i7, 11.5.3 Algoritmo de Boyer-Moore 321 Conciusiones 7 323 Referencias bibliogréficas 323 Capitulo 12 Introduccién al concepto de archivos 12:1 Conceptos Generales : 42.12 Tiempos de acceso .. 12.1.3 Archives 12.1.4 Administraci6n de archivos 12.1.5. Operaciones basicas sobre archivos 1218 Tees de tarzan yaceto «un achive 12.1.7. Manejo de butters 122 Operacionas basicas sobre archivos en Pascal 12.2.1 Declaracion de archivos. 122.2 Relacién con el sistema operative 12.2.8 Apertura y creacién de archivos 12.2.4 Clem de archivos 122.5 Lectura y esortura en archivos 122.6 Operaciones adicionales .. 12.3. Algoritmos clisicos sobre archivos . 12.3.1. Caso 1: Modificacién de datos de un archivo 12.3.2 Caso 2: Agregado de datos a un archivo 12.3.3 Caso’: Actualzacién deun archivo mato con uno varios archivo deta 12:3.4.Caso 4: El problema del “corts de contro!” tne 128.8 Caso 5: El problema de la unién de archivos (mero) 124 Eliminar elementos de un archivo . 12.4.1 Borrad fsico .. 12.4.2 Borrado légico 12.4.3 Estrategia de trabajo 125 Nociones Generales sobre bases de datos 125.1 Archivos secuenciales indlzados 125.2 Bases de datos 325 328 328 . 329 330 . 331 332 333 333 Conciusiones - Ejrcicios 359 Capitulo 13 Conceptos de metodologfas en el desarollo de sistemas de software 361 364 18.1 Ingenieria de Software 182 Ei ciclo de vida cisico de un sistema de software 192.1 Andlsis y Especficacién de Requerimientos 19.22 Disefo y especificacion del sistema 18.2. Coaificacion y verticacién de los médulos 364 365 365 365 | 19.24 Integracién y pruaba global del Sistema... 13.25 Mantenimiento del Sistema : 13.2.6 Tiempos y costes requeridos por las etapas del ciclo de vida 19.3 Especticacion, codificacion y prueba de aigoritmos 18.4 El método de refinamiantos sucesivos 185 La nocién de paradigma de programacion 186 Elrekdel especialista en software 137 Aspectos importantes de los sistemas de software. 18.7.1 Correccién 13.7.2 Veriicabilidad 18.7.3 Confiabidad .. 13.7.4 Efciencia, 18.7.5 Interiaz amigable .. Faclidad de mantenimiento .. Rausabilldad Portatilidad ve 12.8 Principios generals de la Ingenieria de Software. 368 . 367 368 . 369 369 370 370 art art amt amt 372 are Conetusiones Reterencias bibliograficas 374 Capitulo 14 Programacién orientada a eventos 975 14.1 Programacién orientada a eventos soe 878 Conctusiones: 383 Capitulo 15 Introducsién a la programacion en Delphi 16.1 Invoducciin 16.2 Naciones basicas 18.3 Propiedades y Eventos 15.4 Eventos y métodos 16.5. Esquema de un programa Delphi 18.8 El primer ejempio 186.1 Creando un nuevo proyecto 18.62 Ejecucién del programa 18.6.3 Incorporacién de componentes 18.6.4 Modificacion de propiedades . 18.6.5 Agregando reaccionas a eventos 395 18.7 Aspectos generales de las componentes de Delphi... evn 9B =) 390 301 392 392 393 . 394 18.7.1 Propiedades mas comunes 15.7.2. Eventos mas comunes 399 18.8 Entrada/salida en Dsiphi 18.8.1 Componentes basicos 400 18.82 Procesos predefinidos que perniten visualizer un sting: 400 18:9 Primer ejemplo utlizando entrada/salida .. 402 15.10 Manejo de excepciones. 404 18:11. Analizando la unidad que maneja el formuiario 408 15.12 Comparten earos Sus dl pret Sender att Conclusions nn os ev ata Conclusiones a5 Apéndice A a7 Apéndice B Apéndice C indice analitico Capitulo 1 Conceptos basicos TIOTTERAETI Conceptos basicos [_Objetivo En este capitulo se presentan algunas defniciones basicas que servirn de conceptosintroduc- torios. Muchas de ellas son conacidas total 0 parciaimente por el tector y se discutrén en el ccontexto més amplio de software y sistemas de software aplicados a la resolucién de proble- mas en ol mundo real. El je tematico gira alrededor del concepto de modelo como representacién del ambiente, los datos y los procasos en el mundo real y de la nocién de programa como expresién ordena~ {da, completa y correcta de la especificacién de una solucién (algoritmo) computable de dicho problema. ‘Simulténeamente con las defnicicnes rigurosas, se presentan algunos elemplos sencilos a fin de que! lector reflexione eabre al modo de abstraer un problema del mundo real, conver tito en un modelo computable y escribir una solucién simbélica del mismo. En particular, se trabaja con una méquina abstracta simple (robot mévil controlado por un conjunto elemental de primitivas de control) que permite modelizarrecoridos y tareas. studa el andlisis y resolucion de problemas utlizando La palabra ciencia se relaciona con una matodologia fundamentada y racional pera el estudio y resolucion de los problemas. En este sentido la Informatica se vincula especialmente con la Matematica y la Ingenieria. La resolucién de problemas utilzando las herramientas informaticas puede tener aplicacio- ‘es on areas muy diferentes tales como biologia, comercio, control industrial, administrackén, robética, educacién, arquitectura, disefo, etc. Los temas propios dela ciencia Informatica abarcan aspectos tales como la arquitectura f= sica y I6gica de las computadoras, las metodclogias de andlisis y disefo de sistemas de soft- ware, os lenguaies de programacién, os sistemas operativos, la inteligencia artificial, los sisto- mas de tiempo real, el disefio y aplicacién de bases de datos, etc. Definicn ‘Una computadora es una maquina digital ysincrénica, con cierta capacidad de cdlculo numér= 0 yldgico,controlada por un programa almacenado y con posibidad de comunicacién con el mundo axero. En esta definicién (que es incompleta y perfectible, pero sive a los fines introductorios de es- te capitulo) se establece que una computadora modema es esencialmente digital; esto signif- ca que las sefiales eléctricas que maneja, y la informacién que procesa se representa en forma rosamenta, proceso de analzar los problemas del mundo realy determinar on frma cara y cnereta el objetivo que so desea so denomina especiiacion, Especificar un problema significa establecer en forma univoca el contexto, las precondiciones ye resultado esperado, del cual se derivan las poscondiciones. Naturalmente, para tener especiticaciones univocas es deseable poder expresar los prebie- mas en un lenguale corecto, formalmente rigurosey que no permita matiplesinterpretaciones. Slempre se debe pensar qus el modelo dabe ser interpetado sin eres por un autémata,co- mo una computadora. Lo ideal seria poder reduciros problemas del mundo real aférmulas ma- tematicas, como en alguno de los modelos dela Fisica que hemos mencionado. Sin embargo tas areas de apicacin de la Informatica no skerpre fo permiten. Las aproximaciones serén no- taclones varlades (graicas,algebracas, urcionales, textuales) que Watarén de representa el andlss del problema en forma univoca, La calidad dea especificacién condiciona todo el proceso de desarrollo de soluciones por ‘computadora. Normalmente, el mundo y el lenguaje del usuario, quien utlizaré el programa de- sarrollado, son muy diferentes del mundo del espscialsta en informatica que desarrolla el pro- ‘grama. EI punto de contacto basico es of andlisis del problema y su traduccién desde ef mun- do real (usuario) al modelo abstracto que podrd resolverse sobre una computadora. La ‘exactitud con ia cual asta traduccién aproxima el modelo a los abjetivos del usuario condicio- 1a fuertemente al resutado final del sisterna. 1.2.3 La expresién de soluciones ejecutables en una computadora ‘Asi como la especificacién os fundamental para convertir el problema real en un modelo que Permit la utlizacién de computadoras en su solucién, la escrtura de un programa que repre- Sente Una solucién sjecutable constituye la piedra basal de la Ciercia de la Computacién, Este texto estara decicado primordialmente a la expresion de soluciones como programas. Se presento anteriormente que cada accién primitiva a ejecutar en una computadora cores- onde a una instruccién, y que cada instruccion debe tener un modo Unico de escribirse (sin- taxis) y un modo Unico de interpretarsa y ejecutarse (semantica) para poder ser utiizadas por una computadora. conjunto de instrucciones permitidas y definidas por sus regs sintcticas yu valor semén- tic, para la expresin de solucionesa problemas, consiuye un lenguaje de programacién. 1 ejemplo primario de lenguaje de programacién as el pequefio conjunto de instrucciones que ppernite al robot realizar recorridos por la ciudad, Este lenguaje se denomina Visual Da Vinci y 'e halla descrto en el Apéndice A, En adelante, los ejemplos de este texto sarén resusites utilzando diferentes lenguajes. La riqueza expresiva y la legiblidad de las primitivas de un lenguaje de programacion serdn muy importantes para escribir programas que respondan lo especificado. (6 1.3 Del problema real a su solucién por computadora La Figura 1.7 muestra los procasos analizados conceptualmente en los pérrafos anteriores: (Gon) ~ SOS. men oh * Para tagar al modelo, a partir del problema se debe realizar un proceso de abstraccién. * A partir del modelo se debe elaborar el andlsis de la solucién como sistema. Esto signi- fica una descomposicién en médulos y un estudio de los datos del problema, *+ Cada uno de los médulos debe tener un proceso de refinamiento para expresar su reso lucion en forma ordenada, lo que llevaré a construir los algontmos correspondientes. Es importante destacar que no siempre un problema puede tener una solucién algoritmica. * A partir de fos algoritmos se pueden escritir y probar programas en un lenguaje determi- nado y con datos representativos del problema. * Es importante comprender que llegar a un madelo no significa que el problema sea com- Putable, es decir, resolubla por computadora, + Por ejempio, se puede tener un algoritmo perfecto para calcuiar nomeros primos. De he- cho el lector podria seguramente escribir un programa para compputar un nimero finito de ‘numeros primos en un rango determinado. Sin embargo, si se quisieran calcular todos los rnumeros primos, no habia una solucién computable en un tiempo fiito. 1.3.1 Importancia del contexto El contaxto del problema real, (Por ejemplo, la ciudad en la que se mueve et robot o el modo de operacién en la atencién de clientes de un comercio) es muy importante para analizary di- sefiar la solucién utlizando computadoras. ‘Adomés, en muchas ocasiones el contaxto impone restricciones que son importantes para la elaboracién de ia solucién. Por ejemplo, si se esta estudiando el software de un calero automiétco, tener la respuesta a una consulta de saldo en menos de 10 minutos es un dato de Ccontexto determinant sobre el tipo de solucién aceptable, La caracterizacién del contexto es muy amplia, Por ejemplo, at ndmero de empleados que pueden eer atencidos simulténeamente, los clientes con diferente prioridad, la posiilidad de ‘pages con tarjetas de crédito, ol tipo y la cantidad de lineas telefénicas disponibles, atc, son datos que acomparan al modelo esencial del sistema y deben tenerse en cuenta antes de di- ‘sofar una solucién. 1.3.2 Descomposicién de problemas. Concepto de modularizacién En os pairafos anteriores se habi6 del pasaje del modelo general del problema a una descom- pposicién en subproblemas menores (médulcs}, que en lo posible deben tener una funcion bien definida en ol sistem: La modularizacién 0 descomposicién del modelo es muy importante y no solo se refiere a los procesos o funciones a cumpli, sino también ala distribucion y utlizacién de los datos de enivada y salida, asi como de los datos intermedios necesarios para alcanzar una solucién, ‘Se verd més adelante que un médulo de programa encapsuia una funcién y datos. Normal- ‘mente los datos que son propios del médulo serdn llamados locales y aquelios datos que de- ba recibir 0 enviar a otros médulos serén datos de comunicacién. Los datos que pueden ser cconocides y utlizados por todos los médulos de un sisterna se llaman globales. 1.3.3 Concepto de algoritmo ‘Se mencioné anteriormente la palabra algoritmo, de la que seguramente el lector tiene al me- nos una idea imprecisa. [Algoritmo es la especiicacién rqurosa de la secuencia de pasos (instrucciones) a realizar so- ‘bre un autimata para alcanzar un resua deseado en un tempo frit. Ena definicién precedente se utilizé la expresién especiticacién rigurosa afin de significa que ‘se debe expresar un algaritmo en forma unfvoca, es decir, que la sintaxis y la seméntica de ca- da instruccién deben estar perfectamente defnidas. ‘So utiiza el término autémata con un crterio generalizador dela palabra computadora. Se pueden ejecutar simbélicamente algortmos sobre cualquier automata, Sea 01no una computa dora slectrénica Gigltal. De todos modos, para el alcance de este texto aceptaremos una equi- valencia entre autémata y computadora. Alcanzar el resultado en tlempe frit significa que se supone que un algaritmo comienza y ‘texmina. Una generalizacién de esta definicién (por efemplo, para sistemas de tiempo real que no terminan ruinca, tales como el sistema de alarma mencionado precedentemente) cambya la terminologia “tiempo fita” por “niimero finito” de instrucciones. De todos modos, en este tex- ‘to se mantendra la nocion de principio y fin de los algoritmos, para simplificar ia demostracién de su correccién, 1.3.4 Las partes de un programa ‘Se ha discutido en los pairrafos precedentes los componentes basicos de un programa: instruc- clones y datos. Las instrucciones (que también se han denominado acciones) representan las operacio- es que ejecutard la computadora al interpretar el programa. Como $8 vio en las ejemplos an- terores, (y tal como se analzaré en capitulos posteriores), todos los lenguajes de programa- ‘ién tienen un cenjunto minimo de instrucciones que deben contener asignacién, decision iteracion, Puede demostrarse (Linger et al,1980) que un lenguaje con solo tres instrucciones: asigna- cién, decision ¢ teracion, permite escribir cualquier algoritmo, Los datos son fos valores de informacién de los que se necesita disponer, y en ocasiones transformar, para ejecutar la funcién del programa. Conceptusiments, por una parte se tienen dates constantes que no camiblan durante la ele- cucién del programa. Tal es ol caso del valor de ia fuerza de gravedad en los ejemplos de Fisi- a0 ol valor de la Avenida de destino (avenida 50} en el ejemplo 1.2. en) Por otra parte, se pueden tener datos variables, es decir, que durante la ejecucién del progra ‘ma pueden cambiar Por ejemplo, el contenido de a bolsa del robot o los objetos dapositados en cada esquina de la ciudad evolucionan dinémicamente con la ejecucion dal ejemplo anterior. Tanto los datos constantes como los variables deben quardarse en la memoria de datos de luna computadora. En ambos casos estardn representados simbdlicamente por un nombre que ‘se asocia con una direccién ‘nica de memoria. Por esto, el contenido de la direccién de me- ‘moria correspondiente a un dato constants se asigna una sola vez en los programas. En cam- bio, et contenido (valor) de la direccién de memoria correspondiente a un dato variable puede asignarse y cambiar muchas veces durante la ejecucién del programa. demas de datos e instrucciones, a leer un programa encontraremos comentarios, es de Gir, tens actaratorio para el programador o el usuario, que no es entendido ni ejecutado por la Computadora. Esta texto sive para clarficar qué hace e! programa, y seri de gran importancia Cuando se intente modificario 0 corregit. Una visién interesante de un programa es que corresponds a una transformacién de datos. ‘A partir de un contaxto determriado por las precondiciones, el programa transforma la infor- macién y debera llegar al resultado esperado produciendo Un nuevo contexto, caracterizado por las poscondiciones. 1.4 Software LLadefinicién de informatica dada en el niclo de este capitulo, abarca aspectos relacionados tan- to.con la estructura propia de las computadoras como con su programacién y contrl logico. Normaimente, los aspectos vinculados con la arquitectura fisica de las computadoras, las Comunicaciones entre computadoras y los dispositivos periféricas que ullizan se denominan hareware AA su vez, todo lo que se refiere@ la programacion biisica y de aplicaciones, de modo de dar na utlidad definida al hardware, se denomina software. Es interesante notar que a veces resulta muy dificil separar hardware y software. Por ejem- plo, el controlador de un lavarropas programable es una paquefia computadora, que contiene hardware y software (os programas predefinidos que el usuario selecciona}. Esta explca la fuerte vinculacion que hoy tienen la electrénica y la informatica. Esencialmen- te la electranica (uardware) prove ol cambio tecnolégico que impuisa el desarrollo dela infor- ‘matica pero, a su vez, los cambios de software (nuevos lenguajes, nuevos sistemas operati- vos, nuevos aigoritmcs) impactan en la concepcién de circultos y sistemas electrénicos. Nuestro interés on el texto eetard en el software y particularmente en el andlisis y disefio de ‘aigoritmos decicados a resolver problemas simpies. Para elo, se estudiarén las clases de es- tucturas de datos adecuadas para resolver los problemas. De todos modos, a fin de dar un marco al desarrollo y prusba de algortmos, dentro de la te rmatica generai del software y en particular de la Ingenieria de Software (Pressman, 1993; Gehani y MeGottrck, 1986) conviene repasar ordenadamente las etapas del desarrollo de una solucién 8 un problema del mundo real Que fue diseutido alo largo de este capitulo. 1.4.1 Etapas en la resolucién de problemas con computadora Andlisis del problema. En esta primera etapa, s@ analiza el problema en su contexto del mundo real. Deben obtenar- ‘se ls requerimientos dal usuario. EI resultado de este andlsis es un modelo preciso del am- biente del problema y del objetivo a resolver. Un componente importante de este modelo son los datos a utlizar y las transformaciones de los mismas que llevan al objetivo. Disefio de una solucién. ‘Suponiendo que ef problema es computable, a partir del modelo se debe definir una estructu- a de sistema de hardware y software que lo resuelva. En este texto, se hablard solo del siste- rma de software. El primer paso en el disefio de la solucién es la modulanzacién del probiema, 2 decir, la descomposicién del mismo en partes que tendran una funcion bien definida y da- ‘os propios (locales). A su vez, debe establecerse la comunicacién entre 10s médulos del siste- ma de software propuesto. Especificacién de algoritmos. Cada uno de los médulos del sistema de software tiene una funcién que se puede traducir en tn algoritmo. La aleccién del algoritmo adecuado pera a funcién del rédulo es muy importan- te para la efciancia posterior dal sistema de software, Como s@ vera alo largo del texto, una ‘misma funcién sobre los mismos datos puede resolverse con una utilizacién de recursos muy diferente (memoria, tiempo) segtin el algoritmo elagido. Escritura de programas. Un algoritmo 8s una especiticacién simbélica que debe convertirse en un programa real sobre tun lenguaje de programacién concreto. Este proceso de programacin tiende a automatizarse ‘ena medida que los lenguales algoritmicos se acercan a los lenguaies reales de programacion ‘Assu vez, 0 programa escrito en un lenguaje de pragramacién determinado (por ejemplo, Pas- cal, Ada, C, Java) debe traducirse (autométicamente) a lenguaje de maquina de la computado- +a quo lo vaya a ejecutar Esta traduccién, denominada compilacién, permite detectar y corre- Gir los errors sintécticas que se cometan en la eseritura del programa. Verificacién. Una vez que se tiene un programa escrito en un ienguaje real y depurado de errores sintacti- cos, se debe verficar que su ejecucién conduzca al resukado deseado, con datos representa- tivos del problema real. Seria deseable poder afirmar que el programa es correcto, més allé de los datos particulares de una ejacucién. Sin embargo, en los casos reales os muy difcil realizar tuna verificacién exhaustiva de todas las posibles condiciones de ejacucién de un sistema de software. La facildad de verfcacién y la depuracion de errores de funcionamiento del progra- ‘ma conducen a una mejor calidad del sistema y este es el objetivo central dela Ingenieria de Software (Gehani, McGetrick: Software Specification Techniques - International Computer Science Series, 1986). Nétese que un error de funcionamiento de alguno de los programas del sistema puede lle- var @ la necesidad de rehacer cualquiera de las stapas anteriores, incluso volver a discutir ios requerimientos. Alo largo del texto se discutiran problemas en los que se ha simpliicado la complejidad del mundo rea, a fin de tenerios practicamente analizados. ‘Se pondra especial énfasis en el disefio @ implementacion de soluciones, entendiendo por tales ia modularizacién, la eleccién de las estructuras de datos adscuadas y la especficacién de algoritmos que se conviertan en programas coneretas verificables. Técnicamente es fo que ‘se denomina programming in the small. Los algoritmos que se analizarsn serdn bésicamente orientados a control, lo que normalmen- te se denomina programacién imperativa, el lenguaje bésico de elemplficacion sera Pascal Ei capitulo 12 abre la discusién sobre paradigmas de programacién alternativas ala progra- ‘macién imperativa, tales como la pragramacién funcional, la programacién ldgica y la orienta- cid a objetos. No s@ discute en ol texto la posiblidad de descomponer algoritmos en proce- 308 que se pusdan ejecutar concurrentemente sobre diferentes procesadores (Andrews, 1991) [Nuestro modelo de computadora se corresponderd con un procesador Gnico que sigue el @s- {quema de la Figura 1.1 y quo 0s controlado por una secuencia de instrucciones de acuerdo al funcionamiento explicado en la seccién 1.1 Conclu: ‘Se han presentado algunas definiciones basicas, que sirven como conceptos introductorios a resto del texto, nes Elector debera asociarinmediatamente el proceso de desarrollo de software con el proce: 20 de refinamiento y abstraccion que abarca desde el problema real hasta su solucion algort- mica con un lenguaje de programacién. En las referencias bibliogréficas se presenta una visién ampliada de los conceptos presen- tados en este capitulo. Capitulo 2 Algoritmos Agorimos RTT, 1 Objetivo En este capitulo se parte de la definicién de algortima como especificacién ordenada de la so- lucien a un problema del mundo real El ee terdtico esté centrado en las estructuras de control que permitirén expresar la se- ‘cuencia de decisiones y de érdenes a ejecutar por una computadora en la solucién de un problema, Asimismo, se introducen los conceptos de modularizacién o descomposicién de un proble- ‘ma como un mecanismo de reduccién de la complejidad y simplificacién de la tarea a resolver; de docurrentacién de algortmos como un requerimiento para permitr soluciones que se pue- ddan comprender y mantener en al tiempo; de eficiencia como una medida de la performance det algoritmo elegido y de correccién de los algoritmos en la busqueda de soluciones que respon ddan a los requerimientos det mundo real Por citimo, partiende del concepto de datos simples y de variables vistos en el primer ca- pitulo, se trabaja sobre la nocién de localidad de las variables en un programa 0 médulo de programa, [| 2.1 Estructuras de control En ot capitulo 1 se defnié algortmo como la especiicacién rigurosa de la secuercia de pasos (ns- trucciones) a realizar sobre un automata para alcanzar un resultado deseado en un tiempo fino Las inetucciones representan las operaciones que ejecutard la computadora al implemen- tar elalgortmo. Estas instrucciones utlizan cera nformacién en forma de constantes o varia bles, que 80 denominan datos, Todos los lenguajes de programacién tienen un conjunto minimo de instrucciones que per- rmiten especiicar el control propio del algortmo que se requiare implementar. Este conjunto mi imo debe contener estructuras para la asignacién, decision @tteraccién. 2.1.1 Estructuras de control basicas 24.11 Secuenci La estructura de cantrol més simple est representada por una sucesién de operaciones (por «i. asignaciones, donde asignar significa aimacenar valores constantes 0 variables), en la que el orden de ejecucisn coincide con el orden fisico de aparicién de las instrucciones. La Fig. 2.1 muestra el esquema de una secuencia (por lo que se denominan estructuras s8- ‘uenciales), que en algunos lenguales de programacién se suele encerrar entre las palabras claves begin y end para indicar el comienzo y fin de la misma. y Mover ¥ a poster Papal (eer Por ejemplo, un recortido en el cual el robot del Visual Da Vinci comienza desde a posicién (1,1) ‘con flores y papeles en su bolsa, da un paso, deposita una flor, deposita un papel, da otto pe- 50 y luego se detiene, se puede realizar mediante una Secuencia como la siguiente: ‘Fl robot esta ubicado en ia esquina (1,1) ‘En su bole tiene flores y papeles Poscondiiones * Elrobot se encuentra en a asquina (1,3) * n su bolsa hay una flor y un papel menos {EL robot estd ubicado en (1,1) y en su} { bolsa tiene flores y papeles } programa uno aniclar dopositarrior dopositarpapel fin { EL robot se encuentra en (1,9) ¥ 2 {en su bolsa hay una flor y Un papel menos } 2.1.1.2 Repeticion Una extension natural de la secuencia consiste en repetirn veces un biogue de acciones. ‘Se considera que el nero de veces que se deben ejecutar las acciones es fjo y conoci- do de antemano. La Fig. 2.2 muestra ol diagrama esquematico de la repeticion Ex ‘ie retneconas = Figura 22 Bo 0 REE En ol ejemplo anterior, si ol robot debe repetir 10 veces las acciones de: avanzar, depositar una flor y depesitar un papel (suponiendo qus tiene suficientes papeles y flores en su Do'sa),a par- tir do (1,1) resultaria el cSdigo dal ejemplo 2.2: 22 Precondiciones ‘+ E1 robot tene al menos 19 flores y 10 papsles en su botsa + Estdubicado en (1,1) Poscondiones + i la bolsa ahora tiene 10 flores y 10 papees menos ‘+ Est ubieado en a esquina (1,11) { £1 ropot tiene al menos 1@ flores y 1® papeles en sus} { bolsas y esté ubicado en (1,1) + pregeana 00s conenzar intelar repetir 10 . aepositarFior depositarrapel fin { En lag bolsas ahora tiene 1@ flores y 10 papeles moras, } {y esté ubicago en (1, 11) , Para esta estructura la sintaxis comtinmente utilizada Bor los lenguajes de programacion os la siguiente: Caigo For indice := valor_inicial to valor_final do Acciones End do En ol ejempio 2.3 se muestr su implementacion, considerando que la variable A ee de tipo entera. Fjemplo 23 { Contador es una variable de tipo INTEGER } A= 100; for Contador :# 1 to 18 do AIA + 2 Imprinir(a); {A contiene el valor 120 } ‘Algunas consideraciones generales de la estructura de control For son: ‘+ For, tos do y End do son palabras clave del lenguale. Hay que defnir contador como tuna variable que se incrementa en una cantidad constante. * Indice ¢s una variable de tipo ordinal (tal como contador en el ejemplo anterior) que permite controlar el nimero de ejecuciones del cicio. + Valor_insesal y Valor_Final son valores que indican oo los limites entre os que va- ria indice al comienzo y final del cicio. Se debe notar que Valor_Final - Valor_tnicial + 1 indica el nimero de veces que se ejecuta ol ciclo. * Estd implicito que en cada ciclo la variable indice toma ol valor siguiente de acuerdo al t- o ordinal asociado a dicha variable. En el ejemplo, el incremento es 1. Se veré que en los diferentes lenguajes de programacién se puede modificar este incremento o hacer rnegativo. De todos modos, conceptualmente la variable indice se actualiza en cada ci- clo y se testea respecto al valor final deseado, * Dentro de las Acciones del ciclo no es posible modificar la variable indice. Al terminar ciclo, la variable indice no tiene un valor definido (su uilldad se imita ala estructura de repeticin} (tres ejemplos: { Este bloque se ejecuta 8 veces } { Se supone Indice como una variable CHAR } for Indice := ‘A’ to 'H! do begin ‘Acciones; eng; Te eS finenvinait! G Fjempio 25 — —] { Este bloque se ejecuta 2 veces » { Se Supone Indice como una variable BOOLEAX } for Indice := FALSE to TRUE co begin ‘Acetone: ena Fjemplo 26 { Este bloque NO se ejecuta + { Se supone Indice como una varsable INTEGER } for Indice :* 20 to 18 do begin ‘Acetone: end 24.1.3 Decision En un algoritmo representativo de un problema real es précticamente imposible que las instruccio~ ‘es sean secuenciies puras. Es neceserio tomar decisions en funcién de los datos del problema. La estructura bésica de decision entre dos alternativas es la que se representa simbdlica- mente en fa Fig.2.3. ato Erauar Swe condi, ee [Ss proossan ie mavecona] 'e proceman ls reiucconae ‘iin atamats asa ble aera verdacers = Figua23 La sintaxis comun para esta estructura en los lenguajes de programacién es la siguiente: Tf (condicién) then ‘Acciones_por_Condicién_Verdadera ; Else Accsones_por_Condicion Falsa ; Eng it ‘+ If, then, else y End 1¢ son palabras clave del lenguaie. 0 MBAR Oia * Condicién es una expresién que al evaiuarse devuelve un valor ligico TAUE o FALSE pa- ra tomar la decisién. Por ejemplo: Se tonen 3 variables enteras A, 8 y Min y se desea asignar en la variable Min el menor de los valores entre A y B. En el Ejemplo 2.7 se puede ver su implementacién. (A,B, Min son vardables INTEGER af Ac B then Min = A else Min := a) {Min tiene el menor valor entre Ay 8 } Utitzando el ejemplo 2.2, eunéngase ahora que el robot debe recoger un papel en cada calle impar a partir de (1,3); en caso de no poder hacer'c deb depositar otra flor. El segmento de al- { Se dove inicializar 12 variable Suna } (Engrese un aomero entero: *); (La variable Numero toma el valor que luego se utiliza para evaluar Ja condicién por primera vez } feag(Nunero) ; woile Numero’ <> 0 do begin ‘Suna: Suma + Nunero; lirsteln(’Ingrase un numero entero: *): {la variable Numero tosa otro valor que utiitzara como nue condietén } Read (Numero) ends festeln( "EL resultado de la sume es: Fjempio 2.13 Supdngase que el robot debe recoger todos ls papeles dela esquina donde se encuentre ubl- ado, a solucién podria escribir como sigue: + Suma) Precondicin + Elmo Poscandiién + No hay papeles en la esquina (10,10) venta ubicado ela esquina (10,10) {EL robot se ubica en la esquina (10,10) } prograna cinco iniciar Pos(1@, 10) mientras HayPapelEnLagsquina omarPapel fin {No hay papeles en la esquina (10,10) } Este ciclo termina cuando en la esquina no hay més papeles En cuanto a las estructuras poscondicionales, primero se ejecuta el bloque de acciones, lu {go se evalia la condicién y, si es falsa, se ejecuta nuevamente el bloque de acciones. A di ferencia de la estructura iterativa anterior, ol bloque de acciones se debe ejecutar 1 0 més veces. Notese que, en este caso, el bloque de accién se ejacuta antes de evalua la condi cién, por lo tanto se lleva a cabo al menos una vez. La Fig 2.6 muestra el esquema corres- ppondiente, ‘a sjactan la aston Conseponcientes ‘Supéngase que se desea procesar una sacuencia de nimeros para obtener su suma.Dicha se- ‘euenca termina cuando ge ingrsa el nimero 23, que también debe ser procesado, Precondicin * El primer nimero es aistito de 0 Posconcicion ‘+ Se obtiene la suma de fos nimerosingresados { En la variable Suma se guarda el resultado de 1a } { suna de 10s nuneros ingresados > {Se debe inicializar 1a variable Suna en @ # una := 0 repeat writeln("Ingrese un numero entero: *); Read(Nunero) ; guna = Suna’ + Nunero; until Nunero = @; Viriteln("El resultado de la suna es: ', Suna); {En Suma se acumula 1a suma de los nuimeres leidos } Stel robot debe recorrr la avenida 1 hasta enconzar una esquina que tine exactarnente Sfo- res, densitando todo ef contenido de a olsaen fa esquina siguiente del recorid, se podria escribir a siguiente solucén: Procondiciones. ‘El robot est ubicado en la asain (1,1) > Evla.avenida 1 existe una esquina con § flores. Poscondiion + Bl mobotenconté una esquia con 5 flores. { EL robot esté ubicado en la (1,1). > { La esquina seguro existe y es anterior a la calte 100 } prograna Seis variables Flores: nusero ‘conenzar ‘shietar mientras Flores © & Flores :="0 mientras HayFlornLaésquina Flores := Flores + 1 tonarFlor aientras HayFlorEnLaBolsa depositarrior fin {EL robot encontré una esquina con 5 flo 2.1.2 Estructura esquematica de un programa ‘A continuacién se presenta un caso que plantea la estructura esquematica de un programa, si- ‘quiendo para ello la sintaxis det lenguaje Pascal Program Tdentificador; { seccién de deciaracién de datos) Var idt: tipo; Sa: tips { seccign de Sentenciae esecutables? begin end. 0 ARMAS Donde Program, Var, Seginy End son palabras claves: * Program indica el comierzo de un programa. + Identificador es el nombre que se le dio al prograrra, + Var indica la seccién de declaracién de los datos variables a vilizar en el programa. Es- ta seccion se extiende hasta la palabra begén. Begin indica el cornienzo de la secci6n de sentencias ejecutables del programa, Esta seccién se extiende hasta la palabra enc ‘+ End, indica el fin det programa, + Los comentarios se escriben enire llaves en cualquier parte del programe, E siguiente algortmo permite calcula a superficie de un terreno a parr de sus cmensiones, Precondicion + Las longitudes del terreno son dstintas de 0 Poscondicén ‘La variable superficie contion el valor dl drea del tereno { Este programa calcula 1a superficie de un terreno } { Las longitudes del terreno son distintas deo} progras superficie; (Secoién de declaracién de variables ) Ladoi: integer; { longitug de un lado del terreno} Ladoa: integer; { langitua de otro lado del terreno } Superficie: integer; { representa el area del terreno} begin { Seccién de instrucciones ejecutables } Writela( "Ingress 1a longitud de un lado Reactn(Ladot); lirieeLo( 'Ingrese 1a longitud de otro lado: °); ReadLn{tado2); {calculo de La superficie } Superficie := Lado! * Lado; ( Salica del resultado } Weiteln( ‘La superficke Gel terreno es: *, Superticie): ons iH {E)_2.2_Importancia de la documentacién de un algoritmo [Un programa bien documentado sera més fécil de leer y mantener. Pars ello la documentacién ‘8s fundamental. Es comin que la mayoria de lo lenguajas de programacién provean algin me- caanisme de documentacién, por ejemplo, através dela insercién de comentarios en el progre- ra. Un programa sin comentarios revela un estilo de programacién pobre y peligroso, ya que difcutta el mantenimiente adecuado del mismo. Es recomendable utilizar un comentatie general para el objetivo del programa o del médu- lo de programa en cusstién, que refleje la especificacion del problema a resoiver, de la forma ‘més completa posible, Su lactura debe ser suficlente para poder entender las acciones que se llevan a cabo en el mismo, Adems, deberdn dascribirse todos los datos variables y cons: ‘antes que intervengan en el programa, e indicar la fecha de realizacién del mismo, el autor, te, Por ora parts, se deberdn elegiridentificadores de manera tal qUe sean autosxplicativos. En ‘wwanto a 108 comentarios intercalados en el programa (decumentacién on-line o interna}, de- bben realizarse con cierto criterio, pues deben contribulr a la claridad del programa; por ejam- Plo, @s importante comentar el estado inicialy final entre las acclones de una determinada se- Cusneci, los efectos colaterales probables que puedan tener lugar luego de una llamada a un médulo, ete. Es importante destacar que cuando se realiza #l manterimiento de un programa no solo ¢® actualiza e! cédigo, sino también los comentarios del misma. Debe quedar claro que los co- ‘mentarios no son un agregado al programa, sino una parte importante del mismo. {E._2.3 Correccién de algoritmos. Importancia de la verificacion Un programa es correcto cuando cumple con su espectficacion, esto significa que cumple con los requerimientos propuestes. Para determinar cusles son e803 requerimientos se debe tener luna especificacién completa, precisay libre de amibigUedades del problema a resolver antes de escribir el mismo. Una de las formas para saber si un programa 8 correcto consiste en orobar con un juego de datos reales que permitan determinar que cumple con su especificacién. Detido ala impor- tancia de la verficacién de los programas las tacnicas empleadas evolucionan en busqueda de mayor eficiencia. Este campo de investigacién se actualiza constantemente en la Ciencia de a ‘Computacién. ‘Supongase que o obot debe vavar su bolsa de flores Gepositando una for en cada una de as esquinas de la cudad. A continuacion se prosenta fa solucion a dicho problema. Precondicién +] robot estéubicado ont esquin (1,1) {EL robot esté ubicado en la esquina (1,1) } prograna Siete ientras HayFloréntaBolsa ‘Sepositartlor fie {Pero esta solucién es siempre correcta? La respuesta es no. Y une de las razones surge ante la pregunta: zqué ocuire si en la bolsa hay més de 100 flores? [Una solucién correcta, utiizando las mismas precondiciones, seria jemplo 2.16 prograsa ocho Variables Pasos: numero mientras HayFlorgntaBolsa Pasos := 0 sientras KayFlorEntagolsa & (Pasos < 99) depasitarFlor Pasos := Pasos + 1 si Fasos = 99 derecha, derecna tntormar(Posav, Posca) tin (D 2.4 Eficiencia de un algoritmo ‘Alo largo det texto se verd que se puaden tener varias soluciones algoritmicas para un mismo problema (por ejemplo, para encontrar el menor valor de una lista de numeros o para que el ro- bot vaya de un punta @ otro dela ciudad). Sin embargo, el uso de recursos (tiempo, memoria) para cada una de esas soluciones puede ser muy diferente, Definicon ‘Se define ala efclncia como una métrica de calidad de fos algoritms, asociada con una utl- [zac Optima de fos recursos del sistema de cémputo donde se jecutard et algoito jemplo 219 ‘Supéngase que el robot debe ir desde a esquina (1,1) ala esquina (21,1). Un rcorrido posible ‘consist en recerer i calle t desde la avenida 1 ala avenida 21. Para este record la solu- on seria, Preconciciéa | + El robot estéubicado en ia esquina 1,1) | Postcondiciones + robot est ubicaco en la esquina (21,1) + Caminé 20 cvacras {El robot esta ubieado en la esquina (1,1) > progeana Nuave conenzar iniesar derecha reper tin {EL robot estd ubicado on 1a esquina (21,1) } {El robot caminé 20 cuadras } 20 tro recorride posible es el que se muestra en la Figura 2.7, ea [ oo) a ew Precondicion + Bl robot estéubicado en la esquina (1,1) Poscondicion + Ei robotestéubicado en fa esquina (21,1) y caming 40 ovadras| {EL robot esté ubicado en 1a esquina (1,1) } progeasa oie anieiar Gerache repetir 10 repetic 3 ‘derecha repetir 2 Gerecha Pepetic 2 derecha tin { EL robot esté ubicado en 1a esquina (21,1) } : {El robot camin6 40 cuadras ‘Obsérvase quo en amibas soluciones e! robot llega a la esquina (21,1). En la primera solucién camina 20 cuadras y en la segunda solucién carina 40 cuadras. {E25 Descomposicién de problemas 2.5.1 Modularizacién Hasta aqui se han analizado los algoritmes y los programas que den solucién a problemas sim- ples y breves. Sin embargo, se podra obsorvar que, en general, los problemas del mundo real ‘Son mas complejos y extensos. En algunas ocasiones, por ejemplo, una solucién ya implemen tada deberd modificarse para satistacer un nuevo requerimiento. Es por allo que se deben con- siderar algunas herramientas para facitar la resolucion de tales problemas. Algunas de estas herramientas tienen que ver con la abstraccién y con la descomposicion de los problemas a re- solver. La abstraccién permitira representar los objetos relevantes en el dominio del problema, y la descomposicién es una técnica que se basa en el paradigma: “Divide y vencerds’. La des- ‘composicién tiene un objetivo: dvdir cada problema en subproblemas y estos, a su vez, en subproblemas mas pequefis y asi sucesivamente, Cada uno de los subprobiemas finales re- suitard entonces més simple de resolver. Cuando se realiza esta descomposicién debe tenarse en cuenta que cada subproblema es ta en un mismo nivel de detalle, que cada uno se puede resolver independientemente de los dems y que las soluciones de estos subproblemas pueden combinarse para resolver el pro- ‘blema original. El método de disefto descendents (Top Down) se 1o conoce también como modularizacién yes importante para lograr un buen disefio de los programas. Esquematicamente se la repre ‘senta en la Figura 2.8 Problema Orginal i l famasen] [sepatows] [Riscews] [Ramanmo] [Sanncwes| ey acca Figure 28 2.5.1.1 Importancia de la modularizacién Por qué es importante une bueria modularizacién? EI Conocimiento humano, ‘Algunas investigacionas acerca de la cognicién han demostrado que existe un limite en cuan- ‘0.2 la cantidad de informacién que ura persona puede tener en su mente a la Vez, y que esa ccantidad es de 7 +/- 2 piezas de informacién. También demostraron que naturalmente la per’ ‘Sona tiende a entender un problema de caracteristicas compleias "partiendo” o “trozando” la informacién. Es decir, mientras la persona puede tener 7 u 8 piezas de informacion en.mente 2 Javaz, cada una de estas piezas, puede ser parte de otras 7 u 8 piezas distintas, estabiecién- dose de esta manera una relacién jerdrquica, En consecuencia, para comprender un problema ‘complejo del mundo real es nécesaro diviit y subdividi, 0 sea: modularizar. Trabajo en equipo. ‘La modularizaci6n favorece e! trabajo en equipo ya que los productos de software complejo necesitan més de una persona Para poder realizar el disefo, la codficacién y la correccién de los mismos. i ee Por ejampio, un programador normalmente trabaja desarrolando una parte del cédigo (a _gunos médulos) desconociendo el resto del trabalo. ‘Como el programa esta modularizado, cada programador recibe las especificaciones de la tarea a realizar y las restriociones con las que debe mansjarse. Mantenimiento del programa. Esta actividad involucra basicamente dos tareas: corregi los errores y modificar el oddigo. A menudo, los errores pueden ocurrir antes de que el producto de software esté terminado 0 bien uaden ser descubiertos mas tarde, es decir, cuando el producto ya se esti utilzando. De to- {dos modos, estos errores deben ser identiicados, ya que se deben encontrar las causas y el Ccédigo correspondiente debe ser corregide. Como es usual que se ealicen cambios al softwa- ', por ejemplo, para el agregado de nuevas funcionalidades, esto también lleva a modificar el ccécigo existente, La experiencia demuestra que e! costo de mantenimiento en un cédligo que no ha sido apro- piadamente modularizado es muy alto, En cambio, el costo puede reducirse si ol cédigo est bien modularizado dado que el tiempo requerido para entender el programa y luego modticar- oes notoriamente menor. Coro problema comin cuando se realiza el manterimiento de un programa es tener en cuen- ta los side effects (efectos colaterales), los que aparecen al cambiar el cécigo para satisfacer clerta necesidad producen efectos no deseados en otras partes del programa. Las causas de {estos efectos y cémo preveritos se verdn més adelante Importancia de la reusabilidad del eédigo. La idea basica es muy simple: cada vez que s@ crea un nuevo programa es deseable, de sor posible, hacer uso del cSdigo que ya se ha escrito. Esto es posible si se complementan solu- Clones bien modularizadas. 2.5.1.2 Médulos de un programa Un buen disefio de programa significa, entre otras consideraciones, que un problema sea des- compuesto en un nimero de subproblemas, que se denominarsn a partir de aqui médulos. Ca- {da médulo tendré, entonces, una tarea especifica bien defiida y se comunicaran entre si ade~ cuadamente para conseguir un objetivo comin. [Un médulo es simplemente un ‘trozo de cédigo”, 0 un conjunto de instrucciones mas un Cconjunto de definiciones de datos que realiza una tarea ligica. En el robot, cada uno de estos médulos de programa se denomina proceso. Volviendo al ejemplo del robot: se desea que el robot realice recorridos en escalera, reco ‘glendo todos los papeles que encuentre. La primera escalera comienza en la esquina (1,1) yf naliza en la esquina (10,10), La segunda escalera comienza en la esquina (3,1) y finsiza en la cesquina (10,8), La tercera escalora comienza en la esquina (5,1) y finalza en la esquina (10,6), y asf sucesivamente, En todos los casos cada escalén debe ser de una cuadra, debe informar para cada recorrido en escalera la cantidad de pasos dados, y por ultimo la cantidad de pape- les recogidos e todo el recomido. Se debe notar que existe un conjunto de soluciones, donde solo la titima saré realmente ‘operativa en ol ambiente Visual Da Vinci, Desde un punto de vista diddctica se trata de mejo- rar el esquema del programa teniendo en cuenta aspectos de la modularizacién, y luego de va- riables locales y pardmetros, hasta llegar a la solucién deseada El algoritmo resultante se presenta asi: + Elrobot esti en{t.1}erentado hacia el note Poscontiionas ‘© robot queda posiclonad en (10,2), rientado hacia el nate + Cuenta la canticad total de papeles en todo e! recorido { EL robot estd en (1,1) orierade nacia el norte } programa Recorrido Neriables Escalones: numero { Indica la cantigad de escalones de cada ecorrido } Papeles: numero {Indica la Gentidad de papeles de cada recorrida } rumero { Indica la cantidad tot: todos 10s recorrides } Aveniga: numero { Indica 1a avenida en 1a que comienza el revarcido } | | Totaiapele: Pasos: numero { Indica los pasos dados en cada racorrido } de papeles se ialetar { inieializar las variables (1)} Escalones := 9 Totalpapeles := @ Aveniga := 1 {Hacer los 5 recorridos } repetir § { Racer una escalera contango 1a cantidsd de papeles (2)} Papeles := 0 Pasos := 0 ‘conarPapel Papoles := Papeies + 1 Pasos := Pasos + 1 derecha inientras HayPapelEnLaésquina torareapel Papeles Pasos repetir 3 ‘erect . { duntar los papeles de 1a dltina esquina del recorrido } Papeles + 1 Pasos + 1 Sientras HayPapelEnLazsquina ‘comarPapel Papeles := Papoles + 1 { Intornar La cantidad de pasos encontragos } Intormar (pasos) | { Increnentar total de papeles del recorrido (3)} j TotalPapelea := TotalPapeles + Papeles ( Aeposicionar al robot y actualizar cant: | Avenida := Avenida + 2 Pos(Avenida, 1) Escalones = Escalones - 2 { Infornar la cantidad total de papeles del recorrido completo (5)} | Informar(TotalPapeles) jad de escalones (4)} repetir Escalones ientras HayPapelénLagsquina { El robot queda posicionado en (10,2), miranda hacia el norte y en} { TotalPapeles tiene 1a cantidad total ve papeles de todo @} recorrico } ‘Se puede observar que en este programa hay cinco médulos (numerados a continuactén de los comentarios). primero obtiene los datos iniciales para realizar el recorrido. Una vez obtenida esta informacion, e! segundo realiza el recorrido en escalera, contando los papeles encontra- dos y la cantidad de pases dados. Luego, se puede actualizar la cantidad total de papeles del recorrdo. En el paso siguiente se posiciona al robot ¥ se recalcula la cantidad de escalones ppara el nuevo recorrido y, por timo, se informa la cantidad total de papeles encontrado. Si bien es cierto que este programa resulta corto y simple de resolver de manera linea, 25 aconsejable utilizar los Deneficios de la moctuarizacion referenciacos al principio del tema. Pa- ra reffejar una solucién modularizada se proponen cinco procesos, uno para cada médulo de acuerdo a la Figura 2.9 [ [sate cxaea | | Premera | | pecacuar Fst Fgura 29 ‘Se puede escribir, entoncas, la siguiente solucién: { EL robot estd en (1,1) orsentado hacia el norte } programa Recorrido variables Escalones: numero { Indica 1a cantidad de escalones de cada recorriso } Papeles: numero { Indica 1a cantidad de papeles de cada recorrico } TotalPapeles: numero { Ingica 1a cantisad total de papeles o@ todos los recorridos } Avenida: numero {Indica la avenida en 1a que conienza el recoreigo } Pasos: numero {Indica 10s pasos dados en cada recorrido } procesos proceso Inieiatizar ‘calones TotalPapeles Aveniga i= tin proceso Tequierda repetse 3 aerecha gfe) fin proceso IncrementarTotal fin proceso Recalcular fin proceso MostrarResultado fin comenzar { programa principal } Tnicializar repetar 5 Recaleular MostrarResultado rege feelers | Papeles := 0 Pasos :+ 0 repetir Escalones inientras. HayPapelEnLagsquina ‘owarrapel Papeles := Papeles + 1 Pasos := Pasos + 1 gerecna mientras MayPapelértaésquina ‘conarPapel Papeles Pasos := Pasos + 1 Tzquieréa {juntar los eapeles de a ultina esquina del recoreido inientras HayPapelEnuaésauina ‘tomarPapel Papeles := Papeles + { Infornar la cantidad de pasos dados } Informar (Pasas) Papeios + 1 ‘otalPapeles Totaipapeles + Papeles ‘Avenida :* Avenida + 2 Pos(Aveniga, 1) Escalones :* Escalone: Informar(TotalPapeles) Escalera IncremantarTotat ti A continuacién se analiza la ejecucién de este programa. Una vez declaradas las variables, las constantes y los process, la ejecucién comienza con la primera instruccién del programa principal después de comenzar. Esta instruccion es Iniciar (posiciona al robot en (1,1), continua con una lamada al proceso Inicializar, la cual causa {que la ejecucién secuencial del programa principal quede temporarlamente suspendida y sea ejecutado el cédigo del proceso Inicializar. Cuando el proceso Inicializar termina, ol control retorna al punto siguiente desde donde fue llaiado y la ejecucién secuencial continda, Luego se encuentra la estructura repetir, que permite que se elecute 5 veces el bloque de ins- trucciones que aparece a continuacién. Se ejecuta, entonces, la lamada al proceso Escalera, la que produce que la ejecucién secuencial se suspenda nuevamente y comiencen a ejecutar- se las instrucciones de este proceso. Una vez que este proceso termina, e! flujo de control re- torna ala instruccin siguiente dela que se lo llamé desde el programa principal, y retoma nue- vamente la ejecucién secuencial. Continua asi nasta finalizar con la ejecucién del timo proceso {que retorna et contol al programa principal, para comenzar otra vez con este blogue de tres ins- trucciones (lamadas a procesos) hasta completar las § veces de la estructura repetir, luego se invoca WostrarResul tado que procede de igual manera. Finalmente, ejecuta la instruccion si- ‘guiente end con lo cual termina ta elecucion del programa. Es importante destacar algunos atpectos de esta solucién: * Los procesos estan declarados antes dei comienzo del programa principal. Esto se de- be a una regla general que dice aue todos fos pracesos que utile un programa, deben ‘ser conocidos antes de ser usados. * Sise compara la titima solucién con la anterior se puede observar que no hay cédigo nuevo, excepto las lamadas a los procesos. ++ El programa principal queda como un resumen de alto nivel del programa total. Como re- sultado final, ol programa principal representa una especificacién del programa. Este pro- ‘grama principal es simple y corto ya que la tarea de detalle queda oculta (hidden) en los ‘médulos de! programa, 2.5.2 Alcance de los datos La importancia del ocultamiento de los datos (Cata Hiding) En el desarrollo de un sistema complejo con gran nimero de médulos, realizados por dite rentes programadores, debe tenerse en cuenta que cada uno de ellos escribir el cédigo co- respondiente a un médulo. Esto implica que cada cual define sus propios datos, con icenti- ccadores apropiados y como consecuencia de ello se podrian observar algunos inconvenientes tales como: * Demasiados identificadores. 2 Miami) ee + Conflctos entre los nombres de los identificadores de cada programador. + Integridad de los datos lo que implica que se puedan utilizar datos que tengan igual iden- tiffcador pero que realicen funciones diferentes. + Side Effects no prevists. La solucién para reducir estos problemas se logra con una combinacién de ocultamiento de tos (Data Hidding) y uso de "Pardmetras”. Estos concaptos se discutiran a continuacién 25.2.1 Datos locales y datos globales La diferencia entre dato glotal y dato local es simple: los datos globales son aquellos que se

También podría gustarte