Sunteți pe pagina 1din 15

Diseo para la resolucin de problemas

La resolucin de problemas siempre se requiere cuando se enfrenta una barrera o


desafo para alcanzar una meta. En los problemas puede haber dimensiones
sociales, culturales, polticas o personales. Unos problemas pueden tener docenas
de buenas soluciones, y otros escasamente alguno. Lo que puede representar un
serio problema para una persona, puede del todo no ser un problema para otra.
En todo caso, la resolucin de problemas es parte del aprendizaje y de la vida.

La resolucin de problemas es una destreza tan crtica, que resulta difcil


imaginarse una situacin autntica en donde los estudiantes no la estn
practicando. Decidir disputas en el patio de juegos, finiquitar un desacuerdo con
un amigo, discutir con el docente respecto a una calificacin o con los padres por
la hora de llegada, son los tipos de problemas que los estudiantes deben resolver
en su vida diaria. En cualquier actividad compleja o proyecto, tambin se deben
tratar incontables problemas, tales como asuntos relativos a la tecnologa,
miembros de grupo irresponsables, materiales inadecuados, y as sucesivamente.
Especificar y describir un problema puede asemejarse ms a un proceso creativo
que a uno analtico, pues esta fase requiere de la habilidad para ver cmo pueden
diferir las cosas. Por ejemplo, Teri Pall, inventor del telfono inalmbrico en 1965,
Procesos en la resolucin de problemas.

DISEO DE SOLUCION (Algoritmos)

El diseo de algoritmos es un mtodo especfico para poder crear un modelo


matemtico ajustado a un problema especfico para resolverlo. El diseo de
algoritmos es una teora de la Investigacin de operaciones.

Diseo del algoritmo


Un algoritmo consiste en una especificacin clara y concisa de los pasos
necesarios para resolver un determinado problema, pero para poder disear
algoritmos es necesario disponer de una notacin, que llamaremos notacin
algortmica, que permita:

Describir las operaciones puestas en juego (acciones, instrucciones,


comandos,...)
Describir los objetos manipulados por el algoritmo (datos/informaciones)
Controlar la realizacin de las acciones descritas, indicando la forma en que
estas se organizan en el tiempo
Para poder describir cualquier tipo de accin de las que intervienen en un
algoritmo, diversos autores proponen el uso de un conjunto de construcciones
lgicas (secuencia, decisin e iteracin) con las que es posible escribir cualquier
programa. Lo que sigue a continuacin es la descripcin de las diferentes
construcciones disponibles para el diseo de algoritmos.
Elementos bsicos en el diseo de algoritmos

HERRAMIENTAS PARA EL DISEO DE ALGORITMOS

Las dos herramientas ms utilizadas para disear algoritmos son el Pseudocdigo


y el Diagrama de flujo.

1. Pseudocdigo

Es un lenguaje simplificado para describir un algoritmo utilizando una mezcla de


frases en lenguaje comn, y palabras claves que indican el inicio y el fin del
algoritmo y las instrucciones especficas a realizar.

Por ejemplo, el siguiente pseudocdigo corresponde al algoritmo para


calcular el rea del rectngulo: el algoritmo calcula el rea (a) de un
rectngulo cualquiera, si se le suministra la longitud de de la base (b) y la
longitud de la altura (h).

Las palabras subrayadas se llaman palabras reservadas, se deben utilizar


sangras que facilitan la lectura del algoritmo Las instrucciones en pseudocdigo
son fciles de codificar en un lenguaje de programacin.

2. Diagrama de flujo

El diagrama de flujo es la representacin grfica de un algoritmo; para ello se


