viernes, 23 de abril de 2010

CARACTERISTICAS DE UN ALGORITMO


CARACTERISTICAS DE UN ALGORITMO
      Las características fundamentales que debe cumplir todo algoritmo son:
  • Ser definido: Sin ambigüedad, cada paso del algoritmo debe indicar la acción a realizar sin criterios de interpretación.
  • Ser finito: Un número específico y numerable de pasos debe componer al algoritmo, el cual deberá finalizar al completarlos.
  • Tener cero o más entradas: Datos son proporcionados a un algoritmo como insumo (o estos son generados de alguna forma) para llevar a cabo las operaciones que comprende.
  • Tener una o más salidas: Debe siempre devolver un resultado; de nada sirve un algoritmo que hace algo y nunca sabemos que fue. El devolver un resultado no debe ser considerado como únicamente “verlos” en forma impresa o en pantalla, como ocurre con las computadoras. Existen muchos otros mecanismos susceptibles de programación que no cuentan con una salida de resultados de esta forma. Por salida de resultados debe entenderse todo medio o canal por el cual es posible apreciar los efectos de las acciones del algoritmo.
  • Efectividad: El tiempo y esfuerzo por cada paso realizado debe ser preciso, no usando nada más ni nada menos que aquello que se requiera para y en su ejecución.

¿QUE ES UN ALGORITMO?

¿QUE ES ALGORITMO?
Podemos encontrar muchas definiciones de algoritmo en los textos de programación, todas ellas muy similares:
  • Conjunto ordenado y finito de pasos que permite hallar la solución de un problema.
  • Una secuencia de pasos que conducen a la realización de una tarea.
  • Descripción exacta de la secuencia en que se ha de realizar un conjunto de actividades tendientes a resolver un determinado tipo de problema o procedimiento.
  • Conjunto de sentencias / instrucciones en lenguaje nativo, los cuales expresan la lógica de un programa.
  • Es un sistema por el cual se llega a una solución, teniendo en cuenta que debe de ser definido, finito y preciso.
  • Toda receta, proceso, rutina, método, procedimiento, técnica, formula que resuelven un determinado problema.
  • Conjunto de instrucciones concretas y detalladas mediante el cual se consigue una acción determinada.
  • Conjunto de reglas que permiten obtener un resultado determinado a partir de ciertas reglas definidas.
  • Descripción precisa de una sucesión de instrucciones que permite llevar a cabo un trabajo en un número finito de pasos.
  • Un conjunto de símbolos y procedimientos usados en la realización de un cálculo.
Las definiciones más completas o formales:
  • Secuencia finita de instrucciones, reglas o pasos que describen de forma precisa las operaciones de un ordenador debe realizar para llevar a cabo un tarea en un tiempo más finito.
  • Descripción de un esquema de comportamiento expresado mediante un reportorio finito de acciones y de informaciones elementales, identificadas, bien comprendidas y realizables. Este repertorio se denomina léxico
  • Un algoritmo es un conjunto finito de pasos definidos, estructurados en el tiempo y formulados con base a un conjunto finito de reglas no ambiguas, que proveen un procedimiento para dar la solución o indicar la falta de esta a un problema en un tiempo determinado.

PASOS QUE INTEGRAN EL PROCESO DE PROGRAMACION


PASOS QUE INTEGRAN EL PROCESO DE PROGRAMACION
1. Definición del problema
Requiere que el problema sea definido y comprendido claramente para que pueda ser analizado con todo detalle.
2. Análisis del problema
El propósito del análisis de un problema es ayudar al programador para llegar a una cierta comprensión de la naturaleza del problema. El problema debe estar bien definido si se desea llegar a una solución satisfactoria.
Para poder definir con precisión el problema se requiere que las especificaciones de entrada, proceso y salida sean descritas con detalles.
  Entrada, son todos los datos que hay que ingresar para la resolución del problema.
  Proceso, son los diferentes procedimientos en los cuales usare los datos proporcionados por el usuario en el paso anterior para resolver el problema.
  Salida, la resolución del problema.
