Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos...

Post on 21-Apr-2015

110 views 0 download

Transcript of Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos...

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 Lobatoluanna_lobato@dc.ufscar.br

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.