O documento apresenta uma introdução sobre subprogramas na linguagem Pascal. Ele discute o que são subprogramas e porque eles são úteis, apresentando exemplos de procedimentos e funções. Procedimentos permitem executar ações sem retornar valores, enquanto funções podem também retornar valores. O documento explica a sintaxe básica de procedimentos e funções e discute a passagem de parâmetros por valor e por referência. Finalmente, apresenta exercícios resolvidos como exemplos.
3. O que são subprogramas?
• O programa Ordena3 contém algumas sequências de comandos idênticas como:
begin
Aux := x;
x := y;
y := Aux;
end;
begin
Aux := x;
x := z;
z := Aux;
end;
begin
Aux := y;
y := z;
z := Aux;
end
• Os objetivos é permutar os conteúdos das variáveis: x e y, na primeira sequência;
x e z na segunda e y e z na terceira sequência. Ou seja, estas sequências tinham
o mesmo objetivo: permutar conteúdos de variáveis.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
4. Porque usar subprogramas?
• Para evitar repetições de sequências idênticas
• Melhor legibilidade do programa
• O programa pode ser desenvolvido em equipe, cada
membro se encarregando do desenvolvimento de alguns
dos seus subprogramas.
• A validação do programa através de testes pode ser
realizada testando-se cada um dos subprogramas
isoladamente, o que facilita a detecção e identificação de
erros de lógica.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
5. Porque usar subprogramas?
• Atualizações posteriores do programa (atos chamados
genericamente de manutenção do programa) são
facilitadas, pelo fato de que apenas atualizações em
alguns subprogramas são requeridas.
• Quando há necessidade de que o programa determine a
mesma grandeza para valores diferentes.
Exemplos: média aritmética, mediana, desvio médio, desvio padrão
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
6. Procedimentos (Procedures)
• Os procedimentos devem ser definidos antes do
programa principal utilizando-se a seguinte sintaxe:
procedure Identificador(var lista de parâmetros : tipo de dado);
declarações e definições
begin
sequência de comandos
end;
• Sendo as regras para o estabelecimento do identificador
as mesmas utilizadas para a escolha do identificador do
programa e a indicação var para os parâmetros é
opcional.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
7. Procedimentos (Procedures)
• Os parâmetros de um procedimento servem para permitir
que o mesmo seja "executado" para conjuntos de dados
diferentes
• Os parâmetros devem ser fornecidos no momento da
“ativação” ou “declaração”
• Os dados que substituirão os parâmetros quando o
procedimento for executado são chamados de
argumentos
• Os argumentos obrigatoriamente deve ser do mesmo
tipo de dado do parâmetro.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
8. Exercícios Resolvidos
Exercício 1
program Ordena3;
var x, y, z : real;
begin
Aux := x;
x := y;
y := Aux;
end;
begin
Aux := x;
x := z;
z := Aux;
end;
begin
Aux := y;
y := z;
z := Aux;
end
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
9. Exercícios Resolvidos
Exercício 1
program Ordena3;
var x, y, z : real;
{procedimento que permuta os conteúdos de duas variáveis}
procedure Troca(var v1, v2 : real); //Declaração da procedure
var Aux : real;
begin
Aux := v1;
v1 := v2;
v2 := Aux;
end;
{programa principal}
begin
write('Digite os três números');
readln(x, y, z);
writeln('Valores dados: x = ', x:0:2, ', y = ', y:0:2, ' e z = ', z:0:2);
if (x > y) or (x > z)
then
if y > z
then
Troca(x, z) //Chamada da procedure
else
Troca(x, y); //Chamada da procedure
if y > z
then
Troca(y, z); //Chamada da procedure
writeln('Valores dados, agora ordenados: x = ', x:0:2, ', y = ', y:0:2, ‘ e z = ', z:0:2);
end.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
10. Procedimentos (Procedures)
• Observações importantes
• A ativação da procedure é feita com a simples referência ao seu
identificador junto com os argumentos;
• Os comentários são essenciais para facilitar a identificação do
objetivo da procedure;
• Os comandos readln e writeln são exemplos de procedimentos
predefinidos da linguagem;
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
11. Funções (functions)
• As funções, além de poderem executar ações genéricas,
podem retornar valores;
• A declaração segue de acordo com a seguinte sintaxe :
function Identificador(var lista de parâmetros : tipo de dado) : tipo de dado;
declarações e definições
begin
seqüência de comandos;
end;
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
12. Funções (functions)
• Se a função deve retornar um valor, este valor será do tipo de
dado fixado na sua declaração, que é necessariamente um
tipo de dado simples ou uma string
Exemplo:
function mediaAritmetica(var a,b,c : integer) : real;
• É necessário que haja uma atribuição a um tipo compatível
com o retorno da função;
Exemplo:
Var Resultado : real;
begin
resultado := mediaAritmetica(10, 7, 5);
end.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
13. Exercícios Resolvidos
Exercício 2
{Programa que soma das frações ordinárias}
program SomaFracoes;
var Num1, Den1, Num2, Den2, Num, Den: integer;
begin
writeln('Digite as fracoes');
readln(Num1, Den1, Num2, Den2);
Num := Num1 * Den2 + Num2 * Den1;
Den := Den1 * Den2;
writeln('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (',
Num, '/', Den, ')');
end.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
14. Exercícios Resolvidos
Exercício 2
{Programa que soma das frações ordinárias}
program SomaFracoes;
var Num1, Den1, Num2, Den2, Num, Den: integer;
begin
writeln('Digite as fracoes');
readln(Num1, Den1, Num2, Den2);
Num := Num1 * Den2 + Num2 * Den1;
Den := Den1 * Den2;
writeln('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (',
Num, '/', Den, ')');
end.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
15. Exercícios Resolvidos
Exercício 2
program SomaFracoes;
var Num1, Den1, Num2, Den2, Num, Den, Mdc: integer;
{função que retorna o maximo divisor comum de dois inteiros dados}
function MaxDivComum(x, y : integer) : integer;
var Resto : integer;
begin
Resto := x mod y;
while Resto <> 0 do
begin
x := y; //Corpo da função
y := Resto;
Resto := x mod y;
end;
MaxDivComum := y;
end;
{programa principal}
begin
writeln('Digite as fracoes');
readln(Num1, Den1, Num2, Den2);
Num := Num1 * Den2 + Num2 * Den1;
Den := Den1 * Den2;
Mdc := MaxDivComum(Num, Den); //Chamada da função e associação do resultado à variável Mdc
Num := Num div Mdc;
Den := Den div Mdc;
writeln('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (', Num, '/', Den, ')');
end.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
16. Passagem de Parâmetros
• No procedimento Troca do exemplo 1, as definições dos
parâmetros eram precedidas da palavra reservada var
• Mas nas definições dos parâmetros da função
MaxDivComum isso não acontecia.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
17. Passagem de Parâmetros
• No procedimento Troca do exemplo 1, as definições dos
parâmetros eram precedidas da palavra reservada var
• Mas nas definições dos parâmetros da função
MaxDivComum isso não acontecia.
• Porque? O que há de diferente entre esses dois
subprogramas?
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
18. Passagem de Parâmetros
• No primeiro, se pretendia que o procedimento tivesse
influência nos conteúdos das variáveis passadas como
argumentos;
• Enquanto que, no segundo, os conteúdos das variáveis
passadas como argumentos não deveriam ser
modificados pelos comandos da função;
• Quando isso é útil?
• Quando um subprograma precisa modificar uma variável global
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
19. Passagem de Parâmetros
• Quando não se pretende que comandos do subprograma não interfiram em
conteúdos de variáveis globais, a declaração dos parâmetros não é precedida da
palavra var e o parâmetro recebe um elemento do seu tipo de dado;
1. constantes do tipo de dado do parâmetro respectivo;
2. conteúdos de variáveis do mesmo tipo de dado;
3. expressões cujos resultados sejam daquele tipo.
• Neste caso, a passagem de parâmetros é dita por valor.
• Exemplos:
Procedure atualizarRamal(var ramalNovo, ramalAntigo:char)
• Passagem por referência (Interfere nas variáveis globais)
Function atualizarRamal(ramalNovo, ramalAntigo:char)
• Passagem por valor (Não interfere nas variáveis globais)
• Um outro aspecto interessante é que a passagem de parâmetros por referência
permite que se substitua uma função por um procedimento. Basta que se utilize
um parâmetro por referência para retornar o valor para uma variável global.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
20. Exercícios de Fixação
• Para cada problema a seguir, crie uma função e codifique um programa para
testá-la:
1. Dado um número natural, determine se ele é par ou ímpar.
2. Dados dois números reais, determine o máximo entre eles.
3. Dados quatro números reais, determine a média aritmética entre eles.
Profº.: Tácito Henrique ::: Introdução a linguagem Pascal