viernes, 7 de diciembre de 2018

Tema 9: Programación en pseudocódigo y estructurado


9.1.-Programación en Pseudocódigo






El pseudocódigo (o falso lenguaje) es comúnmente utilizado por los programadores para omitir secciones de código o para dar una explicación del paradigma que tomó el mismo programador para hacer sus códigos, esto quiere decir que el pseudocódigo no es programable sino facilita la programación.

El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la forma más detallada posible, y a su vez lo más parecida posible al lenguaje que posteriormente se utilizará para la codificación del mismo.

El pseudocódigo utiliza para representar las acciones sucesivas palabras reservadas en inglés (similares a sus homónimos en los lenguajes de programación), tales como star,begin, end, stop, if-then-else, while, repeat-until….etc.

Es un lenguaje de especificació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.

El pseudocódigo nació como un lenguaje similar al inglés y era un medio representar básicamente las estructuras de control de programación estructurada. Se considera un primer borrador, dado que el pseudocódigo tiene que traducirse posteriormente a un lenguaje de programación. Cabe señalar que el pseudocódigo no puede ser ejecutado por una computadora.







Creación de Algoritmo
En la elaboración o creación de un programa; después del análisis del problema, se establecen las especificaciones del programa, es decir, qué debe hacer y cómo lo debe hacer. Si un algoritmo es correcto, es más fácil realizar la programación y se reduce la posibilidad de cometer errores.
El desarrollo de un algoritmo se realiza en tres fases:











Los algoritmos pueden ser expresados de muchas maneras, destacando el lenguaje natural, los diagramas de flujo y el pseudocódigo. En la práctica, se utilizan los dos últimos ya que el lenguaje natural es más extenso.






Diagramas de flujo






Permiten crear algoritmos mediante símbolos gráficos que representan operaciones específicas y que indican la secuencia de las operaciones mediante flechas. Están regidos por normas ISO.






Pseudocódigo






Utilizan una sintaxis formada por frases o palabras en lenguaje común, instrucciones de programación y palabras clave que definen las estructuras básicas.






Los diagramas de flujo tienen los siguientes componentes y funciones:







Diseño de algoritmos





Los algoritmos son el fundamento de la programación de computadoras, para que la computadora pueda ejecutar una tarea es necesario que primero se diseñe el algoritmo correspondiente, es decir, especificar las operaciones necesarias para transformar los datos de entrada en datos de salida. Una vez diseñado y probado el algoritmo, se trasforma en el programa correspondiente. El programa esta compuesto por el algoritmo, la especificación de los datos y las instrucciones que permiten la comunicación entre los usuarios del programa y la máquina.

Definición de algoritmo: Un algoritmo es un conjunto finito de instrucciones cuyo fin es realizar una tarea; este conjunto finito de instrucciones debe también ser preciso y determinístico.

Preciso: el algoritmo debe ejecutar la tarea para el cual fue diseñado.

Determinístico: significa que el resultado debe depender estrictamente de los datos suministrados, siempre que el algoritmo se ejecute con un mismo conjunto de datos de entrada, el resultado debe ser siempre el mismo.

Son ejemplos de algoritmos los métodos utilizados en aritmética para sumar, restar, multiplicar y dividir cantidades; la aplicación de la fórmula cuadrática para encontrar las raíces de un polinomio de segundo grado En todos ellos se cumplen las tres características anteriores.

Un algoritmo eficiente y confiable es el producto de un análisis exhaustivo del problema, para determinar la mejor alternativa de solución.





Simbología y diagrama de flujo





