Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Algoritmos y Programacion en Pascal, Apuntes de Informática

Algoritmos y Programacion en Pascal. Este libro trata sobre métodos de resolución de problemas mediante el desarrollo 0de algoritmos y estructuras de datos, desde el principio y paso a paso, y su materialización en programas de computador.

Tipo: Apuntes

2013/2014

Subido el 23/07/2014

nilas_arcanister
nilas_arcanister 🇵🇪

4

(2)

1 documento

1 / 557

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Algoritmos y Programaci´on
en Pascal
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Algoritmos y Programacion en Pascal y más Apuntes en PDF de Informática solo en Docsity!

Algoritmos y Programaci´on

en Pascal

A nuestros compa˜neros y alumnos

  • Tema I Algoritmos e introducci´on a Pascal Presentaci´on xix
  • Cap´ıtulo 1 Problemas, algoritmos y programas
    • 1.1 Soluci´on de problemas mediante programas
    • 1.2 Concepto de algoritmo
      • 1.2.1 Una definici´on de algoritmo
      • 1.2.2 Una definici´on formal de algoritmo
    • 1.3 Aspectos de inter´es sobre los algoritmos
      • 1.3.1 Computabilidad
      • 1.3.2 Correcci´on de algoritmos
      • 1.3.3 Complejidad de algoritmos
    • 1.4 Lenguajes algor´ıtmicos y de programaci´on
    • 1.5 Desarrollo sistem´atico de programas
    • 1.6 Conclusi´on
    • 1.7 Ejercicios
    • 1.8 Referencias bibliogr´aficas
  • Cap´ıtulo 2 El lenguaje de programaci´on Pascal
    • 2.1 Introducci´on
    • 2.2 Otros detalles de inter´es
    • 2.3 Origen y evoluci´on del lenguaje Pascal
    • 2.4 Pascal y Turbo Pascal
  • Cap´ıtulo 3 Tipos de datos b´asicos
    • 3.1 Introducci´on
    • 3.2 El tipo integer viii ´Indice
    • 3.3 El tipo real
    • 3.4 El tipo char
    • 3.5 El tipo boolean
    • 3.6 Observaciones
    • 3.7 El tipo de una expresi´on
    • 3.8 Ejercicios
  • Cap´ıtulo 4 Elementos b´asicos del lenguaje
    • 4.1 Un ejemplo introductorio
    • 4.2 Vocabulario b´asico
      • 4.2.1 Constantes y variables
    • 4.3 Instrucciones b´asicas
      • 4.3.1 Asignaci´on
      • 4.3.2 Instrucciones de escritura
      • 4.3.3 Instrucciones de lectura
    • 4.4 Partes de un programa
      • 4.4.1 Encabezamiento
      • 4.4.2 Declaraciones y definiciones
      • 4.4.3 Cuerpo del programa
      • 4.4.4 Conclusi´on: estructura general de un programa
    • 4.5 Ejercicios
  • Cap´ıtulo 5 Primeros programas completos
    • 5.1 Algunos programas sencillos
      • 5.1.1 Dibujo de la letra ‘‘C’’
      • 5.1.2 Suma de dos n´umeros
    • 5.2 Programas claros ⇒ programas de calidad
    • 5.3 Desarrollo descendente de programas
    • 5.4 Desarrollo de programas correctos
      • 5.4.1 Estado de los c´omputos
      • 5.4.2 Desarrollo descendente con especificaciones
    • 5.5 Observaciones finales
    • 5.6 Ejercicios
  • Tema II Programaci´on estructurada ´Indice ix
  • Cap´ıtulo 6 Instrucciones estructuradas
    • 6.1 Composici´on de instrucciones
    • 6.2 Instrucciones de selecci´on
      • 6.2.1 La instrucci´on if-then-else
      • 6.2.2 La instrucci´on case
    • 6.3 Instrucciones de iteraci´on
      • 6.3.1 La instrucci´on while
      • 6.3.2 La instrucci´on repeat
      • 6.3.3 La instrucci´on for
    • 6.4 Dise˜no y desarrollo de bucles
      • 6.4.1 Elecci´on de instrucciones iterativas
      • 6.4.2 Terminaci´on de un bucle
      • 6.4.3 Uso correcto de instrucciones estructuradas
    • 6.5 Dos m´etodos num´ericos iterativos
      • 6.5.1 M´etodo de bipartici´on
      • 6.5.2 M´etodo de Newton-Raphson
      • 6.5.3 Inversi´on de funciones
    • 6.6 Ejercicios
  • Cap´ıtulo 7 Programaci´on estructurada
    • 7.1 Introducci´on
    • 7.2 Aspectos te´oricos
      • 7.2.1 Programas y diagramas de flujo
      • 7.2.2 Diagramas y diagramas propios
      • 7.2.3 Diagramas BJ (de B¨ohm y Jacopini)
      • 7.2.4 Equivalencia de diagramas
      • 7.2.5 Teoremas de la programaci´on estructurada
      • 7.2.6 Recapitulaci´on
    • 7.3 Aspectos metodol´ogicos
      • 7.3.1 Seudoc´odigo
      • 7.3.2 Dise˜no descendente
      • estructuradas 7.4 Refinamiento correcto de programas con instrucciones
      • 7.4.1 Un ejemplo detallado x ´Indice
      • 7.4.2 Recapitulaci´on
    • 7.5 Conclusi´on
    • 7.6 Ejercicios
    • 7.7 Referencias bibliogr´aficas
  • Tema III Subprogramas
  • Cap´ıtulo 8 Procedimientos y funciones
    • 8.1 Introducci´on
    • 8.2 Subprogramas con par´ametros
      • 8.2.1 Descripci´on de un subprograma con par´ametros
      • 8.2.2 Par´ametros formales y reales
      • 8.2.3 Mecanismos de paso de par´ametros
      • 8.2.4 Consistencia entre definici´on y llamada
    • 8.3 Estructura sint´actica de un subprograma
    • 8.4 Funcionamiento de una llamada
    • 8.5 Ambito y visibilidad de los identificadores´
      • 8.5.1 Tipos de identificadores seg´un su ´ambito
      • 8.5.2 Estructura de bloques
      • 8.5.3 Criterios de localidad
      • 8.5.4 Efectos laterales
    • 8.6 Otras recomendaciones sobre el uso de par´ametros
      • 8.6.1 Par´ametros por valor y por referencia
      • 8.6.2 Par´ametros por referencia y funciones
      • 8.6.3 Funciones con resultados m´ultiples
    • 8.7 Desarrollo correcto de subprogramas
    • 8.8 Ejercicios - subprogramas Cap´ıtulo 9 Aspectos metodol´ogicos de la programaci´on con
    • 9.1 Introducci´on
    • 9.2 Un ejemplo de referencia
    • 9.3 Metodolog´ıa de la programaci´on con subprogramas
      • 9.3.1 Dise˜no descendente con subprogramas
      • 9.3.2 Programa principal y subprogramas ´Indice xi
      • 9.3.3 Documentaci´on de los subprogramas
      • 9.3.4 Tama˜no de los subprogramas
        • estructuradas 9.3.5 Refinamiento con subprogramas y con instrucciones
    • 9.4 Estructura jer´arquica de los subprogramas
    • 9.5 Ventajas de la programaci´on con subprogramas
    • 9.6 Un ejemplo detallado: representaci´on de funciones
    • 9.7 Ejercicios
  • Cap´ıtulo 10 Introducci´on a la recursi´on
    • 10.1 Un ejemplo de referencia
    • 10.2 Conceptos b´asicos
    • 10.3 Otros ejemplos recursivos
      • 10.3.1 La sucesi´on de Fibonacci
      • 10.3.2 Torres de Hanoi
      • 10.3.3 Funci´on de Ackermann
    • 10.4 Correcci´on de subprogramas recursivos
      • 10.4.1 Principios de inducci´on
    • 10.5 Recursi´on mutua
    • 10.6 Recursi´on e iteraci´on
    • 10.7 Ejercicios
    • 10.8 Referencias bibliogr´aficas
  • Tema IV Tipos de datos definidos por el programador
  • Cap´ıtulo 11 Tipos de datos simples y compuestos
    • 11.1 Tipos ordinales definidos por el programador
      • 11.1.1 Tipos enumerados
      • 11.1.2 Tipo subrango
    • 11.2 Definici´on de tipos
      • 11.2.1 Observaciones sobre la definici´on de tipos
    • 11.3 Conjuntos
      • 11.3.1 Operaciones sobre el tipo conjunto
      • 11.3.2 Observaciones sobre el tipo conjunto
      • 11.3.3 Un ejemplo de aplicaci´on xii ´Indice
    • 11.4 Ejercicios
  • Cap´ıtulo 12 Arrays
    • 12.1 Descripci´on del tipo de datos array
      • 12.1.1 Operaciones del tipo array y acceso a sus componentes
      • 12.1.2 Caracter´ısticas generales de un array
    • 12.2 Vectores
    • 12.3 Matrices
    • 12.4 Ejercicios
  • Cap´ıtulo 13 Registros
    • 13.1 Descripci´on del tipo de datos registro
      • 13.1.1 Manejo de registros: acceso a componentes y operaciones
      • 13.1.2 Registros con variantes
    • 13.2 Arrays de registros y registros de arrays
    • 13.3 Ejercicios
  • Cap´ıtulo 14 Archivos
    • 14.1 Descripci´on del tipo de datos archivo
    • 14.2 Manejo de archivos en Pascal
      • 14.2.1 Operaciones con archivos
    • 14.3 Archivos de texto
    • 14.4 Ejercicios
  • Cap´ıtulo 15 Algoritmos de b´usqueda y ordenaci´on
    • 15.1 Algoritmos de b´usqueda en arrays
      • 15.1.1 B´usqueda secuencial
      • 15.1.2 B´usqueda secuencial ordenada
      • 15.1.3 B´usqueda binaria
    • 15.2 Ordenaci´on de arrays
      • 15.2.1 Selecci´on directa
      • 15.2.2 Inserci´on directa
      • 15.2.3 Intercambio directo
      • 15.2.4 Ordenaci´on r´apida (Quick Sort)
      • 15.2.5 Ordenaci´on por mezcla (Merge Sort)
      • 15.2.6 Vectores paralelos ´Indice xiii
    • 15.3 Algoritmos de b´usqueda en archivos secuenciales
      • 15.3.1 B´usqueda en archivos arbitrarios
      • 15.3.2 B´usqueda en archivos ordenados
    • 15.4 Mezcla y ordenaci´on de archivos secuenciales
    • 15.5 Ejercicios
    • 15.6 Referencias bibliogr´aficas
  • Tema V Memoria din´amica
  • Cap´ıtulo 16 Punteros
    • 16.1 Introducci´on al uso de punteros
      • 16.1.1 Definici´on y declaraci´on de punteros
      • 16.1.2 Generaci´on y destrucci´on de variables din´amicas
      • 16.1.3 Operaciones b´asicas con datos apuntados
      • 16.1.4 Operaciones b´asicas con punteros
      • 16.1.5 El valor nil
    • 16.2 Aplicaciones no recursivas de los punteros
      • 16.2.1 Asignaci´on de objetos no simples
      • 16.2.2 Funciones de resultado no simple
    • 16.3 Ejercicios
  • Cap´ıtulo 17 Estructuras de datos recursivas
    • 17.1 Estructuras recursivas lineales: las listas enlazadas
      • 17.1.1 Una definici´on del tipo lista
      • 17.1.2 Inserci´on de elementos
      • 17.1.3 Eliminaci´on de elementos
      • 17.1.4 Algunas funciones recursivas
      • 17.1.5 Otras operaciones sobre listas
    • 17.2 Pilas
      • 17.2.1 Definici´on de una pila como lista enlazada
      • 17.2.2 Operaciones b´asicas sobre las pilas
      • 17.2.3 Aplicaciones
    • 17.3 Colas
      • 17.3.1 Definici´on del tipo cola
      • 17.3.2 Operaciones b´asicas xiv ´Indice
      • 17.3.3 Aplicaci´on: gesti´on de la caja de un supermercado
    • 17.4 Arboles binarios´
      • 17.4.1 Recorrido de un ´arbol binario
      • 17.4.2 Arboles de b´´ usqueda
      • 17.4.3 Aplicaciones
    • 17.5 Otras estructuras din´amicas de datos
    • 17.6 Ejercicios
    • 17.7 Referencias bibliogr´aficas
  • Tema VI Aspectos avanzados de programaci´on
  • Cap´ıtulo 18 Complejidad algor´ıtmica
    • 18.1 Conceptos b´asicos
    • 18.2 Medidas del comportamiento asint´otico
      • 18.2.1 Comportamiento asint´otico
      • 18.2.2 Notaci´on O may´uscula (una cota superior)
      • 18.2.3 Notaci´on Ω may´uscula (una cota inferior)
      • 18.2.4 Notaci´on Θ may´uscula (orden de una funci´on)
      • 18.2.5 Propiedades de O, Ω y Θ
      • 18.2.6 Jerarqu´ıa de ´ordenes de frecuente aparici´on
    • 18.3 Reglas pr´acticas para hallar el coste de un programa
      • 18.3.1 Tiempo empleado
      • 18.3.2 Ejemplos
      • 18.3.3 Espacio de memoria empleado
    • 18.4 Utiles matem´´ aticos
      • 18.4.1 F´ormulas con sumatorios
      • 18.4.2 Sucesiones de recurrencia lineales de primer orden
      • 18.4.3 Sucesiones de recurrencia de orden superior
    • 18.5 Ejercicios
    • 18.6 Referencias bibliogr´aficas
  • Cap´ıtulo 19 Tipos abstractos de datos
    • 19.1 Introducci´on
    • 19.2 Un ejemplo completo
      • 19.2.1 Desarrollo de programas con tipos concretos de datos ´Indice xv
      • 19.2.2 Desarrollo de programas con tipos abstractos de datos
      • 19.2.3 Desarrollo de tipos abstractos de datos
    • 19.3 Metodolog´ıa de la programaci´on de TADs
      • 19.3.1 Especificaci´on de tipos abstractos de datos
      • 19.3.2 Implementaci´on de tipos abstractos de datos
      • 19.3.3 Correcci´on de tipos abstractos de datos
    • 19.4 Resumen
    • 19.5 Ejercicios
    • 19.6 Referencias bibliogr´aficas
  • Cap´ıtulo 20 Esquemas algor´ıtmicos fundamentales
    • 20.1 Algoritmos devoradores
      • 20.1.1 Descripci´on
      • 20.1.2 Adecuaci´on al problema
      • 20.1.3 Otros problemas resueltos vorazmente
    • 20.2 Divide y vencer´as
      • 20.2.1 Equilibrado de los subproblemas
    • 20.3 Programaci´on din´amica
      • 20.3.1 Problemas de programaci´on din´amica
      • 20.3.2 Mejora de este esquema
      • 20.3.3 Formulaci´on de problemas de programaci´on din´amica
    • 20.4 Vuelta atr´as
      • 20.4.1 Mejora del esquema de vuelta atr´as
    • 20.5 Anexo: algoritmos probabilistas
      • 20.5.1 B´usqueda de una soluci´on aproximada
      • 20.5.2 B´usqueda de una soluci´on probablemente correcta
    • 20.6 Ejercicios
    • 20.7 Referencias bibliogr´aficas
  • Ap´endices
  • Ap´endice A Aspectos complementarios de la programaci´on
    • A.1 Subprogramas como par´ametros
      • A.1.1 Ejemplo 1: derivada
      • A.1.2 Ejemplo 2: bipartici´on xvi ´Indice
      • A.1.3 Ejemplo 3: transformaci´on de listas
    • A.2 Variables aleatorias
      • A.2.1 Generaci´on de n´umeros aleatorios en Turbo Pascal
      • A.2.2 Simulaci´on de variables aleatorias
      • A.2.3 Ejemplos de aplicaci´on
    • A.3 Ejercicios
    • A.4 Referencias bibliogr´aficas
  • Ap´endice B El lenguaje Turbo Pascal
    • B.1 Elementos l´exicos
    • B.2 Estructura del programa
    • B.3 Datos num´ericos enteros
    • B.4 Datos num´ericos reales
    • B.5 Cadenas de caracteres
      • B.5.1 Declaraci´on de cadenas
      • B.5.2 Operadores de cadenas
      • B.5.3 Funciones de cadenas
      • B.5.4 Procedimientos de cadenas
    • B.6 Tipos de datos estructurados
    • B.7 Instrucciones estructuradas
    • B.8 Paso de subprogramas como par´ametros
    • B.9 Archivos
    • B.10 Memoria din´amica
    • B.11 Unidades
      • B.11.1 Unidades predefinidas de Turbo Pascal
      • B.11.2 Unidades definidas por el usuario
      • B.11.3 Modularidad incompleta de Turbo Pascal
  • Ap´endice C El entorno integrado de desarrollo
    • C.1 Descripci´on del entorno
    • C.2 Desarrollo completo de un programa en Turbo Pascal
      • C.2.1 Arranque del entorno
      • C.2.2 Edici´on del programa fuente
      • C.2.3 Grabar el programa fuente y seguir editando
        • C.2.4 Compilaci´on ´Indice xvii
        • C.2.5 Ejecuci´on
        • C.2.6 Depuraci´on
        • C.2.7 Salida de Turbo Pascal
      • C.3 Otros men´us y opciones
        • C.3.1 Search (B´usqueda)
        • C.3.2 Tools (Herramientas)
        • C.3.3 Options (Opciones)
        • C.3.4 Window (Ventana)
        • C.3.5 Help (Ayuda)
      • C.4 Ejercicios
      • C.5 Referencias bibliogr´aficas
    • Bibliograf´ıa
  • ´Indice alfab´etico

