miércoles, 15 de mayo de 2013



Algoritmia


Estudia los algoritmos.


Algoritmo: Es una secuencia precisa de operaciones (pasos) que resuelven un problema en un tiempo finito.


Propiedades:
  1. Debe Terminar.
  2. Instrucciones concretas, no ambigüedades.
  3. Debe funcionar.
  4. Eficiente y rápido. Optimizar de ser posible.
  5. 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