linguagem pascal1 ufrpe – deptº de estatística e informática disciplina: introdução à...

Post on 16-Apr-2015

102 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Linguagem PASCAL 1

UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à ComputaçãoProf.: Paulemir G. Campos

Linguagem PASCALLinguagem PASCAL

Subprogramas

Material elaborado pela Profª Alzennyr Cléa da UFRPE/DFM.

Linguagem PASCAL 2

SubprogramaçãoSubprogramação

A subprogramação é uma ferramenta que contribui com a tarefa de programar:– Favorecendo a estruturação do programa;– Facilitando a correção do programa;– Facilitando a modificação do programa;– Melhorando a legibilidade do programa;– Divisão do problema a ser resolvido em

partes (modularização).

Linguagem PASCAL 3

SubprogramaçãoSubprogramação

Com a modularização de um programa, as partes que o compõem podem ser desenvolvidas por diferentes equipes;

Para isto deve-se estabelecer antes padrões de programação;

Deve-se definir também que dependência haverá entre os vários subprogramas.

Linguagem PASCAL 4

SubprogramaçãoSubprogramação A dependência entre os sub-programas deve

ser a mínima possível; Um subprograma é um grupo de instruções

arranjadas de forma lógica, que executem uma ação bem definida;

A subprogramação tende a diminuir a complexidade da resolução de um problema já que, por um instante, a atenção é voltada apenas para uma parte do problema.

Linguagem PASCAL 5

SubprogramaçãoSubprogramação

As linguagens de programação oferecem algum tipo de suporte à subprogramação. Exemplos:– Algol: bloco;– FORTRAN: subrotina;– Modula: co-rotinas;– ADA: tarefas;– C: funções;– Pascal: procedimentos e funções.

Linguagem PASCAL 6

SubprogramaçãoSubprogramação Procedimentos

– Procedimento é uma forma de criar um sub-programa;

– Quando um determinado conjunto de instruções tiver que ser repetido dentro da solução de um problema, é conveniente colocá-lo dentro de um procedimento;

– Para se criar um procedimento é necessário:• Um identificador (o nome do procedimento);• Uma lista de parâmetros (que possibilitam a

comunicação entre o programa principal e o procedimento);

• As ações a serem executadas (que formam o corpo do procedimento).

Linguagem PASCAL 7

Funções– Função também é uma forma de criar um sub-

programa;– Procedimento e Função podem ambos retornar

valores através de seus parâmetros;– Entretanto, a função deve obrigatoriamente

retornar um valor processado através do seu nome identificador;

– Uma função deve ser ativada em um contexto de expressão.

SubprogramaçãoSubprogramação

Linguagem PASCAL 8

Existem problemas mais adequados ao uso de funções, enquanto outros adequam-se melhor ao uso de procedimentos;

Tudo que um procedimento pode fazer, uma função também pode;

Dicas para escolha do tipo de subprograma:– Quando usar funções, evite ao máximo a passagem de

parâmetros por referência;– Se o valor que é processado na unidade será reutilizado em

uma expressão, existem grandes possibilidades de que uma função seja mais adequada;

– Se o objetivo da unidade é apenas fazer uma mudança de estado (valor) em um ou mais objetos, adote um procedimento.

SubprogramaçãoSubprogramação

Linguagem PASCAL 9

SubprogramaçãoSubprogramação

Um subprograma pode ser ativado em qualquer parte do programa (em algumas linguagens somente depois de definido);

Sua ativação se dá através do uso de seu identificador como uma instrução;

Linguagem PASCAL 10

SubprogramaçãoSubprogramação

Exemplo de aplicação: Fazer um algoritmo para calcular a combinação (análise combinatória) de N elementos tomados P a P. Sabe-se que isto é possível através da seguinte expressão:

Cp=nn!

p! (n-p)!

com n p

Linguagem PASCAL 11

SubprogramaçãoSubprogramação A solução deste problema pelos métodos vistos

até agora (sem o uso da subprogramação) teria N e P como argumentos de entrada e C como argumento de saída;

Seriam necessários os seguintes passos:– Calcular o fatorial de N (armazenar numa Calcular o fatorial de N (armazenar numa

variável, ex: FatN);variável, ex: FatN);– Calcular o fatorial de P (armazenar numa Calcular o fatorial de P (armazenar numa

segunda variável, ex: FatP);segunda variável, ex: FatP);– Calcular o fatorial de N-P (armazenar numa Calcular o fatorial de N-P (armazenar numa

terceira variável, ex:FatNP);terceira variável, ex:FatNP);– E finalmente calcular a expressão: E finalmente calcular a expressão:

FatN/(FatP*FatNP).FatN/(FatP*FatNP).

Linguagem PASCAL 12

Subprogramação

Note que nesta solução teríamos que descrever várias vezes uma mesma seqüência de ações que são utilizadas para o cálculo do fatorial de um número;

Esta seqüência tem um comportamento padrão.

Linguagem PASCAL 13

Suponha que tivéssemos à disposição um procedimento genérico, chamado FAT, para calcular o fatorial de um número qualquer:

Como poderíamos fazer istoComo poderíamos fazer isto??

Subprogramação

Linguagem PASCAL 14

Procedimento FAT (x: inteiro, ResFat: inteiro); Declare

I:inteiro; Inicio

ResFat 1; Para I 1 até x Faça ResFat ResFat * I; Fim-Para;Fim;

Cor

poIdentificado

r

Lista de Parâmetros

Subprogramação

Linguagem PASCAL 15

