Resolucion de Problemas Pseudocodigos
Resolucion de Problemas Pseudocodigos
Resolucion de Problemas Pseudocodigos
Resolución de problemas
Objetivos
La resolución de problemas, utilizando como herramienta una computadora, requiere
contar con la capacidad de expresión suficiente como para indicar a la máquina lo que
debe llevarse a cabo.
Temas a tratar
Introducción.
Ejercicios.
Página 1
Introducción
La Informática es la ciencia que estudia el análisis y resolución de problemas
utilizando computadoras.
Si se piensa en la forma en que una persona indica a otra como resolver un problema, se
verá que habitualmente se utiliza un lenguaje común y corriente para realizar la
explicación, quizá entremezclado con algunas palabras técnicas. Esto es un riesgo muy
grande. Los que tienen cierta experiencia al respecto saben que es difícil transmitir el
mensaje y por desgracia, con mucha frecuencia se malinterpretan las instrucciones y por
lo tanto se ejecuta incorrectamente la solución obteniéndose errores.
Además, para poder indicar a la computadora las órdenes que debe realizar es necesario
previamente entender exactamente lo que se quiere hacer. Es fundamental conocer con
qué información se cuenta y qué tipo de transformación se quiere hacer sobre ella.
A continuación se analizarán en forma general las distintas etapas que deben seguirse para
poder llegar a resolver un problema utilizando una computadora como herramienta.
Página 2
Análisis del problema
En esta primera etapa, se analiza el problema en su contexto del mundo real. Deben
obtenerse los requerimientos del usuario. El resultado de este análisis es un modelo
preciso del ambiente del problema y del objetivo a resolver. Dos componentes
importantes de este modelo son los datos a utilizar y las transformaciones de los
mismos que llevan al objetivo.
Especificación de algoritmos
La solución de cada subproblema debe ser especificada a través de un algoritmo.
Esta etapa busca obtener la secuencia de pasos a seguir para resolver el problema.
La elección del algoritmo adecuado es fundamental para garantizar la eficiencia de
la solución.
Escritura de programas
Un algoritmo es una especificación simbólica que debe convertirse en un programa
real sobre un lenguaje de programación concreto. A su vez, un programa escrito en
un lenguaje de programación determinado (ej: Pascal, Ada, etc) es traducido
automáticamente al lenguaje de máquina de la computadora que lo va a ejecutar.
Esta traducción, denominada compilación, permite detectar y corregir los errores
sintácticos que se cometan en la escritura del programa.
Verificación
Una vez que se tiene un programa escrito en un lenguaje de programación se debe
verificar que su ejecución produce el resultado deseado, utilizando datos
representativos del problema real. Sería deseable poder afirmar que el programa
cumple con los objetivos para los cuales fue creado, más allá de los datos
particulares de una ejecución. Sin embargo, en los casos reales es muy difícil
realizar una verificación exhaustiva de todas las posibles condiciones de ejecución
de un sistema de software. La facilidad de verificación y la depuración de errores de
funcionamiento del programa conducen a una mejor calidad del sistema y es un
objetivo central de la Ingeniería de Software.
En cada una de las etapas vistas se pueden detectar errores lo cual lleva a revisar
aspectos de la solución analizados previamente.
Página 3
enunciado a resolver. Sin embargo, a lo largo de la carrera se presentarán diferentes
asignaturas que permitirán familiarizar al alumno con las técnicas necesarias para hacer
frente a problemas de gran envergadura.
Con respecto a la segunda etapa, se pospondrá el análisis de este tema hasta el capítulo
5, ya que se comenzará a trabajar con problemas simples que no necesitan ser
descompuestos en otros más elementales.
Ejemplo 3.1:
Problema : Indique la manera de salar una masa.
Algoritmo 1: Ponerle algo de sal a la masa
Algoritmo 2: Agregarle una cucharadita de sal a la masa.
El algoritmo 1 presenta una solución ambigua al problema planteado.
El algoritmo 2 presenta una solución adecuada al problema.
Ejemplo 3.2:
Problema: Determinar si el número 7317 es primo.
Algoritmo 1: Divida el 7317 entre sus anteriores buscando aquellos que lo dividan
exactamente.
Algoritmo 2: Divida el número 7317 entre cada uno de los números 1, 2, 3, 4, ..., 7315,
7316. Si una de las divisiones es exacta, la respuesta es no. Si no es así, la respuesta es
sí.
El algoritmo 1 no especifica claramente cuáles son los valores a lo que se refiere, por lo
que resulta ambiguo.
El algoritmo 2 presenta una solución no ambigua para este problema. Existen otros
algoritmos mucho más eficaces para dicho problema, pero esta es una de las soluciones
correctas.
Página 4
Ejemplo 3.3:
Problema: Determinar la suma de todos los números enteros.
En este caso no se puede determinar un algoritmo para resolver este problema. Un
algoritmo debe alcanzar la solución en un tiempo finito, situación que no se cumplirá en
el ejemplo ya que los números enteros son infinitos.
Además de no ser ambiguo, un algoritmo debe detenerse. Se supone también que
cuando se detiene, debe informar de alguna manera, su resultado. Es bastante factible
escribir un conjunto de instrucciones que no incluyan una terminación y por lo tanto dicho
conjunto de instrucciones no conformarían un algoritmo.
Ejemplo 3.4:
Problema: Volcar un montículo de arena en una zanja.
Algoritmo: Tome una pala. Mientras haya arena en el montículo cargue la pala con
arena y vuélquela en la zanja. Dejar la pala.
Este algoritmo es muy simple y no ambiguo. Se está seguro que en algún momento parará,
aunque no se sabe cuántas paladas se requerirán.
Para comprender totalmente la definición anterior falta clarificar que se entiende por
“paso elemental”.
Ejemplo 3.5:
Escriba un algoritmo que permita preparar una tortilla de papas de tres huevos.
El enunciado anterior basta para que un cocinero experto lo resuelva sin mayor nivel de
detalle, pero si este no es el caso, se deben describir los pasos necesarios para realizar la
preparación. Esta descripción puede ser:
Esto podría resolver el problema, si el procesador o ejecutor del mismo no fuera una
persona que da sus primeros pasos en tareas culinarias, ya que el nivel de detalle del
algoritmo presupone muchas cosas.
Si este problema debe resolverlo una persona que no sabe cocinar, se debe detallar, cada
uno de los pasos mencionados, pues estos no son lo bastante simples para un principiante.
Página 5
Calentar el aceite en la sartén
Verter el contenido del recipiente en la sartén
Dorar la tortilla de ambos lados
Nótese además que si la tortilla va a ser realizada por un niño, algunas tareas (por ejemplo
batir los huevos) pueden necesitar una mejor especificación.
El ejemplo anterior sólo pretende mostrar que la lista de pasos elementales que
compongan nuestro algoritmo depende de quién sea el encargado de ejecutarlo.
Si en particular, el problema va a ser resuelto utilizando una computadora, el conjunto
de pasos elementales conocidos es muy reducido, lo que implica un alto grado de detalle
para los algoritmos.
Se considera entonces como un paso elemental aquel que no puede volver a ser dividido
en otros más simples. De ahora en adelante se utilizará la palabra instrucción como
sinónimo de paso elemental.
Un aspecto importante a discutir es el detalle que debe llevar el algoritmo. Esto no debe
confundirse con el concepto anterior de paso elemental. En ocasiones, no se trata de
descomponer una orden en acciones más simples sino que se busca analizar cuáles son las
órdenes relevantes para el problema. Esto resulta difícil de cuantificar cuando las
soluciones son expresadas en lenguaje natural. Analice el siguiente ejemplo:
Ejemplo 3.6:
Desarrolle un algoritmo que describa la manera en que Ud. se levanta todas las mañanas
para ir al trabajo.
Salir de la cama
Quitarse el pijama
Ducharse
Vestirse
Desayunar
Arrancar el auto para ir al trabajo
Página 6
3.2.1 Pre y Postcondiciones de un algoritmo
Precondición es la información que se conoce como verdadera antes de comenzar el
algoritmo.
En el ejemplo 3.1:
Problema: Indique la manera de salar una masa.
Algoritmo: Agregarle una cucharadita de sal a la masa.
Se supone que se dispone de todos los elementos para llevar a cabo esta tarea. Por lo tanto,
como precondición puede afirmarse que se cuenta con la cucharita, la sal y la masa.
En el ejemplo 3.2:
Problema: Determinar si el número 7317 es primo.
Algoritmo: Divida el número 7317 entre cada uno de los números 1, 2, 3, 4, ..., 7315,
7316. Si una de las divisiones es exacta, la respuesta es no. Si no es así, la respuesta es
sí.
La postcondición es que se ha podido determinar si el número 7317 es primo o no.
En el ejemplo 3.4:
Problema: Volcar un montículo de arena en una zanja.
Algoritmo: Tome una pala. Mientras haya arena en el montículo cargue la pala con
arena y vuélquela en la zanja. Dejar la pala.
Una secuencia de acciones está formada por una serie de instrucciones que se
ejecutan una a continuación de la otra.
Página 7
Figura 3.1: Secuencia
Ejemplo 3.7: Escriba un algoritmo que permita cambiar una lámpara quemada.
Colocar la escalera debajo de la lámpara quemada
Tomar una lámpara nueva de la misma potencia que la anterior
Subir por la escalera con la nueva lámpara hasta alcanzar la lámpara a sustituir
Desenroscar la lámpara quemada
Enroscar la nueva lámpara hasta que quede apretada la nueva lámpara
Bajar de la escalera con lámpara quemada
Tirar la lámpara a la basura
Hasta ahora se ha trabajado con flujo de control secuencial, es decir, la ejecución uno a
uno de los pasos, desde el primero hasta el último.
Página 8
Con ellas es posible seleccionar un determinado sentido de acción entre un par de
alternativas específicas o repetir automáticamente un grupo de instrucciones.
o Selección
La escritura de soluciones a través de una secuencia de órdenes requiere conocer a priori
las diferentes alternativas que se presentarán en la resolución del problema.
Lamentablemente, es imposible contar con esta información antes de comenzar la
ejecución de la secuencia de acciones.
Por ejemplo, que ocurriría si en el ejemplo 1.7 al querer sacar la lámpara quemada, el
portalámparas se rompe. Esto implica que el resto de las acciones no podrán llevarse a
cabo por lo que el algoritmo deberá ser interrumpido. Si se desea que esto no ocurra, el
algoritmo deberá contemplar esta situación. Nótese que el estado del portalámparas es
desconocido al iniciar el proceso y sólo es detectado al intentar sacar la lámpara quemada.
Por lo que usar solamente la secuencia planteada es insuficiente para expresar esta
solución.
Por lo tanto, el algoritmo debe considerar las dos alternativas, es decir, qué hacer en
cada uno de los casos. La selección se notará de la siguiente forma:
si (condición)
acción o acciones a realizar si la condición es verdadera (1)
sino
acción acciones a realizar si la condición es falsa (2)
donde “condición” es una expresión que al ser evaluada puede tomar solamente uno de
dos valores posibles: verdadero o falso.
Página 9
contrario, es decir, si la condición resulta ser falsa, solo se ejecutarán las acciones de
(2).
Ir al kiosco
si(hay caramelos de menta)
Llevar caramelos de menta (1)
sino (2)
Llevar de cualquier otro tipo
Pagar 1 peso
La condición “hay caramelos de menta" sólo admite dos respuestas posibles: hay o
no hay; es decir, verdadero o falso respectivamente.
si (condición)
acción o acciones a realizar en caso de que la condición sea verdadera.
Página 10
Esto se muestra gráficamente en la figura 3.3.
Ejemplos 3.10: Su amigo se ha puesto un poco más exigente y ahora le ha pedido que
le compre $1 de caramelos de menta en el kiosco. Si no consigue caramelos de menta,
no debe comprar nada.
Ir al kiosco
si (hay caramelos de menta)
Pedir caramelos de menta por valor de $1
Pagar $1
Con este último algoritmo, a diferencia del ejemplo 1.8, si la condición “hay caramelos de
menta" resulta ser falsa, no se realizará ninguna acción.
repetir N
Acción o acciones a realizar N veces.
Página 11
Ejemplo 3.11: Escriba un algoritmo que permita poner 4 litros de agua en un balde
utilizando un vaso de 50 cc.
Al plantear una solución posible, se observa que hay dos pasos básicos: llenar el vaso
con agua y vaciarlo en el balde. Para completar los cuatro litros es necesario repetir
estas dos operaciones ochenta veces. Suponga que se dispone de un vaso, un balde y
una canilla para cargar el vaso con agua.
Este algoritmo realiza exactamente las mismas acciones que el algoritmo del ejemplo
1.8. Las ventajas de utilizar la repetición en lugar de la secuencia son: la reducción de la
longitud del código y la facilidad de lectura.
Ejemplo 3.13: Juan y su amigo quieren correr una carrera dando la vuelta a la manzana.
Considerando que Juan vive en una esquina, escriba el algoritmo correspondiente.
repetir 4
Correr una cuadra
Doblar a la derecha
Página 12
o Iteración
Existen situaciones en las que se desconoce el número de veces que debe repetirse un
conjunto de acciones. Por ejemplo, si se quiere llenar una zanja con arena utilizando una
pala, será difícil indicar exactamente cuántas paladas de arena serán necesarias para
realizar esta tarea. Sin embargo, se trata claramente de un proceso iterativo que consiste
en cargar la pala y vaciarla en la zanja.
Por lo tanto, dentro de una iteración, además de una serie de pasos elementales que se
repiten; es necesario contar con un mecanismo que lo detenga.
mientras (condición)
Acción o acciones a realizar en caso de que la condición sea verdadera.
Ejemplo 3.14: Escriba un algoritmo que permita volcar un montículo de arena en una
zanja utilizando una pala.
Página 13
Tomar la pala.
Ubicarse frente a la zanja.
mientras (no esté vacío el montículo de arena)
cargar la pala con arena
volcar la arena en la zanja
Dejar la pala.
En este punto es apropiado hacerse la siguiente pregunta. ¿Qué sentido tiene introducir
el concepto de iteración? Con toda seguridad, para los ejemplos antes mencionados no
es necesario dicho concepto para establecer clara, simple o comprensiblemente las
instrucciones del algoritmo.
Existe una razón bastante obvia para justificar esta estructura de control: es una realidad
el hecho de que las computadoras requieren instrucciones detalladas y no ambiguas acerca
de lo que deben hacer. Se debe, por lo tanto, dividir los algoritmos en pasos simples, de
modo que las computadoras puedan efectuar sus cálculos. Si se quiere que algo sea
realizado 80 veces, se le debe indicar que lo repita 80 veces. El empleo de las instrucciones
de repetición, en este caso, permite hacer esto sin tener que escribir 80 líneas de
instrucciones.
Por otro lado, el concepto de iteración es necesario para una mejor legibilidad o
facilidad de lectura de los procesos algorítmicos. La iteración es un proceso
fundamental en los algoritmos, y se debe ser capaz de pensar en términos de ciclos de
iteración para poder construir los algoritmos.
Este concepto se aplica a las tres estructuras de control vistas previamente: selección,
repetición e iteración.
Página 14
Ejemplo 3.15: Suponga que se planea una salida con amigos. La salida depende
del clima: si llueve vos y tus amigos irán al cine a ver la película elegida, por el
contrario si no llueve irán de pesca. Luego de realizar el paseo se juntarán a comentar la
experiencia vivida. Escriba el algoritmo que resuelva esta situación.
Como puede apreciarse, las acciones que deben ser realizadas cuando la condición es
verdadera se encuentran desplazadas un poco más a la derecha que el resto de la
estructura. Algo similar ocurre con las acciones a realizar cuando la condición es falsa.
De esta forma puede diferenciarse lo que pertenece a la selección del resto de las
instrucciones.
Ejemplo 3.16: Ud. desea ordenar una caja con 54 fotografías viejas de manera que
todas queden al derecho; esto es, en la orientación correcta y la imagen boca arriba. Las
fotografías ordenadas se irán guardando en el álbum familiar. Escriba el algoritmo que
le permita resolver este problema.
Ejemplo 3.17: Ud. se dispone a tomar una taza de café con leche pero previamente
debe endulzarlo utilizando azúcar en sobrecitos. Escriba un algoritmo que resuelva este
problema.
Página 15
Tomar la taza de café con leche.
Probar el café con leche
mientras (no esté lo suficientemente dulce el café)
Tomar un sobre de azúcar.
Vaciar el contenido del sobre en la taza.
Mezclar para que el azúcar se disuelva.
Probar el café con leche
Tomar el café con leche.
Conclusiones
El uso de algoritmos permite expresar, de una forma clara, la manera en que un
problema debe ser resuelto. Los elementos que lo componen son característicos de la
resolución de problemas con computadora.
Página 16