Curso de ScriptVox Intermediário - Aula 1 - Prof. Oswaldo Vernet - iNCE/UFRJ

Sejam bem vindos ao Curso Intermediário de ScriptVox.

Antes propriamente de iniciarmos o texto da primeira aula, vamos combinar algumas
regras para o andamento do curso.

Como o interpretador está ainda em fase de teste, correções poderão ser feitas durante o curso 
e é importante que você utilize sempre a versão mais recente. Confira diariamente no site 

http://intervox.nce.ufrj.br/scriptvox

se está disponível uma nova versão. A data e a hora da última modificação aparecem 
imediatamente antes do link 

Clique aqui para baixar o programa sc.exe

O nome "sc.exe" é ainda provisório. Quando finalmente homologada a versão estável, 
o interpretador voltará a se chamar "scripvox.exe", para felicidade de todos. 

Todos os alunos serão convidados a se inscrever no grupo scriptvox@googlegroups.com.
É importante sua participação neste grupo, onde você poderá discutir com os colegas as
suas dúvidas, postar soluções, sugerir melhorias, etc.

A comunicação com o professor será pelo endereço eletrônico scriptvox@gmail.com, tanto
para entrega dos exercícios quanto para esclarecer dúvidas. 

Os textos das aulas serão disponibilizados até o meio-dia de segundas e quintas feiras,
exceto nos dias 16 e 20 de fevereiro, próximos ao Carnaval. Estimamos o final do curso 
para meados do mês de março, quando haverá a avaliação final.

Cada aula consistirá de um texto expositivo e de exercícios, divididos em três categorias:
- perguntas de estudo dirigido, com a finalidade de fixar conceitos;
- exercícios de programação em geral, que se destinam à prática dos conceitos;
- exercícios de avaliação, que deverão ser remetidos para scriptvox@gmail.com.

Os exercícios de avaliação propostos nas aulas de segunda-feira devem ser remetidos para
o endereço eletrônico scriptvox@gmail.com até meio-dia da quinta-feira seguinte. Já os
exercícios de avaliação propostos nas aulas de quinta-feira devem ser remetidos até
meio-dia da segunda-feira seguinte. Estes exercícios contarão para sua avaliação final
no curso.

É fundamental para seu aprimoramento a resolução dos exercícios, mesmo os que lhe pareçam
absolutamente supérfluos, como poderá ocorrer com algumas perguntas de estudo dirigido.
Se os conceitos não forem corretamente fixados, de pouco adiantará praticá-los e você
perceberá que seu nível de programação não irá melhorar.

Em alguns pontos do texto são feitas perguntas e é importante procurar respondê-las
antes de continuar a leitura.

Vamos, então, à primeira aula, cujo objetivo é apontar algumas diferenças
entre a versão 6.0 do interpretador ScriptVox e as versões anteriores,
em virtude da revisão que a linguagem sofreu recentemente. Também falaremos de
atribuições, tipos e expressões.


1) INTERFACE

A partir da versão 6.0, a extensão padrão para nomes de arquivos contendo
scripts é ".PRO", em vez do antigo ".CMD", que já era usada pelo Windows 2000 
com outro significado.

Temporariamente, ambas as extensões estão sendo aceitas, mas recomendamos 
aos usuários que nomeiem seus scripts com a terminação ".PRO",
pois iremos, em breve, descontinuar a extensão antiga.


2) ASPECTOS LÉXICOS

2.1) Comentários

Além de reconhecer as linhas iniciadas por asterisco como linhas de
comentários, o ScriptVox versão 6.0 permite comentários em
qualquer ponto do script. Eles devem ser iniciados por um ponto e
vírgula ou por um par de barras, assim:

* Esta é uma linha tradicional de comentário
Seja a 3          ; atribui 3 à variável a
Subtrai a 1       // subtrai 1 da variável a

Um comentário iniciado por ponto e vírgula ou por um par de barras
estende-se até o final da linha e, assim como os comentários iniciados por asterisco, 
eles são ignorados pelo interpretador.

2.2) Nomes de variáveis

Nas versões anteriores do interpretador ScriptVox, havia uma distinção
entre variáveis rápidas (aquelas cujos nomes consistiam em apenas uma
letra) e variáveis lentas (aquelas cujos nomes se iniciavam com o caractere
cifrão).

Na versão 6.0, esta distinção acabou. Sendo assim, há uma única regra
para a formação de nomes de variáveis:

O nome de uma variável deve começar ou por um cifrão, ou por um sublinhado ("underscore"
em inglês) ou por uma letra. Este caractere inicial pode ser seguido de cifrões, 
sublinhados, letras ou números.

Não existe limite para o número de caracteres que compõem um nome de variável.

Se você gosta de começar os nomes de suas variáveis pelo caractere cifrão,
não há problema, pode continuar a fazê-lo. Mas atente apenas para o seguinte
detalhe: $var e var são consideradas variáveis distintas em um script.

Um outro ponto importante é que, internamente, os nomes de variáveis são 
convertidos para maiúsculas e os acentos, o trema, o til e a cedilha são suprimidos.
Assim, 

ação
AÇÃO
acao
açao

referem-se todos à mesma variável.


2.3) Rótulos

Rótulos associam nomes a certas linhas importantes do script, às quais precisamos 
nos referir em outros pontos do código, como, por exemplo, em comandos DESVIA ou CHAMA.

Os nomes de rótulos continuam sendo iniciados pelo caractere arroba,
que pode ser seguido de letras, dígitos, cifrões ou sublinhados. Entretanto,
um rótulo sofre a mesma transformação interna na hora de ser processado pelo
interpretador: seu nome é convertido para maiúsculas, eliminando-se os acentos,
o til, o trema e a cedilha.

Assim, @rótulo e @ROTULO identificam o mesmo rótulo no programa.

O interpretador emite uma mensagem de erro quando encontra um mesmo rótulo 
sendo associado a mais de uma linha do script.

Todo rótulo deve aparecer sozinho na linha onde é definido, exatamente como
nas versões precedentes.


2.4) Comandos

Os nomes dos comandos, por coerência, seguem a mesma regra para os nomes de
variáveis e rótulos: são internamente convertidos para maiúsculas sem acentos,
trema, til ou cedilha.

Assim, "Le", "le", "lê" ou "lé" são considerados sinônimos.

Nomes de comandos não podem ser usados como nomes de variáveis.


3) ASPECTOS SINTÁTICOS

3.1) Aninhamento de Comandos

Alguns comandos do ScriptVox, como o REPETE, o ENQUANTO e o SE, causam um
agrupamento das linhas, que começa na linha seguinte à do comando e termina 
na linha anterior àquela onde aparece o comando Fim correspondente.
Lembre-se que este comando Fim deve ser seguido do nome do comando que está
sendo terminado.

A este agrupamento de linhas compreendidas entre um comando e sua finalização
denominamos um BLOCO.

Assim, se tivermos o seguinte comando REPETE:

repete n 5
    escreve "O valor de n é "&
    escreve n
fim repete

o bloco correspondente a este comando Repete é constituído por duas linhas,
a saber:

escreve "O valor de n é "&
escreve n

Nas versões anteriores do interpretador ScriptVox, não era permitido que um
comando REPETE, ENQUANTO ou SE fizesse parte do BLOCO de algum outro comando.
Entretanto, na versão 6.0, podemos ter construções aninhadas, como por exemplo:

repete n 5
    escreve "O valor de n é " n
	seja a 0
	enquanto a <= n
		escreve a " " &
		soma a 1
	fim enquanto
fim repete

Observe, no exemplo, que o comando ENQUANTO e seu bloco fazem parte do bloco do 
comando REPETE. Sempre que isto acontece, dizemos que os comandos estão ANINHADOS 
ou ENCAIXADOS, o mais interno no mais externo.


3.2) Tipos

Até a versão 5.0, as variáveis em ScriptVox eram capazes de armazenar um só tipo
de informação: cadeias de caracteres, ou "strings" em inglês. Mesmo que escrevêssemos

Seja $var 5

ainda assim, o valor da variável $var seria a cadeia unitária "5" e não o número inteiro 5,
como seria de se esperar. Isto implicava que, na hora de realizar uma operação
aritmética do tipo

Soma $var 1

o conteúdo de $var deveria ser transformado em um número inteiro, para poder ser incrementado
de uma unidade. Após a soma, o valor de $var deveria ser transformado de volta para
o tipo cadeia.

Inspirados em linguagens de tipagem dinâmica, na versão 6.0, introduzimos mais três tipos
de dados, além das cadeias que já existiam: inteiros, listas e dicionários. Teremos oportunidade, 
em textos futuros, de descrever melhor os tipos lista e dicionário.


