Sei sulla pagina 1di 22

Algoritmos

Marcelo Pereira

Aula 7 - Funes

Sub-rotinas
No geral, problemas complexos exigem algoritmos complexos. Mas
sempre possvel dividir um problema grande em problemas menores.
Desta forma, cada parte menor tem um algoritmo mais simples, e esse
trecho menor que chamado de sub-rotina.
Uma sub-rotina na verdade um programa, e sendo um programa poder
efetuar diversas operaes computacionais (entrada, processamento, sada).

Um procedimento um bloco de programa, contendo incio e fim, identificado


por um nome. referenciado em qualquer parte do programa principal ou
do programa chamador da rotina.
Lembrando que: NADA IMPEDE QUE UM PROGRAMA UTILIZE FUNES
E PROCEDIMENTOS

ATENO
importante saber identificar a diferena
entre variveis locais e globais.
A grosso modo, variveis globais so
aquelas declaradas no programa principal,
enquanto as locais so declaradas nas
sub-rotinas (dentro de um procedimento,
por exemplo).
Veremos mais sobre o assunto no decorrer
dos exerccios.

Procedimento x Funo
Algoritmo "procedimento-1"
Var
procedimento soma
var
a , b , resposta: inteiro
Inicio
escreval ("Digite o valor de A")
leia (a)
escreval ("Digite o valor de B")
leia (b)
resposta <- (a + b)
escreval (resposta)
fimprocedimento
Inicio
soma
escreval ("O programa continua...")
fimalgoritmo

Algoritmo "funcao-1"
Var
x , y : inteiro
funcao soma(a,b : inteiro) : inteiro
var
total : inteiro
inicio
total <- a + b
retorne total
fimfuncao
inicio
leia (x,y)
escreval ("o valor da soma eh : " , soma(x,y))
Fimalgoritmo

Funo
Os procedimentos pela passagem de parmetro por referncia
permitem que sejam retornados valores rotina chamadora, e desta
forma podem ser impressos, atribudos a uma varivel, servirem em
operaes aritmticas, entre outras.
As funes retornam um valor ao programa principal
Ex: retorne total
O valor que a funo retorna tem que ser de um tipo declarado:
Ex: funcao(a,b : inteiro) : inteiro

Exerccio 1
Utilizando uma funo, calcule o fatorial de
um nmero qualquer escolhido pelo
usurio. Retorne o resultado para o
programa principal.

Algoritmo "funcao-fat"
Var
limite : inteiro
funcao fatorial(N : inteiro) : inteiro
var
i,fat : inteiro
inicio
fat <- 1
para i de 1 ate N faca
fat <- fat * i
fimpara
retorne fat
fimfuncao
inicio
escreval ("Digite o fatorial que deseja calcular")
leia (limite)
escreval ("o fatorial de ", limite , " eh : " , fatorial(limite))
Fimalgoritmo

Funes predefinidas
O Visualg possui diversas funes predefinidas. Alis, tem
uma que utilizamos diversas vezes em nossos
exerccios. Qual?

Funes predefinidas
O Visualg possui diversas funes predefinidas. Alis, tem
uma que utilizamos diversas vezes em nossos exerccios.
Qual? RANDI(INTEIRO)
DICA: pressione CTRL+J para obter a lista de funes
predefinidas do Visualg. Basta selecionar a funo
desejada e passar os parmetros.
Exemplo: escreval

(exp(2,2))
(base,expoente)

Exerccio 2
Elaborar um algoritmo que utilize funes
para retornar o dobro ou o triplo de um
valor passado como parmetro.

Algoritmo "funcoes"
Var
valor : inteiro
funcao dobro(x : real) : real
var
total : real
inicio
total <- (x * 2)
retorne total
fimfuncao
funcao triplo(y : real) : real
var
total : real
inicio
total <- (y * 3)
retorne total
fimfuncao
inicio
leia (valor)
escreval ("O dobro do valor eh : " , dobro(valor))
escreval ("O triplo do valor eh " , triplo(valor))
Fimalgoritmo

Exerccio 3
Elaborar um algoritmo que utilize uma
funo para calcular e retornar a mdia de
trs notas passadas por parmetro pelo
programa principal.

