Professional Documents
Culture Documents
RESOLUCIÓN DE PROBLEMAS
La principal razón para que las personas aprendan a programar en general y los lenguajes de programación
en particular es utilizar la computadora como una herramienta para la resolución de problemas. Ayudado por
una computadora, la resolución de un problema se puede dividir en tres fases importantes:
El primer paso —análisis del problema— requiere que el problema sea definido y comprendido claramente
para que pueda ser analizado con todo detalle. Una vez analizado el problema, se debe desarrollar el
algoritmo —procedimiento paso a paso para solucionar el problema dado. Por último, para resolver el
algoritmo mediante una computadora se necesita codificar el algoritmo en un lenguaje de programación
BASIC, Pascal, C, java, C# etc.—, es decir, convertir el algoritmo en programa, ejecutarlo y comprobar que el
programa soluciona verdaderamente el problema. Las fases del proceso de resolución de un problema
mediante computadora se indican en la Figura1
Resolución
de
un problema
El análisis del problema exige una lectura previa del problema a fin de obtener una idea general de lo que se
solicita. La segunda lectura deberá servir para responder a las preguntas:
La respuesta a la primera pregunta indicará los resultados deseados o las salidas de/problema. La respuesta
a la segunda pregunta indicará qué datos se proporcionan o las entradas de/problema.
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 1 de 20
Servicio Nacional de Aprendizaje
Análisis
de
Problema
EJEMPLO 1
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.
Los problemas complejos se pueden resolver más eficazmente con la computadora cuando se rompen
(dividen) en sub-problemas que sean más fáciles de solucionar que el original. Este método se suele
denominar divide y vencerás (divide and conquer) y consiste en dividir un problema complejo en otros más
simples. Así, el problema de encontrar la superficie y la longitud de un círculo se puede dividir en tres
problemas más simples o sub-problemas (Figura 3).
La descomposición del problema original en sub-problemas más simples y a continuación dividir estos sub-
problemas en otros más simples que pueden ser implementados para su solución en la computadora se
denomina diseño descendente (top-downdesign). Normalmente los pasos diseñados en el primer esbozo del
algoritmo son incompletos e indicarán sólo unos pocos pasos (un máximo de doce aproximadamente). Tras
esta primera descripción, éstos se amplían en una descripción más detallada con más pasos específicos.
Este proceso se denomina refinamiento del algoritmo (stepwiserefinement). Para problemas complejos,
diferentes niveles de refinamiento se necesitan con frecuencia antes de que un algoritmo claro, preciso y
completo se pueda obtener.
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 2 de 20
Servicio Nacional de Aprendizaje
Tras los pasos anteriores (diseño descendente y refinamiento por pasos) es preciso representar el algoritmo
mediante una determinada herramienta de programación: diagrama de flujo, pseudocódigo o diagrama N.S.
Así, pues, el diseño del algoritmo se descompone en las fases recogidas en la Figura 4.
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 3 de 20
Servicio Nacional de Aprendizaje
a) Deben estar seguidas de alguna secuencia definida de pasos hasta que se obtengan un resultado
diferente.
b) Sólo puede ejecutarse una operación a la vez.
El flujo de control usual de un algoritmo es secuencial; consideremos el algoritmo que responde a la pregunta:
¿Qué hacer para ver la película ―Tiburón‖?
La respuesta es muy sencilla y puede ser descrita en forma de algoritmo general de modo similar a:
ir al cine
comprar una entrada (billete o ticket)
ver la película
regresar a casa
El algoritmo consta de cuatro acciones básicas, cada una de las cuales debe ser ejecutada antes de realizar
la siguiente. En términos de computadora, cada acción se codificará en una o varias sentencias que ejecutan
una tarea particular.
El algoritmo descrito es muy sencillo; sin embargo, como ya se ha indicado en párrafos anteriores, el
algoritmo general se descompondrá en pasos más simples en un procedimiento denominado refinamiento
sucesivo, ya que cada acción puede descomponerse a su vez en otras acciones simples. Así, por ejemplo, un
primer refinamiento del algoritmo ―ir al cine ― se puede describir de la forma siguiente:
1. inicio
2. ver la cartelera de cines en el periódico
3. sino proyectan ―Tiburón‖
entonces decidir otra actividad
si proyectan «Tiburón» ir al cine
si hay cola entonces ponerse en ella
mientras haya personas delante suya hacer
avanzar en la cola
si existen asientos disponibles entonces
comprar una entrada
encontrar el asiento correspondiente
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 4 de 20
Servicio Nacional de Aprendizaje
En el algoritmo anterior existen diferentes aspectos a considerar. En primer lugar, ciertas palabras reservadas
se han escrito deliberadamente en negrita (mientras, sino, etc.). Estas palabras describen las estructuras de
control fundamentales y procesos de toma de decisión en el algoritmo. Estas incluyen los conceptos
importantes de selección (expresadas por si-entonces-sino if-then-else) y de repetición (expresadas con
mientras-hacer o a veces repetir-hasta e iterar-fin_iterar, en inglés while-do y repeat-until) que se encuentran
en casi todos los algoritmos, especialmente los de proceso de datos. La capacidad de decisión permite
seleccionar alternativas de acciones a seguir o bien la repetición una y otra vez de operaciones básicas.
Otro aspecto a considerar es el método elegido para describir los algoritmos: empleo de indentación
(sangrado o justificación) en escritura de algoritmos. En la actualidad, es tan importante la escritura de
programas como su posterior lectura. Ello se facilita con la indentación de las acciones interiores a las
estructuras fundamentales citadas: selectivas y repetitivas. A lo largo de todo el libro la indentación o
sangrado de los algoritmos será norma constante.
Una vez que el algoritmo está diseñado y representado gráficamente mediante una herramienta de
programación (diagrama de flujo, pseudocódigo o diagrama N-S) se debe pasar a la fase de resolución
práctica del problema con la computadora.
Esta fase se descompone a su vez en las siguientes subfases:
1. Codificación del algoritmo en un programa.
2. Ejecución del programa.
3. Comprobación del programa.
En el diseño del algoritmo, éste se describe en una herramienta de programación tal como un diagrama de
flujo, diagrama N-S o pseudocódigo. Sin embargo, el programa que implementa el algoritmo debe ser escrito
en un lenguaje de programación y siguiendo las reglas gramaticales o sintaxis del mismo. La fase de
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 5 de 20
Servicio Nacional de Aprendizaje
Tras la codificación del programa, deberá ejecutarse en una computadora y a continuación de comprobar los
resultados pasar a la fase final de documentación.
Los métodos 4 y 5 no suelen ser fáciles de transformar en programas. Una descripción en español narrativo
no es satisfactoria, ya que es demasiado prolija y generalmente ambigua. Una fórmula, sin embargo, es buen
sistema de representación. Por ejemplo, la fórmula para la solución de una ecuación cuadrática es un medio
resumido de expresar el procedimiento algorítmico que se debe ejecutar para obtener las raíces.
b b 2 4ac b b 2 4ac
x1 x2
2a 2a
significa:
1. Eleve al cuadrado b.
2. Tome a; multiplicar por c; multiplicar por 4.
3. Restar el resultado de 2 del resultado 1, etc.
Sin embargo, no es frecuente que un algoritmo pueda ser expresado por medio de una simple fórmula.
Diagramas de flujo
Un diagrama de flujo (flowchart) es una de las técnicas de representación de algoritmos más antigua y a la vez
más utilizada, aunque su empleo ha disminuido considerablemente, sobre todo desde la aparición de
lenguajes de programación estructurados. Un diagrama de flujo es un diagrama que utiliza los símbolos
(cajas) estándar mostrados en la Figura 6 y que tiene los pasos del algoritmo escritos en esas cajas unidas
por flechas, denominadas líneas de flujo, que indican la secuencia en que se deben ejecutar.
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 6 de 20
Servicio Nacional de Aprendizaje
SIMBOLO DESCRIPCION
Líneas de flujo
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 7 de 20
Servicio Nacional de Aprendizaje
El diagrama citado (Figura 7) representa la resolución de un programa que deduce el salario neto de un
trabajador a partir de la lectura del nombre, horas trabajadas, precio de la hora, y sabiendo que los impuestos
aplicados son el 10 por 100 sobre el salario bruto.
Los símbolos estándar normalizados por ANSI (abreviatura de American NationalStandardsInstitute) son muy
variados. Los símbolos más utilizados representan:
— proceso
— decisión
— conectores
— fin
— entrada/salida
— dirección del flujo
En un diagrama de flujo:
a) Existe una caja etiquetada ―inicio‖, que es de tipo elíptico;
b) Existe otra caja etiquetada ―fin‖ de igual forma que en a;
c) Si existen otras cajas, normalmente son rectangulares, tipo rombo o paralelogramo (el resto de las
figuras se utilizan sólo en diagramas de flujo generales o de detalle y no siempre son imprescindibles).
Se puede escribir más de un paso del algoritmo en una sola caja rectangular. El uso de flechas significa que
la caja no necesita ser escrita debajo de su predecesora. Sin embargo, abusar demasiado de esta flexibilidad
conduce a diagramas de flujo complicados e ininteligibles.
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 8 de 20
Servicio Nacional de Aprendizaje
EJEMPLO 2
Calcular la media de una serie de números positivos suponiendo que los datos se leen desde una terminal. Un
valor de cero como entrada indicará que se ha alcanzado el final de la serie de números positivos.
El primer paso a dar en el desarrollo del algoritmo es descomponer el problema en una serie de pasos
secuenciales. Para calcular una media se necesita sumar y contar los valores.
Por consiguiente, nuestro algoritmo en forma descriptiva sería:
El refinamiento del algoritmo conduce a los pasos sucesivos necesarios para realizar las operaciones de
lectura de datos, verificación del último dato, suma y media de los datos.
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 9 de 20
Servicio Nacional de Aprendizaje
Ejemplo 3. Diagrama de flujo sencillo con los pasos a seguir si una lámpara no funciona.
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 10 de 20
Servicio Nacional de Aprendizaje
1. Los Diagramas de flujo deben escribirse de arriba hacia abajo, y/o de izquierda a derecha.
2. Los símbolos se unen con líneas, las cuales tienen en la punta una flecha que indica la dirección que
fluye la información procesos, se deben de utilizar solamente líneas de flujo horizontal o verticales
(nunca diagonales).
3. Se debe evitar el cruce de líneas, para lo cual se quisiera separar el flujo del diagrama a un sitio
distinto, se pudiera realizar utilizando los conectores. Se debe tener en cuenta que solo se vana utilizar
conectores cuando sea estrictamente necesario.
Incorrecto Correcto
Incorrecto Correcto
6. Solo los símbolos de decisión pueden y deben tener más de una línea de flujo de salida.
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 11 de 20
Servicio Nacional de Aprendizaje
Estructuras Básicas
Estructura Secuencia
Está formada por varios bloques uno a continuación del otro. Desde el punto de vista gráfico, la estructura
secuencia se representa como un conjunto de bloques dispuestos en forma vertical, con la salida de cada
uno conectado a la entrada del siguiente. Esto significa que las acciones representadas por los respectivos
bloques se ejecutadas una después de la otra en estricto orden.
Ejemplo.
La construcción de una casa requieres la ejecución de un conjunto de acciones que podría representarse
con un diagrama de flujo como sigue:
Inicio
Medición Terreno
Hacer planos
Preparación terreno
Hacer cimientos
Inicio.
Medir Terreno
Hacer planos
Ductos sanitarios Preparar terrenos
Hacer cimientos
Hacer ductos sanitarios
Hacer Muros Hacer muros
Hacer techo
Hacer conexiones eléctricas
Hacer Techo Realizar acabados
Fin
Conexiones eléctricas
Realizar Acabados
Fin
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 12 de 20
Servicio Nacional de Aprendizaje
Estructuras de decisión.
Gráficamente está formada por una toma de decisión, dos bloques y un nodo con dos entradas y un
salida. Cuando el proceso entra a la estructura, ingresa por el nodo de decisión donde se consulta el
cumplimiento de una condición. Si la condición se cumple, el flujo continúa por uno de los dos caminos que
conduce a realizar la acción correspondiente Si la condición no se cumple, el proceso continúa por el otro
camino.
Después de realizar cualquiera de las dos acciones la salida de la estructura es única, a través de l nodo
donde se unen los dos caminos.
Ejemplo1.
Cada vez que salimos de la casa examinamos los pronósticos del tiempo para decidir sobre qué clase de
ropa usaremos en la calle. Podríamos representarlo de la siguiente manera.
Salir de la Casa
Salir de la casa
NO Sino entonces
Usar ropa abrigada
Usar ropa ligera Usar ropa abrigada
Uno de los boques de la estructura puede ser vacío (no realizar ninguna operación).
Opción A.
Si condición entonces
Condición
SI
Condición
SI Realizar proceso 2
NO NO
Opción B.
Proceso 2 Proceso 1
Si condición
Si no entonces
Realizar Proceso 2
A B
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 13 de 20
Servicio Nacional de Aprendizaje
Ejemplo 2:
Un sensor de temperatura contra incendios en una bodega, está encargado de dar la alarma en caso de que
la temperatura sobrepase cierto límite previamente establecido.
El diagrama de flujo que describe el funcionamiento del sensor se muestra a continuación
Temperatura NO
< Límite?
Si temperatura es menor que límite entonces
No haga nada
SI
Si no entonces
Activar Alarma
Activar Alarma
NO
Dar una brazada
LLegué a
la orilla?
Fin mientras
SI
Cada vez que se da un brazada se retorna a la verificación de la condición, así, si estoy separado de la
orilla, doy una brazada tantas veces como sea necesario hasta que la condición deje de cumplirse.
En forma general la condición mientras tiene la siguiente estructura:
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 14 de 20
Servicio Nacional de Aprendizaje
NO
Condición?
SI
Proceso
En el gráfico se observa que si al consultar la condición por primera vez, y si esta no se cumple, entonces
el proceso o tarea descrita en el bloque no se ejecuta ni una sola vez.
Refinamiento
Las tres estructuras de programación son en realidad todo lo que se requiere para describir cualquier
algoritmo, por esto se llaman estructuras básicas.Con estas estructuras se han desarrollado combinaciones,
las cuales resultan muy útiles a la hora de programas.
Cuando se inicia la labor de creación de un programa o una tarea, todo es una gran idea global cuyo
contenido hay que explicar a medida que se avanza. En el diagrama de flujo, cada proceso se representa
por medio de un bloque que tiene entradas y salida, además se incluye las tareas que se van a realizar.
Tomando como ejemplo el algoritmo para la construcción de una casa, el bloqueCimiento representa todas
las tares necesarias para hacer los cimientos de la casa.
A su vez este proceso se puede detallar más, describiendo cada una de las tareas que se deben realizar.
Entonces el bloque se refina mostrando como contenido una secuencia de bloques, tomas decisiones y
operaciones necesarias para completar el procedimiento.En la siguiente figura se muestras más detallado el
proceso mencionado.
Demarcar cimiento
Hacer excavaciones
Vaciar concreto
Fraguar
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 15 de 20
Servicio Nacional de Aprendizaje
Cuando se utiliza la estructura mientras se debe tener en cuenta que antes de ejecutar el procedimiento, se
consulta si se cumple la condición correspondiente en la toma de decisión. En ocasiones es necesario que se
ejecute el procedimiento antes de consultar la condición, esta estructura se denomina repetir-hasta ó Do-
While y tiene la siguiente estructura en diagrama de flujo:
Do-while
Haga
Proceso
Proceso
Mientras condición se verdadera repetir
NO
Condición?
SI
Para considerar mejor esta estructura consideremos el siguiente ejemplo: supongamos que se desea realizar
compras y se lleva cierta cantidad de dinero para dicha labor; la primera compra se realiza sin verificar si hay
dinero disponible y las siguientes antes de realizar los gastos se verifica si queda dinero. Esta condición se
realiza repetidamente hasta que no hay más dinero. El diagrama que describe esta situación se muestra a
continuación.
Haga
NO
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 16 de 20
Servicio Nacional de Aprendizaje
Hacer Compra
SI
Hay
dinero?
NO Hacer Compra
Las dos estructura son semejantes pero la primera es más eficiente que las segunda, ya que en la primera
solo hay un proceso a ejecutar mientras en la segunda dos, además , desde el punto de vista de
programación la primera está ocupando menos espacio en memoria.
A menudo es necesario hacer que un proceso se repita un número de veces, conocido de antemano. Una
manera de hacerlo es por medio de estructuras básicas en la cual se incluye el uso de una variable de
control o contador, la cual, a partir de cierto valor inicial se incrementa cada vez que se cumple un ciclo. Aquí
el contenido de la variable o contador se modifica por medio de un proceso de asignación, que consiste en
reemplazar el valor existente por uno nuevo. La consulta del contenido de una variable no altera su valor. Es
estructura en programación de denomina For. Un ciclo que repite un proceso o acción y que utiliza una
variable de control se muestra a continuación.
Contador=0
Contador ← 0
Mientras contador sea menor a 10 Haga
Proceso 1
SI Contador ← Contador + 1
Contador <
10? Repetir
NO Proceso
Contador=Cont ador*+1
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 17 de 20
Servicio Nacional de Aprendizaje
En este ejemplo el proceso se repite hasta que el contador sea menor que 10. Cada vez que se ejecuta el
proceso o tarea el contador se incrementa en uno, luego se verifica la condición, si es menor de 10 se
ejecuta de nuevo, de contrario termina el ciclo. En total el proceso se repite 10 veces. En la siguiente tabla se
muestra como va cambiando el valor de contador y la evaluación de la condición, además del número
iteraciones que se realizan.
El mismo diagrama de flujo se puede escribir en una forma equivalente, mas abreviada, que permite
introducir la definición de la estructura iteración.
For
Contador =0 has ta 9
Para contador ← 9 hasta 9 hacer
Realizar proceso
Proceso
Fin para
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 18 de 20
Servicio Nacional de Aprendizaje
NO
Diamante?
SI
NO
Colocar en el Corazón?
primer Montón
SI
NO
Colocar en el Picas?
segundo Montón
SI
Colocar en el Colocar en el
tercer Montón cuarto Montón
Si las alternativas son numerosas, el diagrama tendrá gran dificultad en la lectura. Para evitar esto se
introduce la alternativa casos la cual es mas simple y además facilita percibir que todas las alternativas se
encuentran en igualdad. A continuación se muestran dos formas de representa ésta estructura.
NO NO NO
Diamante? Corazón? Picas?
SI SI SI
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 19 de 20
Servicio Nacional de Aprendizaje
SI Colocar en el
Diamante?
primer Montón
NO
SI Colocar en el
Corazón?
segundo Montón
NO
SI Colocar en el
Picas?
tercer Montón
NO
Colocar en el
cuarto Montón
Se puede dar el caso que al evaluar todas las condicione, ninguna cumpla con la comparación, para estos
casos se puede optar en no realizar ningún procedimiento, ó colocar un condición en la cual se evalúe esa
condición
Desarrollado por:
Andrey Julián Rentería Scarpetta
Este documento impreso se considera COPIA NO CONTROLADA Versión 2.0 F08 – 9227 – 040 Página 20 de 20