Tema 1 - Algoritmos

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 25

Fundamentos de Informática

Ingenierías

Tema I: ALGORITMIA

LA PROGRAMACION COMO METODOLOGIA DE RESOLUCION DE PROBLEMAS

INTRODUCCION
Muchas personas piensan que un computador puede realizar tareas o trabajos de
complejidad superior a una inteligencia humana.- La realidad es que un computador no
tiene ninguna inteligencia. No olvidemos que no es más que una máquina creada por el
hombre y, por lo tanto, no podrá realizar ninguna tarea que no haya sido previamente
determinada por él.-

Un computador, en general, sólo es capaz de realizar tres operaciones básicas:


1. Sumar, restar, multiplicar y dividir dos valores numéricos
2. Comparar dos valores: comprobar si son iguales, si el primero es menor que
el segundo, etc. estos valores pueden ser numéricos o alfanuméricos
3. Almacenar o recuperar información

Con estas pocas operaciones utilizadas y combinadas en forma adecuada,


mediante lo que llamamos programas de computación, se pueden llegar a realizar tareas
increíblemente complejas que aporten la solución a un determinado problema, ya sea de
gestión, técnico o de cualquier otro tipo.

La potencia de cálculo de un computador se deriva de las características físicas


que posee:

RAPIDEZ PRECISION MEMORIA

Las características citadas provienen de los componentes electrónicos que


conforman un computador: velocidad de conmutación de circuitos electrónicos, rapidez de
transmisión de señales eléctricas, fiabilidad de los circuitos y gran capacidad de
almacenamiento de información en un reducido espacio físico.

PROBLEMAS DE COMPUTACION
ETAPAS EN EL PROCESO DE SOLUCION DE PROBLEMAS CON COMPUTADORAS

La computadora nos permite hacer tareas más eficiente, rápida y precisamente de


lo que lo haríamos a mano, si es que podemos hacerlo a mano.- Para utilizar esta
poderosa herramienta, debemos especificar exactamente que queremos hacer y en el
orden en el que se debe hacerse.- Esto se hace mediante la Programación, que es el
proceso de planificar una secuencia de instrucciones que ha de seguir una computadora.-
Esta definición de programación deja muchas cosas sin decir.- Para escribir una
secuencia de instrucciones que ha de seguir una computadora debemos seguir cierto
procedimiento.-
Este procedimiento, es decir, el proceso que se sigue desde el planteamiento de un
problema, hasta que se tiene la solución instalada en un computador y lista para su
ejecución, se compone de varias fases agrupadas en dos bloques bien diferenciados: una
etapa de Diseño del Programa y una segunda etapa de Puesta a Punto del
Programa. Desde otro punto de vista son: la Resolución del Problema y la
Implementación.-

Unidad I – Algoritmos 1
Fundamentos de Informática
Ingenierías

Primera Etapa: Diseño del Programa

Se engloban en este bloque las fases correspondientes a la creación del programa.

Problema
ANALISIS
Especificación
PROGRAMACION
Algoritmos
CODIFICACION
Programa

1. FASE DE ANALISIS
Consiste en el examen y descripción detallada de los siguientes aspectos relativos
al problema:
 Equipo a utilizar (computadora, periféricos, soportes, material auxiliar)
 Personal informático
 Estudio de los datos de entrada
 Estudio de los datos de salida o resultados
 Relación entre la salida y la entrada
 Descomposición del problema en módulos

El resultado de esta fase se denomina especificación del problema, formada por


el conjunto de documentos elaborados para los aspectos citados.

2. FASE DE PROGRAMACION
Consiste en le diseño de la solución del problema planteado en forma de algoritmo.
Se debe abordar de forma sistemática, esto es, aplicando explícitamente un
conjunto de técnicas, como son la programación estructurada y el diseño descendente.
El resultado es un algoritmo o descripción del conjunto de acciones que deberán
ser realizadas por la computadora.
Para su representación de utilizan diferentes notaciones como ordinogramas,
pseudocódigos, etc.

3. FASE DE CODIFICACION
En esta fase se transcribe el algoritmo resultante de la fase anterior a un lenguaje
de programación concreto. En general es una tarea totalmente mecánica.
Al resultado se lo denomina programa, al que podemos definir como una secuencia de
instrucciones que indica las acciones que han de ejecutarse.

Unidad I – Algoritmos 2
Fundamentos de Informática
Ingenierías

Segunda Etapa: Puesta a Punto del Programa

Se engloban en este bloque las fases correspondientes a la instalación del


programa en el computador.-

EDICION
Programa fuente
COMPILACION
Programa objeto
MONTAJE
Programa ejecutable
EJECUCION
1. FASE DE EDICION
Escritura del programa fuente en la memoria del computador, grabándolo en algún
soporte permanente.- Se hace con la ayuda de un programa del sistema llamado editor

2. FASE DE COMPILACION
Traducción del programa fuente a lenguaje de máquina cuyo resultado es el
programa objeto. Para ello se dispone de programa compiladores o intérpretes, que
además comprueban la correcta sintaxis del programa.

