Algoritmos y Programación I Con lenguaje Python 9demarzode2011 Contenidos 1. Conceptosbásicos 7 1.1. Computadorasyprogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2. Elmitodelamáquinatodopoderosa . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3. CómodarleinstruccionesalamáquinausandoPython . . . . . . . . . . . . . . . 9 1.4. Devolverunresultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.5. Unainstrucciónunpocomáscompleja:elciclodefinido . . . . . . . . . . . . . . . 13 1.5.1. Ayudadesdeelintérprete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6. Construirprogramasymódulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.7. LaformadeunprogramaPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.8. Estadoycomputación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.9. Depuracióndeprogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.10. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2. Programassencillos 21 2.1. Construccióndeprogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2. Realizandounprogramasencillo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3. PiezasdeunprogramaPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.1. Nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.2. Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4. Nosólodenúmerosvivenlosprogramas . . . . . . . . . . . . . . . . . . . . . . . 26 2.5. Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.6. Ciclosdefinidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.7. Unaguíaparaeldiseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3. Funciones 30 3.1. Documentacióndefunciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2. ImprimirversusDevolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3. Cómousarunafunciónenunprograma . . . . . . . . . . . . . . . . . . . . . . . . 32 3.4. Mássobrelosresultadosdelasfunciones . . . . . . . . . . . . . . . . . . . . . . . 34 3.5. Unejemplocompleto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.6. Devolvermúltiplesresultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4. Decisiones 41 4.1. Expresionesbooleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.1.1. Expresionesdecomparación . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.1.2. Operadoreslógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2 CONTENIDOS 3 4.2. Comparacionessimples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.3. Múltiplesdecisionesconsecutivas . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5. Mássobreciclos 50 5.1. Ciclosindefinidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.2. Ciclointeractivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.3. Cicloconcentinela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.4. Cómoromperunciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6. Cadenasdecaracteres 58 6.1. Operacionesconcadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.1.1. Obtenerellargodeunacadena . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.1.2. Recorrerunacadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.1.3. Accederaunaposicióndelacadena . . . . . . . . . . . . . . . . . . . . . . 59 6.2. Segmentosdecadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 6.3. Lascadenassoninmutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.4. Procesamientosencillodecadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.5. Nuestroprimerjuego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 6.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 7. Tuplasylistas 72 7.1. Tuplas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.1.1. Elementosysegmentosdetuplas . . . . . . . . . . . . . . . . . . . . . . . . 72 7.1.2. Lastuplassoninmutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.1.3. Longituddetuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.1.4. Empaquetadoydesempaquetadodetuplas . . . . . . . . . . . . . . . . . . 74 7.1.5. Ejercicioscontuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.2. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.2.1. Longituddelalista.Elementosysegmentosdelistas . . . . . . . . . . . . 76 7.2.2. Cómomutarlistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.2.3. Cómobuscardentrodelaslistas . . . . . . . . . . . . . . . . . . . . . . . . 77 7.3. Ordenarlistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 7.4. Listasycadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 7.4.1. Ejerciciosconlistasycadenas . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 8. Algoritmosdebúsqueda 87 8.1. Elproblemadelabúsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 8.2. Cómoprogramarlabúsquedalinealamano . . . . . . . . . . . . . . . . . . . . . 88 8.3. Búsquedalineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 8.4. Buscarsobreunalistaordenada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 8.5. Búsquedabinaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 8.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4 CONTENIDOS 9. Diccionarios 95 9.1. Quéesundiccionario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 9.2. UtilizandodiccionariosenPython . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 9.3. Algunosusosdediccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 9.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 10.ContratosyMutabilidad 99 10.1. PreyPostcondiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 10.1.1. Precondiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 10.1.2. Postcondiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 10.1.3. Aseveraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 10.1.4. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 10.2. Invariantesdeciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 10.2.1. Comprobacióndeinvariantesdesdeelcódigo . . . . . . . . . . . . . . . . 102 10.3. MutabilidadeInmutabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 10.3.1. Parámetrosmutableseinmutables . . . . . . . . . . . . . . . . . . . . . . . 103 10.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 10.5. Apéndice-AcertijoMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 11.Manejodearchivos 107 11.1. Cerrarunarchivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 11.2. Ejemplodeprocesamientodearchivos . . . . . . . . . . . . . . . . . . . . . . . . . 108 11.3. Mododeaperturadelosarchivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 11.4. Escribirenunarchivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 11.5. Agregarinformaciónaunarchivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 11.6. Manipularunarchivoenformabinaria . . . . . . . . . . . . . . . . . . . . . . . . 112 11.7. Persistenciadedatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 11.7.1. PersistenciaenarchivosCSV . . . . . . . . . . . . . . . . . . . . . . . . . . 115 11.7.2. Persistenciaenarchivosbinarios . . . . . . . . . . . . . . . . . . . . . . . . 117 11.8. Directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 11.9. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 11.10.Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 12.Manejodeerroresyexcepciones 124 12.1. Errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 12.2. Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 12.2.1. Manejodeexcepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 12.2.2. Procesamientoypropagacióndeexcepciones . . . . . . . . . . . . . . . . . 127 12.2.3. Accesoainformacióndecontexto . . . . . . . . . . . . . . . . . . . . . . . 128 12.3. Validaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 12.3.1. Comprobacionesporcontenido . . . . . . . . . . . . . . . . . . . . . . . . . 129 12.3.2. Entradadelusuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 12.3.3. Comprobacionesportipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 12.3.4. Comprobacionesporcaracterísticas . . . . . . . . . . . . . . . . . . . . . . 132 12.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 12.5. Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 CONTENIDOS 5 13.Procesamientodearchivos 135 13.1. Cortedecontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 13.2. Apareo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 13.3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 14.Objetos 139 14.1. Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 14.2. Quéesunobjeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 14.3. Definiendonuevostipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 14.3.1. Nuestraprimeraclase:Punto . . . . . . . . . . . . . . . . . . . . . . . . . . 141 14.3.2. Agregandovalidacionesalconstructor . . . . . . . . . . . . . . . . . . . . 142 14.3.3. Agregandooperaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 14.4. Métodosespeciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 14.4.1. Unmétodoparamostrarobjetos . . . . . . . . . . . . . . . . . . . . . . . . 145 14.4.2. Métodosparaoperarmatemáticamente . . . . . . . . . . . . . . . . . . . . 145 14.5. Creandoclasesmáscomplejas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 14.5.1. Métodosparacompararobjetos. . . . . . . . . . . . . . . . . . . . . . . . . 148 14.5.2. Ordenardemenoramayorlistasdehoteles . . . . . . . . . . . . . . . . . 149 14.5.3. Otrasformasdecomparación . . . . . . . . . . . . . . . . . . . . . . . . . . 150 14.5.4. Comparaciónsóloporigualdadodesigualdad . . . . . . . . . . . . . . . . 151 14.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 14.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 15.Polimorfismo,HerenciayDelegación 154 15.1. Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 15.1.1. Interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 15.1.2. Redefinicióndemétodos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 15.1.3. Unejemplodepolimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . 155 15.2. Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 15.3. Delegación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 15.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 16.Listasenlazadas 163 16.1. Unaclasesencilladevagones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 16.1.1. Caminos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 16.1.2. Referenciandoelprincipiodelalista . . . . . . . . . . . . . . . . . . . . . . 165 16.2. Tiposabstractosdedatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 16.3. LaclaseListaEnlazada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 16.3.1. Construccióndelalista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 16.3.2. Eliminarunelementodeunaposición . . . . . . . . . . . . . . . . . . . . . 168 16.3.3. Eliminarunelementoporsuvalor . . . . . . . . . . . . . . . . . . . . . . . 169 16.3.4. Insertarnodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 16.4. Invariantesdeobjetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 16.5. Otraslistasenlazadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 16.6. Iteradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 16.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 6 CONTENIDOS 17.Pilasycolas 179 17.1. Pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 17.1.1. Pilasrepresentadasporlistas . . . . . . . . . . . . . . . . . . . . . . . . . . 179 17.1.2. Usodepila:calculadoracientífica . . . . . . . . . . . . . . . . . . . . . . . 181 17.1.3. ¿Cuántocuestanlosmétodos? . . . . . . . . . . . . . . . . . . . . . . . . . 186 17.2. Colas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 17.2.1. Colasimplementadassobrelistas . . . . . . . . . . . . . . . . . . . . . . . . 186 17.2.2. Colasylistasenlazadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 17.3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 17.4. Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 18.Modelodeejecucióndefuncionesyrecursividad 194 18.1. Lapiladeejecucióndelasfunciones . . . . . . . . . . . . . . . . . . . . . . . . . . 194 18.2. Pasajedeparámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 18.3. Devoluciónderesultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 18.4. Larecursiónycómopuedeserquefuncione . . . . . . . . . . . . . . . . . . . . . 199 18.5. Unafunciónrecursivamatemática . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 18.6. Algoritmosrecursivosyalgoritmositerativos . . . . . . . . . . . . . . . . . . . . . 202 18.7. Unejemploderecursividadelegante . . . . . . . . . . . . . . . . . . . . . . . . . . 203 18.8. Unejemploderecursividadpocoeficiente . . . . . . . . . . . . . . . . . . . . . . . 205 18.9. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 18.10.Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 19.Ordenarlistas 208 19.1. Ordenamientoporselección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 19.1.1. Invarianteenelordenamientoporselección . . . . . . . . . . . . . . . . . 209 19.1.2. ¿Cuántocuestaordenarporselección? . . . . . . . . . . . . . . . . . . . . . 211 19.2. Ordenamientoporinserción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 19.2.1. Invariantedelordenamientoporinserción . . . . . . . . . . . . . . . . . . 214 19.2.2. ¿Cuántocuestaordenarporinserción?. . . . . . . . . . . . . . . . . . . . . 214 19.2.3. Inserciónenunalistaordenada . . . . . . . . . . . . . . . . . . . . . . . . . 214 19.3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 20.Algunosordenamientosrecursivos 216 20.1. Ordenamientopormezcla,oMergesort . . . . . . . . . . . . . . . . . . . . . . . . 216 20.2. ¿CuántocuestaelMergesort? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 20.3. OrdenamientorápidooQuicksort . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 20.4. ¿CuántocuestaelQuicksort? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 20.5. UnaversiónmejoradadeQuicksort . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 20.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 A. LicenciayCopyright 224 Unidad 1 Algunos conceptos básicos En esta unidad hablaremos de lo que es un programa de computadora e introduciremos unos cuantos conceptos referidos a la programación y a la ejecución de programas. Utilizare- mosentodomomentoellenguajedeprogramaciónPythonparailustraresosconceptos. 1.1. Computadoras y programas Enlaactualidad,lamayoríadenosotrosutilizamoscomputadoraspermanentemente:para mandarcorreoselectrónicos,navegarporInternet,chatear,jugar,escribirtextos. Las computadoras se usan para actividades tan disímiles como predecir las condiciones meteorológicasdelapróximasemana,guardarhistoriasclínicas,diseñaraviones,llevarlacon- tabilidad de las empresas o controlar una fábrica. Y lo interesante aquí (y lo que hace apasio- nante a esta carrera) es que el mismo aparato sirve para realizar todas estas actividades: uno nocambiadecomputadoracuandosecansadechatearyquierejugaralsolitario. Muchosdefinenunacomputadoramodernacomo“unamáquinaquealmacenaymanipula informaciónbajoelcontroldeunprogramaquepuedecambiar”.Aparecenacádosconceptos que son claves: por un lado se habla de una máquina que almacena información, y por el otro lado,estamáquinaestácontroladaporunprogramaquepuedecambiar. Una calculadora sencilla, de esas que sólo tienen 10 teclas para los dígitos, una tecla para cada una de las 4 operaciones, un signo igual, encendido y CLEAR, también es una máquina quealmacenainformaciónyqueestácontroladaporunprograma.Peroloquediferenciaaesta calculadoradeunacomputadoraesqueenlacalculadoraelprogramanopuedecambiar. Unprogramadecomputadoraesunconjuntodeinstruccionespasoapasoqueleindicanauna computadora cómo realizar una tarea dada, y en cada momento uno puede elegir ejecutar un programadeacuerdoalatareaquequiererealizar. Lasinstruccionessedebenescribirenunlenguajequenuestracomputadoraentienda.Los lenguajes de programación son lenguajes diseñados especialmente para dar órdenes a una computadora, de manera exacta y no ambigua. Sería muy agradable poder darle las órdenes a la computadora en castellano, pero el problema del castellano, y de las lenguas habladas en general,essuambigüedad: Sialguiennosdice“Compráelcollarsinmonedas”,nosabremossinospidequecompremos elcollarquenotienemonedas,oquecompremosuncollaryquenousemosmonedasparala compra.Habráquepreguntarleaquiennosdalaordencuáleslainterpretacióncorrecta.Pero talesdudasnopuedenaparecercuandoseledanórdenesaunacomputadora. Este curso va a tratar precisamente de cómo se escriben programas para hacer que una 7 8 Unidad1.Conceptosbásicos computadorarealiceunadeterminadatarea.Vamosausarunlenguajeespecífico(Python)por- queessencilloyelegante,peroéstenoseráuncursodePythonsinouncursodeprogramación. Sabíasque... ExistenunagrancantidaddeprogramasdesarrolladosenPython,desdeherramientasparaservi- dores,comomailman,hastaprogramasamigablesparausuariosfinales,comoemesene,pasando poraplicacionesempresariales,openerp,tryton;herramientasdedesarrollo,meld,mercurial,ba- zaar,trac;plataformasweb,django,turbogears,zope;clientesdebittorrent,bittorrent,bittornado, deluge;montonesdejuegosdetodotipo,ymuchísimasaplicacionesmás. Todasestasaplicacionessonsoftwarelibre,porloquesepuedeobteneryestudiarelcódigoconel queestánhechas 1.2. El mito de la máquina todopoderosa Muchas veces la gente se imagina que con la computadora se puede hacer cualquier cosa, quenohaytareasimposiblesderealizar.Másaún,seimaginanquesibienhubocosasqueeran imposibles de realizar hace 50 años, ya no lo son más, o no lo serán dentro de algunos años, cuandolascomputadorascrezcanenpoder(memoria,velocidad),ylacomputadorasevuelva unamáquinatodopoderosa. Sin embargo eso no es así: existen algunos problemas, llamados no computables que nunca podránserresueltosporunacomputadoradigital,pormáspoderosaqueéstasea.Lacompu- tabilidadeslaramadelacomputaciónqueseocupadeestudiarquétareassoncomputablesy quétareasnoloson. Delamanodelmitoanterior,vieneelmitodellenguajetodopoderoso:hayproblemasque sonnocomputablesporqueenrealidadseutilizaalgúnlenguajequenoeselapropiado. Enrealidadtodaslascomputadoraspuedenresolverlosmismosproblemas,yesoesinde- pendiente del lenguaje de programación que se use. Las soluciones a los problemas compu- tablessepuedenescribirencualquierlenguajedeprogramación.Esonosignificaquenohaya lenguajes más adecuados que otros para la resolución de determinados problemas, pero la adecuación está relacionada con temas tales como la elegancia, la velocidad, la facilidad para describirunproblemademanerasimple,etc.,nuncaconlacapacidadderesolución. Los problemas no computables no son los únicos escollos que se le presentan a la compu- tación. Hay otros problemas que si bien son computables demandan para su resolución un esfuerzoenormeentiempoyenmemoria.Estosproblemassellamanintratables.Elanálisisde algoritmos se ocupa de separar los problemas tratables de los intratables, encontrar la solu- ciónmásbaratapararesolverunproblemadado,yenelcasodelosintratables,resolverlosde maneraaproximada:noencontramoslaverdaderasoluciónporquenonosalcanzanlosrecur- sosparaeso,peroencontramosunasoluciónbastantebuenayquenosinsumemuchosmenos recursos (el orden de las respuestas de Google a una búsqueda es un buen ejemplo de una soluciónaproximadaperononecesariamenteóptima). En este curso trabajaremos con problemas no sólo computables sino también tratables. Y aprenderemosamedirlosrecursosquenosdemandaunasolución,yempezaremosabuscarla soluciónmenosdemandanteencadacasoparticular. Algunosejemplosdelosproblemasqueencararemosydesussoluciones: Problema1.1. DadounnúmeroN sequierecalcularN33. 1.3.CómodarleinstruccionesalamáquinausandoPython 9 Una solución posible, por supuesto, es hacer el producto N ×N ×...×N, que involucra 32multiplicaciones. Otrasolución,muchomáseficientees: CalcularN ×N. AlresultadoanteriormutiplicarloporsímismoconlocualyadisponemosdeN4. AlresultadoanteriormutiplicarloporsímismoconlocualyadisponemosdeN8. AlresultadoanteriormutiplicarloporsímismoconlocualyadisponemosdeN16. AlresultadoanteriormutiplicarloporsímismoconlocualyadisponemosdeN32. Al resultado anterior mutiplicarlo por N con lo cual conseguimos el resultado deseado consólo6multiplicaciones. Cada una de estas soluciones representa un algoritmo, es decir un método de cálculo, dife- rente.Paraunmismoproblemapuedehaberalgoritmosdiferentesqueloresuelven,cadauno conuncostodistintoentérminosderecursoscomputacionalesinvolucrados. Sabíasque... La palabra algoritmo no es una variación de logaritmo, sino que proviene de algorismo. En la an- tigüedad, los algoristas eran los que calculaban usando la numeración arábiga y mientras que los abacistaseranlosquecalculabanusandoábacos.Coneltiempoelalgorismosedeformóenalgoritmo, influenciadoporeltérminoaritmética. Asuvezelusodelapalabraalgorismoprovienedelnombredeunmatemáticopersafamoso,ensu épocayparalosestudiososdeesaépoca,“AbuAbdallahMuhammadibnMûsâal-Jwârizmî”,que literalmente significa: “Padre de Ja’far Mohammed, hijo de Moises, nativo de Jiva”. Al-Juarismi, comoselollamausualmente,escribióenelaño825ellibro“Al-Kitâbal-mukhtasarfîhîsâbal-gabr wa’l-muqâbala” (Compendio del cálculo por el método de completado y balanceado), del cual surgiótambiénlapalabra“álgebra”. Hastahacenomuchotiemposeutilizabaeltérminoalgoritmoparareferirseúnicamenteaformas derealizarciertoscálculos,peroconelsurgimientodelacomputación,eltérminoalgoritmopasó aabarcarcualquiermétodoparaobtenerunresultado. Problema1.2. Tenemosquepermitirlaactualizaciónyconsultadeunaguíatelefónica. Para este problema no hay una solución única: hay muchas y cada una está relacionada con un contexto de uso. ¿De qué guía estamos hablando: la guía de una pequeña oficina, un pequeño pueblo, una gran ciudad, la guía de la Argentina? Y en cada caso ¿de qué tipo de consultaestamoshablando:hayqueimprimirunlistadounavezpormesconlaguíacomple- ta, se trata de una consulta en línea, etc.? Para cada contexto hay una solución diferente, con los datos guardados en una estructura de datos apropiada, y con diferentes algoritmos para la actualizaciónylaconsulta. 1.3. Cómo darle instrucciones a la máquina usando Python EllenguajePythonnosproveedeunintérprete,esdecirunprogramaqueinterpretalasór- denes que le damos a medida que las escribimos. Para orientarnos, el intérprete presenta una 10 Unidad1.Conceptosbásicos Sabíasque... Python fue creado a finales de los años 80, por un programador holandés llamado Guido van Rossum,quiensiguesiendoaúnhoyellíderdeldesarrollodellenguaje. La versión 2.0, lanzada en 2000, fue un paso muy importante para el lenguaje ya que era mucho másmadura,incluyendounrecolectordebasura.Laversión2.2,lanzadaendiciembrede2001,fue tambiénunhitoimportanteyaquemejorólaorientaciónaobjetos.Laúltimaversióndeestalínea esla2.7quefuelanzadaennoviembrede2010yaúnestávigente. En diciembre de 2008, se lanzó la versión 3.0, cuya versión actual es la 3.2, de febrero de 2011. Sin embargo, debido a que estas versiones introducen importantes cambios y no son totalmente compatiblesconlasversionesanteriores,todavíanoselautilizaextensamente. línea de comandos (los comandos son las órdenes) que identifica al comienzo con los símbolos >>>,yquellamaremosprompt.Enestalínea,acontinuacióndelpromptpodemosescribirdife- rentesórdenes. Algunas órdenes sencillas, por ejemplo, permiten utilizar la línea de comandos como una calculadora simple con números enteros. Para esto escribimos la expresión que queremos re- solver en el prompt y presionamos la tecla <ENTER>. El intérprete de Python “responde” el resultadodelaoperaciónenlalíneasiguiente,sinprompt,yluegonospresentanuevamenteel cursorparaescribirlasiguienteorden. >>> 2+3 5 >>> Python permite utilizar las operaciones +, -, *, / (división entera), y ** (potencia- ción). La sintaxis es la convencional (valores intercalados con operaciones), y se pueden usar paréntesisparamodificarelordendeasociaciónnaturaldelasoperaciones(potenciación,pro- ducto/división,suma/resta). >>> 5*7 35 >>> 2+3*7 23 >>> (2+3)*7 35 >>> 10/5 2 >>> 5**2 25 >>> Otra orden sencilla de Python permite indicarle al intérprete que escriba o “imprima” por pantallaunapalabraofrase,quellamaremoscadenadetexto. >>> print ’Hola’ Hola >>> print ’Como estan?’ Como estan? >>> print "Bienvenidos y bienvenidas a este curso!" Bienvenidos y bienvenidas a este curso!
Description: