Vous êtes sur la page 1sur 42

Programación Lógica

Instituto Privado de Estudios


Superiores de Misiones

Carreras
a Distancia

Carrera de

Informática

Programación Lógica

Módulo I

Página 1
Programación Lógica

TABLA DE CONTENIDOS

El Estudio De Los Algoritmos ...............................................................................................4


INTRODUCCIÓN ...................................................................................................................4
CONCEPTO DE ALGORITMO .................................................................................................5
TIPOS DE ALGORITMOS .......................................................................................................8
CÓMO DESCUBRIR UN BUEN ALGORITMO ............................................................................9
TECNICAS DE DISEÑO........................................................................................................14
PROGRAMACIÓN ESTRUCTURADA ......................................................................................15
Ventajas Potenciales ...................................................................................................15
Teorema de la Estructura ............................................................................................16
Segmentacion..............................................................................................................16
Indentacion ..................................................................................................................17
Directrices Para Indentar .............................................................................................17
Ventajas de da Programacion Estructurada ................................................................18
TÉCNICAS DE REPRESENTACIÓN DE ALGORITMOS ..............................................................19
Lenguaje Natural .........................................................................................................19
Lenguaje Natural de Programación(Pseudocódigo)....................................................19
Lenguaje de Programación:.........................................................................................19
Lenguaje Máquina ...................................................................................................20
Lenguajes de Bajo Nivel ..........................................................................................20
Lenguajes de Alto Nivel ...........................................................................................21
Diferencia entre el Lenguaje Algorítmico y el Informático. ..........................................22
HISTORIA Y APLICACIÓN DE LOS LENGUAJES ALGORÍTMICOS ..............................................23
PSEUDOCÓDIGO ...............................................................................................................24
Estructura Secuencial..................................................................................................24
Condicionales ..............................................................................................................25
Repetitivas ...................................................................................................................27
Salida De Resultados ..................................................................................................28
Ejemplos De Pseudocódigo ........................................................................................29
DIAGRAMAS DE FLUJO ......................................................................................................32
DIAGRAMAS ESTRUCTURADOS (NASSI-SCHNEIDERMAN) ....................................................34
PLANTEAMIENTO DEL PROBLEMA ......................................................................................36
Algoritmo......................................................................................................................36
Robustez de un Algoritmo ...........................................................................................37
Correctitud de un Algoritmo .........................................................................................37
COMPLETITUD DE UN ALGORITMO ......................................................................................37
EFICIENCIA Y EFICACIA DE UN ALGORITMO .........................................................................37
Compilación .................................................................................................................37
LECTURAS COMPLEMENTARIAS .........................................................................................38
Metodologia Para La Solucion De Problemas .............................................................38
Definición del Problema ...........................................................................................38
Análisis de los Datos................................................................................................38

Página 2
Programación Lógica

Diseño de la Solución ..............................................................................................39


Codificación .............................................................................................................39
Prueba y Depuración ...............................................................................................40
Documentación ........................................................................................................40
Mantenimiento..........................................................................................................40

Página 3
Programación Lógica

EL ESTUDIO DE LOS ALGORITMOS

Introducción

En este módulo comenzaremos a ver uno de los temas más importantes en computación:
El del Algoritmo.
En términos comunes podemos decir que el algoritmo es un conjunto de instrucciones que
debemos seguir en un cierto orden para realizar una tarea. Por ejemplo, si queremos
hacer una torta, tomamos la receta y leemos las instrucciones una a una en el orden en
que están escritas. En la vida diaria constantemente vemos algoritmos; por ejemplo para
lavar ropa en un lavarropas automático, para descongelar en forma automática una
heladera (los pasos siempre se encuentran pegados en el interior de la heladera) o para
tocar algún instrumento musical (en este caso el algoritmo estaría representado en las
partituras).

Ejemplo: Algoritmo para el teñido en frío


1. Por cada litro de agua deberá emplearse los siguientes elementos: dos cucharas de
anilina y una cucharada sopera de sal.
2. Tome la prenda que va a teñir que podrá ser: algodón, lino, seda natural o lana.
3. Antes del teñido, lave y enjuague las telas para eliminar su apresto y suciedad.
4. Emplee un recipiente en el que las prendan quepan cómodamente y queden
cubiertas totalmente con agua.
5. Introduzca las prendas en la mezcla dejándolas sumergidas durante 45 minutos.
6. Saque las prendas y lávelas con agua fría, hasta que no despida mas anilina.
Déjelas secar bien extendidas.

En computación, los algoritmos se representan como programas dentro de las


computadoras (lo que comúnmente llamamos software).
Si queremos que una computadora efectúe una tarea, primero debemos diseñar un
algoritmo para llevar a cabo esa tarea, y luego programar ese algoritmo en la
computadora.
Por lo anterior, los algoritmos son importantes en computación. Mucho antes de que se
inventaran las computadoras, los grandes matemáticos de la antigüedad ya buscaban la

Página 4
Programación Lógica

manera de descubrir un conjunto único de instrucciones para resolver un determinado tipo


de problema.
El algoritmo surgió con Mohammed Al-Khowarizmi que era un matemático persa que vivió
durante el siglo IX y que se hizo famoso por el enunciado de las reglas paso a paso para
sumar, restar, multiplicar y dividir números decimales; pero mucho antes que eso ya
Euclides, que fue el gran matemático griego (del siglo IV antes de Cristo), inventó un
método para encontrar el máximo común divisor de dos números. Por eso a estos dos
grandes matemáticos se los considera como los padres de la ciencia de la Algoritmia
(ciencia que estudia a los algoritmos).

Concepto de Algoritmo

Para resumir, podemos definir que:

Un Algoritmo es una secuencia ordenada y cronológica de pasos que


nos llevan a la solución del problema o a la ejecución de una tarea.
Los pasos deben ser simples, claros, exactos, deben seguir un orden
y deben tener un principio y un fin.

A continuación les presentamos un ejemplo para hacerles notar las características arriba
mencionadas:
Ejemplo: Cambiar un foco quemado
1. Quitar el foco quemado.
2. Colocar el foco nuevo.

Estos dos pasos parecen resolver el problema. Pero supongamos que estamos
entrenando un robot para que realice esta tarea. Para este caso lo anterior no funcionará
pues tendremos que ser más específicos y más claros, por ejemplo:

1. inicio
2. Elegir un foco
3. Traer la escalera
4. Colocar la escalera debajo del foco
5. Subir la escalera hasta alcanzar el foco
6. Girar el foco hacia la izquierda hasta que esté suelto
7. Poner el foco nuevo en el mismo lugar

Página 5
Programación Lógica

8. Girar hacia la derecha hasta que el foco quede fijo


9. Bajar la escalera
10. Fin

Hay algoritmos que no cumplen con las condiciones explicadas más arriba y contienen
pasos que no se pueden ejecutar. Por ejemplo:

1. inicio
2. Haga una lista de todos los números enteros.
3. Ordene esa lista en orden descendente (de mayor a menor).
4. Borre el primer entero de la lista resultante.
5. fin

Este no es un algoritmo porque hay pasos que no podemos ejecutar.

Primero: El paso número dos nos pide una lista de números enteros y no la podemos
hacer pues los números son infinitos (un algoritmo debe tener un principio y un fin). En
este caso no tenemos fin.
Segundo: El paso número tres nos pide que ordenemos la lista en orden descendente. Al
no haber lista no la podemos ordenar.

Analicemos porque la secuencia de instrucciones que sigue no es un algoritmo válido?


Paso Número 1: Tome una moneda de su bolsillo y póngala sobre la mesa.
Paso Número 2: Vuelva al paso número 1.

El problema principal de este algoritmo es que pide que se saque monedas del bolsillo
eternamente. Nunca se detiene.

Se podría modificar de la siguiente manera la secuencia de pasos para que sea un


algoritmo válido:
Paso Número 1: Si no hay monedas en el bolsillo, deténgase; en caso
contrario, saque una de ellas y colóquela sobre la mesa.
Paso Número 2: Vuelva al paso número 1.

Para repasar un poco podemos decir que:


Para resolver un problema, debemos diseñar un algoritmo (que es una secuencia de
pasos ordenados) que nos permita resolver el problema en cuestión. Primero escribimos
en nuestro lenguaje natural que utilizamos para comunicarnos con los seres inteligentes

Página 6
Programación Lógica

que razonan. Pero en Informática, donde nos tenemos que comunicar con una máquina, y
decirle lo que tiene que hacer, no lo podemos hacer en nuestro idioma corriente. Ese
algoritmo que lo escribimos en nuestro lenguaje completo, lo debemos volver a escribir
utilizando un conjunto bien definido de palabras del idioma inglés. Lo que resulta es un
programa1 que puede ser ejecutado por la computadora.

Diseño del Programa de


Problema
Algoritmo computadora

Los pasos que debemos seguir para que una computadora pueda realizar una tarea, son
los siguientes:

1. Debemos describir en forma ordenada todos los pasos que ella debe seguir
para realizar esa tarea. Esta parte se denomina Análisis y diseño del
algoritmo.
2. Todos los pasos que hemos descripto (o sea el algoritmo resultante), lo
debemos transcribir en un lenguaje que la computadora pueda entender.
(Obtenemos de esta manera el Programa). Esta parte se denomina Fase de
Codificación.
3. Se ejecuta el programa en la computadora, que sería la fase de Ejecución

Con esto podemos decir que sin un algoritmo no existe el programa.


Más adelante veremos que existen muchos lenguajes de programación; pero los
algoritmos son totalmente independientes tanto del lenguaje que vamos a usar para
obtener el programa como de la computadora que va a ejecutar ese programa.
Para aclarar un poco esto podemos dar un ejemplo de la vida diaria:
Una receta de cocina puede estar escrita en castellano, ingles o alemán pero el algoritmo
(los pasos que debemos seguir para obtener el plato), siempre van a ser los mismos,
independientemente del idioma que hable el cocinero.
En Informática, los algoritmos son mucho más importantes que los lenguajes de
programación o las computadoras, porque tanto los lenguajes de programación como la
computadora, son solo una herramienta necesaria para que el programa se ejecute.

1
Programa: Es un conjunto de órdenes mediante el cual se le dice a la computadora qué debe
hacer y cómo lo debe hacer. Ese programa está escrito en un lenguaje que la computadora puede
entender.

Página 7
Programación Lógica

Las características más importantes que debe cumplir todo algoritmo son:
- Un algoritmo tiene que ser preciso (justo, exacto, no aproximado)
e indicar el orden que deben seguir los pasos.
- Un algoritmo debe estar bien definido (si seguimos el algoritmo
más de una vez, siempre debemos llegar al mismo resultado).
- Un algoritmo debe ser finito (Se debe obtener el resultado en un
tiempo humanamente razonable).

Todo algoritmo está compuesto por tres partes.


En el ejemplo de la receta de cocina las partes serían:
Entrada: Los ingredientes y utensilios de cocina que vamos a usar.
Proceso: La elaboración de la receta (la mezcla de todos los ingredientes).
Salida: El plato terminado (por ejemplo una torta).

Tipos de Algoritmos
Algoritmos Cualitativo
Son los algoritmos descritos mediante palabras. Ejemplos:

• La elaboración de una receta de cocina


• El tejido a mano de una bufanda.
• Búsqueda de un número telefónico.
• El cambio de una rueda
• El cambio de un foco quemado.

Algoritmo Cuantitativos

Son los algoritmos que se basan en cálculos numéricos. Ejemplos:


• Pasos a seguir para resolver una ecuación de segundo grado.
• Pasos a seguir para calcular los sueldos de los empleados de una empresa.
• Instrucciones para calcular los impuestos a pagar de los vecinos de un municipio

Ejemplo Cuantitativo: Leer la base y altura de un rectángulo y mostrar el área en


pantalla.

Página 8
Programación Lógica

Entrada (Lectura de datos):


Se conocen los valores de la Base y la Altura
Proceso (Calculo de Área):
Área = Base * Altura
Salida (Muestra los resultados):
Muestra valor del Área

Ejemplo Cualitativo: Un socio de una biblioteca solicita un libro para lectura, SI el libro se
encuentra se le presta el libro, SI NO se devuelve la ficha de pedido.

Inicio
Leer Ficha de pedido
Examinar el Estante
SI el libro esta en Estante Entonces
Se acepta el pedido
Se recepciona Carnet de socio.
Si no
Se niega el pedido
Se devuelve Ficha de Pedido
Fin Si
Fin

Cómo descubrir un buen algoritmo

Lo más difícil para cualquier persona es encontrar el algoritmo (encontrar una secuencia
de pasos o instrucciones) para poder resolver un problema o llegar a realizar una tarea.
La capacidad para resolver un problema no es exclusiva de las ciencias de la
computación, sino que es mas bien una aptitud artística o imaginativa que deberá
desarrollarse.
Los científicos de Computación, se basan en los pasos enunciados a fines de los años
cuarenta por el matemático G. Polya que enseñan a resolver problemas, simplemente que
estos pasos fueron traducidos al contexto de la informática; estos pasos son:
Primer paso: Entender el problema.
Segundo paso: Pensar y diseñar el algoritmo que podría resolver este
problema.
Tercer paso: Escribir el algoritmo en el lenguaje corriente, y luego traducirlo
(o codificarlo) en un lenguaje de programación para convertirlo en un
programa que pueda ser ejecutado por la computadora.

Página 9
Programación Lógica

Cuarto paso: Evaluar el programa, probarlo con datos extraídos de la


realidad y ver la posibilidad de usarlo como herramienta para resolver otros
problemas.
Para poder resolver un problema, muchas veces debemos buscar un problema que ya fue
resuelto con anterioridad, y tratar de aplicar esa solución a nuestro problema actual.
No es necesario que ya en el primer bosquejo del algoritmo, tengamos que prever todos
los pasos hasta el mínimo detalle de golpe. Mas bien tenemos que dividir el gran
problema en otros más pequeños y más fáciles de resolver. Este procedimiento o esta
manera de trabajar se denomina refinamiento por pasos sucesivos.

Por ejemplo:
Un cliente ejecuta un pedido a una fábrica. La fábrica examina en su banco de datos la
ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido, en caso
contrario rechazar el pedido.

1. Inicio
2. Leer el pedido
3. Examinar ficha del cliente
4. Si el cliente es solvente aceptar pedido, en caso contrario rechazar pedido
5. Fin

En el caso de un algoritmo para cambiar la rueda de un auto

El primer bosquejo podría ser:


1. Inicio.
2. Traer gato.
3. Levantar el coche con el gato.
4. Aflojar tornillos de las ruedas.
5. Sacar los tornillos de las ruedas.
6. Quitar la rueda.
7. Poner la rueda de repuesto.
8. Poner los tornillos.
9. Apretar los tornillos.
10. Bajar el gato.
11. Fin

Página 10
Programación Lógica

Es probable que algunos pasos deban detallarse de manera tal que las instrucciones sean
más simples y precisas. El algoritmo para cambiar la rueda de un auto podría quedar así:

