Guia Algoritmos
Guia Algoritmos
Guia Algoritmos
ALGORITMO
Un algoritmo es una descripción de los pasos, de una tarea usando un método particular.
Es una descripción precisa de los pasos que nos permiten obtener la solución de un
problema determinado. En general, los pasos son acciones u operaciones que se
efectúan sobre ciertos objetos. Al comienzo del algoritmo, los objetos tienen valores
iniciales(datos), que varían como consecuencia del proceso descrito en el algoritmo,
obteniendose los valores de salida o resultados.
Es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución
a un problema
Carácter finito. "Un algoritmo siempre debe terminar después de un número finito de
pasos".
Precisión. "Cada paso de un algoritmo debe estar precisamente definido; las operaciones
a llevar a cabo deben ser especificadas de manera rigurosa y no ambigua para cada
caso".
Entrada. "Un algoritmo tiene cero o más entradas: cantidades que le son dadas antes de
que el algoritmo comience, o dinámicamente mientras el algoritmo corre. Estas entradas
son tomadas de conjuntos específicos de objetos".
Salida. "Un algoritmo tiene una o más salidas: cantidades que tienen una relación
específica con las entradas".
Eficacia. "También se espera que un algoritmo sea eficaz, en el sentido de que todas las
operaciones a realizar en un algoritmo deben ser suficientemente básicas como para que
en principio puedan ser hechas de manera exacta y en un tiempo finito por un hombre
usando lápiz y papel".
DESDE EL PLANTEAMIENTO DEL PROBLEMA, HASTA LA OBTENCIÓN DE SU
SOLUCIÓN EN EL COMPUTADOR, HAY QUE RECORRER VARIAS ETAPAS:
PROBLEMA
ALGORITM0 (DISEÑO DE ALGORITMO)
PROGRAMA FUENTE (PROGRAMACIÓN)
PROGRAMA OBJETO (TRADUCTOR)
PROGRAMA EN EJECUCION (PROCESADOR)
COMPILADOR
Software que traduce el código fuente, escrito en lenguaje de alto nivel a “Código de
máquina”. Solo se traduce, no se ejecuta.
DIAGRAMA DE FLUJO
Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan
mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados
como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos
a personas ajenas a la computación.
PSEUDOCODIGO
El pseudocódigo y los diagramas de flujo son las dos herramientas más utilizadas para
diseñar algoritmos en programación estructurada. Si bien, entre ambos tipos de
representación existen las siguientes diferencias importantes:
Símbolo Descripción
Indica el inicio y el final de nuestro
diagrama de flujo.
algoritmo Sumar
variables
entero a, b, c
inicio
escribir( "Introduzca el primer número (entero): " )
leer( a )
escribir( "Introduzca el segundo número (entero): " )
leer( b )
c=a+b
escribir( "La suma es: ", c )
fin
TIPOS DE DATOS
Los datos que utilizan los programas se pueden clasificar en base a diferentes criterios.
Uno de los más significativos es aquel que dice que todos los datos que utilizan los
programas son simples o compuestos.
Año...: 2006
Fecha:
Día...: 30
Mes...: 11
Año...: 2006
Letra...: t
Una letra se representa con un carácter del alfabeto. Pero, cuando varias letras se
agrupan, entonces se obtiene un dato compuesto por varios caracteres.
Entero
Real
Lógico
Carácter
Cadena
De ellos, tan solo el tipo cadena es compuesto. Los demás son los tipos de datos simples
considerados estándares. Esto quiere decir que la mayoría de los lenguajes de
programación permiten trabajar con ellos. Por ejemplo, en lenguaje C es posible utilizar
datos de tipo entero, real y carácter, sin embargo, los datos de tipo lógico no se pueden
utilizar, ya que, no existen en este lenguaje.
Existen otros tipos de datos, simples y compuestos, que se estudiarán más adelante.
A los tipos de datos simples estándares también se les conoce como tipos de datos
primitivos, básicos o fundamentales.
Un dato de tipo entero es aquel que puede tomar por valor un número perteneciente al
conjunto de los números enteros (Z), el cual está formado por los números naturales, su
opuestos (números negativos) y el cero.
Ejemplo 5: La edad de una persona y el año en que nació, son dos datos de tipo entero:
Edad...: 29
Año....: 1976
Z es un conjunto infinito de números enteros, y como el ordenador no puede
representarlos todos, un dato de tipo entero sólo puede tomar por valor un número
perteneciente a un subconjunto de Z. Los valores máximo y mínimo de dicho subconjunto
varían según las características de cada ordenador y del compilador que se utilice.
Un dato de tipo real es aquel que puede tomar por valor un número perteneciente al
conjunto de los números reales (R), el cual está formado por los números racionales e
irracionales.
Ejemplo 6: El peso de una persona (en kilogramos) y su altura (en centímetros), son
datos que pueden considerarse de tipo real.
Peso.....: 75,3
Altura...: 172,7
En pseudocódigo, para indicar que un dato es de tipo real se utiliza la palabra reservada:
REAL
En programación, un dato de tipo lógico es aquel que puede tomar por valor sólo uno de
los dos siguientes:
{ verdadero, falso }
Los valores verdadero y falso son contrapuestos, de manera que, un dato de tipo lógico
siempre está asociado a que algo se cumpla o no se cumpla.
Un dato de tipo carácter es aquel que puede tomar por valor un carácter perteneciente al
conjunto de los caracteres que puede representar el ordenador.
Ejemplo 8: En un examen con preguntas en las que hay que seleccionar la respuesta
correcta entre varias opciones dadas (a, b, c, d, e), la respuesta correcta de cada una de
las preguntas es un dato de tipo carácter.
Un dato de tipo cadena es aquel que pueden tomar por valor una secuencia de
caracteres.
Los tipos de datos simples predefinidos (estándares) son aquellos proporcionados por
los lenguajes de programación. Pero, el programador también puede definir sus propios
tipos de datos simples (subrangos y enumerados), los cuales se estudiarán más adelante.
Todos los datos simples son ordinales, excepto el dato de tipo real. Un dato ordinal es
aquel que puede tomar por valor un elemento perteneciente a un conjunto en el que todo
elemento tiene un predecesor y un sucesor, excepto el primero y el último. Por ejemplo, el
valor 5, perteneciente al conjunto de los números enteros, tiene como predecesor al 4, y
como sucesor al 6. Sin embargo, entre dos números reales siempre hay un número
infinito de números.
SOLUCION
Datos simples:
El número de botones de una camisa. (Por ejemplo: 8 > Dato numérico entero)
La altura de una torre. (Por ejemplo: 120,5 > Dato numérico real)
El número de pasajeros de un avión. (Por ejemplo: 227 > Dato numérico entero)
El resultado de hacer una apuesta (ganar o perder). (Dato lógico)
La letra 'b' escrita en mayúscula. ('B' > Dato de tipo carácter)
Datos compuestos:
Los datos de una cuenta bancaria. (Dato compuesto por: nombre, apellidos,
etc.)
La capital de Canadá. ("Ottawa" > Dato de tipo cadena)
EJERCICIOS
1. Trate de describir con precisión mediante frases sencillas, tareas cotidianas, como leer
un libro, realizar un viaje de placer por aire.
A = 'a'
>entero r = 50, s = 6, t
caracter vocal
t = r div s
s = r mod s
r = ONCE - t * s
vocal = A
¿qué valores se habrán almacenado en la memoria del ordenador para los objetos
declarados?
MEMORIA
A 'a'
ONCE 11
r -53
s 2
t 8
vocal 'a'
En pantalla:
variables
real altura, area, base
inicio
escribir( "Introduzca base: " )
leer( base )
escribir( "Introduzca altura: " )
leer( altura )
area = base * altura / 2
escribir( "El área del triángulo es: ", area )
fin
En pantalla:
algoritmo Division_entera
variables
entero dividendo, divisor, cociente, resto
inicio
escribir( "Introduzca dividendo (entero): " )
leer( dividendo )
escribir( "Introduzca divisor (entero): " )
leer( divisor )
cociente ← dividendo div divisor
resto = dividendo mod divisor
escribir( dividendo, " div ", divisor, " = ", cociente,
" ( Resto = ", resto, " )" )
fin
Identificadores
VARIABLE
Definición de constante
En un programa, el tipo de un dato determina las operaciones que se pueden realizar con
él. Por ejemplo, con los datos de tipo entero se pueden realizar operaciones aritméticas,
tales como la suma, la resta o la multiplicación.
Todas las operaciones del ejemplo constan de dos operandos (constantes enteras) y un
operador. La mayoría de las veces es así, pero, también es posible realizar operaciones
con distinto número de operadores y/u operandos.
Ejemplo 2: Por ejemplo:
En las operaciones del ejemplo se puede observar que los caracteres más (+) y menos (-)
tienen dos usos:
Los operadores de signo más (+) y menos (-) son operadores monarios, también
llamados unarios, ya que, actúan, solamente, sobre un operando.
Los caracteres abrir paréntesis "(" y cerrar paréntesis ")" se utilizan para establecer la
prioridad de los operadores, es decir, para establecer el orden en el que los operadores
actúan sobre los operandos.
Un operador indica el tipo de operación a realizar sobre los operandos (datos) que actúa.
Los operandos pueden ser:
PI = 3.141592
entero numero = 2
real radio_circulo = 3.2
2 * PI * radio_circulo
( PI * PI )
numero * 5
· Relacionales
· Lógicos
Un operador relacional se utiliza para comparar los valores de dos expresiones. Éstas
deben ser del mismo tipo (aritméticas, lógicas, de carácter o de cadena).
Ejemplo 10: En una expresión aritmética puede aparecer más de un operador aritmético.
3 ** 3 - 1 (dos operadores)
+3 * -8 (tres operadores)
Para poder evaluar correctamente las expresiones aritméticas del ejemplo, es necesario
seguir un criterio de prioridad de operadores. En nuestro pseudocódigo CEE, la prioridad
de los operadores aritméticos es:
Prioridad de los operadores relacionales y lógicos
En una expresión lógica puede aparecer uno o más operadores relacionales y/o lógicos.
no falso y falso
Para poder evaluar correctamente las expresiones lógicas del ejemplo, es necesario
seguir un criterio de prioridad de operadores. En nuestro pseudocódigo CEE, la prioridad
entre los operadores relacionales y lógicos es:
Expresiones de carácter
CONSONANTE = 'S'
caracter letra = 'X'
caracter opcion = '3'
Algunas expresiones de carácter son:
opcion
letra
CONSONANTE
'a'
'3'
'X'
'S'
'a'
Expresiones de cadena
OLIMPIADA + PUNTO
nombre + " " + apellido
"Buenos días" + PUNTO
rio
nombre + " fue a las Olimpiadas de " + OLIMPIADA + PUNTO
Los resultados de evaluarlas son:
"Atenas 2004."
"Pedro Cosín"
"Buenos días."
"Tajo"
"Pedro fue a las Olimpiadas de Atenas 2004."
En una expresión puede aparecer uno o más operadores aritméticos, relacionales, lógicos
y/o de cadena.
Cabecera
Declaraciones
Cuerpo
algoritmo <nombre_del_algoritmo>
[ constantes
<declaraciones_de_constantes> ]
[ tipos_de_datos
<declaraciones_de_tipos_de_datos> ]
[ variables
<declaraciones_de_variables> ]
inicio
<bloque_de_instrucciones>
fin
Condicional Doble
si ( <expresión_lógica> ) Entonces
<bloque_de_instrucciones_1>
sino
<bloque_de_instrucciones_2>
fin_si
Condicional Simple
si ( <expresión_lógica> ) Entonces
<bloque_de_instrucciones>
fin_si
Condicional Múltiple
segun_sea ( <expresión> )
<lista_de_valores_1> : <bloque_de_instrucciones_1>
<lista_de_valores_2> : <bloque_de_instrucciones_2>
...
<lista_de_valores_n> : <bloque_de_instrucciones_n>
[ sino : <bloque_de_instrucciones_n+1> ]
fin_segun_sea
algoritmo Dia_de_la_semana
variables
entero dia
inicio
escribir( "Introduzca día de la semana: " )
leer( dia )
segun_sea ( dia )
1 : escribir( "Lunes" )
2 : escribir( "Martes" )
3 : escribir( "Miércoles" )
4 : escribir( "Jueves" )
5 : escribir( "Viernes" )
6 : escribir( "Sábado" )
7 : escribir( "Domingo" )
sino : escribir( "ERROR: Día incorrecto." )
fin_segun_sea
fin
Repetitiva mientras
mientras ( <expresión_lógica> )
<bloque_de_instrucciones>
fin_mientras
algoritmo Numeros_del_1_al_10
variables
entero contador
inicio
contador = 1 /* Inicialización del contador */
mientras ( contador <= 10 ) /* Condición */
escribir( contador ) /* Salida */
contador = contador + 1 /* Incremento */
fin_mientras
fin
algoritmo Numeros_del_10_al_1
variables
entero contador
inicio
contador = 10 /* Cambio 1 */
mientras ( contador <= 10 ) /* Descuido */
escribir( contador )
contador = contador - 1 /* Cambio 3 */
fin_mientras
fin
algoritmo Numeros_del_10_al_1
variables
entero contador
inicio
contador = 1 /* Descuido */
mientras ( contador >= 1 ) /* Cambio 2 */
escribir( contador )
contador = contador - 1 /* Cambio 3 */
fin_mientras
fin
Ejemplo 4: También es un error muy típico olvidarse de escribir alguna instrucción, como
por ejemplo, la instrucción de asignación
contador = contador - 1
algoritmo Numeros_del_10_al_1
variables
entero contador
inicio
contador = 10 /* Cambio 1 */
mientras ( contador >= 1 ) /* Cambio 2 */
escribir( contador )
/* Descuido */
fin_mientras
fin
algoritmo Numeros_del_10_al_1
variables
entero contador
inicio
contador = 0 /* Descuido */
mientras ( contador >= 1 ) /* Cambio 2 */
escribir( contador )
contador = contador - 1 /* Cambio 3 */
fin_mientras
fin