Este libro sobre algoritmia está dirigido a cualquier persona que desee dominar los conceptos básicos esenciales de la programación. Para aprender a programar, primero hay que entender qué es realmente un ordenador, cómo funciona y, sobre todo, cómo puede ejecutar programas, cómo manipula y almacena datos e instrucciones y cuál es su lógica. Una vez entendido esto, el resto de conceptos resulta más fácil de entender: variables, pruebas, condiciones, bucles, tablas, funciones, archivos, hasta...
Este libro sobre algoritmia está dirigido a cualquier persona que desee dominar los conceptos básicos esenciales de la programación. Para aprender a programar, primero hay que entender qué es realmente un ordenador, cómo funciona y, sobre todo, cómo puede ejecutar programas, cómo manipula y almacena datos e instrucciones y cuál es su lógica. Una vez entendido esto, el resto de conceptos resulta más fácil de entender: variables, pruebas, condiciones, bucles, tablas, funciones, archivos, hasta llegar a conceptos avanzados como punteros y objetos.
En este libro, el lenguaje algorítmico (o la sintaxis del pseudocódigo de los algoritmos) sigue el estándar comúnmente utilizado en las escuelas de informática y en estudios superiores como másteres, clases preparatorias y primeros años de ingeniería, a los que este libro está en parte dirigido y recomendado.
Una vez adquiridos los conceptos básicos, el lector encontrará en este libro contenido para avanzar hacia nociones más avanzadas: dos capítulos, uno sobre punteros y referencias, y otro sobre árboles y objetos, que abren las puertas a la programación en lenguajes avanzados y potentes como C, C++, Java y PHP. Cada capítulo incluye numerosos ejercicios prácticos.
La mayoría de los algoritmos presentados en este libro se han traducido a PHP, y el código fuente, listo para ser utilizado, está disponible para su descarga en el sitio web www.ediciones-eni.com.
1.3 Representación interna de instrucciones y datos
1.3.1 El sistema binario
1.3.2 Bytes y palabras
1.3.3 Hexadecimal
2. Algoritmos
2.1 La programación es un arte
2.2 Definición: el algoritmo es una receta
2.3 ¿Por qué utilizar un algoritmo?
2.4 Formalismo
2.4.1 Representación gráfica
2.4.2 El algoritmo en forma de texto
2.5 Complejidad
2.6 Algocracia
3. Lenguajes de implementación
3.1 ¿En qué lenguaje?
3.2 Clasificaciones de los lenguajes
3.2.1 Alto y bajo nivel
3.2.2 Varias clasificaciones
3.2.3 Compilado o interpretado
3.3 La máquina virtual
3.4 PHP
3.4.1 Ventajas
3.4.2 Historia
3.4.3 Información práctica
3.4.4 Páginas dinámicas
3.4.5 Instalar lo necesario
3.4.6 Un programa PHP inicial
4. Ejercicios
Variables y operadores
1. Variables
1.1 Consideraciones iniciales
1.2 Declaración
1.3 Tipos
1.3.1 Los números
1.3.2 Otros tipos numéricos
1.3.3 Los caracteres
1.3.4 Tipo booleano
1.4 Asignación
1.4.1 Asignación de valores
1.4.2 Asignación de variables
1.5 Entrada de datos y visualización
1.6 Las constantes
2. Operadores y cálculos
2.1 Asignaciones
2.2 Operadores aritméticos
2.3 Operadores booleanos
2.4 Operadores de comparación
2.4.1 Igualdad
2.4.2 La dirección diferencia
2.4.3 Inferior, superior
2.4.4 Tie Fighter
2.5 El caso de las cadenas de caracteres
3. Para ir más allá
3.1 Números negativos
3.2 Representación de los números reales
3.3 Las fechas
3.4 Los caracteres
4. Tipos y lenguajes
4.1 Lenguajes tipados y no tipados
4.2 Gestión de la memoria
5. Ejercicios
Pruebas y lógica booleana
1. Pruebas y condiciones
1.1 Consideraciones iniciales
1.2 Qué probar
1.3 Pruebas SI
1.3.1 Forma simple
1.3.2 Forma compleja
1.4 Pruebas anidadas
1.5 Opción múltiple
1.6 Ejemplos completos
1.6.1 El día después de una cita
1.6.2 La validez de una fecha
1.6.3 La hora en n segundos
2. Álgebra booleana
2.1 El origen de las pruebas
2.2 Pequeños errores, grandes consecuencias
2.2.1 Ariane 5
2.2.2 Mars Climate Orbiter
2.3 George Boole
2.4 Álgebra
2.4.1 Establecer una comunicación
2.4.2 La verdad
2.4.3 La ley Y
2.4.4 La ley O
2.4.5 Lo contrario
2.4.6 Las propiedades
2.4.7 Algunas funciones lógicas
2.4.8 Con más de dos variables
2.5 Una última aclaración
3. Ejercicios
Los bucles
1. Estructuras iterativas
1.1 Definición
1.2 Algunos usos sencillos
2. Mientras
2.1 Estructura general
2.2 Bucles infinitos y break
2.3 Algunos ejemplos
2.3.1 Una tabla de multiplicar
2.3.2 Un factorial
2.3.3 x a la potencia y
2.3.4 Todas las tablas de multiplicar
2.3.5 Introducción de notas y cálculo de medias
2.3.6 Dar cambio
2.3.7 Tres bucles
3. Repetir ... Hasta
3.1 Diferencias fundamentales
3.2 Algunos ejemplos adecuados
3.2.1 El factorial
3.2.2 Los tres bucles
4. Para ... FinPara
4.1 Una estructura para contar
4.2 ... pero no imprescindible
4.3 ¿Qué estructura elegir?
4.4 Una trampa a evitar
4.5 Algunos ejemplos
4.5.1 Tres bucles de nuevo
4.5.2 El factorial
4.5.3 Raíz cuadrada con precisión
4.5.4 Calcular el número PI
5. Ejercicios
Tablas y estructuras
1. Presentación
1.1 Conceptos principales y definiciones
1.1.1 Simplificar las variables
1.1.2 Dimensiones
1.1.3 Tipos
1.1.4 Declaración
1.1.5 Uso
1.1.6 Tablas dinámicas
1.2 PHP y tablas
1.3 Representación n memoria
1.3.1 Representación lineal
1.3.2 Representación por referencia
2. Operaciones sencillas
2.1 Buscar un elemento
2.2 Mayor/menor, media
2.3 Tres en raya
3. Algoritmos avanzados
3.1 Algoritmos de ordenación
3.1.1 Conceptos principales
3.1.2 La ordenación por creación
3.1.3 La ordenación por selección
3.1.4 La ordenación por burbujas
3.1.5 La ordenación por inserción
3.1.6 Las ordenación Shell
3.1.7 La ordenación Batcher
3.2 Buscar por dicotomía
4. Estructuras y registros
4.1 Aspectos principales
4.2 Declaración
4.2.1 Tipo estructurado
4.2.2 Registro
4.3 Utilización de registros
4.3.1 Utilizar los campos
4.3.2 Un registro en una estructura
4.3.3 Una tabla en una estructura
4.4 Tablas de registros
4.4.1 Las tablas
4.4.2 Una tabla como campo
4.5 ¿Y PHP?
5. Ejercicios
Los subprogramas
1. Presentación
1.1 Consideraciones iniciales
1.2 Declaración y definición
1.2.1 En un algoritmo
1.2.2 En PHP
1.3 Llamada
1.4 Funciones y procedimientos
1.4.1 Procedimientos
1.4.2 Las funciones
1.5 Variables locales y globales
1.5.1 Variables locales
1.5.2 Las variables globales
1.5.3 Variables globales y PHP
1.6 Argumentos
1.6.1 Procedimientos
1.6.2 Las funciones
1.6.3 Argumentos y PHP
1.6.4 Pequeña aplicación funcional
1.7 Subprogramas predefinidos
1.7.1 Una elección importante
1.7.2 Algunos ejemplos
1.8 Último caso: las tablas
2. Subprogramas recursivos
2.1 Aspectos principales
2.2 Un primer ejemplo: el factorial
2.3 Un ejemplo práctico: las torres de Hanoi
3. Ejercicios
Los archivos
1. Los distintos archivos
1.1 Preámbulo
1.2 Problemática
1.3 Definición
1.4 Formatos
1.4.1 Tipos de contenidos
1.4.2 El archivo binario
1.4.3 El archivo de texto
1.4.4 ¿Qué formato debo utilizar?
1.5 Acceso a los archivos
1.5.1 Secuencial
1.5.2 Acceso directo
1.5.3 Indexado
1.5.4 ¿Otros?
2. Registros
2.1 Delimitadores
2.2 Anchura fija
2.3 Principios de acceso
2.3.1 Pasos básicos
2.3.2 Identificadores de archivos y canales
2.3.3 Modos de apertura
3. Archivo de texto secuencial
3.1 Abrir y cerrar un archivo
3.2 Leer y escribir registros
3.2.1 Lectura
3.2.2 Escribir
3.3 Los registros estructurados
3.4 Ejemplo PHP
4. Ejercicios
Nociones avanzadas
1. Punteros y referencias
1.1 Recordatorio sobre la memoria y los datos
1.1.1 Estructura de la memoria
1.1.2 PHP: límites que no lo son
1.1.3 Breves ejemplos en C
1.2 El puntero
1.2.1 Consideraciones principales y definición
1.2.2 C es el rey de los punteros
1.2.3 Aplicaciones
1.3 Notación algorítmica
1.3.1 Declarar y utilizar punteros
1.3.2 Asignación dinámica
1.4 PHP y referencias
1.4.1 Diferencias entre C y PHP
1.4.2 Referencias
1.4.3 Referencias a estructuras
1.4.4 La trampa de PHP
1.4.5 El valor nulo
2. Las listas enlazadas
2.1 Listas enlazadas simples
2.1.1 Aspectos principales
2.1.2 Creación
2.1.3 Examinar la lista
2.1.4 Buscar en
2.1.5 Añadir un artículo
2.1.6 Borrar un elemento
2.1.7 Borrar toda la lista
2.1.8 Recorrido recursivo
2.2 Implementación en PHP
2.3 Otros ejemplos de listas
2.3.1 Listas circulares
2.3.2 Listas de elementos ordenados
2.3.3 Listas de doble encadenamiento
2.3.4 Archivos y pilas
3. Los árboles
3.1 Aspectos principales
3.2 Definiciones
3.2.1 Base
3.2.2 Terminología
3.2.3 Descripción horizontal
3.2.4 Descripción vertical
3.2.5 El árbol binario
3.3 Recorrer un árbol
3.4 Árbol binario ordenado
3.4.1 Aspectos principales
3.4.2 Buscar un elemento
3.4.3 Añadir un elemento
3.4.4 Eliminar un nodo
3.5 Ejemplos de ordenación
3.5.1 Ordenación por fusión
3.5.2 Ordenación rápida
4. Ejercicios
El enfoque de objetos
1. Aspectos principales del objeto, un concepto obvio
1.1 Antes de continuar
1.2 Recordatorios sobre programación procedimental
1.2.1 Los datos
1.2.2 Procesamientos
1.3 El objeto
1.3.1 En la vida cotidiana
1.3.2 En informática
1.4 Clase, objetos
1.5 Declaración y acceso
1.6 Los métodos
1.7 Ámbito de los miembros
1.8 Encapsulación de datos
1.9 La herencia
1.9.1 Aspectos principales
1.9.2 Comercio
1.9.3 Jerarquía
1.9.4 Individual o múltiple
1.10 El polimorfismo
1.10.1 Aspectos principales
1.10.2 Polimorfismo ad hoc
1.10.3 Polimorfismo de herencia
1.10.4 Polimorfismo paramétrico
2. Manipulación de objetos
2.1 Los constructores
2.1.1 Declaración
2.1.2 Llamada implícita
2.1.3 La herencia
2.2 Los destructores
2.3 Los atributos estáticos
2.4 Clases y métodos abstractos
2.5 Interfaces
3. Objetos en PHP
3.1 Lenguajes objeto
3.2 Declaración de clases y objetos
3.3 Herencia
3.4 Interfaces
4. Ejercicios
Ejercicios corregidos
1. Introducción a los algoritmos
2. Variables y operadores
3. Pruebas y lógica booleana
4. Los bucles
5. Tablas y estructuras
6. Subprogramas
7. Los archivos
8. Conceptos avanzados
9. Una aproximación al objeto
índice
Olivier ROLLET
Olivier ROLLET es licenciado en Ingeniería electrónica e Informática industrial y ha trabajado durante 12 años como desarrollador en numerosos proyectos de sitios web. Actualmente es formador en el ámbito del desarrollo de nuevas tecnologías web y conoce perfectamente las expectativas de los lectores principiantes.