El diagrama de flujo es la representación gráfica de un algoritmo; para ello se utiliza un conjunto de símbolos estándares mundialmente utilizados y desarrollados por organizaciones tales como ANSI (American National Institute) e ISO (International Standard Organization para la elaboración de diagramas de flujo;

En el diagrama cada símbolo representa una acción en concreto; y cada instrucción del algoritmo se visualiza dentro del símbolo adecuado. Los símbolos se conectan con flechas para indicar el orden en que se ejecutan las instrucciones.





9.2.-Programación Estructurada






Identificación de la estructura básica






Las tres estructuras lógicas de control básicas, se definen de la siguiente forma:

Secuencia: es simplemente la formalización de la idea de que las instrucciones de un programa son ejecutadas en el mismo orden en que ellas aparecen en el programa. En términos de diagrama de flujo la secuencia es representada por una función después de la otra, como se muestra a continuación.

A y B pueden ser instrucciones sencillas hasta módulos completos, lo importante es que sean programas propios, independientemente de su tamaño o complejidad interna. Ay B deben ser programas propios en el sentido en que estos fueron definidos, es decir, que posean solamente una entrada y una salida; la combinación de A seguida por B es también un programa propio, ya que esta unión tiene una entrada y una salida exclusivamente, esto se muestra gráficamente en la figura siguiente:

Donde la caja externa sugiere que la combinación de A seguida de puede ser tratada como una unidad para propósitos de control.

Selección: Es la escogencia entre dos acciones tomando la decisión en base al resultado de evaluar un predicado. Esta estructura de control es denominada usualmente IFTHENELSE. La representación en forma de diagrama de flujo de esta estructura lógica de control se muestra a continuación:

F

Donde P es predicado y A y B son las dos funciones.

Iteración: Esta estructura lógica es utilizada para que se repita la ejecución de un conjunto de instrucciones mientras se cumpla una condición o predicado. Generalmente a esta estructura se le conoce como DOWHILE (hacer mientras) y su representación se muestra a continuación:

V

F

donde P es predicado y A es el modulo controlado.

Se debe comprender claramente que un rectángulo, que representa un modulo en un diagrama, siempre puede ser sustituido por cualquiera de las tres estructuras de control descritas anteriormente; por ejemplo, veamos el diagrama siguiente:

En él, la línea punteada limita un rectángulo que contiene una estructura, que a su vez controla dos módulos X y Y. La estructura limitada por la línea punteada es sustituida por una función quedando de la siguiente forma:

V

F

es decir, una función sustituye a una estructura lógica de control o viceversa.

OTRAS ESTRUCTURAS LOGICAS DE CONTROL

Aunque todos los programas pueden ser escritos utilizando solamente las tres estructuras de control descritas anteriormente, es algunas veces, conveniente utilizar algunas estructuras adicionales; a continuación se hará una descripción de esas formas lógicas de control diferentes a las ya definidas:

El Dountil: La estructuras de iteración básica es el DOWHILE, pero existe una estructura que es muy parecida a ella y que aveces es usada, dependiendo del proceso que se este tratando de representar y de las características apropiadas en el lenguaje con el cual se esta trabajando, esta forma de control es la que se llama DOUNTIL, cuya representación gráfica en forma de diagrama de flujo se muestra a continuación:

V

Donde A es el modulo controlado y P el predicado.

La diferencia entre el DOWHILE y el DOUNTIL es que en el primero el predicado es probado antes de ejecutar la función, si el predicado es falso la función no es ejecutada; mientras que en el segundo, el predicado es probado después de ejecutar la función, o sea, que la función siempre será ejecutada al menos una vez, independientemente si el predicado es cierto o falso.

La estructura CASE: Algunas veces resulta de gran ayuda, desde el punto de vista de eficiencias y facilidad de lectura de un programa, tener alguna forma de expresar una desviación del flujo de control hacia múltiples procesos en función del resultado de la evaluación de un predicado; usualmente, a la estructura de control que satisface el requerimiento anterior, se le denomina la estructura CASE. Por ejemplo, si es necesario ejecutar una de cien rutinas diferentes en función del valor de un código de 2 dígitos, podemos representar este proceso mediante 100 estructuras IF, sin embargo el sentido común nos induce a pensar que no hay razón para adherirnos rígidamente a las tres estructuras básicas de control y en lugar de 100 IF usaríamos la estructura CASE.

Esta estructura utiliza el valor de una variable para determinar cual, de varias rutinas, será ejecutada. La representación gráfica de esta estructura de control se muestra a continuación:

En cada lenguaje será necesario establecer cuales son las instrucciones que, en forma conveniente y eficiente, realizan funciones establecidas por las diferentes estructuras lógicas de control.

Programación



Programación es la acción y efecto de programar. Este verbo tiene varios usos: se refiere a idear y ordenar lasacciones que se realizarán en el marco de un proyecto; al anuncio de las partes que componen un acto o espectáculo; a la preparación de máquinas para que cumplan con una cierta tarea en un momento determinado; a la elaboración de programas para la resolución de problemas mediante ordenadores; y a la preparación de los datos necesarios para obtener una solución de un problema a través de una calculadora electrónica, por ejemplo.

En la actualidad, la noción de programación se encuentra muy asociada a la creación de aplicacionesinformáticas y videojuegos; es el proceso por el cual una persona desarrolla un programa valiéndose de una herramienta que le permita escribir el código (el cual puede estar en uno o varios lenguajes, tales como C++, Java y Python) y de otra que sea capaz de “traducirlo” a lo que se conoce como lenguaje de máquina, el cual puede ser entendido por un microprocesador.

Este último paso se conoce como compilación y es necesario para que el código pueda ser ejecutado por la plataforma para la cual haya sido creado, que puede ser un ordenador, una tableta, una consola o un teléfono móvil, por ejemplo. Existe también una forma de traducir el código denominada interpretación, que consiste en analizar línea a línea, hasta que se traduzca lo suficiente como para poder realizar una tarea. Cabe mencionar que los lenguajes de programación se dividen en dos grandes grupos, donde los que pueden ser compilados no pueden ser interpretados, y viceversa.

La totalidad del proceso de desarrollo abarca varias etapas y requiere del trabajo de diferentes especialistas. En principio, partiendo de la base de un proyecto bien organizado, es necesario dar con una idea atractiva, interesante, que justifique los meses o años de esfuerzo que vendrán. Tan sólo esta primera parte puede tomar mucho tiempo, dado que lo que comienza como un producto perfecto puede convertirse, luego de cuestionarlo y observarlo desde diferentes ángulos, en un fracaso seguro.


Lenguajes de programación

Lenguaje de programación. es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.

Está formado de un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación.

También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:
El desarrollo lógico del programa para resolver un problema en particular.
Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa)
Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
Prueba y depuración del programa.
Desarrollo de la documentación.

Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo el HTML. (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación sino un conjunto de instrucciones que permiten diseñar el contenido y el texto de los documentos)

Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción del programa de forma colaborativa.





