Anda di halaman 1dari 65

Interpretador PORTUGOL

http://www.paim.pro.br/hall/

HALL

A nica forma de aprender uma nova linguagem de programao escrevendo programas nela. Brian Kernighan & Dennis Ritchie. (criadores da linguagem C)

Denominao

HALL uma homenagem ao computador da nave Discovery, do filme 2001 Uma Odissia no Espao, na verdade HAL (Heuristically-programmed ALgorithmic computer), obra prima da gerao de computadores.

Comentrios
Utilizados

para descrever o algoritmo, esclarecendo trechos do cdigo igual a linguagem C:

Notao
// /*

*/

Algoritmos com qualidade


Devem

ser feitos para serem lidos por seres humanos! os comentrios no momento em que estiver escrevendo o algoritmo.

Escreva

Algoritmos com qualidade


Os

comentrios devem acrescentar alguma coisa, e no frasear o comando:


// Multiplicao de b por h: // Multiplicao de b por h: area b * h; area b * h;

// Clculo da rea do retngulo: // Clculo da rea do retngulo: area b * h; area b * h;

Algoritmos com qualidade


Use

comentrios no prlogo:

/***************************************** /***************************************** UNIVERSIDADE FEDERAL DO AMAZONAS UNIVERSIDADE FEDERAL DO AMAZONAS FULANO DA SILVA FULANO DA SILVA DATA: 25/11/2006 DATA: 25/11/2006 LTIMA MODIFICAO: 26/12/2007 LTIMA MODIFICAO: 26/12/2007 ALGORITMO DE DEMONSTRAO ALGORITMO DE DEMONSTRAO *****************************************/ *****************************************/

Algoritmos com qualidade


Use

espaos em branco para melhorar a legibilidade:


hip:=sqrt(cat1*cat1+cat2*cat2); hip:=sqrt(cat1*cat1+cat2*cat2);

hip := sqrt(cat1 * cat1 + cat2 * cat2); hip := sqrt(cat1 * cat1 + cat2 * cat2);

Algoritmos com qualidade


Escolha

nomes representativos para as variveis:


p := c + l; p := c + l;

preco custo + lucro; preco custo + lucro;

Algoritmos com qualidade


Utilize Utilize

um comando por linha.

parnteses para melhorar a compreenso e evitar erros. identao (recuo de texto).

Utilize

Hello World!

Abaixo est a verso hall do clssico exemplo do 1 programa escrito na linguagem C, o conhecido "Hello, world". algoritmo() { }
Incio do Algoritmo Instruo Palavra Reservada

escreva("Hello,world");
Fim do Algoritmo

Entrada e Saida
Funo escreva()
A funo escreva() tem por objetivo exibir na tela do computador diversas expresses aceitas pelo interpretador. Sintaxe: escreva(expresso), onde expresso poder ser: uma cadeia, uma varivel, uma sequencia de cadeias e variveis, separados por vrgulas. Exemplos: escreva ( "Hello, world"); escreva ( x ); escreva ( "O preo do produto ", P ); escreva ( "A sua altura e ", h, "e o seu peso e ", p ); escreva ( "Meu nome fernando", "o seu rosa" ); escreva ( a, b, c );

Entrada e Saida
Exemplo:
algoritmo() { inteiroX; Declarao de Varivel X:=10; escreva("Variassomas"); escreva("2+2=",2+2); escreva("ValordeX=",X); escreva("X+1=",X+1); }

Entrada e Saida
Funo leia()
A funo leia() tem por objetivo capturar o que digitado no teclado e atribuir a variveis declaradas no programa. Sintaxe: leia(expresso), onde expresso poder ser de dois tipos: 1. uma varivel 2. um texto seguido de uma varivel separados por uma vrgula. Exemplos: Leia ( x ); Leia ( "informe o preo do produto: ", P );

