Vous êtes sur la page 1sur 23

Prof.

Ricardo Alves

VisuAlg 2.0

Menu do VisuAlg
Este menu compe-se de 7 partes:
Arquivo: Possui os comandos para se abrir, salvar e imprimir algoritmos:
Novo: Cria um novo "esqueleto" de pseudocdigo, substituindo o texto existente no editor. Se este texto
anterior tiver sido modificado, o VisuAlg pedir sua confirmao para salv-lo antes que seja sobreposto.
Abrir: Abre o texto de um pseudocdigo anteriormente gravado, substituindo o texto existente no editor.
Se este tiver sido modificado, o VisuAlg pedir sua confirmao para salv-lo antes que seja sobreposto.
Salvar: Salva imediatamente o texto presente no editor. Caso seja a primeira vez que um novo texto
gravado, o VisuAlg pedir o nome do arquivo e sua localizao.
Salvar como: Permite salvar o texto presente no editor exibindo antes uma janela na qual se pode
escolher o nome do arquivo e sua localizao.
Enviar por email: Permite o envio por email do texto presente no editor.
Imprimir: Permite a impresso do algoritmo corrente, mostrando antes a janela de configurao de
impresso (o correspondente boto da barra de tarefas imprime imediatamente o texto do pseudocdigo
na impressora padro).
Sair: Abandona o VisuAlg.

Alm destes comandos, h ainda a lista dos 5 ltimos algoritmos utilizados, que podem ser abertos
diretamente ao se escolher o seu nome.
Editar: Alm dos conhecidos comandos de um editor de texto (copiar, cortar, colar, desfazer, refazer,
selecionar tudo, localizar, localizar de novo, substituir), h tambm as seguintes opes:
Corrigir indentao: Corrige automaticamente a indentao do pseudocdigo, tabulando cada comando
interno com espaos esquerda.
Gravar bloco de texto: Permite a gravao em arquivo de um texto selecionado no editor. A extenso
sugerida para o nome do arquivo .inc.
Inserir bloco de texto: Permite a insero do contedo de um arquivo. A extenso sugerida para o
nome do arquivo .inc.
Exibir: Possui os comandos para ativar/desativar as seguintes caractersticas:
Nmero de linhas: Ativa/desativa a exibio da numerao das linhas na rea esquerda do editor. A
numerao corrente da posio do cursor tambm mostrada na primeira parte da barra de status,
situada na parte inferior da tela. Por motivos tcnicas, a numerao desativada durante a execuo do
pseudocdigo, voltando situao anterior logo em seguida.
Variveis modificadas: Ativa/desativa a exibio da varivel que est sendo modificada. Como o
nmero de variveis pode ser grande, muitas podem estar fora da janela de visualizao; quando esta
caracterstica est ativada, o VisuAlg rola a grade de exibio de modo que cada varivel fique visvel no
momento em est sendo modificada. Este recurso especialmente til quando se executa um
pseudocdigo passo a passo. Por questes de desempenho, a configurao padro desta caracterstica
desativada, quando o pseudocdigo est sendo executado automaticamente. No entanto, basta clicar
este boto para execut-lo automaticamente com a exibio ativada. No final da execuo, a
configurao volta a ser desativada.
Pseudocdigo: Contm os comandos relativos execuo do algoritmo:
Executar: Inicia (ou continua) a execuo automtica do pseudocdigo.
Passo a passo: Inicia (ou continua) a execuo linha por linha do pseudocdigo, dando ao usurio a
oportunidade de acompanhar o fluxo de execuo, os valores das variveis e a pilha de ativao dos
subprogramas.
2

Executar com timer: Insere um atraso (que pode ser especificado) antes da execuo de cada linha.
Tambm reala em fundo azul o comando que est sendo executado, da mesma forma que na execuo
passo a passo.
Parar: Termina imediatamente a execuo do pseudocdigo. Evidentemente, este item fica desabilitado
quando o pseudocdigo no est sendo executado.
Liga/desliga breakpoint: Insere/remove um ponto de parada na linha em que esteja o cursor. Estes
pontos de parada so teis para a depurao e acompanhamento da execuo dos pseudocdigos, pois
permitem a verificao dos valores das variveis e da pilha de ativao de subprogramas.
Desmarcar todos os breakpoints: Desativa todos os breakpoints que estejam ativados naquele
momento.
Executar em modo DOS: Com esta opo ativada, tanto a entrada como a sada-padro passa a ser
uma janela que imita o DOS, simulando a execuo de um programa neste ambiente.
Gerar valores aleatrios: Ativa a gerao de valores aleatrios que substituem a digitao de dados. A
faixa padro de valores gerados de 0 a 100 inclusive, mas pode ser modificada. Para a gerao de
dados do tipo caractere, no h uma faixa pr-estabelecida: os dados gerados sero sempre strings de 5
letras maisculas.
Perfil: Aps a execuo de um pseudocdigo, exibe o nmero de vezes que cada umas das suas linhas
foi executada. til para a anlise de eficincia (por exemplo, nos mtodos de ordenao).
Pilha de ativao: Exibe a pilha de subprogramas ativados num dado momento. Convm utilizar este
comando em conjunto com breakpoints ou com a execuo passo a passo.
Linguagens: Permite a traduo automtico do pseudocdigo presente no editor para outras linguagens
de programao. Atualmente, apenas a traduo para Pascal est implementada, mas ainda em fase de
testes.
Ferramentas: Neste menu, possvel configurar algumas opes do VisuAlg: cores e tipos de letras na
exibio do pseudocdigo, nmero de espaos para indentao automtica, etc.
Ajuda: Entre outras coisas, possibilita acesso s pginas de ajuda e s informaes sobre o VisuAlg.