xx Presentaci´on

En cambio, encontramos este enfoque interesante en niveles superiores de la ense˜nanza de la programaci´on, donde interesa concentrarse en los con- ceptos, m´as dif´ıciles y donde ya no supone obst´aculo alguno expresar las ideas en cualquier lenguaje de programaci´on.

El enfoque adoptado en este libro recoge ambos aspectos: por un lado, viene a cubrir la necesidad de un enfoque metodol´ogico en el aprendizaje y en el ejercicio de la programaci´on, pero tambi´en la necesidad de experimentar con programas concretos, expresarlos en un lenguaje real y hacerlos funcionar con un traduc- tor concreto. En resumen, intentamos compaginar las ventajas de los enfoques anteriores, presentando la base conceptual y metodol´ogica necesaria para desa- rrollar los algoritmos de forma razonada y disciplinada, sin olvidar por ello la conveniencia de expresarlos en un lenguaje de programaci´on, materializ´andolos y experimentando con ellos, y que el lector ha de ser instruido tambi´en en esta tarea. En relaci´on con el enfoque metodol´ogico que se impone actualmente, se con- sidera necesario atender a la correcci´on de los programas. El tratamiento que se le da en la literatura ha llevado nuevamente a dos posturas artificialmente extremas:

  • Algunos autores ignoran completamente el estudio de la correcci´on, con- tent´andose con algunas comprobaciones para deducir que un programa es correcto.
  • En cambio, otros adoptan un tratamiento exhaustivo, utilizando t´ecnicas formales de especificaci´on o verificaci´on.