1. Inicio
2. Si el coche no tiene el gato, llamar a la estación de servicio e ir al paso
número 17; en caso contrario, continuar con el paso número 3.
3. Colocar el gato debajo del coche.
4. Levantar el coche con el gato.
5. Sacar la llave inglesa del auto
6. Aflojar y sacar los tornillos de la rueda.
7. Si quedan tornillos por quitar, repetir el paso Número 6; en caso contrario,
continuar con el paso Número 8.
8. Quitar la rueda.
9. Sacar la rueda de repuesto del baúl.
10. Poner la rueda de repuesto.
11. Poner los tornillos y ajustarlos.
12. Si todos los tornillos no están ajustados, repetir el paso número 11; en caso
contrario seguir con el paso número 13.
13. Bajar el gato.
14. Sacarlo debajo del auto.
15. Guardar la rueda pinchada en el baúl.
16. Guardar el gato en el baúl.
17. Fin.

Determinar el mayor de tres números enteros.


1. Inicio
2. Comparar el primero y el segundo entero, deduciendo cuál es el mayor.
3. Comparar el mayor anterior con el tercero y deducir cuál es el mayor. Este será el
resultado.
4. Fin

Los pasos anteriores se pueden descomponer en otros pasos más simples en los que se
denomina refinamiento del algoritmo.

Página 11
Programación Lógica

1. Inicio
2. Obtener el primer número (entrada), denominado NUM1
3. Obtener el segundo número (entrada), denominado NUM2

4. Comparar NUM1 con NUM2 y seleccionar el mayor; si los dos enteros son
iguales, seleccionar NUM1. Llamar a este número MAYOR.

5. Obtener el tercer número (entrada), y se denomina NUM3.

6. Compara MAYOR con NUM3 y seleccionar el mayor ; si los dos enteros son
iguales, seleccionar el MAYOR. Denominar a este número MAYOR.

7. Presentar el valor MAYOR (salida).

8. Fin

Entonces:

El refinamiento por pasos sucesivos de un problema consiste en


descomponer los pasos de un problema, en otros más pequeños, y estos pasos
pequeños a su vez los podemos descomponer en otros más pequeños aún,
hasta que todo el problema queda reducido a un conjunto de subproblemas que
sean fáciles de resolver.
Este método se suele denominar también Divide y vencerás.

El refinamiento de los algoritmos es una técnica que se denomina Diseño descendente


(o top down) y que deben aprender todos los analistas de sistemas y programadores,
aunque más adelante veremos que hay problemas que no se pueden resolver con esta
técnica.

Las ventajas de utilizar esta técnica son:


- El problema se comprende más fácilmente si lo dividimos en
partes más pequeñas que llamaremos módulos o segmentos.
- Las modificaciones en cada módulo son mucho más fáciles.

Página 12
Programación Lógica

Ejemplos:
¿Qué hacer para ver la película Titanic?
La respuesta es muy sencilla, y el primer bosquejo del algoritmo sería algo así:

1. Inicio
2. Ir al cine
3. Comprar una entrada
4. Ver la película
5. Fin

El algoritmo consta de 5 pasos, cada uno de los pasos se deben ejecutar antes de que se
realice el siguiente (por eso están enumerados). El algoritmo es muy sencillo, pero lo
debemos descomponer en pasos más simples aplicando el refinamiento sucesivo.
Así por ejemplo, un primer refinamiento se puede escribir de la siguiente forma:

1. Inicio
2. Ver la cartelera de los cines
3. Si no se proyecta “Titanic”, decidir otra actividad e ir al paso 11; de lo contrario ir
al cine.
4. Ponerse en la cola para comprar las entradas
5. En caso de que no haya localidades en venta, refunfuñar e ir al paso 11; de lo
contrario comprar una entrada.
6. Entrar al cine
7. Buscar el asiento que figura en el boleto de entrada.
8. Ubicarse en el asiento
9. Mirar la película
10. Cuando termina la película, retirarse del cine.
11. Fin

Página 13
Programación Lógica

"TECNICAS DE DISEÑO"

Con el objeto de facilitar el diseño de algoritmos y la organización de los diversos


elementos de los que se componen se utilizan algunas técnicas que muestran una
metodología a seguir para resolver los problemas. Estas técnicas hacen que los
programas sean más fáciles de escribir, verificar, leer y mantener.

Algunas de las técnicas más conocidas son:

• Top Down (diseño descendente)


• Botton Up
• Warnier Orr

Top Down

Es una técnica para diseñar que consiste en tomar el problema en forma inicial como una
cuestión global y descomponerlo sucesivamente en problemas más pequeños y por lo
tanto, de solución más sencilla.

La descomposición del problema original (y de las etapas subsecuentes), puede


detenerse cuando los problemas resultantes alcanzan un nivel de detalle que el
programador o analista pueden implementar fácilmente.

El problema se descompone en etapas o estructuras jerárquicas, de modo que se puede


considerar cada estructura como dos puntos de vista: lo que hace?, y cómo lo hace?. Si
se considera un nivel n de refinamiento, las estructuras se consideran de la siguiente
forma:

• nivel n : Vista desde el exterior.

"lo que hace?"

• Nivel n+1: Vista desde el interior.

"cómo lo hace?"

Botton Up

Esta técnica consiste en partir de los detalles más precisos del algoritmo completando
sucesivamente módulos de mayor complejidad, se recomienda cuando ya se cuenta con
experiencia y ya se sabe lo que se va a hacer.

Conforme se va alcanzando el desarrollo de módulos más grandes se plantea como


objetivo final la resolución global del problema.

Este método es el inverso del anterior y es recomendable cuando se tiene un modelo a


seguir o se cuenta con amplia experiencia en la resolución de problemas semejantes.

Página 14
Programación Lógica

La técnica de Botton Up es frecuentemente utilizada para la realización de pruebas a


sistemas ya concluidos.

PROGRAMACIÓN Estructurada

La programación estructurada es una teoría de programación que consiste en construir


programas de fácil comprensión.

La programación estructurada es especialmente útil, cuando se necesitan realizar


correcciones o modificaciones después de haber concluido un programa o aplicación. Al
haberse utilizado la programación estructurada, es mucho más sencillo entender la
codificación del programa, que se habrá hecho en diferentes secciones.

Se basa en la metodología de desarrollo de programas llamada refinamiento sucesivos:


Se plantea una operación como un todo y se divide en segmentos más sencillos o de
menor complejidad. Una vez terminado todos los segmentos del programa, se procede a
unificar las aplicaciones realizadas por un grupo de programadores. Si se ha utilizado
adecuadamente la programación estructurada, esta integración debe ser sencilla y no
presentar problemas al integrar la misma, y de presentar algún problema, será
rápidamente detectable para su corrección.

Su representación se realiza a través de diagramas de flujo o flow chart, pseudocódigo,


diagramas NS, los cuales representa el programa con sus entradas, procesos y salidas.

La programación estructurada propone segregar los procesos en estructuras lo más


simple posibles, las cuales se conocen como secuencia, selección e interacción. Ellas
están disponibles en todos los lenguajes modernos de programación imperativa en forma
de sentencias. Combinando esquemas sencillos se pueden llegar a construir sistemas
amplios y complejos pero de fácil entendimiento.

VENTAJAS POTENCIALES

Un programa escrito de acuerdo a estos principios no solamente tendrá una estructura,


sino también una excelente presentación.

Un programa escrito de esta forma tiende a ser mucho más fácil de comprender que
programas escritos en otros estilos.

La simplicidad de comprensión del contenido de un programa puede facilitar el chequeo


de la codificación y reducir el tiempo de prueba y depuración de programas. Esto ultimo es
cierto parcialmente, debido a que la programación estructurada concentra los errores en
uno de los factores más generador de fallas en programación: la lógica.

Un programa que es fácil para leer y el cual esta compuesto de segmentos o módulos
bien definidos tiende a ser simple, rápido y menos expuesto a mantenimiento. Estos
beneficios derivan en parte del hecho que, aunque el programa tenga una extensión

