Está en la página 1de 73

Algoritmos

Algoritmos
Grado en Business Analytics
ARQUITECTURA CONCEPTUAL DE UN ORDENADOR
Informática

Informática: INFORmación + autoMÁTICA (anglosajones,


Computer Science)

• Conjunto de conocimientos científico – técnicos orientados al


tratamiento automático de la información

• Surge de la necesidad de transmitir y tratar información de


forma automática, facilitando aquellos trabajos rutinarios o
repetitivos de cálculo o gestión donde es frecuente la
repetición de tareas
Ordenador

Ordenador o computadora:

Máquina capaz de aceptar unos datos de entrada,


efectuar con ellos operaciones lógicas y aritméticas y
proporcionar la información resultante a través de un
medio de salida; todo ello sin intervención humana y
bajo el control de un programa de instrucciones
previamente almacenado en la computadora
Ordenador

Memoria secundaria

Dispositivos de Dispositivos de
CPU
entrada salida

Memoria primaria
Ordenador

Memoria secundaria

Dispositivos de Dispositivos de
CPU
entrada • salida

Memoria primaria
Ordenador

Memoria
secundaria • Coordina y realiza todas las
operaciones
Dispositivos
CPU
Dispositivos • Desde la perspectiva del
de entrada de salida programador, bajando de nivel,
ejecuta las instrucciones en un
Memoria lenguaje denominado lenguaje
primaria máquina
Ordenador

Memoria Aithmetic Logic Unit: realiza


ALU
secundaria todas las operaciones aritméticas
(suma, resta, división, producto),
desplazamiento de bits y lógicas
(comparaciones)
Dispositivos Dispositivos
CPU
de entrada de salida

Control Unit: Interpreta las


Memoria
instrucciones y planifica la
primaria CU secuencia de ejecución,
sincronizando las operaciones
elementales

Nota: el procesador también contiene varios registros, celdas de memoria


donde almacena la información mientras realiza las operaciones
Ordenador

Memoria
• Almacena datos y programas en ejecución.
secundaria
• Volátil
• Más rápida
Dispositivos Dispositivos
CPU • Formada por celdas enumeradas (dirección
de entrada de salida
de memoria) y acceso directo mediante la
dirección
• Palabra de memoria: cantidad de
Memoria información en bits que puede leerse o
primaria escribirse en la memoria de una sola vez
Ordenador

Memoria estática
Memoria
secundaria
Memoria libre

Dispositivos Dispositivos
CPU
de entrada de salida

Memoria
primaria

Pila de ejecución
Ordenador

• La memoria estática contiene es memoria reservada


Memoria estática asignada cuando se ejecuta el programa
• En la memoria libre, se incluyen los datos que surgen
mientras se ejecutan el programa (por ejemplo, asignación
Memoria libre de variables)
• La pila de ejecución es un espacio de memoria que se
genera cuando un programa llama a un procedimiento.
• En la pila de ejecución se guarda un registro de activación
que contiene el espacio para las variables que ser
utilizadas, una copia de las variables (o una referencia a)
que los parámetros del procedimiento y referencias a
dónde continuar cuando termine el procedimiento
• La pila de ejecución y la memoria libre crecen una a costa
Pila de ejecución de la otra.
Ordenador

Memoria
• Dispositivos de almacenamiento masivo de
secundaria información
• Almacena datos o programas para su
Dispositivos Dispositivos posterior ejecución
CPU
de entrada de salida

Memoria • Memoria virtual: parte de memoria


primaria secundaria utilizada para expandir la memoria
principal.
• Permite ejecutar programas o acceder a información
cuyo tamaño excede la memoria principal
Ordenador

• Dispositivos de entrada (periféricos de


entrada): introducen y preparan (traducen a
Memoria
bits) información a la memoria principal para
secundaria
su utilización.

Dispositivos Dispositivos • Dispositivos de salida (periféricos de salida):


CPU
de entrada de salida recogen, traducen y proporcionan la
información al exterior

Memoria
primaria
• Controlador: procesadores especializados en
las operaciones de e/s
Ordenador

