Universidade Federal de São Carlos
Departamento de Computação
“Introdução a Computação”
Capítulo III
Modularização
Procedimentos e Funções
Aluna:
Mestrado em Ciência da Computação
Sistemas Distribuídos e Redes
Luanna Lopes Lobato
[email protected]
Professor:
Sérgio Donizetti Zorzo
São Carlos – Maio 2006
Introdução
• Evolução do Software
– Problemas mais complexos;
– Aumento do código;
– Replicação de código;
– Difícil acompanhar os trechos dos
programas.
• Utiliza-se Funções ou Procedimentos
• Trechos devem ser coerentes
– Cada um deve ter uma função ou tarefa
definida.
Procedimentos:
• Procedimentos são rotinas chamadas pelo
programa principal para executar alguma
operação específica;
• Forma Geral:
procedure nomeProc (lista_de_parametros)
Declaração Variáveis {Área de Declarações}
begin
Comandos {Corpo do Procedimento}
end;
Exemplo de atribuição
procedure nomeProc (lista_de_parametros)
Declaração Variáveis {Área de Declarações}
begin
Comandos
{Corpo do Procedimento}
end;
• É possível definir constantes, tipos, declarar
variáveis, funções e outros procedimentos, da
mesma forma como declarados no programa
principal.
• São válidos apenas no escopo do procedimento.
Procedimentos
• Para chamar o procedimento, basta utilizar seu
nome no programa principal;
A execução é desviada do programa principal
até o procedimento, para que este seja
executado e depois retorna na linha do programa
principal abaixo do linha da chamada do
procedimento;
Procedimentos
Program exemplo;
var i: integer;
... {Declaração de variáveis}
procedure exemplo(i:integer);
begin
... {corpo do procedimento}
end;
begin
... {corpo do programa}
exemplo(i)
{chama procedimento}
... {corpo do programa}
end.
Procedimentos - Exemplo 1
• Informar dados do aluno (nome, idade);
• Calcula a média das notas;
• Imprime os dados do aluno e média.
• Implementar a parte de imprimir como
procedimento.
Procedimentos - Exemplo 1
Program dados_aluno;
type tipoaluno = record
nome: string;
idade: integer;
notas: array[1..5] of real;
end;
var aluno : tipoaluno;
media,soma : real;
i : integer;
procedure imprime_dados(aluno:tipoaluno; media:
real);
begin
writeln(aluno.nome);
writeln (aluno.idade);
writeln (media:4:3);
end;
{... continuação}
begin
readln(aluno.nome);
readln(aluno.idade);
for i:=1 to 5 do
begin
readln (aluno.notas[i]);
end;
soma:=0;
for i:=1 to 5 do
begin
soma:=soma+aluno.notas[i];
end;
media:=soma/5;
imprime_dados(aluno,media);
end.
Exercício 1:
• Utilizar o programa anterior e criar uma
rotina de Calcular a média.
Resolução - Exercício 1
Program dados_aluno;
type tipoaluno = record
nome: string;
idade: integer;
notas: array[1..5] of real;
end;
var aluno : tipoaluno;
i : integer;
media : real;
{... continuação}
procedure imprimirdados(aluno:tipoaluno; media:real);
begin
writeln(aluno.nome);
writeln (aluno.idade);
writeln (media:4:3);
end;
{... continuação}
procedure calcularmedia(aluno: tipoaluno);
var media, soma: real;
i: integer;
begin
soma:=0;
for i:=1 to 5 do
begin
soma:=soma + aluno.notas[i];
end;
media:=soma/5;
imprimirdados(aluno,media);
end;
{... continuação}
{corpo do programa principal}
begin
writeln (‘Digite o nome do aluno’);
readln(aluno.nome);
writeln (‘Digite a idade do aluno’);
readln(aluno.idade);
writeln (‘Digite as 5 notas do aluno’);
for i:=1 to 5 do
begin
readln (aluno.notas[i]);
end;
calcularmedia(aluno);
end.
Observações
•
Se você for chamar um modulo (procedimento ou funcao),
lembre-se que este modulo deve ter sido declarado
previamente.
Procedure a ()
begin
...
end;
Procedure b ()
begin
a(); //a dever ter sido declarado primeiro
end;
Programa Principal
....
b();
...
Funções:
• Uma Função é parecida com os Procedimentos, tem
praticamente a mesma estrutura;
• Retorna um valor;
• Forma Geral:
function nomeFunc (lista_de_parametros): tipo de dado a
ser retornado
Declaração Variáveis {Área de Declarações}
begin
Comandos {Corpo da Função}
end;
Exemplo de atribuição
function nomeFunc (lista_de_parametros): tipo
Declaração Variáveis {Área de Declarações}
begin
Comandos {Corpo da Função}
nomeFunc:= x;
end;
O nome da variável que vai retornar tem
que ser igual ao nome da função.
Funções
Program exemplo;
var i: integer;
... {Declaração de variáveis}
function exemplo(i:integer): integer;
begin
... {corpo da função}
end;
begin
... {corpo do programa}
exemplo(i)
{chama função}
... {corpo do programa}
end.
Funções - Exemplo 2
•
•
•
•
Informar dois números;
Definir maior número;
Retornar o valor do maior número;
Imprimir o resultado no Programa Principal.
• Implementar a parte de verificar maior
número através de Função.
Procedimentos - Exemplo 1
Program calc_max;
var max, a, b: integer;
function maximo(a,b:integer): integer;
begin
if(a>b) then
maximo := a
else
maximo := b;
end;
... continuação
begin
writeln(‘Digite dois números’);
readln(a, b);
max := maximo(a,b);
writeln(‘O valor maximo é ', max)
end.
As 2 últimas linhas dentro do bloco poderia ser:
writeln(‘O valor maximo é ', maximo(a,b));
Exercício 2:
• Utilizar o programa anterior e criar uma
rotina de Calcular a Fatorial.
• Ler um nro inteiro;
• Chamar uma função e passar esse nro.
Resolução - Exercício 2
Program Fatorial;
function fat(n:integer): integer; {Início da Função}
var F,i:integer;
begin
F:=1;
for i:=2 to n do
F:=F*i;
fat:=F;
end; {Fim da função}
{Programa Principal}
var n:integer
begin
writeln(‘Entre com o número: ‘);
readln(n);
writeln(‘O fatorial de ‘,n,’ é: ‘,fat(n));
end.
Passagem por Valor e por Referência
• Passagem por Valor: apenas o valor da
variável é passado;
• Passagem por Referência: A variável é
passada.
– Utiliza-se o Var antes do parâmetro.
Exemplo
... continuação
Função
Passagem por Valor
Program dadosaluno;
var nome: string;
procedure mostranome(parametro:string);
begin
writeln('*********************************');
writeln(' Valor original', parametro);
parametro:= 'Luanna';
writeln(' Valor modificado' ,parametro);
end;
{corpo do Programa Principal}
begin
nome := 'Zorzo';
mostranome(nome);
writeln('Valor no programa' , nome);
readln;
end.
Passagem por Referência
Program dadosaluno;
var nome: string;
procedure mostranome(var parametro:string);
begin
writeln('*********************************');
writeln(' Valor original', parametro);
parametro:= 'Luanna';
writeln(' Valor modificado' ,parametro);
end;
{corpo do Programa Principal}
begin
nome := 'Zorzo';
mostranome(nome);
writeln('Valor no programa' , nome);
readln;
end.
Download

end - Departamento de Computação - Universidade Federal de São