Entrada e Saida
Outro exemplo completo:
algoritmo() { realnum;//umnumeroqualquer realr;//araizquadradadenum leia("informeumnumeropositivo:",num); raiz uma funo matemtica r:=raiz(num); escreva("raizquadradade",num,"e=",r); }

Tipos Primitivos de Dados

O interpretador Hall aceita 4 tipos de dados bsicos, a saber:


ascii ou caracter cadeia inteiro real

Quando declaramos uma varivel de um tipo qualquer, estamos na verdade delimitando o conjunto de valores que ela poder assumir bem como os tipos de operaes que podemos realizar com elas.

Tipo primitivo ascii ou caracter


utilizado para armazenar um nico caracter. Qualquer caracter da tabela ASCII vlido, por exemplo: 'a', 'A', '5', '&', etc. Na atribuio de valores a variveis do tipo ascii, o caracter dever ser colocado entre apstrofes ou aspas simples

Tipo primitivo ascii ou caracter

exemplo:
algoritmo() { caracterc; c:='G'; }
Constante do tipo caracter tem que estar entre apstrofo

escreva("Ovaloratribuidoacfoi",c);

Tipo primitivo cadeia

utilizado para armazenar sequencia de caracteres, ou seja, 1 ou mais caracteres. O comprimento mximo da cadeia est limitado atualmente a 128 caracteres. Toda cadeia uma sequencia de caracteres disposta entre aspas duplas, como no exemplo abaixo: "Algoritmos e Estruturas de Dados".

Tipo primitivo cadeia

Exemplo:
algoritmo() { cadeias;
constante do tipo cadeia tem que vir entre aspas duplas.

s:="comunicaodedados"; escreva("Ovaloratribuidoasfoi",s); }

Tipo primitivo inteiro

utilizado para armazenar valores numricos sem a parte ou casas decimais. representado por 4 bytes na memria. Uma tentativa de atribuir um valor no inteiro, por exemplo 3.1415 (valor de pi) a uma varivel do tipo inteiro, causar o truncamento da parte decimal do valor. Exemplo:
algoritmo() { inteirok; leia("informeumnumerointeiro",k); escreva("Ovalorinformado",k); }

Tipo primitivo real


O tipo real utilizado para armazenar valores numricos contendo casas decimais O tipo real ocupa 8 bytes na memria da mquina. A posio decimal em um valor numrico do tipo real representada por um ponto. Exemplo: algoritmo() { realR; leia("informeopreodecompra",R); R:=R*1.25; escreva("opreodevendae",R); }

Operadores

O interpretador Hall conta com o seguinte conjunto de operadores:


aritmticos atribuio relacionais lgicos membridade delimitadores sequncia finalizador + - * / % ^ := = <== # > >= < & | ! . ( ) { " ' , ; } [ ]

<=

Operadores

Expresses: uma combinao de operadores e operandos que produz um valor. Operandos: so variveis ou valores de retorno de funes. Finalizador: o ponto e vrgula utilizado como operador de finalizao, isto , ele informa ao interpretador o final de uma instruo. Delimitadores: indicam o incio e o final de um elemento. So utilizados dois smbolos: aspas duplas, para indicar uma cadeia, ou os apstrofes, para indicar o tipo ascii, isto , so utilizados para dar representao de um nico caracter.

Operadores

Membridade

Os parnteses, utilizados em chamadas de funes. Os colchetes, utilizados para referenciar elementos de vetores ou matrizes ou ainda elementos de conjuntos. O ponto, permite acesso a um campo da estrutura registro ou conjunto. As chaves indicam um bloco de cdigo.

Operadores

Precedncia dos operadores

Precedncia refere-se a ordem de avaliao dos operadores em uma expresso. Por exemplo, na expresso x * y / (z * 3), a expresso (z*3) ser avaliada em primeiro lugar pois os parnteses tm precedncia mais alta. A precedncia dos operadores, na interpretao executada pelo Hall, est assim distribuida ou hierarquizada: () [] . ! ^ * / % + - < <= >= > == <> # & | := = <- , Quando dois ou mais operadores tm a mesma precedncia, a associatividade determina a ordem de avaliao.

Operadores

Associatividade dos operadores

Quando dois operadores tem a mesma precedncia, o interpretador usa a seguinte regra de associatividade: esquerda para a direita. Como seria a ordem de avaliao da expresso: x * y / ( z * 3 )?

Declarao de Variveis

Especifica-se primeiro o tipo e em seguida as variveis daquele tipo. A instruo de declarao deve ser finalizada com um ponto e vrgula. Declarando uma varivel por linha, veja o exemplo: inteiroI; realX; caracterc; cadeias;

Declarando-se uma lista de variveis, veja o exemplo: inteiroi,j,k; realTemperatura,Peso,Estatura; caracterc,resp; cadeianome,sobrenome;

Declarao de Variveis
algoritmo(){ inteirob;//declaraumavariaveltipointeiro realc;//declaraumavariaveltiporeal cadeiad;//declaraumavariaveltipocadeia b:=33; c:=2.7182; d:="LinguagemC"; escreva("ovalordavariavelbe:",b); escreva("ovalordavariavelce:",c); escreva("ovalordavariavelde:",d); escreva("variaveisdeclaradas."); }

Estrutura de Deciso - Se

A instruo se uma instruo de deciso. Ela faz com que um bloco de comandos seja executado dependendo se uma determinada condio de controle verificada. Essa condio de controle a instruo que permite desviar o fluxo de execuo do programa. A instruo se tem a seguinte sintaxe: se(condicao) { instruo1; instruo2; instruo3; ... }

Estrutura de Deciso - Se

Exemplo: testa se um nmero maior que 10. algoritmo() { inteiroi; i:=0; escreva("digiteumnumero:"); leia(i); se(i>10) { escreva("onmeromaiorque10"); } }

Estrutura de Deciso - Seno

Ela faz com que um bloco de comandos seja executado caso o teste da condio de controle da instruo se correspondente resulte falso. A instruo se/senao tem a seguinte sintaxe: se(condio){ instruo; ... } senao{ instruo; ... }

Estrutura de Deciso - Seno

Exemplo: Testa se um nmero maior que 10. algoritmo() { inteiroi; leia("digiteumnumero:",i); se(i>10){ escreva("onumeromaiorque10"); } senao{ escreva("onumeronomaiorque10"); } }

Estrutura de Deciso - Aninhamento

A instruo se pode ser aninhada com outra instruo se. Exemplo : Testa se dois nmeros so maiores que 10.

algoritmo(){ inteirox,y; leia("digiteonmerox:",x); leia("digiteonmeroy:",y); se(x>10){ se(y>10){ escreva("maioresque10"); } } }

Estrutura de Deciso - Aninhamento

O exemplo ento, poderia ser rescrito da seguinte forma: algoritmo(){ inteirox,y; leia("digiteonmerox:",x); leia("digiteonmeroy:",y); se(x>10&y>10){ escreva("xeysomaioresque10"); } }

Estrutura de Deciso - Exemplo


algoritmo(){ inteiroi;//declaraumavariaveldotipointeiro leia("digiteumnumero:",i); se(i>10){ escreva("onumeroinformadoemaiorque10"); } senao{ se(i==10){ escreva("onumeroinformadoeiguala10"); } senao{ se(i>0){ escreva("onumeroinformadoemenorque10"); } senao{ escreva("onumeroinformadoenegativo"); } } } }

Estrutura de Deciso - Exemplo


algoritmo(){ inteiroi;//declaraumavariaveldotipointeiro leia("digiteumnumero:",i); se(i>10) escreva("onumeroinformadoemaiorque10"); senao se(i==10) escreva("onumeroinformadoeiguala10"); senao{ se(i>0) escreva("onumeroinformadoemenorque10"); senao escreva("onumeroinformadoenegativo"); }

Selecao / Caso

A instruo selecao uma instruo de deciso. Ela similar a instruo se, permitindo desvios mltiplos de uma forma mais elegante. A instruo testa vrios casos e executa apenas aquele que for verdadeiro.

Selecao / Caso
algoritmo(){ inteiroi; leia("digiteumnumero:",i); selecao{ caso(i>0){ escreva("positivo"); } caso(i<0){ escreva("negativo"); } caso(i==0){ escreva("zero"); } } }

Selecao / Caso
algoritmo(){ cadeiasigla; leia("sigladeestadodosudeste:",sigla); selecao{ caso(sigla=="MG"|sigla=="mg"){ escreva("MinasGerais");} caso(sigla=="SP"|sigla=="sp"){ escreva("SaoPaulo");} caso(sigla=="RJ"|sigla=="rj"){ escreva("MinasGerais");} caso(sigla=="ES"|sigla=="es"){ escreva("SaoPaulo");} } }

Lao Enquanto

A instruo enquanto uma instruo de lao. Ela faz com que um bloco de comandos seja executado repetidamente enquanto uma determinada condio de controle for verificada. O bloco executado zero ou mais vezes. Essa condio de controle a instruo que controla at quando o bloco de comandos entre as chaves, o corpo do lao, ser executado.

Lao Enquanto
algoritmo() { inteiroI,N; i:=0; leia(Entrecomumvalor,N); enquanto(i<=N) { escreva(i); i:=i+1; } }

Lao Enquanto
algoritmo() { inteiroi; i:=0; enquanto(i<=100) { escreva(i); i:=i+2; } }

Lao Enquanto
algoritmo(){ inteiroa,b,c,N; a:=1; b:=1; leia(entrecomovalormaximo:,N); enquanto(c<=N){ c:=a+b; escreva(c); a:=b; b:=c; } }

Boi Gordo, Boi Magro

O exemplo do Boi mais gordo e o boi mais magro

Num frigorfico existem diversos bois. Cada boi traz preso em seu pescoo um carto contendo seu nmero de identificao e seu peso. Fazer um algoritmo que escreva o nmero e peso do boi mais gordo e do boi mais magro. O ltimo boi, que no dever entrar no clculo possui identificao igual a zero.

Boi Gordo, Boi Magro


algoritmo() { inteiroNBoi; realPBoi,PMG,pmm; Declarao de Variveis inteiroNMG,nmm; PMG:=0; Inicializao das Variveis pmm:=2000; leia("IDdoboi:",NBoi); . . Entrada de Dados . }

Boi Gordo, Boi Magro


algoritmo() { ... enquanto(NBoi<>0){ leia("pesodoboi:",PBoi); se(PBoi>PMG){ PMG:=PBoi;NMG:=NBoi; } se(PBoi<pmm){ pmm:=PBoi;nmm:=NBoi; } leia("IDdoboi:",NBoi); } ... }

Processamento

Boi Gordo, Boi Magro

algoritmo() { ... escreva("Boimaisgordo:",NMG,"pesou",PMG); escreva("Boimaismagro:",nmm,"pesou",pmm); }

Saida de Dados

O Lao Repita

A instruo repita uma instruo de lao. Ela faz com que um bloco de comandos seja executado repetidamente at que uma determinada condio de controle seja verificada. O bloco executado 1 ou mais vezes. Essa condio de controle a instruo que controla at quando o bloco de comandos delimitados pelas chaves { } ser executado.

O Lao Repita
algoritmo() { //contaosdigitosdeumnumero inteiron,s; leia("informeumnumero:",n); s:=0; repita{ s:=s+1; n:=n/10; }ate(n<=0); escreva("onumeroinformadotem",s,"digitos."); }

O Lao Para

A instruo para uma instruo de lao. Ela faz com que um bloco de comandos seja executado repetidamente enquanto uma determinada condio de controle for verificada. Essa condio de controle a instruo que determina at quando o bloco de comandos entre as chaves ser executado.

O Lao Para
algoritmo() { inteiroi; para(i:=0ate100passo1) { escreva(i); } }

O Lao Para
Exemplo: Exibir os nmeros inteiros de 0 a 10 em ordem ascendente. algoritmo() { inteiroi; para(i:=0ate10incr1) { escreva(i); } }

O Lao Para
Exemplo: Exibir os nmeros inteiros de 0 a 10 em ordem decrescente. algoritmo() { inteiroi; para(i:=10ate0decr1) { escreva(i); } }

Funo
algoritmo() { inteiros; s:=soma(3,8); escreva("asomae:"); escreva(s); } // soma(inteiroa,inteirob) { inteiroc; c:=a+b; retornec; } //

Funo
algoritmo() { inteirofat; fat:=fatorial(7); escreva(fat); } // fatorial(inteiroi) { se(i<2){ retornei; } senao{ retornei*fatorial(i1); } } //

Registros

Registros so estruturas de dados heterogneas e seus elementos constituintes so referenciados pelo identificador do registro seguido pelo identificador de um campo desse registro. O identificador do registro separado do identificador do campo por um ponto.

Registros
algoritmo() { registro{ inteiroCODIGO; cadeiaDESCRICAO; }R; leia("informeocdigo:",R.CODIGO); leia("informeadescrio:",R.DESCRICAO); escreva("Ocdigoinformadofoi:",R.CODIGO); escreva("Adescriocorrespondente:",R.DESCRICAO); }

Registros
algoritmo() { registro{ caractera;inteirob;realc;cadeiad; }r; r.a:='X';r.b:=10; r.c:=3.1415;r.d:="CompiladorTurboC"; escreva("valoratribuidoavariavelr.a:",r.a); escreva("valoratribuidoavariavelr.b:",r.b); escreva("valoratribuidoavariavelr.c:",r.c); escreva("valoratribuidoavariavelr.d:",r.d); }

Matrizes

Matrizes so aglomerados de dados de um nico tipo. Por exemplo, podemos falar de matriz de inteiros, matriz de reais, matriz de cadeias e assim sucessivamente. A quantidade de elementos que a matriz contm e a forma como esto arranjados define um valor que conhecido como a dimenso da matriz. Conforme a dimenso da matriz ela chamada unidimensional, bidimensional, tridimensional. O interpretador Hall aceita matrizes de at 3 dimenses.

Matrizes

Declarando Matrizes

Para se declarar matrizes utiliza-se a palavra reservada matriz seguido do tipo e o nome da varivel seguido das dimenses entre colchetes. Quando a matriz possui mais de uma dimenso, na declarao os valores devem ser separados por dois pontos. matriz inteiro A[5]; matriz real B[3:4]; matriz real C[3:4:5];

Exemplos:

Matrizes
algoritmo() { matrizrealv[10]; inteiroi; para(i:=1ate10passo1) { leia(v[i]); v[i]:=v[i]*2; escreva(v[i]); } }

Matrizes
algoritmo() { matrizcadeiaj[5];//declaraumvetordotipocadeia inteiroi; i:=1; enquanto(i<=5){ leia("informevalor:",j[i]); i:=i+1; } i:=1; enquanto(i<=5){ escreva("valorinformado:",j[i]); i:=i+1; } }

Enumerao
algoritmo() { inteirodia; enumeracaoSemana={domingo,segunda,terca, quarta,quinta,sexta,sabado}; repita{ leia("informeodia(1a7):",dia); se(dia==segunda){escreva("segunda");} se(dia==terca){escreva("terca");} se(dia==quarta){escreva("quarta");} se(dia==quinta){escreva("quinta");} se(dia==sexta){escreva("sexta");} se(dia==sabado){escreva("sabado");} se(dia==domingo){escreva("domingo");} }ate(dia==0); }

Anda mungkin juga menyukai