1-procedure function vars

29
Procedimento Procedimento s e Funções s e Funções

Upload: nuno-carvalho

Post on 02-Jul-2015

122 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1-Procedure Function Vars

Procedimentos Procedimentos e Funçõese Funções

Page 2: 1-Procedure Function Vars

Procedimentos e FunçõesProcedimentos e Funções

Esta técnica de programação é das mais

utilizadas, considerando-se vantajosa no

desenvolvimento de grandes programas.

Page 3: 1-Procedure Function Vars

Procedimentos e FunçõesProcedimentos e FunçõesProblemas complexos exigem algoritmos complexos, mas é

sempre possível dividir um problema grande em problemas

menores.

Cada parte menor tem um algoritmo mais simples, e é este

bloco menor que é chamado de sub-rotina.

Quando uma sub-rotina é chamada por um programa

principal, é executada e no fim o controlo do processamento

retorna automaticamente para a primeira linha de instrução

após a linha que efectuou a sua chamada.

Page 4: 1-Procedure Function Vars

Ao se trabalhar com esta técnica, podemos ter

necessidade de dividir uma sub-rotina em outras outras

tantas quantas forem necessárias, procurando uma

solução mais simples de uma parte do problema

maior.

Procedimentos e FunçõesProcedimentos e Funções

O processo de dividir sub rotinas em outras é

denominado:

Método de Refinamento SucessivoMétodo de Refinamento Sucessivo

Page 5: 1-Procedure Function Vars

Procedimentos e FunçõesProcedimentos e Funções

Tipos de Sub-Rotinas

A linguagem Pascal permite a utilização de dois tipos de rotinas definidas pelo programador:

PROCEDUREPROCEDURE (procedimento) FUNCTIONFUNCTION (função)

Page 6: 1-Procedure Function Vars

Procedimentos e FunçõesProcedimentos e Funções

Um Procedure ou Function é, na verdade, um bloco de programa, a diferença entre os dois tipos de sub-rotina está no facto de:

ProcedureProcedure - poder ou não retornar um valor após o seu processamento;

FunctionFunction - irá retornar sempre um valor após o seu processamento;

Page 7: 1-Procedure Function Vars

Procedimentos e FunçõesProcedimentos e Funções

Para além das rotinas definidas pelo programador, existe na linguagem Pascal um conjunto de rotinas embutidas, ou seja, internas. Este tipo de rotinas embutida é conhecido pelo nome de UNIDADE, em inglês UNIT.

Uma Unit é na realidade uma biblioteca de funções e procedimentos, as quais também

podem ser criadas pelo próprio programador.

Page 8: 1-Procedure Function Vars

Unidade Descrição CRT Esta unidade é a mais utilizada na programação do

Turbo Pascal. Por esta razão, possui a maior parte das rotinas e variáveis de geração de som controle de video e teclado.

DOS Esta unidade possui as rotinas que envolvem a utilização do sistema operacional, na maior parte das vezes permitindo controles de baixo nivel

GRAPH Esta unidade possui rotinas destinadas à manipulação da capacidade grafica de um PC.

OVERLAY Esta unidade possibilita gerir as actividades de um programa, desta forma é possivel aproveitar uma mesma área de memória para rodar várias rotinas diferentes, economizando memória.

PRINTER Esta unidade permite declarar um arquivo tipo texto com o nome LST e associá-lo à impressora.

SYSTEM Esta unidade possui a maior parte das rotinas padrão da linguagem Pascal, não necessitando ser citada para ser usada, pois o Turbo Pascal já a executa de forma automática.

Unidades do Turbo PascalUnidades do Turbo Pascal

Page 9: 1-Procedure Function Vars

Unidades do Turbo PascalUnidades do Turbo Pascal

Para se fazer uso das UNIDADES é necessário o uso da instrução uses situada antes da declaração da instrução var.

SintaxeSintaxe:

uses <unidade>

Unidade – é uma das unidades citadas anteriormente na tabela.

Page 10: 1-Procedure Function Vars

Unidades do Turbo PascalUnidades do Turbo Pascalprogram unidade_crt;

uses crt;

var k : char;

Begin gotoXY (10,5); write ('Carregue numa tecla'); k:=readkey;

Repeat gotoXY (10,10); write ('Digite outro caractere');Until keypressed;

gotoXY (10,15); write ('O primeiro caractere foi:', k);

Repeat gotoXY (10,10); write ('Carregue em S para sair'); k:=readkey;Until k='S';

End.

Page 11: 1-Procedure Function Vars

Unidades do Turbo PascalUnidades do Turbo Pascal

Unit Unit_02;Interfaceuses crt;Procedure BarraHorizontal (x,y,n : Integer);Procedure BarraVertical (x,y,n : Integer);

ImplementationProcedure BarraHorizontal (x,y,n : Integer);var i: integer;begin FOR i:=0 TO n-1 DO begin gotoXY (x+i,y); write('X'); endend;