A nuestro entender, es incuestionable la importancia de garantizar que los programas desarrollados funcionar´an de la forma deseada. Sin embargo, la ve- rificaci´on formal de los programas de cierto tama˜no es impracticable. Por ello, asumimos de nuevo una posici´on intermedia y realista consistente en los siguien- tes planteamientos:

  • Plantear el desarrollo de programas correctos con el empleo de t´ecnicas semiformales.
  • Limitar el estudio de la correcci´on a los elementos que resulten delicados, bien por su dificultad o por su novedad.
  • Atender a la correcci´on de los algoritmos durante su desarrollo en lugar de a posteriori. Esta idea resulta ser una ayuda esencial en el aprendizaje de la programaci´on.

Presentaci´on xxi

En resumidas cuentas, este libro va dirigido a aqu´ellos que desean introdu- cirse en la programaci´on, con una base s´olida, con una buena metodog´ıa de dise˜no y desarrollo de programas correctos y con h´abitos disciplinados desde una perspectiva realista y pragm´atica. Se presentan las t´ecnicas con un cierto ni- vel de abstracci´on para identificar los conceptos esenciales e independientes del lenguaje de programaci´on empleado, y al mismo tiempo se aterriza expresando estas t´ecnicas en un lenguaje concreto. El lenguaje escogido para estas implementaciones ha sido Pascal. Esta elec- ci´on se debe a que este lenguaje es simple y tiene una sintaxis sencilla, que hace que sea f´acil de aprender, y al mismo tiempo es lo bastante completo como para plasmar las diferentes t´ecnicas y m´etodos necesarios en programas de com- plejidad media-alta. Esto lo hace una herramienta pedag´ogica id´onea para el aprendizaje de la programaci´on. A todo esto hay que sumar las numerosas im- plementaciones existentes y su accesibilidad, as´ı como su evoluci´on y continua puesta al d´ıa para permitir t´ecnicas de programaci´on actuales (por ejemplo, mo- dular u orientada a los objetos) y su gran difusi´on y aceptaci´on en el ´ambito acad´emico.

