Sunteți pe pagina 1din 18

Algoritmo obvio a posteriori: Instrucciones para subir una escalera1

[...] Las escaleras se suben de frente, pues hacia atrs o de costado resultan particularmente incmodas. La actitud natural consiste en mantenerse de pie, los brazos colgando sin esfuerzo, la cabeza erguida aunque no tanto que los ojos dejen de ver los peldaos inmediatamente superiores al que se pisa, y respirando lenta y regularmente. Para subir una escalera se comienza por levantar esa parte del cuerpo situada a la derecha abajo, envuelta casi siempre en cuero o gamuza, y que salvo excepciones cabe exactamente en el escaln. Puesta en el primer peldao dicha parte, que para abreviar llamaremos pie, se recoge la parte equivalente de la izquierda (tambin llamada pie, pero que no ha de confundirse con el pie antes citado), y llevndola a la altura del pie, se le hace seguir hasta colocarla en el segundo peldao, con lo cual en ste descansar el pie, y en el primero descansar el pie. (Los primeros peldaos son siempre los ms difciles, hasta adquirir la coordinacin necesaria. La coincidencia de nombre entre el pie y el pie hace difcil la explicacin. Cudese especialmente de no levantar al mismo tiempo el pie y el pie). Llegando en esta forma al segundo peldao, basta repetir alternadamente los movimientos hasta encontrarse con el final de la escalera. Se sale de ella fcilmente, con un ligero golpe de taln que la fija en su sitio, del que no se mover hasta el momento del descenso

Algoritmo de andar por casa: Tortilla de patatas a la espaola (6 personas)2


Ingredientes: 2 vasos (de los de agua) de aceite (1/2 litro) sal 8 huevos 1 kg de patatas Se lavan las patatas una vez peladas, y se secan con un pao; se parten en dos a lo largo y despus se cortan en lminas finitas. Se pone el aceite en la sartn a calentar y se fren las patatas, movindolas de vez en cuando y echndoles un poco de sal. Una vez fritas (ms o menos doradas, segn gusten), se separan y se ponen a escurrir en un colador grande. Se quita el aceite sobrante de la sartn. Aparte se baten los huevos con tenedor y muy fuerte; se pone un poco de sal; en el mismo plato de los huevos se echan las patatas y se mueven con un tenedor. En una sartn grande (o en dos pequeas) se ponen 3 cucharadas soperas de aceite para que slo cubra el fondo. Cuando est caliente se vierte la mezcla de huevos y patatas. Se mueve la sartn por el mango para que no se pegue la tortilla. Cuando se vea que est bien despegada y dorada (esto depende del gusto de cada cual), se pone una tapadera encima, se vuelca la sartn y se escurre suavemente la tortilla otra vez en la sartn. Se vuelve a mover por el mango y cuando est cuajada (a gusto) se pasa a una fuente redonda y se sirve.

1 2

Julio Cortzar (Historias de Cronopios y de Famas). Simone Ortega (1080 recetas de cocina).

Algoritmo infantil: Multiplicacin de nmeros enteros


Para obtener el producto de dos nmeros enteros utilizando lpiz y papel se debe escribir el primer factor (multiplicando) y, justo debajo y alineado a la derecha, el segundo factor (multiplicador). Se recorren todas las cifras del multiplicador de derecha a izquierda y se operan con cada una de las cifras el multiplicando, tambin de derecha a izquierda, escribiendo los resultados intermedios en lneas separadas; cada lnea estar desplazada una posicin a la izquierda respecto a la lnea inmediatamente superior. Una vez se han obtenido todos los resultados intermedios se suman columna a columna obtenindose el resultado final.

Algoritmo clsico: Algoritmo de Euclides3


A C H F

