Vous êtes sur la page 1sur 32

http://tecnociencia.inf.

br

Lgica de
programao

Desenvolvimento
de Software
02 Lgica de programao
Desenvolver um software no uma tarefa difcil depois que o programado entende os fundamentos
da computao. Basicamente todas as linguagens so compostas de uma rotina similar de
implementao, mudando apenas os termos (sintaxe) dos comandos empregados. Existe ento um
raciocnio por trs do desenvolvimento de softwares. Este raciocnio empregado independente da
linguagem de programao que o profissional esteja usando.
Ao conhecer detalhadamente a lgica por trs do processo de desenvolvimento dos softwares o
profissional programa em qualquer ferramenta precisando apenas se ambientar com os detalhes
especficos da linguagem usada.
Por este motivo a Lgica de programao uma ferramenta indispensvel e um pr-requisito para
quem deseja aprender a desenvolver softwares computacionais.

Algoritmo

Todo o desenvolvimento de um software se baseia em uma lgica de instrues chamada de


algoritmos. Em outras palavras, um algoritmo basicamente uma seqncia de instrues com um
determinado objetivo.

Imagine que voc vai sair de casa para ir ao supermercado, esta simples tarefa exige uma seqncia
de instrues ou um algoritmo, veja:

1 Pegar chave da porta


2 Abrir porta
3 Fechar porta
4 Ir para o supermercado.

Imagine o que vai ocorrer se trocarmos a seqncia dos comandos conforme abaixo:

1 Fechar a porta
2 Abrir a porta
3 Pegar a chave
4 Ir ao supermercado

Se voc observar com ateno ira notar que a porta ficou aberta enquanto voc est no
supermercado, esta no uma boa idia.
Observe que para um algoritmo funcionar corretamente importante que ele seja ordenado de forma
coerente com o objetivo, uma seqncia de instrues fora de ordem pode causar uma srie de
transtornos.
Um programa de computador um algoritmo escrito em uma linguagem computacional.

Linguagem de programao
Chamamos de linguagem de programao a forma como os algoritmos podem ser escritos. Existem
vrias linguagens de programao como Delphi, Pascal, C, Basic e assim por diante. Cada
linguagem possui suas particularidades sempre respeitando a lgica de programao.
atravs das ferramentas da linguagem de programao que inserimos o algoritmo (seqncia de
instrues) para o computador executar.
03 Portugus estruturado
Uma forma bem didtica para absorver a lgica de programao consiste no uso de algoritmos em
lngua portuguesa para que o aluno consiga fixar a lgica do desenvolvimento de softwares.
Depois de fixar esta lgica, fica muito fcil programar em qualquer linguagem. Por este motivo
iremos neste primeiro contato com a lgica de programao trabalhar com o portugus estruturado.

Criando seu primeiro programa em portugus estruturado


A melhor maneira de aprender sobre lgica de programao programando. Por este motivo vamos
misturar aula pratica com teoria e criar um ambiente mais interativo para o aprendizado da
programao de softwares.
Os softwares se dividem conforme sua forma de execuo, basicamente existem duas formas de
funcionamento do software, a primeira a compilao e a segunda a interpretao.
Os softwares que funcionam baseados em interpretadores, atualmente so aqueles da internet.
Quando voc abre o seu browser e navega em uma pagina da internet o que ocorre que o browser
interpreta a informao e mostra para o usurio as imagens e informaes conforme o algoritmo
interpretado.
Os softwares compilados so aqueles que rodam na sua mquina e normalmente possuem a extenso
.EXE no windows, como o install.exe e diversos outros.
O software escrito em um editor especifico para a linguagem e depois que est pronto compilado
para ser distribudo.
Neste nosso primeiro contato vamos usar um editor para a linguagem do portugus estruturado e ao
invs de compilar o editor vai interpretar as orientaes do algoritmo que voc escrever.
Baixe o Interpretador IPE atravs da seo de downloads do seu curso, instale a ferramenta e passe
para a prxima aula onde vamos iniciar nosso primeiro algoritmo.

Manipulando o IPE.
Aps baixar e instalar o Interpretador do Portugus Estruturado IPE o aluno deve tentar executar a
ferramenta. Pode ocorrer do atalho no fixar o endereo do aplicativo, neste caso o aluno dever
entrar na pasta arquivo de programas achar o diretrio IPE e criar um atalho do executvel ipe.exe
para o desktop.
Agora que o aplicativo est instalado execute o atalho para abrirmos o editor de programao que
semelhante tela a baixo:
04
Assim que o aplicativo aberto o editor vai iniciar com as expresses Algoritmo e
FimAlgoritmo. Todos os comandos devem ser inseridos entre estas Expresses.

Vamos criar um algoritmo em portugus estruturado que calcula a mdia entre trs nmeros.
Escreva o cdigo abaixo e clique no boto play conforme imagem:

Algoritmo Media
Escreva( "Digite tres numeros" )
Leia( n1, n2, n3 )
med = (n1 + n2 + n3) / 3
Escreva( "Media = ", med )
FimAlgoritmo

No algoritmo acima as palavras em negrito so expresses da linguagem portugus estruturado,


vamos dar uma olhada no significado destas expresses.

Algoritmo - Marca o inicio do cdigo, seguido pelo nome do programa.

Escreva - Sempre que for necessrio mostrar na tela alguma informao usada esta expresso.

Leia - Usamos o comando leia para inserir alguma informao dentro do algoritmo. O comando
leia vai pedir ao usurio que insira uma informao que ser passada para uma varivel.

FimAlgoritmo - indica para o interpretador dos comandos que o algoritmo chegou ao seu final.

As informaes dentro dos parnteses ou que no esto em negrito so criadas pelo usurio
enquanto os comandos em negrito so determinados pelo interpretador e no podem ser
modificados. Basicamente um algoritmo funciona atravs de um determinado comando seguido
de uma informao.
05
Observe que no algoritmo escrito anteriormente o comando ESCREVA seguido pela informao
DIGITE TRES NUMEROS.

O comando Leia seguido pela informao varivel n1,n2,n3. vamos estudar as variveis mais
adiante.

Neste primeiro contato com o editor de programas em portugues estruturado o importante o


aluno exceutar o programa para ter uma noo do funcionamemento do editor. Pode parecer um
pouco confuso neste primeiro momento as informaes estudadas at aqui.

No se preocupe, na medida em que o estudante for se avanando as aulas tudo ser esclarecido.

Abra o seu editor IPE e execute o algoritmo comentado observando o funcionamento do


aplicativo e o resultado do algoritmo.

Nas proximas pginas vamos entrar no universo da lgica de programao.

Desenvolvendo algoritmos
Os algoritmos so descritos em uma linguagem chamada pseudocdigo. Este nome uma aluso
posterior implementao em uma linguagem de programao, ou seja, quando formos
programar em uma linguagem, por exemplo Pascal, estaremos gerando cdigo em Pascal.
Por isso os algoritmos so independentes das linguagens de programao.

O algoritmo deve ser fcil de se interpretar e fcil de codificar. Ou seja, ele deve ser o
intermedirio entre a linguagem falada e a linguagem de programao.

Para escrever um algoritmo precisamos descrever a seqncia de instrues, de maneira


simples e objetiva. Para isso utilizaremos algumas tcnicas:

- Usar somente um verbo por frase


- Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham
com informtica
- Usar frases curtas e simples
- Ser objetivo
- Procurar usar palavras que no tenham sentido dbio

No captulo anterior vimos que ALGORITMO uma seqncia lgica de instrues que
podem ser executadas.
importante ressaltar que qualquer tarefa que siga determinado padro pode ser descrita
Por um algoritmo, como por exemplo: Calcular a mdia de trs nmeros.

Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado


em trs fases fundamentais.

ENTRADA: So os dados de entrada do algoritmo.

PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final.

SADA: So os dados j processados.


06 Exemplo de Algoritmo
Imagine o seguinte problema: Calcular a mdia final dos alunos do curso de lgica. Os alunos
realizaro trs provas: P1, P2, P3. Onde a mdia final conseguida atravs da soma de todas as notas
das provas e depois dividindo por trs.

Para montar o algoritmo proposto, faremos trs perguntas:

a) Quais so os dados de entrada?


R: Os dados de entrada so nota 1,nota 2 e nota 3.

b) Qual ser o processamento a ser utilizado?


R: O procedimento ser somar todos os dados de entrada e dividi-los por 3 (trs).

c) Quais sero os dados de sada?


R: O dado de sada ser a mdia final.

Veja o Algoritmo:

Leia a nota da prova1


Leia a nota de prova2
Leia a nota de prova3
Some todas as notas e divida o resultado por 3
Escreva o resultado da diviso.

Veja o algoritmo em portugues estruturado:

Leia( n1, n2, n3 )


med = (n1 + n2 + n3) / 3
Escreva( "Media = ", med )

A varivel med vai receber o resultado do clculo aps o sinal de igual (=).

Diagrama de Bloco
O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de
um determinado processamento.
Com o diagrama podemos definir uma seqncia de smbolos, com significado bem definido,
portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento.

Existem diversos smbolos em um diagrama de bloco. No decorrer do treinamento observaremos


os mais utilizados.

http://tecnociencia.inf.br
07 Veja no quadro abaixo alguns dos smbolos que iremos utilizar:

Veja na imagem ao lado o algoritmo que calcula a


mdia de trs notas desenvolvido na forma de
diagrama em bloco.
08 Entendendo as variveis, constantes e tipos de dados
Variveis e constantes so os elementos bsicos que um programa manipula. Uma varivel
um espao reservado na memria do computador para armazenar um tipo de dado determinado.
Variveis devem receber nomes para poderem ser referenciadas e modificadas quando
necessrio. Um programa deve conter declaraes que especificam de que tipo so as variveis
que ele utilizar e as vezes um valor inicial. Tipos podem ser por exemplo: inteiros, reais,
caracteres, etc. As expresses combinam variveis e constantes para calcular novos valores.
Podemos afirmar que aVarivel a representao simblica dos elementos de um certo conjunto.
Cada varivel corresponde a uma posio de memria, cujo contedo pode se alterado ao longo
do tempo durante a execuo de um programa. Embora uma varivel possa assumir diferentes
valores, ela s pode armazenar um valor a cada instante.
Quando preenchemos um formulrio onde pedido o nome e a idade, podemos dizer que o
campo Nome e Idade so variveis. Observe que cada pessoa responde a estes campos com
informaes diferentes.
O nome pode ser Jos, Joo, Batista e assim por diante. O mesmo ocorre com a idade que pode
ser 10, 20, 37 anos, etc.
Normalmente todo formulrio ou ficha cadastral repleto de campos com solicitao de dados
como RG, endereo, estado, situao civil, etc. todos estes campos podemos considerar dados
variveis.
Em nosso primeiro algoritmo usamos as variveis n1,n2 e n3 para receber os nmeros e a
varivel med para receber o resultado da soma das notas dividida por 3.

Constante:
Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a
execuo de um programa. Conforme o seu tipo, a constante classificada como sendo
numrica, lgica e literal.

Exemplo de constantes:
Em nosso algoritmo dividimos as variaveis n1,n2 e n3 pelo numero 3.
Observe que o numero trs no muda quando o programa executado, dizemos ento que o
numero 3 uma constante.

Tipos de Variveis
As variveis e as constantes podem ser basicamente de quatro tipos: Numricas, caracteres,
Alfanumricas ou lgicas.

Numricas: Especficas para armazenamento de nmeros, que posteriormente podero ser


utilizados para clculos. Podem ser ainda classificadas como Inteiras ou Reais.

As variveis do tipo inteiro so para armazenamento de nmeros inteiros e as Reais so para o


armazenamento de nmeros que possuam casas decimais.

Caracteres: Especficas para armazenamento de conjunto de caracteres que no


contenham nmeros (literais). Ex: nomes.

Alfanumricas: Especficas para dados que contenham letras e/ou nmeros. Pode em
determinados momentos conter somente dados numricos ou somente literais. Se usado somente
para armazenamento de nmeros, no poder ser utilizada para operaes matemticas.

Lgicas: Armazenam somente dados lgicos que podem ser Verdadeiro ou Falso.

As variveis s podem armazenar valores de um mesmo tipo, de maneira que tambm so


classificadas como sendo numricas, lgicas e literais.
09 Operadores
Os operadores so meios no qual decrementamos, incrementamos, comparamos e avaliamos dados
dentro do computador. Temos trs tipos de operadores:

- Operadores Aritmticos
- Operadores Relacionais
- Operadores Lgicos

Operadores Aritmticos:

Os operadores aritmticos servem para obter resultados numricos.


Os smbolos para os operadores aritmticos so:

Adio +
Subtrao -
Multiplicao *
Diviso /
Exponenciao **

As Operaes Aritmticas trabalham respeitando a hierarquia matemtica, os calclos so feitos


conforme ordem abaixo:

1 ( ) Parnteses
2 Exponenciao
3 Multiplicao, diviso (o que aparecer primeiro)
4 + ou (o que aparecer primeiro)

Operadores Relacionais:
Os operadores relacionais so utilizados para comparar String de caracteres e nmeros.
Estes operadores sempre retornam valores lgicos (verdadeiro ou falso/ True ou False)
Para estabelecer prioridades sobre qual operao executar primeiro, utilize parnteses.

Os operadores relacionais so:

Igual a =
Diferente de <> ou #
Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=

Operadores Lgicos:
Os operadores lgicos servem para combinar resultados de expresses, avaliando se o
resultado final verdadeiro ou falso.
Os operadores lgicos so:

E- representado pelo ingles AND verdadeiro se todas as condies forem verdadeiras.


OU - representado pelo ingles OR verdadeiro se pelo menos uma condio for verdadeira.
NO - representado pelo ingles NOT inverte o valor da expresso ou condio, se verdadeiro
inverte para falsa e vice-versa.

Operaes Lgicas so utilizadas quando se torna necessrio tomar decises em um algoritmo.


Todas as decises ocorrem atravs dos operadores lgicos e os comandos de deciso .
10 muito importante compreender o funcionamento dos operadores. Os algoritmos dependem
diretamente de operadores para pleno funcionamento.

Para sabermos se um estudante passou ou no com mdia satisfatria usaremos um algoritmo que
compare qual a mdia adequada. Veja um exemplo:

Se mdia for maior ou igual a 7.0 ento estuante aprovado se no estudante reprovado.

Em portugues estruturado teremos:

Se (med >= 7)
entao
escreva("Estudante Aprovado")
senao
escreva("Estudante Reprovado")
Fimse

Nosso programa completo usando os operadores pode ser desenvolvido atravs do algoritomo
abaixo, para testar escreva e execute o algoritmo no IPE.

Algoritmo Media

Escreva( "Digite tres numeros" )


Leia( n1, n2, n3 )
med = (n1 + n2 + n3) / 3
Escreva( "Media = ", med )

Se (med >= 7)
entao
escreva("Estudante Aprovado")
senao
escreva("Estudante Reprovado")
Fimse

FimAlgoritmo
11 Entendendo os comandos de repetio e deciso
Os comandos de deciso ou desvio fazem parte das tcnicas que conduzem a estruturas de
programas que no so totalmente em sequencia. Com as instrues de
SALTO ou DESVIO possivel fazer com que o programa proceda de uma maneira ou outra, de
acordo com as decises lgicas tomadas em funo dos dados ou resultados anteriores. As estruturas
de deciso mais usadas so: Se Ento, Se ento Seno e Caso Selecione.

SE ENTO

A estrutura de deciso SE normalmente vem acompanhada de um comando, ou seja, se determinada


condio for satisfeita pelo comando SE ento executado determinado comando.
Imagine um algoritmo que o aluno somente estar aprovado se a mdia for maior ou igual a 7.0, veja
no exemplo abaixo:.
SE MEDIA >= 7 ENTO ALUNO APROVADO

SE ENTO SENO

A estrutura de deciso SE/ENTO/SENO, funciona exatamente como a estrutura SE, com


