programacion 4

10
4.- GENERALIDADES DE LOS ALGORITMOS Y PROGRAMAS INFORMATICOS. El programador de computadoras es ante que nada una persona que resuelve problemas, por lo que para llegar a ser un programador eficaz se necesita aprender a resolver problemas de un modo riguroso y sistemático. A la metodología necesaria para resolver problemas mediante programas se denomina Metodología de la Programación. El eje central de esta metodología es el concepto, ya tratado, de algoritmo. Dada la importancia del algoritmo en la ciencia de la computación, un aspecto muy importante será el diseño de algoritmos. El diseño de la mayoría de los algoritmos requiere creatividad y conocimientos profundos de la técnica de la programación. En esencia, la solución de un problema se puede expresar mediante un algoritmo. Características de los Algoritmos: 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 numero finito de pasos. La definición de un algoritmo debe definir tres partes: Entrada, Proceso y Salida. En el algoritmo de receta de cocina citado anteriormente se tendrá: Entrada: ingrediente y utensilios empleados. Proceso: elaboración de la receta en la cocina. Salida: terminación del plato (por ejemplo, cordero). 4.1.- CONCEPTO Y UTILIDAD DE LOS ALGORITMOS. Ninguno de los dos algoritmos garantiza una solución óptima. Sin embargo, normalmente ambos dan soluciones buenas, próximas a la óptima. Posibles mejoras: buscar heurísticas mejores; repetir la heurística 1 con varios orígenes; ó bien, a partir de la solución del algoritmo intentar hacer modificaciones locales para mejorar esa solución.

Upload: fernando-lara

Post on 08-Apr-2016

213 views

Category:

Documents


0 download

DESCRIPTION

entregable

TRANSCRIPT

4.- GENERALIDADES DE LOS ALGORITMOS Y PROGRAMAS INFORMATICOS.

El programador de computadoras es ante que nada una persona que resuelve problemas, por lo que para llegar a ser un programador eficaz se necesita aprender a resolver problemas de un modo riguroso y sistemático. A la metodología necesaria para resolver problemas mediante programas se denomina Metodología de la Programación. El eje central de esta metodología es el concepto, ya tratado, de algoritmo.Dada la importancia del algoritmo en la ciencia de la computación, un aspecto muy importante será el diseño de algoritmos. El diseño de la mayoría de los algoritmos requiere creatividad y conocimientos profundos de la técnica de la programación. En esencia, la solución de un problema se puede expresar mediante un algoritmo.Características de los Algoritmos: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 numero finito de pasos.

La definición de un algoritmo debe definir tres partes: Entrada, Proceso y Salida. En el algoritmo de receta de cocina citado anteriormente se tendrá:Entrada: ingrediente y utensilios empleados.Proceso: elaboración de la receta en la cocina.Salida: terminación del plato (por ejemplo, cordero).

4.1.- CONCEPTO Y UTILIDAD DE LOS ALGORITMOS.

Ninguno de los dos algoritmos garantiza una solución óptima. Sin embargo, normalmente ambos dan soluciones buenas, próximas a la óptima.Posibles mejoras: buscar heurísticas mejores; repetir la heurística 1 con varios orígenes; ó bien, a partir de la solución del algoritmo intentar hacer modificaciones locales para mejorar esa solución.

4.2 RELACION ENTRE ALGORITMOS Y LOGICA DE PROGRAMACION.

Algunas consideraciones estilísticas pueden contribuir a mejor la calidad de los algoritmos (y programas) mediante la reducción del número de errores que aparecen al desarrollar los. También influyen haciendo que nuestro algoritmo resulte más fáciles de leer y entender para otras personas.Los criterios de estilo pueden reflejarse en un conjunto de normas de estilo de codificación. Ello asegura que tanto algoritmos como programa resulten legibles y puedan modificarse fácilmente en caso de necesidad. Generalmente, estas normas de estilo se dirigen hacia aspectos como la forma de construir los nombres de variables o tipo de datos que aparezcan., la tipografía seguida a la hora de escribir nombres de variables, subprogramas, palabras claves, etc. El modo de encolumnar las distintas partes de un algoritmo para facilitar su lectura y comprensión, y la normas sobre cómo y dónde deben de introducirse los comentarios.

