SlideShare ist ein Scribd-Unternehmen logo
1 von 8
Downloaden Sie, um offline zu lesen
Algumas notas sobre PASCAL
PARTE II - Procedimentos e Fun¸c˜oes
Anjolina Grisi de Oliveira
1 Introdu¸c˜ao
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).
2 Procedimentos
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.
2.1 Procedimentos sem parˆametros
Os procedimentos s˜ao definidos da seguinte forma:
Procedure <nome do procedimento>;
declaracao de var.
Begin
comandos
End;
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’);
1
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:
• Os subprogramas podem incluir defini¸c˜oes locais, tanto de vari´aveis como
de constantes ou tipos. No exemplo 1, o procedimento Resto possui uma
vari´avel local (x). As defini¸c˜oes locais s´o existem durante a execu¸c˜ao do
subprograma. Por esse motivo, elas somente s˜ao acess´ıveis pelo subpro-
grama que as contem.
2
• As vari´aveis do programa principal s˜ao chamadas de vari´aveis globais
porque s˜ao acess´ıveis por todos os subprogramas, al´em do programa prin-
cipal. No exemplo 1, as vari´aveis num1 e num2 s˜ao globais.
• O escopo de um identificador define a por¸c˜ao do programa em que ele
atua. Portanto, o escopo das vari´aveis locais ´e o subprograma onde elas
foram definidas e os subprogramas contidos no subprograma onde elas
foram definidas. O escopo de uma vari´avel global ´e todo o programa. A
figura 1 ([CooCla85]) ilustra esse conceito.
– no programa A, os seus identificadores possuem como escopo os blo-
cos: A, B, C, D, E;
– no procedimento B, escopo: B,D;
– no procedimento C, escopo: C, E, F;
– na fun¸c˜ao D, escopo: D;
– no procedimento E, escopo: E;
– no procedimento F, escopo: F;
program A
procedure B
procedure C
procedure E
procedure F
function D
Figure 1: Escopo de identificadores
2.2 Procedimentos com parˆametros
Os parˆametros ou argumentos s˜ao usados para comunica¸c˜ao entre o programa
principal e os subprogramas. Na realidade, n´os j´a usamos essa comunica¸c˜ao
com os procedimentos pr´e-definidos da linguagem, como por exemplo o readln
e o writeln. Quando temos um trecho de programa como a seguir:
3
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 <identificador> (lista de argumentos);
declaracao dos identificadores locais
begin
comandos;
end;
A passagem de parˆametros entre o programa principal e o procedimento se
d´a de duas formas:
1. passagem por valor: nesse caso, o programa principal passa um valor para
o procedimento. Esse valor pode ser passado explicitamente, ou ent˜ao
passa-se o valor de uma vari´avel. Por exemplo, no programa seguinte
a segunda chamada do procedimento writeln passa o valor de x como
argumento.
writeln(’A’);
x:=’A’;
writeln(x);
2. passagem por referˆencia (ou por vari´avel): nesse caso, na chamada do sub-
programa o programa principal passa o endere¸co da vari´avel. A vari´avel
correspondente no subprograma ´e um nome alternativo da vari´avel da
chamada do subprograma. Mudan¸cas nessa vari´avel afetam a vari´avel do
programa principal.
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 P1 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 P2, 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);
4
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’);
5
readln(num1,num2);
Menu(op);
case op of
’1’: SomaProduto(num1,num2);
’2’: Resto(num1,num2);
else
writeln(’opcao invalida’);
end;
readln;
End.
3 Fun¸c˜oes
Fun¸c˜oes s˜ao subprogramas que retornam um ´unico valor para o programa princi-
pal. Esse valor ´e retornado no nome da fun¸c˜ao. A sua chamada pelo programa
principal se d´a da mesma forma da chamada de uma fun¸c˜ao pr´e-definida da
linguagem.
Declarando fun¸c˜oes
function <nome da funcao> : tipo do dado retornado;
declaracoes locais
begin
comandos
end;
function <nome da funcao> (lista de argumentos) : tipo do dado retornado;
declaracoes locais
begin
comandos
end;
Exemplo 4 Podemos ainda modificar o nosso exemplo 1. O procedimento
MostraMenu pode ser transformado numa fun¸c˜ao, uma vez que pode retornar
para o programa principal a op¸c˜ao teclada pelo usu´ario.
function RecebeOp :char;
begin
clrscr;
writeln(’Digite a opcao desejada’);
writeln(’ (1) Soma e produto’);
writeln(’ (2) Produto’);
6
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.
4 Arranjos como parˆametros
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:
7
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);
References
[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.
8

Weitere ähnliche Inhalte

Was ist angesagt?

Tutorial pascal zim
Tutorial pascal zimTutorial pascal zim
Tutorial pascal zim12anogolega
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em CElaine Cecília Gatto
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem CLeonardo Lima
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem csergiocrespo
 
Aula 03 estrutura de seleção
Aula 03   estrutura de seleçãoAula 03   estrutura de seleção
Aula 03 estrutura de seleçãoTácito Graça
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoMauro Pereira
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portuguesLaura
 
Programando em C++ // Estrutura Básica
Programando em C++ // Estrutura Básica Programando em C++ // Estrutura Básica
Programando em C++ // Estrutura Básica Yuri Camelo
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Aula6 - Linguagem C
Aula6 - Linguagem CAula6 - Linguagem C
Aula6 - Linguagem Capolllorj
 

Was ist angesagt? (20)

Linguagem C - Controle de Programa
Linguagem C - Controle de ProgramaLinguagem C - Controle de Programa
Linguagem C - Controle de Programa
 
Tutorial pascal zim
Tutorial pascal zimTutorial pascal zim
Tutorial pascal zim
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
5423 c ou c++
5423 c ou c++5423 c ou c++
5423 c ou c++
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Aula 03 estrutura de seleção
Aula 03   estrutura de seleçãoAula 03   estrutura de seleção
Aula 03 estrutura de seleção
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
Apostila c
Apostila cApostila c
Apostila c
 
Programando em C++ // Estrutura Básica
Programando em C++ // Estrutura Básica Programando em C++ // Estrutura Básica
Programando em C++ // Estrutura Básica
 
Modularização
ModularizaçãoModularização
Modularização
 
Linguagem c parte 1
Linguagem c parte 1Linguagem c parte 1
Linguagem c parte 1
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Aula6 - Linguagem C
Aula6 - Linguagem CAula6 - Linguagem C
Aula6 - Linguagem C
 

Andere mochten auch

Andere mochten auch (20)

XML & HTML
XML & HTMLXML & HTML
XML & HTML
 
Arquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaArquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemantica
 
XML - eXtensible Markup Language
XML - eXtensible Markup LanguageXML - eXtensible Markup Language
XML - eXtensible Markup Language
 
eXtensible Markup Language (XML)
eXtensible Markup Language (XML)eXtensible Markup Language (XML)
eXtensible Markup Language (XML)
 
Xml100 1
Xml100 1Xml100 1
Xml100 1
 
Banco de Dados XML
Banco de Dados XMLBanco de Dados XML
Banco de Dados XML
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLT
 
Apostila pascal
Apostila pascalApostila pascal
Apostila pascal
 
Apostila pascal
Apostila pascal Apostila pascal
Apostila pascal
 
Caderno didatico pascal
Caderno didatico pascalCaderno didatico pascal
Caderno didatico pascal
 
Guia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem PascalGuia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem Pascal
 
Apostila curso php_my_sql(portugues)
Apostila curso php_my_sql(portugues)Apostila curso php_my_sql(portugues)
Apostila curso php_my_sql(portugues)
 
Módulo 2 pascal
Módulo 2  pascalMódulo 2  pascal
Módulo 2 pascal
 
Passar de algoritmo para pascal
Passar de algoritmo para pascalPassar de algoritmo para pascal
Passar de algoritmo para pascal
 
Pascal
PascalPascal
Pascal
 
Aula 02 operadores aritiméticos
Aula 02   operadores aritiméticosAula 02   operadores aritiméticos
Aula 02 operadores aritiméticos
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
Apostila de-delphi
Apostila de-delphiApostila de-delphi
Apostila de-delphi
 
Agoritmo e l gica de programa--o - apostila pascal
Agoritmo e l gica de programa--o - apostila pascalAgoritmo e l gica de programa--o - apostila pascal
Agoritmo e l gica de programa--o - apostila pascal
 
Aula 01 introdução a linguagem pascal
Aula 01   introdução a linguagem pascalAula 01   introdução a linguagem pascal
Aula 01 introdução a linguagem pascal
 

Ähnlich wie Algumas notas sobre pascal

Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - SubalgoritmosCarlos Santos
 
Algoritmos computacionais
Algoritmos computacionaisAlgoritmos computacionais
Algoritmos computacionaisDérick Platini
 
T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)Carlos Santos
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlex Camargo
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlex Camargo
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhanyKaren Costa
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilabMarco Antônio
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfTREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfssuser059c2c1
 

