0% encontró este documento útil (0 votos)
326 vistas559 páginas

Pascal 7.0

Cargado por

mjho
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
326 vistas559 páginas

Pascal 7.0

Cargado por

mjho
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

CONSULTO RES EDITORIALES

AREA DE INFORMÁTICA Y COMPUTACIÓN Programación en


Antonio Vaquero Sánchez
Catedrático de Lenguajes y Sistemas Informáticos
Escuela Supaior de Informática
Turbo/Borland Pascal 7
Universidad Complutense de Madrid
ESPAÑA
3. ª edición
Gerardo Quiroz Vieyra
Ingeniero en Comunicaciones y Electrónica
por la ESIME del Instituto Politécnico Nacional
Profesor de la Universidad Autónoma Metropolitana
Unidad Xochimilco
MÉXICO
Luis J oyanes Aguilar
Director del Depat1amento de Lenguajes
y Sistemas Informáticos
Facultad de Informática/Escuela Universitaria de Informática
Universidad Pontificia de Salamanca en Madrid

Osborne/McGraw-Hill
MADRID• BUENOS AIRES• CARACAS• GUATEMALA• LISBOA• MÉXICO
NUEVA YORK• PANAMÁ• SAN JUAN• SANTAFÉ DE BOGOTÁ• SANTIAGO• SAO PAULO
AUCKLAND • HAMBURGO • LONDRES • MILÁN • MONTREAL • NUEVA DELHI • PARIS
SAN FRANCISCO • SIDNEY • SINGAPUR • ST. LOUIS • TOKIO • TORONTO
A mi hijo Luis, mi otra gran pasión

PROGRAMACIÓN EN TURBO/BORLAND PASCAL 7. 3.ª Edición

>lo está permitida la reproducción total o parcial de este libro, ni su tratamiento


informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea
electrónico, mecánico, por fotocopia, por registro u otros métodos, sin el permiso
previo y por escrito de los titulares del Copyright.

DERECHOS RESERVADOS © 1998, respecto a la primera edición en español por


McGRA W-HILL/INTERAMERICANA DE ESPAÑA, S. A. U.
Edificio Valrealty, l.ª planta
Basauri, l 7
28023 Aravaca (Madrid)

ISBN: 84-481-1075-7
Depósito legal: M. 3.591-1999

Editor: Carmelo Sánchez González


Diseño de cubierta: Luis Sanz Cantero
Compuesto en FER Fotocomposición, S. A.
Impreso en Impresos y Revistas, S. A. (IMPRESA)

IMPRESO EN ESPAÑA- PRINTED IN SPAIN


CONTENIDO

Prólogo a la primera, segunda y tercera edición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv

Capítulo l. Introducción a la ciencia de las computadoras y a la programación l