utiliza un conjunto de smbolos estndares mundialmente utilizados y
desarrollados por organizaciones tales como ANSI (American National Institute) e
ISO (International Standard Organization para la elaboracin de diagramas de
flujo;

En el diagrama cada smbolo representa una accin en concreto; y cada


instruccin del algoritmo se visualiza dentro del smbolo adecuado. Los smbolos
se conectan con flechas para indicar el orden en que se ejecutan las instrucciones.

Por ejemplo, el siguiente diagrama de flujo corresponde al algoritmo para calcular


el rea del rectngulo
El ovalo rotulado con la palabra Inicio indica el comienzo del algoritmo, el
paralelogramo es el smbolo de entrada de datos e indica que se lee el valor de la
base (b) y el valor de la altura (h), el rectngulo es el smbolo de proceso e indica
que se realiza un proceso sobre los datos de entrada para calcular el rea (a)
multiplicando la base por la altura, (utilizaremos el * como operador de
multiplicacin), el siguiente es el smbolo de salida y representa un documento e
indica que se muestra el valor del rea obtenido, en cualquier dispositivo de salida,
finalmente el ovalo rotulado con la palabra Fin indica que se ha llegado al fin del
algoritmo.

Los smbolos que se utilizaran para dibujar los diagramas de flujo son los
siguientes:
Reglas para la construccin de diagramas de flujo

1. Todo diagrama de flujo debe tener un inicio y un fin.


2. Las lneas de flujo nunca deben cruzarse, para evitarlo deben utilizarse el
smbolo conector.
3. Las lneas de flujo deben terminar siempre en un smbolo.
4. No puede llegar ms de una lnea de flujo a un smbolo.
5. Todos los smbolos en un diagrama deben estar conectados mediante
una lnea de flujo; todo smbolo debe tener una lnea de flujo entrando y
otra saliendo salvo el smbolo que indica inicio o fin del diagrama.
6. Como regla general el flujo del proceso debe mostrarse de izquierda a
derecha y de arriba abajo.

Se recomienda mantener uniforme el tamao de los smbolos, por lo que el texto


que se escribe dentro no debe ser muy extenso, recurdese que el propio smbolo
indica la operacin a realizar. La forma en que se capturan los datos de entrada o
se muestran los datos de salida se detallarn al codificar el algoritmo en el
lenguaje de programacin. Esto mismo se recomienda para la representacin del
algoritmo en pseudocdigo.

DECLARACION DE LOS DATOS

Como ya se dijo los datos a procesar y los datos resultantes del proceso se
almacenan en la memoria principal de la computadora, tambin conocida como
memoria RAM (Random Access Memory), y tambin se destinan localidades de
memoria cuando se necesita almacenar resultados de clculos intermedios. Para
poder localizar los datos en la memoria se les asignan nombres; que en el
ambiente de la programacin se conocen como identificadores de datos.
Nombraremos los datos siguiendo las reglas para definir identificadores
especificadas en la mayora de los lenguajes de programacin:

Se utilizan secuencias de caracteres formadas por caracteres alfabticos y


los dgitos decimales.
El primer elemento de la secuencia debe ser un carcter alfabtico.
No se utilizan signos de acentuacin
No se utilizan espacios, si se necesita separador debe utilizarse el carcter
de subrayado (_) o guin bajo.
No se permite el uso de las palabras reservadas o palabras claves

Se recomiendan nombres cortos y nemotcnicos (su propio nombre indica lo que


representan).

Por ejemplo:

1) Son identificadores vlidos los siguientes:


longitud, altura, dato1, dato2, Coeficiente_a, numero_menor, EDAD

2) No son identificadores vlidos los siguientes:

C , porque el carcter no es un carcter permitido

1_dato, porque comienza con un dgito

numero menor, porque tiene un espacio en blanco como separador

leer, escribir e inicio, porque son palabras reservadas

INSTRUCCIONES

Un algoritmo normalmente incluye una gran cantidad de instrucciones, tambin


llamadas sentencias; inicialmente se presentan las instrucciones de asignacin,
lectura y escritura; definiendo cada una de ellas y mostrando su representacin en
pseudocdigo, su correspondiente smbolo en el diagrama de flujo y ejemplos.

Instruccin de asignacin

Esta instruccin asigna valor a un identificador, cuando se ejecuta una instruccin