Compiladores e interpretes






Compilador, que analiza el programa fuente y lo traduce a otro equivalente escrito en otro lenguaje (por ejemplo, en el lenguaje de la máquina). Su acción equivale a la de un traductor humano, que toma un libro y produce otro equivalente escrito en otra lengua.
Intérprete, que analiza el programa fuente y lo ejecuta directamente, sin generar ningún código equivalente. Su acción equivale a la de un intérprete humano, que traduce las frases que oye sobre la marcha, sin producir ningún escrito permanente. Intérpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios:
Un intérprete facilita la búsqueda de errores, pues la ejecución de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.). Además, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecución.
Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En cambio, un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces como se ejecute (incluso miles o millones de veces).
Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un intérprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores.



Librerías






Ésta es la noción clásica de lo que se entiende por programación estructurada (llamada también programación sin goto) que hasta la aparición de la programación orientada a objetos se convirtió en la forma de programar más extendida. Esta última se enfoca hacia la reducción de la cantidad de estructuras de control para reemplazarlas por otros elementos que hacen uso del concepto de polimorfismo. Aun así los programadores todavía utilizan las estructuras de control (if, while, for, etc.) para implementar sus algoritmos porque en muchos casos es la forma más natural de hacerlo. Una característica importante en un programa estructurado es que puede ser leído en secuencia, desde el comienzo hasta el final sin perder la continuidad de la tarea que 5. Programación estructurada 5.1 La visión clásica de la programación estructurada… 119 5.1 La visión clásica de la programación estructurada: la programación sin goto cumple el programa, lo contrario de lo que ocurre con otros estilos de programación. Este hecho es importante debido a que es mucho más fácil comprender completamente el trabajo que realiza una función determinada si todas las instrucciones que influyen en su acción están físicamente contiguas y encerradas por un bloque. La facilidad de lectura, de comienzo a fin, es una consecuencia de utilizar solamente tres estructuras de control, y de eliminar la instrucción de transferencia de control goto. La realización de un programa sin seguir una técnica de programación produce frecuentemente un conjunto enorme de sentencias cuya ejecución es compleja de seguir, y de entender, pudiendo hacer casi imposible la depuración de errores y la introducción de mejoras. Se puede incluso llegar al caso de tener que abandonar el código preexistente porque resulte más fácil empezar de nuevo. Cuando en la actualidad se habla de programación estructurada, nos solemos referir a la división de un programa en partes más manejables (usualmente denominadas segmentos o módulos). Una regla práctica para lograr este propósito es establecer que cada segmento del programa no exceda, en longitud, de una página de codificación, o sea, alrededor de 50 líneas. Así, la visión moderna de un programa estructurado es un compuesto de segmentos, los cuales puedan estar constituidos por unas pocas instrucciones o por una página o más de código. Cada segmento tiene solamente una entrada y una salida, asumiendo que no poseen bucles infinitos y no tienen instrucciones que jamas se ejecuten. Encontramos la relación entre ambas visiones en el hecho de que los segmentos se combinan utilizando las tres estructuras básicas de control mencionadas anteriormente y, por tanto, el resultado es también un programa estructurado. Cada una de estas partes englobará funciones y datos íntimamente relacionados semántica o funcionalmente. En una correcta partición del programa deberá resultar fácil e intuitivo comprender lo que debe hacer cada módulo. En una segmentación bien realizada, la comunicación entre segmentos se lleva a cabo de una manera cuidadosamente controlada. Así, una correcta partición del problema producirá una nula o casi nula dependencia entre los módulos, pudiéndose entonces trabajar con cada uno de estos módulos de forma independiente. Este hecho garantizará que los cambios que se efectúen a una parte del programa, durante la programación original o su mantenimiento, no afecten al resto del programa que no ha sufrido cambios.



