Algoritmia
Estudia los algoritmos.
Algoritmo: Es una secuencia precisa de operaciones (pasos) que resuelven un problema en un tiempo finito.
Propiedades:
- Debe Terminar.
- Instrucciones concretas, no ambigüedades.
- Debe funcionar.
- Eficiente y rápido. Optimizar de ser posible.
- Independiente de computador y Lenguaje de Programación (LP).
Programa: Es
la expresión de un Algoritmo en un Lenguaje de Programación, para que
lo procese un computador, de modo que este lo compila y lo ejecuta.
¿Cómo se construye un Programa?
Análisis: ¿Qué tenemos que hacer?
Diseño: ¿Cómo vamos a hacerlo?
Codificación: Implementar Algoritmo obteniendo un Programa.
Pruebas: Probar que el Programa no falla, funciona en todos los casos posibles.
Documentación y Mantenimiento: Se elabora la Documentación del Programa y se realiza las actualizaciones oportunas que se vayan necesitando.
Herramientas para crear Algoritmos
Todas las herramientas expresan la solución al Problema planteado.
Algoritmos narrados, Diagrama N-S,Seudocódigo y Diagramas de Flujo
Algoritmos narrados: Utilizando el lenguaje natural se expresan las soluciones con pasos.
Diagrama N-S: Diagrama Nassi-Shneiderman (o NSD por sus siglas en inglés) es una representación gráfica que muestra el diseño de un programa estructurado. Ejercicios.
Diagrama de Flujo: Es
la representación gráfica del Algoritmo mediante una serie de símbolos
que en su interior tiene las órdenes, y se unen con flechas.
Seudocódigo:
es la representación narrativa (no hay reglas sintácticas estrictas) de
un algoritmo, escrita en lenguaje natural utilizando las estructuras de
control típicas de algún Lenguaje de Programación y algunos símbolos
algebraicos.
Los más usados son Diagrama de Flujo y Seudocódigo.
Estructuras de control Son las deciden qué camino hay que seguir en función de una condición. Son las siguientes:
Estructura secuencial: consiste en colocar una instrucción tras otra, de manera que se van ejecutando de arriba abajo.
Estructura selectiva o condicional (si, si no): permiten ejecutar un conjunto de instrucciones u otras en función de si se cumple o no una condición
Estructura iterativa o de repetición (mientras, repetir, para): permite repetir una instrucción o grupo de ellas un nº fijo de veces o mientras (o hasta que) una condición sea cierta.
Resolución de un Problema
ESTRUCTURA BASICA DE UN ALGORITMO
En esencia un algoritmo está constituido por los siguientes tres elementos:
¿Cuándo se tiene un Problema?
Se tiene un problema cuando se desea encontrar uno o varios objetos desconocidos (ya sean estos números, diagramas, figuras, demostraciones, decisiones, posiciones, algoritmos, u otras cosas), que cumplen condiciones y/o relaciones, previamente definidas, respecto a uno o varios objetos conocidos. De esta manera, solucionar un problema es encontrar los objetos desconocidos de dicho problema.
Clasificación de los Problemas
Los problemas se clasifican por la existencia de una solución en solubles, no solubles e indecidible.Un problema se dice SOLUBLE si se sabe de antemano que existe una solución para él.Un problema se dice INSOLUBLE si se sabe que no existe una solución para él.Un problema se dice INDECIDIBLE si no se sabe si existe o no existe solución para él.
A su vez, los problemas solubles se dividen en dos clases: los algorítmicos y los no algorítmicos.Un problema se dice ALGORÍTMICO si existe un algoritmo que permita darle solución.Un problema se dice NO ALGORÍTMICO si no existe un algoritmo que permita encontrar su solución.
Ejemplos
Ejemplo 1:
Un granjero tiene cincuenta animales entre conejos y gansos. Si la
cantidad de pies de los animales es ciento cuarenta, ¿cuántos conejos y
cuantos gansos tiene el granjero?
OBJETOS DESCONOCIDOS
|
La cantidad de conejos y la cantidad de gansos.
|
OBJETOS CONOCIDOS
|
La cantidad total de animales, cantidad de pies totales.
|
CONDICIONES
|
La
suma de los conejos y los gansos es igual a cincuenta. La suma de los
pies de los conejos (cuatro por cada uno) y de los gansos (dos por cada
uno) es igual a ciento cuarenta.
|
TIPO DE PROBLEMA
|
Soluble-algorítmico.
|
Ejemplo 2:
Realizar la suma de los siguientes números: 1245893467 y 3464895786.
OBJETOS DESCONOCIDOS
|
Un número natural.
|
OBJETOS CONOCIDOS
|
Dos números naturales 1245893467 y 3464895786.
|
CONDICIONES
|
El número desconocido es igual a la suma de los dos números dados.
|
TIPO DE PROBLEMA
|
Soluble-algorítmico.
|
Ejemplo 3:
Una partícula se mueve en el espacio de manera aleatoria, si en el instante de tiempo t se encuentra en la posición x, ¿cuál será la posición exacta de dicha partícula 10 segundos después?
OBJETOS DESCONOCIDOS
|
Una posición.
|
OBJETOS CONOCIDOS
|
Posición en el instante de tiempo t.
|
CONDICIONES
|
La partícula se mueve en el espacio de manera aleatoria.
|
TIPO DE PROBLEMA
|
Insoluble.
No se puede solucionar por que no existe forma de predecir la posición
de la partícula, pues su movimiento es aleatorio, es decir, se mueve de
manera arbitraria.
|
PARADIGMAS DE PROGRAMACIÓN
Son:
Por Procedimientos (Imperativo o Procedimental), Modular, Declarativa,
Dirigida por Eventos, Orientación a Objetos, Multiparadigma.
PROGRAMACIÓN POR PROCEDIMIENTOS
Es
el paradigma original de programación y quizá todavía el de uso más
común. En él, el programador se concentra en el procesamiento, en el
algoritmo requerido para llevar a cabo el cómputo deseado.
Los
lenguajes apoyan este paradigma proporcionando recursos para pasar
argumentos a las funciones y devolviendo valores de las funciones,
define tipo de datos, cambio de estado de variables, pasos de ejecución
de un proceso, .... Fortran es el lenguaje de procedimientos original, Pascal y C son inventos posteriores que siguen la misma idea. La programación estructurada se considera como el componente principal de la programación por procedimientos.
PROGRAMACIÓN ESTRUCTURADA
La
programación estructurada es un estilo de programación en el cual, la
estructura de un programa se hace tan clara como sea posible utilizando
SUBRUTINAS y tres estructuras (son las estructuras de control que
tratamos previamente):
1. Secuencia Simple
2. Selección
3. Iteración
Estos
tres tipos de estructuras de control pueden combinarse para producir
programas con cualquier tipo de información que se vaya a procesar.
Un
programa estructurado tiene como característica que puede leerse de
arriba hacia abajo lo que hace que el programa sea más fácil de leer y
comprender por otros programadores facilitando así su mantenimiento.
PROGRAMACIÓN MODULAR
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).
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, no debe
confundirse el término "modulo" (en el sentido de programación modular)
con términos como "función" o "procedimiento", propios del lenguaje que
lo soporte.
PROGRAMACIÓN DECLARATIVA
Es
un estilo de programación en el que el programador especifica qué debe
computarse especificando o “declarando” un conjunto de condiciones,
proposiciones, afirmaciones, restricciones, ecuaciones o
transformaciones que describen el problema y detallan su solución.
Se
dice que los lenguajes declarativos tienen la ventaja de ser razonados
matemáticamente, lo que permite el uso de mecanismos matemáticos para
optimizar el rendimiento de los programas.
Lenguajes como Prolog, SQL Y Haskell soportan este PP.
Dentro
de este Paradigma tenemos Programación: Lógica, Funcional, con
restricciones, programas DSL (de dominio específico) e híbridos.
La programación funcional se basa en el concepto de función
(que no es más que una evolución de los predicados), de corte más
matemático. La programación lógica gira en torno al concepto de predicado, o relación entre elementos.
Lógica: Definición de reglas
Ej:
padrede('juan', 'maria'). % juan es padre de maria
padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela'). ??
padrede('carlos', 'debora'). ??
DIRIGIDA POR EVENTOS
La programación dirigida por eventos es un paradigma de programación
en el que tanto la estructura como la ejecución de los programas van
determinados por los sucesos que ocurran en el sistema, definidos por el
usuario o que ellos mismos provoquen.
Para entender la programación dirigida por eventos, podemos oponerla a lo que no es: mientras en la programación secuencial (o estructurada)
es el programador el que define cuál va a ser el flujo del programa, en
la programación dirigida por eventos será el propio usuario —o lo que
sea que esté accionando el programa— el que dirija el flujo del
programa. Aunque en la programación secuencial puede haber intervención
de un agente externo al programa, estas intervenciones ocurrirán cuando
el programador lo haya determinado, y no en cualquier momento como puede
ser en el caso de la programación dirigida por eventos.
El
creador de un programa dirigido por eventos debe definir los eventos
que manejarán su programa y las acciones que se realizarán al producirse
cada uno de ellos, lo que se conoce como eladministrador de evento. Los eventos soportados estarán determinados por el lenguaje de programación utilizado, por el sistema operativo e incluso por eventos creados por el mismo programador.
En
la programación dirigida por eventos, al comenzar la ejecución del
programa se llevarán a cabo las inicializaciones y demás código inicial y
a continuación el programa quedará bloqueado hasta que se produzca
algún evento. Cuando alguno de los eventos esperados por el programa
tenga lugar, el programa pasará a ejecutar el código del correspondiente
administrador de evento.
Por ejemplo, si el evento consiste en que el usuario ha hecho click en
el botón de play de un reproductor de películas, se ejecutará el código
del administrador de evento, que será el que haga que la película se muestre por pantalla.
Un ejemplo claro lo tenemos en los sistemas de programación Lexico y Visual Basic,
en los que a cada elemento del programa (objetos, controles, etcétera)
se le asignan una serie de eventos que generará dicho elemento, como la
pulsación de un botón del ratón sobre él o el redibujado del control.
La programación dirigida por eventos es la base de lo que llamamos interfaz de usuario, aunque puede emplearse también para desarrollar interfaces entre componentes de Software o módulos del núcleo.
ORIENTADO A OBJETOS
sds
El
Paradigma de Programación más usado es el Orientado a Objeto, y por
defecto también se incorpora dentro de este la Programación
Procedimental.
MULTIPARADIGMA
Existen Lenguajes de Programación
que permiten utilizar mas de un paradigma para crear un programa, esto
debido a que no siempre un solo paradigma satisface las necesidades para
resolver un problema, de hay de la necesidad de utilizar mas de uno
solo.
Por ejemplo: PHP (a patir de su versión 5 ), C++ o Visual Basic permiten utilizar dos paradigmas, el Imperativo y elOrientado a Objetos.
En algunos Lenguajes de Programación como PHP, es posible utilizar solo la Programación Imperativa o mejor conocida como Procedimental,
para poder crear un programa totalmente funcional, y esta bien, pero
utilizar un PP como los mencionados aqui(menos el Imperativo,claro) nos
pueden ayudar a ser mas eficientes en el trabajo de programación,
ademas, tambien ser un mas profesionales, un beneficio tanto para
nosotros, como para el programa a crear, y esto es algo en lo que muchos
programadores concuerdan.
No hay comentarios:
Publicar un comentario