You are on page 1of 8

3.

Programando em G-Portugol

http://gpt.berlios.de/manual_nodes/node4.html

Proximo: 4. Implementao da linguagem Acima: G-Portugol Anterior: 2. Caractersticas Gerais Subsections 3.1 Ol Mundo 3.2 Variveis 3.2.1 Variveis primitivas 3.2.2 Vetores e matrizes (conjuntos) 3.3 Estruturas condicionais 3.4 Estruturas de repetio 3.4.1 A estrutura ``enquanto'' 3.4.2 A estrutura ``para'' 3.5 Funes 3.5.1 Funes internas

3. Programando em G-Portugol
A proposta desse captulo mostrar os elementos da linguagem G-Portugol usando programas como exemplos. No um captulo sobre como programar, nem tem como intuito ensinar algortmos. Portanto, esperado que o leitor seja familiarizado com programao.

3.1 Ol Mundo
Mantendo a tradio, vamos criar nosso primeiro programa. O propsito dele ser exibir na tela o texto "Ol mundo". Crie um arquivo chamado "olamundo.gpt" com o seguinte contedo:

Aps salvar o arquivo, digite o seguinte na linha de comando: No linux:


$ gpt -o olamundo olamundo.gpt

No Windows:
\> gpt -o olamundo.exe olamundo.gpt