3. FASE DE MONTAJE
En los programas compilados es necesario añadir al programa objeto algunas
rutinas del sistema o, en algunos casos subprogramas externos que se hayan compilado
separadamente. De ello se encarga el programa montador o linkeditor.

4. FASE DE EJECUCION
Consiste en probar el programa con datos de prueba, para asegurar el correcto
funcionamiento del mismo.

Desde otro punto de vista, tenemos:

Etapa de Resolución del Problema, consistente en:


 Análisis: Comprensión y definición del problema.
 Solución general (algoritmo): desarrollo de una secuencia lógica de pasos
usados para resolver el problema.
 Prueba.: seguir los pasos exactos tal como se han establecido para ver si la
solución resuelve realmente le problema

Etapa de Implementación, compuesta por:


- Solución específica (programa).- Traducción del algoritmo a un lenguaje de
programación (código)
- Prueba.- Hacer que la computadora siga las instrucciones.- Comprobar los
resultados y hacer las correcciones precisas hasta que las respuestas sean correctas.-
- Uso.- Utilización del programa.-

Unidad I – Algoritmos 3
Fundamentos de Informática
Ingenierías

fase de Resolución del Problema fase de Implementación

Análisis

Solución General Solución específica


(Algoritmo) (Programa)

Prueba Prueba

Uso

La computadora no es inteligente. No puede analizar un problema y venir con una


solución. El programador debe encontrar la solución y comunicársela a la computadora. El
problema lo resuelve el programador, no la computadora.

El programador analiza el problema y desarrolla una solución general, llamada


algoritmo.

La comprensión y el análisis de un problema lleva mucho más tiempo que lo que


podría implicar la explicación. Forma el corazón del proceso de programar.

Después de desarrollar una solución general, el programador “recorre” el algoritmo


ejecutando cada paso mental o manualmente. Si esa prueba del algoritmo no produce las
respuestas correctas, el proceso se repite analizando de nuevo el problema y llegando a
otro algoritmo. Cuando el programador está satisfecho con el algoritmo, entonces se
traduce a un lenguaje de programación (Lenguaje de Programación: conjunto de reglas,
símbolos y palabras especiales utilizadas para la construcción de un programa).
La traducción del algoritmo a un lenguaje de programación se llama codificación del
algoritmo. El programa resultante se prueba ejecutándolo en la computadora. Si el
programa falla al producir los resultados deseados, el programador debe analizar y
modificar el programa tanto como se necesite.

Algunas veces se trata de acortar el proceso de programación yendo directamente


desde la definición del problema a la codificación del programa. Este atajo es muy
tentador y puede parecer una buena forma de ahorrarse mucho tiempo. Sin embargo, por
muchas razones, este método realmente necesita más tiempo y esfuerzo. Por no tomarse
un tiempo inicial para pensar y pulimentar el algoritmo, se gastará mucho más tiempo en
corregir los errores (puesta a punto) y en revisar un programa mal concebido. Así que,
más se tardará en obtener un programa correcto.

Unidad I – Algoritmos 4
Fundamentos de Informática
Ingenierías

FASE DE RESOLUCION DEL PROBLEMA


Problema Algoritmo

¿Atajo?

Programa

FASE DE IMPLEMENTACION

La documentación y el mantenimiento de programas son también partes de la


programación.
Brevemente: la documentación es escribir los textos y comentarios que hacen a un
programa legible, comprensible y más fácilmente modificable.
El mantenimiento es la modificación de un programa para tener en cuenta los
cambios de requerimientos o cualquier error que pueda presentarse después de que el
programa se esté usando.

La programación es algo más que simple mente escribir un programa.

Un programador debe comprender y analizar el problema para desarrollar una


solución correcta, porque el programa debe resolver un problema específico y hacerlo
correctamente. El desarrollo de una solución general antes de escribir realmente el
programa ayuda al programador a manejar el problema de tomar decisiones correctas y
evitar errores innecesarios. Además, la mayoría de los programas se utilizarán una y otra
vez. La modificación de un programa será necesaria frecuentemente. Los requerimientos
del problema pueden cambiar y/o aparecer errores. Un diseño cuidadoso y una buena
documentación han probado ser inestimables durante esta fase de mantenimiento.

Unidad I – Algoritmos 5
Fundamentos de Informática
Ingenierías

ALGORITMO: definición y propiedades

La noción de algoritmo es básica en programación de ordenadores, por eso


debemos empezar con un cuidadoso análisis de este concepto.

La palabra algoritmo se usa en homenaje al matemático Uzbeco Al-Kuaritzmi quien


en el año 880 escribió un libro , en el que por primera vez se expresaban métodos
precisos para efectuar las cuatro operaciones básicas, que hoy en día se siguen
utilizando.

En la vida cotidiana ejecutamos constantemente algoritmos. Por ejemplo, al instalar


