Você está na página 1de 47

Fundamentos de Programao

Modularizao Funes (e procedimentos)


Rodolfo Costa rodolfo.costa@ifrn.edu.br

Conceito
Um problema complexo pode ser simplificado quando dividido em vrios problemas menores. Como algoritmo uma seqncia de passos com o objetivo de solucionar um problema, ser mais fcil elaborar e entender um algoritmo se ns o dividirmos. Estes trechos menores de cdigo recebem vrios nomes, entre eles: mdulos, subalgoritmos, funes ou procedimentos.

Conceito

Um mdulo um trecho de um algoritmo independente com um objetivo determinado, simplificando o entendimento do algoritmo.

Vantagens
Dentre outras, podemos citar: Dividir e estruturar um algoritmo em partes logicamente coerentes; Facilidade de testar os trechos em separado; Evitar que uma certa seqncia de comandos necessria em vrios locais de um algoritmo tenha de ser escrita repetidamente nestes locais, diminuindo tambm o cdigo-fonte; Maior legibilidade de um algoritmo.

Procedimentos e Funes A linguagem utilizada pelo VisuAlg utiliza dois tipos de mdulos: Procedimentos Funes Uma funo, alm de executar uma determinada tarefa, retorna um valor para quem a chamou, que o resultado da sua execuo. (explicaremos melhor adiante)

Procedimentos e Funes
Cada mdulo, alm de ter acesso s variveis do programa que o chamou (so as variveis globais), pode ter suas prprias variveis (so as variveis locais), que existem apenas durante sua chamada. Ao se chamar um mdulo, tambm possvel passar-lhe determinadas informaes que recebem o nome de parmetros.

Declarao de PROCEDIMENTOS sem parmetros


procedimento <nome-de-procedimento> // Seo de Declaraes Internas inicio // Seo de Comandos fimprocedimento
O <nome-de-procedimento> obedece as mesmas regras de nomenclatura das variveis. De modo anlogo ao programa principal, a seo de declarao internas comea com a palavra-chave var, e continua com a seguinte sintaxe: <lista-de-variveis> : <tipo-de-dado>

Exemplo PROCEDIMENTO

Exemplo PROCEDIMENTO

Escopo de variveis Todas as variveis que so declaradas na seo de declarao do programa principal (a varivel nome no exemplo anterior), podem ser utilizadas por todo o algoritmo, incluindo os procedimentos e funes. Essas variveis so denominadas Globais.

Escopo de variveis Em alguns casos, uma determinada varivel se faz necessria apenas em um mdulo especfico, neste caso, fazemos a declarao desta varivel dentro da sesso de declarao daquele mdulo (varivel i no exemplo anterior). Este tipo de varivel denominada de Varivel Local.

Visibilidade de variveis De acordo com o escopo da varivel, podemos especificar sua visibilidade. Podemos dizer que uma varivel global, vista pelo programa principal e por todos os mdulos pertencentes a ele. J uma varivel local, visvel ao mdulo em que ela foi declarada e aos mdulos hierarquicamente inferiores.

Procedimentos com parmetros


Ao se chamar um subalgoritmo, tambm possvel passar-lhe determinadas informaes que recebem o nome de parmetros. So valores que, na linha de chamada, ficam entre os parnteses e que esto separados por vrgulas. A quantidade dos parmetros, sua seqncia e respectivos tipos no podem mudar: devem estar de acordo com o que foi especificado na sua correspondente declarao.

Procedimentos com parmetros


Os parmetros de um procedimento ou funo tambm so considerados variveis locais.

Declarao de PROCEDIMENTOS com parmetros


procedimento <nome-de-procedimento> [(<seqncia-de-declaraes-de-parmetros>)] // Seo de Declaraes Internas inicio // Seo de Comandos fimprocedimento
A <seqncia-de-declaraes-de-parmetros> uma seqncia, separada por vrgula, de <seqncia-de-parmetros>: <tipo-de-dado>

Exemplo2 PROCEDIMENTO

Exemplo2 PROCEDIMENTO

Exerccio de PROCEDIMENTOS
Escreva 2 algoritmos que implementem e utilizem os seguintes procedimentos: 1)Um procedimento chamado soma. Este procedimento receber como parmetros 2 nmeros informados pelo usurio e exibir na tela o total da soma entre eles. 2)Criar um algoritmo que receba um nmero de um usurio (de 1 a 12), passar este valor como parmetro para um procedimento chamado nome_do_mes, que escreve na tela o nome do ms referente ao nmero digitado. Caso seja um ms invlido, mostre uma mensagem na tela.

Funes Como mencionado anteriormente, o VisuAlg utiliza dois tipos de modularizao. Um deles, o procedimento, ns j conhecemos. O segundo, funo. Ambos so muito semelhantes, a diferena ser que, na funo, algum valor ser retornado onde ela foi chamada.

Declarao de Funes
funcao <nome-de-funo> [(<seqncia-dedeclaraes-de-parmetros>)]: <tipo-de-dado> // Seo de Declaraes Internas inicio // Seo de Comandos fimfuncao Como podemos ver, as diferenas na declarao, com relao aos procedimentos, so mnimas. A principal mudana fica por conta do <tipo-dedado> que informa qual tipo de dado ser retornado pela funo.

