e tida como vantajosa na confeccao de programas grandes e a modularizacao. Consiste em dividir o programa em diversos modulos ou subprogramas, de certa forma dependentes uns dos outros. Existe um modulo que e o principal, a partir do qual sao chamados os outros modulos, esse modulo principal recebe o nome de programa principal, enquanto que os outros sao chamados de subprogramas. No Pascal, existem dois tipos de subprogramas: - Procedures (procedimentos) - Functions (funcoes) Procedure: A procedure e como se fosse um programa. Ela tem a estrutura praticamente igual a de um programa. Ela deve ser ativada (chamada) pelo programa principal ou por uma outra procedure, ou ate por ela mesma. Ela contem um cabecalho, area de declaracoes e o corpo da procedure. Devemos lembrar que tudo que for declarado dentro das sub-areas so sera reconhecido dentro da procedure. Todos os elementos (constantes, variaveis, etc.) que forem definidos antes de comecar o corpo do programa, sao considerados globais e podem ser utilizados por todas as procedures, functions e o proprio programa. O espaco para tais elementos e criado durante a compilacao. Ja os elementos declarados dentro de uma procedure, so existem dentro da procedure, exemplo: ao declararmos uma variavel dentro de uma procedure, toda vez que ativarmos a procedure, tal variavel sera criada e ao sairmos da procedure ela sera destruida. Quando estivermos dentro do programa, teremos acesso a variavel global e quando estivermos dentro da procedure, teremos acesso a variavel local. Exemplo: Program Exemplo_1; {cabecalho do programa} uses crt; procedure testando; {cabecalho da procedure testando} var {sub-area Var da procedure testando} begin ...{corpo da procedure testando} end; {fim do corpo da procedure testando} var {declaracao de variaveis do programa principal} begin {inicio do porgrama principal} ... testando; {procedure sendo chamada pelo programa} ... end. {fim do programa principal} Function: As funcoes sao muito parecidas com as procedures. A principal diferenca e que o identificador de uma funcao assume o valor de retorno da funcao (ou seja, essa funcao fara um determinado calculo e retornara ao programa principal tendo um valor armazenado que foi calculado dentro dessa funcao) . Uma funcao deve sempre retornar um valor e em Turbo Pascal, este valor e retornado no nome da funcao. A declaracao de uma funcao e muito parecida com de uma procedure que por sua vez e parecida com a de um programa: Exemplo: Program Exemplo_2; uses crt; Function Nome_da_funcao(parametros) : Tipo_da_funcao; {cabecalho da funcao} var {declaracao de variaveis da funcao} begin ... {corpo da funcao} end; var {declaracao das variaveis do programa principal (caso queira usar as mesmas variaveis para o programa e para a funcao, tem que declarar antes da function} begin {inicio do programa principal} ... rTotal:=Nome_da_funcao(parametros); {function sendo chamada e atribuindo o valor calculado para rTotal} ... end. A formacao do nome da funcao deve seguir as mesmas regras para formacao de identificadores em Turbo Pascal. Dentro dos parenteses devemos declarar os parametros (variaveis a serem utilizadas) e seus respectivos tipos dos quais a funcao depende (real, integer, etc). O tipo de valor retornado pela funcao tambem deve ser