www.FreeLibros.me
DALEPrel.indd iiDALEPrel.indd ii 4/12/06 18:30:514/12/06 18:30:51
www.FreeLibros.me
C++
Programación y
resolución de problemas
con
DALEPrel.indd iDALEPrel.indd i 4/12/06 18:30:474/12/06 18:30:47
www.FreeLib...
DALEPrel.indd iiDALEPrel.indd ii 4/12/06 18:30:514/12/06 18:30:51
www.FreeLibros.me
C++
Programación y
resolución de problemas
con
Nell Dale
University of Texas, Austin
Chip Weems
University of Massachusett...
Director Higher Education: Miguel Ángel Toledo Castellanos
Director editorial: Ricardo del Bosque Alayón
Editor sponsor: P...
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.
DA...
Por mencionar a Mefistófeles, uno de los demonios principales, y el temperamento de Fausto,
...Mi amigo, seré pedagógico,
Y...
Prefacio
A
través de las ediciones sucesivas de Programación y resolución de problemas con C++, una
cosa no ha cambiado: n...
viii | Prefacio
excepciones. En cada etapa del proyecto se escriben los controladores para probar las clases conforme
se c...
Prefacio | ix
cadena ISO/ANSI proporcionada por la biblioteca estándar.) Con menos tipos de datos que seguir, los
alumnos ...
x | Prefacio
El capítulo 11 comienza con una explicación de tipos de datos simples contra estructurados. Se
introduce el r...
Prefacio | xi
Secciones especiales Cinco tipos de características se hacen resaltar del texto principal. Las secciones
de ...
xii | Prefacio
Reconocimientos
Nos gustaría agradecer a las personas que ayudaron en la preparación de esta cuarta edición...
CONTENIDO
Prefacio vii
1 Repaso de programación y resolución de problemas 1
1.1 Repaso de programación 2
¿Qué es la progra...
xiv | Contenido
2 Sintaxis y semántica de C++, y el proceso
de desarrollo de programa 37
2.1 Elementos de programas C++ 38...
Contenido | xv
3.4 Expresiones aritméticas simples 84
Operadores aritméticos 84
Operadores de incremento y decremento 86
3...
xvi | Contenido
4.5 Falla de la entrada 132
4.6 Metodologías de diseño de software 133
4.7 ¿Qué son los objetos? 134
4.8 D...
Contenido | xvii
Pruebas efectuadas automáticamente durante la compilación
y ejecución 194
Prueba y sugerencias de depurad...
xviii | Contenido
7.2 Resumen de las funciones definidas por el usuario 257
Flujo de control en llamadas de función 257
Par...
Contenido | xix
Caso práctico de resolución de problemas: Perfil de salud 322
Prueba y depuración 330
Talones y manejadores...
xx | Contenido
10.3 Trabajar con datos de caracteres 384
Conjuntos de caracteres 384
Constantes char de C++ 385
Técnicas d...
Contenido | xxi
11.6 Clases en C++ 445
Clases, objetos de clase y miembros de clase 448
Operaciones integradas en objetos ...
xxii | Contenido
12.4 Arrays bidimensionales 503
12.5 Procesamiento de arrays bidimensionales 506
Sumar las filas 507
Sumar...
Contenido | xxiii
Caso práctico de resolución de problemas: Calcular estadísticas de examen
(rediseño) 582
Prueba y depura...
xxiv | Contenido
15 Apuntadores, datos dinámicos y tipos de referencia 645
15.1 Apuntadores 646
Variables de apuntadores 6...
Contenido | xxv
17 Plantillas y excepciones 747
17.1 Plantilla de funciones 748
Sobrecarga de función 748
Definición de una...
xxvi | Contenido
Resumen 825
Comprobación rápida 825
Respuestas 825
Ejercicios de preparación para examen 825
Ejercicios d...
Objetivos
CAPÍTULO
1Repaso de
programación
y resolución de
problemas
Objetivos de conocimiento
n Entender lo que es un pro...
2 | Capítulo 1: Repaso de programación y resolución de problemas
Computadora Objeto que calcula; específicamente:dis-
posit...
pudieran hacer a mano. A fin de usar esta poderosa herramienta, se debe especificar lo que se desea
hacer y el orden en que ...
4 | Capítulo 1: Repaso de programación y resolución de problemas
El programador comienza el proceso de programación al
ana...
algoritmo, lo traduce en un lenguaje de programación. En
este libro se usa el lenguaje de programación C++.
Un lenguaje de...
6 | Capítulo 1: Repaso de programación y resolución de problemas
lenguaje de programación permite al programador cierta fle...
números y letras. En la actualidad, las computadoras también procesan datos que representan sonido
(que se reproducirá en ...
8 | Capítulo 1: Repaso de programación y resolución de problemas
1.2 ¿Qué es un lenguaje de programación?
En la computador...
1.2 ¿Qué es un lenguaje de programación? | 9
Figura 1-4 Niveles de abstracción
Lenguaje de bajo nivel
(lenguaje ensamblado...
10 | Capítulo 1: Repaso de programación y resolución de problemas
a que cada computadora tiene su propio lenguaje de máqui...
Las instrucciones en un lenguaje de programación reflejan las operaciones que puede realizar
una computadora:
• Una computa...
12 | Capítulo 1: Repaso de programación y resolución de problemas
Figura 1-7 Estructuras de control básicas de lenguajes d...
operaciones lógicas (comparar dos valores). La unidad de
control regula las acciones de los otros componentes de la
comput...
14 | Capítulo 1: Repaso de programación y resolución de problemas
1. La unidad de control recupera (busca) la siguiente in...
Información básica
Computadoraspersonales,estacionesdetrabajoycomputadorascentrales
Existen computadoras de muchos tipos y...
16 | Capítulo 1: Repaso de programación y resolución de problemas
Computadoraspersonales,estacionesdetrabajoycomputadorasc...
Un último tipo de computadora que se debe mencionar es la supercomputadora, la clase de
computadora más poderosa que exist...
18 | Capítulo 1: Repaso de programación y resolución de problemas
Interfaz Enlace de conexión en un límite compartido
que ...
1.3 ¿Qué es una computadora? | 19
Información básica
Los orígenes de C++
A finales de la década de 1960 y principios de la ...
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Programación y resolución de problemas con c++
Upcoming SlideShare
Loading in...5
×

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

8,266

Published on

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

Esta Edición de programación y resolución de problemas con C++, continúa con la filosofía de que los temas considerados demasiado avanzados pueden ser enseñados con un primer curso. por ejemplo, se atienden de modo explícito los metalenguajes como medio formal de especificar la sintaxis del lenguaje de programación. se introduce la notación o mayúsculas (Big-O) al principio, y se usa para comparar algoritmos en capítulos posteriores.

Published in: Software
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,266
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
2,095
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

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

  1. 1. www.FreeLibros.me
  2. 2. DALEPrel.indd iiDALEPrel.indd ii 4/12/06 18:30:514/12/06 18:30:51 www.FreeLibros.me
  3. 3. C++ Programación y resolución de problemas con DALEPrel.indd iDALEPrel.indd i 4/12/06 18:30:474/12/06 18:30:47 www.FreeLibros.me
  4. 4. DALEPrel.indd iiDALEPrel.indd ii 4/12/06 18:30:514/12/06 18:30:51 www.FreeLibros.me
  5. 5. C++ Programación y resolución de problemas con Nell Dale University of Texas, Austin Chip Weems University of Massachusetts, Amherst Revisión técnica Jorge Valeriano Assem Universidad Nacional Autónoma de México, Facultad de Ingeniería MÉXICO • BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA LISBOA • MADRID • NUEVA YORK • SAN JUAN • SANTIAGO AUCKLAND • LONDRES • MILÁN • MONTREAL • NUEVA DELHI SAN 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
  6. 6. Director Higher Education: Miguel Ángel Toledo Castellanos Director editorial: Ricardo del Bosque Alayón Editor sponsor: Pablo E. Roig Vázquez Editora de desarrollo: Ana Laura Delgado Rodríguez Supervisor de producción: Zeferino García García Diseño de portada: Utopía Visual Traductores: Francisco Sánchez Fragoso Thomas Bartenbach Joest PROGRAMACIÓN Y RESOLUCIÓN DE PROBLEMAS CON C++ Prohibida la reproducción total o parcial de esta obra, por cualquier medio, sin la autorización escrita del editor. DERECHOS RESERVADOS © 2007, respecto a la primera edición en español por McGRAW-HILL/INTERAMERICANA EDITORES, S.A. DE C.V. A Subsidiary of The McGraw-Hill Companies, Inc. Edificio Punta Santa Fe Prolongación Paseo de la Reforma 1015, Torre A Piso 17, Colonia Desarrollo Santa Fe Delegación Álvaro Obregón C.P. 01376, México, D.F. Miembro de la Cámara Nacional de la Industria Editorial Mexicana, Reg. Núm. 736 ISBN-13: 978-970-10-6110-7 ISBN-10: 970-10-6110-1 Traducido de la cuarta edición 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 México Printed in Mexico DALEPrel.indd ivDALEPrel.indd iv 4/12/06 18:30:544/12/06 18:30:54 www.FreeLibros.me
  7. 7. 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
  8. 8. Por mencionar a Mefistófeles, uno de los demonios principales, y el temperamento de Fausto, ...Mi amigo, seré pedagógico, Y te digo que debes empezar con lógica... ...Se tendrán que invertir días para que aprendas Eso es lo que alguna vez hiciste de un golpe, Como comer y beber tan fácil y libre, Sólo puede hacerse con uno, dos, tres. Sin embargo la red del pensamiento no tiene tales pliegues Y tiene más parecido con las obras maestras de un tejedor; Un paso, miles de hilos surgen, Aquí y allá dispara cada lanzadera, Los hilos fluyen, invisibles y sutiles, Cada golpe afecta miles de enlaces. El filósofo viene con el análisis Y 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 podrían 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 lógica de los algoritmos ciegue su imaginación, por el contrario hágala 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
  9. 9. Prefacio A través de las ediciones sucesivas de Programación y resolución de problemas con C++, una cosa no ha cambiado: nuestro compromiso con el alumno. Como siempre, nuestros esfuerzos están dirigidos a hacer más accesibles a los alumnos los conceptos de computación en oca- siones difíciles. Esta edición de Programación y resolución de problemas con C++ continúa con la filosofía de que los temas considerados demasiado avanzados pueden ser enseñados en un primer curso. Por ejemplo, se atienden de modo explícito los metalenguajes como medio formal de especificar la sintaxis del lenguaje de programación. Se introduce la notación O mayúscula (Big-O) al principio, y se usa para comparar algoritmos en capítulos posteriores. Se analiza el diseño modular en términos de pasos abs- tractos, pasos concretos, equivalencia funcional y cohesión funcional. Las precondiciones y poscon- diciones se usan en el contexto de repaso del algoritmo, en el desarrollo de estrategias de prueba y como documentación de interfaz para funciones escritas por el usuario. La discusión del diseño de interfaz de función incluye encapsulación, abstracción de control y complejidad de comunicación. La abstracción de datos y los tipos de datos abstractos (TDA) se explican junto con el mecanismo de clase C++, de modo que se crea una guía natural para la programación orientada a objetos. C++ estándar ISO/ANSI se emplea en todo el libro, inclusive partes importantes de la nueva bi- blioteca estándar de C++. La presente edición En esta edición se han actualizado completamente los objetivos, los casos prácticos y los ejercicios. Además, en el capítulo 13, el lenguaje del material se ha vuelto más orientado a objetos. Objetivos Los objetivos del capítulo han sido organizados para reflejar 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 términos de lo que el alumno debe saber después de leer el capítulo. La segunda reúne lo que el alumno debe poder hacer después de leer el capítulo. Casos prácticos de resolución de problemas Cada capítulo tiene un caso práctico completamente nuevo. Los casos prácticos que comienzan con un enunciado de problema y terminan con un progra- ma probado han sido la marca distintiva de nuestros libros. En esta sección se han añadido imágenes de pantallas que muestran el resultado para cada uno de los casos. El caso práctico del capítulo 14 comienza con la construcción de un calendario de citas. El proyec- to se completa en el capítulo 16. En el capítulo 17 se cambia la ejecución de una clase, enfatizando que tales cambios no afectan al usuario. El programa también se hace más robusto al añadir y manejar DALEPref.indd viiDALEPref.indd vii 4/12/06 18:38:534/12/06 18:38:53 www.FreeLibros.me
  10. 10. viii | Prefacio excepciones. En cada etapa del proyecto se escriben los controladores para probar las clases conforme se crean. Esta organización muestra en acción al diseño y la programación orientados a objetos. Debido a que algunos de los ejemplos pequeños empleados en un capítulo encuentran su camino en el código de caso práctico, estos ejemplos han sido cambiados para que sean congruentes con los nuevos casos prácticos. Ejercicios Con excepción del capítulo 17, todos los ejercicios son nuevos. El número de ejercicios ha sido ampliado por entre veinte y treinta por ciento. Todos los problemas de programación son nuevos. Lenguaje orientado a objetos La lista TDA del capítulo 13 ha sido cambiada eliminando la operación Print e introduciendo un par de iteradores, Reset y GetNestItem. Este cambio proporciona mejor encapsulación. La lista no necesita saber nada acerca de los ítems que contiene. La lista simplemente devuelve objetos al programa cliente, que debe conocer cuáles son los objetos. La desventaja en este diseño se señala en el capítulo 14. Las operaciones Delete y BinSearch usan operadores relaciona- les, lo que limita el tipo de ítem a tipos integrados. En este capítulo, los operadores relacionales se remplazan por operaciones LessThan y Equal; la documentación establece que ItemType debe llevar a cabo estas operaciones. Se analizan también los conceptos de responsabilidades de acción y responsabilidades de conocimiento. El uso de clases para construir ítems cada vez más complejos se remarca en los casos prácticos. Cada clase se prueba de modo independiente, remarcando la importancia de probar. C++ y programación 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 difíciles de descifrar. Nuestra experiencia no apoya este punto de vista, siempre que el uso de características de lenguaje se modele de manera apropiada. El hecho de que la familia C permita un estilo de programación conciso y compacto no se puede etiquetar simplemente como “bueno” o “malo”. Casi cualquier lenguaje de programación 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 más frecuencia que los otros lenguajes, pero se ha encontrado que con instrucción cuidadosa en ingeniería de software y un estilo de pro- gramación que sea directo, disciplinado y libre de características de lenguaje intrincadas, los alumnos pueden aprender a usar C++ para producir código claro y legible. Se debe remarcar que aunque se usa C++ como un vehículo para enseñar conceptos de compu- tación, el libro no es un manual de lenguaje y no intenta hacer una cobertura completa de C++. Ciertas características de lenguaje, sobrecarga del operador, argumentos por omisión, información tipo tiempo de ejecución y mecanismos para formas avanzadas de herencia, por nombrar algunas, se omiten en un esfuerzo por no abrumar con mucho, demasiado rápido, al alumno principiante. Hay diversas opiniones acerca de cuándo introducir el tema de la programación orientada a ob- jetos (POO). Algunos profesores abogan por una inmersión en la POO desde el principio, mientras que otros (para quienes está dirigido este libro) favorecen un método más heterogéneo, en el que tanto la descomposición funcional como el diseño orientado a objetos se presentan como herramientas de diseño. La organización del capítulo de Programación y resolución de problemas con C++ refleja un enfoque de transición a la POO. Aunque se provee una presentación anticipada del diseño orientado a objetos en el capítulo 4, se retrasa una discusión enfocada hasta el capítulo 14, después que los alumnos han adquirido bases firmes en el diseño de algoritmos, abstracción de control y abstracción de datos con clases. Sinopsis El capítulo 1 está diseñado para crear un entendimiento confortable entre los alumnos y el tema. Se presentan los conceptos básicos de hardware y software, se plantean cuestiones de ética en compu- tación y se introducen y refuerzan técnicas de resolución de problemas en un caso práctico de reso- lución de problemas. En lugar de abrumar inmediatamente al alumno con los distintos tipos numéricos disponibles en C++, el capítulo 2 se concentra en sólo 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
  11. 11. Prefacio | ix cadena ISO/ANSI proporcionada por la biblioteca estándar.) Con menos tipos de datos que seguir, los alumnos pueden centrar su atención en la estructura general del programa y lograr un comienzo temprano en la creación y ejecución de un programa simple. En el capítulo 3 se continúa con el análisis de los tipos numéricos de C++ y se procede con material sobre expresiones aritméticas, lla- madas de función 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 capítulos se enfocan en los tipos de cadena int, float, char y string, y los operadores aritméticos básicos. Los detalles de los otros tipos de datos y los operadores de C++ más elaborados se posponen hasta el capítulo 10. Las metodologías de descomposición funcional y de diseño orientado a objetos son un objetivo principal en el capítulo 4, y el análisis se escribe con un saludable grado de formalismo. El tratamien- to anticipado del diseño orientado a objetos en el libro es más superficial que la descomposición funcional. Sin embargo, los alumnos ganan la perspectiva oportuna de que hay dos, no sólo una, metodologías de diseño de uso extendido y que cada una sirve para un propósito específico. El dise- ño orientado a objetos se cubre a profundidad en el capítulo 14. En el capítulo 4 se cubre también la entrada y la entrada y salida de archivos. La introducción temprana de archivos permite la asignación de problemas de programación que requiere el uso de archivos de datos muestrales. Los alumnos aprenden a reconocer funciones en los capítulos 1 y 2 y aprenden a usar las fun- ciones de biblioteca estándar en el capítulo 3. El capítulo 4 refuerza los conceptos básicos de llama- das de función, paso de argumentos y bibliotecas de función. El capítulo 4 relaciona también funcio- nes con la ejecución de diseños modulares, y comienza el análisis de diseño de interfaz que es esencial para escribir funciones apropiadas. El capítulo 5 comienza con datos booleanos, pero su propósito principal es introducir el concep- to de flujo de control. La selección, con estructuras If-Then e If-Then-Else, se emplea para demostrar la distinción entre orden físico de declaraciones y orden lógico. Se desarrolla también el concepto de estructuras de control anidadas. El capítulo 5 concluye con una sección larga de Prueba y depuración que se amplía en el análisis de diseño modular al introducir precondiciones y poscondiciones. El re- paso de algoritmo y el repaso de código se introducen como medios para evitar errores, y el segui- miento de la ejecución se usa para hallar errores que se pudieron haber cometido en el código. También se cubre de forma extensa la validación de datos y estrategias de prueba en esta sección. El capítulo 6 se dedica a las estrategias de control de bucles y operaciones iterativas por medio de sintaxis de la declaración While. En vez de introducir estructuras sintácticas múltiples, nuestro método es enseñar los conceptos de iteración usando sólo la declaración While. Sin embargo, debido a que muchos profesores nos han expresado que prefieren mostrar a los alumnos la sintaxis para las declaraciones de iteración de C++ a la vez, el examen de las declaraciones For y Do-While del capí- tulo 9 se pueden cubrir después del capítulo 6. Por el capítulo 7 los alumnos ya se sienten cómodos con la descomposición de problemas en módulos y el uso de funciones de biblioteca, y son receptivos a la idea de escribir sus propias funcio- nes. Así, el capítulo 7 se centra en pasar argumentos por valor y cubre el flujo de control en llamadas de función, argumentos o parámetros, variables locales y diseño de interfaz. La cobertura del diseño de interfaz incluye precondiciones y poscondiciones en la documentación de interfaz, abstracción de control, encapsulación y ocultación física contra conceptual de una ejecución. En el capítulo 8 se amplía el análisis para incluir parámetros de referencia, alcance y tiempo de vida, talones y contro- ladores, y más sobre el diseño de interfaz, inclusive efectos secundarios. En el capítulo 9 se cubren las demás 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- pítulo 9 es un punto terminal natural para primer trimestre de una serie de cursos introductorios en dos trimestres. El capítulo 10 comienza la transición entre la orientación de estructuras de control de la primera mitad del libro y la orientación de tipo de datos abstractos de la segunda mitad. Se examinan los tipos de datos simples integrados en términos 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 presentación de punto flotante y precisión. Los tipos simples definidos por el usuario, archivos de encabezado escritos por el usuario y coerción de tipo están entre los otros temas cubiertos en este capítulo. DALEPref.indd ixDALEPref.indd ix 4/12/06 18:38:574/12/06 18:38:57 www.FreeLibros.me
  12. 12. x | Prefacio El capítulo 11 comienza con una explicación de tipos de datos simples contra estructurados. Se introduce el registro (struct en C++) como una estructura de datos heterogénea, se describe la sintaxis para tener acceso a sus componentes y se demuestra cómo combinar tipos de registro en una estruc- tura de registro jerárquica. De esta base, se procede al concepto de abstracción de datos y se da una definición precisa para la noción de un TDA, remarcando la separación de especificación y ejecución. El mecanismo de clase de C++ se introduce como una representación del lenguaje de programación de un TDA. Se remarcan los conceptos de encapsulación, ocultación de información y miembros de clase pública y privada. Se describe la compilación separada de archivos de programa, y los alumnos aprenden la técnica de colocar una declaración y ejecución de clase en dos archivos separados: el archivo de especificación (.h) y el archivo de ejecución (.ccp). En el capítulo 12 se introduce el arreglo como una estructura de datos homogénea a cuyos com- ponentes se tiene acceso por posición 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 discusión. El capítulo 13 integra el material de los capítulos 11 y 12 definiendo 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 tamaño fijo, integrada. La lista es una estructura de tamaño variable, definida por el usuario, representada en este capítulo 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 posición 0 hasta la longitud de posición Ϫ1. En este capítulo, se diseñan clases de C++ para TDA de listas no clasificadas y clasificadas, y se co- difican los algoritmos de lista como funciones de miembros de clase. Se usa la notación Big-O para comparar los distintos algoritmos de búsqueda y clasificación desarrollados para estos TDA. Por úl- timo, se examinan cadenas de C a fin de dar a los alumnos cierta visión de cómo se podría ejecutar la abstracción de nivel superior (una cadena como una lista de caracteres) en términos de abstracción de nivel bajo (un arreglo char con terminación nula). En el capítulo 14 se amplían los conceptos de abstracción de datos y clases C++ a una explora- ción de desarrollo de software orientado a objetos. El diseño orientado a objetos, introducido de manera breve en el capítulo 4, se revisa con mayor profundidad. Los alumnos aprenden a distinguir entre relaciones de herencia y composición durante la fase de diseño y las clases derivadas de C++ se emplean para poner en práctica la herencia. En este capítulo se introducen también funciones virtua- les de C++, que apoyan el polimorfismo en la forma de enlace de operaciones a objetos en tiempo de ejecución. En el capítulo 15 se examinan tipos de punteros y referencia. Se presenta a los punteros como una forma de hacer más eficientes a los programas y de permitir la asignación en tiempo de ejecución de datos de programa. La cobertura de estructuras de datos dinámicos continúa en el capítulo 16, en el que se presentan listas enlazadas, algoritmos de listas enlazadas y representaciones alternas de listas enlazadas. En el capítulo 17 se introducen plantillas de C++ y el manejo de excepción, y en el capítulo 18 se concluye el texto con la cobertura de la recursión. 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 capítulos han sido diseñados de modo que puedan ser asignados para leer junto con capítulos previos. Se sugiere la siguiente lectura de prerrequisitos para los temas de los capítulos 17 y 18: Sección o secciones Tema Prerrequisito 17.1 Funciones de plantilla Capítulo 10 17.2 Clases de plantilla Capítulo 13 17.3 Excepciones Capítulo 11 18.1-18.3 Recursión con variables simples Capítulo 8 18.4 Recursión con arreglos Capítulo 12 18.5 Recursión con variables de puntero Capítulo 16 DALEPref.indd xDALEPref.indd x 4/12/06 18:38:584/12/06 18:38:58 www.FreeLibros.me
  13. 13. Prefacio | xi Secciones especiales Cinco tipos de características se hacen resaltar del texto principal. Las secciones de bases teóricas presentan el material relacionado con la teoría fundamental detrás de varias ramas de la computación. En los consejos prácticos de ingeniería de software se examinan métodos para hacer los programas más confiables, robustos o eficientes. Los asuntos de estilo atienden cuestiones de la codificación de programas. En las secciones de información básica se exploran cuestiones se- cundarias que mejoran el conocimiento general del alumno en computación. Asimismo se incluyen biografías de pioneros de la computación como Blaise Pascal, Ada Lovelace y Grace Murray Hopper. Objetivos Como ya se describió, cada capítulo comienza con una lista de objetivos para el alumno, separados en dos categorías: objetivos de conocimiento y objetivos de habilidades. Éstos se refuerzan y prueban en los ejercicios de fin de capítulo. Casos prácticos de resolución de problemas La resolución de problemas se demuestra mejor a través de casos prácticos. En cada caso práctico se presenta un problema y se emplean técnicas de resolu- ción de problemas para desarrollar una solución manual. A continuación, se desarrolla la solución para un algoritmo por medio de descomposición funcional, diseño orientado a objetos, o ambos; luego se codifica el algoritmo en C++. Se muestran los datos de prueba muestrales y la salida, y se continúa con una explicación de lo que tiene que ver con la prueba completa del programa. Prueba y depuración Las secciones de prueba y depurado siguen a los casos prácticos en cada ca- pítulo y consideran a profundidad las implicaciones del material del capítulo en relación con la prueba completa de programas. Estas secciones concluyen con una lista de sugerencias de prueba y depuración. Comprobaciones rápidas Al final de cada capítulo hay preguntas que prueban la capacidad del alum- no de recordar los puntos principales relacionados con los objetivos del capítulo. Al leer cada pre- gunta, el alumno debe conocer la respuesta de inmediato, que se puede comprobar de un vistazo en las respuestas al final de cada sección. El número de página en el que se explicó el concepto aparece al final de cada pregunta de modo que el alumno puede revisar el material en el caso de una respues- ta incorrecta. Ejercicios de preparación para examen Estas preguntas ayudan al alumno a prepararse para pruebas. Las preguntas por lo general tienen respuestas objetivas y están diseñadas para ser contestadas con algunos minutos de trabajo. Ejercicios de preparación para programación Esta sección proporciona al alumno experiencia en la escritura de fragmentos de código C++. El alumno puede practicar los constructos sintácticos en cada capítulo sin la carga de escribir un programa completo. Problemas de programación Estos ejercicios, tomados de una amplia variedad de disciplinas, requie- ren que el alumno diseñe soluciones y escriba programas completos. Seguimiento de caso práctico Mucha de la práctica de programación moderna requiere leer y modi- ficar código existente. Estos ejercicios dan al alumno la oportunidad de fortalecer esta habilidad crítica al contestar preguntas acerca del código de caso práctico o al hacerle cambios. Materiales de apoyo Esta obra cuenta con interesantes complementos que fortalecen los procesos de enseñanza-aprendi- zaje, así como la evaluación de los mismos, los cuales se otorgan a profesores que adoptan este texto para sus cursos. Para obtener más información y conocer la política de entrega de estos mate- riales, contacte a su representante McGraw-Hill o envíe un correo electrónico a marketinghe@mcgraw- hill.com DALEPref.indd xiDALEPref.indd xi 4/12/06 18:39:004/12/06 18:39:00 www.FreeLibros.me
  14. 14. xii | Prefacio Reconocimientos Nos gustaría agradecer a las personas que ayudaron en la preparación de esta cuarta edición. Estamos en deuda con los miembros de las facultades de los departamentos de computación de la universidad de Texas en Austin y la Universidad de Massachusetts en Amherst. Se agradece especialmente a Jeff Brumfiel 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 enseñanza, asesores y supervisores de alumnos quienes pusieron en práctica 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, Virginia 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 University; Charles Welty, University of Southern Maine; Cheer-Sun Yang, West Chester University. Se agradece también 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
  15. 15. CONTENIDO Prefacio vii 1 Repaso de programación y resolución de problemas 1 1.1 Repaso de programación 2 ¿Qué es la programación? 2 ¿Cómo se escribe un programa? 3 1.2 ¿Qué es un lenguaje de programación? 8 1.3 ¿Qué es una computadora? 11 1.4 Ética y responsabilidades en la profesión de computación 20 Piratería de software 20 Privacidad de datos 21 Uso de recursos de computadora 21 Ingeniería de software 22 1.5 Técnicas de resolución de problemas 23 Haga preguntas 23 Busque cosas que sean familiares 23 Resuelva por analogía 23 Análisis de medios y fines 24 Dividir y vencer 25 Método de bloques de construcción 25 Combinar soluciones 26 Bloqueos mentales: el temor de empezar 26 Resolución algorítmica de problemas 27 Caso práctico de resolución de problemas: Algoritmo del año bisiesto 27 Resumen 31 Comprobación rápida 31 Respuestas 32 Ejercicios de preparación para examen 32 Ejercicios de preparación para la programación 34 Seguimiento de caso práctico 35 DALECont.indd xiiiDALECont.indd xiii 4/12/06 18:41:344/12/06 18:41:34 www.FreeLibros.me
  16. 16. xiv | Contenido 2 Sintaxis y semántica de C++, y el proceso de desarrollo de programa 37 2.1 Elementos de programas C++ 38 Estructura de un programa C++ 38 Sintaxis y semántica 40 Plantillas de sintaxis 42 Cómo nombrar los elementos de programa: identificadores 44 Datos y tipos de datos 45 Cómo nombrar elementos: declaraciones 48 Manos a la obra: sentencias ejecutables 51 Más allá del minimalismo: añadir comentarios a un programa 56 2.2 Construcción del programa 56 Bloques (sentencias compuestas) 58 El preprocesador de C++ 60 Introducción a los espacios de nombres (Namespaces) 61 2.3 Más acerca de la salida 62 Crear líneas en blanco 62 Inserción de espacios en blanco dentro de una línea 63 2.4 Introducción de programa, corrección y ejecución 64 Introducción de un programa 64 Compilación y ejecución de un programa 64 Terminado 65 Caso práctico de resolución de problemas: Impresión de un tablero de ajedrez 66 Prueba y depuración 70 Resumen 71 Comprobación rápida 71 Respuestas 72 Ejercicios de preparación para examen 72 Ejercicios de preparación para la programación 74 Problemas de programación 76 Seguimiento de caso práctico 77 3 Tipos numéricos, expresiones y salida 79 3.1 Repaso de tipo de datos de C++ 80 3.2 Tipos de datos numéricos 80 Tipos integrales 80 Tipos de punto flotante 82 3.3 Declaraciones para tipos numéricos 82 Declaraciones constantes nombradas 82 Declaraciones de variables 83 DALECont.indd xivDALECont.indd xiv 4/12/06 18:41:364/12/06 18:41:36 www.FreeLibros.me
  17. 17. Contenido | xv 3.4 Expresiones aritméticas simples 84 Operadores aritméticos 84 Operadores de incremento y decremento 86 3.5 Expresiones aritméticas compuestas 87 Reglas de precedencia 87 Coerción y conversión de tipo (Moldeo de tipo) 88 3.6 Llamadas de función y funciones de biblioteca 92 Funciones de devolución de valor 92 Funciones de biblioteca 94 Funciones void (vacías) 95 3.7 Formateo del resultado 95 Enteros y cadenas 96 Números de punto flotante 98 3.8 Más operaciones de cadena 101 Las funciones length y size 101 Función find 103 Función substr 104 Caso práctico de resolución de problemas: Calculadora de pago de hipoteca 106 Prueba y depuración 109 Resumen 109 Comprobación rápida 110 Respuestas 110 Ejercicios de preparación para examen 110 Ejercicios de preparación para la programación 112 Problemas de programación 113 Seguimiento de caso práctico 114 4 Entrada de datos al programa y el proceso de diseño de software 115 4.1 Ingreso de datos en programas 116 Flujos de entrada y operador de extracción (>>) 116 Marcador de lectura y carácter de nueva línea 119 Lectura de datos de caracteres con la función get 120 Omitir caracteres con la función ignore 122 Lectura de datos de cadena 123 4.2 Entrada/salida interactiva 124 4.3 Entrada/salida no interactiva 126 4.4 Ingreso y salida de archivos 126 Archivos 126 Uso de archivos 127 Programa de ejemplo con archivos 130 Ingreso de nombres de archivo en tiempo de ejecución 131 DALECont.indd xvDALECont.indd xv 4/12/06 18:41:374/12/06 18:41:37 www.FreeLibros.me
  18. 18. xvi | Contenido 4.5 Falla de la entrada 132 4.6 Metodologías de diseño de software 133 4.7 ¿Qué son los objetos? 134 4.8 Diseño orientado a objetos 135 4.9 Descomposición funcional 136 Módulos 138 Implementación del diseño 139 Una perspectiva sobre el diseño 142 Caso práctico de resolución de problemas: Presentación de un nombre en formatos múltiples 143 Prueba y depuración 148 Sugerencias de prueba y depuración 149 Resumen 149 Comprobación rápida 150 Respuestas 150 Ejercicios de preparación para examen 151 Ejercicios de preparación para la programación 153 Problemas de programación 154 Seguimiento de caso práctico 156 5 Condiciones, expresiones lógicas y estructuras de control de selección 157 5.1 Flujo de control 158 Selección 158 5.2 Condiciones y expresiones lógicas 159 Tipo de datos bool 159 Expresiones lógicas 161 Precedencia de operadores 167 Operadores relacionales con tipos de punto flotante 169 5.3 Sentencia If 170 Forma If-Then-Else 170 Bloques (sentencias compuestas) 172 Forma If-Then 174 Un error común 175 5.4 Sentencias If anidadas 176 else suspendido 179 5.5 Probar el estado de un flujo I/O 179 Caso práctico de resolución de problemas: Calculadora para el IMC 181 Prueba y depuración 186 Prueba en la fase de resolución del problema: repaso del algoritmo 186 Prueba en la fase de implementación 188 Plan de prueba 193 DALECont.indd xviDALECont.indd xvi 4/12/06 18:41:374/12/06 18:41:37 www.FreeLibros.me
  19. 19. Contenido | xvii Pruebas efectuadas automáticamente durante la compilación y ejecución 194 Prueba y sugerencias de depurado 195 Resumen 196 Comprobación rápida 197 Respuestas 197 Ejercicios de preparación para examen 197 Ejercicios de calentamiento para programación 199 Problemas de programación 201 Seguimiento de caso práctico 203 6 Ciclos 205 6.1 La sentencia While 206 6.2 Fases de ejecución del ciclo 208 6.3 Ciclos con la sentencia While 208 Ciclos controlados por conteo 208 Ciclos controlados por suceso 210 Subtareas de ciclo 215 6.4 Cómo diseñar ciclos 217 Diseñar el flujo de control 218 Diseño del proceso dentro del ciclo 219 Salida del ciclo 220 6.5 Lógica anidada 221 Diseño de ciclos anidados 224 Caso práctico de resolución de problemas: Diseño de estudio de grabación 229 Prueba y depuración 239 Estrategia de prueba de ciclo 239 Planes de prueba relacionados con ciclos 240 Sugerencias de prueba y depuración 241 Resumen 242 Comprobación rápida 242 Respuestas 243 Ejercicios de preparación para examen 244 Ejercicios de preparación para la programación 246 Problemas de programación 247 Seguimiento de caso práctico 249 7 Funciones 251 7.1 Descomposición funcional con funciones void 252 Cuándo usar funciones 253 Escritura de módulos como funciones void 253 DALECont.indd xviiDALECont.indd xvii 4/12/06 18:41:384/12/06 18:41:38 www.FreeLibros.me
  20. 20. xviii | Contenido 7.2 Resumen de las funciones definidas por el usuario 257 Flujo de control en llamadas de función 257 Parámetros de función 257 7.3 Sintaxis y semántica de funciones void 260 Llamada de función (invocación) 260 Declaraciones y definiciones de función 260 Variables locales 262 Sentencia return 263 Archivos de encabezado 265 7.4 Parámetros 265 Parámetros por valor 266 Parámetros por referencia 267 Una analogía 269 Comparación de argumentos con parámetros 270 7.5 Diseño de funciones 273 Escritura de afirmaciones como comentarios de programa 274 Documentar la dirección del flujo de datos 276 Caso práctico de resolución de problemas: Costo total de hipoteca 280 Prueba y depuración 285 La función de biblioteca assert 286 Sugerencias de prueba y depuración 287 Resumen 288 Comprobación rápida 288 Respuestas 289 Ejercicios de preparación para examen 289 Ejercicios de preparación para la programación 291 Problemas de programación 292 Respuestas al seguimiento de caso práctico 295 8 Alcance, tiempo de vida y más sobre funciones 297 8.1 Alcance de identificadores 298 Reglas de alcance 300 Declaraciones y definiciones de variables 303 Espacios de nombres 304 8.2 Duración de una variable 306 Inicializaciones en declaraciones 307 8.3 Diseño de interfaz 308 Efectos secundarios 308 Constantes globales 310 8.4 Funciones de devolución de valor 312 Funciones booleanas 316 Diseño de interfaz y efectos secundarios 319 Cuándo usar funciones de devolución de valor 320 DALECont.indd xviiiDALECont.indd xviii 4/12/06 18:41:394/12/06 18:41:39 www.FreeLibros.me
  21. 21. Contenido | xix Caso práctico de resolución de problemas: Perfil de salud 322 Prueba y depuración 330 Talones y manejadores 331 Sugerencias de prueba y depuración 334 Resumen 335 Comprobación rápida 335 Respuestas 336 Ejercicios de preparación para examen 336 Ejercicios de calentamiento para programación 338 Problemas de programación 340 Seguimiento de caso práctico 341 9 Estructuras de control adicionales 343 9.1 La sentencia Switch 344 9.2 Sentencia Do-While 348 9.3 Sentencia For 350 9.4 Sentencias Break y Continue 354 9.5 Normas para elegir una sentencia de iteración 356 Caso práctico de resolución de problemas: El tío rico 357 Prueba y depuración 363 Sugerencias de prueba y depuración 363 Resumen 363 Comprobación rápida 364 Respuestas 364 Ejercicios de preparación para examen 364 Ejercicios de calentamiento para programación 366 Problemas de programación 366 Seguimiento de caso práctico 369 10 Tipos de datos simples: integrados y definidos por el usuario 371 10.1 Tipos simples integrados 372 Tipos integrales 373 Tipos de punto flotante 376 10.2 Más operadores de C++ 377 Operadores de asignación y expresiones de asignación 378 Operadores de incremento y decremento 379 Operadores por bits (a nivel de bits) 380 Operación de moldeo (cast) 380 Operador sizeof 381 Operador ?: 381 Precedencia de operadores 382 DALECont.indd xixDALECont.indd xix 4/12/06 18:41:394/12/06 18:41:39 www.FreeLibros.me
  22. 22. xx | Contenido 10.3 Trabajar con datos de caracteres 384 Conjuntos de caracteres 384 Constantes char de C++ 385 Técnicas de programación 387 10.4 Más acerca de números de punto flotante 392 Representación de números de punto flotante 392 Aritmética con números de punto flotante 394 Implementación de números de punto flotante en la computadora 395 10.5 Datos definidos por el usuario 401 Sentencia Typedef 401 Tipos de enumeración 402 Tipos de datos nombrados y anónimos 407 Encabezados de archivo escritos por el usuario 408 10.6 Más acerca de la coerción de tipos 409 Coerción de tipos en expresiones aritméticas y relacionales 409 Coerción de tipos en asignaciones, paso de argumentos y retorno de una función de valor 410 Caso práctico de resolución de problemas: Análisis estadístico de texto 412 Prueba y depuración 421 Datos de punto flotante 421 Cómo hacer frente a los errores de entrada 421 Sugerencias de prueba y depuración 421 Resumen 422 Comprobación rápida 423 Respuestas 423 Ejercicios de preparación para examen 423 Ejercicios de calentamiento para programación 424 Problemas de programación 425 Seguimiento de caso práctico 427 11 Tipos estructurados, abstracción de datos y clases 429 11.1 Tipos de datos simples contra estructurados 430 11.2 Registros (structs) 431 Acceso a componentes individuales 433 Operaciones de agregación en structs 434 Más acerca de declaraciones struct 435 Enlace de elementos similares 436 Registros jerárquicos 438 11.3 Uniones 439 11.4 Abstracción de datos 441 11.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
  23. 23. Contenido | xxi 11.6 Clases en C++ 445 Clases, objetos de clase y miembros de clase 448 Operaciones integradas en objetos de clase 448 Alcance de clase 450 Ocultación de información 451 11.7 Archivos de especificación e implementación 452 Archivo de especificación 452 Archivo de implementación 454 Compilación y enlace de un programa multiarchivo 458 11.8 Inicialización garantizada con constructores de clases 460 Invocación de un constructor 461 Especificación revisada y archivos de implementación para Time 462 Directrices para usar constructores de clase 465 Caso práctico de resolución de problemas: Nombre de tipo de datos abstractos 466 Prueba y depuración 474 Sugerencias de prueba y depuración 477 Resumen 478 Comprobación rápida 478 Respuestas 479 Ejercicios de preparación para examen 479 Ejercicios de calentamiento para programación 480 Problemas de programación 482 Seguimiento de caso práctico 484 12 Arrays 485 12.1 Arrays unidimensionales 486 La declaración de arrays 488 Acceder a componentes individuales 489 Índices de arrays fuera de límite 490 Inicialización de arrays en declaraciones 491 Ausencia de operaciones agregadas en arrays 492 Ejemplos de declarar y acceder a arrays 493 Pasando arrays como argumentos 496 Afirmaciones sobre arrays 499 El uso de Typedef con arrays 500 12.2 Arrays de registros (estructuras) y objetos de clase 500 Arrays de registros (estructuras) 500 Arrays de objetos de clase 502 12.3 Tipos especiales de procesamiento de arrays 502 Procesamiento de sub-arrays 502 Índices con contenido semántico 503 DALECont.indd xxiDALECont.indd xxi 4/12/06 18:41:414/12/06 18:41:41 www.FreeLibros.me
  24. 24. xxii | Contenido 12.4 Arrays bidimensionales 503 12.5 Procesamiento de arrays bidimensionales 506 Sumar las filas 507 Sumar las columnas 508 Inicializar el array 509 Imprimir el array 510 12.6 Paso de arrays bidimensionales como argumentos 511 12.7 Otra forma de definir arrays bidimensionales 513 12.8 Arrays multidimensionales 514 Caso práctico de resolución de problemas: Calcular estadísticas de examen 516 Prueba y depuración 533 Arrays unidimensionales 533 Estructuras complejas 534 Arrays multidimensionales 535 Consejos para pruebas y depuración 536 Resumen 537 Comprobación rápida 537 Respuestas 538 Ejercicios de preparación para examen 538 Ejercicios de calentamiento de programación 541 Problemas de programación 542 Seguimiento de caso práctico 544 13 Listas basadas en arrays 545 13.1 La lista como un tipo de datos abstractos (ADT) 546 13.2 Listas no ordenadas 552 Operaciones básicas 552 Inserción y supresión 554 Búsqueda secuencial 556 Iteradores 558 Ordenamiento 560 13.3 Listas ordenadas 562 Operaciones básicas 565 Inserción 565 Búsqueda secuencial 567 Búsqueda binaria 568 Borrado 573 13.4 Entendiendo las cadenas de caracteres 575 Inicialización de cadenas C 577 Entrada y salida de cadenas C 578 Rutinas de biblioteca de cadenas C 580 ¿Clase 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
  25. 25. Contenido | xxiii Caso práctico de resolución de problemas: Calcular estadísticas de examen (rediseño) 582 Prueba y depuración 591 Consejos para prueba y depuración 591 Resumen 592 Comprobación rápida 592 Respuestas 592 Ejercicios de preparación para examen 593 Ejercicios de calentamiento para programación 594 Problemas de programación 595 Seguimiento de caso práctico 595 14 Desarrollo de software orientado a objetos 597 14.1 La programación orientada a objetos 598 14.2 Objetos 600 14.3 Herencia 603 Derivar una clase de otra 604 Especificación de la clase ExtTime 607 Aplicación de la clase ExtTime 609 Evitar inclusiones múltiples de archivos de encabezados 612 14.4 Composición 613 Diseño de una clase Entry 613 Inicializador de constructor 618 14.5 Ligadura dinámica y funciones virtuales 619 El problema de corte 620 Funciones virtuales 621 14.6 Diseño orientado a objetos 623 Paso 1: Identificar los objetos y operaciones 623 Paso 2: Determinar las relaciones entre objetos 624 Paso 3: Diseñar el controlador 624 14.7 Implementar el diseño 625 Caso práctico de resolución de problemas: Creación de una agenda de citas 626 Prueba y depuración 636 Consejos para prueba y depuración 636 Resumen 637 Comprobación rápida 638 Respuestas 638 Ejercicios de preparación para examen 638 Ejercicios de calentamiento para programación 641 Problemas de programación 643 Seguimiento de caso práctico 644 DALECont.indd xxiiiDALECont.indd xxiii 4/12/06 18:41:424/12/06 18:41:42 www.FreeLibros.me
  26. 26. xxiv | Contenido 15 Apuntadores, datos dinámicos y tipos de referencia 645 15.1 Apuntadores 646 Variables de apuntadores 646 Expresiones con apuntadores 650 15.2 Datos dinámicos 655 15.3 Tipos de referencia 659 15.4 Clases y datos dinámicos 662 Destructores de clase 666 Copiado superficial vs. copiado profundo 667 Constructores de copia de clase 668 Caso práctico de resolución de problemas: Creación de un calendario de citas, continuación 671 Prueba y depuración 687 Sugerencias de prueba y depuración 689 Resumen 690 Comprobación rápida 691 Respuestas 691 Ejercicios de preparación para examen 691 Ejercicios de calentamiento de programación 693 Problemas de programación 694 Seguimiento de caso práctico 696 16 Estructuras ligadas 697 16.1 Estructuras secuenciales versus estructuras ligadas 698 16.2 Representación de array de una lista ligada 699 16.3 Representación de datos dinámicos de una lista ligada 701 Algoritmos en listas ligadas dinámicas 706 Expresiones con apuntadores 721 Clases y listas ligadas dinámicas 722 16.4 Elección de la representación de datos 723 Operaciones comunes 724 Caso práctico de resolución de problemas: El calendario de citas completo 725 Prueba y depuración 741 Sugerencias para prueba y depuración 741 Resumen 741 Comprobación rápida 742 Respuestas 742 Ejercicios de preparación para examen 742 Ejercicios de calentamiento para programación 743 Problemas de programación 745 Seguimiento de caso práctico 746 DALECont.indd xxivDALECont.indd xxiv 4/12/06 18:41:434/12/06 18:41:43 www.FreeLibros.me
  27. 27. Contenido | xxv 17 Plantillas y excepciones 747 17.1 Plantilla de funciones 748 Sobrecarga de función 748 Definición de una plantilla de función 750 Creación de una plantilla de función 751 Mejora de la plantilla de impresión Print 752 Especializaciones definidas por el usuario 753 Organización de códigos de programa 754 17.2 Plantilla de clase 756 Creación de una plantilla de clase 758 Organización de código de programa 759 Advertencia 762 17.3 Excepciones 763 La sentencia throw 764 La sentencia try-catch 765 Manejadores de excepción no locales 768 Relanzamiento de una excepción 770 Excepciones estándar 770 Regresando al problema de división entre cero 773 Caso práctico de resolución de problemas: Reimplementación de la especificación SortedList y mejora del calendario de citas 774 Prueba y depuración 791 Sugerencias para la prueba y depuración 791 Resumen 792 Comprobación rápida 792 Respuestas 793 Ejercicios de preparación para examen 794 Ejercicios de calentamiento para programación 795 Problemas de programación 796 Seguimiento de caso práctico 797 18 Recursión 799 18.1 ¿Qué es recursión? 800 18.2 Algoritmos recursivos con variables simples 803 18.3 Las torres de Hanoi 805 18.4 Algoritmos recursivos con variables estructuradas 809 18.5 Recursión usando variables apuntador 811 Impresión de una lista ligada dinámica en orden inverso 811 Copiar una lista ligada dinámica 814 18.6 ¿Recursión o iteración? 817 Caso práctico de resolución de problemas: QuickSort 818 Prueba y depuración 824 Sugerencias para la prueba y depuración 824 DALECont.indd xxvDALECont.indd xxv 4/12/06 18:41:444/12/06 18:41:44 www.FreeLibros.me
  28. 28. xxvi | Contenido Resumen 825 Comprobación rápida 825 Respuestas 825 Ejercicios de preparación para examen 825 Ejercicios de calentamiento de programación 827 Problemas de programación 830 Seguimiento de caso práctico 831 Apéndice A Palabras reservadas 833 Apéndice B Precedencia de operador 833 Apéndice C Selección de rutinas de biblioteca estándares 834 C.1 Archivo de encabezado cassert 835 C.2 Archivo de encabezado cctype 835 C.3 Archivo de encabezado cfloat 837 C.4 Archivo de encabezado climits 837 C.5 Archivo de encabezado cmath 837 C.6 Archivo de encabezado cstddef 839 C.7 Archivo de encabezado cstdlib 839 C.8 Archivo de encabezado cstring 840 C.9 Archivo de encabezado string 841 C.10 Archivo de encabezado sstream 842 Apéndice D Uso de este libro con una versión pre-estándar de C++ 842 D.1 El tipo string 842 D.2 Archivos de encabezado estándares y espacios de nombre 843 D.3 Manipuladores fixed y showpoint 844 D.4 El tipo bool 845 Apéndice E Conjuntos de caracteres 846 Apéndice F Estilo de programa, formateo y documentación 848 F.1 Normas generales 848 F.2 Comentarios 849 F.3 Identificadores 851 F.4 Formateo de líneas y expresiones 852 F.5 Sangrado 852 Glosario 855 Respuestas a ejercicios selectos 863 Índice 895 DALECont.indd xxviDALECont.indd xxvi 4/12/06 18:41:454/12/06 18:41:45 www.FreeLibros.me
  29. 29. Objetivos CAPÍTULO 1Repaso de programación y resolución 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 programación de alto nivel. n Conocer los procesos de compilación y ejecución. n Aprender la historia del lenguaje C++. n Saber lo que son los principales componentes de una computadora y cómo funcionan juntos. n Aprender acerca de algunos asuntos éticos básicos que enfrentan los profesionales de la computación. Objetivos de habilidades Ser capaz de: n Listar las etapas básicas 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 método apropiado de resolución de problemas para desarrollar una solución algorítmica a un problema. DALE01.indd 1DALE01.indd 1 4/12/06 18:47:104/12/06 18:47:10 www.FreeLibros.me
  30. 30. 2 | Capítulo 1: Repaso de programación y resolución de problemas Computadora Objeto que calcula; específicamente:dis- positivo electrónico programable que puede almacenar, recuperar y procesar datos. * Con autorización. De Merriam-Webster’s Collegiate Dictionary. Décima edición. © 1994 de Merriam-Webster Inc. 1.1 Repaso de programación En la nota al margen se da la definición de computadora. ¡Qué definición tan breve para algo que, en sólo unas cuantas décadas, ha cambiado la forma de vida de las sociedades industrializadas! Las computadoras tocan todas las áreas de nuestras vidas: pago de facturas, conducción de automóviles, uso del teléfono, ir de compras. De hecho, sería más fácil 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. ¿Cuántas 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 significa que está preparado para hacer a un lado los prejuicios y aprender acerca de las computadoras. Pero se advierte: este libro no sólo trata de computadoras. Es un texto para enseñarle a programar computadoras. ¿Qué es la programación? Mucho del comportamiento y pensamiento humano se caracteriza por secuencias lógicas. Desde la infancia usted ha estado aprendiendo cómo actuar, cómo hacer las cosas. Y ha aprendido a esperar cierto comportamiento de otras personas. Mucho de lo que hace todos los días lo hace de manera automática. Por fortuna no es necesario que piense conscientemente que todo paso requerido en un proceso tan simple como dar vuelta a la página: 1. Levantar la mano. 2. Mover la mano a la derecha del libro. 3. Asir la esquina derecha de la página. 4. Mover la mano de derecha a izquierda hasta que la página esté colocada de modo que pueda leer lo que está sobre la otra página. 5. Soltar la página. Piense en cuántas neuronas debe encender y cuántos músculos 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 cómo un bebé se concentra en poner un pie antes que el otro mientras aprende a caminar. Luego, observe a un grupo de niños de tres años que juegan a la roña. En una escala más amplia, las matemáticas nunca se podrían haber desarrollado sin secuencias lógicas de pasos para resolver problemas y demostrar teoremas. La producción en masa nunca habría funcionado sin operaciones que tienen lugar en cierto orden. La civilización 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 programación. Este libro tiene que ver con la programación de una de las herramientas, la computadora. Del mismo modo que un programa de concierto lista el orden en que los músicos 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 programación y programa, se entenderá programación en computadora y programa de computadora. La computadora permite hacer las tareas con más eficiencia, rapidez y exactitud de como se podrían hacer a mano, si acaso se Programación Planear o calendarizar el desempeño 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. Programación en computadora Proceso de planificar 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
  31. 31. pudieran hacer a mano. A fin de usar esta poderosa herramienta, se debe especificar lo que se desea hacer y el orden en que se desea hacerlo. Esto es posible por medio de la programación. ¿Cómo se escribe un programa? Una computadora no es inteligente. No es capaz de analizar un problema y proponer una solución. Un humano (el programador) debe analizar el problema, desarrollar una secuencia de instrucciones para resolver el problema y luego comunicarlo a la computadora. ¿Cuál es la ventaja de usar una computadora si no puede resolver problemas? Una vez que se ha escrito la solución como una se- cuencia de instrucciones para la computadora, ésta puede repetir la solución de manera muy rápida 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 bifásico: resolución de problema e implementación (véase la figura 1-1). Fase de resolución del problema 1. Análisis y especificación. Entender (definir) el problema y lo que debe hacer la solución. 2. Solución general (algoritmo). Desarrollar una secuencia lógica de pasos que resuelve el pro- blema. 3. Verificar. Seguir los pasos exactamente para ver si la solución resuelve en realidad el pro- blema. Fase de implementación 1. Solución concreta (programa). Traducir el algoritmo en un lenguaje de programación. 2. Prueba. Ver que la computadora siga las instrucciones. Después, 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. Modifique el programa para satisfacer requisitos de cambio o corregir cual- quier error que aparezca al usarlo. Figura 1-1 Proceso de programación FASE DE RESOLUCIÓN DEL PROBLEMA FASE DE IMPLEMENTACIÓN Análisis y especificación Solución general (algoritmo) Solución concreta (programa) Prueba Fase de mantenimiento Verificar 1.1 Repaso de programación | 3 DALE01.indd 3DALE01.indd 3 4/12/06 18:47:244/12/06 18:47:24 www.FreeLibros.me
  32. 32. 4 | Capítulo 1: Repaso de programación y resolución de problemas El programador comienza el proceso de programación al analizar el problema y desarrollar una solución general llamada algoritmo. Entender y analizar un problema toma más tiempo del que implica la figura 1-1. Son el corazón del proceso de pro- gramación. Si las definiciones 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 descripción verbal o escrita de una secuencia lógica de acciones. Se usan algoritmos todos los días. Recetas, instrucciones e indicaciones son ejemplos de algoritmos que no son programas. Cuando enciende su automóvil, sigue un procedimiento paso a paso. El algoritmo podría parecer algo como esto: 1. Inserte la llave. 2. Asegúrese de que la transmisión esté en estacionar (o neutral). 3. Presione el pedal del acelerador. 4. Dé vuelta a la llave a la posición de encendido. 5. Si el motor enciende en seis segundos, libere la llave a la posición 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 más de cinco veces. 7. Si el automóvil no arranca, llame al taller mecánico. Sin la frase “pero no más de cinco veces” en el paso 6, se podría estar intentando encender el auto- móvil por siempre. ¿Por qué? Debido a que si algo anda mal con el automóvil, repetir los pasos 3 al 6 una y otra vez no hará que encienda. Este tipo de situación de nunca acabar se llama ciclo infinito. Si se deja la frase “pero no más de cinco veces” fuera del paso 6, el procedimiento no se ajusta a la definición de un algoritmo. Un algoritmo debe terminar en una cantidad finita de tiempo para todas las condiciones posibles. Suponga que un programador necesita un algoritmo para determinar el salario semanal de un empleado. El algoritmo refleja lo que se haría a mano: 1. Buscar la tasa de pago del empleado. 2. Determinar la cantidad de horas trabajadas durante la semana. 3. Si el número de horas trabajadas es menor o igual que 40, multiplique el número de horas por la tasa de pago para calcular salarios regulares. 4. Si el número 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 número 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 usaría para hacer los cálculos a mano. Después de desarrollar una solución 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 sólo una variación del primero. Cuando el programador está satisfecho con el Algoritmo Procedimiento paso a paso para resolver un problema en una cantidad de tiempo finita. DALE01.indd 4DALE01.indd 4 4/12/06 18:47:254/12/06 18:47:25 www.FreeLibros.me
  33. 33. algoritmo, lo traduce en un lenguaje de programación. En este libro se usa el lenguaje de programación C++. Un lenguaje de programación es una forma sim- plificada del inglés (con símbolos matemáticos) que se adhiere a un conjunto estricto de reglas gramaticales. El inglés es un lenguaje demasiado complicado para que lo sigan las computadoras actuales. Los lengua- jes de programación, debido a que limitan el vocabulario y la gramática, son mucho más simples. Aunque un lenguaje de programación es simple en forma, no siempre es fácil usarlo. Intente dar a alguien instrucciones para llegar al aeropuerto más cercano con un vocabulario de no más de 45 palabras y comenzará a ver el problema. La programación lo obliga a escribir instrucciones exactas muy simples. Traducir un algoritmo en un lenguaje de programación se llama codificar el algoritmo. El pro- ducto de esa traducción, el programa, se prueba ejecutándolo en la computadora. Si el programa no produce los resultados deseados, el programador debe depurarlo; es decir, determinar qué está mal y luego modificar el programa, o incluso el algoritmo, para arreglarlo. La combinación de codificar y probar un algoritmo se llama implementación. No hay una forma simple de implementar un algoritmo. Por ejemplo, un algoritmo se puede traducir en más de un lenguaje de programación. Cada traducción produce una implementación di- ferente. Incluso cuando dos personas traducen un algoritmo en el mismo lenguaje de programación, es probable que propongan implementaciones distintas (véase la figura 1-2). ¿Por qué? Porque todo Lenguaje de programación Conjunto de reglas,símbolos y palabras especiales usado para implementar un programa de computadora. Figura 1-2 Diferencias en la implementación 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 programación | 5 DALE01.indd 5DALE01.indd 5 4/12/06 18:47:274/12/06 18:47:27 www.FreeLibros.me
  34. 34. 6 | Capítulo 1: Repaso de programación y resolución de problemas lenguaje de programación permite al programador cierta flexibilidad en cómo se traduce un algorit- mo. Dada esta flexibilidad, 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 programación, desarrolla un estilo propio. En todo el libro se ofrecen consejos prácticos acerca del buen estilo de programación. Algunas personas intentan acelerar el proceso de programación al ir directamente de la defini- ción del problema a la codificación del programa (véase la figura 1-3). Un atajo aquí es muy tentador y en principio parece ahorrar mucho tiempo. Sin embargo, por muchas razones que se irán hacien- do obvias a medida que lea este libro, esta clase de atajo toma en realidad más tiempo y esfuerzo. Desarrollar una solución 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 depuración y revisión de su programa. Así que ¡piense primero y codifi- que después! Mientras más pronto empiece a codificar, más tiempo le llevará elaborar un programa que funcione. Una vez que un programa se ha puesto en uso, a menudo es necesario modificarlo. La modifica- ción 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 modifica el programa, es nece- sario repetir las fases de resolución del problema e implementación para los aspectos del programa que cambian. Esta fase del proceso de programación se conoce como mantenimiento y explica la mayor parte del esfuerzo empleado en la mayoría de los programas. Por ejemplo, un programa que se implementa en unos cuantos meses podría requerir que sea mantenido en un periodo de muchos años. Así, es una inversión económica de tiempo desarrollar la solución del problema inicial y la implementación del programa de manera cuidadosa. Juntas, las fases de resolución del problema, implementación y mantenimiento constituyen el ciclo de vida del programa. Además de resolver el problema, ejecutar el algoritmo y man- tener el programa, la documentación es una parte importante del pro- ceso de programación. La documentación incluye explicaciones escritas del problema que se está resolviendo y la organización de la solución, comentarios insertados dentro del programa mis- mo y manuales del usuario que describen cómo 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 código. Después de escribir un programa, se debe dar a la computadora la información o datos necesarios para resolver el problema. La información es cualquier conocimiento que puede ser comunicado, incluso ideas y conceptos abstractos como “la Tierra es redonda”. Los datos son la información en una forma que la computadora puede usar; por ejemplo, los números y letras constituyen las fórmulas que rela- cionan el radio de la Tierra con su volumen y área superficial. Pero los datos no están restringidos a Documentación Texto y comentarios que facilitan a otros la comprensión,uso y modificación de un programa. Información Cualquier conocimiento que puede ser comunicado. Datos Información en forma que una computadora puede usar. Figura 1-3 ¿Atajo de programación? Problema ¿Atajo? FASE DE RESOLUCIÓN DEL PROBLEMA Algoritmo FASE DE IMPLEMENTACIÓN Programa DALE01.indd 6DALE01.indd 6 4/12/06 18:47:294/12/06 18:47:29 www.FreeLibros.me
  35. 35. números y letras. En la actualidad, las computadoras también procesan datos que representan sonido (que se reproducirá en las bocinas), imágenes gráficas (que se mostrarán en una pantalla de compu- tadora o impresora), video (que se verá en un reproductor de DVD), etcétera. 1.1 Repaso de programación | 7 Bases teóricas Representaciónbinariadedatos En una computadora, los datos son representados electrónicamente por medio de pulsos de electricidad. Los circuitos eléctricos, en su forma más simple, están encendidos o apagados. Por lo común, un circuito en- cendido se representa por el número 1; un circuito apagado se representa por el número 0. Cualquier clase de datos se puede representar mediante combinaciones de“unos”y“ceros”suficientes. Sólo se tiene que elegir la combinación que representa cada conjunto de datos que se está usando. Por ejemplo, se podría elegir de manera arbitraria el patrón 1101000110 para representar el nombre C++. Los datos representados por“unos”y“ceros”están en forma binaria. El sistema de números binarios (base 2) utiliza sólo“unos”y“ceros”para representar números. (El sistema de números decimales [base 10] emplea los dígitos 0 al 9.) La palabra bit (abreviatura para binary digit) se emplea con frecuencia para referirse a un solo 1 o 0. Así, el patrón 1101000110 tiene 10 bits. Un número 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 carácter (como la letra A, la letra g o un signo de interrogación) 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 terminología estándar—. Los grupos de 16, 32 y 64 bits se llaman por lo general palabras (aunque a veces se emplean los términos 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 codificación; se da el mismo nom- bre al proceso de traducir un algoritmo en un lenguaje de programación. Los nombres son los mismos porque el único lenguaje que reconocían las primeras computadoras era de forma binaria. Así, en los prime- ros días de las computadoras, programación significaba traducir datos y algoritmos en patrones de“unos”y “ceros”. Los esquemas de codificación binarios aún 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 también por combinaciones de bits. En un esquema de codificación, 01001101 representa a M y 01101101 representa a m. Para representar números negativos, números reales, números en notación científica, sonido, gráficas y video son necesarios esquemas de codificación más complicados. En el capítulo 10 se examina en detalle la representación de números y caracteres en la computadora. Los patrones de bits que representan datos varían de una computadora a otra. Incluso en la misma computadora, lenguajes de programación diferentes pueden usar representaciones binarias distintas para los mismos datos. Un solo lenguaje de programación puede incluso usar el mismo patrón de bits para re- presentar diversas cosas en contextos distintos. (Las personas hacen esto también. La palabra formada por las cuatro letras tack [en idioma inglés] tiene diferentes significados dependiendo de si habla acerca de tapi- cería, navegación, coser a máquina, pintura o montar a caballo.) La cuestión es que los patrones de bits por sí mismos carecen de significado. La manera en que se emplean los patrones es lo que les da su significado. Por fortuna, ya no es necesario trabajar con esquemas de codificación binarios. Hoy día el proceso de codificar es normalmente sólo un asunto de escribir los datos con letras, números y símbolos. La compu- tadora convierte de modo automático estas letras, números y símbolos a la forma binaria. Sin embargo, cuando trabaje con computadoras, se encontrará continuamente con números relacionados con potencias de 2 —números como 256, 32 768 y 65 536—, recordatorios de que el sistema de números binarios acecha en algún lugar cercano. DALE01.indd 7DALE01.indd 7 4/12/06 18:47:314/12/06 18:47:31 www.FreeLibros.me
  36. 36. 8 | Capítulo 1: Repaso de programación y resolución de problemas 1.2 ¿Qué es un lenguaje de programación? En la computadora, los datos —cualquiera que sea su forma— se almacenan y emplean en códigos binarios, cadenas de “unos” y “ceros”. Las instrucciones y datos se almacenan en la memoria de la computadora por medio de estos códigos binarios. Si usted examinara los códigos binarios que repre- sentan instrucciones y datos en la memoria, no podría indicar la diferencia entre ellos; se distinguen sólo 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 programación disponible era la instrucción primitiva integrada en cada máquina, el lenguaje de máquina o código de má- quina. Aun cuando la mayoría de las computadoras realizan la mis- ma clase de operaciones, sus diseñadores eligen diferentes conjun- tos de códigos binarios para cada instrucción. Por tanto, el código de máquina para una computadora no es el mismo que para otra. Cuando los programadores usaron el lenguaje de máquina para programar, tuvieron que introducir códigos binarios para las distintas instrucciones, un proceso tedioso propenso a error. Además, sus programas eran difíciles de leer y modificar. Con el tiempo, se desarrollaron los lenguajes ensambladores para facilitar el trabajo del programador. Las instrucciones en un lenguaje ensamblador están en una forma fácil de recordar llamada ne- motécnica. Las instrucciones características para la suma y la resta podrían parecerse a esto: Lenguaje ensamblador Lenguaje de máquina ADD 100101 SUB 010011 Aunque el lenguaje ensamblador es más fácil 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 computación 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 código de máquina. Esta clase de programa se llama ensamblador. El lenguaje ensamblador es un paso en la dirección correcta, pero aún obliga a los programadores a pensar en términos de ins- trucciones de máquina individuales. Finalmente, los científicos de la computación desarrollaron lenguajes de programación de alto nivel. Estos lenguajes son más fáciles de usar que los lenguajes ensambladores o código de máquina porque se aproximan más al idioma inglés y a otros lenguajes naturales (véase la figura 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 máquina. 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 mayoría de los lenguajes de alto nivel están estandarizados, lo que significa que existe una descripción oficial del lenguaje. Un programa en un lenguaje de alto nivel se llama programafuente. Para el compilador, un progra- ma fuente son sólo datos de entrada. Traduce el programa en un programa en lenguaje de máquina llamado programaobjeto (véase la figura 1-5). Algunos compiladores producen también un listado (una copia del programa con mensajes de error y otra información insertada). Un beneficio de los lenguajes de alto nivel estandarizados es que permiten escribir en código portable (o independiente de la máquina). Según se destaca en la figura 1-5, un programa escrito en lenguaje ensamblador o lenguaje de máquina no es transportable de una computadora a otra. Debido Ensamblador Programa que traduce lenguaje ensambla- dor en código de máquina. Compilador Programa que traduce lenguaje de alto nivel en código de máquina. Programa fuente Programa escrito en lenguaje de pro- gramación de alto nivel. Programa objeto Versión del lenguaje de máquina de un programa fuente. Lenguaje de máquina Lenguaje conformado por ins- trucciones en código binario,usado directamente por la computadora. Lenguaje ensamblador Lenguaje de programación de bajo nivel en el que se emplea una ayuda nemotécnica para representar cada una de las instruccio