Organizaci´on del libro

El libro est´a estructurado en siete partes. En cada una de ellas se estudian las t´ecnicas y mecanismos nuevos, conceptualmente primero, detallando luego su tratamiento en Pascal y, finalmente, compaginando ambas facetas con el as- pecto metodol´ogico. Cada tema se ha dividido en varios cap´ıtulos para evitar una excesiva fragmentaci´on. En cada cap´ıtulo se ha incluido una lista de ejerci- cios propuestos de dificultad aproximadamente creciente. Al final de cada tema se desarrolla un ejemplo completo pensado para mostrar a la vez los aspectos m´as destacados del mismo, as´ı como unas pocas referencias comentadas que se sugieren como lecturas complementarias o de consulta.

Contenido

El contenido se ha seleccionado partiendo de las directrices se˜naladas en [DCG+89] y [Tur91]. Incluye los contenidos cursos CS1 y CS2 [GT86, KSW85] salvo los aspectos de organizaci´on de computadores, que se estudian en [PAO94], de los mismos autores que este libro. En el primer tema se presentan, entre otros, los conceptos esenciales de algo- ritmo, dato y programa. Se introduce el lenguaje Pascal y la estructura de los programas escritos en ´el, as´ı como los elementos b´asicos del lenguaje. Se incluyen