Página 15
Programación Lógica

significativa, en documentación tiende siempre a estar al día, esto no suele suceder con
los métodos convencionales de programación.

La programación estructurada ofrece estos beneficios, pero no se la debe considerar


como una panacea ya que el desarrollo de programas es, principalmente, una tarea de
dedicación, esfuerzo y creatividad.

TEOREMA DE LA ESTRUCTURA

El teorema de la estructura establece que un programa propio puede ser escrito utilizando
solamente las siguientes estructuras lógicas de control: secuencia, selección e iteración.

Un programa de define como propio si cumple con los dos requerimientos siguientes:

a. Tiene exactamente una entrada y una salida para control del programa.

b. Existen caminos seguibles desde la entrada hasta la salida que conducen


por cada parte del programa, es decir, no existen bucles infinitos ni
instrucciones que no se ejecutan.

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. Es
decir una función después de la otra.

Selección: Es la elección entre dos o más acciones tomando la decisión en base al


resultado de evaluar una condición. Esta estructura de control es denominada usualmente
SI.

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.

SEGMENTACION

Para la comprensión de un programa se haga en forma fácil y rápida es necesario que, al


revisarlo, uno no tenga que hojear una gran cantidad de paginas para entender cuales el
trabajo que realiza. Una regla practica para lograr estos fines es establecer que cada
segmento o módulo del programa no exceda, en longitud, a una pagina de codificación, o
sea, alrededor de 50 líneas.

La segmentación no es solamente particionar un programa en porciones cuya longitud sea


de unas 50 líneas; esta técnica debe cumplir con ciertas características fundamentales:

a. La segmentación reflejara la división del programa en partes que se


relacionen entre sí en forma jerárquica, formando una estructura de árbol.
Esta organización puede ser representada gráficamente por un diagrama
de procesos, lo que hace más sencillo comprender la relación existente

Página 16
Programación Lógica

entre un segmento y el resto del programa. Adicionalmente, podemos


indicar que, el segmento en la cumbre de la estructura jerárquica contendrá
las funciones de control de mas alto nivel, mientras que los segmentos
inferiores en esta organización contendrán funciones detalladas.

b. Una segmentación bien diseñada deberá mostrar, claramente, las


relaciones existentes entre las distintas funciones de manera que sea fácil
comprender lo que debe hacer el programa y asegurar que efectivamente
lo realice. Este hecho, garantizara 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.

c. En una segmentación bien realizada la comunicación entre segmentos se


lleva a cabo de una manera cuidadosamente controlada. Algunos autores
recomiendan que los segmentos consistan en procedimientos y la única
comunicación existente entre ellos sea a través de una lista de parámetros,
esto reduce la oportunidad de que interactúen entre ellos de una manera
indeseada e inentendible.

INDENTACION

El uso de la indentacion es importante debido a que, cuando se es consistente en su


utilización, facilita la lectura del programa al mostrar en una forma gráfica las relaciones
existentes entre las distintas instrucciones.

La indentacion puede ser de gran beneficio, tal como se muestra continuación, donde
ambos programas realizan la misma función, pero el de la derecha es más fácil de
comprender, verificar y corregir.

DIRECTRICES PARA INDENTAR

Debe comprenderse claramente que las líneas siguientes solo pretenden presentar unas
directrices de indentacion, sin pretender que estas sean las únicas reglas a seguir en este
proceso, sin que sea motivo de preocupación la diferencia respecto a las sugerencias
dadas aquí, lo importante es que se establezcan unas normas y se cumplan de manera
consistente.

Las siguientes son sugerencias para el desarrollo de una política de indentacion, la idea
fundamental es ayudar a que el lector de un programa le sea fácil comprender las
relaciones y las funciones existentes en él:

a. En los lenguajes donde se permite el uso de etiquetas, estas deben colocarse lo


más externas posibles, por ejemplo comenzando en la columna 2, y deben estar
separadas por una línea (siempre que lo permita el lenguaje en uso).

b. Se obtiene consistencia si todas las instrucciones se comienzan en una misma


columna, por ejemplo en la columna 4 o cualquier otra ubicada a su derecha.

Página 17
Programación Lógica

c. En los lenguajes en que se hagan declaraciones sobre las variables a utilizar, la


información quedara mas claramente representada si los atributos declarados se
alinean en forma vertical.

d. El uso de líneas en blanco ayuda a mostrar con mas claridad las relaciones
existentes entre distintos ítems agrupados en las declaraciones

e. Las instrucciones son mucho mas fáciles de localizar y de cambiar si no se escribe


mas de una instrucción por línea.

f. La visión de control de las estructuras lógicas o de los bloques se clarifica si las


instrucciones controladas son idénticas por alguna cantidad constante. Se sugiere
una indentacion de tres espacios.

VENTAJAS DE LA PROGRAMACION ESTRUCTURADA

Con la programación estructurada elaborar programas de computadora sigue siendo una


labor que demanda esfuerzo, creatividad, habilidad y cuidado. Sin embargo, podemos
obtener las siguientes ventajas:

1. Los programas son más fáciles de entender. Un programa estructurado puede ser
leído en secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un
sitio a otro en la lógica, lo cual es típico de otros estilos de programación. La
estructura del programa es mas clara puesto que las instrucciones están mas
ligadas o relacionadas entre sí, por lo que es más fácil comprender lo que hace
cada función.

2. Reducción del esfuerzo en las pruebas. El programa se puede tener listo para
producción normal en un tiempo menor del tradicional; por otro lado, el
seguimiento de las fallas("debugging") se facilita debido a la lógica más visible, de
tal forma que los errores se pueden detectar y corregir mas fácilmente.

3. Reducción de los costos de mantenimiento.

4. Programas más sencillos y más rápidos

5. Aumento de la productividad del programador

6. Se facilita la utilización de las otras técnicas para el mejoramiento de la


productividad en programación

7. Los programas quedan mejor documentados internamente.

Página 18
Programación Lógica

Técnicas de Representación de algoritmos

Los algoritmos pueden describirse utilizando diversos lenguajes. Cada uno de estos
lenguajes permiten describir los pasos con mayor o menor detalle.

Lenguaje Natural

Es aquél que escribe en español, en nuestro caso, los pasos a seguir utilizando un
vocabulario cotidiano. Se le conoce como lenguaje jerga cuando se utilizan términos
especializados de una determinada ciencia, profesión o grupo.

Lenguaje Natural de Programación(Pseudocódigo)

Son aquellos que están orientados a la solución de problemas que se definen de una
manera precisa. Generalmente son aplicados para la elaboración de fórmulas o métodos
científicos.
Tiene las siguientes características :
• Evita la ambigüedad (algo confuso que se puede interpretar de varias maneras).
• Son precisos y bien definidos.
• Utilizan términos familiares al sentido común.
• Elimina instrucciones innecesarias.

Lenguaje de Programación:

Es aquél que se utiliza para introducir en la computadora un algoritmo específico. Es un


conjunto de palabras, símbolos y reglas sintácticas mediante los cuales puede indicar a la
computadora los pasos a seguir para resolver un problema.
Los lenguajes de programación pueden clasificarse por diversos criterios, siendo el más
común su nivel de semejanza con el lenguaje natural, y su capacidad de manejo de
niveles internos de la máquina.
Los principales tipos de lenguajes utilizados son tres :
• Lenguaje de Máquina.
• Lenguaje de bajo Nivel (ensamblador).
• Lenguajes de Alto Nivel.

Página 19
Programación Lógica

