# Algoritmia y programación básica

Bienvenidos al proyecto de aprendizaje sobre algoritmia y programación básica.

## Especificaciones Curriculares

* Pre-requisitos: Ninguno.
* Post-requisito: Arquitectura del Computador, Base de Datos, Cálculo Computacional y Sistemas Operativos.

## Objetivo Terminal

Se espera que, al finalizar, el estudiante esté en capacidad de:
* Desarrollar algoritmos de mediana complejidad, utilizando herramientas algorítmicas de alto nivel y estructuras de datos estáticas, y posteriormente implementables a través de lenguajes de programación de alto nivel, para la resolución de problemas computacionales científicos y de la vida real. (hasta el Contenido Sinóptico de Tipos de Datos Abstractos)
* Construir programas que se ajusten a los estándares de calidad requeridos en la actualidad.
* Utilizar eficientemente las herramientas y técnicas para comparar soluciones algorítmicas en términos de tiempo de ejecución y cantidad de almacenamiento requerido.
* Comprender los aspectos de la programación orientada a objetos.
* Definir y modelar clases utilizando la notación UML.

## Contenido Sinóptico

| Aspectos introductorios | Computación (Definición) Reseña Histórica de la Computación, Perfil de algunas Profesiones en Computación, Computador (Definición), Organización Básica de un Computador, Sistemas de Cómputo, Evolución Histórica del Computador, Sistemas Operativos, Datos, Algoritmo, Características de un Algoritmo, Programa, Lenguaje de Programación, Compilador, Intérprete, Ensamblador, Proceso, Multiprogramación, Grado de Multiprogramación y Paradigmas de Programación. |
| Tipos de datos | Tipos de Datos (Concepto). Clasificación de los Tipos de Datos. Tipos de Datos Primitivos. Tipos de Datos Definidos por el Usuario. Tipo Intervalo. Definición de Operador. Operaciones. Tipos de Operadores. Precedencia de Operadores. |
| Constantes, variables, operadores y expresiones | Identificador, Variable, Constante, Expresión. |
| Construcción de algoritmos | Estructura de un Algoritmo. Notación Algorítmica. Acciones Algorítmicas Básicas. Acciones de Entrada/Salida. |
| Tipos estructurados | Definición de Tipos Estructurados. Declaración de Tipos Estructurados. Cadenas. Arreglos. Registros. Operaciones. |
| Acciones nominadas | Conceptos Básicos. Variables locales y globales. Ámbito de las variables. Funciones y procedimientos. Parámetros. Tipos de parámetros. Paso de parámetros. |
| Recursividad | Definición recursiva. Clasificación de la recursión. Estructura o patrón de un proceso recursivo. Análisis recurrente para la solución de problemas mediante la recursión. Seguimiento de la recursión. Eficiencia de la recursión. Problemas clásicos de recursión. |
| Backtraking | Introducción. Esquemas de Backtracking. Solución de problemas utilizando la técnica de Backtracking. |
| Análisis asintótico | Análisis asintótico de algoritmos. Notaciones asintóticas. Análisis de complejidad en tiempo de algoritmos iterativos. Análisis de complejidad en tiempo de algoritmos recursivos. Análisis de complejidad en espacio de algoritmos. |
| Estudio de algoritmos de búsqueda y ordenamiento | Introducción y marco conceptual. Búsqueda: Búsqueda Secuencial. Búsqueda Binaria. Ordenamiento: Algoritmos de ordenamiento interno. Algoritmos de ordenamiento externo. |
| Tipos de datos abstractos (TDA) | Definición y conceptos básicos. Especificación Operacional de un TDA. Diseño de un TDA. Estructuras lineales: Listas, pilas y colas. Implementación de un TDA. |
| Apuntadores | Tipo de Dato Apuntador. Operaciones con apuntadores. Manejo de memoria dinámica con apuntadores. Aplicación de los apuntadores. |
| Programación orientada a objetos | Evolución. Objetos y Clases. Abstracción. Encapsulamiento. Herencia. Métodos y Atributos. Aplicaciones. Relaciones entre clases: dependencia, agregación, herencia. Jerarquía de Clases. Polimorfismo. |
| Estructuras lineales: listas, pilas y colas | Definición. Conceptos básicos. Propiedades. Definición de Lista, Pila y Cola. Implementación Dinámica de las clases Lista, Pila y Cola.una pila es un método de estructuración de datos usando la forma LIFO (último en entrar, primero en salir), que permite almacenar y recuperar datos. |
| Estructuras multienlazadas: Matrices esparcidas y grafos dirigidos | Definición de Matriz Esparcida (Mat_Esp). Implementación de la clase Mat_Esp. Definición de Grafo. Implementación de la clase Grafo. |
| Estructuras jerárquicas: árboles | Árboles N-arios. Árboles binarios. Algoritmos de recorrido de árboles. Árboles de sintaxis. Árboles binarios de búsqueda. Árboles binarios balanceados. Árboles B. |
| Estructuras de acceso directo: Tablas de Hash | Hashing: Definición y conceptos básicos. Funciones de hashing. Colisiones. Tablas de hash. |

## Ver también

* Departamento de informática
* Facultad de Ingeniería