2. CUARTA EDICIN CMO PROGRAMAR EN C/C++ y Java Harvey M. Deitel
Deitel & Associates, Inc. Paul J. Deitel Deitel &
Associates, Inc. TRADUCCIN Jorge Octavio Garca Prez Ingeniero en
Computacin Universidad Nacional Autnoma de Mxico REVISIN TCNICA
Arturo del ngel Ramrez Jefe de Departamento de la Divisin de
Sistemas Facultad de Ingeniera Mecnica y Elctrica Universidad
Autnoma de Nuevo Len M. en C. Gabriela Azucena Campos Garca
Profesora de tiempo completo Departamento de Sistemas de
Informacin, Divisin de Profesional y Graduados Instituto Tecnolgico
y de Estudios Superiores de Monterrey Campus Estado de Mxico M. en
C. Sergio Fuenlabrada Velzquez Ing. Mario Alberto Sesma Martnez
Ing. Mario Oviedo Galdeano Ing. Juan Alberto Segundo Miranda
Profesores Investigadores Academia de ComputacinUnidad Profesional
Interdisciplinaria de Ingeniera, Ciencias Sociales y
Administrativas Instituto Politcnico Nacional
3. 2004Authorized translation from the English language
edition, entitled C How to Program, Fourth Edition, by Harvey M.
Deitel and Paul J.Deitel, published by Pearson Education, Inc.,
publishing as PRENTICE-HALL, INC., Copyright 2004. All rights
reserved.ISBN 0-13-142644-3Traduccin autorizada de la edicin en
idioma ingls, titulada C How to Program, Fourth Edition, por Harvey
M. Deitel y Paul J. Deitel,publicada por Pearson Education, Inc.,
publicada como PRENTICE-HALL INC., Copyright 2004. Todos los
derechos reservados.Esta edicin en espaol es la nica
autorizada.Edicin en espaol:Editor: Guillermo Trujano Mendoza
e-mail: [email protected] de desarrollo: Miguel
B. Gutirrez HernndezSupervisor de produccin: Enrique Trejo
HernndezEdicin en ingls:Vice President and Editorial Director:
Marcia J. HortonSenior Acquisitions Editor: Kate HargettAssistant
Editor: Sarah ParkerEditorial Assistant: Michael GiacobbeVice
President and Director of Production and Manufacturing, ESM: David
W. RiccardiExecutive Managing Editor: Vince OBrienManaging Editor:
Tom ManshreckProduction Editor: Chirag ThakkarProduction Editor,
Media: Bob EngelhardtDirector of Creative Services: Paul
BelfantiCreative Director: Carole AnsonArt Director: Geoff
CassarChapter Opener and Cover Designer: Dr. Harvey Deitel and
David MerrellManufacturing Manager: Trudy PisciottiManufacturing
Buyer: Lisa McDowellMarketing Manager: Pamela ShafferCUARTA EDICIN,
2004D.R. 2004 por Pearson Educacin de Mxico, S.A. de C.V.
Atlacomulco 500-5o. piso Col. Industrial Atoto 53519, Naucalpan de
Jurez, Edo. de Mxico e-mail:
[email protected] Nacional de la Industria
Editorial Mexicana.Reg. Nm. 1031.Prentice Hall es una marca
registrada de Pearson Educacin de Mxico, S.A. de C.V.Reservados
todos los derechos. Ni la totalidad ni parte de esta publicacin
pueden reproducirse, registrarse o transmitirse, por un sistemade
recuperacin de informacin, en ninguna forma ni por ningn medio, sea
electrnico, mecnico, fotoqumico, magntico o electropti-co, por
fotocopia, grabacin o cualquier otro, sin permiso previo por
escrito del editor. El prstamo, alquiler o cualquier otra forma de
cesin de uso de este ejemplar requerir tambin la auto- rizacin del
editor o de sus representantes. ISBN 970-26-0531-8 Impreso en
Mxico. Printed in Mexico. 1 2 3 4 5 6 7 8 9 0 - 07 06 05 04
4. A Marcia Horton, Directora Editorial de Ingeniera y Ciencias
de la Computacin en Prentice Hall: Ha sido un privilegio y un
placer elaborar el programa de publicaciones de Deitel contigo a lo
largo de los ltimos 18 aos. Gracias por ser nuestra mentora y
nuestra amiga. Harvey y Paul Deitel
5. Contenido Prefacio xvii1 Introduccin a las computadoras, a
Internet y a la World Wide Web 11.1 Introduccin 21.2 Qu es una
computadora? 31.3 Organizacin de computadoras 41.4 Evolucin de los
sistemas operativos 51.5 Computacin personal, distribuida y
cliente-servidor 51.6 Lenguajes mquina, lenguajes ensambladores y
lenguajes de alto nivel 61.7 FORTRAN, COBOL, Pascal y Ada 71.8
Historia de C 71.9 La biblioteca estndar de C 81.10 C++ 91.11 Java
91.12 BASIC, Visual Basic, Visual C++, C# y .NET 101.13 La
tendencia clave del software: Tecnologa de objetos 101.14 Conceptos
bsicos de un ambiente tpico de programacin en C 111.15 Tendencias
de hardware 131.16 Historia de Internet 141.17 Historia de la World
Wide Web 151.18 Notas generales acerca de C y de este libro 152
Introduccin a la programacin en C 232.1 Introduccin 242.2 Un
programa sencillo en C: Impresin de una lnea de texto 242.3 Otro
programa sencillo en C: Suma de dos enteros 272.4 Conceptos de
memoria 312.5 Aritmtica en C 322.6 Toma de decisiones: Operadores
de igualdad y de relacin 353 Desarrollo de programas estructurados
en C 493.1 Introduccin 503.2 Algoritmos 50
6. viii Contenido3.3 Pseudocdigo 513.4 Estructuras de control
513.5 La instruccin de seleccin if 533.6 La instruccin de seleccin
if...else 543.7 La instruccin de repeticin while 573.8 Formulacin
de algoritmos: Ejemplo prctico 1 (repeticin controlada por
contador) 583.9 Formulacin de algoritmos mediante mejoramiento
arriba-abajo, paso a paso: 60 Ejemplo prctico 2 (repeticin
controlada por centinela)3.10 Formulacin de algoritmos mediante
mejoramiento arriba-abajo, paso a paso: 66 Ejemplo prctico 3
(estructuras de control anidadas)3.11 Operadores de asignacin
703.12 Operadores de incremento y decremento 704 Control de
programas en C 894.1 Introduccin 904.2 Fundamentos de la repeticin
904.3 Repeticin controlada por contador 914.4 Instruccin de
repeticin for 924.5 Instruccin for: Notas y observaciones 944.6
Ejemplos de la utilizacin de la instruccin for 954.7 Instruccin de
seleccin mltiple, switch 984.8 Instruccin de repeticin dowhile
1044.9 Instrucciones break y continue 1054.10 Operadores lgicos
1074.11 La confusin entre los operadores de igualdad (==) y los de
asignacin (=) 1094.12 Resumen sobre programacin estructurada 1115
Funciones en C 1275.1 Introduccin 1285.2 Mdulos de programa en C
1285.3 Funciones matemticas de la biblioteca 1295.4 Funciones
1305.5 Definicin de funciones 1315.6 Prototipos de funciones 1355.7
Encabezados 1375.8 Llamada a funciones: Llamada por valor y llamada
por referencia 1385.9 Generacin de nmeros aleatorios 1385.10
Ejemplo: Un juego de azar 1435.11 Clases de almacenamiento 1465.12
Reglas de alcance 1485.13 Recursividad 1515.14 Ejemplo sobre cmo
utilizar la recursividad: Serie de Fibonacci 1545.15 Recursividad
versus iteracin 1576 Arreglos en C 1776.1 Introduccin 1786.2
Arreglos 1786.3 Declaracin de arreglos 1796.4 Ejemplos de arreglos
1806.5 Cmo pasar arreglos a funciones 1936.6 Ordenamiento de
arreglos 1976.7 Ejemplo prctico: Clculo de la media, la mediana y
la moda a travs de arreglos 199
7. Contenido ix6.8 Bsqueda en arreglos 2036.9 Arreglos con
mltiples subndices 2097 Apuntadores en C 2337.1 Introduccin 2347.2
Definicin e inicializacin de variables de apuntador 2347.3
Operadores para apuntadores 2357.4 Llamada a funciones por
referencia 2377.5 Uso del calificador const con apuntadores 2417.6
Ordenamiento de burbuja mediante llamadas por referencia 2477.7 El
operador sizeof 2507.8 Expresiones con apuntadores y aritmtica de
apuntadores 2527.9 Relacin entre apuntadores y arreglos 2547.10
Arreglos de apuntadores 2587.11 Ejemplo prctico: Simulacin para
barajar y repartir cartas 2597.12 Apuntadores a funciones 2638
Caracteres y cadenas en C 2878.1 Introduccin 2888.2 Fundamentos de
cadenas y caracteres 2888.3 La biblioteca de manipulacin de
caracteres 2908.4 Funciones de conversin de cadenas 2958.5
Funciones de entrada/salida de la biblioteca estndar 2998.6
Funciones de manipulacin de cadenas de la biblioteca de manipulacin
de cadenas 3038.7 Funciones de comparacin de la biblioteca de
manipulacin de cadenas 3058.8 Funciones de bsqueda de la biblioteca
de manipulacin de cadenas 3078.9 Funciones de memoria de la
biblioteca de manipulacin de cadenas 3138.10 Otras funciones de la
biblioteca de manipulacin de cadenas 3169 Entrada/Salida con
formato en C 3299.1 Introduccin 3309.2 Flujos 3309.3 Formato de
salida con printf 3309.4 Impresin de enteros 3319.5 Impresin de
nmeros de punto flotante 3329.6 Impresin de cadenas y caracteres
3349.7 Otros especificadores de conversin 3359.8 Impresin con ancho
de campos y precisiones 3369.9 Uso de banderas en la cadena de
control de formato de printf 3389.10 Impresin de literales y
secuencias de escape 3419.11 Formato de entrada con scanf 34210
Estructuras, uniones, manipulaciones de bits y enumeraciones en C
35510.1 Introduccin 35610.2 Definicin de estructuras 35610.3
Inicializacin de estructuras 35810.4 Acceso a miembros de
estructuras 35910.5 Uso de estructuras con funciones 36010.6
typedef 361
8. x Contenido10.7 Ejemplo: Simulacin de alto rendimiento para
barajar y repartir cartas 36110.8 Uniones 36410.9 Operadores a
nivel de bits 36610.10 Campos de bits 37410.11 Constantes de
enumeracin 37711 Procesamiento de archivos en C 38711.1 Introduccin
38811.2 Jerarqua de datos 38811.3 Archivos y flujos 39011.4 Creacin
de un archivo de acceso secuencial 39011.5 Lectura de datos desde
un archivo de acceso secuencial 39511.6 Archivos de acceso
aleatorio 40011.7 Creacin de un archivo de acceso aleatorio 40011.8
Escritura aleatoria de datos en un archivo de acceso aleatorio
40211.9 Lectura de datos desde un archivo de acceso aleatorio
40511.10 Ejemplo prctico: Programa de procesamiento de
transacciones 40612 Estructuras de datos en C 42112.1 Introduccin
42212.2 Estructuras autorreferenciadas 42312.3 Asignacin dinmica de
memoria 42312.4 Listas ligadas 42412.5 Pilas 43212.6 Colas 43712.7
rboles 44313 El preprocesador de C 47113.1 Introduccin 47213.2 La
directiva de preprocesador #include 47213.3 La directiva de
preprocesador #define: Constantes simblicas 47213.4 La directiva de
preprocesador #define: Macros 47313.5 Compilacin condicional
47413.6 Las directivas de preprocesador #error y #pragma 47513.7
Los operadores # y ## 47613.8 Nmeros de lnea 47613.9 Constantes
simblicas predefinidas 47613.10 Afirmaciones 47714 Otros temas de C
48114.1 Introduccin 48214.2 Cmo redireccionar la entrada/salida en
sistemas UNIX y Windows 48214.3 Listas de argumentos de longitud
variable 48314.4 Uso de argumentos en la lnea de comandos 48514.5
Notas sobre la compilacin de programas con mltiples archivos fuente
48614.6 Terminacin de un programa mediante exit y atexit 48814.7 El
calificador de tipo volatile 48914.8 Sufijos para las constantes
enteras y de punto flotante 48914.9 Ms acerca de los archivos
49014.10 Manipulacin de seales 49214.11 Asignacin dinmica de
memoria: Las funciones calloc y realloc 49414.12 Saltos
incondicionales con goto 494
9. Contenido xi15 C++ como un Mejor C 50115.1 Introduccin
50215.2 C++ 50215.3 Un programa sencillo: Suma de dos enteros
50315.4 Biblioteca estndar de C++ 50515.5 Archivos de encabezados
50515.6 Funciones inline 50715.7 Referencias y parmetros de
referencias 50915.8 Argumentos predeterminados y listas de
parmetros vacas 51215.9 Operador unario de resolucin de alcance
51415.10 Sobrecarga de funciones 51615.11 Plantillas de funciones
51716 Clases y abstraccin de datos en C++ 52516.1 Introduccin
52616.2 Implementacin del tipo de dato abstracto Hora mediante una
clase 52716.3 Alcance de una clase y acceso a los miembros de una
clase 53216.4 Separacin de la interfaz y la implementacin 53416.5
Control de acceso a miembros 53716.6 Funciones de acceso y
funciones de utilidad 54016.7 Inicializacin de los objetos de una
clase: Constructores 54316.8 Uso de argumentos predeterminados con
constructores 54316.9 Uso de destructores 54716.10 Invocacin de
constructores y destructores 54716.11 Uso de datos miembro y
funciones miembro 55016.12 Una trampa sutil: Retorno de una
referencia a un dato miembro privado 55516.13 Asignacin mediante la
copia predeterminada de miembros 55716.14 Reutilizacin de software
55817 Clases en C++: Parte II 56717.1 Introduccin 56817.2 Objetos y
funciones miembro const (constantes) 56817.3 Composicin: Objetos
como miembros de clases 57517.4 Funciones y clases friend (amigas)
58017.5 Uso del apuntador this 58317.6 Asignacin dinmica de memoria
mediante los operadores new y delete 58817.7 Clases miembro static
(estticas) 58917.8 Abstraccin de datos y ocultamiento de informacin
594 17.8.1 Ejemplo: Un tipo de dato abstracto Arreglo 595 17.8.2
Ejemplo: Un tipo de dato abstracto Cadena 595 17.8.3 Ejemplo: Un
tipo de dato abstracto Cola 59617.9 Clases contenedoras e
iteradores 59618 Sobrecarga de operadores en C++ 60318.1
Introduccin 60418.2 Fundamentos de la sobrecarga de operadores
60418.3 Restricciones de la sobrecarga de los operadores 60618.4
Funciones de operadores como miembros de una clase miembro versus
funciones 607 de operadores como funciones amigas (friend)18.5
Sobrecarga de los operadores de insercin y de extraccin de flujo
60818.6 Sobrecarga de operadores unarios 61118.7 Sobrecarga de
operadores binarios 611
10. xii Contenido18.8 Ejemplo prctico: Una clase Arreglo
61218.9 Conversin entre tipos 62218.10 Sobrecarga de ++ y -- 62319
Herencia en C++ 63119.1 Introduccin 63219.2 Herencia: Clases base y
clases derivadas 63319.3 Miembros protected 63519.4 Conversin de
apuntadores de clases base en apuntadores de clases derivadas
63519.5 Uso de funciones miembro 64119.6 Cmo redefinir los miembros
de una clase base en una clase derivada 64119.7 Herencia pblica,
protegida y privada 64519.8 Clases base directas e indirectas
64619.9 Uso de constructores y destructores en clases derivadas
64619.10 Conversin de objetos de clases derivadas a objetos de
clases base 65019.11 Ingeniera de software con herencia 65019.12
Composicin versus herencia 65219.13 Relaciones usa un y conoce un
65219.14 Ejemplo prctico: Punto, Circulo y Cilindro 65220 Funciones
virtuales y polimorfismo en C++ 66520.1 Introduccin 66620.2 Tipos
de campos e instrucciones switch 66620.3 Funciones virtuales
66620.4 Clases base abstractas y clases concretas 66720.5
Polimorfismo 66820.6 Nuevas clases y vinculacin dinmica 67020.7
Destructores virtuales 67020.8 Ejemplo prctico: Herencia de
interfaz y de implementacin 67120.9 Polimorfismo, funciones
virtuales y vinculacin dinmica tras bambalinas 67821 Entrada/salida
de flujo en C++ 68521.1 Introduccin 68721.2 Flujos 687 21.2.1
Archivos de encabezado de la biblioteca iostream 688 21.2.2 Clases
y objetos para la entrada/salida de flujo 68821.3 Salida de flujo
689 21.3.1 Operador de insercin de flujo 689 21.3.2 Operadores para
la insercin/extraccin de flujo en cascada 691 21.3.3 Salida de
variables char * 692 21.3.4 Salida de caracteres por medio de la
funcin miembro put; 693 funciones put en cascada21.4 Entrada de
flujo 693 21.4.1 Operador de extraccin de flujo 693 21.4.2
Funciones miembro get y getline 696 21.4.3 Funciones miembro de
istream: peek, putback e ignore 698 21.4.4 E/S con seguridad de
tipos 69821.5 E/S sin formato por medio de read, gcount y write
69821.6 Manipuladores de flujo 699 21.6.1 Base de un flujo de
enteros: dec, oct, hex, y setbase 699 21.6.2 Precisin de punto
flotante (precision, setprecision) 700 21.6.3 Ancho de campo (setw,
width) 701
11. Contenido xiii 21.6.4 Manipuladores definidos por el
usuario 70321.7 Estados de formato de flujo 704 21.7.1 Banderas de
estado de formato 704 21.7.2 Ceros a la derecha y puntos decimales
(ios::showpoint) 705 21.7.3 Justificacin (ios::left, ios::right,
ios::internal) 706 21.7.4 Relleno (fill, setfill) 708 21.7.5 Base
de un flujo de enteros (ios::dec, ios::oct, ios::hex,
ios::showbase) 709 21.7.6 Nmeros de punto flotante; notacin
cientfica (ios::scientific, ios::fixed) 710 21.7.7 Control de
maysculas/minsculas (ios::uppercase) 711 21.7.8 Cmo establecer y
restablecer las banderas de formato (flags, setiosflags,
resetiosflags) 71221.8 Estados de error de flujo 71321.9 Unin de un
flujo de salida con un flujo de entrada 71522 Plantillas en C++
72722.1 Introduccin 72822.2 Plantillas de clases 72822.3 Plantillas
de clases y parmetros sin tipo 73222.4 Plantillas y herencia
73422.5 Plantillas y amigas 73422.6 Plantillas y miembros estticos
73523 Manejo de excepciones en C++ 73923.1 Introduccin 74023.2
Cundo debe utilizarse el manejo de excepciones 74223.3 Otras
tcnicas de manejo de errores 74223.4 Fundamentos del manejo de
excepciones en C++: try, throw y catch 74323.5 Un ejemplo sencillo
de manejo de excepciones: La divisin entre cero 74423.6 Cmo arrojar
una excepcin 74623.7 Cmo atrapar una excepcin 74723.8 Cmo relanzar
una excepcin 75023.9 Especificaciones de las excepciones 75123.10
Cmo procesar excepciones inesperadas 75223.11 Cmo desenrollar una
pila 75223.12 Constructores, destructores y manejo de excepciones
75323.13 Excepciones y herencia 75423.14 Cmo procesar fallas de new
75423.15 La clase auto_ptr y la asignacin dinmica de memoria
75823.16 Jerarqua de la biblioteca estndar de excepciones 76024
Introduccin a las aplicaciones y a los applets de Java 76924.1
Introduccin 77024.2 Fundamentos de un entorno tpico de Java 77124.3
Notas generales acerca de Java y de este libro 77324.4 Un programa
sencillo: Impresin de una lnea de texto 77524.5 Otra aplicacin en
Java: Suma de enteros 78124.6 Applets de ejemplo del Java 2
Software Development Kit 786 24.6.1 El applet Tictactoe 786 24.6.2
El applet Drawtest 788 24.6.3 El applet Java2D 789
12. xiv Contenido24.7 Un applet sencillo en Java: Cmo dibujar
una cadena 79124.8 Dos ejemplos ms de applets: Cmo dibujar cadenas
y lneas 79724.9 Otro applet de Java: Suma de enteros 79825 Ms all
de C y C++: Operadores, mtodos y arreglos en Java 81525.1
Introduccin 81625.2 Tipos de datos primitivos y palabras reservadas
81625.3 Operadores lgicos 81725.4 Definiciones de mtodos 82225.5
Paquetes de la API de Java 82625.6 Generacin de nmeros aleatorios
83025.7 Ejemplo: Un juego de azar 83325.8 Mtodos de la clase
JApplet 84025.9 Declaracin y asignacin de arreglos 84125.10
Ejemplos del uso de arreglos 84225.11 Referencias y parmetros de
referencias 85125.12 Arreglos con mltiples subndices 85226
Programacin orientada a objetos con Java 86526.1 Introduccin
86626.2 Implementacin del tipo de dato abstracto Hora con una clase
86726.3 Alcance de una clase 87426.4 Creacin de paquetes 87426.5
Inicializacin de los objetos de una clase: Constructores 87726.6
Uso de los mtodos obtener y establecer 87826.7 Uso de la referencia
this 88426.8 Finalizadores 88626.9 Miembros estticos de una clase
88627 Programacin orientada a objetos en Java 89927.1 Introduccin
90027.2 Superclases y subclases 90227.3 Miembros protected 90327.4
Relacin entre objetos de superclases y objetos de subclases 90427.5
Conversin implcita de un objeto de una subclase en un objeto de una
superclase 91027.6 Ingeniera de software con herencia 91127.7
Composicin versus herencia 91127.8 Introduccin al polimorfismo
91227.9 Campos de tipo e instrucciones switch 91227.10 Mtodo de
vinculacin dinmica 91227.11 Mtodos y clases final 91327.12
Superclases abstractas y clases concretas 91327.13 Ejemplo de
polimorfismo 91427.14 Nuevas clases y vinculacin dinmica 91527.15
Ejemplo prctico: Herencia de interfaz y de implementacin 91627.16
Ejemplo prctico: Creacin y uso de interfaces 92127.17 Definiciones
de clases internas 92627.18 Notas sobre las definiciones de clases
internas 93627.19 Clases envolventes para tipos primitivos 936
13. Contenido xv28 Grficos en Java y Java2D 94528.1 Introduccin
94628.2 Contextos grficos y objetos grficos 94828.3 Control del
color 94928.4 Control de fuentes 95528.5 Cmo dibujar lneas,
rectngulos y elipses 95928.6 Cmo dibujar arcos 96328.7 Cmo dibujar
polgonos y polilneas 96528.8 La API Java2D 96728.9 Figuras en
Java2D 96829 Componentes de la interfaz grfica de usuario de Java
98129.1 Introduccin 98229.2 Generalidades de Swing 98329.3 JLabel
98529.4 Modelo de manejo de eventos 98829.5 JTextField y
JPasswordField 990 29.5.1 Cmo funciona el manejo de eventos 99429.6
JTextArea 99529.7 JButton 99829.8 JCheckBox 100129.9 JComboBox
100429.10 Manejo de eventos del ratn 100629.11 Administradores de
diseo 1010 29.11.1 FlowLayout 1011 29.11.2 BorderLayout 1013
29.11.3 GridLayout 101629.12 Paneles 101829.13 Creacin de una
subclase autocontenida de JPanel 102029.14 Ventanas 102529.15 Uso
de mens con marcos 102630 Multimedia en Java: Imgenes, animacin y
audio 104530.1 Introduccin 104630.2 Cmo cargar, desplegar y escalar
imgenes 104730.3 Cmo cargar y reproducir clips de audio 104930.4
Cmo animar una serie de imgenes 105230.5 Tpicos de animacin
105630.6 Cmo personalizar applets por medio de la etiqueta param de
HTML 105730.7 Mapas de imgenes 106230.8 Recursos en Internet y en
la World Wide Web 1064ApndicesA Recursos en Internet y en Web
1069A.1 Recursos para C/C++ 1069A.2 Tutoriales de C++ 1070A.3
Preguntas frecuentes de C/C++ 1070A.4 comp.lang.c++ 1070A.5
Compiladores de C/C++ 1071A.6 Recursos para Java 1071A.7 Productos
de Java 1072
14. xvi ContenidoA.8 FAQs de Java 1072A.9 Tutoriales de Java
107A.10 Revistas de Java 1073A.11 Applets de Java 1073A.12
Multimedia 1074A.13 Grupos de noticias de Java 1074B Recursos en
Internet y en Web para C99 1075B.1 Recursos para C99 1075C Tablas
de precedencia de operadores 1077D Conjunto de caracteres ASCII
1083E Sistemas de numeracin 1085E.1 Introduccin 1086E.2 Cmo
expresar nmeros binarios en nmeros octales y nmeros hexadecimales
1089E.3 Conversin de nmeros octales y nmeros hexadecimales a nmeros
binarios 1090E.4 Conversin de nmeros binarios, octales o
hexadecimales a nmeros decimales 1090E.5 Conversin de nmeros
decimales a nmeros binarios, octales o hexadecimales 1091E.6 Nmeros
binarios negativos: Notacin de complemento a dos 1092F Recursos de
la biblioteca estndar de C 1097 F.1 Recursos para la biblioteca
estndar de C 1097ndice 1099
15. PrefacioBienvenido a ANSI/ISO C, C++ y Java Estndar! En
Deitel & Associates escribimos tanto libros de texto denivel
universitario como libros profesionales sobre lenguajes de
programacin, y trabajamos arduamente paramantenerlos actualizados
mediante un flujo constante de nuevas ediciones. Escribir la cuarta
edicin de este librofue un placer. Este libro, as como su material
de apoyo, contiene todo lo que los maestros y estudiantes
necesi-tan para lograr una experiencia informativa, interesante,
educativa, desafiante y entretenida. Pusimos a tono laescritura, la
pedagoga, el estilo para codificar y el paquete de accesorios del
libro. Adems, en este prefacio in-cluimos un Recorrido a travs del
libro, el cual ayudar a los profesores, estudiantes y profesionales
a tener unaidea ms clara de la amplia cobertura que este libro
proporciona sobre la programacin en C, C++ y Java. En este prefacio
planteamos las convenciones que utilizamos en este libro, tales
como la presentacin dela sintaxis de los cdigos de ejemplo, el
lavado de cdigo y el resaltado de segmentos importantes de ste,para
ayudar a que los estudiantes se enfoquen en los conceptos clave que
se presentan en cada captulo. Tam-bin presentamos las nuevas
caractersticas de la cuarta edicin de Cmo programar en C. El libro
incluye el software de Microsoft, Visual C++ 6.0 Introductory
Edition. Para brindar ms apoyoa los programadores principiantes,
ofrecemos varias de nuestras nuevas publicaciones de Dive-Into
Series,las cuales pueden descargar gratuitamente desde
www.deitel.com. Dicho material, en ingls, explica cmocompilar,
ejecutar y depurar programas en C, C++ y Java, utilizando diversos
entornos de desarrollo. Aqu explicamos la suite completa de
materiales educativos que apoyan a este libro, para ayudar a los
pro-fesores que utilicen este libro como texto en un curso a
maximizar la experiencia educativa de sus estudiantes.Dicha suite
incluye un CD, en ingls, llamado Instructors Resource, el cual
contiene las soluciones a los ejerci-cios de los captulos del libro
y un archivo llamado Test-Item File con cientos de preguntas de
opcin mltipley sus respuestas. En el sitio Web de este libro
(www.peasoneducacion.net/deitel), estn disponiblesrecursos
adicionales para el profesor, entre los cuales se incluyen el
Syllabus Manager y Lecture Notes, diapo-sitivas de PowerPoint. De
igual manera los estudiantes, encontrar diapositivas de PowerPoint
y material deapoyo adicional. Este libro fue revisado por un equipo
de acadmicos distinguidos y profesionales de la industria, que
in-cluye a los principales miembros del comit de estndares de C;
listamos sus nombres y sus lugares de traba-jo para que tenga una
idea de cuan cuidadosamente se examin el libro. El prefacio
concluye con informacinsobre los autores y sobre Deitel &
Associates, Inc. Si al leer este libro le surge alguna duda,
envenos un correoelectrnico a [email protected]; le responderemos
de inmediato. Visite con regularidad nuestro sitioWeb,
www.deitel.com, e inscrbase en el boletn de noticias Deitel Buzz
Online, en www.deitel.com/newsletter/subscribe.html. Utilizamos el
sitio Web y el boletn para mantener actualizados anuestros
lectores, con respecto a todas las publicaciones y servicios
Deitel.
16. xviii PrefacioCaractersticas de Cmo programar en C, cuarta
edicinResaltado de cdigo y de entradas de usuarioHemos agregado
bastante cdigo resaltado para facilitar a los lectores la
identificacin de los segmentos repre-sentativos de cada programa.
Esta caracterstica ayuda a los estudiantes a revisar rpidamente el
material cuan-do se preparan para exmenes o para algn laboratorio.
Tambin resaltamos en nuestra pantalla los dilogosque los usuarios
introducen, para diferenciarlos de las salidas de programa.Lavado
de cdigoLavado de cdigo es el trmino que utilizamos para aplicar
comentarios, para utilizar identificadores im-portantes, para
aplicar sangra y espaciado vertical que nos sirven para separar
unidades importantes de un pro-grama. Este proceso da como
resultado programas que son ms fciles de leer y de autodocumentar.
Hemosagregado comentarios amplios y descriptivos a todo el cdigo,
incluyendo un comentario antes y despus decada instruccin principal
de control, para ayudar a que el estudiante comprenda claramente el
flujo del progra-ma. Le hicimos un buen lavado a todo el cdigo
fuente de los programas de este texto y de los accesorios. Para
promover buenas prcticas de programacin, actualizamos todo el cdigo
fuente de los programascorrespondientes a la parte de C de este
libro con nuevos estndares de codificacin. Las definiciones de
va-riables ahora se ubican en lneas separadas para facilitar su
lectura, y cada instruccin de control tiene una lla-ve que abre y
una que cierra, incluso si resulta redundante. Esto ayudar al
lector cuando desarrolle programaslargos y complejos. Cada
prototipo de funcin ahora coincide con la primera lnea de la
definicin de funcin,incluyendo los nombres de los parmetros (lo
cual ayuda a documentar el programa y a reducir errores, en
es-pecial si se trata de programadores principiantes).Uso de
terminologa/presentacinHemos actualizado el uso de la terminologa a
lo largo del texto, para cumplir con los diversos estndares y
es-pecificaciones del lenguaje.Mtodo de enseanzaMuchos maestros
creen que la complejidad de C, y muchas otras dificultades, hacen
que este tema no esconveniente para un primer curso de programacin;
siendo que ese primer curso es precisamente el objetivo deeste
libro. Si no, por qu habramos escrito este libro? Durante dos
dcadas, el Dr. Harvey M. Deitel imparti cursos introductorios a la
programacin a nivel uni-versitario, en los que enfatizaba el
desarrollo de programas claramente escritos y bien estructurados.
Mucho delo que se ensea en estos cursos son los principios bsicos
de la programacin estructurada, con nfasis en eluso efectivo de
instrucciones de control y en la funcionalidad. Nosotros
presentamos este material exactamen-te en la misma forma en que
Harvey Deitel lo hizo en sus cursos universitarios y los
estudiantes se sienten mo-tivados por el hecho de que aprenden un
lenguaje que les ser til en cuanto entren en la industria. Nuestro
objetivo es claro: producir un libro de texto de programacin en C
para cursos introductorios de pro-gramacin de nivel universitario,
para estudiantes con poca o ninguna experiencia en el tema, pero
que aun asofrezca un riguroso y profundo tratamiento de la teora y
la prctica que exigen los cursos tradicionales de C. Paralograr
estos objetivos hicimos un libro ms grande que otros textos de C;
esto se debe a que nuestro textotambin ensea pacientemente los
principios de la programacin estructurada. Cientos de miles de
estudiantesalrededor del mundo han aprendido C con ediciones
anteriores de este libro. Esta cuarta edicin contiene una gran
coleccin de ejemplos, ejercicios y proyectos sobre muchos
campos,los cuales estn diseados para dar a los alumnos la
oportunidad de resolver problemas reales muy interesan-tes, y el
cdigo de los ejemplos del texto fue probado en varios compiladores.
El libro se concentra en los principios de la buena ingeniera de
software y hace hincapi en la claridad delos programas. Somos
maestros que enseamos temas de vanguardia en salones de clases de
la industria alre-dedor del mundo y este texto pone nfasis en la
buena pedagoga. Mtodo del cdigo activo (Mtodo LIVE-CODE)Este libro
contiene diversos ejemplos reales; cada nuevo concepto se presenta
en el contexto de un programacompleto, que funciona, y que es
seguido de inmediato por una o ms ejecuciones de ejemplo que
muestran la
17. Prefacio xixentrada/salida del programa. Este estilo
ejemplifica la forma en que enseamos y escribimos sobre
programa-cin. A este mtodo de enseanza y de escritura le llamamos
mtodo de cdigo activo o Mtodo LIVE-CODE.Utilizamos lenguajes de
programacin para ensear lenguajes de programacin. Leer los ejemplos
que apa-recen en este texto es muy parecido a escribirlos y
ejecutarlos en una computadora.Acceso a World Wide WebTodo el cdigo
fuente (en ingls) de los ejemplos que aparecen en este libro (y en
nuestras dems publicacio-nes) se encuentra disponible en Internet
en el siguiente sitio Web: www.deitel.comRegistrarse es rpido y
sencillo, y las descargas son gratuitas. Modificar los ejemplos e
inmediatamente ver losefectos de esos cambios es una excelente
manera de mejorar su aprendizaje.ObjetivosCada captulo comienza con
una serie de objetivos que le informan al estudiante lo que debe
esperar, y una vezque termina el captulo, le brinda la oportunidad
de determinar si los cumpli. Dicha serie de objetivos repre-senta
una base slida y una fuente positiva de reafirmacin.FrasesDespus de
los objetivos de aprendizaje aparecen una o ms frases; algunas son
simpticas, otras filosficas, ylas ms ofrecen ideas interesantes.
Hemos observado que los estudiantes disfrutan al relacionar las
frases conel material del captulo. Es probable que aprecie ms
algunas de las frases, despus de leer los captulos.Plan generalEl
plan general del captulo ayuda al estudiante a revisar el material
de manera ordenada. Lo que tambin leayuda a darse una idea de lo
que ver, y a establecer un ritmo de aprendizaje cmodo y
efectivo.SeccionesCada captulo est organizado en pequeas secciones
que tratan temas clave de C, C++ o Java.13,280 lneas de en 268
programas de ejemplo (con los resultados del programa)Mediante
nuestro mtodo de cdigo activo, presentamos caractersticas de C, C++
y Java en el contexto de pro-gramas completos que funcionan. Despus
de cada programa, aparece una ventana que contiene las salidas
quese producen. Esto permite al estudiante confirmar que los
programas funcionan como se esperaba. Relacionarlas salidas de un
programa con las instrucciones que producen dichas salidas es una
excelente forma de apren-der y de reforzar conceptos. Nuestros
programas ejercitan muchas caractersticas de C, C++ y Java. Leer
cui-dadosamente el libro es parecido a introducir y ejecutar estos
programas en una computadora.469 Ilustraciones/FigurasEn este libro
incluimos diversos diagramas, grficos e ilustraciones. Las
explicaciones que presentan los captu-los 3 y 4 sobre instrucciones
de control muestran diagramas de flujo cuidadosamente dibujados.
[Nota: Nosotrosno enseamos a utilizar diagramas de flujo como
herramientas de desarrollo de programas, sin embargo, utili-zamos
una breve presentacin orientada a los diagramas de flujo para
especificar la precisa operacin de lasinstrucciones de control de
C.] El captulo 12, Estructuras de datos, utiliza grficos de lneas
para ilustrar lacreacin y cmo mantener vinculadas listas, colas,
pilas y rboles binarios. El resto del libro est bastante
ilus-trado.768 tips de programacinHemos incluido siete clases de
tips de programacin para ayudar a los estudiantes a que se enfoquen
en aspec-tos importantes del desarrollo, prueba, depuracin,
rendimiento y portabilidad de los programas. Resaltamoscientos de
estos tips como Errores comunes de programacin, Tips para prevenir
errores, Buenas prcticas deprogramacin, Observaciones de apariencia
visual, Tips de rendimiento, Tips de portabilidad y Observacionesde
ingeniera de software. Estos tips y prcticas representan lo mejor
de lo que hemos podido cosechar durante
18. xx Prefacioseis dcadas (combinadas) de experiencia docente
y en programacin. Una de nuestras alumnas, estudiante dematemticas,
nos dijo que pensaba que este mtodo era como resaltar axiomas,
teoremas y corolarios en librosde matemticas, ya que proporciona
una base slida para construir un buen software. 259 Errores comunes
de programacin Los estudiantes que aprenden un lenguaje, en
especial si se trata de su primer curso de programacin, tienden a
cometer con frecuencia ciertos errores. Poner atencin en los
apartados de Errores comunes de programacin les ayuda a evitar
cometer los mismos errores, y de paso reduce las largas filas
afuera de la oficina del maestro. 132 Buenas prcticas de
programacin Las Buenas prcticas de programacin son tips para
escribir programas claros. Estas tcnicas ayudan a los estu- diantes
a producir programas ms legibles, autodocumentados y fciles de
mantener. 49 Tips para prevenir errores Cuando diseamos por primera
vez esta clase de tip, pensamos que lo utilizaramos estrictamente
para decirle a la gente cmo probar y depurar programas, por lo que
en ediciones anteriores se les conoci como Tips de prueba y
depuracin. De hecho, muchos de los tips describen aspectos de C,
C++ y Java que reducen la proba- bilidad de que se produzcan
errores, lo que simplifica los procesos de prueba y depuracin.
Adems, a lo largo del libro cambiamos muchas de las Buenas prcticas
de programacin por tips de esta clase. 32 Observaciones de
apariencia visual En la parte de Java de este libro proporcionamos
Observaciones de apariencia visual para resaltar convenciones de
interfaz grfica de usuario. Estas observaciones ayudan a los
estudiantes a disear sus propias interfaces gr- ficas de usuario
para que cumplan con las normas de la industria. 68 Tips de
rendimiento Segn nuestra experiencia, ensear a los estudiantes a
escribir programas claros y comprensibles es, por mucho, el
objetivo ms importante para un primer curso de programacin. Sin
embargo, los estudiantes quieren escribir programas que se ejecuten
lo ms rpidamente posible, que utilicen la menor cantidad de
memoria, que necesi- ten el menor nmero de teclazos y que destaquen
de alguna otra manera. Los estudiantes realmente se preocupan por
el rendimiento y quieren saber qu pueden hacer para mejorar sus
programas. Por lo tanto, resaltamos las oportunidades para mejorar
el rendimiento de los programas, es decir, cuando hacemos que los
programas se eje- cuten ms rpido o cuando minimizamos la cantidad
de memoria que ocupan. 38 Tips de portabilidad El desarrollo de
software es una actividad compleja y cara. Las empresas que
desarrollan software con frecuencia deben producir versiones
personalizadas para una variedad de computadoras y sistemas
operativos. Por ello, en la actualidad se pone gran nfasis en la
portabilidad; es decir, en producir software que se ejecute en
diversos sis- temas operativos con pocos o ningn cambio. Mucha
gente ofrece C, C++ y Java como lenguajes apropiados para el
desarrollo de software portable. Algunas personas asumen que si
implementan una aplicacin en uno de los len- guajes, dicha
aplicacin automticamente ser portable. ste simplemente no es el
caso. Lograr la portabilidad requiere un diseo muy cuidadoso ya que
existen muchas dificultades para ello. Nosotros incluimos varios
Tips de portabilidad para ayudar a los estudiantes a escribir cdigo
portable. Desde su concepcin, Java fue diseado para maximizar la
portabilidad, sin embargo, los programas en Java tambin pueden
necesitar modificaciones para tener esa funcionalidad. 189
Observaciones de ingeniera de software Las Observaciones de
ingeniera de software resaltan las tcnicas, las cuestiones
arquitectnicas, los asuntos de diseo, etctera, que afectan la
arquitectura y construccin de los sistemas de software, en especial
de los sistemas a gran escala. Mucho de lo que el estudiante
aprenda aqu ser til en cursos ms avanzados y en la industria,
cuando comience a trabajar con sistemas reales grandes y complejos.
C, C++ y Java son lenguajes de ingeniera de software especialmente
efectivos.ResumenCada captulo finaliza con elementos pedaggicos
adicionales. En todos los captulos presentamos un Re-sumen completo
en forma de lista que ayuda al estudiante a revisar y a reforzar
los conceptos clave. Cada cap-tulo contiene un promedio de 37
puntos de resumen.
19. Prefacio xxiTerminologaIncluimos una seccin de terminologa
que contiene una lista en orden alfabtico de los trminos
importan-tes definidos en el captulo para reforzar an ms los
conceptos. Cada captulo contiene un promedio de 73trminos.Resumen
de tips, prcticas y erroresAl final de cada captulo repetimos las
Buenas prcticas de programacin, los Errores comunes de
programa-cin, las Observaciones de apariencia visual, los Tips de
rendimiento, los Tips de portabilidad, las Obser-vaciones de
ingeniera de software y los Tips para prevencin de errores.728
Ejercicios de autoevaluacin y sus respuestas (la cuenta incluye
partes separadas)Incluimos amplias secciones de Ejercicios de
autoevaluacin y de Respuestas a los ejercicios de autoevalua-cin
para que el alumno estudie por su cuenta. Esto le brindar la
oportunidad de conocer el material y de pre-pararse para intentar
los ejercicios regulares.993 Ejercicios (la cuenta incluye partes
separadas; 1722 ejercicios en total)Cada captulo finaliza con un
conjunto importante de ejercicios que incluyen un sencillo repaso
de la termi-nologa y los conceptos importantes; la escritura de
instrucciones especficas de un programa; la escritura depequeas
partes o funciones y clases de C++/Java; la escritura de funciones
completas, clases de C++/Javay programas; as como la escritura de
proyectos finales importantes. El gran nmero de ejercicios permite
a losprofesores disear sus cursos de acuerdo con las necesidades
especficas de sus alumnos, as como modificarlas tareas del curso
cada semestre. Los maestros pueden utilizar estos ejercicios para
asignar tareas en casa, pa-ra aplicar exmenes cortos o para aplicar
exmenes importantes.Un extenso ndiceHemos incluido un extenso ndice
al final del libro, el cual ayudar al estudiante a localizar
cualquier trmino oconcepto por palabra clave. El ndice es til tanto
para la gente que lee el libro por primera vez como para
losprogramadores que ya ejercen y que utilizan el libro como
referencia. La mayora de los trminos de las sec-ciones de
Terminologa aparecen en el ndice (junto con muchas otras entradas
de cada captulo) por lo que elestudiante puede revisar estas
secciones para asegurarse de que ha cubierto el material clave de
cada captulo.Software incluido con este libroAl escribir este libro
utilizamos varios compiladores de C. En su mayora, los programas
del texto funcionarnen todos los compiladores C de ANSI/ISO y de
C++, incluyendo el compilador Visual C++ 6.0 IntroductoryEdition
que acompaa a este libro. El material de C (captulos 2 a 14) sigue
el ANSI C estndar publicado en 1990. Vea los manuales de
re-ferencia de su sistema para obtener ms detalles sobre el
lenguaje, o para obtener una copia del ANSI/ISO9899: 1990, American
National Standard for Information Systems, Programming Language C,
del AmericanNational Standards Institute, 11 West 42nd Street, New
York, New York 10036. En 1999, ISO aprob una nueva versin de C,
C99, la cual an no es muy conocida. El Apndice B con-tiene una
lista completa de los recursos Web de C99. Si desea ms informacin
sobre C99 o le interesa adquiriruna copia del documento de
estndares de C99 (ISO/IEC 9899;1999), visite el sitio Web del
American Natio-nal Standards Institute (ANSI) en www.ansi.org. El
material de C++ est basado en el lenguaje de programacin C++, tal
como lo desarroll el Co-mit acreditado de estndares INCITS, en su
parte de tecnologa de la informacin y su comit tcnico J11, enel
lenguaje de programacin C++, respectivamente. La International
Standards Organization (ISO) aprob loslenguajes C y C++. Todo buen
programador debe leer cuidadosamente dichos documentos y revisarlos
con frecuencia. Estosdocumentos no son manuales, sin embargo,
definen sus respectivos lenguajes con el extraordinario nivel
deprecisin de quienes implementaron ese compilador y que los
grandes desarrolladores requieren.
20. xxii Prefacio Los captulos que manejan Java estn basados en
el lenguaje de programacin Java de Sun Microsystems.Dicha empresa
proporciona una implementacin de Java 2 Platform llamada Java 2
Software Development Kit(J2SDK), el cual incluye el conjunto mnimo
necesario de herramientas para escribir software en Java.
Ustedpuede descargar la versin ms reciente de J2SDK desde:
java.sun.com/j2se/downloads.htmlLa informacin relacionada con la
instalacin y configuracin de J2SDK se encuentra en:
developer.java.sun.com/developer/onlineTraining/new2java/
gettingstartedjava.html Nosotros revisamos cuidadosamente nuestra
presentacin, comparndola con estos documentos. Nuestrolibro
pretende ser til tanto en niveles introductorios como intermedios,
por lo que no pretendimos cubrir to-das las caractersticas
analizadas en estos extensos documentos.Manuales de la serie
DIVE-INTO para ambientes populares de C, C++ y JavaHemos lanzado
nuestros nuevos manuales de la serie DIVE-INTO para ayudar a
nuestros lectores a iniciarseen muchos de los ambientes de
desarrollo de programas. Puede descargar gratuitamente estos
manuales desde: www.deitel.com/books/downloads.html. Actualmente
contamos con las siguientes publicaciones de la serie: DIVE-INTO
Microsoft Visual C++ 6. DIVE-INTO Microsoft Visual C++ .NET.
DIVE-INTO Borland C++ Builder Compiler (versin de lnea de
comandos). DIVE-INTO Borland C++ Builder Personal (versin IDE).
DIVE-INTO GNU C++ on Linux. DIVE-INTO GNU C++ via Cygwin on Windows
(Cygwin es un emulador UNIX para Windows que in- cluye el
compilador GNU de C++). DIVE-INTO Forte for Java Community Edition
3.0. DIVE-INTO SunOne Studio Community Edition 4.0.Cada uno de
estos manuales muestra cmo compilar, ejecutar y depurar
aplicaciones de C, C++ y Java en esecompilador en particular.
Muchos de estos documentos tambin proporcionan instrucciones paso a
paso, coninstantneas de la pantalla para ayudar a los lectores a
instalar el software. Cada documento plantea informa-cin general
sobre el compilador y la documentacin en lnea.Paquete de accesorios
para la cuarta edicin de Cmo programar en CEste libro cuenta con
diversas ayudas para los profesores. El CD llamado Instructors
Resource (IRCD) contieneel Manual del instructor con las soluciones
a mayora de los ejercicios que aparecen al final de cada captulo.
Es-te CD, en idioma ingls, est disponible nicamente para los
profesores, a travs de los representantes de Pear-son Educacin.
[NOTA: Por favor no nos escriba para solicitar este CD; su
distribucin est limitada es-trictamente a profesores universitarios
que utilicen este libro como texto en sus clases. Los
profesorespueden obtener el manual de soluciones nicamente a travs
de los representantes de esta empresa.] Losaccesorios para este
libro tambin incluyen un archivo llamado Test Item File, el cual
contiene preguntas de op-cin mltiple. Adems, pueden disponer de
diapositivas de PowerPoint que contienen todo el cdigo y las
figu-ras del libro, as como una lista de los elementos que resumen
los puntos clave del texto. Los profesores puedenadaptar estas
diapositivas de acuerdo a sus necesidades. Pueden descargar estas
diapositivas desde www-.deitel.com donde encontrarn recursos
adicionales tiles tanto para profesores como para
estudiantes.Adicionalmente, en el sitio Web Companion de este libro
encontrar el Syllabus Manager, material que leayudar a los
profesores a planear sus cursos interactivamente y a crear
programas de estudios en lnea. Los estudiantes tambin se ven
beneficiados con la funcionalidad del sitio Web Companion. Los
recursosespecficos del libro para los estudiantes incluyen:
Diapositivas de PowerPoint susceptibles de personalizar. Cdigo
fuente de todos los programas de ejemplo.
21. Prefacio xxiii Material de referencia de los apndices del
libro (tales como tablas de precedencia de operadores, con- juntos
de caracteres y recursos Web).Los recursos especficos de cada
captulo, disponibles para los estudiantes incluyen: Objetivos del
captulo. Lo ms destacado (por ejemplo, el resumen del captulo).
Plan general. Tips (por ejemplo, Errores comunes de programacin,
Buenas prcticas de programacin, Tips de portabilidad, Tips de
rendimiento, Observaciones de apariencia visual, Observaciones de
ingeniera de software y Tips para prevenir errores). La gua de
estudio en lnea, la cual contiene ejercicios adicionales de
respuestas cortas para autoeva- luacin (por ejemplo, preguntas cuya
respuesta es verdadero o falso) y sus respuestas, lo que propor-
ciona al estudiante una retroalimentacin inmediata. El Sitio Web
Companion con todo el material anterior, en idioma ingls, se
encuentra en www.pearsoneducacion.net/deitel.Iniciativas DEITEL
para aprendizaje electrnicoLibros electrnicos y soporte para
dispositivos inalmbricosLos dispositivos inalmbricos tendrn un
papel muy importante en el futuro de Internet. Dadas las
recientesmejoras al ancho de banda y al surgimiento de tecnologas
2.5 y 3G, eso es lo que se vislumbra; dentro de unoscuantos aos, ms
personas accedern a Internet por medio de dispositivos inalmbricos
que por medio decomputadoras de escritorio. Deitel & Associates
est comprometida con la accesibilidad inalmbrica y hemospublicado
Wireless Internet & Mobile Business How to Program. Estamos
investigando nuevos formatos elec-trnicos, tales como libros
electrnicos inalmbricos, para que los estudiantes y profesores
tengan acceso alcontenido virtualmente en cualquier momento y en
cualquier lugar. Para enterarse de las actualizaciones peri-dicas
de estas iniciativas, suscrbase al boletn de noticias DEITEL Buzz
Online, en www.deitel.com/newsletter/subscribe.html, o visite
www.deitel.com.Boletn de noticias DEITEL Buzz OnlineSuscrbase a
nuestro correo electrnico gratuito de noticias, DEITEL Buzz Online,
que incluye comentarios sobrelas tendencias y desarrollos de la
industria, vnculos hacia artculos y recursos gratuitos de nuestras
publicacio-nes actuales y futuras, calendarios de liberacin de
productos, erratas, retos, ancdotas, informacin sobre nues-tros
cursos empresariales de entrenamiento dirigidos por profesores, y
mucho ms. Para suscribirse visite:
www.deitel.com/newsletter/subscribe.htmlLa nueva serie para
desarrolladores (DEITEL Developer)Deitel & Associates, Inc.,
hizo el compromiso importante de cubrir las tecnologas de punta
para los profesio-nales de la industria del software, a travs del
lanzamiento de nuestra DEITEL Developer Series. Los primeroslibros
de la serie son Web Services A Technical Introduction y Java Web
Services for Experienced Program-mers. Estamos trabajando en ASP
.NET with Visual Basic .NET for Experienced Programmers, ASP .NET
withC# for Experienced Programmers, y en muchos ms. Para saber
sobre actualizaciones continuas de las publi-caciones actuales y
las venideras de la serie DEITEL Developer, visite www.deitel.com o
suscrbase anuestro boletn de noticias.Recorrido a travs del libroEl
libro se divide en cuatro partes principales. La primera, captulos
1 a 14, presenta un meticuloso tratamien-to del lenguaje de
programacin C, el cual incluye una introduccin formal a la
programacin estructurada.La segunda parte (captulos 15 a 23), nica
entre los libros de texto de C, presenta un tratamiento
completosobre C++ y la programacin orientada a objetos, suficiente
para un curso universitario de posgrado. La terce-
22. xxiv Prefaciora parte (tambin nica entre los libros de C),
captulos 24 a 30, presenta una introduccin meticulosa a Java,la
cual incluye programacin de grficos, programacin de la interfaz
grfica de usuario (GUI) utilizandoJava Swing, programacin
multimedia y programacin basada en eventos. La cuarta parte,
apndices A a F, pre-senta una variedad de materiales de referencia
que apoyan al texto principal.Parte 1: Programacin por
procedimientos en C Captulo 1 Introduccin a las computadoras, a
Internet y a la World Wide Web Explica qu sonlas computadoras, cmo
funcionan y cmo se programan. Introduce la idea de la programacin
estructurada yexplica por qu este conjunto de tcnicas motivaron una
revolucin en la forma de escribir los programas. Elcaptulo brinda
una breve historia del desarrollo de los lenguajes de programacin,
desde los lenguajes mqui-na y los lenguajes ensambladores hasta los
lenguajes de alto nivel; tambin explica los orgenes de C, C++
yJava. El captulo incluye una introduccin a los ambientes tpicos de
programacin en C. Nosotros analizamosel gran inters que se ha
suscitado en Internet con el advenimiento de la World Wide Web y el
lenguaje de pro-gramacin Java. Captulo 2 Introduccin a la
programacin en C Proporciona una introduccin concisa a la
escri-tura de programas en C. Presenta un tratamiento detallado de
las operaciones aritmticas y para la toma de deci-siones en C.
Despus de estudiar este captulo el estudiante sabr cmo escribir
programas sencillos, perocompletos, en C. Captulo 3 Desarrollo de
programas estructurados Tal vez ste sea el captulo ms importante
dellibro, en especial para estudiantes serios de ciencias de la
computacin. ste introduce la idea de los algorit-mos
(procedimientos) para resolver problemas; explica la importancia de
la programacin estructurada paraproducir programas que sean claros,
corregibles, que se puedan mantener y que probablemente funcionen
alprimer intento; introduce las instrucciones de control bsicas de
la programacin estructurada, es decir, instruc-ciones de secuencia,
de seleccin ( if e ifelse ) y de repeticin (while); explica la
tcnica de refinamien-to arriba-abajo, paso a paso, que es
importante para producir programas estructurados adecuados, y
presenta lapopular herramienta para programar, el pseudocdigo
estructurado. Los mtodos y tcnicas utilizados en elcaptulo 3 son
aplicables a la programacin estructurada en cualquier lenguaje de
programacin, no slo en C.Este captulo ayuda al estudiante a
desarrollar buenos hbitos de programacin y a prepararse para lidiar
contareas de programacin ms importantes a lo largo del libro.
Captulo 4 Control de programas en C Mejora las nociones de la
programacin estructurada eintroduce instrucciones adicionales de
control. Examina detalladamente la repeticin y compara los ciclos
con-trolados por un contador y los ciclos controlados por
centinelas. Introduce la instruccin for como un medioconveniente
para implementar ciclos controlados por contador; presenta la
instruccin de seleccin switchy la instruccin de repeticin dowhile.
El captulo concluye con una explicacin de los operadores lgicos.
Captulo 5 Funciones en C Explica el diseo y la construccin de
mdulos de programa. Las capa-cidades relacionadas con las funciones
en C incluyen funciones de la biblioteca estndar, funciones
definidaspor el programador, recursividad y capacidades de llamadas
por valor. Las tcnicas que presentamos en el ca-ptulo 5 son bsicas
para producir y apreciar los programas estructurados adecuadamente,
en especial los pro-gramas grandes y el software que los
programadores de sistemas y de aplicaciones podran desarrollar en
larealidad. Presentamos la estrategia de divide y vencers como un
medio efectivo para resolver problemascomplejos, dividindolos en
componentes ms sencillos que interactan entre s. Los estudiantes
disfrutan eltratamiento de nmeros aleatorios y la simulacin, y
aprecian la explicacin del juego de azar con dados, el cualutiliza
de manera elegante las instrucciones de control. En este captulo
introducimos la enumeracin, y en elcaptulo 10 proporcionamos una
explicacin ms detallada. El captulo 5 ofrece una slida introduccin
a la re-cursividad, e incluye una tabla que resume docenas de
ejemplos de recursividad y ejercicios distribuidos en elresto del
libro. Algunos libros dejan la recursividad para un captulo
posterior; sin embargo, nosotros pensa-mos que es mejor cubrir este
tema de manera gradual a lo largo del texto. Los diversos
ejercicios incluyenvarios problemas clsicos de recursividad como el
de la torre de Hanoi. Captulo 6 Arreglos en C Explica la
estructuracin de datos en arreglos, o grupos de elementos dedatos
relacionados del mismo tipo. El captulo presenta diversos ejemplos,
tanto de un solo subndice, comode dos subndices. Es bien sabido que
estructurar datos de manera adecuada es tan importante como
utilizarefectivamente instrucciones de control al desarrollar
programas bien estructurados. Los ejemplos investigan
23. Prefacio xxvdistintas formas comunes de manipulacin de
arreglos, la impresin de histogramas, el ordenamiento de datos,el
paso de arreglos a funciones, y una introduccin al campo del
anlisis de encuestas (con estadstica simple).Una caracterstica de
este captulo es la cuidadosa explicacin de las tcnicas elementales
de ordenamiento ybsqueda, y la presentacin de la bsqueda binaria
como una enorme mejora de la bsqueda lineal. Los ejerci-cios que
aparecen al final del captulo incluyen diversos problemas
interesantes y desafiantes, como las tcni-cas mejoradas de
ordenamiento, el diseo de un sistema de reservaciones para una
aerolnea, una introduccinal concepto de los grficos de tortuga (que
se hicieron famosos gracias al lenguaje LOGO), y los problemas
delrecorrido del caballo y las ocho reinas, que muestran la idea de
la programacin heurstica, la cual se utilizaampliamente en el campo
de la inteligencia artificial. Captulo 7 Apuntadores en C Presenta
una de las caractersticas ms poderosas y difciles de domi-nar del
lenguaje C: los apuntadores. El captulo proporciona explicaciones
detalladas acerca de los operadorespara apuntadores, de las
llamadas por referencia, de las expresiones con apuntadores, de la
aritmtica con apun-tadores, de la relacin entre apuntadores y
arreglos, de los arreglos de apuntadores y de los apuntadores a
fun-ciones. Los ejercicios del captulo incluyen una encantadora
simulacin de la clsica carrera entre la tortuga yla liebre, barajar
y repartir cartas y cmo manejar algoritmos y recorridos recursivos
a travs de laberintos.Tambin incluimos una seccin especial llamada
Cmo construir su propia computadora. Esta seccin expli-ca la
programacin en lenguaje mquina y contina con un proyecto que
involucra el diseo y la implementa-cin de un simulador de una
computadora que permite al lector escribir y ejecutar programas en
lenguajemquina. Esta caracterstica nica del libro le ser
especialmente til a aquel lector que desee comprender cmofuncionan
en realidad las computadoras. Nuestros estudiantes disfrutan este
proyecto y a menudo implemen-tan mejoras sustanciales, muchas de
las cuales se las sugerimos en los ejercicios. En el captulo 12,
otra sec-cin especial gua al lector a travs de la construccin de un
compilador; el lenguaje mquina que produce elcompilador se ejecuta
despus en el simulador de lenguaje mquina producido en el captulo
7. Captulo 8 Caracteres y cadenas en C Trata de los fundamentos del
procesamiento de datos nonumricos. El captulo incluye un recorrido
a travs de las funciones para procesamiento de caracteres y
cade-nas, disponibles en las bibliotecas de C. Las tcnicas que
explicamos aqu se utilizan ampliamente en la cons-truccin de
procesadores de palabras, en software para diseo y composicin de
pginas, y en aplicaciones deprocesamiento de texto. El captulo
incluye una variedad de ejercicios que exploran las aplicaciones de
proce-samiento de texto. El estudiante disfrutar los ejercicios
sobre escritura de poemas humorsticos de cinco ver-sos, escritura
de poemas al azar, conversin del espaol a latn vulgar, generacin de
palabras de siete letrasque equivaldran a un nmero telefnico dado,
justificacin de texto, proteccin de cheques, escritura del mon-to
de un cheque en palabras, generacin de cdigo Morse, conversiones
mtricas y letras de cambio. El ltimoejercicio reta al estudiante a
utilizar un diccionario computarizado para crear un generador de
crucigramas. Captulo 9 Formato de datos de entrada/salida en C
Presenta todas las poderosas capacidades deformato de printf y
scanf. Aqu explicamos las capacidades de printf para el formato de
resultados,tales como redondeo de valores de punto flotante a un
nmero dado de lugares decimales, alineacin de colum-nas de nmeros,
justificacin a la derecha y a la izquierda, insercin de informacin
literal, cmo forzar un signode suma, impresin de ceros, uso de
notacin exponencial, uso de nmeros octales y hexadecimales, y
control deanchos de campo y precisiones. Explicamos todas las
secuencias de escape de printf para el movimiento delcursor, la
impresin de caracteres especiales y cmo ocasionar una alerta
audible. Examinamos todas lascapacidades de scanf para el formato
de datos de entrada, incluyendo la entrada de tipos especficos de
datosy cmo evitar caracteres especficos en un flujo de entrada.
Explicamos todos los especificadores de conver-sin de scanf para la
lectura de valores decimales, octales, hexadecimales, de punto
flotante, de carcter yde cadena. Tambin explicamos la introduccin
de datos para que coincidan (o no) con los caracteres de
unconjunto. Los ejercicios del captulo virtualmente prueban todas
las capacidades de formato para datos deentrada/salida. Captulo 10
Estructuras, uniones, manipulaciones de bits y enumeraciones en C
Presenta di-versas caractersticas importantes. Las estructuras son
como los registros en otros lenguajes de programacin,los cuales
agrupan elementos de datos de varios tipos. En el captulo 11
utilizamos las estructuras para formararchivos que consisten en
registros de informacin. En el captulo 12, utilizamos las
estructuras junto con losapuntadores y la asignacin dinmica de
memoria para formar estructuras dinmicas de datos, como
listasligadas, colas, pilas y rboles. Las uniones permiten que un
rea de memoria sea utilizada por diferentes tipos
24. xxvi Prefaciode datos en diferentes momentos; compartir la
memoria de este modo puede reducir los requerimientos de me-moria
de un programa o sus requerimientos de almacenamiento secundario.
Las enumeraciones proporcionanun medio conveniente para definir
constantes simblicas tiles; esto ayuda a escribir programas ms
autodocu-mentados. Las poderosas capacidades para la manipulacin de
bits en C permiten a los programadores escribirprogramas que
ejerciten capacidades de hardware de ms bajo nivel. Esto ayuda a
los programas a procesar ca-denas de bits, encender o apagar bits
especficos y a almacenar informacin de manera ms compacta.
Dichascapacidades, que con frecuencia slo se encuentran en
lenguajes ensambladores de bajo nivel, son valoradaspor
programadores que escriben software de sistemas como sistemas
operativos y software para redes. Una ca-racterstica del captulo es
la simulacin revisada y de alto rendimiento de cmo barajar y
repartir cartas. staes una excelente oportunidad para el profesor
para enfatizar la calidad de los algoritmos. Captulo 11
Procesamiento de archivos en C Explica las tcnicas utilizadas para
el procesamientode archivos de texto con acceso secuencial y acceso
aleatorio. El captulo comienza con una introduccin a lajerarqua de
datos como bits, bytes, campos, registros y archivos. Despus
presenta la visin de C con respec-to a los archivos y los flujos.
Explica los archivos de acceso secuencial utilizando programas que
muestran c-mo abrir y cerrar archivos, cmo almacenar datos en un
archivo de manera secuencial, y cmo leer los datosde un archivo de
manera secuencial. Tambin explica los archivos de acceso aleatorio
utilizando programas quemuestran cmo crear un archivo de manera
secuencial para acceso aleatorio, cmo leer y escribir datos en
unarchivo con acceso aleatorio, y cmo leer datos de manera
secuencial desde un archivo al que se accedi demanera aleatoria. El
cuarto programa de acceso aleatorio combina muchas de las tcnicas
de acceso a archivos,tanto secuencial como aleatorio, en un
programa completo de procesamiento de transacciones. Captulo 12
Estructuras de datos en C Explica las tcnicas utilizadas para crear
y manipular estruc-turas de datos dinmicas. El captulo comienza con
explicaciones sobre las estructuras autorreferenciadas y
laasignacin dinmica de memoria, y contina con una explicacin sobre
cmo crear y mantener distintas estruc-turas de datos dinmicas, las
cuales incluyen listas ligadas, colas (o lneas de espera), pilas y
rboles. Para cadatipo de estructura de datos presentamos programas
completos y funcionales, y mostramos ejemplos de los re-sultados.
El captulo ayuda a los estudiantes a dominar los apuntadores.
Incluye muchos ejemplos que utilizanla indireccin (o desreferencia)
y la doble indireccin, un concepto particularmente difcil. Uno de
los proble-mas al trabajar con apuntadores es que a los estudiantes
se les dificulta visualizar las estructuras de datos ycmo se
entrelazan sus nodos. El ejemplo del rbol binario es una
maravillosa conclusin al estudio de losapuntadores y de las
estructuras de datos dinmicas. Este ejemplo crea un rbol binario,
refuerza la eliminacinde duplicados, e introduce los recorridos
recursivos del rbol en preorden, inorden y posorden. Los
estudiantestienen un sentido genuino de la responsabilidad cuando
estudian e implementan este ejemplo; particularmenteaprecian el
poder ver que el recorrido inorden despliega los valores de los
nodos en orden. El captulo inclu-ye una amplia coleccin de
ejercicios. Lo ms destacado de los ejercicios es la seccin especial
de Cmoconstruir su propio compilador. Los ejercicios guan al
estudiante a travs del desarrollo de un programa deconversin de
expresiones de infijo a posfijo, y de un programa de evaluacin de
expresiones posfijo. Despusmodificamos el algoritmo de evaluacin de
expresiones posfijo para generar cdig