de asignacin se almacena el valor asignado en la localidad de memoria
reservada para el identificador, este identificador tambin se conoce con el
nombre de variable y se caracteriza porque puede tomar diferentes valores
durante la ejecucin del algoritmo.

El formato de la instruccin de asignacin es el siguiente:


Donde variable es un identificador vlido y expresin puede estar formada por un
valor, por un conjunto de valores y operadores o por una funcin En el espacio de
memoria asignado a la variable se almacena el valor resultante de la expresin.

Una asignacin tiene tres partes, la variable, el signo de asignacin = y la


expresin cuyo valor se asigna a la variable. La variable siempre va a la izquierda
del smbolo =, mientras que la expresin siempre estar a la derecha.

Instruccin Leer

Se define la instruccin Leer para indicar que se debe enviar informacin desde un
dispositivo de entrada de datos, como el teclado, hacia la memoria En la memoria
los datos sern ubicados a travs de su nombre o identificador asignado.

El formato de esta instruccin es el siguiente:

Los smbolos < > no se incluyen en la codificacin, lo que indican es que el


programador debe definir lo que se le pide, en este caso una lista de variables.

Instruccin Escribir

Se define la instruccin Escribir para indicar que se va a enviar informacin desde


la memoria hacia un dispositivo de salida de datos, como la impresora o la pantalla
del monitor.

El formato de esta instruccin es el siguiente:


Una constante puede ser un nmero cualquiera o una secuencia de caracteres,
por ejemplo, el numero 15 o la secuencia "Error". Si la constante es una secuencia
de caracteres se escribir entre apstrofos, para indicar que lo que se escribe es
la secuencia. Por ejemplo

Escribir "Error"

Escribir 3.1416

Generalmente dentro del smbolo solo se podrn escribir listas cortas, dado que el
espacio es limitado y el tamao de los smbolos en un diagrama de flujo debe ser
uniforme; para solventar este inconveniente deben utilizarse varios smbolos de
salida. En el caso de formulas muy largas, se puede hacer referencia a su numero
dentro del smbolo.

METODOLOGIA A SEGUIR EN EL DISEO DE ALGORITMOS

El procedimiento a seguir para disear algoritmos se presenta a continuacin:

Entender el problema

Para determinar la secuencia de instrucciones que deben constituir el algoritmo,


es importante entender el problema que se pretende resolver, para asegurarse
que entiende el problema el programador debe resolverlo con papel, lpiz grafito y
borrador procurando hacer varios ejercicios de aplicacin, generalmente se
encuentran diferentes formas de resolver el problema, por lo que se debe
seleccionar la mejor alternativa de solucin.

Declaracin de datos

Una vez seleccionada la mejor alternativa debe hacerse la declaracin de datos,


para ello los datos se clasificarn de la siguiente manera:

Datos de Entrada: Los datos que se suministran


Datos de Salida: los datos o resultados que se esperan
Datos de trabajo: estos son posiciones de memoria donde se almacenaran
resultados de clculos intermedios, necesarios para obtener los datos de
salida

Se debe asignar nombre a los datos de acuerdo a las reglas para formar
identificadores. Al hacer la declaracin de los datos tambin debe especificarse el
tipo de dato que va a almacenarse en la posicin de memoria especificada, los
tipos de datos son: numrico, un carcter, una cadena de caracteres o un valor
lgico (verdadero o falso)

Especificar las formulas a utilizar

Las frmulas deben escribirse utilizando los nombres asignados a los datos.

Estructuras bsicas de control lgico

ESTRUCTURA SECUENCIAL

Se trata de la construccin donde las instrucciones se deben ejecutar una despus


de la otra, en el mismo orden en que aparecen en el algoritmo, sin dejar de
ejecutar ninguna de ellas.

Problema 2: Disee un algoritmo para calcular el rea de un crculo cualquiera y la


longitud de su circunferencia.

Entender el problema

Ejercicio 1: Consideremos un crculo de 6 centmetros de radio