3.3) Expressões

Até a versão 5.0 do ScriptVox, só havia disponíveis expressões bastante rudimentares,
que normalmente nem eram utilizadas pelos usuários em seus scripts.

Primeiramente, o que é uma expressão?  De modo informal, uma expressão é uma sentença
matemática que combina valores, efetuando operações sobre eles. Se a expressão estiver 
correta, ela resultará em um valor. Quando escrevemos, por exemplo, a expressão

x + 1

esta sentença matemática expressa o seguinte: o valor da variável x somado ao inteiro 1. 
Então, se x armazena o inteiro 5, por exemplo, a expressão resultará no valor 6, que 
corresponde ao valor de x mais 1.

Uma expressão, portanto, combina valores através de operações. Formalmente,
estes valores são chamados de OPERANDOS e as operações são expressas por símbolos,
denominados OPERADORES. Assim, na expressão

$var + 1

os OPERANDOS "$var" e 1 são somados, através do OPERADOR "+".

As expressões podem envolver um número arbitrário de operandos e operadores. Por exemplo:

x + 5 * $var / 2

é uma expressão perfeitamente válida, em que os operandos são: o valor da variável "x", o número
inteiro 5, o valor da variável "$var" e o número inteiro 2; os operadores são "+", 
"*" (multiplicação) e "/" (divisão).

Por coerência com a matemática, convenciona-se uma certa ordem de avaliação entre os operadores,
denominada PRECEDÊNCIA. Assim, multiplicações e divisões têm precedência (isto é, são efetuadas
antes) sobre somas e subtrações, de modo que a expressão anterior seria avaliada na seguinte ordem:

- primeiramente, o inteiro 5 é multiplicado pelo valor da variável $var
- o resultado desta multiplicação é dividido por 2
- o resultado desta divisão é somado com o valor de x

Insistimos: os valores das variáveis "x" e de "$var" são usados, mas não se alteram durante a avaliação 
da expressão. A conhecida sequência de comandos ScriptVox que implementaria esta expressão
seria:

Seja $expressao 5
Multiplica $expressao $var
Divide $expressao 2
Soma $expressao x

A variavel $expressão conteria, portanto, o valor final resultante da avaliação.

Só que agora, na versão 6.0, não é mais necessário escrever tanto. Uma linha de código
substitui quatro linhas de comando!

Se necessário, a precedência pode ser alterada com a introdução de parênteses na expressão, 
exatamente como se faz na matemática. Assim

(x + 5) * $var / 2

teria uma ordem de avaliação diferente da ordem usada na expressão anterior. Qual seria ela?

Portanto, avaliar uma expressão significa efetuar, quando possível, as operações indicadas 
pelos operadores sobre os valores dos operandos, produzindo um valor final, que é chamado 
valor resultante da avaliação da expressão.

Pense um pouco neste "quando possível" que acabamos de dizer. Quando é que não seria
possível efetuar uma operação?  Você consegue imaginar algum exemplo? 


3.4) Atribuições

As atribuições em ScriptVox, até a versão 5.0, eram feitas através do comando Seja,
no qual são especificados uma variável e uma expressão. A ideia é avaliar a expressão,
calculando seu valor final, e armazenar este valor na variável dada.

Na versão 6.0, uma atribuição pode ser feita como nas linguagens de programação de alto nível:
o nome da variável aparece seguido do sinal de atribuição "dois pontos igual" (:=) e, 
após este sinal, aparece uma expressão. Assim

Seja var 1

pode (e deve), de agora em diante, ser escrito da seguinte maneira:

var := 1

Este comando de atribuição é lido da seguinte maneira: a variável "var" RECEBE o valor 1.

Neste exemplo, a expressão ao lado direito do sinal de atribuição é bastante simples
e consiste apenas de um número inteiro. Examinaremos, na próxima seção, alguns exemplos
de expressões mais complexas.

O funcionamento de um comando de atribuição é o seguinte:
- primeiramente, a expressão que aparece ao lado direito do sinal de atribuição é
  avaliada, o que resulta em um valor;
- em seguida, este valor resultante da avaliação da expressão é armazenado na variável 
  especificada à esquerda do sinal ":=" e o valor antigo que estava armazenado na
  variável (se havia algum) é perdido.

Quando, num script, atribuímos pela primeira vez algum valor a uma variável dizemos que
estamos INICIALIZANDO a variável. Apesar de o verbo INICIALIZAR não existir em português, é
um neologismo bastante usado em computação.

