Sunteți pe pagina 1din 6

Disciplina: Tcnicas de Programao Carga Horria: 80 horas Aula 11 UNIDADE VI SUBALGORITIMOS UTILIZAO DE PROCEDIMENTOS E FUNES 1.

. Introduo: Vamos imaginar a seguinte situao: Em um sistema comercial, em vrias etapas temos que verificar se o nmero do CPF do cliente foi digitado de forma correta. Imaginando que tal situao se repete por 38 vezes no sistema. Teramos que escrever 38 vezes o mesmo trecho de cdigo? No, para isso teramos uma rotina subalgoritmo que teria esta funo. Este subalgoritmo teria um nome e, sempre que fosse necessria a verificao do CPF, bastaria invocar chamar este subalgoritmo. Subalgoritmos assim. so trechos de algoritmos que efetuam um ou mais clculos determinados. Ao invs de escrever-se um algoritmo grande, escrevem-se vrios algoritmos menores, os quais, no isoladamente, mas em conjunto, resolvem o problema proposto. conveniente utiliz-los quando uma determinada tarefa efetuada em diversos lugares no mesmo algoritmo. Ao invs de escrever-se um trecho diversas vezes, escreve-se um sub-algoritmo e chama-se-o diversas vezes. - Eles reduzem o tamanho do algoritmo. - Facilitam a compreenso e visualizao do algoritmo. - So declarados no incio do algoritmo e podem ser chamados em qualquer ponto aps sua declarao. Eles podem ser Funes que retorna algum valor ou Procedimento (Subrotina) que no retorna nada

2. Procedimentos:
Em VisuAlg, procedimento um subprograma que no retorna nenhum valor (corresponde ao procedure do Pascal). Sua declarao, que deve estar entre o final da declarao de variveis e a linha inicio do programa principal, segue a sintaxe abaixo: procedimento <nome-de-procedimento> [(<seqnciade-declaraes-de-parmetros>)] // Seo de Declaraes Internas inicio // Seo de Comandos fimprocedimento O <nome-de-procedimento> obedece as mesmas regras de nomenclatura das variveis. Por outro lado, a <seqncia-de-declaraes-de-parmetros> uma seqncia de [var] <seqncia-de-parmetros>: <tipode-dado> separadas por ponto e vrgula. A presena (opcional) da palavra-chave var indica passagem de parmetros por referncia; caso contrrio, a passagem ser por valor. Por sua vez, <seqncia-de-parmetros> uma seqncia de nomes de parmetros (tambm obedecem a mesma regra de nomenclatura de variveis) separados por vrgulas. 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 2.1 Exemplos: Exemplo 1 : O que este algoritmo faz? ALGORITMO "Procedimento" Var A,B,C,D,CONT,AUX:Inteiro Procedimento TROCA(var x, y: inteiro) var Aux : inteiro INICIO Aux <- x x <- y y <- Aux fimprocedimento INICIO LEIA (A,B,C,D) Enquanto NAO((A<=B) e (B<=C) e (C<=D)) faca se (D<C) entao TROCA(D,C) FIMSE SE C<B ENTAO TROCA(C,B) FIMSE

SE B<A ENTAO TROCA(A,B) FIMSE FIMENQUANTO ESCREVA (A," ",B," ",C," ",D) FIMALGORITMO EXEMPLO2/Exercicio: O programa abaixo em PASCAL calcula as razes de uma equao do 2 grau, usando

procedimentos.Codifique este programa no cdigo do VISUALG.


Program Calcula -Raizes ; Var a, b, c, delta, x1, x2 : Real ; Procedure Leia_Coeficientes ; Begin Repeat Read(a,b,c); Until (a <> 0) ; End; Procedure Calcula_Delta ; Begin delta := (b*b - 4*a*c) ; End; Procedure Calcula_Razes ; Begin x1 := (-b+SQRT(delta))/(2*a) ; x2 := (-b-SQRT(delta))/(2*a) ; End; Begin Leia_Coeficientes ; Calcula_Delta ; If delta < 0 Then Write(No existem raizes reais) Else Begin Calcula_Raizes ; Write(x1, x2); End; End.

3.

Funes: Uma funo um instrumento que tem como objetivo retornar um valor ou uma informao. A chamada de uma funo feita atravs da citao do seu nome seguido opcionalmente de seus argumentos iniciais entre parnteses. Uma funo no dever Simplesmente ser chamada, como no caso dos procedimentos, mas dever ser atribuda alguma Varivel. Uma funo deve ter um nome e um tipo, e sua sintaxe mostrada abaixo.As funes podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse. Sua declarao deve estar entre o final da declarao de variveis e a linha inicio do programa principal, e segue a sintaxe abaixo:
funcao<nome-de-funo> [(<seqncia-de-declaraes-de-parmetros>)]: <tipo-de-dado> // Seo de Declaraes Internas inicio // Seo de Comandos fimfuncao

O <nome-de-funo> obedece as mesmas regras de nomenclatura das variveis. Por outro lado, a <seqnciade- declaraesde-parmetros> uma seqncia de [var] <seqncia-de-parmetros>: <tipo-de-dado> separadas por ponto e vrgula. A presena (opcional) da palavra-chave var indica passagem de parmetros por referncia , caso contrrio, a passagem ser por valor., conforme veremos frente. Por sua vez, <seqncia-de-parmetros> uma seqncia de nomes de parmetros (tambm obedecem a mesma regra de nomenclatura de variveis) separados por vrgulas. O valor retornado pela funo ser do tipo especificado na sua declarao (logo aps os dois pontos). Em alguma parte da funo (de modo geral, no seu final), este valor deve ser retornado atravs do comando retorne.. 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>. 2.1 Exemplos: Nos prximos exemplos, atravs de um subprograma soma, ser calculada a soma entre os valores 4 e 9 (ou
seja, ser obtido o resultado 13) que o programa principal imprimir em seguida .

funcao soma: inteiro var aux: inteiro inicio // n, m e res so variveis globais aux <- n + m retorne aux fimfuncao Exemplo 1

No programa principal deve haver os seguintes comandos: n <- 4 m <- -9 res <- soma escreva(res)

Algoritmo "RETORNA O SOBRENOME" var nome, sobrenome : Caractere quant_caracteres, local_espcao : INTEIRO inicio nome <- "Bruno Tonet" quant_caracteres <- Compr (nome) // funo predefinida que reorna a dimenso do caracter local_espcao <- POS (" ",nome) // funo predefinida que retorna a posio do caractere sobrenome <- Copia (nome, local_espcao + 1 , quant_caracteres) //funo predefinida que copia um determinado trecho do caractere Escreva("Seu sobrenome ", sobrenome) fimalgoritmo Exemplo 2 Algoritmo "RETORNA UM VALOR INTEIRO" var valorReal : REAL valorInteiro : INTEITO inicio valorReal <- 5.87978098980980989089898 valorInteiro <- INT(valorReal) //funcao predefinida que converte o valor em inteiro Escreva("Valor inteiro ", valorInteiro) fimalgoritmo

2.2 Funes Predefinidas do Visualg: O visulag vem com bibliotecas de funes predefinidas que voc pode utilizar :

2.3 Criando Funes A criao de uma Funo deve ser declarada, com os demais objetos, no incio do programa. Este tipo de subalgoritmo sempre retornam um e apenas um valor ao algoritmo que lhe chamou. Cada funo tem associada ao seu valor de retorno um tipo explcito. Da mesma maneira com que os parmetros so fixos para todas as chamada o retorno tambm fixo. Sintaxe da Funo Formato geral: funcao <identificador> ([var]<parmetros>) <tipo de Algoritmo "<nome do algoritmo>" retorno> var var <declarao de variveis locais> <declarao de variveis inicio globais> <lista de comandos> <definio da funo> retorne <varivel de retorno> inicio fimfuncao < lista de comandos> fimalgoritmo

Onde: Identificador: Nome da funo. Parmetros: Entre um mesmo tipo de dados so separados por vrgula. Entre tipos de dados a separao feita com ponto-e-vrgulas ';'. Tipo de retorno da funo: Real, Inteiro, Lgico ou Caractere. Declarao de variveis locais: idntica a declarao de variveis globais. As variveis declaradas localmente tem validade dentro do escopo da funo. Retorne: local onde colocado a varivel de retorno.

Exemplo 3
ALGORITMO "Funes Personalizadas" var Valor_1,Valor_2, soma: real FUNCAO FSoma(Recebe_valor1, Recebe_valor2: Real):Real var total : real Inicio total<-Recebe_valor1+Recebe_valor2 retorne total fimfuncao INICIO Escreva ("Valor_1 : ") LEIA (Valor_1) Escreva ("Valor_2 : ") LEIA (Valor_2) soma<-FSoma(Valor_1,Valor_2) ESCREVA ("Soma das variveis ", soma) FIMALGORITMO

