Sei sulla pagina 1di 17

A Linguagem de Programao do VisuAlg

Introduo A linguagem que o VisuAlg interpreta bem simples: uma verso portuguesa dos pseudocdigos largamente utilizados nos livros de introduo programao, con ecida como !Portugol!" #omei a liberdade de acrescentar$l e alguns comandos novos, com o intuito de criar %acilidades espec&%icas para o ensino de tcnicas de elaborao de algoritmos" 'nicialmente, pensava em criar uma sinta(e muito simples e !liberal!, para que o usu)rio se preocupasse apenas com a lgica da resoluo dos problemas e no com as palavras$c ave, pontos e v&rgulas, etc" *o entanto, c eguei depois concluso de que alguma %ormalidade seria no s necess)ria como +til, para criar um sentido de disciplina na elaborao do !cdigo$%onte!" A linguagem do VisuAlg permite apenas um comando por linha: desse modo, no ) necessidade de tokens separadores de estruturas, como o ponto e v&rgula em Pascal" #ambm no e(iste o conceito de blocos de comandos ,que correspondem ao begin e end do Pascal e ao { e } do -., nem comandos de desvio incondicional como o goto" *a verso atual do VisuAlg, com e(ceo das rotinas de entrada e sa&da, no ) nen um subprograma embutido, tal como Inc(), Sqr(), Ord(), Chr(), Pos(), Copy() ou outro" Importante: para %acilitar a digitao e evitar con%us/es, todas as palavras$c ave do VisuAlg %oram implementadas sem acentos, cedil a, etc" Portanto, o tipo de dados lgico de%inido como logico, o comando se..ento..seno de%inido como se..entao..senao, e assim por diante" 0 VisuAlg tambm no distingue mai+sculas e min+sculas no recon ecimento de palavras$c ave e nomes de vari)veis" Formato Bsico do Pseudocdigo e Incluso de Comentrios 0 %ormato b)sico do nosso pseudocdigo o seguinte: algoritmo "semnome" // Funo : // Autor : // Data : // Seo de Declaraes inicio // Seo de Comandos fimalgoritmo A primeira lin a composta pela palavra$c ave algoritmo seguida do seu nome delimitado por aspas duplas" 1ste nome ser) usado como t&tulo nas 2anelas de leitura de dados ,nas %uturas vers/es do VisuAlg, talvez utilizemos este dado de outras %ormas." A seo que se segue a de declarao de vari)veis, que termina com a lin a que contm a palavra$c ave inicio" 3este ponto em diante est) a seo de comandos, que continua at a lin a em que se encontre a palavra$c ave fimalgoritmo" 1sta +ltima lin a marca o %inal do pseudocdigo: todo te(to e(istente a partir dela ignorado pelo interpretador" 0 VisuAlg permite a incluso de coment)rios: qualquer te(to precedido de !44! ignorado, at se atingir o %inal da sua lin a" Por este motivo, os coment)rios no se estendem por mais de uma lin a: quando se dese2a escrever coment)rios mais longos, que ocupem v)rias lin as, cada uma delas dever) comear por !44!"

Tipos de Dados 0 VisuAlg prev5 quatro tipos de dados: inteiro, real, cadeia de caracteres e lgico ,ou booleano." As palavras$c ave que os de%inem so as seguintes ,observe que elas no t5m acentuao.: inteiro: de%ine vari)veis numricas do tipo inteiro, ou se2a, sem casas decimais" real: de%ine vari)veis numricas do tipo real, ou se2a, com casas decimais" caractere: de%ine vari)veis do tipo string, ou se2a, cadeia de caracteres" logico: de%ine vari)veis do tipo booleano, ou se2a, com valor V163A31'60 ou 7AL80"

0 VisuAlg permite tambm a declarao de vari)veis estruturadas atravs da palavra$ c ave vetor, como ser) e(plicado a seguir" Nomes de Vari eis e sua Declarao 0s nomes das vari)veis devem comear por uma letra e depois conter letras, n+meros ou underline, at um limite de 9: caracteres" As vari)veis podem ser simples ou estruturadas ,na verso atual, os vetores podem ser de uma ou duas dimens/es." *o pode aver duas vari)veis com o mesmo nome, com a natural e(ceo dos elementos de um mesmo vetor" A seo de declarao de vari)veis comea com a palavra$c ave var, e continua com as seguintes sinta(es: <lista-de-variveis> : <tipo-de-dado> <lista-de-variveis> : vetor " "<lista-de-intervalos>"!" de <tipo-dedado> *a <lista-de-variveis>, os nomes das vari)veis esto separados por v&rgulas" *a <lista-de-intervalos>, os <intervalo> so separados por v&rgulas, e t5m a seguinte sinta(e: <intervalo>: <valor-inicial> .. <valor-final> *a verso atual do VisuAlg, tanto <valor-inicial> como <valor-final> devem ser inteiros" Alm disso, e(ige$se evidentemente que <valor-final> se2a maior do que <valor-inicial>" 1(emplos: var a: inteiro "alor#$ "alor%: real vet: vetor #..#&! de real matri': vetor &..($)..#&! de inteiro nome*do*aluno: caractere sinali'ador: logico

*ote que no ) a necessidade de ponto e v&rgula aps cada declarao: basta pular lin a" A declarao de vetores an)loga linguagem Pascal: a vari)vel vet acima tem ;: elementos, com os &ndices de <;= a <;:=, enquanto matri' corresponde a ;> elementos com &ndices <:,?=, <:,@=, <:,;:=, <;,?=, <;,@=, <;,;:=, """ at <A,;:=" 0 n+mero total de vari)veis suportado pelo VisuAlg >:: ,cada elemento de um vetor contado individualmente."