A Linguagem de Programao do VisuAlg (1)
Introduo
A linguagem que o VisuAlg interpreta bem simples: uma verso portuguesa dos pseudocdigos
largamente utilizados nos livros de introduo programao, conhecida como "Portugol". Tomei a
liberdade de acrescentar-lhe alguns comandos novos, com o intuito de criar facilidades especficas para
o ensino de tcnicas de elaborao de algoritmos. Inicialmente, pensava em criar uma sintaxe muito
simples e "liberal", para que o usurio se preocupasse apenas com a lgica da resoluo dos problemas
e no com as palavras-chave, pontos e vrgulas, etc. No entanto, cheguei depois concluso de que
alguma formalidade seria no s necessria como til, para criar um sentido de disciplina na elaborao
do "cdigo-fonte".
A linguagem do VisuAlg permite apenas um comando por linha: desse modo, no h necessidade de
tokens separadores de estruturas, como o ponto e vrgula em Pascal. Tambm no existe o conceito de
blocos de comandos (que correspondem ao begin e end do Pascal e ao { e } do C), nem comandos de
desvio incondicional como o goto. Na verso atual do VisuAlg, com exceo das rotinas de entrada e
sada, no h nenhum subprograma embutido, tal como Inc(), Sqr(), Ord(), Chr(), Pos(), Copy() ou outro.
Importante: para facilitar a digitao e evitar confuses, todas as palavras-chave do VisuAlg foram
implementadas sem acentos, cedilha, etc. Portanto, o tipo de dados lgico definido como l ogi co, o
comando se..ento..seno definido como se. . ent ao. . senao, e assim por diante. O VisuAlg tambm
no distingue maisculas e minsculas no reconhecimento de palavras-chave e nomes de variveis.
3

Formato Bsico do Pseudocdigo e Incluso de Comentrios
O formato bsico do nosso pseudocdigo o seguinte:
al gor i t mo " semnome"
/ / Funo :
/ / Aut or :
/ / Dat a :
/ / Seo de Decl ar aes
i ni ci o
/ / Seo de Comandos
f i mal gor i t mo
A primeira linha composta pela palavra-chave al gor i t mo seguida do seu nome delimitado por aspas
duplas. Este nome ser usado como ttulo nas janelas de leitura de dados (nas futuras verses do
VisuAlg, talvez utilizemos este dado de outras formas). A seo que se segue a de declarao de
variveis, que termina com a linha que contm a palavra-chave i ni ci o. Deste ponto em diante est a
seo de comandos, que continua at a linha em que se encontre a palavra-chave f i mal gor i t mo. Esta
ltima linha marca o final do pseudocdigo: todo texto existente a partir dela ignorado pelo
interpretador.
O VisuAlg permite a incluso de comentrios: qualquer texto precedido de "//" ignorado, at se atingir o
final da sua linha. Por este motivo, os comentrios no se estendem por mais de uma linha: quando se
deseja escrever comentrios mais longos, que ocupem vrias linhas, cada uma delas dever comear
por "//".
Tipos de Dados
O VisuAlg prev quatro tipos de dados: inteiro, real, cadeia de caracteres e lgico (ou booleano). As
palavras-chave que os definem so as seguintes (observe que elas no tm acentuao):
i nt ei r o: define variveis numricas do tipo inteiro, ou seja, sem casas decimais.
r eal : define variveis numricas do tipo real, ou seja, com casas decimais.
car act er e: define variveis do tipo string, ou seja, cadeia de caracteres.
l ogi co: define variveis do tipo booleano, ou seja, com valor VERDADEIRO ou FALSO.
O VisuAlg permite tambm a declarao de variveis estruturadas atravs da palavra-chave vet or ,
como ser explicado a seguir.
Nomes de Variveis e sua Declarao
Os nomes das variveis devem comear por uma letra e depois conter letras, nmeros ou underline, at
um limite de 30 caracteres. As variveis podem ser simples ou estruturadas (na verso atual, os vetores
podem ser de uma ou duas dimenses). No pode haver duas variveis com o mesmo nome, com a
natural exceo dos elementos de um mesmo vetor.
A seo de declarao de variveis comea com a palavra-chave var , e continua com as seguintes
sintaxes:
<lista-de-variveis> : <tipo-de-dado>
<lista-de-variveis> : vet or " [ " <lista-de-intervalos>"] " de <tipo-de-dado>
Na <lista-de-variveis>, os nomes das variveis esto separados por vrgulas. Na <lista-de-
intervalos>, os <intervalo> so separados por vrgulas, e tm a seguinte sintaxe:
<intervalo>: <valor-inicial> . . <valor-final>
4