un equipo de sonido ejecutamos las instrucciones contenidas en el manual del equipo,
este conjunto de instrucciones constituyen un algoritmo. Otro caso de algoritmo es el
algoritmo matemático de Euclides para la obtención del máximo común divisor de dos
números.

Intentemos comparar el concepto de algoritmo con el de receta de un libro de


cocina; una receta probablemente tiene las características de finitud (aunque se dice “olla
mirada nunca cocina”), entrada (huevos, harina, etc) y salida (cena extraordinaria), pero
curiosamente falla en la definibilidad. Frecuentemente hay casos en los que la
definibilidad falla, ejemplo, “añádase una pizca de sal”. Una pizca de sal se define como
“menos de 1/8 de una cucharadita”; la sal está quizá bastanate bien definida; pero,
¿dónde debería añadirse la sal (encima, al lado..)? Instrucciones como “agítese
suavemente hasta que la mezcla se deshaga”, “calentar cognac en una pequeña
cazuela”, etc. son quizás totalmente adecuadas como explicaciones para un cocinero
entrenado, pero un algoritmo debe estar especificado hasta tal punto que incluso un
ordenador pueda seguir las insrtucciones.

ALGORITMO: es un procedimiento paso a paso para resolver un problema en una


cantidad finita de tiempo.

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
algoritmo en instrucciones comprensibles por la computadora, para esto se requiere de un
determinado lenguaje de programación. Al algoritmo expresado en un determinado
lenguaje de programación, se lo denomina programa. Puesto de otra manera, podemos
decir que, un programa es la implementación o expresión de un algoritmo en un
determinado lenguaje de programación siguiendo las reglas establecidas por el lenguaje
elegido. En la Figura 1.1 que sigue se muestra la relación entre problema, algoritmo y
programa.

Figura 1.1 Problema, algoritmo y programa

Unidad I – Algoritmos 6
Fundamentos de Informática
Ingenierías

Todo algoritmo debe tener las siguientes características:


 Debe ser preciso, es decir, cada instrucción debe indicar de forma
inequívoca que se tiene que hacer.
 Debe ser finito, es decir, debe tener un número limitado de pasos.
 Debe ser definido, es decir, debe producir los mismos resultados
para las mismas condiciones de entrada.
Todo algoritmo puede ser descompuesto en tres partes:
 Entrada de datos.
 Proceso.
 Salida de resultados.

Un algoritmo cumple con cuatro importantes condiciones:

 FINITUD. Un algoritmo tiene que acabar siempre tras un número finito de pasos.
Un algoritmo es finito en tiempo y espacio.

 DEFINIBILIDAD. Cada paso de un algoritmo debe definirse de un modo preciso y


claro; las acciones a realizar han de estar especificadas para cada caso
rigurosamente y sin ambigüedad. La representación de cada paso del algoritmo
debe dar lugar a una sola interpretación posible.

 SECUENCIALIDAD. Se debe especificar sin lugar a dudas la secuencia en la que


se deben llevar a cabo los pasos del algoritmo. Un algoritmo debe tener una
instrucción inicial única y cada instrucción debe tener un sucesor único para un
dato de entrada dado. Las instrucciones son llevadas a cabo de arriba hacia abajo,
a menos que las mismas especifiquen otra cosa.

Las entradas son las partidas de datos presentadas al algoritmo. Un algoritmo


puede tener o no entradas. Si las hay deben ser del tipo para el cual se ha
diseñado el algoritmo.
Las salidas son partidas de datos procesadas que son el resultado de la ejecución
de un programa basado en el algoritmo. Un algoritmo debe producir al menos una
salida.

 EFECTIVIDAD. Por lo general, se pretende que un algoritmo sea efectivo. Esto


significa, que todas las operaciones a realizar en el algoritmo deben ser lo bastante
básicas para poder, en principio ser efectuadas de modo exacto y en un lapso de
tiempo finito por un hombre mediante papel y lápiz.

Para diseñar un algoritmo se debe comenzar por identificar las tareas más
importantes para resolver el problema y disponerlas en el orden en que han de ser
ejecutadas.
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

Unidad I – Algoritmos 7
Fundamentos de Informática
Ingenierías

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, esperar 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úmero 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 un


sentido estético débilmente definido. Un criterio de bondad es el tiempo que toma la
realización del algoritmo; esto puede ser expresado en función del número de veces que
se ejecuta cada paso. Otros criterios son la adpatabilidad del algoritmo a los
computadores, su simplicad y su elegancia.

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.

Dominio de un algoritmo

Si el algoritmo no es general dentro de alguna clase de problemas, entonces es de


poca utilidad. Por lo tanto, un método para marcar el número telefónico 2200234 casi no
tiene valor para nadie, mientras que un método para marcar cualquier número será útil.
Por supuesto, debe haber alguna restricción a la generalidad de un algoritmo.
La clase o el conjunto de datos y las condiciones para las cuales un algoritmo trabaja
correctamente se llama dominio.
Cuando se trata de resolver cualquier problema es necesario definir el dominio del
algoritmo y después verificar que trabaja para todos los casos que se encuentran dentro
ese dominio. Es necesario incluir en el dominio todas las situaciones similares, pero los
casos remotos o poco probables se pueden omitir

