Você está na página 1de 27

Algoritmos e Estruturas de Dados I

Tetri Mesquita

Subalgoritmos

PROCEDIMENTOS E FUNES

Subalgoritmos
Problema: como resolver um problema complexo? Uma soluo: mtodo de Diviso e Conquista.

Diviso e Conquista
Esta tcnica consiste em dividir um problema maior recursivamente em problemas menores at que o problema possa ser resolvido diretamente. Ento a soluo do problema inicial dada atravs da combinao dos resultados de todos os problemas menores computados. Vrios problemas podem ser solucionados atravs desta tcnica, como o da ordenao de nmeros atravs do algoritmo MergeSort e da transformao discreta de Fourier atravs da transformada rpida de Fourier. Outro problema clssico que pode ser resolvido atravs desta tcnica a Torre de Hanoi. A tcnica soluciona o problema atravs de trs fases:
1. 2. 3. Diviso: o problema maior dividido em problemas menores e os problemas menores obtidos so novamente divididos sucessivamente de maneira recursiva. Conquista: o resultado do problema calculado quando o problema pequeno o suficiente. Combinao: o resultado dos problemas menores so combinados at que seja obtida a soluo do problema maior.

Subalgoritmos
So trechos de algoritmos que efetuam determinada tarefa. Ao invs de escrever um algoritmo grande, escrevem-se vrios algoritmos menores, os quais, em conjunto, resolvem o problema proposto. especialmente indicado us-los quando uma determinada tarefa efetuada em diversos lugares no mesmo algoritmo. So declarados no incio do algoritmo e podem ser chamados em qualquer ponto aps sua declarao. Podem ser de dois tipos:
Funes: retornam algum valor. Procedimento: no retorna nada.

Subalgoritmos
Vantagens:
Reduzem o tamanho do algoritmo; Melhoram a legibilidade do algoritmo; Evitam a repetio de cdigo:
Reaproveitamento no mesmo programa ou em outros;

Facilitam a manuteno; Facilitam a diviso de trabalho; Possibilitam a utilizao de componentes prontos.

Subalgoritmos

FUNES

Funes
Retornam um valor ou uma informao. A chamada de uma funo feita atravs da citao do seu nome seguido de seus argumentos (ou parmetros) entre parnteses. As funes podem ser:
Predefinidas pela linguagem; Criadas pelo programador de acordo com o seu interesse.

Funes predefinidas do VisualG


FUNO Abs (valor : real) : real Arccos (valor : real) : real Arcsen (valor : real) : real Arctan (valor : real) : real Asc (s : caracter) : inteiro Compr (c : caracter) : inteiro Valor absoluto Arco cosseno Arco seno Arco tangente Retorna o cdigo ASCII Retorna a dimenso do caractere DESCRIO

Copia (c : caracter , posini, posfin : inteiro) : caracter Copia um determinado trecho do caractere Cos (valor : real) : real Cotan (valor : real) : real Exp (base, expoente : real) : real Grauprad (valor : real) : real Int (valor : real) : inteiro Log (valor : real) : real Cosseno Co-tangente Potenciao Converte grau para radiano Converte o valor em inteiro Logaritmo de base 10

Funes predefinidas do VisualG


FUNO Logn (valor : real) : real Maiusc (c : caracter) : caracter Minusc (c : caracter) : caracter Numpcarac (n : inteiro ou real) : caracter PI : real Pos (subc, c : caracter) : inteiro Quad (valor : real) : real Radpgrau (valor : real) : real Raizq (valor : real) : real Rand : real Randi (limite : inteiro) : inteiro Sen (valor : real) : real Tan (valor : real) : real DESCRIO Logaritmo natural (ln) Converte em Maiscula Converte em Minscula Converte um numero inteiro ou real para caractere Valor Pi Retorna a posio do caractere Elevado quadrado Converte Radiano para grau Raiz quadrada Gerador de nmeros aleatrios entre 0 e 1 Gerador de nmeros inteiros aleatrios com um limite determinado Seno Tangente

Funes predefinidas do VisualG


algoritmo "Exemplo" var numero: real nome: caracter inicio escreva("Digite um nmero: ") leia(numero) escreval("A raiz quadrada de ", numero, " ", raizq(numero)) escreva("Digite um nome: ") leia(nome) escreval("Normal: escreval("Maisculas: escreval("Minsculas: escreval("3 primeiras escreval("Tamanho: ", nome) ", maiusc(nome)) ", minusc(nome)) letras: ", copia(nome,1,3)) ", compr(nome))

//execuo aninhada: o resultado da funo mais interna utilizado como // parmetro da funo mais externa escreval(maiusc(copia(nome,compr(nome)-2,3))) fimalgoritmo

Criao de Funes no VisualG


algoritmo "<nome do algoritmo>" var <declarao de variveis globais> funcao <identificador> ([var]<parmetros>) <tipo de retorno> var <declarao de variveis locais> inicio <lista de comandos> retorne <varivel de retorno> fimfuncao inicio <lista de comandos> fimalgoritmo