1.1. ¿Qué es una computadora? . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Organización física de una computadora (hardware) . . . . . . . . . . . . 2
1.3. El software (los programas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4. Los lenguajes de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5. La resolución de problemas con computadora . . . . . . . . . . . . . . . . . . . . . . 13
1.6. Programación modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1. 7. Programación estructurada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.8. Los lenguajes Pascal y Turbo Pascal . . . . . . . . . . . . . . . . . . . . . . . . . 28
Resumen . . . . . . . . . . . . . . . ............ ...... ......... 29
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . 30

Capítulo 2. El entorno de programación Turbo Pascal: Comenzando la programación 32


2.1. El programa Turbo Pascal (versión 7.0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2. ¿Qué es un entorno de programación? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3. El Entorno Integrado de Desarrollo (EID) . . . . . . . . . . . . . . 35
2.4. Instalación de Turbo Pascal . . . . . . . . . . . . . . . . . . . . . 36
2.5. El entorno de programación de Turbo Pascal . . . . . . . . . . . . . . . . . 37
2.6. Componentes del EID TLtrbo Pascal 7.0 . . . . . . . . . . . . 41
2.7. Los menús . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.8. Creación de programas: la edición . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.9. Conservación (grabación) de programas en discos 48
2.10. Compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.11. Ejecución (Run) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.12. Tratamiento de archivos en la ventana de edición . . . . . . . . . . . . 51
2.13. El depurador integrado . .................... 52
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

·"" Capítulo 3. Introducción a Pascal ... 54


3.1. La estructura de un programa en Pascal . . . . . . . . . ................ . 55
3.2. Objetos de un programa .................................. . 58
3.3. Diagramas de sintaxis ............................. . 61
3.4. Tipos de datos ................................... . 62
3.5. Constantes ................................... . 71
3.6. Variables . . . . . . . . . ................... . 73
3.7. Sentencias .......... . 75
viii Programación en Turbo/Borland Pascal 7 Contenido ix

3.8. La sentencia de asignación ..................................... . 77 6.9. Diseño descendente y programación modular ...................... . 232
3.9. Expresiones y operaciones aritméticas ............................ . 79 6.10. Incluir archivos en programas (creación de librerías) ................. . 239
3.1 O. Operaciones Entrada/Salida .................................... . 83 6.11. Puesta a punto de programas ................................... . 241
3.11. Operaciónes básicas de utilidad . . . . . . . . . . ...................... . 90 Resumen ......................................................... . 243
3.12. Programación interactiva . . . . . . . . . . . . . . . .............. . 94 Ejercicios ........................................................ . 243
3.13. El estilo de programación . . . . . . . . . . . . . . .......... . 95 Problemas ........................................................ . 247
3.14. Puestaapuntodeprogramas ................................. . 99
Resumen ......................................................... . 103 ' Capítulo 7. Funciones estándar y definidas por el usuario ...................... . 249
Ejercicios ........................................................ . 103 7.1. LasfuncionesdeTurboPascal ................................. . 250
Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...................... . 107 7.2. Las funciones predefinidas en Turbo Pascal ........................ . 250
7.3. Funciones matemáticas ....................................... . 251
Capítulo 4. Estructuras de control selectivas ....... . 109 7.4. Funciones trigonométricas ..................................... . 257
4.1. Expresiones lógicas ........................................... . 109 7.5. Funciones ordinales .......................................... . 261
4.2. La sentencia if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 7.6. Funciones especiales . . . . . . . . . . . . . . . . . . . . ................... . 264
4.3. Sentencias if anidadas ........................................ . 122 7.7. Funciones especiales (bajo nivel): HI/Lo/Swap . . . . . . . . . . . . . . . . . . . . . . . 265
4.4. Programación con expresiones lógicas .. . 126 7.8. Incremento y decremento: rnc/Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
4.5. La sentencia case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 7.9. Números aleatorios ........................................... . 269
4.6. Comparación de sentencias if anidadas y case . . . . . . . . . . . . . . . . . . . . . . 134 7. 1O. Funciones definidas por el usuario ............................... . 273
4. 7. Puesta a punto de programas ................................... . 136 7.11. El tipo procedimental (PROCEDURE FUNCTION) . . . . . . . . . . . . . . . . . . . . . . . . 278
Resumen ....................................................... . 141 7.12. Puesta a punto de programas ................................... . 281
Problemas resueltos . . . . . . . . . . . . . . . . . . . . . . . ....................... . 141 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....................... . 281
Ejercicios ............................. . 143 Problemas resueltos ..................... . 282
Problemas ............................ . 145 Ejercicios ............................. . 285
Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....................... . 288
Capítulo 5. Estructuras de control repetitivas ................................ . 148
- Capítulo 8. Tipos de datos definidos por el usuario y conjuntos .................. . 290
5. 1. El concepto de bucle .......................................... . 148
5.2. La sentencia while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 8.1. Definiciones de tipos . . . . . . . . . . . . . . . . . . . ................. . 290
5.3. Diseño de bucles . . . . . . . . . . . . . . . . . . . . . ....................... . 152 8.2. Tipos de datos ordinales ....................................... . 291
5.4. Terminación de los bucles ..................................... . 154 8.3. Tipos de datos subrango ....................................... . 294
5.5. La sentencia repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 8.4. Tipos definidos por el usuario: enumerados ........................ . 297
5.6. Comparación de los bucles while y repeat . . . . . . . . . . . . . . . . . . . . . . . . . 163 8.5. Las funciones ordinales: Ord, Pred y succ . . ...................... . 304
5. 7. La sentencia for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......... . 165 8.6. Compatibilidad de tipos y compatibilidad de asignación .............. . 308
5.8. Bucles anidados ............................................. . 171 8.7. Conjuntos .................................................. . 309
5.9. Sentencias de control incondicional .............................. . 174 8.8. Operaciones con conjuntos ..................................... . 313
5. 1O. Elección de la estructura repetitiva adecuada ....................... . 177 8.9. Recapitulación sobre conjuntos: conceptos y operaciones ............. . 323
5.11. Optimización de bucles ....................................... . 179 8.10. Procedimientos especiales de conjuntos ........................... . 326
5.12. Puesta a punto de programas . . . . . . . . . . . . . . . . ................. . 180 8.11. Puesta a punto de programas ................................... . 328
Resumen ......................................................... . 183 Resumen ......................................................... . 329
Problemas resueltos ................................................ . 185 Ejercicios .......... , ............................................. . 329
Ejercicios ........................................................ . 191 Problemas ..................................................... . 330
Problemas ........................................................ . 192
Capítulo 9. Introducción a las estructuras de datos: arrays . . . . . . . . . . . . . . . . . . . . . . . 332
Capítulo 6. La programación modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
9.1. Concepto de estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
6.1. El diseño descendente: los subprogramas . . . . . . . . . . . . . . . . . . . . . . . . . 195 9 .2. ¿Qué es un arra y? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
6.2. El diseño modular: los módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 9.3. Arrays unidimensionales: los vectores . . . . . . . . . . . . . . . . . . . . . . . . 334
6. 3. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 9.4. Operaciones con arrays (vectores)................................. 341
6.4. Transferencia de información a/desde procedimientos: los parámetros . . . . 206 9.5. Arrays como parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
6.5. Variables locales y globales...................................... 218 9.6. Valores mínimo y máximo de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
6.6. Efectos laterales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 9.7. La directiva del compilador R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
6.7. Ambito de un identificador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 9.8. Arrays paralelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
6.8. La declaración forward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 9.9. Arrays multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
X Programación en Turbo/Bona, ,d Pascal 7
Conrenido xi

9.10. Arrays bidimensionales (tablas) ................................. . 352 Capítulo 13. Ordenación, búsqueda y mezcla .................... . 484
9.11. Tratamiento de arrays multidimensionales . . . . . . . . . ........... . 361
9.12. Compatibilidad y conversión de tipos . . . . ................ .
13. l. Introducción . . . . . . . ................................... . 484
364 13.2. Ordenación ............................................. . 485
9.13. Constantes de tipo array (tipeadas) ............................... . 365
9.14. Arrays abiertos . . . . . . . . . . . . . . . . . . . . . .................. .
13.3. Ordenación por burbuja .................................. . 486
366 13.4. Ordenación por selección .................................. . 493
9.15. Puesta a punto de programas ................................... . 369
Resumen................................ . ................... .
13.5. Ordenación por inserción . . . . . . . . . . . .................... . 495
370 13.6. Ordenación Shell ............................................ . 498
Problemas resueltos .............. . ...................... ' .... 370 13.7. Búsqueda lineal ................................... . SOi
Ejercicios ....................... . ..................... ' .... 374 13.8. Búsqueda binaria . . . ...................... . 505
Problemas ....................... . < ••••••••••••••••••••••••••
377 13.9. Mezcla ............................ . 509
Capítulo 10. Tratamiento de cadenas de caracteres ... .......................... 380 ''-.._
Capítulo 14. Registros ............................. . 515
lO. l. Concepto de cadena de caracteres (string) . . . . . ......... .
380 14.1. El tipo de datos registro ................................. . 516
10.2. Longitud de una cadena . . . . . . . . . . . . . . . . . . . . . .......... . 381
14.2. La sentencia with ........................................ . 520
10.3. Operaciones entre cadenas . . . . . . . . . . . . . . . . . . ........... . 385
14.3. Registros jerárquicos (anidados) ............................. . 521
10.4. Procedimientos y funciones de cadena internos . . . ............... . 386
14.4. Los registros corno parámetros ............................. . 527
10.5. Otras propiedades de las cadenas . . . . . . . . . . . . . .............. . 394
10.6. Parámetros arra y abierto de tipo CHAR . . . . . . . . . ............... .
14.5. Arrays de registros ................................. • • • .. 531
398 14.6. Registros variantes ..................................... . 534
10. 7. Parámetros cadena abierta . . . . . . . . . . . . .............. . 399
14.7. Constantes de tipo registro (tipeadas) ........................ . 543
10.8. Cadenas terminadas en nulo......... . .............. . 401
14.8. Búsqueda en un array de registros .......... . 544
10.9. La unidad strings: funciones .................................. . 402
Resumen •••....................................................... 407
14.9~ Búsqueda por conversión de claves (hashing) . . . . .......... . 547
14.10. Ordenación de un array de registros . . . .............. . 552
Ejercicios . • . • . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .............. . 409
Problemas ........................... . 14.11. Puestil a punto de programas 556
412
Capítulo I I. El control de la pantalla y del teclado .... Capítulo 15. Archivos ............................................... . 564
414
11. l. La unidad Crt . . . . . . . . . . . . . . . . . . . . ............... . 15.1. Introducción a los archivos . . . . . . . . . . . . . . . . . .......... . 565
11.2. Las variables crt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 15.2. Los archivos en Turbo Pascal . . . . . . . . . . . . . . . . . ....... . 566
11.3. Rutinas de control de pantalla . . . . . . . . . 417 15.3. Los archivos de texto (secuenciales) ......................... • 570
. ................... .
t 1.4. Pantallas versus ventanas ...................................... . 419 15.4. Tratamiento de archivos de texto .......................... . 572
l 1.5. Pantalla de texto . . . . . . . . . . . . . . . . . . . . . . . . . .................. . 423 15.5. Redirecciones de las entradas/salidas estándar ................. • • 579
l l.6. Coordenadas de pantalla: posición del cursor ....................... . 424 15.6. Los archivos de acceso aleatorio (con tipos) .................... . 582
l 1.7. Reglas prácticas para el control de la pantalla ...................... . 426 15.7. Tratamiento de archivos de acceso aleatorio ................... . 584
11.8. El control del teclado ......................................... . 428 15.8. Mantenimiento de archivos aleatorios . . . . . . . . . . . . . . .. . 586
11.9. El control del tiempo y de sonidos ............................... . 430 15.9. Detección de errores de Entrada/Salida (E/S) .................. . 593
434 15.10. Errores de E/S bajo MS-DOS .............................. · · · · · · 595
Capítulo I 2. Ingeniería de software: introducción a la medotología de construcción de 15.11. Tratamiento completo de archivos aleatorios ... . 595
grandes programas . . . . . . . . . . . . . . . . . . . . . . . ............. . 438 15.12. Archivos sin tipos .......................... . 604
12. l. 15.13. Borrar V renombrar archivos . . . . . . . ........... . 606
La complejidad inherente al software . . . . . . .............. . 438
12.2. 15.14. Dispositivos en Turbo Pascal ............................. . 608
La crisis del software .......................................... . 440
12.3. 15.15. Escritura en impresora .................................. . 609
Factores en la calidad del software ............................... . 442
12.4. El ciclo de vida del software .................... . [5.16. Archivos de texto asociados a unidades lógicas ................ . 610
12.5. 443 15.17. Los archivos como parámetros de procedimientos .............. . 611
La documentación ........................................... . 449
12.6. 15.18. Ordenación de archivos .................................. • • 611
Métodos formales de verificación de programas ..................... . 451
12.7. 15.19. Mezcla de archivos . . . . . . . . . . . . . . . . . . . . . . . . ..... • • • • • • 612
Principios de diseño de sistemas ................................. . 458
12.8. 15.20. Puesta a punto de programas .............................. • • • • • • 616
Estilo de programación ....................................... . 463
12.9. Diseño de algoritmos ......................................... .
12.l0. 473 Capítulo 16. La recursividad ........................................ . 620
Codificación . . . . . . . . . . . . . . . . . . . . . . . . . . ................. . 474
12. l l. Prueba (Testing) . . . . . . . . . . . . . . . . . . . . . . ................. . 16.1. La naturaleza de la recursividad ........................... . 620
12.12. 474 629
Depuración ................................................. . 16.2. El seguimiento de la recursividad ........................... • • • • • •
12.13. 475 631
Eficiencia •.................................................. 16.3. Pilas ............. · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
12.14. 478 16.4. Subprogramas recursivos con parámetros tipo arra y ............ • • • • • • 633
Transportabilidad (Portabilidad) ................................ . 481
xii Programación en Turbo/Bor/and Pascal 7 Contenido xiii

16.5. La eficiencia (iteración versus recursividad) 635 20.6. Identificadores idénticos en diferentes unidades ................. . 788
16.6. Recursividad indirecta: declaración Forward 637 20.7. Síntesis de unidades .................................... . 789
16.7. Búsqueda binaria recursiva ..................................... . 639 20.8. Otros métodos de estructurar programas: inclusión, solapamientos y enca-
16.8. Ordenación rápida ((Jttieksorf) .................................. . 642 denamiento ........................................... . 791
16.9. Ordenación por mezéla(orcleñación externa) ....................... . 646
16.10. El problema de las Torres de Hanoi .............................. . 650 , Capítulo 21. Unidades estándar ......................... . 805
16.11. Recursión mutua ............................................ . 653 805
21.1. Las unidades estándar ....................... .
16.12. La recursividad, pros y contras (síntesis) .......................... . 654 806
21.2. La unidad System ............................................ .
16.13. Puesta a punto de programas ................................... . 655 806
21.3. La unidad Printer ............................................ .
Capítulo 17. Pilas y colas ........................ . 660 21.4. La unidad Dos .............................................. . 808
21.5. Procedimientos y funciones de la unidad Dos .......... . 811
17.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . ..................... . 660 21.6. La unidad Crt ............................................... . 819
l7.2. ¿Qué es una pila? ............................................ . 661 21.7. La unidad Strings: Funciones .............................. . 825
17.3. Realización de pilas con arrays (vectores) y registros ................. . 664 21.8. La unidad Turbo3 ...................................... . 829
17.4. ¿Qué es una cola? ............................................ . 670
17.5. Aplicaciones de las colas . . . . . . . . . . . . . . . . . ..................... . 671
Capítulo 22. Tipos abstractos de datos y objetos ........................ . 834
17.6. Realización de una cola con arrays y registros ...................... . 671 El Papel (el Rol) de la abstracción ................... . 835
22.1.
17.7. Puesta a punto de programas ................................... . 676 22.2. Un nuevo paradigma de programación ........................... . 838
22.3. Modularidad .................................... . 840
Capítulo 18. Estructuras dinámicas de datos: punteros y listas enlazadas ........... . 680 Diseño de módulos ..................................... . 843
22.4.
18.1. Estructuras de datos dinámicas .................................. . 680 22.5. Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ........... . 845
18.2. Punteros ................................................... . 682 22.6. Abstracción en lenguajes de programación ......................... . 846
18.3. Operaciones con variables puntero: los procedimientos New y Dispose .. . 685 22.7. Tipos abstractos de datos ...................................... . 849
18.4. El tipo genérico puntero (pointer) ............................... . 700 22.8. Tipos abstractos de datos en Turbo Pascal ......................... . 851
18.5. La función assigned .......................................... . 701 22.9. Orientación a objetos ......................................... . 854
18.6. La asignación de memoria en Turbo Pascal ........................ . 701 22.10. Reutilización de software ................................ . 858
18.7. Listas enlazadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706 22.11. Lenguajes de programación orientados a objetos .................... . 859
18.8. Operaciones en una lista enlazada ............................... . 710 22.12. Desarrollo tradicional frente a orientado a objetos ....... . 863
18.9. Listas circulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 721 22.13. Beneficios de las tecnologías de objetos ........................... . 864
18.10. Listas doblemente enlazadas .................................... . 723
18.11. Diseño de pilas con listas enlazadas .............................. . 725 Capítulo 23. Programación orientada a objetos ............................. . 868
18.12. Diseño de colas con listas enlazadas .............................. . 727 Programación estructurada ........................... . 869
23.1.
18. l 3. Puesta a punto de programas ................................... . 729 ¿Qué es programación orientada a objetos? ......... . 871
23.2.
23.3. Un mundo de objetos: notaciones gráficas . . . . . . . . . . . . . .......... . 877
Capítulo 19. Arboles .................................................... . 733
23.4. Comunicaciones entre objetos: los mensajes .. 883
19.1. Concepto de árbol ........................................... . 733 23.5. Estructura interna de un objeto ........... . 886
19.2. Arboles binarios ............................................. . 736 23.6. Estructura interna de una dase ............ . 888
19.3. Arboles de expresión .......................................... . 742 23.7. Herencia ............................ . 890
19.4. Construcción de un árbol binario ................................ . 745 23.8. Anulación/Sustitución .................................. . 897
19.5. Recorrido de un árbol ........................................ . 747 23.9. Sobrecarga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .......... . 898
19.6. Arbol binario de búsqueda ..................................... . 751 23.10. Ligadura dinámica ......................................... . 899
19.7. Operaciones en árboles binarios de búsqueda ....................... . 760
Capítulo 24. Programación orientada a objetos con Turbo Pascal 7 ............... . 904
Capítulo 20. Construcción de grandes programas (las unidades y la compilación indepen-
24.1. La estructura de los objetos: sintaxis . . . . . . . . . ........ . 905
diente) ..................................................... . 770
24.2. Secciones pública y privada . . . . . . . . . . . . . . ....... . 912
20.1. Concepto de unidad .......................................... . 771 24.3. Definición de objetos mediante unidades . . . . .............. . 915
20.2. Estructura de una unidad ...................................... . 771 24.4. La herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . ....... • 917
20.3. Creación de unidades ......................................... . 774 24.5. Los métodos . . . . . . . . . . . . . . . . . . . . . . . ....... • • • • • • 925
20.4. Utilización de unidad estándar .................................. . 782 24.6. Objetos dinámicos . . . . . . . . . . . . . . . . . . . . ... • • • • • • 926
20.5. Situación de las unidades en sus discos: ¿Dónde busca Turbo Pascal las uni- 24.7. Polimorfismo ....................... . 935
dades? ..................................................... . 786 24.8. Constructores y destructores . : . . . . . . . . . . . . .............. • • • 942
xiv Programación en Turbo/Borland Pascal 7

24.9. Los procedimientos new y dispose en programación orientada a objetos 945


24.10. Mejoras en programación orientada a objetos ...................... . 946
Apéndice
A. Códigos de referencia . . . . . . . . . . ................. 95 ¡
B.
C.
Palabras reservadas . . . . . . . ...........
El editor de Turbo Pascal 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
957
959
PRÓLOGO A LA PRIMERA,
D.
E.
El entorno integrado de desarrollo Turbo Pascal 7.0 . . . . . . . . . . . . . . . . . .
Operaciones más ususales con Turbo Pascal 7 . . . . . . . . . . . . . . . . . . . . . . .
963
980
SEGUNDA Y TERCERA EDICIÓN
F. Directivas de compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
G. Depuración de sus programas en Turbo Pascal . . . . . . . . . . . . . . . . . . . . . . 998
H. Mensajes y códigos de error . . . . . . . . . . . . .................. 101 ¡
I. Guía de referencia Turbo Pascal 7.0, 6.0 y 5.5 ....................... 1019
J. Diagramas de sintaxis Turbo Pascal 7.0, 6.0 v 5.5 . . . . . . . . . . . . . . . . . . . . 1044
K. Guía del usuario 1SO/A~SI Pascal estándar~ ........................ 1059 Una historia breve de Pascal y Turbo Pascal
L. Pascal estándar (A;\fSI Pascal) versus Turbo Pascal 5.5 a 7.0 . . . . . . . . . . . . 1081

Bibliografía ... . 1084 A principio de los años setenta, y tras los estudios efectuados en la década anterior en
la realización del lenguaje ALGOL-68, Niklaus Wirth, un profesor de Eidgenóssiche
Indice .. ... . 1086 Technische Hochschule (Instituto Tecnológico) de Zurich (Suiza), diseñó Pascal, un len-
guaje concebido para la enseñanza de técnicas de programación a estudiantes universi-
tarios, que con el correr de los tiempos se ha convertido en estándar del mundo de la
programación.
El objetivo fundamental -ya comentado anteriormente- de su creador fue desarro-
llar un lenguaje que permitiera enseñar programación como una disciplina sistemática
basada en determinados conceptos fundamentales. Estos conceptos se reflejan de modo
claro y natural en el lenguaje. El libro Pascal User Manual and Report, escrito por Wirth
y K. Jensen, publicado en 1974, sirvió como definición básica del lenguaje Pascal. A me-
dida que su uso creció en las comunidades educativa y profesional, aparecieron diferen-
tes implementaciones; para asegurar que los programas Pascal escritos en un sistema
puedan ser ejecutados en otros, se han diseñado diferentes estándar: IEEE e ISO, entre
los que destacaba el UCSD Pascal -en ambientes universitarios americanos ha gozado
de buena aceptación-. Sin embargo, en la mitad de la década de los ochenta, Pascal era
un lenguaje cuya difusión se reducía a ambientes y cenáculos universitarios y de inves-
tigación. Tal vez, la razón esencial residía en el elevado precio de los compiladores y de
las herramientas complementarias nec€sarias: editores y depuradores.
En 1983 aparece en el mercado norteamericano -comercializado por Borland In-
ternational, Inc.- un compilador de Pascal denominado Turbo Pascal; la característica
más notable, su reducido precio: 49,95 dólares. Los programadores profesionales lo com-
praron masivamente, pues no sólo funcionaba sino que compilaba y corría -ejecu-
taba- programas más rápidamente que cualquier otro compilador del mercado. En años
sucesivos aparecieron las versiones 2.0 (todavía conservo mi vieja copia, regalo de un
amigo como recuerdo de un viaje a Estados Unidos), 3.0, 3.1 y 3.2. Su éxito se debía
a la facilidad de edición, compilación y ejecución; constituía por sí mismo un entorno
de programación: editor, compilador y depurador integrados; tenía una limitación de
64 Kbytes en el tamaño de los programas. Por aquella época, Apple comercializaba sus
programas basados en menús desplegables que presentaban las órdenes visualmente
al programador y para cuya ejecución bastaba solamente la pulsación de una tecla; ello
evitaba la tediosa tarea de escritura de las órdenes.
xvi Programación en Turbo/Borland Pascal 7 Prólogo a la pnmera, segunda v tercera edición xvii

La versión 4.0 superó con creces a las versiones anteriores y eliminó la barrera de los fundamentales en la resolución de problemas ayudados por computadora se examinan e
64 K incorporando a su vez los menús desplegables. Además, ofrecía un gran número de ilustran en el texto: 1) análisis del problema y diseño del algoritmo; 2) transformación
mejoras y novedades en lo que concierne al confort y al entorno de programación: del algoritmo en un programa: codificación; 3) ejecución y prueba/validación del pro-
grama.
• Compilador con editor incorporado similar a las versiones anteriores, pero reno-
El texto se ha diseñado como un curso de programación en Pascal en las versio-
vado (menús desplegables, funciones especiales, etc.).
nes 5.0/5.5, 6.0 y 7.0 de Turbo Pascal. Asimismo, puede ser utilizado con la nueva ver-
• Facilidad para construcción de bibliotecas.
sión Borland Pascal 7.0 corriendo bajo el sistema operativo DOS. Busca conseguir dos
• Compilador de tipo clásico que puede ser utilizado en batch (procesos por lotes).
objetivos complementarios: enseñar a programar con un estilo depurado y enseñar fas
La gran novedad fue la posibilidad de superar la barrera de los 64 K para la creación nuevas técnicas de Turbo Pascal.
de programas. Esto se conseguía mediante módulos que se diseñaban con unidades (unit).
Cada unidad puede ser compilada separadamente.
A finales de 1988 aparece en Estados Unidos la versión 5.0 que, entre otras noveda- Organización del libro
des, ofrecía un entorno de desarrollo. Entrado el año 1989 aparece la versión 5.5, idén-
tica a la 5.0, con una importante excepción: incorpora facilidades para realizar progra- Este libro está concebido como primer curso de programación del curricufum en Cien-
mación orientada a objetos (OOP, Object Oriented Programming), metodología de cias de la Computación/Informática, así como de Facultades de Ciencias e Ingeniería; o
programación clásica, pero poco utilizada, que, sin duda, será clave en el desarrollo bien, como curso de programación para cursos no reglados o aprendizaje libre de lecto-
de la ingeniería del software en la década de los noventa. res con interés por la programación. Su contenido se complementa en los planes de es-
En el año 1991, Borland lanzó Turbo Pascal 6.0, que mejoraba el entorno de la ver- tudio citados con asignaturas de análisis y diseño de algoritmos (se la suele conocer como
sión 5.5 y, sobre todo, añadía nuevas herramientas de programación orientada a obje- Metodología, Introducción o Fundamentos de la Programación). Asimismo, cubre parte
tos: Turbo Vision. A finales del año 1992, dos nuevos productos se lanzaron por la casa de los programas de asignaturas tales como Estructura de datos o Algoritmos y Estruc-
Borland: Turbo Pascal 7.0 y Borland Pascal 7.0. turas de datos y de currículum similares, como es el caso de los programas CSI, CS2 de
En la actualidad, Turbo Pascal es, seguramente, el compilador más vendido del AC\1 (Associationfor Computing Machinery) de Estados Unidos.
mundo. Combina los beneficios de la programación estructurada en Pascal, con un am- El libro está concebido para un curso de dos cuatrimestres o dos semestres, y además
plio conjunto de herramientas adicionales, entre otras, programación orientada a objetos de contener los conceptos fundamentales de Turbo Pascal, cubre los programas típicos
y Turbo Visión. Turbo Pascal y Borland Pascal es un sistema de desarrollo profesional de las asignaturas citadas. Los Capítulos 1 al 11 se corresponden con el primer cuatri-
para crear programas que corren en entornos DOS o Windows y en modos de memoria mestre/semestre (CSI), y los Capítulos 12 al 21 con el segundo cuatrimestre/semestre
real o protegido. (CS2); el Capítulo 12 queda como puente entre ambos cuatrimestres (o semestres),
Turbo Pascal proporciona un entorno de programación muy potente y es una imple- dependiendo de la decisión del profesor o de los avances del lector. El Capítulo 22 in-
mentación muy sólida de Pascal. El entorno integra muchos recursos importantes para cluye las nuevas características incorporadas a la versión Turbo Pascal 7.0 y Borland
crear y comprobar programas. Algunos de estos recursos son: un editor de fácil uso, un Pascal 7.0.
compilador, un depurador, numerosas ventanas y diferentes extensiones de ayuda en Para aquellos lectores que procedan de Pascal estándar o de cursos elementales de
línea. programación, el orden lógico de estudio se corresponde con el orden natural de los ca-
Hoy día Turbo Pascal -que corre sobre computadoras PC y Mac, tanto en los pro- pítulos. Si posee experiencia en Pascal, puede modularizar el estudio como crea más
cesadores Pentium como en Pentium II- es una herramienta de programación muy po- conveniente, ya que su diseño permite cambiar el orden de estudio o lectura de los
tente que tiene además la virtud de su fácil aprendizaje. Por esta razón, sirve indistinta- capítulos.
mente en el campo de la educación y en el profesional. Desde institutos y liceos hasta
escuelas y facultades universitarias, Turbo/Borland Pascal es, sin género de dudas, uno
de los lenguajes y herramientas de programación más utilizado. Ingeniería del software

La producción de un programa se puede definir en diferentes etapas: análisis, diseño,


Objetivos del libro pruebas y mantenimiento. Estas fases se conocen como ciclo de vida del software, y cons-
tituyen los principios básicos en los que se sustenta la ingeniería del software. Aunque
Aunque este libro proporciona una visión completa de Turbo/Borland Pascal de la ver- este libro se dedica esencialmente a la tercera etapa, es necesario considerar siempre las
sión 7.0, es sobre todo, un manual para aprender a programar en Pascal con una herra- restantes etapas en el proceso de creación de programas, dado que el diseño y pruebas
mienta llamada Turbo. tienen una relación muy estrecha con la implementación o codificación.
Refleja una opinión muy extendida, de que la principal razón para aprender un len- El Capítulo 12 es una amplia introducción a la ingeniería de software, como ciencia
guaje de programación es utilizar una computadora para resolver problemas. Las etapas para la creación y producción de programas a gran escala.
xviii Programación en Turbo/Borland Pascal 7 Prólogo a la primera, segunda y tercera edición xix

Programación orientada a objetos Así, hemos de destacar especialmente, los capítulos dedicados a estructura de datos,
programación orientada a objetos e ingeniería de software.
La Programación orientada a objetos, POO (OOP, Object-Oriented Programming), forma Aunque ya en las ediciones anteriores se trataron estos temas, el avance de las técni-
parte de una tecnología que se lleva experimentando en las dos últimas décadas y que cas de programación en estos últimos años, junto con el mayor conocimiento que de
hasta la aparición de Turbo Pascal 5.5 se venía implementando en lenguajes como Smal- ellas tienen los estudiantes universitarios, de formación profesional y politécnica, nos ha
talk/Objective-C y C++. Las versiones 6.0 y 7.0 han añadido nuevas propiedades a las llevado a ampliar todo lo posible prácticamente todos los temas, y en. especial, los im-
ya incorporadas a la versión 6.0, aunque sus mayores aportaciones son las nuevas pala- portantes temas citados. Por estas causas hemos dedicado cuatro capítulos a tratar las
bras reservadas public, prívate e inherited, así como un nuevo depurador orientado a estructuras dinámicas de datos, pilas, colas, listas enlazadas y árboles, además de los ca-
objetos, y sobre todo, y esencialmente, una nueva herramienta de programación Turbo pítulos dedicados a arrays (arreglos, vectores o matrices), cadenas y unidades. Por igual
Vision, que permite la programación profesional con enfoque orientado a objetos. razón, se ha dedicado un capítulo totalmente nuevo a los tipos abstractos de datos, y
La historia de las tecnologías orientadas a objetos (TO) es breve, aunque proviene de otro, a tratar todas las propiedades del modelado de objetos y un tercer capítulo a la pro-
la década de los sesenta, en la que se producen las grandes convulsiones estudiantiles como gramación orientada a objetos en Turbo Pascal. Por último, se ha dedicado un capítulo
fue la «revolución de mayo del 68 francés». Su crecimiento, sin embargo, ha sido expo- específico a la introducción en el arte y ciencia de la ingeniería del software.
nencial en la década actual. La tecnología de objetos es inevitable, y la revolución del
software se está produciendo estos años y se producirá la explosión al principio del tercer
milenio, aunque ya en el año 1997 es una auténtica realidad. Contenido
El paradigma orientado a objetos se basa en el concepto de abstracción de datos, de
soporte fundamental a los tipos abstractos de datos y su extensión, los objetos. Las pro- Esta nueva edición se han organizado en 24 capítulos y 12 apéndices, cuya estructura,
piedades fundamentales en que se apoya el modelo objeto (tipo de dato objeto) son: abs- aunque no formalmente, se divide en los siguientes grandes bloques: sintaxis y progra-
tracción, encapsulamiento, ocultación de la información, herencia y polimorfismo. mación en Turbo/Borland Pascal, estructuras de datos (estáticas y dinámicas), métodos
Todas las versiones de Turbo y Borland Pascal permiten trabajar en POO y están de ordenación y búsqueda, abstracción de datos y programación orientada a objetos e
diseñadas como herramientas de desarrollo de programas. ingenierfa del software.
El Capítulo 1 describe una introducción a la ciencia de las computadoras y a la pro-
gramación. Describe los elementos fundamentales de una computadora: el hardware v
Ayudas pedagógicas el software, así como los diferentes tipos de programación tradicionales en la actualidad:
estructurada y modular.
Para llegar a conseguir los objetivos de este libro se han incluido en todos los capítulos: El entorno de programación del compilador Turbo y Borland Pascal se describe en
el Capítulo 2.
• Numerosos ejemplos de tipo didáctico. El Capítulo 3 realiza una introducción al lenguaje Pascal, así como la sintaxis y ele-
• Resolución de pequeñas aplicaciones. mentos básicos de un programa en Pascal; junto con las instrucciones básicas de Entrada
• ='iotas, reglas y precauciones que se aconsejan al lector sobre problemas que suelen y Salida.
surgir en la práctica de la programación. Las estructuras de control selectivas que muestran el flujo de control condicional de
• Ejercicios y problemas propuestos (cuya realización se recomienda). un programa. Se describe el concepto y funcionamiento de las sentencias condicionales
o selectivas if y case, en el Capítulo 4.
En varios capítulos se incluyen también como ayuda complementaria:
El Capítulo 5 explica las importantes estructuras de control repetitivas: los bucles,
• Problemas resueltos sobre aplicaciones específicas. lazos o ciclos. Se estudian las sentencias repetitivas for, while y repeat, junto con la sen-
• Puesta a punto de programas que incluyen técnicas y errores típicos de progra- tencia de control incondicional goto, que si bien no es recomendable su uso, puede
mación. haber circunstancias en un programa que lo aconsejen.
La estrategia clásica de resolución de problemas con computadoras se ha desarro-
llado tradicionalmente con la programación modular. El Capítulo 6 analiza y estudia el
Aportaciones de la tercera edición componente fundamental de la programación modular: el módulo, y en particular, el
procedimiento.
Esta tercera edición ha ampliado considerablemente el contenido de las ediciones ante- El Capítulo 7 describe otro tipo de módulo: la función. Se describen v analizan las
riores. De modo formal se han añadido dos capítulos más, para conformar un total de funciones estándar o implícitas al usuario y las funciones definidas por el ~suario.
veinticuatro, pero de modo práctico se han reestructurado y organizado con un orden El Capítulo 8 analiza los tipos de datos definidos por el usuario y un tipo de dato
distinto, muchos de los capítulos, en base a la experiencia acumulada en los nueve años estructurado denominado conjunto. Las operaciones usuales con conjuntos es otro de los
de vida del libro. temas importantes tratados en este capítulo.
Prólogo a la primera, segunda y tercera edición xxi
XX Programación en Turbo/Borland Pascal 7

pres~ntació~ más fiel del modo de implementación de dicho concepto. El Capítulo 22


El Capítulo 9 trata el importante terna de la estructura de datos: colecciones de ele-
explica el diseño y construcción de tipos abstractos de datos, junto con los conceptos
mentos dato organizados de un modo específico. Se describen y analizan los arrays
fundamentales de orientación a objetos, sus beneficios en el desarrollo de software y cuá-
(arreglos, en Hispanoamérica), tablas, matrices o vectores: su concepto básico, operacio-
les son los lenguajes más utilizados en programación orientada a objetos.
nes y tratamiento.
La Programación Orientada a Objetos (POO) es, sin género de dudas, el tipo de pro-
El tipo de dato cadena (string) es uno de los elementos clave en cualquier programa.
gramación que predomina en la segunda mitad de la década de los nqventa y que,
Su concepto, tratamiento y operaciones diversas se describen en el Capítulo 10. Las ca-
probablemente, prevalecerá en el tercer milenio. El Capítulo 23 se dedica al estudio
denas son, en realidad, arrays de caracteres, pero al contrario que en el caso de Pascal
de los POO con el objeto de llegar a entender sus propiedades fundamentales: herencia,
estándar, en Turbo/Borland Pascal se puede definir con datos tipo string.
polimorfismo, etc.
El Capítulo 11 trata sobre los métodos para controlar la pantalla y el teclado, es decir,
El Capítulo 24 muestra las características orientadas a objetos de Turbo/Borland Pas-
las técnicas necesarias para diseñar e implementar interfaces al usuario.
cal, junto con la sintaxis y las técnicas de implementación de las propiedades de objetos
La primera parte del libro termina con el Capítulo 12, Ingeniería de software: intro-
en este lenguaje.
ducción a la metodolog(a de construcción de grandes programas. Se estudian en este ca-
El libro se complementa con una serie de apéndices que hemos considerado pueden
pítulo las diferentes fases o etapas de la producción de un programa: análisis, diseño,
ayudar al lector para consulta y referencia de los entornos integrados de desarrollo. Así,
codificación, pruebas y mantenimiento.
se han conservado algunos apéndices de las versiones anteriores, cuya finalidad hemos
El Capítulo 13 expone el importante tema de ordenación, búsqueda y mezcla de da-
podido contrastar con estudiantes y profesores que han seguido este libro como referen-
tos en listas, vectores y tablas. Los métodos más importantes se analizan en este capítulo.
cia en sus clases. Además, se han modificado y añadido otros apéndices.
El registro es un nuevo tipo de dato introducido en Pascal y que permite almacenar
Los apéndices tratan los siguientes ternas. A: El código de referencia (ASCII); B: Pa-
una variedad de información sobre entidades de todo tipo. Cada elemento se almacena
labras reservadas de Turbo/Borland Pascal; C: El editor de Turbo Pascal 7.0; D: El En-
en un campo del registro independiente y se puede referenciar cada elemento almace-
torno Integrado de Desarrollo (los diferentes menús y sus sucesivas opciones); E: Ope-
nado en un campo por su nombre. El Capítulo 14 analiza el tipo de dato registro.
raciones más usuales con Turbo Pascal 7.0; F: Directivas de compilación; G: Depuración
El Capítulo 15 se dedica al importante terna del almacenamiento de datos permanen-
de programas en Turbo Pascal; H: Mensajes y códigos de error que se producen en el
tes en archivos. Este tipo de datos es una estructura de dato constituida por colecciones
desarrollo real de programas; I: Una guía de referencia del lenguaje Turbo Pascal; J: Los
de datos que se pueden guardar (grabar) para uso posterior mediante la ejecución de pro-
diagramas de sintaxis de los elementos de un programa en Turbo Pascal; K: Guía del
gramas adecuados.
usuario ISO/ANSI Pascal estándar; L: Diferencias entre Pascal estándar y Turbo Pascal.
La recursividad o recursión es una alternativa a la iteración o repetición, y constituye
una herramienta conceptual muy potente y útil para la resolución de problemas que ten-
gan naturaleza recursiva. El Capítulo 16 considera el concepto de recursividad y su tra-
tamiento para conseguir la mayor eficacia dentro de un algoritmo, así corno la técnica Agradecimientos en la primera edición
para resolver problemas mediante algoritmos recursivos.
El Capítulo 17 considera las estructuras de datos más usuales en todo tipo de algorit- Muchas personas han intervenido en el desarrollo de este libro y a muchas de ellas les
mos: pilas y colas. En este capítulo las estructuras se implementan mediante vectores debo mi reconocimiento más sincero por la ayuda y colaboración prestada.
(arrays). Los profesores Ignacio Zahonero, Rubén García y Paloma Centenera -del Depar-
Las estructuras dinámicas de datos son, probablemente, las estructuras más utiliza- tamento de Lenguajes y Sistemas Informáticos del Centro Superior de Estudios de In-
das junto con los arrays. El concepto de puntero y de lista enlazada, se describe en el formática (CESIES) de la Universidad Pontificia de Salamanca en Madrid- me han
Capítulo 18. revisado algunas partes del libro, dándome sugerencias y detectando erratas. Especial re-
Otra estructura de datos dinámica es el árbol, muy extendida y utilizada en nume- levancia han tenido en esta obra los siguientes profesores del Departamento citado an-
rosas aplicaciones; se definen en el Capítulo 19 los árboles genéricos, los binarios y bi- teriormente: José Luis Andrés García (la lectura detallada de la mitad del primer ma-
narios de búsqueda. nuscrito, sus sugerencias, un par de programas cedidos de sus clases y su apoyo personal
Los programas que se construyen en la actualidad cada vez presentan mayor com- han contribuido notablemente a los quince primeros capítulos de la obra) y Angel Her-
plejidad; por esta circunstancia, los programadores requieren de técnicas que permitan moso (su labor es de un valor inapreciable para mí ya que ha leído y depurado -en
afrontar la implementación de dichos programas con la mayor eficacia y eficiencia po- algún caso- la mayoría de los segmentos, subprogramas y programas del libro; mi re-
sibles. El Capítulo 20 enseña al lector el concepto de unidad y el modo de utilizarlo corno conocimiento más sincero). A ambos compañeros y, sin embargo, amigos, mi gratitud.
herramienta clave para el desarrollo de grandes programas. El profesor Carlos de la Fuente Chacón, experto en WordPerfect, me ha ayudado en la
El Capítulo 21 describe la estructura de las unidades fundamentales que se incluyen adaptación de los listados de Turbo Pascal a WordPerfect para su mejor impresión en
en los compiladores de Turbo y Borland Pascal. papel. A Lourdes y Cristina por su excelente trabajo de mecanografiado.
El concepto de abstracción es una de las ideas claves en el desarrollo de las modernas Finalmente deseo agradecer al equipo editor de la División Profesinoal de McGraw-
técnicas de programación orientada a objetos, y el tipo abstracto de datos (TAD) la re- Hill: Jorge Piernavieja y Eduardo Susanna, su apoyo constante a la obra; en especial de-
xxii Programación en Turbo/Borland Pascal 7

seo reconocer las facilidades y la ayuda material que Eduardo Susanna, mi editor y amigo,
me ha proporcionado en la materialización práctica de la impresión de los numerosos
listados de la obra, a fin de conseguir una mejor legibilidad de los mismos por el lector.

Agradecimientos en la segunda edición


AGRADECIMIENTOS
En esta segunda edición hemos de agradecer, de modo especial, la contribución prestada
por la profesora de la Universidad Pontificia de Salamanca en Madrid, Matilde Fernán-
EN LA TERCERA EDICIÓN
dez Azuela. Ha revisado el manuscrito completo de la primera edición, así corno los
nuevos capítulos introducidos en esta edición. Sus sabios consejos, junto con la depura-
ción de programas, han hecho que su experiencia docente en la Facultad y Escuela Uni-
versitaria de nuestra Universidad se haya transmitido en esta obra. Mi agradecimiento
eterno, compañera y sin embargo amiga.
Muchas otras personas han contribuido en esta nueva edición con sus ideas, sugeren- Muchas serían las personas a las que debería agradecer la existencia de esta tercera edi-
cias, críticas, aportaciones... Por suerte para el autor, esta contribución ha venido de uno ción. Profesores y estudiantes de España y Latinoamérica han utilizado v estudiado con
y otro lado del Atlántaíco, donde numerosos profesores y alumnos han tenido la ama- las ediciones anteriores y nos han dado ideas, consejos y corregido errat;s de todo tipo.
bilidad de impartir o seguir sus cursos de programación con la primera edición. Para mí Estas personas son, esencialmente, a quienes mayor agradecimiento debo y, por eso, de-
ha sido uno honor recibir ayuda material y aliento, así corno críticas, de numerosos co- seo reconoc~rl? en primer lugar: y he de reconocer, de nuevo, el honor que para mí ha
legas, alumnos, estudiosos, aficionados ... Mi agradecimiento más sincero para todas ellas supuesto r~cibir la ayuda matenal, el aliento y las críticas de numerosos colegas, alum-
y confío que esta nueva edición recoja todo su apoyo que para mí ha sido un gran estí- nos, profes10nales Yautodidactas. Reitero mi agradecimiento eterno a toda esta inmensa
mulo y de un valor inapreciable. cantidad de person~s que han _confiado en mis ediciones anteriores. Espero responder a
Eran obligados los párrafos anteriores, pues nobleza obliga, pero como correría el grave esa c?nfianza deposit~d~ en mis obras y que esta nueva edición contemple todo el apoyo
riesgo de dejar en el tintero nombres o instituciones, he preferido centrarme en aquellos Yestimulo que he recibido desde el año 1990 en que apareció la primera edición.
profesores que dentro de mi Universidad han utilizado, consultado o simplemente criti- De modo especial quiero agradecer, expresamente, la ayuda prestada en la revisión
cado la primera edición, reiterando de nuevo mi agradecimiento a todas esas personas de las pruebas de esta tercera edición de los siguientes profesores -y sin embargo ami-
no citadas, pero a las cuales tanto debo. gos- de la Facultad de Informática y Escuela Universitaria de Informática de la Uni-
Así, deseo expresar públicamente mi reconocimiento a los siguientes profesores de la versidad Pontificia de Salamanca en Madrid: Matilde Fernández Azuela Antonio Mu-
Facultad y Escuela Universitaria de Inforática -y por suerte para mí, sin embargo, ami- ñoz C~emente, Luis Villar Pizarra, Ángela ~arrasco, Isabel T orralba, NP del Mar García,
gos- de la Universidad Pontificia de Salamanca en el campus de Madrid: Lucas Sán- Francisco Mata, Héctor Castán, Miguel Angel Sicilia, Rosa Hernández, Salvador Sán-
chez, Joaquín Abeger, Antonio Muñoz, Luis Villar, Luis Rodríguez, Matilde Fernández, chez, Fra1:cisco Agueva, Miguel Sánchez, Jesús Pérez, Ignacio Zahonero, Paloma Cen-
Isabel Tokrralvo, M.ª Mar García, Angela Carrasco, Ignacio Zahonero, Juan I. Pérez, tenera Y A~gel f:íermoso. Además, de modo muy particular, al gran número de profe-
Angel Hermoso, Juan A. Riesco, Rubén García, Miguel Sánchez, Jesús Cobo, Francisco sores de umversidades españolas y latinoamericanas que han utilizado como referencia
Navarro, Mercedes Vargas, Jesús Pérez, Paloma Centenera, Francisco Oliva, Antonio este libro en sus dos primeras ediciones en sus clases de algoritmos, programación v es-
Reus, Rafael Ojeda, José Luis Andrés, Julián Margolles, Víctor García y Manuel Ri- tructura de datos. •
quelme. Todos ellos, y seguramente alguno más que en este momento no me viene a la . Asimismo, y como siempre sucede -en mi caso- el equipo editorial de McGraw-
cabeza -y a quien pido disculpas por su ausencia no deseada por mí-, han utilizado Hill I?e ha prestado todo su apoyo para que esta tercera edición vea la luz. De modo
la obra y en una u otra forma han contribuido a que esta segunda edición vea la luz. es_Pec1al deseo expresar mi agradecimiento al editor -y sin embargo amigo- Carmelo
Como en muchas otras ocasiones mi buen amigo y a la vez editor, Jorge Piernavieja, Sanchez González, por su comprensión, paciencia y ayuda material en la edición de la
me ha apoyado y aconsejado en las sucesivas fases de la producción y especialmente en obra.
las sucesivas revisiones. Gracias, amigo Jorge. Por último, quiero terminar con mi agradecimiento eterno a mis alumnos, pasados,
presentes Y futuros, que son la mayor fuente de inspiración que tengo. A ellos debo, en
Majadahonda (Madrid), mayo de 1993 gran p~rte, que e~ta obra vea de nuevo la luz, ya que de ellos he aprendido, y seguiré
a~rendien_d?, la ciencia de la comprensión, el entendimiento y el agradecimiento. Como
di~e ese vieJ_o refrán español: «De bien nacido es ser agradecido», y ese es mi reconoci-
miento a mis alumnos.

Majadahonda (Madrid), octubre de t 997


CAPITULO

INTRODUCCION A LA CIENCIA
DE LAS COMPUTADORAS
Y A LA PROGRAMACION

CONTENIDO
1.1. ¿Qué es una computadora?
1 .2. Organización física de una computadora (hardware)
1.3. El software (los programas)
1.4. Los lenguajes de programación
1.5. La resolución de problemas con computadora
1.6. Programación modular
1.7. Programación estructurada
1.8. Los lenguajes Pascal y Turbo Pascal
RESUMEN
EJERCICIOS

Las computadoras electrónicas modernas son uno de los productos


más importantes del siglo xx y especialmente de las dos últimas
décadas. Son una herramienta esencial en muchas áreas: industria,
gobierno, ciencia, educación, ... , en realidad en casi todos los cam-
pos de nuestras vidas. El papel de los programas de computadoras
es esencial; sin una lista de instrucciones a seguir, la computadora es
virtualmente inútil. Los lenguajes de programación nos permiten es-
cribir esos programas y por consiguiente comunicarnos con las
computadoras.
En esta obra, usted comenzará a estudiar la ciencia de las compu-
tadoras o informática a través de uno de los lenguajes de programa-
ción más versátiles disponibles hoy día: el lenguaje Pascal, y en parti-
cular profundizará en una de sus versiones. seguramente la más po·
tente y eficiente: Turbo y Borland Pascal.
Este capítulo le introduce a la computadora y sus componentes,
así como a los lengua1es de programación, y a la metodología a
seguir para la resolución de problemas con computadoras y con una
herramienta denominada Turbo Pascal.

1
2 Programación en Turbo/Borland Pascal 7 Introducción a la ciencia de las computadoras v a la programación 3

1.1. ¿QUE ES UNA COMPUTADORA?


UCP (Procesador)

U na computadora I o computador es un dispositivo electrónico utilizado para procesar


información y obtener resultados. Los datos y la información se pueden introducir en la
computadora como entrada (input) y a continuación se procesan para producir una Unidad de
salida (output, resultados), como se observa en la Figura l. l. control

COMPUTADORA

Dispositivos Dispositivos
Memoria
de de
central
entrada salida

Datos Datos Memoria


de de Unidad externa
entrada salida lógica y (almacena-
aritmética miento
Figura 1.1. Proceso de información en una computadora. permanente)

Los componentes físicos que constituyen la computadora, junto con los dispositivos
que realizan las tareas de entrada y salida, se conocen con el término hardware (tradÚci-
do en ocasiones por material). El conjunto de instrucciones que hacen funcionar a la Figura 1 .2. Organización física de una computadora.
computadora se denomina programa; a la persona que escribe programas se llama pro-
gramador y al conjunto de programas escritos para una computadora se llama software
(traducido en ocasiones por logical). Este libro se dedicará casi exclusivamente al softwa- Los dispositivos de entrada, como su nombre indica, sirven para introducir datos
re. pero se hará una breve revisión del hardware como recordatorio o introducción según (información) en la computadora para su proceso. Los datos se leen de los dispositivos
sean los conocimientos del lector en esta materia. de entrada y se almacenan en la memoria central o interna. Los dispositivos de entrada
convierten la información de entrada en señales eléctricas que se almacenan en la me-
moria central. Dispositivos de entrada típicos son los teclados; otros son: lectores de
tar_jetas -ya casi en desuso-, lápices ópticos, palancas de mando Uoystick), lectores de
1.2. ORGANIZACION FISICA DE UNA COMPUTADORA códigos de barras, etc. Hoy día es muy frecuente que el usuario utilice un dispositivo de
(HARDWARE) entrada llamado ratón que mueve un puntero electrónico sobre la pantalla que facilita la
interacción usuario-máquina.
La mayoría de las computadoras, grandes o pequeñas, están organizadas como se mues- Los dispositivos de salida permiten representar los resultados (salida) del proceso de
tra en la Figura 1.2. Ellas constan de cinco componentes principales: dispositivos de los datos. El dispositivo de salida típico es la pantalla (CRT) 2 o monitor. Otros dispositi-
entrada, dispositivos de salida, unidad central de proceso (UCP) o procesador, memoria vos de salida son: impresoras (imprimen resultados en papel), trazadores gráficos (plot-
interna y memoria externa. ters), reconocedores de voz, etc.
El teclado y la pantalla constituyen -en muchas ocasiones- un único dispositivo,
denominado terminal. Un teclado de terminal es similar al teclado de una máquina de
1.2.1. Dispositivos de Entrada/Salida (E/S) escribir moderna con la diferencia de algunas teclas extras que tiene el terminal para
Los dispositivos de Entrada/Salida (E/S) [Input/Output (I/0), en inglés] permiten la funciones especiales. Si está utilizando una computadora personal, el teclado y el moni-
comunicación entre la computadora y el usuario. tor son dispositivos independientes conectados a la computadora por cables. En ocasio-
nes a la impresora se la conoce como dispositivo de copia dura ("hard copy"), debido a
1
En España está muy extendido el término ordenador para referirse a la traducción de la palabra inglesa
computer. 2 Cathode Ray Tube: Tubo de rayos catódicos.
Introducción a la ciencia de las computadoras y a la programación 5
4 Programación en Turbo/Borland Pascal 7

1.2.2. La memoria central (interna)


La memoria central o simplemente memoria (interna o principal) se utiliza para almace-
nar información. En general, la información almacenada en memoria puede ser de dos
tipos: las instrucciones de un programa y los datos con los que operan las instrucciones.
Por ejemplo. para que un programa se pueda ejecutar (correr, rodar, funcionar, ... , en
inglés run). debe ser situado en la memoria, en una operación denominada carga (load)
del programa. Después, cuando se ejecuta el programa, cualquier dato a procesar por el
programa se debe llevar a la memoria mediante las instrucciones del programa.
La memoria central de una computadora es una zona de almacenamiento organiza-
da en centenares o millares de unidades de almacenamiento individual o celdas.

f",,ir' f:,H ~,- ), t,r,. l''ci í Cn 1 ,ft, ,/,g ~/¡,,.} ';,r{ ,

,,fi5L'II;1~Illit{D]i;}L,¡j~J:~i--. ,i;;i41/::~,~~~ -

Figura 1 .3. Computadora personal profesional modelo Pentium 200 MMX con dispositivos
de entrada (teclado y ratón}, un dispositivo de salida (monitor} y dispositivos de
entrada/salida (unidades de disco magnético y CD-ROM}.

que la escritura en la impresora es una copia permanente (dura) de la salida, y a la


pantalla se le denomina en contraste: dispositivo de copia blanda ("soft copy"), ya que se
pierde la pantalla actual cuando se visualiza la siguiente.

Figura 1.5. Computadora portátil digital.

La unidad elemental de memoria se llama byte (octeto). Un byte tiene la capacidad


de almacenar un carácter de información, y está formado por un conjunto de unidades
más pequeñas de almacenamiento denominadas bits, que son dígitos binarios (O o 1).
Generalmente se acepta que un byte contiene ocho bits. Por consiguiente, si se desea
almacenar la frase
Figura 1 .4. Dispositivo de salida (impresora}.
Hola Mortimer todo va bien.

la computadora utilizará exactamente 27 bytes consecutivos de memoria. Obsérvese


Los dispositivos de entrada/salida y los dispositivos de almacenamiento secundario o
que, además de las letras. existen cuatro espacios en blanco y un punto (un espacio es un
auxiliar (memoria externa) se conocen también con el nombre de dispositivos periféricos
carácter que emplea también un byte). De modo similar, el número del pasaporte
o simplemente periféricos ya que, normalmente, son externos a la computadora.
Algunos terminales (PC,s) están equipados con caracteristicas gráficas (Fig. 1.5), los
P57487891
cuales permit~n que la salida se visualice en un gráfico o dibujo de dos dimensiones.
Programación en Turbo/Borland Pascal 7
Introducción a la ciencia de las computadoras y a la programación 7
6
En la actualidad las computadoras personales tipo PC tienen memorias centrales de
ocupará 9 bytes. pero si se almacena como
512 o 640 k, aunque ya es muy frecuente ver PC,s con memorias de 1, 2, etc., Mb.
PS-748-7891
1.2.3. La Unidad Central de Proceso (UCP)
ocupará l l. Estos datos se llaman alfanuméricos, y pueden constar del alfabeto, dígitos o
incluso caracteres especiales (símbolos: $, #,*,etc.). La Unidad Central de Proceso, UCP (Central Processing Unit, CPU, en inglés), dirige y
Mientras que cada carácter de un dato alfanumérico se almacena en un byte, la controla el proceso de información realizado por la computadora. La UCP procesa o
información numérica se almacena de un modo diferente. Los datos numéricos ocupan manipula la información almacenada en memoria; puede recuperar información desde
2, 4 e incluso 8 bytes consecutivos, dependiendo del tipo de dato numérico (se verá en el memoria (esta información son datos o instrucciones: programas). También puede al-
Capítulo 3). macenar los resultados de estos procesos en memoria para su uso posterior.
Existen dos conceptos importantes asociados a cada byte o posición de memoria: su La UCP consta de dos componentes: unidad de control (UC) y unidad aritmético-
dirección v su contenido. Cada celda o byte tiene asociada una única dirección que indica lógica (VAL) (Fig. 1.7). La unidad de control (Control Unit, CU) coordina las actividades
su posicin relativa en memoria y mediante la cual se puede acceder a la posic!ó~- para de la computadora y determina qué operaciones se deben realizar y en qué orden;
almacenar o recuperar información. La información almacenada en una posic10n de asimismo controla y sincroniza todo el proceso de la computadora.
memoria es su contenido. La Figura 1.6 muestra una memoria de computadora que
consta de 1.000 posiciones en memoria con direcciones de O a 999. El contenido de estas
direcciones o posiciones de memoria se llaman palabras, de modo que existen palabras Unidad Central de Proceso
de 8 16 32 v 64 bits. Por consiguiente. si trabaja con una máquina de 32 bits, significa
que 'en ~ada ·posición de memoria de su computadora puede alojar 32 bits, es decir, 32 Unidad lógica Memoria
y aritmética central
dígitos, bien ceros o unos.
Siempre que una nueva información se almacena en una posición, se destru~e (d~s_a-
Unidad de
parece) cualquier información que en ella hubiera y no_se puede re_cuperar. La direccion control
es permanente y única, el contenido puede cambiar mientras se eJecuta un programa.
La memoria central de una computadora puede tener desde unos centenares de
millares de bytes hasta millones de bytes. Como el byte es una unidad ele?1ental de
Datos de Datos de
almacenamiento, se utilizan múltiplos para definir el tamaño de la memona central: salida
entrada
Kilo-byte (KB o Kb) igual a 1.024 bytes (2 1º) -prácticamente ~e toman 1.000-_y ,ivfega-
byte (MB o Mb) igual a 1.024 x l.024 bytes (2 2º) -prácticamente se considera un
Figura 1 . 7. Unidad Central de Proceso.
1.000.000.

La unidad aritmético-lógica (Arithmetic-Logic Unit, ALU) realiza operaciones arit-


direcciones 999 méticas y lógicas, tales como suma, resta, multiplicación, división y comparaciones.
998
Los datos en la memoria central se pueden leer (recuperar) o escribir (cambiar) por
325 Contenido de la dirección 997 la UCP.
997

... 1 .2.4. Memoria auxiliar (externa)


Cuando un programa se ejecuta, se debe situar primero en memoria central de igual
modo que los datos. Sin embargo, la información almacenada en la memoria se pierde
(borra) cuando se apaga (desconecta de la red eléctrica) la computadora, y por otra parte
3 la memoria central es limitada en capacidad. Por esta razón, para poder disponer de
2 almacenamiento permanente, tanto para programas como para datos, se necesitan dis-
1
positivos de almacenamiento secundario. auxiliar o masivo ("mass storage", o "secon-
dary storage").
o
Los dispositivos de almacenamiento o memorias auxiliares (externas o secundarias)
más comúnmente utilizados son: cintas magnéticas y discos magnéticos. Las cintas son
Figura 1.6. Memoria central de una computadora.
8 Programación en Turbo/Borland Pascal 7
Introducción a la ciencia de las computadoras y a la programación 9

utilizadas principalmente por sistemas de computadoras grandes similares a las utiliza- conocidos es de 51/4", 3½" y 3", siendo las dimensiones estándar 5¼ y 3½ pulgadas, de
das en los equipos de audio. Los discos y disquetes magnéticos se utilizan por todas las capacidades 360 Kb o 1,2 Mb y 720 Kb o 1,44 Mb, respectivamente.
computadoras, especialmente las medias y pequeñas -las computadoras personales-. La información almacenada en la memoria central es volátil (desaparece cuando se
Los discos pueden ser rzgidos o duros (tecnología Winchester), de gran capacidad de apaga la computadora) y la información almacenada en la memoria auxiliar esperma-
almacenamiento (1 O a centenares de Mb), disquetes o discos flexibles ("floppy disk") nente.
(360 Kb a 1,2 Mb) o microdiscos de naturaleza dura y más manejables y prácticos que Esta información se organiza en unidades independientes llamadas archivos (ficheros,
los discos flexibles (720 Kb y 1,44 Mb ). El tamaño físico de los disquetes y por el que son file en inglés). Los resultados de los programas se pueden guardar como archivos de
datos y los programas que se escriben se guardan como archivos de programas, ambos en
la memoria auxiliar. Cualquier tipo de archivo se puede transferir fácilmente desde la
memoria auxiliar hasta la memoria central para su proceso posterior.
En el campo de las computadoras es frecuente utilizar la palabra memoria y almace-
namiento o memoria externa, indistintamente. En este libro -y recomendamos su
uso- se utilizará el término memoria sólo para referirse a la memoria central.

Comparación de la memoria central y la memoria auxiliar

La memoria central o principal es mucho más rápida y cara que la memoria auxiliar. Se
deben transferir los datos desde la memoria auxiliar hasta la memoria central, antes de
que puedan ser procesados. Los datos en memoria central son: volátiles y desaparecen
cuando se apaga la computadora. Los datos en memoria auxiliar son permanentes y no
desaparecen cuando se apaga la computadora.

a) 1.2.5. Las computadoras multimedia

Hoy día las computadoras personales profesionales y domésticas tienen prácticamente


-en un gran porcentaje- incorporadas características multimedia (CD-ROM, tarjeta
de sonido, altavoces y micrófono) que permiten integrar texto, sonido, gráficos e imá-
genes en movimiento. Las computadoras multimedia pueden leer discos CD-ROM de
gran capacidad de almacenamiento. Esta característica ha hecho que la mayoría de los
fabricantes de software comercialicen sus compiladores (programas de traducción de len-
guajes de programación) en CD-ROM, almacenando en un solo disco lo que antes ne-
cesitaba seis, ocho o doce disquetes.

b)

Figura 1 .8. Memorias auxiliares: a) disco duro de 3½"' 3 ; b) unidad y lector ZIP de 100 Mb.