Unidad I – Algoritmos 8
Fundamentos de Informática
Ingenierías

Errores en la construcción de un algoritmo

En los algoritmos se pueden presentar dos tipos de errores.

Errores de Dominio. Errores de Lógica.


Se presentan cuando no se han Son aquellos errores que se detectan
especificado todas las situaciones que se después de que se ha definido en forma
pueden presentar en la práctica o se han adecuada el dominio de un algoritmo, en
descuidado la apreciación de su la etapa de prueba o verificación.
importancia. Las pruebas más difíciles
son aquellas que verifican que ha Se deben principalmente a las siguientes
seleccionado un dominio correcto para el causas:
algoritmo. a) Etapas incorrectas
b) Secuencia incorrecta de
A medida que el problema se presenta se etapas
tiene que clasificar y hay tres opciones:
A) Ignorarlo porque es improbable y El programa “funciona” pero produce
quizás nunca ocurra resultados incorrectos, hay que modificar
B) restringir el dominio del algoritmo para el algoritmo
excluirlo
C) Corregir el algoritmo

El criterio de elección de un algoritmo debe hacerse en base a aspectos tales


como:
 Que el algoritmo sea simple, es decir fácil de entender y escribir
 Que el algoritmo sea eficiente

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.

Unidad I – Algoritmos 9
Fundamentos de Informática
Ingenierías

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 caso; frecuentemente debemos
llegar nosotros mismos a la definición del problema, decidir lo que tenemos que hacer
para trabajar con él y el resultado que debe dar.

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.

En la fase de resolución del problema, orientada a la programación de


computadoras, se deben diseñar algoritmos, no seguirlos. Planteado un problema,
requiere la obtención de un algoritmo, diseñar el conjunto de pasos que han de realizarse
para resolverlo. Realmente, hacemos este tipo de resolución de problemas siempre a un
nivel inconsciente. No escribimos, sin embargo, nuestras soluciones, las ejecutamos.

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.

 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?

 Buscar cosas familiares. 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

Unidad I – Algoritmos 10
Fundamentos de Informática
Ingenierías

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 mismo principio se aplica a
la programación. Dividimos un gran problema en partes más pequeñas, las cuales
pueden resolverse individualmente. De hecho, la metodología de diseño
descendente para diseñar algoritmos, se basa en este principio.

Estas estrategias son llamadas heurísticas, acorde a la siguiente definición:

HEURISTICO: Relativo a la aplicación de reglas empíricas, estrategias, artificios,


simplificaciones o cualquier otro recurso que limite drásticamente el espacio de búsqueda
de soluciones ante un problema con un amplio espacio de soluciones posibles. El método
heurístico no garantiza soluciones óptimas, sino que es útil si ofrece soluciones
satisfactorias.

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 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.

Unidad I – Algoritmos 11
Fundamentos de Informática
Ingenierías

Tipos de algoritmos:
a) Algoritmos no computacionales.
b) Algoritmos computacionales.

Algoritmos no computacionales: son desarrollados para no ser resueltos mediante el uso


de una computadora y se caracterizan porque siguen un Receta para hacer huevos picados
proceso de ejecución común y lógico, describiendo 1. Se coloca aceite o margarina en la cacerola
textualmente paso a paso cada una de las actividades a 2. Se pica cebolla, morrones y tomate
realizar dentro de una actividad determinada. Por ejemplo 3. Se ponen a freír, con un poco de sal
una receta de cocina: 4. Cuando ya están fritos, se echan los huevos
5. Se bate y se deja cocer
6. Se sirve caliente en un plato.

Algoritmos computacionales: estos son desarrollados para ser resueltos mediante el uso
de una computadora. Se usan determinadas técnicas para su formulación: se pueden
resolver utilizando diagramas de flujo o pseudocódigo. Estas herramientas nos ayudan
a analizar en detalle las soluciones teniendo en cuenta que estas soluciones estarán
orientadas a su uso en una computadora.

TÉCNICAS PARA LA FORMULACIÓN DE ALGORITMOS


Diagramas de Flujo (“flowchart”)
Se basan en la utilización de diversos símbolos para representar operaciones
específicas: acciones, decisiones y procedimientos. Se los llama diagramas de flujo
porque los símbolos utilizados se conectan por medio de flechas con sentido para indicar
la secuencia de operación o el flujo de información.
La simbología utilizada para la elaboración de diagramas de flujo es variable y debe
ajustarse a un patrón definido previamente.
SIMBOLOGIA UTILIZADA EN LOS DIAGRAMAS DE FLUJO

SIMBOLO FUNCION

Terminal: representa el Inicio y el Final de un


programa, puede representar también una parada o
interrupción programada que sea necesario realizar
en un programa.

Proceso: cualquier tipo de operación que pueda