Lenguaje de Máquina
Son aquellos que están escritos en lenguajes directamente inteligibles por la máquina
(computadora), ya que sus instrucciones son cadenas binarias (cadenas o series de
caracteres de dígitos 0 y 1) que especifican una operación y las posiciones (dirección) de
memoria implicadas en la operación se denominan instrucciones de máquina o código
máquina. El código máquina es conocido como código binario.
Las instrucciones en lenguaje máquina dependen del hardware de la computadora y, por
tanto, diferirán de una computadora a otra.

Ventajas del Lenguaje de Máquina


• Posibilidad de cargar (transferir un programa a la memoria) sin necesidad de
traducción posterior, lo que supone una velocidad de ejecución superior a
cualquier otro lenguaje de programación.

Desventajas del Lenguaje Máquina


• Dificultad y lentitud en la codificación.
• Poca fiabilidad.
• Gran dificultad para verificar y poner a punto los programas.
• Los programas solo son ejecutables en el mismo procesador (CPU).

En la actualidad, las desventajas superan a las ventajas, lo que hace prácticamente no


recomendables a los lenguajes máquinas.

Lenguajes de Bajo Nivel


Son más fáciles de utilizar que los lenguajes máquina, pero al igual que ellos, dependen
de la máquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador.
Las instrucciones en lenguaje ensamblador son instrucciones conocidas como
nemotécnicos. Por ejemplo, nemotécnicos típicos de operaciones aritméticas son: en
inglés : ADD, SUB, DIV, etc. ; en español : SUM, RES, DIV, etc.
Una instrucción típica de suma sería : ADD M, N, P
Esta instrucción significa "sumar el contenido en la posición de memoria M al número
almacenado en la posición de memoria N y situar el resultado en la posición de memoria
P" . Evidentemente es más sencillo recordar la instrucción anterior con un nemotécnico
que su equivalente en código máquina.

0110 1001 1010 1011

Página 20
Programación Lógica

Un programa escrito en lenguaje ensamblador, requiere de una fase de traducción al


lenguaje máquina para poder ser ejecutado directamente por la computadora.
El programa original escrito en lenguaje ensamblador se denomina programa fuente y el
programa traducido en lenguaje máquina se conoce como programa objeto, el cual ya es
directamente entendible por la computadora.

Ventajas del lenguaje ensamblador frente al lenguaje máquina


• Mayor facilidad de codificación y, en general, su velocidad de cálculo.

Desventajas del lenguaje ensamblador