Sean AB y CD dos nmeros cualesquiera no primos entre s. Es preciso hallar la comn divisor) de AB y CD. medida comn mxima (mximo

Si CD mide (divide) a AB, como se mide tambin a s mismo, entonces CD es medida comn de CD y AB. Y est claro que tambin es la mxima, pues ninguna mayor que CD medir a CD. Sin embargo, si CD no mide a AB, entonces, restndose sucesivamente el menor de los AB y CD del mayor, quedar un nmero que medir al anterior. No quedar una unidad: porque en otro caso AB y CD seran primos entre s [VII, 1], lo que contradice la hiptesis de partida.

As pues, quedar un nmero que medir al anterior. Ahora bien, CD, al medir a BE, deja EA menor que l mismo, y EA, al medir a DZ, deje ZC menor que l mismo, y medir CZ a AE. As pues, como CZ mide a AE, y AE mide a DZ, entonces CZ medir tambin a DZ; pero se mide tambin a s mismo; entonces medir tambin al total CD. Como CD mide a BE entonces CZ mide a BE; y mide tambin a EA; por tanto medir tambin al total BA; al medir tambin a CD; entonces CZ mide a AB y CD. Por tanto, CZ es medida comn a AB y CD. Tambin en esta ocasin es la mxima. Pues, si CZ no es la medida comn mxima de AB y CD, un nmero que sea mayor que CZ medir a los nmeros AB, GD. Supongamos que existe y se denomina H. Si H mide a CD y CD mide a BE, entonces H mide tambin a BE; pero tambin mide al total BA; entonces medir tambin al resto AE. Pero AE mide a DZ; por tanto, H medir a DZ y mide tambin al total DC; luego medir tambin al resto CZ, esto es: el mayor al menor, lo cual es imposible; as pues, no medir a los nmeros AB y CD un nmero que sea mayor que CZ. Por consiguiente, CZ es la medida comn mxima de AB y CD.A partir de esto queda claro que, si un nmero mide a dos nmeros, medir tambin a su medida comn mxima.

Euclides (Proposicin II. Libro VII. Elementos).

Algortmica y Lenguajes de Programacin


Algoritmos y notacin algortmica

Algoritmos. Introduccin
n

Objetivo asignatura:
n n

Conocimientos para disear algoritmos. Lenguajes programacin. NO programar ordenadores


Falta de experiencia: NO ES PROBLEMA. Experiencia: ventaja PARCIAL.

Algoritmos. Aproximacin intuitiva


n

Ejemplos de algoritmos:
n

Obvio a posteriori: instrucciones para subir una escalera (Julio Cortazar). De andar por casa: receta de la tortilla de patatas. Infantil: multiplicacin de nmeros enteros con lpiz y papel. Clsico: mtodo de Euclides para hallar el M.C.D. de dos nmeros.
3

Algoritmos. Aproximacin intuitiva


n

Un algoritmo:
n n

n n

Resuelve un problema especfico. Es ejecutado por una entidad en un entorno dado. Consta de una serie de pasos que deben llevarse a cabo siguiendo una secuencia marcada. Se aplica de forma mecnica. Termina en un tiempo finito.
4

Algoritmos. Definicin
ALGORITMO ES...
Un algoritmo es una secuencia de pasos que es llevada a cabo de forma mecnica y sistemtica por un actor que se desenvuelve en un entorno dado para resolver un problema determinado en un tiempo finito.

OTRA DEFINICIN...
Un algoritmo es una combinacin de instrucciones combinadas de forma adecuada para resolver un determinado problema en una cantidad finita de tiempo. Cada instruccin es una indicacin sencilla y no ambigua.

Algoritmos. Etimologa
n

El trmino ALGORITMO deriva del nombbre de Mahommed ibn Musa al-Khowrizm (matemtico S.IX) Introdujo el sistema de numeracin actual (hind) y el lgebra. Describi las reglas de las operaciones aritmticas que se denominaron reglas de alKhowrizm y deformaron en algoritmos.
6

Algoritmos. Mquinas algortmicas


n n

Ordenadores actuales aproximadamente medio siglo. Antecedentes histricos:


n n n n

3000 AC: baco. 1274: Ramn Llull, dispositivos demostraciones lgicas. 1500: Leonardo DaVinci, mquinas de calcular mecnicas. 1624: Schickard desarroll una calculadora con 4 operaciones bsicas. 1671: Leibniz construy una calculadora con las 4 operaciones ms la raz cuadrada. 1830: Babbage diseo una computadora programable impulsada a vapor. Su colaboradora, Ada Lovelace, escribi programas para la mquina.

Posteriormente: tarjetas perforadas, electricidad, lmparas, transistores y chips...

Algoritmos. Elementos algoritmos


n

Procesador: entiende los pasos del algoritmo y los lleva a cabo.


n n

Cocinero. Computador. Huevos, patatas, cebolla... Datos. Cascar, batir, pelar, freir... Sumar, restar, comparar, asignar...

Entorno: materiales para la ejecucin del algoritmo.


n n

Accin: actos del procesador sobre el entorno.


n n

Algoritmos. Descripcin algoritmos


n

Algoritmos resuelven problemas interesante compartir algoritmos. Formas de describir los algoritmos:
n n n n

Lenguaje natural. Organigramas. Pseudocdigo. Lenguajes de programacin.


9

Algoritmos. Descripcin algoritmos


n

Lenguaje natural (ejemplo):


1. 2. 3.

4.

5.

Definir los coeficientes de la ecuacin de segundo grado: a, b y c. Determinar el valor del discriminante: b2-4ac. Si el discriminante es cero slo hay una solucin: -b/(2a). Si el discriminante es positivo pero no cero hay dos soluciones: (-bdiscr)/(2a). Si el discriminante es negativo no hay soluciones reales.
10

Algoritmos. Descripcin algoritmos


n

Lenguaje natural:
n n

Ventaja: sencillez Problemas:


n n n

No es universal (mltiples idiomas). Es ambiguo y susceptible de errores. Es demasiado amplio (una instruccin es sencilla para unas personas y compleja para otras).

11

Algoritmos. Descripcin algoritmos


n

Organigramas (ejemplo)
n

COMENZAR

ESCRIBIR Deme los coeficientes y resolver una ecuacin de 2 grado

Ventajas:
n n n n

Smbolos universales. Menos ambiguos. Pocos smbolos bien delimitados. Ms cercanos al ordenador. Smbolos no intuitivos. Texto sigue siendo lenguaje natural. Representacin tediosa (y confusa). Intiles para el ordenador.

ESCRIBIR Cunto vale A?

LEER a

ESCRIBIR Cunto vale B?

LEER b

Inconvenientes:
n n n n

ESCRIBIR Cunto vale C?

LEER c

discr b2-4ac

SI discr = 0

s -b/(2a)

ESCRIBIR Slo hay una solucin, s

NO

SI discr > 0

s1 ( - b+ d i s c r ) / ( 2 a ) s2 ( - b- discr)/(2a)

ESCRIBIR Lassolucionesson, s1, s2

NO

ESCRIBIR No hay soluciones reales

F I N

12

Algoritmos. Descripcin algoritmos


n

Pseudocdigo (ejemplo):
escribir Deme los coeficientes y resolver una ecuacin de 2 g escribir Cunto vale A? leer a escribir Cunto vale B? leer b escribir Cunto vale C? leer c discr b2-4ac si discr=0 entonces s -b/(2a) escribir Slo hay una solucin:, s si no si discr>0 entonces s1 (-b+discr)/(2a) s2 (-b-discr)/(2a) escribir Las soluciones son:, s1, s2 si no escribir No hay soluciones reales. fin_si fin_si

13

Algoritmos. Descripcin algoritmos


n

Pseudocdigo:
n n n

Es fcilmente comprensible. Est bien delimitado. Elimina las ambigedades del lenguaje natural. Es compacto.

14

Algoritmos. Descripcin algoritmos


n

Lenguajes de programacin (ejemplo):


program segundoGrado print *, 'Deme los coeficientes y resolver una ecuacin de 2 grado' print *, 'Cunto vale A?' read *, a print *, 'Cunto vale B?' read *, b print *, 'Cunto vale C?' read *, c discr = b*b-4*a*c if (discr==0) then s = - b/(2*a) print *, 'Slo hay una solucin: ', s else if (discr>0) then s1 = (-b +sqrt (discr))/(2*a) s2 = (-b -sqrt (discr))/(2*a) print *, 'Las soluciones son: ',s1,s2 else print *, 'No hay soluciones reales' end if end if end

15

Algoritmos. Descripcin algoritmos


n

Lenguajes de programacin:
n n

n n

Estn bien delimitados. Eliminan las ambigedades del lenguaje natural. Son compactos. Comprensibles por un ordenador y por una persona.

16

Algoritmos. Desarrollo/Implementacin
n

El paso problema programa NO es inmediato. Fases:


n

Anlisis: se estudia el problema, NO la forma de resolverlo. Diseo:


n n n

Diseo descendente. Dividir el problema en subproblemas ms sencillos. Varios niveles de abstraccin.

17

Algoritmos. Desarrollo/Implementacin
Ejemplo. Anlisis y diseo
Enunciado: Proporcionar un algoritmo que determine si un ao indicado por el usuario es bisiesto. Entrada: Proceso: Salida: El usuario debera introducir un ao, un ao es un nmero entero positivo. Un ao es bisiesto si es mltiplo de 4 pero no de 100, la excepcin son los aos mltiplos de 400. Hay dos posibles salidas: El ao es bisiesto y El ao no es bisiesto.

Condiciones de error: Si el dato introducido no es vlido (nmero negativo o cero) debera indicarse: Dato no vlido. Nivel 1 Nivel 2 Determinar si un ao indicado por el usuario es o no un ao bisiesto. 2.1. Solicitar un ao al usuario. 2.2. Determinar si el ao es bisiesto o no. 2.3. Indicar al usuario el resultado obtenido. 2.1.1. Dar un mensaje al usuario solicitando un ao. 2.1.2. Leer el ao. 2.1.3. Si el ao no es vlido indicrselo al usuario. 2.2.1. Si el ao no es mltiplo de 4 no es bisiesto. 2.2.2. Si el ao es mltiplo de 4 pero no de 100 es bisiesto. 2.2.3. Si el ao es mltiplo de 400 es bisiesto. 2.3.1. Si el ao es bisiesto dar el mensaje El ao es bisiesto. 2.3.2. Si el ao no es bisiesto dar el mensaje El ao no es bisiesto.

Nivel 3

18

Algoritmos. Desarrollo/Implementacin
n

Ejemplo. Descomposicin de problemas

19

Algoritmos. Desarrollo/Implementacin
n

Ejemplo. Pseudocdigo para subproblemas


Problema Determinar si un ao indicado por el usuario es o no un ao bisiesto. Pseudocdigo del algoritmo que lo resuelve Determinar si el ao es bisiesto o no Indicar al usuario el resultado obtenido escribir Por favor, deme un ao 0 entonces escribir El ao no es vlido si no determinar si el ao es bisiesto o no indicar al usuario el resultado obtenido fin_si si el ao es mltiplo de 4 entonces si el ao es mltiplo de 400 entonces BISIESTO si si no si el ao es mltiplo de 100 entonces BISIESTO no si no BISIESTO si fin_si fin_si si no BISIESTO no fin_si si BISIESTO = si entonces escribir El ao es bisiesto si no escribir El ao no es bisiesto fin_si Solicitar un ao al usuario

Determinar si el ao es bisiesto o no

Indicar al usuario el resultado obtenido

20

10

Algoritmos. Desarrollo/Implementacin
n

Ejemplo. Pseudocdigo definitivo


escribir Por favor, deme un ao leer AO si AO 0 entonces escribir El ao no es vlido si no si el ao es mltiplo de 4 entonces si el ao es mltiplo de 400 entonces BISIESTO si si no si el ao es mltiplo de 100 entonces BISIESTO no si no BISIESTO si fin_si fin_si si no BISIESTO no fin_si si BISIESTO = si entonces escribir El ao es bisiesto si no escribir El ao no es bisiesto fin_si fin_si

21

Algoritmos. Desarrollo/Implementacin
n

Ejemplo. Cdigo resultante

program anno_bisiesto integer anno logical bisiesto print *,'Por favor, deme un ao' read *,anno if (anno<=0) then print *,'El ao no es vlido' else if (mod(anno,4)==0) then if ((mod(anno,400))==0) then bisiesto=.true. else if ((mod(anno,100))==0) then bisiesto=.false. else bisiesto=.true. end if end if end if if (bisiesto) then print *,'El ao es bisiesto' else print *,'El ao no es bisiesto' end if end if end

22

11

Algoritmos. Conceptos fundamentales


n n n n n n n n

Accin. Indicador (variable). Informacin. Estado. Datos/Resultados. Lxico. Tipo de datos. Operador.
23

Algoritmos. Introduccin notacin


n

Variables:
n n

n n n

Nombres formados por caracteres alfanumricos. Excluyendo (..., ..., , y espacio en blanco). No empiezan por nmero. No sensibles a maysculas. Ejemplos vlidos: v, aceleracion, K, v1, b_n, Pot, ... Ejemplos no vlidos: 1n, ao , p v , aceleracin , ...
24

12

Algoritmos. Introduccin notacin


n

Tipos de datos:
n

entero:
n n

Subconjunto (rango) de Z. Operaciones: suma(+), resta(-), producto(*), divisin entera(div) y resto(mod). Subconjunto (rango) de R. Operaciones: suma(+), resta(-), producto(*), divisin(/), raz cuadrada, logaritmos, exponenciacin, potenciacin y trigonomtricas. Dos valores: verdadero y falso . Operaciones lgica booleana: and/ , or / y not /. Conjunto de caracteres imprimibles (letras, nmeros y smbolos de puntuacin). Subconjuntos de letras y nmeros ordenados. Operaciones: concatenacin de cadenas (+). 25

real:
n n

logico:
n n

caracter :
n

n n

Algoritmos. Introduccin notacin


n

Comparacin:
n n

Admitidas por todos los tipos. Mayor(> ), menor(< ), mayor o igual( ), menor o igual( ), igual(= ) y distinto( ). El resultado de estas operaciones es de tipo logico. El operador se emplea de la forma izquierda derecha El elemento de la izquierda es una variable y el de la derecha una expresin cuyo valor es almacenado en dicha variable. Los tipos de ambos elementos deben ser compatibles.

Asignacin:
n

26

13

Algoritmos. Introduccin notacin


n

Literales:
n n n n

Expresin de valor constante de cualquier tipo. Literales de tipo entero : 45, 0, -17, ... Literales de tipo real: 3.1415 , -5.24e10, ... Literales de tipo caracter : E, algo de texto, ... Identificador que referencia un literal. Forma de definir una constante: constante literal
27

Constantes:
n n

Algoritmos. Introduccin notacin


n

Expresiones: combinacin de variables, constantes y literales de tipos compatibles mediante operadores.


n

Expresiones aritmticas: 2 * pi * r V * t Expresiones lgicas: (a > 5) and (a < 10) Expresiones de tipo caracter : Sub + cadena
28

14

Algoritmos. Introduccin notacin


n

Entrada/salida:
n n n

Permite interaccin con usuario. Dos operaciones: leer y escribir. Forma de uso:
n n

leer variable escribir expresin

La primera lee un valor por teclado y lo almacena en la variable y la segunda muestra el valor de la expresin por pantalla.

29

Algoritmos. Introduccin notacin


n

Estructura bsica de un algoritmo en esta notacin:


constantes c1 literal1 c2 literal2 ... variables v1 tipo1 v2 tipo2 ... inicio accion1 accion2 ... fin 30

15

Algoritmos. Introduccin notacin


n

Ejemplo: algoritmo que lee una longitud expresada en cm por teclado y la convierte a pulgadas.
cm_inch 0.39

constantes

variables longitud_cm real longitud_inch real inicio leer longitud_cm longitud_inch longitud_cm * cm_inch escribir longitud_inch fin 31

Algoritmos. Resumen
n n n

n n

Algoritmo = secuencia de pasos ejecutada mecnica y sistemticamente por un actor en un entorno para resolver un problema determinado en un tiempo finito. Los algoritmos son tan antiguos como la humanidad. El trmino algoritmo deriva del nombre del matemtico Mahommed ibn Musa al-Khowrizm. Los ordenadores son mquinas que ejecutan algoritmos. Los 3 elementos fundamentales en un algoritmo son:
n n n

Procesador Entorno Accin Lenguaje natural Organigramas Pseudocdigo Lenguajes de programacin Anlisis del problema Diseo descendente del algoritmo (descomponiendo el problema en subproblemas ). 32

Un algoritmo puede describirse mediante:


n n n n

Para implementar un programa que resuelva un problema hay que realizar:


n n

16

S-ar putea să vă placă și