Na verso atual do VisuAlg, tanto <valor-inicial> como <valor-final> devem ser inteiros. Alm
disso, exige-se evidentemente que <valor-final> seja maior do que <valor-inicial>.
Exemplos:
var a: i nt ei r o
Val or 1, Val or 2: r eal
vet : vet or [ 1. . 10] de r eal
mat r i z: vet or [ 0. . 4, 8. . 10] de i nt ei r o
nome_do_al uno: car act er e
si nal i zador : l ogi co
Note que no h a necessidade de ponto e vrgula aps cada declarao: basta pular linha. A declarao
de vetores anloga linguagem Pascal: a varivel vet acima tem 10 elementos, com os ndices de [1]
a [10], enquanto mat r i z corresponde a 15 elementos com ndices [0,8], [0,9], [0,10], [1,8], [1,9], [1,10],
... at [4,10]. O nmero total de variveis suportado pelo VisuAlg 500 (cada elemento de um vetor
contado individualmente).
Constantes e Comando de Atribuio
O VisuAlg tem trs tipos de constantes:
Numricos: so valores numricos escritos na forma usual das linguagens de programao.
Podem ser inteiros ou reais. Neste ltimo caso, o separador de decimais o ponto e no a
vrgula, independente da configurao regional do computador onde o VisuAlg est sendo
executado. O VisuAlg tambm no suporta separadores de milhares.
Caracteres: qualquer cadeia de caracteres delimitada por aspas duplas (").
Lgicos: admite os valores VERDADEIRO ou FALSO.
A atribuio de valores a variveis feita com o operador <- . Do seu lado esquerdo fica a varivel qual
est sendo atribudo o valor, e sua direita pode-se colocar qualquer expresso (constantes, variveis,
expresses numricas), desde que seu resultado tenha tipo igual ao da varivel.
Alguns exemplos de atribuies, usando as variveis declaradas acima:
a <- 3
Val or 1 <- 1. 5
Val or 2 <- Val or 1 + a
vet [ 1] <- vet [ 1] + ( a * 3)
mat r i z[ 3, 9] <- a/ 4 - 5
nome_do_al uno <- " J os da Si l va"
si nal i zador <- FALSO


5

A Linguagem de Programao do VisuAlg (2)
Operadores Aritmticos
+, -
Operadores unrios, isto , so aplicados a um nico operando. So os operadores aritmticos
de maior precedncia. Exemplos: - 3, +x. Enquanto o operador unrio - inverte o sinal do seu
operando, o operador +no altera o valor em nada o seu valor.
\
Operador de diviso inteira. Por exemplo, 5 \ 2 =2. Tem a mesma precedncia do operador de
diviso tradicional.
+, -
, *, /
Operadores aritmticos tradicionais de adio, subtrao, multiplicao e diviso. Por
conveno, * e / tm precedncia sobre +e - . Para modificar a ordem de avaliao das
operaes, necessrio usar parnteses como em qualquer expresso aritmtica.
MOD
ou %
Operador de mdulo (isto , resto da diviso inteira). Por exemplo, 8 MOD 3 = 2. Tem a
mesma precedncia do operador de diviso tradicional.
^
Operador de potenciao. Por exemplo, 5 ^2 =25. Tem a maior precedncia entre os
operadores aritmticos binrios (aqueles que tm dois operandos).
Operadores de Caracteres
+
Operador de concatenao de strings (isto , cadeias de caracteres), quando usado com dois
valores (variveis ou constantes) do tipo "caractere". Por exemplo: " Ri o " + " de
J anei r o" = " Ri o de J anei r o" .
Operadores Relacionais
=, <,
>,
<=,
>=,
<>
Respectivamente: igual, menor que, maior que, menor ou igual a, maior ou igual a, diferente de.
So utilizados em expresses lgicas para se testar a relao entre dois valores do mesmo tipo.
Exemplos: 3 = 3 ( 3 igual a 3?) resulta em VERDADEI RO ; " A" > " B" ("A" est depois de
"B" na ordem alfabtica?) resulta em FALSO.
Importante: No VisuAlg, as comparaes entre strings no diferenciam as letras maisculas das
minsculas. Assim, " ABC" igual a " abc" . Valores lgicos obedecem seguinte ordem: FALSO <
VERDADEI RO.
Operadores Lgicos
nao
Operador unrio de negao. nao VERDADEI RO = FALSO, e nao FALSO = VERDADEI RO.
Tem a maior precedncia entre os operadores lgicos. Equivale ao NOT do Pascal.
ou
Operador que resulta VERDADEI RO quando um dos seus operandos lgicos for verdadeiro.
Equivale ao OR do Pascal.
e
Operador que resulta VERDADEI RO somente se seus dois operandos lgicos forem verdadeiros.
Equivale ao AND do Pascal.
xou
Operador que resulta VERDADEI RO se seus dois operandos lgicos forem diferentes, e FALSO
se forem iguais. Equivale ao XOR do Pascal.

6

Comandos de Sada de Dados
escr eva ( <lista-de-expresses>)
Escreve no dispositivo de sada padro (isto , na rea direita da metade inferior da tela do VisuAlg) o
contedo de cada uma das expresses que compem <lista-de-expresses>. As expresses
dentro desta lista devem estar separadas por vrgulas; depois de serem avaliadas, seus resultados so
impressos na ordem indicada. equivalente ao comando write do Pascal.
De modo semelhante a Pascal, possvel especificar o nmero de espaos no qual se deseja escrever
um determinado valor. Por exemplo, o comando escr eva( x: 5) escreve o valor da varivel x em 5
espaos, alinhado-o direita. Para variveis reais, pode-se tambm especificar o nmero de casas
fracionrias que sero exibidas. Por exemplo, considerando y como uma varivel real, o comando
escr eva( y: 6: 2) escreve seu valor em 6 espaos colocando 2 casas decimais.
escr eval ( <lista-de-expresses>) .
Idem ao anterior, com a nica diferena que pula uma linha em seguida. equivalente ao writeln do
Pascal.
Exemplos:
al gor i t mo " exempl o"
var x: r eal
y: i nt ei r o
a: car act er e
l : l ogi co
i ni ci o
x <- 2. 5
y <- 6
a <- " t est e"
l <- VERDADEI RO
escr eval ( " x" , x: 4: 1, y+3: 4) / / Escr eve: x 2. 5 9
escr eval ( a, " ok" ) / / Escr eve: t est eok ( e depoi s pul a l i nha)
escr eval ( a, " ok" ) / / Escr eve: t est e ok ( e depoi s pul a l i nha)
escr eval ( a + " ok" ) / / Escr eve: t est e ok ( e depoi s pul a l i nha)
escr eva ( l ) / / Escr eve: VERDADEI RO
f i mal gor i t mo
Note que o VisuAlg separa expresses do tipo numrico e lgico com um espao esquerda, mas no
as expresses do tipo caractere, para que assim possa haver a concatenao. Quando se deseja
separar expresses do tipo caractere, necessrio acrescentar espaos nos locais adequados.
7

Comando de Entrada de Dados
l ei a ( <lista-de-variveis>)
Recebe valores digitados pelos usurio, atribuindo-os s variveis cujos nomes esto em <lista-de-
variveis> ( respeitada a ordem especificada nesta lista). anlogo ao comando read do Pascal.
Veja no exemplo abaixo o resultado:
al gor i t mo " exempl o 1"
var x: i nt ei r o;
i ni ci o
l ei a ( x)
escr eva ( x)
f i mal gor i t mo
O comando de leitura acima ir exibir uma
janela como a que se v ao lado, com a
mensagem padro:
" Ent r e como val or de <nome-de-
varivel>"

Se voc clicar em Cancelar ou teclar Esc durante a leitura de dados, o programa ser imediatamente
interrompido.
Comando de Desvio Condicional
se <expresso-lgica> ent ao
<seqncia-de-comandos>
f i mse
Ao encontrar este comando, o VisuAlg analisa a <expresso-lgica>. Se o seu resultado for
VERDADEI RO, todos os comandos da <seqncia-de-comandos> (entre esta linha e a linha com
f i mse) so executados. Se o resultado for FALSO, estes comandos so desprezados e a execuo do
algoritmo continua a partir da primeira linha depois do f i mse.
se <expresso-lgica> ent ao
<seqncia-de-comandos-1>
senao
<seqncia-de-comandos-2>
f i mse
Nesta outra forma do comando, se o resultado da avaliao de <expresso-lgica> for
VERDADEI RO, todos os comandos da <seqncia-de-comandos-1> (entre esta linha e a linha com
senao) so executados, e a execuo continua depois a partir da primeira linha depois do f i mse. Se o
resultado for FALSO, estes comandos so desprezados e o algoritmo continua a ser executado a partir
da primeira linha depois do senao, executando todos os comandos da <seqncia-de-comandos-2>
(at a linha com f i mse).
Estes comandos equivalem ao if...then e if...then...else do Pascal. Note que no h necessidade de
delimitadores de bloco (como begin e end), pois as seqncias de comandos j esto delimitadas pelas
palavras-chave senao e f i mse. O VisuAlg permite o aninhamento desses comandos de desvio
condicional.
8

Comando de Seleo Mltipla
O VisuAlg implementa (com certas variaes) o comando case do Pascal. A sintaxe a seguinte:
escol ha <expresso-de-seleo>
caso <exp11>, <exp12>, ..., <exp1n>
<seqncia-de-comandos-1>
caso <exp21>, <exp22>, ..., <exp2n>
<seqncia-de-comandos-2>
. . .
out r ocaso
<seqncia-de-comandos-extra>
f i mescol ha
Veja o exemplo a seguir, que ilustra bem o que faz este comando:
al gor i t mo " Ti mes"
var t i me: car act er e
i ni ci o
escr eva ( " Ent r e como nome de umt i me de f ut ebol : " )
l ei a ( t i me)
escol ha t i me
caso " Fl amengo" , " Fl umi nense" , " Vasco" , " Bot af ogo"
escr eval ( " umt i me car i oca. " )
caso " So Paul o" , " Pal mei r as" , " Sant os" , " Cor nt hi ans"
escr eval ( " umt i me paul i st a. " )
out r ocaso
escr eval ( " de out r o est ado. " )
f i mescol ha
f i mal gor i t mo


9

A Linguagem de Programao do VisuAlg (3)
Comandos de Repetio
O VisuAlg implementa as trs estruturas de repetio usuais nas linguagens de programao: o lao
contado par a. . . at e. . . f aca (similar ao for...to...do do Pascal), e os laos condicionados
enquant o. . . f aca (similar ao while...do) e r epi t a. . . at e (similar ao repeat...until). A sintaxe destes
comandos explicada a seguir.
Para ... faa
Esta estrutura repete uma seqncia de comandos um determinado nmero de vezes.
par a <varivel> de <valor-inicial> at e <valor-limite> [ passo <incremento>]
f aca
<seqncia-de-comandos>
f i mpar a
<varivel >
a varivel contadora que controla o nmero de repeties do lao. Na verso
atual, deve ser necessariamente uma varivel do tipo i nt ei r o, como todas as
expresses deste comando.
<valor-inicial>
uma expresso que especifica o valor de inicializao da varivel contadora
antes da primeira repetio do lao.
<valor-limite >
uma expresso que especifica o valor mximo que a varivel contadora pode
alcanar.
<incremento >
opcional. Quando presente, precedida pela palavra passo, uma expresso
que especifica o incremento que ser acrescentado varivel contadora em
cada repetio do lao. Quando esta opo no utilizada, o valor padro de
<incremento> 1. Vale a pena ter em conta que tambm possvel
especificar valores negativos para <incremento>. Por outro lado, se a
avaliao da expresso <incremento >resultar em valor nulo, a execuo do
algoritmo ser interrompida, com a impresso de uma mensagem de erro.
f i mpar a
Indica o fim da seqncia de comandos a serem repetidos. Cada vez que o
programa chega neste ponto, acrescentado varivel contadora o valor de
<incremento >, e comparado a <valor-limite >. Se for menor ou igual
(ou maior ou igual, quando <incremento > for negativo), a seqncia de
comandos ser executada mais uma vez; caso contrrio, a execuo
prosseguir a partir do primeiro comando que esteja aps o f i mpar a.
<valor-inicial >, <valor-limite > e <incremento > so avaliados uma nica vez antes da
execuo da primeira repetio, e no se alteram durante a execuo do lao, mesmo que variveis
eventualmente presentes nessas expresses tenham seus valores alterados.
No exemplo a seguir, os nmeros de 1 a 10 so exibidos em ordem crescente.
al gor i t mo " Nmer os de 1 a 10"
var j : i nt ei r o
i ni ci o
par a j de 1 at e 10 f aca
escr eva ( j : 3)
f i mpar a
f i mal gor i t mo
10

Importante: Se, logo no incio da primeira repetio, <valor-inicial > for maior que <valor-
limite > (ou menor, quando <incremento> for negativo), o lao no ser executado nenhuma vez.
O exemplo a seguir no imprime nada.
al gor i t mo " Numer os de 10 a 1 ( no f unci ona) "
var j : i nt ei r o
i ni ci o
par a j de 10 at e 1 f aca
escr eva ( j : 3)
f i mpar a
f i mal gor i t mo
Este outro exempo, no entanto, funcionar por causa do passo -1:
al gor i t mo " Numer os de 10 a 1 ( est e f unci ona) "
var j : i nt ei r o
i ni ci o
par a j de 10 at e 1 passo - 1 f aca
escr eva ( j : 3)
f i mpar a
f i mal gor i t mo
Enquanto ... faa
Esta estrutura repete uma seqncia de comandos enquanto uma determinada condio (especificada
atravs de uma expresso lgica) for satisfeita.
enquant o <expresso-lgica> f aca
<seqncia-de-comandos>
f i menquant o
<expresso-lgica>
Esta expresso que avaliada antes de cada repetio do lao. Quando
seu resultado for VERDADEIRO, <seqncia-de-comandos>
executada.
f i menquant o
Indica o fim da <seqncia-de-comandos> que ser repetida. Cada
vez que a execuo atinge este ponto, volta-se ao incio do lao para que
<expresso-lgica> seja avaliada novamente. Se o resultado desta
avaliao for VERDADEIRO, a <seqncia-de-comandos> ser
executada mais uma vez; caso contrrio, a execuo prosseguir a partir
do primeiro comando aps f i menquant o.
O mesmo exemplo anterior pode ser resolvido com esta estrutura de repetio:
al gor i t mo " Nmer os de 1 a 10 ( comenquant o. . . f aca) "
var j : i nt ei r o
i ni ci o
j <- 1
enquant o j <= 10 f aca
escr eva ( j : 3)
j <- j + 1
f i menquant o
f i mal gor i t mo
Importante: Como o lao enquant o. . . f aca testa sua condio de parada antes de executar sua
seqncia de comandos, esta seqncia poder ser executada zero ou mais vezes.
11

Repita ... at
Esta estrutrura repete uma seqncia de comandos at que uma determinada condio (especificada
atravs de uma expresso lgica) seja satisfeita.
r epi t a
<seqncia-de-comandos>
at e <expresso-lgica>
r epi t a Indica o incio do lao.
at e <expresso-
lgica>
Indica o fim da <seqncia-de-comandos> a serem repetidos. Cada vez
que o programa chega neste ponto, <expresso-lgica> avaliada: se
seu resultado for FALSO, os comandos presentes entre esta linha e a linha
r epi t a so executados; caso contrrio, a execuo prosseguir a partir do
primeiro comando aps esta linha.
Considerando ainda o mesmo exemplo:
al gor i t mo " Nmer os de 1 a 10 ( comr epi t a) "
var j : i nt ei r o
i ni ci o
j <- 1
r epi t a
escr eva ( j : 3)
j <- j + 1
at e j > 10
f i mal gor i t mo
Importante: Como o lao r epi t a. . . at e testa sua condio de parada depois de executar sua
seqncia de comandos, esta seqncia poder ser executada uma ou mais vezes.
Comando Interrompa
As trs estruturas de repetio acima permitem o uso do comando i nt er r ompa, que causa uma sada
imediata do lao. Embora esta tcnica esteja de certa forma em desacordo com os princpios da
programao estruturada, o comando i nt er r ompa foi includo no VisuAlg por ser encontrado na
literatura de introduo programao e mesmo em linguagens como o Object Pascal (Delphi/Kylix),
Clipper, VB, etc. Seu uso exemplificado a seguir:
al gor i t mo " Nmer os de 1 a 10 ( comi nt er r ompa) "
var x: i nt ei r o
i ni ci o
x <- 0
r epi t a
x <- x + 1
escr eva ( x: 3)
se x = 10 ent ao
i nt er r ompa
f i mse
at e f al so
f i mal gor i t mo
O VisuAlg permite ainda uma forma alternativa do comando r epi t a. . . at e, com a seguinte sintaxe:
al gor i t mo " Nmer os de 1 a 10 ( comi nt er r ompa) I I "
var x: i nt ei r o
i ni ci o
x <- 0
12

repita
x <- x + 1
escr eva ( x: 3)
se x = 10 ent ao
i nt er r ompa
f i mse
fimrepita
f i mal gor i t mo
Com esta sintaxe alternativa, o uso do i nt er r ompa obrigatrio, pois a nica maneira de se sair do
lao r epi t a. . . f i mr epi t a; caso contrrio, este lao seria executado indeterminadamente.

13

A Linguagem de Programao do VisuAlg (4)
Subprograma um programa que auxilia o programa principal atravs da realizao de uma
determinada subtarefa. Tambm costuma receber os nomes de sub-rotina, procedimento, mtodo ou
mdulo. Os subprogramas so chamados dentro do corpo do programa principal como se fossem
comandos. Aps seu trmino, a execuo continua a partir do ponto onde foi chamado. importante
compreender que a chamada de um subprograma simplesmente gera um desvio provisrio no fluxo
de execuo.
H um caso particular de subprograma que recebe o nome de funo. Uma funo, alm de executar
uma determinada tarefa, retorna um valor para quem a chamou, que o resultado da sua execuo. Por
este motivo, a chamada de uma funo aparece no corpo do programa principal como uma expresso, e
no como um comando.
Cada subprograma, alm de ter acesso s variveis do programa que o chamou (so as variveis
globais), pode ter suas prprias variveis (so as variveis locais), que existem apenas durante sua
chamada.
Ao se chamar um subprograma, tambm possvel passar-lhe determinadas informaes que recebem
o nome de parmetros (so valores que, na linha de chamada, ficam entre os parnteses e que esto
separados por vrgulas). A quantidade dos parmetros, sua seqncia e respectivos tipos no podem
mudar: devem estar de acordo com o que foi especificado na sua correspondente declarao.
Para se criar subprogramas, preciso descrev-los aps a declarao das variveis e antes do corpo do
programa principal. O VisuAlg possibilita declarao e chamada de subprogramas nos moldes da
linguagem Pascal, ou seja, procedimentos e funes com passagem de parmetros por valor ou
referncia. Isso ser explicado a seguir.
Procedimentos
Em VisuAlg, procedimento um subprograma que no retorna nenhum valor (corresponde ao procedure
do Pascal). Sua declarao, que deve estar entre o final da declarao de variveis e a linha i ni ci o do
programa principal, segue a sintaxe abaixo:
pr ocedi ment o <nome-de-procedimento> [ ( <seqncia-de-declaraes-de-
parmetros>) ]
/ / Seo de Decl ar aes I nt er nas
i ni ci o
/ / Seo de Comandos
f i mpr ocedi ment o
O <nome-de-procedimento> obedece as mesmas regras de nomenclatura das variveis. Por outro
lado, a <seqncia-de-declaraes-de-parmetros> uma seqncia de
[ var ] <seqncia-de-parmetros>: <tipo-de-dado>
separadas por ponto e vrgula. A presena (opcional) da palavra-chave var indica passagem de
parmetros por referncia; caso contrrio, a passagem ser por valor.
Por sua vez, <seqncia-de-parmetros> uma seqncia de nomes de parmetros (tambm
obedecem a mesma regra de nomenclatura de variveis) separados por vrgulas.
De modo anlogo ao programa principal, a seo de declarao internas comea com a palavra-chave
var , e continua com a seguinte sintaxe:
<lista-de-variveis> : <tipo-de-dado>
14

Nos prximos exemplos, atravs de um subprograma soma, ser calculada a soma entre os valores 4 e
9 (ou seja, ser obtido o resultado 13) que o programa principal imprimir em seguida. No primeiro
caso, um procedimento sem parmetros utiliza uma varivel local aux para armazenar
provisoriamente o resultado deste clculo (evidentemente, esta varivel desnecessria, mas est a
apenas para ilustrar o exemplo), antes de atribu-lo varivel global r es:
pr ocedi ment o soma
var aux: i nt ei r o
i ni ci o
/ / n, me r es so var i vei s gl obai s
aux <- n + m
r es <- aux
f i mpr ocedi ment o
No programa principal deve haver os seguintes comandos:
n <- 4
m<- - 9
soma
escr eva( r es)
A mesma tarefa poderia ser executada atravs de um procedimento com parmetros, como descrito
abaixo:
pr ocedi ment o soma ( x, y: i nt ei r o)
i ni ci o
/ / r es var i vel gl obal
r es <- x + y
f i mpr ocedi ment o
No programa principal deve haver os seguintes comandos:
n <- 4
m<- - 9
soma( n, m)
escr eva( r es)
A passagem de parmetros do exemplo acima chama-se passagem por valor. Neste caso, o
subprograma simplesmente recebe um valor que utiliza durante sua execuo. Durante essa execuo,
os parmetros passados por valor so anlogos s suas variveis locais, mas com uma nica diferena:
receberam um valor inicial no momento em que o subprograma foi chamado.
Funes
Em VisuAlg, funo um subprograma que retorna um valor (corresponde ao function do Pascal). De
modo anlogo aos procedimentos, sua declarao deve estar entre o final da declarao de variveis e a
linha i ni ci o do programa principal, e segue a sintaxe abaixo:
f uncao <nome-de-funo> [ ( <seqncia-de-declaraes-de-parmetros>) ] : <tipo-
de-dado>
/ / Seo de Decl ar aes I nt er nas
i ni ci o
/ / Seo de Comandos
f i mf uncao
O <nome-de-funo> obedece as mesmas regras de nomenclatura das variveis. Por outro lado, a
<seqncia-de-declaraes-de-parmetros> uma seqncia de
[ var ] <seqncia-de-parmetros>: <tipo-de-dado>
15

separadas por ponto e vrgula. A presena (opcional) da palavra-chave var indica passagem de
parmetros por referncia; caso contrrio, a passagem ser por valor.
Por sua vez, <seqncia-de-parmetros> uma seqncia de nomes de parmetros (tambm
obedecem a mesma regra de nomenclatura de variveis) separados por vrgulas.
O valor retornado pela funo ser do tipo especificado na sua declarao (logo aps os dois pontos).
Em alguma parte da funo (de modo geral, no seu final), este valor deve ser retornado atravs do
comando r et or ne.
De modo anlogo ao programa principal, a seo de declarao internas comea com a palavra-chave
var , e continua com a seguinte sintaxe:
<lista-de-variveis> : <tipo-de-dado>
Voltando ao exemplo anterior, no qual calculamos e imprimimos a soma entre os valores 4 e 9, vamos
mostrar como isso poderia ser feito atravs de uma funo sem parmetros. Ela tambm utiliza uma
varivel local aux para armazenar provisoriamente o resultado deste clculo, antes de atribu-lo
varivel global r es:
f uncao soma: i nt ei r o
var aux: i nt ei r o
i ni ci o
/ / n, me r es so var i vei s gl obai s
aux <- n + m
r et or ne aux
f i mf uncao
No programa principal deve haver os seguintes comandos:
n <- 4
m<- - 9
r es <- soma
escr eva( r es)
Se realizssemos essa mesma tarefa com uma funo com parmetros passados por valor, poderia
ser do seguinte modo:
f uncao soma ( x, y: i nt ei r o) : i nt ei r o
i ni ci o
r et or ne x + y
f i mf uncao
No programa principal deve haver os seguintes comandos:
n <- 4
m<- - 9
r es <- soma( n, m)
escr eva( r es)
Passagem de Parmetros por Referncia
H ainda uma outra forma de passagem de parmetros para subprogramas: a passagem por
referncia. Neste caso, o subprograma no recebe apenas um valor, mas sim o endereo de uma
varivel global. Portanto, qualquer modificao que for realizada no contedo deste parmetro afetar
tambm a varivel global que est associada a ele. Durante a execuo do subprograma, os parmetros
passados por referncia so anlogos s variveis globais. No VisuAlg, de forma anloga a Pascal, essa
passagem feita atravs da palavra var na declarao do parmetro.
16

Voltando ao exemplo da soma, o procedimento abaixo realiza a mesma tarefa utilizando passagem de
parmetros por referncia:
pr ocedi ment o soma ( x, y: i nt ei r o; var r esul t : i nt ei r o)
i ni ci o
r esul t <- x + y
f i mpr ocedi ment o
No programa principal deve haver os seguintes comandos:
n <- 4
m<- - 9
soma( n, m, r es)
escr eva( r es)
Recurso e Aninhamento
A atual verso do VisuAlg permite recurso, isto , a possibilidade de que um subprograma possa
chamar a si mesmo. A funo do exemplo abaixo calcula recursivamente o fatorial do nmero inteiro que
recebe como parmetro:
f uncao f at or i al ( v: i nt ei r o) : i nt ei r o
i ni ci o
se v <= 2 ent ao
r et or ne v
senao
r et or ne v * f at or i al ( v- 1)
f i mse
f i mf uncao
Em Pascal, permitido o aninhamento de subprogramas, isto , cada subprograma tambm pode ter
seus prprios subprogramas. No entanto, esta caracterstica dificulta a elaborao dos compiladores e,
na prtica, no muito importante. Por este motivo, ela no permitida na maioria das linguagens de
programao (como C, por exemplo), e o VisuAlg no a implementa.

17

A Linguagem de Programao do VisuAlg (5)
O VisuAlg implementa algumas extenses s linguagens "tradicionais" de programao, com o intuito
principal de ajudar o seu uso como ferramenta de ensino. Elas so mostradas a seguir.
Comando Aleatrio
Muitas vezes a digitao de dados para o teste de um programa torna-se uma tarefa entediante. Com o
uso do comando al eat or i o do VisuAlg, sempre que um comando l ei a for encontrado, a digitao de
valores numricos e/ou caracteres substituda por uma gerao aleatria. Este comando no afeta a
leitura de variveis lgicas: com certeza, uma coisa pouco usual em programao...
Este comando tem as seguintes sintaxes:
al eat or i o [ on]
Ativa a gerao de valores aleatrios que substituem a digitao de
dados. A palavra-chave on opcional. A faixa padro de valores
gerados de 0 a 100 inclusive. Para a gerao de dados do tipo
caractere, no h uma faixa pr-estabelecida: os dados gerados
sero sempre strings de 5 letras maisculas.
al eat or i o <valor1 > [ ,
<valor2 > ]
Ativa a gerao de dados numricos aleatrios estabelecendo uma
faixa de valores mnimos e mximos. Se apenas < valor1> for
fornecido, a faixa ser de 0 a <valor1> inclusive; caso contrrio,
a faixa ser de <valor1> a <valor2> inclusive. Se <valor2> for
menor que <valor1>, o VisuAlg os trocar para que a faixa fique
correta.
Importante: <valor1> e <valor2> devem ser constantes
numricas, e no expresses.
al eat or i o of f
Desativa a gerao de valores aleatrios. A palavra-chave of f
obrigatria.

Comando Arquivo
Muitas vezes necessrio repetir os testes de um programa com uma srie igual de dados. Para casos
como este, o VisuAlg permite o armazenamento de dados em um arquivo-texto, obtendo deles os dados
ao executar os comandos l ei a.
Esta caracterstica funciona da seguinte maneira:
1) Se no existir o arquivo com nome especificado, o VisuAlg far uma leitura de dados atravs da
digitao, armazenando os dados lidos neste arquivo, na ordem em que forem fornecidos.
2) Se o arquivo existir, o VisuAlg obter os dados deste arquivo at chegar ao seu fim. Da em diante,
far as leituras de dados atravs da digitao.
3) Somente um comando ar qui vo pode ser empregado em cada pseudocdigo, e ele dever estar
na seo de declaraes (dependendo do "sucesso" desta caracterstica, em futuras verses ela poder
ser melhorada...).
4) Caso no seja fornecido um caminho, o VisuAlg ir procurar este arquivo na pasta de trabalho
corrente (geralmente, a pasta onde o programa VISUALG.EXE est). Este comando no prev uma
extenso padro; portanto, a especificao do nome do arquivo deve ser completa, inclusive com sua
extenso (por exemplo, .txt, .dat, etc.).
A sintaxe do comando :
ar qui vo <nome-de-arquivo>
<nome-de-arquivo> uma constante caractere (entre aspas duplas). Veja o exemplo a seguir:
18