Criao de Funes no VisualG


As variveis globais ficam antes das funes. A funo sempre fica dentro do escopo Algoritmo e FimAlgoritmo.
Boa prtica de programao:
Evite declarar variveis globais com o mesmo nome das variveis da funo.

Exemplo: Funo Soma


algoritmo "Soma" var n1, n2: real funcao soma(a, b: real): real retorne a + b fimfuncao inicio escreva("Digite um nmero: ") leia(n1) escreva("Digite outro nmero: ") leia(n2) escreva("Soma: ", soma(n1, n2)) fimalgoritmo

Exemplo: Funo Par_ou_Impar


algoritmo Par_Impar" var numero: inteiro funcao par_ou_impar(num: inteiro): caracter var resultado: caracter inicio se (num % 2 = 0) entao resultado <- "par" senao resultado <- "mpar" fimse retorne resultado fimfuncao inicio escreva("Digite um nmero: ") leia(numero) escreva("O nmero ", numero, " ", par_ou_impar(numero)) fimalgoritmo

Subalgoritmos

PROCEDIMENTOS

Criao de Procedimentos em VisualG


algoritmo "<nome do algoritmo>" var <declarao de variveis globais> procedimento<identificador> ([var]<parmetros>) var <declarao de variveis locais> inicio <lista de comandos> fimprocedimento inicio <lista de comandos> fimalgoritmo

Exemplo: Procedimento Repete


algoritmo "Repeticao" var palavra : caracter procedimento repete(texto : caracter; n : inteiro) var i : inteiro inicio para i de 1 ate n faca escreval(texto) fimpara fimprocedimento inicio escreva("Digite uma palavra: ") leia(palavra) repete(palavra, 10) fimalgoritmo

Subalgoritmos

CONCEITOS ADICIONAIS

Escopo de Variveis
Programa Principal: A, B Rotina 1: A, X Rotina 1.1: Y

Rotina 2: X

Passagem de Parmetros
Passagem de parmetros por valor
A funo recebe uma cpia da varivel que fornecida quando invocada. Todas as alteraes feitas dentro da funo no vo afetar os valores originais.

Passagem de parmetros por referncia


Neste caso o que enviado para a funo uma referncia s variveis utilizadas, e no uma simples cpia, pelo que as alteraes realizadas dentro da funo iro certamente alterar os valores contidos nessas variveis.

Passagem de parmetros por valor


Funo Troca: recebe dois valores a e b, e troca os respectivos contedos.
#include<stdio.h> void troca(int a, int b){ int temp; temp=a; a=b; b=temp; } int main(){ int a=2,b=3; printf("Antes de chamar a funo :\na=%d\nb=%d\n",a,b); troca(a,b); printf("Depois de chamar a funo:\na=%d\nb=%d\n",a,b); return 0; }

Apesar da troca dentro da funo, os valores originais no sofreram alteraes.

Passagem de parmetros por valor


Vantagens
Privacidade dos dados; A possibilidade de passar constantes como argumentos de funes.

Passagem de parmetros por referncia


#include<stdio.h> void troca(int *a, int *b){ int temp; temp=*a; *a=*b; *b=temp; } int main(){ int a=2,b=3; printf("Antes de chamar a funo :\na=%d\nb=%d\n",a,b); troca(&a,&b); printf("Depois de chamar a funo:\na=%d\nb=%d\n",a,b); return 0; }

A troca dentro da funo reflete-se nos valores originais.

Recursividade
Recurso um mtodo de programao no qual uma funo pode chamar a si mesma.
O termo usado de maneira mais geral para descrever o processo de repetio de um objeto de um jeito similar ao que j fora mostrado. Um bom exemplo disso so as imagens repetidas que aparecem quando dois espelhos so apontados um para o outro.

A recurso na programao bem exemplificada quando uma funo definida em termos de si mesma.
Uma grande vantagem da recurso que um conjunto infinito de sentenas possveis podem ser definidos, analisados ou produzidos por um programa de computador finito. Relaes de recorrncia so equaes que definem uma ou mais seqncias recursivamente. Alguns tipos especficos de relaes de recorrncia podem ser resolvidos para que se obtenha uma definio no-recursiva.

Recursividade: Exemplo
Um exemplo clssico de recurso a definio da funo fatorial, dada aqui em pseudocdigo:
funo fatorial(n) { se (n <= 1) retorne 1; seno retorne n * fatorial(n-1); }

A funo chama a si mesma recursivamente em uma verso menor da entrada (n - 1) e multiplica o resultado da chamada por n, at que alcance o caso base, de modo anlogo definio matemtica de fatorial.

Refinamentos Sucessivos
O princpio dos refinamentos sucessivos utilizado na construo de algoritmos para detalhar justamente as instrues at o ponto em que o algoritmo pode ser transcrito para uma linguagem de programao.

Você também pode gostar