3 ", pulgada, medida inglesa equivalente a 2,54 cm. Figura 1.9. Computadora multimedia.
10 Programación en Turbo/Bor/and Pascal 7 Introducción a la ciencia de las computadoras v a la programación 11

1.3. EL SOFTWARE (LOS PROGRAMAS) Los lenguajes de programación sirven para escribir programas que permitan la comu-
nicación usuario/máquina. U nos programas especiales llamados traductores (compilado-
Las operaciones que debe realizar el hardware son especificadas por una lista de instruc- res e intérpretes) convierten las instrucciones escritas en lenguajes de programación en
ciones, llamadas programas, o software. El software se divide en dos grandes grupos: instrucciones escritas en lenguajes máquina (O y 1, bits) que ésta pueda entender.
software del sistema y software de aplicaciones. Los programas de utilidad 4 facilitan el uso de la computadora. Un buen ejemplo es
El software del sistema es el conjunto de programas indispensables para que la má- un editor de textos que permite la escritura y edición de documentos. Este libro ha sido
quina funcione; se denominan también programas del sistema. Estos programas son, escrito en un editor de textos o procesador de palabras (" word procesar").
básicamente, el sistema operativo, los editores de texto, los compiladores/intérpretes (len- Los programas que realizan tareas concretas, nóminas, contabilidad, análisis estadís-
guajes de programación) y los programas de utilidad. ticos, etc., es decir, los programas que podrá escribir en Turbo Pascal, se denominan
Uno de los programas más importantes es el sistema operativo, que sirve, esencial- programas de aplicación. A lo largJ del libro se verán pequeños programas de aplicación
mente, para facilitar la escritura y uso de sus propios programas. El sistema operativo que muestran los principios de una buena programación de computadora.
dirige las operaciones globales de la computadora, instruye a la computadora para ejecu-
tar otros programas y controla el almacenamiento y recuperación de archivos (progra-
mas y datos) de cintas y discos. Gracias al sistema operativo es posible que el programa-
dor pueda introducir y grabar nuevos programas, así como instruir a la computadora
para que los ejecute. Los sistemas operativos pueden ser: monousuarios (un solo usuario)
y multiusuarios, o tiempo compartido (diferentes usuarios), atendiendo al número de
usuarios y monocarga (una sola tarea) o multiárea (múltiples tareas) según las tareas
(procesos) que puede realizar simultáneamente. Turbo Pascal corre (funciona) por ahora
en el sistema operativo de disco DOS -monousuario, monotarea- y Windows 95
-multitarea-, que soportan las computadoras personales PC, XT, AT y PS/2, compu-
tadoras Macintosh de Apple y en el ya clásico UNIX.