Constantes e Comando de !tri"uio 0 VisuAlg tem tr5s tipos de constantes: Num ricos: so valores numricos escritos na %orma usual das linguagens de programao" Podem ser inteiros ou reais" *este +ltimo caso, o separador de decimais o ponto e no a v&rgula, independente da con%igurao regional do computador onde o VisuAlg est) sendo e(ecutado" 0 VisuAlg tambm no suporta separadores de mil ares" Caracteres: qualquer cadeia de caracteres delimitada por aspas duplas ,!." !gicos: admite os valores V163A31'60 ou 7AL80"

A atribuio de valores a vari)veis %eita com o operador +," 3o seu lado esquerdo %ica a vari)vel qual est) sendo atribu&do o valor, e sua direita pode$se colocar qualquer e(presso ,constantes, vari)veis, e(press/es numricas., desde que seu resultado ten a tipo igual ao da vari)vel" Alguns e(emplos de atribui/es, usando as vari)veis declaradas acima: a +, "alor# +, #.. "alor% +, "alor# / a vet #! +, vet #! / 0a 1 -2 matri' -$3! +, a/( , . nome*do*aluno +, "4os5 da Silva" sinali'ador +, FA6S7 #peradores !ritm$ticos 0peradores un)rios, isto , so aplicados a um +nico operando" 8o os operadores aritmticos de maior preced5ncia" 1(emplos: ,-$ /8" 1nquanto o operador un)rio , inverte o sinal do seu operando, o operador / no altera o valor em nada o seu valor" 0perador de diviso inteira" Por e(emplo, > B C D C" #em a mesma preced5ncia do operador de diviso tradicional"

/$,

0peradores aritmticos tradicionais de adio, subtrao, multiplicao e diviso" /$,$ Por conveno, 1 e / t5m preced5ncia sobre / e ," Para modi%icar a ordem de 1$/ avaliao das opera/es, necess)rio usar par5nteses como em qualquer e(presso aritmtica" : ; 0perador de mdulo ,isto , resto da diviso inteira." Por e(emplo, ? E 9 D C" #em a mesma preced5ncia do operador de diviso tradicional" 0perador de potenciao" Por e(emplo, > F C D C>" #em a maior preced5ncia

entre os operadores aritmticos bin)rios ,aqueles que t5m dois operandos." #peradores de Caracteres 0perador de concatenao de strings ,isto , cadeias de caracteres., quando usado com dois valores ,vari)veis ou constantes. do tipo !caractere!" Por e(emplo: "<io " / " de 4aneiro" = "<io de 4aneiro""

#peradores %elacionais 6espectivamente: igual, menor que, maior que, menor ou igual a, maior ou igual =$ +$ a, di%erente de" 8o utilizados em e(press/es lgicas para se testar a relao >$ +=$ entre dois valores do mesmo tipo" 1(emplos: - = - , 9 igual a 9G. resulta em >=$ "?<DAD?@<7 H "A" > "A" ,!A! est) depois de !I! na ordem al%abticaG. resulta +> em FA6S7" Importante: *o VisuAlg, as compara/es entre strings no di&erenciam as letras mai+sculas das min+sculas" Assim, "AAC" igual a "aBc"" Valores lgicos obedecem seguinte ordem: FA6S7 + "?<DAD?@<7" #peradores 'gicos 0perador un)rio de negao" nao "?<DAD?@<7 = FA6S7, e nao FA6S7 = "?<DAD?@<7" #em a maior preced5ncia entre os operadores lgicos" 1quivale ao C7D do Pascal" 0perador que resulta "?<DAD?@<7 quando um dos seus operandos lgicos %or verdadeiro" 1quivale ao 7< do Pascal" 0perador que resulta "?<DAD?@<7 somente se seus dois operandos lgicos %orem verdadeiros" 1quivale ao ACD do Pascal" 0perador que resulta "?<DAD?@<7 se seus dois operandos lgicos %orem di%erentes, e FA6S7 se %orem iguais" 1quivale ao E7< do Pascal"

nao ou e 8ou

Comandos de (a)da de Dados escreva 0+lista-de-expresses>2 1screve no dispositivo de sa&da padro ,isto , na )rea direita da metade in%erior da tela do VisuAlg. o conte+do de cada uma das e(press/es que comp/em <lista-deexpresses>" As e(press/es dentro desta lista devem estar separadas por v&rgulasH depois de serem avaliadas, seus resultados so impressos na ordem indicada" J equivalente ao comando "rite do Pascal" 3e modo semel ante a Pascal, poss&vel especi%icar o n+mero de espaos no qual se dese2a escrever um determinado valor" Por e(emplo, o comando escreva08:.2 escreve o valor da vari)vel 8 em > espaos, alin ado$o direita" Para vari)veis reais, pode$se tambm especi%icar o n+mero de casas %racion)rias que sero e(ibidas" Por e(emplo, considerando F como uma vari)vel real, o comando escreva0F:G:%2escreve seu valor em K espaos colocando C casas decimais" escreval 0<lista-de-expresses>2"

'dem ao anterior, com a +nica di%erena que pula uma lin a em seguida" J equivalente ao "riteln do Pascal" 1(emplos: algoritmo "e8emHlo" var 8: real F: inteiro a: caractere l: inicio 8 +, %..

logico

F +, G a +, "teste" l +, "?<DAD?@<7 escreval 0"8"$ 8:(:#$ F/-:(2 // ?screve: 8 %.. 3 escreval 0a$ "oI"2 // ?screve: testeoI 0e deHois Hula linJa2 escreval 0a$ " oI"2 // ?screve: teste oI 0e deHois Hula linJa2 escreval 0a / " oI"2 // ?screve: teste oI 0e deHois Hula linJa2 escreva 0l2 // ?screve: "?<DAD?@<7 fimalgoritmo *ote que o VisuAlg separa e(press/es do tipo numrico e lgico com um espao esquerda, mas no as e(press/es do tipo caractere, para que assim possa aver a concatenao" Luando se dese2a separar e(press/es do tipo caractere, necess)rio acrescentar espaos nos locais adequados" Comando de *ntrada de Dados leia 0<lista-de-variveis>2 6ecebe valores digitados pelos usu)rio, atribuindo$os s vari)veis cu2os nomes esto em <lista-de-variveis> , respeitada a ordem especi%icada nesta lista." J an)logo ao comando read do Pascal" Ve2a no e(emplo abai(o o resultado: algoritmo "e8emHlo #" var 8: inteiroK inicio leia 082 escreva 082 fimalgoritmo

0 comando de leitura acima ir) e(ibir uma 2anela como a que se v5 ao lado, com a mensagem padro: "?ntre com o valor de <nome-de-varivel>"

8e voc5 clicar em Cancelar ou teclar #sc durante a leitura de dados, o programa ser) imediatamente interrompido" Comando de Des io Condicional se <expresso-lgica> entao <seqncia-de-comandos> fimse Ao encontrar este comando, o VisuAlg analisa a <expresso-lgica>" 8e o seu resultado %or "?<DAD?@<7, todos os comandos da <seqncia-de-comandos>$,entre esta lin a e a lin a com fimse. so e(ecutados" 8e o resultado %or FA6S7, estes comandos so desprezados e a e(ecuo do algoritmo continua a partir da primeira lin a depois do fimse" se <expresso-lgica> entao <seqncia-de-comandos-1> senao <seqncia-de-comandos-2> fimse *esta outra %orma do comando, se o resultado da avaliao de <expresso-lgica> %or "?<DAD?@<7, todos os comandos da <seqncia-de-comandos-1> ,entre esta lin a e a lin a com senao. so e(ecutados, e a e(ecuo continua depois a partir da primeira lin a depois do fimse" 8e o resultado %or FA6S7, estes comandos so desprezados e o algoritmo continua a ser e(ecutado a partir da primeira lin a depois do senao, e(ecutando todos os comandos da <seqncia-de-comandos-2> ,at a lin a com fimse." 1stes comandos equivalem ao i%...then e i%...then...else do Pascal" *ote que no ) necessidade de delimitadores de bloco ,como begin e end., pois as seqM5ncias de comandos 2) esto delimitadas pelas palavras$c ave senao e fimse" 0 VisuAlg permite o anin amento desses comandos de desvio condicional" Comando de (eleo +,ltipla 0 VisuAlg implementa ,com certas varia/es. o comando case do Pascal" A sinta(e a seguinte: escolJa <expresso-de-sele o> caso <exp11>! <exp12>! """! <exp1n> <seqncia-de-comandos-1> caso <exp21>! <exp22>! """! <exp2n> <seqncia-de-comandos-2> ... outrocaso

<seqncia-de-comandos-extra> fimescolJa Ve2a o e(emplo a seguir, que ilustra bem o que %az este comando: algoritmo "Dimes" var time: caractere inicio escreva 0"?ntre com o nome de um time de futeBol: "2 leia 0time2 escolJa time caso "Flamengo"$ "Fluminense"$ ""asco"$ "Aotafogo" escreval 0"L um time carioca."2 caso "So Maulo"$ "Malmeiras"$ "Santos"$ "CorNntJians" escreval 0"L um time Haulista."2 outrocaso escreval 0"L de outro estado."2 fimescolJa fimalgoritmo Comandos de %epetio 0 VisuAlg implementa as tr5s estruturas de repetio usuais nas linguagens de programao: o lao contado Hara...ate...faca ,similar ao %or...to...do do Pascal., e os laos condicionados enOuanto...faca ,similar ao "hile...do. e reHita...ate ,similar ao repeat...until." A sinta(e destes comandos e(plicada a seguir" Para --- &aa 1sta estrutura repete uma seqM5ncia de comandos um determinado n+mero de vezes" Hara <varivel> de <valor-inicial> ate <valor-limite> <incremento>! faca <seqncia-de-comandos> fimHara Hasso

+varivel > <valor-inicial> <valor-limite >

J a vari)vel contadora que controla o n+mero de repeti/es do lao" *a verso atual, deve ser necessariamente uma vari)vel do tipo inteiro, como todas as e(press/es deste comando" J uma e(presso que especi%ica o valor de inicializao da vari)vel contadora antes da primeira repetio do lao" J uma e(presso que especi%ica o valor m)(imo que a vari)vel contadora pode alcanar" J opcional" Luando presente, precedida pela palavra Hasso, uma e(presso que especi%ica o incremento que ser) acrescentado vari)vel contadora em cada repetio do lao" Luando esta opo no utilizada, o valor padro de &incremento> ;" Vale a pena ter em conta que tambm poss&vel especi%icar valores negativos para <incremento>" Por outro lado, se a avaliao da e(presso +incremento > resultar em valor nulo, a e(ecuo do algoritmo ser) interrompida, com a impresso de uma mensagem de erro" 'ndica o %im da seqM5ncia de comandos a serem repetidos" -ada vez

<incremento >

fimHara

que o programa c ega neste ponto, acrescentado vari)vel contadora o valor de +incremento >, e comparado a <valorlimite >" 8e %or menor ou igual ,ou maior ou igual, quando <incremento > %or negativo., a seqM5ncia de comandos ser) e(ecutada mais uma vezH caso contr)rio, a e(ecuo prosseguir) a partir do primeiro comando que este2a aps o fimHara" <valor-inicial >' <valor-limite > e <incremento > so avaliados uma ,nica e. antes da e(ecuo da primeira repetio, e no se alteram durante a e/ecuo do lao, mesmo que vari)veis eventualmente presentes nessas e(press/es ten am seus valores alterados" *o e(emplo a seguir, os n+meros de ; a ;: so e(ibidos em ordem crescente" algoritmo "CPmeros de # a #&" var Q: inteiro inicio Hara Q de # ate #& faca escreva 0Q:-2 fimHara fimalgoritmo Importante: 8e, logo no in&cio da primeira repetio, <valor-inicial > %or maior que <valor-limite > ,ou menor, quando <incremento> %or negativo., o lao no ser) e(ecutado nen uma vez" 0 e(emplo a seguir no imprime nada" algoritmo "Cumeros de #& a # 0no funciona2" var Q: inteiro inicio Hara Q de #& ate # faca escreva 0Q:-2 fimHara fimalgoritmo 1ste outro e(empo, no entanto, %uncionar) por causa do passo 01: algoritmo "Cumeros de #& a # 0este funciona2" var Q: inteiro inicio Hara Q de #& ate # Hasso ,# faca escreva 0Q:-2 fimHara fimalgoritmo *n2uanto --- &aa 1sta estrutura repete uma seqM5ncia de comandos enquanto uma determinada condio ,especi%icada atravs de uma e(presso lgica. %or satis%eita" enOuanto <expresso-lgica> faca <seqncia-de-comandos> fimenOuanto

<expresso-lgica>

1sta e(presso que avaliada antes de cada repetio do lao" Luando seu resultado %or V163A31'60, <seqncia-decomandos> e(ecutada" 'ndica o %im da <seqncia-de-comandos> que ser) repetida" -ada vez que a e(ecuo atinge este ponto, volta$se ao in&cio do lao para que <expresso-lgica> se2a avaliada novamente" 8e o resultado desta avaliao %or V163A31'60, a <seqncia-de-comandos> ser) e(ecutada mais uma vezH caso contr)rio, a e(ecuo prosseguir) a partir do primeiro comando aps fimenOuanto"

fimenOuanto

0 mesmo e(emplo anterior pode ser resolvido com esta estrutura de repetio: algoritmo "CPmeros de # a #& 0com enOuanto...faca2" var Q: inteiro inicio Q +, # enOuanto Q += #& faca escreva 0Q:-2 Q +, Q / # fimenOuanto fimalgoritmo Importante: -omo o lao enOuanto...faca testa sua condio de parada antes de e(ecutar sua seqM5ncia de comandos, esta seqM5ncia poder) ser e(ecutada .ero ou mais e.es" %epita --- at$ 1sta estrutrura repete uma seqM5ncia de comandos at que uma determinada condio ,especi%icada atravs de uma e(presso lgica. se2a satis%eita" reHita <seqncia-de-comandos> ate <expresso-lgica> reHita 'ndica o in&cio do lao" 'ndica o %im da <seqncia-de-comandos> a serem repetidos" -ada vez que o programa c ega neste ponto, <expressolgica> avaliada: se seu resultado %or 7AL80, os comandos presentes entre esta lin a e a lin a reHita so e(ecutadosH caso contr)rio, a e(ecuo prosseguir) a partir do primeiro comando aps esta lin a"

ate +expressolgica>

-onsiderando ainda o mesmo e(emplo: algoritmo "CPmeros de # a #& 0com reHita2" var Q: inteiro inicio Q +, # reHita escreva 0Q:-2

Q +, Q / # ate Q > #& fimalgoritmo Importante: -omo o lao reHita...ate testa sua condio de parada depois de e(ecutar sua seqM5ncia de comandos, esta seqM5ncia poder) ser e(ecutada uma ou mais e.es" Comando Interrompa As tr5s estruturas de repetio acima permitem o uso do comando interromHa, que causa uma sa&da imediata do lao" 1mbora esta tcnica este2a de certa %orma em desacordo com os princ&pios da programao estruturada, o comando interromHa %oi inclu&do no VisuAlg por ser encontrado na literatura de introduo programao e mesmo em linguagens como o 0b2ect Pascal ,3elp i4NOli(., -lipper, VI, etc" 8eu uso e(empli%icado a seguir: algoritmo "CPmeros de # a #& 0com interromHa2" var 8: inteiro inicio 8 +, & reHita 8 +, 8 / # escreva 08:-2 se 8 = #& entao interromHa fimse ate falso fimalgoritmo 0 VisuAlg permite ainda uma %orma alternativa do comando reHita...ate, com a seguinte sinta(e: algoritmo "CPmeros de # a #& 0com interromHa2 @@" var 8: inteiro inicio 8 +, & repita 8 +, 8 / # escreva 08:-2 se 8 = #& entao interromHa fimse fimrepita fimalgoritmo -om esta sinta(e alternativa, o uso do interromHa obrigatrio, pois a +nica maneira de se sair do lao reHita...fimreHitaH caso contr)rio, este lao seria e(ecutado indeterminadamente"

Subprograma um programa que au(ilia o programa principal atravs da realizao de uma determinada subtare%a" #ambm costuma receber os nomes de sub(rotina, procedimento'$m todo ou mdulo" 0s subprogramas so c amados dentro do corpo do programa principal como se %ossem comandos" Aps seu trmino, a e(ecuo continua a partir do ponto onde %oi c amado" J importante compreender que a c amada de um subprograma simplesmente gera um des io pro isrio no &lu/o de e/ecuo" P) um caso particular de subprograma que recebe o nome de %un)o" Qma %un)o, alm de e(ecutar uma determinada tare%a, retorna um valor para quem a c amou, que o resultado da sua e(ecuo" Por este motivo, a c amada de uma %uno aparece no corpo do programa principal como uma e*presso, e no como um comando" -ada subprograma, alm de ter acesso s vari)veis do programa que o c amou ,so as vari)veis globais., pode ter suas prprias vari)veis ,so as vari)veis locais., que e(istem apenas durante sua c amada" Ao se c amar um subprograma, tambm poss&vel passar$l e determinadas in%orma/es que recebem o nome de par+metros ,so valores que, na lin a de c amada, %icam entre os par5nteses e que esto separados por v&rgulas." A quantidade dos parRmetros, sua seqM5ncia e respectivos tipos no podem mudar: devem estar de acordo com o que %oi especi%icado na sua correspondente declarao" Para se criar subprogramas, preciso descrev5$los aps a declarao das vari)veis e antes do corpo do programa principal" 0 VisuAlg possibilita declarao e c amada de subprogramas nos moldes da linguagem Pascal, ou se2a, procedimentos e %un/es com passagem de parRmetros por valor ou re%er5ncia" 'sso ser) e(plicado a seguir" Procedimentos 1m VisuAlg, procedimento um subprograma que no retorna nen um valor ,corresponde ao procedure do Pascal." 8ua declarao, que deve estar entre o %inal da declarao de vari)veis e a lin a inicio do programa principal, segue a sinta(e abai(o: Hrocedimento <nome-de-procedimento> par#metros>2! // Seo de Declaraes @nternas inicio // Seo de Comandos fimHrocedimento 0<seqncia-de-declara es-de-

0 <nome-de-procedimento> obedece as mesmas regras de nomenclatura das vari)veis" Por outro lado, a <seqncia-de-declara es-de-par#metros> uma seqM5ncia de var! <seqncia-de-par#metros>: <tipo-de-dado> separadas por ponto e v&rgula" A presena ,opcional. da palavra$c ave var indica passagem de parRmetros por re%er5nciaH caso contr)rio, a passagem ser) por valor" Por sua vez, <seqncia-de-par#metros> uma seqM5ncia de nomes de parRmetros ,tambm obedecem a mesma regra de nomenclatura de vari)veis. separados por v&rgulas"

3e modo an)logo ao programa principal, a seo de declarao internas comea com a palavra$c ave var, e continua com a seguinte sinta(e: <lista-de-variveis> : <tipo-de-dado> *os pr(imos e(emplos, atravs de um subprograma soma, ser) calculada a soma entre os valores A e S@ ,ou se2a, ser) obtido o resultado ;9. que o programa principal imprimir) em seguida" *o primeiro caso, um procedimento sem par3metros utiliza uma vari)vel local au8 para armazenar provisoriamente o resultado deste c)lculo ,evidentemente, esta vari)vel desnecess)ria, mas est) a& apenas para ilustrar o e(emplo., antes de atribu&$lo vari)vel global res: Hrocedimento soma var au8: inteiro inicio // n$ m e res so variRveis gloBais au8 +, n / m res +, au8 fimHrocedimento *o programa principal deve aver os seguintes comandos: n +, ( m +, ,3 soma escreva0res2 A mesma tare%a poderia ser e(ecutada atravs de um procedimento com par3metros, como descrito abai(o: Hrocedimento soma 08$F: inteiro2 inicio // res 5 variRvel gloBal res +, 8 / F fimHrocedimento *o programa principal deve aver os seguintes comandos: n +, ( m +, ,3 soma0n$m2 escreva0res2 A passagem de parRmetros do e(emplo acima c ama$se passagem por alor" *este caso, o subprograma simplesmente recebe um valor que utiliza durante sua e(ecuo" 3urante essa e(ecuo, os parRmetros passados por valor so an)logos s suas vari)veis locais, mas com uma +nica di%erena: receberam um valor inicial no momento em que o subprograma %oi c amado" Fun4es 1m VisuAlg, %uno um subprograma que retorna nen um valor ,corresponde ao %unction do Pascal." 3e modo an)logo aos procedimentos, sua declarao deve estar entre o %inal da declarao de vari)veis e a lin a inicio do programa principal, e segue a sinta(e abai(o:

funcao <nome-de-f$n o> 0<seqncia-de-declara es-de-par#metros>2!: <tipo-de-dado> // Seo de Declaraes @nternas inicio // Seo de Comandos fimfuncao 0 <nome-de-f$n o> obedece as mesmas regras de nomenclatura das vari)veis" Por outro lado, a <seqncia-de-declara es-de-par#metros> uma seqM5ncia de var! <seqncia-de-par#metros>: <tipo-de-dado> separadas por ponto e v&rgula" A presena ,opcional. da palavra$c ave var indica passagem de parRmetros por re%er5nciaH caso contr)rio, a passagem ser) por valor" Por sua vez, <seqncia-de-par#metros> uma seqM5ncia de nomes de parRmetros ,tambm obedecem a mesma regra de nomenclatura de vari)veis. separados por v&rgulas" 0 valor retornado pela %uno ser) do tipo especi%icado na sua declarao ,logo aps os dois pontos." 1m alguma parte da %uno ,de modo geral, no seu %inal., este valor deve ser retornado atravs do comando retorne" 3e modo an)logo ao programa principal, a seo de declarao internas comea com a palavra$c ave var, e continua com a seguinte sinta(e: <lista-de-variveis> : <tipo-de-dado> Voltando ao e(emplo anterior, no qual calculamos e imprimimos a soma entre os valores A e S@, vamos mostrar como isso poderia ser %eito atravs de uma &uno sem par3metros" 1la tambm utiliza uma vari)vel local au8 para armazenar provisoriamente o resultado deste c)lculo, antes de atribu&$lo vari)vel global res: funcao soma: inteiro var au8: inteiro inicio // n$ m e res so variRveis gloBais au8 +, n / m retorne au8 fimfuncao *o programa principal deve aver os seguintes comandos: n +, ( m +, ,3 res +, soma escreva0res2 8e realiz)ssemos essa mesma tare%a com uma &uno com par3metros passados por alor, poderia ser do seguinte modo: funcao soma 08$F: inteiro2: inteiro inicio

retorne 8 / F fimfuncao *o programa principal deve aver os seguintes comandos: n +, ( m +, ,3 res +, soma0n$m2 escreva0res2 Passagem de Par3metros por %e&er5ncia P) ainda uma outra %orma de passagem de parRmetros para subprogramas: a passagem por re%er5ncia" *este caso, o subprograma no recebe apenas um valor, mas sim o endereo de uma vari)vel global" Portanto, qualquer modi%icao que %or realizada no conte+do deste parRmetro a%etar) tambm a vari)vel global que est) associada a ele" 3urante a e(ecuo do subprograma, os parRmetros passados por re%er5ncia so an)logos s vari)veis globais" *o VisuAlg, de %orma an)loga a Pascal, essa passagem %eita atravs da palavra var na declarao do parRmetro" Voltando ao e(emplo da soma, o procedimento abai(o realiza a mesma tare%a utilizando passagem de parRmetros por re%er5ncia: Hrocedimento soma 08$F: inteiroK var result: inteiro2 inicio result +, 8 / F fimHrocedimento *o programa principal deve aver os seguintes comandos: n +, ( m +, ,3 soma0n$m$res2 escreva0res2 %ecurso e !ninhamento A atual verso do VisuAlg permite recurso, isto , a possibilidade de que um subprograma possa c amar a si mesmo" A %uno do e(emplo abai(o calcula recursivamente o %atorial do n+mero inteiro que recebe como parRmetro: funcao fatorial 0v: inteiro2: inteiro inicio se v += % entao retorne v senao retorne v 1 fatorial0v,#2 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 !, por e"emplo#, e o $isu%lg no a implementa.


0 VisuAlg implementa algumas e(tens/es s linguagens !tradicionais! de programao, com o intuito principal de a2udar o seu uso como %erramenta de ensino" 1las so mostradas a seguir" Comando !leatrio Tuitas vezes a digitao de dados para o teste de um programa torna$se uma tare%a entediante" -om o uso do comando aleatorio do VisuAlg, sempre que um comando leia %or encontrado, a digitao de valores numricos e4ou caracteres substitu&da por uma gerao aleatria" 1ste comando no a%eta a leitura de vari)veis lgicas: com certeza, uma coisa pouco usual em programao""" 1ste comando tem as seguintes sinta(es: Ativa a gerao de valores aleatrios que substituem a digitao de dados" A palavra$c ave on opcional" A %ai(a padro de valores gerados de : a ;:: inclusive" Para a gerao de dados do tipo caractere, no ) uma %ai(a pr$estabelecida: os dados gerados sero sempre strings de > letras mai+sculas" Ativa a gerao de dados numricos aleatrios estabelecendo uma %ai(a de valores m&nimos e m)(imos" 8e apenas < valor1> %or %ornecido, a %ai(a ser) de : a <valor1> inclusiveH caso contr)rio, a %ai(a ser) de <valor1> a <valor2> inclusive" 8e <valor2> %or menor que <valor1>, o VisuAlg os trocar) para que a %ai(a %ique correta" Importante: <valor1> e <valor2> devem ser constantes num$ricas, e no e(press/es" 3esativa a gerao de valores aleatrios" A palavra$ c ave off obrigatria"

aleatorio

on!

aleatorio <valor1 > <valor2 > !

aleatorio off

Comando !r2ui o Tuitas vezes necess)rio 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$te(to, obtendo deles os dados ao e(ecutar os comandos leia" 1sta caracter&stica %unciona da seguinte maneira: ;. 8e no e/istir o arquivo com nome especi%icado, o VisuAlg %ar) uma leitura de dados atravs da digitao, armazenando os dados lidos neste arquivo, na ordem em que %orem %ornecidos" C. 8e o arquivo e/istir, o VisuAlg obter) os dados deste arquivo at c egar ao seu %im" 3a& em diante, %ar) as leituras de dados atravs da digitao" 9. 8omente um comando arOuivo pode ser empregado em cada pseudocdigo, e ele dever) estar na seo de declara/es ,dependendo do !sucesso! desta caracter&stica, em %uturas vers/es ela poder) ser mel orada"""." A. -aso no se2a %ornecido um camin o, o VisuAlg ir) procurar este arquivo na pasta de trabal o corrente ,geralmente, a pasta onde o programa V'8QALU"1V1 est)." 1ste

comando no prev5 uma e(tenso padroH portanto, a especi%icao do nome do arquivo deve ser completa, inclusive com sua e(tenso ,por e(emplo, "t(t, "dat, etc"." A sinta(e do comando : arOuivo <nome-de-arq$ivo> <nome-de-arq$ivo> uma constante caractere ,entre aspas duplas." Ve2a o e(emplo a seguir: algoritmo "lendo do arOuivo" arOuivo "teste.t8t" var 8$F: inteiro inicio Hara 8 de # ate . faca leia 0F2 fimHara fimalgoritmo Comando Timer 1mbora o VisuAlg se2a um interpretador de pseudocdigo, seu desempen o muito bom: o tempo gasto para interpretar cada lin a digitada apenas uma %rao de segundo" 1ntretanto, por motivos educacionais, pode ser conveniente e(ibir o %lu(o de e(ecuo do pseudocdigo comando por comando, em !cRmera lenta!" 0 comando timer serve para este propsito: insere um atraso ,que pode ser especi%icado. antes da e(ecuo de cada lin a" Alm disso, reala em %undo azul o comando que est) sendo e(ecutado, da mesma %orma que na e(ecuo passo a passo" 8ua sinta(e a seguinte: timer on timer <tempo-deatraso> timer off Ativa o timer" Ativa o timer estabelecendo seu tempo de atraso em milissegundos" 0 valor padro >::, que equivale a meio segundo" 0 argumento &tempo-de-atraso> deve ser uma constante inteira com valor entre : e ;::::" Valores menores que : so corrigidos para :, e maiores que ;:::: para ;::::" 3esativa o timer.

Ao longo do pseudocdigo, pode aver v)rios comandos timer" #odos eles devem estar na seo de comandos" Qma vez ativado, o atraso na e(ecuo dos comandos ser) mantido at se c egar ao %inal do pseudocdigo ou at ser encontrado um comando timer off" Comandos de Depurao *en um ambiente de desenvolvimento est) completo se no ouver a possibilidade de se inserir pontos de interrupo ,breakpoints. no pseudocdigo para %ins de depurao" VisuAlg implementa dois comandos que au(iliam a depurao ou an)lise de um pseudocdigo: o comando Hausa e o comando deBug" Comando Pausa

8ua sinta(e simplesmente: Hausa 1ste comando insere uma interrupo incondicional no pseudocdigo" Luando ele encontrado, o VisuAlg p)ra a e(ecuo do pseudocdigo e espera alguma ao do programador" *este momento, poss&vel: analisar os valores das vari)veis ou das sa&das produzidas at o momentoH e(ecutar o pseudocdigo passo a passo ,com 7?.H prosseguir sua e(ecuo normalmente ,com 7@.H ou simplesmente termin)$lo ,com -trl$7C." -om e(ceo da alterao do te(to do pseudocdigo, todas as %un/es do VisuAlg esto dispon&veis" Comando De"ug 8ua sinta(e : deBug +expresso-lgica> 8e a avaliao de +expresso-lgica> resultar em valor V163A31'60, a e(ecuo do pseudocdigo ser) interrompida como no comando Hausa" 3essa %orma, poss&vel a insero de um breakpoint condicional no pseudocdigo" Comando *co 8ua sinta(e : eco on S off 1ste comando ativa ,eco on. ou desativa ,eco off. a impresso dos dados de entrada na sa&da$padro do VisuAlg, ou se2a, na )rea direita da parte in%erior da tela" 1sta caracter&stica pode ser +til quando ouver uma grande quantidade de dados de entrada, e se dese2a apenas analisar a sa&da produzida" -onvm utiliz)$la tambm quando os dados de entrada prov5m de um arquivo 2) con ecido"

Comando Cron6metro 8ua sinta(e : cronometro on S off 1ste comando ativa ,cronometro on. ou desativa ,cronometro off. o cronWmetro interno do VisuAlg" Luando o comando cronometro on encontrado, o VisuAlg imprime na sa&da$padro a in%ormao !-ronWmetro iniciado"!, e comea a contar o tempo em milissegundos" Luando o comando cronometro off encontrado, o VisuAlg imprime na sa&da$padro a in%ormao !-ronWmetro terminado" #empo decorrido: (( segundo,s. e (( ms!" 1ste comando +til na an)lise de desempen o de algoritmos ,ordenao, busca, etc"." Taterial dispon&vel no site XXX"apoioin%ormatica"in%"br "

Potrebbero piacerti anche