Tema 3. Variables e operadores





Peregrinación

Se o tema anterior era unha transición, este será unha peregrinación, na que aprenderemos uns conpceptos que precisamos para avanzar e sen os cales no poderiamos facer grandes cousas nos futuros temas. E por eso estudaremos parialmente dous novos bloques de operacións que nos serán de utilidade.

Eses marabillosos espazos de memoria

Dentro de programas ou "tipo de programas", iremos sobre o bloque de "Datos y bloques".
Sección de "datos y bloques"

Para seguir deixando cousas a medias, desta sección imos a traballar con datos (de aquí para adiante nos chamarémoslle variables), os bloques deixarémolos para bastante máis adiante.

Pero qué é unha variable? Unha variable non e máis que unha posición de memoria (unha caixiña como lle digo eu aos meus alumnos) que ten un nome e que pode conter algún tipo de dato (números, datas, caracteres...)

Co mBlock podemos xerar dun xeito rápido unha variable premendo en crear nova variable, tras cubrir o nome da varaible (ímoslle permitir a visibilidade a todos os obxetos do proxecto) prememos en ok. Ollo, tenta de poñer nomes a esas "caixiñas" ou variables que describan que e o que van a gardar, neste caso imos gardar uns valores de velocidade.

Fiestra emerxente que solicita o nome da variable e a súa visibilidade dentro do programa
Sección de "datos y bloques" tras crear unha variable.

Unha vez que temos a variable creada, aparécennos 5 opcións sobre a mesma, unha en formato "redondo" que ao igual que os sensores/encoders, permite recoller un valor, no caso da variable, o valor que ten a mesma (o número que hai dentro da caixiña).

Bloque para asignar o valor da variable velocidade

As outras ordes son para actualizar o valor da mesma ou ben para amosala ou ocultala, de momento as que imos usar xunto co a anterior, serán a de "fijar" e "cambiar" xa que as outras dúas non funcionan con robots (serían para traballar directamente co monitor do ordenador). A primeira permitirá asignarlle un valor determinado á variable e a de cambiar permitiranos actualizalo.

Bloques de xestión de valores da variable
Vale, teño unha caixiña na que podo meter números, pero para que serve? Pois de momento e mentras non leamos valores de sensores, nin realicemos operacións, nin usemos estruturas de control... pois igual non de moito, pero eso non nos librará de realizar un exemplo e un par de retos asociados.

Seguro que te sona o bloque de mover o robot a unha velocidade, esa velocidade ven predefinida nunha caixa de selección (e decir, podes escoller 255, 100, 50...). Ainda que tamén se lle pode dar valor "a pelo"

Bloque de "correr adelante" co valor de velocidade despregado
Bloque de "correr adelante" con valor introducido dende teclado

Ese mesmo valor se lle pode dar mediante unha variable deste xeito

Bloque de "correr adelante" xestionado polo valor dunha variable


Seguro que estás pensando "bueno, vale, consigo facer o de antes pero cunha sentenza máis..", a potencia das variables poderemos velas despois ao combinalas con estruturas de control, pero aínda así podemos refacer uns retos e comprobaremos que ten as súas ventaxas (neste punto pido perdón aos programadores puros xa que estamos ausar as variables como constantes, pero para o exemplo vale...):

Por exemplo no seguinte programa temos 3 variables (vermello, verde e azul) que son as que lle dan os valores ós leds.

Adaptación do programa do reto 1.1 no que se poñen todos os leds pares en cor azul e os impares en vermello.
A primeira vista non resulta moi eficiente, pero tan só a primeira vista, esto trátase dun pequeno baile e iremos bailando lentamente co fin de realizar o reto 1.1 de maneira óptima. Podemos ver que no primeiro paso asignamos á caixiña "vermello" o valor 0, e a caixiña "verde" o valor da de vermello (e decir un 0). Por último azul toma o valor 255 (Lembra que podes consultar a entrada de Xogando coas luces neste mesmo blogue, de momento quedamos en que o 255 e o valor máis alto de azul).
Os distintos leds encéndense cos valores que teñen as caixiñas variables, o que fai que un cambio nas mesmas automáticamente muda a cor da luz de cada led.

