29
Capítulo III Modularização Procedimentos e Funções Procedimentos e Funções Universidade Federal de São Universidade Federal de São Carlos Carlos Departamento de Computação Departamento de Computação Aluna: Luanna Lopes Lobato [email protected] Professor: Sérgio Donizetti Zorzo Mestrado em Ciência da Mestrado em Ciência da Computação Computação Sistemas Distribuídos e Redes Sistemas Distribuídos e Redes São Carlos – Maio 2006 “Introdução a Computação

Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato [email protected]

Embed Size (px)

Citation preview

Page 1: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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”

Page 2: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.

Page 3: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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;

Page 4: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.

Page 5: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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;

Page 6: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.

Page 7: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.

Page 8: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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;

Page 9: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

{... 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.

Page 10: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

Exercício 1:

• Utilizar o programa anterior e criar uma rotina de Calcular a média.

Page 11: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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;

Page 12: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

procedure imprimirdados(aluno:tipoaluno; media:real); begin

writeln(aluno.nome); writeln (aluno.idade); writeln (media:4:3);

end;

{... continuação}

Page 13: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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}

Page 14: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

{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}

Page 15: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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();...

Page 16: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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;

Page 17: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.

Page 18: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.

Page 19: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.

Page 20: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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

Page 21: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

... 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));

Page 22: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.

Page 23: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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

Page 24: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

• 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

Page 25: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

Exemplo

Page 26: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

... continuação

Page 27: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

Função

Page 28: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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

Page 29: Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato luanna_lobato@dc.ufscar.br

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.