Algoritmo completo dividido em: Um algoritmo (ou funo) principal Um ou diversos subalgoritmos (funes e procedimentos) Subalgoritmos um algoritmo que, geralmente, resolve um pequeno problema, e que est subordinado a um outro algoritmo. Um subalgoritmo s ser acionado se solicitado pelo algoritmo principal. possvel que um subalgoritmo chame outro subalgoritmo. Por que subalgoritmos so importantes? Porque permitem: a subdiviso de algoritmos complexos, facilitando o seu entendimento; a estruturao de algoritmos, facilitando, principalmente, a deteco de erros e a documentao de sistemas; a modularizao de sistemas, facilitando a manuteno de softwares e reutilizao de subalgoritmos j implementados. Elementos de um subalgoritmo A definio de um subalgoritmo consta de: CABEALHO, onde esto definidos o nome e o tipo do subalgoritmo, bem como os seus parmetros e suas variveis locais; CORPO, onde se encontram as instrues, que sero executadas cada vez que ele chamado. Definio dos elementos de um subalgoritmo Nome um nome simblico pelo qual ele chamado por outro algoritmo. Variveis locais so aquelas definidas dentro do prprio subalgoritmo e s podem ser utilizadas pelo mesmo. Parmetros so canais por onde os dados so transferidos pelo algoritmo chamador a um subalgoritmo, e vice-versa. Essa comunicao bidirecional chamada de: passagem de parmetros Tipos de subalgoritmo O tipo de um subalgoritmo definido em funo do nmero de valores que o subalgoritmo retorna ao algoritmo que o chamou. So dois tipos: Funes que retornam um, e somente um valor ao algoritmo chamador; Procedimentos que retornam vrios valores, ou nenhum, ao algoritmo chamador. Funes O conceito de funes originrio da ideia de funo matemtica, onde um valor calculado a partir de outro(s) valor(es) fornecidos(s) funo. Sintaxe: funo <nome> (<parmetros>) : <tipo de retorno> <declarao de variveis> <bloco de instrues> fimfuno Instruo retorne Comando simples usado apenas nas funes e tem o efeito de parar a execuo da funo e enviar um valor para o algoritmo principal ou para outro subalgoritmo que o tenha chamado. Toda funo deve ter em seu corpo de instrues, pelo menos, uma instruo retorne. Instruo retorne (continuao) Sintaxe: retorne (<expresso>)
Utilizando funo algoritmo exemplo inteiro x, y funo calcula ( inteiro w) : inteiro inteiro z z <- w * w + 2 retorne (z) fimfuno inicio escreva (Digite um nmero: ) leia (x) y <- calcula (x) escreval ( y = , y) fim fimalgoritmo Procedimentos Um procedimento subalgoritmo que retorna vrios valores, ou nenhum, ao algoritmo que o chama. Esses valores so sempre retornados por meio dos parmetros, e nunca explicitamente como no caso das funes que usa a instruo retorne. Forma geral de um procedimento Sintaxe: procedimento <nome> (<parmetros>) <declarao de variveis> <bloco de instrues> fimprocedimento
Utilizando procedimento algoritmo exemplo inteiro a,w,x procedimento calcula (inteiro x) inteiro w w <- x + 2 escreval (P_Calcula: x = , x, w = , w, e a = , a) fimprocedimento inicio w <- 0 a <-1 escreva (Digite um nmero: ) leia (x) calcula(x) a <- x + w escreval ( F_Principal: x = , x, w = , w, e a = , a) fim fimalgoritmo
Exerccios Faa algoritmos modularizados, ou seja,que tenham funes independentes para entrada de dados, processamento dos dados fornecidos e sada da informao para: 1. Calcular o mmc entre dois nmeros inteiros. 2. Calcular a soma dos elementos de um vetor. 3. Identificar se um vetor possui elementos repetidos.
Exerccios (continuao) Faa um algoritmo que leia n nmeros inteiros e escreva o maior e o menor deles informando se cada um deles par ou impar. Para isso, voc dever criar procedimentos independentes, sendo que um dever calcular o maior e o menor nmero de um conjunto de nmeros inteiros dados, e outro procedimento para imprimir se um nmero inteiro par ou impar.
Parmetros Dados so passados pelo algoritmo principal (ou outro subalgoritmo) ao subalgoritmo, ou retornados por este ao primeiro, por meio de parmetros.
Tipos de parmetros: Formais Reais
Parmetros formais So os nomes simblicos (variveis) introduzidos no cabealho dos subalgoritmos, utilizados na definio dos parmetros do mesmo. Dentro do subalgoritmo trabalha-se com estes nomes da mesma forma como se trabalha com variveis locais. Parmetros reais So aqueles que substituem os parmetros formais quando da chamada de um subalgoritmo. Os parmetros formais so teis somente na definio do subalgoritmo. Os parmetros reais podem ser diferentes a cada chamada de um subalgoritmo.
So divididos em: Parmetros de entrada Parmetros de sada Quando os parmetros formais substituem os parmetros reais? No ato da chamada de um subalgoritmo. Esta substituio denominada passagem de parmetros e pode se dar por dois mecanismos: Passagem por valor (ou por cpia); Passagem por referncia. Passagem de parmetros por valor O parmetro real calculado, e uma cpia de seu valor fornecida ao parmetro formal, no ato da chamada do subalgoritmo. As modificaes feitas no parmetro formal no afetam o parmetro real, durante a execuo do subalgoritmo, pois trabalha-se apenas com uma cpia do mesmo. Os parmetros formais possuem locais de memria exclusivos para que possam armazenar os valores dos parmetros reais. Passagem de parmetros por referncia No feita uma reserva de espao de memria para os parmetros formais. Quando um subalgoritmo com parmetros passados por referncia chamado, o espao de memria ocupado pelos parmetros reais compartilhado pelos parmetros formais correspondentes. Assim, as eventuais modificaes feitas nos parmetros formais tambm afetam os parmetros reais correspondentes. Como vamos trabalhar com os parmetros nessa disciplina? Quando a passagem de parmetros for feita com variveis simples, a passagem ser por valor, e quando for feita com variveis indexadas, a passagem de parmetros ser por referncia. Para manter intactos vetores ou matrizes aps a chamada de subalgoritmos, que os utilizaram e os modificaram como parmetros formais no ato da chamada dos mesmos, ento devemos antes disso guardar cpias dos seus valores. Procedimentos em VisualG procedimento <nome-de-procedimento> [(<seqncia-de-declaraes-de- parmetros>)] // Seo de Declaraes Internas inicio // Seo de Comandos fimprocedimento
Procedimantos em VisualG Seqncia-de-declaraes-de-parmetros:
[var] <seqncia-de-parmetros>: <tipo-de- dado> As declaracoes de parametros so separadas por `;` A seqncia-de-parmetros uma seqncia de nomes de parmetros separados por vrgulas
Procedimantos em VisualG procedimento soma var aux: inteiro inicio // n, m e res so variveis globais aux <- n + m res <- aux fimprocedimento
No algoritmo principal: n <- 4 m <- -9 soma escreva(res)
procedimento soma (x,y: inteiro) inicio // res varivel global res <- x + y fimprocedimento
No algoritmo principal: n <- 4 m <- -9 soma(n,m) escreva(res)
Passagem de parametros por valor Funcoes em VisualG funcao <nome-de-funo> [(<seqncia-de-declaraes-de-parmetros>)]: <tipo-de-dado> // Seo de Declaraes Internas inicio // Seo de Comandos fimfuncao Seqncia-de-declaraes-de-parmetros:
[var] <seqncia-de-parmetros>: <tipo-de-dado>
O valor retornado pela funo atravs do comando retorne
Funcoes em VisualG funcao soma: inteiro var aux: inteiro inicio // n, m e res so variveis globais aux <- n + m retorne aux fimfuncao
No algoritmo principal: n <- 4 m <- -9 res <- soma escreva(res)
funcao soma (x,y: inteiro): inteiro inicio retorne x + y fimfuncao
No algoritmo principal: n <- 4 m <- -9 res <- soma(n,m) escreva(res) Passagem de parametros por valor Funcoes Recursivas funcao fatorial (v: inteiro): inteiro inicio se v <= 2 entao retorne v senao retorne v * fatorial(v-1) fimse fimfuncao
No algoritmo principal: n <- 14 escreva(o Fatorial de , n, = ,fatorial(n))
algoritmo "Procedimento triangulo" var altura, base, rea : real //declarao das variveis globais procedimento ptriangulo (var h,b,ar : real) //declarao inicio ar <- (b*h)/2 //instrues fimprocedimento Procedimento criado inicio escreval ("Digite o valor da base: ") leia (base) escreval ("Digite o valor da altura: ") leia (altura) ptriangulo(altura,base, area) //chamada ao procedimento escreval (area,"m") fimalgoritmo