4.3.- DESCRIPCION DE LAS FORMAS DE REPRESENTACION ALGORITMICA.

Recursos De Computadores Y ComplejidadAlgoritmo: Conjunto de reglas para resolver un problema. Su ejecución requiere unos recursos.Un algoritmo es mejor cuantos menos recursos consuma, su facilidad de programarlo, corto, fácil de entender, robusto, etc.Criterio empresarial: Maximizar la eficiencia.Eficiencia: Relación entre los recursos consumidos y los productos conseguidos.Recursos consumidos:Tiempo de ejecución.Memoria principal:Entradas/salidas a disco.Comunicaciones, procesadores, etc.Lo que se consigue:Resolver un problema de forma exacta, forma aproximada o algunos casos.Recursos consumidos:Ejemplo. ¿Cuántos recursos de tiempo y memoria consume el siguiente algoritmo sencillo?i:= 0a[n+1]:= xrepetiri:= i + 1hasta a[i] = xRespuesta: Depende.

4.3.1 PSEUDOCODIGOS.

Se trata de una herramienta que los analistas de sistemas utilizan para comunicar a los programadores la estructura del programa que van a realizar, de forma de tener una idea bien clara de lo que se necesita programar.Digamos que el pseudo código es una forma de diagramar un algoritmo para resolver un determinado problema, sin atenerse a ningún lenguaje de programación en especial.Un algoritmo es un conjunto de procedimientos que permiten resolver un problema.

4.3.1.1. ESPECIFICACION ESTRUCTURADA DE PROCESOS DE YOURDON.

4.3.1.2. MINIESPECIFICACIONES.

4.3.1.3, DESCRIPCION DE LAS REGLAS PARA LA ESTRUCTURA DE PSEUDOCODIGO.

4.3.2. DIAGRAMA DE FLUJO

4.3.2.1 ESTANDARES DE DIAGRAMACION DE LA NORMA ANSI\ISO 5807-1985

Define los símbolos que se utilizarán en la documentación de procesamiento de información y

da orientación sobre las convenciones tor su uso en diagramas de flujo de datos, diagramas de flujo de programas, diagramas de flujo, diagramas de red del sistema de programa, diagramas de los recursos del sistema

4.3.2.3 SIMBOLOGIA NASSI-SCHNE DERMAN.

La utilización adecuada e ingeniosa de las estructuras presentadas permite el diseño de algoritmos de aceptable nivel de complejidad, como se ha mostrado en los ejemplos. Obsérvese que cada estructura permite incluir las anteriores, en el último ejemplo se ha utilizado todos los conceptos presentados en este documento.Los diagramas N-S permiten representar de forma sencilla los pasos que conforman un algoritmo y por su combinación de texto e imagen son muy fáciles de interpretar; no obstante, es recomendable que quien se inicia en el diseño de algoritmos conozca otras técnicas como el pseudocódigo y el diagrama de flujo.Finalmente, es menester anotar que el diseño de algoritmos no solo requiere conocer metodologías de representación, sino también desarrollar el pensamiento lógico para generar soluciones y esto se consigue mediante el desarrollo de ejercicios.

4.3.2.4 SIMBOLOGIA BONH-JACOPINI.

El teorema de Böhm-Jacopini es un enunciado que data de los años 60, en el que se prueba formalmente que cualquier algoritmo puede prescindir de saltos incondicionales. Se trata de consideraciones del pasado, que hoy en día no tienen utilidad directa aunque su importancia histórica es indiscutible.

Básicamente, este teorema nos dice que:

Todo algoritmo propio puede ser expresado en términos de sólo tres tipos de estructura:

secuencial (es decir, poner instrucciones en orden, una detrás de otra, y que sean ejecutadas en ese orden)

condicional (es decir, hacer una cosa en función de una concidición -con estructuras como if, o if/else o switch)

repetitiva (es decir, hacer una cosa varias veces, con bucles)

Se define como algoritmo propio aquel que nos da unas ciertas garantías de calidad en su construcción. El

