ebook img

Algoritmos y Programación I - Con lenguaje Python PDF

224 Pages·2011·2.81 MB·Spanish
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Algoritmos y Programación I - Con lenguaje Python

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:
mos en todo momento el lenguaje de programación Python para ilustrar que es sencillo y elegante, pero éste no será un curso de Python sino un
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.