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

28
Linguagem PASCAL 1 e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Linguagem PASCAL Subprogramas Material elaborado pela Profª Alzennyr Cléa da UFRPE/DFM.

Upload: internet

Post on 16-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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.

Page 2: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 3: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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.

Page 4: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL 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.

Page 5: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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.

Page 6: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 7: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 8: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 9: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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;

Page 10: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 11: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 12: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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.

Page 13: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 14: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 15: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 16: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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;

Page 17: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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;

Page 18: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 19: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 20: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 21: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 22: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 23: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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.

Page 24: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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

Page 25: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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.

Page 26: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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;

Page 27: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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.

Page 28: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas

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