rea del circulo = 3.1416 * 6*6= 113.0976


Longitud de la circunferencia = 2*3.1415 * 6 = 37.6992

Declaracin de los datos:

Dato de entrada r: radio del crculo, numrico

Datos de salida a: rea del crculo, numrico

l: Longitud de la circunferencia, numrico

Prueba de escritorio

Problemas propuestos
1) Calcular el porcentaje de hombres y mujeres que hay en un grupo de
personas.
2) Calcular el salario que recibe por mes un empleado que trabaja por
horas, retenindole el 7 por ciento por concepto de seguro de trabajo.
3) Dado el precio de un artculo y la cantidad de artculos comprados,
calcular el total a pagar considerando que se paga el 12% por concepto de
impuesto sobre ventas (ISV).
4) Calcular la nota final de un estudiante del curso de computacin I, para
ello se debe tomar en cuenta lo siguiente: que se realizaron cuatro
exmenes valorados en 80% cada uno y cuatro prcticas de laboratorio
valoradas en 20 puntos cada una.
5) Dados dos puntos en el plano cartesiano, calcular la longitud del
segmento determinado por ellos.

ESTRUCTURA DE DECISIN

Es una situacin tpica en la resolucin de problemas, que se tenga que decidir


entre realizar una instruccin u otra dependiendo del cumplimiento de una
condicin; por ejemplo: Para calcular c=b/a primero hay que verificar que a sea
diferente de cero, ya que la operacin se puede realizar nicamente si a es
diferente de cero Para representar esta situacin en el algoritmo se utiliza la
estructura condicional tambin conocida como estructura de decisin. Esta
estructura se construye de modo a que se ejecuten o se omitan algunas
instrucciones dependiendo del cumplimiento de una condicin; el resultado de
evaluar la condicin puede tomar un valor lgico verdadero o falso (V F).

La condicin puede ser una expresin relacional (por ejemplo a>o) o una
expresin lgica (por ejemplo a>b y b>c), que se construyen utilizando operadores
relacionales (>, <, =, =, =, ?) y operadores lgicos (y, o, negacin)

Existen tres tipos de decisin: decisin simple, la decisin doble y la decisin


mltiple

Decisin simple

Una decisin es simple, cuando slo se tiene un curso de accin para el caso que
el resultado de evaluar la condicin sea verdadero; es decir que si la condicin es
verdadera se debe de ejecutar la instruccin o el conjunto de instrucciones que se
indique, y si la condicin es falsa se omite la ejecucin de dicha instruccin o
conjunto de instrucciones.

El formato general de esta estructura es la siguiente:


Ejemplo: Observe el siguiente segmento de pseudocdigo y su diagrama de flujo

Problema 1. Dado el precio de un artculo y la cantidad de artculos comprados,


calcular el total a pagar, considerando que para compras superiores a 500
lempiras se dar un descuento del 10% y que el comprador debe pagar el 12% por
concepto de impuesto sobre ventas (ISV)

Entender el problema

Ejercicio 1: Se compra una docena de camisas a 130 lempiras cada una.

El valor de la compra es 12 *130=1560, como la compra es superior a 500


lempiras, tiene derecho al descuento. El 10% es igual a 1560*0.10= 156 lempiras,
el valor de la compra queda en 1560-156=1404 lempiras. El impuesto sobre
ventas es igual a 1404*0.12=168.48 y por tanto el total a pagar es igual a
1404+168.48=1572.48

Ejercicio 2: Suponga que se compran 3 camisetas a 100 lempiras cada una.

El valor de la compra es 3*100=300 lempiras, como la compra es inferior a 500


lempiras no se tiene derecho al descuento, el impuesto a pagar es de 36 lempiras
y el total a pagar es 336 lempiras.
Prueba y depuracin
Los errores humanos dentro de la programacin de computadoras son muchos y
aumentan considerablemente con la complejidad del problema. El proceso de identificar y
eliminar errores, para dar paso a una solucin sin errores se le llama Depuracin.