Creación de estructuras secuenciales



Asignación

La asignación consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:
• Simples: Consiste en pasar un valor constate a una variable (a=15)
• Contador: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a=a+1)
• Acumulador: Consiste en usarla como un sumador en un proceso (a=a+b)
• De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a=c+b*2/4).
Lectura

La lectura consiste en recibir desde un dispositivo de entrada (p.ej. el teclado) un valor. Esta operación se representa en un pseudocodigo como sigue:
Leer a, b
Donde “a” y “b” son las variables que recibirán los valores
Escritura

Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora) un resultado o mensaje. Este proceso se representa en un pseudocodigo como sigue:

Escribe “El resultado es:”, R
Donde “El resultado es:” es un mensaje que se desea aparezca y R es una variable que contiene un valor.


Estructuras selectivas if-else y anidades múltiples



En las estructuras selectivas se evalúan una condición y en función del resultado de la misma se realiza una opción u otra. Las condiciones se especifican usando expresiones lógicas. La representación de una estructura selectiva se hace con palabras en pseudocódigo (if, then, else o bien en español si, entonces, si_no), las estructuras selectivas pueden ser:
Simples

Las estructuras selectivas simples o condicionales están compuesta únicamente de una sola condición si es verdadera ejecutara la acción o acciones si la condición es falsa no hará nada.

if (condición) entre paréntesis esta la condición que se debe evaluar

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias acciones)

end

Antes de mostrar el ejemplo vamos a explicar algunos comandos que vamos a utilizar:

# => este comando nos permite poner un comentario, puede ser a principio de linea o en cualquier posición de ella.

puts => este comando nos permite imprimir cualquier texto en pantalla, puede ser el resultado de una operación o un texto escrito entre comillas.

Ejemplo:

edad = 19 # asignamos un valor a la variable edad

if (edad > 17)

puts “Es mayor de edad”

end

