




Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
entrada e saida
Tipologia: Notas de estudo
1 / 8
Esta página não é visível na pré-visualização
Não perca as partes importantes!





Os procedimentos e fun¸c˜oes s˜ao ´uteis na programa¸c˜ao uma vez que permitem que um programa possa ser dividido em subprogramas. Quando um programa ´e grande, fica mais f´acil depur´a-lo se ele est´a dividido em subprogramas. A linguagem PASCAL possui dois tipos de subprogramas: procedimentos (proce- dure) e fun¸c˜oes (function).
Em PASCAL os procedimentos s˜ao definidos ap´os a declara¸c˜ao das vari´aveis do programa principal. O procedimento ´e ativado quando ´e chamado pelo programa principal. Eles podem ou n˜ao ter parˆametros. A sua forma mais simples ´e definida como a seguir, sem a inclus˜ao de parˆametros.
Os procedimentos s˜ao definidos da seguinte forma:
Procedure
Exemplo 1 O seguinte programa recebe dois n´umeros e, de acordo com um menu de op¸c˜oes faz diferentes opera¸c˜oes com esse n´umero.
Program Ex1; uses crt; var num1,num2 : integer; op:char;
procedure MostraMenu;
begin clrscr; writeln(’Digite a opcao desejada’); writeln(’ (1) Soma e produto’);
writeln(’ (2) Produto’); writeln(’ (3) Resto da div. por x’); end;
procedure SomaProduto;
begin writeln(’Soma = ’, num1+num2); writeln(’Produto = ’, num1*num2); end;
procedure Resto; var x: integer;
begin writeln(’Entre com o valor de x’); readln(x); if x<=num1 then writeln(’resto de ’,num1,’ por ’, x, ’ = ’,num1 MOD x) else writeln(x, ’maior que ’, num1); if x<=num2 then writeln(’resto de ’,num2, ’ por ’, x, ’ = ’, num2 MOD x) else writeln(x, ’maior que ’, num2); end;
Begin writeln(’Entre com dois numeros inteiros’); readln(num1,num2); MostraMenu; op:=readkey; case op of ’1’: SomaProduto; ’2’: Resto; else writeln(’opcao invalida’); end; readln; End.
Algumas observa¸c˜oes:
readln(x); writeln(x);
Os procedimentos readln e writeln precisam de parˆametros para executar sua tarefa. No caso de procedimentos definidos pelo usu´ario, a declara¸c˜ao da pro- cedure fica da seguinte forma:
procedure
A passagem de parˆametros entre o programa principal e o procedimento se d´a de duas formas:
writeln(’A’); x:=’A’; writeln(x);
Defini¸c˜ao dos parˆametros
Quando a passagem de parˆametros se d´a por vari´avel, o grupo de identificadores possui a palavra var na sua frente. Caso contr´ario, a passagem de parˆametros ´e por valor.
Exemplo 2 No procedimento P 1 os identificadores x e y s˜ao parˆametros cuja passagem se d´a por vari´avel, ao passo que z ´e um parˆametro com a passagem por valor. No caso do procedimento P 2 , o argumento w1 a passagem ´e por valor e w2 ´e por referˆencia.
procedure P1(var x,y : integer; z:integer);
procedure P2(w1:char; var w2: char);
Exemplo 3 Aqui mostramos o exemplo 1 modificado. O exemplo mostrado aqui ´e mais recomendado em programa¸c˜ao, pois n˜ao devemos alterar o valor de uma vari´avel global dentro dos subprogramas. Esse tipo de a¸c˜ao pode gerar erros dif´ıceis de serem depurados.
Program Ex1; uses crt; var num1,num2 : integer;
procedure Menu(var op:char);
begin clrscr; writeln(’Digite a opcao desejada’); writeln(’ (1) Soma e produto’); writeln(’ (2) Produto’); writeln(’ (3) Resto da div. por x’); op:=readkey; end;
procedure SomaProduto(x1,x2:integer);
begin writeln(’Soma = ’, x1+x2); writeln(’Produto = ’, x1*x2); end;
procedure Resto(n1,n2:integer); var x: integer;
begin writeln(’Entre com o valor de x’); readln(x); if x<=num1 then writeln(’resto de ’,n1,’ por ’, x, ’ = ’,n1 MOD x) else writeln(x, ’maior que ’, n1); if x<=num2 then writeln(’resto de ’,n2, ’ por ’, x, ’ = ’, n2 MOD x) else writeln(x, ’maior que ’, n2); end;
Begin writeln(’Entre com dois numeros inteiros’);
writeln(’ (3) Resto da div. por x’); RecebeOp:=readkey; end;
Begin writeln(’Entre com dois numeros inteiros’); readln(num1,num2); case RecebeOp of ’1’: SomaProduto(num1,num2); ’2’: Resto(num1,num2); else writeln(’opcao invalida’); end; readln; End.
Alternativamente, poderiamos colocar o comando op := RecebeOp, nesse caso o case fica como antes.
Exemplo 5 Program Calc;
var num,dig: integer;
function digito(n:integer) : integer; begin if n > 1000 then digito:= n mod 9 else digito:= (n mod 5) + (n mod 3); end;
begin readln(num,dig); if dig <> digito(num) then writeln(’digito invalido’); readln; end.
O tipo dos identificadores na declara¸c˜ao dos subprogramas deve ser b´asico: (a) inteiro, booleano, caracter ou real; (b) definido pelo programador. Os seguintes cabe¸calhos de procedimentos [TenAug86] s˜ao inv´alidos:
procedure proc(i:1..10); procedure proc2(a:array[1..10] of integer);
Podemos apresentar as seguintes declara¸c˜oes para passarmos “ arrays” como parˆametros:
type indice = 1..10; tipoa = array[indice] of integer;
procedure proc(i:indice); procedure proc2(a:tipoa);
[Asc99] Ana Fernanda Gomes Ascencio. L´ogica de programa¸c˜ao com Pascal. Makron Books Ltda, S˜ao Paulo, Brasil. 1999.
[CooCla85] Doug Cooper and Michael Clancy. Oh! Pascal! W.W. Norton and Company, New York and London. Second Edition, 1985.
[TenAug86] Aaron M. Tenenbaum and Moshe J. Augenstein. Data Struc- tures using Pascal. Segunda edi¸c˜ao, Prentice-Hall International Editions, EUA, 1986.
[Ziv99] Nivio Ziviani. Projeto de Algoritmos com implementa¸c˜oes em Pascal e C. Pioneira Inform´atica, S˜ao Paulo, Brasil. Quarta edi¸c˜ao, 1999.