Guia de Subprogramas: Funções, Procedimentos e Recursão
Classificado em Computação
Escrito em em
português com um tamanho de 6,46 KB
Subprogramas: Definição: Ele pode realizar as mesmas ações que um programa: 1) aceitar dados; 2) realizar alguns cálculos; 3) devolver resultados. Entretanto, é utilizado pelos programas para um propósito específico: ele recebe dados do programa e devolve resultados. Tipos: Funções e procedimentos ou sub-rotinas.
Sub-Rotinas: As sub-rotinas são um conjunto de comandos que são agrupados e recebem, assim, um nome específico que irá identificá-las. Desta forma, podemos usar as sub-rotinas para realizar tarefas que se repetem várias vezes na execução de um mesmo programa. O uso de sub-rotinas permite que possamos criar PROGRAMAS MODULARES, deixando estes mais bem estruturados. O uso de sub-rotinas nos leva ao desenvolvimento de programas com uma abordagem “Top-Down” ou “Bottom-Up”, onde vamos dividir o problema para conquistá-lo mais facilmente.
Funções: Uma função é um tipo especial de sub-rotina que retorna um resultado de volta ao “ponto” onde foi chamada; são muito utilizadas em programação. Um dos grandes benefícios é não precisar copiar o código todas as vezes que precisar executar aquela operação, além de deixar a leitura do código mais intuitiva. As funções incorporadas ao sistema são denominadas funções internas ou intrínsecas e as funções definidas pelo usuário, funções externas; recorremos a funções externas quando as internas não funcionam.
funcao <nome_da_funcao> [(<sequencia_de_declaracoes_de_parametros>)]:
// Seção de Declarações Internas
inicio
// Seção de Comandos
Fimfuncao
Variáveis locais: É aquela que está declarada e definida dentro de um subprograma, no sentido de que está dentro desse subprograma e é distinta das variáveis com o mesmo nome declaradas em qualquer parte do programa principal; são declaradas dentro dos procedimentos e funções.
Variável global: As variáveis globais possuem um problema no que se refere à boa estruturação de programas modulares: elas são visíveis para todos os módulos do programa, ou seja, qualquer um pode ler ou alterar o seu conteúdo; são declaradas logo no início do programa.
Procedimentos – PROCEDURE: Um procedimento é uma sub-rotina (módulo = mini-programa) que é usado a fim de executar uma certa tarefa. A procedure recebe um certo número de parâmetros de entrada, do mesmo modo que as funções, mas, no entanto, não retorna nenhum valor como saída. Quando se invoca o procedimento, os passos que o definem são executados, devolvendo em seguida o controle ao programa que o chamou:
procedimento <nome> (<parametro1>, <parametro2>, ...); { Cabeçalho: Nome + Parâmetros }
{ Constantes Locais da Procedure }
{ Variáveis Locais da Procedure }
inicio
...
fimprocedimento
Ponteiro: Um apontador ou ponteiro é um tipo de variável que não contém um valor, mas um endereço. Cada variável, ao ser criada, é associada a um endereço. Quando uma variável é utilizada em uma expressão do lado direito de uma atribuição, seu endereço é utilizado para buscar seu valor, e esse valor é utilizado para calcular o resultado da expressão. Quando uma variável é utilizada do lado esquerdo, seu endereço é utilizado para armazenar o resultado da expressão correspondente na memória. Assim, cada variável possui um endereço diferente e único, e os apontadores são variáveis capazes de manipular endereços. tipo *nome; O asterisco ('*') é a indicação de que a variável nome é um apontador, e o endereço apontado é interpretado como um valor do tipo tipo. tipo *nome;
Passagem de parâmetros por valor: A função recebe uma cópia da variável que é fornecida quando é invocada. Todas as alterações feitas dentro da função não vão afetar os valores originais. A principal desvantagem deste modelo de passagem de parâmetro é o custo de armazenamento e transferência das informações dos parâmetros reais para os parâmetros formais.
Passagem de parâmetros por referência: Neste caso, o que é enviado para a função é uma referência às variáveis utilizadas, e não uma simples cópia, pelo que as alterações realizadas dentro da função irão certamente alterar os valores contidos nessas variáveis. Nenhum custo adicional para cópia de valores é exigido. Por outro lado, o acesso dos parâmetros formais no subprograma será mais lento. O acesso dos parâmetros reais pode gerar efeitos colaterais indesejáveis.
Métodos de passagem de parâmetros: Os métodos de passagem de parâmetros podem ser entendidos como a maneira pela qual transmitimos um valor ou um caminho de acesso de uma variável para um subprograma.
Recursão: É quando uma função chama a si mesma. Em uma função recursiva, a cada chamada é criada na memória uma nova ocorrência da função com comandos e variáveis “isolados” das ocorrências anteriores. A função é executada até que todas as ocorrências tenham sido resolvidas. A recursão pode ser utilizada como uma alternativa à repetição ou à estrutura repetitiva. Toda recursividade é composta por um caso base e pelas chamadas recursivas.
- Caso base: É o caso mais simples. É usada uma condição em que se resolve o problema com facilidade.
- Chamadas Recursivas: Procuram simplificar o problema de tal forma que convergem para o caso base.
Vantagens da recursividade:
- Torna a escrita do código mais simples e elegante, tornando-o fácil de entender e de manter.
Desvantagens da recursividade: Quando o loop recursivo é muito grande, é consumida muita memória nas chamadas a diversos níveis de recursão, pois cada chamada recursiva aloca memória para os parâmetros, variáveis locais e de controle. Em muitos casos, uma solução iterativa gasta menos memória e torna-se mais eficiente em termos de performance do que usar recursão.