originar cambio de valor, formato o posición de la
información almacenada en memoria, operaciones
aritméticas.

NO SI Decisión: indica operaciones lógicas o de


comparación entre datos – normalmente dos – y en
función del resultado de la misma determina cual
de los distintos caminos alternativos del programa
se deben seguir.

Conector: sirve para enlazar dos partes


cualesquiera de un diagrama a través de un
conector en la salida y otro en la entrada.

Unidad I – Algoritmos 12
Fundamentos de Informática
Ingenierías

Indicador de dirección o línea de flujo: indica el


sentido de ejecución de las operaciones.

Línea conectora: sirve de unión entre dos


símbolos.

Conector: conexión entre dos puntos del


organigrama situado en páginas diferentes.

Llamada a subrutina o aun proceso


predeterminado: una subrutina es un módulo
independiente de un programa.

Pantalla: se utiliza para mostrar datos por la


pantalla.

Impresora: se utiliza para enviar datos a la


impresora.

Teclado: se utiliza para ingresar datos a través del


teclado.

Unidad I – Algoritmos 13
Fundamentos de Informática
Ingenierías

Ejemplo:
Realizar un diagrama de flujo que permita mostrar en pantalla un mensaje de
mayoría o minoría de edad según sea el caso para un nombre específico.

Unidad I – Algoritmos 14
Fundamentos de Informática
Ingenierías

Pseudocódigo
Pseudo = falso. El pseudocódigo no es realmente un código sino una imitación y
una versión abreviada de instrucciones reales para las computadoras.
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. Es un lenguaje de
especificación de algoritmos. El uso de tal lenguaje hace el paso de codificación final (esto
es, la traducción a un lenguaje de programación) relativamente fácil.
La ventaja del pseudocódigo es que en su uso en la planificación de un programa,
el programador se puede concentrar en la lógica y en las estructuras de control y no
preocuparse de las reglas de un lenguaje específico. Es también fácil modificar el
pseudocódigo si se descubren errores o anomalías en la lógica del programa, además de
todo esto es fácil su traducción a lenguajes como Pascal, C o Basic.

El pseudocódigo está pensado para facilitar a las personas el entendimiento de un


algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una
implementación. Programadores diferentes suelen utilizar convenciones distintas, que
pueden estar basadas en la sintaxis de lenguajes de programación concretos. Sin
embargo, el pseudocódigo en general es comprensible sin necesidad de conocer o utilizar
un entorno de programación específico, y es a la vez suficientemente estructurado para
que su implementación se pueda hacer directamente a partir de él.
La definición de datos es especificar las variables que se van a utilizar y el tipo de
dato que almacenará. La definición de datos con pseudocódigo se da por supuesta, sobre
todo en las variables sencillas. Si se emplea formaciones: pilas, colas, vectores o
registros, se pueden definir en la cabecera del algoritmo. (DIMENSIONA vector[10];
DIMENSIONA matriz[10,5], etc)
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
Ejemplo: Diseñar un algoritmo que lea cuatro variables y calcule e imprima su producto, suma y
media aritmética.

Inicio Es importante recalcar que el


pseudocódigo no es un lenguaje
leer (a, b, c, d)
estandarizado. Eso significa que
producto  (a * b * c * d) diferentes autores podrían dar
otras estructuras de control o
suma  (a + b + c + d) bien usar estas mismas
media  (a + b + c + d) / 4 estructuras, pero con una
notación diferente. Sin embargo,
escribir (producto, suma, media) las funciones matemáticas y
lógicas toman el significado
fin
usual que tienen en matemática
y lógica, con las mismas
expresiones.

Unidad I – Algoritmos 15
Fundamentos de Informática
Ingenierías

ESTRUCTURAS BÁSICAS DE CONTROL


Las herramientas básicas para el desarrollo de diagramas de flujo o pseudocódigos
disciplinados se denominan estructuras básicas de control.
Las tres estructuras lógicas de control básicas, se definen de la siguiente forma:

SECUENCIAL: En términos de diagrama de flujo la secuencia es


representada por una función después de la
otra, como se muestra a continuación.
En pseudocódigo sería:

INICIO PROGRAMA
Una estructura secuencial es aquella que acción1
ejecuta las acciones
sucesivamente unas a continuación de otras acción2
sin la posibilidad de .
omitir ninguna y naturalmente sin
bifurcaciones. acción n
FIN PROGRAMA

CONDICIONALES (o alternativa o de selección o de decisión): Es la elección entre


dos acciones tomando la decisión en base al resultado de evaluar un predicado. Esta
estructura de control es denominada usualmente IFTHENELSE.
Una estructura de selección es aquella en la que únicamente se realiza una alternativa -
secuencia de instrucciones – dependiendo del valor de una determinada condición o
predicado.
Las estructuras alternativas también llamadas condicionales pueden ser de tres tipos:
simples, dobles o múltiples.
La estructura alternativa simple representa instrucciones que pueden o no
ejecutarse, según el cumplimiento de una condición. La condición es una
expresión booleana. Las Acción es ejecutada sólo si la
condición es verdadera.
La estructura alternativa doble realiza una acción de
dos posibles, según el cumplimiento de una condición.
La condición es una variable booleana o una función
reducible a booleana (lógica, Verdadero/Falso). Si esta
condición es cierta se ejecuta una acción, si no es así,
entonces se ejecuta la otra

