Buscar

Curso Virtual Pascal Aula 26

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 1/11
Aula 26: Modularização e Subprogramas: Funções e Exercícios 
Objetivos:
       Esta aula destina­se ao estudo da Modularização e Subprogramas. Funções: declaração e
aplicações.Funções recursivas.
Material de Referência:
Livro "Introdução à Ciência da Computação", Agosto de 1999, Antonio Benedito Coimbra Sampaio;
SCHMITZ, Eber Assis. TELES, Antônio Anibal de Souza. PASCAL e Técnicas de Programação ­ Rio de Janeiro ­ RJ .:
LTC Editora, 1988.
Atividades da Unidade:
1. Registrar presença
2. Seguir Roteiro Abaixo:
Anterior.gif
(632
Funções Exercícios
1. Funções
SUBPROGRAMAS
    Até agora temos desenvolvido programas que englobam a lógica completa do algoritmo para a solução de
um  determinado  problema.  É  comum,  em  programação,  decompor  a  lógica  de  programas  complexos  em
programas  menores  e,  depois,  juntá­los  para  compor  o  programa  final.  Essa  técnica  de  programação  é
denominada programação modular.
    A programação modular consiste num método para facilitar a construção de grandes programas, através de
sua divisão em pequenas etapas, que são os módulos ou subprogramas e para possibilitar o reaproveitamento
de código, já que podemos utilizar um módulo quantas vezes for necessário, eliminando assim a necessidade de
escrever o mesmo código do programa em situações repetitivas. 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.
       A modularização, em Pascal, pode ser  feita através de procedimentos  (procedures) e  funções  (functions).
Isso é  feito associando­se um nome a uma seqüência de comandos através do que chamamos Declaração do
Procedimento ou da Função. Pode­se, então, usar o nome do procedimento ou da função dentro do corpo do
programa,  sempre que desejarmos que o  seu bloco de  comandos  seja  executado,  isso  é  o que  chamamos de
Chamada do Procedimento ou da Função.
Funções
   A estrutura de uma função (function) é muito parecida com um procedimento. Pode­se imaginar que uma
função é um procedimento com características especiais quanto ao retorno de valores.A principal diferença é
que o identificador de uma função assume o valor de retorno da função. Uma função deve sempre retornar um
valor e em Turbo Pascal, este valor é retornado no nome da função.
No Turbo Pascal, uma função pode ser tão bem elaborada quanto um programa qualquer.
        Uma  característica  que  distingue  uma  função  de  um  procedimento  é  que  a  função  pode  ser  impressa,
atribuida ou participar de cálculos como se fosse uma variável qualquer.
Declaração de funções
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 2/11
    A declaração de uma função é muito parecida com de uma procedure que por sua vez é parecida com a de
um programa, vejamos:
Function Nome_da_função(parâmetros) : Tipo_da_função;
< área de declarações >
Begin
    corpo da função
End;
    A formação do nome da função deve seguir as mesmas regras para formação de identificadores em Turbo
Pascal.  Dentro  dos  parênteses  devemos  declarar  os  parâmetros  e  seus  respectivos  tipos  dos  quais  a  função
depende. O tipo de valor retornado pela função também deve ser declarado.
    Na área de declarações, podemos declarar labels, constantes, variáveis e até mesmo Procedures e Functions.
Devemos lembrar que tais elementos só poderão ser utilizados dentro do corpo da função, pois são locais a ela.
Abaixo, temos o exemplo de uma função.
program Prog;
var A,B,C: real;
function PROD(X,Y : real) : real;
begin
    PROD := X * Y;
end;
{­­* PROGRAMA PRINCIPAL *­­}
begin
    A := 2;
    B := 110;
    C := PROD(A,B);
    write (C);
end.
OBS.: O resultado impresso será 20.
    Na declaração da função, além do que está dentro dos parênteses, há mais uma definição, indicando que a
função é do tipo real, ou seja, retorna ao local onde foi chamada, assumindo a condição de uma variável real.
Neste caso, a função só assume valores coerentes com essa declaração.
    Como uma função pode ser impressa, atribuida ou participar de cálculos como uma variável qualquer, isto
nos permite, em vez de utilizar a variável C, imprimir diretamente a função da seguinte maneira:
WRITELN (PROD(A,B));
E teremos o mesmo resultado.
Outro exemplo:
    Vejamos uma função que soma dois números inteiros digitados via teclado:
Program Prog;
var x,y;integer;
function SOMA(A,B : integer) : integer;
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 3/11
begin
    SOMA := A + B;
end;
{­* PROGRAMA PRINCIPAL *­­}
begin
    readIn (X);
    readIn (Y);    
    writeIn (SOMA (X,Y));
end.
OBS.: Na declaração da função podemos acrescentar a cláusula VAR e obter os mesmos recursos adicionais do
procedimento feito desta forma.
program Prog;
var A,B,C: real;
function PROD(X : real; var Y : real) : real;
    begin
    PROD := X * Y;
    X := 1; Y := 1
    end;
{­­* PROGRAMA PRINCIPAL *­­}
begin
    A := 2;
    B := lo;
    writeln (PROD (A,B));
end.
    Após a chamada da função, as variáveis X e Y terminam valendo 1. Mas na declaração da função somente a
variável Y recebe VAR. Isto  implica que o valor  final de Y é passado de volta ao  local onde  foi  solicitada a
função, fazendo com que B passe a tomar­se 1 em vez do valor original l0 Isto tudo não ocorreu com a variável
A, que continua valendo 2 tal como antes.
    No caso de uma função ser do tipo STRING, deve­se definir primeiro o tipo de dado e depois colocar o nome
deste tipo na declaração da função.
Type
STR1O : string[10];
function EXEMPLO( ) : STR1O;
 
Exemplos:
 
Program Exemplo_1;
Uses CRT;
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 4/11
Var x,y : Real; (* variáveis globais *)
Function  Soma(a,b:real):real;  (*  Soma  é  uma  função  que  depende  de  dois  parâmetros  reais  e
devolve um valor real *)
    Begin
        Soma:=a+b; (* reparem que o valor da funçåo é retornado p. seu nome *)
    End;
    Begin
        ClrScr;
        x:=Soma(4,5);
        y:=Soma(3,6)­Soma(45.5,5.6);
        Writeln(x:10:2,y:10:2);
        Writeln;
        Write('Valor de x ­­> ');
        Readln(x);
        Write('Valor de y ­­> ');
        Readln(y);
        Writeln;
        Writeln(Soma(x,y):10:2);
    End.
 
Program Fat;
Uses CRT;
{Programa para calcular o fatorial de um número lido do teclado, usando o conceito de
Function}
Label inicio,fim;
Var n : Integer;
tecla : char;
Function Fatorial(numero:integer) : Real;
    Var i : Integer;
    Fat : Real;
    Begin (* da função Fatorial *)
        Fat:=1;
        If numero>1
    Then Begin
        i:=1;
        Repeat
            i:=i+1;
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 5/11
            Fat:=Fat*i;
        Until i=numero;
   End;
    Fatorial:=Fat;
End; (* da função fatorial *)
    Begin (* do programa *)
    ClrScr;
    inicio:
        Write('Valor de n (menor que 0 = fim) ­­> ');
        Readln(n);
        Writeln;
        If n<0
        Then Begin
            Write('Não existe fatorial de numeros negativos');
        Goto fim;
    End
        Else Writeln('Fatorial de n = ',fatorial(n):10:0);
            Writeln;
            Goto inicio;
        Fim:
    End. (* do programa*)
 
Program Fibonacci;
Uses CRT;
{Programa  para  determinar  um  determinado  elemento  da  seqüência  de  Fibonacci.  A  seqüência  de
Fibonacci é definida como
Fib(0) = 0
Fib(1) = 1
Fib(n) = Fib(n­1) + Fib(n­2)}
    {Como podemos ver, o elemento atual é determinado pela soma dos dois elementos anteriores}
    Label inicio;
    Var numero:integer;
    tecla : char;
    Function Fib(n:integer):integer;
        Var a1,a2,i,pe : Integer;
        Begin
            if n=0
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 6/11
            Then Fib:=0
         Else If n=1
         Then Fib:=1
         Else Begin
            a1:=0;     a2:=1;    i:=1;
        Repeat
            pe:=a1+a2;
            i:=i+1;
            a1:=a2;
            a2:=pe;
          Until i=n;
          Fib:=a2;
        End;
    End;
    Begin
        ClrScr;
        inicio:
        Write('Fib(');
            Read(numero);
        Writeln(') = ',fib(numero));
        Writeln;
        Write('Deseja continuar ? ­­> ');
        Readln(tecla);
        writeln;
        writeln;
        If tecla='s' Then goto inicio;
End.
 
Recursividade
       Recursão é um método geral para resolver problemas reduzindo­os a problemas mais simples do mesmo
tipo. A estrutura geral de uma solução recursiva de um problema é assim :
    Resolva de forma recursiva um problema
Se o problema é trivial, faça o obvio (resolva­o)
Simplifique o probelma
Resolva de forma recursiva (um problema mais simples)
Combine (na medida do possível) a solução do(os) problemas mais simples em uma solução do problema
original
    Um subprograma recursivo chama a si próprio constantemente, cada vez em uma situação mais simples, até
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 7/11
chegar ao caso trivial, quando pára.
Exemplos :
a. Somatório de inteiros ­ Se n =1; Somatório = 1. Caso contrário Somatório = n + Somatório(n­1)
b. Fatorial ­ Se n=0 ou n=1 ; Fatorial = 1. Caso contrário Fatorial = n*Fatorial(n­1)
c. MDC ­ Se b divide a, então o MDC é b. Caso contrário, MDC(a,b) = MDC(b,a mod b)
d. N­ésimo termo da série de Finonacci . 1° e 2° = 1 e n­ésimo = (n­1)+(n­2)
       A  linguagem  Pascal  e  o Turbo  Pascal  permitem  a  utilização  de  funções  recursivas.  Uma  função  é  dita
recursiva  quando  ela  chama  a  si  mesma.  Devemos  tomar  cuidado  ao  lidar  com  esse  tipo  de  função,  pois
podemos criar loops infinitos. Existem pessoas que têm facilidade para pensar recursivamente e outras não. A
recursividade permite criar funções elegantes e torna os programas mais fáceis de serem entendidos. Abaixo,
temos os mesmos programas anteriores, só que utilizando o conceito de recursividade.
Exemplos:
Program Fatorial;
Uses CRT;
Label inicio,fim;
Var n : Integer;
tecla : char;
Function Fat(n:integer):real;
    Begin
        if n=0
        Then Fat:=1
        Else Fat:=n*Fat(n­1); (* repare que estamos chamando novamente a funçåo Fat *)
    End;
  
Begin
    ClrScr;
    inicio:
    Write('Valor de n (menor que 0 = fim) ­­> ');
    Readln(n);
    Writeln;
    If n<0
        Then Begin
                Write('Não existe fatorial de números negativos');
        Goto fim;
        End
        Else Writeln('Fatorial de n = ',fat(n):10:0);
            Writeln;
            Goto inicio;
        Fim:
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 8/11
End.
 
Program Fibonacci;
Uses CRT;
Label inicio;
Var numero:integer;
tecla : char;
Function Fib(n:integer):integer;
Begin
    If n=0
    Then Fib:=0
    Else If n=1
    Then Fib:=1
    Else Fib:=Fib(n­1)+fib(n­2);
End;
Begin
ClrScr;
    inicio:
    Write('Fib(');
    Read(numero);
    Writeln(') = ',fib(numero));
    Writeln;
    Write('Deseja continuar ? ­­> ');
    Readln(tecla);
    writeln;
    writeln;
    If tecla='s' Then goto inicio;
End.
 
 2. Exercícios
Construa "Functions" para :
a) Calcular N!
b) Calcular AB
c) Calcular:   
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 9/11
d) Calcular:  
f) Retornar TRUE caso um número seja par, FALSE caso contrário
g) Retornar TRUE caso um número seja ímpar, FALSE caso contrário
 