Si ejecutamos el programa que hemos desarrollado el resultado seria: Es mayor de edad, porque, la condición que esta entre paréntesis es verdadera, porque, edad que tiene asignado 19 es mayor a 17, en cambio, si el valor asignado a la variable edad fuera menor a 18, no mostraría ningún resultado.
Dobles

Las estructuras selectivas dobles están compuesta únicamente de una sola condición, si es verdadera ejecutara la acción o acciones y si la condición es falsa ejecutara las acciones para la condición falsa. Esta estructura selectiva solo se debe utilizar únicamente cuando existen dos condiciones, si hubieran mas de dos condiciones se puede utilizar varias selectivas simples o una selectiva múltiple.

if (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

else

acción (si la condición entre paréntesis es falsa se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

end

Ejemplo:

Siguiendo con el ejemplo anterior asignaremos el mismo valor a la variable edad

edad = 19 # asignamos un valor a la variable edad

if (edad > 17)

puts “Es mayor de edad”

else

puts “Es menor de edad”

end

Si ejecutamos el programa que hemos desarrollado el resultado seria: Es mayor de edad, porque, la condición que esta entre paréntesis es verdadera, porque, edad que tiene asignado 19 es mayor a 17, en cambio, si el valor asignado a la variable edad fuera menor a 18, el resultado seria Es menor de edad, porque, la condición es falsa.
Múltiples

Las estructuras selectivas múltiples o anidadas están compuesta múltiples selectivas simples que están unidas por el comando elsif el resultado que se obtiene con una selectiva multiple se puede obtener con varias selectivas simples, entonces, ¿cual es la diferencia? el codigo es mas pequeño, aunque, yo siempre he recomendado a mis alumnos que cuando recien se esta aprendiendo a programar es recomendable que al principio se trabaje con selectivas simples, a medida que se va aprendiendo y ganando destreza se puede comenzar a utilizar las selectivas multiples en los casos que ellos crean conveniente y necesarios.

if (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

elsif (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

elsif (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

end



Estructuras de iterativas do-while





En la vida diaria existen situaciones que frecuentemente se resuelven realizando una determinada secuencia de pasos que puede repetirse muchas veces, ejemplo:
El proceso que seguimos para comer, mientras no se termine la comida.
El proceso de insertar monedas, hasta que se abone la cantidad necesaria.
Las operaciones que realizamos para llamar por teléfono, mientras no se logre la comunicación.

Como se puede observar estos son algoritmos que se hacen cotidianamente, pero tienen la particularidad de que la ejecución de alguno de sus pasos puede repetirse muchas veces, mientras no se logre la meta trazada. A este tipo de algoritmo se le conoce como algoritmos iterativos o repetitivos. En C#, las instrucciones while, do/while, y for, permiten ejecutar iteraciones, bucles o ciclos. En cada caso se ejecuta un bloque de instrucciones mientras la condición que se evalúa tome valor verdadero. Se resalta que cualquiera de las 3 instrucciones cumple con el mismo objetivo que es el de ejecutar una secuencia de pasos, más de una vez.
La semántica de la instrucción es la siguiente:
<condición>. Está representada por una expresión booleana y mientras se cumpla se ejecutará el ciclo.
[Bloque de Instrucciones] El bloque de instrucciones puede estar formado por una o varias instrucciones y es el conjunto de pasos que se van ejecutar en cada iteración del ciclo.

Para una mayor comprensión se muestra su representación en un diagrama de actividad.



Esta estructura de control permite repetir o iterar el [Bloque de Instrucciones] mientras la condición sea verdadera o dicho de otra manera, estas iteraciones terminarán cuando la condición sea falsa y entonces se podrá ejecutar la siguiente instrucción después del while.

Es válido señalar que en esta instrucción la condición se evalúa al inicio del ciclo por lo que si la primera vez que se evalúa la condición esta es falsa, el ciclo no llegará a realizarse.

Tema 9: Programación en pseudocódigo y estructurado

9.1.-Programación en Pseudocódigo El pseudocódigo (o falso lenguaje) es comúnmente utilizado por los programadores para omitir secciones de ...