al gor i t mo " l endo do ar qui vo"
ar qui vo " t est e. t xt "
var x, y: i nt ei r o
i ni ci o
par a x de 1 at e 5 f aca
l ei a ( y)
f i mpar a
f i mal gor i t mo
Comando Timer
Embora o VisuAlg seja um interpretador de pseudocdigo, seu desempenho muito bom: o tempo gasto
para interpretar cada linha digitada apenas uma frao de segundo. Entretanto, por motivos
educacionais, pode ser conveniente exibir o fluxo de execuo do pseudocdigo comando por comando,
em "cmera lenta". O comando t i mer serve para este propsito: insere um atraso (que pode ser
especificado) antes da execuo de cada linha. Alm disso, reala em fundo azul o comando que est
sendo executado, da mesma forma que na execuo passo a passo.
Sua sintaxe a seguinte:
t i mer on Ativa o timer.
t i mer <tempo-de-
atraso>
Ativa o timer estabelecendo seu tempo de atraso em milissegundos. O
valor padro 500, que equivale a meio segundo. O argumento <tempo-
de-atraso> deve ser uma constante inteira com valor entre 0 e 10000.
Valores menores que 0 so corrigidos para 0, e maiores que 10000 para
10000.
t i mer of f Desativa o timer.
Ao longo do pseudocdigo, pode haver vrios comandos t i mer . Todos eles devem estar na seo de
comandos. Uma vez ativado, o atraso na execuo dos comandos ser mantido at se chegar ao final
do pseudocdigo ou at ser encontrado um comando t i mer of f .
Comandos de Depurao
Nenhum ambiente de desenvolvimento est completo se no houver a possibilidade de se inserir pontos
de interrupo (breakpoints) no pseudocdigo para fins de depurao. VisuAlg implementa dois
comandos que auxiliam a depurao ou anlise de um pseudocdigo: o comando pausa e o comando
debug.
Comando Pausa
Sua sintaxe simplesmente:
pausa
Este comando insere uma interrupo incondicional no pseudocdigo. Quando ele encontrado, o
VisuAlg pra a execuo do pseudocdigo e espera alguma ao do programador. Neste momento,
possvel: analisar os valores das variveis ou das sadas produzidas at o momento; executar o
pseudocdigo passo a passo (com F8); prosseguir sua execuo normalmente (com F9); ou
simplesmente termin-lo (com Ctrl-F2). Com exceo da alterao do texto do pseudocdigo, todas as
funes do VisuAlg esto disponveis.
19