• Dependencia total de la máquina lo que impide la transportabilidad de los
programas (posibilidad de ejecutar un programa en diferentes máquinas. Por
ejemplo el lenguaje ensamblador de una PC es distinto del lenguaje ensamblador
del Apple Machintosh.
• La formación de los programadores es más compleja que la correspondiente a los
programadores de alto nivel, ya que exige no solo las técnicas de programación,
sino también el conocimiento del interior de la máquina.

Los lenguajes ensamblador tienen sus aplicaciones muy reducidas, se centran


básicamente en aplicaciones de tiempo real, control de procesos y de dispositivos
electrónicos.

Lenguajes de Alto Nivel


Estos lenguajes son los más utilizados por los programadores. Están diseñados para que
las personas escriban y entiendan los programas de un modo mucho más fácil que los
lenguajes máquina y ensambladores. Un programa escrito en lenguaje de alto nivel es
independiente de la máquina (las instrucciones no dependen del diseño del hardware o de
una computadora en particular), por lo que estos programas son portables o
transportables. Los programas escritos en lenguaje de alto nivel pueden ser ejecutados
con poca o ninguna modificación en diferentes tipos de computadoras.

Ventajas de los lenguajes de alto nivel


• El tiempo de formación de los programadores es relativamente corto comparado
con otros lenguajes.
• La escritura de programas se basa en reglas sintácticas similares a los lenguajes
humanos. Nombres de las instrucciones tales como READ, WRITE, PRINT, OPEN,
etc.
• Las modificaciones y puestas a punto de los programas son más fáciles.

Página 21
Programación Lógica

• Reducción del costo de los programas.


• Transportabilidad.

Desventajas de los lenguajes de alto nivel


• Incremento del tiempo de puesta a punto al necesitarse diferentes traducciones del
programa fuente para conseguir el programa definitivo.
• No se aprovechan los recursos internos de la máquina que se explotan mucho
mejor en lenguajes máquina y ensambladores.
• Aumento de la ocupación de memoria.
• El tiempo de ejecución de los programas es mucho mayor.

Para una mejor compresión de este tema se definirá el concepto de programa, por ser
este un término muy utilizado en el diseño estructurado de algoritmos.

Programa : Es un conjunto de instrucciones escritas en un lenguaje de programación que


indican a la computadora la secuencia de pasos para resolver un problema.

Diferencia entre el lenguaje algorítmico y el informático.

El lenguaje algorítmico es aquel por medio del cual se realiza un análisis previo del
problema a resolver y encontrar un método que permita resolverlo. El conjunto de todas
las operaciones a realizar, y el orden en el que deben efectuarse, se le denomina
algoritmo.

El lenguaje informático es aquel por medio del cual dicho algoritmo se codifica a un
sistema comprensible por el ordenador o computadora. Este tipo de lenguaje es más
cercano a la máquina que al ser humano y podemos distinguir distintos tipos dependiendo
de la proximidad a la maquina.

Se denomina lenguaje de alto nivel aquel que es más cercano a la comprensión humana y
lenguaje de bajo nivel a aquellos que son más comprensibles por la máquina. En
concreto, nosotros vamos a estudiar un lenguaje en la frontera de uno de bajo nivel. Es
por ello que el 'C' es tan potente y rápido, pues las funciones principales representan las
funciones más básicas de la computadora.

Página 22
Programación Lógica

Historia y Aplicación de los Lenguajes Algorítmicos

Al igual que los idiomas sirven de vehículo de comunicación entre los seres humanos,
existen lenguajes que realizan la comunicación entre los seres humanos y las
computadoras. Estos lenguajes permiten expresar los programas o el conjunto de
instrucciones que el operador humano desea que la computadora ejecute.

Los lenguajes de computadoras toman diferentes formas; los de las primeras


computadoras, como la ENIAC y la EDSAC, se componían en el lenguaje real de las
máquinas mismas. La dificultad de programar las máquinas de esta manera limitaba
drásticamente su utilidad y proporcionaba un fuerte incentivo para que se desarrollaran
lenguajes de programación más orientados hacia la expresión de soluciones con la
notación de los problemas mismos.

Los primeros lenguajes de programación se conocieron como Lenguajes Ensambladores,


un ejemplo es: TRANSCODE, desarrollado para la computadora FERUT. En los
lenguajes ensambladores se define un código especial llamado mnemónico para cada una
de las operaciones de la máquina y se introduce una notación especial para especificar el
dato con el cual debe realizarse la operación.

A partir de mediados de los años 60’s aparecieron los lenguajes de propósito general
como FORTRAN, FORTRAN IV, ALGOL, COBOL, BASIC, PL/I, ADA, C, C++, PASCAL,
etc. pero el desarrollo de nuevas tecnologías, tanto en arquitectura de computadoras
como en lenguajes de programación, continúa a paso acelerado, cada vez con mayor
velocidad, el panorama está cambiando de una etapa de sistemas y lenguajes
especialmente desarrollados para aplicaciones individuales. Los lenguajes de
programación actuales son los conocidos como Lenguajes visuales, como por ejemplo
Visual Fox, Visual Basic, Java.

Página 23
Programación Lógica

Pseudocódigo

El pseudocódigo1 es una técnica de representación en un lenguaje intermedio entre el


lenguaje natural y el lenguaje de programación, no es tan rígido como un lenguaje de
programación porque permite expresar claramente cada acción que se debe realizar,
pero, impone algunas limitaciones que son muy importantes tener en cuenta para que
luego, en el momento de la trascripción a un lenguaje, sea fácil de comprender.
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.
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, además de
todo esto es fácil su traducción a lenguajes
El pseudocódigo es independiente de los lenguajes que podamos después utilizar pero
tiene ciertas palabras reservadas (Si, Entonces, Mientras, Inicio, fin) que van estar
escritas en negrita y que describen las estructuras de control elementales y procesos de
tomas de decisiones de todos los algoritmos. Todos los lenguajes de programación
utilizan estas palabras reservadas pero en inglés. Por ejemplo, Si (if), entonces (then),
sino (else), Mientras (while), Repetir (repeat).
Las diferentes estructuras de control se representan de la siguiente forma:

Estructura Secuencial

Es aquélla en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se
suceden de tal modo que la salida de una es la entrada de la siguiente y así
sucesivamente hasta el fin del proceso.

1
En el módulo número tres veremos con más detalles y en profundidad todas las reglas del
pseudocódigo , en este módulo simplemente lo usaremos para representar los algoritmos.

Página 24
Programación Lógica

Secuencia:
Inicio
acción1
acción2
:
acción n
Fin

Condicionales

La especificación formal de algoritmos tiene realmente utilidad cuando el algoritmo


requiere una descripción más complicada que una lista sencilla de instrucciones. Este es
el caso cuando existen un número de posibles alternativas resultantes de la evaluación de
una determinada condición.

Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que se suelan
denominar también estructuras de decisión o alternativas.

En las estructuras selectivas se evalúa una condición y en función del resultado la misma
se realiza una opción u otra. Las condiciones se especifican usando expresiones
lógicas(se verá en el próximo módulo). La representación de una estructura selectiva se
hace con palabras en pseudocódigo (if, then, else o bien en español si, entonces, sino.
Por ejemplo, si en el cine proyectan "Star Wars Episode II", entonces hay que formar fila
para comprar la entrada e ingresar al cine, si no, decidimos otra actividad como ir a bailar.

Las estructuras selectivas o alternativas pueden ser:

• Simples

• Múltiples

Alternativa Simple (si-entonces/if-then)

La estructura alternativa simple si-entonces (en inglés if-then o bien IF-THEN ) ejecuta
una determinada acción cuando se cumple una determinada condición. La selección si-
entonces evalúa la condición y . . .

• Si la condición es verdadera, entonces ejecuta la acción S1 (o acciones caso de


ser S1 una acción compuesta y constar de varias acciones).

• Si la condición es falsa, entonces no hacer nada.

Página 25
Programación Lógica

Alternativa Simple:
Si <condición> entonces
<acción S1>
Fin si

Ejemplo:
Si {hoy es Miércoles} entonces

Comprar entradas para el cine


Fin si

Alternativa Doble (si-entonces/if-then)

La selección si-entonces evalúa la condición y . . .

• Si la condición es verdadera, entonces ejecuta la acción S1 (o acciones caso de


ser S1 una acción compuesta y constar de varias acciones).

• Si la condición es falsa, entonces ejecuta la acción S2 (o acciones caso de ser S1


una acción compuesta y constar de varias acciones)..

Alternativa Doble:
Si <condición> entonces
<acción S1>
Si no
<acción S2>
Fin si

Observación: Tener en cuenta como el sangrado permite identificar fácilmente que grupo
de instrucciones se ejecutan en cada caso.

Ejemplo1: Realizar una llamada telefónica.

Si {señal de ocupado} entonces

Colgar el teléfono

Si no

Iniciar la conversación

Fin si

Página 26
Programación Lógica

En este caso, la condición es {señal de ocupado}, que puede ser verdadera o falsa. Si es
verdadera, entonces debemos colgar el teléfono y si no, podemos realizar la
conversación.

Repetitivas

Las estructuras que repiten una secuencia de instrucciones un número determinado de


veces se denominan Bucles y se denomina Iteración al hecho de repetir la ejecución de
una secuencia de acciones. Entre las estructuras repetitivas se encuentran:

• Mientras (while)

• Repetir (repeat)

• Desde (for)

Estructura Mientras (while)

La estructura repetitiva while, es aquélla en que el cuerpo del bucle se repite mientras se
cumple una determinada condición

Estructuras Mientras:
Mientras <condición> hacer
<acciones>
Fin Mientras

Estructura Repetir (repeat)

Esta estructura se ejecuta hasta que se cumpla una condición determinada que se
comprueba hasta el final del bucle. Se ejecuta por lo menos una vez.

El bucle repetir-Hasta se repite mientras el valor de la expresión booleana de la condición


sea falsa, justo la opuesta de la sentencia mientras.

Repetir
<acciones>
Hasta que <condición>

Página 27
Programación Lógica

Estructura Desde/Para (for)

En muchas ocasiones se conoce de antemano el número de veces que se desean


ejecutar las acciones de un bucle. En estos casos en el que el número de iteraciones es
fija, se debe usar la estructura desde o para.

La estructura Desde ejecuta las acciones del cuerpo del bucle un número específico de
veces y de modo automático controla el número de iteraciones o pasos a través del
cuerpo del bucle.

Desde vi Hasta vf Hacer


<acciones>
Fin Desde

Donde:

• vi, vf: Valores inicial y final

Salida de resultados

Los resultados de nuestros algoritmos los vamos a mostrar a través de la instrucción


imprimir, que tiene la siguiente forma general:

Imprimir(argumento 1, argumento 2, argumento 3, ... , argumento n)

Donde los argumentos pueden ser cadenas de caracteres entrecomilladas(por ejemplo:


“Juan”) o variables:
• Si son cadenas de caracteres entrecomillados se imprime literalmente lo que está
entre comillas
• Si son variables se imprime el contenido de dicha variable (no el nombre)

Ejemplo:
sueldo = 1000
trabajador = “Martínez”
Imprimir( “el sueldo de “, trabajador , ” es “, sueldo , ” Euros.“ )
La instrucción imprimir, muestra lo siguiente: el sueldo de Martínez es 1000 Pesos.

Página 28
Programación Lógica

Ejemplos de Pseudocódigo

Diseñar un algoritmo que lea dos números y los compare: Si A es mayor que B, no se
habrán ingresado en orden. En caso contrario estarán en orden.

1. Inicio
2. Leer num1, num2
3. Si num1 < num2 entonces
4. Escribir ("Están en Orden")
5. Si no
6. Escribir ("No están en Orden")
7. Fin Si
8. Fin

Diseñar un algoritmo que lea dos números y los compare: Si A es mayor que B, no se
habrán ingresado en orden. En caso contrario estarán en orden o serán iguales.

1. Inicio
2. Leer num1, num2
3. Si num1 < num2 entonces
4. Escribir ("Están en orden")
5. Si no
6. Si num1 = num2 entonces
7. Escribir ("Son iguales")
8. Si no
9. Escribir ("No están en orden")
10. Fin si
11. Fin Si
12. Fin

Página 29
Programación Lógica

Diseñar un algoritmo que lea un carácter y de terminar si está o no comprendido entre las
letras A y F.

1. Inicio
2. Leer letra
3. Si (letra >=”A”) Y Letra (<=F) entonces
4. escribir(“La” + letra +” está entre Ay F”)
5. Si no
6. escribir(“La” + letra +” No está en ese Rango”)
7. Fin Si

Diseñar un algoritmo que genere e imprima los números múltiplos de 2 hasta el número
10.

1. Inicio
2. num <- 2
3. Mientras suma <=10 hacer
4. Escribir (num)
5. num <- num +2
6. Fin Mientras
7. Fin

Calcular el salario neto de un trabajador en función del número de horas trabajadas,


precio de la hora de trabajo y considerando unos descuentos fijos al sueldo bruto en
concepto de impuestos (20%).

1. Inicio
2. Leer nombre, horas, precio_hora
3. salario_bruto Å horas * precio
4. impuestos Å 0.20 * salario_bruto
5. salario_neto Å salario_bruto_impuestos
6. escribir nombre, salario_bruto, salario_neto_bruto, salario_neto
7.Fin

Página 30
Programación Lógica

¿Cómo analizo el problema?

Datos que tengo: Tiempo empleado en la carrera: (2 horas, 25 minutos).


Total de kilómetros recorridos: (42 kilómetros, 195 metros).
Qué resultados deseo obtener: El tiempo promedio por kilómetro. (debo transformar el
tiempo total empleado a minutos).
Que operaciones debo realizar: Dividir el tiempo total en minutos por el número de
kilómetros recorridos.

El algoritmo expresado en pseudocódigo sería mas o menos1 así:

1. Inicio
2. Se introduce el tiempo total
3. Se verifica si la entrada fue correcta
4. Se establece la distancia DÅ 42,195 km.
5. Se pasa el tiempo total (2 horas, 25 minutos) a minutos: TÅ 2 X 60 + 25 = 145
minutos.
6. Se calcula el tiempo promedio: TPÅ 145 minutos / 42,195 km. = 3,436 minutos
por kilómetro.
7. Se escribe el resultado.
8. Fin

1
Se usa la expresión más o menos así pues no todas las personas piensan de la misma forma ni
todas las personas resuelven un problema de la misma manera.

Página 31
Programación Lógica

Diagramas de Flujo

Un Diagrama de Flujo2 es una de las técnicas de representación de algoritmos más


antiguas y a la vez más utilizadas, aunque su uso ha disminuido considerablemente. Es
un diagrama que utiliza símbolos (cajas) estándar mostrados a continuación, que tiene los
pasos del algoritmo escritos en ellos, que se encuentran unidos por flechas (líneas de
flujo) que indican la secuencia de operación.

Terminal: Representa el comienzo y el final de un programa

Entrada/Salida: Representa cualquier tipo de introducción de datos en


la memoria desde los periféricos.

Proceso: Representa cualquier tipo de operación, pe. Suma.

Decisión: Representa operaciones lógicas o de comparación.

A continuación veremos un algoritmo representado tanto en pseudocódigo como en


Diagramas de Flujo.
Este algoritmo lee una temperatura en grados Celsius y calcula y escribe su valor
equivalente en grados Kelvin .
INICIO

1. Inicio
Celsius
2. Leer (Celsius)

3. Kelvin <- Celsius+ 273.15


Kelvin <- Celsius + 273.15
4. Escribir(Kelvin)

5. fin
Kelvin

FIN

2
En el módulo número tres veremos con más detalles y en profundidad todas las reglas de los
Diagramas de Flujo , en este módulo simplemente lo usaremos para representar los algoritmos.

Página 32
Programación Lógica

Calcular el salario neto de un trabajador en función del número de horas trabajadas,


precio de la hora de trabajo y considerando unos descuentos fijos al sueldo bruto en
concepto de impuestos (20%).

Página 33
Programación Lógica

Diagramas Estructurados (Nassi-Schneiderman)

El diagrama N-S de Nassi-Schneiderman, también conocido como diagrama de Chapin,


es como un diagrama de flujo en el que se omiten las flechas de unión y las cajas son
contiguas. Las acciones sucesivas se escriben en cajas sucesivas, y, como en los
diagramas de flujo, se pueden escribir diferentes acciones en una caja.
Los Diagramas Estructurados, son una técnica que permite formular algoritmos mediante
una representación geométrica y de asignación de espacios de un bloque específico.
Un algoritmo se representa de la manera siguiente:

Una estructura condicional en N-S se representa de la siguiente manera :

Ejemplo: Se desea calcular el salario neto semanal de un trabajador en función del


número de horas trabajadas y la tasa de impuestos.

Página 34
Programación Lógica

Página 35
Programación Lógica

PLANTEAMIENTO DEL PROBLEMA

Como ya dijimos un algoritmo es un procedimiento a seguir, para resolver un problema en


términos de:

1. Las acciones por ejecutar y ...

2. El orden en que dichas acciones deben ejecutarse

Un algoritmo nace en respuesta a la aparición de un determinado problema. Un algoritmo


esta compuesto de una serie finita de pasos que convergen en la solución de un
problema, pero además estos pasos tienen un orden específico.

Entenderemos como problema a cualquier acción o evento que necesite cierto grado de
análisis, desde la simpleza de cepillarse los dientes hasta la complejidad del ensamblado
de un automóvil. En general, cualquier problema puede ser solucionado utilizando un
algoritmo, en este sentido podemos utilizar los algoritmos para resolver problemas de
computo.

ALGORITMO

Un algoritmo para un programador es una herramienta que le permite resaltar los


aspectos más importantes de una situación y descartar los menos relevantes. Todo
problema de cómputo se puede resolver ejecutando una serie de acciones en un orden
específico.

Por ejemplo considere el algoritmo, del diario vivir, de levantarse por la mañana que sigue
un corredor de bolsa para ir al trabajo:

1. Salir de la cama

2. quitarse el pijama

3. ducharse

4. vestirse

5. desayunar

6. arrancar el automóvil para ir al trabajo

Nótese que en el algoritmo anterior se ha llegado a la solución del problema en 6 pasos,


no se resaltan aspectos como: colocarse los zapatos después de salir de la cama, o abrir
la llave de la regadera antes de ducharse. Estos aspectos han sido descartados, pues no
tienen mayor trascendencia, en otras palabras los estamos suponiendo, en cambio
existen aspectos que no podemos obviarlos o suponerlos, de lo contrario nuestro
algoritmo perdería lógica, un buen programador deberá reconocer esos aspectos
importantes y tratar de simplificar al mínimo su problema.

Página 36
Programación Lógica

Es importante recalcar que los pasos de un algoritmo no son conmutativos pues, no daría
solución al mismo problema a tratar.

Robustez de un Algoritmo

Quiere decir que un algoritmo debe contemplar todas las posibles facetas del problema
que queremos resolver, al elaborar un algoritmo no se nos debe escapar ningún detalle
que provoque un funcionamiento malo nuestro algoritmo. Si logramos construir un
algoritmo robusto, cualquier giro inesperado del problema será controlado por el algoritmo,
es decir, debe ser flexible a cambios.

Correctitud de un Algoritmo

Es correcto cuando da una solución al problema a tratar y cumple con todos lo


requerimientos especificados tal que cumplamos con los objetivos planteados.

Completitud de un Algoritmo

Cuando un algoritmo cuenta con todos los recursos para poder llegar a una solución
satisfactoria

Eficiencia y Eficacia de un Algoritmo

Un algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando la


menor cantidad de recursos posibles, es decir, minimizando el uso memoria, de pasos y
de esfuerzo humano.

Un algoritmo es eficaz cuando alcanza el objetivo sin importar nada más, pudiendo
hacerlo utilizando la menor cantidad de recursos o podría utilizar una excesiva cantidad de
recursos.

Compilación

Para que el programa se ejecute debe ser traducido a lenguaje de máquina, sea un
leguaje que la computadora pueda entender. Esta traducción se puede hacer de dos
formas:

Utilizando intérprete: a ejecutar el programa el intérprete analiza línea por línea, lo


traduce a lenguaje de máquina y si hay algún error no ejecuta la línea y manda un
mensaje de error. Tiene la desventaja de que corre muy lentamente.

Utilizando un compilador: Traduce todo el programa a lenguaje de máquina sólo una vez.
Si el programa fuente contiene errores al final pone la lista de ellos y no compila hasta que
se corrijan.

Página 37
Programación Lógica

LECTURAS COMPLEMENTARIAS

METODOLOGIA PARA LA SOLUCION DE PROBLEMAS

A fin de resolver un problema utilizando sistemas de cómputo, debe seguirse una serie de
pasos que permiten avanzar por etapas bien definidas hacia la solución.

Estas etapas son las siguientes:

• Definición del problema.

• Análisis de los datos.

• Diseño de la solución.

• Codificación.

• Prueba y depuración.

• Documentación.

• Mantenimiento.

Definición del problema


Está dada en sí por el enunciado del problema, el cual debe ser claro y complejo. Es
importante que conozcamos exactamente "que se desea obtener al final del proceso";
mientras esto no se comprenda no puede pasarse a la siguiente etapa.

Análisis de los datos


Para poder definir con precisión el problema se requiere que las especificaciones de
entrada y salida sean descritas con detalle ya que esto es un requisito para lograr una
solución eficaz.
Una vez que el problema ha sido definido y comprendido, deben analizarse los siguientes
aspectos :
• Los resultados esperados.
• Los datos de entrada disponibles.
• Herramientas a nuestro alcance para manipular los datos y alcanzar un resultado
(fórmulas, tablas, accesorios diversos).
Una medida aconsejable para facilitar esta etapa consiste en colocarnos en lugar de la
computadora deduciendo los elementos que necesitaremos para alcanzar el resultado.

Página 38
Programación Lógica

Ejemplo
Leer el radio de un círculo y calcular e imprimir su superficie y circunferencia.

Análisis
Las entradas de datos en este problema se concentran en el radio del círculo. Dado que el
radio puede tomar cualquier valor dentro del rango de los números reales, el tipo de datos
radio debe ser real.
Las salidas serán dos variables : superficie y circunferencia que también serán de tipo
real.
Entradas : Radio del círculo (variable RADIO).
Salidas : Superficie del círculo (variable AREA).
Circunferencia del círculo (variable CIRCUNFERENCIA).
Variables : RADIO, AREA, CIRCUNFERENCIA tipo real.

Diseño de la solución
Una computadora no tiene capacidad para solucionar problemas más que cuando se le
proporcionan los sucesivos pasos a realizar, esto se refiere a la obtención de un algoritmo
que resuelva adecuadamente el problema. En caso de obtenerse varios algoritmos,
seleccionar uno de ellos utilizando criterios ya conocidos.
Esta etapa incluye la descripción del algoritmo resultante en un lenguaje natural, de
diagrama de flujo o natural de programación.
Como puede verse, solo se establece la metodología para alcanzar la solución en forma
conceptual, es decir ; sin alcanzar la implementación en el sistema de cómputo.
De acuerdo al ejemplo tenemos que la información proporcionada constituye su entrada y
la información producida por el algoritmo constituye su salida. Los problemas complejos
se pueden resolver más eficazmente por la computadora cuando se dividen en
subproblemas que sean más fácil de solucionar.
El problema de cálculo de la longitud y superficie de un círculo se puede descomponer en
subproblemas más simples :
• Leer datos de entrada.
• Calcular superficie y longitud.
• Escribir resultados (datos de salida).

Codificación
Se refiere a la obtención de un programa definitivo que pueda ser comprensible para la
máquina. Incluye una etapa que se reconoce como compilación.

Página 39
Programación Lógica

Si la codificación original se realizó en papel, previo a la compilación deberá existir un


paso conocido como transcripción.
Programa Fuente
• Esta escrito en un lenguaje de programación. (pascal, C++,Visual Fox, Visual
Basic, etc).
• Es entendible por el programador.

Programa Ejecutable
• Está en lenguaje máquina.
• Entendible por la máquina.

Prueba y depuración
Una vez que se ha obtenido el programa ejecutable, este es sometido a prueba a fin de
determinar si resuelve o no el problema planteado en forma satisfactoria.
Las pruebas que se le aplican son de diversa índole y generalmente dependen del tipo de
problema que se está resolviendo. Comúnmente se inicia la prueba de un programa
introduciendo datos válidos, inválidos e incongruentes y observando como reacciona en
cada ocasión.
El proceso de depuración consiste en localizar los errores y corregirlos en caso de que
estos existan. Si no existen errores, puede entenderse la depuración como una etapa de
refinamiento en la que se ajustan detalles para optimizar el desempeño del programa.

Documentación
Debido a que el programa resultante en esta etapa se encuentra totalmente depurado (sin
errores), se procede a la utilización para resolver problemas del tipo que dió origen a su
diseño.
En vista de que esta utilización no podrá ser supervisada en todas las ocasiones por el
programador, debe crearse un manual o guía de operación que indique los pasos a seguir
para utilizar el programa.

Mantenimiento
Se refiere a las actualizaciones que deban aplicarse al programa cuando las
circunstancias así lo requieran. Este programa deberá ser susceptible de ser modificado
para adecuarlo a nuevas condiciones de operación.
Cualquier actualización o cambio en el programa deberá reflejarse en su
documentación.

Página 40
Programación Lógica

MATERIA: PROGRAMACIÓN LÓGICA

MÓDULO: GUÍA Nº 1 – EL ESTUDIO DE LOS ALGORÍTMOS

Apellido y Nombre: .................................................................................................................

Lugar: ...................................................................... Fecha: ........................................

1. Defina el concepto de Algorítmo y que tipos conoce.


2. Cuales son las características que debe tener todo algorítmo?
3. Cuáles son las ventajas de la Programación Estructurada?
4. Existen diferencias en un Algorímo y un Programa escrito en un Lenguaje de Alto
nivel?; encaso de existir explicarlas.
5. Que entiende por Pseudocódigo y cuáles son las estructuras básicas?
6. Escribir en pseudocódigo los algoritmos que resuelvan los siguientes problemas:
• Preparar un Mate
• Preparar Huevos Fritos
• Lavar el Auto
• Alistarse para ir a la Facultad
• Cambiar una lámpara quemada por una nueva
• Realizar una llamada desde un teléfono público
7. Escriba un programa para leer un valor representando millas, que convierta dichas
millas a kilómetros (1 milla = 1.60935 kilómetros), y muestre el resultado de la
conversión.
8. Observe la siguiente secuencia de instrucciones:
1. Inicio
2. leer (A)
3. Si (A>0)
4. Imprimir (A,’es positivo’)
5. Si no
6. Imprimir (A,’es negativo’)
7. Fin si
8. Fin
Programación Lógica

• Describa, instrucción por instrucción, qué se está haciendo con este


algoritmo.
• ¿Qué pasa si A = 5? ¿Y si A = - 100?
9. Observe la siguiente secuencia de instrucciones
1. Inicio
2. leer (NúmeroA)
3. leer (NúmeroB)
4. Si (NúmeroA < NúmeroB)
5. imprimir ("El mayor es:", NúmeroB)
6. si-no
7. imprimir ("El mayor es:", NúmeroA)
8. fin-si
9. Fin

• Describe qué se está haciendo con este algoritmo.


• ¿Qué pasa si NúmeroA = 5 y NúmeroB = - 100?
• ¿Qué pasa si NúmeroA = 10 y NúmeroB = 100?
• ¿Qué pasa si NúmeroA = 10 y NúmeroB = 10?

10. Resolver los siguientes ejercicios utilizando diagramas de Flujo


• Se leen dos números sumarlos y escribir el resultado.
• Se lee un valor entero, sumarle 25, obtener su doble y escribir el resultado.
• Se leen cuatro números enteros calcular e imprimir la suma y productos de
dichos números.

Vous aimerez peut-être aussi