Figura 1.11. Relación entre programas de aplicación y programas del sistema.

Se debe diferenciar entre el acto de crear un programa y la acción de la computado-


ra cuando ejecuta las instrucciones del programa. La creación de un programa se hace
inicialmente en papel y a continuación se introduce en la computadora y se convierte en
lenguaje entendible por la computadora. La Figura 1.12 muestra el proceso general de
ejecución de un programa: aplicación de una entrada (datos) al programa y obtención de
una salida (resultados). La entrada puede tener una variedad de formas, tales como
números o caracteres alfabéticos. La salida puede también tener formas, tales como
datos numéricos o caracteres, señales para controlar equipos o robots, etc.

4
Figura 1.1 O. Diferentes programas de software. Utility: programa de utilidad.
12 Programación en Turbo/Borland Pascal 7 Introducción a la ciencia de las computadoras y a la programación 13

Memoria esencia una secuencia de bits que especifican la operación y las celdas de memoria
UCP externa
implicadas en una operación. Una serie de instrucciones en lenguaje máquina son:
Terminal
0010 0000 0000 1001
1001 0001 10'.)l 1110

Como se puede observar, estas instrucciones serán fáciles de leer por la computadora
y difíciles por un programador, y viceversa. Esta razón hace difícil escribir programas en
/4$.E:ñlli:S;, \ Datos de código o lenguaje a máquina y requiere buscar otro lenguaje para comunicarse con la
entrada computadora, pero que sea más fácil de escribir y leer por el programador. Para evitar la
Programador Otros
dispositivos tediosa tarea de escribir programas en lenguaje maquina se han diseñado otros lenguajes
externos de programación que facilitan la escritura y posterior ejecución de los programas. Estos
Figura 1 .12. Acción de un programador. lenguajes son los de bajo y alto nivel.