• Dispositivos de entrada (periféricos de


entrada): introducen y preparan (traducen a
Memoria
bits) información a la memoria principal para
secundaria
su utilización.

Dispositivos Dispositivos • Dispositivos de salida (periféricos de salida):


CPU
de entrada de salida recogen, traducen y proporcionan la
información al exterior

Memoria
primaria
• Controlador: procesadores especializados en
las operaciones de e/s
Algoritmos
Algoritmos
Grado en Business Analytics
NIVELES DE COMPUTACIÓN
Funcionamiento

Instrucción: conjunto de símbolos que representa una


operación para el ordenador
Cuando programéis, lo llamaréis sentencia

Por ejemplo:

A = 1
B=C
IMPRIME_PANTALLA (A)
Funcionamiento

Programa: conjunto ordenado de instrucciones que indican al


ordenador qué tareas realizar

Por ejemplo:

A, B = LEER_TECLADO()
IMPRIME_PANTALLA (A+B)
Funcionamiento

Un ordenador ejecuta programas. Para cada programa realiza


un ciclo de instrucción:

• CPU lee de memoria la instrucción


• CPU lee de memoria la información
• CPU realiza las operación indicada
• CPU ordena el almacenamiento el resultado
• CPU va a la siguiente instrucción
Niveles de computación
Lenguaje Máquina: lenguaje que ‘entiende’ el procesador de un
ordenador.
• No se utiliza para programar (representación binaria o
hexadecimal)
• Depende del modelo del procesador, y el repertorio de
instrucciones

4FX2 ~ 1110101010001 ….
Niveles de computación
Lenguaje Ensamblador: lenguaje en el que las instrucciones se
expresan con palabras cortas
• A cada instrucción de ensamblador, le corresponde una en
lenguaje máquina (1:1)
• La traducción lenguaje ensamblador a lenguaje máquina la
realiza un programa denominado ensamblador

add esp, 24h Lenguaje ENSAMBLADOR


Lenguaje Máquina
mov rax, esp ensamblador
Niveles de computación
Lenguaje de alto nivel: lenguaje independiente del ordenador

• Portables
• Fáciles de entender num = int(input('Enter a number'))
for i in range(0, 6):
• Instrucciones potentes if i == num:
• Orientados a la resolución de tareas. break
print(i, ' ', end='')
• Por ejemplo, Python print('Done')

COMPILADOR /
Lenguaje ALTO NIVEL Lenguaje Máquina
INTÉRPRETE
Niveles de computación: intérprete
Traducen el código del programa (fuente) al lenguaje máquina
(objeto)

Intérprete
Lenguaje ALTO NIVEL Lenguaje Máquina
Niveles de computación: intérprete
¿Cuál es la diferencia?
FICHERO
00010001001111111 OBJETO
num = int(input('Enter a number'))
11001111010101011
for i in range(0, 6):
COMPILADOR ...
if i == num:
break
print(i, ' ', end='')
110010101010111100
print('Done')

num = int(input('Enter a number')) INTÉRPRETE 00010001001111111


for i in range(0, 6):
if i == num: ... ...
break
print(i, ' ', end='')
print('Done') INTÉRPRETE 110010101010111100
INTRODUCCIÓN AL CONCEPTO DE ALGORITMO
Algoritmo

Un algoritmo es una secuencia ordenada


de pasos que, tras ejecutarlos, dan como
resultado una solución

La palabra algoritmo proviene del matemático y astrónomo


Dato curioso! →
árabe Al-Khôwarizmi (siglo IX).
Algoritmo

El objetivo de un algoritmo es automatizar una solución a un


problema con independencia de los valores de los datos que
necesite para resolverlo.
Algoritmo

Un algoritmo tiene las siguientes características:

1. Preciso: se especifica el orden de ejecución de cada paso.


2. Determinista: si se ejecuta el algoritmo varias veces con los mismos
datos de entrada, debe obtenerse siempre la misma salida.
3. Finito: el algoritmo tiene que terminar en algún momento.
Algoritmo

Cuando se plantea el diseño de un algoritmo es necesario analizar el


problema que pretendo resolver:

1. ¿Cuál es el problema?
2. ¿Qué necesito para resolver el problema (datos de entrada)?
3. ¿Cómo es una solución (datos de salida)?.
4. ¿Qué pasos necesito para resolver el problema? una primera
descripción de los pasos que son necesarios para resolver el problema
1.Se irá definiendo o mejorando iterativamente
5. Posteriormente, cuando el diseño esté finalizado, el algoritmo puede ser
implementado en un lenguaje de programación.
Algoritmo
Estas preguntas dan como resultado una estructura que debe
seguir un algoritmo:

1. ¿Cuál es el problema? 1. Nombre del algoritmo / Restricciones


2. ¿Qué necesito para resolver el problema 2. ENTRADAS
(datos de entrada)?
3. ¿Cómo es una solución (datos de salida)?. 3. SALIDAS
4. ¿Qué pasos necesito para resolver el
problema? una primera descripción de los 4. PROCESAMIENTO
pasos que son necesarios para resolver el
problema
Algoritmo

DEFINICIÓN DEL ALGORITMO: LLAMADA AL ALGORITMO:

ALGORITMO: CALCULAR_MAXIMO CALCULAR_MAXIMO(1,2): 2


ENTRADAS: A, B
SALIDA: MAXIMO CALCULAR_MAXIMO (2,8): 8
MAXIMO = A
SI A > B: CALCULAR_MAXIMO (8,1): 8
MAXIMO = A
SI NO:
MAXIMO = B
DEVOLVER MAXIMO
Algoritmo: implementación

Posteriormente, cuando el diseño esté finalizado, el algoritmo se expresa


en un lenguaje de programación. A esta fase se la denomina codificación
o implemenentación.

No obstante el desarrollo de un programa informático es un proceso


iterativo en el que puede ser necesario corregir errores o modificar las
restricciones de tu algoritmo.
REPRESENTACIÓN DE UN ALGORITMO
Representación

A la hora de representar un algoritmo, tenemos varias opciones.


Aquí se van a discutir las más relevantes:

1. Pseudocódigo
2. Diagramas de flujo
3. Codificación: (Final de la asignatura, Programación I)
Representación

A la hora de representar un algoritmo, tenemos varias opciones.


Aquí se van a discutir las más relevantes:

1. Pseudocódigo
2. Diagramas de flujo
3. Codificación: (Final de la asignatura, Programación I)
Representación

El pseudocódigo es un lenguaje a medida del programador que


utiliza para conceptualizar su algoritmo de forma independiente a
cualquier lenguaje de programación:

1. No existe una única forma de escribir pseudocódigo


2. Pero sí hay que seguir alguna convención
3. La traducción del pseudocódigo al lenguaje de programación
dará como resultado el programa
Representación

Convenciones:

1. Nombre de variables en minúsculas y significativas


2. Nombre de funciones o procedimientos con la primera letra
en mayúscula
3. Palabras reservadas: si, si no, para, mientras,en
rango, saltar, continuar, etc.
4. Separación de palabras con ‘_’
5. Un bloque de código es una colección de sentencias que
puede estar indentado si pertenece a un flujo de control
Representación

A la hora de representar un algoritmo, tenemos varias opciones.


Aquí se van a discutir las más relevantes:

1. Pseudocódigo
2. Diagramas de flujo
3. Codificación: (Final de la asignatura, Programación I)
Representación

Representación gráfica de la lógica de un algoritmo mediante


una colección de símbolos y flechas
Lectura de datos

Condición

Bloque de sentencias

Inicio o fin

Flujo de ejecución
Representación
Inicio

cont = 0
Este diagrama de flujo
representa un algoritmo que
tras inicializar el contador a 0, lo
va incrementando hasta que
sí alcanza el valor 5 para,
Escribir cont==5
posteriormente, escribir el valor
cont
de contador.
no

cont =
cont + 1
Representación
Inicio

cont = 0 Este diagrama de flujo es


incorrecto: está representando
un bucle infinito porque después
de actualizar el contador vuelve
a asignarle el valor 0.

cont==5 Además, sólo existe un camino


