Ana səhifə

Universidade Regional Integrada do Alto Uruguai e das Missões Campus Frederico Westphalen Departamento de Engenharias e Ciência da Computação Algoritmos e Estrutura de Dados I informática I


Yüklə 0.52 Mb.
səhifə19/23
tarix25.06.2016
ölçüsü0.52 Mb.
1   ...   15   16   17   18   19   20   21   22   23

14.Funções e procedimentos


Para facilitar a construção de grandes programas, utiliza-se o método de modularização, que consiste na divisão do programa em pequenas etapas, que são os módulos ou subprogramas.

O primeiro módulo ou subprograma, por onde começa a execução do programa recebe o nome de programa principal, e as outras são os subprogramas, que são executados sempre que ocorre uma chamada dos mesmos, através da especificação dos seus nomes.

A divisão de um programa em subprogramas é particularmente vantajosa quando uma mesma seqüência de comandos deve ser repetida várias vezes no programa, o que permite a confecção de um único subprograma, que pode ser freqüentemente solicitado e executado para valores diferentes de seus parâmetros.

Outra importância da modularização é que ela permite que diferentes programadores trabalhem simultaneamente na solução de um mesmo problema, através da codificação separada dos diferentes módulos.

Na linguagem Pascal temos dois tipos de subprogramas: procedimentos e funções.

14.1Procedimentos


Um procedimento (PROCEDURE) é um tipo de subprograma que se assemelha em muito com um programa em Pascal. Possui um cabeçalho de identificação com o nome do procedimento, uma lista opcional de parâmetros de comunicação, um bloco de declarações e um bloco de comandos.

Um procedimento é na realidade um programa com vida própria, com suas variáveis locais, mas que, para ser processado, tem que ser solicitado pelo programa principal ou por outro procedimento.

Um procedimento pode acessar todas as variáveis globais, desde que não esteja redefinidas dentro do procedimento. Se uma variável for redefinida, é criada uma nova variável local, sem ter nenhuma relação com a variável global (que deixa de ser visível dentro do subprograma).

Os procedimentos devem ser declarados antes de serem chamadas, porém em alguns casos, temos a necessidade de declarar uma rotina após sua chamada e nesse caso, devemos utilizar a declaração FORWARD.

Exemplo:

program tic_tac;

uses crt;

var o : integer;


procedure tic(VAR m: integer); FORWARD;
procedure tac(VAR n: integer);

begin


writeln('Tac');

n:= n - 1;

if n > 0 then tic(n);

end;
procedure tic;

begin

writeln(' Tic');



tac(m);

end;


begin

clrscr;


o:= 10;

tac(o);


readkey;

end.

14.2Funções


Em Pascal as funções podem ser vistas como um procedimento que retorna um único valor.

Uma função (FUNCTION) devolve ao programa que a ativou apenas um valor, calculado por ela mesma e alocado na variável que define o nome da FUNCTION.

Para transferir o controle para uma FUNCTION não basta mencionar seu nome, como no caso de PROCEDURES. Sua solicitação é caracterizada por um comando de atribuição de valor.

Em uma function deve-se declarar seu tipo, que coincide com o tipo de valor por ela calculado (integer, real, char, byte, boolean ou string).

Exemplo:

PROGRAM FUNCAO;

USES CRT;

VAR pr, imp: REAL;


FUNCTION calc_imposto(preco: REAL):REAL;

BEGIN


calc_imposto = preco * 0.17;

END;


BEGIN

READLN(pr);

imp = calc_imposto(pr);

WRITELN('Preço: ',pr,' Imposto: ',imp);

END.

14.3Parâmetros


Parâmetros são todas as variáveis ou valores passados para um subprograma. Também são chamados de argumentos.

14.3.1Passagem de parâmetros


Quando a variável que se quer trabalhar não é visível dentro do subprograma ela deve ser passada como parâmetro.

Há duas formas de se passar uma ou mais variáveis: por valor ou por referência.


14.3.1.1Passagem de parâmetros por valor


Quando uma variável é passada por valor para um prodedimento, seu valor original não é alterado pelo subprograma.

Declaração:



procedure (:);

Exemplo


Program PorValor;

Uses CRT;


var a, b, c: real;
procedure aumento(x, y, z: real);

begin


x:= x * 1.1;

y:= y * 1.2;

z:= z * 1.3;

writeln('No procedimento: ');

writeln(x:0:2);

writeln(y:0:2);

writeln(z:0:2);

end;
begin

a:= 100;

b:= 200;


c:= 300;

aumento(a, b, c);

writeln('No programa principal: ');

writeln(a:0:2);

writeln(b:0:2);

writeln(c:0:2);

readkey;

end.



14.3.1.2Passagem de parâmetros por referência


Quando uma variável é passada por referência para um prodedimento, seu valor original é alterado na execução do subprograma.

Declaração:



procedure (var :);

Observe que o que caracteriza uma passagem de parâmetro por referência é a declaração das variáveis recebidas como argumento do tipo VAR.


Exemplo

Program PorReferencia;

Uses CRT;
var a, b, c: real;
procedure aumento(var x, y, z: real);

begin


x:= x * 1.1;

y:= y * 1.2;

z:= z * 1.3;

writeln('No procedimento: ');

writeln(x:0:2);

writeln(y:0:2);

writeln(z:0:2);

end;
begin

a:= 100;

b:= 200;


c:= 300;

aumento(a, b, c);

writeln('No programa principal: ');

writeln(a:0:2);

writeln(b:0:2);

writeln(c:0:2);

readkey;

end.


Pode-se ainda mesclar os argumentos, com diversos tipos e formas de passagem dos mesmos.

Exemplo


Program DiversosParametros;

Uses CRT;


var a, b, c: real;

nome: string;


procedure aumento(var x: real; y: real; var z: real; nomelocal: string);

begin


x:= x * 1.1;

y:= y * 1.2;

z:= z * 1.3;

writeln(nomelocal);

writeln(x:0:2);

writeln(y:0:2);

writeln(z:0:2);

end;
begin

clrscr;

a:= 100;


b:= 200;

c:= 300;


nome:='No procedimento:';

aumento(a, b, c, nome);

nome:='No programa principal:';

writeln(nome);

writeln(a:0:2);

writeln(b:0:2);

writeln(c:0:2);

readkey;


end.

14.3.2 Argumentos passados a programas


Nomalmente as linguagens de programação permitem que o programa receba parâmetros passados na linha de comando no momento da sua ativação. Assim, quando usamos o comando format a: ou scan a: passamos o argumento a: para o programa.

Os argumentos passados aos programas em Pascal são verificados através de dois comandos (variáveis que estão armazenados os parâmentros):

PARAMCOUNT: armazena o número de argumentos passados na linha de comando. Paramcount igual a zero indica que não há argumentos na linha de comando.

PARAMSTR: armazena as strings de argumentos da linha de comando. ParamStr(1) é o primeiro argumento.

Exemplo:

program parametros;

uses crt;

var I: integer;

begin

if ParamCount = 0 then



begin

Writeln('Este programa não tem argumentos!');

exit;

end;


for I := 1 to ParamCount do

Writeln('O ',I,'º parâmetro é: ',ParamStr(I));

end.

1   ...   15   16   17   18   19   20   21   22   23


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©atelim.com 2016
rəhbərliyinə müraciət