Uma sub-rotina é uma parte separada do programa que tem um nome e resolve sua própria tarefa separada. A sub-rotina está localizada no início do programa principal e pode ser lançada (chamada) a partir do programa principal especificando o nome
A utilização de sub-rotinas permite evitar a duplicação de código, caso seja necessário escrever o mesmo código em locais diferentes do programa.
As bibliotecas que são importadas para um programa (por exemplo, a biblioteca math math) consistem em sub-rotinas que já foram compiladas por alguém. Os programadores não precisam pensar em quais algoritmos implementam, mas simplesmente aplicá-los, pensando apenas no que exatamente estão fazendo. Esta é uma grande economia de tempo. Não há necessidade de escrever um algoritmo que já foi escrito por outra pessoa.
Cada rotina
deve fazer apenas uma coisa: apenas calcule algo, ou forneça alguns dados, ou faça outra coisa.
Existem dois tipos de sub-rotinas -
procedimentos e
funções
As sub-rotinas realizam algumas ações, como imprimir o resultado na tela de uma determinada forma (um exemplo simples, a instrução
writeln() é uma sub-rotina padrão que imprime para informações da tela)
As sub-rotinas de função
retornam um resultado (número, cadeia de caracteres, etc.) que podemos usar no programa principal.
Vamos tentar escrever um procedimento simples:
Suponha que precisamos exibir a string "Error" na tela toda vez que um erro pode ocorrer no código devido à falha do usuário (por exemplo, quando ele insere dados incorretos)
Isso pode ser feito escrevendo a declaração
writeln('Erro');
E agora imagine que tal linha precise ser inserida em vários lugares do programa. Claro, você pode simplesmente escrevê-lo em todos os lugares. Mas esta solução tem duas desvantagens.
1) esta string será armazenada na memória muitas vezes
2) se quisermos alterar a saída em caso de erro, teremos que alterar esta linha ao longo do programa, o que é bastante inconveniente
Para tais casos, são necessários procedimentos.
Um programa com um procedimento pode se parecer com isto:
...
usando namespace std;
procedimento printError(); // descrição do procedimento
começar
writeln('Erro'); // corpo do procedimento - comandos que o procedimento irá executar
fim;
// programa principal
começar;
...
impressorarr(); // inicia o procedimento para execução. Apenas especificamos o nome do procedimento que queremos executar.
...
impressorarr();
...
fim.
O procedimento começa com a palavra procedimento. Após o nome do procedimento, escrevem-se parênteses, que indicam as variáveis e seus tipos dos quais depende a execução do procedimento. Por exemplo:
var a, b, resposta: inteiro;
procedimento Soma(a, b: inteiro);
começar
resposta := a + b;
fim;
Todas as instruções executadas em um procedimento são recuadas.
Os procedimentos são escritos antes do programa principal
Para executar um procedimento, no programa principal você precisa chamá-lo pelo nome e lembre-se de colocar parênteses!
Você pode chamar um procedimento em um programa quantas vezes quiser.