Logica de programacion

De Hacklab La Paz - r00thouse

LOGICA DE PROGRAMACIÓN

1.- ALGORITMOSUn algoritmo es una secuencia de pasos lógicos y ordenados con las cuales le damos solu- ción a un problema determinado. Un programa normalmente implementa (traduce a un len- guaje de programación concreto) un algoritmo. Nótese que es la secuencian de instrucciones en sí (la ejecución) la que debe ser finita, no el número de pasos realizados.

2.- PARTES DEL ALGORITMOEl algoritmo consta de tres secciones principales.

DATOS DE ENTRADA

PROCESO DE LOS DATOS

IMPRESIÓN DE LAS SALIDAS

DATOS DE ENTRADA.-Representa la operación u acción que permite la recopilación de información oportuna y pertinente, antes de empezar un problema tiene que plantearse esta pregunta: ¿Qué datos pertinentes necesito para resolver este problema? Se debe hacer énfasis en esto, aprender a discernir qué información es importante y cual podemos dejar de lado.

PROCESO.-Representa la operación o conjunto de operaciones secuenciales, cuyo objeto es obtener la solución al problema. El proceso pueden ser fórmulas aritméticas o que realicen el tratamiento de texto o cadenas. El resultado de estas operaciones debe guardarse en variables hablando un lenguaje de programación.

SALIDA O IMPRESIÓN.-Representa una operación o conjunto de operaciones que permi- ten comunicar al exterior el o los resultados alcanzados. Aquí se debe formular la siguiente pregunta: ¿Qué es lo que esperamos de salida, que resultados? Dependiendo de esto, la entrada y el proceso deberán ir ligados lógicamente a la salida y proporcionar los resultados deseados a la salida.

3. CARACTERÍSTICAS DE LOS ALGORITMOS

FINITUD.-Un algoritmo tiene que acabar siempre tras un número finito de pasos. Un proce- dimiento que tiene todas las características de un algoritmo salvo que posiblemente falla en su finitud se conoce como método de cálculo.

DEFINIBILIDAD.-Cada paso de un algoritmo debe definirse de modo preciso; las acciones ha realizar han de estar especificadas para ca da caso con rigurosidad y sin ambigüedad.

CONJUNTO DE ENTRADAS.-Debe existir un conjunto especificado de objetos , cada uno de los cuales constituye los datos iniciales de un caso particular del problema que resuelve el algoritmo. A este conjunto se llama conjunto de entradas.

CONJUNTO DE SALIDAS.- Debe existir un número especificado de objetos, cada uno de los cuales constituye la salida o respuesta que debe obtener el algoritmo para los diferentes casos particulares del problema. A este conjunto se denomina conjunto de salidas del algo- ritmo. Para cada entrada del algoritmo debe existir una salida asociada que constituye la solución del problema particular determinado por dicha entrada.

EFECTIVIDAD.-Un algoritmo debe ser efectivo, esto significa que todas las operaciones a realizar por el algoritmo deben ser lo bastante básicas para ser efectuadas de modo exacto, y en un lapso de tiempo finito por el procesador que ejecute el algoritmo.

4. OBJETIVOS DE LA PROGRAMACIÓN.La programación debe perseguir la obtención de programas de calidad. Para ello se esta- blece un programa. Algunos de los factores de calidad más importantes son:

CORRECCIÓN.-Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente que debe hacer el programa antes del desarrollarlo, y, una vez acabado compararlo con lo que realmente hace.

CLARIDAD.-Es muy importante que el programa se lo más claro y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidad el estilo en la edición; de estaforma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más ne- cesaria para que otros programadores puedan continuar el trabajo fácilmente.

EFICIENCIA.-Se trata de que el programa además de realizar aquello para lo que fue creado, lo haga gestionando de loa mejor forma posible los recursos que utiliza. Normal- mente al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza. (espacio en disco que usa, tráfico de red que ge- nera, etc.)

PORTABILIDAD.-Un programa es ejecutable cuando tiene la capacidad de poder ejecu- tarse en una plataforma ya sea hardware y software, diferente a aquella en la que se elabora. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/LINUX ejecutarse tam-bién en la familia de sistemas operativos de WINDOWS. Esto permite que el programa pueda llegar a más usuarios más fácilmente. Los programas suelen subdividirse en partes menores (módulos) de modo que la compleji- dad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa.

5. PROGRAMACIÓN ESTRUCTURARDALa programación estructurada significa escribir un programa de acuerdo a las siguientes re- glas:

Secuencial. Alternativa. Repetitiva.

El término programación estructurada se refiere a un conjunto de términos que aumentan considerablemente la productividad del programa reduciendo en elevado grado el tiempo requerido para escribir, verificar, depurar y mantener los programas. La programación es- tructurada utiliza un número limitado de estructuras de control que minimizan la complejidad de los programas y por consiguiente reducen los errores. La programación estructurada es el conjunto de técnicas que se incorporan:

Recursos abstractos Diseño descendente (top-down) Estructura básica de control.

RECURSOS ABSTRACTOS.- Descomponer un programa en términos de recursos abstrac- tos, consiste en descomponer una determinada acción compleja en términos de un número de acciones más simples.