Comando Debug
Sua sintaxe :
debug <expresso-lgica>
Se a avaliao de <expresso-lgica>resultar em valor VERDADEIRO, a execuo do
pseudocdigo ser interrompida como no comando pausa. Dessa forma, possvel a insero de um
breakpoint condicional no pseudocdigo.
Comando Eco
Sua sintaxe :
eco on | of f
Este comando ativa (eco on) ou desativa (eco of f ) a impresso dos dados de entrada na sada-padro
do VisuAlg, ou seja, na rea direita da parte inferior da tela. Esta caracterstica pode ser til quando
houver uma grande quantidade de dados de entrada, e se deseja apenas analisar a sada produzida.
Convm utiliz-la tambm quando os dados de entrada provm de um arquivo j conhecido.
Comando Cronmetro
Sua sintaxe :
cr onomet r o on | of f
Este comando ativa (cr onomet r o on) ou desativa (cr onomet r o of f ) o cronmetro interno do
VisuAlg. Quando o comando cr onomet r o on encontrado, o VisuAlg imprime na sada-padro a
informao "Cronmetro iniciado.", e comea a contar o tempo em milissegundos. Quando o comando
cr onomet r o of f encontrado, o VisuAlg imprime na sada-padro a informao "Cronmetro
terminado. Tempo decorrido: xx segundo(s) e xx ms". Este comando til na anlise de desempenho de
algoritmos (ordenao, busca, etc.).
Comando Limpatela
Sua sintaxe
l i mpat el a
Este comando simplesmente limpa a tela DOS do Visualg (a simulao da tela do computador). Ele no
afeta a "tela" que existe na parte inferior direita da janela principal do Visualg.