La ejecución de un programa requiere -generalmente- unos datos como entrada 1.4.2. lenguajes de bajo nivel (ensambladores)
(Figura 1.13 ), además del propio programa, para poder producir una salida.
La programación er. lenguaje máquina es difícil, por ello se necesitan lenguajes que
permitan simplificar este proceso. Los lenguajes de bajo nivel han sido diseñados para
Memoria ese fin.
externa
Estos lenguajes son generalmente dependientes de la máquina, es decir, dependen de
UCP un conjunto de instrucciones específicas de la computadora. Un lenguaje típico de bajo
nivel es el lenguaje ensamblador. En este lenguaje las instrucciones se escriben en códigos
alfabéticos conocidos como nemotécnicos (abreviaturas de palabras inglesas o españolas).
Así, por ejemplo, nemónicos típicos son:

ADD suma MPY multiplicar LOA cargar acumulador


SUB resta DIV dividir STO almacenar
Las palabras nemotécnicas son mucho más fáciles de recordar que las secuencias de
Entrada Salida dígitos O y 1. Una instrucción típica en ensamblador puede ser:
(Datos) (resultados)
ADD x,y,z

Esta instrucción significa que se deben sumar los números almacenados en las direc-
Figura 1.13. Ejecución de un programa.
ciones x,y, y almacenar el resultado en la dirección z. El programa ensamblador traducirá