Procedure BarraVertical (x,y,n : Integer);var i: integer;begin FOR i:=0 TO n-1 DO begin gotoXY (x,y+i); write('X'); endend;End.

Criar e guardar uma unidade idêntica em PascalCriar e guardar uma unidade idêntica em Pascal

Aceder ao Menu Compile Aceder ao Menu Compile Destination File Destination File

Copiar o ficheiro *.TPU para a pasta UnitsCopiar o ficheiro *.TPU para a pasta Units

Page 12: 1-Procedure Function Vars

Unidades do Turbo PascalUnidades do Turbo Pascal

Criar e guardar um programa, em Pascal, idêntico ao que se segue:Criar e guardar um programa, em Pascal, idêntico ao que se segue:

Compilar o programa e aceder ao menu File Compilar o programa e aceder ao menu File DOS shell DOS shell

Program Barra;Uses crt,unit_02;

Begin BarraHorizontal (10,2,20); BarraVertical (10,2,5); BarraHorizontal (10,6,20); BarraVertical (30,2,5);End.

Page 13: 1-Procedure Function Vars

A sub-rotina do tipo ProcedureProcedure, apresenta a seguinte SINTAXE em Pascal :

procedure <nome> [(parâmetros)] var

<variáveis> begin

<instruções>end;

onde:<nome> - o nome atribuído ao procedimento;<parâmetro> - uma informação opcional;

Procedimentos e FunçõesProcedimentos e Funções

Page 14: 1-Procedure Function Vars

Aplicação prática de PROCEDURES num programaAplicação prática de PROCEDURES num programa

Desenvolver um programa calculadora que apresente um menu de selecções no programa principal.

Este menu deverá dar ao utilizador a possibilidade de escolher uma de entre quatro operações aritméticas.

Escolhida a opção desejada, deverá ser solicitada a entrada de dois números, e processada a operação, deverá ser exibido o resultado.

Procedimentos e FunçõesProcedimentos e Funções

Page 15: 1-Procedure Function Vars

Programa PrincipalPrograma Principal

1 - Apresentar um menu de selecção com cinco opções: 1 – Adição1 – Adição

2 – Subtracção2 – Subtracção

3 – Multiplicação3 – Multiplicação

4 – Divisão4 – Divisão

5 – Fim de Programa5 – Fim de Programa

2 - Ao ser seleccionado um valor, a rotina correspondente deverá ser executada;3 - Ao se escolher o valor 5, o programa deverá ser encerrado.

Procedimentos e FunçõesProcedimentos e Funções

Page 16: 1-Procedure Function Vars

UTILIZAÇÃO DE FUNCTIONS

Uma Function, tal como um Procedure, é um bloco de programa, no qual são válidas todas as regras já estudadas tanto de programação como de definição de uma sub-rotina, seus parâmetros e também da utilização de variáveis globais e locais.  

Procedimentos e FunçõesProcedimentos e Funções

Page 17: 1-Procedure Function Vars

A diferença em relação a uma Procedure, está no facto de retornar sempre um valorretornar sempre um valor. O valor de uma função é retornado no próprio nome da função. Quando se diz valor, devem ser levados em consideração os valores numéricos, lógicos ou literais (string ou caracteres).

Procedimentos e FunçõesProcedimentos e Funções

UTILIZAÇÃO DE FUNCTIONS

Page 18: 1-Procedure Function Vars

SintaxeSintaxe:

function <nome> [(parâmetros)] : <tipo>;

var <variáveis> begin

<instruções> end;

Nome - o nome atribuído ao procedimento;Parâmetro - uma informação opcional;Tipo - o tipo de dado a ser retornado pela função;

Procedimentos e FunçõesProcedimentos e Funções

UTILIZAÇÃO DE FUNCTIONS

Page 19: 1-Procedure Function Vars

Temos dois tipos de variáveis utilizadas em programação:

Procedimentos e FunçõesProcedimentos e Funções

Variáveis Globais

EVariáveis Locais

Page 20: 1-Procedure Function Vars

Variáveis Globais

Uma variável é considerada global se é declarada no início dum programa escrito em Pascal. Pode ser utilizada por qualquer sub-rotina subordinada. Este tipo de variável passa a ser visível em todas as sub-rotinas.

Procedimentos e FunçõesProcedimentos e Funções

Page 21: 1-Procedure Function Vars

Variáveis Locais

Uma variável é considerada local se é declarada dentro de uma sub rotina sendo somente válida dentro da rotina à qual está declarada. As restantes sub-rotinas e o programa principal não podem fazer uso daquelas variáveis porque não visualizam a sua existência.

Procedimentos e FunçõesProcedimentos e Funções

Page 22: 1-Procedure Function Vars

Procedimentos e FunçõesProcedimentos e Funções

1º exemploprogram TROCA1; var X : integer; A : integer; B : integer; begin readln(A); readln(B); X := A; A := B; B := X; writeln(A); writeln(B); end.

