Você está na página 1de 25

Joaquim Barbosa

Var a,b,c: real; Var d,e: integer; Var f,g: char;

Var c: string[40];

* Comando de Atribuio

Sintaxe: <identificador_varivel>:= <expresso>; Exemplos: idade:=20; nome:='Joo'; Comandos de Sada Sintaxe: write <ou> writeln ('<string>', <varivel>); Exemplos: write ('Bom dia'); write ('Data'); writeln ('Bom dia'); writeln ('Data');

Comandos de Entrada Sintaxe: read <ou> readln (<variveis>); Exemplos: read (nota1,nota2,nota3);

1 precedncia

NOT (operador lgico)

2 precedncia

*,/,DIV,MOD (operaes)AND (operador lgico)

3 precedncia

+,- (operaes)OR (operador lgico) >,>=,<,<=,= (operadores relacionais)

4 precedncia

*
Para o desenvolvimento de programas em Pascal importante saber quais so as regras de precedncia de operadores, ou seja, qual operao ser executada primeiro

* Comandos de Seleo

Sintaxe: if <condio> then begin <comando ou bloco> end else begin <comando ou bloco>; end; Exemplos: readln(idade); if idade>=18 then writeln ('A pessoa maior de idade') else writeln ('A pessoa considerada menor');

* Comandos de Seleo Mltipla


CASE Este comando consiste de uma expresso (o seletor) e uma lista de comandos. Ou seja, caso o valor de uma varivel for igual ao que uma lista de alternativas testa, ento o comando desta varivel ser executado. Depois da execuo o controle vai para o prximo comando aps o CASE. Se no existir nenhum rtulo que satisfaa essa condio, o efeito do comando fica indefinido. O seletor deve ser de tipo escalar (integer ou char, exceto real). Sintaxe: case <expresso> of <lista de rtulos do case> : <comandos>; end; Exemplo: case codigo of 0: a:=0; 1: a:=succ(a); 2: begin a:=ln(a); writeln('Foi feito o logaritmo natural'); end; 3: a:= exp(a); else a:=1;

* Comandos de Repetio

WHILE Sintaxe: while (<condio>) do begin <comandos>; end REPEAT Sintaxe: repeat <comandos>; until (<condio>); FOR Sintaxe: for(<varivel>:=<valor_inicial> to <valor_final>) do begin <comandos>; end OBS.: "TO" incrementa(+1) um-a-um e "DOWNTO" decrementa(-1) um-a-um.

Sempre quando programamos devemos estar seguros de que os dados introduzidos em nosso software satisfaam uma determinada condio. Logo, consistncia de dados nada mais do que "obrigar" o utilizador a digitar, inserir valores corretos para que atinjam um determinado fim na execuo do programa. Por exemplo:(vamos pegar uma parte de um programa) ... writeln(`Digite o numerador`); readln(num); repeat writeln(`Digite o denominador`); readln(deno); until (deno<>0); resultado:=num/deno; ... Assim asseguramos de que o valor de "deno" nunca ser "0". Poderamos usar outra maneira... Por exemplo: ... writeln(`Digite o numerador`); readln(num); deno:=0; {fizemos isto para o valor de "deno" entrar no "while", mas depois ele ser mudado} while(deno=0) do begin writeln(`Digite o denominador`); readln(deno); end; resultado:=num/deno; ...

* - Sintaxe:

Type <identificador>=FILE OF <tipo>; Var <identificador2>:<identificador>;

program copia; var f: text; c:string[40]; i:integer; nota1:integer; nota2:integer; nota3:integer; begin assign(f,'destino.txt'); rewrite(f); for i:=1 to 10 do begin writeln('Escreva nome do aluno'); readln(c); write(f,c,' - '); writeln('Escreva a nota do 1P'); readln(nota1); write(f,nota1,' - '); writeln('Escreva a nota do 2P'); readln(nota2); write(f,nota2,' - '); writeln('Escreva a nota do 3P'); readln(nota3); write(f,nota3); writeln(f); end; close(f); end.

program alunos;

var f : text;
c : string[40]; i : integer; p1 : integer; p2 : integer; p3 : integer; begin assign(f,'e:\destino.txt'); rewrite(f); for i := 1 to 5 do begin writeln('Escreva o nome do aluno'); readln(c); writeln('Escreva a nota do 1 Periodo do aluno'); readln(p1); writeln('Escreva a nota do 2 Periodo do aluno'); readln(p2);

