Clase 4. Algoritmos y condicionales.

Dentro del panel Auxiliares se encuentran los algoritmos, ellos posibilitan incluir cálculos que son útiles en el diseño de escenas.

En esta clase desarrollaremos una escena sencilla, en la cual, usando algoritmos, se harán sumas, obtendremos el factorial de un número, y resolveremos ecuaciones de segundo grado con la fórmula general. A continuación se presenta la escena final.

Esta unidad interactiva requiere la máquina virtual de Java J2RE.

Desarrollo

  1. Crea una nueva página con el nombre de algoritmos.html, agrega una escena de tipo Descartes 4.

    Personaliza la escena cambiando el color de fondo, desactivando los ejes, etcétera.

  2. Es importante entender cómo funcionan los algoritmos en general y cuál es su estructura lógica, para cumplir este objetivo te guiaremos paso a paso, no desesperes.

    Iniciaremos explicando cómo funciona el ciclo o bucle Do - While (Hacer - Mientras), este tipo de bucles se utilizan generalmente cuando no sabemos cuantas veces se habrá de ejecutar, sin embargo es seguro que el bucle por lo menos se ejecute una vez, la sintaxis es la siguiente:

    Do { Instrucciones o sentencias
    }
    While (condición)

    Las instrucciones o sentencias se ejecutan y al final se realiza la evaluación de la condición, en caso de que no se cumpla se vuelven a ejecutar las instrucciones y se realiza nuevamente la evaluación, si la condición es verdadera se termina la ejecución.

    Otro tipo de ciclo que se utiliza en programación es el For, generalmente se utiliza cuando conoces el número máximo de iteraciones (repetición de los pasos cierto número de veces). Dentro del ciclo For, se tiene una variable de control i la cual hay que inicializarla, una condición que es falsa hasta que se complete el ciclo y un contador o incremento en una unidad de la variable de control; por ejemplo si colocamos que i<10, entonces el ciclo se va a ejecutar de 0a 9, siempre y cuando el valor inicial de la variable de control sea cero y su incremento en 1.

    Generalmente se usan estos ciclos para recorrer vectores.

    Observa con atención el siguiente video en el que se explica el uso de los algoritmos y su estructura en Descartes.

    Panel Auxiliares: Algoritmos.

  3. ¡Excelente! Ahora construyamos un algoritmo que calcule la suma de los primeros 100 números naturales. Para entender cómo vamos a programarlo recordemos lo que es un sumatorio.

    Un sumatorio es un operador matemático que permite representar sumas muy grandes y se simboliza con la letra griega sigma (Σ). Después del sumatorio, por lo general aparece una variable con un subíndice representado con la letra i, dicho subíndice indica qué valores de la variable se suman y se le conoce como índice de suma.

    A la variable i se le asigna un valor inicial, en el caso de la imagen superior, está se encuentra denotado por la letra m; i recorre los valores enteros hasta alcanzar un límite superior n, y necesariamente tiene que cumplirse que el límite inferior sea menor o igual al límite superior (m<=n).

    La suma de los cien primeros números naturales puede expresarse con el sumatorio siguiente:

    Analizando el sumatorio, el límite inferior es de uno (m=1) y el superior de 100 (n=100).

    Agrega un algoritmo y llámalo sumatoria; recuerda que los algoritmos se encuentran en el panel Auxiliares.

    Como habrás observado en el video, los algoritmos en Descartes constan de tres partes: inicio, hacer y mientras.

    En inicio se escriben las condiciones iniciales, colocaremos el valor del límite inferior (m) y del límite superior (n) separados por un punto y coma (;), además inicializaremos el índice de la sumatoria (i) con el valor del límite inferior (m). En evaluar elige la opción una-sola-vez

    En hacer colocaremos todas las instrucciones que tengan que ejecutarse, añadiremos una variable que guarde en cada paso el resultado de la suma, llamaremos a esta variable s y tendrá que ser igual al valor de i más el valor de s; en cada paso el índice del sumatorio tiene que incrementarse en una unidad y este incremento tiene que realizarse mientras el valor del índice sea menor o igual al límite superior.

    Agrega un texto donde se imprima el resultado de la suma.

    Cambia la evaluación del algoritmo a siempre ¿qué sucede?, inicializa la variable s en cero y deja que el algoritmo se evalúe siempre, aplica los cambios y observa lo que sucede ahora.

    Cuando el algoritmo tiene evaluación una-sola-vez, sólo se cumple el ciclo la primera ocasión, por ello no cambian los valores, se podría decir que los algoritmos que se evalúan una-sola-vez sirven para inicializar vectores, se ejecutan cuando se inicia la escena, sin embargo al evaluarlo en siempre y no inicializar la variable donde se guarda el resultado del sumatorio, éste va acumulándose, porque el ciclo se repite cada vez que das un clic sobre la escena, y siempre se calcula.

    Un algoritmo que se evalúe siempre, se usa sobre variables que se tengan que actualizar con alguna interacción, se ejecutan cada que hay un cambio en un control.

    En la siguiente tabla se muestran los cálculos que se realizan en cada paso dentro del ciclo:

    paso i s=s+i condición
    1 1 0+1=11 1<=100
    2 2 1+2=3 2<=100
    3 3 3+3=6 3<=100
    10 10 10+45=55 10<=100
    100 100 100+4950=5050 100<=100

    El resultado de sumar los primeros cien números naturales es 5050.

  4. Ahora, vamos a construir un algoritmo que calcule el factorial de cualquier número; los factoriales se usan generalmente en combinatoria, intervienen en el cálculo de probabilidades, etc.

    El factorial de un número es la multiplicación de los números que van del uno hasta dicho número, su notación es n!

    Agreguemos un pulsador N con valor inicial e incremento de 1, N será el número entero positivo del cual obtendremos el factorial. En un algoritmo inicializa dos variable una _n=1 , que será nuestro índice, y otra, llamada f donde guardaremos el resultado del factorial; en valor inicial coloca uno ya que el factorial de cero es uno (0! = 1).

    La variable f será igual a ella misma multiplicada por _n, en cada paso _n tendrá que incrementarse en uno y esto se realizará hasta que _n sea menor o igual al número del cual queremos obtener el factorial, que, en este caso, esta dado por el pulsador N.

    Por ejemplo, si quisiéramos obtener el factorial del número 2 (N=2), en el primer paso f= 1*1 =1 y _n= 1+1 = 2, como uno es menor que dos, se realiza otra iteración. En el segundo paso f= 1*2 =2 y _n= 2+1 =3, como no se cumple la condición se termina; así 2! = 2.

    En un texto imprime al factorial del número que tiene asignado el pulsador N.

    ¿Cómo se tiene que evaluar el algoritmo, siempre o una-sola-vez?

  5. En ésta última parte resolveremos una ecuación cuadrática por medio de la fórmula general.

    Donde el valor de a es el coeficiente del término cuadrático, b el coeficiente de la variable y c el término independiente.

    Una ecuación cuadrática tiene dos soluciones, cuando el discriminante de la ecuación (D = b2 - 4ac), es mayor a 0, se tienen dos raíces reales distintas, cuando es igual a 0 se tienen dos raíces reales iguales y cuando es menor no existen raíces reales.

    Agrega tres pulsadores, uno para el valor de a, otro para b y uno para variar el valor de c, cuyos valores iniciales sean enteros y el incremento de uno. Agrega en un texto la ecuación cuadrática donde se varíen los coeficientes y el término independiente, de acuerdo al valor de los pulsadores.

    Vamos a resolver dicha ecuación por medio de una función a la que le asignaremos los tres parámetros.

    Agrega la función, llámala _eqSeg, escribe dentro de los paréntesis (_ParamA,_ParamB,_ParamC).

    Como vamos a realizar varias operaciones activemos la casilla algoritmo; como podrás observar se activan inicio, hacer y mientras.

    En hacer, crea una variable donde guarde el valor del discriminante de la ecuación, para elevar al cuadrado un número puedes usar la función de Descartes sqr.

    En otra variable guarda la raíz del discriminante. Utiliza una variable para guardar el valor de -b y una última para el valor de dos veces el parámetro a; recuerda que estamos usando como variables _ParamA,_ParamB y _ParamC.

    En una variable llamada _xMas, guarda el valor de la primera solución sumando el -b con la raíz del discriminante, y en _xMen la resta, y así obtenemos las soluciones de nuestra ecuación.

    Para que la función se ejecute, hay que llamarla en un algoritmo y asignarle los valores de los pulsadores, como los valores cambian dicho algoritmo tendrá que evaluarse siempre.

    Agrega un algoritmo y llámalo Calculos, en una variable auxiliar llama a la función _eqSeg(a,b,c).

    Agrega en un texto, la fórmula general, en otro la sustitución y en un tercero las dos soluciones de la ecuación.

    Si observas bien, el discriminante de la ecuación es negativo, por lo tanto no existen soluciones reales, hay que indicarle a Descartes que cuando el discriminante sea menor a cero No hay solución, para ello haremos uso de condicionales.

    Observa con atención el siguiente video en el que se explican las condicionales.

    Condicionales.

    La estructura de una condicional en Descartes funciona igual a un if - else:

    La sintaxis es:

    if (condición) {
          instrucción
    } else {instrucción}
    else if

    En Descartes se escribe de la siguiente forma: (D=0)?1:0

    Donde la condición es que D sea igual a cero, el signo de interrogación funciona como un entonces y los dos puntos como un sino. La traducción de la instrucción anterior es: si D=0 entonces 1 sino 0.

    Lo primero que tenemos que hacer en el algoritmo Calculos es calcular el discriminante de la ecuación, agrega una variable llamada _sinRaices, que, cuando el discriminante sea menor que cero, tome el valor de uno; agrega otra variable llamada _dosRaices, que tome el valor de uno cuando el discriminante sea mayor o igual a cero. En una variable auxiliar llama a la función _eqSeg(a,b,c) sólo si _dosRaices es igual a 1.

    Cuando _sinRaices sea verdadero (tome el valor de uno), no hay solución ya que el valor del discriminante es negativo y no hay raíz cuadrada de un número negativo, por lo tanto en lugar de escribir un valor, tenemos que mostrar que No hay solución; para agregar una cadena en Descartes se escribe entre comillas sencillas (''). En caso contrario (que _sinRaices tome el valor de 0) lo que tenemos que mostrar es el valor de _xMas.

    _xMen tomará el valor de _xMas cuando _sinRaices sea verdadero (ya que no hay solución), en caso contrario, tomara el valor _xMen, que es el que se calcula en la función _eqSeg(a,b,c).

    Varía los valores de a, b y c, de manera que pruebes que, cuando el discriminante sea negativo, se muestre tanto para x1 y x2 que No hay solución, cuando el discriminante sea igual a cero que las dos soluciones son la misma, y que, cuando sea mayor, se muestren las dos soluciones.

En resumen

En la clase has aprendido a utilizar algoritmos, a emplear funciones como algoritmos, y realizar así cálculos más complejos que sin duda alguna te facilitarán realizar las lecciones interactivas de diversos temas, como resolver ecuaciones o calcular integrales definidas.

Evidencia de Aprendizaje

Desarrolla una escena donde se tenga una serie de datos, y se calcule la media aritmética.

Esta unidad interactiva requiere la máquina virtual de Java J2RE.


Para practicar

Mira cómo están elaboradas las siguientes escenas y trata de reproducirlas.