    Curso de Scripvox - aula6 (Por Fabiano Ferreira)

    Nesta aula, vamos falar de execusso condicional.
    Conforme comentamos na aula anterior, o que comearemos a ver a
partir de agora, ir transformar radicalmente, nossa maneira de pensar
sobre um problema e escrev-lo em scripvox.
    O que vamos ver aqui, e nas outras aulas, nos dar um 'poder' muito
maior do que j ganhamos at a aula 5, para escrever scripts.

    Se voc achou o scripvox uma linguagem fcil e poderosa, s com as
cinco primeiras aulas, vai ter essa confirmao a partir desta aula.
E tenha certeza: com criatividade, fora de vontade e pacincia, voc
vai muito longe com o scripvox, e ainda mais, sua vontade de aprender
outras linguagens de programao, infinitamente mais poderosas que
scripvox ser grande.
    Sendo assim, vamos ao que interessa!

*****

    Execusso condicional
    Chamamos de execusso condicional o ato de executar uma rotina
mediante a uma condisso ser falsa ou verdadeira.
    Vamos imaginar a seguinte situao:
Em um determinado programa, ao pressionarmos a tecla esc,  perguntado
se desejamos realmente sair da aplicao.
Devemos responder sim, apertando a tecla s, ou no, apertando a tecla n.

Caso o usurio responda 's', o programa permanece aberto, mas se
responder 'n', o programa se fecha.
    O caso acima ilustra a verificao de uma condisso para a execusso
de uma rotina.
    Nesse exemplo, a condisso  a resposta do usurio.
    O programa vai verificar qual foi a resposta dada.
Se foi 's', o programa deve continuar, se for n, deve enserrar.

Agora que temos uma idia de como funciona a execusso condicional,
vamos ver como faz-la no scripvox.

1 - Forma simples:
A forma simples de execusso condicional no scripvox  a seguinte:
Se, um espao,  comparao, um espao e o comando.
    'Se', indica uma execusso condicional.
Comparao indica qual a condisso deve ser satisfeita, e comando indica
qual comando deve ser executado se a condisso for satisfeita.
    Para fazermos a comparao, necessitamos dos comparadores.
No scripvox, os comparadores vlidos so:
= - sinal de igual: verifica se x  igual a y, no fazendo distino
entre strings maisculas e minsculas.
== - igual igual: verifica se x  igual a y, fazendo distino entre
strings maisculas e minsculas.
> - maior: verifica se x  maior que y.
< - Menor: verifica se x  menor que y.
>= - maior ou igual: verifica se x  maior ou igual a y.
<= - menor ou igual: verifica se x  menor ou igual a y.
<> - diferente: verifica se x  diferente de y.

    =* -  comeada por: verifica se x  comeado por y.
*= -  terminada por: verifica se x  terminado por y.
*=* - existe como subcadeia em: verifica se x existe como subcadeia em
y.

Vejamos um exemplo prtico:

*Exemplo de execusso condicional simples;
*Por Fabiano Ferreira;
*Em agosto de 2011;

Escreve "Digite seu nome:"
L n
seja t tamanho n
Se t>7 escreve "Nossa, voc tem um nome muito grande!"
Termina mudo

O exemplo acima solicita ao usurio que digite seu nome.
Em seguida,  utilizado a funo tamanho para obter o comprimento do
nome do usurio.
Abaixo,  verificado se o tamanho do nome do usurio  maior do que 7.
Caso a condisso seja verdadeira, o programa exibe a mensagem 'Nossa, seu nome  muito
grande!
Caso a condisso seja falsa, o programa pula essa linha e passa para a
prxima instruo, que no caso do nosso exemplo  termina mudo.

2 - Forma composta:
A forma composta de execusso condicional no scripvox  a seguinte:
se comparao
comando1
comando2
comando3
...
comando x
seno
se comparao2:
comando1
comando2
comando3
..
comando x
seno
comparao x
comando 1
...
comando x
fim se

Vamos a um exemplo prtico:

*Exemplo de execusso de condicional composta;
*Por Fabiano Ferreira;
*Em agosto de 2011;

Escreve "Digite sua idade:"
Le i
se i<13
Escreve " uma criana."
seno
se i<20
Escreve "j  adolescente."
seno
Escreve "J  adulto!"
Fim se

    No exemplo acima, pedimos ao usurio que entre com sua idade.
Vamos supor que a idade digitada foi 18.
Abaixo, iniciamos um bloco de execusso condicional.
A primeira condisso a verificar foi se a idade passada pelo usurio era
menor que 13.
Caso a condisso seja verdadeira, o programa escreve a mensagem " uma
criana."
Se a condisso for falsa, o interpretador pula para verificar a prxima
condisso que vem aps o seno.
No nosso caso, a primeira verificao vai dar falso.
Ento o programa vai verificar a prxima condisso.
No caso do nosso exemplo, ser verificado se a idade digitada  menor
que 20.
Caso seja verdade, o programa exibe a mensagem "J  adolescente."
Caso seja falso, o programa pula para verificar a prxima condisso aps
o seno.
No nosso caso, o resultado da verificao ser verdadeiro.
A mensagem "J  adolescente" ser ento exibida.
Tendo sido satisfeita a condisso, o programa sai do bloco, no
verificando as prximas condisses, passando a executar a instruo
imediatamente aps a linha onde termina o bloco.
O bloco de condisses termina com o comando Fim se