Esse comando compila o algoritmo e salva o arquivo binrio resultante como ``olamundo'' (ou ``olamundo.exe'') no diretrio atual. Se a opo ``-o <arquivo>'' no for informada, o GPT criar o executvel usando o nome do algoritmo. Aps executar o programa criado, exibido o texto ``Ola mundo!'' na tela. Como j deve ter assumido, comentrios ao estilo C (/**/) e C++ (//) so permitidos e o que estiver entre aspas duplas (") tratado como uma string ou constante literal. Escapes so permitidos como EOL ( n), tabulao ( t) dentre

1 de 8

17/11/2013 16:55

3. Programando em G-Portugol

http://gpt.berlios.de/manual_nodes/node4.html

outros. No permitido a concatenao em multiplas linhas como na linguagem C:


imprima("Isso uma " "Concatenao"); //erro!

Outro detalhe a pontuao. Da mesma forma que em C, o ``;'' utilizado como finalizador de enunciados.

3.2 Variveis
A declarao de variveis deve ser feita dentro de um bloco especfico, que deve aparecer logo aps a declarao do algoritmo. O bloco iniciado pela palavra-chave ``variveis'' (sim, com acento) e termina com a palavra chave ``fimvariveis''. Pelo menos uma varivel deve ser declarada dentro do bloco (embora o bloco em si seja opcional) e apenas um bloco em escopo global deve ser declarado. Eis um exemplo para estudo:

3.2.1 Variveis primitivas


Variveis primitivas so declaradas seguindo o seguinte modelo:
<identificador> [, identificador]* : <tipo>;

Isso , um ou mais identificadores separados por virgula, seguido de um ``:'', seguido de um tipo, seguido, finalmente, de ``;''. Como pode-se notar, parecido com Pascal. Assim que um programa executado, todas as variveis, primitivas ou vetores/matrizes, declaradas so iniciadas com um valor nulo ou ``0'' automaticamente. Vale ressaltar que constantes (const, final, etc) no so suportados. Os tipos primitivos suportados encontram-se na tabela 2.1 A fim explorar melhor os aspectos da declarao, seguem-se alguns comentrios a respeito do ltimo exemplo (programa 2) Observe que o nome do algoritmo (``teste_variaveis'') no tem acento. Se declarar o algoritmo como ``teste_variveis'' e tentar compilar o cdigo, o seguinte erro ser exibido: Linha: 1 - ``teste_variveis'' no pode ter caracteres especiais. Portanto, identificadores (nomes de variveis, funes e do algoritmo) no podem ter acentos ou caracteres especiais como $, #, etc. A definio de um identificador em G-Portugol equivalente ao das linguagens populares: uma letra (a-z ou A-Z) seguido de qualquer nmero de letras ou nmeros. Finalmente, underlines so permitidos. Cedilhas, portanto, tambm no formam identificadores vlidos. O segundo ponto, a palavra-chave ``variveis'': ela tem acento, e isso permitido e obrigatrio. O terceiro, a definio do bloco e sua (falta de) semelhana com o Pascal. Todas os blocos em G-Portugol tentam seguir o formato ``nome/fim-nome'', em favor da uniformidade e em detrimento de excees lingusticas que confundem os estudantes. E, finalmente, o quarto ponto a ausncia de cdigo entre ``incio'' e ``fim''. O programa no obrigado a ter enunciados ou comandos. Para maiores detalhes, veja o captulo 4, sobre a implementao da linguagem.

2 de 8

17/11/2013 16:55

3. Programando em G-Portugol

http://gpt.berlios.de/manual_nodes/node4.html

3.2.2 Vetores e matrizes (conjuntos)


Vetores e matrizes ``n'' dimensionais de tipos primitivos so suportados. Um exemplo de declarao de uma matriz:
variveis bitset : matriz[10] de lgicos; quadr : matriz[4][4] de inteiros; fim-variveis

O tipo do vetor ou matriz dado pelo nome do tipo no plural (``inteiros'' para tipo inteiro, ``literais'' para tipo literal, etc). Os subscritos na declarao (delimitados por ``[]'') indicam o tamanho da matriz, e sua dimenso informada pelo numero de subscritos. Portanto, ``bitset'' um vetor de 10 valores lgicos, enquanto ``quadr'' uma matriz bidimensional, onde as duas dimenses tem tamanho 4. importante observar que matrizes so ``0 based'', isso , iniciam no ndice 0 e seus ndices so sempre inteiros positivos. Logo, a matriz ``bitset'' pode ser usada do ndice 0 at o ndice 9 (inclusive). Seu ndice 10 no vlido e seu uso poder acarretar em erros de execuo (runtime errors). Matrizes, assim como variveis de tipos primitivos, so inicializadas com o valor ``0'' ou ``nulo'' em todas as suas posies. Quando usadas como argumentos de funes, matrizes so passadas por valor. ``O mundo divido em dois grupos: aqueles que comeam a contar a partir do ''0``, e aqueles que no.'' - Annimo

3.3 Estruturas condicionais


Por enquanto, apenas a estrutura se/ento/seno suportada. Essa e as demais estruturas utilizam expresses, que so avaliadas para que uma deciso seja tomada (repetir execuo, selecionar bloco de instrues, etc). Qualquer expresso pode ser avaliada como expresso lgica. Expresses numricas de valor ``0'' so avaliadas como falso. Demais valores numricos so avaliados como verdadeiro. Valores literais nulos, da mesma forma, so avaliados como falso, e demais textos, como verdadeiro. Para maiores detalhes sobre expresses, veja a seo 4.3.3.
enquanto enquanto enquanto enquanto enquanto enquanto enquanto enquanto x faa "nome" = "nome" faa verdadeiro faa 3+5 faa "nome" faa 0 faa "" faa '' faa //depende do valor de x //avalia como verdadeiro //avalia como verdadeiro //avalia 8 como verdadeiro //avalia como verdadeiro //avalia 0 como falso //avalia como falso //avalia como falso

O programa 3 ilustra um algoritmo simples que verifica se o usurio maior de idade.

3 de 8

17/11/2013 16:55

3. Programando em G-Portugol

http://gpt.berlios.de/manual_nodes/node4.html

Alguns pontos a serem considerados: O nome do algoritmo ``idade'', assim como o nome de uma varivel. No h conflitos. O operador de atribuio o pascal-like ``:=''. A funo interna ``leia'' pode ser usada por variveis primitivas de qualquer tipo. A funo ``imprima'' recebe um nmero de argumentos variveis, que podem ser constantes literais (nmeros, textos entre aspas, caracteres entre aspas simples,...), variveis primitivas ou ndices de vetores/matrizes. Os valores so concatenados e adicionados de um caractere EOL (end of line, ou fim de linha). J vimos que strings/literais constantes so denotados por texto entre aspas duplas ("). Tal qual em C, um caractere entre aspas simples (') um caractere constante que, tambm, permite escapes para representar caracteres como EOL (' n'). Assim como a palavra-chave ``variveis'', ``ento'' e ``seno'' devem ser acentuadas. Parntesis ao redor da expresso da estrutura ``se/ento'' so opcionais. Como em ``variveis/fim-variveis'', blocos ``se'' tem seus respectivos e obrigatrios ``fim-se''. No h a opo de ignorar a definio do bloco quando apenas um enunciado usado, como na linguagem C onde o uso de ``{}'' opcional. Tambm, no h imposies sobre a indentao. O programa 4 ilustra esse assunto.

4 de 8

17/11/2013 16:55

3. Programando em G-Portugol

http://gpt.berlios.de/manual_nodes/node4.html

3.4 Estruturas de repetio


3.4.1 A estrutura ``enquanto''
A estrutura ``enquanto'' a mais bsica e comum das estruturas de repetio. Seu funcionamento o mesmo que em outras linguagens populares, onde um conjunto de instrues executado repetidamente enquanto o valor lgico de uma dada expresso for avaliado como ``verdadeiro''.

Assim como na estrutura ``se/ento'', parnteses em volta da expresso so opcionais e as expresses seguem as mesmas regras.

3.4.2 A estrutura ``para''


A estrutura ``para'' uma especializao da estrutura ``enquanto'', e costuma ser ensinada em cursos de programao. Sua sintxe semelhante ao que se v em literatura sobre algoritmos e estruturas de dados, entretanto, uma sintaxe diferente de linguagens populares como C e Java. A estrutura ``para'' tem a seguinte forma:
para <varivel> de <expresso> at <expresso> [passo <inteiro>] faa [lista de comandos] fim-para

Onde: ``varivel'' deve ser uma varivel numrica; ``expresso'' deve ser uma expresso que tem seu valor avaliado como numrico; ``passo'', se existir, deve ser seguido por um inteiro constante. As expresses de/at controlam os valores que a varivel numrica ter no incio e no fim do lao, respectivamente. Tanto o controle da frequncia, quanto a deciso de incrementar ou decrementar a varivel de controle feita pelo termo opcional ``passo'', e seu valor padro 1. Por exemplo, para iterar o valor de uma varivel numrica ``x'' de 0 at 10, escreve-se:
para x de 0 at 10 faa //comandos...

5 de 8

17/11/2013 16:55

3. Programando em G-Portugol

http://gpt.berlios.de/manual_nodes/node4.html

fim-para

Da mesma forma, para uma iterao decrescente, de 2 em 2, escreve-se:


para x de 10 at 0 passo -2 faa //comandos... fim-para

Em comparao com a estrutura ``for'' de linguagens com sintaxe baseadas em C, h diferenas no s de sintaxe, mas de implementao. Um ``for'' que itera sobre uma varivel numrica de 0 at (incluindo) 10, ao sair do lao, o valor dessa varivel ser 11. Em G-Portugol, a varivel ter o valor 10 ao sair do lao. Essa diferena acontece porque a sintaxe do ``para'' induz a esse comportamento, diferente da sintaxe do ``for'', que tem um aspecto de mais baixo nvel.
//cdigo em C for(x = 0; x <= 10; x++); printf("%d", x); //imprime ``11'' //-------------//cdigo equivalente em G-Portugol para x de 0 at 10 faa fim-para imprima(x); //imprime ``10''

Ademais, da mesma forma que o ``for'', possvel que a varivel de controle tenha seu valor alterado pelos comandos aninhados. Isso permite que o lao seja encerrado prematuramente, como tambm comum em estruturas como ``enquanto''. A utilidade dessa tcnica est no fato de G-Portugol no incorporar mecanismos para refinar o controle de laos (como ``break'' e ``continue'', encontrados em linguagens populares).

3.5 Funes
Subprogramas em G-Portugol so implementados no modelo de funes, que podem ter zero ou mais parmetros de qualquer tipo, tanto primitivos quanto complexos (vetores e matrizes). Opcionalmente, elas podem definir valores de retorno, que deve ser de tipo primitivo. Tanto o retorno de dados como a passagem de argumentos so feitos por valor. Para retorno prematuro ou retorno de dados, a palavra chave ``retorne'' usada. Para funes que retornam dados, ``retorne'' deve ser seguido de um operando, que uma expresso cujo valor deve ser compatvel com o tipo da funo. J funes que no declaram um tipo de retorno expliticamente (equivalente a funes de retorno ``void'' em C), ``retorne'' deve ser usado sem operando.

6 de 8

17/11/2013 16:55

3. Programando em G-Portugol

http://gpt.berlios.de/manual_nodes/node4.html

3.5.1 Funes internas


Como j foi visto em exemplos anteriores, G-Portugol oferece duas funes internas: ``leia'' e ``imprima'', que permitem uso bsico de entrada e sada, respectivamente. A funo ``leia'' no recebe argumentos e retorna o valor lido da entrada padro (``STDIN''), o que significa, geralmente, ler os dados que o usurio digitar no teclado, seguido do caractere ``nova linha'' (em geral, associado a tecla ``Enter'' no teclado). O tipo de dado retornado por ``leia'' implicitamente convertido para o tipo primitivo exigido no contexto em que ela usada. A funo ``imprima'' recebe um nmero varivel de argumentos de qualquer tipo primitivo, sendo que pelo menos um argumento deve ser passado. Os valores passados como argumentos so convertidos para texto, concatenados na ordem definida e enviados para ``STDOUT'' (em geral, associado ao display ou monitor). No h retorno de valor para esta funo.

7 de 8

17/11/2013 16:55

3. Programando em G-Portugol

http://gpt.berlios.de/manual_nodes/node4.html

Proximo: 4. Implementao da linguagem Acima: G-Portugol Anterior: 2. Caractersticas Gerais 2006-04-08

8 de 8

17/11/2013 16:55

You might also like