writeln('Escreva a nota do 3 Periodo do aluno');


readln(p3); writeln(f,c,'-',p1,'-',p2,'-',p3); end; close(f); end.

- Unidimensionais: Vetores - Bidimensionais: Matrize


VETOR Sintaxe:<nome array>: array [dimenso] of <tipo>; Declarao e exemplo: program vet_soma; Var var vet:array[1..6] of integer; v: array [1..5] of integer; Begin soma,cont:integer; vet[2]:=90; vet[4]:=45; Begin vet[5]:=30; soma:=0; end. writeln('digite os 5 valores'); Representao: Exemplo 2:

Incluso de 5 valores inteiros em um vetor, e depois disto emitir a soma dos mesmos.

for cont:=1 to 5 do readln(v[cont]); for cont:=1 to 5 do soma:=soma + v[cont]; writeln('Soma=',soma); end.

MATRIZ Sintaxe:<nome array>: array [dimenses] of <tipo>; Declarao e exemplo: Var mat:array[1..5,1..3] of integer; {matriz 19x3} Begin mat[1,2]:=10; mat[3,1]:=11; mat[5,3]:=12; mat[2,2]:=78; end. Representao: mat[linha,coluna]
Exemplo: Ler 6 valores em uma matriz de 2 linhas e 3 colunas e depois disto emitir a soma dos valores.

program matriz; var m:array[1..2,1..3] of integer; soma,contl,contc:integer; Begin writeln('Digite os 6 valores'); soma:=0; for contl:=1 to 2 do for contc:=1 to 3 do readln(m[contl,contc]); for contl:=1 to 2 do for contc:=1 to 3 do soma:=soma + m[contl,contc]; writeln('Soma=',soma); end.

* Subprogramas

Em PASCAL podemos definir blocos de execuo internos a um programa, chamados subprogramas. Cada bloco executa uma tarefa deternimada. Isto favorece a legibilidade e manuteno do programa, alm de auxiliar no domnio da complexidade quando definimos o programa, j que podemos tratar partes do problema de forma isolada. Subprogramas tm parmetros que podem ser de entrada, sada, ou ambos. H dois tipos de subprogramas em Pascal: os procedimentos (PROCEDURES) e as funes (FUNCTIONS).

* Diferenas entre Funes e Procedimentos

1.

As funes so avaliadas e retornam um valor ao programa que as chama, alm dos possveis parmetros de sada. 2. Um procedimento no retorna valor nenhum, a funo obrigatoriamente retorna um valor a uma determinada varivel. 3. Uma funo ativada quando avaliada uma expresso que a contm, isto , as funes so utilizadas da mesma forma que as funes predefinidas, como SQR, ORD, LN etc. 4. Um procedimento ativado atravs de um comando de chamada do procedimento.

* Variveis Globais: So as variveis declaradas no programa

