Los Algoritmos
Los Algoritmos
LOS ALGORITMOS
(http://www.itlp.edu.mx/publica/tutoriales/algoritmos.htm)
Unidad I
"Conceptos Básicos"
Unidad I
"Conceptos Básicos"
1.1 Introducción
Los sistemas modernos de computación consisten en una gran conjunción de elementos de
circuitos (hardware) y de programación (software) que han sido diseñados para
proporcionar a la computación un ambiente productivo y hasta cierta medida agradable.
El término Sistema de Cómputo se utiliza para señalar lo que el usuario emplea, en lugar
del término Computadora. En los primeros años de la computación, los usuarios del
sistema debían interactuar más estrechamente con el hardware real que lo que es hoy
necesario, muchas funciones que debían realizar los usuarios mismos se manejan ahora por
software mediante Sistemas Operativos. El sistema operativo crea un ambiente en el cual
los usuarios pueden preparar programas y ejecutarlos sin tener que entrar en los detalles del
hardware del sistema.
Para satisfacer el crecimiento de la demanda de medios de computación, es que se ha
desarrollado la multiprogramación, en la cual varios usuarios emplean el sistema de forma
simultánea, como Windows por ejemplo.
Un término fundamental de esta materia es el Programa, el cual es simplemente una
secuencia de instrucciones que orienta a la Unidad de Control de Procesamiento (CPU) en
el desarrollo de los cálculos, el cual debe expresarse de forma que sea entendido por el
CPU. Un CPU sólo puede entender instrucciones que estén expresadas en términos de su
lenguaje máquina, pero esto se explicará más adelante.
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.La definición de un algoritmo debe describir tres
partes : Entrada, Proceso y Salida.
Lenguaje de Programación :
Es un conjunto de palabras, símbolos y reglas sintácticas mediante los cuales puede
indicarse a la computadora los pasos a seguir para resolver un problema.
Los lenguajes de programación pueden clasificarse por diversos criterios, siendo el más
común su nivel de semejanza con el lenguaje natural, y su capacidad de manejo de niveles
internos de la máquina.
Lenguaje Máquina
Son aquéllos que están escritos en lenguajes directamente inteligibles por la máquina
(computadora), ya que sus instrucciones son cadenas binarias (cadenas o series de
caracteres de dígitos 0 y 1) que especifican una operación y las posiciones (dirección) de
memoria implicadas en la operación se denominan instrucciones de máquina o código
máquina. El código máquina es el conocido código binario.
Las instrucciones en lenguaje máquina dependen del hardware de la computadora y, por
tanto, diferirán de una computadora a otra.
Ventajas del Lenguaje Máquina
Posibilidad de cargar (transferir un programa a la memoria) sin
necesidad de traducción posterior, lo que supone una velocidad de
ejecución superior a cualquier otro lenguaje de programación.
Desventajas del Lenguaje Máquina
Dificultad y lentitud en la codificación. Poca fiabilidad. Gran dificultad para verificar y
poner a punto los programas. Los programas solo son ejecutables en el mismo procesador
(CPU).En la actualidad, las desventajas superan a las ventajas, lo que hace prácticamente
no recomendables a los lenguajes máquinas.
Al igual que los idiomas sirven de vehículo de comunicación entre los seres humanos,
existen lenguajes que realizan la comunicación entre los seres humanos y las computadoras.
Estos lenguajes permiten expresar los programas o el conjunto de instrucciones que el
operador humano desea que la computadora ejecute.
Los lenguajes de computadoras toman diferentes formas; los de las primeras computadoras,
como la ENIAC y la EDSAC, se componían en el lenguaje real de las máquinas mismas. La
dificultad de programar las máquinas de esta manera limitaba drásticamente su utilidad y
proporcionaba un fuerte incentivo para que se desarrollaran lenguajes de programación más
orientados hacia la expresión de soluciones con la notación de los problemas mismos.
Los primeros lenguajes de programación se conocieron como Lenguajes Ensambladores,
un ejemplo es: TRANSCODE, desarrollado para la computadora FERUT. En los lenguajes
ensambladores se define un código especial llamado mnemónico para cada una de las
operaciones de la máquina y se introduce una notación especial para especificar el dato con
el cual debe realizarse la operación.
A mediados de los años 60’s aparecieron los primeros lenguajes de propósito general como
FORTRAN, FORTRAN IV, ALGOL, COBOL, BASIC, PL/I, ADA, C,C++, PASCAL, etc.
pero el desarrollo de nuevas tecnologías, tanto en arquitectura de computadoras como en
lenguajes de programación, continúa a paso acelerado, cada vez con mayor velocidad, el
panorama está cambiando de una etapa de sistemas y lenguajes especialmente desarrollados
para aplicaciones individuales. Los lenguajes de programación actuales son los conocidos
como Lenguajes visuales, como por ejemplo Visual Fox, Visual Basic, Visual C .
Unidad II
" METODOLOGIA PARA LA SOLUCION DE PROBLEMAS POR MEDIO DE
COMPUTADORAS "
A fin de resolver un problema utilizando sistemas de cómputo, debe seguirse una serie de
pasos que permiten avanzar por etapas bien definidas hacia la solución.
Estas etapas son las siguientes :
Definición del problema. Análisis de los datos. Diseño de la
solución. Codificación. Prueba y depuración. Documentación. Mantenimiento.
Ejemplo 2.1
Leer el radio de un círculo y calcular e imprimir su superficie y circunferencia.
Análisis
Las entradas de datos en este problema se concentran en el radio del círculo. Dado que el
radio puede tomar cualquier valor dentro del rango de los números reales, el tipo de datos
radio debe ser real.
Las salidas serán dos variables : superficie y circunferencia que también serán de tio real.
Entradas : Radio del círculo (variable RADIO).
Salidas : Superficie del círculo (variable AREA).
Circunferencia del círculo (variable CIRCUNFERENCIA).
Variables : RADIO, AREA, CIRCUNFERENCIA tipo real.
Programa Fuente
Esta escrito en un lenguaje de programación. (pascal, C++,Visual Fox, Visual Basic,
etc). Es entendible por el programador.
Programa Ejecutable
Está en lenguaje máquina. Entendible por la máquina.
2.6 Documentación
Debido a que el programa resultante en esta etapa se encuentra totalmente depurado (sin
errores), se procede a la utilización para resolver problemas del tipo que dió origen a su
diseño.
En vista de que esta utilización no podrá ser supervizada en todas las ocasiones por el
programador, debe crearse un manual o guía de operación que indique los pasos a seguir
para utilizar el programa.
2.7 Mantenimiento
Se refiere a las actualizaciones que deban aplicarse al programa cuando las circunstancias
así lo requieran. Este programa deberá ser susceptible de ser modificado para adecuarlo a
nuevas condiciones de operación.
Cualquier actualización o cambio en el programa deberá reflejarse en su documentación.
Unidad III
"Entidades Primitivas Para el Diseño de Instrucciones"
Enteros
Es un conjunto finito de los números enteros. Los enteros son números completos, no
tienen componentes fraccionarios o decimales y pueden ser negativos y positivos.
Algunos ejemplos son :
3 7 -10 9 15.25 50
Reales
Consiste en un subconjunto de los números reales. Estos números siempre tienen un punto
decimal y pueden ser positivos o negativos. Un número real consiste de un número entero y
una parte decimal. Algunos ejemplos son :
0.52 664.32 6.579 8.0 -9.3 -47.23
Cadenas
Son los datos que representan información textual (palabras, frases, símbolos, etc). No
representan valor alguno para efectos numéricos. Pueden distinguirse porque son
delimitados por apóstrofes o comillas.
Lógicos
También se le denomina Booleano, es aquél dato que solo puede tomar uno de dos valores :
Falso y verdadero.
Se utiliza para representar las alternativas (si/no) a determinadas condiciones. Por ejemplo,
cuando se pide si un valor entero sea primo, la respuesta será verdadera o falsa, según sea.
Las categorías y tipos que se mencionaron anteriormente se conocen como Tipos Simples,
puesto que no poseen una estructura compleja.
En forma adicional, cada lenguaje puede proporcionar la utilización de Tipos Compuestos,
siendo estos, datos que tienen una estructura predeterminada.
Tipos Compuestos
Entre los principales tipos compuestos se encuentran los siguientes:
a.- SUBRANGO : Son aquéllos en los que se especifíca con precisión el intervalo de
valores válidos para un dato.
Ejemplos:
0..100 (son enumerativos de tipo entero)
'A'..'Z' (son enumerativos de tipo cadena)
Los Reales no son válidos para crear enumerativos, ya que su intervalo no está definido.
b.- ENUMERATIVOS : Son aquéllos en los que se definen individualmente los valores
para un dato.
Ejemplos:
(0,25,40,52) Siempre deben ponerse netre paréntesis.
c.- DEFINIDOS POR EL USUARIO : Son aquéllos que el programador crea para
satisfacer las necesidades del programa en diseño.
Constantes y variables
Una Constante es aquélla que no cambia de valor durante la ejecución de un programa (o
comprobación de un algoritmo en este caso). Se representa en la forma descrita para cada
categoría.
Las Variables son aquéllas que pueden modificar su valor durante la ejecución de un
programa (idem).
Su representación se da a traves de letras y símbolos generalmente numéricos a los que se
les asigna un valor.
Ejemplos:
ConstantesVariablesNuméricos36 450.35 0.58A Nom Edad Ciudad EstaturaCadena'A'
'Juan' 'La Paz'LógicosFalso Verdadero
Operadores
Un operador es el símbolo que determina el tipo de operación o relación que habrá de
establecerse entre los operandos para alcanzar un resultado.
Los operadores se clasifican en tres grupos:
Aritméticos. Relacionales. Lógicos.
1.- Operadores Aritméticos
Son aquéllos que permiten la realización de cálculos aritméticos. Utilizan operandos
numéricos y proporcionan resultados numéricos.
OperadorOperación+Suma-Resta*Multiplicación/División realDivDivisión enteraMod
Residuo^ExponenciaciónEjemplos:
7+3 = 10 10 Div 4 = 2
7-3 = 4 20 Mod 3 = 2
7*3 = 21 5 Mod 7 = 5
10/4= 2.5 4 ^ 2 = 16
En la expresión 7+3, los valores 7 y 3 se denominan operandos. El valor de la expresión
7+3 se conoce como resultado de la expresión.
Todos los operadores aritméticos no existen en todos los lenguajes de programación, por
ejemplo, en Fortran no existen Div y mod.
Operadores Div y Mod
El símbolo / se utiliza para la división real, y el operador Div representa la división entera.
ExpresiónResultadoExpresiónResultado10.5/3.03.510 Div 331/40.2518 Div 2
92.0/4.00.530 Div 30130/301.010 Mod 316/80.7510 Mod 20
Operadores Relacionales
Permiten realizar comparaciones de valores de tipo numérico o carácter. Estos operadores
sirven para expresar las condiciones en los algoritmos. Proporcionan resultados lógicos.
OperadorSignificado<Menor que>Mayor que=Igual que<=Menor o igual que>=Mayor o
igual que<>Diferente deEl formato general para las comparaciones es:
expresión1 operador de relación expresión2
El resultado de la operación será Verdadero o Falso. Así por ejemplo, si A=4 y B=3,
entonces:
A>B Es Verdadero
(A-2) < (B-4) Es Falso
Los operadores de relación se pueden aplicar a cualquiera de los cuatro tipos de datos
estándar: enteros, real, lógico y carácter.
‘A’ < ‘K’ = Verdadero
‘A’ > ‘a’ = Falso
‘MARIA’ < ‘JUAN’ = Falso (se considera la primera letra)
‘JAIME’ > ‘JORGE’ = Falso
Nota: La comparación de cadenas se rige por el código ASCII.
Asignación
La operación de asignación es el modo de darle valores a una variable. La operación de
asignación se representa por el símbolo u operador . La operación de asignación se
conoce como instrucción o sentencia de asignación cuando se refiere a un lenguaje de
programación.
A fin de manejar datos por medio de variables, estos pueden recibir valores determinados.
El tipo de los valores que pueden recibir dependen de la declaración previa de tales
variables.
En una asignación se resuelve, primeramente la expresión (al lado derecho del símbolo de
asignación) y se asigna el resultado en la variable.
El formato general de asignación es:
Nom_variable Expresión
Donde Expresión puede ser una variable o constante, operación, función.
Ejemplo:
A 9
Significa que la variable A se le ha asignado el valor 9. La acción de asignar es destructiva,
ya que el valor que tuviera la variable antes de la asignación se pierde y se reemlaza por el
nuevo valor. Así en la secuencia de operaciones:
A 30
A 189
A 9
Cuando se ejecutan, el último valor que toma A será 9, ya que los valores anteriores a este
han desaparecido.
Las acciones de asignación se clasifican según sea el tipo de expresiones : Aritméticas,
Lógicas y de Caracteres.
Asignación Aritmética
Las expresiones en las operaciones de asignación son aritméticas:
Suma 5+10+2 Se evalúa la expresión 5+10+2 y se asigna a la variable Suma, es decir,
17 será el valor que toma Suma.
Asignación Lógica
La expresión que se evalúa en la operación de asignación es lógica. Supóngase que M, N, y
P son variables de tipo lógico.
M 8<5
N M o (7 <= 12)
P 7>6
Tras ejecutar las operaciones anteriores, las variables M,N,P toman los valores, falso,
verdadero, verdadero respectivamente.
Asignación de caracteres
La operaciómn que se evalúa es de tipo caracter.
x '3 de Mayo de 1999'
La acción de asignación anterior asigna la cadena de caracteres '3 de Mayo de 1999' a la
variable de tipo carácter x.
Entrada y Salida de Información
Los cálculos que realizan las computadoras requieren para ser útiles la Entrada de los datos
necesarios para ejecutar las operaciones que posteriormente se convertirán en resultados, es
decir, Salida.
3.3 Expresiones
Las expresiones son combinaciones de constantes, variables, símbolos de operadores,
paréntesis y nombres de funciones especiales. Las mismas ideas son utilizadas en notación
matemática tradicional ; por ejemplo :
a + b ( b+2) Aquí los paréntesis indican el orden de cálculo.
Cada expresión toma un valor que se determina tomando los valores de las variables y
constantes implicadas y la ejecución de las operaciones indicadas.
Una expresión consta de operadores y operandos. Según sea el tipo de objetos que
manipulan, las expresiones se clasifican en :
Aritméticas Relacionales Lógicas CarácterEl resultado de la expresión numérica es de
tipo numérico ; el resultado de una expresión relacional y de una expresión lógica es de tipo
lógico ; el resultado de una expresión carácter es de tipo carácter.
1.- Expresiones Aritméticas
Las expresiones aritméticas son análogas a las fórmulas matemáticas. Las variables y
constantes son numéricas (real o entera) y las operaciones son las aritméticas.
+ suma- resta* multiplicación/ división**, ^ exponenciacióndiv división enteramod módulo
(resto)Los cálculos que implican tipos de datos reales y enteros suelen dar normalmente
resultados del mismo tipo si los operandos lo son también. Por ejemplo, el producto de
operandos reales produce un real.
Ejemplo :
4 x 6 se representa por 4 * 6
39 se representa por 3 ^ 9
18 div 6 se representa por 18/6
Unidad IV
"Técnicas de Diseño"
4.2 Botton Up
Esta técnica consiste en partir de los detalles más precisos del algoritmo completando
suscesivamente módulos de mayor complejidad, se recomienda cuando ya se cuenta con
experiencia y ya se sabe lo que se va a hacer.
Conforme se va alcanzando el desarrollo de módulos más grandes se plantea como objetivo
final la resolución global del problema.
Este método es el inverso del anterior y es recomendable cuando se tiene un modelo a
seguir o se cuenta con amplia experiencia en la resolución de problemas semejantes.
La técnica de Botton Up es frecuentemente utilizada para la realización de pruebas a
sistemas ya concluidos.
UNIDAD V
"TENICAS PARA LA FORMULACION DE
ALGORITMOS"
Las técnicas analizadas en la unidad anterior permiten un diseño global del algoritmo, pero
ocasionalmente pueden desatender detalles específicos de este.
Las tres técnicas de formulación de algoritmos más populares son :
Diagrama de flujo Pseudocódigo Diagramas estructurados
Ejemplo:
Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio
de la hora de trabajo y considerando unos descuentos fijos al salario bruto en concepto de
impuestos (20 por 100).
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.
5.2 Pseudocódigo
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.
El pseudocódigo nació como un lenguaje similar al inglés y era un medio representar
básicamente las estructuras de control de programación estructurada. Se considera un
primer borrador, dado que el pseudocódigo tiene que traducirse posteriormente a un
lenguaje de programación. Cabe señalar que el pseudocódigo no puede ser ejecutado por
una computadora.
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, COBOL, C, FORTRAN o BASIC.
El pseudocódigo utiliza para representar las acciones sucesivas palabras reservadas en
inglés (similares a sus homónimos en los lenguajes de programación), tales como
star,begin, end, stop, if-then-else, while, repeat-until….etc
Secuencia
Inicio
acción1
acción2
:
acción n
Fin
Decisión
Simple
si condición entonces
acción1
acción2
:
acción n
Doble
si condición then
acción1
acción2
:
en caso contrario
acción1
acció2
Iteracción
Fija
para var. Entera inicial hasta final hacer
acción1
acción2
:
acción n
Condicional al inicio
mientras condición hacer
acción1
acción2
:
acción n
Condicional al final
Repetir
acción1
acción2
:
acción n
Hasta que condición
Selección
casos selector de
valor1 : acción1
acción2
valor2 : acción1
acción2
valor n : acción1
acción2
Ejercicio :
Se requiere preguntar dos valores, y a continuación ofrecer un menú con las operaciones
básicas (+, -, *, /). Después de presentar el resultado se ofrecerá la posibilidad de una nueva
operación.
Declaración de variables :
Real : X, Y, RESPUESTA
Entero : OPCION
Carácter : OP
Inicio
Repetir
escribir(‘Primer valor : ’ )
leer(X)
escribir(‘Segundo valor : ‘)
leer(Y)
escribir(‘1) Suma ‘)
escribir(‘2) Resta ‘)
escribir(‘3) Multiplicación ‘)
escribir(‘4) División ‘)
escribir(‘Qué operación deseas realizar ? : ‘)
leer(OPCION)
casos OPCION de
1 : RESULTADO X+Y
2 : RESULTADO X-Y
3 : RESULTADO X*Y
4 : si Y=0 entonces
escribir(‘ Error ‘)
RESULTADO 0
en caso contrario
RESULTADO X/Y
escribir (‘Resultado : ‘,RESULTADO)
escribir(‘Deseas otro cálculo : [S/N] ‘)
leer(OP)
Hasta que RES = ‘N’
Fin
Ejercicio :
Preguntar un nombre y repetirse en pantalla tantas veces como se desee. (preguntar
cantidad de repeticiones), indicando el número de repetición.
Declaración de variables
Cadena : nom
entero : x, n
Inicio
escribir(‘Nombre : ‘)
leer(nom)
escribir(‘Cuántas veces quieres repetirlo ? : ‘)
leer(n)
para x 1 hasta n hacer
escribir(x’.- ‘, nom)
Fin
Ejemplo: Se desea calcular el salario neto semanal de un trabajador en función del número
de horas trabajadas y la tasa de impuestos.
Unidad VI
"Estructuras Algorítmicas"
6.1 Secuenciales
6.2 Condicionales
Inicio
:
:
acciones
:
:
fin
Ejemplo:
Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio
de la hora de trabajo y considerando unos descuentos fijos al sueldo bruto en concepto de
impuestos (20 por 100).
Pseudocódigo
Inicio
{cálculo salario neto}
leer nombre, horas, precio_hora
salario_bruto horas * precio
impuestos 0.20 * salario_bruto
salario_neto salario_bruto_impuestos
escribir nombre, salario_bruto, salario_neto_bruto, salario_neto
Fin
Diagrama de flujo
Diagrama N-S
6.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 especifícan 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 romba o
bien con un triángulo en el interior de una caja rectangular.
Las estructuras selectivas o alternativas pueden ser:
• Simples
• Múltiples
Alternativa Simple (si-entonces/if-then)
La estructura alternativa simple si-entonces (en inglés if-then o bien IF-THEN ) ejecuta
una determinada acción cuando se cumple una determinada condición. La selección si-
entonces evalúa la condición y . . .
Si la condición es verdadera, entonces ejecuta la acción S1 (o acciones caso de ser S1 una
acción compuesta y constar de varias acciones).
Si la condición es falsa, entonces no hacer nada.
A continuación se muestra la gráfica de la estructura condicional simple.
Pseudocódigo en español
Si <condición> Entonces
<acción S1>
Fin_si
Pseudocódigo en inglés
If <condición> then
<acción S1>
end_if
Diagrama N-S
Diagrama N-S
Modelo 1 Modelo 2
Pseudocódigo
En inglés la estructura de decisión múltiple se representa
Case expresión of
[e1]: acción S1
[e2]: acción S2
:
[en]: acción Sn
else
acción Sx
end_case
Ejemplo:
Se desea diseñar un algoritmo que escriba los nombres de los días de la semana en función
del valor de una variable DIA introducida por teclado.
Los días de la semana son 7; por consiguiente, el rango de valores de DIA será 1..7, y caso
de que DIA tome un valor fuera de este rango se deberá producir un mensaje de error
advirtiendo la situación anómala.
Inicio
Leer DIA
Según_sea DIA hacer
1: escribir('Lunes')
2: escribir('Martes')
3: escribir('Miércoles')
4: escribir('Jueves')
5: escribir('Viernes')
6: escribir('Sabado')
7: escribir('Domingo')
else
escribir('Error')
fin_según
fin
Estructuras Repetitivas
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:
Mientras (while) Repetir (repeat) Desde (for)1.- Estructura Mientras (while)
La estructura repetitiva while, es aquélla en que el cuerpo del bucle se repite mientras se
cumple una determinada condición, su representación gráfica es:
Ejemplo:
Contar los números enteros positivos introducidos por teclado. Se consideran dos variables
enteras NUMERO y CONTADOR (contará el número de enteros positivos). Se supone que
se leen números positivos y se detiene el bucle cuando se lee un número negativo o cero.
Pseudocódigo
Inicio
contador 0
Leer (numero)
Mientras numero > 0 hacer
contador contador+1
Leer (numero)
Fin_Mientras
Escribir('El número de enteros positivos es : ', contador)
Fin
Diagrama de Flujo