apenas uma diferena, em SE somente podemos executar comandos caso a condio verdadeira,
diferente de SE/SENO pois sempre um comando ser executado independente da condio, ou
seja, caso a condio seja verdadeira o comando da condio ser executado, caso contrrio o
comando da condio falsa ser executado.

Veja exemplo abaixo::

SE MDIA >= 5.0 ENTO


ALUNO APROVADO
SENO
ALUNO REPROVADO

CASO SELECIONE

A estrutura de deciso CASO/SELECIONE utilizada para testar, na condio, uma nica


expresso, que produz um resultado, ou, ento, o valor de uma varivel, em que est armazenado um
determinado contedo. Compara-se, ento, o resultado obtido no
teste com os valores fornecidos em cada clusula Caso.

No exemplo do diagrama de blocos abaixo, recebida uma varivel Op e testado seu contedo,
caso uma das condies seja satisfeita, atribudo para a varivel Titulo a String Opo X, caso
contrrio atribudo a string Opo Errada.

http://tecnociencia.inf.br
12 Comandos de Repetio
Utilizamos os comandos de repetio quando desejamos que um determinado conjunto de
instrues ou comandos sejam executados um nmero definido ou indefinido de vezes, ou enquanto
um determinado estado de coisas prevalecer ou at que seja alcanado.

Veja abaixo alguns modelos de comandos de repetio:

- Enquanto x, processar
- At que x, processar ...
- Processar ..., Enquanto x
- Processar ..., At que x
- Para ... At ... Seguinte

Enquanto x, Processar
Neste caso, o bloco de operaes ser executado enquanto a condio x for
verdadeira. O teste da condio ser sempre realizado antes de qualquer operao.
Enquanto a condio for verdadeira o processo se repete. Podemos utilizar essa estrutura
para trabalharmos com contadores.

At que x, processar ...


Neste caso, o bloco de operaes ser executado at que a condio seja
satisfeita, ou seja, somente executar os comandos enquanto a condio for falsa.

Processar ..., Enquanto x


Neste caso primeiro so executados os comandos, e somente depois
realizado o teste da condio. Se a condio for verdadeira, os comandos so
executados novamente, caso seja falso encerrado o comando DO.

Processar ..., At que x


Neste caso, executa-se primeiro o bloco de operaes e somente depois realizado o
teste de condio. Se a condio for verdadeira, o fluxo do programa continua normalmente. Caso
contrrio processado novamente os comandos antes do teste da condio.

http://tecnociencia.inf.br
13
Apresentao
Na aula anterior foi possvel obter um primeiro contato com a lgica de programao e o uso
superficial do interpretado de comando em portugus estruturado conhecido como IPE
(interpretador portugus estruturado).

Nas prximas pginas iremos aprofundar o uso do portugus estruturado, para esta tarefa ser usado
o VISUALG, este um interpretador mais robusto que exige maior ateno do programador.

Vamos iniciar o treinamento apresentando a ferramenta e suas funes seguindo para os conceitos da
lgica de programao.

A melhor maneira de aprender a programar praticando, por este motivo durante os estudos ser
necessrio efetuar alguns programas como complemento da prova. Ao ler esta aula mantenha perto
uma caneta e papel para escrever suas dvidas no momento que vo surgindo.
Normalmente ao deixar para lembrar a dvida em outra ocasio provavel que o problema seja
esquecido.

Seja bemvindo!

Introduo
A tela do VisuAlg compe-se da barra de tarefas, do editor de textos (que toma toda a sua metade
superior), do quadro de variveis (no lado esquerdo da metade inferior), do simulador de sada (no
correspondente lado direito) e da barra de status. Quando o programa carregado, j apresenta no
editor um "esqueleto" de pseudocdigo, com a inteno de poupar trabalho ao usurio e de mostrar o
formato bsico que deve ser seguido. Explicaremos a seguir cada componente da interface do
VisuAlg.
14 A Barra de Tarefas
Contm os comandos mais utilizados no VisuAlg (estes comandos tambm podem ser acessados
pelo menu ou por atalhos no teclado).

Abrir (Ctrl-A): Abre um arquivo anteriormente gravado, substituindo o texto presente no editor.
Se este tiver sido modificado, o VisuAlg pedir sua confirmao para salv-lo antes que seja
sobreposto.
Novo (Ctrl-N): Cria um novo "esqueleto" de pseudocdigo, substituindo o texto presente no
editor. Se este tiver sido modificado, o VisuAlg pedir sua confirmao para salv-lo antes que
seja sobreposto.
Salvar (Ctrl-S): Grava imediatamente o texto presente no editor. Na primeira vez que um novo
texto gravado, o VisuAlg pede seu nome e localizao.
Imprimir: Imprime imediatamente na impressora padro o texto presente no editor. Para
configurar a impresso, use o comando Imprimir do menu Arquivo (acessvel tambm pelo
atalho Ctrl-P).
Cortar (Ctrl-X): Apaga texto selecionado, armazenando-o em uma rea de transferncia.
Copiar (Ctrl-C): Copia o texto selecionado para a rea de transferncia.
Colar (Ctrl-V): Copia texto da rea de transferncia para o local em que est o cursor.
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.
Desfazer (Ctrl-Z): Desfaz ltimo comando efetuado.
Refazer (Shift-Ctrl-Z): Refaz ltimo comando desfeito.
Localizar (Ctrl-L): Localiza no texto presente no editor determinada palavra especificada.
Substituir (Ctrl-U): Localiza no texto presente no editor determinada palavra especificada,
substituindo-a por outra.
Corrigir Indentao (Ctrl-G): Corrige automaticamente a indentao (ou tabulao) do
pseudocdigo, tabulando cada comando interno com espaos esquerda.
Numerar linhas: Ativa ou desativa a exibio dos nmeros das linhas na rea esquerda do
editor. A linha e a coluna do editor em que o cursor est em um determinado momento tambm
so mostradas na barra de status (parte inferior da tela). Por motivos tcnicos, esta opo
automaticamente desativada durante a execuo do pseudocdigo, mas volta a ser ativada logo
em seguida.
Mostrar variveis modificadas: Ativa ou 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.
Restaurar tela inicial: Retorna a diviso da tela ao formato inicial, caso voc tenha mudado o
tamanho da rea do editor de texto, quadro de variveis ou simulador de sada.
15