Ähnlich wie Algumas notas sobre pascal (20)

Algoritmos - Procedimentos
Algoritmos - ProcedimentosAlgoritmos - Procedimentos
Algoritmos - Procedimentos
 
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
Algoritmos computacionais
Algoritmos computacionaisAlgoritmos computacionais
Algoritmos computacionais
 
T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
 
Manual robotec
Manual robotecManual robotec
Manual robotec
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhany
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
Parte1c
Parte1cParte1c
Parte1c
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilab
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Apostila linguagem pascal
Apostila linguagem pascalApostila linguagem pascal
Apostila linguagem pascal
 
Minicurso de USER RPL para HP 50G
Minicurso de USER RPL para HP 50GMinicurso de USER RPL para HP 50G
Minicurso de USER RPL para HP 50G
 
Man UAL
Man UALMan UAL
Man UAL
 
Resumo functions e procedures
Resumo functions e proceduresResumo functions e procedures
Resumo functions e procedures
 
Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfTREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
 
Tc aula 07
Tc aula 07Tc aula 07
Tc aula 07
 

Algumas notas sobre pascal

  • 1. Algumas notas sobre PASCAL PARTE II - Procedimentos e Fun¸c˜oes Anjolina Grisi de Oliveira 1 Introdu¸c˜ao 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). 2 Procedimentos 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. 2.1 Procedimentos sem parˆametros Os procedimentos s˜ao definidos da seguinte forma: Procedure <nome do procedimento>; declaracao de var. Begin comandos End; 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’); 1
  • 2. 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: • Os subprogramas podem incluir defini¸c˜oes locais, tanto de vari´aveis como de constantes ou tipos. No exemplo 1, o procedimento Resto possui uma vari´avel local (x). As defini¸c˜oes locais s´o existem durante a execu¸c˜ao do subprograma. Por esse motivo, elas somente s˜ao acess´ıveis pelo subpro- grama que as contem. 2
  • 3. • As vari´aveis do programa principal s˜ao chamadas de vari´aveis globais porque s˜ao acess´ıveis por todos os subprogramas, al´em do programa prin- cipal. No exemplo 1, as vari´aveis num1 e num2 s˜ao globais. • O escopo de um identificador define a por¸c˜ao do programa em que ele atua. Portanto, o escopo das vari´aveis locais ´e o subprograma onde elas foram definidas e os subprogramas contidos no subprograma onde elas foram definidas. O escopo de uma vari´avel global ´e todo o programa. A figura 1 ([CooCla85]) ilustra esse conceito. – no programa A, os seus identificadores possuem como escopo os blo- cos: A, B, C, D, E; – no procedimento B, escopo: B,D; – no procedimento C, escopo: C, E, F; – na fun¸c˜ao D, escopo: D; – no procedimento E, escopo: E; – no procedimento F, escopo: F; program A procedure B procedure C procedure E procedure F function D Figure 1: Escopo de identificadores 2.2 Procedimentos com parˆametros Os parˆametros ou argumentos s˜ao usados para comunica¸c˜ao entre o programa principal e os subprogramas. Na realidade, n´os j´a usamos essa comunica¸c˜ao com os procedimentos pr´e-definidos da linguagem, como por exemplo o readln e o writeln. Quando temos um trecho de programa como a seguir: 3
  • 4. 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 <identificador> (lista de argumentos); declaracao dos identificadores locais begin comandos; end; A passagem de parˆametros entre o programa principal e o procedimento se d´a de duas formas: 1. passagem por valor: nesse caso, o programa principal passa um valor para o procedimento. Esse valor pode ser passado explicitamente, ou ent˜ao passa-se o valor de uma vari´avel. Por exemplo, no programa seguinte a segunda chamada do procedimento writeln passa o valor de x como argumento. writeln(’A’); x:=’A’; writeln(x); 2. passagem por referˆencia (ou por vari´avel): nesse caso, na chamada do sub- programa o programa principal passa o endere¸co da vari´avel. A vari´avel correspondente no subprograma ´e um nome alternativo da vari´avel da chamada do subprograma. Mudan¸cas nessa vari´avel afetam a vari´avel do programa principal. 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 P1 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 P2, 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); 4
  • 5. 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’); 5
  • 6. readln(num1,num2); Menu(op); case op of ’1’: SomaProduto(num1,num2); ’2’: Resto(num1,num2); else writeln(’opcao invalida’); end; readln; End. 3 Fun¸c˜oes Fun¸c˜oes s˜ao subprogramas que retornam um ´unico valor para o programa princi- pal. Esse valor ´e retornado no nome da fun¸c˜ao. A sua chamada pelo programa principal se d´a da mesma forma da chamada de uma fun¸c˜ao pr´e-definida da linguagem. Declarando fun¸c˜oes function <nome da funcao> : tipo do dado retornado; declaracoes locais begin comandos end; function <nome da funcao> (lista de argumentos) : tipo do dado retornado; declaracoes locais begin comandos end; Exemplo 4 Podemos ainda modificar o nosso exemplo 1. O procedimento MostraMenu pode ser transformado numa fun¸c˜ao, uma vez que pode retornar para o programa principal a op¸c˜ao teclada pelo usu´ario. function RecebeOp :char; begin clrscr; writeln(’Digite a opcao desejada’); writeln(’ (1) Soma e produto’); writeln(’ (2) Produto’); 6
  • 7. 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. 4 Arranjos como parˆametros 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: 7
  • 8. 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); References [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. 8