Licenciatura en Ingeniería en Sistemas Computacionales
Estructura de Datos
Resolución de Problemas con la
Computadora
Guía de estudio
Bloque II
Licenciatura en Ingeniería en Sistemas Computacionales
P á g i n a 1 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Organizador gráfico
P á g i n a 1 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Índice
Organizador gráfico ............................................................................................................................................................................. 1
Índice ......................................................................................................................................................................................................... 2
Resolución de Problemas con la Computadora ....................................................................................................................... 3
La resolución de problemas ........................................................................................................................................................ 3
Análisis de problemas ................................................................................................................................................................... 4
Diseño de algoritmo ....................................................................................................................................................................... 6
Uso de la computadora ................................................................................................................................................................. 9
Representación gráfica del algoritmo .................................................................................................................................. 11
Pseudocódigo ................................................................................................................................................................................ 14
Fuentes de consulta......................................................................................................................................................................... 18
P á g i n a 2 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Resolución de Problemas con la Computadora
La resolución de problemas
Un problema, según el diccionario de la Real Academia Española es:
“Conjunto de hechos o circunstancias que dificultan la consecución de algún fin.”
“Planteamiento de una situación cuya respuesta desconocida debe obtenerse a través
de métodos científicos.”
Un programador es alguien que resuelve problemas. Para llegar a ser un programador
eficaz es necesario primero aprender a resolver problemas de un modo riguroso y
sistemático, lo que se denomina metodología de la programación o resolución de
problemas.
En informática existen diversas metodologías para la resolución de problemas aplicando
la programación, una de ellas es seguir los siguientes pasos:
1. Identificar el problema.- En esta fase se comprende el problema y se destacan los
datos que ayudan a entender el problema.
2. Sugerir (o plantear) alternativas de solución.- Apela al ingenio del desarrollador en
la propuesta de las posibles soluciones al problema.
3. Diseñar el algoritmo.- El resultado de esta etapa es crear una serie de pasos que
servirán para resolver el problema planteado.
P á g i n a 3 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
4. Desarrollar la solución y comprobar los resultados.-En esta fase se comprueban
los resultados.
Estos pasos se resumen en el siguiente mapa:
Es de vital importancia seguir cada una de las fases para asegurar un resultado óptimo
de la resolución del problema.
Análisis de problemas
El primer paso, análisis del problema, requiere un estudio a fondo del problema y de todo
lo que hace falta para poder abordarlo.Esta fase de la resolución del problema tiene como
objetivo conseguir que el programador alcance a comprender el problema en toda su
extensión.
El propósito del análisis de un problema es ayudar al programador (Analista) para llegar
a una cierta comprensión de la naturaleza del problema. Una buena definición del
P á g i n a 4 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
problema, junto con una descripción detallada de las especificaciones de entrada/salida,
son los requisitos más importantes para llegar a una solución eficaz.
Para realizar el análisis del problema se realizan varios pasos:
Definición del problema: Se tiene que entender y comprender la naturaleza del
problema, se deben dominar los conceptos con los que se trabaja y conocer qué
operaciones hay que realizar para solucionar el problema y obtener la información de
salida.
Especificación de los datos de entrada: Hay que determinar que datos de entrada se
necesitan para resolver el problema.
Especificación de los datos de salida: También hay que determinar los datos de salida
que van a ofrecer la solución del problema.
La correcta definición del problema debe ir acompañada de la identificación y descripción
de los datos de entrada y de salida del problema. Como se muestra en la siguiente
imagen, es importante conocer el identificador, descripción, procedencia, valor y
restricciones de los datos de entrada, así como el identificador, descripción y destino de
los datos de salida.
P á g i n a 5 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Es importante entender el problema que tiene el cliente, y expresar toda la información
que él suministre, de manera tal que cualquier otra persona del equipo de desarrollo
pueda entender sin dificultad lo que espera el cliente de la solución. Esto se denomina un
requerimiento funcional.
Otro aspecto que conforma un problema es el mundo o contexto en el que ocurre el
problema.
Algo más que hay que considerar al definir un problema son los requerimientos no
funcionales, que corresponden a las restricciones o condiciones que impone el cliente al
programa que se le va a construir
Diseño de algoritmo
A partir de los requerimientos, resultados del análisis, empieza la etapa de diseño donde
se comienza a construir un algoritmo que resuelva el problema.
El algoritmo es la representación de los pasos necesarios para resolver un problema.
Estos pasos serán después trasladados a instrucciones que el ordenador podrá ejecutar.
El algoritmo determinará el método de resolución del problema, y si dicho método se ha
desarrollado adecuadamente su traducción a un lenguaje de programación u otro es una
cuestión menor.
Para la descripción de un algoritmo pueden utilizarse representaciones gráficas
(diagramas) o textuales (pseudocódigo, lenguaje natural).
P á g i n a 6 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
El concepto de algoritmo, aunque similar y obviamente relacionado, no debe confundirse
con el concepto de programa. Mientras el primero es la especificación de un conjunto de
pasos (operaciones, instrucciones, órdenes,...) orientados a la resolución de un problema
(método), el segundo es un conjunto de operaciones especificadas en un determinado
lenguaje de programación, susceptible de ser ejecutado (o compilado o interpretado).
Los algoritmos también deben contemplar los datos de entrada, los procesos
algorítmicos del programa y los datos de salida.
Los algoritmos son independientes tanto del lenguaje de programación como del
ordenador que los ejecuta.
Las características de los algoritmos son:
Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe
obtener el mismo resultado cada vez.
P á g i n a 7 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún
momento; o sea, debe tener un número finito de pasos.
En informática se pueden englobar dos tipos de algoritmo.
Cuantitativos: son aquellos cuya resolución depende de un cálculo matemático.
Ejemplo:Sumar cuántas vistas tuvo una publicación en Facebook, el número de
interacciones y el cruce resultante de ambos datos para tener una media.
Cualitativos: su resolución no involucra cálculos numéricos, sino secuencias lógicas.
Ejemplo: La inteligencia artificial ha permitido el desarrollo de programas para la
detección de fraudes bancarios.
Ejemplo del uso del diagrama de flujo para representar un algoritmo, en este caso, para
calcular la superficie y perímetro de un círculo:
P á g i n a 8 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Uso de la computadora
Tras el diseño del algoritmo, este debe traducirse a las instrucciones de un lenguaje de
programación para que pueda ser resuelto por el ordenador.
La resolución de un problema mediante la computadora consiste en el proceso que a
partir de la descripción de un problema, expresado habitualmente en lenguaje natural y
en términos propios del dominio del problema, permite desarrollar un programa que
resuelva dicho problema.
Para que un algoritmo pueda ser resuelto por una computadora el mismo debe ser escrito
(codificado) en el lenguaje de programación elegido, siguiendo las reglas de sintaxis del
mismo. Esta tarea se denomina programación y el algoritmo escrito se llama programa.
Esta fase se divide en tres sub-fases que se describen a continuación en la tabla:
Fase Descripción
Codificación o Es la conversión de los pasos del algoritmo a
implementación del las instrucciones equivalentes en un lenguaje de
algoritmo programación. El algoritmo escrito en un lenguaje de
programación se denomina programa, código fuente o,
simplemente, código.
P á g i n a 9 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Verificación del Comprobación de que la codificación del algoritmo se ha
programa realizado correctamente, empleando adecuadamente de
las reglas gramaticales y sintácticas del lenguaje utilizado
Validación del Comprobación de que los resultados proporcionados por el
programa programa se corresponden con los establecidos en el
análisis del problema
El último elemento que forma parte de la solución son las pruebas.
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.
La fase de compilación permitirá detectar errores en tiempo de compilación, ejecución y
lógicos. En esta fase también es necesario realizar pruebas con una gran cantidad de
datos para encontrar posibles errores y corregirlos.
Por últimos se debe tener una documentación de todos los pasos hasta llegar a la
solución del problema, es muy importante ya que muchas veces suceden modificaciones
con el pasar del tiempo y estas se hace en algunos casos por otros programadores
P á g i n a 10 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
diferentes a los que lo crearon, y cuando un programa es pobre en documentación este
proceso de modificación es totalmente complejo.
Algunos IDEs que se pueden utilizar en la codificación son:
Eclipse: www.eclipse.org
Microsoft Visual Studio: www.visualstudio.com
Android Studio: www.developer.android.com
Netbeans: www.netbeans.org
Representación gráfica del algoritmo
Un algoritmo nos permite describir paso a paso el proceso necesario para resolver un
problema. La representación de un algoritmo se hace bien mediante texto
(pseudocódigo), mediante fórmulas, o bien de forma gráfica utilizando símbolos
geométricos en lo que se denominan diagramas de flujo.
En la siguiente tabla se muestran los símbolos que generalmente se utilizan para
describir un algoritmo mediante un diagrama de flujo, cada uno representa una parte
importante del proceso que se debe seguir para la resolución de un problema:
P á g i n a 11 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Para la elaboración de un diagrama de flujo se siguen ciertas reglas:
Se escribe de arriba hacia abajo y de izquierda a derecha
Siempre se usan flechas verticales u horizontales, jamás curvas
Evitar cruce de flujos
En cada paso expresar una acción concreta
La secuencia de flujo normal en una solución de problema es:
1. Tiene un inicio
2. Una lectura o entrada de datos
3. El proceso de datos
4. Una salida de información
5. Un final
P á g i n a 12 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Como todo, existen ciertas ventajas y desventajas en el uso de los diagramas de flujo, se
muestran a continuación:
Ventajas Desventajas
Rápida comprensión de las Diagramas complejos y detallados suelen
relaciones ser laboriosos en su planteamiento y
Análisis efectivo de las diseño
diferentes secciones del Acciones a seguir tras la salida de un
programa símbolo de decisión, pueden ser difíciles de
Pueden usarse como modelos seguir si existen diferentes caminos
de trabajo en el diseño de No existen normas fijas para la elaboración
nuevos programas o sistemas de los diagramas de flujo que permitan
Comunicación con el usuario incluir todos los detalles que el usuario
Documentación adecuada de desee introducir.
los programas
Codificación eficaz de los
programas
Depuración y pruebas
ordenadas de programas
P á g i n a 13 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Aquí se muestra un ejemplo de un diagrama de flujo que resuelve el problema “Realizar
la suma de dos números mientras esta de un resultado menor o igual a 10”:
💡
Existen varias
herramientas en línea
para el diseño de un
algoritmo en un
diagrama de flujo,
algunos son:
Lucidchart
https://www.lucidchart.
com/
DrawIo
https://app.diagrams.n
et/
Pseudocódigo
Un pseudocódigo es la representación textual de un algoritmo, que mediante lenguaje
natural, describe cada entrada, paso y salida para la resolución del problema. Dentro de
sus objetivos es que pueda ser entendido por los seres humanos mediante palabras que
usualmente se utilizan.
P á g i n a 14 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
La palabra Pseudo significa falso, por lo que traducción de “Pseudocódigo” es “código
falso” ya que no es realmente un código sino una imitación y una versión abreviada de
instrucciones reales para las computadoras y no puede ejecutarse en un ordenador. Es
una técnica para diseño de programas que permite definir las estructuras de datos, las
operaciones que se aplicarán a los datos y la lógica que tendrá el programa de
computadora para solucionar un determinado problema. Utiliza un pseudolenguaje muy
parecido a nuestro idioma, pero que respeta las directrices y los elementos de los
lenguajes de programación. Se concibió para superar las dos principales desventajas de
los flujogramas: lento de crear y difícil de modificar sin un nuevo redibujo.
Otra característica que tiene el pseudocódigo es su independencia al código en el que se
va a escribir el programa, proporcionando un método que facilita la posterior
programación y la resolución del algoritmo del programa.
A continuación se muestran algunas ventajas y desventajas del uso de pseudocódigo
para la representación de un algoritmo:
Ventajas Desventajas
Escrito en lenguaje sencillo y no Falta de normas en la escritura
estructurado Puede extenderse mucho y volverse
Transición sencilla a código difícil de leer
Se puede detallar cada En el caso de la especificación del flujo de
requerimiento de manera más ciclos podría volverse complejo
clara
P á g i n a 15 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Curva de aprendizaje baja
Independencia del lenguaje de
programación
Un programa escrito en pseudocódigo debe permitir instrucciones primitivas, de proceso,
de control, de descripción y compuestas.
Ejemplo de pseudocódigo:
“Resolver la suma de 2 números hasta que la suma sea mayor a 10”
INICIO
💡
Escribir “Introduce primer número”
Un software que es de
utilidad para creación
de pseudocódigo y
Recibe primer número
algoritmos es PSeInt
que se puede
descargar en la
Escribir “Introduce segundo número”
siguiente página
http://pseint.sourceforg
e.net/
Recibe segundo número
Calcula la suma de los dos números
Condición Si Suma de los dos números <=10 Vuelve a iniciar
Sino
P á g i n a 16 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
FIN
Se pueden introducir comentarios luego de una instrucción, o en líneas separadas,
mediante el uso de la doble barra ( // ). Todo lo que precede a //, hasta el fin de la línea,
no será tomado en cuenta al interpretar el algoritmo.
P á g i n a 17 | 18
Licenciatura en Ingeniería en Sistemas Computacionales
Fuentes de consulta
Luis Joyanes Aguilar. (2005). Estructuras de datos en C. : MCGRAW-HILL.
Canek Pelaez. (2018). Estructuras de datos con Java moderno. Comportamiento + objetos =
programas. UNAM. Ciudad de México
Tenenbaum, Aaron & Langsam, Yedidyah & Augenstein, Moshe (1997) “Estructuras de Datos
en C”. Prentice-Hall, México.
Deitel & Deitel “Como programar en C/C++”. PrenticeHall, México
Wirth, Niklaus “Algoritmos y estructura de Datos”. Prentice-Hall, México.
Adam Drozdek (2000). Estructuras de datos y algoritmos en java. Thompson Learning,
México
Osvaldo Cairó /Silvia Guardati (2006), Estructuras de datos. McGrawHIll, México.
Antonakos, James L. and Mansfield, Kenneth C., Jr. Practical Data Structures Using
C/C++ (1999). Prentice-Hall.
Sedgewick, Robert Algorithms in C (1998). Addison Wesley.
Ricardo Ruiz Rodríguez (2013), Fundamentos de la programación orientada a objetos
Bruno López Takeyas (2019) Introducción a la Ingeniería en Sistemas Computacionales
y al Diseño Orientado a Objetos,Pearson
P á g i n a 18 | 18