20

Auto-digitao e Sugesto de Digitao
Auto-digitao
O VisuAlg tem uma caracterstica para a criao de pseudocdigos que pode aumentar a rapidez da
digitao e tambm diminuir a possibilidade de erros: a auto-digitao. Para utilizar esta
caracterstica, basta escrever uma abreviatura da palavra-chave ou do comando a ser diigtado e teclar
Ctrl-Espao. O VisuAlg completa ento o comando automaticamente, colocando o cursor no ponto
adequado para se continuar a digitao (nos exemplos abaixo, este ponto indicado atravs de um *).
Eis a lista de abreviaturas com os respectivos comandos:
! - (Ponto de exclamao) Cria um modelo de pseudocdigo.
al gor i t mo " semnome"
*
i ni ci o
f i mal gor i t mo
#- Cria um cabealho de programa.
/ / Al gor i t mo : *
/ / Funo :
/ / Aut or :
/ / Dat a :
ale, aof, aon - Inserem os comandos al eat or i o, al eat or i o of f ou al eat or i o on, respectivamente.
alg - Insere a linha al gor i t mo e pede a digitao do seu nome.
al gor i t mo " *"
arq - Insere o comando ar qui vo e pede a digitao do seu nome.
ar qui vo " *"
cof, con - Inserem os comandos cr onomet r o of f ou cr onomet r o on, respectivamente.
dcc - Insere uma declarao de variveis caracteres.
var * : car act er e
dcl - Insere uma declarao de variveis lgicas.
var * : l ogi co
dcr - Insere uma declarao de variveis reais.
var * : r eal
deb - Insere o comando debug.
eof, eon - Inserem os comandos eco of f ou eco on, respectivamente.
esc - Insere o comando escr eva.
21