Decisión Doble:
Decisión Simple: SI condición ENTONCES
acción1
SI condición ENTONCES acción2
acción1 .
 pseudocódigo SINO

acción1
acción n
acción2
FIN SI FIN SI

Unidad I – Algoritmos 16
Fundamentos de Informática
Ingenierías

Decisión Múltiple: También es común el uso de una alternativa


múltiple que equivaldría a anidar varias
SI condición1 ENTONCES
funciones de selección.
acción1 En este caso hay una serie de condiciones
SINO SI condición2 ENTONCES que tienen que ser mutuamente excluyentes,
acción2 si una de ellas se cumple las demás tienen
que ser falsas necesariamente, hay un caso
SINO SI condición3 ENTONCES
si no que será cierto cuando las demás
Acción3 condiciones sean falsas.
….. En esta estructura si Condición1 es cierta,
SINO ENTONCES entonces se ejecuta sólo Acción1. En general,
si Condición X es verdadera, entonces sólo se
acciónN
ejecuta Instrucciones x
FIN SI

Selectiva Múltiple:
Selectiva Múltiple-Casos: Una construcción SELECCIONAR indicador
similar a la anterior (equivalente en algunos
casos) es la que se muestra en el recuadro. CASO valor1 : acción1

CASO valor2 : acción2


En este caso hay un Indicador es una variable o
...
una función cuyo valor es comparado en cada
caso con los valores "Valori", si en algún caso EN OTRO CASO: acción n
coinciden ambos valores, entonces se ejecutarán
las acciones correspondientes. La sección en FIN SELECCIONAR
otro caso es análoga a la sección si no del
ejemplo anterior.

DE ITERACIÓN (o bucles o repeticiones): Esta estructura lógica es utilizada para que


se repita la ejecución de un conjunto de instrucciones mientras se cumpla una condición o
predicado. Generalmente a esta estructura se le conoce como
DOWHILE (hacer mientras).
En pseudocódigo sería:
Si al llegar por primera vez al bucle
mientras la condición es falsa, el MIENTRAS condición HACER
cuerpo del bucle no se ejecuta acción1
ninguna vez.
acción2

acción n

FIN MIENTRAS

Se debe comprender claramente que un rectángulo, que representa


un modulo en un diagrama, siempre puede ser sustituido por
cualquiera de las estructuras de control descritas anteriormente.

Unidad I – Algoritmos 17
Fundamentos de Informática
Ingenierías

Otras estructuras de iteración:


El Dountil: La estructura de iteración básica es el DOWHILE o MIENTRAS, pero existe
una estructura que es muy parecida a ella y que a veces es usada, dependiendo del
proceso que se esté tratando de representar y de las características apropiadas en el
lenguaje con el cual se está trabajando, esta forma de control es la que se llama
DOUNTIL o REPETIR.
En esta estructura el número de iteraciones o
En pseudocódigo sería: repeticiones del grupo de instrucciones se ejecuta
REPITA hasta que la condición deje de cumplirse. Pero asegura
que se ejecutará por lo menos una vez.
acción1

acción2

acción n

HASTA QUE condición

Repetición indexada. El bucle PARA (FOR), es una


PARA i  x HASTA n HACER
estructura de control muy común la cual se usa cuando se
desea iterar un número conocido de veces, empleando acciones
como índice una variable que se incrementa (o
decrementa): FIN PARA

Por último, también es común usar la


PARA CADA x Ɛ L HACER
estructura de control PARA CADA. Esta
acciones sentencia se usa cuando se tiene un vector
o un conjunto L y se quiere iterar por cada
FIN PARA CADA
uno de sus elementos.

Si asumimos que los elementos de L son , entonces esta sentencia


equivaldría a:
PARA i  0 HASTA n HACER

X  Li

acciones

FIN PARA

Unidad I – Algoritmos 18
Fundamentos de Informática
Ingenierías

Uso de los Datos


La información de que se dispone para procesar en la computadora consta de un
conjunto determinado de datos acerca del problema real, es decir, el conjunto que se
considera relevante para el problema que se tiene en la mano, aquel conjunto del cual se
creen pueden derivarse los resultados.
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.
1. Los datos deben representarse y almacenarse en cierta forma para accesarlos
posteriormente.
2. Los datos deben organizarse de manera adecuada para acccesarlos en forma
selectiva y eficientemente
3. Los datos deben procesarse y presentarse de manera que puedan apoyar
eficientemente al usuario
4. Los datos deben protegerse y manejarse para que no pierdan su valor
Una estructura de datos es una clase de datos caracterizada por la organización de
los datos y las operaciones definidas sobre ella.