Una buena definición del problema, junto con una descripción detallada de las especificaciones de entrada y salida, son los requisitos mas importantes para llegar a una solución eficaz.
El análisis del problema exige una lectura previa del problema a fin de obtener una idea general de lo que se solicita . la segunda lectura deberá servir para responder a las preguntas:
·         ¿Qué información debe proporcionar la resolución del problema?
·         ¿Qué datos se necesitan para resolver el problema?
La respuesta a la primera pregunta indicara los resultados deseados o las salidas del problema. La respuesta a la segunda pregunta indicara que datos proporcionan o las entradas del problema.
En esta fase debemos aprender a analizar la documentación de la empresa , investigar, observar todo lo que rodea el problema.
3. Diseño de la solución
Una computadora no tiene la capacidad para solucionar mas que cuanto se le proporcionan los sucesivos pasos a realizar. Estos pasos sucesivos que indican las instrucciones a ejecutar por la maquina constituyen, como ya sabemos el algoritmo.
La información proporcionada al algoritmo constituye su entrada y la información producida por el algoritmo constituye su salida.
Los problemas complejos se pueden resolver mas eficazmente con la computadora cuando se rompen en subproblemas que sean mas fáciles de solucionar que el original. La descomposición del problema original en subproblemas mas simples y a continuación dividir estos subproblemas en otros mas simples que puedan ser implementados para su solución en la computadora de denomina diseño descendente (top - Down design ).
Es preciso representar el algoritmo mediante una determinada herramienta de programación: diagramas de flujo, pseudocódigo o diagramas N - S.
4. Codificación
Es el algoritmo traspasado a la computadora a través de un lenguaje de programación,
Debe ser escrito de acuerdo a las reglas gramaticales o sintaxis del mismo.
Generamos un algoritmo el cual se denomina código, y al pasarlo a un lenguaje de programación se le llama código fuente.
5. Compilación y ejecución
Compilación, el lenguaje de programación seleccionado revisa que ya no halla errores en el código fuente.
Ejecución, ejecutar el programa después del ser compilado.
6. Verificación y pruebas
Revisar que el programa de los resultados que el usuario quiere, hay que revisar si hay algún error el cual puede ser de tipo lógico, de semántica o ejecución.
7. Depuración
Corregir los errores encontrados en la etapa anterior, si hubiese algún error se tiene que regresar hasta la etapa que sea necesaria para que la solución sea la que el usuario requiere.
8. Documentación
Son todos los comentarios, referencias desde que se dio el problema hasta que se encontró la solución.
a) documentación interna, es el encabezado, descripción, declaración del problema, son todos los comentarios que puedan llegar a servir dentro del código fuente.
b) documentación externa, son los manuales que se hacen para una mejor ejecución del programa, ahí se explicara como usar el programa.
9. Capacitación
Una ves que tenemos lo manuales viene la capacitación de usuarios, como no a todos les interesa los mismo porque hay diferentes tipos de usuarios, se tienen que dividir de acuerdo a sus conveniencias.
10. Implantación o implementación del sistema
Hay diferentes formas de implementar el sistema:
·         Depende del tamaño del sistema
·         Si existiera un sistema se tiene que poner el nuevo y quitar el que ya estaba.
·         Trabajar primero con el sistema viejo (si existe), y después empezar a trabajar con el nuevo.
·         Sistemas implantados por regiones.
·         Trabajar con el sistema viejo (si existe) y con el sistema nuevo simultáneamente después quitar el sistema viejo.
·         Ir quitando el sistema viejo (si existe) poco a poco e ir implantando el sistema nuevo.
11. Mantenimiento
El mantenimiento preventivo es que hagamos lo posible por no caer en errores, la actualización si el usuario tiene la necesidad de quitar o poner algo; téngase en cuenta que cuando surge mantenimiento tenemos que volver a hacer todos los pasos anteriores revisando que todas la condiciones sean favorables alrededor del sistema.

