Top Banner

of 204

Elementos_esenciales_para_programacion_CC_BY-SA_3.0.pdf

Oct 10, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • AUTORES

    Gracia Mara GaglianoCristina I. AlarcnLaura M. Angelone

    Edison Isaas Del Rosario CamposanoPedro CardonaFernando Guspi

    Jos Eder Guzmn MendozaZenn Luna

    Pablo Augusto MagJaime Muoz Arteaga

  • Elementos escenciales para programacin: Algoritmos y Estructuras de Datos

    1a ed. - Iniciativa Latinoamericana de Libros de Texto Abiertos (LATIn), 2014. 202 pag.

    Primera Edicin: Marzo 2014Iniciativa Latinoamericana de Libros de Texto Abiertos (LATIn)http://www.proyectolatin.org/

    Los textos de este libro se distribuyen bajo una licencia Reconocimiento-CompartirIgual 3.0 Un-ported (CC BY-SA 3.0) http://creativecommons.org/licenses/by-sa/3.0/deed.es_ES

    Esta licencia permite:Compartir: copiar y redistribuir el material en cualquier medio o formato.Adaptar: remezclar, transformar y crear a partir del material para cualquier finalidad.

    Siempre que se cumplan las siguientes condiciones:

    Reconocimiento. Debe reconocer adecuadamente la autora, proporcionar unenlace a la licencia e indicar si se han realizado cambios. Puede hac-erlo de cualquier manera razonable, pero no de una manera que sug-iera que tiene el apoyo del licenciador o lo recibe por el uso quehace.

    CompartirIgual Si remezcla, transforma o crea a partir del material, deber di-fundir sus contribuciones bajo la misma licencia que el original.

    Las figuras e ilustraciones que aparecen en el libro son de autora de los respectivosautores. De aquellas figuras o ilustraciones que no son realizadas por los autores, se

    coloca la referencia respectiva.

    Este texto forma parte de la Iniciativa Latinoamericana de Libros de Texto abiertos (LATIn),proyecto financiado por la Unin Europea en el marco de su Programa ALFA III EuropeAid.El Proyecto LATIn est conformado por: Escuela Superior Politcnica del Litoral, Ecuador(ESPOL); Universidad Autnoma de Aguascalientes, Mxico (UAA), Universidad Catlica deSan Pablo, Per (UCSP); Universidade Presbiteriana Mackenzie, Brasil(UPM); Universidad dela Repblica, Uruguay (UdelaR); Universidad Nacional de Rosario, Argentina(UR); UniversidadCentral de Venezuela, Venezuela (UCV), Universidad Austral de Chile, Chile (UACH), Uni-versidad del Cauca, Colombia (UNICAUCA), Katholieke Universiteit Leuven, Blgica (KUL),Universidad de Alcal, Espaa (UAH), Universit Paul Sabatier, Francia (UPS).

  • ndice general

    0.1 Prlogo 9

    1 Introduccin a la Informtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.0.1 Qu es la Informtica? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    1.1 Del mundo real a la solucin por computadora 131.1.1 Informatizar la resolucin de un problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.1.2 Resolucin de problemas con computadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.1.3 Dar el primer paso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.1.4 El modelo computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.1.5 Datos e informacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    1.2 Algoritmos 161.2.1 Qu es un algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.2.2 Un ejemplo cotidiano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.2.3 Problemas algortmicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.2.4 Definicin de ambiente y accin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.2.5 Accin primitiva y no primitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.2.6 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.2.7 Representacin de Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.2.8 Diagrama de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.2.9 Diagrama de Nassi Schneiderman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.2.10 Pseudocdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    1.3 Lenguajes de programacin 23

    1.4 Nuestro procesador: la computadora 25

    1.5 Conceptos y elementos bsicos para la resolucin algortmica 261.5.1 Tipo de dato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.5.2 Tipos de dato a utilizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.5.3 Variables y constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.5.4 Nombres de variables/constantes (identificadores) . . . . . . . . . . . . . . . . . . . . . . . 301.5.5 Clasificacin de Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301.5.6 Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    1.6 Algoritmos en Pseudocdigo 351.6.1 Accin de asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.6.2 Accin Leer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361.6.3 Accin Escribir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

  • 2 Tcnicas de programacin. Organizacin de las acciones . . . . . 412.0.4 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    2.1 Tcnicas de programacin algortmica 412.1.1 Modelo declarativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.1.2 Modelo imperativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422.1.3 Modelo orientado a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    2.2 Estructuras de Control. Programacin Estructurada 432.2.1 Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432.2.2 Programacin estructurada (PE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    2.3 Organizacin secuencial 45

    2.4 Organizacin selectiva o decisin 462.4.1 Estructura de seleccin simple: Si-entonces-sino . . . . . . . . . . . . . . . . . . . . . . . . 462.4.2 Estructura de seleccin mltiple: Segn sea . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    2.5 Organizacion repetitiva o iteracin 492.5.1 Estructura de Iteracin con cantidad conocida de veces: Repetir Para . . . . . . . . . 492.5.2 Estructura de Iteracin con cantidad desconocida de veces: Repetir Mientras . . . 502.5.3 Estructura de Iteracin con cantidad desconocida de veces: Repetir hasta . . . . 51

    3 Descripcin de las estructuras selectivas y repetitivas . . . . . . . . 533.1 Estructuras selectivas 533.1.1 Estructura de control de Seleccin Simple SI . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.1.2 Estructura de control de Seleccin Doble SI...SINO . . . . . . . . . . . . . . . . . . . . . . 543.1.3 Estructura de control de Seleccin Mltiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    3.2 Estructuras repetitivas 563.2.1 Estructura DESDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.2.2 Estructura MIENTRAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.2.3 Estructura HACER-MIENTRAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    4 Estructuras selectivas y repetitivas analizadas desde su uso . . 614.1 Estructuras para Seleccin: Condicionales 624.1.1 Condicional con varias preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.1.2 Condicionales con casos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664.1.3 Condicionales en rbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

    4.2 Estructuras para Repetir: Lazos 694.2.1 Estructuras para Repetir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694.2.2 Mientras- Repita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    4.3 Estructuras de Control - Condicionales y Lazos 784.3.1 Ejercicios y Aplicaciones bsicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

    4.4 Estructuras de Control - Lazos con Bases numricas y Aleatorios 814.4.1 Ejercicios de Lazos con Bases numricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.4.2 Ejercicios de Lazos con Aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    5 Subalgoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995.0.3 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

  • 5.1 Programacin modular 99

    5.2 Concepto de subalgoritmo 100

    5.3 Subalgoritmo funcin 1005.3.1 Sintaxis de la declaracin de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015.3.2 Cmo usar/llamar/invocar una funcin? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    5.4 Subalgoritmo subrutina 1035.4.1 Sintaxis de la declaracin de subrutinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045.4.2 Cmo usar/llamar/invocar una subrutina? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045.4.3 Subrutinas que no devuelven ningn resultado . . . . . . . . . . . . . . . . . . . . . . . . 1055.4.4 Un caso especial: los parmetros de entrada tambin son de salida . . . . . . . . . . 107

    5.5 Parmetros y argumentos en los subalgoritmos 108

    5.6 Memoria para los subalgoritmos 109

    5.7 Parmetros formales y actuales con igual nombre 109

    5.8 Variables locales y globales 1105.8.1 Cmo funciona este algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115.8.2 Anlisis del problema: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    5.9 Pasaje de informacin entre argumento y parmetro 112

    5.10 Men 113

    6 Estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176.0.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176.0.2 Porqu utilizar estructuras de datos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186.0.3 Ejemplos de usos de estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196.0.4 Clasificacin de las estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226.0.5 Estructuras de datos estticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

    6.1 Cadena (String) 1246.1.1 6.1.Estructura de datos: Cadena (string) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246.1.2 Declaracin de una variable cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1266.1.3 Usos de una variable cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1266.1.4 Operaciones con cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

    6.2 Registro (Record o Struct) 1286.2.1 Definicin de un tipo de dato registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1296.2.2 Declaracin de una variable de tipo de dato registro . . . . . . . . . . . . . . . . . . . . . 1306.2.3 Acceso a un campo de la variable registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306.2.4 Usos de una variable registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316.2.5 Ejemplo integrador de conceptos referidos a registros . . . . . . . . . . . . . . . . . . . . 1316.2.6 Otros ejemplos de datos que se podran implementar con registros . . . . . . . . . . 131

    6.3 Arreglo (Array) 1336.3.1 Disposicin de los elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346.3.2 Declaracin de un arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376.3.3 Acceso a un elemento del arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396.3.4 Ejemplos integradores de conceptos referidos a arreglos . . . . . . . . . . . . . . . . . 1426.3.5 Algoritmos de aplicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

    6.4 Actividad para los estudiantes 151

  • 7 Ordenamiento, Bsqueda e Intercalacin . . . . . . . . . . . . . . . . . . . . 1557.0.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

    7.1 Ordenamiento 1557.1.1 Ordenamiento por seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567.1.2 Ordenamiento por intercambio o mtodo de la burbuja . . . . . . . . . . . . . . . . . . . . 1577.1.3 Ordenamiento por insercin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597.1.4 Cantidad de comparaciones efectuadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617.1.5 Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627.1.6 Cantidad de comparaciones y operaciones efectuadas . . . . . . . . . . . . . . . . . . . . 164

    7.2 Mtodos de Bsqueda 1657.2.1 Bsqueda en un arreglo desordenado. Mtodo de bsqueda . . . . . . . . . . . . . . 1657.2.2 Cantidad de comparaciones efectuadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1657.2.3 Bsqueda en un arreglo ordenado. Mtodo de bsqueda dicotmica . . . . . . . . 1667.2.4 Cantidad de comparaciones efectuadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

    7.3 Mtodo de intercalacin 1687.3.1 Cantidad de comparaciones efectuadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697.3.2 Ejemplos adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

    8 Estructuras de datos: archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1738.0.3 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1738.0.4 Caractersticas de los archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

    8.1 Organizacin de Archivos 175

    9 Representacin de la Informacin en una Computadora . . . . . . 1859.0.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    9.1 Sistemas de Numeracin. Representacin Interna de la Informacin 185

    9.2 Sistemas de numeracin para la representacin a Bajo y Alto Nivel 1969.2.1 Representacin a Bajo Nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1969.2.2 Representacin a Alto Nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    10 Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

  • 0.1 Prlogo 9

    0.1 PrlogoEste libro est principalmente dirigido a estudiantes universitarios que se inician en las

    carreras de Ingeniera. Son los que deben interiorizarse en el manejo de ciertos recursos propiosde la disciplina sin orientarse a ningn lenguaje en particular. La finalidad de este enfoque esampliarles la perspectiva para que en su vida profesional no slo puedan implementar programasen los lenguajes clsicos de programacin sino que tambin sean capaces de manejar las nuevasherramientas de software que, en muchos casos, permiten optimizar su rendimiento medianteel desarrollo de macroinstrucciones especiales.Es as que en la elaboracin del libro hemosdecidido tratar los conceptos de manera no muy extensa y, en la forma ms sencilla posible. Noslo para que se constituya en un soporte de los contenidos a desarrollar por los docentes sinopara que les permita a los estudiantes reflexionar sobre la forma de llegar a un algoritmo comosolucin a un problema.A los fines didcticos, representamos los algoritmos en algunos casoscon pseudocdigo y en otros, con diagrama de flujo o con ambos tipos de representaciones.

    El libro est constituido por nueve captulos. Se inicia con una introduccin a los recursosde la algoritmia desde los conceptos bsicos, pasando por la organizacion de las acciones segnla tcnica de programacin estructurada y la implementacin de subalgoritmos. Se incluyetambin el concepto y uso apropiado de estructuras de datos como arreglos, registros y cadenas,como as tambin el de archivo de datos y su tratamiento. En un captulo aparte desarrollamosalgunos procesos especficos para el ordenamiento e intercalacin de conjuntos de valores ypara la bsqueda en los mismos,Presentamos la temtica referida a las Estructuras de Selec-cin y a las Estructuras de Iteracin en tres captulos cuyos contenidos se complementan, puesfueron abordados desde distintos enfoques (terico, prctico y terico-prctico) a partir de lavisin de diferentes autores.El libro culmina con una descripcin de la representacin internade la informacin numrica y de carcter,nociones imprescindibles para la comprensin delfuncionamiento interno de una computadora.

    Agradecemos a los Profesores de la Facultad de Ciencias Exactas, Ingeniera y Agrimensu-ra de la Universidad Nacional de Rosario, Ingeniero Zenn Luna e Ingeniera Mara AliciaMorelli por su contribucin con valiosas sugerencias y consejos para mejorar el contenido dellibro. El primero ha participado en la produccin del captulo Estructura de datos: Archivosy la segunda, en la revisin de los captulos Introduccin a la Informtica, Tcnicas deprogramacin. Organizacin de las acciones, Subalgoritmos, Estructuras de datos, Orde-namiento, bsqueda e intercalacin, Estructuras de datos: Archivos.Hacemos lo propio conlos profesores de la Universidad Autnoma de Aguascaliente Pedro Cardona S. y Jaime MuozArteaga que han colaborado en la produccin del captulo Descripcin de las estructurasselectivas y repetitivas.

  • 1 Introduccin a la Informtica

    Laura M. Angelone

    Es una prdida de tiempo que personas cualificadas pierdan horas como esclavos en la la-bor de calcular, lo que podra ser delegado en cualquier otro si se pudieran utilizar mquinas.

    Gottfried Wilhelm Leibniz (1646-1716)

    1.0.1 Qu es la Informtica?La Informtica nace bajo la idea de ayudar al hombre en aquellos clculos rutinarios, donde

    frecuentemente existe una repeticin de tareas. Ejemplo de ello es la gestin de un censo, tal esel caso del primero automatizado en 1890 en EEUU utilizando tarjetas perforadas. En esa pocase pens que una mquina no sufrira cansancio ni cometera errores. Con el tiempo esta idea sefue afianzando en la sociedad, y es hoy da que se sigue trabajando para mejorar las prestacionesde los sistemas de cmputo.

    Si repasamos la historia veremos que la Informtica estuvo entre nosotros desde tiempos lejanos.A continuacin transcribimos algunas ideas de importantes pensadores relacionados con la Infor-mtica. Para ubicarse en la historia, debe notarse que los primeros modelos de computadorasaparecieron alrededor del ao 1940.

    Gottfried Wilhelm Leibniz (1646-1716) fue uno de los grandes pensadores de los siglos XVIIy XVIII, deca que Es una prdida de tiempo que personas cualificadas pierdan horas comoesclavos en la labor de calcular, lo que podra ser delegado en cualquier otro si se pudieranutilizar mquinas. Basndose en los trabajos de Pascal construy una calculadora compuestapor cilindros dentados con longitud incremental que poda sumar, restar, multiplicar y dividirautomticamente, conocida como la rueda de Leibniz. Algunas mquinas basadas en estosmismos principios han jugado un papel preponderante en la Segunda Guerra Mundial, e inclusoalgunas estn todava en uso. Leibniz fue tambin el primer pensador occidental en investigarla aritmtica binaria y sent las bases de la lgica simblica, basada en smbolos y variablesabstrayendo la semntica de las proposiciones.

    Ada Byron (1815-1852) desarroll los primeros programas para la Mquina Analtica de Babbage(1833), debido a estos trabajos, se la considera el primer programador de computadoras delmundo. Ella escribi La Mquina Analtica no tiene la pretensin de crear nada. Puede realizarcualquier cosa siempre que conozcamos cmo llevarla a cabo. Puede seguir anlisis; pero esincapaz de descubrir relaciones analticas o verdades. Su potencialidad es la de ayudarnosa hacer posible aquello sobre lo que tenemos un conocimiento previo. Muchas han sido las

  • 12 Introduccin a la Informtica

    mujeres que han realizado grandes aportes a la Informtica, an as Ada Byron es la nica mujerque cuenta con un lenguaje de programacin que lleva su nombre: en 1979 el Departamento deDefensa de los Estados Unidos cre un lenguaje de programacin basado en Pascal que se llamlenguaje de programacin Ada en su honor.

    Herman Hollerith (1860-1929) fue un estadstico estadounidense que invent la mquina tabu-ladora. Es considerado como el primer informtico, es decir, el primero que logra el tratamientoautomtico de la informacin (Informtica = Informacin + automtica). En esos tiempos, loscensos se realizaban de forma manual, con el retraso de unos 10 aos en su procesamiento. Anteesta situacin, Hollerith comenz a trabajar en el diseo de una mquina tabuladora o censadora,basada en tarjetas perforadas que patent en el ao 1889. Un ao despus incluy la operacinde sumar con el fin de utilizarla en procesos de contabilidad.

    Alan Turing (1912-1954) fue un matemtico, lgico, cientfico de la computacin, criptgrafo yfilsofo britnico. Es considerado uno de los padres de la ciencia de la computacin siendo elprecursor de la informtica moderna. Proporcion una influyente formalizacin de los conceptosde algoritmo y computacin, la famosa mquina de Turing. Durante la Segunda Guerra Mundial,trabaj en descifrar los cdigos nazis, particularmente los de la mquina Enigma. Tras la guerradise una de las primeras computadoras electrnicas programables digitales en el LaboratorioNacional de Fsica del Reino Unido (1945). Entre otras muchas cosas, tambin contribuy deforma particular e incluso provocativa al enigma de si las mquinas pueden pensar, es decir a laInteligencia Artificial. Turing decia: Las mquinas me sorprenden con mucha frecuencia.

    John Von Neumann (1903-1957) fue un matemtico hngaro que realiz contribuciones funda-mentales en fsica cuntica, anlisis funcional, teora de conjuntos, ciencias de la computacin,economa, anlisis numrico, ciberntica, hidrodinmica, estadstica y muchos otros campos.Est considerado como uno de los ms importantes matemticos de la historia moderna. Diseuna arquitectura de computadoras que lleva su nombre, y an es utilizada en casi todas lascomputadoras personales, microcomputadoras, minicomputadoras y supercomputadoras. VonNeumann deca Podra parecer que hemos llegado al lmite de lo que es posible lograr con latecnologa informtica, aunque hay que tener cuidado con tales declaraciones, ya que tienden asonar bastante tontas en cinco aos.

    El trmino Informtica nace recin en la dcada de 1960 en Francia bajo la denominacinINFORMATIQUE, debido a la contraccin de las palabras INFORmation y autoMATIQUE, esdecir el tratamiento de la informacin por medios automticos. En las mltiples publicaciones,Informtica se define de diversas maneras pero siempre ronda la misma idea: el tratamientoautomtico de la informacin.

    A continuacin veremos algunas definiciones.

    INFORMTICA es la ciencia que estudia el tratamiento automtico y racional de lainformacin. Se habla de tratamiento automtico debido a que son mquinas las queprocesan la informacin y se dice racional por estar los procesos definidos a travs deprogramas que siguen el razonamiento humano.INFORMTICA es el estudio de los algoritmos y de las computadoras - de sus teoras,sus modelos abstractos, su realizacin mecnica, su fiabilidad y verificacin, su medida yeficacia, su descripcin lingustica y su contexto social.Las Ciencias de la Computacin o Informtica como se le llama en algunos paseshispanoamericanos, es la disciplina que busca establecer una base cientfica para diversos

  • 1.1 Del mundo real a la solucin por computadora 13

    temas, como el diseo de computadoras, la programacin de computadoras, el proceso deinformacin, la elaboracin de algoritmos para resolver problemas y el proceso algortmicoen s.

    1.1 Del mundo real a la solucin por computadora1.1.1 Informatizar la resolucin de un problema

    El proceso de informatizar la resolucin de problemas del mundo real, tales como resolveruna ecuacin matemtica o realizar la liquidacin de sueldos de los empleados de una empresa,conlleva una serie de pasos que debemos seguir para obtener una respuesta encuadrada a losdatos provistos. En la Figura 1 se muestra tal proceso.

    Como primer paso se deber conocer las especificaciones del problema, es decir, analizar ydeterminar en forma clara y concreta el objetivo que se desea. Analizar los datos que se disponeny cuales son los resultados que se desean. Una vez que se conoce el problema en detalle, se puedeintentar realizar un modelo del mismo, es decir, abstraer el problema tratando de encontrar losaspectos principales que se pueden resolver, los datos que se han de procesar y el contexto delproblema, simplificando su expresin.Disponiendo de un panorama ms claro del problema, susdatos y resultados, se puede escribir una serie de acciones que seguidas paso a paso resuelvan elproblema. Esto es el algoritmo. Si esta etapa es exitosa, se traduce el algoritmo, mediante unlenguaje de programacin, para convertirlo en un programa que podr ser interpretado por lacomputadora para su ejecucin solucin en forma rpida y eficaz.

    Un algoritmo es una forma de describir la solucin de un problema, explicando paso a pasocomo se debe proceder para llegar a una respuesta encuadrada a los datos disponibles, en untiempo finito

    1.1.2 Resolucin de problemas con computadoraExisten cinco etapas a tener en cuenta para resolver un problema que luego ser ejecutado

    por una computadora en forma rpida y eficaz, a saber:1. Anlisis del problema, se formula y analiza el problema en su contexto del mundo real.

    COMPRENDER EL PROBLEMA.2. Diseo de una solucin, se elige una metodologa para hallar la solucin del problema.

    TRAZAR UN PLAN PARA RESOLVERLO.

  • 14 Introduccin a la Informtica

    3. Escritura de un algoritmo, se expresa la metodologa del punto anterior de forma tal quepueda ser interpretado por el procesador que lo va a ejecutar. ESCRIBIR EL ALGORIT-MO.

    4. Codificacin del algoritmo. Un algoritmo es una especificacin simblica que debe tra-ducirse a un programa a partir del conocimiento de un lenguaje de programacin parapoder ser ejecutado por la computadora. ESCRIBIR EL PROGRAMA O CODIFICAR ELALGORITMO.

    5. Ejecucin y validacin del algoritmo-programa. La etapa siguiente a escribir el programa,es la verificacin de funcionamiento del mismo, es decir, ver si el programa conduce alresultado deseado con los datos dados del mundo real. PROBAR EL PROGRAMA.

    La primera etapa est dada por entender el enunciado del problema. Es importante que se conozcalo que se desea que realice la computadora, mientras esto no se conozca del todo no tiene muchocaso continuar con la siguiente etapa.Cuando se ha comprendido lo que se desea de la computadora, es necesario hacer un Anlisisdel problema, definiendo:

    Los datos de entrada.Cual es la informacin que se desea producir, los resultados.Los mtodos y frmulas que se necesitan para procesar los datos para arribar a losresultados, la metodologa de resolucin.

    Una vez que se tiene en claro la metodologa de resolucin, se escribe el algoritmo en formasimblica. En una primera etapa, es aconsejable probar que el algoritmo propuesto realmenteresuelva el problema planteado, utilizando papel, lpiz y nuestra mente.

    En una segunda etapa, este algoritmo podr ser traducido en un lenguaje reconocible porla computadora, generando as el programa.La serie de instrucciones del programa se la conocecomo cdigo fuente, el cual se escribe en un lenguaje de programacin, generalmente un lenguajede alto nivel (comprensible por el hombre, como Pascal, Fortran o C, entre otros).El programa podr ser probado en la computadora. En este caso, pueden aparecer errores desintaxis y/o de semnticaLos errores de sintaxis se refieren a que alguna instruccin est mal escrita y por lo tantoel procesador no puede reconocerla. Son simples de detectar y de modificar. Esta operacinla resuelve el traductor del entorno de programacin, el Compilador o el Intrprete. Si en elproceso de traduccin se detectan errores de sintaxis, habr que volver al punto 4) para codificarcorrectamente.Los errores de semntica se refieren a cuestiones de la lgica de la solucin, y son los mscomplicados de hallar. Es en el proceso de Validacin donde se detectan los errores de lgica.Habr que volver al punto 1) para interpretar correctamente el enunciado del problema para revery modificar el algoritmo propuesto o proponer una nueva solucin al problema dado.Algo muy importante a tener en cuenta cuando se escriben programas es la Documentacin delmismo. Esto se refiere a los comentarios que se aaden al cdigo fuente para hacer ms claroel entendimiento del programa: descripcin del funcionamiento del programa, descripcin delproblema, nombre del autor, entre otros. A menudo un programa escrito por una persona, esusado por otra, o por ella misma despus de un tiempo. Por ello la documentacin sirve paraayudar a comprender la lgica del programa, para re-usarlo o para facilitar futuras modificaciones(proceso de mantenimiento).

    1.1.3 Dar el primer paso

    En principio, cualquier algoritmo que diseemos para ser ejecutado en una computadora,puede ser realizado a mano, con papel y lpiz, suponiendo que nosotros simulemos ser el

  • 1.1 Del mundo real a la solucin por computadora 15

    procesador y que disponemos del tiempo suficiente para llevarlo a cabo. En realidad, encargamosa la computadora la ejecucin de los pasos que componen un algoritmo porque es capaz decompletarlo en un tiempo mucho menor del que nosotros emplearamos, y porque la computadoraes menos proclive a cometer errores que nosotros, quienes por distraccin o cansancio erramoshabitualmente.Sin embargo, las computadoras slo pueden ejecutar algoritmos que se componen de accionesque puede entender. Por lo tanto, es necesario conocer bien cules son dichas acciones paradisear algoritmos bien escritos.Saber cul es el algoritmo que resuelve un problema dado, suele ser un paso difcil para todoaquel que no tenga prctica en el tema. Para escribir algoritmos, el primer paso necesarioes plantear cul sera la solucin del problema en trminos comunes, en palabras habituales,haciendo uso de todo lo que est a nuestro alcance, la imaginacin, la matemtica, el dibujo, elintercambio de ideas, la lgica.No existe una tcnica establecida para encarar la solucin de un problema. La ntima asociacinentre el proceso de descubrimiento de algoritmos y el de resolucin de problemas, en general hahecho que los cientficos de la computacin se unan a otras disciplinas en la bsqueda de mejorestcnicas para resolverlos. Pero la capacidad para resolver problemas sigue siendo ms una aptitudartstica que debe desarrollarse individualmente, que una ciencia precisa por aprender.

    1.1.4 El modelo computacionalPara encarar la resolucin de un problema por computadora hay que considerar como punto

    de partida que el procesamiento de la informacin lleva en s el hecho de tomar datos, elaborarlosy emitir resultados de acuerdo a dichos datos y a la lgica del proceso que se est ejecutandoen ese momento. Por lo tanto, se puede pensar en un modelo computacional compuesto de trespartes: ENTRADA, PROCESO y SALIDA, como se muestra en la Figura 2.

    Una vez entendido el problema hay que desentraar del enunciado los datos necesariospara comenzar el proceso de resolucin, abstrayndose del proceso de resolucin. Habra quepreguntarse Qu necesito para resolver el problema, si yo fuese el procesador? Qu datosnecesito que me de otra persona para poder obtener la solucin del problema?, y anotarloscomo ENTRADA o DATOS.Una vez determinados los datos, se deber determinar cul esel/los resultado/s, es decir, qu se obtiene con los datos de entrada y anotarlos como SALIDA oRESULTADOS.A veces pueden ser ms fciles de visualizar los resultados antes que los datos de entrada, endicho caso habra que preguntarse Para obtener este resultado, qu informacin necesito?.Luego se preguntar Cules son los pasos para llegar al resultado partiendo de los datos?,con lo cual se podr escribir el PROCESO o ALGORITMO asociado.Por ejemplo, si se desea realizar un algoritmo para calcular el rea y el permetro de un crculoen funcin de su radio, las diferentes partes del modelo computacional sern:

    ENTRADA: radioPROCESO: Area= pi radio^2 Permetro= 2 pi radioSALIDA: Area y Permetro

    El proceso (algoritmo) asociado a este problema ser:

  • 16 Introduccin a la Informtica

    Dar el valor del radio y guardar ese valor con el nombre RCalcular el rea como pi * R * RCalcular el permetro como 2 * pi * RInformar los resultados de rea y permetro

    Sin embargo, el proceso (algoritmo) expresado en forma coloquial no puede ser entendido porla computadora. Por lo cual habr que escribirlo siguiendo reglas especiales que la computadoraentienda.Vale la pena observar que la relacin entre entrada, proceso y salida no es algo que necesaria-mente se realice en este orden: primero ingresar todos los datos, luego procesarlos, y por ltimoexhibir todos los resultados. P. ej. un algoritmo puede solicitar la entrada de algunos datos,obtener ciertos resultados, y en base a esto pedir nuevos datos y mostrar otros resultados sobre lamarcha del proceso.

    1.1.5 Datos e informacinPor ltimo, describiremos la diferencia que existe entre Datos e Informacin, trminos que

    se pueden pensar como sinnimos.En el ambiente de la Informtica, el trmino informacin puede aplicarse a casi cualquier cosaque pueda comunicarse, tenga o no valor.

    Los datos, en principio, son informacin no elaborada, que una vez procesados (compara-dos, ordenados, sumados, etc.) constituyen informacin til.

    Segn esto, las palabras, los nmeros, las imgenes de este libro son smbolos que representandatos. Si subrayase una frase, se aadir informacin a la pgina.

    En una dada situacin problemtica se puede disponer de muchos datos, de los cuales sloalgunos pueden ser tiles para la resolucin del problema, es decir, considerados informacintil.

    Entonces podemos decir que la informacin es el conocimiento producido como resultadodel procesamiento de los datos.

    Otro trmino que se utiliza es Tratamiento de la informacin, referido al conjunto de op-eraciones que se realizan sobre una dada informacin. Esto es lectura de datos, preservardatos, comparar datos, procesar aritmticamente datos, presentar resultados. Una adecua-da combinacin de estas operaciones lleva a resolver los problemas.En el subcaptulo siguientecomenzaremos a formalizar lo vertido en esta seccin.

    1.2 Algoritmos

    En el presente captulo desarrollaremos el concepto de algoritmo, base de la temtica de estelibro.

    1.2.1 Qu es un algoritmo?El trmino algoritmo deriva del nombre del matemtico persa Abu Jafar Mohammed ibn

    Musa Al-Khwarizm (Mohammed, padre de Jafar, hijo de Moiss, nacido en Khowarizm), el cualvivi alrededor del ao 825 despus de Cristo. Al-Khowarizm escribi tratados de Aritmtica y

  • 1.2 Algoritmos 17

    lgebra. La acepcin original fue algorism y haca referencia al proceso de prueba de clculosrealizados utilizando nmeros arbigos, tema central del libro de Al-Khowarizm.

    Un algoritmo es una forma de describir la solucin de un problema, explicando paso a pasocomo se debe proceder para llegar a una respuesta encuadrada a los datos disponibles, en untiempo finito.

    Seguramente existirn distintos algoritmos para resolver un mismo problema y todos serncorrectos, cada uno de ellos pensado por una persona diferente, cada uno de ellos con un diseodistinto, cada uno de ellos con un sello propio. Escribir algoritmos es un arte, en el que cadapersona le dar su estilo personal. Las caractersticas de un algoritmo son:

    Un algoritmo debe ser preciso, es decir, debe indicar claramente, sin ambigedades, cadauno de los pasos a seguir para conseguir el objetivo propuesto.Un algoritmo debe estar exacto, es decir, que si se sigue el algoritmo varias veces con elmismo juego de datos, los resultados obtenidos deben ser los mismos.Un algoritmo debe ser finito, de tiempo finito, su ejecucin debe concluir en algnmomento.

    Quin ejecuta estas acciones? La respuesta es: un procesador.Un procesador es aquel sujeto o mquina que puede entender un enunciado y ejecutar eltrabajo indicado en el mismo.

    La sintaxis y semntica a utilizar para escribir un algoritmo depende del lenguaje que conoceel procesador, pues segn cul sea ste, habr que describir las tareas con ms o menos detalle.

    Entonces, frente a un problema, sabiendo quien ser el procesador y su lenguaje de comu-nicacin, podremos describir la solucin del problema mediante un algoritmo que pueda serentendido y ejecutado sin ambigedades.

    1.2.2 Un ejemplo cotidiano

    Para comenzar a formalizar los conceptos fundamentales para escribir algoritmos veremosun ejemplo de la vida cotidiana:

    Escribir la receta de cocina para hacer bombas de papa para 4 personas.Existen dos fases en la resolucin de este planteo:

    determinar los ingredientes necesarios,describir los pasos para hacer bombas de papas.

    1. Ingredientes (elementos necesarios): 1 Kg. de papas, 1 huevo, pan rallado, queso cremoso,aceite, sal y pimienta a gusto.

    2. Separar en tareas los pasos necesarios para lograr el objetivo:Tarea 1: Pelar un Kg. de papas y cortarlas en dados pequeosTarea 2: Hervir las papas hasta que estn cocidasTarea 3: Pisar las papas hasta lograr un purTarea 4: Condimentar a gusto y dejar enfriar.Tarea 5: Batir el huevo en un bolsTarea 5.1: Salpimentar a gustoTarea 6: Colocar en un plato el pan ralladoTarea 7: Cortar el queso en dados de 1cm aproximadamenteTarea 8: Tomar una porcin de pur.Tarea 8.1: Colocarle un dado de queso en el interior

  • 18 Introduccin a la Informtica

    Tarea 8.2: Realizar una bola ocultando el quesoTarea 8.3: Pasarla por el huevo y luego por el pan ralladoRepetir la tarea 8 hasta que no haya ms pur.Tarea 9: Colocar una taza de aceite en una sartnTarea 9.1: calentar a fuego moderadoTarea 10: Colocar las bombas de papas en el aceite y cocinar hasta que se dorenTarea 10.1: Sacar del fuego y colocarlas sobre papel absorbente.Repetir la tarea 10 para cocinar todas las bombas.FIN.

    Seguramente Ud. habr escrito una receta de cocina distinta, o habr pensado que no sabehacer este algoritmo, y por lo tanto debi consultar con algn cocinero experto. Experto no serefiere a un chef especializado, slo debe ser una persona que sepa realizar las acciones, porejemplo su mam.

    Pero quin ejecuta estas acciones? Tal cual est planteado el algoritmo lo podr ejecu-tar toda persona que comprenda que es batir los huevos sin ambigedades ni ms detalles.Tal vez Ud. pueda seguir estos pasos y terminar con una exquisita comida, o quizs no estan preparado para enfrentar dicho desafo.Pero porqu pensar en subestimar al lector, tal vezUd. sea un experto cocinero, y no necesite seguir estos pasos para hacer las bombas de papas,simplemente su algoritmo sea Tarea 1: hacer bombas de papas para 4 personas, pues es unaorden que entiende perfectamente.Se concluye pues que la redaccin de un algoritmo dependedel procesador que lo va a ejecutar.

    Como conclusin, frente a un problema debemos saber quin ser el procesador y escribiruna solucin que pueda entender y llevar a cabo sin ambigedades.

    1.2.3 Problemas algortmicos

    Son aquellos problemas cuya solucin puede expresarse mediante un algoritmo.En la vida cotidiana encontramos muchos problemas algortmicos, tanto dentro como fuera

    del campo altamente especializado de la informtica. Otros problemas algortmicos son lossiguientes:

    Problema algortmico AlgoritmoIr a la Biblioteca. Conjunto de acciones para llegar a la BibliotecaDar la vuelta al mundo por el Ecuador. Un itinerario para recorrer el mundoResolver una ecuacin matemtica. Pasos para resolver una ecuacinCambiar la rueda a un auto. Pasos a seguir para cambiar la rueda

    En estos casos, los algoritmos muestran las principales caractersticas sealadas en la defini-cin: exactitud, efectividad y terminacin garantizada. Cuando se ejecutan determinados al-goritmos pueden completarse en un pequeo intervalo de tiempo, mientras que otros puedenllevar mucho tiempo.Aqu cabe preguntar si existen problemas no algortmicos, y la respuesta esafirmativa.Un ejemplo de este caso es el problema de Escribir todos los nmeros enteros comenzandodesde el 1. No es un problema algortmico, pues la resolucin (que todos podemos imaginar yescribir sin dificultad) no cumple la condicin de finitud.

    1.2.4 Definicin de ambiente y accin

    Ambientede un trabajo, es el conjunto de todos los recursos necesarios para la ejecucin deese trabajo.

  • 1.2 Algoritmos 19

    Por ejemplo los ingredientes son el ambiente en la receta de cocina.

    Accin es un evento que modifica el ambiente.

    Descripto el ambiente de un problema, una accin sobre ese ambiente es un hecho deduracin finita por el cual, a partir de un estado inicial, se obtiene un nuevo estado final. Porejemplo, en la accin pelar las papas, el estado inicial es: las papas sin pelar y el estado final,las papas peladas.

    1.2.5 Accin primitiva y no primitiva

    A continuacin veremos cules son las acciones primitivas y cules no lo son.Las acciones primitivas son las que el procesador puede interpretar y ejecutar.

    Pero, qu sucedera si ese procesador no entiende una accin determinada? Especficamenteesa accin no pertenece a su lenguaje. Habr que modificarla de tal manera que pueda ser escritaen trminos entendibles por el procesador. En muchos casos este tipo de acciones deben serdescompuestas en tareas ms detalladas para lograr el efecto que se desea.

    Por ejemplo en nuestro algoritmo culinario, podra ser el caso que un determinado procesador nosepa de que se trata la tarea: Batir huevos en un bols y haya que explicrselo con ms detalles.La accin no primitiva debe ser descompuesta en acciones primitivas.

    Existen diferentes tcnicas para descomponer acciones no primitivas en acciones primitivas.Uno de estos mtodos se denomina Top-Down o de refinamientos sucesivos, y ser el queusaremos en este libro.

    Este mtodo parte de una idea general de resolucin y luego va descomponiendo las tareashasta conseguir una secuencia de acciones primitivas que permitan al procesador resolverla.

    Se concluye pues que se debe escribir un algoritmo que resuelva el problema dado, y queluego deber ser adaptado al procesador que lo va a ejecutar. Por ello, frente a un problemadebemos saber quien ser el procesador y escribir una solucin que pueda entender y ejecutar.

    En este libro planteamos que el procesador ser la computadora equipada con algn lenguajeespecfico.

    La computadora puede trabajar con distintos lenguajes. Sin embargo, para un gran nmerode tareas de uso corriente, las acciones primitivas son similares en los distintos lenguajes, lo quepermite desarrollar algoritmos que sean independientes del lenguaje e incluso de la mquina quelos va a ejecutar.

    1.2.6 Programa

    Definiremos qu se entiende por el trmino programa.Un programa es un conjunto de acciones que puede entender y ejecutar una computadora.

    Otra definicin podra ser: es un algoritmo traducido a algn lenguaje que pueda serentendido por una computadora para poder ejecutarlo. Cada accin del programa se denominainstruccin.

  • 20 Introduccin a la Informtica

    Una instruccin es una combinacin de palabras y smbolos que obedeciendo a la sintaxispropia de un lenguaje, son interpretados y utilizados por el computador para realizar unadeterminada accin.

    Para llegar a hacer un programa es necesario el diseo previo del algoritmo. Esto es, represen-tar la solucin del problema en un lenguaje natural, en el cual se expresan las ideas diariamente.

    Lenguaje de programacin es un conjunto de smbolos (sintaxis) y reglas (semntica) quepermite expresar programas.

    Los algoritmos deberan ser independientes tanto del lenguaje de programacin en que seexpresa el programa, como de la computadora que lo va a ejecutar.

    1.2.7 Representacin de AlgoritmosAhora veremos en que forma se puede escribir un algoritmo.

    No existe un lenguaje nico y universal para escribir algoritmos. Cada lenguaje tiene una sintaxisdeterminada, un grupo finito de elementos que ayudan a representar los algoritmos, y unasemntica asociada a la sintaxis, la cual se refiere al concepto que se representa.

  • 1.2 Algoritmos 21

    La sintaxis, conformada por dibujos y/o por palabras, no debe ser ambigua, y debe tener un nivelde detalle bien establecido con el cual pueda expresarse el algoritmo.Otro punto importante a tener en cuenta es que toda representacin de algoritmos debe usaralguna forma que permita independizar dicho algoritmo de detalles propios de los lenguajes deprogramacin en s. Adems, la descripcin del algoritmo deber ser tal que permita ser fcilmentetransformado en un programa.Existen dos tipos de representaciones: la grfica (mediante dibujos) y la no grfica (mediantetextos).Los mtodos usuales para representar algoritmos son:

    1. Diagrama de flujo2. Diagrama de Nassi Schneiderman (comnmente denominado Diagrama de Chapin)3. Pseudocdigo4. Lenguaje natural5. FrmulasLos dos primeros son formas grficas de representacin, mientras que los ltimos son no

    grficas.Analizaremos las distintas representaciones.Los mtodos 4) y 5) no suelen ser fciles de transformar en programas. No es frecuente que

    un algoritmo sea expresado por medio de una simple frmula, pues no es sencillo traducirlo a unlenguaje de programacin. Observamos en el ejemplo de las bombas de papas lo ambiguo dellenguaje natural (en nuestro caso el espaol).A continuacin veremos las diferentes representaciones sobre un mismo algoritmo, cuyo proble-ma base es:

    Calcular el promedio de un conjunto de nmeros positivos, suponiendo que los nmeros ingresande a uno por teclado. Un valor cero como entrada indicar que finaliz la serie de nmerospositivos.

    1.2.8 Diagrama de flujoEs un diagrama que utiliza figuras geomtricas unidas por flechas para indicar la secuencia

    en que deben ejecutarse las acciones. Los smbolos utilizados han sido normalizados por elInstituto Norteamericano de Normalizacin (ANSI). Algunos de ellos y su significado son lossiguientes:

    El algoritmo del problema planteado utilizando un diagrama de flujo resulta de la siguientemanera.

    Uno de los inconvenientes de este tipo de representacin es la dificultad para modificarlo enel caso que se descubran errores de lgica y se debiera agregar dibujos para nuevas acciones.

  • 22 Introduccin a la Informtica

    Otra cuestin a notar es que no dispone de smbolos para las estructuras de control de repeticin.

    1.2.9 Diagrama de Nassi Schneiderman

    Tambin conocido como Diagrama de Chapin, es un diagrama de flujo donde se omiten lasflechas de unin, resultando cajas contiguas. Las acciones se escriben en rectngulos sucesivos.

    El algoritmo propuesto se representa en Diagrama de Chapin de la siguiente forma:

    Uno de los inconvenientes de este tipo de representacin, al igual que el anterior, es ladificultad para modificarlo al agregar rectngulos para nuevas acciones si se descubren erroresde lgica.

  • 1.3 Lenguajes de programacin 23

    1.2.10 PseudocdigoUn pseudocdigo es un cdigo no convencional o lenguaje no establecido universalmente.Concretamente un pseudocdigo es un lenguaje formado por palabras comunes del idioma

    que elija el que lo use, en nuestro caso el espaol. Por lo cual el uso de tal tipo de lenguaje haceque la escritura de los algoritmos sea relativamente fcil.La ventaja del pseudocdigo es que al usarlo, el programador se puede concentrar en la lgica deresolucin del problema ms que en las reglas del lenguaje, el cual ya conoce.Por otra parte, facilita la modificacin del algoritmo si se descubren errores de lgica, ya quepara agregar nuevas acciones se escribe en el mismo rengln separando las acciones por un puntoy coma.El algoritmo propuesto se representa en pseudocdigo de la siguiente forma:

    En este libro se utilizarn las representaciones Diagrama de flujo y Pseudocdigo indistinta-mente. Segn nuestra experiencia es conveniente el Pseudocdigo a una representacin grfica,tal como Diagrama de Flujo o Diagrama de Chapn pues se considera que:

    Ocupa menos espacio en una hoja de papel.No se necesitan elementos de dibujo para realizarlo.Permite representar en forma fcil operaciones repetitivas complejas.Es muy fcil pasar del algoritmo representado por un pseudocdigo a un programa.Se puede observar claramente los niveles que tiene cada operacin, por la indentacin.Es la representacin narrativa de los pasos que debe seguir un algoritmo para dar solucina un problema determinado. El pseudocdigo utiliza palabras que indican el proceso arealizar.Es muy simple introducir modificaciones, continuando en el mismo rengln.

    1.3 Lenguajes de programacin

    Como hemos visto, un Lenguaje de Programacin es un conjunto de palabras y smbolos quepueden expresar ideas. Est compuesto por una sintaxis (palabras y smbolos) y una semntica(reglas que permite expresar ideas).Lenguaje de programacin es un conjunto de smbolos (sintaxis) y reglas (semntica) quepermite expresar programas.

    Los lenguajes de programacin se pueden clasificar de la siguiente manera:

    Lenguaje de mquinaLenguaje de bajo nivelLenguaje de alto nivel

  • 24 Introduccin a la Informtica

    Lenguaje algortmicoA continuacin veremos detalles de cada uno de ellos.

    Lenguaje de mquina

    Est escrito en un idioma que entiende el microprocesador (el CPU, el cerebro de lamquina). Las instrucciones son cadenas de 0 y 1 en cdigo binario.Por ejemplo, la instruccinsumar los nmeros 9 y 11 podra ser 0001 1100 0111 0011 1001 1011

    Ventaja: la velocidad de ejecucin de los programas es directa pues el microprocesador lasentiende y ejecuta.

    Desventaja: es un lenguaje de smbolos muy diferentes al nuestro, por lo tanto la codificacindel programa se hace lenta y se pueden cometer muchos errores. Las instrucciones en cdigo demquina dependen del hardware de la computadora y por lo tanto difieren de una a otra.

    Lenguaje de bajo nivel

    Los lenguajes de bajo nivel por excelencia son los ENSAMBLADORES o Lenguaje AS-SEMBLER. Las instrucciones son mnemotcnicos, como por ejemplo ADD, DIV, STR, etc. Unainstruccin del ejemplo anterior sera ADD 9,11.

    Ventaja: mayor facilidad de escritura que el lenguaje anterior.

    Desventaja: depende del microprocesador (existe un lenguaje para cada uno). La formacin delos programadores es ms compleja que la correspondiente a los programadores de alto nivel yaque exige no slo tcnicas de programacin sino tambin el conocimiento del funcionamientointerno de la mquina. Se utiliza en la programacin de PLC, control de procesos, aplicacionesde tiempo real, control de dispositivos. Un programa escrito en un lenguaje de este tipo nopuede ser ejecutado directamente por el procesador, y debe ser traducido a cdigo de mquinamediante un ensamblador.No se debe confundir, aunque en espaol adoptan el mismo nombre, elprograma ensamblador ASSEMBLER encargado de efectuar la traduccin del programa a cdigode mquina, con el lenguaje de programacin ensamblador ASSEMBLY LENGUAGE.

    Lenguaje de alto nivel

    Est diseado para que las personas escriban y entiendan los programas de modo mucho msnatural, acercndose al lenguaje natural. Una instruccin del ejemplo anterior sera 9 + 11.Loslenguajes de alto nivel son los ms populares y existe una variedad muy grande. Algunos ejem-plos son BASIC, Pascal, C, C++, Cobol, Fortran, Delphi, Java, Python, SQL y todas sus variantes.

    Ventajas: son los ms utilizados por los programadores. Son independientes de la mquina,las instrucciones de estos lenguajes no dependen del microprocesador, por lo cual se puedencorrer en diferentes computadoras. Son transportables, lo que significa la posibilidad de poder serejecutados con poca o ninguna modificacin en diferentes tipos de computadoras. La escriturade los programas con este tipo de lenguajes se basa en reglas sintcticas similares a nuestrolenguaje, por lo tanto el aprestamiento de los programadores es mucho ms rpida que en loslenguajes anteriormente nombrados.

    Desventajas: Ocupan ms lugar de memoria principal (RAM) que los anteriores. El tiempo

  • 1.4 Nuestro procesador: la computadora 25

    de ejecucin es mayor pues necesitan varias traducciones.

    Lenguaje algortmicoEst formado por acciones primitivas provenientes de nuestro lenguaje natural. Si nosotros

    somos los que vamos a ejecutar esas acciones, entonces se podr escribir en espaol. Unainstruccin del ejemplo anterior sera 9+11=

    Ventaja: es fcil aprender un pseudocdigo.

    Desventaja: necesita muchas traducciones para ser ejecutado por el microprocesador, una deellas es la conversin a un programa a travs de un lenguaje de programacin.

    1.4 Nuestro procesador: la computadora

    En el capitulo anterior hemos visto el modelo computacional (Entrada-Proceso-Salida) focal-izando as el estudio en la computadora como procesador de los algoritmos que desarrollaremosa lo largo de este libro. A continuacin analizaremos brevemente los conceptos bsicos que hayque tener en cuenta para poder programar para ella.El diccionario de la Real Academia Espaoladefine computador electrnico como Mquina electrnica, analgica o digital, dotada de unamemoria de gran capacidad y de mtodos de tratamiento de la informacin, capaz de resolverproblemas matemticos y lgicos mediante la utilizacin automtica de programas informticos.La propia definicin nos da indicios acerca de algunos elementos bsicos del computador:

    la memoria yalgn dispositivo capaz de efectuar clculos matemticos y lgicos.

    La memoria es un gran almacn de informacin. En ella se guardan todo tipo de datos: valoresnumricos, textos, imgenes, sonido, etc.

    El dispositivo encargado de efectuar operaciones matemticas y lgicas, recibe el nombrede Unidad Aritmtico-Lgica (UAL o ALU en ingls). Es una calculadora inteligente capazde trabajar con datos y producir, a partir de ellos, nuevos datos, o sea el resultado de las opera-ciones.Existe otro dispositivo muy importante, la Unidad de Control (UC), que se encarga detransportar la informacin de la memoria a la UAL, de controlar la UAL para que efecte lasoperaciones pertinentes y de depositar los resultados en la memoria.El conjunto que forman laUnidad de Control y la UAL se conoce por Unidad Central de Proceso (UCP o CPU en inglsCentral Processing Unit).

    Se puede imaginar la memoria como un armario enorme con cajones numerados y la UCP,como una persona que, equipada con una calculadora (la UAL), es capaz de buscar operandosen la memoria, efectuar clculos con ellos y dejar los resultados en la memoria. Recordar queel procesador trabaja todo en la memoria.Utilizando un lenguaje ms tcnico: cada uno de loscajones que conforman la memoria recibe el nombre decelda de memoriay el nmero que loidentifica es su direccin o posicin en la memoria.

    Las celdas de la memoria son circuitos electrnicos organizados en pequeas porciones, todas deigual tamao. En cada una de ellas se puede almacenar secuencias de unos y ceros de tamaofijo.

    Por qu unos y ceros?

  • 26 Introduccin a la Informtica

    Porque la tecnologa de las computadoras se basa en la sencillez de construir dispositivosbinarios, con dos posibles estados: encendido/apagado, hay corriente/no hay corriente, cierto/-falso, uno/cero. Es posible representar datos tan variados como nmeros, textos, imgenes,sonido, videos, con slo unos y ceros? La respuesta es SI.

    Cada uno de estos compartimentos o celdas de la memoria es un byte o unidad de informacin.Tiene asignada una direccin nica, que le servir a la Unidad de Control para organizar su tarea.

    Por ejemplo:

    Un byte es un conjunto de 8 bits. Un bit (acrnimo de las palabras binary digit) es la repre-sentacin de un estado de la seal elctrica.

    En este modelo de memoria, cada direccin indica unvocamente una celda. Sobre cada celdase puede leer o escribir. La operacin de escritura sobre una celda, coloca un valor sobre lamisma destruyendo el valor previo. Si en este caso se escribiese en la celda FFFC el valor 10,en una lectura posterior arrojara el valor 10 y no la B pues sta ha sido reemplazada. Aqupodemos concluir que la operacin de escritura es destructiva del contenido de la celda, noas la lectura.De este modo los dispositivos de entrada (teclado, mouse, archivo) almacenan(guardan, escriben) los datos en memoria, el procesador los procesa (realiza operaciones, lee yescribe en la memoria) y los dispositivos de salida (pantalla, impresora, archivo) muestran loscontenidos de la memoria al mundo exterior.

    La MEMORIA PRINCIPAL es el dispositivo de almacenamiento temporal de DATOS, IN-STRUCCIONES y RESULTADOS intermedios y definitivos de la ejecucin de programas. Eltrmino temporal se refiere a que este tipo de memoria tiene la caracterstica de ser voltil, esdecir, que cuando se corta el suministro elctrico la informacin en ella desaparece.

    Por otro lado se encuentran las memorias permanentes, denominadas MEMORIAS SECUN-DARIAS, las que permiten guardar de forma permanente programas e informacin. En esterubro se encuentran los discos y las memorias flash, entre otras.

    1.5 Conceptos y elementos bsicos para la resolucin algortmica

    Hemos visto que el manejo de la memoria de una computadora es de suma importancia.En esta lnea, una cuestin a tener en cuenta son los tipos de dato que maneja el computador:

  • 1.5 Conceptos y elementos bsicos para la resolucin algortmica 27

    nmeros y caracteres.Los nmeros pueden estar escritos en sistema decimal (nuestro sistemadiario), sistema binario (utilizado por el microprocesador por conveniencia y simplicidad), osistema hexadecimal (notacin compacta del binario). Por otro lado estn los caracteres, sussmbolos, representaciones y significados. Un carcter es una letra mayscula, minscula, signode puntuacin, signo especial, etc.A continuacin veremos a que se refiere un tipo de dato ypresentaremos las variables y las constantes, conceptos basales de los algoritmos.

    1.5.1 Tipo de datoDefiniremos tipo de dato de la siguiente manera:

    Un tipo de dato est determinado por un conjunto de valores ordenados y por las operacionespermitidas sobre esos valores.

    Los atributos que distinguen a un tipo de otro son:Conjunto de valores ordenados y rango de definicin de los mismosConjunto de operaciones que se pueden realizar sobre ellosRepresentacin interna de mquina de los valores.

    Se debe notar que, al contrario de lo que ocurre en el lgebra, el conjunto de valores es finito,tiene un rango de valores, o sea un mnimo y un mximo claramente especificados.

    Los tipos de dato que trabajaremos para nuestro procesador son entero, real, carcter y lgico.Se los conoce como tipos primitivos de datos.

    El conjunto de valores que pueden asumir los enteros o los reales estn acotados a losrangos de los nmeros que puede manejar el procesador en cuestin, con las limitaciones debytes que se usen, es decir, del contenedor que disponga ese procesador.Por otro lado estnlos caracteres, sus smbolos, representaciones y significados. Cada carcter (letras maysculas,minsculas, signos de puntuacin, signos especiales, etc.) tiene asociado un cdigo numrico.Estos valores numricos fueron establecidos en una codificacin estndar, el Cdigo ASCII(American Standard Code for Information Exchange). Esta codificacin utiliza 7 bits pararepresentar un carcter, a cada uno de los cuales le corresponde un nmero entre el 0 y el 255. Acontinuacin se observa la tabla ASCII, donde cada columna consta de un nmero de codificacindel carcter correspondiente:

    1.5.2 Tipos de dato a utilizarLos tipos de dato que reconoce nuestro procesador, la computadora, son los enteros, los

    reales, los caracteres y los lgicos. La tabla siguiente muestra ejemplos de rango de valoresy operaciones permitidas de cada tipo primitivo.

    Otro tipo de dato que se utiliza habitualmente es el string, el cual se refiere a una cadena decaracteres, es decir texto. Por ejemplo, un nombre o una direccin. Un objeto del tipo de dato

  • 28 Introduccin a la Informtica

    string asume como valores posibles secuencias de caracteres tomados de un conjunto especfico(por ejemplo el cdigo ASCII) y admite como operaciones la comparacin y la concatenacin.Cabe aclarar que el string no es un tipo de dato primitivo, sino un tipo de dato compuesto porelementos primitivos, los caracteres.Otro tipo de dato es el de los nmeros complejos, formadopor un par ordenado de nmeros reales. Este tipo de dato compuesto es til en aplicaciones deIngeniera y permite realizar directamente las operaciones sobre nmeros complejos. Conjuntos

  • 1.5 Conceptos y elementos bsicos para la resolucin algortmica 29

    de datos ms elaborados, con caractersticas y operaciones propias constituyen los tipos de datocompuestos o estructuras de datos, las cuales veremos en un captulo posterior. Los strings ynmeros complejos son casos de estructuras de datos.

    1.5.3 Variables y constantes

    A continuacin veremos dos conceptos importantes de la Algoritmia: variables y con-stantes.El procesador necesita disponer de un mecanismo que permita el almacenamiento y lamanipulacin de los datos. En un algoritmo o programa esto es llevado a cabo por entidades alas que denominaremos variables y constantes. Definimos:Una variable es un objeto de memoria cuyo valor puede cambiar durante el desarrollo delalgoritmo o ejecucin del programa

    Los atributos de una variable son nombre, tipo de dato y valor.Un nombre que la designa (en bajo nivel hace referencia a la direccin de una celda dememoria). Es recomendable que el nombre de la variable sea representativo del uso de lamisma a lo largo del algoritmo o programa.Untipo de dato que describe el uso de la variable.Un valor que describe el contenido.

    El siguiente ejemplo da cuenta del nombre de la variable suma, del tipo de dato que puedemanejar entero y de la ubicacin en memoria FFFA.

    Existen lenguajes donde es obligatorio declarar las variables a utilizar, es decir, listar lasvariables que se utilizarn e indicar el tipo de cada una de ellas. Estos lenguajes son de tipofuerte o estricto como por ejemplo el lenguaje Pascal. Mientras que en otros lenguajes como C,Python, Fox, no hace falta una declaracin del tipo de dato de las variables, aunque siempre esrecomendable por legibilidad del algoritmo o programa.La declaracin de las variables implica darles un lugar en memoria, un nombre y tipo de datoasociado.

    En nuestro caso realizaremos la declaracin de las variables previamente al algoritmo, con-siderando a stas como el ambiente de resolucin del problema. Cuando se declara una variable,el microprocesador reserva una porcin de memoria principal para almacenar los valores corre-spondientes al tipo de dato de la misma.Para unificar los criterios de escritura de los algoritmos escribiremos primero el tipo de dato yluego la lista de variables separadas por coma

    Por ejemplo:real suma, permetrocaracter inicialentero edad, comisin, cantidad, contador

    Dado el concepto de variables ahora veremos qu es una constante.Una constante es un objeto cuyo valor no puede ser modificado durante el desarrollo delalgoritmo o ejecucin del programa.

  • 30 Introduccin a la Informtica

    El concepto constante es similar al de variable pero con la particularidad de que suvalor permanece inalterable.

    La definicin de las constantes implica darle un nombre a un valor determinado.

    Con una constante se especifican valores que no se calculan ni se leen, sino que permanecenconstantes. En el ejemplo del clculo del permetro de la circunferencia (2*Pi*radio), 2 es unaconstante expresada por su valor, radio es una variable y Pi es una constante expresada conun nombre, la cual fue definida como Pi=3,1416 al comienzo del algoritmo. Cada vez que elnombre Pi aparece en el desarrollo del mismo, ser reemplazado por el valor 3,1416.

    1.5.4 Nombres de variables/constantes (identificadores)Cada lenguaje tiene reglas para construir los nombres o identificadores. En este libro vamos

    a proponer un conjunto de reglas propias, a saber:1. Todo identificador debe comenzar con una letra del alfabeto ingls (mayscula o minscu-

    la),2. No debe ser palabra reservada del lenguaje,3. No debe contener espacios en blanco ni punto,4. Puede contener una combinacin de los siguientes caracteres:

    Letras: a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M NO P Q R S T U V W X Y ZDgitos: 0 1 2 3 4 5 6 7 8 9Caracteres especiales: _ @ / ( ) ! % & < > ? $

    5. La cantidad de caracteres que conforman al identificador no est limitada,6. Todo identificador debe representar el uso que se le dar en el algoritmo.Los siguientes son ejemplos de nombres de identificadores vlidos:

    Curso_de_Informatica r2e2 Info INFO iNfOLos siguientes son ejemplos de nombres de identificadores no vlidos:

    @comienzo comienza con un smbolo especialLa solucin contiene un espacio en blanco y una vocal acentuada1er_solucion comienza con un nmero

    1.5.5 Clasificacin de VariablesLas variables se pueden clasificar por su contenido y por su uso.

    Por su Contenido Por su UsoNumricas de TrabajoLgicas contadorCarcter acumulador o sumadorString

    Por su ContenidoVariables Numricas: son aquellas en las cuales se almacenan valores numricos, enteros o

    reales, positivos o negativos. Ejemplo: costo=2500 , x=12,50Una variable numrica almacenanmeros y slo puede estar involucrada en operaciones aritmticas.Variables Lgicas: son aquel-las que slo pueden contener uno de 2 valores: verdadero o falso (V o F, true o false, 0 o 1, Si o No). Ejemplo z= V , x= FVariables Carcter: cuyo contenido es un solo carcter alfanumrico (unaletra, un carcter especial, un nmero), que escribiremos entre apstrofo. Ejemplo: letra = a,Inicial = L, Rta = S , dgito= 4Variables Cadena de caracteres o String: cuyo contenido est

  • 1.5 Conceptos y elementos bsicos para la resolucin algortmica 31

    formado por caracteres alfanumricos (letras, nmeros y caracteres especiales), que escribiremosentre comillas. Ejemplo: letra=a, Apellido=Lopez, Direccion=Pasco #190

    En este punto es interesante analizar la siguiente pregunta: Cul es la diferencia que existe entrelas constantes a y a? En primer lugar, la a es una constante de tipo string, pues esta escritaentre comillas, y la a es de tipo car, pues esta entre apostrofos. Pero hasta aqu no notamosgrandes diferencias. Entonces la pregunta es emphQu diferencia hace el procesador con loscaracteres y los strings? El procesador utiliza un Byte para almacenar un carcter. Sin embargo,cuando se trata de string, depender de la longitud del mismo. Por ello, el microprocesadoragrega un carcter especial para marcar el final de la cadena de caracteres. Cuando el procesadoralmacena una cadena de caracteres en memoria lo hace ubicando cada carcter en un Byte enposiciones consecutivas de memoria. Pero cuando quiera recuperar dicha cadena de memoria nosabr hasta que Byte debe tomar. Este problema se solucion haciendo que el procesador coloqueun carcter especial al final de la cadena para identificar su fin. A este caracter especial lodenominaremos emphfin de cadena, y como es especial no figura en el cdigo ASCII. Para poderexpresarlo en nuestros algoritmos lo escribiremos como /s , aunque usaremos 2 caracteres seconsiderar que internamente el procesador lo va a entender como el carcter fin de cadena. Estecarcter ocupa un Byte.En conclusin, la diferencia entre laemph a emph y laemph a, es quela a ocupa dos Bytes de memoria, uno para la representacin del cracter a y otro para el finde cadena, en cambio la a ocupa un nico lugar de memoria. En el caso de variables de tipocadena el nombre de la variable indica la posicin inicial y el resto es consecutivo.

    Por su Uso

    Variables de Trabajo: son variables que reciben un valor, ya sea de un ingreso de informacino como resultado de una operacin. Ejemplo: suma = a + b, precio= 10.52Contadores: sonvariables que se utilizan para llevar el control del nmero de ocasiones en que se realiza unaoperacin o se cumple una condicin. Los incrementos son generalmente de uno en uno. Ejemplo:Cont = Cont + 1Acumuladores o Sumadores: son variables que se utilizan para llevar la sumaacumulativa de una serie de valores que se van leyendo o calculando progresivamente. Ejemplo:Suma = Suma + x

    1.5.6 Expresiones

    En este tem veremos en qu operaciones pueden intervenir los datos de acuerdo a su tipo.Una expresin describe un clculo a efectuar cuyo resultado es un nico valor.

    Una expresin est constituida por operandos y operadores.Las expresiones pueden ser del tipo numrica, relacional, lgica o de carcter, de acuerdo al

    tipo de dato de su resultado. El resultado de una expresin aritmtica es del tipo numrico, el deuna expresin relacional y el de una expresin lgica es de tipo lgico, y el de una expresincarcter es del tipo cadena de caracteres o carcter.

    Expresiones aritmticas

    Las expresiones aritmticas son anlogas a las frmulas matemticas. Los elementos inter-vinientes son numricos (reales, enteros) y las operaciones son aritmticas.

    Los operadores son:(*) Cuando en una operacin los dos operandos son enteros el resultado es entero. Pero si al

    menos uno de los operandos es real, el entero interviniente se flota, es decir, se convierte en no-tacin de punto flotante, y as el procesador opera en real, dando como resultado un nmero real.

  • 32 Introduccin a la Informtica

    En forma similar ocurre si algn operando es complejo, en cuyo caso el resultado es complejo.

    (**) En la operacin de potencia se consideran ambos operandos como enteros. Cuando elresultado se sale del rango de enteros se lo registra como un nmero real.Reglas para evaluar expresiones aritmticas Las expresiones se evalan de izquierda aderecha. Regla algortmica fundamental: la expresin debe estar escrita en un nico rengln.Losparntesis se usan para anidar expresiones y alterar el orden de evaluacin. Las operacionesencerradas entre parntesis se evalan primero.Las reglas de precedencia de las expresionesindican el orden en que la computadora evala una expresin cuando hay ms de un operador.Para expresiones aritmticas se siguen, lgicamente, las reglas de precedencia aritmtica. Elorden de evaluacin de los operadores en cualquier expresin es el siguiente:

    Parntesis (empezando por los ms internos)PotenciasProductos y DivisionesSumas y restasConcatenacinRelacionalesLgicos

    Cuando hay dos operadores con la misma precedencia, se calcula primero la operacin que esta la izquierda.

    Funciones internas o de bibliotecaLos lenguajes de programacin traen incorporado funciones que conforman las funciones debiblioteca (library en ingls), algunas de ellas se muestran en la siguiente tabla:

    Ejercicios propuestosCul es el resultado de las siguientes expresiones algortmicas aritmticas?

    a) 10.5 / 3 =b) 1/ 4 =c) 1/ 4.0 =d) 3 + 6 * 2 =e) -4 * 7 + 2 ** 3 / 4 - 5 =f) 12 + 3 * 7 + 5 * 4 =g) sqrt( 25 ) =h) abs ( 6 ) =i) abs (-12.5 ) =j) nint( 6.64 ) =k) nint ( 6.23 ) =l) int( 6.64 ) =

  • 1.5 Conceptos y elementos bsicos para la resolucin algortmica 33

    m) int(6.23 ) =n) (2 * X) 5 /= (3 + 8) * 2 = si X=3

    Convertir las siguientes expresiones algebraicas en expresiones algortmicas. Tener en cuentala regla fundamental de la escritura de las expresiones en Algoritmia: deben estar escrita en unnico rengln.

    Expresiones relacionales y lgicasEl resultado de este tipo de expresiones es de tipo lgico: Verdadero o Falso.

    Las expresiones lgicas se forman combinando constantes lgicas, variables lgicas y otrasexpresiones lgicas mediante operadores lgicos (NOT, AND, OR en ingls; NO, Y, O enespaol) y/o operadores de relacin (< > = = < >).

    Una expresin del tipo relacional tiene operandos que admiten una relacin de orden, talescomo los nmeros enteros, caracteres y cadenas de caracteres. Una expresin del tipo lgico,tambin denominado booleano, tiene como operandos expresiones relacionales y/o expresioneslgicas. Los operadores lgicos son: el NOT que es unario, es decir, aplicado a un nico operando,el AND y el OR, los cuales necesitan 2 operandos.

    Operadores de relacin > mayor < menor = igual >= mayor igual /= distinto

    Ejemplo Si A=4 y B=3, entonces (A-2) < (B-4) resulta falso.Para realizar comparaciones de datos de tipo carcter, se requiere un orden predefinido de

  • 34 Introduccin a la Informtica

    los caracteres. Para ello recurrimos al cdigo ASCII. All podemos ver que la a es mayor quela A , es decir, est antes la mayscula que la minscula.

    Ejercicio propuestoDeterminar el resultado de las siguientes expresiones relacionales, considerando la lgica

    del cdigo ASCII:A > a = Toms > Tomar = libro < librera =Operadores lgicos

    1- NOT es un operador unario, es decir que influye sobre una nica expresin del tipo lgica.

    NOT (expresin lgica)

    NOT (verdadero) = FalsoNOT (falso) = Verdadero

    2- AND es la conjuncin, la multiplicacin lgica, cuya lgica es:

    Conclusin: el resultado de una expresin con un operador AND es verdadero siempre ycuando todas las expresiones son verdaderas, en caso de existir una expresin falsa, el resultadoes falso.3- OR es la disyuncin o suma lgica, cuya lgica es:

    Conclusin: el resultado de una expresin con un operador OR es falso siempre y cuandotodas las expresiones son falsas, en caso contrario es verdadero.

    Ejercicios propuestosCul es el resultado de las siguientes expresiones algortmicas lgicas?.NOT. 4 > 6 = (1.0 < X) AND (X < Z + 7.5) = considerar que X= 7 y Z = 4 5 < B 4 .AND. A= 4 = si A=4, B=3 X 2 = 1 .OR. (X+3) > 6 = si X=3 .NOT. Z > 6 = si Z=6

    Cmo se expresan las siguientes condiciones algebraicas en forma algortmica?

  • 1.6 Algoritmos en Pseudocdigo 35

    Expresiones de caracteresUna expresin del tipo cadena de caracteres involucra operandos del tipo cadena y admite

    la operacin de concatenacin. Se identifica por un signo + y los operandos se encierran entrecomillas dobles.Por ejemplo la operacin Hola + amigo da como resultado Hola amigo.

    1.6 Algoritmos en Pseudocdigo

    En la seccin anterior describimos los tipos de dato que maneja nuestro procesador, elconcepto de variable y de constante, y cmo se conforman las expresiones.

    En esta seccin comenzaremos a conocer la sintaxis y semntica del lenguaje que entiendenuestro procesador. Veremos algunas de las acciones primitivas del lenguaje.

    Generalizando, las acciones que realiza nuestro procesador son:toma informacin desde algn perifrico de entrada,actualiza la memoria de datos,procesa los datos para obtener resultados parciales y finales (suma, resta, compara)enva los resultados a algn perifrico de salida.

    1.6.1 Accin de asignacinEl objetivo de una accin de asignacin es cambiar el valor almacenado en una variable.

    Sintaxis

    La expresin es evaluada, y su resultado es asignado como valor de la variable a la cual apuntala flecha, es decir, la expresin de la derecha se evala y su resultado es copiado al nombre devariable de la izquierda.Ejemplos:

    Sean entero i ; carcter c

    i3 + 4 se le asigna el valor 7 a la variable i

    c T se le asigna el valor T a la variable c

    As, tendremos asignacin aritmtica, lgica, de carcter y de cadena de caracteres.

    Notar que:

    La ocurrencia de una variable en el lado izquierdo de una asignacin denota la posicin dememoria donde guardar el valor resultante de evaluar la expresin del lado derecho.

  • 36 Introduccin a la Informtica

    La ocurrencia de una variable en el lado derecho de una asignacin denota su valor actual.Una misma variable puede aparecer en la parte izquierda y derecha de una asignacin.

    Por ejemplo: xx + 1

    Esta expresin es muy usual en la resolucin de algoritmos, pero NO debe interpretarse comouna ecuacin matemtica, ya que no tendra sentido. Por este motivo se usa una flecha en vez deun signo de igualdad. Esta asignacin significa que estamos usando el valor actual de la variablex para calcular su nuevo valor. Correccin de tipo durante la asignacinEn una asignacin x exp , el tipo de la variable x y el de la expresin exp debe ser el mismo.

    Pero existe una excepcin, es posible asignar un valor entero a una variable real.

    Ejemplo Si x : real y z : entero

    z 4

    x z

    Al asignar un valor entero a una variable real, el valor se transforma a un real, y luego selo asigna a x, resultando x = 4.0La conversin de entero a real se realiza en forma automtica,y se dice que el entero se flota (haciendo referencia al punto flotante, la coma decimal)Laconversin de real a entero, es decir z x no es permitida y da error.

    Ej. Cual es la diferencia?entre A B y A Bentre A 7 y A 7

    1.6.2 Accin LeerEl objetivo de una accin Leer es cambiar el valor almacenado en una variable a travs

    de perifricos de entrada (supongamos teclado, modem o disco). Se puede pensar como unaasignacin externa. Sintaxis Leer ( lista de variables )

    La lista de variables es separada por comas.

    Ejemplos Leer ( Num1, Num2 )

    Si desde teclado se ingresan dos nmero, el primer nmero ingresar en la variable Num1y el segundo en la variable Num2.Toda asignacin es una accin destructiva del contenido dememoria.

    1.6.3 Accin EscribirEl objetivo de una accin Escribir es mostrar los resultados o textos a travs de perifricos de

    salida (supongamos monitor, impresora, modem o disco)Sintaxis Escribir (lista de expresionesde salida)

    La forma para usarla ser:

    Escribir ( Num1) muestra el valor de una variable , en este caso de Num1

  • 1.6 Algoritmos en Pseudocdigo 37

    Escribir ( Buen da) muestra el texto encerrado entre comillas

    Escribir ( El resultado es , Num2) muestra el texto y el valor de la variable

    Escribir ( Num1 * Num2 / 34 ) muestra el resultado de la expresin

    A continuacin formalizaremos la escritura de un algoritmo.

    Estructura de un algoritmoLos algoritmos tienen dos partes bien definidas: la Parte declarativa, donde se describen

    los datos que se van a utilizar en el procedimiento de resolucin (el ambiente) y la Parte deprocesos, donde se describen las acciones del algoritmo en s (la lgica de resolucin).

    Existen variadas formas de escribir algoritmos en Pseudocdigo, en este libro nos guiaremoscon la siguiente estructura:

    Las palabras que estn en negrita son palabras reservadas del lenguaje.Las secciones Algoritmo < nombre>, Inicio, < Proceso > y Fin. (con punto al final) deben estarpresentes en todo algoritmo, no as las secciones constante, tipo, variables y que dependern de la construccin de la resolucin. El tema Subalgoritmos se ver ms adelante.

  • 38 Introduccin a la Informtica

    Parte declarativaAhora estamos en condiciones de concretar la forma en la cual se va a expresar la Parte

    declarativa de un algoritmo. Se deben listar todas las constantes con sus valores asociados, luegola lista de variables que se usarn en el proceso del algoritmo, especificando el nombre de lavariable y el tipo de datos asociado. Y, si fuese necesario, la definicin de tipos de dato creadospor el programador.Ejemplos:

    constantePi = 3,1416IVA = 21

    tipoDia_de_la_semana = (lunes,martes,miercoles,....domingo)

    variablesreal Suma, N1, N2entero Edadstring Nombre, Direccin, CiudadDia_de_la_semana dia

    Recomendamos la lectura de El estilo de la programacin pg 246 a 258 del libro Funda-mentos de Algoritmos y Programacin, autores Lage-Cataldi-Salgueiro.

    Resolucin del problemaLa resolucin de problemas tiene pasos especficos que seguiremos en el siguiente ejemplo:

    Realizar el algoritmo para determinar la superficie y el permetro de terrenos rectangulares

    Como comentamos en la seccin Del mundo real a la solucion por computadora, se deben seguirlos siguientes pasos para resolver un problema dado:

    Interpretar el enunciadoDescribir Datos y ResultadosBuscar una metodologa de resolucinEscribir el algoritmo de acuerdo a los puntos anteriores.

    A continuacin realizaremos el Anlisis del problema planteado.

    Anlisis del problemaDatos: frente y profundidadResultados: Permetro y superficie.Metodologia de resolucin:Permetro = 2 x (frente + profundidad)Superficie = frente x profundidad

    Luego escribimos el algoritmo respetando lo diseado en el Anlisis del problema.

    AlgoritmoEn el prximo capitulo seguiremos viendo otros elementos que intervienen en los algoritmos.

  • 1.6 Algoritmos en Pseudocdigo 39

  • 2 Tcnicas de programacin. Organizacin delas acciones

    Cristina I Alarcn

    El problema que se plantea puede ser modesto; pero si pone a prueba la curiosidad queinduce a poneren juego las facultades inventivas, si se resuelve por propios medios, se puedeexperimentar el encantodel descubrimiento y el goce del triunfo

    George Polya

    2.0.4 IntroduccinMuchas veces, encontrar la solucin a un problema no resulta una tarea sencilla. Primer-

    amente hay que comprender bien cul es el problema que se nos plantea, al cual le debemosencontrar su solucin. Luego tendremos que identificar bien a la informacin que nos explicita elenunciado del problema, es decir identificar los datos. Una vezfijados los datos debemos deducirdel enunciado cual es el o los resultados que nos debe brindar la solucin del problema.Cumplimentadas estas dos etapas: identificacin de datos e identificacin de resultado, recinestaremos en condiciones de comenzar a desarrollar una estrategia solucin. Cuando la estrategiasolucin sea una secuencia de acciones, exactas, precisas y finitas que nuestro procesador (ente:persona o mquina) puede ejecutar con el solo hecho de enunciarlas, estaremos formulando elalgoritmo solucin de nuestro problema.

    2.1 Tcnicas de programacin algortmicaLa elaboracin de un algoritmo se puede realizar en forma totalmente libre, sin seguir los

    lineamentos de ningn modelo o en caso contrario aplicando las orientaciones de un prototipo.Enel desarrollo de un algoritmo siguiendo un modelo establecido podemos citar, entre otros, a lossiguientes modelos:

    2.1.1 Modelo declarativoEn este modelo se declara una serie de proposiciones, en general todo tipo de transforma-

    ciones que relatan el problema e individualizan su solucin. Se indica qu es lo que se quiereobtener, no los pasos necesarios para obtener la solucin.Se trabaja por medio de clusulas queresponden a la particularidad que afirmando se afirma, llamado modus ponens (latn) .El modoponens se basa en una regla de deduccin que podra representarse de la siguiente manera:Si proposicion1, entonces proposicion2Proposicion1Por lo tanto, proposicion2

  • 42 Tcnicas de programacin. Organizacin de las acciones

    Por ejemplo, un razonamiento que sigue las inferencias del modo afirmando se afirma:

    Si est nublado, entonces no llega el sol.Est nublado.Por lo tanto, no llega el sol.

    En los algoritmos escritos en este modelo sus acciones no se ejecutan secuencialmente, noexisten formas estructurales. Los algoritmos se fundamentan en dos nociones: la unificacin yla vuelta atrs. La unificacin establece que cada proposicin determine un conjunto de nuevasproposiciones susceptibles de ser ejecutadas. La vuelta atrs permite regresar al punto de parti-da.Algunos lenguajes de programacin que responden a este paradigma son, por ejemplo: Prolog,Lisp, Maude, Sql.

    2.1.2 Modelo imperativo

    En este modelo se detallan todos los pasos necesarios para encontrar la solucin del problema.Las acciones se ejecutan secuencialmente, siguiendo una estructuracin. Esta estructuracin seimplementa a travs de las estructuras de control. Ejemplo:

    InicioAccin 1Accin 2Accin 3

    Hacer n veces

    Si expresin es verdadera entoncesAccin 4Accin 5Accin 6

    SinoAccin 7Accin 8

    Fin seleccin

    Fin repeticin

    Accin 9Accin 10Fin

    Entre los lenguajes que responden a esta forma de desarrollar programas podemos mencionar,entre otros: Fortran, Pascal, C, etc.

    Nosotros utilizaremos este modelo aplicando una tcnica especfica que se desarrollar msadelante.

  • 2.2 Estructuras de Control. Programacin Estructurada 43

    2.1.3 Modelo orientado a objetosLos algoritmos que siguen este modelo se caracterizan porque tienen en cuenta las relaciones

    que existen entre todos los objetos que intervienen. Cada objeto o entidad que interviene en lasolucin tiene una determinado conducta, estado e identificacin.En este modelo no se debepreguntar: qu hace el algoritmo?, sino preguntar: quin o qu lo hace?.Algunos lenguajes de programacin que siguen este modelo son: Smalltalk, C++, HTML, Java,etc.

    2.2 Estructuras de Control. Programacin EstructuradaEn la construccin de un algoritmo las acciones que lo integran deben agruparse de la

    forma que dicha resolucin lo exija.Existirn para un mismo algoritmo muchas formas deorganizar sus acciones, primitivas o no, que conduzcan a la solucin requerida.Pensaremos en esasorganizaciones como no excluyentes y que se podrn incluir o asociar entre ellas.Utilizaremossolamente tres nicas formas de disposicin de las acciones.Hay veces que las acciones necesitanagruparse o estructurarse en forma de serie o sucesin. Otras veces las acciones debern reunirseen un proceso repetitivo. En distintas ocasiones la agrupacin de las acciones deberresponder aun proceso de seleccin, que divide el camino para agrupar las acciones siguientes entre dos oms opciones.

    2.2.1 Estructuras de controlLlamaremos estructuras de control a las organizaciones que controlan la ejecucin de las

    acciones en un algoritmo.Las estructuras de control son las que establecen el orden de ejecucin de las acciones.Permiten especificar la coordinacin yregulacindelalgoritmo, porque dirigen la direccin quedebe seguir el flujo de informacin en el mismo.

    2.2.2 Programacin estructurada (PE)La programacin estructurada es una forma de desarrollar programas (algoritmos) que re-

    sponde al modelo imperativo. Es un conjunto de tcnicas para desarrollar algoritmos fciles deescribir, verificar, leer y modificar.Los algoritmos desarrollados aplicando este modelo son ms fciles de seguir dado que losmismos no implementan el uso desaltos: ir de una lnea a otra lnea de algoritmo (SALTO.)

    En la siguiente representacin de un algoritmo genrico se trata de mostrar la utilizacin delmencionado SALTO:

    Lnea1 Accin 1

    Lnea2 Accin 2

    Lnea3 Accin 3

    Lnea4 Si expresin es verdadera entonces

  • 44 Tcnicas de programacin. Organizacin de las acciones

    ir a Lnea 15 . . . . . . .. SALTOsino continuar con lnea siguiente

    Lnea5 Accin 4

    Lnea6 Accin 5

    Lnea7 Accin6

    Lnea15 Accin 14

    Sin estos saltos, los posibles errores que pudieran existir en un algoritmo son ms fcilesde detectar y corregir.La organizacin del algoritmo aplicando esta tcnica es ms evidente, dadoque las acciones se encuentran agrupadas.La PEutiliza el diseo descendente o top down en eldesarrollo de los algoritmos. Tcnica que va de lo general a lo particular, es decir, consiste endisear los algoritmos en etapas, partiendo de los conceptos generales hasta llegar a los detalles.

    Se podra continuar con ms niveles de divisin. La ejecucin de cada uno de los algorit-mos intervinientes constituir la ejecucin del algoritmo principal.Cada uno de estos algoritmos deber reunir las siguientes caractersticas:

    Tener un solo punto de inicio y un solo punto de finalizacin. Toda accin de cada algoritmo es accesible, es decir, existe al menos un camino que va desdeel inicio hasta el fin del mismo,que se puede seguir y