Un algoritmo es una secuencia finita y precisa de pasos para resolver un problema.
Entonces, ¿qué es un problema?
Un problema es la necesidad de transformar un estado inicial en un estado final, respetando ciertas restricciones.
Los problemas involucran datos de entrada en el estado inical y la solución contiene datos de salida en el estado final. Además, probablemente involucre otros datos intermedios que son relevantes.
Para poder resolver un problema se debe comprenderlo bien, y ser capaces de formalizarlo de alguna manera. De lo contrario, corremos el riesgo de terminar resolviendo el problema equivocado.
En este proceso se debe definir el estado final al que se quiere llegar. Esto se logra pensando cómo se vería una solución.
En esta etapa es importante concentrarse en el qué y no en el cómo.
Volviendo a los algoritmos...
Un algoritmo es una secuencia finita y precisa de pasos para resolver un problema.
Una vez especificado el problema, hay que tratar de resoverlo pero ¿de qué manera se puede expresar la secuencia de instrucciones?
Determine si un número es primo o compuesto.
Definición: un número natural n
es primo si tiene solamente como divisores a 1 y a si mismo. En caso contrario es un número compuesto.
Buscar algún valor d
que esté entre 2
y n-1
que sea divisor de n
.
Si existe por lo menos uno de estos valores, entonces n
es compuesto; en caso contrario, es primo.
leer n
es_primo = verdadero
d = 2
mientras d sea menor que n:
si n es divisible por d:
es_primo = falso
d = d + 1
si es_primo es verdadero:
escribir "n es primo"
si no:
escribir "n es compuesto"
from IPython.display import HTML
HTML('<iframe src="https://trinket.io/embed/blocks/f1d62613e6?hideGeneratedCode=true" width="100%" height="500" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>')
Las instrucciones del algoritmo pueden expresarse:
Dos bloques de Trinket:
move
(mover)¶move forward
) o mover hacia atrás (move backward
).move forward
(mover hacia adelante)¶HTML('<iframe src="https://trinket.io/embed/blocks/b4a39cddbc?hideGeneratedCode=true" width="100%" height="270" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>')
move backward
(mover hacia atrás)¶HTML('<iframe src="https://trinket.io/embed/blocks/279df10e32?hideGeneratedCode=true" width="100%" height="270" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>')
turn
(girar)¶turn right by
) o en sentido horario. turn left by
) o en sentido anti-horario.turn right by
(girar hacia la derecha)¶HTML('<iframe src="https://trinket.io/embed/blocks/5cf7060afb?hideGeneratedCode=true" width="100%" height="270" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>')
turn left by
(girar hacia la izquierda)¶HTML('<iframe src="https://trinket.io/embed/blocks/e5b38d7418?hideGeneratedCode=true" width="100%" height="270" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>')
La idea de un leguaje de bloques es poder conectar los bloques para diseñar un algoritmo que resuelva un problema. ¿Qué ocurre en el siguiente ejemplo?
HTML('<iframe src="https://trinket.io/embed/blocks/d798803a77?hideGeneratedCode=true" width="100%" height="270" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>')
Diseñar un algoritmo que dibuje un cuadrado.
HTML('<iframe src="https://trinket.io/embed/blocks/9cf6545f91?hideGeneratedCode=true" width="100%" height="400" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>')
Diseñar un algoritmo que dibuje otra figura geométrica distinta al cuadrado.
HTML('<iframe src="https://trinket.io/embed/blocks/1a30d7cc2a?hideGeneratedCode=true" width="100%" height="400" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>')