1 .4. LOS LENGUAJES DE PROGRAMACION


MOVE A, B 01010010000000100010010100100110
ADD C, A 00100100001000100010011100100101
Los lenguajes utilizados para escribir programas de computadoras que puedan ser enten- COMP C, D 11000101000000100010011100101000
didos por ellas se denominan lenguajes de programación. BE X 101011010000000011001101
Los lenguajes de programación se clasifican en tres grandes categorías: máquina, bajo MOVE E, O 01010010000000010010100100000000
nivel (ensamblador) y alto nivel. X, ADD A, E 00100100001000010010010100101001

1.4.1. lenguaje máquina etc. etc.


Los lenguajes máquina son aquellos cuyas instrucciones son directamente entendibles
por la computadora y no necesitan traducción posterior para que la UCP pueda com- a) b)
prender y ejecutar el programa. Las instrucciones en lenguaje máquina se expresan en
términos de la unidad de memoria más pequeña, el bit (dígito binario O, o bien 1), en Figura 1 .14. a) Programa en código máquina. b) Programa en ensamblador.
Introducción a la ciencia de las computadoras y a la programación 15
14 Programación en Turbo/Borland Pascal 7

la instrucción a código máquina. Por ejemplo ADD se puede traducir a 1110, x se puede -esencialmente- un proceso creativo, se pueden considerar una serie de fases o pasos
traducir por 1001, y por 1O1O, z por 1O11. La instrucción traducida sería comunes, que generalmente deben seguir todos los programadores.
Las fases de resolución de un problema con computadoras son:
1110 1001 1010 1011 (ADD x,y,z) • Análisis del problema.
Después que un programa ha sido escrito en lenguaje ensamblador se necesita un • Diseño del algoritmo.
programa -llamado ensamblador- que lo traduzca a código máquina. • Codificación.
• Compilación y ejecución.
• Verificación.
1 .4.3. Lenguajes de alto nivel • Depuración.
Los lenguajes de programación de alto nivel (ADA, BASIC, COBOL, FORTRAN, Mo- • Documentación.
dula-2, Pascal, etc.) son aquellos en los que las instrucciones o sentencias a la computa-
Las dos primeras fases conducen a un diseño detallado escrito en forma de algoritmo.
dora son escritas con palabras similares a los lenguajes humanos -en general lenguaje
Durante la tercera etapa (codificación) se implementa 6 el algoritmo en un código escrito
inglés, como es el caso de Turbo Pascal-, lo que facilita la escritura y la fácil compren-
en un lenguaje de programación, reflejando las ideas desarrolladas en las fases de análisis
sión por el programador.
y diseño.
Por ejemplo, las líneas siguientes son: una línea de un programa en Turbo Pascal y su
La fase de compilación y ejecución traduce y ejecuta el programa. En las fases de
línea equivalente en pseudocódigo.
verificación y depuración el programador busca errores de las etapas anteriores y los
elimina. Comprobará que mientras más tiempo se gaste en la fase de análisis y diseño,
IF (x=y) ANO (z=w) THEN WRITE ('Esto es una prueba');
si (x=y) y (z=w) entonces ESCRIBIR ('Esto es una prueba') menos se gastará en la depuración del programa. Por último, se debe realizar la docu-
mentación del programa.
Esta línea se puede comprender fácilmente conociendo la traducción de las palabras Antes de conocer las tareas a realizar en cada fase, vamos a considerar el concepto y
inglesas IF (si), THEN (entonces), WRITE (escribir/imprimir), AND (y) y sin necesidad significado de la palabra algoritmo.
de mucha explicación. Es posible escribir también operaciones como La palabra algoritmo se deriva de la traducción al latín de la palabra árabe Alkhówa-
rizmi 7, nombre de un matemático y astrónomo árabe que escribió un tratado sobre
z :=x+y; la suma x + y se asigna a la variable z manipulación de números y ecuaciones en el siglo IX.
Un algoritmo es un método para resolver un problema mediante una serie de pasos
Los lenguajes de programación son -en general- transportables 5• Esto significa precisos, definidos y finitos.
que un programa escrito en un lenguaje de alto nivel se puede escribir con poca o
ninguna modificación en diferentes tipos de computadoras. Otra propiedad de estos
lenguajes es que son independientes de la máquina, esto es, las sentencias del programa
<'.i\ ;
0

no dependen del diseño hardware de una computadora específica.


·.•• }re~1JJ (indi6ar·. ef ordende realiz;::i6t1}ic¡tia ~~io) ·••·.•·< .......... :_·.
Los programas escritos en lenguaje de alto nivel no son entendibles directamente por • definido (si se sígue do~·vec.~s, obtiene d .mis131() resultado cada vez}
la máquina. Necesitan ser traducidos a instrucciones en lenguaje máquina que entien- • finito•(tiene fin; un IlÚillefO detenninácifde_pasosji: •
dan las computadoras. Los programas que realizan esta traducción se llaman compilado-
res, y los programas escritos en un lenguaje de alto nivel se llaman programas fuente. El
compilador traduce el programa fuente en un programa llamado programa objeto. Este Un algoritmo debe producir un resultado en un tiempo finito. Los métodos que
programa objeto se utiliza en la fase de ejecución del programa. El proceso de traducción utilizan algoritmos se denominan métodos algorítmicos, en oposición a los métodos que
de un programa fuente se denomina compilación y tras la fase de enlace se obtiene un implican algún juicio o interpretación que se denominan métodos heurísticos. Los méto-
programa ejecutable directamente por la computadora. dos algorítmicos se pueden implementar en computadoras; sin embargo, los procesos
heurísticos no han sido convertidos fácilmente en las computadoras. En los últimos años
las técnicas de inteligencia artificial han hecho posible la implementación del proceso
1.5. LA RESOLUCION DE PROBLEMAS CON COMPUTADORA
heurístico en computadoras.
El proceso de resolución de un problema con una computadora conduce a la escritura de
6 En la última edición (21.ª) del DRAE (Diccionario de la Real Academia Española) se ha aceptado el
un programa y a su ejecución en la misma. Aunque el proceso de diseñar programas es
término implementar: (Informática) "Poner en funcionamiento, aplicar métodos, medidas, etc .. para llevar
algo a cabo".
7 Escribió un tratado matemático famoso sobre manipulación de números y ecuaciones titulado Kitab
5 Turbo Pascal, es transportable (portable) a Pascal estándar siempre y cuando no se utilicen sentencias

específicas de Turbo Pascal. Véase Apéndice L. a/-jabr \\"·a/mugaba/a. La palabra álgebra se derivó, por su semejanza sonora, de a/-Jabr.
16 Programación en Turbo/Borland Pascal 7 Introducción a la ciencia de las computadoras y a la programación 17

Ejemplos de algoritmos son: instrucciones para montar en una bicicleta, hacer una Entrada coste original
receta de cocina, obtener el máximo común divisor de dos números, etc. Los algoritmos vida útil
se pueden expresar por fórmulas, diagramas de flujo o _'\¡-S y pseudocódigos. Esta última valor de recuperación
representación es la más utilizada en lenguajes estructurados como Turbo Pascal.
Salida depreciación anual por año
1 . 5. 1 . Análisis del problema depreciación acumulada en cada año
valor del automóvil en cada año
La primera fase de la resolución de un problema con computadora es el análisis del
problema. Esta fase requiere una clara definición, donde se contemple exactamente lo
que debe hacer el programa y el resultado o solución deseada. Proceso 1
depreciación acumulada
Dado que se busca una solución por computadora, se precisan especificaciones de- cálculo de la depreciación acumulada cada año
talladas de entrada y salida. La Figura 1.15 muestra los requisitos que se deben definir cálculo del valor del automóvil en cada año
en el análisis.
La tabla siguiente muestra la salida solicitada.
Resolución
de un
problema

1 (1988) 280.000 280.000 1.520.000


l 2 (1989)
3 (1990)
280.000
280.000
560.000
840.000
1.240.000
960.000
Aná lisis Diseño Resoluc ión del 4 (1990) 280.000 1.120.000 680.000
del del proble ma con 5 (1992) 280.000 1.400.000 400.000
prob lema algoritmo la comp utadora
6 (1993) 280.000 1.680.000 120.000

Figura 1 .15. Análisis del problema.


1 . 5. 2. Diseño del algoritmo
Para poder definir bien un problema es conveniente responder a las siguientes pre-
En la etapa de análisis del proceso de programación se determina qué hace el programa.
guntas:
En la etapa de diseño se determina cómo hace el programa la tarea solicitada. Los
• ¿Qué entradas se requieren (tipo y cantidad)? métodos más eficaces para el proceso de diseño se basan en el conocido por divide y
• ¿Cuál es la salida deseada (tipo y cantidad)? vencerás. Es decir, la resolución de un problema complejo se realiza dividiendo el pro-
• ¿Qué método produce la salida deseada? blema en subproblemas y a continuación dividir estos subproblemas en otros de nivel
más bajo, hasta que pueda ser implementada una solución en la computadora. Este
Problema 1 .1 método se conoce técnicamente como diseño descendente (top-down) o modular. El
Se desea obtener una tabla con las depreciaciones acumuladas y los valores reales de proceso de romper el problema en cada etapa y expresar cada paso en forma más detalla-
cada año, de un automóvil comprado en 1.800.000 pesetas en el año 1988, durante los da se denomina refinamiento sucesivo.
seis años siguientes suponiendo un valor de recuperación o rescate de 120.000. Realizar Cada subproblema es resuelto mediante un módulo (subprograma) que tiene un solo
el análisis del problema, conociendo fa fórmula de la depreciación anual constante D punto de entrada y un solo punto de salída.
para cada al'io de vida útil. Cualquier programa bien diseñado consta de un programa principal (el módulo de
nivel más alto) que llama a subprogramas (módulos de nivel más bajo) que a su vez
coste valor de recuperación pueden llamar a otros subprogramas. Los programas estructurados de esta forma se dice
D que tienen un diseño modular y el método de romper el programa en módulos más
vida útil
pequeños se llama programación modular. Los módulos pueden ser planeados, codifica-
dos, comprobados y depurados independientemente (incluso por diferentes programado-
1.800.000 - 120.000 1.680.000
D =--------- = 280.000 res) y a continuación combinarlos entre sí. El proceso implica la ejecución de los siguien-
6 6 tes pasos hasta que el programa se termina:
Introducción a la ciencia de las computadoras va la programación 19
18 Programación en Turbo/Borland Pascal 7

1. Programar un módulo.
2. Comprobar el módulo.
3. Si es necesario, depurar el módulo.
4. Combinar el módulo con los módulos anteriores.
El proceso que convierte los resultados del análisis del problema en un diseño modu-
lar con refinamientos sucesivos que permitan una posterior traducción a un lenguaje se
denomina diseño del algoritmo.
El diseño del algoritmo es independiente del lenguaje de programación en el que se
vaya a codificar posteriormente.