Executar (F9): Inicia (ou continua) a execuo automtica do pseudocdigo.


Executar com timer (Shift-F9): Insere um atraso (que pode ser especificado no intervalo ao lado)
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.
Intervalo do timer: Atraso em cada linha, para quando se deseja executar o pseudocdigo com
timer.
Passo (F8): 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.
Parar (Ctrl-F2): Termina imediatamente a execuo do pseudocdigo. Evidentemente, este boto
fica desabilitado quando o pseudocdigo no est sendo executado.
Liga/desliga breakpoint (F5): 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 (Ctrl-F5): 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 (basta
alterar intervalo ao lado). Para a gerao de dados do tipo caractere, no h uma faixa pr-
estabelecida: os dados gerados sero sempre strings de 5 letras maisculas.
Intervalo dos valores aleatrios: Faixa de valores que sero gerados automaticamente, quando
esta opo estiver ativada.
Perfil (F7): 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).
Mostrar pilha de ativao (Ctrl-F3): Exibe a pilha de subprogramas ativados num dado
momento. Convm utilizar este comando em conjunto com breakpoints ou com a execuo passo
a passo.
Ajuda (F1): Possibilita acesso s pginas de ajuda e s informaes sobre o VisuAlg.

Quadro de Variveis
formado por uma grade na qual so mostrados o escopo de cada varivel (se for do programa
principal, ser global; se for local, ser apresentado o nome do subprograma onde foi declarada),
seus nomes (tambm com os ndices, nos casos em que sejam vetores), seu tipo ("I" para inteiro,
"R" para real, "C" para caractere e "L" para lgico) e o seu valor corrente. A verso atual do
VisuAlg permite a visualizao de at 500 variveis (contando individualmente cada elemento
dos vetores).
16 A Barra de Status
Situada na parte inferior da tela, esta barra contm dois painis: o primeiro mostra a linha e a coluna
onde o cursor est, e o segundo mostra a palavra Modificado no caso em que o pseudocdigo tenha
sido alterado desde que foi carregado ou salvo pela ltima vez. Nesta barra, h ainda um terceiro
painel disponvel, que ainda no tem um uso especfico na atual verso.

Menu do VisuAlg
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.
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.
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.
17 A Linguagem de Programao do VisuAlg
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
logico, o comando se..ento..seno definido como se..entao..senao, e assim por diante. O
VisuAlg tambm no distingue maisculas e minsculas no reconhecimento de palavras-chave e
nomes de variveis.

Formato Bsico do Pseudocdigo e Incluso de Comentrios

algoritmo "semnome"
// Funo :
// Autor :
// Data :
// Seo de Declaraes
inicio
// Seo de Comandos
fimalgoritmo

A primeira linha composta pela palavra-chave algoritmo 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 inicio. Deste ponto
em diante est a seo de comandos, que continua at a linha em que se encontre a palavra-chave
fimalgoritmo. 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 "//".
18 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):

- inteiro: define variveis numricas do tipo inteiro, ou seja, sem casas decimais.
- real: define variveis numricas do tipo real, ou seja, com casas decimais.
- caractere: define variveis do tipo string, ou seja, cadeia de caracteres.
- logico: 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


vetor, 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> : vetor "["<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>

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: inteiro
Valor1, Valor2: real
vet: vetor [1..10] de real
matriz: vetor [0..4,8..10] de inteiro
nome_do_aluno: caractere
sinalizador: logico

Note que no h 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 matriz 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).

http://tecnociencia.inf.br
19 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
Valor1 <- 1.5
Valor2 <- Valor1 + a
vet[1] <- vet[1] + (a * 3)
matriz[3,9] <- a/4 - 5
nome_do_aluno <- "Jos da Silva"
sinalizador <- FALSO

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).
20 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: "Rio " + " de Janeiro" = "Rio
de Janeiro".

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 VERDADEIRO ; "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 < VERDADEIRO.

Operadores Lgicos

nao Operador unrio de negao. nao VERDADEIRO = FALSO, e nao FALSO =


VERDADEIRO. Tem a maior precedncia entre os operadores lgicos. Equivale ao NOT do
Pascal.

ou Operador que resulta VERDADEIRO quando um dos seus operandos lgicos for
verdadeiro. Equivale ao OR do Pascal.

e Operador que resulta VERDADEIRO somente se seus dois operandos lgicos forem
verdadeiros. Equivale ao AND do Pascal.

xou Operador que resulta VERDADEIRO se seus dois operandos lgicos forem diferentes, e
FALSO se forem iguais. Equivale ao XOR do Pascal.