Vejamos um outro exemplo, com dois comandos de atribuição seguidos:

x := 3
var := x + 1

No primeiro comando de atribuição, a variável cujo valor será modificado é "x" e a
expressão a ser avaliada consiste apenas do inteiro 3. Neste caso, o valor resultante
da avaliação será o próprio inteiro 3. Após a execução deste comando, o valor da
variável "x" é o inteiro 3.  Se "x" armazenava algum valor anteriormente, ele foi
perdido.

No segundo comando, a variável que mudará de valor é "var", que aparece do lado esquerdo
do sinal :=. A expressão do lado direito é

x + 1

Como o valor atualmente armazenado em "x" é o inteiro 3, a avaliação dessa expressão consistirá
em efetuar a soma

3 + 1

que resulta no inteiro 4. Este resultado da avaliação torna-se o novo valor de "var". 

Um exemplo mais interessante é o seguinte, onde a mesma variável aparece à esquerda e à direita
do sinal de atribuição:

var := var + 1

Neste exemplo, a variável var RECEBE o valor da variável var (ou seja, o seu próprio valor) 
somado com 1. A construção equivalente já conhecida das versões anteriores do ScriptVox seria

Soma var 1

Normalmente, chamamos isto de INCREMENTAR o valor de "var", ou ainda, INCREMENTAR "var".

É importante pensar sobre este último exemplo e perceber em que momento o valor da variável
"var" está apenas sendo usado e em que momento ele é modificado. Recorde o que dissemos
sobre o funcionamento de uma atribuição: primeiro a expressão à direita do sinal ":=" é avaliada;
só depois o valor da variável à esquerda do sinal ":=" é modificado. Então, enquanto o
interpretador está avaliando a expressão, o valor de "var" não muda, ele é apenas usado; 
depois de avaliada, a expressão resulta em um valor, que vem a ser a soma do valor de "var" com o inteiro 1;
este valor resultante será armazenado na própria variável "var", na segunda fase da atribuição. 
E o que acontece ao valor que estava em "var" e que foi usado durante a avaliação da expressão?  
Ele é perdido no momento em que o interpretador armazena em "var" o novo valor.

As variáveis, portanto, não têm lembrança de seus valores antigos. 


3.5) Voltando às Expressões

É claro que nem todo operador combina com todo tipo de operando. Por exemplo, não faz muito sentido,
em princípio, multiplicar duas cadeias.

Entretanto, por economia de símbolos, muitas vezes numa linguagem um mesmo operador pode ser 
aplicado a operandos de diferentes tipos. Em vez de inventar um símbolo distinto para cada tipo,
usamos um mesmo símbolo, que passa a ter um sentido diferente. A isto chamamos SOBRECARGA de
um operador. 

Tomemos, por exemplo, o operador "+". Quando aplicado a inteiros, seu efeito é somar dois números 
e o resultado produzido é também do tipo inteiro. Quando aplicado a duas cadeias, o efeito é outro:
ele significa CONCATENAÇÃO. Assim, as três linhas seguintes de código

string1 := "Vaca amarela"
string2 := " sujou a panela"
frase := string1 + string2

têm o efeito final de atribuir à variável "frase" o valor resultante da expressão 
 
string1 + string2

Nesta expressão, o operador "+" é aplicado aos valores das variáveis string1 e string2. 
Estas variáveis armazenam, neste momento, cadeias. Logo, o "+" se traduz como concatenação e 
o valor final de "frase" será a cadeia 

"Vaca amarela sujou a panela"

Vamos a um exemplo mais curioso. E se usarmos o operador "+" entre um inteiro e uma
cadeia, qual será seu efeito?  Considere o exemplo:

var := 55
desejo := " cachorros me mordam"
frase := var + desejo

Após o primeiro comando de atribuição, a variável var armazena o inteiro 55; depois
do segundo comando, a variável desejo armazena a cadeia " cachorros me mordam".
E o terceiro comando irá atribuir à variável frase o resultado da expressão

var + desejo

Só que, neste caso, var armazena um inteiro e desejo armazena uma
cadeia. O que significa a soma de um inteiro com uma cadeia?