2º exemploprogram TROCA2;var A, B : integer;

procedure TROCA;var X : integer;begin X := A; A := B; B := X;end;

begin readln(A); readln(B); Troca; writeln(A); writeln(B);end.

Consideremos os seguintes exemplos, 1 - sem uso de sub-rotina 2 - com sub-rotina, fazendo uso do conceito de variável global e local:

Apesar de o 2º exemplo ser maior que o 1º em número de linhas, possibilita

economia de espaço em memória, pois o espaço a ser utilizado pela variável X

é somente solicitado quando a sub-rotina TROCA é executada.

Terminada a execução, a variável X é liberta, ficando em uso somente os

espaços reservados para as variáveis globais A e B.

Neste Caso:

Dependendo da forma como se trabalha com as variáveis, é possível economizar espaço em memória, tornando o programa mais eficiente.

Page 23: 1-Procedure Function Vars

PASSAGEM DE PARÂMETROS

A passagem de parâmetros ocorre quando é feita uma substituição dos parâmetros formais pelos reais no momento da execução da sub-rotina.

Procedimentos e FunçõesProcedimentos e Funções

Estes parâmetros serão passados por variáveisde duas formas:

Por ValorPor Referência

Page 24: 1-Procedure Function Vars

PASSAGEM DE PARAMETROS POR VALOR  

Caracteriza-se pela não-alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina.

O valor passado pelo parâmetro real é copiado para o parâmetro formal, que no caso assume o papel de variável local da sub-rotina.

Qualquer modificação que ocorra na variável local da sub-rotina não afectará o valor do parâmetro real correspondente, ou seja, o processamento é executado somente dentro da sub-rotina, ficando o resultado obtido "preso" dentro da sub-rotina.

Procedimentos e FunçõesProcedimentos e Funções

Page 25: 1-Procedure Function Vars

PASSAGEM DE PARAMETROS POR REFERÊNCIA

Caracteriza-se pela ocorrência da alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina.

Desta forma, qualquer modificação feita no parâmetro formal implica em alteração no parâmetro real correspondente.

A alteração efectuada é devolvida para a rotina “chamadora”.

Procedimentos e FunçõesProcedimentos e Funções

Page 26: 1-Procedure Function Vars

procedure FACTORIAL (N: integer; var FACT: integer);

var i: integer; begin FACT:=1; for i:=1 to N do FACT:=FACT* i;end;

Na Procedure, é necessário fornecer dois valores para os parâmetros N e FACT, sendo N a entrada do valor a ser calculado (passagem de parâmetro por valor) e FACT o

valor resultado obtido como retorno (passagem de parâmetro por referência).

Procedimentos e FunçõesProcedimentos e Funções

COMPARAÇÃO ENTRE PROCEDURES E FUNCTIONS

Page 27: 1-Procedure Function Vars

function FACTORIAL (N: integer) : integer;

var

i,FACT: inteiro ;

begin

FACT:=1;

for i:=1 to N do

FACT:=FACT*i;

FACTORIAL:= FACT;

end;

Se a sub-rotina for escrita como uma função, será necessária apenas a informação de um parâmetro, no caso o

valor do parâmetro N do qual deverá ser calculado o factorial, pois o resultado do cálculo será atribuído ao

próprio nome da função.

Procedimentos e FunçõesProcedimentos e FunçõesCOMPARAÇÃO ENTRE PROCEDURES E FUNCTIONS

Page 28: 1-Procedure Function Vars

Function Fi (t:integer):integer; Begin

If t<=2 then Fi:=1 else Fi := Fi(t-2)+Fi(t-1); end;

Um subprograma é recursivo quando se chama a si mesmo.

Procedimentos e FunçõesProcedimentos e FunçõesRECURSIVIDADE

Se o valor do parâmetro inteiro t for maior que 2, a função Fi é chamada, durante a própria execução, com outros valores. A função definida serve para determinar o n-ésimo termo da sequência de Fibonacci (1,1,2,3,5,8..). Por exemplo, se t inicialmente vale 10, a função Fi deve retornar o valor 55, que é o décimo termo da sequência.

Page 29: 1-Procedure Function Vars

Procedimentos e FunçõesProcedimentos e FunçõesRECURSIVIDADE

O processo recursivo é baseado na recorrência válida para essa sequência: todo termo é igual à soma dos dois termos anteriores. É importante que um programa recursivo deve ter obrigatoriamente uma condição que controla a sua execução ou fim, sob pena de produzir uma computação interminável. No exemplo, o fim da execução da função ocorre quando o parâmetro t é menor ou igual a 2, como cada chamada de Fi diminui o valor de t, o fim está garantido. Um programa recursivo é mais elegante e menor que a sua versão iterativa, além de exibir com maior clareza o processo utilizado, desde que o problema ou dados sejam naturalmente definidos através da recorrência. Por outro lado, um programa recursivo exige mais espaço de memória e é mais lento do que a versão iterativa.