Computação
Unidade XI:
Funções e Procedimentos
1
Escola Nacional de Ciências Estatísticas
Introdução
XI.1 Procedimentos
2
Escola Nacional de Ciências Estatísticas
Mensagem;
Esta linha consiste em uma chamada para a execução do procedimento definido com
o nome de Mensagem. Quando o computador “vê” esse comando ele sabe que deve
executar todos os comandos que façam parte do bloco de código do procedimento
denominado Mensagem (esses comandos são writeln(’ * * ENCE * *’); e
writeln(’=============’); ). Após executar o comandos da procedure Mensagem, o
computador retorna ao fluxo do programa principal, executando a sua terceira linha
(writeln). A seguir são executadas a quarta e quinta linhas do programa principal ( For
X:=1 to 10 do writeln(X, ’ ao quadrado = ‘, X*X); e writeln) e depois, na
sexta linha existe uma nova chamada ao procedimento Mensagem. Isto faz com que os
comandos do bloco de código deste procedimento sejam executados novamente
(writeln(’ * * ENCE * *’); e writeln(’=============’); ).
3
Escola Nacional de Ciências Estatísticas
program Escopo;
var X, Y: integer; {variáveis globais }
Procedure MostraSoma;
var Z: integer; {Z é uma variável local ao procedimento MostraSoma}
begin
Z := X + Y;
Writeln(’SOMA = ‘,Z);
end;
begin
writeln(’ Digite dois numeros ‘); readln(X); readln(Y);
writeln;
MostraSoma;
readln;
end.
Figura XI.3 – Variáveis Globais e Locais
4
Escola Nacional de Ciências Estatísticas
program Parametros;
var X, Y: integer; {variáveis globais }
5
Escola Nacional de Ciências Estatísticas
6
Escola Nacional de Ciências Estatísticas
program Valor_e_Referencia;
var X, Y: integer; {variáveis globais }
7
Escola Nacional de Ciências Estatísticas
NOTA TÉCNICA
Para que seja possível passar um vetor ou uma matriz como parâmetro para um
procedimento é preciso usar um “macete” da linguagem Pascal: especificar um “tipo-
array”, com o uso do comando type (o mesmo usado para a definição de registros). Veja o
exemplo a seguir:
program ParametroVetor;
const N=10;
8
Escola Nacional de Ciências Estatísticas
XI.2 Funções
9
Escola Nacional de Ciências Estatísticas
O exemplo das Figuras XI.9 e XI.10 ilustra como criar uma função
program ExemploFuncao;
var FAT: real;
end;
{programa principal}
begin
FAT:=Fatorial(5); {FAT recebe 5!}
writeln(FAT:5:2);
10
Escola Nacional de Ciências Estatísticas
Como isto estamos informando ao Pascal que será criada uma função denominada
Fatorial. Esta função possui um parâmetro de entrada, N, do tipo inteiro e retornará um
valor do tipo real 1 (isso é indicado pela palavra real; no final da definição da função).
Analisando o corpo da função Fatorial vemos que as duas primeiras linhas são
responsáveis por obter o fatorial de N e armazenar na variável local F. É importante agora
analisar a última linha dentro do código da função:
Fatorial := F;
Essa linha atribui o valor de F como valor de retorno da função. Toda função
precisa retornar um valor no final! Para fazer a função retornar um determinado valor,
você deve montar um comando de atribuição, onde o nome da função deve ser posto no
lado esquerdo (nesse exemplo, o nome é Fatorial) e o nome do valor a ser retornado
colocado no lado direito (no exemplo, o valor é o que está armazenado na variável local F).
Função Length
program ExemploLength;
var S1, S2: string;
begin
S1 := ‘ENCE‘; S2 := ‘Inconstitucional ‘;
readln;
end.
1
Conforme já foi mencionado em outras unidades, em situações práticas, geralmente usamos uma variável
REAL para armazenar o valor do fatorial, pelo fato do tipo REAL suportar valores maiores do que o tipo
INTEGER.
11
Escola Nacional de Ciências Estatísticas
Função Pos
program ExemploPos;
var S1, S2, S3: string;
begin
S1 := 'MATRIZES';
S2 := 'MARIA FOI AO SUPERMERCADO ';
S3:= 'ER';
Writeln(Pos('ATRIZ',S1)); {retorna 2}
Writeln(Pos('MERCADO',S2)); {retorna 19}
Writeln(Pos('BLABLA',S2)); {retorna 0, pois "blabla" não é uma substring de S2}
Writeln(Pos('BIL','PROBABILIDADE')); {retorna 6}
Writeln(Pos(S3,S2)); {retorna 17, pois é a posição da primeira ocorrência de S3 (‘ER’)
dentro de S2}
readln;
end.
Função Copy
12
Escola Nacional de Ciências Estatísticas
Veja que são requeridos três argumentos como entrada para a função. Estes
argumentos são descritos a seguir:
program ExemploFuncaoCOPY;
var S: string;
aux1, aux2: string;
begin
{string original}
S := 'ELA FOI PARA BRASILIA';
readln;
end.
2
Outras linguagens de programação também disponibilizam alguma função que
realiza a mesma tarefa que a Copy do Pascal. No entanto o nome da função costuma ser
outro, como Substr (caso das linguagens SQL, SAS e C++) ou MID (Visual Basic).
13
Escola Nacional de Ciências Estatísticas
Procedure Val
program ExemploProcedureVal;
var aux1, aux2: string;
CODE1, CODE2: integer;
N1, N2: integer;
begin
writeln('N1 = ', N1, ' Codigo de erro = ', CODE1); {aqui a conversão
foi OK}
writeln('N2 = ', N2, ' Codigo de erro = ', CODE2); {aqui a conversão
falhou! Maria não
pode virar número, oras!}
readln;
end.
14
Escola Nacional de Ciências Estatísticas
Procedure Str
Concatenação de Strings
program ExemploConcatenacao;
var aux1, aux2, S: string;
begin
aux1 := 'ESTATISTICA';
aux2 := 'GERAL';
readln;
end.
15
Escola Nacional de Ciências Estatísticas
program StringEhArray;
var Palavra1, Palavra2: string;
I, Tamanho: integer;
begin
palavra1 := 'MARROCOS';
Tamanho := length(palavra1);
writeln;
{posso percorrer o vetor na ordem inversa também}
writeln('palavra na ordem invertida: ');
for I:= Tamanho downto 1 do write(Palavra1[I]);
writeln;writeln;
palavra2 := 'BOLA';
writeln(palavra2, ' -> palavra original');
{eu posso ainda trocar qualquer caractere de uma string
usando um índice que representa a posição deste caractere na string}
palavra2[2]:='I'; {troquei O por I}
palavra2[3]:='C'; {troquei L por C}
writeln(palavra2, ' -> palavra depois da troca dos caracteres 2 e 3');
readln;
end.
16
Escola Nacional de Ciências Estatísticas
As funções só podem ser aplicadas a variáveis do tipo CHAR (ou seja, só conseguem
converter uma letra). A função UpCase não pode ser aplicada diretamente sobre uma string.
program FuncaoUpcase;
var P_minuscula, P_maiuscula: string;
I: integer;
begin
P_minuscula := 'estatistica';
P_maiuscula := p_minuscula;
readln;
end.
• Para gerar números aleatórios entre 0 and 1 usa-se a função Random sem
parâmetros. Por exemplo, chamar a função quatro vezes poderia gerar a
série: 0.1467, 0.3838, 0.1193, 0.8930.
17
Escola Nacional de Ciências Estatísticas
program DemonstraAleatorios;
var N, I: integer;
begin
readln;
end.
18
Escola Nacional de Ciências Estatísticas
Embora o assunto criação e utilização de bibliotecas seja muito interessante, ele não
será abordado neste curso, por não se tratar de um tema introdutório a programação.
Exercícios Propostos
(1) Faça um programa que pergunte o nome de uma pessoa via teclado. Em seguida
determine se o nome digitado começa com uma vogal.
(2) Faça um programa que leia uma palavra com tamanho mínimo de 5 e máximo de 15
letras numa variável chamada P1 (o sistema não deve aceitar palavras fora destas
especificações). Em seguida gere uma variável P2 da seguinte forma: ela deve conter as
duas primeiras e as duas últimas letras de P1 concatenadas. Exemplos:
P1 = “ESTATÍSTICA” P2 = “ESTA”
P1 = “MATEMATICA” P2 = “MACA”
P1 = “GOOGLE” P2 = “GOLE”
(3) Faça um programa que leia 5 palavras do teclado e armazene cada uma delas em um
vetor de 5 posições. A seguir calcule e imprima as seguintes informações:
(4) Construa o seguinte jogo utilizando a linguagem Pascal: o computador deve sortear um
número entre 1 e 15 - use os comandos Randomize e Random(15) + 1 - e armazenar este
número em uma variável (sem mostrar para o usuário).
19
Escola Nacional de Ciências Estatísticas
Em seguida ele deve pedir para o usuário adivinhar o número sorteado. O computador deve
dar 3 chances para o usuário acertar. Se o usuário errar na primeira e na segunda chances, o
computador deve dar uma dica para o usuário. Essa dica consiste em indicar se o número
digitado é maior ou menor do que o número que foi sorteado pelo computador.
(5)Considere a seguinte situação: um sistema que receba a matrícula dos alunos de uma
universidade que se inscreveram para realizar a disciplina optativa DATA MINING e que
depois compute algumas estatísticas. Nesta universidade hipotética a matrícula dos alunos é
uma string que possui 8 dígitos em um formato padronizado, conforme ilustra o seguinte
exemplo: M2007001.
Toda matrícula começa com a letra “M”, seguida de quatro dígitos que indicam o
ano em que o aluno ingressou na universidade (ex: 2007). Já os últimos três dígitos da
matrícula, indicam a posição do aluno no vestibular para o seu curso (se for “001”, isso
significa que ele foi o primeiro colocado. Se for “045”, significa que foi o quadragésimo
quinto e assim por diante). Observe mais alguns exemplos:
20