Programación: formalización, análisis y reutilización de algoritmos matemáticos

Programación: formalización, análisis y reutilización de algoritmos matemáticos

El presente volumen nace como respuesta a las necesidades de los estudiantes de matemáticas. No obstante, la utilidad del texto va mucho más allá: se ofrece una visión global de las herramientas formales para la construcción de programas, con especial énfasis en los algoritmos matemáticos, recogiendo el conocimiento que sobre programación formal debe tener no sólo todo matemático, sino también cualquier lector interesado en la formalización del desarrollo de sistemas informáticos. El texto presenta, además, los principales paradigmas de programación y sus lenguajes más representativos, con un tratamiento más profundo del lenguaje C. También muestra varios ejemplos del proceso completo de construcción de algoritmos, utilizando para ello los algoritmos numéricos que ofrece una librería matemática. Cada capítulo está complementado con un buen número de ejemplos, de manera que se cubren los aspectos tanto teóricos como prácticos.

  • Cover
  • ÍNDICE
  • 1. LENGUAJES DE PROGRAMACIÓN
    • 1.1. Introducción
    • 1.2. Perspectiva histórica y evolución de los lenguajes de programación
    • 1.3. Concepto de paradigma de programación
      • 1.3.1. Paradigma imperativo
      • 1.3.2. Paradigma funcional
      • 1.3.3. Paradigma lógico
      • 1.3.4. Paradigma orientado a objetos (O[sup]2[/sup])
    • 1.4. Lenguajes de programación representativos de cada paradigma
      • 1.4.1. Lenguajes imperativos: PASCAL, C
      • 1.4.2. Lenguajes funcionales: LISP
      • 1.4.3. Lenguajes lógicos: PROLOG
      • 1.4.4. Lenguajes O[sup]2[/sup]: SMALLTALK, C++
    • 1.5. Sintaxis de los lenguajes de programación
      • 1.5.1. Elementos sintácticos de un lenguaje
      • 1.5.2. Modelos de representación formal
    • 1.6. Semántica de los lenguajes de programación
    • 1.7. Propiedades de un buen lenguaje de programación
    • 1.8. Ejemplos
      • 1.8.1. Pascal
      • 1.8.2. C
      • 1.8.3. LISP
      • 1.8.4. PROLOG
  • 2. EL LENGUAJE C
    • 2.1. Introducción
    • 2.2. El entorno del lenguaje C
    • 2.3. Elementos del lenguaje C
    • 2.4. Identificadores
    • 2.5. Constantes
      • 2.5.1. Constantes simbólicas
    • 2.6. Variables
    • 2.7. Tipos de datos
      • 2.7.1. Tipos de datos simples
      • 2.7.2. Conversiones de tipos
    • 2.8. Expresiones y operadores
      • 2.8.1. Operadores aritméticos
      • 2.8.2. Operadores relaciónales
      • 2.8.3. Operadores lógicos
      • 2.8.4. Operadores de asignación
    • 2.9. Instrucciones
    • 2.10. Instrucciones de control
      • 2.10.1. Ejecución condicional: La instrucción if-else
      • 2.10.2. Ejecución repetitiva: La instrucción while
      • 2.10.3. Ejecución repetitiva: La instrucción do-while
      • 2.10.4. Ejecución repetitiva: La instrucción for
      • 2.10.5. Ejecución condicional múltiple: La instrucción switch
      • 2.10.6. La instrucción break
      • 2.10.7. La instrucción continue
    • 2.11. Funciones
      • 2.11.1. Definición de una función
      • 2.11.2. Acceso a una función
      • 2.11.3. Paso de argumentos a una función. Paso por valor y referencia
      • 2.11.4. Ambito de variables y argumentos
      • 2.11.5. Recursividad
    • 2.12. Funciones de entrada/salida: La librería estándar
      • 2.12.1. Entrada y salida estándar
      • 2.12.2. Entrada y salida con formato: scanf y printf
      • 2.12.3. Secuencias de escape
      • 2.12.4. Especificadores de conversión y de ancho de campo
    • 2.13. Vectores
      • 2.13.1. Declaración e inicialización de vectores
      • 2.13.2. Acceso alos elementos de un vector
      • 2.13.3. Asignación de vectores
      • 2.13.4. Paso de un vector como argumento de una función
      • 2.13.5. Vectores especiales: Las cadenas de caracteres
    • 2.14. Estructuras y uniones
      • 2.14.1. Definición de una estructura
      • 2.14.2. Declaración e inicialización de variables de tipo estructura
      • 2.14.3. Vectores de estructuras
      • 2.14.4. Referencias alos campos de una estructura
      • 2.14.5. Registros variables: unión
    • 2.15. Punteros y memoria
      • 2.15.1. Organización de la memoria
      • 2.15.2. Declaración de punteros
      • 2.15.3. Operadores de dirección e indirección
      • 2.15.4. Punteros y vectores
      • 2.15.5. Punteros y estructuras
      • 2.15.6. Punteros y paso de argumentos por referencia
      • 2.15.7. Punteros a funciones
      • 2.15.8. Reserva dinámica y liberación de memoria
    • 2.16. Tipos definidos por el usuario: typedef
    • 2.17. Ficheros
      • 2.17.1. Reserva del área de buffer
      • 2.17.2. Apertura de un fichero
      • 2.17.3. Lectura y escritura en un fichero
      • 2.17.4. Cierre del fichero
      • 2.17.5. Ficheros estándar en C
  • 3. EFICIENCIA DE ALGORITMOS
    • 3.1. Introducción
    • 3.2. Cálculo teórico de la eficiencia temporal. Conceptos
      • 3.2.1. Tamaño de un problema
      • 3.2.2. Principio de invarianza
      • 3.2.3. Caso peor y caso medio
      • 3.2.4. Operación elemental
    • 3.3. Medidas Asintóticas
      • 3.3.1. Notación O
      • 3.3.2. Reglas de simplificación
      • 3.3.3. Notación Ω
      • 3.3.4. Notación Θ
      • 3.3.5. Notación asintótica con varios parámetros
      • 3.3.6. Operaciones sobre notación asintótica
      • 3.3.7. Jerarquía entre los órdenes de complejidad
    • 3.4. Análisis de la eficiencia de los algoritmos
      • 3.4.1. Secuencias
      • 3.4.2. Sentencias condicionales
      • 3.4.3. Bucles para
      • 3.4.4. Bucles mientras
      • 3.4.5. Algunas sumas de series interesantes
      • 3.4.6. Instrucción crítica o barómetro
      • 3.4.7. Resolución de recurrencias
    • 3.5. Ejemplos
      • 3.5.1. Algoritmos de ordenación
      • 3.5.2. Sucesión de Fibonacci
  • 4. CONSTRUCCIÓN FORMAL DE ALGORITMOS: ESPECIFICACIÓN, VERIFICACIÓN Y DERIVACIÓN
    • 4.1. Introducción
    • 4.2. Estados de un programa. Traza
    • 4.3. Revisión de la Lógica de Primer Orden
      • 4.3.1. Sintaxis
      • 4.3.2. Sintaxis ampliada
      • 4.3.3. Semántica
      • 4.3.4. Conceptos lógicos
    • 4.4. Especificación formal de algoritmos
      • 4.4.1. Conceptos básicos: Predicado fuerte y predicado débil
      • 4.4.2. Precondiciones y postcondiciones
    • 4.5. Verificación formal de algoritmos
      • 4.5.1. Asertos
      • 4.5.2. Semántica axiomática de un lenguaje
      • 4.5.3. Verificación a posteriori de algoritmos
    • 4.6. Verificación formal de algoritmos recursivos
    • 4.7. Derivación formal de algoritmos
      • 4.7.1. Derivación de instrucciones simples
      • 4.7.2. Derivación de bucles a partir de invariantes
      • 4.7.3. Derivación de invariantes a partir de la postcondición
    • 4.8. Conclusiones
  • 5. ALGORITMOS MATEMÁTICOS. NUMERICAL RECIPES EN C
    • 5.1. Introducción
    • 5.2. Sistemas de ecuaciones lineales
      • 5.2.1. Consideraciones previas
      • 5.2.2. Eliminación de Gauss-Jordan o método del pivote
      • 5.2.3. Descomposición LU
      • 5.2.4. Mejora iterativa de soluciones a los sistemas de ecuaciones
      • 5.2.5. Descomposición en valores singulares
      • 5.2.6. Cuestiones adicionales
    • 5.3. Integración numérica de funciones
      • 5.3.1. Consideraciones previas
      • 5.3.2. Regla del trapezoide
      • 5.3.3. Regla de Simpson
      • 5.3.4. Integración de Romberg
      • 5.3.5. Integrales impropias
      • 5.3.6. Cuadratura gaussiana
    • 5.4. Algunas particularidades de Numerical Recipes
    • 5.5. Relación de problemas abordables con Numerical Recipes
  • ANEXO. SINTAXIS DEL PSEUDOCÓDIGO
  • BIBLIOGRAFÍA

SUSCRÍBASE A NUESTRO BOLETÍN

Al suscribirse, acepta nuestra Politica de Privacidad