Neste caso, o interpretador agirá da seguinte forma: por se tratar de uma soma,
ele tentará primeiro converter os dois operandos para o tipo inteiro. Um deles já
é inteiro (55) e o outro não pode ser convertido para inteiro, pois a cadeia 
" cachorros me mordam" contém caracteres não numéricos. Portanto, não fará sentido
somar um inteiro com uma cadeia que não pode ser convertida para um inteiro.

A tentativa seguinte do interpretador será encarar o operador "+" como concatenação
de cadeias. Só que 55 é um inteiro, não é uma cadeia. Entretanto, neste caso, é possível
converter o inteiro 55 na cadeia "55". Portanto a expressão "var + desejo" produzirá
como resultado a concatenação de "55" com " cachorros me mordam", isto é, a cadeia 

"55 cachorros me mordam"

que será atribuída à variável frase.

Vejamos um outro exemplo:

primeiro := "33"
segundo := 20
soma := primeiro + segundo

Você consegue deduzir o que acontecerá neste caso?  Ao encarar o operador "+" como
soma, o interpretador verifica que um operando é do tipo cadeia e outro é do tipo
inteiro. A primeira tentativa é, portanto, transformar a cadeia "33" 
em um inteiro. Neste caso, a conversão é possível, porque a cadeia só contém caracteres
numéricos. Assim, o valor final da variável soma será 53, do tipo inteiro. 

Cabe, agora, uma pergunta: e se não for possível realizar as conversões de operandos?
Considere o exemplo:

número := 55
pessoas := "ladrões"
frase := número - pessoas

Repare, na expressão que aparece à direita da última atribuição, que o operador é
"-" (subtração). Nossa intenção é, portanto, guardar na variável frase o valor
da variável "número" menos o valor da variável "pessoas".

Pois bem. A variável "número" armazena o inteiro 55. A variável "pessoas" armazena a
cadeia "ladrões". Nosso operador, agora, é de subtração. Subtração só faz sentido
entre inteiros e a única conversão que o interpretador tentará fazer será transformar
o valor da variável "pessoas" (ou seja, a cadeia "ladrões") em um inteiro, o que não é possível. 
Logo, a operação de subtração não se realiza e a expressão, neste caso, possui o tipo INVÁLIDO.

Execute este exemplo no novo interpretador e veja o que acontece!

Uma última observação para hoje: expressões não aparecem somente em comandos de
atribuição. Elas podem aparecem em qualquer lugar de um script onde um valor é esperado.
Assim, é perfeitamente válida a sequência de comandos:

nome := "arquivo"
abre #1 nome + ".txt"

A variável "nome" armazena o nome do arquivo sem a extensão. Na hora de abrir, usamos
como nome do arquivo o resultado da expressão

nome + ".txt"

que tem o efeito de concatenar a cadeia armazenada em nome e a cadeia ".txt".
Observe que, após o comando abre, a variável "nome" continua armazenando a mesma cadeia de antes,
pois nada foi atribuído a ela.


EXERCÍCIOS

Perguntas de Estudo dirigido (responda por escrito para você mesmo):

1)  Como são formados os nomes de variáveis na versão 6.0 do ScriptVox?
2)  Como são formados os nomes de rótulos na versão 6.0 do ScriptVox?
3)  Como deve ser lido um comando de atribuição?
4)  Quais são os passos envolvidos na execução de um comando de atribuição?  
5)  Que diferença de processamento existe entre as variáveis que aparecem 
    do lado direito e a variável que aparece do lado esquerdo do sinal de atribuição?
6)  O que acontece a uma variável que aparece tanto do lado esquerdo quanto do
    lado direito do sinal de atribuição?
7)  O que é uma expressão?
8)  O que são operadores e operandos?
9)  O que significa avaliar uma expressão?
10  O que significa converter o valor de uma variável para um outro tipo?  Dê exemplos.
11) Quando é possível converter uma cadeia para um inteiro?
12) Quando é possível converter um inteiro para uma cadeia?
13) Qual o efeito do operador "+" quando aplicado a cadeias?
14) Qual o efeito do operador "+" quando aplicado a inteiros?
15) O que significa um operador estar SOBRECARREGADO?
16) O que significa precedência de um operador sobre outro?  Dê um exemplo.
17) Para que servem os parênteses em uma expressão?
18) O que é o BLOCO de um comando SE, REPETE ou ENQUANTO?
19) O que é um neologismo?


Exercícios de Programação

Estes exercícios devem ser resolvidos com o auxílio do interpretador ScriptVox versão 6.0,
mas as respostas não devem ser enviadas ao professor.