La Depuracin o prueba resulta una tarea tan creativa como el mismo desarrollo de la
solucin, por ello se debe considerar con el mismo inters y entusiasmo.

Resulta conveniente observar los siguientes principios al realizar una depuracin, ya que
de este trabajo depende el xito de nuestra solucin.

a) Trate de iniciar la prueba de un programa con una mentalidad saboteadora, casi


disfrutando la tarea de encontrar algn error.

b) Sospeche de todos los resultados que le arroje la solucin, con lo cual deber verificar
todos.

c) Considerar todas las situaciones posibles normales y an algunas de las anormales.

Codificacin.

La codificacin es la operacin de escribir la solucin del problema (de acuerdo a la lgica


del diagrama de flujo o pseudocdigo), en una serie de instrucciones detalladas en un
cdigo reconocible por la computadora, la serie de instrucciones detalladas se le conoce
como programa fuente, el cual se escribe en un lenguaje de programacin o lenguaje alto
nivel.

Existen diversos tipos de lenguaje de alto nivel, de acuerdo al tipo de problema que se
desea resolver, clasificndose en problemas: matemticos, cientficos, administrativos o
comerciales.

Documentacin.
Es la gua o comunicacin escrita en sus variadas formas, ya sean en enunciados,
procedimientos, dibujos o diagramas. A menudo un programa escrito por una persona, es
usado por muchas otras. Por ello la documentacin sirve para ayudar a comprender o
usar un programa o para facilitar futuras modificaciones (mantenimiento).

La documentacin debe presentarse en tres formas, externa, interna y al usuario final. La


primera debe estar integrada por los siguientes elementos:

a) Descripcin del problema.

b) Nombre del autor.

c) Diagrama de flujo y/o pseudocdigo.


d) Lista de variables y constantes.

e) Codificacin del programa.

En lo referente a la documentacin interna, sta lo constituyen los comentarios o


mensajes que agregan al cdigo, para hacer ms claro el entendimiento del proceso. A la
documentacin para el usuario se le conoce como manual del usuario. En este manual no
existe informacin de tipo tcnico, sino la descripcin del funcionamiento del programa.

Tcnicas de Diseo de algoritmos

Existen varias tcnicas de diseo de algoritmos que permiten desarrollar la


solucin al problema planteado, algunas de ellas son:

Algoritmos voraces (greedy): seleccionan los elementos ms prometedores del


conjunto de candidatos hasta encontrar una solucin. En la mayora de los casos
la solucin no es ptima.

Algoritmos paralelos: permiten la divisin de un problema en subproblemas de


forma que se puedan ejecutar de forma simultnea en varios procesadores.

Algoritmos probabilsticos: algunos de los pasos de este tipo de algoritmos estn


en funcin de valores pseudoaleatorios

Algoritmos determinsticos: El comportamiento del algoritmo es lineal: cada paso


del algoritmo tiene nicamente un paso sucesor y otro ancesor.

Algoritmos no determinsticos: El comportamiento del algoritmo tiene forma de


rbol y a cada paso del algoritmo puede bifurcarse a cualquier nmero de pasos
inmediatamente posteriores, adems todas las ramas se ejecutan
simultneamente.

Divide y vencers: dividen el problema en subconjuntos disjuntos obteniendo una


solucin de cada uno de ellos para despus unirlas, logrando as la solucin al
problema completo.

Metaheursticas: encuentran soluciones aproximadas (no ptimas) a problemas


basndose en un conocimiento anterior (a veces llamado experiencia) de los
mismos.

Programacin dinmica: intenta resolver problemas disminuyendo su coste


computacional aumentando el coste espacial.

Ramificacin y acotacin: se basa en la construccin de las soluciones al


problema mediante un rbol implcito que se recorre de forma controlada
encontrando las mejores soluciones.
Vuelta Atrs (Backtracking): se construye el espacio de soluciones del problema
en un rbol que se examina completamente, almacenando las soluciones menos
costosas.

S-ar putea să vă placă și