1.5.3. Herramientas de programación


Las dos herramientas más utilizadas comúnmente para diseñar algoritmos son: diagra- Figura 1 .17. Plantilla para dibujo de diagramas de flujo.
1nas de flujo y pseudocódigos.
Aunque no existen reglas para escritura del pseudocódigo en español, se ha recogido
una notación estándar que se utilizará en el libro y que ya es muy empleada en los libros
Diagramas de flujo
de programación en español 8. Las palabras reservadas básicas se representarán en letras
Un diagrama de flujo (jlowchart) es una representación gráfica de un algoritmo. Los sím- negritas minúsculas. Estas palabras son traducción libre de palabras reservadas de len-
bolos utilizados han sido normalizados por el Instituto Norteamericano de Normaliza- guajes como BASIC, Pascal. etc. Más adelante se indicarán los pseudocódigos funda-
ción (ANSI), y los más frecuentemente empleados se muestran en la Figura 1.16, junto mentales a utilizar en esta obra.
con una plantilla utilizada para el dibujo de los diagramas de flujo (Fig. 1.17). En la Fi- Pseudocódigo del programa 1. 1.
gura 1.18 se representa el diagrama de flujo que resuelve el problema 1.1.
Previsiones de depreciacion
I nt roduc ir coste
Pseudocódigo vida uti l
El pseudocódigo es una herramienta de programación en la que las instrucciones se es- valor final de rescate (recuperacion)
criben en palabras similares al inglés o español, que facilitan tanto la escritura como la imprimir cabeceras
Establecer el valcrr inici,11 del Año
lectura de programas. En esencia, el pseudocódigo se puede definir como un lenguaje de
Calcular depreci aci on
especi}1cación de algoritmos. mientras valor año=< vida util hacer
calcular depreci acion acumulada
calcular valor actual
( Terminal )
Subprograma imprimir una linea de la tabla
incrementar el valor del año
fin de mientras
Ejemplo 1.1
Calcular la paga neta de un trabajador conociendo el número de horas trabaJadas. la
Entrada/
Salida tarifa horaria v la rasa de impuestos.
Algoritmo
l. Leer Horas, Tarifa, Tasa
2. Calcular PagaBruta = Horas*Tarifa

o Conectores
(J 8
Para mayor ampliación sobre el pseudocódigo, puede consultar, entre otras, algunas de estas obras: Fun-
damemos de programación, Luis Jayanes, 2." edición, YlcGraw-Hill, 1996. Madrid: .víewdolog(a de la progra-
mación. Luis Jayanes, McGraw-Hill, 1986, Problemas de Metodología de la programación, Luis Jayanes,
:vkGraw-Hill, 1991. así corno Introducción a la programación, de Clavel y Biondi, Masson, 1987. o bien Intro-
ducción a la programación y a fas estructuras de datos, de Braunstein y Groia, Editorial Eudeba, Buenos Aires,
1986; también, Fundamemos de programación. Libro de problemas, Luis Jayanes, Luis Rodríguez y Matilde
Figura 1 .16. Símbolos más utilizados en los diagramas de flujo. Fernández, McGraw-Hill, 1996.
20 Programación en Turbo/Borland Pascal 7 Introducción a la ciencia de las computadoras y a la programación 21

l. Establecer Contador a 1
Inicio 2. Establecer Suma a O
3. mientras Contador~ 100 hacer
Sumar Contador a Suma
Incrementar Contador en 1
Leer
Coste, Vida fin_mientras
útil, ValorRescate 4. Visualizar Suma

Leer Año
1 .5.4. Codificación de un programa
Codificación es la escritura en un lenguaje de programación de la representación del
algoritmo desarrollada en las etapas precedentes. Dado que el diseño de un algoritmo es
ValorActual+- Coste independiente del lenguaje de programación utilizado para su implementación, el código
Depreciación+- puede ser escrito con igual facilidad en un lenguaje o en otro.
(Coste-ValorRescate)/
VidaUtil
Para realizar la conversión del algoritmo en programa se deben sustituir las palabras
Acumulada+- O reservadas en español por sus homónimos en inglés, y las operaciones/instrucciones
indicadas en lenguaje natural expresarlas en el lenguaje de programación correspon-
diente.
No El programa correspondiente al problema 1.1 en Turbo Pascal es:
program Previsiones;
{ Este programa obtiene una tabla de depreciaciones acumuladas
y valores reales de cada año de un determinado producto }
Acumulada+-
Acumu/ada + Fin var
Depreciación Coste,
Depreciacion,
Valor_Recuperacion,
Valor Actual+-
Valor Actual -
Valor_Actual,
Depreciación Acumulada,
Anio, Vida_Util integer;
begin
Año+- Año+ 1 WriteLn ('Introduzca coste, valor recuperacion y vida util');
ReadLn (Coste, Valor_Recuperacion, Vida_Util);
WriteLn ('Introduzca año actual');
ReadLn (Anio);
Figura 1.18. Diagrama de flujo (problema 1.1 ). Valor_Actual := Coste;
Depreciacion .- (Coste - Valor_Recuperacion) / Vida_Util;
Acumulada := O;
Write ('Año' : 7, 'Depreciacion' :15, 'Dep. Acumulada' :17);
3. Calcular Impuestos= PagaBruta*Tasa WriteLn ('Valor_Actual' :14);
4. Calcular PagaNeta = PagaBruta - Impuestos while Anio < Vida_Util do
S. Visualizar PagaBruta, Impuestos, PagaNeta begin
Acumulada :=Acumulada+ Depreciacion;
Ejemplo 1.2 Valor_Actual := Valor_Actual - Depreciacion;
Write (Anio :8, Depreciacion :11:1, Acumulada:17:1);
Calcular el valor de la suma 1 + 2 + 3 + ... + JOO. Writeln(Valor_Actual:17:1);
Anio := Anio + 1
Algoritmo end
end.
Se utiliza una variable contador como un contador que genere los sucesivos números
enteros, y suma para almacenar las sumas parciales 1, 1 + 2, 1 + 2 + 3, ...
22 Programación en Turbo/Borland Pascal 7 Introducción a la ciencia de las computadoras y a la programación 23

Aunque, lógicamente, no comprenda las sentencias Pascal del programa anterior, es Memoria
necesario observe las siguientes características básicas que ampliaremos en el Capítulo 3. UCP externa

1. Cabecera del programa. Nombre del programa, autor, fecha de creación, etc.
2. Lista de variables. Es obligatoria su declaración en Pascal.
3. Legibilidad. Los programas deben ser lo más legibles posible, por ello el espaciado
y las sangrías (márgenes interiores) se deben utilizar con frecuencia.
4. Diseño modular. Este simple programa sólo consta de un módulo principal. Teclado
S. Documentación. Los programas deben incluir comentarios internos, en forma de
líneas con separadores Í \ o bien (* *).

Documentación interna
a)
Como se verá más tarde, la documentación de un programa se clasifica en interna y
externa. La documentación interna es la que se incluye dentro del código del programa
Memoria
fuente mediante comentarios que ayudan a la comprensión del código. Todas las líneas externa
de programas que comiencen con un símbolo¡ o con un símbolo(* son comentarios. El
p;ograma no los necesita y la computadora los ignora. Estas líneas de comentarios sólo UCP
sirven para hacer los programas más fáciles de comprender. El objetivo del programador
debe ser escribir códigos sencillos y limpios.
Debido a que las máquinas actuales soportan grandes memorias (512 K o 640 K de
memoria central mínima en computadoras personales) no es necesario recurrir a técni-
cas de ahorro de memoria, por lo que es recomendable incluya el mayor número de
comentarios posibles, pero, eso sí, que sean significativos.

1.5.5. Compilación y ejecución de un programa


Una vez que el algoritmo se ha convertido en un programa fuente, es preciso introducir-
lo en memoria mediante el teclado y almacenarlo posteriormente en un disco. Esta b)
operación se realiza con un programa editor, posteriormente el programa fuente se con-
vierte en un archivo de programa que se guarda (graba) en disco.
Memoria
El programa fuente debe ser traducido a lenguaje máquina. Este proceso se realiza externa
con el compilador y el sistema operativo que se encarga prácticamente de la compila-
ción. Si tras la compilación se presentan errores (errores de compilación) en el programa UCP
fuente, es preciso volver a editar el programa, corregir los errores y compilar de nuevo.
Este proceso se repite hasta que no se producen errores, obteniéndose el programa objeto
que todavía no es ejecutable directamente. Suponiendo que no existen errores en el
programa fuente, se debe instruir al sistema operativo para que realice la fase de montaje
o enlace (link), carga, del programa objeto con las librerías del programa del compilador.
El proceso de montaje produce un programa ejecutable. La Figura 1.19 describe el pro-
ceso completo de compilación/ejecución de un programa.
Cuando el programa ejecutable se ha creado, se puede ya ejecutar (correr o rodar)
desde el sistema operativo con sólo teclear su nombre (en el caso de DOS). Suponiendo
que no existen errores durante la ejecución (llamados errores en tiempo de ejecución). se
obtendrá la salida de resultados del programa. e)
Las instrucciones u órdenes para compilar y ejecutar un programa Pascal puede
Figura 1 .19. Fases de la compilación/ejecución de un programa: a) edición; b) compilación;
variar según el tipo de compilador. Así Turbo Pascal compila y ejecuta con una sola
e) montaje o enlace.
24 Programación en Turbo/Borland Pascal 7
Introducción a la ciencia de las computadoras y a la programación 25
orden. mientras que los compiladores clásicos de Pascal siguen un proceso similar al 1.6. PROGRAMACION MODULAR
expuesto anteriormente: compilar, enlazar y ejecutar.
La programación modular es uno de los métodos de diseño más flexibles y potentes para
1 . 5. 6. Verificación y depuración de un programa mejorar la productividad de un programa. En programación modular el programa se
divide en módulos (partes independientes), cada una de las cuales ejecuta una única
La verificación o compilación de un programa es el proceso de ejecución del programa
actividad o tarea y se codifican independientemente de otros módulos. Cada uno de
con una amplia variedad de datos de entrada, llamados datos de test o prueba, que
estos móclulos se analizan, codifican y ponen a punto por separado.
determinarán sí el programa tiene errores ("bugs"). Para realizar la verificación se debe
Cada programa contiene un módulo denominado programa principal que controla
desarrollar una amplia gama de datos de test: valores normales de entrada, valores extre-
todo lo que sucede; se transfiere el control a submódulos (posteriormente se denomina-
mos de entrada que comprueben los límites del programa y valores de entrada que
rán subprogramas), de modo que ellos puedan ejecutar sus funciones; sin embargo, cada
comprueben aspectos especiales del programa.
submódulo devuelve el control al módulo principal cuando se haya completado su tarea.
La depuración es el proceso de encontrar los errores del programa y corregir o elimi-
Si la tarea asignada a cada submódulo es demasiado compleja, éste deberá romperse en
nar dichos errores.
otros módulos más pequeños. El proceso sucesivo de subdivisión de módulos continúa
Cuando se ejecuta un programa, se pueden producir tres tipos de errores:
hasta que cada módulo tenga solamente una tarea específica que ejecutar. Esta tarea
1. Errores de compilación. Se producen normalmente por un uso incorrecto de las puede ser entrada, salida, manipulación de datos. control de otros módulos o alguna
reglas del lenguaje de programación y suelen ser errores de sintaxis. Si existe un combinación de éstos. Un módulo puede transferir temporalmente (bifurcar) el control a
error de sintaxis, la computadora no puede comprender la instrucción, no se otro módulo: sin embargo, cada módulo debe eventualmente devolver el control al
obtendrá el programa objeto y el compilador imprimirá una lista de todos los módulo del cual se recibe originalmente el control.
errores encontrados durante la compilación.
2. Errores de ejecución. Estos errores se producen por instrucciones que la computa-
dora puede comprender pero no ejecutar. Ejemplos típicos son: división por cero Raíz
y raíces cuadradas de números negativos. En estos casos se detiene la ejecución del
programa y se imprime un mensaje de error.
3. Errores lógicos. Se producen en la lógica del programa y la fuente del error suele
Módulo 1 Módulo 2 Módulo 4
ser el diseño del algoritmo. Estos errores son los más difíciles de detectar, ya que el
programa puede funcionar y no producir errores de compilación ni de ejecución,
y sólo puede advertir el error por la obtención de resultados incorrectos. En este
caso se debe volver a la fase de diseño del algoritmo, modificar el algoritmo, Módulo 11 Módulo 12 Módulo 41 Módulo 42
cambiar el programa fuente y compilar y ejecutar una vez más.

Módulo 21
1 . 5. 7. Documentación y mantenimiento
La documentación de un problema consta de las descripciones de los pasos a dar en el
proceso de resolución de un problema. La importancia de la documentación debe ser
Módulo 221 Módulo 222
destacada por su decisiva influencia en el producto final. Programas pobremente docu-
mentados son difíciles de leer, más difíciles de depurar y casi imposibles de mantener y
Figura 1.20. Programación modular.
modificar.
La documentación de un programa puede ser interna y externa. La documentación
interna es la contenida en líneas de comentarios. La documentación externa incluye Los módulos son independientes en el sentido en el que ningún módulo puede tener
análisis, diagramas de flujo y/o pseudocódigos, manuales de usuario con instrucciones acceso directo a cualquier otro módulo excepto el módulo al que llama y sus propios
para ejecutar el programa y para interpretar los resultados. submódulos. Sin embargo, los resultados producidos por un módulo pueden ser utiliza-
La documentación es vital cuando se desea corregir posibles errores futuros o bien dos por cualquier otro módulo cuando se transfiera a ellos el control.
cambiar el programa. Tales cambios se denomina mantenimiento del programa. Des- Dado que los módulos son independientes, diferentes programadores pueden traba-
pués de cada cambio la documentación debe ser actualizada para facilitar cambios poste- jar simultáneamente en diferentes partes del mismo programa. Esto reducirá el tiempo
riores. Es práctica numerar las sucesivas versiones de los programas 1.0, 1.1, 2.0, 2.1, etc. del diseño del algoritmo y posterior codificación del programa. Además, un módulo se
(Si los cambios introducidos son importantes, se varía el primer dígito [1.0, 2.0, ... ], en puede modificar radicalmente sin afectar a otros módulos, incluso sin alterar su función
caso de pequeños cambios sólo se varía el segundo dígito [2.0, 2.1, ... ].) principal.
Introducción a la ciencia de las computadoras y a la programación 27
26 Programación en Turbo/Borland Pascal 7

