Este documento presenta los conceptos fundamentales relacionados con algoritmos y la metodología para la solución de problemas por computadora. Primero define la terminología empleada en algoritmos y explica qué es un algoritmo y sus características. Luego, detalla los siete pasos de la metodología para la solución de problemas: 1) definición del problema, 2) análisis del problema, 3) diseño del algoritmo, 4) codificación del programa, 5) prueba y depuración, 6) documentación y 7) mantenimiento. Finalmente, explic
1. Contenido: Módulo N°1 • Algoritmos
1.1. ¿Cuál es la Terminología empleada en Algoritmos? (Ver Activdad N°1: Creación de una Wiki).
1. Acumulador. 8. Conector. 15. Datos Numéricos. 22. Proceso.
2. Algoritmo. 9. Constante. 16. Declaración. 23. Programa.
3. Aplicación. 10. Contador. 17. Diagrama de Flujo. 24. Pseudocódigo.
4. Bandera. 11. Dato. 18. Hardware. 25. Salida.
5. Bucle. 12. Datos Alfabéticos. 19. Operadores Lógicos. 26. Software.
6. Condición Múltiple. 13. Datos Alfanuméricos. 20. Operadores Relacionales. 27. Valor.
7. Condición Simple. 14. Datos Lógicos. 21. Palabra Reservada. 28. Variable de Trabajo.
1.1.1 ¿Cómo se solucionan los problemas por Computadoras?
La solución a la medida de un problema por computadora, requiere como en otras
disciplinas de una metodología que nos enseñe de manera gradual, la forma de llegar a
estas soluciones. La Metodología para la solución de Problemas por computadora
establece 7 pasos, dispuestos de tal forma que cada uno es dependiente de los anteriores,
lo cual indica que se trata de un proceso complementario y por lo tanto cada paso exige el
mismo cuidado en su elaboración.
1. Definición del problema.
2. Análisis del Problema.
3. Diseño del algoritmo.
4. Codificación del Programa.
5. Prueba y depuración.
6. Documentación.
7. Mantenimiento.
1.1.2 ¿Qué es un Algoritmo?
“Un algoritmo se define como un método que se realiza paso a paso para solucionar un
problema que termina en un número finito de pasos”.
“Es un conjunto de instrucciones o reglas bien definidas, ordenadas y finitas que permite
realizar una actividad mediante pasos sucesivos que no generen dudas a quien lo ejecute.
Los Algoritmos tienen un inicio y una entrada, siguiendo los pasos sucesivos por lo general
ocurre un proceso y finalmente se obtiene una salida o una solución del problema.”
“Es un Método para resolver un problema mediante una serie de pasos precisos , definidos
y finitos. Un algoritmo es una serie de operaciones detalladas ,en otras palabras un
algoritmo es un conjunto de reglas para resolver una cierta clase de problemas y se puede
formular de muchas formas con el cuidado de que no exista ambigüedad. “
1.1.3 ¿Cuáles son las Características de un Algoritmo?
Debe ser preciso e indicar el orden de realización de cada paso.
Debe ser definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo
resultado cada vez.
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.
Debe describir tres partes : Entrada, Proceso y Salida.
Debe ser Sencillo , Legible.
2. Debe ser Modular.
Debe ser Eficiente y Efectivo.
Debe desarrollarse en el menor tiempo posible. Romper con el paradigma de
Eficiencia vs Eficacia.
Debe ser Correcto. Sin errores.
Debe cero ó mas entradas.
Debe tener al menos una salida y ésta debe ser tangible.
1.2. ¿Cuál es la Metodología para la Solución de Problemas por Computadora?
1.2.1. DEFINICIÓN DEL PROGLEMA: Esta fase está dada por el enunciado del problema, el
cual requiere una definición clara, precisa y completa. Es importante conocer y delimitar
por completo el problema y que se desea que realice la computadora; mientras esto no se
conozca del todo no tiene mucho caso continuar con la siguiente paso.
1.2.2. ANÁLISIS DEL PROBLEMA: Una vez que se ha comprendido lo que se desea de la
computadora, es necesario definir:
Los datos de entrada.
Cual es la información que se desea producir (salida)
Los métodos y fórmulas que se necesitan para procesar los datos.
Una recomendación muy practica es el que nos pongamos en el lugar de la computadora y
analicemos que es lo que necesitamos que nos ordene y en que secuencia para producir
los resultados esperados.
1.2.3. DISEÑO DEL ALGORITMO: Las características de un buen algoritmo son:
Debe tener un punto particular de inicio.
Debe ser definido, no debe permitir dobles interpretaciones.
Debe ser general, es decir, soportar la mayoría de las variantes que se puedan
presentar en la definición del problema.
Debe ser finito en tamaño y tiempo de ejecución.
1.2.4. CODIFICACIÓN DEL PROGRAMA: La codificación es la operación de escribir la
solución del problema (de acuerdo a la lógica del diagrama de flujo o pseudocódigo), en
una serie de instrucciones detalladas, en un código reconocible por la computadora, la
serie de instrucciones detalladas se le conoce como código fuente, el cual se escribe en un
lenguaje de programación o lenguaje de alto nivel.
1.2.5. PRUEBA Y DEPURACIÓN: Los errores humanos dentro de la programación de
computadoras son muchos y aumentan considerablemente con la complejidad del
problema. El proceso de identificar y eliminar errores, para dar paso a una solución sin
errores se le llama depuración. La depuración o prueba resulta una tarea tan creativa
como el mismo desarrollo de la solución, por ello se debe considerar con el mismo interés
y entusiasmo. Resulta conveniente observar los siguientes principios al realizar una
depuración, ya que de este trabajo depende el éxito de nuestra solución.
2
3. Prueba es el proceso de identificar los errores que se presenten durante la ejecución del
programa; es conveniente que cuando se pruebe un programa se tomen en cuenta los
siguientes puntos:
Tratar de iniciar la prueba con una mentalidad saboteadora, casi disfrutando la tarea de
encontrar un error.
Sospechar de todos los resultados que arroje la solución, con lo cual se deberán verificar
todos.
Considerar todas las situaciones posibles, normales y aún las anormales.
La Depuración consiste en eliminar los errores que se hayan detectado durante la prueba,
para dar paso a una solución adecuada y sin errores.
1.2.6. DOCUMENTACIÓN: Es la guía o comunicación escrita es sus variadas formas, ya sea
en enunciados, procedimientos, dibujos o diagramas. Es la guía o comunicación escrita que
sirve como ayuda para usar un programa, o facilitar futuras modificaciones. A menudo un
programa escrito por una persona es usado por muchas otras, por ello la documentación
es muy importante; ésta debe presentarse en tres formas: EXTERNA, INTERNA y AL
USUARIO FINAL.
Documentación Interna: Consiste en los comentarios o mensajes que se agregan al
código del programa, que explican las funciones que realizan ciertos procesos,
cálculos o fórmulas para el entendimiento del mismo.
Documentación Externa: También conocida como Manual Técnico, está integrada
por los siguientes elementos: Descripción del Problema, Nombre del Autor,
Diagrama del Flujo y/o Pseudocódigo, Lista de variables y constantes, y
Codificación del Programa, esto con la finalidad de permitir su posterior
adecuación a los cambios.
Manual del Usuario: Es la documentación que se le proporciona al usuario final, es
una guía que indica el usuario como navegar en el programa, presentando todas
las pantallas y menús que se va a encontrar y una explicación de los mismos, no
contiene información de tipo técnico.
1.2.7. MANTENIMIENTO: Se lleva acabo después de terminado el programa, cuando se
detecta que es necesario hacer algún cambio, ajuste o complementación al programa para
que siga trabajando de manera correcta. Para poder realizar este trabajo se requiere que
el programa este correctamente documentado.
1.3. ¿Cuáles son los Tipos de Datos?
Los tipos de datos simples se clasifican en predefinidos y definidos por el programador. Los
predefinidos o (estándares) son: Entero, Real, Lógico y Carácter. Los definidos por el programador
o (no estándares) Subrango, Enumerados.
1.3.1. Enteros. Un tipo de dato entero en computación es un tipo de dato que puede
representar un subconjunto finito de los números enteros. El número mayor que puede
representar depende del tamaño del espacio usado por el dato y la posibilidad (o no) de
representar números negativos. Los tipos de dato entero disponibles y su tamaño
dependen del lenguaje de programación usado así como la arquitectura en cuestión. Por
3
4. ejemplo, si para almacenar un número entero disponemos de 4 bytes de memoria
tememos que:
4 Bytes = 4x8 = 32 bits
Con 32 bits se pueden representar 232=4294967296 valores:
Sólo positivos: del 0 al 4294967295
Positivos y negativos: del ‐2147483648 al 2147483647
1.3.2. Reales. El tipo de dato real define un conjunto de números que pueden ser
representados con la notación de coma flotante. Al igual que los números enteros, el tipo
real está limitado superior e inferiormente según la cantidad de memoria que haya
disponible para almacenarlo. Otro elemento importante a tener en cuenta en este tipo de
datos es la precisión con que pueden representar número con decimales (cuantos
decimales se pueden representar), esta característica también está directamente
relacionada con la cantidad de memoria disponible para almacenar un valor real.
1.3.3. Lógicos. El tipo de dato lógico o booleano es en computación aquel que puede
representar valores de lógica binaria, esto es, valores que representen falso o verdadero.
Se utiliza normalmente en la programación, estadística, electrónica, matemáticas (Álgebra
booleana), etc...
Para generar un dato o valor lógico a partir de otros tipos de datos, típicamente, se
emplean los operadores relacionales (u operadores de relación), por ejemplo: 0 es igual a
falso y 1 es igual a verdadero
(3>2)= 1 = verdadero
(7>9)= 0 = falso
Una vez se dispone de uno o varios datos de tipo booleano, estos se pueden combinar en
expresiones lógicas mediante los operadores lógicos (AND, OR, NOT, ...). Un ejemplo de
este tipo de expresiones serían:
verdadero AND falso ‐‐> falso
falso OR verdadero ‐‐> verdadero
NOT verdadero ‐‐> falso
1.3.4. Cadena. Desde un punto de vista de la programación, si no se ponen restricciones al
alfabeto, una cadena podrá estar formada por cualquier combinación finita de todo el
juego caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los números del '0'
al '9', el espacio en blanco ' ', símbolos diversos '!', '@', '%', etc). En este mismo ámbito (el
de la programación), se utilizan normalmente como un tipo de dato predefinido, para
palabras, frases o cualquier otra sucesión de caracteres. En este caso, se almacenan en un
vector de datos, o matriz de datos de una sola fila (array en inglés). Las cadenas se pueden
almacenar físicamente:
Seguidas.
Enlazados letra a letra.
4
5. Generalmente son guardados un carácter a continuación de otro por una cuestión de
eficiencia de acceso.
Un caso especial de cadena es la que contiene cero caracteres, a esta cadena se la llama
cadena vacía; en teoría de autómatas es común denotar a la misma por medio de la letra
griega ε.
1.4. ¿Cuáles son los Tipos de Operadores?
1.4.1. Operadores Aritméticos (su resultado es un número): potencia, * , / , mod, div, + , ‐
1.4.2. Operadores Relacionales (su resultado es un valor de verdad): =, <, >, <=, >=, <>
1.4.3. Operadores Lógicos o Booleanos (su resultado es un valor de verdad): not, and, or
1.4.4. Operadores Alfanuméricos : + (concatenación)
1.5. ¿Cuáles son las Estructuras Algorítmicas?
1.5.1. Secuenciales. Es aquélla en la que una acción (instrucción) sigue a otra en secuencia.
Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así
sucesivamente hasta el fin del proceso. La estructura secuencial tiene una entrada y una
salida. Su representación gráfica es la siguiente:
1.5.1.1. Asignación.
1.5.1.2. Entrada.
1.5.1.3. Salida.
1.5.2. Condicionales. La especificación formal de algoritmos tiene realmente utilidad
cuando el algoritmo requiere una descripción más complicada que una lista sencilla de
instrucciones. Este es el caso cuando existen un número de posibles alternativas
resultantes de la evaluación de una determinada condición.
Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que se suelan
denominar también estructuras de decisión o alternativas.
En las estructuras selectivas se evalúa una condición y en función del resultado la misma
se realiza una opción u otra. Las condiciones se especifican usando expresiones lógicas. La
representación de una estructura selectiva se hace con palabras en pseudocódigo (if, then,
else o bien en español si, entonces, sino), con una figura geométrica en forma de rombo o
bien con un triángulo en el interior de una caja rectangular.
1.5.2.1. Simples.
Pseudocódigo en español
Si Entonces
< acción S1 >
< acción S2 >
Fin_si
Pseudocódigo en inglés
If then
< acción S1 >
< acción S2 >
end_if
5
6. 1.5.2.2. Dobles.
Pseudocódigo en inglés
Si < condición > entonces
< acción S1 >
si_no
< acción S2 >
fin_si
Pseudocódigo en inglés
If < condición > then
< acción S1 >
else
< acción S2 >
endif
1.5.2.3. Múltiples.
Pseudocódigo en español
según_sea
[1]: acción 1
[2]: acción s
[.]: ...
[n]: acción n
fin_según
Pseudocódigo en inglés
case of
[1]: acción 1
[2]: acción s
[.]: ...
[n]: acción n
end_case
1.5.3. Cíclicas. Las estructuras que repiten una secuencia de instrucciones un número determinado
de veces se denominan Bucles y se denomina Iteración al hecho de repetir la ejecución de una
secuencia de acciones. Entre las estructuras repetitivas se encuentran:
1.5.3.1. Para. (For to Next).
Se desea la lectura y desplegado de 5 nombres. Resuelva el problema por cada uno de los
siguientes criterios:
En donde:
VA = Variable de iteración
VI = Variable valor inicial
VF = Variable valor final
La estructura desde comienza con un valor inicial de la variable VI y las acciones
especificadas se ejecutan a menos que el valor inicial sea mayor que el valor final (VI>VF).
6
7. La variable de iteración se incrementa en uno y si este nuevo valor no es mayor que el
valor final (VA>VF ), se ejecutan nuevamente las acciones. El incremento de la variable es
siempre 1, a no ser que se indique lo contrario. En algunos lenguajes de programación se
aceptan valores de incremento distintos de uno (Basic) mientras que otros, sólo aceptan el
valor 1, ya sea positivo (Incremento) o negativo (Decremento) (Pascal.
Pseudocódigos en castellano
desde va = vi hasta vf hacer
accion S1
accion S2
.
.
fin_desde
desde va = vi hasta vf paso inc hacer
accion S1
accion S2
.
.
fin_desde
Pseudocódigos en inglés
for va =vi to vf do
accion S1
accion S2
.
.
next
for va = vi to vf step inc do
accion S1
accion S2
.
.
next
1.5.3.2. Mientras que. (Do while).
Pseudocódigo en castellano
Mientras condición hacer
acción 1
acción 2
...
acción n
fin_mientras
Pseudocódigo en inglés
7
8. while condicion do
accion 1
accion 2
...
accion n
endwhile
1.5.3.3. Repita hasta. (Do until).
Pseudocódigo en castellano
Repetir
acción 1
acción 2
...
acción n
hasta_que condición
Pseudocódigo en inglés
Repeat
accion 1
accion 2
...
accion n
until condicion
1.6 ¿Cuáles son las Técnicas de Diagramación de Algoritmos?
1.6.1. Lenguaje Natural.
En la filosofía del lenguaje, el lenguaje natural es el lenguaje hablado o escrito por
humanos para propósitos generales de comunicación, para distinguirlo de otros como
puedan ser una lengua construida, los lenguajes de programación o los lenguajes usados
en el estudio de la lógica formal, especialmente la lógica matemática.
El término lenguaje natural se refiere al estudio de las propiedades computacionales y de
otro tipo implicadas en la comprensión, producción y uso de las lenguas naturales.
1.6.2. Lenguaje de Pseudocódigo.
El pseudocódigo (falso lenguaje) es comunmente utilizado por los programadores para
omitir secciones de codigo o para dar una explicacion del paradigma que tomó el mismo
programador para hacer sus codigos esto quiere decir que el pseudocodigo no es
programable sino facilita la programacion.
El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la
forma más detallada posible, y a su vez lo más parecida posible al lenguaje que
posteriormente se utilizara para la codificación del mismo.
1.6.3. Diagrama de Acción.
Es una técnica de especificación que utiliza niveles anidados de corchetes que representan
la estructura lógica utilizada para transformar los datos de entrada en los datos de salida.
8
9. En la fase de análisis se preparan de forma general para especificar sólo las normas de
transformación de los datos de entrada en datos de salida.
1.6.4. Diagramas de Flujo.
Un diagrama de flujo es una representación gráfica de un algoritmo o proceso. Se utiliza
en disciplinas como la programación, la economía, los procesos industriales y la psicología
cognitiva. Estos diagramas utilizan símbolos con significados bien definidos que
representan los pasos del algoritmo, y representan el flujo de ejecución mediante flechas
que conectan los puntos de inicio y de término.
1.6.5. Diagramas de Nassi / Scheiderman.
Los diagramas Nassi‐Schneiderman son una técnica para la especificación de algoritmos
que combina la descripción textual del pseudocódigo con la representación gráfica del
diagrama de flujo.
9