teorema viene a decir que todo algoritmo bien construido se puede expresar siempre sólo con bloques secuenciales de instrucciones, condiciones y bucles, sin necesidad de recurrir a saltos incondicionales.

Entendemos que es un algoritmo propio aquel que cumple estas condiciones:

Tiene un único punto de entrada y un único punto de salida. Todas las sentencias son alcanzables, es decir, no contiene código muerto, que no se ejecutará

nunca. No hay bucles infinitos. Todos los bucles terminan en un número finito de pasos. No hay ambigüedades: cada sentencia tiene una única interpretación. Todos los posibles caminos llevan desde el punto de entrada al de salida. El algoritmo acaba tras un número finito de pasos. El algoritmo debe producir al menos una salida o un efecto. Todas las sentencias del algoritmo deben poder realizarse de manera precisa en un tiempo finito.

4.3.2.5 DESCRIPCION DE LAS REGLAS PARA LA CONSTRUCCION DE DIAGRAMAS DE FLUJO.

1.- Se debe de escribir de arriba hacia abajo y de izquierda a derecha

2.- Los símbolos se únen con líneas

3.- Se usan flechas para indicar el flujo de información

4.- Los círculos de decisión pueden y deben tener más de una línea de flujo

5.- Todos los símbolos pueden tener más de una línea de entrada

4.4 CODIFICACION Y EJECUCION DE UN ALGORITMO INFORMATIVO.

1.- Análisis del problema.2.- Identificar las entradas, procesos y salidas del problema, declaración de variables.3.- Diseño del Algoritmo: Describe la secuencia ordenada de los pasos, sin ambigüedad, es decir, siendo preciso y veraz en la búsqueda de la solución al problema.4.- Codificación del Algoritmo: Es la expresión en un lenguaje de programación de los pasos definidos en el algoritmo.5.- Ejecución y validación del programa por el computador.

4.4.1 EJEMPLO REPRESENTATIVO DE UN ALGORITMO Y DE SU CODIFICACION (PROGRAMA) EN UN LENGUAJE DE PROGRAMACION ESTRUCTURADA/PROCEDUAL.

1.- Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.2.- Un algoritmo debe estar bien definido, es decir, si se sigue la ejecución dos veces del mismo se debe obtener la misma secuencia lógica. El algoritmo debe definirse de forma precisa para cada paso, es decir, hay que evitar toda ambigüedad al definir cada paso. Puesto que el lenguaje humano es impreciso, los algoritmos se expresan mediante un lenguaje formal, ya sea matemático o de programación para un computador.3.- Un algoritmo debe ser "FINITO", Si se sigue un algoritmo se debe terminar en algún momento; o sea, debe tener un numero finito de pasos.4.- Entrada: El algoritmo tendrá cero o más entradas, es decir, cantidades dadas antes de empezar el algoritmo. Estas cantidades pertenecen además a conjuntos especificados de objetos. Por ejemplo, pueden ser cadenas de caracteres, enteros, naturales, fraccionarios, etc. Se trata siempre de cantidades

representativas del mundo real expresadas de tal forma que sean aptas para su interpretación por el computador.5.- Salida: El algoritmo tiene una o más salidas, en relación con las entradas.

4.4.2 ELEMENTOS DE UN AMBIENTE DE PROGRAMACION ESTRUCTURADA/PROCEDAL.

1.- Es una secuencia de pasos lógicamente relacionados entre sí a fin de obtener la solución a un problema planteado.2.- Es una lista de instrucciones para efectuar paso a paso un proceso.3.- Conjunto "FINITO" de pasos o instrucciones, seguidas en un orden lógico, los cuales nos llevan a la solución de un problema específico.4.- Una serie de instrucciones colocadas en cierta secuencia, necesarias para la descripción de las operaciones que llevan a la solución de un problema.5.- Es un procedimiento completo para resolver un problema específico en un número "FINITO" de pasos.6.- Es un método para resolver un problema mediante una serie de datos precisos, definidos y finitos.

4.4.3. EDITORES DE CODIGO DE FUENTE.

Tienen características diseñadas exclusivamente para simplificar y acelerar la escritura de código fuente,

