Table Of ContentAlgoritmos y Programaci¶on
en Pascal
Crist¶obal Pareja Flores
Manuel Ojeda Aciego
A¶ngel Andeyro Quesada
Carlos Rossi Jim¶enez
Algoritmos y Programaci¶on
en Pascal
A nuestros compan~eros y alumnos
¶
Indice
Presentaci¶on xix
Tema I Algoritmos e introducci¶on a Pascal 1
Cap¶‡tulo1 Problemas, algoritmos y programas 3
1.1 Soluci¶on de problemas mediante programas : : : : : : : : : : : : 3
1.2 Concepto de algoritmo : : : : : : : : : : : : : : : : : : : : : : : : 5
1.2.1 Una deflnici¶on de algoritmo : : : : : : : : : : : : : : : : : 6
1.2.2 Una deflnici¶on formal de algoritmo : : : : : : : : : : : : : 8
1.3 Aspectos de inter¶es sobre los algoritmos : : : : : : : : : : : : : : 11
1.3.1 Computabilidad : : : : : : : : : : : : : : : : : : : : : : : 11
1.3.2 Correcci¶on de algoritmos : : : : : : : : : : : : : : : : : : 14
1.3.3 Complejidad de algoritmos : : : : : : : : : : : : : : : : : 15
1.4 Lenguajes algor¶‡tmicos y de programaci¶on : : : : : : : : : : : : : 16
1.5 Desarrollo sistem¶atico de programas : : : : : : : : : : : : : : : : 18
1.6 Conclusi¶on : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 20
1.7 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 20
1.8 Referencias bibliogr¶aflcas : : : : : : : : : : : : : : : : : : : : : : 21
Cap¶‡tulo2 El lenguaje de programaci¶on Pascal 23
2.1 Introducci¶on: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
2.2 Otros detalles de inter¶es : : : : : : : : : : : : : : : : : : : : : : : 24
2.3 Origen y evoluci¶on del lenguaje Pascal : : : : : : : : : : : : : : : 24
2.4 Pascal y Turbo Pascal : : : : : : : : : : : : : : : : : : : : : : : : 25
Cap¶‡tulo3 Tipos de datos b¶asicos 27
3.1 Introducci¶on: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 28
viii ¶Indice
3.2 El tipo integer : : : : : : : : : : : : : : : : : : : : : : : : : : : : 28
3.3 El tipo real : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 32
3.4 El tipo char : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 35
3.5 El tipo boolean : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36
3.6 Observaciones : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39
3.7 El tipo de una expresi¶on : : : : : : : : : : : : : : : : : : : : : : : 43
3.8 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43
Cap¶‡tulo4 Elementos b¶asicos del lenguaje 47
4.1 Un ejemplo introductorio : : : : : : : : : : : : : : : : : : : : : : 47
4.2 Vocabulario b¶asico : : : : : : : : : : : : : : : : : : : : : : : : : : 48
4.2.1 Constantes y variables : : : : : : : : : : : : : : : : : : : : 52
4.3 Instrucciones b¶asicas : : : : : : : : : : : : : : : : : : : : : : : : : 52
4.3.1 Asignaci¶on : : : : : : : : : : : : : : : : : : : : : : : : : : 52
4.3.2 Instrucciones de escritura : : : : : : : : : : : : : : : : : : 54
4.3.3 Instrucciones de lectura : : : : : : : : : : : : : : : : : : : 57
4.4 Partes de un programa : : : : : : : : : : : : : : : : : : : : : : : : 59
4.4.1 Encabezamiento : : : : : : : : : : : : : : : : : : : : : : : 59
4.4.2 Declaraciones y deflniciones : : : : : : : : : : : : : : : : : 60
4.4.3 Cuerpo del programa: : : : : : : : : : : : : : : : : : : : : 62
4.4.4 Conclusi¶on: estructura general de un programa : : : : : : 63
4.5 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63
Cap¶‡tulo5 Primeros programas completos 67
5.1 Algunos programas sencillos : : : : : : : : : : : : : : : : : : : : : 68
5.1.1 Dibujo de la letra ‘‘C’’ : : : : : : : : : : : : : : : : : : : : 68
5.1.2 Suma de dos nu¶meros : : : : : : : : : : : : : : : : : : : : 69
5.2 Programas claros programas de calidad : : : : : : : : : : : : : 69
)
5.3 Desarrollo descendente de programas : : : : : : : : : : : : : : : : 71
5.4 Desarrollo de programas correctos : : : : : : : : : : : : : : : : : 73
5.4.1 Estado de los c¶omputos : : : : : : : : : : : : : : : : : : : 73
5.4.2 Desarrollo descendente con especiflcaciones : : : : : : : : 78
5.5 Observaciones flnales : : : : : : : : : : : : : : : : : : : : : : : : : 79
5.6 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
¶Indice ix
Tema II Programaci¶on estructurada 83
Cap¶‡tulo6 Instrucciones estructuradas 85
6.1 Composici¶on de instrucciones : : : : : : : : : : : : : : : : : : : : 86
6.2 Instrucciones de selecci¶on : : : : : : : : : : : : : : : : : : : : : : 88
6.2.1 La instrucci¶on if-then-else : : : : : : : : : : : : : : : : : 88
6.2.2 La instrucci¶on case : : : : : : : : : : : : : : : : : : : : : 92
6.3 Instrucciones de iteraci¶on : : : : : : : : : : : : : : : : : : : : : : 94
6.3.1 La instrucci¶on while : : : : : : : : : : : : : : : : : : : : : 94
6.3.2 La instrucci¶on repeat : : : : : : : : : : : : : : : : : : : : 98
6.3.3 La instrucci¶on for : : : : : : : : : : : : : : : : : : : : : : 100
6.4 Disen~o y desarrollo de bucles : : : : : : : : : : : : : : : : : : : : 103
6.4.1 Elecci¶on de instrucciones iterativas : : : : : : : : : : : : : 103
6.4.2 Terminaci¶on de un bucle : : : : : : : : : : : : : : : : : : : 105
6.4.3 Uso correcto de instrucciones estructuradas : : : : : : : : 106
6.5 Dos m¶etodos num¶ericos iterativos : : : : : : : : : : : : : : : : : : 113
6.5.1 M¶etodo de bipartici¶on : : : : : : : : : : : : : : : : : : : : 113
6.5.2 M¶etodo de Newton-Raphson : : : : : : : : : : : : : : : : 115
6.5.3 Inversi¶on de funciones : : : : : : : : : : : : : : : : : : : : 117
6.6 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 117
Cap¶‡tulo7 Programaci¶on estructurada 123
7.1 Introducci¶on: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 123
7.2 Aspectos te¶oricos : : : : : : : : : : : : : : : : : : : : : : : : : : : 125
7.2.1 Programas y diagramas de (cid:176)ujo : : : : : : : : : : : : : : : 125
7.2.2 Diagramas y diagramas propios : : : : : : : : : : : : : : : 126
7.2.3 Diagramas BJ (de B˜ohm y Jacopini) : : : : : : : : : : : : 130
7.2.4 Equivalencia de diagramas : : : : : : : : : : : : : : : : : : 135
7.2.5 Teoremas de la programaci¶on estructurada : : : : : : : : 137
7.2.6 Recapitulaci¶on : : : : : : : : : : : : : : : : : : : : : : : : 138
7.3 Aspectos metodol¶ogicos : : : : : : : : : : : : : : : : : : : : : : : 139
7.3.1 Seudoc¶odigo : : : : : : : : : : : : : : : : : : : : : : : : : : 139
7.3.2 Disen~o descendente : : : : : : : : : : : : : : : : : : : : : : 141
7.4 Reflnamiento correcto de programas con instrucciones
estructuradas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 146
x ¶Indice
7.4.1 Un ejemplo detallado : : : : : : : : : : : : : : : : : : : : 147
7.4.2 Recapitulaci¶on : : : : : : : : : : : : : : : : : : : : : : : : 150
7.5 Conclusi¶on : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 151
7.6 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 151
7.7 Referencias bibliogr¶aflcas : : : : : : : : : : : : : : : : : : : : : : 153
Tema III Subprogramas 155
Cap¶‡tulo8 Procedimientos y funciones 157
8.1 Introducci¶on: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 158
8.2 Subprogramas con par¶ametros: : : : : : : : : : : : : : : : : : : : 162
8.2.1 Descripci¶on de un subprograma con par¶ametros : : : : : : 162
8.2.2 Par¶ametros formales y reales : : : : : : : : : : : : : : : : 165
8.2.3 Mecanismos de paso de par¶ametros : : : : : : : : : : : : : 165
8.2.4 Consistencia entre deflnici¶on y llamada : : : : : : : : : : 168
8.3 Estructura sint¶actica de un subprograma: : : : : : : : : : : : : : 169
8.4 Funcionamiento de una llamada : : : : : : : : : : : : : : : : : : : 170
8.5 A¶mbito y visibilidad de los identiflcadores : : : : : : : : : : : : : 174
8.5.1 Tipos de identiflcadores segu¶n su ¶ambito : : : : : : : : : : 174
8.5.2 Estructura de bloques : : : : : : : : : : : : : : : : : : : : 175
8.5.3 Criterios de localidad : : : : : : : : : : : : : : : : : : : : 181
8.5.4 Efectos laterales : : : : : : : : : : : : : : : : : : : : : : : 181
8.6 Otras recomendaciones sobre el uso de par¶ametros : : : : : : : : 183
8.6.1 Par¶ametros por valor y por referencia : : : : : : : : : : : 183
8.6.2 Par¶ametros por referencia y funciones : : : : : : : : : : : 183
8.6.3 Funciones con resultados mu¶ltiples : : : : : : : : : : : : : 184
8.7 Desarrollo correcto de subprogramas : : : : : : : : : : : : : : : : 184
8.8 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 186
Cap¶‡tulo9 Aspectos metodol¶ogicos de la programaci¶on con
subprogramas 189
9.1 Introducci¶on: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 189
9.2 Un ejemplo de referencia : : : : : : : : : : : : : : : : : : : : : : : 190
9.3 Metodolog¶‡a de la programaci¶on con subprogramas : : : : : : : : 192
9.3.1 Disen~o descendente con subprogramas : : : : : : : : : : : 193
¶Indice xi
9.3.2 Programa principal y subprogramas : : : : : : : : : : : : 194
9.3.3 Documentaci¶on de los subprogramas : : : : : : : : : : : : 195
9.3.4 Taman~o de los subprogramas : : : : : : : : : : : : : : : : 196
9.3.5 Reflnamiento con subprogramas y con instrucciones
estructuradas : : : : : : : : : : : : : : : : : : : : : : : : : 197
9.4 Estructura jer¶arquica de los subprogramas : : : : : : : : : : : : : 199
9.5 Ventajas de la programaci¶on con subprogramas : : : : : : : : : : 201
9.6 Un ejemplo detallado: representaci¶on de funciones : : : : : : : : 203
9.7 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 207
Cap¶‡tulo10 Introducci¶on a la recursi¶on 211
10.1 Un ejemplo de referencia : : : : : : : : : : : : : : : : : : : : : : : 212
10.2 Conceptos b¶asicos : : : : : : : : : : : : : : : : : : : : : : : : : : 213
10.3 Otros ejemplos recursivos : : : : : : : : : : : : : : : : : : : : : : 216
10.3.1 La sucesi¶on de Fibonacci : : : : : : : : : : : : : : : : : : 216
10.3.2 Torres de Hanoi : : : : : : : : : : : : : : : : : : : : : : : 216
10.3.3 Funci¶on de Ackermann : : : : : : : : : : : : : : : : : : : : 219
10.4 Correcci¶on de subprogramas recursivos : : : : : : : : : : : : : : : 219
10.4.1 Principios de inducci¶on : : : : : : : : : : : : : : : : : : : 220
10.5 Recursi¶on mutua : : : : : : : : : : : : : : : : : : : : : : : : : : : 222
10.6 Recursi¶on e iteraci¶on : : : : : : : : : : : : : : : : : : : : : : : : : 226
10.7 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 227
10.8 Referencias bibliogr¶aflcas : : : : : : : : : : : : : : : : : : : : : : 228
Tema IV Tipos de datos deflnidos por el programador 231
Cap¶‡tulo11 Tipos de datos simples y compuestos 233
11.1 Tipos ordinales deflnidos por el programador : : : : : : : : : : : 234
11.1.1 Tipos enumerados : : : : : : : : : : : : : : : : : : : : : : 235
11.1.2 Tipo subrango : : : : : : : : : : : : : : : : : : : : : : : : 238
11.2 Deflnici¶on de tipos : : : : : : : : : : : : : : : : : : : : : : : : : : 240
11.2.1 Observaciones sobre la deflnici¶on de tipos : : : : : : : : : 242
11.3 Conjuntos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 244
11.3.1 Operaciones sobre el tipo conjunto : : : : : : : : : : : : : 245
11.3.2 Observaciones sobre el tipo conjunto : : : : : : : : : : : : 247
Description:17.4.1 Recorrido de un árbol binario . tercero indica algunos detalles de Turbo Pascal en que se separa del estándar, pero que son de uso 3. Escritura del resultado. Esta primera aproximación puede expresarse en un estilo muy próximo a Pascal: Program Cálculo de hipotenusa begin. Obtener