    Curso de scripvox - aula3 (Por Fabiano Ferreira)

    Nesta aula, vamos ver comandos para trabalhar com variveis e
funes modificadoras do comando seja.

    A partir de agora nossos scripts vo ficar mais interessantes,
fazendo um pouco mais do que gravar valores em variveis e exib-los na
tela.

    Muita ateno, galera.
Ns vamos comear a 'apertar os sintos' e depois da aula 4, ns vamos
voar alto.
Ento... se h dvidas nas aulas 1 e 2, a hora  agora.
Releiam, tirem dvidas na lista, por que seno, podero se perder mais
adiante.
    Ento  isso, vamos comear!

Concatenao

Concatenar,  o mesmo que unir, juntar.
Podemos, no scripvox, utilizar o comando concatena para unir duas ou
mais variveis, como se pode observar no cdigo abaixo:

Seja a "1"
seja b "2"
Seja c "3"

Concatena a b
Concatena a c

Escreve a

Abra seu editor de textos.
Copie o cdigo acima, salvando com o nome de
exemplo3.cmd

Vamos analisar este script:

Linha 1: atribumos o valor 1 para a varivel a.
Linha 2: atribuimos o valor 2 para a varivel b.
Linha 3: atribumos o valor 3 para a varivel c.
Obs: podemos omitir as aspas, quando atribuimos valores numricos a uma
varivel. Portanto,
seja a "1" e
seja a 1, d no mesmo.

Vamos em frente.
Ateno para esta parte do cdigo:

Linha 4: unimos o valor da varivel a com o valor da varivel b. O que
aconteceu ento? O valor da varivel b, foi colocado a direita do valor
da varivel a, modificando seu valor inicial que era 1.
Ento, quanto vale a varivel a at agora? Bem, se a era 1, e b  2, e
se o valor de b foi colocado na varivel a, a direita do seu valor
inicial, a varivel a passou a valer 12.

Linha 5: Unimos o valor da varivel a ao valor da varivel c, colocando
o valor de c a direita do valor de a, modificando o valor de a
novamente.
E agora, a vale quanto? Bem, se a vale 12, e adicionamos o valor de c
que  3, a direita do valor de a, logo a passa a valer 123.

Linha 6: Exibimos o valor da varivel a.
Ento, nosso script mostra o valor 123 na tela.

Comando l:

Como estamos vendo desde o incio deste curso, o comando l, serve para
receber uma informao do usurio e guardar em uma varivel.
Podemos us-lo sem o acento circunflexo no '', ou seja, l e le,  a
mesma coisa no scripvox.
A sintaxe :
le nomedavariavel

Podemos, opcionalmente, utilizar os parmetros: mudo, senha e edita.     O
primeiro faz com que a informao passada para a varivel no seja
ecoada.     O segundo serve para que a informao no seja nem escrita
nem ecoada.
O ltimo faz com que possamos editar o valor da varivel com as setas.
    Adicionando o modificador & (e comercial) aps o nome da
varivel, indicamos ao interpretador que a varivel ir receber apenas
um caracter, ou seja, ao digitarmos o valor para ser armazenado na
varivel, no precisamos de apertar a tecla enter depois.

    Exemplo:

*Cdigo de exemplo de uso do comando L;
*Por Fabiano Ferreira;
*Em julho de 2011;

Escreve "    Este  um cdigo de exemplo do comando L."
*a linha abaixo gera uma linha em branco na hora da execusso:
Escreve ""
Escreve "Informe seu nome:"
Le n
Escreve "Agora, informe uma senha:"
Le senha s
Escreve "Agora, escreva algo somente para ser exibido na tela:"
Le mudo a
Escreve "Agora, escreva uma frase qualquer:"
Le f
Escreve "Agora, veja com as setas esquerda e direita a frase que voc escreveu, tecle esc para sair da edio:"
Le edita f
Escreve "Ento, gostou, sim ou no?"
Le r &
Escreve "Ns vamos fazer scripts bem mais interessantes que esse, aguarde!"
Escreve "Obrigado."
Escreve "Fim."
Termina mudo

Copiem esse cdigo para um arquivo, salvando-o com o nome de comando-l.cmd
e executem com o scripvox.

Copiando valores de uma varivel para outra

A linha de comando de cpia de valores de uma varivel para outra tem a
seguinte forma:
Copia, um espao, nome da varivel que vai receber o valor, um espao,
nome da varivel de onde o valor se encontra, um espao, caracter
inicial, um espao e caracter final.
Tomemos como exemplo uma varivel a que tem como valor a palavra
"camaleo".
Ento podemos dizer que temos uma varivel guardando 8 letras: 'c', 'a',
'm', 'a', 'l', 'e', '', 'o'.
Agora queremos copiar parte destas letras para uma varivel, que
chamaremos de b.     Queremos copiar do caracter 5 at o 8.     Logo, a
soluo em scripvox seria:
copia b a 5 8
Agora a varivel b tem como valor a palavra "leo".

