Upload
internet
View
110
Download
0
Embed Size (px)
Citation preview
Capítulo III Modularização
Procedimentos e FunçõesProcedimentos e Funções
Universidade Federal de São Carlos Universidade Federal de São Carlos
Departamento de ComputaçãoDepartamento de Computação
Aluna: Luanna Lopes [email protected]
Professor:Sérgio Donizetti Zorzo
Mestrado em Ciência da ComputaçãoMestrado em Ciência da Computação
Sistemas Distribuídos e RedesSistemas Distribuídos e RedesSão Carlos – Maio 2006
“Introdução a Computação”
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);
beginwriteln(aluno.nome); writeln (aluno.idade); writeln (media:4:3);
end;
{... continuação}
beginreadln(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;
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.
{... continuação}
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 retornadoDeclaraçã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.
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;
Procedimentos - Exemplo 1
... 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.
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:integerbegin writeln(‘Entre com o número: ‘); readln(n); writeln(‘O fatorial de ‘,n,’ é: ‘,fat(n));end.
Resolução - Exercício 2
• 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.
Passagem por Valor e por Referência
Exemplo
... continuação
Função
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 Valor
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.