2. Faça uma FUNCTION que codifique uma mensagem, da seguinte forma:
A por Z
B por Y
C por X
..
X por C
Y por B
Z por A
Obs.: a Rotina deverá fazer o mesmo para letras minúsculas.
3. Faça uma FUNCTION para transformar as letras de uma STRING de minúsculas para maiúsculas
4. Faça uma FUNCTION para transformar as letras de uma STRING de maiúsculas para minúsculas
5. Dado um vetor com n elementos numéricos,  faça uma FUNCTION que verifique se um dado valor
existe neste vetor
6. Faça uma FUNCTION para acrescentar N espaços em branco a esquerda de uma STRING qualquer
7. Faça uma FUNCTION para acrescentar N espaços em branco a direita de uma STRING qualquer
8. Dado uma STRING qualquer e um valor N  ,  faça uma FUNCTION para gerar uma nova STRING
que  tenha  este  tamanho  N  .  Caso  a  STRING  original  possua  um  tamanho  menor  que  o  valor  N
informado, deverão ser acrescentados espaços em branco a esquerda da STRING, até que o tamanho N
seja alcançado.
9. Dado uma STRING qualquer e um valor N  ,  faça uma FUNCTION para gerar uma nova STRING
que  tenha  este  tamanho  N.  Caso  a  STRING  original  possua  um  tamanho  menor  que  o  valor  N
informado, deverão ser acrescentados  espaços  em branco a direita da STRING, até que o  tamanho N
seja alcançado.
 
Recursividade
Explique qual será o resultado e o funcionamento dos seguintes programas:
a) PROGRAM Teste;
FUNCTION XXX(A : WORD) : WORD;
BEGIN
    IF a = 0 THEN
    BEGIN
        XXX : = 1;
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 10/11
    ELSE
        XXX : =A * XXX(A ­ 1);
    END;
END;
 
BEGIN
    WRITE(XXX(5));
END.
 
b) PROGRAM Teste;
PROCEDURE Recursão(a : BYTE);
BEGIN
a : = a ­ 1;
IF a > 0 THEN
    BEGIN
        Recursão(a);
    END;
    WRITE(a);
END;
BEGIN
    Recursão(5);
END.
 
c) PROGRAM Teste;
PROCEDURE Recursão(VAR a: BYTE);
BEGIN
    a : = a ­ 1;
    IF a > 0 THEN
        BEGIN
            Recursão(a);
        END;
        WRITE(a);
    END;
BEGIN
    Recursão(5);
END
02/06/2016 Curso Virtual Pascal ­ Aula 26
http://www.ufpa.br/sampaio/curso_de_icc/pascal/Aula_26_Pascal.htm 11/11
Anterior.gif
(632

Outros materiais