Algoritmo media-1"
Var
x , y , z : inteiro
funcao media(a,b,c : real) : real
var
total : real
inicio
total <- (a + b + c) / 3
retorne total
fimfuncao
inicio
leia (x,y,z)
escreval ("A media eh : " , media(x,y,z))
Fimalgoritmo

Exerccio 4
Elaborar um algoritmo que utilize uma
funo para retornar se um nmero inteiro
neutro, par ou impar.
Sim, uma funo pode receber um valor
inteiro como parmetro e retornar um
valor do tipo caracter. Mais: pode
receber um parmetro do tipo real e
retornar um lgico, inteiro ou caracter. O
que uma funo retorna, independe do
tipo de dado que recebe como parmetro.

Algoritmo "parouimpar"
Var
numero : inteiro
funcao parouimpar(N : inteiro) : caracter
var
inicio
Se (N = 0) entao
retorne "Neutro"
Senao
Se (N mod 2 = 0) entao
retorne "PAR"
Senao
retorne "IMPAR"
fimse
fimse
fimfuncao
inicio
escreval ("Digite o inteiro que deseja testar")
leia (numero)
escreval ("O numero ", numero , " eh : " , parouimpar(numero))
Fimalgoritmo

Exerccio 5
Elaborar um programa que por intermdio
de uma sub-rotina do tipo funo efetue a
leitura de dois valores reais e apresente
como sada uma mensagem informando
se os nmeros so iguais ou diferentes. O
retorno da funo deve ser do tipo lgico.

Algoritmo "comparacao"
var
num1, num2: real
funcao COMPARA(A, B: real): logico
inicio
retorne ( A = B )
fimfuncao
inicio
escreva("Qual o primeiro valor: ")
leia(num1)
escreva("Qual o segundo valor: ")
leia(num2)
se ( COMPARA(num1,num2) ) entao
escreval("Os numeros so IGUAIS")
senao
escreval("Os numeros so DIFERENTES")
fimse
fimalgoritmo

Exerccio 6
Elaborar um programa chame um
procedimento, com parmetros passados
por referncia, para ordenar um vetor de
10 elementos. Imprima o vetor ordenado
(crescente e na horizontal). Chame uma
funo do tipo lgico para verificar se
cada elemento do vetor ordenado par ou
impar (escreva P para um elemento par e
I para impar). Exemplo:
2 2 5 5 7 6...
PPIIIP...

Declarao da funo:
funcao parouimpar(v : inteiro) : logico
inicio
retorne (v mod 2 = 0)
fimfuncao
Chamada da funo
para i de 1 ate 10 faca
se (parouimpar(vet[i])) entao
escreva ("P")
senao
escreva ("I")
fimse
fimpara

Exerccio 7
Criar um algoritmo que efetue o clculo de
uma prestao em atraso. Para tanto,
utilize a frmula:
PREST = VALOR + (VALOR * (TAXA/100) * TEMPO).

Apresentar o valor da prestao no


programa principal.
Utilize uma FUNO para calcular o valor
atualizado da prestao.

algoritmo "Calc_prestacao"
var
juros, dias, valor : real
funcao calc(taxa, x, y: real) : real
var
prest : real
inicio
prest <- x + (x * (taxa/100) * y)
retorne prest
fimfuncao

inicio
escreva("Qual o valor da prestao? ")
leia(valor)
escreva("Quantos dias estah em atraso?")
leia(dias)
escreva("Qual a taxa de juros?")
leia(juros)
escreva("O total da prestacao atualizada eh " , calc(juros,valor,dias))
fimalgoritmo

Exerccio 8 - interativo
algoritmo "exercicio8"
var
x,y : inteiro
funcao compara(var a,b: inteiro) : inteiro
O que faz o algoritmo?
var
inicio
x e y so variveis locais?
se (a > b) entao
retorne troca(a,b)
a e b so parmetros?
senao
retorne (a)
fimse
m e n so parmetros?
fimfuncao
funcao troca(m,n : inteiro) : inteiro
correto afirmar que a funo
var
troca s chamada quando
inicio
y > x ?
retorne (n)
fimfuncao
inicio
Se x = y , o que o alg. ir
escreva("Digite o primeiro valor")
retornar?
leia(x)
escreva("Digite o segundo valor")
leia(y)
escreva("O mxxxx valor eh : " , compara(x,y))
fimalgoritmo

Potrebbero piacerti anche