como resaltado de sintaxis, autocompletar y pareo de llaves. Estos editores también proveen un modo

conveniente de ejecutar un compilador, un intérprete, un depurador, o cualquier otro programa que sea

relevante en el proceso de desarrollo de software. Por lo que, si bien muchos editores de texto pueden ser

usados para editar código fuente sin problemas, si no mejoran, automatizan y facilitan la edición del código,

no ameritan ser llamados "editores de código fuente", y son únicamente editores de texto que pueden ser

usados para editar código fuente.

Algunos editores de código fuente verifican la sintaxis a medida que el programador escribe, alertando

inmediatamente sobre los problemas de sintaxis que puedan surgir realizan ambas tareas.

4.4.4. COMPILACION DE UN PROGRAMA.

En programación, cuando se desarrolla un programa, en la fase de codificación se llevará a cabo la

compilación, que consiste en que el compilador traducirá el codigo fuente a codigo máquina, también

llamado código objeto, siempre y cuando, el propio compilador no detecte ningún error en dicho código fuente.

4.4.5 ERRORES DE CODIGO.

Los códigos de error suelen almacenarse en variables globales con nombres como errno . Los códigos de

error se identifican por un número, indicando cada uno un motivo de fallo. En una aplicación que use códigos

de error, cada función suele tener un valor de retorno que indica que se produjo un fallo. A continuación se

puede comprobar el valor disponible en la variable global para determinar el motivo que hizo fallar a la

función. Por ejemplo, para indicar que falló la apertura de un archivo, una función suele establecer la variable

global al código de error indicando el motivo del fallo y devolver un manipulador de fichero no válido.

4.4.5.1. A TIEMPO DE COMPILACION.

Tiene lugar una sola vez, la traducción del código fuente en un archivo ejecutable. El archivo ejecutable puede

iniciar runtime cualquier número de veces sin tener que volver a tiempo de compilación a menos que el

programa requiere cambios. 

4.4.5.2 A TIEMPO DE EJECUCION.

Ocurren mientras un programa se ejecuta. Los errores de ejecución catastróficos ocasionan un programa para

bloquear y detener la ejecución antes de tiempo. Los ejemplos incluyen memoria de acceso restringido y la

división por cero . La declaración de x /y es correcta sintácticamente , pero si y contiene el valor 0 en tiempo

de ejecución , que se colgará el programa. Un programador puede encontrar la captura de los errores de

ejecución catastróficos difíciles , ya que por lo general ocurren solamente bajo ciertas condiciones.

4.4.5.3 ESTRATEGIAS PARA CORRECCION DE ERRORES.

 Un programador puede detectar errores en tiempo de compilación con bastante facilidad porque son

sintáctico más que lógico. El compilador generalmente señalar un error de tiempo de compilación y, o bien

explicar o dar pistas sobre cómo solucionarlos . Si el compilador produce correctamente un archivo ejecutable

desde el código fuente , el programa no contiene errores de compilación . 

4.4.6 DEPURACION Y SEGUIMIENTO DE CODIGO.

Cuando se ejecuta el programa, puede utilizar los métodos de la clase para producir los mensajes que le ayudan a

supervisar la secuencia de ejecución del programa, para detectar anomalías, o para proporcionar información de

medición del rendimiento. De forma predeterminada, los mensajes que produce aparecen en la ventana de resultados

del entorno de desarrollo integrado. El código de ejemplo utiliza los métodos para producir un mensaje seguido de un

terminador de línea. Cuando se utiliza este método para generar un mensaje, cada mensaje aparece en una línea

independiente en la ventana resultados.

4.4.7 EJECUCION DE UN PROGRAMA.

Un programa en ejecución suele llamarse también proceso.

El proceso de ejecución de un programa escrito en un lenguaje de programación y mediante un compilador

tiene los siguientes pasos.

1.- Escritura de programa fuente con un editor.2.-Intoducir el programa fuente en memoria.3.- Compilar el programa.4.-Verificar y corregir errores de compilación.5.- Obtención del programa objeto.6.- el enlazador (Linker) obtiene el programa ejecutable.7.- se ejecuta el programa y, si no existen errores, se tendrá la salida del programa.