Algoritmos
Algoritmos
Algoritmos
Introducción
Análisis del problema. Verificación.
Diseño del algoritmo. Depuración.
Codificación. Mantenimiento.
Compilación y ejecución. Documentación.
Diseño. Una vez analizado el problema, se diseña una solución (algoritmo) que resuelva el
problema.
Mantenimiento. El programa se actualiza y modifica, cada vez que sea necesario, de modo
que se cumplan todas las necesidades de cambio de sus usuarios.
Documentación. Escritura de las diferentes fases del ciclo de vida del software,
esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de
referencia, así como normas para el mantenimiento.
Estas fases son esenciales para el proceso de programación y solución de problemas. La
parte fundamental es el diseño del algoritmo.
La palabra algoritmo se deriva de la traducción al latín de la palabra Alkhô-warîzmi2,
nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación
de números y ecuaciones en el siglo IX.
1. Características de un algoritmo
Un algoritmo debe ser preciso: tiene que indicar el orden de realización de cada paso.
Un algoritmo debe ser legible: El texto que lo describe debe ser claro, tal que
permita entenderlo y leerlo fácilmente.
2. Partes de un algoritmo
Donde:
Entrada Es la información dada al algoritmo o los valores con los que se va a trabajar para
ofrecer los resultados esperados.
Proceso Son los cálculos o pasos necesarios para que a partir de un dato de entrada se
pueda llegar a un resultado de solución del problema o la situación planteada
Salida Son los resultados finales o la transformación de la entrada a través del proceso.
4. Pseudocódigo
5. Prueba de escritorio
6. Estructura de un algoritmo
8. Identificadores
9. Constantes y Variables
Estructuras de Control
EJ
Ejemplo:
En un estacionamiento cobran Bs. 3.50 por hora o fracción. Diseñar un algoritmo que
determine cuanto debe pagar un cliente por el estacionamiento de su vehículo, conociendo
el tiempo de estacionamiento en horas y minutos.
Solución:
1. Análisis del problema
Definir el problema
Nombre del problema: pago estacionamiento
Delimitación: determinar cuanto debe pagar un cliente por el estacionamiento de su
vehículo conociendo el tiempo de estacionamiento en horas y minutos.
Resultado deseado: costo por el estacionamiento de un vehículo.
Datos de entrada
Formulas necesarias
Datos de salida
pago: pago por el estacionamiento de un vehículo (Real)
Algoritmo pago
Var hora, min : Entero
pago: Real
Inicio
Leer hora
Leer min
si min > 0 entonces
hora ← hora + 1
fin _si
pago ← hora*3,5
Imprimir ( "el pago del estacionamiento es :" & pago)
Fin// algoritmo
3.Prueba de escritorio
mi
instrucciones hora min > 0 pago pantalla
n
Leer hora 10
Leer min 5
hora ← hora + 1 11
Imprimir ( "el pago del estacionamiento es :" & el pago del estacionamiento es:
pago) 38.5
Ejemplo:
Solución:
Definir el problema
Datos de entrada
N : numero (Entero)
Formulas necesarias
si el (numero Mod 2 = 0) y (numero > 0 )entonces numero es par y positivo
Datos de salida
Algoritmo par_positivo
Var N : Entero
Inicio
Leer N
si (N Mod 2 = 0) And (N > 0) entonces
Imprimir ( N & "es par positivo" )
sino
Imprimir (N & "No es par positivo" )
fin _si
Fin// algoritmo
3.Prueba de escritorio
(N Mod 2 =
instrucciones N N > 0 pantalla
N. 0)
1 Leer N 10
2 Leer N 5
Ejemplo:
Solución:
Algoritmo numero
Var N : Entero
Inicio
Leer N
sino
sino
fin _si
fin _si
Fin// algoritmo
Solución:
Definir el problema
Datos de entrada
N : numero (Entero)
Formulas necesarias
si el (numero > 0 )entonces numero positivo
Datos de salida
mensaje que indique que el numero es positivo, negativo o neutro
Algoritmo numero
Var N : Entero
Inicio
Leer N
si N > 0 entonces
Imprimir ( N & "es numero positivo" )
sino
si N < 0 entonces
Imprimir ( N & "es numero negativo" )
sino
Imprimir (N & "es numero neutro" )
fin _si
fin _si
Fin// algoritmo
3.Prueba de escritorio
instrucciones
N N > 0 N<0 N=0 pantalla
N.
Leer N
1 10
si (N < 0)
2 Leer N -5
Un acumulador es una variable que se utiliza para sumar valores. Al igual que el contador,
se utiliza normalmente dentro de un ciclo pero cambiamos su valor sumándole una variable,
es decir, no siempre se le suma la misma cantidad.
Diseñar un algoritmo en pseudocódigo, que permita mostrar los dígitos de un numero entero
positivo leído desde teclado.
Solución:
1. Análisis del problema
Definir el problema
Datos de entrada
N : numero (Entero)
Formulas necesarias
Datos de salida
d: digito de un numero entero (entero)
Algoritmo digitos
Var N, d : Entero
Inicio
Leer N
si N > 0 entonces
imprimir ("el numero " & n & " tiene los dígitos: " )
mientras N > 0
d ← N Mod 10
imprimir (d)
N ← N Div 10
fin_mientras
sino
imprimir (" solo números positivos" )
fin _si
imprimir ("fin del algoritmo ")
Fin// algoritmo
3.Prueba de escritorio
N. instrucciones N N > 0 d pantalla
1 Leer N 50
verdader
si N >0 entonces
o
imprimir ("el numero " & n & " tiene los dígitos: " ) el numero 50 tiene los dígitos:
verdader
N > 0
o
d ← N Mod 10 0
imprimir (d) 0
N ← N Div 10 5
verdader
N > 0
o
d ← N Mod 10 5
imprimir (d) 5
N ← N Div 10 0
N > 0 falso
Número primo: todo número natural mayor que 1 que cumple que sus únicos divisores son el 1
y el propio número. Ejemplos: 2, 3, 5,…
Número compuesto: todo número natural mayor que 1 que no es primo. Ejemplos: 4, 6, 10, …
Solución:
1. Análisis del problema
Definir el problema
Datos de entrada
N : numero (Entero)
Datos auxiliares:
Formulas necesarias
Datos de salida
mensaje si el numero es primo o compuesto
Algoritmo primo
Var N, i, cd : Entero
Inicio
Leer N
cd ← 0
para i ← 1 , i ≤ N , i ← i + 1
fin_si
fin_para
si cd = 2
sino
fin_si
sino
fin _si
Fin// algoritmo
3.Prueba de escritorio
N N Mod i =
instrucciones N > 1 cd i i<=N cd = 2 pantalla
. N 0
1 Leer N 3
si N >1 entonces
verdadero
cd ← 0 0
i ← 1
1
verdader
i < = N
o
si N Mod i = 0 verdadero
cd ← cd +1 1
i ← i + 1 2
N N Mod i =
instrucciones N > 1 cd i i<=N cd = 2 pantalla
. N 0
i < = N verdadero
i ← i + 1
3
verdader
i < = N
o
cd ← cd +1 2
i ← i + 1
4
i < = N falso
verdader
si cd = 2 entonces
o
3 es numero
imprimir (N & " es numero primo")
primo
Subprogramas
Un subprograma, sin embargo, se utiliza por el programa para un propósito específico. El subprograma
recibe datos desde el programa y le devuelve resultados. Haciendo un símil con una oficina, el problema
es como el jefe que da instrucciones a sus subordinados —subprogramas—; cuando la tarea se termina,
el subordinado devuelve sus resultados al jefe. Se dice que el programa principal llama o invoca al
subprograma. El subprograma ejecuta una tarea, a continuación devuelve el control al programa. Esto
puede suceder en diferentes lugares del programa. Cada vez que el subprograma es
llamado, el control retorna al lugar desde donde fue hecha la llamada (ver gráfico adjunto).
Un subprograma puede llamar a su vez a sus propios subprogramas.
11. Funciones
Las funciones son diseñadas para realizar tareas específicas: toman una lista de valores —
llamados argumentos— y devolver siempre un único valor.
entero funcion LeerNumero ( )
var N : entero
inicio
leer N
mientras N ≤ 0
imprimir (“ingrese numero entero positivo
")
leer N
fin-mientras
devolver (N )
fin _funcion
booleano funcion primo (n: entero)
var i, cd: entero
res: booleano
inicio
cd ← 0
para i ← 1, i ≤ n, i ← i + 1
si n Mod i =
0 entonces
cd ← cd + 1
fin_si
fin_para
si cd = 2 entonces
res ← verdadero
sino
res ← falso
fin_si
devolver (res)
fin-funcion
Un procedimiento es un subprograma que ejecuta un proceso específico, como ser: calculo
de varios resultados en vez de uno solo, o que realice la ordenación de una serie de
números, etc.
procedimiento sigprimo (n: entero)
var m: entero
Inicio
m←n
n←n+1
mientras ( primo (n) = falso )
n←n+1
fin_mientras
imprimir (“el siguiente primo de “& m " es “ &
n)
fin-procedimiento
procedimiento dígitos (n : entero )
var d : entero
inicio
mientras n > 0 entonces
d ← n Mod 10
imprimir ("digito“ &
d)
n ← n Div 10
fin_mientras
fin-procedimiento
12. Ejemplo de subprogramas
Problema
Diseñar un algoritmo, utilizando la técnica divide y vencerás, que permita leer un numero entero
positivo. Verificar si el número es primo, si fuese así encontrar el siguiente numero primo. Caso
contrario mostrar los dígitos que tiene dicho número.
Ejemplos
N Subproblema Subprograma (Solución)
Función LeerNumero() que devolverá un numero
1 leer un numero entero positivo.
entero positivo leído desde teclado.
Función primo(N) devolverá verdadero si el númer
2 Verificar si número es primo
primo, caso contrario falso.
Procedimiento sigprimo(N) encontrara y mostrara e
3 Encontrar el siguiente número primo
siguiente número primo de N.
Procedimiento digitos(N) mostrara los dígitos del
4 mostrar los dígitos que tiene dicho numero
numero N.
Siguiente página
Solución
Programa principal
algoritmo ejemplo
var N : entero
Inicio
N ← LeerNumero( )
si primo (N) = verdadero entonces
Llamar_ a sigprimo (N)
sino
Llamar_ a digitos (N)
fin _si
Fin// Algoritmo
Subprogramas
entero funcion LeerNumero ( )
var N : entero
inicio
leer N
mientras N ≤ 0
imprimir (“ingrese numero entero positivo
")
leer N
fin-mientras
devolver (N )
fin _funcion
booleano funcion primo (n: entero)
var i, cd: entero
res: booleano
inicio
cd ← 0
para i ← 1, i ≤ n, i ← i + 1
si n Mod i =
0 entonces
cd ← cd + 1
fin_si
fin_para
si cd = 2 entonces
res ← verdadero
sino
res ← falso
fin_si
devolver (res)
fin_funcion
procedimiento sigprimo (n: entero)
var m: entero
Inicio
m←n
n←n+1
mientras ( primo (n) = falso )
n←n+1
fin_mientras
imprimir (“el siguiente primo de “& m " es “ &
n)
fin-procedimiento
procedimiento dígitos (n : entero )
var d : entero
inicio
mientras n > 0 entonces
d ← n Mod 10
imprimir ("digito“ &
d)
n ← n Div 10
fin_mientras
fin_procedimiento
• variables locales;
• variables globales
Variables Locales
Una variable local es aquella que está declarada y definida dentro de un subprograma, en el
sentido de que está
dentro de ese subprograma y es distinta de las variables con el mismo nombre declaradas
en cualquier parte del
programa principal.
Variables Globales
Una variable global es aquella que está declarada para el programa o algoritmo principal,
del que dependen todos
los subprogramas.
N Subproblema Subprograma (Solución)
Función LeerNumero() que devolverá un numero
1 leer un numero entero positivo.
entero positivo leído desde teclado.
Procedimiento Multiplicacion(M,N) calcular y
3 mostrar la multiplicación de los dos números mostrará la multiplicación de los números a través de
sumas sucesivas.
EJEMPLO 2
Algoritmo ejemplo
Var N, M: entero
Inicio
N ←LeerNumero()
M ←LeerNumero()
mientras N=M
N ←LeerNumero() // caso que N y M son iguales
fin_mientras
si N>M entonces
Llamar a CocRes(N, M)
sino
Llamar a multiplicacion(M,N)
fin_si
fin//algoritmo
Suprogramas:
entero funcion LeerNumero ( )
var N : entero
inicio
leer N
mientras N <= 0
imprimir (“ingrese numero entero positivo ")
leer N
fin-mientras
devolver (N )
fin _funcion