Documentos de Académico
Documentos de Profesional
Documentos de Cultura
APUNTES DE CATEDRA
UNIDAD 1
Resolución de problemas con computadoras
INTRODUCCION
Resolución de
Análisis del
problema Diseño del algoritmo Codificación
Implementación y
Puesta a Punto del
Programa
Compilación y Verificación y
Mantenimiento Documentación
ejecución Depuración
1
ALGORITMOSY ESTRUCTURAS DE DATOS
Constituyen el ciclo de vida del software y sus características más sobresalientes son:
• Análisis. El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente de la
empresa o por la persona que encarga el programa.
• Diseño. Una vez analizado el problema, se diseña una solución que conducirá a un algoritmo que resuelva el
problema.
• Codificación (implementación). La solución se escribe en la sintaxis del lenguaje de alto nivel (por ejemplo, C) y
se obtiene un programa fuente que se compila a continuación.
• Ejecución, verificación y depuración. El programa se ejecuta, se comprueba rigurosamente y se eliminan todos
los errores (denominados «bugs», en inglés) que puedan aparecer.
• Mantenimiento. El programa se actualiza y modifica, cada vez que sea necesario, de modo que se cumplan todas
las necesidades de cambio de sus usuarios.
• Documentación. Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño
y codificación, unidos a manuales de usuario y de referencia, así como normas para el mantenimiento.
Las dos primeras fases conducen a un diseño detallado escrito en forma de algoritmo. Durante la tercera etapa
(codificación) se implementa el algoritmo en un código escrito en un lenguaje de programación, reflejando las
ideas desarrolladas en las fases de análisis y diseño.
Las fases de compilación y ejecución traducen y ejecutan el programa. En las fases de verificación y
depuración el programador busca errores de las etapas anteriores y los elimina. Comprobará que mientras
más tiempo se gaste en la fase de análisis y diseño, menos se gastará en la depuración del programa. Por
último, se debe realizar la documentación del programa.
Codificación
Es la escritura en un lenguaje de programación de la representación del algoritmo
desarrollada en las etapas precedentes. Dado que el diseño de un algoritmo es
independiente del lenguaje de programación utilizado para su implementación, el
código puede ser escrito con igual facilidad en un lenguaje o en otro.
Para realizar la conversión del algoritmo en programa se deben sustituir las palabras reservadas en
español por sus homónimos en inglés, y las operaciones/instrucciones indicadas en lenguaje natural
expresarlas en el lenguaje de programación correspondiente.
2
ALGORITMOSY ESTRUCTURAS DE DATOS
Mayormente conocido como Código Fuente, definimos como Programa Fuente a un texto o conjunto de líneas de texto
(líneas de código) que forman parte esencial de un programa informático, siendo entonces las instrucciones que debe
seguir un ordenador para poder realizar la ejecución de una orden determinada. Consiste básicamente en un texto con
las instrucciones en un Idioma (Lenguaje) de Programación, para que otro usuario pueda leerlo, interpretarlo, analizarlo
y realizar una modificación si así lo desea y tiene la autorización correspondiente.
En este Código se hace referencia entonces al funcionamiento general de una aplicación o una herramienta en particular,
pero en un idioma que es comprensible por el Programador mediante la utilización de un Lenguaje de
Programación determinado, que lleva sus propias reglas y excepciones.
Código Objeto, es justamente este último el responsable de que el ordenador pueda interpretar las acciones que se
ordenan y los comandos que han sido prefijados en este código, para poder ser ejecutados, interpretados y retransmitidos
por los componentes físicos de un ordenador (es decir, los Dispositivos de Hardware)
Para poder realizar esta interpretación es necesario contar con sistemas de traducción que son conocidos bajo los
nombres de Compiladores, Intérpretes o Ensambladores, entre otros sistemas de traducción, que son los encargados
de llevar estos lenguajes hacia un Sistema Binario de ceros y unos (es decir, transmisión o no-transmisión de la energía
eléctrica a través de los dispositivos electrónicos)
Actualmente también es considerado como Código Fuente al lenguaje en el que está escrito un sitio web o alguna de
3
ALGORITMOSY ESTRUCTURAS DE DATOS
Documentación y mantenimiento
La documentación de un problema consta de las descripciones de los pasos a dar
en el proceso de resolución de dicho problema. La importancia de la
documentación debe ser destacada por su decisiva influencia en el producto final.
Programas pobremente documentados son difíciles de leer, más difíciles de
depurar y casi imposibles de mantener y modificar.
La documentación de un programa puede ser interna y externa. La documentación interna es la
contenida en líneas de comentarios. La documentación externa incluye análisis, diagramas de flujo
4
ALGORITMOSY ESTRUCTURAS DE DATOS
y/o pseudocódigos, manuales de usuario con instrucciones para ejecutar el programa y para interpretar
los resultados.
La documentación es vital cuando se desea corregir posibles errores futuros o bien cambiar el
programa.
Tales cambios se denominan mantenimiento del programa. Después de cada cambio la documentación
debe ser actualizada para facilitar cambios posteriores. Es práctica frecuente numerar las sucesivas
versiones de los programas 1.0, 1.1, 2.0, 2.1, etc. (Si los cambios introducidos son importantes, se
varía el primer dígito [1.0, 2.0,...], en caso de pequeños cambios sólo se varía el segundo dígito
[2.0,2.1…].)
ALGORITMO
También se puede definir algoritmo como un conjunto finito de instrucciones que especifican una secuencia
de operaciones a realizar en orden para resolver un problema específico. En otras palabras, es un método para
la resolución de problemas.
Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo computacional; en
caso contrario, se dice que es un algoritmo no computacional. Según esto, el algoritmo de Euclides es un
algoritmo computacional; pero el algoritmo para instalar el equipo de sonido es un algoritmo no
computacional. Para que un algoritmo pueda ser ejecutado por una computadora se necesita expresar el
Un algoritmo debe producir un resultado en un tiempo finito. Los métodos que utilizan algoritmos se
denominan métodos algorítmicos, en oposición a los métodos que implican algún juicio o interpretación
que se denominan métodos heurísticos. Los métodos algorítmicos se pueden implementar en
computadoras; sin embargo, los procesos heurísticos no han sido convertidos fácilmente en las
5
ALGORITMOSY ESTRUCTURAS DE DATOS
computadoras. En los últimos años las técnicas de inteligencia artificial han hecho posible la implementación
del proceso heurístico en computadoras.
Ejemplos de algoritmos son: instrucciones para montar en una bicicleta, hacer una receta
de cocina, obtener el máximo común divisor de dos números, etc. Los algoritmos se
pueden expresar por fórmulas, diagramas de flujo o N-S y pseudocódigos. Esta última
representación es la más utilizada.
Usamos algoritmos todos los días. Son simplemente una descripción verbal o escrita de secuencias lógicas de
acción. Recetas de cocina, instrucciones para el lavado de ropas o para descongelar la heladera son ejemplos de
algoritmos escritos.
Cuando arrancamos un automóvil realizamos un procedimiento paso a paso. El algoritmo puede ser algo como
esto:
1) Poner la llave en el contacto
2) Asegurarse de que las marchas están en punto muerto
3) Presionar el pedal del acelerador
4) Girar la llave hasta la posición de “arranque”
5) Si el motor arranca antes de seis segundos, deja la llave en la posición “ignición”
6) Si el motor no arranca antes de 6 segundos, eperar diez segundos y repetir desde el
paso 3 al 6 (pero no más de 5 veces)
7) Si el coche no arranca, llamar al auxilio
Sin la frase “pero no más de 5 veces” en el paso 6, podrá suceder que nos quedáramos intentando arrancar el
automóvil para siempre, ¿ por qué ?, porque si algo falla en el auto, la repetición de los pasos 3 al 6 no hará que
arranque. Esta situación que nunca termina se conoce como bucle infinito. Por tanto si la frase “no más de 5 veces”
no se pone en el paso 6, nuestro algoritmo no cumple con nuestra defininicón de que un algoritmo debe terminar en
una cantidad finita de tiempo para cualquiera de las posibles condiciones.
Debemos resaltar que la restricción de “finitud” no es realmente lo bastante fuerte en la práctica; un algoritmo
debería requerir no sólo un número finito de pasos, sino un númeroo muy finito, un número razonable. Por ejemplo,
hay un algoritmo que determina si el juego de ajedrez representa o no la victoria para las piezas blancas; éste es un
algoritmo que puede resolver un problema de gran interés para miles de personas, sin embargo, sin lugar a dudas
nunca durante nuestra vida conoceremos la respuesta a este problema, ya que el algoritmo requiere lapsos de
tiempo fantásticamente inmensos para la ejecución, incluso siendo “finito”.
En la práctica, no solo queremos algoritmos, queremos buenos algoritmos en unn sentido estético débilemente
A veces tendremos varios algoritmos para el mismo problema, y hemos de decidir cuál es el mejor. Esto nos
lleva al campo extremadamente interesante y muy importante del análisis algorítmico: dado un algoritmo el
problema es determinar sus características de realización. La idea general del Análisis de Algoritmos es tomar un
algoritmo en particular y determinar su comportamiento medio; en ocasiones también estudiamos si un algoritmo
es o no “óptimo” en determinado sentido.
6
ALGORITMOSY ESTRUCTURAS DE DATOS
Dominio de un algoritmo
Un algoritmo simple se traducirá en programas que serán fáciles de corregir y de seguir. En cambio, un algoritmo eficiente
hará un buen uso de los recursos de computadora. Desafortunadamente estos criterios, en general, suelen ir en sentidos
opuestos pues los programas eficientes suelen basarse en algoritmos complejos.
Durante el proceso de diseño del algoritmo es preciso disponer de alguna herramienta para describirlo, se
necesita disponer de un lenguaje algorítmico con el que reflejar las sucesivas acciones que resuelven el
problema y que, además, soporte lo mejor posible el proceso sucesivo de refinamiento en subproblemas. Una
primera aproximación consistiría en utilizar para describir el algoritmo el lenguaje natural (en nuestro caso el
español), pero debido a los innumerables problemas que plantea como la imprecisión o la ambigüedad, se ha
optado por utilizar otras herramientas algorítmicas que describan con mayor exactitud la secuencia de acciones
y el orden en el que han de ejecutarse. La técnica del algoritmo nos permite analizar un problema en
7
ALGORITMOSY ESTRUCTURAS DE DATOS
forma global, pero esto no es suficiente, necesitamos herramientas que nos ayuden a analizar en detalle
las soluciones teniendo en cuenta que estas soluciones estarán orientadas a su uso en una computadora.
A. Diagramas de Flujo
Los diagramas de flujo son una herramienta gráfica para descripción de
algoritmos. Un diagrama de flujo consta de una serie de símbolos estándar, que
representan las distintas acciones del algoritmo, conectados mediante líneas que
indican el orden en el cual deben realizarse las operaciones.
Un diagrama de flujo muestra la lógica del algoritmo, acentuando los pasos
individuales y sus interconexiones.
B. Pseudocódigo
El pseudocódigo Pseudocódigo = Pseudo (Supuesto) + Código (Instrucción), nació como un lenguaje similar
al lenguaje natural y era un medio para 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.
El principal inconveniente que presenta el uso del pseudocódigo como lenguaje de descripción de
algoritmos es la imprecisión.
1
Para mayor ampliación sobre el pseudocódigo, puede consultar, entre otras, algunas de estas obras: Fundamentos de programación,
Luis Joyanes, 2.ª edición, 1997; Metodología de la programación, Luis Joyanes, 1986; Problemas de Metodología de la programación,
Luis Joyanes, 1991 (todas ellas publicadas en McGraw-Hill, Madrid), así como Introducción a la programación, de Clavel y Biondi.
Barcelona: Masson, 1987, o bien Introducción a la programación y a las estructuras de datos, de Braunstein y Groia. Buenos Aires:
Editorial Eudeba, 1986. Para una formación práctica puede consultar: Fundamentos de programación: Libro de problemas de Luis
Joyanes, Luis Rodríguez y Matilde Fernández en McGraw-Hill (Madrid, 1998).
8
ALGORITMOSY ESTRUCTURAS DE DATOS
El pseudocódigo utiliza para representar las acciones sucesivas palabras reservadas (similares a sus homónimos en
los lenguajes de programación), tales como inicio, fin, si-entonces-sino, mientras, repita-hasta….etc
METODO HEURISTICO
Resolvemos problemas todos los días, pero normalmente ignoramos el proceso que estamos
siguiendo. En un entorno de aprendizaje usualmente estamos dando más información de la que necesitamos:
una definición clara del problema, la entrada dada y la salida requerida. En la vida real éste no es siempre el
Después de que hemos comprendido y analizado el problema, debemos llegar a una solución, un algoritmo, es
decir, una secuencia lógica ordenada que nos permita ejecutar una tarea particular y resolver un problema
determinado.
Aunque siempre trabajamos con algoritmos, la mayoría de nuestras experiencias con ellos consisten en
seguirlos, ejecutarlos, ya sea una receta de cocina, un juego que practicamos, un juguete que ensamblamos.
Para aprender a programar se deben hacer conscientemente algunas de las estrategias subyacentes de
resolución del problema, en orden a aplicarlas a los problemas de programación. Veamos algunas de estas
estrategias que usamos diariamente.
9
ALGORITMOSY ESTRUCTURAS DE DATOS
• Hacer Preguntas. Si nos dan verbalmente la tarea, hacemos preguntas hasta tener claro lo que se ha de hacer.
Preguntamos cuándo, por qué, dónde, hasta que la tarea esté completamente especificada. Si las instrucciones
están escritas, podemos poner preguntas en las márgenes, subrayar una palabra, agrupar palabras o sentencias, o
cualquier otra forma de indicar que la tarea no está clara. Quizás nuestras preguntas se respondan un párrafo
más adelante, o puede que tengamos que discutirla con la persona que nos ha dado la tarea.
Si la tarea nos la hemos puesto nosotros mismos, este tipo de preguntas puede que no sea verbal, pero tiene
lugar a un nivel subconsciente.
Algunas preguntas típicas que tendremos que hacer en un contexto de programación son las siguientes:
- ¿ Qué nos han dado para trabajar, es decir, cuáles son los datos ?
- ¿ Cuál es la apariencia de los datos ?
- ¿ Cuántos datos hay ?
- ¿ Cómo sabremos cuándo tendremos procesados todos los datos?
- ¿ Cuál debe ser la apariencia de la salida?
- ¿ Cuántas veces debemos repetir el proceso que estamos haciendo?
- ¿ Qué condiciones especiales de error pueden aparecer?
• Resolución por Analogía. Nunca debemos reinventar la rueda. Si existe una solución, la usamos.
Si hemos resuelto antes el mismo problema o uno parecido, solamente repetimos la solución.
No pensamos conscientemente, “he visto esto antes y sé como hacerlo”, nosotros la hacemos.
Los humanos son buenos para reconocer situaciones similares. No tenemos que aprender a cómo ir al
mercado a comprar leche, luego a comprar huevos, luego a comprar azúcar. Sabemos que ir al mercado
será para siempre lo mismos y lo único que varía es lo que se compra (Parametrización).
En informática veremos ciertos problemas muchas veces bajo diferentes aspectos. Un buen programador
verá inmediatamente una subtarea que ha sido resuelta antes y se conectará a la solución. Por ejemplo,
encontrar la temperatura diaria más alta y más baja es exactamente el mismo problema que encontrar la
mayor y la menor nota de un examen. Lo que se quiere son los números mayor y menor entre un conjunto
de números.
• Dividir para vencer. Constantemente dividimos un problema grande en unidades más pequeñas que
podemos manejar. La tarea de limpiar la casa o el departamento puede parece abrumadora. La tarea
compuesta de limpiar el salón, el comedor, la cocina, los dormitorios y los baños parece manejable. El
Llegar a un procedimiento paso a paso para resolver un problema particular no es siempre seguro y preciso.
De hecho, normalmente es un proceso de prueba y error que necesita varios intentos y refinamientos, Cada
intento se prueba para ver si realmente resuelve el problema. Si lo hace, bien. Si no lo hace, se intenta de
nuevo.
Antes de escribir un programa para resolver un problema, debemos pasar por la fase de resolución del
problema y encontrar una solución general (algoritmo). Cuando hayamos comprobado a mano el algoritmo y
10
ALGORITMOSY ESTRUCTURAS DE DATOS
consideremos que la solución es correcta, podemos proceder a traducir el algoritmo a un lenguaje de programación.
Esta fase de implementación similar a la fase de resolución del problema en la que el programa (algoritmo) debe
probarse con los datos de entrada para ver si produce la salida deseada. Si no lo hace, debemos localizar los errores
que existan en el programa, Si el algoritmo es incorrecto, debemos volver a la fase de resolución del problema para
ver dónde nos equivocamos. Algunas veces podemos tener un algoritmo correcto, pero habernos equivocado al
traducirlo a un lenguaje de programación.
Ejemplos de algoritmos
Inicio
1. Dormir
2. haga 1 hasta que suene el despertador (o lo llame la
mamá).
3. Mirar la hora.
4. ¿Hay tiempo suficiente?
5. Si hay, entonces
6. Bañarse.
7. Vestirse.
8. Desayunar.
Sino,
9. Vestirse.
10. Cepillarse los dientes.
11. Despedirse
12. ¿Hay tiempo suficiente?
13. Si, Caminar hasta la universidad.
14. Sino, Correr
15.Mientras no llegue a la universidad haga paso 12
16. Entrar a la universidad.
Fin
ALGORITMO:
Inicio
PASO 1. Colocar los números el primero encima del segundo, de tal manera que las
unidades, decenas, centenas, etc., de los números queden alineadas. Trazar una
Qué hace
11
ALGORITMOSY ESTRUCTURAS DE DATOS
DATOS: Son medidas, valores o características que pueden ser manipulados y constituyen la materia
prima para producir la información, en otras palabras son el material sin procesar del que se extrae la
información.
Se denomina dato a cualquier objeto manipulable por la computadora. Un dato puede ser un carácter
leído de un teclado o información almacenada en la computadora.
El objetivo de un sistema de manejo de datos es hacer que éstos sean adaptables y flexibles para apoyar el
proceso de toma de decisiones de una organización. Mesclar mezclar
Una estructura de datos es una clase de datos caracterizada por la organización de los datos y las
operaciones definidas sobre ella.
12