CARACTERISTICAS DEL LENGUAJE DE PROGRAMACION


CARACTERISTICAS DE LOS LENGUAJES DE PROGRAMACION

A diferencia de lenguajes de programación descendientes de C, Pascal utiliza:= para asignamiento en vez de =. Esto es una ventaja en diferenciar comparaciones y asignamientos. En C = = es comparación, pero = es una asignación. Esas pueden ser fáciles de confundir resultando en una línea de asignamiento en vez de comparación. También = tiene siempre siendo comparación en matemáticas, así a cambiar el significado en un lenguaje de programación resulta en confusión. Esta sintaxis conduce a muchos errores  difíciles de rastrear en código C. Desde que Pascal no permite asignamientos en línea y utiliza sintaxis distinta para asignamientos y comparaciones, esto no sufre de esos errores.
Otra mayor diferencia es que Pascal se determina el tipo fuertemente. Esto significa que toda variable debe ser definida con un tipo específico antes que puedan ser usadas. También, asignamientos de variable incompatibles no son permitidas sin un tipo explicito. Esto previene errores comunes donde variables son usadas incorrectamente por que el tipo es desconocido. Esto también aliviana la necesidad de notación húngara - la práctica de nombres de variables sufijos con tipo- identificando letras.
Propiedades
  • Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).
  • Un sistema de tipos que impide operaciones sin sentido.
  • Usa un lenguaje de preprocesador, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente.
  • Interrupciones al procesador con uniones.
  • Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.
  • Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un preprocesador que traducía código fuente de C++ a C.
  • Encapsulación.
  • Funciones anidadas, aunque GCC tiene esta característica como extensión.
  • Soporte nativo para programación multihilo y redes de computadores.
Aunque la lista de las características útiles de las que carece C es larga, este factor ha sido importante para su aceptación, porque escribir rápidamente nuevos compiladores para nuevas plataformas, mantiene lo que realmente hace el programa bajo el control directo del programador, y permite implementar la solución más natural para cada plataforma. Ésta es la causa de que a menudo C sea más eficiente que otros lenguajes. Típicamente, sólo la programación cuidadosa en lenguaje ensamblador produce un código más rápido, pues da control total sobre la máquina, aunque los avances en los compiladores de C y la complejidad creciente de los microprocesadores modernos han reducido gradualmente esta diferencia.
En algunos casos, una característica inexistente puede aproximarse. Por ejemplo, la implementación original de C++ consistía en un preprocesador que traducía código fuente C++ a C. La mayoría de las funciones orientadas a objetos incluyen un puntero especial, que normalmente recibe el nombre "this", que se refiere al objeto al que pertenece la función. Mediante el paso de este puntero como un argumento de función, esta funcionalidad puede desempeñarse en C.
Ada                 - Objetos, Imperativo híbrido   http://labsopa.dis.ulpgc.es/ada/
         Smalltalk          - Objetos puro             http://www.smalltalk.org/
         Java                 - Objetos, Imperativo híbrido   http://www.java.org/
         C++                - Objetos, Imperativo, Hipertexto híbrido        http://www.masternet.com.co/prod/delphi.htm
          Delphi              - Objetos, Imperativo híbrido   http://www.masternet.com.co/prod/delphi.htm
          Ocaml              - Objetos, Imperativo y Funcional híbrido        http://www.ocaml.org/
           Haskell            - Funcional puro          http://www.haskell.org/
            Lisp                 - Funcional híbrido       http://www.lisp.org/
            Prolog              - Lógico puro   http://www.prolog.org/
            Perl                  - Objetos, Imperativo, Hipertexto, Expresiones Regulares   híbrido       http://www.perl.org/
            PHP                - Imperativo, Hipertexto, híbrido          http://www.php.org/
            SQL                - Lenguaje Declarativo, Expresiones Regulares            http://www.sql.org/
            UML               - Lenguaje Modelado  http://www.uml.org/
Para cada lenguaje seleccionando su nombre podrás ver su historia y características y a la derecha tienes un link el sitio te brinda todo.