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