Professional Documents
Culture Documents
As Sub-Rotinas
Quando programa complexos são resolvidos, estes exigem algoritmos complexos. Porém sempre
será possível dividir problemas maiores em problemas menores. Desta forma cada pedaço menor
tem um algoritmo mais simples, e esse trecho menor é chamado de sub-rotina. Quando uma sub-
rotina é chamada por um programa principal, ela é executada e. ao seu término, o controle de
processamento retorna automaticamente para a primeira linha de instrução, após a luna que
efetuou a sua chamada.
Definição
Uma das técnicas mais utilizadas e tida como vantajosa na confecção de programas grandes é a
modularização. Consiste em dividir o programa em diversos módulos ou subprogramas, de certa
forma dependentes uns dos outros. Existe um módulo que é o principal, a partir do qual são
chamados os outros módulos, esse módulo recebe o nome de programa principal, enquanto que os
outros são chamados de subprogramas. No sistema Turbo Pascal, existem dois tipos de
subprogramas, a saber:
- Procedures (procedimentos)
- Functions (funções)
Ex: CRT – Esta unidade é a mais utilizada no ambiente Turbo Pascal. Por esta razão, ela possui a
maior parte das rotinas e variáveis de geração de som, controle de vídeo e teclado, como:
program EXEMPLO;
uses CRT;
begin
clrscr;
gotoxy(10,5); write(‘Teste ............’);
gotoxy(10,8); write(‘Tecle algo para finalizar’);
readkey;
End.
40486,8722222222 Página 1/14 Data : 04/05/06
3.2 - Declaração de procedures
Uma procedure tem praticamente a mesma estrutura de um programa, ou seja, ela contém um
cabeçalho, área de declarações e o corpo da procedure. Na área de declarações, podemos ter as
seguintes sub-áreas:
Label - Const - Type - Var - Procedures - Functions.
Devemos salientar que tudo que for declarado dentro das sub-áreas só será reconhecido dentro da
procedure. Mais para frente, voltaremos a falar sobre isso.
Exemplo:
Por sua vez, a procedure LINHA traça uma linha a partir da posição atual do cursor. Uma
observação importantíssima a ser feita neste instante, é que a variável inteira I, definida dentro da
procedure LINHA só existe dentro da procedure, isto significa que toda vez que ativamos a
procedure LINHA, a variável 'I' é criada e toda vez que saímos da procedure LINHA, ela é
destruída.
Rotina 2 – Subtração
1 – Ler dois valores, no caso as variáveis A e B;
2 – Efetuar a subtração das variáveis A e B, implicando o seu resultado na variável X;
3– Apresentar o valor da variável X;
4 – Voltar ao programa principal.
Programa Pascal;
program CALCULADORA;
uses CRT;
var OPCAO : char;
No exemplo anterior foi selecionado as sub-rotinas com a instrução if ...then. Essa rotina pode ser
simplificada com a instrução case ...of.
Sintaxe:
case <variável> of
<opção1> : <operação1>;
<opção2> : <operação2>;
<opçãoN> : <operaçãoN>;
else
<operação>;
end;
ou
case <variável> of
<opção1> : begin
<operação1.1>;
<operação1.2>;
<operação1.N>;
end;
<opção2> : begin
<operação2.1>;
<operação2.2>;
<operação2.N>;
end;
<opçãoN> : begin
<operaçãoN.1>;
<operaçãoN.2>;
<operaçãoN.N>;
end;
else
<operação>;
end;
em que:
program TROCA;
var A,B : integer;
procedure TROCA;
var
AUX: integer;
begin
AUX := A;
A := B;
B := AUX;
end;
40486,8722222222 Página 5/14 Data : 04/05/06
begin { rotina principal}
write(‘Informe A = ‘); readln(A};
write(‘Informe B = ‘); readln(B);
if (A > B) then
TROCA;
writeln(‘A = ‘,A);
writeln(‘B = ‘,B);
end;
Exercício de Fixação
Importante : Todas as sub-rotinas devem ser definida antes das sub-rotinas a quem está
subordinada.
Exemplo : para o programa calculadora podemos desmembrar a entrada dos valores para cálculo,
e a saída, com o resultado do cálculo.
program CALCULADORA;
uses crt;
var OPCAO : char; {variáveis globais}
X,A,B : real;
procedure ENTRADA; {sub-rotina para entrada dos dados}
begin
gotoxy(5,6); write(‘Entre um valor para A = ‘); readln(A);
gotoxy(5,8); write(‘Entre um valor para B = ‘); readln(B);
end;
procedure SAIDA; {sub-rotina para saída dos dados}
begin
gotoxy(5,10); write(‘O resultado de equivale a = ‘, X:6:2);
gotoxy(25,24); write(‘Tecle algo para voltar ao menu’);
readkey;
end;
procedure ROT_ADICAO; {sub-rotina para adição}
begin
clrscr;
gotoxy(32,1); write(‘Rotina de Adição’);
ENTRADA;
X := A+B;
SAIDA;
end;
Com base nas técnicas de programação apresentadas neste capitulo, desenvolva a solução para os
seguintes exercícios:
Nota - Defina a estrutura registro e matriz apropriada e construa os programa por meio de um
menu de opção e sub-rotinas.
Cadastramento dos alunos, sendo que para cada aluno informado, calcular o valor da
média.
Desenvolver pesquisa binária conforme nome do aluno informado, e repetir a pesquisa
enquanto usuário desejar. (para colocar em ordem crescente utilizar técnica do
refinamento sucessivo)
Listar os alunos aprovados, com média maior ou igual a 5,00.
Listar os alunos reprovados, com média menor que 3,00.
Listar os alunos em exame, com média maior ou igual a 3,00 e menor que 5,00.
Os parâmetros têm por finalidade servir como um ponto de comunicação bidirecional entre uma
sub-rotina e o programa principal, e com uma outra sub-rotina hierarquicamente de nível mais
alto. Desta forma é possível passar valores de uma sub-rotina ou rotina chamadora à outra sub-
rotina e vice-versa.
Serão consideradas parâmetros Reais quando estes substituírem os parâmetros Formais, quando
da utilização da sub-rotina por um programa principal ou por uma rotina chamadora.
program EXEMPLO;
uses CRT;
var I,J :integer; {variáveis Globais}
Como podemos reparar, a procedure SOMA depende de dois parâmetros inteiros, e ao ativarmos
esta procedure, devemos fornecer os dois parâmetros. Esses parâmetros podem ser dois números
inteiros ou duas variáveis inteiras, obviamente deve haver compatibilidade entre os parâmetros
passados.
A passagem de parâmetro por VALOR caracteriza-se por não alterar o valor do parâmetro REAL
quando o parâmetro FORMAL é manipulado dentro da sub-rotina. Podemos observar a passagem
de parâmetro por VALOR no exemplo anterior, onde a operação executada internamente na rotina
SOMA, com os parâmetros formais X e Y, não altera os valores dos parâmetros reais I e Y.
program EXEMPLO;
uses CRT;
var I,J,RETORNO :integer;
Da forma como foi declarada a procedure SOMA, quando a ativamos com a seqüência
Soma(3,4,RETORNO), ocorrem as seguintes passagens:
Como podemos ver, houve passagem de dados do programa chamador para a procedure e da
procedure para o programa chamador.
A) Efetuara um programa que possua uma sub-rotina que efetue e permita apresentar no
programa principal o somatório dos N primeiros números inteiros, definidos por um operador (
1+2+3+4+....N).
B) Ler duas matrizes A e B do tipo vetor com trinta elementos cada. Construir uma matriz C,
sendo esta a junção das duas outras matrizes. Neste exercício, deve ser criado uma sub-rotina
para cada tarefa, ou seja, duas para leituras das matrizes A e B, uma para a junção (soma) e a
última para apresentar os dados da matriz C. O programa principal deve chamar as rotinas
definidas.
Definição
Uma Função, assim como uma Procedure, é um bloco de programa, ao qual são válidados todas as
regras já estudadas tanto de programação como de definição de uma sub-rotina, seus parâmetros e
a utilização de variáveis locais e globais. A diferença é que a Função sempre retorna um valor, e 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.
Declaração de funções
A declaração de uma função é muito parecida com de uma procedure que por sua vez é parecida
com a de um programa, senão vejamos:
A formação do nome da função deve seguir as mesmas regras para formação de variáveis em
Turbo Pascal. Dentro dos parênteses devemos declarar os parâmetros e seus respectivos tipos dos
quais a função depende.
Nota: O tipo de valor retornado pela função sempre deve ser declarado.
As sub-rotinas do tipo Procedure por meio de passagem de parâmetro por referência permitem que
sejam retornados valores à rotina chamadora. Mas esta tarefa pode ser simplificada com a
utilização do tipo Function.
Exemplo 1: Desenvolver programa utilizando sub-rotina do tipo Procedure e Function, para
cálculo da fatorial de um numero qualquer.
UTILIZANDO A PROCEDURE
Program PROG_FATORIAL;
uses CRT;
var
N : integer;
RETORNO : real;
procedure FATORIAL(NUM : integer; var FAT: Real);
var
I : Integer;
begin
FAT := 1;
For I := 1 to NUM do
FAT := FAT * I;
end;
begin (* programa principal*)
ClrScr;
write('Informe número para calculo da fatorial = ');
readln(N);
writeln;
FATORIAL(N,RETORNO);
writeln('Fatorial de n = ',RETORNO:10:0);
readkey;
end.
UTILIZANDO A FUNCTION
Program PROG_FATORIAL;
uses CRT;
label inicio,fim;
var
N : Integer;
Observe que o nome da função, no caso FATORIAL, é também o nome da variável interna que
recebe o valor acumulado da variável FAT.
A função também pode trabalhar com passagem de parâmetros por valor ou por referência,
dependendo do problema a ser resolvido.
Exemplo 2: Desenvolver um programa que faça uso de uma sub-rotina de função que retorne o
valor da adição de dois valores fornecidos com parâmetros.
Algoritmo
Programa Principal
1 – Pedir a leitura de dois valores, no caso variáveis NUM1 e NUM2;
2 – Chamar a função SOMA, fornecendo como parâmetro as duas variáveis;
3 – Apresentar o resultado retornado.
Programa Pascal
program CALC_ADICAO;
uses CRT;
var
NUM1, NUM2 : real;
begin
clrscr;
write(‘Informe o numero 1 = ‘); readln(NUM1);
write(‘Informe o numero 2 = ‘); readln(NUM2);
writeln;
writeln(‘O resultado da adição = ‘, ADICAO ( NUM1, NUM2) :5:2);
writeln(‘Tecle algo para encerrar o programa’); readley;
end.
Exemplo 3: Desenvolver um programa que faça uso de uma sub-rotina de função que possibilite
comparar dois valores fornecidos, retornando se os valores fornecidos são iguais ou diferentes.
Programa Principal
Programa Pascal
program COMPARACAO;
uses CRT;
var
NUM1, NUM2 : real;
{ Programa principal}
begin
clrscr;
write(‘Informe o numero 1 = ‘); readln(NUM1);
write(‘Informe o numero 2 = ‘); readln(NUM2);
writeln;
If (COMPARA (NUM1, NUM2)) then
writeln(‘Os valores fornecidos sao iguais’)
else
writeln(‘Os valores fornecidos são diferentes’);
writeln(‘Tecle algo para encerrar o programa’); readkey;
end;
A) Efetuara um programa que possua uma sub-rotina do tipo função que efetue e permita
apresentar no programa principal o somatório dos N primeiros números inteiros, definidos por um
operador ( 1+2+3+4+....N).
C) Desenvolver um programa para entrar com o nome e notas bimestrais de 20 alunos. Desenvolva
as seguintes rotinas:
Cadastramento dos alunos, sendo que para cada aluno informado, calcular o valor da
média.
Desenvolver pesquisa binária conforme nome do aluno informado, e repetir a pesquisa
enquanto usuário desejar. (para colocar em ordem crescente utilizar técnica do refinamento
sucessivo e função)
Listar os alunos aprovados, com média maior ou igual a 5,00.
Listar os alunos reprovados, com média menor que 3,00.
Listar os alunos em exame, com média maior ou igual a 3,00 e menor que 5,00.
40486,8722222222 Página 13/14 Data : 04/05/06
D) Desenvolver um programa de cadastro para uma pequena agenda de endereços, com o nome,
endereço e telefone e idade. Desenvolva as seguintes rotinas:
O cadastramento das informações;
A pesquisa dos nomes pelo método binário, e utilize uma função para a busca.
Alteração de registro cadastrado com erro (utilizar a pesquisa por nome – método
seqüencial – utilizar função);
Listar os dados da agenda, conforme cidade informada.
Bibliografia:
MANZANO, J.A.N.G.; YAMATUMI, W.. Algoritmos - Lógica para Desenvolvimento de Programação de Computadores.
15ª ed. São Paulo: Érica, 2004.
MANZANO, J.A.N.G.; OLIVEIRA J.F. Estudo dirigido de algoritmos. 9ª ed. São Paulo: Érica, 2004.
MANZANO, J.A.N.G. e YAMATUMI, W. Programando em Turbo Pascal 7.0. 8ª ed. São Paulo: Érica, 2002.