No medio do código veremos que vermello toma o valor 255 (tomando o valor de azul) e o azul pasa a valer 0.


Reto 3.1

Operadores

Si, claro, teño uns valores en caixiñas, pero igual era interesante o poder sumalos, restalos, dividilos,, comparalos, traballar con conxunto de caracteres.. e para todo eso están os operadores, benvidos a unha clase de matemáticas de primaria ;)

Para estudar este apartado de operadores, teremos que ir o bloque de operacións de operadores, que e o seguinte:

Bloque de operadores do mBlock

Operadores que devolven un valor numérico

Podemos ver que os operadores están agrupados segundo a función (bueno, mais ou menos), os catro primeiros seguro que os sabedes recoñecer á primeira, e son os aritméticos, nos que ben podemos operar con variables, números, sensores ou enconders. (habería que meter dentro do círculo redondo un bloque que sexa redondeado). O seguinte operador sería o de número aleatorio, que permite xerar un valor entre dous indicados.

A continuación temos uns exemplos de uso de operadores e variables.

Exemplos de uso de operadores e variables

No primeiro conxunto de bloques vemos que lle asignamos á variable azul o valor que tiña máis 5.

Na segunda non temos unha orde final propiamente dita (fíxate que acabamos obtendo un valor xa que o bloque que engloba todo é redondeado nas beiras). O que obteríamos sería o valor resultante de restarte un número ao azar entre 1 e 10 ao valor que devolve o sensor de temperatura que ten a placa.

Na terceira podemos ver o resultado de sumarlle a 5 o valor da variable azul, e todo eso dividilo entre o valor que devolve o valor de sonido.

Por último estamos a apagar ao azar un dos leds do anel de leds.

Agora imos a empezar a traballar un pouco..

Reto 3.2
Reto 3.3
Reto 3.4
Seguindo cos operadores que devolven un valor numérico, imos a saltar deica os últimos da lista, polo tanto arestora imos a practicar cos seguintes:

Resto de operadores que devolven valor
Os primeiros 5 traballan con cadeas de texto (palabras), básicamente servirán para unir caracteres, averiguar a posición dun determinado caracter dentro dun conxunto deles, o número de caracteres que ten unha frase ou palabra....

De tólolos xeitos estes operadores non son nada útiles co kit que veu co robot, xa que non temos forma de amosar caracteres por ningunha pantalla ou de reproducilos en formato audio. Lémbrovos que sí que se lle pode mercar ao robot unha pantalla de leds que si permitirá amosar texto por ela, pero non e o caso do kit que arestora temos nos centros.

Os tres últimos serán o de operacíón de módulo (mod) que permitirá saber o valor do resto dunha división (moi útil para divisións enteiras ou averiguar se un número e múltiplo doutro), por outro lado temos a opción de redondear un número no que queda o valor númerico no número enteiro máis próximo.

O derradeiro permitiranos realizar unha operación máis complexa sobre o número que lle pasemos, podemos ver a continuación as operacións que poderemos realizar.

Operacións que pode realizar este operador

Operadores que devolven valor positivo ou negativo

Outro tipo de operadores son os de compraración e os lóxicos, que devolven un valor positivo ou negativo tras realizar unha operación, como se pode observar o formato do bloque remata cun vértice en cada un dos laterais (ao igual que os sensores/encoders que tiñan ese mesmo formato).

Operadores de comparación e lóxicos

Ao igual que os operadores aritméticos, pódense aniñar e formar grupos de bloques máis complexos.
Conxunto de bloques de operadores de comparación e lóxicos
Polo de agora estes operadores non os imos a introducir en ninguna estrutura de programación xa que en principio non sabemos que facer con valores "verdadeiro" ou "falso". Eso tocará no vindeiro tema...