Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Algoritmos
Apostila Algoritmos
b)
3
2
x 3
y 4
1
+
c) 2 x
3 2
+
2) Sabendo-se que A=10, B=3, X=2 e Y=1, quais os resultados fornecidos
pelas expresses abaixo:
a) X+Y-A + (A B^2+Y) 4*X
b) B^(2+X) A/3 +1
c) (A B^3 >X) OR (X 3 =1)
d) NOT (X*Y = B)
3) Faa um algoritmo que leia os coeficientes a, b e c referentes a equao do
segundo grau (ax
2
+bx+c) e exiba como resultado as razes da equao.
4) Faa um algoritmo que leia a base e a altura de um tringulo e calcule sua
rea.
5) A potncia de um motor pode ser expressa em cv ou kW . Sabe-se que
1kW = 0,736 cv. Faa um algoritmo que leia um valor de potncia em cv e
informe o valor de potncia equivalente em kW.
6) Faa um algorimo para transformar um valor de temperatura em F para C,
sabendo-se que:
9
5 ) 32 F (
C
=
Desenvolvimento de Algoritmos 9
4. VARIVEIS E CONSTANTES
4.1. VARIVEIS
Sabe-se que na matemtica uma varivel a representao simblica
dos elementos de certo conjunto.
Nos algoritmos, destinados a resolver um problema no computador, as
variveis so armazenadas na memria do computador e os valores
associados a elas podem ser modificados ao longo da execuo do programa.
Embora uma varivel possa assumir diferentes valores, ela s pode armazenar
um nico valor a cada instante.
Toda varivel identificada por um nome e ser capaz de armazenar
valores de um mesmo tipo. So cinco os tipos bsicos de dados que podem se
utilizados:
Inteiro: qualquer nmero inteiro negativo, nulo ou positivo (2, 4 ,0 ,-1).
As principais operaes vlidas para este tipo de variveis so: soma,
subtrao, multiplicao, DIV (diviso que no calcula a parte fracionria, por
exemplo 5DIV2=2) e MOD (calcula o resto da diviso, por exemplo 5MOD2=1);
Real: qualquer nmero real negativo, nulo ou positivo (2,5; 3,44; 12,3).
As principais operaes vlidas para este tipo de variveis so: adio,
subtrao, multiplicao e diviso.
Caracter: quaisquer caracteres alfa-numricos (a,C, 2, L, d).
Cadeia de caracteres (String): qualquer conjunto de caracteres alfa-
numricos (Ana, hoje, LOUCO, Tudo bem?). As principais operaes
vlidas para este tipo de variveis so: concatenao e tamanho.
Concatenar duas strings fazer a unio delas gerando uma nica cadeia
de caracteres. Por exemplo, a concatenao das strings Nome: e Ariosvaldo
resultar na string Nome: Ariosvaldo. Em potugol a concatenao escrita da
seguinte maneira: Nome:+ Ariosvaldo=Nome: Ariosvaldo. Avaliar o tamanho
de uma string verificar quantos caracteres ela possui. Por exemplo o tamanho
da string terra 5. Em portugol escreve-se: Length (Terra) = 5.
Lgico: variveis que podero assumir valores Verdadeiro ou Falso.
As principais operaes vlidas para este tipo de variveis so: AND, OR e
NOT.
Toda varivel deve ser declarada. Declarar uma varivel significa criar
um local na memria que ser rotulado com o nome da varivel. A varivel
deve ser declarada antes do incio da execuo do programa identificando-se
seu nome e tipo.
Exemplo: Calcular o triplo de um nmero fornecido pelo usurio.
Algoritmo TRIPLO;
Var {indica que variveis sero declaradas}
Numero, Resultado: Real
Incio
Ler (Numero)
Resultado := Numero * 3
Escrever (Resultado)
Fim
Desenvolvimento de Algoritmos 10
Quando um valor fornecido a uma varivel para que seja armazenado
na memria do computador dizemos que o valor foi atribudo varivel. O
comando de atribuio representado pelo smbolo := . Uma atribuio s ser
vlida se o valor atribudo for do mesmo tipo da varivel. Por exemplo se
tentarmos atribuir o valor AGRICULTURA a uma varivel do tipo real ocorrer
um erro, mas se atribuirmos o valor AGRICULTURA a uma varivel do tipo
String o programa ser executado corretamente. A atribuio diferente da
comparao. Por exemplo, quando a expresso x:=2 (atribuio) for executada
o valor 2 ser armazenado no espao de memria reservado para a varivel x
que dever ser do tipo inteiro. Quando a expresso x=2 (comparao) for
executada o computador verificar se o valor armazenado no espao reservado
para a varivel x do tipo inteiro igual a 2.
4.2. CONSTANTES
As constantes so armazenadas na memria do computador e os
valores associados a elas no podem ser modificados ao longo da execuo
do programa. Uma constante pode ser um nmero, um valor lgico ou uma
sequncia de caracteres.
As constantes tambm devem ser declaradas, como mostra o exemplo a
seguir:
Exemplo: Calcular o triplo de um nmero fornecido pelo usurio.
Algoritmo TRIPLO;
Const {indica que constantes sero declaradas}
T : Inteiro = 3
Var {indica que variveis sero declaradas}
Numero, Resultado: Real
Incio
Ler (Numero)
Resultado := Numero * T
Escrever (Resultado)
Fim
Observe que, no exemplo anterior, o valor associado a nmero ser
diferente para cada execuo do programa e depender do valor digitado pelo
usurio. Mas, o valor associado a T ser sempre 3.
4.3. REGRAS PARA NOMES DE VARIVEIS E CONSTANTES
Os nomes de variveis e constantes devem ser formados por um ou
mais caracteres, sendo que o primeiro deve ser uma letra e os seguintes letras
ou dgitos. No permitido a utilizao de smbolos especiais (-, +, *, & ou
outros). Tambm no deve haver espaos entre os caracteres que definem o
nome de uma varivel ou constante.
A tabela a seguir apresenta alguns exemplos de nomes vlidos e
invlidos para variveis.
Desenvolvimento de Algoritmos 11
Nomes INVLIDOS para
variveis/constantes
Nomes VLIDOS para
variveis/constantes
2NOTA NOTA
MEDIA SIMPLES MEDIASIMPLES
% PORCENTO
VARIAO VARIACAO
4.4. EXERCCIOS
1) Identificar quais as variveis e constantes foram utilizadas nos exerccios
3,4 e 5 do captulo anterior dizendo o seu tipo.
2) Assinale com um X as variveis que apresentam nomes invlidos
justificando sua resposta. Para todas as opes indique o tipo da varivel.
( ) NOTA ( ) AH! ( ) km/h ( ) 5(8)
( ) a{b} ( ) SALA115 ( ) Xa3 ( ) ABC
3) Para cada linha de comando abaixo dizer quais os tipos das variveis e
avaliar o resultado de acordo com os valores de entrada determinados.
a) soma ( num1 MOD 2) * (num1 DIV 2)
Considerar: num1 = 3, num1 = 16, num1 = 25
b) resultado (var1 OR var2) AND (var3)
Considerar: var1, var2 e var3 = False; var1 e var3 = True e var2 = False
var1 e var3 = False e var2 = True
c) completo nome + sobrenome
Considerar: nome = Gensio e sobrenome = Silva
d) valor (x / y) - 4/(y^2)*x + x*(y-1)
Considerar: x = 2 e y = 4 ; x = 24 e y = 8; x = 6 e y = 4
Desenvolvimento de Algoritmos 12
5. ESTRUTURA CONDICIONAL (ANLISE DE CONDIES)
A estrutura condicional permite a escolha do grupo de aes e estruturas
a ser executado quando determinadas condies, representadas por
expresses lgicas so satisfeitas.
5.1. COMANDO SE
No comando SE quando a condio avaliada verdadeira uma
determinada sequncia de comandos executada e quando a condio
avaliada falsa outra sequncia de comandos executada. A estrutura
condicional SE pode ser simples ou composta.
A sintaxe da estrutura condicional simples :
Se (condio) ento
(sequncia de comandos)
FimSe
A sintaxe da estrutura condicional composta :
Se (condio) ento (sequncia de comandos A)
Seno (sequncia de comandos B)
Ou
Se (condio 1) ento (sequncia de comandos 1)
Seno se (condio 2) ento (sequncia de comandos 2)
...
Seno se (condio N) ento (sequncia de comandos N)
Seno (sequncia de comandos N+1)
O comando SE pode ser traduzido da seguinte maneira: Se o resultado
da condio for verdadeiro execute a sequncia de comandos 1 seno execute
a sequncia de comandos 2.
Exemplos:
Como entrar em casa?
Algoritmo EntrarNaCasa
Pegar chave do porto no bolso
SE (chave est no bolso) OR (chave est na bolsa) ENTO Abrir o porto
SENO Desesperar-se, voc est para fora por tempo indeterminado
Comparar dois nmeros verificando qual deles o maior.
Algoritmo Comparacao
var
num1,num2: Real
Inicio
Ler (num1)
Ler (num2)
Se (num1 > num2) Ento
Escrever (O primeiro nmero o maior)
Seno se (num1 < num2) Ento
Escrever (O segundo nmero o maior)
Seno
Escrever (Os nmeros so iguais)
FimComparacao
Desenvolvimento de Algoritmos 13
5.2. COMANDO CASO
O comando CASO permite que a condio avaliada resulte em valores
diferentes de verdadeiro ou falso. Isto ocorre porque existe uma sequncia de
aes que so executadas de acordo com o resultado da expresso avaliada.
A sintaxe do comando CASO :
CASO (Expresso)
(Opo 1): (sequncia de comandos 1)
(Opo 2): (sequncia de comandos 2)
...
(Opo n): (sequncia de comandos N)
O comando CASO pode ser traduzido da seguinte maneira: caso o
resultado da expresso seja igual a opo 1 execute a sequncia de comandos
1, caso o resultado da expresso seja igual a opo 2 execute a sequncia 2.
Exemplo: Fazer um algoritmo que permita ao usurio escolher entre calcular o
dobro ou o triplo de um nmero fornecido por ele.
Algoritmo DobroOuTriplo
Var
OP: Inteiro
Num, Resultado: Real;
Incio
Escrever ( Opes:)
Escrever ( 1 Calcular o dobro do nmero)
Escrever ( 2 Calcular o triplo do nmero)
Escrever ( Escolha uma opo: )
Ler (OP)
Escrever ( Digite o nmero:)
Ler (Num)
Caso (OP)
1: Resultado := Num*2
2: Resultado := Num*3
Escrever (Resultado);
Fim
5.3. EXERCCIOS
1) Fazer um algoritmo para ler os trs lados de um tringulo, dizer se ele
issceles, escaleno ou equiltero.
OBS: Antes de verificar o tipo do tringulo deve-se verificar se os lados
fornecidos formam tringulo ( L1+L2 > L3; L2+L3 >L1 e L3+L1 > L2)
2) Fazer um algoritmo para ler trs notas, imprimir a maior delas e a mdia
destas notas .
3) Faa um algoritmo que permita ao usurio fornecer trs nmeros e escolher
entre as opes: calcular a mdia, calcular a soma ou calcular a
multiplicao dos nmeros.
Desenvolvimento de Algoritmos 14
6. ESTRUTURA DE REPETIO (ITERAES)
A estrutura de repetio permite que uma sequncia de comandos seja
executada repetidamente at que uma determinada condio de interrupo
seja satisfeita.
6.1. COMANDO ENQUANTO
O ENQUANTO uma estrutura de repetio condicional, isto , uma vez
iniciada ser executada at que a condio estipulada seja falsa. A sintaxe do
comando ENQUANTO mostrada a seguir.
ENQUANTO (condio) FAA
(sequncia de comandos)
FimEnquanto
No caso da condio ser um contador, este deve ser incializado antes do
incio da estrutura e deve ser incrementado dentro dela.
Exemplo: Fazer um algoritmo que imprima na tela os nmeros inteiros de 1 a
100.
Algoritmo Imprime1a100
Var
Contador:Inteiro
Incio
Contador := 1 {Contador iniciallizado}
Enquanto (Contador<=100) Faa
Escrever(Contador)
Contador := Contador +1 {Contador incrementado}
FimEnquanto
FimAlgoritmo
Quando o comando ENQUANTO utilizado, pode acontecer de
nenhuma iterao ser realizada. Isto ocorre, quando, a condio j falsa na
primeira vez que o comando executado.
Exemplo: Fazer um algoritmo que permita ao usurio definir quantas vezes o
nmero 10 ser impresso na tela.
Algoritmo ImprimeNumero
Var
Contador, Quantidade :Inteiro
Incio
Contador := -1
Escrever (Quantas vezes voc deseja que o nmero 10 seja
impresso na tela?)
Ler (Quantidade)
Enquanto (Contador >= Quantidade) Faa
Escrever(10)
Contador := Contador +1
FimEnquanto
Desenvolvimento de Algoritmos 15
FimAlgoritmo
Neste exemplo se a quantidade informada pelo usurio dor zero
nenhuma iterao ser realizada.
6.2. COMANDO PARA
O PARA uma estrutura de repetio incondicional, isto , uma vez
iniciada ser executada quantas vezes estiver estipulada no intervalo
determinado. A sintaxe do comando PARA apresentada a seguir:
PARA Contador := ValorInicial AT ValorFinal FAA
Sequncia de comandos
FimPara
O comando PARA sempre utiliza uma varivel inteira para representar o
contador que dever ser declarada pelo desenvolvedor do programa. Quando o
comando PARA utilizado, todas as iteraes estipuladas no intervalo so
feitas.
Exemplo: Fazer um algoritmo que imprima na tela os nmeros inteiros de 1 a
100.
Algoritmo Imprime1a100
Var
Contador:Inteiro
Incio
Para Contador := 1 at 100 Faa
Escrever(Contador)
FimPara
FimAlgoritmo
6.3. COMANDO REPITA
O REPITA uma estrutura de repetio condicional, isto , uma vez
iniciada ser executada at que a condio estipulada seja falsa. Assim como
acontece com o comando ENQUANTO, no caso da condio ser um contador,
este deve ser incializado antes do incio da estrutura e deve ser incrementado
dentro da estrutura. A sintaxe do comando REPITA apresentada a seguir.
REPITA
Sequncia de comandos
AT (condio)
Quando o comando REPITA utilizado, pelo menos uma iterao
realizada. Isto ocorre, porque a condio s ser avaliada no final da estrutura
do comando.
Desenvolvimento de Algoritmos 16
Exemplo: Fazer um algoritmo que imprima na tela os nmeros inteiros de 1 a
100.
Algoritmo Imprime1a100
Var
Contador:Inteiro
Incio
Contador:=1
Repita
Escrever(Contador)
Contador := Contador +1
At (Contador >=100)
FimAlgoritmo
6.4. EXERCCIOS
1) Fazer um algoritmo que calcule e imprima o valor de S na srie abaixo. O
valor de N ser informado pelo usurio.
N
1
4
1
3
1
2
1
1 S + + + + + = L
2) Fazer um algoritmo que leia e imprima inteiros positivos. O programa pra
quando lido um valor negativo ou zero.
3) Fazer um algoritmo que, dados o valor inicial e a razo, calcule a PA ou a
PG correspondente e imprima os resultados. O tipo de progresso calculado
e o nmero de termos sero definidos pelo usurio.
Desenvolvimento de Algoritmos 17
7. EXERCCIOS DE REVISO
1) Qual o valor de L aps a execuo do algoritmo abaixo?
Algoritmo Revisao1
Var
X,Y,L: Real
A,B,C: Lgico
Inicio
A:=Falso
B:=Verdadeiro
C:=Falso
X:=1,5
Y:=3,2
X:=X+1
SE C OR ((X+Y) > 5) OR (NOT A AND B)) ENTO
L := 0
SENO L := 1
ESCREVER (L)
FimAlgoritmo
2) Fazer um algoritmo que calcule o fatorial de N, sendo que o valor inteiro N
ser fornecido pelo usurio.
OBS.: N ) 1 N ( 3 2 1 ! N = L e 1 ! 0 =
3) Qual a diferena entre:
a) O comando PARA e o comando ENQUANTO
b) O comando ENQUANTO e o comando REPITA
c) O comando SE e o comando CASE
Desenvolvimento de Algoritmos 18
4) Fazer um algoritmo que leia o nmero do CPF, o nmero de dependentes e
a renda anual de um contribuinte e calcule o valor do seu imposto de renda.
Haver um desconto de R$ 600,00 por dependente e os valores da alquota
para o clculo do imposto so:
Renda lquida Alquota
At R$ 2.000,00 Isento
De R$ 2.001,00 at R$ 5.000,00 5%
De R$ 5001,00 at 10.000,00 10%
Acima de R$ 10.000,00 15%
Como resultados devero ser impressos todos os dados de entrada, o
valor do desconto e o valor do imposto.
5) O que est errado no algoritmo abaixo?
Algoritmo Revisao6
Var
Inteiro: N, PAR, X
Inicio
Ler (N)
X := MOD (N / 2)
SE (X=0) ENTAO
PAR := Verdadeiro
SENO PAR := Falso
FimAlgoritmo
Desenvolvimento de Algoritmos 19
8. VETORES
O vetor uma varivel composta capaz de armazenar mais de um valor
ao mesmo tempo. uma estrutura de dados homognea porque todos os
dados armazenados dentro de um vetor devem ser do mesmo tipo.
Exemplo:
Vetor Notas
O vetor Notas armazena apenas valores do tipo Real. Cada posio do
vetor identificada por um ndice. Assim, a primeira posio, que contm o
valor 8, possui ndice 1, a segunda posio, que contm valor 10, possui indice
2 e assim sucessivamente at a ltima posio, que contm o valor 7,2, e
possui ndice 5. O ndice utilizado sempre que deseja-se ler um valor
armazenado ou atribuir um valor a determinada posio de um vetor. Os limites
dos ndices so determinados no momento da declarao do vetor. Assim,
possvel existir vetores cujos ndices variam, por exemplo, de 2 a 6, 0 a 4 ou 1
a 100. Para acessar, modificar ou fazer referncia a um elemento de um vetor
utiliza-se a seguinte notao: Nome_do_Vetor [ndice].
Exemplos
Armazenar a nota 8 na primeira posio do vetor Notas: Notas [1] := 8.
Armazenar o contedo da segunda posio do vetor Notas na varivel
MaiorNota: MaiorNota := Notas[2].
Escrever na tela o contedo do vetor Notas:
...
Para i:=1 at 5 faa
Escrever (Notas [i])
FimPara
...
Um vetor declarado da seguinte maneira:
NomeVetor: VETOR [LimiteInferior .. LimiteSuperior] DE TIPO
Exemplo: Um professor tem 80 alunos e deseja saber quais foram aprovados
e quais foram reprovados, gerando um relatrio.
Algoritmo Alunos
Var
Aprovados, Reprovados: vetor [1 .. 80] de String
NotaFinal: Real
Nome: String
i : Inteiro
Inicio
{Inicaliza os vetores}
Para i :=1 at 80 faa
Aprovados[i] :=
8 10 9,5 2 7,2
Desenvolvimento de Algoritmos 20
Reprovados[i] :=
FimPara
Para i := 1 at 80 faa
Ler (Nome)
Ler ( NotaFinal)
Se NotaFinal >= 6.0 ento
Aprovados [i] := Nome
Seno Reprovados[i] := Nome
FimPara
Para i := 1 at 80 faa
Se Aprovados[i] <> then
Escrever ( O aluno , Aprovados[i], foi aprovado.)
Seno Escrever ( O aluno , Reprovados[i], foi reprovado)
FimPara
FimAlgoritmo
8.1. EXERCCIOS
1) Considere que o vetor apresentado a seguir est armazenado na memria
do computador e se chama CRR.
O que ser impresso quando a seguinte sequncia de comandos for
executada?
Para i:= 2 at 4 faa
Aux := CRR[i]
CRR[i]:= CRR[8 i + 1]
CRR [8 i +1] := Aux
FimPara
Aux := CRR[1]
CRR[1] := CRR[8]
CRR[8] := Aux
2) Fazer um algoritmo que leia 35 notas, armazene em um vetor e imprima a
maior nota e a posio do vetor onde ela est armazenada
! U R T O A C E
Desenvolvimento de Algoritmos 21
9. MATRIZES
A matriz uma varivel composta bidimensional (um vetor com mais de
uma linha) capaz de armazenar mais de um valor ao mesmo tempo. uma
estrutura de dados homognea porque todos os dados armazenados dentro de
uma matriz devem ser do mesmo tipo.
Exemplo:
Matriz Notas Matriz 3 x 5 (Linha x Coluna)
A matriz Notas armazena apenas valores do tipo Real. Cada posio da
matriz possui um ndice que identifica a linha e a coluna onde o valor se
encontra. Assim, a primeira posio, que contm o valor 8, possui ndice [1,1],
a segunda posio que contm valor 10 possui indice [1,2] e assim
sucessivamente at a ltima posio que contm o valor 7,7 e possui ndice
[5,5]. Assim como acontece com os vetores, o ndice utilizado sempre que
deseja-se ler um valor armazenado ou atribuir um valor a determinada posio
de um vetor. Para acessar, modificar ou fazer referncia a um elemento de
uma matriz utiliza-se a seguinte notao: Nome_da_Matriz [linha, coluna].
Exemplos
Armazenar a nota 8 na primeira linha e primeira coluna da matriz Notas:
Notas [1,1] := 8.
Armazenar o contedo da terceira linha e quarta coluna da matriz Notas na
varivel MenorNota: MenorNota := Notas[3,4].
Escrever na tela o contedo da matriz Notas:
...
Para i:=1 at 3 faa
Para j=1 at 5 faa
Escrever (Notas [i,j])
FimPara
Ir para prxima linha
FimPara
...
Neste exemplo o contador i faz referncia s linhas da matriz e o contador j
faz referncia s colunas.
8 10 9,5 2 7,2
9 3,6 5 4 10
8 9,5 9,5 1 7,7
Coluna Coluna Coluna Coluna Coluna
1 2 3 4 5
Linha 1
Linha2
Linha3
Desenvolvimento de Algoritmos 22
Uma matriz declarada da seguinte maneira:
NomeMatriz: VETOR [LInferiorLinha .. LSuperiorLinha,
LInferiorColuna .. LSuperiorColuna] DE TIPO
Exemplo: Um professor tem 80 alunos, cada um com 4 notas e deseja saber
qual a mdia de cada um, gerando um relatrio.
Algoritmo Alunos
Var
Notas: Vetor [1 .. 80, 1..4] de Real
Media: Vetor [1..80] de Real
Nota: Real
I,j : Inteiro
Inicio
Para i:=1 at 80 faa
Media[i] := 0
FimPara
Para i := 1 at 80 faa
Para j := 1 at 4 faa
Escrever (Fornea a nota , j, do aluno , i)
Ler ( Nota)
Notas[i,j] := Nota
Media[i]:=Media[i]+Nota;
FimPara
FimPara
Para i := 1 at 80 faa
Escrever (Aluno , i)
Escrever (Mdia: ,Media[i])
Para j := 1 at 4 faa
Escrever (Nota , j,:, Notas[i,j])
FimPara
FimPara
FimAlgoritmo
9.1. EXERCCIOS
1) Fazer um algoritmo que some duas matrizes N x N (N ser fornecido pelo
usurio) e imprima o resultado.
2) Fazer um algoritmo que leia uma matriz 20 x 20 e divida cada elemento de
uma linha da matriz pelo elemento da diagonal principal desta linha. A
matriz modificada dever ser impressa.
3) Faa um algoritmo que leia uma matriz NxM (N e M devero ser fornecidos
pelo usurio) e imprima o maior e o menor nmero da matriz e a posio
onde se encontram.
4) Dada uma matriz MAT 4 x 5 fazer um algoritmo para somar os elementos
de cada linha gerando um vetor SOMALINHA com 4 posies. Em seguida
somar os elementos do vetor gerando uma varivel TOTAL impressa no
final. O algoritmo dever ser testado para o seguinte conjunto de dados:
Desenvolvimento de Algoritmos 23
MAT
8 -1 5 3 2
0 3 0 1 4
9 12 -11 5 6
2 1 2 1 0
5) Considere uma turma com 10 alunos, cada um com 4 notas. Estes dados
so armazenados em uma matriz 10 x 5 , em que a primeira coluna
armazena a matrcula do aluno e as 4 ltimas armazenam as suas notas.
Fazer um algoritmo que:
a) Leia estes dados, armazenando-os ;
b) Imprima a mdia de cada aluno;
c) Imprima a maior mdia e a matrcula do aluno que a possui
Desenvolvimento de Algoritmos 24
10. PROCEDIMENTOS E FUNES
As funes e procedimentos so blocos de intrues que so
executados quando necessrio e realizam aes especficas como mostrar
resultados ou calcular algo. As funes e procedimentos so tambm
chamadas de sub-rotinas.
As variveis declaradas dentro de um procedimento ou de uma funo
s existiram na memria do computador enquanto a sub-rotina estiver sendo
executada e, por isso, so chamadas variveis locais. As variveis declaradas
dentro do bloco principal so chamadas variveis globais e existiro na
memria do computador enquanto ele estiver sendo executado. Dizemos que
as variveis globais so visveis no bloco principal e nos blocos escritos dentro
dele e que as variveis locais so visveis apenas dentro do bloco onde foram
declaradas.
Exemplo: Fazer um algoritmo para calcular a rea de figuras geomtricas. O
usurio poder escolher entre calcular a rea de um retngulo ou quadrado.
Algoritmo Areas
Var {Variveis globais}
Opcao:Integer
Area:Real
Procedimento ExibeResultado
Inicio
Escrever (Area)
FimProcedimento
Funo AreaRet : Real
Var {variveis locais}
Base, Altura:Real
Inicio
Ler (Altura)
Ler (Base)
AreaRet := Base*ALtura
FimFuncao
Funo AreaQua : Real
Var {variveis locais}
Lado:Real
Inicio
Ler (Lado)
AreaQua := Lado*Lado
FimFuncao
Inicio {Esta parte do algoritmo executada logo aps a leitura das variveis
globais}
Escrever (1 Calcular area de um retngulo)
Escrever (2 Calcular area de um quadrado)
Desenvolvimento de Algoritmos 25
Escrever (Escolha a opo: )
Ler (Opcao)
Case (Opcao)
1: Area := AreaRet
2: Area:= AreaQua
ExibeResultado
FimAlgoritmo
Como se pode observar no exemplo anterior, um procedimento um
bloco de instrues que realiza uma ao sem retornar valores ao programa
principal (por exemplo, exibir resultados). Uma funo um bloco de instrues
que realiza uma ao e retorna um valor ao programa principal (por exemplo,
calcular a rea de uma figura geomtrica). Quando declaramos uma funo
devemos informar qual o seu tipo, ou seja, qual o tipo do valor que ser
retornado ao programa principal.
Podemos escrever procedimentos dentro de funes ou vice-versa,
procedimentos dentro de procedimentos e funes dentro de funes. Supondo
que escrevemos uma funo A dentro de uma funo B, as variveis
declaradas dentro da funo A sero visveis tambm na funo B. Mas as
variveis locais funo B s sero visveis dentro dela.
Exemplo: Fazer um algoritmo, utilizando funes e procedimentos, que leia
dois valores e calcule a seguinte equao: ) 2 V * 1 V ( 1 V R + =
Procedimento Calcula
Var
Valor1, Resultado:Real {variveis visveis no procedimento e na funo}
InicioProcedimento
Funo Continua: Real
Var
Valor2:Real {varivel visvel apenas na funo}
InicioFuno
Ler (Valor2)
Continua := Valor1*Valor2
FimFuno
Ler (Valor1) {Esta instruo executada imediatamente aps a
instruo IncioProcedimento}
Resultado := Valor1 + Continua;
FimProcedimento
No exemplo anterior a varivel Valor1 pode ser utilizada dentro da
funo Continua pois esta funo est declarada no mesmo bloco que a
varivel. Mas, Valor2 s pode ser utilizada dentro da funo pois, como local
a ela, no visvel para o bloco maior.
10.1. PASSAGEM DE PARMETROS
Existem alguns casos em que um mesmo procedimento ou funo
precisam ser executados realizando uma mesma instruo para diversas
variveis. Neste caso utiliza-se uma varivel genrica na instruo chamada
Desenvolvimento de Algoritmos 26
parmetro. No exemplo a seguir V um parmetro, ou seja, quando a funo
Quadrado for chamada o valor da varivel indicada entre parntesis ser
copiado para V e a instruo dentro da funo ser executada corretamente.
Os parmetros sempre so declarados entre parntesis logo depois do nome
do bloco (procedimento ou funo).
Exemplo: Fazer um algoritmo que calcule o somatrio: S=1+4+9+ ... +10000
Algoritmo CalculaResultado
Var
S,Valor:Real
Funo Quadrado (V: Real):Real
Incio
Quadrado := V*V
FimFuno
Inicio
S := 1
Para Valor := 2 at 100 Faa
S:=S+ Quadrado (Valor)
FimPara
FimAlgoritmo
Existem dois tipos principais de passagem de parmetros: passagem por
valor e passagem por referncia. O exemplo anterior apresentou a passagem
por valor em que o valor da varivel original copiado para o parmetro.
Qualquer alterao que seja feita no parmetro no alterar a varivel original.
Na grande maioria dos casos os parmetros utilizados em funes executam
passagens por valor.
Na passagem por referncia o endereo de memria da varivel
passado como parmetro e qualquer alterao feita no parmetro alterar a
varivel original. O que diferencia a passagem por valor da passagem por
parmetro no cdigo do bloco a forma de declarar o parmetro. Na passagem
por referncia deve-se escrever a palavra var antes do nome do parmetro. O
exemplo a seguir apresenta dois algoritmos semelhantes que ilustram a
diferena entre estes dois tipos de passagem de parmetros.
Exemplo: Fazer um algoritmo que dados os valores de X e Y calcule a
seguinte equao: Z = X
2
+Y
2
Maneira 1 - Passagem de parmetros por referncia
Algoritmo CalculaZ1
var
Z,X,Y:Real
Incio
Procedimento SomaQuadrados (var N1,N2:Real)
Inicio
N1 :=N1*N1
Desenvolvimento de Algoritmos 27
N2 :=N2*N2
Z := N1+N2
FimProcedimento
Ler (X)
Ler (Y)
SomaQuadrados (X,Y)
FimAlgoritmo
Maneira 2 Passagem de parmetros por valor
Algoritmo CalculaZ2
var
Z,X,Y:Real
Incio
Procedimento SomaQuadrados (N1,N2:Real)
Inicio
N1 :=N1*N1
N2 :=N2*N2
Z := N1+N2
FimProcedimento
Ler (X)
Ler (Y)
SomaQuadrados (X,Y)
FimAlgoritmo
O algoritmo CalculaZ1 utiliza a passagem de parmetros por referncia
pois antes da declarao do parmetro no procedimento SomaQuadrados
existe a palavra var e o algoritmo CalculaZ2 utiliza a passagem de parmetros
por valor. Suponha que o usurio fornea o valor 2 para X e 3 para Y. Quando
o algoritmo CalculaZ1 terminar de ser executado o valor de X ser 4, o valor de
Y ser 9 e o valor de Z ser 13. Quando o algoritmo CalculaZ2 terminar de ser
executado o valor de X ser 2, o valor de Y ser 4 e o valor de Z ser 13.
10.2. EXERCCIOS
1) Quando o algoritmo abaixo for executado o que ser exibido na tela?
Algoritmo ExercicioCap11
Var
R1,R2,X,Y,A:Real
Incio
Procedimento Somatorio1 (P1:Real)
Inicio
P1:=2*P1
R1:= P1+ 4
FimSomatorio1
Procedimento Somatorio2 ( var P2,P3:Real)
Inicio
P2 := 3*P2
Desenvolvimento de Algoritmos 28
P3 := 2*P3
R2 := P2 + P3
FimSomatorio2
X := 1
Y := 3
A := 5
Somatorio1 (A)
Somatorio2 (Y, X)
Escrever (A, X, Y, R1, R2)
2) Refazer os exerccios abaixo utilizando procedimentos e funes.
a) Captulo 3 Exerccio 3: Utilizar trs funes (CalcularDelta, CalcularX1
e CalcularX2) e um procedimento (ExibirResultados).
b) Captulo 3 Exerccio 6: Utilizar um procedimento para ler os dados de
entrada e um para exibir os resultados.
c) Captulo 5 Exerccio 1: Utilizar um procedimento para ler os dados de
entrada, um para exibir os resultados e um para verificar se os lados
fornecidos formam realmente um tringulo.
d) Captulo 5 Exerccio 2: Utilizar uma funo para retornar o maior
nmero e um procedimento para exibir os resultados.
e) Captulo 5 Exerccio 3: Utilizar um procedimento para exibir um menu
com as opes de clculos, trs funes (CalculaMedia, CalculaSoma,
CalculaMultiplicacao) e um procedimento para exibir os resultados.
f) Captulo 6 Exerccio 3: Utilizar um procedimento para exibir um menu
com informaes sobre o programa e as opes PA ou PG, duas
funes (CalculaPA, CalculaPG) e um procedimento para exibir os
resultados.
g) Captulo 6 Exerccio 4: Utilizar dois procedimentos (LerDadosEntrada
e ExibeREsultados).
h) Captulo 7 Exerccio 5: Utilizar 3 procedimentos (LerDadosEntrada,
CalcularImposto e ExibeResultados).
Desenvolvimento de Algoritmos 29
11. LITERATURA
FARRER, H. Programao estruturada de computadores: algoritmos
estruturados. Ed.Guanabara, 1985. 241 p.
LEISERSON, C.E.; STEIN,C.; RIVEST,R.L.; CORMEN, T.H. Algoritmos.
Ed.Campus, 2002. 1
a
edio, 936 p.
LOPES, A.; GARCIA, G. Introduo programao. Ed.Campus, 2001. 1
a
edio, 584 p.
MANZANO, J.A.; OLIVEIRA, J.F. Algoritmos: lgica para o
desenvolvimento de programao. So Paulo, Erica, 1998. 13
a
edio,
274p.
MANZANO, J.A.; OLIVEIRA, J.F. Estudo dirigido de algoritmos. So Paulo,
Erica, 1998. 7
a
edio, 240p.
NIKLAUS, W. Algorithms and data structures. London, Prentice-Hall
International, 1986. 288p.
PINTO, W.S. Introduo ao desenvolvimento de algoritmos e estruturas de
dados. So Paulo, 1990. 2
a
edio.
PREISS, B.R. Programao estruturada de computadores. Ed.Campus,
2002. 1
a
edio.
VENANCIO, C.F. Desenvolvimento de algoritmos. So Paulo, Erica, 1998.
131p.
ZIVIANI, N. Projeto de algoritmos com implementaes em PASCAL e C.
So Paulo, Pioneira, 1994. 267p.
ZIVIANI, N. Algoritmos lgica para desenvolvimento de programao de
computadores. So Paulo, Pioneira, 1994. 13
a
edio, 267p.