1) O que é escrito na tela pelo script

   x := "55"
   y := "88"
   escreve x + y

2) No exemplo anterior, se acrescentarmos a atribuição

   z := x + y

   qual será o tipo de z: inteiro ou cadeia?

   Dica: para conferir sua resposta e saber o tipo de uma variável, use a função TIPO, da seguinte forma:

   escreve TIPO(z)

   A função TIPO devolve uma cadeia informando o tipo da expressão que foi dada entre parênteses
   (neste caso, uma expressão bem simples, que consiste apenas no valor da variável "z").
   Ficou surpreso com o resultado?  Esperava que o tipo fosse outro?  Medite a respeito.

3) Escreva um só comando de atribuição que aumenta em vinte porcento o valor inteiro armazenado
   na variável "dinheiro". O resultado, é claro, pode não ser exato, mas não tem importância.
   Exemplo: se a variável dinheiro contém o valor 10, após a atribuição, ela deverá conter 12. 
   Se "dinheiro" contém 22, seu valor final será 26 (o correto, na verdade, seria 26,4; só que este 
   valor não é inteiro e o ScriptVox, mesmo já velho de guerra, ainda não lida com números reais).
   
4) Um operador bastante útil que foi introduzido na versão 6.0 é o operador RESTO DA DIVISÃO,
   representado pelo símbolo de porcentagem. Assim, o comando de atribuição
   
   x := y % 5
   
   armazena em "x" o resto da divisão de "y" por 5, desde que, é claro, "y" armazene um inteiro.
   
   Sabendo que a variável "número" armazena um inteiro, escreva o comando SE de uma linha que escreve "PAR"
   na tela caso o inteiro armazenado em "número" seja par. Se ele não for par, nada será escrito.
   Lembre-se: expressões podem ser usadas à vontade onde antigamente só podiam aparecer valores.
   
5) Experimente a sequência de comandos seguinte:

   y := 2
   x := y = 2
   escreve x
   
   Agora experimente esta outra sequência (a diferença para a anterior é trocar 2 por 3 na primeira linha):

   y := 3
   x := y = 2
   escreve x

   Examine os dois valores escritos na tela e pense a respeito.
   
   O que queremos dizer com "x recebe o valor de y = 2" ?  Desejamos armazenar na variável "x" 
   o valor resultante da expressão "y = 2". No primeiro exemplo, "y" realmente contém o valor 2 e "x", após a atribuição, conterá 1.	
   No segundo exemplo, "y" armazena o inteiro 3 e "x", após a atribuição, armazenará 0.

   Consegue perceber a moral desta história? Os sinais de igualdade e de desigualdades usados em testes são também
   OPERADORES. Se o teste for verdadeiro, o resultado será o inteiro 1; se o teste for falso, o resultado
   será o inteiro 0.

6) Para usar o valor de uma variável em uma expressão, esta variável deve ter sido, em algum ponto do
   script, inicializada. Na versão 5.0, havia uma inicialização automática no momento em que a variável era
   criada. Na versão 6.0, isto não acontece mais, o que obriga o programador a efetivamente atribuir valores
   iniciais às suas variáveis antes de usá-las. Experimente o seguinte comando 

   a := b + 1

   no ScriptVox versão 6 e observe o que acontecerá.

   
6) Descanse. 


Exercício de Avaliação (envie até meio-dia de 19 de janeiro para scriptvox@gmail.com):

Na sua experiência com as versões anteriores do ScriptVox, você certamente produziu alguns scripts.

Escolha um script não muito pequeno, de sua autoria. Um script do qual você se orgulhe, de estimação mesmo. 
Faça uma revisão completa nele, substituindo por atribuições e expressões todos os comandos SEJA,
SOMA, MULTIPLICA, SUBTRAI, DIVIDE e CONCATENA. 

Renomeie as variáveis do seu script de estimação usando o seguinte princípio de bom senso: batizar as
variáveis com nomes significativos. Assim, por exemplo, se uma variável armazena o endereço de uma pessoa, 
ela deve se chamar "endereço" e não "x". Outro ponto: não precisa economizar caracteres nos nomes.
A legibilidade do script é o ponto mais importante neste caso.

Lembre-se também de usar a extensão ".PRO" no nome do script; não só deste, mas de todos daqui em diante.

Bom estudo!

Oswaldo Vernet