Copie e execute esse exemplo.
Faa algumas experincias com alguns valores.

Vejamos mais um exemplo:

*Outro exemplo de execusso condicional;
*Por Fabiano Ferreira;
*Em agosto de 2011;

Escreve "Digite sua idade:"
L i
Se i>50
Escreve "Fale um pouco de como voc se sente aps os 40:"
le r
Fim se
Termina mudo.

    O exemplo acima pede que o usurio digite sua idade.
    Se a idade for maior que 50,  exibido uma string, pedindo que o
usurio fale um pouco de sua vida aps os 40.
O usurio ento ter a oportunidade de digitar algo que ser armazenado
numa varivel.
Se a condisso for falsa, ou seja, se a idade no for maior que 50, o
programa pula esse bloco e vai para a instruo aps o fim do bloco.
No nosso caso  o termina mudo, mas poderia ser qualquer outra.

    *Limitaes do scripvox nos testes condicionais:

    No scripvox, no  permitido blocos aninhados, como em outras
linguagens.
Para ilustrar, vamos ver um exemplo de cdigo invlido no scripvox.

Escreve "Digite um nmero:"
L n
Se n>60
Escreve "Digite sua idade"
L i
Se i>n
Escreve "Sua idade  maior que o nmero que voc digitou."
seno
Escreve "Sua idade  menor que o nmero que voc digitou."
Fim se
seno
Escreve "voc ainda no chegou aos 60."
Fim se

Embora o interpretador no acuse erro de execusso, o programa acima no
vai fazer o que se pretende.
Execute-o e voc ver o resultado.

    Ainda que no seja possvel utilizar bloco dengtro de bloco, 
possvel utilizar uma condicional simples dentro de uma composta, como
se v no exemplo abaixo:

*Exemplo de condio simples dentro de uma composta;
*Por Fabiano Ferreira;
*Em agosto de 2011;

Escreve "Digite uma frase."
L f
Seja t tamanho f
Se t>100
Escreve "Essa frase  bastante grande. Voc leu em algum lugar?
L r &
se r="s" Escreve "que bom, continue lendo e descobrindo novas frases."
se r="n" "ento voc  um bom escritor, parabns!."
Fim se

O exemplo acima pede que o usurio digite uma frase, guardando-a na
varivel f.
Em seguida, usamos a funo tamanho  para descobrir o tamanho de f e
guardamos o valor na varivel t.
Abaixo  verificado se o tamanho de f ultrapassa a 100.
Se for verdade,  perguntado ao usurio se ele leu essa frase em algum
lugar.
A resposta  guardada na varivel r.
Se for 's',  exibido uma mensagem do tipo "continue lendo e descobrindo
mais frases', mas se for n,  exibido uma mensagem do tipo 'parabns,
voc  um bom escritor."
Em seguida, o bloco composto  fechado e o programa executa a prxima
instruo inicial que nesse caso  o termina mudo.

    *Operador no;
    Podemos usar o operador no, na verificao da condisso.
Veja o exemplo:

*Exemplo de uso do operador no;
*Por Fabiano Ferreira;
*Em

Escreve "Digite um nmero de 0 a 5:"
L n
Se no n<5 Escreve "O nmero
digitado est fora do limite estabelecido."
Termina mudo

O Exemplo acima pede que o usurio digite um nmero de 0 a 5.
Aps ler o nmero,  verificado se o nmero digitado est no limite
entre 0 e 5.
A condicional 'Se no n<5', pode ser interpretada como 'se n for maior
que 5'.

Se a condisso for verdade,  escrito a mensagem "o nmero digitado 
maior que o limite estabelecido."
Caso contrrio, o programa ignora essa linha e passa para a prxima
instruo que seria o termina mudo.

Assim fechamos a nossa aula 6.

Exerccios:

1 - Faa um programa que pea para o usurio digitar sua idade.
O programa deve verificar se a idade digitada  maior que 18.
Se for verdade, deve escrever uma mensagem do tipo "Parabns, voc j 
maior de idade."
Caso contrrio, escrever uma mensagem do tipo "Voc ainda no  maior de idade."

2 - Faa um programa que permita que o usurio digite dois valores.
O programa deve efetuar a soma dos valores digitados e, se o resultado
da soma for maior que 100, escrever uma mensagem do tipo "Conseguiu mais de 100 pontos!"

*Enviar as respostas das questes at o dia 28/08 para o seguinte email:
qst-scripvox@sanfersite.com.br

Boa sorte!
