Subprogramas
Em PASCAL podemos definir blocos de execução internos a um programa, chamados subprogramas. Cada bloco executa uma tarefa deternimada. Isto favorece a legibilidade e manutenção do programa, além de auxiliar no domínio da complexidade quando definimos o programa, já que podemos tratar partes do problema de forma isolada. Subprogramas têm parâmetros que podem ser de entrada, saída, ou ambos. Há dois tipos de subprogramas em Pascal: os procedimentos (PROCEDURES) e as funções (FUNCTIONS).Diferenças entre Funções e Procedimentos 1. As funções são avaliadas e retornam um valor ao programa que as chama, além dos possíveis parâmetros de saída. 2. Um procedimento não retorna valor nenhum, a função obrigatoriamente retorna um valor a uma determinada variável. 3. Uma função é ativada quando é avaliada uma expressão que a contém, isto é, as funções são utilizadas da mesma forma que as funções predefinidas, como SQR, ORD, LN etc. 4. Um procedimento é ativado através de um comando de chamada do procedimento.
Escopo
Variáveis Globais: São as variáveis declaradas no programa que são conhecidas em todo programa e inclusive nos subprogramas contidos nele.
Variáveis Locais: São as variáveis declaradas em um subprograma, que são conhecidas em todo o subprograma, mas não no programa que contém o subprograma. Caso um subprograma contenha a definição de um outro subprograma (chamemos de "subsubprograma), as variáveis declaradas no programa e no subprobrama serão visïveis no subsubprograma, mas o contrário não é verdadeiro. No escopo do programa nao podemos chamar o subsubprograma, assim como não podemos acessar as variáveis do subprograma.
Uso de mesmos nomes: se um subprograma definir nomes de variáveis iguais ao do programa principal, ao referenciar uma variável vale a do escopo local.
Parâmetros
No cabeçalho de um subprograma (Funções ou procedimentos) definimos que tipo de dados que serão passados como parâmetros. Há duas formas de passagem de parâmetros de um programa para um subprograma: passagem por valor ou passagem por referência.
- Passagem por valor: o parâmetro formal comporta-se como uma variável local do subprograma, de maneira que as alterações feitas nessa variável dentro do subprograma não tenham efeito sobre o parâmetro real, que pertence ao programa que fez a chamada. Assim, o subprograma só utiliza o valor da variável para um determindao fim, tendo o poder de alterá-la só dentro do subprograma, depois da execução desse subprograma, a variável volta a ter o valor que tinha antes da execução do subprograma.
- Passagem por referência: o parâmetro formal comporta-se como se fosse uma variável global, e todas as alterações feitas nesta variável são feitas efetivamente no parâmetro real. Assim, a variável pode ser alterada pelo subprograma e continuar com o valor alterado.
Variáveis Locais: São as variáveis declaradas em um subprograma, que são conhecidas em todo o subprograma, mas não no programa que contém o subprograma. Caso um subprograma contenha a definição de um outro subprograma (chamemos de "subsubprograma), as variáveis declaradas no programa e no subprobrama serão visïveis no subsubprograma, mas o contrário não é verdadeiro. No escopo do programa nao podemos chamar o subsubprograma, assim como não podemos acessar as variáveis do subprograma.
Uso de mesmos nomes: se um subprograma definir nomes de variáveis iguais ao do programa principal, ao referenciar uma variável vale a do escopo local.
Parâmetros
No cabeçalho de um subprograma (Funções ou procedimentos) definimos que tipo de dados que serão passados como parâmetros. Há duas formas de passagem de parâmetros de um programa para um subprograma: passagem por valor ou passagem por referência.
- Passagem por valor: o parâmetro formal comporta-se como uma variável local do subprograma, de maneira que as alterações feitas nessa variável dentro do subprograma não tenham efeito sobre o parâmetro real, que pertence ao programa que fez a chamada. Assim, o subprograma só utiliza o valor da variável para um determindao fim, tendo o poder de alterá-la só dentro do subprograma, depois da execução desse subprograma, a variável volta a ter o valor que tinha antes da execução do subprograma.
- Passagem por referência: o parâmetro formal comporta-se como se fosse uma variável global, e todas as alterações feitas nesta variável são feitas efetivamente no parâmetro real. Assim, a variável pode ser alterada pelo subprograma e continuar com o valor alterado.
Corpo da função/procedimento: nessa seção, fica a sub-rotina propriamente dita. Seu corpo deve ser delimitado pelas palavras-chave Begin e End.
Funções
Uma função é como sua similar em matemática: recebe um ou mais parâmetros e devolve um valor.
Para declarar uma função, devemos utilizar a palavra-chave “function”.
Após essa palavra-chave vem o nome da função e, opcionalmente, uma lista de parâmetros delimitados por parênteses. No final, temos o tipo de dado retornado pela função, separado por dois pontos (:).
A estrutura da função ficaria da seguinte forma:
Function <Nome da Função> (Lista de Parâmetros) : <Tipo de dados da função>;
<Bloco de Instruções>
End;
Para atribuirmos um valor de retorno à nossa função, basta atribuir o referido valor ao nome da função, ou à variável interna result. Observe o exemplo seguinte:
program compraringresso;
A estrutura da função ficaria da seguinte forma:
Function <Nome da Função> (Lista de Parâmetros) : <Tipo de dados da função>;
<Bloco de Instruções>
End;
Para atribuirmos um valor de retorno à nossa função, basta atribuir o referido valor ao nome da função, ou à variável interna result. Observe o exemplo seguinte:
program compraringresso;
var
{aqui declaramos as variaveis que
não estarão dentro da função.}
meu_dinheiro:real;
{aqui montamos a função.
iniciamos com function, o nome dela,
o que ela recebe para executar a function.
no nosso caso, dinheiro, que esta nos parenteses
e no final o tipo que ela vai retornar.}
function comprarIngressos (dinheiro:real):real;
{aqui iniciamos a declaração de varivaeis
que usaremos na função}
var
{ aqui declaramos a variavel que sera retornada
da funcao, note que ela tem que ser do tipo
que esta escrito na funcao.}
ingressos: real;
{ aqui colocamos a variavel valoringresso
que sera usada na funcao para ver quantos
ingressos serão comprados.}
valordoingresso: real;
{damos inicio}
begin
{ aqui colocamos o preço do ingresso}
valordoingresso := 10;
{agora o calculo para ver quantos ingressos conseguimos
comprar com o dinheiro dado na funcao}
ingressos := dinheiro/valordoingresso;
{ aqui retornamos os ingressos que conseguimos comprar}
comprarIngressos:= ingressos;
{para finalizar a função}
end;
{ depois de tudo declarado vamos ao execuçaõ do algoritmo}
begin
{aqui perguntamos o dinheiro e lemos como variavel meu_dinhero}
writeln('Quanto dinheiro voce tem para comprar os ingressos');
readln (meu_dinheiro);
writeln ('Com esse dinheiro voce conseguiu comprar : ');
{aqui chamamos a funcao, note que o dinheiro da função será
o meu dinheiro, qualquer variavel que colocarmos nos parenteses
sera usado como dinheiro para comprar ingresso
sera usado como dinheiro para comprar ingresso
tome cuidado com isso. É assim que funcionam os parâmetros}
writeln (comprarIngressos(meu_dinheiro), 'ingressos');
End.
No exemplo, temos uma função denominada comprarIngressos, que recebe um parâmetro de tipo real: dinheiro.
O resultado é atribuído à função na linha:
comprarIngressos := ingressos;
O resultado é atribuído à função na linha:
comprarIngressos := ingressos;
Poderíamos ainda reescrever essa linha como segue:
Result := ingressos;
O que dá na mesma, pois, como já foi explicado, também podemos retornar valores de uma função, utilizando a varíavel interna Result.
Note que a variável deve ser do mesmo tipo de dados retornado pela função.
Procedimentos
Um procedimento é um tipo de sub-rotina criado para desenvolver uma tarefa predeterminada em seu sistema, podendo essa tarefa ser genérica ou restrita a um determinado módulo de sua aplicação.
Por exemplo, podemos criar um procedimento que exiba os dados de um relatório independente do relatório escolhido.
Como já foi explicado, um procedimento não retorna valores à rotina que o chamou. Podemos utilizá-lo como se fosse uma nova instrução da linguagem.
Para declarar um procedimento, utilizamos a seguinte sintaxe:
Procedure <Nome do Procedimento> [<Lista de Parâmetros>];
[Var <Lista de Variáveis>;]
Begin
<Bloco de instruções>
End;Por exemplo, poderíamos ter o seguinte procedimento para resolver uma equação:
Program equacaozinha ;
var
resultado: real;
a, b, x, z: integer ;
procedure equacao ( a1, b1, x1, z1: integer); {parâmetros}
var
resultadin : real; {variavel local}
begin
resultadin:= (((2 + a1 )/( b1 + 3) )-( 2 * x1 + ( z1*z1*z1)));
resultado:= resultadin;
end;
Begin
readln (a);
readln (b);
readln (x);
readln (z);
writeln (resultado);
End.
Nenhum comentário:
Postar um comentário