válido después de la evaluación
de la condición, y no se
especifica cual es (se cumple o
no la condición)
cont =
Escribir
cont + 1
cont
Algoritmos
Algoritmos
Grado en Business Analytics
ELEMENTOS PRESENTES EN UN ALGORITMO
En un algoritmo se van a dar los siguientes elementos:
1. Variables
2. Operadores
3. Instrucciones o sentencias
1. Instrucción básica
2. Flujos de control
3. Llamadas a procedimientos
En un algoritmo se van a dar los siguientes elementos:
1. Variables
2. Operadores
3. Instrucciones o sentencias
1. Instrucción básica
2. Flujos de control
3. Llamadas a procedimientos
Variables

Podemos pensar una variable como un espacio en memoria donde se va a


almacenar algo que necesito para resolver mi algoritmo.

A=1

NOMBRE = ‘PEDRO’

TIEMPO = 12.31

VARIABLE = DIRECCION_DE_VARIABLE_A
Variables

Podemos pensar una variable como un espacio en memoria donde se va a


almacenar algo que necesito para resolver mi algoritmo.

• Una variable tiene un nombre (que podemos A = 1


definir en mayúsculas o minúsculas), y tiene
asignado un tipo de dato, es decir, si la variable
va a manejar tipos enteros, flotantes (1,1) , de nombre = ‘PEDRO’
cadena de caracteres, booleanos, referencias o,
incluso, estructuras más complejas. Tiempo_transcurrido = 12.31

• Para el objeto de esta asignatura, no vamos a completado = Verdadero


definir de forma explícita el tipo de datos, pero sí
mantendremos el tipo asignado a una variable. puntero = DIRECCION_DE_VARIABLE_A

• Existe un valor que denominaremos None (o nulo) Variable = None


que representa el que la variable no tiene valor,
aunque ha sido declarada. Pasos = [1,2,3,4]
En un algoritmo se van a dar los siguientes elementos:
1. Variables
2. Operadores
3. Instrucciones o sentencias
1. Instrucción básica
2. Flujos de control
3. Llamadas a procedimientos
Las operaciones predefinidas para un algoritmo son las
siguientes:

Operador Representación Ejemplo


suma + a + b
resta - a - b
multiplicación * a * b
división / a / b
módulo % a % b
exponente ** a ** b
asignación = a = 2
Las operaciones predefinidas para un algoritmo son las
siguientes:

Operador Representación Ejemplo


mayor > a + b
menor < a - b
igual == a * b
mayorigual >= a / b
menorigual <= a % b
distinto != a != b
Las operaciones predefinidas para un algoritmo son las
siguientes:

Operador Representación Ejemplo


and & a & b
or | a | b
no not not a
En un algoritmo se van a dar los siguientes elementos:
1. Variables
2. Operadores
3. Instrucciones o sentencias
1. Instrucción básica
2. Flujos de control
3. Llamadas a procedimientos
En un algoritmo se van a dar los siguientes elementos:
1. Variables
2. Operadores
3. Instrucciones o sentencias
1. Instrucción básica
2. Flujos de control
3. Llamadas a procedimientos
Variables

Instrucción: conjunto de símbolos que representa una


operación para el ordenador
Cuando programéis, lo llamaréis sentencia

Por ejemplo:
A = 1
D = B*C
MAX(A)
IMPRIME_PANTALLA (A)
En un algoritmo se van a dar los siguientes elementos:
1. Variables
2. Operadores
3. Instrucciones o sentencias
1. Instrucción básica
2. Estructuras de control
3. Llamadas a procedimientos
Estructuras de control
Organizan la ejecución del código

Estructura Ejemplo Explicación


secuencia a = 2 Secuencia de
a = a*2 operaciones que se
ejecutan sucesivamente
bifurcación si a>2: El flujo de un
secuencia1 algoritmo sigue caminos
si no: diferentes según una
secuencia2 condición
iteración mientras a>3: Repite una secuencia
a = a - 1 mientras se de una
condición o se recorra
una estructura
Estructuras de control
Bifurcaciones:

Si <condicion>: Si a==3 & b == 2


