1-procedure function vars
TRANSCRIPT
![Page 1: 1-Procedure Function Vars](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/1.jpg)
Procedimentos Procedimentos e Funçõese Funções
![Page 2: 1-Procedure Function Vars](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571fa854979599169926ac2/html5/thumbnails/29.jpg)
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.