Declarao de Funes
funcao <nome-de-funo> [(<seqncia-dedeclaraes-de-parmetros>)]: <tipo-de-dado> // Seo de Declaraes Internas inicio // Seo de Comandos fimfuncao Como podemos ver, as diferenas na declarao, com relao aos procedimentos, so mnimas. A principal mudana fica por conta do <tipo-dedado> que informa qual tipo de dado ser retornado pela funo.

Exemplo 1 - FUNO

Exemplo 1 - FUNO

Exerccio FUNO Escreva um algoritmo que receba um nmero do usurio e, com uma funo, calcule e retorne o quadrado deste nmero. Por fim, informe o resultado ao usurio.

Passagem de parmetros por valor e por referncia. At agora passamos parmetros para nossos procedimentos e funes atravs de uma forma chamada passagem de parmetro por valor. Nesta operao, na chamada do mdulo, enviamos o valor de uma varivel (do programa que chama) para uma varivel local (do mdulo).

Passagem de parmetro por valor


funcao dobro( numero : real) : real inicio numero <-numero*2 retorne numero fimfuncao var d, n: real inicio n <- 4 d <- dobro(n) escreva(n) fimalgoritmo numero numero

n n d n

Passagem de parmetro por valor


funcao dobro( numero : real) : real inicio numero <-numero*2 retorne numero fimfuncao var d, n: real inicio n <- 4 d <- dobro(n) escreva(n) fimalgoritmo numero numero

4
d

n n

Passagem de parmetro por valor


funcao dobro( numero : real) : real inicio numero <-numero*2 retorne numero fimfuncao var d, n: real inicio n <- 4 d <- dobro(n) escreva(n) fimalgoritmo

numero numero

4
d

n n

Passagem de parmetro por valor


funcao dobro( numero : real) : real inicio numero <-numero*2 retorne numero fimfuncao var d, n: real inicio n <- 4 d <- dobro(n) escreva(n) fimalgoritmo

4 8

numero numero

4
d

n n

Passagem de parmetro por valor


funcao dobro( numero : real) : real inicio numero <-numero*2 retorne numero fimfuncao var d, n: real inicio n <- 4 d <- dobro(n) escreva(n) fimalgoritmo

4 8

numero numero

4 8
d

n n

Passagem de parmetro por valor


funcao dobro( numero : real) : real inicio numero <-numero*2 retorne numero fimfuncao var d, n: real inicio n <- 4 d <- dobro(n) escreva(n) fimalgoritmo

4 8

numero numero

4 8
d

n n

Exemplo

Exemplo

Passagem de parmetros por valor e por referncia. Na passagem de parmetros por referncia, o mdulo no recebe apenas um valor, mas sim o endereo de uma varivel global. Portanto, qualquer modificao que for realizada no contedo deste parmetro afetar tambm a varivel global que est associada a ele.

Passagem de parmetro por referncia


procedimento dobro( var numero : real) inicio numero <-numero*2 fimprocedimento var n: real inicio n <- 4 dobro(n) escreva(n) fimalgoritmo n n n numero

Passagem de parmetro por referncia


procedimento dobro( var numero : real) inicio numero <-numero*2 fimprocedimento var n: real inicio n <- 4 dobro(n) escreva(n) fimalgoritmo n numero

n n

Passagem de parmetro por referncia


procedimento dobro( var numero : real) inicio numero <-numero*2 fimprocedimento var n: real inicio n <- 4 dobro(n) escreva(n) fimalgoritmo n numero

n n

Passagem de parmetro por referncia


procedimento dobro( var numero : real) inicio numero <-numero*2 fimprocedimento var n: real inicio n <- 4 dobro(n) escreva(n) fimalgoritmo n numero

n n

Passagem de parmetro por referncia


procedimento dobro( var numero : real) inicio numero <-numero*2 fimprocedimento var n: real inicio n <- 4 dobro(n) escreva(n) fimalgoritmo n numero

8 8

n n

Exemplo

Exemplo

Funes Recursivas
Uma funo recursiva uma funo que chama a si prpria direta ou indiretamente por meio de outra funo. Na verdade, uma funo recursiva sabe resolver somente o(s) caso(s) mais simples ou caso(s) bsico(s). Se a funo for chamada com um caso bsico, ela retorna um resultado. Se a funo for chamada com um problema mais complexo, ela dividir o problema em partes menores.

Funes Recursivas Podemos considerar que uma funo recursiva possui:

Um passo bsico (ou mais) cujo resultado


imediatamente conhecido. Um passo recursivo em que se tenta resolver um sub-problema do problema inicial.

Funes Recursivas A execuo de uma funo recursiva consiste em ir resolvendo subproblemas sucessivamente mais simples at se atingir o caso mais simples de todos, cujo resultado imediato.

Exemplo de Funo Recursiva Fatorial de n (n!) O fatorial de um nmero inteiro n nonegativo o produto de: nx(n-1)x(n-2)x...x1 onde 1! igual a 1 e 0! definido como 1. ex: 2! = 2 (2 x 1) 5! = 120 (5x4x3x2x1)

Exemplo de Funo Recursiva

Exemplo de Funo Recursiva

Você também pode gostar