SubprogramaçãoSubprogramação em PASCAL

Uma subrotina é um subprograma com variáveis e comandos próprios e que, para ser executada, precisa ser chamada pelo programa principal.

Na linguagem PASCAL existem dois tipos de subrotinas:– Procedimento (procedure)– Função (function)

Diferença entre elas:– A função retorna um valor– O procedimento não retorna valor

Linguagem PASCAL 16

Procedimento em PASCAL Sintaxe

procedure nome (lista-de-parâmetros);

declaração de variáveis locais;begin

comandos;end;

Exemplo:procedure Troca (var A,B: real);var aux: real;begin

aux:=A;A:=B;B:=aux;

end;

Linguagem PASCAL 17

Função em PASCAL Sintaxe

function nome (lista-de-parâmetros): tipo;

declaração de variáveis locais;

begin

comandos;

nome:=<valor a ser retornado>;

end;

Exemplo:function Hipotenusa (A,B: real): real;

begin

Hipotenusa:= sqrt( sqr(A) + sqr(B) );

end;

Linguagem PASCAL 18

Nomenclatura dos parâmetros

Existem dois tipos de parâmetros:– reais: presentes na unidade ativadora– formais: presentes na subrotina

procedure Troca (var A,B: real);…Troca ( x,y );…

Linguagem PASCAL 19

Passagem de parâmetros

Passagem– por valor: Apenas o valor é transferido. Então, as

alterações feitas nos parâmetros formais (da subrotina) não alteram os reais (unidade ativadora).

– por referência: O endereço do parâmetro real é transferido. Então, as alterações nos parâmetros formais da subrotina na verdade estão sendo feitas sobre os parâmetros reais.

Declaração:

procedure inicializa ( var A,B: real; C: real; var D: integer );

por referência

por valor

Linguagem PASCAL 20

A passagem de parâmetros é o meio de comunicação entre as unidades de um programa, pode acontecer com um dos seguintes propósitos: – apenas fornecer um valor para que a subrotina

realize um processamento;– apenas retornar um valor processado pela

subrotina;– fornecer um valor para processamento pela

subrotina, e também ser responsável pelo retorno de um valor processado.

Passagem de parâmetros

Linguagem PASCAL 21

Quando e porque passagem por valor:– apenas fornecer um valor à subrotina

para que ela realize um determinado processamento;

– utilizados somente para “valores de entrada”;

– protegem automaticamente o parâmetro real;

– deve ser explorado sempre que possível.

Passagem de parâmetros por valor

Linguagem PASCAL 22

Quando e porque passagem por referência:– quando a unidade ativada (subrotina)

necessitar retornar um valor a ser utilizado pela unidade ativadora;

– seu uso deve ser cuidadoso.

Unidade Ativada

Unidade Ativadora

Unidade Ativada

Unidade Ativadora

Passagem por referência

Unidade Ativadora

Unidade Ativada

Passagem por valor

Passagem de parâmetros por referência

Linguagem PASCAL 23

Declaração de variáveisDeclaração de variáveis

Variáveis Locais X Variáveis Globais– Uma variável é dita local quando sua declaração

estiver dentro de um subprograma, ou quando for declarado como parâmetro formal do subprograma;

– Uma variável local só é visível dentro do bloco onde foi declarada;

– Variáveis globais são aquelas declaradas em blocos mais externos, podendo ser referenciadas nas unidades mais internas.

Linguagem PASCAL 24

O conceito de variável global e local é muito relativo

Subprograma A

Subprograma B

Subprograma D

Subprograma E

Subprograma C

Declaração de variáveisDeclaração de variáveis

Linguagem PASCAL 25

Exemplos práticos

Nos próximos slides existem exemplos que mostram o uso prático de procedimentos e funções, bem como a passagem de parâmetros por valor e por referência.

Linguagem PASCAL 26

program Parametros;

procedure inicializa ( var A,B: real; C: real; var D: integer );begin

writeln ('Passo 1:', A:4:1, B:4:1, C:4:1, D:2);A:=1; B:=1; C:=1; D:=1;writeln ('Passo 2:', A:4:1, B:4:1, C:4:1, D:2);

end;

var X,Y,Z: real;W: integer;

beginX:=0; Y:=0; Z:=0; W:=0;inicializa (X, Y, Z, W);writeln ('Passo 3:', X:4:1, Y:4:1, Z:4:1, W:2);

end;

Linguagem PASCAL 27

program OrdemCrescente;

{ ------- SUBROTINA TROCA ------- }procedure Troca (var A,B: integer);var aux: integer;begin

aux:=A;A:=B;B:=aux;

end;{ ------- FIM TROCA ------- }

var L,M,N: integer;begin

{ ------- PROGRAMA PRINCIPAL ------- }

readln (L, M, N);if (L>M) then Troca(L,M);if (M>N) then Troca(M,N);

if (L>M) then Troca(L,M);writeln(L, M, N);

{ ------- FIM PRINCIPAL ------- } end.

Linguagem PASCAL 28

program Diagonal;

{Diagonal de um paralelepípedo }

{ Funcao Hipotenusa }function Hipotenusa (A,B: real): real;begin

Hipotenusa:= sqrt ( sqr(A) + sqr(B) );end;{ Fim Funcao Hipotenusa }

var A, B, C, D: real;begin

{ Programa Principal }

readln (A, B, C); { dimensoes }D := Hipotenusa ( Hipotenusa (A, B), C );writeln (D);

{ Fim Programa Principal }

end.

BCD

A

top related