FASES DE LA RESOLUCION DE UN PROGRAMA.
El proceso de resolución de un problema con una computadora conduce a la escritura de un programa y a su ejecución en la misma.
Las fases de resolución de un programa con computadora son:
ANALISIS DEL PROBLEMA.
El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente o por la persona que encarga el programa. Requiere una clara definición, donde se contemple exactamente lo que debe hacer el programa y el resultado o solución deseada.
Para poder identificar y definir bien un problema es conveniente responder a las siguientes preguntas:
Ø ¿Qué entradas se requieren? (tipo de datos con los cuales se trabaja y cantidad).
Ø ¿Cuál es la salida deseada? (tipo de datos de los resultados y cantidad).
Ø ¿Qué método produce la salida deseada?
Ø Requisitos o requerimientos adicionales y restricciones a la solución.
DISEÑO DEL ALGORITMO.
Se determina como hace el programa la tarea solicitada. Los métodos mas eficaces para el proceso de diseño se basan en el conocido divide y vencerás. El proceso implica la ejecución de los siguientes pasos hasta que el programa se termine:
Ø programar un modulo.
Ø Comprobar el modulo.
Ø Si es necesario, depurar el modulo.
Ø Combinar el modulo con los módulos anteriores.
El proceso que convierte los resultados del análisis del problema en un diseño modular con refinamientos sucesivos que permitan una posterior traducción a un lenguaje se denomina diseño del algoritmo.
El diseño del algoritmo es independiente del lenguaje de programación en el que se vaya a codificar.
HERRAMIENTAS DE PROGRAMACION.
Las dos herramientas más utilizadas para diseñar algoritmos son: diagramas de flujo y pseudocódigos.
Un diagrama de flujo es una presentación grafica de un algoritmo. Los símbolos utilizados han sido normalizados por ANSI
El pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de programación pero con algunas convenciones del lenguaje natural. Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco espacio que se requiere para representar instrucciones complejas. El pseudocódigo no está regido por ningún estándar. pseudo viene de falso y por ende es un código al que aunque es entendible no se aplica al proceso que debe realizar la maquina.
El pseudocódigo que resuelve el Problema 2.1 es:
Previsiones de depreciación
Introducir coste
vida útil
valor final de rescate (recuperación)
imprimir cabeceras
Establecer el valor inicial del Año
Calcular depreciación
mientras valor año =<>
CODIFICACION DE UN PROGRAMA.
Es la escritura en un lenguaje de programación de la presentación del algoritmo desarrollada en etapas precedentes. Dado que el diseño de un algoritmo es independiente del lenguaje de programación utilizado para su implementación, el código puede ser escrito con igual facilidad en un lenguaje o en otro.
Para realizar la conversación del algoritmo en programa se deben sustituir las palabras reservadas en español por sus homónimos en ingles, y las operaciones/instrucciones indicadas en lenguaje natural expresarlas en el lenguaje correspondiente.
COMPILACION Y EJECUCION DE UN PROGRAMA.
Una vez que el algoritmo se ha convertido en un programa fuente, es preciso introducirlo en memoria mediante el teclado y almacenarlo posteriormente en un disco. Esta operación se realiza con un programa editor. Posteriormente el programa fuente se convierte en un archivo de programa que se guarda (graba) en disco.
El programa fuente debe ser traducido a lenguaje maquina, este proceso se realiza con el compilador y el sistema operativo que se encarga prácticamente de la compilación.
Si tras la compilación se presentan errores (errores de compilación) en el programa fuente, es preciso volver a editar el programa, corregir los errores y compilar de nuevo. Suponiendo que no existen errores en el programa fuente, se debe instruir al sistema operativo para que realice la fase de montaje o enlace (link), carga, del programa objeto con las bibliotecas del programa del compilador. El proceso de montaje produce un programa ejecutable.
VERIFICACION Y DEPURACION DE UN PROGRAMA.
La verificación o compilación de un programa es el proceso de ejecución del programa con una amplia variedad de datos de entrada, llamados datos de test o prueba, que determinan si el programa tiene errores (<>).
Para realizar la verificación se debe desarrollar una amplia gama de datos de test: valores normales de entrada, valores extremos de entrada que comprueben los limites del programa y valores de entrada que comprueben aspectos especiales del programa.
La depuración es el proceso de encontrar los errores del programa y corregir o eliminar dichos errores. Cuando se ejecuta un programa, se pueden producir 3 tipos de errores:
Ø Errores de compilación. Se producen normalmente por uso incorrecto de las reglas del lenguaje de programación y suelen ser errores de sintaxis. Si existe un error de sintaxis, la computadora no puede comprender la instrucción, no se obtendrá el programa objeto y el compilador imprimirá una lista de todos los errores encontrados durante la compilación.
Ø Errores de ejecución. Estos errores se producen por instrucciones que la computadora puede comprender pero no ejecutar. Ejemplos típicos son: división por cero y raíces cuadradas de números negativos. En estos casos se detiene la ejecución del programa y se imprime un mensaje de error.
Ø Errores lógicos. Se producen en la lógica del programa y la fuente del error suele ser el diseño del algoritmo. Estos errores son los mas difíciles de detectar, ya que el programa puede funcionar y no producir errores de compilación ni de ejecución, y solo puede advertirse el error por la obtención de resultados incorrectos. En este caso se debe volver a la fase de diseño del algoritmo, modificar el algoritmo, cambiar el programa fuente y compilar y ejecutar una vez más.
DOCUMENTACION (SOLO PARA SISTEMA ROBUSTO).
La documentación de un problema consta de las descripciones de los pasos a dar en el proceso de resolución del problema. La importancia de la documentación debe ser descatada por su decisiva influencia en el producto final.
La documentación de un programa puede ser interna y externa. La documentación interna es la contenida en líneas de comentarios. La documentación externa incluye análisis, diagrama de flujo y/o pseudocódigos, manuales de usuario con instrucciones para ejecutar el programa y para interpretar los resultados.
La documentación es vital cuando se desea corregir posibles errores futuros o bien cambiar el programa. Tales cambios se denominan mantenimiento del programa.
CONCEPTOS DE:
PROGRAMACION MODULAR.
La programación modular es uno de los métodos de diseño más flexible y potente para mejorar la productividad de un programa. En programación modular el programa se divide en módulos (partes independientes), cada uno de las cuales ejecuta una única actividad o tarea y se codifican independientemente de otros módulos. Cada uno de estos módulos se analiza, codifica y pone a punto por separado. Cada programa contiene un modulo denominado programa principal que controla todo lo que sucede; se transfiere el control a submodulos o subprogramas, de modo que ellos puedan ejecutar sus funciones.
PROGRAMACION ESTRUCTURADA
La programación estructurada significa escribir un programa de acuerdo a las siguientes reglas:
Ø El programa tiene un diseño modular.
Ø Los módulos son diseñados de modo descendente.
Ø Cada modulo se codifica utilizando las tres estructuras de control básico: secuencia, selección y repetición.
El termino programación estructurada se refiere a un conjunto de técnicas. Estas técnicas aumentan considerablemente la productividad del programa reduciendo en elevado grado el tiempo requerido para escribir, verificar, depurar y mantener los programas. Utiliza un número limitado de estructuras de control que minimizan la complejidad de los programas y por consiguiente, reducen los errores. Los programas deben estas dotados de una estructura.
La programación estructurada es el conjunto de técnicas que incorporan:
Ø Recursos abstractos
Se auxilia de los recursos abstractos en lugar de los recursos concretos que dispone un determinado lenguaje de programación. Descomponer un programa en términos de recursos abstractos consiste en descomponer una determinada acción compleja en términos de un número de acciones mas simples capaces de ejecutarlas o que constituyan instrucciones de computadoras disponibles.
Ø Diseño descendente (top-down).
Es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento. La metodología descendente consiste en efectuar una relación entre las sucesivas etapas de estructuración de modo que se relacionasen unas con otras mediante entras y salidas de información.
Ø Estructuras básicas.
CONCEPTO Y CARACTERISTICAS EL ALGORITMO.
Es conjunto de operaciones especificadas en un determinado lenguaje de programación y para un computador concreto, susceptible de ser ejecutado (o compilado o interpretado). Un algoritmo, estrictamente hablando, no puede ejecutarse hasta que se implementa, ya sea en un
lenguaje de programación, en un
circuito eléctrico, en un aparato mecánico, usando papel y lápiz, o en algún otro modelo de computación. Es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema. Dado un estado inicial y una entrada, a través de pasos sucesivos y bien definidos se llega a un estado final, obteniendo una solución.
CARACTERISTICAS.
Las características fundamentales que debe cumplir todo algoritmo son:
Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.
Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; o sea, debe tener un número finito de pasos.
ESCRITURA DE ALGORITMOS
Como ya se ha comentado anteriormente, el sistema para describir («escribir») un algoritmo consiste en realizar una descripción paso a paso con un lenguaje natural del citado algoritmo. Recordemos que un algoritmo es un método o conjunto de reglas para solucionar un problema. En cálculos elementales estas reglas tienen las siguientes propiedades:
deben estar seguidas de alguna secuencia definida de pasos hasta que se obtenga un resultado coherente,
sólo puede ejecutarse una operación a la vez.
REPRESENTACION GRAFICA DE ALGORITMOS.
Para representar un algoritmo se debe utilizar algún método que permita independizar dicho algoritmo del lenguaje de programación elegido. Ello permitirá que un algoritmo pueda ser codificado indistintamente en cualquier lenguaje.
Para conseguir este objetivo se precisa que el algoritmo sea representado gráfica o numéricamente, de modo que las sucesivas acciones no dependan de la sintaxis de ningún lenguaje de programación, sino que la descripción pueda servir fácilmente para su transformación en un programa, es decir, su codificación.
Los métodos usuales para representar un algoritmo son:
1. diagrama de flujo,
2. diagrama N-S (Nassi-Schneiderman),
3. lenguaje de especificación de algoritmos: pseudocódigo,
4. lenguaje español, inglés...
5. fórmulas.
PSEUDOCODIGO.
El pseudocódigo es un lenguaje de especificación (descripción) de algoritmos. El uso de tal lenguaje hace el paso de codificación final (esto es, la traducción a un lenguaje de programación) relativamente fácil.
Los lenguajes APL Pascal y Ada se utilizan a veces como lenguajes de especificación de algoritmos.
El pseudocódigo no puede ser ejecutado por una computadora. La ventaja del pseudocódigo es que en su uso, en la planificación de un programa, el programador se puede concentrar en la lógica y en las estructuras de control y no preocuparse de las reglas de un lenguaje específico. Es también fácil modificar el pseudocódigo si se descubren errores o anomalías en la lógica del programa, mientras que en muchas ocasiones suele ser difícil el cambio en la lógica, una vez que está codificado en un lenguaje de programación. Otra ventaja del pseudocódigo es que puede ser traducido fácilmente a lenguajes estructurados como Pascal, C, FORTRAN 77/90, c++, Java, C#, etc.
DIAGRAMA DE NASSI-SCHNEIDERMAN.
El diagrama N-S o también conocido como diagrama de Chapin es una técnica de especificación de algoritmos que combina la
descripción textual, propia del pseudocódigo, con la representación gráfica del diagrama de flujo.
El diagrama N-S cuenta con un conjunto limitado de
símbolos para representar los pasos del algoritmo, por ello se apoya en expresiones del lenguaje natural; sin embargo, dado que
el lenguaje natural es muy extenso y se presta para la ambigüedad, solo se utiliza un conjunto de palabras, a las que se denomina palabras reservadas. Las palabras reservadas más utilizadas son:
Inicio Fin Leer Escribir
Mientras Repita Hasta Para
Incrementar Decrementar Hacer Función
Entero Real Caracter Cadena
Lógico Retornar
Los símbolos utilizados en el diagrama de Chapin son corresponden a cada tipo de
estructura. Dado que se tienen tres tipos de
estructuras, se utilizan tres símbolos. Esto hace que los procesos del algoritmo sean más fáciles de representar y de interpretar.
METODOS FORMALES DE VERIFICACIONES DE PROGRAMAS.
Aserciones
Una parte importante de una verificación formal es la documentación de un programa a través de asertos o afirmaciones —sentencias lógicas acerca del programa que se declaran «verdaderas»—. Un aserto se escribe como un comentario y describe lo que se supone sea verdadero sobre las variables del programa en ese punto.
Precondiciones y post-condiciones
Precondición: Predicado lógico que debe cumplirse al comenzar la ejecución de una operación.
Post-condición: Predicado lógico que debe cumplirse al acabar la ejecución de una operación, siempre que se haya cumplido previamente a precondición correspondiente.
Reglas para prueba de programas
Un medio útil para probar que un programa hace lo que realmente ha de hacer es proporcionar aserciones que expresen las condiciones antes y después de que sea ejecutado. En realidad las aserciones son como sentencias o declaraciones que pueden ser o bien verdaderas o bien falsas.