Escopo de Variáveis

Propaganda
Centro Federal de Educação Tecnológica do Estado do Ceará
Linguagem de Programação – S1 Eletrotécnica
Linguagem Pascal – Procedimentos e Funções >> Prof. Adriano
Roteiro de Aula:
1. Funções
2. Passagem de Parâmetros
3. Escopo de Identificadores
1. Funções
Funções são estruturas que permitem ao usuário separar o código fonte de seus
programas em blocos de linhas de códigos. Sem as funções, o desenvolvimento de grandes
sistemas seria praticamente inviável.
Uma função em Pascal tem a seguinte forma geral:
function nome_função (declaração_parâmetros) : tipo_retorno;
{
corpo_da_função
}
O tipo_retorno é o tipo de variável que a função vai retornar (integer, string, real, etc.). A
declaração de parâmetros é uma lista com a seguinte forma geral:
nome1 : tipo; nome2 : tipo; ... nomeN : tipo;
Observe que o tipo deve ser especificado para cada uma das N variáveis de entrada. É
na declaração de parâmetros que informamos ao compilador quais serão as entradas da
função (assim como informamos a saída no tipo_retorno).
O corpo da função é a sua alma. É nele que as entradas são processadas, saídas são
geradas ou outras ações são executadas.
Segue abaixo o exemplo de uma simples função na linguagem C que recebe um número
e retorna o seu quadrado:
function Quadrado(x : integer) : integer;
{
Quadrado := (x*x);
}
O nome da função é Quadrado, que retorna um inteiro e recebe como parâmetro um valor
x, também do tipo inteiro. O corpo da função possui o cálculo que retorna o quadrado no valor x
(x*x, x “vezes” x). Segue abaixo exemplo de como utilizar a função Quadrado dentro de um
programa:
program TesteFuncao1
uses dos, crt;
function Quadrado(a : integer) : integer;
begin
Quadrado := (a*a);
end;
begin
num : integer;
Writeln("Entre com um numero: ");
Readln(num);
num := Quadrado(num);
Writeln(‘O quadrado do número informado é: ‘, num);
end.
Segue outro exemplo de uma função que verifica se um número é par ou ímpar:
program TesteFuncao2
uses dos, crt;
function EPar(x : integer) : integer;
begin
if ((x mod 2) = 0) then
/* Verifica se x é divisível por dois */
Epar := 0
/* Retorna 0 se for divisível (par) */
else
Epar := 1;
/* Retorna 1 se não for divisível (ímpar) */
end;
begin
num : integer;
Writeln("Entre com um numero: ");
Readln(num);
if (EPar(num)=0) then
Writeln("O numero é par.")
else
Writeln("O numero é ímpar.");
end;
Segue abaixo um exemplo mais complexo que verifica se um número é primo ou não.
Observe que desta vez a função retorna um caractere, se o número for primo retorna s, senão
retorna n:
program TesteFuncao2
uses dos, crt;
function EPrimo(n : integer) : string;
begin
i : integer;
if (n<2)
EhPrimo := ‘s’;
for i := 2 to n do
begin
if ((n mod i) =0)
EhPrimo := ‘n’;
end
EhPrimo := ‘s’;
end;
begin
num : integer;
writeln(‘Entre com numero: ‘);
Readln(num);
if (EPrimo(num) = ‘s’) then
writeln("O numero é primo.")
else
writeln("O numero não é primo.");
end;
* Se uma função retorna um valor, não precisamos necessariamente aproveitar este valor. Se nada for
feito com o valor de retorno de uma função, ele será descartado.
2. Passagem de Parâmetros
Por Valor
Quando chamamos uma função, os parâmetros formais da função copiam os valores dos
parâmetros que são passados para a função. Isto quer dizer que não são alterados os valores
que os parâmetros têm fora da função. Este tipo de chamada de função é denominado
chamada por valor. Isto ocorre porque são passados para a função apenas os valores dos
parâmetros e não os próprios parâmetros.
Por Referência
Outro tipo de passagem de parâmetros para uma função ocorre quando alterações nos
parâmetros formais, dentro da função, alteram os valores dos parâmetros que foram passados
para a função. Este tipo de chamada de função tem o nome de "chamada por referência". Este
nome vem do fato de que, neste tipo de chamada, não se passa para a função os valores das
variáveis, mas sim suas referências (a função usa as referências para alterar os valores das
variáveis fora da função).
3. Escopo de Identificadores
Identificador refere-se a nome de variáveis, funções, constantes simbólicas, etc.
O escopo de um identificador é a região do programa na qual ele pode ser referenciado.
Por exemplo, parâmetros e variáveis locais de uma função só podem ser referenciados
diretamente dentro da própria função. Nenhuma outra função pode fazer referência a eles.
As variáveis em Pascal podem ser declaradas basicamente de 3 maneiras diferentes:
dentro de uma função, fora de uma função, e como parâmetro de uma função. Essas 3
maneiras de declaração fazem com que as variáveis sejam chamadas de locais, globais ou
parâmetros formais.
Variáveis Globais
As variáveis globais existem durante a execução de todo o programa e podem ser
utilizadas por qualquer função. Elas devem ser declaradas fora de qualquer função.
Variáveis Locais
Uma variável local só pode ser utilizada pela função ou bloco que a declarou. Ela não é
reconhecida por outras funções e só pode ser usada dentro do bloco de função onde está
declarada. Uma variável local é criada quando a função começa a ser executada e destruída no
final da execução dessa função.
Parâmetros Formais
Os parâmetros formais são variáveis locais de uma função que são inicializadas no
momento da chamada da função. Eles também só existem dentro da função onde foram
declarados. Embora sejam utilizadas como inicialização da função, elas podem ser utilizadas
normalmente como uma variável local dentro do bloco de função onde estão.
Exemplo:
int contador;
//variável global;
int verifica(int);
//protótipo de função
void main()
{
int num, r; // variáveis locais a main()
contador = 100;
scanf("%d",&num);
r = verifica(num); // chamada da função
printf("Verificação = %d",r);
}
int verifica(int valor) //valor é parâmetro formal de verifica
{
int saida; // variavel local a verifica()
if(valor <= contador)
saida=0;
else saida=1;
return(saida)
}
A principal vantagem de utilizar variáveis locais é a economia de memória. Isso porque a
memória só será alocada quando for executado o bloco/função onde a variável local foi
declarada.
Download