Angel David Perez Hernandez Programaccion 1
SD-19-30791 Ing. Alfonso Espinal
Algoritmo
Como algoritmo denominamos un conjunto ordenado y finito de operaciones simples a través del cual
podemos hallar la solución a un problema.
La palabra algoritmo proviene del latín tardío alborarismus, y este a su vez es una abreviación del
árabe clásico ḥisābu lḡubār, que significa ‘cálculo mediante cifras arábigas’.
Los algoritmos nos permiten ejecutar una acción o resolver un problema mediante una serie de
instrucciones definidas, ordenadas y finitas. Así, dado un estado inicial y una entrada, y siguiendo los
sucesivos pasos indicados, se llega al estado final y se obtiene una solución.
Características de un algoritmo
Todo algoritmo debe cumplir con estas características básicas:
Tienen inicio y fin: todo algoritmo comienza en un estado inicial con una serie de datos específicos, y
culmina con una solución o salida.
Funcionan en secuencia: un algoritmo está compuesto por una serie de pasos ordenados.
Las secuencias son concretas: cada paso es claro y no deja lugar a la ambigüedad.
Los algoritmos son abstractos: son modelos o guías para ordenar procesos.
La cantidad de pasos de un algoritmo es finita.
Ejemplos de algoritmos
Aunque es un término habitual en áreas como las matemáticas, la informática, la lógica y demás
disciplinas relacionadas, lo cierto es que en la vida cotidiana también usamos algoritmos para
solucionar cuestiones, por ejemplo
Recetas de cocina
Explican el paso a paso para crear una comida con una cantidad finita de ingredientes. El estado
inicial serían los ingredientes sin procesar y el estado final la comida preparada.
Manuales
Sirven de guía para ejecutar procesos, desde cómo armar una biblioteca hasta cómo activar un
teléfono móvil. En estos casos, el estado final es el producto armado, instalado, encendido, en
funcionamiento, etc.
Operaciones matemáticas
En matemáticas, algunos ejemplos de algoritmos son la multiplicación, en donde seguimos una
secuencia de operaciones para obtener un producto; o la división, que nos permite determinar el
cociente de dos números. El algoritmo de Euclides, con el cual sacamos el máximo común divisor de
dos enteros positivos es otro ejemplo de algoritmo.
Programación Estructurada
La programación estructurada es un paradigma de programación orientado a mejorar la claridad,
calidad y tiempo de desarrollo de un programa de computadora, utilizando únicamente subrutinas y
tres estructuras: secuencia, selección (if y switch) e iteración (bucles for y while).
Origen
A finales de los años 1970 surgió una nueva forma de programar que no solamente daba lugar a
programas fiables y eficientes, sino que además estaban escritos de manera que facilitaba su mejor
comprensión, no sólo proveyendo ventajas durante la fase de desarrollo, sino también posibilitando
una más sencilla modificación posterior.
El teorema del programa estructurado, propuesto por Böhm-Jacopini, demuestra que todo programa
puede escribirse utilizando únicamente las tres instrucciones de control siguientes:
• Secuencia
• Instrucción condicional.
• Iteración (bucle de instrucciones) con condición al principio.
Programación Modular
Uno de los métodos más conocidos para resolver un problema es dividirlo en problemas más
pequeños, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa,
resolvemos otras más sencillas y a partir de ellas llegamos a la solución. Esta técnica se usa mucho en
programación ya que programar no es más que resolver problemas, y se le suele llamar diseño
descendente, metodología del divide y vencerás o programación top-down.
Es evidente que si esta metodología nos lleva a tratar con subproblemas, entonces también tengamos
la necesidad de poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les
suele llamar módulos, de ahí viene el nombre de programación modular.
En Pascal disponemos de dos tipos de módulos: los procedimientos y las funciones.
Veamos un ejemplo de cómo emplear el diseño descendente para resolver un problema. Supongamos
que un profesor quiere crear un programa para gestionar las notas de sus alumnos. Quiere que dicho
programa le permita realizar tareas tales como asignar notas, cambiar notas, ver las notas según
distintas calificaciones, etc. A continuación tines un esquema que representa una de las posibles
divisiones del problema en módulos.
La programación modular es un paradigma de programación que consiste en dividir un programa en
módulos o subprogramas con el fin de hacerlo más legible y manejable. Se presenta históricamente
como una evolución de la programación estructurada para solucionar problemas de programación más
grandes y complejos de lo que ésta puede resolver. Al aplicar la programación modular, un problema
complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros
subproblemas más simples. Esto debe hacerse hasta obtener subproblemas lo suficientemente simples
como para poder ser resueltos fácilmente con algún lenguaje de programación. Ésta técnica se llama
refinamiento sucesivo, divide y vencerás ó análisis descendente (Top-Down).Definición y
características de un módulo
Un módulo es cada una de las partes de un programa que resuelve uno de los subproblemas en que se
divide el problema complejo original. Cada uno de estos módulos tiene una tarea bien definida y
algunos necesitan de otros para poder operar. En caso de que un módulo necesite de otro, puede
comunicarse con éste mediante una interfaz de comunicación que también debe estar bien definida. Si
bien un módulo puede entenderse como una parte de un programa en cualquiera de sus formas y
variados contextos, en la práctica se los suele tomar como sinónimos de procedimientos y funciones.
Pero no necesaria ni estrictamente un módulo es una función o un procedimiento, ya que el mismo
puede contener muchos de ellos. Características de un módulo Tamaño relativamente pequeño: Esto
facilita aislar el impacto que pueda tener la realización de un cambio en el programa, bien para
corregir un error, o bien por rediseño del algoritmo correspondiente. Independencia modular: Cuanto
más independientes son los módulos entre sí más fácil y flexiblemente se trabajará con ellos, esto
implica que para desarrollar un módulo no es necesario conocer detalles internos de otros módulos.
Como consecuencia de la independencia modular un módulo cumplirá: Características de caja negra,
es decir abstracción. Aislamiento de los detalles mediante encapsulamiento. La independencia
modular mejora el rendimiento humano, pudiendo realizarse programación en equipo y desarrollar
módulos paralelamente. También contribuye a la reutilización de software.
Breve historia de C++
C++ es un superconjunto creado a partir del lenguaje C, cuenta con todas las funcionalidades de C y
agrega funcionalidades nuevas como clases, sobrecarga de funciones, herencia entre clases, etc.
Origen
Su origen data del año 1979 y se le atribuye a Bjarne Stroustrup. El lenguaje que inspiró a Stroustrup
fue el lenguaje Simula (lenguaje usado para simulaciones), que es considerado el primer lenguaje en
permitir programación orientada a objetos. Stroustrup considero que esta funcionalidad del lenguaje
Simula era muy útil en el desarrollo de software, pero Simula era muy lento para un uso práctico.
Stroustrup comenzó a trabajar en su lenguaje llamado “C with classes” (C con clases) , su meta era
agregar programación orientada a objetos al lenguaje C. El primer compilador de este lenguaje fue
Cfront (un compilador escrito en C with classes) derivado del compilador de lenguaje C llamado
CPre, aunque en 1993 se dejaría de usar por la dificultad para agregar nuevas funciones.
En 1983 el nombre del lenguaje fue cambiado de “C with classes” a “C++”. Podemos entender con
esto la imagen que tenía Stroustrup de su lenguaje como una mejora del lenguaje “C” (al ser ++ un
incrementador de variable).
Para 1985 Stroustrup publicó su referencia al lenguaje “The C++ Programming Language” (“El
lenguaje de programación C++), el cual fue muy importante debido a la falta de estandarización del
lenguaje recién creado. En 1990 se publicó “The Annotated C++ Reference Manual” (Manual de
referencia anotada de C++) y ese mismo año salió al mercado el compilador “Turbo C++”
(desarrollado por Borland Software Corporation) que agregaba una gran cantidad de nuevas librerías
al lenguaje, ayudando a su desarrollo. El proyecto de librerías “Boost” agrego nuevas funcionalidades
al lenguaje tales como aleatorización comprehensiva y una nueva librería de tiempo.
Estandarización
En 1998 el “Comité de estándares de C++” publicó su primera estandarización internacional
ISO/IEC 14882:1998 (conocida también como C++98) la cual, al tener varios problemas, fue
actualizada en 2003 (C++03). En 2011 se terminó y publicó la nueva estandarización del lenguaje
(C++11).