Vamos a um pequeno exemplo:
*Exemplo de cpia de valores entre variveis;
*Por fabiano Ferreira;
*Em julho de 2011;

Seja c "Curso de scriptvox"

Copia c c 10 18
Escreve c
Termina mudo

O cdigo exibir a palavra scriptvox.
Neste exemplo, vemos que  possvel sobrescrever o valor de uma
varivel, copiando uma parte dela para ela mesmo.
A linha 'copia c c 10 18' copia para a varivel c o valor de c, do
caracter 10 at o 18, ou seja, ele apaga o valor de c, s deixando da
posio 10 at a 18.

Funes modificadoras do comando seja:

*    Funo tamanho

Para obtermos o tamanho de uma varivel, utilizamos a funo tamanho.
Sua forma geral  a seguinte:
seja x tamanho y.
Onde x  a varivel que guarda o nmero correspondente ao tamanho de y.
No caso do exemplo dado no tpico anterior, (camaleo) ao escrever a linha de
cdigo:
seja t tamanho a, t receberia o valor 8, correspondente ao tamanho de a.
Agora, poderamos modificar a linha de cdigo que escrevemos no tpico
anterior que era:
copia b a 5 8
para:
copia b a 5 t, j que, t vale tamanho de a.

Heis um exemplo de obteno de tamanho de varivel:

*Informa o tamanho de uma string digitada pelo usurio;
*Por Fabiano Ferreira;
*Em julho de 2011;

Escreve "Digite uma frase ou palavra e eu direi seu tamanho:"
le p
Seja t tamanho p

Escreve "O tamanho da string "p"  "t"."

Termina mudo

    O exemplo acima permite que o usurio entre com uma frase ou palavra
e informa seu tamanho.
Ateno: espaos so contados como caracteres, portanto, "curso de
scriptvox" e "cursodescriptvox" tem tamanhos diferentes.

*    Funo maiusc

Para converter uma string armazenada em uma varivel toda para
maiscula, utilizamos a funo maiusc.
Acompanhe o exemplo abaixo:

*Convertendo para maiusculas;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja f "fabiano ferreira"
seja f maiusc f
Escreve f
Termina mudo

O exemplo acima escreve fabiano ferreira em maisculas.

Agora veja esse outro exemplo, quase igual ao anterior:

*Convertendo para maiusculas;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja f "fabiano ferreira"
seja g maiusc f
Escreve g
Termina mudo

Qual a diferena do segundo exemplo para o primeiro?

No primeiro exemplo, ao converter o valor da varivel para maisculas,
perdemos o valor original, e no segundo no, pois guardamos o valor
convertido em uma outra varivel.
    Tudo vai depender do que se deseja fazer.
Se o valor em minscula no vai ser utilizado no programa, no h
problema perd-lo, mas, se ainda precisarmos dele, temos de preserv-lo.

Ento, como saber quando estou destruindo o valor inicial da minha
varivel?
Simples. Basta entendermos a funo maiusc assim:
Quando escrevemos 'Seja l maiusc l', estamos dizendo ao interpretador
'seja l o valor em maisculo de l', ou seja, seja l o valor em maisculo
dele mesmo.
E quando escrevemos 'Seja m maiusc l', estamos dizendo 'seja m o valor
em maisculo de l', preservando assim o valor inicial de l.
    Essa dica vale no s para a funo maiusc, mas para qualquer
modificao no valor da minha varivel.
Se no posso perder o valor inicial, uso sempre outra varivel para
armazenar o novo valor.

*Funo trim

A funo trim serve para remover todos os espaos em branco, no incio e
no fim de uma string.
Vamos a um exemplo:

*exemplo de utilizao da funo trim;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja c "    Curso de scripvox.    "
seja c trim c
escreve c

No exemplo acima, a string curso de scripvox ser escrita sem os espaos
iniciais e finais.
Ateno: o efeito desse comando  visual, nada ser diferenciado quando
falado pelo sintetizador.
Assim  tambm para a funo maiusc.

*Funo pos
    Esta funo calcula um subconjunto de carateres dentro de um
conjunto de carateres guardados em uma varivel.
    Tenham calma,  mais fcil do que imaginam.
Vou contar um pequeno segredo pra vocs: eu levei quase um ano pra
entender o que significava isso.
Vejam a explicao do manual oficial do scripvox para a funo pos:
"        POS [subcadeia]   calcula a posio de uma subcadeia na
varivel"
E s isso!
Talvez vocs perguntem: "Como  que voc fez pra entender isso ento?"
    Resposta: executando o cdigo que vem de exemplo no manual e
'tentando pegar no ar', o por que daquele resultado.
Vejam o exemplo do manual oficial:

seja a "Antonio"
seja p POS "nio" a
escreve p
Ser escrito 5

, ser escrito 5, mas algum entendeu por que 5?
Gente, pode parecer ridculo, mas eu demorei muito pra entender o por
que do 5.
Eu sabia muito pouco de programao nessa poca.
Ento o jeito era testar os cdigos e pedir ajuda.
Quando no tinha ajuda, tinha que tentar adivinhar.