hacer secuencia 1 imprimir_pantalla(‘combinación 1 válida)
Si no: ...
hacer secuencia 2 Si no:
imprimir_pantalla (‘Error, repita)
salir
Estructuras de control
Bifurcaciones anidadas:

Si <condicion>: Si a==3 & b == 2


hacer secuencia 1 imprimir_pantalla(‘combinación 1 válida)
Si no: ...
si <condicion2> Si no:
hacer secuencia 2 si a>5:
si no: salir
hacer secuencia 3 si no:
a = b
c = a
...
Estructuras de control
Evaluación de condiciones: ¿Cuál será el resultado?

a=3
b=4
c=2
Si a==3 or b == 2 and c==3
imprimir_pantalla('combinación 1 válida')
...
Si no:
si a>5:
salir
si no:
a = b
c = a
...
Estructuras de control
Evaluación de condiciones: ¿Cuál será el resultado?

imprimir_pantalla(‘combinación 1 válida’)
Estructuras de control
Evaluación de condiciones:

Consejo... Usar paréntesis siempre!


Si a==3 or (b == 2 and c==3)
Estructuras de control
Iteraciones: existen varias formas de realizar iteraciones

mientras <condicion>: contador = 0


hacer secuencia 1 mientras contador < 10:
contador = contador + 1
Estructuras de control
Iteraciones: existen varias formas de realizar iteraciones

para valor en rango (intervalo, salto):

hacer secuencia 1

contador = 0
para contador en rango ( ):
imprimir_pantalla(contador)
Estructuras de control
Iteraciones: existen varias formas de realizar iteraciones
Ejemplos

contador = 0 0
para contador en rango (0,4): 1
imprimir_pantalla(contador) 2
3

contador = 0 5
para contador en rango (5,0,-2): 3
imprimir_pantalla(contador) 1
FUNCIONES O PROCEDIMIENTOS
Procedimientos o funciones

Conforme la complejidad del algoritmo es mayor, se siguen procesos


descendentes donde se va añadiendo más complejidad o detalle a los
mismos. A esta aproximación se la denomina top-down.
Procedimientos o funciones

Podemos encapsular un algoritmo cuyo comportamiento siempre va a ser el mismo dentro


de una función a la que llamaremos dentro del algoritmo principal que estamos diseñando.

Por ejemplo: si estamos haciendo un algoritmo de recetas, habrá un comportamiento


(algoritmo) que siempre vamos a repetir, para cualquier receta. Nos puede interesar guardar
este comportamiento en un procedimiento. Imaginad que somos cocineros. El procedimiento
batir_huevos siempre va a ser igual: tendré una entrada que será un número
determinado de huevos, los romperé, los echaré en un bol, batiré y devolveré unos huevos
batidos. Ahora, este procedimiento llamado batir_huevos lo podré utilizar para hacer
tartas o para hacer una tortilla!

En pseudo_código lo llamaremos así:


def nombre_funcion(entrada1,... entradaN):
Hago cosas
devuelvo valor.
Procedimientos o funciones

Una de las características que debe tener la función es que sea lo más
independiente del programa posible.

Encapsular un comportamiento en una función tiene algunas ventajas,


como, por tanto:

1. Facilito la reutilización
2. Mejoro el mantenimiento posterior del programa y de la función
Procedimientos o funciones

1. Las funciones pueden llamar a otras funciones:

Def hacer_tortilla(patata, huevos):


batir_huevos(huevos)

2. Las funciones pueden … llamarse a sí mismas!; a estas funciones se las


denomina función recursiva.
Procedimientos o funciones

Una función recursiva debe tener una condución de terminación porque, en


caso contrario, la ejecución continuaría indefinidamente hasta que hubiese
un desbordamiento de la memoria.

Cuando se alcanza la condición de terminación, la función devuelve un


resultado y no vuelve a llamarse a sí misma.
Procedimientos o funciones

Def factorial (numero):

si es_entero(numero)==‘Falso’ o numero<=0:
devolver -1
si no:
si numero == 1:
devolver 1
si no:
devolver numero*factorial(numero – 1)
ARRAYS
TAD

TODO

También podría gustarte