Algoritmos








Algoritmos Computacionales



Lenguajes de Programación             


Estructura de un programa
La programación de computadoras es el proceso de planificar una secuencia de instrucciones que han de seguir en una computadora para dar solución a un problema. El concepto de programa almacenado en la memoria fue ideado por John Von Neumann en 1946.
Para realizar un programa hay que proponer primeramente una solución a un problema, es decir, pensar en una estrategia para solucionarlo. Posteriormente se pasa al análisis en donde se averigua que tipo de problema es y cómo le vamos a dar solución, así como seleccionar el lenguaje en el que se va a programar.
Los pasos uno a uno son:

1.-Análisis y propuesta de solución al problema: aquí se identifica el tipo de problema y el área a la que pertenece. Se piensa también en posibles soluciones, con sus tiempos establecidos.

2.-Identificación de variables constantes y actores involucrados en el problema: se identifican, ya que son las tres cosas que nos pueden cambiar al problema o alterar su curso.

3.-Planificación del programa: se elige el lenguaje de programación a trabajar dependiendo de la solución y se crea el plan de trabajo el cual contiene la búsqueda bibliografía del problema y el cronograma de cada una de las etapas de los que consta la solución al problema.

4.-Algoritmo: Desarrollo de la secuencia lógica de pasos para la solución del problema (en este paso también involucra a los diagramas de flujo.

5.- Diagramas de Flujo: seguir los pasos del Algoritmo verificando que el problema se resuelva correctamente.

6.-Desarrollo de las especificaciones: cuando se elije el lenguaje de programación, existen variables, constantes y actores que hay que declararse antes de comenzar el programa, o si se va a utilizar ecuaciones matemáticas o funciones, las cuales requieren de cierta de escribirse dentro del programa. Estas especificaciones involucran ciertas características del problema y ciertas características del lenguaje seleccionado.

7.-Codificación (se requiere conocer la sintaxis del lenguaje) y Depuración: conversión del Algoritmo en un programa escribiéndolo en un lenguaje de programación lo más eficientemente posible. (nota: nadie programa igual ya que cada uno de nosotros no razona igual y el proceso de llegar a una solución depende de este proceso de razonar).

8.-Ejecución y Verificación de errores: introducir el programa en la memoria, ejecutarlo y probar sus resultados, corrigiendo los errores hasta su punto final de tal forma que se obtenga la solución a su problema.

9.-Prueba Final: Se tiene la plena seguridad de que el problema quedo resuelto ya que se agotaron todas las pruebas posibles de que
el programa no falle al introducir ciertos valores o rangos de valores.

10.-Documentación: mantenimiento y creación de los documentos descriptivos como el manual del programador y manual del usuario.

Herramientas Empleadas

1.-Diagramas y/o Organigramas
Es la representación gráfica de un problema dado, para la definición, análisis, o solución, es decir, la representación gráfica de un algoritmo.
2.-Algoritmo
Conjunto de reglas o instrucciones que indican una secuencia lógica de operaciones que proporciona la respuesta a cualquier tipo de problema dado.

Estilos de Programación.

Se entiende por estilos de programación los métodos que existen para mejorar la calidad de los programas de computación.

Las características de un buen programa son:
  
El programa debe funcionar.

El programa no debe tener dificultades. Hay que anticipar las situaciones a las que los usuarios van a poner en el programa, es decir, que esté libre de errores.

 El programa debe estar bien documentado. La documentación puede estar de dos formas: documentación externa, que incluye diagramas de flujo, descripciones de los algoritmos, etc. La documentación interna o comentarios en el propio programa que va dirigido exclusivamente al programador.

El programa debe ser eficiente. Que sea un programa fácil de leer y de comprender.

Lenguajes de programación: Un lenguaje de programación permite al usuario crear programas que serán entendidos por el ordenador (directa o indirectamente) con el objetivo de realizar alguna tarea. A grandes rasgos podemos clasificar los lenguajes de programación en tres categorías: máquina, bajo nivel (ensamblador) y alto nivel.

Lenguaje máquina

Los lenguajes máquina: Son aquellos cuyas instrucciones son directamente entendibles por el ordenador sin la necesidad de traducción alguna. Sus instrucciones no son más que ristras de ceros y unos (bits). Estas especifican la operación a realizar, los registros del procesador y celdas de memoria implicados, etc.
Obviamente, este tipo de lenguajes serán fáciles de comprender para un ordenador pero muy difíciles para el hombre. Esta razón nos lleva a buscar otro lenguaje para comunicarnos con el ordenador.

Lenguajes de bajo nivel (ensamblador)

La programación en lenguaje máquina es difícil, por ello se necesitan lenguajes que permitan simplificar este proceso. Los lenguajes de bajo nivel han sido diseñados para este fin.
Estos lenguajes son generalmente dependientes de la máquina, es decir, dependen de un conjunto de instrucciones específicas del ordenador. Un ejemplo de este tipo de lenguajes es el ensamblador. En él, las instrucciones se escriben en códigos alfabéticos conocidos como mnemotécnicos (generalmente, abreviaturas de palabras inglesas.

Las palabras mnemotécnicas son mucho más fáciles de recordar que las secuencias de ceros y unos. Una instrucción típica de ensamblador puede ser:

ADD x,y,z
Esta instrucción significaría que se deben sumar los números almacenados en las direcciones de memoria x e y, y almacenar el resultado en la dirección z. Pero aún así, a medida que los programas crezcan en tamaño y complejidad, el ensamblador sigue sin ser una buena solución. Pasemos entonces a los lenguajes de alto nivel.

Lenguajes de alto nivel

Los lenguajes de alto nivel son aquellos en los que las instrucciones o sentencias son escritas con palabras similares a las de los lenguajes humanos (en la mayoría de los casos, el inglés). Esto facilita la escritura y comprensión del código al programador.
Existen muchos lenguajes de alto nivel, por citar algunos:

Ø Delphi
Ø BASIC
Ø COBOL
Ø FORTRAN
Ø C, C++, C#
Ø Visual Basic
Ø Pascal
Ø Java


A continuación se presenta una instrucción de Pascal:

if (x=y) and (z=w) then write ('Esto es una prueba)Si se tienen unos conocimientos mínimos del Inglés, esta línea tiene una comprensión muy fácil: "Si el contenido de x es igual al contenido de y, y el contenido de z es igual al contenido de w, entonces escribe Esto es una prueba".
Los programas escritos en lenguaje de alto nivel no son entendibles directamente por la máquina. Necesitan ser traducidos a instrucciones en lenguaje máquina que entiendan los ordenadores. Los programas que realizan esta traducción se llaman compiladores, y los programas escritos en lenguajes de alto nivel se denominan programas fuente.

Programas fuente y objeto

Un programa puede ser definido como un conjunto de instrucciones que pueden someterse como unidad a un ordenador y utilizarse para dirigir el comportamiento de éste.
Aquí no vamos a profundizar en todos los tipos de programas, ni a realizar una clasificación exhaustiva. Solamente mencionaremos los dos tipos que nos interesan en programación: los programas fuente y los objeto.

Un programa fuente: Es aquel que nos permite escribir un algoritmo mediante un lenguaje formal. Por eso al código desarrollado al programar se le llama código fuente.

Un programa objeto: Es el resultado de traducir un programa fuente para obtener un lenguaje comprensible por la máquina.
Traductores de programas: Son un tipo de programas cuya función es convertir el código de un lenguaje en otro. Por ejemplo un compilador, que traduce código fuente en código objeto. Existen distintos tipos de traductores, entre ellos destacan:

Ø Ensambladores
Ø Preprocesadores
Ø Intérpretes
Ø Compiladores

Ensambladores: Es un tipo de traductor que convierte programas escritos en lenguaje ensamblador en programas escritos en código máquina.

Preprocesadores: Traduce un lenguaje de alto nivel a otro, cuando el primero no puede pasar a lenguaje máquina directamente.

Intérpretes: Se tratan de traductores-ejecutores ya que con cada instrucción realizan un proceso triple de lectura-traducción-ejecución. Son relativamente lentos, pero muy buenos para la depuración de programas.

Compiladores: Es el tipo de traductor más conocido. Se trata de un programa que traduce código fuente escrito en un lenguaje de alto nivel en código máquina (no siempre). Son más rápidos que los intérpretes.


          
Algoritmo: Un algoritmo es un conjunto ordenado y finito de instrucciones que conducen a la solución de un problema. 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.

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

Ejemplo 1.1:- Algoritmo para preparar ceviche de mero para 6 personas.

Entradas : - 1 kilo de mero - 3 cebollas cortadas a lo largo - 3 ramas de apio picado - 2 ramitas de culantro picado - 4 vasos de jugo de limón - 4 cucharadas de ajo molido - 2 cucharadas de ají amarillo molido - sal y pimienta Proceso : - Cortar la carne de pescado en pequeños trozos. - Mezclar la carne con el jugo de limón, el ajo, la pimienta, el culantro, el ají amarillo y el apio. - Dejar reposar 30 minutos. - Agregar sal al gusto y echar las cebollas cortadas. - Servir acompañando el cebiche con arroz, papas, tostones u otro plato de su preferencia.

Salida: El ceviche Evidentemente este es un algoritmo no computacional, no podrá ser ejecutado por una computadora, pero sí por una persona.
Ejemplo 1.2:- Algoritmo para expresar en centímetros y pulgadas una cantidad dada en metros.
Entrada: La cantidad M de metros
Proceso: Cálculo de centímetros: C = M*100 Cálculo de pulgadas: P = C/2.54
Salida: La cantidad C de centímetros y la cantidad P de pulgadas
Este es un algoritmo computacional escrito en lenguaje natural, puede ser convertido en un programa de computadora, pero también puede ser ejecutado manualmente por una persona.


A continuación les dejo varios ejemplos de Algoritmos ya realizados


Diseñe un algoritmo que lea tres números enteros y determine el menor valor positivo. Si los números positivos son iguales, dar como menor a cualquiera de ellos.
INICIO
//Declaración
Entero a, b, c
Cadena Imprimir
//Entrada Datos
Leer a, b, c
//Proceso Cálculo
SI( a > 0 )
menor = a
SI( b > 0 && b < menor )
menor = b
SI( c > 0 && c < menor )
menor = c
SINO SI( b > 0 )
menor = b
SI( c > 0 y c < menor )
menor = c
SINO SI ( c > 0 )
Menor = c
//Salida Resultados
IMPRIMIR menor
sino
IMPRIMIR "No hay números positivos"
FIN
 Diseñe un algoritmo que lea tres números y los imprima de mayor a menor y de menor a mayor.

INICIO

//Declaración
REAL n1, n2, n3, mayor, menor, medio
//Entrada Datos
Leer n1, n2, n3
//Proceso de cálculo
Menor = n1
SI (n2 < menor)
Menor = n2
Sino si (n3 < menor)
Menor = n3
Mayor = n1
Sino si (n2 > mayor)
Mayor = n2
Sino si (n3 > mayor)
Mayor = n3
Medio = n1+n2+n3 mayor menor
// Salida Datos
Imprimir menor, medio, mayor
Imprimir mayor, medio, menor
FIN
Diseñe un algoritmo para obtener el grado de eficiencia de un operario de una fábrica de tornillos, de acuerdo a las siguientes condiciones, que se le imponen para un período de prueba:

ü Menos de 200 tornillos defectuosos.
ü Más de 10000 tornillos producidos.
El grado de eficiencia se determina de la siguiente manera:
ü Si no cumple ninguna de las condiciones, grado 5.
ü  Si sólo cumple la primera condición, grado 6.
ü  Si sólo cumple la segunda condición, grado 7.
ü  Si cumple las dos condiciones, grado 8.

INICIO

//Declaración de variables
Entero torpro, tordef, grado
//Entrada de datos
Leer torpro, tordef
// Proceso de cálculo
SI (tordef < 200)
SI (torpro > 10000)
grado = 8
sino
grado = 6
sino
SI (torpro > 10000)
grado = 7
sino
grado = 5
//Salida de Resultados
Imprimir grado
FIN


Se cuenta con los votos obtenidos por Juan, Pedro y Maria en una elección democrática a la presidencia de un club. Para ganar la elección se debe obtener como mínimo el 50% de los votos más 1.



En caso que no haya un ganador se repite la elección en una segunda vuelta. Van a la segunda vuelta los dos que obtengan la más  alta votación ó, los tres en caso de Producirse un empate  doble (entre los dos con menor votación) o un empate triple. Diseñe un algoritmo  que determine el resultado de la elección.


INICIO
//Declaración de variables
Entero vjuan, vpedro, vmaria, vmax
//Entrada de datos
Leer vjuan, vpedro, vmaria
// Proceso de cálculo
vtotal = vjuan + vpedro + vmaria
vmax = vjuan
SI( vpedro > vmax )
vmax = vpedro
SI( vmaria > vmax )
vmax = vmaria
SI( vmax > vtotal/2 + 1 )
SI( vjuan == vmax )
Rsdo= "Ganó Juan"
SINO SI ( vpedro == vmax)
Rsdo="Ganó Pedro"
SINO
Rsdo="Ganó María"
SINOSI( vjuan < vpedro y vjuan < vmaria)
Rsdo="Debe haber segunda vuelta entre Pedro y María"
SINO SI ( vpedro < vjuan y vpedro < vmaria)
Rsdo="Debe haber segunda vuelta entre Juan y María"
SINO SI ( vmaria < vjuan y vmaria < vpedro)
Rsdo="Debe haber segunda vuelta entre Juan y Pedro"
SINO
Rsdo="Debe haber segunda vuelta entre los tres"
//Salida Resultados
Imprimir Rtdo
FIN



Diseñe un algoritmo que lea un número entero de 3 cifras, y forme el mayor número
Posible con las cifras del número ingresado. El número formado debe tener el mismo signo que el número ingresado. Taller de Ejercicios de Programación si  sino

INICIO
//Declaración
Entero num1, num2, max, uni, dec, cen, menor, mayor, medio
//Entrada
Leer num1
//Proceso
SI( (num1 >= 100 && num1 <= 999 && num1 >= 999 && num1 <= 100 )
max= num1
SI( num1 < 0 )
num1 = num1
cen = num1/100
dec = (num1%100)/10
uni = (num1%100)%10
menor = cen
SI( dec < menor )
menor = dec
SI( uni < menor )
menor = uni
mayor = cen
SI( dec > mayor )
mayor = dec
SI( uni > mayor )
mayor = uni
medio = cen+dec+uni mayor menor
SI( maux > 0 )
num2 = mayor*100 + medio*10 + menor
Sino
num2 = 1*(menor*100 + medio*10 + mayor*100)
Imprimir num2
Sino
Imprimir "El número no tiene tres cifras"
FIN


El promedio de prácticas de un curso se calcula en base a cuatro prácticas calificadas de las cuales se elimina la nota menor y se promedian las tres notas más altas. Diseñe un algoritmo que determine la nota eliminada y el promedio de prácticas de un estudiante.

Algoritmo

INICIO

REAL pc1, pc2, pc3, pc4, pcmenor, promedio

LEER pc1, pc2, pc3, pc4

 // Determina la nota menor

pcmenor = pc1

SI( pc2 < pcmenor )
pcmenor = pc2
SI( pc3 < pcmenor )
pcmenor = pc3
SI( pc4 < pcmenor )
pcmenor = pc4
// Determina el promedio descontando la nota menor
promedio = (pc1 + pc2 + pc3 + pc4 ­ pcmenor )/3
IMPRIMIR promedio, pcmenor
FIN