La descomposición de un programa en módulos independientes más simples se co- 1. 7 .2. Diseño descendente ("top-down")
noce también como el método de "divide y vencerás" (divide and conquer). Se diseña El diseño descen~ente (_top-down) es el proceso mediante el cual un problema se descom-
cada módulo con independencia de los demás, y siguiendo un método ascendente o P?ne en una sene de_ mveles o pasos sucesivos de refinamiento (stepwise). La metodolo-
descendente se llegará hasta la descomposición final del problema en módulos en forma g~~ descendente consiste en_ efectuar una relación entre las sucesivas etapas de estructura-
jerárquica. c1on_ ~e modo q_ue se relacionasen unas con otras mediante entradas y salidas de infor-
macion. Es decir, se des~ompone el problema en etapas o estructuras jerárquicas, de
fo~ma que se puede considerar cada estructura desde dos puntos de vista: 6·qué hace? v
1. 7. PROGRAMACION ESTRUCTURADA ¿como lo hace? ,

Si se considera un nivel n de refinamiento, las estructuras se consideran de la siguien-


Los términos programación modular, programación descendente y programación estruc- te manera:
turada se introdujeron en la segunda mitad de la década de los sesenta y a menudo sus
términos se utilizan como sinónimos aunque no significan lo mismo. Las programacio-
nes modular y descendente ya se han examinado anteriormente. La programación es-
tructurada significa escribir un programa de acuerdo a las siguientes reglas:

• El programa tiene un diseño modular.


• Los módulos son diseñados de modo descendente.
• Cada módulo se codifica utilizando las tres estructuras de control básicas: secuen-
cia. selección y repetición.

Si está familiarizado con lenguajes como BASIC y FORTRAN, la programación es-


tructurada significa también programación sin GOTO (Pascal no requiere el uso de la sen-
tencia GOTO ).
El término programación estructurada se refiere a un conjunto de técnicas que han
ido evolucionando desde los primeros trabajos de Edsgar Dijkstra. Estas técnicas aumen-
tan considerablemente la productividad del programa reduciendo en elevado grado el
tiempo requerido para escribir, verificar, depurar y mantener los programas. La progra-
mación estructurada utiliza un número limitado de estructuras de control que minimi-
zan la complejidad de los programas y por consiguiente reducen los errores; hace los Nivel n:-desde el exterior Nivel n + 1: Vista desde el interior
"¿fo que hace?" "¿cómo lo hace?"
programas más fáciles de escribir, verificar, leer y mantener. Los programas deben estar
dotados de una estructura.
La programación estructurada es el conjunto de técnicas que incorporan:
El diseño descendente se puede ver en la Figura 1.21.
• recursos abstractos
• diser1o descendente (top-down)
• estructuras básicas

1 . 7 .1 . Recursos abstractos

La programación estructurada se auxilia de los recursos abstractos en lugar de los recur-


sos concretos de que dispone un determinado lenguaje de programación.
Descomponer un programa en términos de recursos abstractos -según Dijkstra-
consiste en descomponer una determinada acción compleja en términos de un número
de acciones más simples capaces de ejecutarlas o que constituyan instrucciones de
Figura 1.21. Diseño descendente.
computadoras disponibles.
28 Programación en Turbo/Borland Pascal 7
v a la programación
lntrodl!cción a la ciencia de las computadoras 29

1 . 7. 3. Estructuras de control 1 .8. LOS LENGUAJES PASCAL Y TURBO PASCAL


Las estructuras de control de un lenguaje de programación son métodos de especificar el
orden en que las instrucciones de un algoritmo se ejecutarán. El orden de ejecución de El (enguaje de programación Pascal es un lenguaje de alto nivel y propósito general (es
las sentencias (lenguaje) o instrucciones determinan el flujo de control. Estas estructuras aplicable a un gran número de aplicaciones diversas) desarrollado por el profesor suizo
de control son por consiguiente fundamentales en los lenguajes de programación y en los Niklaus Wirth como un lenguaje para enseñar la programación de modo (con un méto-
diseños de algoritmos especialmente los pseudocódigos. do) disciplinado sistemático. Para realizar este lenguaje, Wirth trató de eliminar las
Las tres estructuras de control básico son: inconsistencias de otros lenguajes de programación existentes en su época, y que sirviera
-como se ha comentado- para enseñar las técnicas de programación a sus alumnos.
• secuencia
U na versión preliminar del lenguaje apareció en 1968 y el primer compilador total-
• selección
mente completo apareció a finales de 1970 (en 1971, según algunos historiadores infor-
• repetición
máticos). Desde entonces muchos compiladores han sido construidos y están disponibles
y se estudian en los Capítulos 4 y 5. para diferentes máquinas. Durante muchos años, el libro Pascal User Manual and Re-
La programación estructurada hace los programas más fáciles de escribir, verificar, port (Informe y Manual del usuario, El Ateneo. Buenos Aires), publicado por Wirth y
leer y mantener; utiliza un número limitado de estructuras de control que minimizan la Kathleen Jensen en 1974, ha servido de facto como estándar de todas las versiones.
complejidad de los problemas. Las diferentes versiones ofrecían interpretaciones ligeramente diferentes que impe-
dían la compatibilidad entre ellas. Por estas razones, diferentes proyectos se iniciaron
para producir una definición estándar del lenguaje y culminaron en dos estándar: uno de
1 .7.4. Teorema de la programación estructurada: la International Standards Organization (ISO) en 1982 y otro por un comité conjunto
estructuras básicas del American National Standards Institute (ANSI) y del Institute of Electrical and E!ec-
tronics Engineers (IEEE). Estas dos versiones o definiciones se conocen como ISO
En mayo de 1966, Bóhrn y Jacopini demostraron que un programa propio puede ser
Pascal YANSI/IEEE Pascal, y difieren en algunos aspectos no especialmente significati-
escrito utilizando solamente tres tipos de estructuras de control. vos. Sin embargo, dos versiones no estándar se han popularizado considerablemente:
• secuenciales UCSD (construida por Regents of the University of California) y Turbo Pascal (marca
• selectivas registrada de Borland International, Inc.). De ellas, Turbo Pascal es sin duda la versión
• repetitivas reina y ha sido la que ha contribuido -en gran medida-- a la popularización del
lenguaje Pascal, incluso a nivel de enseñanza media.
Un programa se define como propio si cumple las siguientes características:
• Posee un solo punto de entrada y uno de salida o fin para control del programa.
• Existen caminos desde la entrada hasta la salida que se pueden seguir y que pasan
1 .8.1. Pascal
por todas las partes del programa. El lenguaje Pascal estándar presenta una serie de características que lo hacen idóneo
• Todas las instrucciones son ejecutables y no existen lazos o bucles infinitos (sin corno primero o segundo lenguaje de programación, desde el punto de vista del aprendi-
/tn) zaje y como lenguaje de propósito general para la resolución de aplicaciones de todo
Los Capítulos 4 y 5 se dedican al estudio de las estructuras de control selectivas y tipo: gestión, científicas, ingeniería, etc. Destacamos en este apartado las características
repetitivas. más sobresalientes:

• Lenguaje excelente para el aprendizaje de la programación.


Síntesis de la programación estructurada y modular • Lenguaje de propósito general.
• Lenguaje procedimental (imperativo, orientado a órdenes).
• Le~guaje estructurado (soporta las estructuras básicas whíl e, for y repeat; no ne-
cesita el uso de la sentencia gota).
• Lenguaje recursivo (soporta la recursividad: propiedad de llamarse a sí mismo una
función o procedimiento).
• Gran riqueza de tipos (fuertemente tipeado), con tipos de datos simples y estructu-
rados, así como datos definidos por el usuario.
• Producción por los compiladores de programas ejecutables rápidos y eficientes.
• Facilidad para realizar programación modular debido a la posibilidad de diseñar
subprogramas o módulos del tipo procedimiento y función.
30 Programación en Turbo/Borland Pascal 7
Introducción a la ciencia de las computadoras y a la programación 31

1 .8.2. Turbo Pascal • bajo nivel: Ensamblador.


En 1983, la firma Borland International lanzó al mercado un compilador de Pascal • máquina: Código máquina.
denominado Turbo Pascal (versión 1.0) por el notable y reducido precio de $49.95 Los programas traductores de lenguajes son:
(dólares USA), y a modo experimental. La versión fue un éxito ya que no solamente
• compiladores
jitncionaba. sino que compilaba y corr(a (ejecutaba) los programas más rápido que cual- • intérpretes
quier compilador de Pascal existente en el mercado.
La razón fundamental del éxito inicial de Turbo Pascal, no sólo residía en su bajo Turbo Pascal es un lenguaje de programación moderno que contiene excelentes características
precio, sino que ofrecía al mismo tiempo un entorno de programación (editor/ como lenguaje para aprendizaje de programación y lenguaje profesional de propósito general;
compilador) y numerosas utilidades -inexistentes en otras versiones de Pascal- como básicamente es un entorno de programación con editor y compilador incorporado; existen actual-
mente en el mercado las versiones 5.0. 5.5, 6.0 y 7.0, aunque actualmente sólo suelen comerciali-
gráficos, colores, gestionador de archivo, etc. La versión 1.0 prácticamente tuvo una zarse las versiones de Turbo y Borland 7.0; este libro trata fundamentalmente de la versión 7.0,
corta vida y pronto aparecieron las versiones 2.0 y 3.0, esencialmente esta última se pero puede ser utilizado también por los usuarios de cualquier versión anterior.
popularizó notablemente y ha sido el primero o segundo lenguaje de muchos profesiona- Un método general para la resolución de un problema con computadora tiene las siguientes
les actuales. fases:
No contento con el éxito, Borland lanzó a finales de 1987 la versión 4.0, la cual
l. Análisis del programa.
conservaba todas las peculiaridades de 3.0 con la que era compatible, pero ofrecía un
2. Diseño del algoritmo.
entorno de programación más potente y en líneas generales mejoraba considerablemente 3. Codificación.
el producto. Sin embargo, Borland siguió perfeccionando su compilador, y en 1988 4. Compilación y ejecución.
lanzó la versión 5.0, durante el año 1989 la versión 5.5, que sigue las nuevas filosofías del 5. Verificación y mantenimiento.
campo de la programación: programación orientada a objetos, y que a decir de los 6. Documentación y mantenimiento.
grandes del mundo informático es la programación del futuro. En el año 1991 comenzó
El sistema más idóneo para resolver un problema es descomponerlo en módulos más sencillos,
a comercializar la versión 6.0 y a finales del año 1992 la versión 7.O, que ha consolidado y luego, mediante diseños descendentes y refinamiento sucesivo, llegar a módulos fácilmente
la orientación a objetos, una biblioteca de objetos denominada Turbo Visión y nuevas codificables. Estos módulos se deben codificar con las estructuras de control de programación es-
propiedades del lenguaje Pascal extraídas fundamentalmente de los lenguajes Modula-2 tructurada:
V C.
, Turbo Pascal es sin lugar a dudas una herramienta de programación potente, fácil de 1. Secuenciales: las instrucciones se ejecutan sucesivamente una después de otra.
2. Repetitivas: una serie de instrucciones se repiten una y otra vez hasta que se cumple una
utilizar e idónea para el aprendizaje de profesionales o aficionados a la programación, ya
cierta condición.
que ha añadido a todas las ventajas de Pascal reseñadas anteriormente las propias del 3. Selectivas. permite elegir entre dos alternativas (dos conjuntos de instrucciones) dependien-
entorno de programación aquí citadas y las que se verán en los siguientes capítulos. do de una condición determinada.

RESUMEN
EJERCICIOS
Cna computadora es una máquina para procesar información y obtener resultados en función de
unos datos de entrada. l. Diseñar una solución para resolver cada uno de los siguientes problemas y trate de refinar sus
soluciones mediante algoritmos adecuados:
Hardware: parte física de una computadora (dispositivos electrónicos).
So/iirnre: parte lógica de una computadora (programas). a) Realizar una llamada telefónica desde un teléfono público.
b) Cocinar una tortilla.
Las computadoras se componen de: c) Arreglar un pinchazo de una bicicleta.
• Dispositivos de Entrada/Salida (E/S). dJ Averiguar si una palabra introducida desde el teclado es un palíndromo. Un pal{ndromo es
• Unidad Central de Proceso (Unidad de Control y Unidad Lógica y Aritmética). una palabra que se lee de igual manera en sentido directo y en sentido inverso; por ejemplo,
• Memoria central. "radar".
• Dispositivos de almacenamiento masivo de información (memoria auxiliar o externa). e) Freír un huevo.

El so/iware del sistema comprende. entre otros, el sistema operativo MS-DOS en computado- 2. Escribir un algoritmo para:
ras personales y los lenguajes de programación. a) Sumar dos números enteros.
Los lenguajes de programación se clasifican en: b) Restar dos números enteros.
• alto nivel: Pascal, FORTRAN, BASIC, C, Ada, Modula-2, C+, Java, etc. e) Multiplicar dos números enteros.
d) Dividir un número entero por otro.

También podría gustarte