3. . Procedures e Funes com Passagem de Parmetros Ate agora, os procedimentos e as funes eram executadas sem que nenhum dado fosse passado especficamente para eles, a no ser as variveis globais. Muitas vezes precisamos executar um procedimento e/ou funo sobre conjuntos de dados diferentes. Imaginemos uma funo que calcula a raiz quadrada de um nmero (SQR).Precisamos em cada momento que ela nos retorne a raiz quadrada para um valor diferente.Assim, passamos para ela um valor, chamado parmetro, como por exemplo: SQRT(9) ou SQRT(x) Para chamarmos uma funo ou procedimento deste tipo, devemos colocar o nome seguido de um conjunto de parmetros entre parnteses. Os parmetros devem ser em igual quantidade e de mesmos tipos, conforme foi definida a funo ou o procedimento. Existem 2 (dois) tipos de passagem de parmetros: por referncia ou por valor: 3.1 Passagem por Referncia: Os parmetros devem ser declarados dentro de parnteses, conforme exemplos da declarao abaixo: Procedure Leitura (a,b,c : Real) ; ou Function Soma ( x,y : Real): Real ; Neste caso, todas as modificaes realizadas nos parmetros dentro do corpo da funo ou do procedimento sero repassados para as variveis passadas durante a chamada. como se o procedimento ou funo estivessem usando as prprias variveis que foram passadas como parmetros. Para chamarmos o procedimento e a funo acima, devemos escrever algo do tipo: Leitura (x1, x2, x3) ; ou s := Soma (f, g) ; Devemos salientar que as variveis declarados no procedimento ou na funo so chamadas parmetros declarados, e que as variveis passadas durante a chamada so chamadas parmetros de chamada. No existe a necessidade dos nomes dos parmetros declarados serem iguais aos parmetros de chamada. IMPORTANTE!!! Tudo o que for feito com os parmetros declarados ser feito com os parmetros de chamada, quando se usar passagem por referncia. As variveis declaradas se comportam como se fossem as prprias variveis de chamada.Ex: Seja os seguintes procedimento e funo: Procedure Leitura (a,b,c : Real) ; Begin read( a,b,c); end; Function Soma ( x, y : Real): Real ; Begin Soma := x + y ; end; Poderamos ter o seguinte trecho de programa: : Leitura (m,n,p) ; s1 := Soma (m,n) ; s2 := Soma (n,p) ; s3 := Soma (m,p) ; Write(s1, s2, s3 ); : 3.2 Passagem por Valor: Os parmetros devem ser declarados fora do parnteses, e dentro do espao de declarao de variveis locais. A chamada dos procedimentos e das funes feita da mesma forma que da passagem por referncia. Neste caso, as alteraes sofridas pelas variveis declaradas no sero repassadas para as variveis de chamada. Este tipo de passagem de parmetros deve ser utilizado quando s interessa o valor do dado para o procedimento ou para a funo. Utilizando o mesmo exemplo anterior, teramos a seguinte declarao: Procedure Leitura (a,b,c) ; Var a,b,c : Real ; ou Function Soma ( x,y): Real ; Var x,y : Real ; Analisando este exemplos, poderemos facilmente concluir que a funo Soma realmente no necessitava de parmetros por referncia, pois eles no eram de fato alterados. Mas podemos tambm perceber que o procedimento Leitura deve necessariamente utilizar parmetros por referncia, pois seno os dados lidos sero perdidos aps o trmino do procedimento. Assim, conclumos que as formas corretas para declarar estes procedimentos seriam:

Procedure Leitura (a,b,c : Real) ; e Function Soma ( x,y): Real ; Var x,y : Real ; 4. Recurso e Aninhamento A atual verso do VisuAlg permite recurso, isto , a possibilidade de que um subprograma possa chamar a si mesmo. A funo do exemplo abaixo calcula recursivamente o fatorial do nmero inteiro que recebe como parmetro: funcao fatorial (v: inteiro): inteiro inicio se v <= 2 entao retorne v senao retorne v * fatorial(v-1) fimse fimfuncao

Exercicios:
1. Escrever um algoritmo para determinar se um determinado nmero inteiro par ou mpar. Utilizar um subalgoritmo de funo que retorna um valor lgico para indicar se o valor recebido par ou no. Escreva um algoritmo que l um nmero no determinado de valores m, todos inteiros e positivos, um valor de cada vez, e, se m<10 utiliza um subalgoritmo do tipo funo que calcula o fatorial de m, e caso contrrio, utiliza um subalgoritmo do tipo funo para obter o nmero de divisores de m (quantos divisores m possui). Escrever cada m lido e seu fatorial ou seu nmero de divisores com uma mensagem adequada". Neste caso, temos um programa principal e dois subalgoritmos Escrever um algoritmo, utilizando um subalgoritmo recursivo, para calcular a soma dos 'n' primeiros inteiros positivos, sendo 'n' um valor fornecido pelo usurio Faa uma funo recursiva que receba um vetor de 100 posies e retorne o somatrio dos elementos pares (ou mpares) do vetor.

2.

3. 4.

S-ar putea să vă placă și