escl - Insere o comando escol ha (sem a clusula out r ocaso).
escol ha *
caso
f i mescol ha
esco - Insere o comando escol ha (com a clusula out r ocaso).
escol ha *
caso
out r ocaso
f i mescol ha
enq - Insere o comando enquant o.
enquant o * f aca
f i menquant o
fal - Insere a linha f i mal gor i t mo.
ini - Insere a linha i ni ci o.
int - Insere o comando i nt er r ompa.
lep - Insere o comando l ei a.
l ei a ( *)
par - Insere o comando par a.
par a * de 1 at e f aca
f i mpar a
parp - Insere o comando par a com passo.
par a * de at e passo f aca
f i mpar a
rep - Insere o comando r epi t a.
r epi t a
*
at e
repf - Insere o comando r epi t a com f i mr epi t a.
r epi t a
*
f i mr epi t a
see - Insere o comando se sem a alternativa senao.
se * ent ao
f i mse
ses - Insere o comando se completo.
22

se * ent ao
senao
f i mse
tim - Insere os comandos t i mer on e t i mer of f .
t i mer on
*
t i mer of f
tof, ton - Inserem os comandos t i mer on ou t i mer of f , respectivamente.
Sugesto de Digitao
A sugesto de digitao disponibilizada atravs das teclas Ctrl-J. Basta comear a digitao de uma
palavra e teclar Ctrl-J para que o VisuAlg mostre uma lista com sugestes de palavras-chave que
completam o que foi digitado. Para escolher, necessrio dar um duplo-clique sobre a opo desejada,
ou ento selecion-la com as setas e teclar Enter. Se o usurio continua escrevendo depois que o
VisuAlg apresentou a lista de sugestes, o programa continuar procurando palavras que ainda
complementem o que foi digitado. Ao se teclar Esc ou clicar "fora da lista", ela desaparece.


Referncias da Linguagem de Programao do VisuAlg
Nesta pgina esto todas as palavras-chave da linguagem de programao do VisuAlg. Em cada uma
delas, h um link para sua correspondente seo dentro das pginas de ajuda.
aleatorio
algoritmo
arquivo
ate
caractere
caso
cronometro
debug
e
eco
enquanto
entao
escolha
escreva
escreval
faca
falso
fimalgoritmo
fimenquanto
fimescolha
fimfuncao
fimpara
fimprocedimento
fimrepita
fimse
funcao
inicio
int
inteiro
interrompa
leia
limpatela
logico
mod
nao
ou
outrocaso
para
passo
pausa
real
procedimento
repita
retorne
se
senao
timer
var
vetor
verdadeiro
xou
23

Vous aimerez peut-être aussi