DISEÑO DESCENDENTE.- El diseño descendente es el proceso mediante el cual un pro- blema se descompone en una serie de niveles o pasos sucesivos de refinamiento. La meto- dología descendente consiste en efectuar una relación entre las sucesivas etapas de estruc- turación, de modo que se relacionen unas con otras mediante entradas y salidas de informa- ción. Es decir se descompone el problema en etapas o estructuras jerárquicas de forma que se pueda considerar cada estructura desde otros puntos de vista: ¿Qué hace y cómo lo hace?

6. DIAGRAMAS DE FLUJO.Un diagrama de flujo representa la esquematización gráfica de un algoritmo, el cual muestra gráficamente los pasos o procesos a seguir para alcanzar la solución de un problema. Su correcta construcción es sumamente importante porque a partir del mismo se escribe unprograma en algún “lenguaje de programación”. Si el diagrama de flujo esta completo y co- rrecto el paso del mismo a un lenguaje de programación es relativamente simple y directo. Es importante resaltar que el diagrama de flujo muestra lugares de origen y destino de los datos, transformaciones a las que son sometidos los datos, lugares donde se almacenan los datos en el sistema, y los canales por donde circulan estos. Los diagramas de flujo son útiles para el desarrollo y la representación de algoritmos y muestran con claridad como operan las estructuras de control (utilizadas en la programación estructurada.) Un diagrama de flujo consta de un conjunto de símbolos con diferentes significados suceptibles de ser conectados entre sí. Un diagrama de flujo consta de un conjunto de símbolos con diferentes significados suceptibles de ser conectados entre sí. En todo diagrama de flujo podemos encontrar los siguientes elementos:

a) inicio de proceso. b) Especificación de la alimentación de tados. c) Acciones aplicables a los datos. d) Obtención de resultados. e)Fin de proceso.

7. SIMBOLOS DE LOS DIAGRAMAS DE FLUJOLos símbolos utilizados en los diagramas de flujo han sido normalizados por el instituto nor- teamericano de normalización ANSI, y son los siguientes: Indica el inicio y final del diagrama de flujo. Pasos, procesos o líneas de instrucción de programa de cómputo. Indica la entrada de datos. Toma de decisiones, comparación de valores y ramificación. Conector para unir el flujo a otra parte del programa. Conector fuera de página. Representa la continuidad del diagrama en otra página. Líneas de flujo. Indica la salida de información en pantalla o monitor. Indica la salida de información impresa. Almacenamiento en el disco duro. Conector hacia otra pagina u hoja. Quemado en un disco versátil compacto. Operación auxiliar.

8. REGLAS BÁSICAS. 1. Todos los símbolos han de estar conectados. 2. A un símbolo de proceso pueden llegarle varias líneas. 3. A un símbolo de decisión pueden llegarle varias líneas pero solo saldrán dos. 4. A un símbolo de inicio NO le llegan líneas. 5. De un símbolo de fin NO parte ninguna línea.

9. RECOMENDACIONES PARA EL DISEÑO. Los diagramas de flujo se escriben de arriba hacia abajo y de izquierda a derecha. Se deben usar solamente líneas de flujo horizontales o verticales. Los símbolos se unen con líneas, las cuales tienen en la punta una flecha que indica la dirección en la que fluye la información de procesos, NO se permite líneas de flujo diagona- les. Se debe evitar el cruce de líneas utilizando los conectores. Se debe tener en cuenta que sólo se van a utilizar conectores cuando sea estrictamente necesario. No deben quedar líneas de flujo sin conector. Todo texto escrito dentro de un símbolo debe ser legible, preciso, evitando el uso de cháchara. Se deben trazar los símbolos de manera que se puedan leer de arriba hacia abajo y de izquierda a derecha.

10. DIAGRAMA DE FLUJO GENÉRICO.

Ejemplos de diagrama de flujo. Problemas cualitativos.

1.- Diseñar un algoritmo para volver desde el cine, considerando las diferentes casos de tener mucho, poco o ningún dinero.

2. Diseñar un algoritmo para hacer una llamada telefónica.

PROBLEMAS CUANTITAVTIVOS. 1. Diseñar un diagrama de flujo que encuentre la suma de los primeros cincuenta números naturales. Explicación: SUMA es la variable a la que se le va agregando el valor de cada número natural, N es el contador, este recorrerá los números hasta llegar al cincuenta. El segundo bloque es un símbolo de proceso. Aquí se asume que las variables SUMA y N han sido declaradas pre- viamente y las inicializa en cero para comenzar el conteo y la suma de valores. El tercer bloque es un proceso, en este paso se incrementa en uno la variable. N. (N=N+1). En el cuarto paso se agrega el valor de N a la variable que contendrá la suma. El quinto bloque es toma de decisión. Hay una pregunta que se la hace a los valores que actualmente influyen en el proceso. En la primera vez. N=50? => NO, ya que N es 1. Esta respuesta dirige el flujo al tercer bloque. Esto sumará N+1 y dara 2. ¿Es N=50? =>NO, todavía es 2. Entonces re- gresará al tercer bloque y vuelve a hacer lo mismo. Y así hasta llegar a 50. Obteniendo la suma de los primeros 50 números. Por último indicamos que el resultado sea mostrado. La suma es: 275. Fin del programa.