Pascal 7.0
Pascal 7.0
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
ISBN: 84-481-1075-7
Depósito legal: M. 3.591-1999
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
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
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
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.
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
1
2 Programación en Turbo/Borland Pascal 7 Introducción a la ciencia de las computadoras v a la programación 3
COMPUTADORA
Dispositivos Dispositivos
Memoria
de de
central
entrada salida
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
,,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}.
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.
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.
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.
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:
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á
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
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. 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.
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.
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? ,
1 . 7 .1 . Recursos abstractos
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.