Bem... vocs querem  saber o por que do 5 e o que  essa tal de funo
pos, e esse negcio de subconjunto, no  mesmo?
Pois bem, vou deixar de enroleixan e matar a curiosidade de
vocs.

Vamos analisar aquele exemplo do manual:
seja a "Antonio"
*Aqui nada de novidade, apenas atribuimos a string Antonio a varivel a;
seja p POS "nio" a
*Aqui est o uso da funo pos, onde atribumos o valor de um subconjunto da varivel a  varivel p.

escreve p
*Aqui tambm nada de novo, escrevemos o contedo da varivel p na tela.

"Pocha, Fabiano, continuo sem entender por que 5!"
Certo.
Veja s:
No exemplo, a varivel a tem como valor a string Antonio, certo?
Ok.
Quantas letras tem Antonio?
Tem 7 letras, n isso?
Ok.

Agora eu pergunto: se eu ler Antonio, do caracter 5 at o 7, que palavra
eu formo:
Nio... ummmm. exatamente o subconjunto que o cdigo de exemplo calcula!
E nio, dentro de Antonio, comea na posio 5, pois  onde est a letra
'n' do pedacinho final de Antonio.

"Nossa, que legal! agora eu entendi!"
Entendeu mesmo?
Ento vamos ver:
Se ao envs de calcular a posio do subconjunto 'nio' em Antonio, eu
calculasse 'an', que valor eu encontraria?
Encontraria 1.
Se fosse 'ton'? encontraria 3.
Se fosse 'Ant', encontraria 1.
Se fosse 'nto', acharia 2.

Ficou claro agora?
Se sim, ok, se no, basta escrever para o grupo que tentaremos ajudar.

*Funo rand

Esta funo gera um nmero aleatrio entre 0 e n-1, por exemplo:
Seja r rand 100, geraria um valor aleatrio entre 0 e 99.

Seja r rand 11, gera um valor aleatrio entre 0 e 10.

Seja p rand 2012, gera um valor aleatrio entre 0 e 2011.

Esta funo, geralmente,  usada em conjunto com o comando randomiza.
Caso o comando randomiza no seja utilizado, os valores gerados sero sempre os mesmos
 toda vez que executarmos o programa.

Vejamos um exemplo de cdigo:

*Exemplo do uso da funo rand;
*Por Fabiano Ferreira;
*Em julho de 2012;

Randomiza
seja r rand 1001

Escreve "Seu nmero da sorte "r
Termina mudo.

O exemplo acima exibe um valor randmico entre 0 e 1000.

*Funo data

Esta funo obtem a data no formato dd/mm/aaaa

Exemplo:

*Exemplo de obteno de data;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja d data

Escreve "Data de Hoje: "d
Termina mudo.

O exemplo acima exibe a data, conforme ela est no sistema windows.

*Funo hora

Esta funo obtem a hora no formato hora:minuto:segundo.
Exemplo:

*Exemplo de script para obter a hora do sistema;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja h hora

Escreve "Olha a hora! "h
Termina mudo

O exemplo acima exibe a hora, conforme esteja ajustada no sistema
windows.

*Funo dia

Esta funo obtem o dia da semana (segunda, tera, etc...)

Exemplo

*Exemplo de script que obtem o dia da semana;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja d dia

Escreve "Hoje  "d". No esquea de seu compromisso."
Termina mudo

O exemplo acima exibe o dia da semana.

*Funo tempo

Esta funo obtem o tempo, em centsimos, desde que o programa comeou a
ser executado.

Vejamos um exemplo:

*Exemplo do uso da funo tempo;
*Por Fabiano Ferreira;
*Em julho de 2011;

Escreve "Aperte qualquer tecla para fechar este programa:"
le x &
seja t tempo
Escreve "Tempo de execusso: "t
Escreve "tchau."
Termina mudo

O exemplo acima mostra o tempo em centsimos que o programa est sendo
executado.

    Assim terminamos a nossa aula 3.
O exerccio dessa semana ser estudar tudo que vimos at aqui e
produzir scripts, tentando aproveitar o mximo do que foi dado at esta
aula.
    Sintam-se livres para escrever os programas que a imaginao deixar
produzir.

E ateno!
Quem quiser mandar cdigos afim de mostrar o quanto est progredindo, ou
para tirar dvidas, essa semana deve fazer no prprio grupo.
programando-em-scripvox@googlegroups.com

Todos esto autorizados a comentar, corrigir, sugerir, acrescentar e
ajudar, claro, tudo com muita ordem e com muito respeito.
Nada de menosprezar o trabalho do outro, nem de querer se achar o
melhor.

E , quero ver movimento!
Todo mundo botando a cachola pra funcionar, escrevendo cdigos e
compartilhando conosco!
Valendo at o dia 31/07.
Aps esse dia, voltamos ao nosso ritmo normal.

Bons estudos!