que so conhecidas em todo programa e inclusive nos subprogramas contidos nele. * Variveis Locais: So as variveis declaradas em um subprograma, que so conhecidas em todo o subprograma, mas no no programa que contm o subprograma. Caso um subprograma contenha a definio de um outro subprograma (chamemos de "subsubprograma), as variveis declaradas no programa e no subprobrama sero visveis no subsubprograma, mas o contrrio no verdadeiro. No escopo do programa no podemos chamar o subsubprograma, assim como no podemos aceder s variveis do subprograma. * Uso de mesmos nomes: se um subprograma definir nomes de variveis iguais ao do programa principal, ao referenciar uma varivel vale a do escopo local.

* No cabealho de um subprograma (Funes ou procedimentos) definimos que tipo de

dados que sero passados como parmetros. H duas formas de passagem de parmetros de um programa para um subprograma: passagem porvalor ou passagem por referncia. - Passagem por valor: o parmetro formal comporta-se como uma varivel local do subprograma, de maneira que as alteraes feitas nessa varivel dentro do subprograma no tenham efeito sobre o parmetro real, que pertence ao programa que fez a chamada. Assim, o subprograma s utiliza o valor da varivel para um determindao fim, tendo o poder de alter-la s dentro do subprograma, depois da execuo desse subprograma, a varivel volta a ter o valor que tinha antes da execuo do subprograma. - Passagem por referncia: o parmetro formal comporta-se como se fosse uma varivel global, e todas as alteraes feitas nesta varivel so feitas efetivamente no parmetro real. Assim, a varivel pode ser alterada pelo subprograma e continuar com o valor alterado. Sintaxe: Na lista de parmetros podemos usar as seguintes formas para passagem por valor: <nome da funcao ou procedimento> ( i,j,k: integer; y: real; z: boolean); <nome da funcao ou procedimento> ( i: integer; j: integer; k: integer; y: real; z: boolean); Para parmetros por referncia deve-se utilizar "var" no cabealho. Por exemplo para passagem de j.k e z por referncia: <nome da funcao ou procedimento> ( i:integer; VAR j,k: integer; y: real; VAR z: boolean); <nome da funcao ou procedimento> ( i: integer; VAR j: integer; VAR k: integer; y: real; VAR z: boolean);

* Cabealho:

FUNCTION <nome da funo> (<lista de parmetros>): <tipo da funo>; Exemplo: FUNCTION Maximo(a,b:integer):integer; "a" e "b" so parmetros que serao passados "por valor" funo Maximo. Aps o trmino de da funo e os valores destes parmetros no estaro alterados. Mximo o identificador da funo e da varivel que deve conter o valor fornecido pela funo. Mximo tambm do tipo inteiro. Essa funo ativada atravs de uma expresso. Por exemplo: K:=Maximo(P1,P2) + Maximo (P3,P4); onde P1, P2, P3, P4 so variveis globais do tipo inteiro. E "K" uma varivel do tipo inteiro que recebe a soma das duas funes.

* Cabealho:

PROCEDURE <nome do procedimento>(<lista de parmetros>); Exemplo: PROCEDURE Estatistica (VAR media: real; VAR s,m: real; ka: integer); Os parmetros formais so media, s, m e ka. O parmetro media e as variveis s e m so do tipo real, e ka do tipo inteiro. O parmetro ka o nico parmetro com passagem por valor. Esse procedimento pode ser chamados por comandos como: Estatistica(lista,desvio,sol,n); ou Estatistica(aula,numero1,numero2,denominador) ;

* Faa um subprograma para verificar se um ano bissexto ou no. Utilize

a regra: Um ano bissexto divisvel por 4, mas no por 100, ou ento se divisvel por 400. Exemplo: 1988 bissexto pois divisvel por 4 e no por 100; 2000 bissexto porque divisvel por 400.

FUNCTION bissexto (a:integer) : boolean; Begin if ((a mod 4 = 0) and (a mod 100<>0)) or (a mod 400 = 0) then bissexto:= TRUE else bissexto:= FALSE; End;

* Faa uma funo que recebe um nmero inteiro por

parmetro e retorna verdadeiro se ele for par e falso se for mpar.

FUNCTION par (numero:integer):boolean; Begin if (numero mod 2)=0 then par:= TRUE else par:= FALSE; End;

* Faa um programa que tem


duas variveis globais inicializadas com 0: nmero e a sua percentagem(21% do valor do nmero). Faa um programa que l este nmero, envia como parmetros o nmero a sua percentagem, e atravs de um procedimento calcula este novo percentual, e retorna alterado este percentual ao programa principal para depois imprimi-lo.

PROGRAM TERCEIRO; Var numero,percentual:real; PROCEDURE calcula_percentual (n1:real; VAR per1:real); Begin per1:=n1*(21/100); end; Begin numero:=0; percentual:=0; writeln('Digite o nmero'); readln(numero); calcula_percentual(numero,percentual); writeln(percentual); end.

* Um subprograma recursivo quando se chama a si mesmo.


Veja no subprograma como definida a funo Fi:
Function Fi(t:integer):integer; Begin If t<=2 then Fi:=1 else Fi := Fi(t-2)+Fi(t-1); end;

* Tipo estruturado como coleo de elementos.- Sintaxe:

Type <identificador>= set of <tipo>;Operaes sobre conjuntos: Programa para testar se uma letra
Unio entre conjuntos Interseco de conjuntos Diferena de conjuntos Testa se A est no conjunto B Testa a desigualdade entre conjuntos Testa a presena de um elemento no conjunto A

vogal ou consoante:
program testa_letra; type letras = set of 'a'..'z'; var vogais:letras; letra:char; begin vogais:=['a','e','i','o','u']; writeln('Digite uma letra'); readln(letra); if letra in vogais then writeln('A letra ',letra,' eh uma vogal') else writeln('A letra ',letra,' eh uma consoante'); end.

A+B
A*B A-B

A<=B
A<>B

1 in A

* http://www.inf.pucrs.br/~fldotti/lapro1/pasca
l.htm