programación y resolución de problemas con c++

954
www.FreeLibros.me

Upload: picosuela

Post on 20-Oct-2015

246 views

Category:

Documents


1 download

TRANSCRIPT

  • www.FreeLibros.me

  • DALEPrel.indd iiDALEPrel.indd ii 4/12/06 18:30:514/12/06 18:30:51

    www.FreeLibros.me

  • C++Programacin yresolucin de problemascon

    DALEPrel.indd iDALEPrel.indd i 4/12/06 18:30:474/12/06 18:30:47

    www.FreeLibros.me

  • DALEPrel.indd iiDALEPrel.indd ii 4/12/06 18:30:514/12/06 18:30:51

    www.FreeLibros.me

  • C++Programacin yresolucin de problemascon

    Nell DaleUniversity of Texas, Austin

    Chip WeemsUniversity of Massachusetts, Amherst

    Revisin tcnica

    Jorge Valeriano AssemUniversidad Nacional Autnoma de Mxico,

    Facultad de Ingeniera

    MXICO BOGOT BUENOS AIRES CARACAS GUATEMALALISBOA MADRID NUEVA YORK SAN JUAN SANTIAGO

    AUCKLAND LONDRES MILN MONTREAL NUEVA DELHISAN FRANCISCO SINGAPUR SAN LUIS SIDNEY TORONTO

    DALEPrel.indd iiiDALEPrel.indd iii 4/12/06 18:30:524/12/06 18:30:52

    www.FreeLibros.me

  • Director Higher Education: Miguel ngel Toledo CastellanosDirector editorial: Ricardo del Bosque AlaynEditor sponsor: Pablo E. Roig VzquezEditora de desarrollo: Ana Laura Delgado RodrguezSupervisor de produccin: Zeferino Garca Garca

    Diseo de portada: Utopa Visual

    Traductores: Francisco Snchez FragosoThomas Bartenbach Joest

    PROGRAMACIN Y RESOLUCIN DE PROBLEMAS CON C++

    Prohibida la reproduccin total o parcial de esta obra,por cualquier medio, sin la autorizacin escrita del editor.

    DERECHOS RESERVADOS 2007, respecto a la primera edicin en espaol porMcGRAW-HILL/INTERAMERICANA EDITORES, S.A. DE C.V.A Subsidiary of The McGraw-Hill Companies, Inc.

    Edifi cio Punta Santa FeProlongacin Paseo de la Reforma 1015, Torre APiso 17, Colonia Desarrollo Santa FeDelegacin lvaro ObregnC.P. 01376, Mxico, D.F.Miembro de la Cmara Nacional de la Industria Editorial Mexicana, Reg. Nm. 736

    ISBN-13: 978-970-10-6110-7ISBN-10: 970-10-6110-1

    Traducido de la cuarta edicin de Programming and Problem Solving with C++.Copyright MMV by Jones and Bartlett Publishers, Inc. All rights reserved.ISBN: 0-7637-0798-8

    1234567890 09865432107

    Impreso en Mxico Printed in Mexico

    DALEPrel.indd ivDALEPrel.indd iv 4/12/06 18:30:544/12/06 18:30:54

    www.FreeLibros.me

  • A Al, mi esposo y mejor amigo, y a nuestros hijos e hijos de nuestros hijos.

    N.D.

    A Lisa, Charlie y Abby con amor.C.W.

    DALEPrel.indd vDALEPrel.indd v 4/12/06 18:30:554/12/06 18:30:55

    www.FreeLibros.me

  • Por mencionar a Mefi stfeles, uno de los demonios principales, y el temperamento de Fausto,

    ...Mi amigo, ser pedaggico,Y te digo que debes empezar con lgica......Se tendrn que invertir das para que aprendasEso es lo que alguna vez hiciste de un golpe,Como comer y beber tan fcil y libre,Slo puede hacerse con uno, dos, tres.Sin embargo la red del pensamiento no tiene tales plieguesY tiene ms parecido con las obras maestras de un tejedor;Un paso, miles de hilos surgen,Aqu y all dispara cada lanzadera,Los hilos fl uyen, invisibles y sutiles,Cada golpe afecta miles de enlaces.El fi lsofo viene con el anlisisY demuestra que tiene que ser como esto;Lo primero fue as, lo segundo as,Y por tanto el tercero y cuarto fueron as,Y el primero y segundo no estuvieron aqu,Entonces el tercero y cuarto nunca podran aparecer.Eso es lo que creen los alumnos,Pero nunca han aprendido a tejer.

    J. W. von Goeth, Fausto, fragmento.

    Conforme lea este libro, no permita que la lgica de los algoritmos ciegue su imaginacin, por el contrario hgala su herramienta para tejer obras maestras del pensamiento.

    DALEPrel.indd viDALEPrel.indd vi 4/12/06 18:30:554/12/06 18:30:55

    www.FreeLibros.me

  • Prefacio

    A travs de las ediciones sucesivas de Programacin y resolucin de problemas con C++, una cosa no ha cambiado: nuestro compromiso con el alumno. Como siempre, nuestros esfuerzos estn dirigidos a hacer ms accesibles a los alumnos los conceptos de computacin en oca-siones difciles.

    Esta edicin de Programacin y resolucin de problemas con C++ contina con la fi losofa de que los temas considerados demasiado avanzados pueden ser enseados en un primer curso. Por ejemplo, se atienden de modo explcito los metalenguajes como medio formal de especifi car la sintaxis del lenguaje de programacin. Se introduce la notacin O mayscula (Big-O) al principio, y se usa para comparar algoritmos en captulos posteriores. Se analiza el diseo modular en trminos de pasos abs-tractos, pasos concretos, equivalencia funcional y cohesin funcional. Las precondiciones y poscon-diciones se usan en el contexto de repaso del algoritmo, en el desarrollo de estrategias de prueba y como documentacin de interfaz para funciones escritas por el usuario. La discusin del diseo de interfaz de funcin incluye encapsulacin, abstraccin de control y complejidad de comunicacin. La abstraccin de datos y los tipos de datos abstractos (TDA) se explican junto con el mecanismo de clase C++, de modo que se crea una gua natural para la programacin orientada a objetos.

    C++ estndar ISO/ANSI se emplea en todo el libro, inclusive partes importantes de la nueva bi-blioteca estndar de C++.

    La presente edicin

    En esta edicin se han actualizado completamente los objetivos, los casos prcticos y los ejercicios. Adems, en el captulo 13, el lenguaje del material se ha vuelto ms orientado a objetos.

    Objetivos Los objetivos del captulo han sido organizados para refl ejar dos aspectos del aprendizaje: conocimiento y habilidades. As, los objetivos se dividen en dos secciones. La primera lista los obje-tivos de conocimiento, expresados en trminos de lo que el alumno debe saber despus de leer el captulo. La segunda rene lo que el alumno debe poder hacer despus de leer el captulo.

    Casos prcticos de resolucin de problemas Cada captulo tiene un caso prctico completamente nuevo. Los casos prcticos que comienzan con un enunciado de problema y terminan con un progra-ma probado han sido la marca distintiva de nuestros libros. En esta seccin se han aadido imgenes de pantallas que muestran el resultado para cada uno de los casos.

    El caso prctico del captulo 14 comienza con la construccin de un calendario de citas. El proyec-to se completa en el captulo 16. En el captulo 17 se cambia la ejecucin de una clase, enfatizando que tales cambios no afectan al usuario. El programa tambin se hace ms robusto al aadir y manejar

    DALEPref.indd viiDALEPref.indd vii 4/12/06 18:38:534/12/06 18:38:53

    www.FreeLibros.me

  • viii | Prefacio

    excepciones. En cada etapa del proyecto se escriben los controladores para probar las clases conforme se crean. Esta organizacin muestra en accin al diseo y la programacin orientados a objetos.

    Debido a que algunos de los ejemplos pequeos empleados en un captulo encuentran su camino en el cdigo de caso prctico, estos ejemplos han sido cambiados para que sean congruentes con los nuevos casos prcticos.

    Ejercicios Con excepcin del captulo 17, todos los ejercicios son nuevos. El nmero de ejercicios ha sido ampliado por entre veinte y treinta por ciento. Todos los problemas de programacin son nuevos.

    Lenguaje orientado a objetos La lista TDA del captulo 13 ha sido cambiada eliminando la operacin Print e introduciendo un par de iteradores, Reset y GetNestItem. Este cambio proporciona mejor encapsulacin. La lista no necesita saber nada acerca de los tems que contiene. La lista simplemente devuelve objetos al programa cliente, que debe conocer cules son los objetos. La desventaja en este diseo se seala en el captulo 14. Las operaciones Delete y BinSearch usan operadores relaciona-les, lo que limita el tipo de tem a tipos integrados. En este captulo, los operadores relacionales se remplazan por operaciones LessThan y Equal; la documentacin establece que ItemType debe llevar a cabo estas operaciones. Se analizan tambin los conceptos de responsabilidades de accin y responsabilidades de conocimiento.

    El uso de clases para construir tems cada vez ms complejos se remarca en los casos prcticos. Cada clase se prueba de modo independiente, remarcando la importancia de probar.

    C++ y programacin orientada a objetos

    Algunos profesores rechazan a la familia de lenguajes C (C, C++, Java) por ser demasiado permisiva y conducente a escribir programas no legibles y difciles de descifrar. Nuestra experiencia no apoya este punto de vista, siempre que el uso de caractersticas de lenguaje se modele de manera apropiada. El hecho de que la familia C permita un estilo de programacin conciso y compacto no se puede etiquetar simplemente como bueno o malo. Casi cualquier lenguaje de programacin se puede usar para escribir en un estilo que es demasiado conciso e inteligente para que sea entendido con facilidad. La familia C se puede de hecho de esta manera con ms frecuencia que los otros lenguajes, pero se ha encontrado que con instruccin cuidadosa en ingeniera de software y un estilo de pro-gramacin que sea directo, disciplinado y libre de caractersticas de lenguaje intrincadas, los alumnos pueden aprender a usar C++ para producir cdigo claro y legible.

    Se debe remarcar que aunque se usa C++ como un vehculo para ensear conceptos de compu-tacin, el libro no es un manual de lenguaje y no intenta hacer una cobertura completa de C++. Ciertas caractersticas de lenguaje, sobrecarga del operador, argumentos por omisin, informacin tipo tiempo de ejecucin y mecanismos para formas avanzadas de herencia, por nombrar algunas, se omiten en un esfuerzo por no abrumar con mucho, demasiado rpido, al alumno principiante.

    Hay diversas opiniones acerca de cundo introducir el tema de la programacin orientada a ob-jetos (POO). Algunos profesores abogan por una inmersin en la POO desde el principio, mientras que otros (para quienes est dirigido este libro) favorecen un mtodo ms heterogneo, en el que tanto la descomposicin funcional como el diseo orientado a objetos se presentan como herramientas de diseo. La organizacin del captulo de Programacin y resolucin de problemas con C++ refl eja un enfoque de transicin a la POO. Aunque se provee una presentacin anticipada del diseo orientado a objetos en el captulo 4, se retrasa una discusin enfocada hasta el captulo 14, despus que los alumnos han adquirido bases fi rmes en el diseo de algoritmos, abstraccin de control y abstraccin de datos con clases.

    Sinopsis

    El captulo 1 est diseado para crear un entendimiento confortable entre los alumnos y el tema. Se presentan los conceptos bsicos de hardware y software, se plantean cuestiones de tica en compu-tacin y se introducen y refuerzan tcnicas de resolucin de problemas en un caso prctico de reso-lucin de problemas.

    En lugar de abrumar inmediatamente al alumno con los distintos tipos numricos disponibles en C++, el captulo 2 se concentra en slo dos tipos: char y string. (Para el ltimo, se usa la clase de

    DALEPref.indd viiiDALEPref.indd viii 4/12/06 18:38:554/12/06 18:38:55

    www.FreeLibros.me

  • Prefacio | ix

    cadena ISO/ANSI proporcionada por la biblioteca estndar.) Con menos tipos de datos que seguir, los alumnos pueden centrar su atencin en la estructura general del programa y lograr un comienzo temprano en la creacin y ejecucin de un programa simple. En el captulo 3 se contina con el anlisis de los tipos numricos de C++ y se procede con material sobre expresiones aritmticas, lla-madas de funcin y salida. A diferencia de muchos libros que detallan todos los tipos de datos de C++ y todos los operadores a la vez, estos dos captulos se enfocan en los tipos de cadena int, fl oat, char y string, y los operadores aritmticos bsicos. Los detalles de los otros tipos de datos y los operadores de C++ ms elaborados se posponen hasta el captulo 10.

    Las metodologas de descomposicin funcional y de diseo orientado a objetos son un objetivo principal en el captulo 4, y el anlisis se escribe con un saludable grado de formalismo. El tratamien-to anticipado del diseo orientado a objetos en el libro es ms superfi cial que la descomposicin funcional. Sin embargo, los alumnos ganan la perspectiva oportuna de que hay dos, no slo una, metodologas de diseo de uso extendido y que cada una sirve para un propsito especfi co. El dise-o orientado a objetos se cubre a profundidad en el captulo 14. En el captulo 4 se cubre tambin la entrada y la entrada y salida de archivos. La introduccin temprana de archivos permite la asignacin de problemas de programacin que requiere el uso de archivos de datos muestrales.

    Los alumnos aprenden a reconocer funciones en los captulos 1 y 2 y aprenden a usar las fun-ciones de biblioteca estndar en el captulo 3. El captulo 4 refuerza los conceptos bsicos de llama-das de funcin, paso de argumentos y bibliotecas de funcin. El captulo 4 relaciona tambin funcio-nes con la ejecucin de diseos modulares, y comienza el anlisis de diseo de interfaz que es esencial para escribir funciones apropiadas.

    El captulo 5 comienza con datos booleanos, pero su propsito principal es introducir el concep-to de fl ujo de control. La seleccin, con estructuras If-Then e If-Then-Else, se emplea para demostrar la distincin entre orden fsico de declaraciones y orden lgico. Se desarrolla tambin el concepto de estructuras de control anidadas. El captulo 5 concluye con una seccin larga de Prueba y depuracin que se ampla en el anlisis de diseo modular al introducir precondiciones y poscondiciones. El re-paso de algoritmo y el repaso de cdigo se introducen como medios para evitar errores, y el segui-miento de la ejecucin se usa para hallar errores que se pudieron haber cometido en el cdigo. Tambin se cubre de forma extensa la validacin de datos y estrategias de prueba en esta seccin.

    El captulo 6 se dedica a las estrategias de control de bucles y operaciones iterativas por medio de sintaxis de la declaracin While. En vez de introducir estructuras sintcticas mltiples, nuestro mtodo es ensear los conceptos de iteracin usando slo la declaracin While. Sin embargo, debido a que muchos profesores nos han expresado que prefi eren mostrar a los alumnos la sintaxis para las declaraciones de iteracin de C++ a la vez, el examen de las declaraciones For y Do-While del cap-tulo 9 se pueden cubrir despus del captulo 6.

    Por el captulo 7 los alumnos ya se sienten cmodos con la descomposicin de problemas en mdulos y el uso de funciones de biblioteca, y son receptivos a la idea de escribir sus propias funcio-nes. As, el captulo 7 se centra en pasar argumentos por valor y cubre el fl ujo de control en llamadas de funcin, argumentos o parmetros, variables locales y diseo de interfaz. La cobertura del diseo de interfaz incluye precondiciones y poscondiciones en la documentacin de interfaz, abstraccin de control, encapsulacin y ocultacin fsica contra conceptual de una ejecucin. En el captulo 8 se ampla el anlisis para incluir parmetros de referencia, alcance y tiempo de vida, talones y contro-ladores, y ms sobre el diseo de interfaz, inclusive efectos secundarios.

    En el captulo 9 se cubren las dems estructuras de control de C++ (Switch, Do-While y For), junto con las declaraciones Break y Continue. Estas estructuras son tiles pero no necesarias. El ca-ptulo 9 es un punto terminal natural para primer trimestre de una serie de cursos introductorios en dos trimestres.

    El captulo 10 comienza la transicin entre la orientacin de estructuras de control de la primera mitad del libro y la orientacin de tipo de datos abstractos de la segunda mitad. Se examinan los tipos de datos simples integrados en trminos del conjunto de valores presentados por cada tipo y las operaciones permisibles en esos valores. Se introducen operadores adicionales de C++ y se examinan en detalle los problemas de presentacin de punto fl otante y precisin. Los tipos simples defi nidos por el usuario, archivos de encabezado escritos por el usuario y coercin de tipo estn entre los otros temas cubiertos en este captulo.

    DALEPref.indd ixDALEPref.indd ix 4/12/06 18:38:574/12/06 18:38:57

    www.FreeLibros.me

  • x | Prefacio

    El captulo 11 comienza con una explicacin de tipos de datos simples contra estructurados. Se introduce el registro (struct en C++) como una estructura de datos heterognea, se describe la sintaxis para tener acceso a sus componentes y se demuestra cmo combinar tipos de registro en una estruc-tura de registro jerrquica. De esta base, se procede al concepto de abstraccin de datos y se da una defi nicin precisa para la nocin de un TDA, remarcando la separacin de especifi cacin y ejecucin. El mecanismo de clase de C++ se introduce como una representacin del lenguaje de programacin de un TDA. Se remarcan los conceptos de encapsulacin, ocultacin de informacin y miembros de clase pblica y privada. Se describe la compilacin separada de archivos de programa, y los alumnos aprenden la tcnica de colocar una declaracin y ejecucin de clase en dos archivos separados: el archivo de especifi cacin (.h) y el archivo de ejecucin (.ccp).

    En el captulo 12 se introduce el arreglo como una estructura de datos homognea a cuyos com-ponentes se tiene acceso por posicin y no por nombre. Los arreglos adimensionales se examinan a profundidad, incluso arreglos de structs y arreglos de objetos de clase. El material sobre arreglos multidimensionales completa la discusin.

    El captulo 13 integra el material de los captulos 11 y 12 defi niendo la lista como un TDA. Debido a que ya se han introducido las clases y los arreglos, se puede distinguir claramente entre arreglos y listas desde el principio. El arreglo es una estructura de datos de tamao fi jo, integrada. La lista es una estructura de tamao variable, defi nida por el usuario, representada en este captulo como una variable de longitud y un arreglo de tems aglutinados en un objeto de clase. Los elemen-tos de la lista son aquellos elementos del arreglo de la posicin 0 hasta la longitud de posicin 1. En este captulo, se disean clases de C++ para TDA de listas no clasifi cadas y clasifi cadas, y se co-difi can los algoritmos de lista como funciones de miembros de clase. Se usa la notacin Big-O para comparar los distintos algoritmos de bsqueda y clasifi cacin desarrollados para estos TDA. Por l-timo, se examinan cadenas de C a fi n de dar a los alumnos cierta visin de cmo se podra ejecutar la abstraccin de nivel superior (una cadena como una lista de caracteres) en trminos de abstraccin de nivel bajo (un arreglo char con terminacin nula).

    En el captulo 14 se amplan los conceptos de abstraccin de datos y clases C++ a una explora-cin de desarrollo de software orientado a objetos. El diseo orientado a objetos, introducido de manera breve en el captulo 4, se revisa con mayor profundidad. Los alumnos aprenden a distinguir entre relaciones de herencia y composicin durante la fase de diseo y las clases derivadas de C++ se emplean para poner en prctica la herencia. En este captulo se introducen tambin funciones virtua-les de C++, que apoyan el polimorfi smo en la forma de enlace de operaciones a objetos en tiempo de ejecucin.

    En el captulo 15 se examinan tipos de punteros y referencia. Se presenta a los punteros como una forma de hacer ms efi cientes a los programas y de permitir la asignacin en tiempo de ejecucin de datos de programa. La cobertura de estructuras de datos dinmicos contina en el captulo 16, en el que se presentan listas enlazadas, algoritmos de listas enlazadas y representaciones alternas de listas enlazadas.

    En el captulo 17 se introducen plantillas de C++ y el manejo de excepcin, y en el captulo 18 se concluye el texto con la cobertura de la recursin. No hay consenso en cuanto al mejor lugar para introducir estos temas. Se cree que es mejor esperar hasta por lo menos el segundo semestre para cu-brirlos. Sin embargo, se ha incluido este material para los profesores que lo han solicitado. Ambos captulos han sido diseados de modo que puedan ser asignados para leer junto con captulos previos. Se sugiere la siguiente lectura de prerrequisitos para los temas de los captulos 17 y 18:

    Seccino secciones Tema Prerrequisito

    17.1 Funciones de plantilla Captulo 1017.2 Clases de plantilla Captulo 1317.3 Excepciones Captulo 1118.1-18.3 Recursin con variables simples Captulo 818.4 Recursin con arreglos Captulo 1218.5 Recursin con variables de puntero Captulo 16

    DALEPref.indd xDALEPref.indd x 4/12/06 18:38:584/12/06 18:38:58

    www.FreeLibros.me

  • Prefacio | xi

    Secciones especiales Cinco tipos de caractersticas se hacen resaltar del texto principal. Las secciones de bases tericas presentan el material relacionado con la teora fundamental detrs de varias ramas de la computacin. En los consejos prcticos de ingeniera de software se examinan mtodos para hacer los programas ms confi ables, robustos o efi cientes. Los asuntos de estilo atienden cuestiones de la codifi cacin de programas. En las secciones de informacin bsica se exploran cuestiones se-cundarias que mejoran el conocimiento general del alumno en computacin. Asimismo se incluyen biografas de pioneros de la computacin como Blaise Pascal, Ada Lovelace y Grace Murray Hopper.

    Objetivos Como ya se describi, cada captulo comienza con una lista de objetivos para el alumno, separados en dos categoras: objetivos de conocimiento y objetivos de habilidades. stos se refuerzan y prueban en los ejercicios de fi n de captulo.

    Casos prcticos de resolucin de problemas La resolucin de problemas se demuestra mejor a travs de casos prcticos. En cada caso prctico se presenta un problema y se emplean tcnicas de resolu-cin de problemas para desarrollar una solucin manual. A continuacin, se desarrolla la solucin para un algoritmo por medio de descomposicin funcional, diseo orientado a objetos, o ambos; luego se codifi ca el algoritmo en C++. Se muestran los datos de prueba muestrales y la salida, y se contina con una explicacin de lo que tiene que ver con la prueba completa del programa.

    Prueba y depuracin Las secciones de prueba y depurado siguen a los casos prcticos en cada ca-ptulo y consideran a profundidad las implicaciones del material del captulo en relacin con la prueba completa de programas. Estas secciones concluyen con una lista de sugerencias de prueba y depuracin.

    Comprobaciones rpidas Al fi nal de cada captulo hay preguntas que prueban la capacidad del alum-no de recordar los puntos principales relacionados con los objetivos del captulo. Al leer cada pre-gunta, el alumno debe conocer la respuesta de inmediato, que se puede comprobar de un vistazo en las respuestas al fi nal de cada seccin. El nmero de pgina en el que se explic el concepto aparece al fi nal de cada pregunta de modo que el alumno puede revisar el material en el caso de una respues-ta incorrecta.

    Ejercicios de preparacin para examen Estas preguntas ayudan al alumno a prepararse para pruebas. Las preguntas por lo general tienen respuestas objetivas y estn diseadas para ser contestadas con algunos minutos de trabajo.

    Ejercicios de preparacin para programacin Esta seccin proporciona al alumno experiencia en la escritura de fragmentos de cdigo C++. El alumno puede practicar los constructos sintcticos en cada captulo sin la carga de escribir un programa completo.

    Problemas de programacin Estos ejercicios, tomados de una amplia variedad de disciplinas, requie-ren que el alumno disee soluciones y escriba programas completos.

    Seguimiento de caso prctico Mucha de la prctica de programacin moderna requiere leer y modi-fi car cdigo existente. Estos ejercicios dan al alumno la oportunidad de fortalecer esta habilidad crtica al contestar preguntas acerca del cdigo de caso prctico o al hacerle cambios.

    Materiales de apoyo

    Esta obra cuenta con interesantes complementos que fortalecen los procesos de enseanza-aprendi-zaje, as como la evaluacin de los mismos, los cuales se otorgan a profesores que adoptan este texto para sus cursos. Para obtener ms informacin y conocer la poltica de entrega de estos mate-riales, contacte a su representante McGraw-Hill o enve un correo electrnico a [email protected]

    DALEPref.indd xiDALEPref.indd xi 4/12/06 18:39:004/12/06 18:39:00

    www.FreeLibros.me

  • xii | Prefacio

    Reconocimientos

    Nos gustara agradecer a las personas que ayudaron en la preparacin de esta cuarta edicin. Estamos en deuda con los miembros de las facultades de los departamentos de computacin de la universidad de Texas en Austin y la Universidad de Massachusetts en Amherst.

    Se agradece especialmente a Jeff Brumfi el por desarrollar el metalenguaje de plantilla de sintaxis y permitirnos usarlo en el texto.

    Por sus muchas sugerencias tiles, se agradece a los profesores, asistentes de enseanza, asesores y supervisores de alumnos quienes pusieron en prctica los cursos para los que fue escrito este libro, as como a los mismos alumnos.

    Se agradece a las siguientes personas que se dieron tiempo para ofrecer sus comentarios o cam-bios posibles a ediciones previas: Trudee Bremer, Illinois Central College; Mira Carlson, Northeastern Illinois University; Kevin Daimi, University of Detroit, Mercy; Bruce Elenbogen, University of Michigan, Dearborn; Sandria Kerr, Winston-Salem State University; Alicia Kime, Fairmont State College; Shahadat Kowuser, University of Texas, Pan America; Bruce Maxim, University of Michigan, Dearborn; William McQuain, Vir ginia Tech; Xiannong Meng, University of Texas, Pan America; William Minervini, Broward University; Janet Remen, Washtenaw Community College; Viviana Sandor, Oakland University; Mehdi Setareh, Virginia Tech; Katy Snyder, University of Detroit, Mercy; Tom Steiner, University of Michigan, Dearborn; John Weaver, West Chester Uni versity; Charles Welty, University of Southern Maine; Cheer-Sun Yang, West Chester University.

    Se agradece tambin a los editores. Agradecemos especialmente a Amy Rose, cuyas habilidades y naturaleza genial convirtieron el trabajo duro en placer.

    Cualquiera que haya escrito un libro, o est relacionado con alguien que lo haya hecho, puede apreciar la cantidad de tiempo requerida en tal proyecto. A nuestras familias, todo el clan Dale y la amplia familia Dale (demasiados para nombralos) y a Lisa, Charlie y Abby, gracias por su tremendo apoyo e indulgencia.

    N. D.C. W.

    DALEPref.indd xiiDALEPref.indd xii 4/12/06 18:39:014/12/06 18:39:01

    www.FreeLibros.me

  • CONTENIDO

    Prefacio vii

    1 Repaso de programacin y resolucin de problemas 11.1 Repaso de programacin 2Qu es la programacin? 2Cmo se escribe un programa? 3

    1.2 Qu es un lenguaje de programacin? 81.3 Qu es una computadora? 111.4 tica y responsabilidades en la profesin de computacin 20

    Piratera de software 20Privacidad de datos 21Uso de recursos de computadora 21Ingeniera de software 22

    1.5 Tcnicas de resolucin de problemas 23Haga preguntas 23Busque cosas que sean familiares 23Resuelva por analoga 23Anlisis de medios y fi nes 24Dividir y vencer 25Mtodo de bloques de construccin 25Combinar soluciones 26Bloqueos mentales: el temor de empezar 26Resolucin algortmica de problemas 27

    Caso prctico de resolucin de problemas: Algoritmo del ao bisiesto 27Resumen 31Comprobacin rpida 31Respuestas 32Ejercicios de preparacin para examen 32Ejercicios de preparacin para la programacin 34Seguimiento de caso prctico 35

    DALECont.indd xiiiDALECont.indd xiii 4/12/06 18:41:344/12/06 18:41:34

    www.FreeLibros.me

  • xiv | Contenido

    2 Sintaxis y semntica de C++, y el proceso de desarrollo de programa 372.1 Elementos de programas C++ 38

    Estructura de un programa C++ 38Sintaxis y semntica 40Plantillas de sintaxis 42Cmo nombrar los elementos de programa: identifi cadores 44Datos y tipos de datos 45Cmo nombrar elementos: declaraciones 48Manos a la obra: sentencias ejecutables 51Ms all del minimalismo: aadir comentarios a un programa 56

    2.2 Construccin del programa 56Bloques (sentencias compuestas) 58El preprocesador de C++ 60Introduccin a los espacios de nombres (Namespaces) 61

    2.3 Ms acerca de la salida 62Crear lneas en blanco 62Insercin de espacios en blanco dentro de una lnea 63

    2.4 Introduccin de programa, correccin y ejecucin 64Introduccin de un programa 64Compilacin y ejecucin de un programa 64Terminado 65

    Caso prctico de resolucin de problemas: Impresin de un tablero de ajedrez 66

    Prueba y depuracin 70Resumen 71Comprobacin rpida 71Respuestas 72Ejercicios de preparacin para examen 72Ejercicios de preparacin para la programacin 74Problemas de programacin 76Seguimiento de caso prctico 77

    3 Tipos numricos, expresiones y salida 793.1 Repaso de tipo de datos de C++ 803.2 Tipos de datos numricos 80

    Tipos integrales 80Tipos de punto fl otante 82

    3.3 Declaraciones para tipos numricos 82Declaraciones constantes nombradas 82Declaraciones de variables 83

    DALECont.indd xivDALECont.indd xiv 4/12/06 18:41:364/12/06 18:41:36

    www.FreeLibros.me

  • Contenido | xv

    3.4 Expresiones aritmticas simples 84Operadores aritmticos 84Operadores de incremento y decremento 86

    3.5 Expresiones aritmticas compuestas 87Reglas de precedencia 87Coercin y conversin de tipo (Moldeo de tipo) 88

    3.6 Llamadas de funcin y funciones de biblioteca 92Funciones de devolucin de valor 92Funciones de biblioteca 94Funciones void (vacas) 95

    3.7 Formateo del resultado 95Enteros y cadenas 96Nmeros de punto fl otante 98

    3.8 Ms operaciones de cadena 101Las funciones length y size 101Funcin fi nd 103Funcin substr 104

    Caso prctico de resolucin de problemas: Calculadora de pago de hipoteca 106

    Prueba y depuracin 109Resumen 109Comprobacin rpida 110Respuestas 110Ejercicios de preparacin para examen 110Ejercicios de preparacin para la programacin 112Problemas de programacin 113Seguimiento de caso prctico 114

    4 Entrada de datos al programa y el proceso de diseo de software 1154.1 Ingreso de datos en programas 116

    Flujos de entrada y operador de extraccin (>>) 116Marcador de lectura y carcter de nueva lnea 119Lectura de datos de caracteres con la funcin get 120Omitir caracteres con la funcin ignore 122 Lectura de datos de cadena 123

    4.2 Entrada/salida interactiva 1244.3 Entrada/salida no interactiva 1264.4 Ingreso y salida de archivos 126

    Archivos 126Uso de archivos 127Programa de ejemplo con archivos 130Ingreso de nombres de archivo en tiempo de ejecucin 131

    DALECont.indd xvDALECont.indd xv 4/12/06 18:41:374/12/06 18:41:37

    www.FreeLibros.me

  • xvi | Contenido

    4.5 Falla de la entrada 1324.6 Metodologas de diseo de software 1334.7 Qu son los objetos? 1344.8 Diseo orientado a objetos 1354.9 Descomposicin funcional 136

    Mdulos 138Implementacin del diseo 139Una perspectiva sobre el diseo 142

    Caso prctico de resolucin de problemas: Presentacin de un nombre en formatos mltiples 143

    Prueba y depuracin 148Sugerencias de prueba y depuracin 149

    Resumen 149Comprobacin rpida 150Respuestas 150Ejercicios de preparacin para examen 151Ejercicios de preparacin para la programacin 153Problemas de programacin 154Seguimiento de caso prctico 156

    5 Condiciones, expresiones lgicas y estructuras de control de seleccin 1575.1 Flujo de control 158

    Seleccin 158

    5.2 Condiciones y expresiones lgicas 159Tipo de datos bool 159Expresiones lgicas 161Precedencia de operadores 167Operadores relacionales con tipos de punto fl otante 169

    5.3 Sentencia If 170Forma If-Then-Else 170Bloques (sentencias compuestas) 172Forma If-Then 174Un error comn 175

    5.4 Sentencias If anidadas 176else suspendido 179

    5.5 Probar el estado de un fl ujo I/O 179Caso prctico de resolucin de problemas: Calculadora para el IMC 181Prueba y depuracin 186

    Prueba en la fase de resolucin del problema: repaso del algoritmo 186Prueba en la fase de implementacin 188Plan de prueba 193

    DALECont.indd xviDALECont.indd xvi 4/12/06 18:41:374/12/06 18:41:37

    www.FreeLibros.me

  • Contenido | xvii

    Pruebas efectuadas automticamente durante la compilacin y ejecucin 194Prueba y sugerencias de depurado 195Resumen 196Comprobacin rpida 197Respuestas 197Ejercicios de preparacin para examen 197Ejercicios de calentamiento para programacin 199Problemas de programacin 201Seguimiento de caso prctico 203

    6 Ciclos 2056.1 La sentencia While 2066.2 Fases de ejecucin del ciclo 2086.3 Ciclos con la sentencia While 208

    Ciclos controlados por conteo 208Ciclos controlados por suceso 210Subtareas de ciclo 215

    6.4 Cmo disear ciclos 217Disear el fl ujo de control 218Diseo del proceso dentro del ciclo 219Salida del ciclo 220

    6.5 Lgica anidada 221Diseo de ciclos anidados 224

    Caso prctico de resolucin de problemas: Diseo de estudio de grabacin 229

    Prueba y depuracin 239Estrategia de prueba de ciclo 239Planes de prueba relacionados con ciclos 240Sugerencias de prueba y depuracin 241

    Resumen 242Comprobacin rpida 242Respuestas 243Ejercicios de preparacin para examen 244Ejercicios de preparacin para la programacin 246Problemas de programacin 247Seguimiento de caso prctico 249

    7 Funciones 2517.1 Descomposicin funcional con funciones void 252Cundo usar funciones 253Escritura de mdulos como funciones void 253

    DALECont.indd xviiDALECont.indd xvii 4/12/06 18:41:384/12/06 18:41:38

    www.FreeLibros.me

  • xviii | Contenido

    7.2 Resumen de las funciones defi nidas por el usuario 257Flujo de control en llamadas de funcin 257Parmetros de funcin 257

    7.3 Sintaxis y semntica de funciones void 260Llamada de funcin (invocacin) 260Declaraciones y defi niciones de funcin 260Variables locales 262Sentencia return 263Archivos de encabezado 265

    7.4 Parmetros 265Parmetros por valor 266Parmetros por referencia 267Una analoga 269Comparacin de argumentos con parmetros 270

    7.5 Diseo de funciones 273Escritura de afi rmaciones como comentarios de programa 274Documentar la direccin del fl ujo de datos 276

    Caso prctico de resolucin de problemas: Costo total de hipoteca 280Prueba y depuracin 285

    La funcin de biblioteca assert 286Sugerencias de prueba y depuracin 287

    Resumen 288Comprobacin rpida 288Respuestas 289Ejercicios de preparacin para examen 289Ejercicios de preparacin para la programacin 291Problemas de programacin 292Respuestas al seguimiento de caso prctico 295

    8 Alcance, tiempo de vida y ms sobre funciones 2978.1 Alcance de identifi cadores 298Reglas de alcance 300Declaraciones y defi niciones de variables 303Espacios de nombres 304

    8.2 Duracin de una variable 306Inicializaciones en declaraciones 307

    8.3 Diseo de interfaz 308Efectos secundarios 308Constantes globales 310

    8.4 Funciones de devolucin de valor 312Funciones booleanas 316Diseo de interfaz y efectos secundarios 319Cundo usar funciones de devolucin de valor 320

    DALECont.indd xviiiDALECont.indd xviii 4/12/06 18:41:394/12/06 18:41:39

    www.FreeLibros.me

  • Contenido | xix

    Caso prctico de resolucin de problemas: Perfi l de salud 322Prueba y depuracin 330

    Talones y manejadores 331Sugerencias de prueba y depuracin 334

    Resumen 335Comprobacin rpida 335Respuestas 336Ejercicios de preparacin para examen 336Ejercicios de calentamiento para programacin 338Problemas de programacin 340Seguimiento de caso prctico 341

    9 Estructuras de control adicionales 3439.1 La sentencia Switch 3449.2 Sentencia Do-While 3489.3 Sentencia For 3509.4 Sentencias Break y Continue 3549.5 Normas para elegir una sentencia de iteracin 356

    Caso prctico de resolucin de problemas: El to rico 357Prueba y depuracin 363

    Sugerencias de prueba y depuracin 363Resumen 363Comprobacin rpida 364Respuestas 364Ejercicios de preparacin para examen 364Ejercicios de calentamiento para programacin 366Problemas de programacin 366Seguimiento de caso prctico 369

    10 Tipos de datos simples: integrados y defi nidos por el usuario 37110.1 Tipos simples integrados 372

    Tipos integrales 373Tipos de punto fl otante 376

    10.2 Ms operadores de C++ 377Operadores de asignacin y expresiones de asignacin 378Operadores de incremento y decremento 379Operadores por bits (a nivel de bits) 380Operacin de moldeo (cast) 380Operador sizeof 381Operador ?: 381Precedencia de operadores 382

    DALECont.indd xixDALECont.indd xix 4/12/06 18:41:394/12/06 18:41:39

    www.FreeLibros.me

  • xx | Contenido

    10.3 Trabajar con datos de caracteres 384Conjuntos de caracteres 384Constantes char de C++ 385Tcnicas de programacin 387

    10.4 Ms acerca de nmeros de punto fl otante 392Representacin de nmeros de punto fl otante 392Aritmtica con nmeros de punto fl otante 394Implementacin de nmeros de punto fl otante en la computadora 395

    10.5 Datos defi nidos por el usuario 401Sentencia Typedef 401Tipos de enumeracin 402Tipos de datos nombrados y annimos 407Encabezados de archivo escritos por el usuario 408

    10.6 Ms acerca de la coercin de tipos 409Coercin de tipos en expresiones aritmticas y relacionales 409Coercin de tipos en asignaciones, paso de argumentos y retorno de una funcin de valor 410

    Caso prctico de resolucin de problemas: Anlisis estadstico de texto 412

    Prueba y depuracin 421Datos de punto fl otante 421Cmo hacer frente a los errores de entrada 421Sugerencias de prueba y depuracin 421

    Resumen 422Comprobacin rpida 423Respuestas 423Ejercicios de preparacin para examen 423Ejercicios de calentamiento para programacin 424Problemas de programacin 425Seguimiento de caso prctico 427

    11 Tipos estructurados, abstraccin de datos y clases 42911.1 Tipos de datos simples contra estructurados 43011.2 Registros (structs) 431

    Acceso a componentes individuales 433Operaciones de agregacin en structs 434Ms acerca de declaraciones struct 435Enlace de elementos similares 436Registros jerrquicos 438

    11.3 Uniones 43911.4 Abstraccin de datos 44111.5 Tipos de datos abstractos 442

    DALECont.indd xxDALECont.indd xx 4/12/06 18:41:404/12/06 18:41:40

    www.FreeLibros.me

  • Contenido | xxi

    11.6 Clases en C++ 445Clases, objetos de clase y miembros de clase 448Operaciones integradas en objetos de clase 448Alcance de clase 450Ocultacin de informacin 451

    11.7 Archivos de especifi cacin e implementacin 452Archivo de especifi cacin 452Archivo de implementacin 454Compilacin y enlace de un programa multiarchivo 458

    11.8 Inicializacin garantizada con constructores de clases 460Invocacin de un constructor 461Especifi cacin revisada y archivos de implementacin para Time 462Directrices para usar constructores de clase 465

    Caso prctico de resolucin de problemas: Nombre de tipo de datos abstractos 466

    Prueba y depuracin 474Sugerencias de prueba y depuracin 477

    Resumen 478Comprobacin rpida 478Respuestas 479Ejercicios de preparacin para examen 479Ejercicios de calentamiento para programacin 480Problemas de programacin 482Seguimiento de caso prctico 484

    12 Arrays 48512.1 Arrays unidimensionales 486La declaracin de arrays 488Acceder a componentes individuales 489ndices de arrays fuera de lmite 490Inicializacin de arrays en declaraciones 491Ausencia de operaciones agregadas en arrays 492Ejemplos de declarar y acceder a arrays 493Pasando arrays como argumentos 496Afi rmaciones sobre arrays 499El uso de Typedef con arrays 500

    12.2 Arrays de registros (estructuras) y objetos de clase 500Arrays de registros (estructuras) 500Arrays de objetos de clase 502

    12.3 Tipos especiales de procesamiento de arrays 502Procesamiento de sub-arrays 502ndices con contenido semntico 503

    DALECont.indd xxiDALECont.indd xxi 4/12/06 18:41:414/12/06 18:41:41

    www.FreeLibros.me

  • xxii | Contenido

    12.4 Arrays bidimensionales 50312.5 Procesamiento de arrays bidimensionales 506

    Sumar las fi las 507Sumar las columnas 508Inicializar el array 509Imprimir el array 510

    12.6 Paso de arrays bidimensionales como argumentos 51112.7 Otra forma de defi nir arrays bidimensionales 51312.8 Arrays multidimensionales 514

    Caso prctico de resolucin de problemas: Calcular estadsticas de examen 516Prueba y depuracin 533

    Arrays unidimensionales 533Estructuras complejas 534Arrays multidimensionales 535Consejos para pruebas y depuracin 536

    Resumen 537Comprobacin rpida 537Respuestas 538Ejercicios de preparacin para examen 538Ejercicios de calentamiento de programacin 541Problemas de programacin 542Seguimiento de caso prctico 544

    13 Listas basadas en arrays 54513.1 La lista como un tipo de datos abstractos (ADT) 54613.2 Listas no ordenadas 552

    Operaciones bsicas 552Insercin y supresin 554Bsqueda secuencial 556Iteradores 558Ordenamiento 560

    13.3 Listas ordenadas 562Operaciones bsicas 565Insercin 565Bsqueda secuencial 567Bsqueda binaria 568Borrado 573

    13.4 Entendiendo las cadenas de caracteres 575Inicializacin de cadenas C 577Entrada y salida de cadenas C 578Rutinas de biblioteca de cadenas C 580Clase de cadena o cadenas C? 582

    DALECont.indd xxiiDALECont.indd xxii 4/12/06 18:41:424/12/06 18:41:42

    www.FreeLibros.me

  • Contenido | xxiii

    Caso prctico de resolucin de problemas: Calcular estadsticas de examen (rediseo) 582

    Prueba y depuracin 591Consejos para prueba y depuracin 591

    Resumen 592Comprobacin rpida 592Respuestas 592Ejercicios de preparacin para examen 593Ejercicios de calentamiento para programacin 594Problemas de programacin 595Seguimiento de caso prctico 595

    14 Desarrollo de software orientado a objetos 59714.1 La programacin orientada a objetos 59814.2 Objetos 60014.3 Herencia 603

    Derivar una clase de otra 604Especifi cacin de la clase ExtTime 607Aplicacin de la clase ExtTime 609Evitar inclusiones mltiples de archivos de encabezados 612

    14.4 Composicin 613Diseo de una clase Entry 613Inicializador de constructor 618

    14.5 Ligadura dinmica y funciones virtuales 619El problema de corte 620Funciones virtuales 621

    14.6 Diseo orientado a objetos 623Paso 1: Identifi car los objetos y operaciones 623Paso 2: Determinar las relaciones entre objetos 624Paso 3: Disear el controlador 624

    14.7 Implementar el diseo 625Caso prctico de resolucin de problemas: Creacin de una agenda de citas 626Prueba y depuracin 636

    Consejos para prueba y depuracin 636Resumen 637Comprobacin rpida 638Respuestas 638Ejercicios de preparacin para examen 638Ejercicios de calentamiento para programacin 641Problemas de programacin 643Seguimiento de caso prctico 644

    DALECont.indd xxiiiDALECont.indd xxiii 4/12/06 18:41:424/12/06 18:41:42

    www.FreeLibros.me

  • xxiv | Contenido

    15 Apuntadores, datos dinmicos y tipos de referencia 64515.1 Apuntadores 646Variables de apuntadores 646Expresiones con apuntadores 650

    15.2 Datos dinmicos 65515.3 Tipos de referencia 65915.4 Clases y datos dinmicos 662

    Destructores de clase 666Copiado superfi cial vs. copiado profundo 667Constructores de copia de clase 668

    Caso prctico de resolucin de problemas: Creacin de un calendario de citas, continuacin 671

    Prueba y depuracin 687Sugerencias de prueba y depuracin 689

    Resumen 690Comprobacin rpida 691Respuestas 691Ejercicios de preparacin para examen 691Ejercicios de calentamiento de programacin 693Problemas de programacin 694Seguimiento de caso prctico 696

    16 Estructuras ligadas 69716.1 Estructuras secuenciales versus estructuras ligadas 69816.2 Representacin de array de una lista ligada 69916.3 Representacin de datos dinmicos de una lista ligada 701

    Algoritmos en listas ligadas dinmicas 706Expresiones con apuntadores 721Clases y listas ligadas dinmicas 722

    16.4 Eleccin de la representacin de datos 723Operaciones comunes 724Caso prctico de resolucin de problemas: El calendario de citas

    completo 725Prueba y depuracin 741

    Sugerencias para prueba y depuracin 741Resumen 741Comprobacin rpida 742Respuestas 742Ejercicios de preparacin para examen 742Ejercicios de calentamiento para programacin 743Problemas de programacin 745Seguimiento de caso prctico 746

    DALECont.indd xxivDALECont.indd xxiv 4/12/06 18:41:434/12/06 18:41:43

    www.FreeLibros.me

  • Contenido | xxv

    17 Plantillas y excepciones 74717.1 Plantilla de funciones 748Sobrecarga de funcin 748Defi nicin de una plantilla de funcin 750Creacin de una plantilla de funcin 751Mejora de la plantilla de impresin Print 752Especializaciones defi nidas por el usuario 753Organizacin de cdigos de programa 754

    17.2 Plantilla de clase 756Creacin de una plantilla de clase 758Organizacin de cdigo de programa 759Advertencia 762

    17.3 Excepciones 763La sentencia throw 764La sentencia try-catch 765Manejadores de excepcin no locales 768Relanzamiento de una excepcin 770Excepciones estndar 770Regresando al problema de divisin entre cero 773

    Caso prctico de resolucin de problemas: Reimplementacin de la especifi cacin SortedList y mejora del calendario de citas 774

    Prueba y depuracin 791Sugerencias para la prueba y depuracin 791

    Resumen 792Comprobacin rpida 792Respuestas 793Ejercicios de preparacin para examen 794Ejercicios de calentamiento para programacin 795Problemas de programacin 796Seguimiento de caso prctico 797

    18 Recursin 79918.1 Qu es recursin? 80018.2 Algoritmos recursivos con variables simples 80318.3 Las torres de Hanoi 80518.4 Algoritmos recursivos con variables estructuradas 80918.5 Recursin usando variables apuntador 811

    Impresin de una lista ligada dinmica en orden inverso 811Copiar una lista ligada dinmica 814

    18.6 Recursin o iteracin? 817Caso prctico de resolucin de problemas: QuickSort 818Prueba y depuracin 824

    Sugerencias para la prueba y depuracin 824

    DALECont.indd xxvDALECont.indd xxv 4/12/06 18:41:444/12/06 18:41:44

    www.FreeLibros.me

  • xxvi | Contenido

    Resumen 825Comprobacin rpida 825Respuestas 825Ejercicios de preparacin para examen 825Ejercicios de calentamiento de programacin 827Problemas de programacin 830Seguimiento de caso prctico 831

    Apndice A Palabras reservadas 833Apndice B Precedencia de operador 833Apndice C Seleccin de rutinas de biblioteca estndares 834

    C.1 Archivo de encabezado cassert 835C.2 Archivo de encabezado cctype 835C.3 Archivo de encabezado cfl oat 837C.4 Archivo de encabezado climits 837C.5 Archivo de encabezado cmath 837C.6 Archivo de encabezado cstddef 839C.7 Archivo de encabezado cstdlib 839C.8 Archivo de encabezado cstring 840C.9 Archivo de encabezado string 841C.10 Archivo de encabezado sstream 842

    Apndice D Uso de este libro con una versin pre-estndar de C++ 842D.1 El tipo string 842D.2 Archivos de encabezado estndares y espacios de nombre 843D.3 Manipuladores fi xed y showpoint 844D.4 El tipo bool 845

    Apndice E Conjuntos de caracteres 846Apndice F Estilo de programa, formateo y documentacin 848

    F.1 Normas generales 848F.2 Comentarios 849F.3 Identifi cadores 851F.4 Formateo de lneas y expresiones 852F.5 Sangrado 852

    Glosario 855Respuestas a ejercicios selectos 863ndice 895

    DALECont.indd xxviDALECont.indd xxvi 4/12/06 18:41:454/12/06 18:41:45

    www.FreeLibros.me

  • Objetivos

    CAPTULO

    1Repaso de programacin y resolucin de problemas

    Objetivos de conocimiento

    n Entender lo que es un programa de computadora.n Comprender lo que es un algoritmo.n Aprender lo que es un lenguaje de programacin

    de alto nivel.

    n Conocer los procesos de compilacin y ejecucin.n Aprender la historia del lenguaje C++.n Saber lo que son los principales componentes de

    una computadora y cmo funcionan juntos.

    n Aprender acerca de algunos asuntos ticos bsicos que enfrentan los profesionales de la computacin.

    Objetivos de habilidades

    Ser capaz de:

    n Listar las etapas bsicas relacionadas con la escritura de un programa de computadora.

    n Describir lo que es un compilador y lo que hace.n Distinguir entre hardware y software.n Elegir un mtodo apropiado de resolucin de problemas

    para desarrollar una solucin algortmica a un problema.

    DALE01.indd 1DALE01.indd 1 4/12/06 18:47:104/12/06 18:47:10

    www.FreeLibros.me

  • 2 | Captulo 1: Repaso de programacin y resolucin de problemas

    Computadora Objeto que calcula; especfi camente: dis-positivo electrnico programable que puede almacenar, recuperar y procesar datos.

    * Con autorizacin. De Merriam-Websters Collegiate Dictionary. Dcima edicin. 1994 de Merriam-Webster Inc.

    1.1 Repaso de programacinEn la nota al margen se da la defi nicin de computadora. Qu defi nicin tan breve para algo que, en slo unas cuantas dcadas, ha cambiado la forma de vida de las sociedades industrializadas!

    Las computadoras tocan todas las reas de nuestras vidas: pago de facturas, conduccin de automviles, uso del telfono, ir de compras. De hecho, sera ms fcil enumerar las reas de nuestras vidas que no son afectadas por las computadoras.

    Es triste que un dispositivo que hace tanto bien sea, con mu-cha frecuencia, tratado de forma injusta y se le vea con temor.

    Cuntas veces ha escuchado a alguien decir: lo siento, la computadora ech a perder las cosas, o no entiendo las computadoras, son muy complicadas para m? Sin embargo, el hecho de que usted est leyendo este libro signifi ca que est preparado para hacer a un lado los prejuicios y aprender acerca de las computadoras. Pero se advierte: este libro no slo trata de computadoras. Es un texto para ensearle a programar computadoras.

    Qu es la programacin?

    Mucho del comportamiento y pensamiento humano se caracteriza por secuencias lgicas. Desde la infancia usted ha estado aprendiendo cmo actuar, cmo hacer las cosas. Y ha aprendido a esperar cierto comportamiento de otras personas.

    Mucho de lo que hace todos los das lo hace de manera automtica. Por fortuna no es necesario que piense conscientemente que todo paso requerido en un proceso tan simple como dar vuelta a la pgina:

    1. Levantar la mano.

    2. Mover la mano a la derecha del libro.

    3. Asir la esquina derecha de la pgina.

    4. Mover la mano de derecha a izquierda hasta que la pgina est colocada de modo que pueda leer lo que est sobre la otra pgina.

    5. Soltar la pgina.

    Piense en cuntas neuronas debe encender y cuntos msculos deben responder, todo en cierto orden o secuencia, para mover su brazo y su mano. Sin embargo, lo hace de manera inconsciente.

    Mucho de lo que hace de manera inconsciente lo tuvo que aprender una vez. Observe cmo un beb se concentra en poner un pie antes que el otro mientras aprende a caminar. Luego, observe a un grupo de nios de tres aos que juegan a la roa.

    En una escala ms amplia, las matemticas nunca se podran haber desarrollado sin secuencias lgicas de pasos para resolver problemas y demostrar teoremas. La produccin en masa nunca habra funcionado sin operaciones que tienen lugar en cierto orden. La civilizacin se basa en el orden de las cosas y acciones.

    Se crea orden, de manera consciente e inconsciente, en un proceso al que se denomina programacin. Este libro tiene que ver con la programacin de una de las herramientas, la computadora.

    Del mismo modo que un programa de concierto lista el orden en que los msicos ejecutan las piezas, un programa de computadora lista la secuencia de pasos que realiza la computadora. De ahora en adelante, cuando se use la palabra programacin y programa, se entender programacin en computadora y programa de computadora.

    La computadora permite hacer las tareas con ms efi ciencia, rapidez y exactitud de como se podran hacer a mano, si acaso se

    Programacin Planear o calendarizar el desempeo de una tarea o suceso.

    Computadora Dispositivo programable que puede alma-cenar, recuperar y procesar datos.

    Programa de computadora Secuencia de instrucciones que realizar una computadora.

    Programacin en computadora Proceso de planifi car una secuencia de pasos para que los desarrolle una compu-tadora.

    DALE01.indd 2DALE01.indd 2 4/12/06 18:47:214/12/06 18:47:21

    www.FreeLibros.me

  • pudieran hacer a mano. A fi n de usar esta poderosa herramienta, se debe especifi car lo que se desea hacer y el orden en que se desea hacerlo. Esto es posible por medio de la programacin.

    Cmo se escribe un programa?

    Una computadora no es inteligente. No es capaz de analizar un problema y proponer una solucin. Un humano (el programador) debe analizar el problema, desarrollar una secuencia de instrucciones para resolver el problema y luego comunicarlo a la computadora. Cul es la ventaja de usar una computadora si no puede resolver problemas? Una vez que se ha escrito la solucin como una se-cuencia de instrucciones para la computadora, sta puede repetir la solucin de manera muy rpida y congruente, una y otra vez. La computadora libera a la gente de las tareas repetitivas y tediosas.

    Para escribir una secuencia de instrucciones que efectuar una computadora, se debe ir por un proceso bifsico: resolucin de problema e implementacin (vase la fi gura 1-1).

    Fase de resolucin del problema

    1. Anlisis y especifi cacin. Entender (defi nir) el problema y lo que debe hacer la solucin.

    2. Solucin general (algoritmo). Desarrollar una secuencia lgica de pasos que resuelve el pro-blema.

    3. Verifi car. Seguir los pasos exactamente para ver si la solucin resuelve en realidad el pro-blema.

    Fase de implementacin

    1. Solucin concreta (programa). Traducir el algoritmo en un lenguaje de programacin.

    2. Prueba. Ver que la computadora siga las instrucciones. Despus, comprobar de manera manual los resultados. Si encuentra errores, analice el programa y el algoritmo para determinar la fuente de errores, y luego hacer correcciones.

    Una vez que se ha escrito el programa, entra a la tercera fase: mantenimiento.

    Fase de mantenimiento

    1. Uso. Utilice el programa.

    2. Mantenimiento. Modifi que el programa para satisfacer requisitos de cambio o corregir cual-quier error que aparezca al usarlo.

    Figura 1-1 Proceso de programacin

    FASE DE RESOLUCIN DEL PROBLEMA FASE DE IMPLEMENTACIN

    Anlisisy

    especificacin

    Solucin general(algoritmo)

    Solucin concreta(programa)

    Prueba

    Fase de mantenimiento

    Verificar

    1.1 Repaso de programacin | 3

    DALE01.indd 3DALE01.indd 3 4/12/06 18:47:244/12/06 18:47:24

    www.FreeLibros.me

  • 4 | Captulo 1: Repaso de programacin y resolucin de problemas

    El programador comienza el proceso de programacin al analizar el problema y desarrollar una solucin general llamada algoritmo. Entender y analizar un problema toma ms tiempo del que implica la fi gura 1-1. Son el corazn del proceso de pro-gramacin.

    Si las defi niciones de un programa de computadora y un algoritmo parecen similares, es porque todos los programas son algoritmos. Un programa es simple-mente un algoritmo que ha sido escrito para una computadora.

    Un algoritmo es una descripcin verbal o escrita de una secuencia lgica de acciones. Se usan algoritmos todos los das. Recetas, instrucciones e indicaciones son ejemplos de algoritmos que no son programas.

    Cuando enciende su automvil, sigue un procedimiento paso a paso. El algoritmo podra parecer algo como esto:

    1. Inserte la llave.

    2. Asegrese de que la transmisin est en estacionar (o neutral).

    3. Presione el pedal del acelerador.

    4. D vuelta a la llave a la posicin de encendido.

    5. Si el motor enciende en seis segundos, libere la llave a la posicin de encendido.

    6. Si el motor no enciende en seis segundos, suelte la llave y el pedal del acelerador, espere diez segundos y repita los pasos 3 al 6, pero no ms de cinco veces.

    7. Si el automvil no arranca, llame al taller mecnico.

    Sin la frase pero no ms de cinco veces en el paso 6, se podra estar intentando encender el auto-mvil por siempre. Por qu? Debido a que si algo anda mal con el automvil, repetir los pasos 3 al 6 una y otra vez no har que encienda. Este tipo de situacin de nunca acabar se llama ciclo infi nito. Si se deja la frase pero no ms de cinco veces fuera del paso 6, el procedimiento no se ajusta a la defi nicin de un algoritmo. Un algoritmo debe terminar en una cantidad fi nita de tiempo para todas las condiciones posibles.

    Suponga que un programador necesita un algoritmo para determinar el salario semanal de un empleado. El algoritmo refl eja lo que se hara a mano:

    1. Buscar la tasa de pago del empleado.

    2. Determinar la cantidad de horas trabajadas durante la semana.

    3. Si el nmero de horas trabajadas es menor o igual que 40, multiplique el nmero de horas por la tasa de pago para calcular salarios regulares.

    4. Si el nmero de horas trabajadas es mayor que 40, multiplique 40 por la tasa de pago para calcular salarios regulares y luego multiplique la diferencia entre el nmero de horas trabajadas y 40 por 1 veces la tasa de pago para calcular salarios de horas extras.

    5. Sumar los salarios regulares a los de horas extras (si existen) para determinar salarios tota-les para la semana.

    Los pasos que sigue la computadora con frecuencia son los mismos que usted usara para hacer los clculos a mano.

    Despus de desarrollar una solucin general, el programador prueba el algoritmo, caminando por cada paso mental o manualmente. Si el algoritmo no funciona, el programador repite el proceso de resolver el problema, analiza de nuevo el problema y sugiere otro algoritmo. Por lo regular, el segundo algoritmo es slo una variacin del primero. Cuando el programador est satisfecho con el

    Algoritmo Procedimiento paso a paso para resolver un problema en una cantidad de tiempo fi nita.

    DALE01.indd 4DALE01.indd 4 4/12/06 18:47:254/12/06 18:47:25

    www.FreeLibros.me

  • algoritmo, lo traduce en un lenguaje de programacin. En este libro se usa el lenguaje de programacin C++.

    Un lenguaje de programacin es una forma sim-plifi cada del ingls (con smbolos matemticos) que se adhiere a un conjunto estricto de reglas gramaticales. El ingls es un lenguaje demasiado complicado para que lo sigan las computadoras actuales. Los lengua-jes de programacin, debido a que limitan el vocabulario y la gramtica, son mucho ms simples.

    Aunque un lenguaje de programacin es simple en forma, no siempre es fcil usarlo. Intente dar a alguien instrucciones para llegar al aeropuerto ms cercano con un vocabulario de no ms de 45 palabras y comenzar a ver el problema. La programacin lo obliga a escribir instrucciones exactas muy simples.

    Traducir un algoritmo en un lenguaje de programacin se llama codifi car el algoritmo. El pro-ducto de esa traduccin, el programa, se prueba ejecutndolo en la computadora. Si el programa no produce los resultados deseados, el programador debe depurarlo; es decir, determinar qu est mal y luego modifi car el programa, o incluso el algoritmo, para arreglarlo. La combinacin de codifi car y probar un algoritmo se llama implementacin.

    No hay una forma simple de implementar un algoritmo. Por ejemplo, un algoritmo se puede traducir en ms de un lenguaje de programacin. Cada traduccin produce una implementacin di-ferente. Incluso cuando dos personas traducen un algoritmo en el mismo lenguaje de programacin, es probable que propongan implementaciones distintas (vase la fi gura 1-2). Por qu? Porque todo

    Lenguaje de programacin Conjunto de reglas, smbolos y palabras especiales usado para implementar un programa de computadora.

    Figura 1-2 Diferencias en la implementacin

    Algoritmo Programa Java de Nell

    Programa C++ de Nell

    Programa Ada de Nell

    a) Algoritmo traducido en diferentes lenguajes

    Algoritmo Programa C++ de Chip

    Programa C++ de Nell

    Programa C++ de Mark

    b) Algoritmo traducido por diferentes personas

    1.1 Repaso de programacin | 5

    DALE01.indd 5DALE01.indd 5 4/12/06 18:47:274/12/06 18:47:27

    www.FreeLibros.me

  • 6 | Captulo 1: Repaso de programacin y resolucin de problemas

    lenguaje de programacin permite al programador cierta fl exibilidad en cmo se traduce un algorit-mo. Dada esta fl exibilidad, las personas adoptan sus propios estilos al escribir programas, del mismo modo que lo hacen al escribir historias cortas o ensayos. Una vez que ya cuenta con algo de expe-riencia en la programacin, desarrolla un estilo propio. En todo el libro se ofrecen consejos prcticos acerca del buen estilo de programacin.

    Algunas personas intentan acelerar el proceso de programacin al ir directamente de la defi ni-cin del problema a la codifi cacin del programa (vase la fi gura 1-3). Un atajo aqu es muy tentador y en principio parece ahorrar mucho tiempo. Sin embargo, por muchas razones que se irn hacien-do obvias a medida que lea este libro, esta clase de atajo toma en realidad ms tiempo y esfuerzo. Desarrollar una solucin general antes de escribir un programa ayuda a manejarlo, mantener claros sus pensamientos y evitar errores. Si al comienzo no se da tiempo para razonar y pulir su algoritmo, utilizar tiempo extra en la depuracin y revisin de su programa. As que piense primero y codifi -que despus! Mientras ms pronto empiece a codifi car, ms tiempo le llevar elaborar un programa que funcione.

    Una vez que un programa se ha puesto en uso, a menudo es necesario modifi carlo. La modifi ca-cin puede requerir arreglar un error descubierto durante el uso del programa o cambiar el programa en respuesta a cambios en los requisitos del usuario. Cada vez que se modifi ca el programa, es nece-sario repetir las fases de resolucin del problema e implementacin para los aspectos del programa que cambian. Esta fase del proceso de programacin se conoce como mantenimiento y explica la mayor parte del esfuerzo empleado en la mayora de los programas. Por ejemplo, un programa que se implementa en unos cuantos meses podra requerir que sea mantenido en un periodo de muchos aos. As, es una inversin econmica de tiempo desarrollar la solucin del problema inicial y la implementacin del programa de manera cuidadosa. Juntas, las fases de resolucin del problema, implementacin y mantenimiento constituyen el ciclo de vida del programa.

    Adems de resolver el problema, ejecutar el algoritmo y man-tener el programa, la documentacin es una parte importante del pro-ceso de programacin. La documentacin incluye explicaciones escritas del problema que se est resolviendo y la organizacin de la solucin, comentarios insertados dentro del programa mis-mo y manuales del usuario que describen cmo usar el programa. Muchas personas distintas trabajan en la mayor parte de los pro-gramas durante un largo periodo. Cada una de esas personas debe poder leer y entender el cdigo.

    Despus de escribir un programa, se debe dar a la computadora la informacin o datos necesarios para resolver el problema. La informacin es cualquier conocimiento que puede ser comunicado, incluso ideas y conceptos abstractos como la Tierra es redonda. Los datos son la informacin en una forma que la computadora puede usar; por ejemplo, los nmeros y letras constituyen las frmulas que rela-cionan el radio de la Tierra con su volumen y rea superfi cial. Pero los datos no estn restringidos a

    Documentacin Texto y comentarios que facilitan a otros la comprensin, uso y modifi cacin de un programa.

    Informacin Cualquier conocimiento que puede ser comunicado.

    Datos Informacin en forma que una computadora puede usar.

    Figura 1-3 Atajo de programacin?

    Problema

    Atajo?

    FASE DE RESOLUCIN DEL PROBLEMA

    Algoritmo

    FASE DE IMPLEMENTACIN

    Programa

    DALE01.indd 6DALE01.indd 6 4/12/06 18:47:294/12/06 18:47:29

    www.FreeLibros.me

  • nmeros y letras. En la actualidad, las computadoras tambin procesan datos que representan sonido (que se reproducir en las bocinas), imgenes grfi cas (que se mostrarn en una pantalla de compu-tadora o impresora), video (que se ver en un reproductor de DVD), etctera.

    1.1 Repaso de programacin | 7

    Bases tericasRepresentacin binaria de datos

    En una computadora, los datos son representados electrnicamente por medio de pulsos de electricidad. Los circuitos elctricos, en su forma ms simple, estn encendidos o apagados. Por lo comn, un circuito en-cendido se representa por el nmero 1; un circuito apagado se representa por el nmero 0. Cualquier clase de datos se puede representar mediante combinaciones de unos y ceros su cientes. Slo se tiene que elegir la combinacin que representa cada conjunto de datos que se est usando. Por ejemplo, se podra elegir de manera arbitraria el patrn 1101000110 para representar el nombre C++.

    Los datos representados por unos y ceros estn en forma binaria. El sistema de nmeros binarios (base 2) utiliza slo unos y ceros para representar nmeros. (El sistema de nmeros decimales [base 10] emplea los dgitos 0 al 9.) La palabra bit (abreviatura para binary digit) se emplea con frecuencia para referirse a un solo 1 o 0. As, el patrn 1101000110 tiene 10 bits. Un nmero binario con 10 bits puede re-presentar 210 (1 024) patrones diferentes. Un byte es un grupo de 8 bits; puede representar 28 (256) patrones. Dentro de la computadora, cada carcter (como la letra A, la letra g o un signo de interrogacin) se repre-senta normalmente por un byte. Cuatro bits, o la mitad de un byte, se llama nibble o nybble nombre que originalmente fue propuesto en tono de burla, pero ahora es terminologa estndar. Los grupos de 16, 32 y 64 bits se llaman por lo general palabras (aunque a veces se emplean los trminos palabra corta y palabra larga para hacer referencia a grupos de 16 y 64 bits, respectivamente).

    El proceso de asignar patrones de bits a conjuntos de datos se llama codifi cacin; se da el mismo nom-bre al proceso de traducir un algoritmo en un lenguaje de programacin. Los nombres son los mismos porque el nico lenguaje que reconocan las primeras computadoras era de forma binaria. As, en los prime-ros das de las computadoras, programacin signi caba traducir datos y algoritmos en patrones de unos y ceros.

    Los esquemas de codi cacin binarios an se emplean en la computadora para representar tanto las instrucciones que sigue como los datos que utiliza. Por ejemplo, 16 bits pueden representar los enteros decimales de 0 a 216 1(65 535). Los caracteres pueden ser representados tambin por combinaciones de bits. En un esquema de codi cacin, 01001101 representa a M y 01101101 representa a m. Para representar nmeros negativos, nmeros reales, nmeros en notacin cient ca, sonido, gr cas y video son necesarios esquemas de codi cacin ms complicados. En el captulo 10 se examina en detalle la representacin de nmeros y caracteres en la computadora.

    Los patrones de bits que representan datos varan de una computadora a otra. Incluso en la misma computadora, lenguajes de programacin diferentes pueden usar representaciones binarias distintas para los mismos datos. Un solo lenguaje de programacin puede incluso usar el mismo patrn de bits para re-presentar diversas cosas en contextos distintos. (Las personas hacen esto tambin. La palabra formada por las cuatro letras tack [en idioma ingls] tiene diferentes signi cados dependiendo de si habla acerca de tapi-cera, navegacin, coser a mquina, pintura o montar a caballo.) La cuestin es que los patrones de bits por s mismos carecen de signi cado. La manera en que se emplean los patrones es lo que les da su signi cado.

    Por fortuna, ya no es necesario trabajar con esquemas de codi cacin binarios. Hoy da el proceso de codi car es normalmente slo un asunto de escribir los datos con letras, nmeros y smbolos. La compu-tadora convierte de modo automtico estas letras, nmeros y smbolos a la forma binaria. Sin embargo, cuando trabaje con computadoras, se encontrar continuamente con nmeros relacionados con potencias de 2 nmeros como 256, 32 768 y 65 536, recordatorios de que el sistema de nmeros binarios acecha en algn lugar cercano.

    DALE01.indd 7DALE01.indd 7 4/12/06 18:47:314/12/06 18:47:31

    www.FreeLibros.me

  • 8 | Captulo 1: Repaso de programacin y resolucin de problemas

    1.2 Qu es un lenguaje de programacin?En la computadora, los datos cualquiera que sea su forma se almacenan y emplean en cdigos binarios, cadenas de unos y ceros. Las instrucciones y datos se almacenan en la memoria de la computadora por medio de estos cdigos binarios. Si usted examinara los cdigos binarios que repre-sentan instrucciones y datos en la memoria, no podra indicar la diferencia entre ellos; se distinguen slo por la manera en que los usa la computadora. Esto hace posible que la computadora procese sus propias instrucciones como una forma de datos.

    En los inicios del desarrollo de las computadoras, el nico lenguaje de programacin disponible era la instruccin primitiva integrada en cada mquina, el lenguaje de mquina o cdigo de m-quina.

    Aun cuando la mayora de las computadoras realizan la mis-ma clase de operaciones, sus diseadores eligen diferentes conjun-tos de cdigos binarios para cada instruccin. Por tanto, el cdigo de mquina para una computadora no es el mismo que para otra.

    Cuando los programadores usaron el lenguaje de mquina para programar, tuvieron que introducir cdigos binarios para las

    distintas instrucciones, un proceso tedioso propenso a error. Adems, sus programas eran difciles de leer y modifi car. Con el tiempo, se desarrollaron los lenguajes ensambladores para facilitar el trabajo del programador.

    Las instrucciones en un lenguaje ensamblador estn en una forma fcil de recordar llamada ne-motcnica. Las instrucciones caractersticas para la suma y la resta podran parecerse a esto:

    Lenguaje ensamblador Lenguaje de mquinaADD 100101SUB 010011

    Aunque el lenguaje ensamblador es ms fcil para que los humanos trabajen con l, la computado-ra no puede ejecutar de modo directo las instrucciones. Uno de los descubrimientos fundamentales en la ciencia de la computacin es que, debido a que una computadora puede procesar sus propias instruccio-nes como una forma de datos, es posible escribir un programa para traducir las instrucciones del lengua-

    je ensamblador en cdigo de mquina. Esta clase de programa se llama ensamblador.

    El lenguaje ensamblador es un paso en la direccin correcta, pero an obliga a los programadores a pensar en trminos de ins-trucciones de mquina individuales. Finalmente, los cientfi cos de la computacin desarrollaron lenguajes de programacin de alto nivel. Estos lenguajes son ms fciles de usar que los lenguajes ensambladores o cdigo de mquina porque se aproximan ms al idioma ingls y a otros lenguajes naturales (vase la fi gura 1-4).

    Un programa llamado compilador traduce los programas escri-tos en algunos lenguajes de alto nivel (C++, Pascal, FORTRAN,

    COBOL, Modula-2 y Ada, por ejemplo) en lenguaje de mquina. Si usted escribiera un programa en un lenguaje de alto nivel, puede ejecutarlo en cualquier computadora que tenga un compilador apro-piado. Esto es posible porque la mayora de los lenguajes de alto nivel estn estandarizados, lo que signifi ca que existe una descripcin ofi cial del lenguaje.

    Un programa en un lenguaje de alto nivel se llama programa fuente. Para el compilador, un progra-ma fuente son slo datos de entrada. Traduce el programa en un programa en lenguaje de mquina llamado programa objeto (vase la fi gura 1-5). Algunos compiladores producen tambin un listado (una copia del programa con mensajes de error y otra informacin insertada).

    Un benefi cio de los lenguajes de alto nivel estandarizados es que permiten escribir en cdigo portable (o independiente de la mquina). Segn se destaca en la fi gura 1-5, un programa escrito en lenguaje ensamblador o lenguaje de mquina no es transportable de una computadora a otra. Debido

    Ensamblador Programa que traduce lenguaje ensambla-dor en cdigo de mquina.

    Compilador Programa que traduce lenguaje de alto nivel en cdigo de mquina.

    Programa fuente Programa escrito en lenguaje de pro-gramacin de alto nivel.

    Programa objeto Versin del lenguaje de mquina de un programa fuente.

    Lenguaje de mquina Lenguaje conformado por ins-trucciones en cdigo binario, usado directamente por la computadora.

    Lenguaje ensamblador Lenguaje de programacin de bajo nivel en el que se emplea una ayuda nemotcnica para representar cada una de las instrucciones del lengua-je de mquina para una computadora particular.

    DALE01.indd 8DALE01.indd 8 4/12/06 18:47:404/12/06 18:47:40

    www.FreeLibros.me

  • 1.2 Qu es un lenguaje de programacin? | 9

    Figura 1-4 Niveles de abstraccin

    Lenguaje de bajo nivel(lenguaje ensamblador)

    Lenguaje de alto nivel(C++, FORTRAN, COBOL, etctera)

    Lenguaje natural(ingls, francs, alemn, etctera)

    Pensamiento humano

    Cdigo de mquina(computadora)

    Compilador C++ de Windows PC

    Lenguaje de mquina Windows PC

    Computadora Windows PC

    Compilador C++de estacin detrabajo UNIX

    Programa C++

    Lenguaje de mquina de

    estacin de trabajo UNIX

    Computadora de estacin de trabajo UNIX

    Compilador C++ de Macintosh

    Lenguaje de mquina Macintosh

    Computadora Macintosh

    LA COMPUTADORA EJECUTA EL PROGRAMA TRADUCTOR (COMPILADOR)

    PROGRAMA FUENTE (C++)

    PROGRAMA OBJETO (VERSIN EN LENGUAJE DE MQUINA DEL PROGRAMA FUENTE

    LA COMPUTADORAEJECUTA EL PROGRAMA OBJETO

    Figura 1-5 Los lenguajes de programacin de alto nivel permiten que los programas sean compilados en diferentes sistemas

    DALE01.indd 9DALE01.indd 9 4/12/06 18:47:444/12/06 18:47:44

    www.FreeLibros.me

  • 10 | Captulo 1: Repaso de programacin y resolucin de problemas

    a que cada computadora tiene su propio lenguaje de mquina, un programa en lenguaje de mquina escrito para una computadora A no correr en una computadora B.

    Es importante entender que la compilacin y la ejecucin son dos procesos distintos. Durante la compilacin, la computadora ejecuta el programa compilador. Durante la ejecucin, el programa ob-jeto se carga en la memoria de la computadora y remplaza al programa compilador. De esta manera, la computadora ejecuta el programa objeto y las instrucciones del programa (vase la fi gura 1-6).

    COMPILACIN

    EJECUCIN

    Programafuente

    ResultadosDatos deentrada

    La computadora ejecuta el programa compilador

    La computadora ejecuta la versin de lenguaje de mquina del programa fuente

    Listado del programa, posiblemente con mensajes de error

    Versin de lenguaje de mquina del programa fuente (programa objeto)

    Carga

    Figura 1-6 Compilacin y ejecucin

    Informacin bsicaCompiladores e intrpretes

    Algunos lenguajes de programacin LISP, Prolog y muchas versiones de BASIC, por ejemplo son tra-ducidos por un intrprete en vez de un compilador. Un intrprete traduce y ejecuta cada instruccin del programa fuente, una a la vez. En contraste, un compilador traduce todo el programa fuente en lenguaje de mquina, despus de lo cual tiene lugar la ejecucin del programa objeto.

    El lenguaje Java emplea tanto un compilador como un intrprete. Primero, se compila un programa Java, no en un lenguaje de mquina de una determinada computadora, sino en un cdigo intermedio llamado bytecode. A continuacin, un programa llamado Mquina Virtual de Java (MVJ; JVM, por sus siglas en ingls) toma al programa bytecode y lo interpreta (traduce una instruccin de bytecode en lenguaje de mquina y la ejecuta, traduce la siguiente y la ejecuta, y as sucesivamente). De esta manera, un programa de Java compilado en bytecode es transportable a muchas computadoras diferentes, siempre y cuando cada computadora tenga su propia MVJ que pueda traducir el bytecode en el lenguaje de mquina de la computadora.

    DALE01.indd 10DALE01.indd 10 4/12/06 18:47:444/12/06 18:47:44

    www.FreeLibros.me

  • Las instrucciones en un lenguaje de programacin refl ejan las operaciones que puede realizar una computadora:

    Una computadora puede transferir datos de un dispositivo a otro. Una computadora puede introducir datos desde un dispositivo de entrada (un teclado o ratn,

    por ejemplo) y enviar datos a un dispositivo de salida (una pantalla). Una computadora almacena datos y los recupera de su memoria y rea de almacenamiento

    secundario (las partes de una computadora se analizan en la siguiente seccin). Una computadora compara dos valores de datos para igualdad y desigualdad. Una computadora puede efectuar operaciones aritmticas (suma y resta, por ejemplo) muy

    rpido.

    Los lenguajes de programacin requieren el uso de determinadas estructuras de control para ex-presar los algoritmos como programas. Hay cuatro formas bsicas de estructurar sentencias (instruc-ciones) en la mayora de los lenguajes de programacin: de modo secuencial, condicional, repetitivo y con subprogramas (vase la fi gura 1-7). Una secuencia es una serie de sentencias que se ejecutan una despus de otra. La seleccin, la estructura de control condicional, ejecuta sentencias diferentes dependiendo de determinadas condiciones. La estructura de control repetitiva, el ciclo, repite sen-tencias mientras se satisfacen ciertas condiciones. El subprograma permite estructurar un programa al descomponerlo en unidades ms pequeas. Cada una de estas formas de estructurar sentencias controla el orden en el cual la computadora ejecuta las sentencias, razn por la que se llaman es-tructuras de control.

    Imagine que conduce un automvil. Ir por un tramo recto de carretera es como seguir una se-cuencia de instrucciones. Cuando llega a una bifurcacin, debe decidir por dnde ir y luego tomar una va u otra. Esto es lo que hace la computadora cuando encuentra una estructura de control de seleccin (a veces llamada bifurcacin o decisin) en un programa. Algunas veces se tiene que ir al-rededor de una cuadra varias veces a fi n de hallar un lugar para estacionarse. La computadora hace lo mismo cuando encuentra un ciclo en un programa.

    Un subprograma es un proceso que consta de mltiples pasos. Todos los das, por ejemplo, usted sigue un procedimiento para ir de casa al trabajo. Tiene sentido entonces que alguien le d instruc-ciones para llegar a una reunin diciendo: dirgete a la ofi cina, luego recorre cuatro cuadras hacia el oeste, sin especifi car todos los pasos que tuvo que efectuar para llegar a la ofi cina. Los subprogra-mas permiten escribir partes de los programas por separado y luego ensamblarlos en una forma fi nal. Pueden simplifi car en gran medida la tarea de escribir programas grandes.

    1.3 Qu es una computadora?Usted puede aprender un lenguaje de programacin, cmo escribir programas y cmo ejecutarlos sin saber mucho acerca de computadoras. Pero si sabe algo en relacin con las partes de una compu-tadora puede entender mejor el efecto de cada instruccin en un lenguaje de programacin.

    La mayora de las computadoras tiene seis componentes bsicos: unidad de memoria, unidad aritmtica/lgica, unidad de control, dispositivos de entrada, dispositivos de salida y dispositivos de almacenamiento auxiliares. La fi gura 1-8 es un diagrama estilizado de los componentes bsicos de una computadora.

    La unidad de memoria es una secuencia ordenada de celdas de almacenamiento, cada una capaz de contener un conjunto de datos. Cada celda de memoria tiene una direccin distinta a la que se hace referencia a fi n de al-macenar o recuperar datos de ella. Estas celdas de almacenamiento se llaman celdas de memoria o localidades de memoria.* La unidad de memoria contiene datos (datos de entrada o el producto de

    Unidad de memoria Depsito interno para almacena-miento de datos en una computadora.

    * La unidad de memoria se conoce tambin como RAM, acrnimo para memoria de acceso aleatorio (llamada as porque se puede acceder a cualquier lugar de manera aleatoria).

    1.3 Qu es una computadora? | 11

    DALE01.indd 11DALE01.indd 11 4/12/06 18:47:484/12/06 18:47:48

    www.FreeLibros.me

  • 12 | Captulo 1: Repaso de programacin y resolucin de problemas

    Figura 1-7 Estructuras de control bsicas de lenguajes de programacin

    SEQUENCE

    SELECTION (llamada tambin bifurcacin o decisin)

    IF condicin THEN sentencia 1 ELSE sentencia 2

    LOOP (conocido tambin como repeticin, iteracin o ciclo)

    WHILE condicin DO sentencia 1

    SUBPROGRAM (llamado tambin procedimiento, funcin, mtodo o subrutina)

    Sentencia 1

    Sentencia 1

    SUBPROGRAM1

    SUBPROGRAM1

    Sentencia 2

    Sentencia Sentencia Sentencia

    Condicin

    Condicin

    Verdadero

    Verdadero

    Falso

    Falso

    coleccin significativa de cualquiera de lo anterior

    Casa

    Oficina

    INICIO

    META

    un clculo) e instrucciones (programas), como se muestra en la fi gura 1-9.

    La parte de la computadora que sigue las instrucciones se lla-ma unidad central de procesamiento (CPU). Por lo comn, el CPU tiene dos componentes. La unidad aritmtica/lgica (ALU) efecta las opera-ciones aritmticas (suma, resta, multiplicacin y divisin) y las

    Unidad central de procesamiento (CPU) Parte de la computadora que ejecuta las instrucciones (programa) al-macenadas en la memoria; est conformada por la unidad aritmtica/lgica y la unidad de control.

    Unidad aritmtica/lgica (ALU) Componente de la uni-dad central de procesamiento que efecta las operaciones aritmticas y lgicas.

    DALE01.indd 12DALE01.indd 12 4/12/06 18:47:514/12/06 18:47:51

    www.FreeLibros.me

  • operaciones lgicas (comparar dos valores). La unidad de control regula las acciones de los otros componentes de la computadora para que las instrucciones del programa se ejecuten en el orden correcto.

    Para poder usar las computadoras, se requiere alguna forma de hacer que los datos entren y salgan de ellas. Los dispositivos de entada/salida (I/O) aceptan los datos que se-rn procesados (entrada) y presentan valores de datos que han sido procesados (salida). Un teclado es un dispositivo de entrada comn. Otro es un ratn, un dispositivo indicador. Una pantalla de video es un dispositivo de salida comn, como lo son las impresoras y las pantallas de cristal lquido (LCD). Algunos dispo-sitivos, como una conexin a una red de computadoras, se usan para entrada y salida.

    En su mayora, las computadoras simplemente mueven y combinan datos en la memoria. Los varios tipos de computadoras difi eren sobre todo en el tamao de su memoria, la velocidad con que pueden ser recuperados los datos, la efi ciencia con que stos se pueden mover o combinar, y las li-mitaciones en los dispositivos I/O.

    Cuando se est ejecutando un programa, la computadora sigue una serie de pasos, el ciclo bus-car-ejecutar:

    Figura 1-8 Componentes bsicos de una computadora

    Dispositivo de entrada

    Unidad central de procesamiento

    Unidad de control

    Unidad aritmtica/lgica

    Unidad de memoria

    Dispositivo de salida

    Dispositivo de almacenamiento

    auxiliar

    Unidad de control Componente de la unidad central de procesamiento que controla las acciones de los otros componentes para que se ejecuten las instrucciones (el programa) en el orden correcto.

    Dispositivos de entrada/salida (I/O) Partes de la computadora que aceptan que los datos sean procesados (entrada) y presentan los resultados de ese procesamiento (salida).

    MEMORIA

    Sus datos

    Su programa

    Figura 1-9 Memoria

    1.3 Qu es una computadora? | 13

    DALE01.indd 13DALE01.indd 13 4/12/06 18:47:524/12/06 18:47:52

    www.FreeLibros.me

  • 14 | Captulo 1: Repaso de programacin y resolucin de problemas

    1. La unidad de control recupera (busca) la siguiente instruccin codifi cada de la memoria. 2. La instruccin se traduce en seales de control. 3. Las seales de control indican la unidad apropiada (unidad aritmtica/lgica, memoria, disposi-

    tivo I/O) para realizar (ejecutar) la instruccin. 4. La secuencia se repite desde el paso 1.

    Las computadoras pueden tener una amplia variedad de dis-positivos perifricos unidos a ellas. Un dispositivo de almacenamiento auxiliar o un dispositivo de almacenamiento secundario, retiene los datos codifi cados para la computadora hasta que se desee usarlos. En lugar de introducir datos cada vez, se pueden introducir slo una vez y pedir a la computadora que los almacene en un dispositivo de almacenamiento auxiliar. Siempre que se requiera usar los datos, se indica a la computadora que transfi era los datos del dispositivo a su memoria. Por tanto, un dispositivo de almacenamiento auxiliar

    sirve como dispositivo de entrada y salida. Los dispositivos de almacenamiento auxiliar son unidades de disco y unidades de cinta magntica. Una unidad de disco es una cruza entre un reproductor de disco compacto y un grabador de cinta. Utiliza un disco delgado hecho de material magntico. Una cabeza de lectura/escritura (similar a la cabeza de grabar/reproducir en una grabadora de cinta) se desplaza sobre el disco que gira, recuperando o registrando datos. Una unidad de cinta magntica es como una grabadora y se usa con frecuencia para respaldar (hacer una copia de) los datos de un disco, en caso de que alguna vez se dae.

    Otros ejemplos de dispositivos perifricos son los siguientes:

    Escneres, que leen imgenes visuales en papel y las convierten en datos binarios. Unidades CD-ROM (memoria de slo lectura en disco compacto), que leen (pero no pueden

    escribir) datos almacenados en discos compactos removibles. Unidades CD-R (disco compacto-grabable), que pueden escribir en un CD particular una sola

    vez, pero pueden leerlo muchas veces. Unidades CD-RW (disco compacto-regrabable), que pueden escribir y leer de un CD particular

    muchas veces. Unidades DVD-ROM (memoria de slo lectura en disco de video digital [o disco verstil di-

    gital]), que usa discos compactos con capacidad de almacenaje mucho mayor que la de los discos compactos comunes.

    Mdems (moduladores/demoduladores), que convierten de una parte a otra entre datos binarios y seales que pueden ser enviadas en lneas telefnicas ordinarias.

    Tarjetas de audio y bocinas. Sintetizadores de voz. Cmaras digitales.

    Juntos, todos estos componentes fsicos se conocen como hard-ware. Los programas que permiten operar el hardware se denominan software. Normalmente, el hardware es de diseo fi jo; el software se cambia con facilidad. De hecho, la facilidad con que se puede ma-nejar el software es lo que hace de la computadora una herramienta tan verstil y poderosa.

    Dispositivos perifricos Dispositivo de entrada, salida o almacenamiento auxiliar que est conectado a la computatora.

    Dispositivo de almacenamiento auxiliar Dispositivo que almacena datos en forma codifi cada de manera externa a la memoria principal de la computadora.

    Hardware Componentes fsicos de una computadora.

    Software Programas de computadora; conjunto de pro-gramas disponibles en una computadora.

    DALE01.indd 14DALE01.indd 14 4/12/06 18:47:544/12/06 18:47:54

    www.FreeLibros.me

  • Informacin bsicaComputadoras personales, estaciones de trabajo y computadoras centrales

    Existen computadoras de muchos tipos y tamaos. Las computadoras centrales son muy grandes (pueden llenar una habitacin!) y muy rpidas. Una computadora central representativa consta de varios gabinetes llenos de componentes electrnicos. Dentro de esos gabinetes est la memoria, la unidad central de proce-samiento y las unidades de entrada y salida. Es fcil localizar los distintos dispositivos perifricos: gabinetes separados contienen las unidades de disco y las unidades de cinta. Otras unidades son obviamente las impresoras y las terminales (monitores con teclados). Es comn poder conectar cientos de terminales a una sola computadora central. Por ejemplo, todas las cajas registradoras en una cadena de tiendas departamen-tales podran estar enlazadas a una sola computadora central.

    En el otro extremo del espectro estn las computadoras personales. stas son lo su cientemente peque-as para colocarse de modo confortable sobre un escritorio. Debido a su tamao, puede ser difcil localizar cada una de las partes dentro de las computadoras personales. Muchas son slo una simple caja con una pantalla, un teclado y un ratn. Es necesario abrir la cubierta para ver la unidad central de procesamiento, que por lo comn es slo un componente electrnico llamado circuito integrado o chip.

    Algunas computadoras personales tienen unidades de cinta, pero la mayora opera slo con unidades de disco, unidades de CD-ROM e impresoras. El CD-ROM y las unidades de disco para computadoras per-sonal