Comandos de Sada de Dados


escreva (<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 escreva(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 escreva(y:6:2)escreve seu valor em 6 espaos colocando 2 casas
decimais.

escreval (<lista-de-expresses>).

Idem ao anterior, com a nica diferena que pula uma linha em seguida. equivalente ao writeln
do Pascal.
21 Exemplos:

algoritmo "exemplo"

var x: real
y: inteiro
a: caractere
l: logico

inicio
x <- 2.5
y <- 6
a <- "teste"
l <- VERDADEIRO

escreval ("x", x:4:1, y+3:4) // Escreve: x 2.5 9


escreval (a, "ok") // Escreve: testeok (e depois pula linha)
escreval (a, " ok") // Escreve: teste ok (e depois pula linha)
escreval (a + " ok") // Escreve: teste ok (e depois pula linha)
escreva (l) // Escreve: VERDADEIRO

fimalgoritmo

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.

Comando de Entrada de Dados


leia (<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:


algoritmo "exemplo 1"

var x: inteiro;
inicio
leia (x)
escreva (x)
fimalgoritmo
O comando de leitura acima ir exibir uma janela como a que se v ao lado, com a mensagem
padro:
"Entre com o valor de <nome-de-varivel>"

Se voc clicar em Cancelar ou teclar Esc durante a leitura de dados, o programa ser
imediatamente interrompido.
22 Comando de Desvio Condicional
se <expresso-lgica> entao
<seqncia-de-comandos>
fimse

Ao encontrar este comando, o VisuAlg analisa a <expresso-lgica>. Se o seu resultado for


VERDADEIRO, todos os comandos da <seqncia-de-comandos> (entre esta linha e a linha
com fimse) so executados. Se o resultado for FALSO, estes comandos so desprezados e a
execuo do algoritmo continua a partir da primeira linha depois do fimse.

se <expresso-lgica> entao
<seqncia-de-comandos-1>
senao
<seqncia-de-comandos-2>
fimse

Nesta outra forma do comando, se o resultado da avaliao de <expresso-lgica> for


VERDADEIRO, 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
fimse. 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 fimse).
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 fimse. O VisuAlg permite o aninhamento desses
comandos de desvio condicional.

Comando de Seleo Mltipla


O VisuAlg implementa (com certas variaes) o comando case do Pascal. A sintaxe :

escolha <expresso-de-seleo>
caso <exp11>, <exp12>, ..., <exp1n>
<seqncia-de-comandos-1>
caso <exp21>, <exp22>, ..., <exp2n>
<seqncia-de-comandos-2>
...
outrocaso
<seqncia-de-comandos-extra>
fimescolha

Veja o exemplo a seguir, que ilustra bem o que faz este comando:
algoritmo "Times"
var time: caractere
inicio
escreva ("Entre com o nome de um time de futebol: ")
leia (time)
escolha time
caso "Flamengo", "Fluminense", "Vasco", "Botafogo"
escreval (" um time carioca.")
caso "So Paulo", "Palmeiras", "Santos", "Cornthians"
escreval (" um time paulista.")
outrocaso
escreval (" de outro estado.")
fimescolha
fimalgoritmo
23 Comandos de Repetio
O VisuAlg implementa as trs estruturas de repetio usuais nas linguagens de programao: o
lao contado para...ate...faca (similar ao for...to...do do Pascal), e os laos condicionados
enquanto...faca (similar ao while...do) e repita...ate (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.
para <varivel> de <valor-inicial> ate <valor-limite> [passo <incremento>] faca
<seqncia-de-comandos>
fimpara

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.

enquanto ... faa


Esta estrutura repete uma seqncia de comandos enquanto uma determinada condio
(especificada atravs de uma expresso lgica) for satisfeita.
enquanto <expresso-lgica> faca
<seqncia-de-comandos>
fimenquanto

Importante: Como o lao enquanto...faca testa sua condio de parada antes de executar sua
seqncia de comandos, esta seqncia poder ser executada zero ou mais vezes.

repita ... at
Esta estrutrura repete uma seqncia de comandos at que uma determinada condio
(especificada atravs de uma expresso lgica) seja satisfeita.
repita
<seqncia-de-comandos>
ate <expresso-lgica>

Importante: Como o lao repita...ate 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 interrompa, que causa uma
sada imediata do lao. Embora esta tcnica esteja de certa forma em desacordo com os
princpios da programao estruturada, o comando interrompa 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 na prxima pgina.

http://tecnociencia.inf.br
24 Algoritmo "Nmeros de 1 a 10 (com interrompa)"
var x: inteiro
inicio
x <- 0
repita
x <- x + 1
escreva (x:3)
se x = 10 entao
interrompa
fimse
ate falso
fimalgoritmo

O VisuAlg permite ainda uma forma alternativa do comando repita...ate, com a seguinte sintaxe:

algoritmo "Nmeros de 1 a 10 (com interrompa) II"


var x: inteiro
inicio
x <- 0
repita
x <- x + 1
escreva (x:3)
se x = 10 entao
interrompa
fimse
fimrepita
fimalgoritmo

Com esta sintaxe alternativa, o uso do interrompa obrigatrio, pois a nica maneira de se sair
do lao repita...fimrepita; caso contrrio, este lao seria executado indeterminadamente.
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.
25 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 inicio do programa principal, segue a sintaxe abaixo:
procedimento <nome-de-procedimento> [(<seqncia-de-declaraes-de-parmetros>)]
// Seo de Declaraes Internas
inicio
// Seo de Comandos
fimprocedimento
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>
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
res:
procedimento soma
var aux: inteiro
inicio
// n, m e res so variveis globais
aux <- n + m
res <- aux
fimprocedimento
No programa principal deve haver os seguintes comandos:
n <- 4
m <- -9
soma
escreva(res)

A mesma tarefa poderia ser executada atravs de um procedimento com parmetros, como
descrito abaixo:
procedimento soma (x,y: inteiro)
inicio
// res varivel global
res <- x + y
fimprocedimento
No programa principal deve haver os seguintes comandos:
n <- 4
m <- -9
soma(n,m)
escreva(res)

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.
26 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 inicio do programa principal, e segue a sintaxe abaixo:
funcao <nome-de-funo> [(<seqncia-de-declaraes-de-parmetros>)]: <tipo-de-dado>
// Seo de Declaraes Internas
inicio
// Seo de Comandos
fimfuncao
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>
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 retorne.

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 res:
funcao soma: inteiro
var aux: inteiro
inicio
// n, m e res so variveis globais
aux <- n + m
retorne aux
fimfuncao
No programa principal deve haver os seguintes comandos:
n <- 4
m <- -9
res <- soma
escreva(res)

Se realizssemos essa mesma tarefa com uma funo com parmetros passados por valor,
poderia ser do seguinte modo:
funcao soma (x,y: inteiro): inteiro
inicio
retorne x + y
fimfuncao
No programa principal deve haver os seguintes comandos:
n <- 4
m <- -9
res <- soma(n,m)
escreva(res)
27
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.
Voltando ao exemplo da soma, o procedimento abaixo realiza a mesma tarefa utilizando
passagem de parmetros por referncia:

procedimento soma (x,y: inteiro; var result: inteiro)


inicio
result <- x + y
fimprocedimento
No programa principal deve haver os seguintes comandos:
n <- 4
m <- -9
soma(n,m,res)
escreva(res)

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:

funcao fatorial (v: inteiro): inteiro


inicio
se v <= 2 entao
retorne v
senao
retorne v * fatorial(v-1)
fimse
fimfuncao

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.

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.

http://tecnociencia.inf.br
28 Comando Aleatrio
Muitas vezes a digitao de dados para o teste de um programa torna-se uma tarefa entediante.
Com o uso do comando aleatorio do VisuAlg, sempre que um comando leia 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:

aleatorio [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.

aleatorio <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.

aleatorio off
Desativa a gerao de valores aleatrios. A palavra-chave off 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 leia.
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 arquivo 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 :
arquivo <nome-de-arquivo>
<nome-de-arquivo> uma constante caractere (entre aspas duplas).

Veja o exemplo a seguir:


algoritmo "lendo do arquivo"
arquivo "teste.txt"
var x,y: inteiro
inicio
para x de 1 ate 5 faca
leia (y)
fimpara
fimalgoritmo
29 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 timer 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 :

timer on
Ativa o timer.

timer <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.

timer off
Desativa o timer.

Ao longo do pseudocdigo, pode haver vrios comandos timer. 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 timer off.

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.

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.
30 Comando Eco
Sua sintaxe :
eco on | off

Este comando ativa (eco on) ou desativa (eco off) 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 :
cronometro on | off

Este comando ativa (cronometro on) ou desativa (cronometro off) o cronmetro interno do
VisuAlg. Quando o comando cronometro on encontrado, o VisuAlg imprime na sada-padro a
informao "Cronmetro iniciado.", e comea a contar o tempo em milissegundos. Quando o
comando cronometro off 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
Limpatela

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.
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.

Funes
Toda linguagem de programao j vem com um grupo de funes que facilitam a vida do
www.tecnociencia.jor.br

programador. Estas funes realizam os clculos aritmticos, trigonomtricos e de manipulao e


converso de dados mais comuns; assim, o programador no tem que reinventar a roda a cada
programa que faz. A este grupo de funes d-se s vezes o nome de biblioteca.

Como usar uma funo? Em termos simples, uma funo pode ser usada em qualquer lugar onde
uma varivel tambm pode, a no ser, naturalmente, no "lado esquerdo da seta" em um comando
de atribuio - uma funo produz (diz-se no linguajar dos programadores retorna) um valor, e
no o recebe.

Veja na proxima pgina as funes do visualg.


31 Funes numricas, algbricas e trigonomtricas
Abs( expresso) - Retorna o valor absoluto de uma expresso do tipo inteiro ou real. Equivale a |
expresso | na lgebra.
ArcCos( expresso) - Retorna o ngulo (em radianos) cujo co-seno representado por expresso.
ArcSen( expresso) - Retorna o ngulo (em radianos) cujo seno representado por expresso.
ArcTan( expresso) - Retorna o ngulo (em radianos) cuja tangente representada por expresso.
Cos( expresso) - Retorna o co-seno do ngulo (em radianos) representado por expresso.
CoTan( expresso) - Retorna a co-tangente do ngulo (em radianos) representado por expresso.
Exp( base, expoente) - Retorna o valor de base elevado a expoente, sendo ambos expresses do
tipo real.
GraupRad( expresso) - Retorna o valor em radianos correspondente ao valor em graus
representado por expresso.
Int( expresso) - Retorna a parte inteira do valor representado por expresso.
Log( expresso) - Retorna o logaritmo na base 10 do valor representado por expresso.
LogN( expresso) - Retorna o logaritmo neperiano (base e) do valor representado por expresso.
Pi - Retorna o valor 3.141592.
Quad( expresso) - Retorna quadrado do valor representado por expresso.
RadpGrau( expresso) - Retorna o valor em graus correspondente ao valor em radianos
representado por expresso.
RaizQ( expresso) - Retorna a raiz quadrada do valor representado por expresso.
Rand - Retorna um nmero real gerado aleatoriamente, maior ou igual a zero e menor que um.
RandI( limite) - Retorna um nmero inteiro gerado aleatoriamente, maior ou igual a zero e
menor que limite.
Sen( expresso) - Retorna o seno do ngulo (em radianos) representado por expresso.
Tan( expresso) - Retorna a tangente do ngulo (em radianos) representado por expresso.
Os valores que esto entre parnteses, representados pelas palavras como expresso, base e
expoente, so os parmetros, ou como dizem alguns autores, os argumentos que passamos para a
funo para que realize seus clculos e retorne um outro, que usaremos no programa. Algumas
funes, como Pi e Rand, no precisam de parmetros, mas a maioria tem um ou mais. O valor
dos parmetros naturalmente altera o valor retornado pela funo.

A seguir temos alguns exemplos que ilustram o uso destas funes.


algoritmo "exemplo_funcoes"
var a, b, c : real
inicio
a <- 2
b <- 9
escreval( b - a ) // ser escrito 7 na tela
escreval( abs( a - b ) ) // tambm ser escrito 7 na tela
c <- raizq( b ) // c recebe 3, a raiz quadrada de b, que 9
// A frmula da rea do crculo pi (3.1416) vezes raio ao quadrado...
escreval("A rea do circulo com raio " , c , " " , pi * quad(c) )
// Um pouco de trigonometria...
escreval("Um ngulo de 90 graus tem " , grauprad(90) , " radianos" )
escreval( exp(a,b) ) // escreve 2 elevado 9, que 512
// escreve 1, que a parte inteira de 1.8, resultado de 9/(3+2)
escreval( int( b / ( a + c ) ) )
Fimalgoritmo

Importante: Aps o simbolo // o interpretador ignora o que escrito, este mtodo usado para
manter comentrios ao longo do algoritmo tornando mais facil de entender para o programador.

Use sempre comentrios e lembretes em seus aplicativos, assim facilitar o desenvolvimento.


32 Funes para manipulao de cadeias de caracteres (strings)
Asc (s : caracter) : Retorna um inteiro com o cdigo ASCII do primeiro caracter da expresso.
Carac (c : inteiro) : Retorna o caracter cujo cdigo ASCII corresponde expresso.
Caracpnum (c : caracter) : Retorna o inteiro ou real representado pela expresso. Corresponde a
StrToInt() ou StrToFloat() do Delphi, Val() do Basic ou Clipper, etc.
Compr (c : caracter) : Retorna um inteiro contendo o comprimento (quantidade de caracteres) da
expresso.
Copia (c : caracter ; p, n : inteiro) : Retorna um valor do tipo caracter contendo uma cpia parcial
da expresso, a partir do caracter p, contendo n caracteres. Os caracteres so numerados da
esquerda para a direita, comeando de 1. Corresponde a Copy() do Delphi, Mid$() do Basic ou
Substr() do Clipper.
Maiusc (c : caracter) : Retorna um valor caracter contendo a expresso em maisculas.
Minusc (c : caracter) : Retorna um valor caracter contendo a expresso em minsculas.
Numpcarac (n : inteiro ou real) : Retorna um valor caracter contendo a representao de n como
uma cadeia de caracteres. Corresponde a IntToStr() ou FloatToStr() do Delphi, Str() do Basic ou
Clipper.
Pos (subc, c : caracter) : Retorna um inteiro que indica a posio em que a cadeia subc se
encontra em c, ou zero se subc no estiver contida em c. Corresponde funcionalmente a Pos() do
Delphi, Instr() do Basic ou At() do Clipper, embora a ordem dos parmetros possa ser diferente
em algumas destas linguagens.

A seguir temos alguns exemplos que ilustram o uso destas funes.


algoritmo "exemplo_funcoes2"
var
a, b, c : caracter
inicio
a <- "2"
b <- "9"
escreval( b + a ) // ser escrito "92" na tela
escreval( caracpnum(b) + caracpnum(a) ) // ser escrito 11 na tela
escreval( numpcarac(3+3) + a ) // ser escrito "62" na tela
c <- "Brasil"
escreval(maiusc(c)) // ser escrito "BRASIL" na tela
escreval(compr(c)) // ser escrito 6 na tela
b <- "O melhor do Brasil"
escreval(pos(c,b)) // ser escrito 13 na tela
escreval(asc(c)) // ser escrito 66 na tela - cdigo ASCII de "B"
a <- carac(65) + carac(66) + carac(67)
escreval(a) // ser escrito "ABC" na tela
Fimalgoritmo

Orientao:
Baixe o Visualg na sala de treinamento e pratique o manuseio do interpretador.
Desenvolva um aplicativo que calcule a idade de uma pessoa perguntando a data de nascimento,
aps calcular a idade o algoritmo deve mostrar o tempo total de vida desta pessoa em horas e
tambem o total de batimentos cardiacos, levando em considerao que a mdia de 60
batimentos por minuto.

Entre com sua data de nascimento.........


Sua idade ........
Voce j viveu .......... Horas
Seu carao j bateu ..........vezes