Clasificación de estructuras

Dato es uno de esos términos que todos usan pero pocos entienden.
Dato: "hecho o valor a partir del cual se puede inferir una conclusión"

Los datos son aquello que un programa manipula. Sin datos un programa no
funcionaría correctamente. Por ejemplo, la edad y el domicilio de una persona, forman
parte de sus datos. Los datos se sitúan en objetos llamados variables.
Los programas manipulan datos de manera muy diferente según el tipo de dato del
que se trate. Y hay varios de estos tipos:

Tipos de Datos

Estructuras de Datos Estructuras de Datos Estructuras de Datos Compuestas


Primitivas Simples
 Enteros  Cadenas Lineales Listas No Lineales
 Boléanos  Arreglos
 Pilas  Arboles
 Caracter  Registros
 Colas  Grafos
 Listas ligadas

Tipos de Datos Primitivos

Son aquellos que se tienen a disposición en la mayoría de las computadoras con


características integradas. Incluyen los números enteros, valores lógicos de verdad y un
conjunto de caracteres imprimibles.

Unidad I – Algoritmos 19
Fundamentos de Informática
Ingenierías

 ENTEROS (INTEGER)

Una estructura primitiva son los enteros.


Un entero es un miembro del siguiente conjunto de números:

{. . . , - ( n + 1 ) , - n ,. . . , - 2 , - 1 , 0 , 1 , 2 ,. . . ., n , n + 1 , . . . }
Ejemplos: 1, 6, 29, -85, 152
 BOOLEANOS
Es también llamado tipo de datos lógico. Un dato booleano es un elemento que puede
tener uno de dos valores: verdadero o falso (True o False).

 CARACTERES (CHAR)

El carácter es una primitiva que probablemente se conoce muy bien.


Un carácter es un elemento tomado del conjunto de símbolos ASCII, el cual consta de 256
símbolos. Por ejemplo:

{0,1,2,3,4,5,6,7,8,9,A,B,C,D,......,X,Y,Z,’,?,#,...,+,-,*,/}

Tipos de Datos Simples

Constituyen conjuntos de datos formados por tipos de datos primitivos.

 CADENAS (STRINGS)

Son conjuntos de caracteres.

Ejemplo: CIENCIAS

 ARREGLOS

Son bloques básicos para la construcción de estructuras de datos más complejas. Casi
todas las estructuras de datos se pueden representar indirectamente mediante arreglos.
Un arreglo es un conjunto finito ordenado de elementos homogéneos, es decir que sus
componentes son todos del mismo tipo; llamado tipo base.

La propiedad de ordenación significa que es posible identificar el primero, segundo,


tercero, y ... el enésimo elemento. Es una estructura llamada con acceso al azar, pues
todos sus elementos pueden se seleccionados al azar y son igualmente accesibles.

Un arreglo puede ser un conjunto de elementos del tipo de cadena, así como puede ser
del tipo entero.

Según la dimensión pueden clasificarse en arreglos unidimensionales llamados vectores


y en arreglos bidimensionales conocidos como matrices.

Unidad I – Algoritmos 20
Fundamentos de Informática
Ingenierías

 REGISTROS

Son asociaciones de elementos de tipos arbitrarios, es decir heterogéneos.


Constituyen la base para la conformación de los archivos o bases de datos.

Un archivo es un conjunto de registros: conjunto de datos referidos a un mismo tema.


Un registro es un conjunto de datos de una misma especie, particularidad o tipo.
Por ejemplo:
Nombre de un alumno, edad, carrera, materia, regulariza

Cadena Entero Entero Cadena Booleano

Tipos de Datos Compuestos

Son los tipos de datos más complejos, y usados en la mayoría de los problemas
computacionales. Estas estructuras se destacan especialmente por la forma en que sus
elementos se organizan y por las operaciones definidas sobre ellas.

 PILAS

Pensá en una pila de bandejas en un restaurante: un asistente coloca una pila de


bandejas limpias sobre las que ya había antes, y estas son tomadas una por una por los
clientes. De esta manera, las bandejas que quedan abajo de todo son las menos
utilizadas (y a veces no les llega nunca la oportunidad de ser usadas). Las pilas de datos
funcionan del mismo modo: se agrega un dato a la pila o se retira uno de ella, pero el dato
retirado es siempre el último que se colocó en la pila.

 COLAS

Una cola es similar a una pila excepto que el primer elemento de una cola es el primero
en ser retirado.

Unidad I – Algoritmos 21
Fundamentos de Informática
Ingenierías

 LISTAS LIGADAS

Son estructuras de datos, en donde los mismos se enlazan o vinculan facilitando la


inserción y eliminación de datos, que resultaba complicada en el caso de las pilas y de las
colas.

Una lista enlazada simple contiene dos valores: el valor actual del nodo y un enlace al siguiente nodo

Insertar un elemento:

Borrar un elemento:

 ARBOLES y GRAFOS

Son gráficos acíclicos, conexos y simples. Tienen características especiales y son muy
usados en el ambiente de las matemáticas
Raíz
Un árbol es una estructura de datos ampliamente usada que
imita la forma de un árbol (un conjunto de nodos conectados). Un
nodo es la unidad sobre la que se construye el árbol y puede Rama
tener cero o más nodos hijos conectados a él. Se dice que un
nodo 2 es padre de un nodo 7 si existe un enlace desde 2 hasta
7 (en ese caso, también decimos que 7 es hijo de 2). Sólo puede
haber un único nodo sin padres, que llamaremos raíz. Un nodo
que no tiene hijos se conoce como hoja. Los demás nodos Hoja
(tienen padre y uno o varios hijos) se les conoce como rama.

Un grafo es un conjunto, no vacío, de objetos llamados


vértices (o nodos) y una selección de pares de vértices,
llamados aristas (edges en inglés) que pueden ser
orientados o no. Típicamente, un grafo se representa
mediante una serie de puntos (los vértices) conectados por
líneas (las aristas).

Diagrama de un grafo con 6 vértices y 7 aristas.

Unidad I – Algoritmos 22
Fundamentos de Informática
Ingenierías

Muchas redes de uso cotidiano pueden ser modeladas con un grafo: una red de
carreteras que conecta ciudades, una red eléctrica o la red de drenaje de una ciudad.
Existen diferentes formas de almacenar grafos en una computadora. La estructura de
datos usada depende de las características del grafo y el algoritmo usado para
manipularlo. Entre las estructuras más sencillas y usadas se encuentran las listas y las
matrices, aunque frecuentemente se usa una combinación de ambas.

Ejemplo de lista de adyacencia

Unidad I – Algoritmos 23
Fundamentos de Informática
Ingenierías

Conceptos Generales:

Las variables son zonas de memoria cuyo contenido cambia durante la fase de
procesamiento de información. Son objetos cuyo valor puede ser modificado a lo largo de
la ejecución de un programa.
Las variables llevan un nombre llamado Identificador. Este puede ser una cadena de
letras y dígitos, empezando siempre con una letra. Por ejemplo: Pi, curso99, nom_alum,
etc.
Los Identificadores son palabras creadas por los programadores para dar nombre a
los objetos y demás elementos que necesitamos declarar en un programa: variables,
constantes, tipos, estructuras de datos, archivos, subprogramas, etc.
En algunos lenguajes de programación las letras mayúsculas se tratan como
diferentes y distintas unas de otras. Por ejemplo, contador, Contador y CONTADOR son
tres nombres de identificadores distintos.
Un identificador no puede ser igual a una palabra reservada, y no debe tener el
mismo nombre que una función, ya sea definida por el usuario o de la biblioteca del
lenguaje.
Constantes: Son objetos cuyo valor permanece invariable a lo largo de la ejecución
de un programa. Una constante es la denominación de un valor concreto, de tal forma que
se utiliza su nombre cada vez que se necesita referenciarlo.
Un operador es un símbolo o palabra que significa que se ha de realizar cierta
acción entre uno o dos valores que son llamados operandos.
Las expresiones son representaciones de un cálculo necesario para la obtención de
un resultado. Son un conjunto de operadores y operandos que producen un valor. Por
ejemplo: Cos (pi * X) + 12.56 * SQR(100)
Asignación: es reemplazar el valor de una variable por otro. Dependiendo del autor
del pseudocódigo , la instrucción "reemplace el valor de la variable x por el valor de la
variable y" puede ser representado como:
xy ó x := y ó x= y

Contador y Acumulador:
Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad
constante cada vez que se produce un determinado suceso o acción.
La inicialización consiste en asignarle al contador un valor inicial. a  0; i  1
Incremento: a  a + 1
Decremento: a  a – 1

El acumulador es una variable que suma sobre sí misma un conjunto de valores para
de esta manera tener la suma de todos ellos en una sola variable.
La diferencia entre un contador y un acumulador es que mientras el primero va
aumentando de uno en uno, el acumulador va aumentando en una cantidad variable.

Tipos de operadores:
Aritméticos (su resultado es un número): potencia, * , / , mod, div, + , -
Relacionales (su resultado es un valor de verdad): =, <, >, <=, >=, <>
Lógicos o Booleanos (su resultado es un valor de verdad): not, and, or
Alfanuméricos : + (concatenación)
Asociativos. El único operador asociativo es el paréntesis ( ), el cual permite indicar
en qué orden deben realizarse las operaciones. Cuando una expresión se encuentra entre
paréntesis, indica que las operaciones que están dentro de ellos debe realizarse
Otro: a veces es útil la utilización de comentarios en nuestro algoritmo. Para hacer
esto se usan “//”. Por ejemplo: x  0 //inicializa la variable x con el valor cero.

Unidad I – Algoritmos 24
Fundamentos de Informática
Ingenierías

Operadores aritméticos:

Operadores de relación:

Operadores lógicos:

Funciones predefinidas:

Unidad I – Algoritmos 25

También podría gustarte