A maior rede de estudos do Brasil

Grátis
146 pág.
livro programando com pascal - jaime evaristo

Pré-visualização | Página 25 de 50

específica da tarefa que o programa pretende realizar. Assim, 
pode-se escrever subprogramas para a leitura dos dados de entrada, para a saída do programa, para a 
determinação da média de vários elementos, para a troca dos conteúdos de uma variável (como no programa 
Ordena3), para o cálculo do máximo divisor comum de dois números dados etc. Normalmente, a realização 
da "subtarefa" para a qual a função foi escrita é chamada de retorno do subprograma, podendo um retorno 
ser a realização de uma ação genérica, como a leitura dos dados de entrada, ou um valor específico, como o 
cálculo do máximo divisor comum de dois números dados. Em Pascal, quando o retorno é a realização de 
uma ação genérica, o subprograma deve ser escrito como um procedimento e, quando o retorno é um valor 
específico, o subprograma deve ser escrito como uma função.
Em grande parte das vezes, a execução de um subprograma (ativação ou chamada do subprograma) 
requer "dados de entrada". Por exemplo, se fôssemos escrever o programa Ordena3 utilizando subprogramas 
(e faremos isso), o subprograma que executaria a permuta dos conteúdos deveria conter algo que pudesse ser 
utilizado para indicar execuções diferentes em relações às variáveis cujos conteúdos se pretende permutar. 
Este algo são os parâmetros do subprograma e, como veremos a seguir, podem ser variáveis ou referências 
a variáveis. Para sua execução, um subprograma deve receber valores ou variáveis (em número igual ao 
número de parâmetros), sendo estes valores ou variáveis chamados de argumentos, que serão, na verdade, os 
dados de entrada do subprograma.
Além de permitir que repetições de seqüências de comandos idênticas sejam evitadas, a utilização de 
subprogramas permite que um programa seja escrito em módulos, o que possibilita as seguintes vantagens:
1. Melhor legibilidade do programa.
2. O programa pode ser desenvolvido em equipe, cada membro se encarregando do desenvolvimento 
de alguns dos seus subprogramas.
3. 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.
4. 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.
Outra aplicação importante de subprogramas se dá quando há necessidade de que o programa determine 
a mesma grandeza para valores diferentes. Um exemplo típico desta necessidade aparece num programa que 
determine medidas estatísticas (como média aritmética, mediana, desvio médio, desvio padrão) de uma 
relação de números. Como o desvio médio é a média aritmética dos valores absolutos dos desvios em relação 
à média, o seu cálculo exigirá a determinação da média aritmética da relação e a média aritmética dos 
desvios. Escreveremos então um subprograma para o cálculo da média de uma relação qualquer e o 
utilizaremos para os cálculos das duas médias necessárias. Este exemplo será visto no capítulo seguinte. 
5.2 Procedimentos
Os procedimentos devem ser definidos antes do programa principal, como foi apresentado na seção 2.5, 
utilizando-se a seguinte sintaxe: 
procedure Identificador(var lista de parâmetros : tipo de dado);
declarações e definições
begin
 seqüê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, o que será discutido adiante.
Como dissemos na seção anterior, os parâmetros de um procedimento servem para permitir que o mesmo 
seja "executado" para conjuntos de dados diferentes, os quais lhe serão fornecidos quando da sua ativação. O 
conjunto de parâmetros pode ser vazio, sendo que, neste caso, a ativação do procedimento executa sempre a 
mesma ação. Como também já foi dito, os dados (ou referências a variáveis, como veremos a seguir) que 
substituirão os parâmetros quando da execução do procedimento são chamados de argumentos. 
Naturalmente, os argumentos devem ser do mesmo tipo de dado parâmetro respectivo.
Do mesmo modo que num programa, num procedimento podem ser declaradas variáveis, definidos tipos 
de dados, relacionadas units e definidos outros subprogramas. Em qualquer caso, todo elemento declarado ou 
definido num procedimento só pode ser acessado pelos comandos deste procedimento. Usa-se comumente o 
termo local para se classificar um elemento que foi declarado ou definido num procedimento, utilizando-se o 
termo global para um elemento declarado ou definido no programa propriamente dito. Um elemento global 
(variável, tipo de dado, subprograma) pode ser acessado em qualquer parte do programa. No caso específico 
de variáveis, uma variável global existe durante toda a execução do programa enquanto que uma variável 
local só tem existência durante a ativação do procedimento.
5.3 Exemplos Parte VII
1. O programa Ordena3, já discutido anteriormente, escrito com a utilização de um procedimento, teria a 
seguinte forma:
program Ordena3;
var x, y, z : real;
{procedimento que permuta os conteudos de duas variaveis}
procedure Troca(var v1, v2 : real);
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)
 else
 Troca(x, y);
if y > z
 then
 Troca(y, z);
 writeln('Valores dados, agora ordenados: x = ', x:0:2, ', y = ', y:0:2, 'e z = ', z:0:2);
end.
Observe que a ativação de um procedimento é feita com a simples referência ao seu identificador junto 
com os argumentos com os quais se pretende que ele seja executado. Observe também que, através de um 
comentário, indicamos o objetivo do procedimento. Esta é uma prática que deve ser adotada por todo 
programador, pois facilita sobremaneira a leitura do programa.
2. Um programa com objetivos múltiplos deve oferecer uma tela com as tarefas que ele pode realizar 
para que o usuário escolha qual delas ele deseja. Uma tela com este objetivo é comumente chamada de menu 
de opções e funciona como uma interface entre o programa e o usuário.
Um menu de opções pode ser obtido através de um procedimento sem parâmetros. Por exemplo, um 
programa para gerenciar as contas correntes de uma banco pode conter o seguinte procedimento:
procedure Menu;
begin
writeln('1 - Saldo');
writeln('2 - Extrato');
writeln('3 – Aplicação e resgate');
writeln('4 - Depósitos');
writeln('5 - Saques');
write(' Digite sua opção : ');
readln(Opcao);
end;
Naturalmente, o programa principal seria iniciado com a chamada deste procedimento, seguido de um 
comando case para, de acordo com a opção escolhida, executar a tarefa pretendida. Neste caso, a variável 
Opção deveria ser uma variável global.
Cabe relembrar o que foi dito na seção 3.7: com o surgimento das linguagens visuais (VisualBasic, 
Delphi e outras), atualmente os menus de opções são disponibilizados através de interfaces gráficas 
contendo botões, banners e outros elementos e as ativações dos subprogramas que executam a tarefa 
pretendida são feitas através de mouses ou mesmo através de toque manual na tela do computador. A unit 
Graph contém funções e procedimentos predefinidos que permitem que interfaces gráficas sejam criadas em 
Pascal, porém o estudo destas subrotinas não está no escopo deste livro.
3. Os comandos de entrada e de saída, readln e writeln, são, na verdade, procedimentos predefinidos do 
sistema. O comando readln, por exemplo, possui um