Você está na página 1de 31

Universidade Federal de Viosa

Centro de Cincias Agrrias


Departamento de Engenharia Agrcola

DESENVOLVIMENTO DE ALGORITMOS

Elaborada por
Daniela de Carvalho Lopes
Evandro de Castro Melo

Viosa, abril de 2002

NDICE
1. INTRODUO ............................................................................................... 1
2. DESENVOLVIMENTO DE ALGORITMOS..................................................... 3
2.1. PORTUGOL ............................................................................................. 3
2.2. FLUXOGRAMA........................................................................................ 4
2.4. EXERCCIOS............................................................................................ 4
3. CONCEITOS IMPORTANTES ....................................................................... 5
3.1. COMPILADOR ......................................................................................... 5
3.2. SINTAXE E SEMNTICA DE UM PROGRAMA...................................... 5
3.3. OPERADORES E EXPRESSES ........................................................... 6
3.4. COMENTRIOS ....................................................................................... 7
3.5. EXERCCIOS............................................................................................ 8
4. VARIVEIS E CONSTANTES ....................................................................... 9
4.1. VARIVEIS .............................................................................................. 9
4.2. CONSTANTES ....................................................................................... 10
4.3. REGRAS PARA NOMES DE VARIVEIS E CONSTANTES ................ 10
4.4. EXERCCIOS.......................................................................................... 11
5. ESTRUTURA CONDICIONAL (ANLISE DE CONDIES)...................... 12
5.1. COMANDO SE ....................................................................................... 12
5.2. COMANDO CASO ................................................................................. 13
5.3. EXERCCIOS.......................................................................................... 13
6. ESTRUTURA DE REPETIO (ITERAES)............................................ 14
6.1. COMANDO ENQUANTO ....................................................................... 14
6.2. COMANDO PARA.................................................................................. 15
6.3. COMANDO REPITA............................................................................... 15
6.4. EXERCCIOS.......................................................................................... 16
7. EXERCCIOS DE REVISO......................................................................... 17
8. VETORES..................................................................................................... 19
8.1. EXERCCIOS.......................................................................................... 20
9. MATRIZES ................................................................................................... 21
9.1. EXERCCIOS.......................................................................................... 22
10. PROCEDIMENTOS E FUNES .............................................................. 24
10.1. PASSAGEM DE PARMETROS ......................................................... 25
10.2. EXERCCIOS........................................................................................ 27
11. LITERATURA............................................................................................. 29

Desenvolvimento de Algoritmos

1. INTRODUO
A utilizao do computador na soluo de problemas relacionados s
mais diversas reas est facilitando e agilizando o trabalho de muitas pessoas.
Atualmente o conhecimento de tcnicas de programao um requisito
importante, principalmente na formao de profissionais relacionados s
cincias exatas, como a engenharia por exemplo.
Informalmente,
um
ALGORITMO

qualquer
procedimento
computacional bem definido que tenha algum valor ou conjunto de valores
como ENTRADA e produza algum valor ou conjunto de valores como SADA.
Portanto, um algoritmo um conjunto de passos computacionais que
transformam uma entrada de dados (problema) em sada de dados (soluo).
A implementao da soluo de um problema em um computador
consiste basicamente em dois passos:
Montagem de uma seqncia de operaes que, quando
executadas, produzem um resultado, que a soluo do problema
(ALGORITMO);
Transformao da seqncia acima em uma linguagem executvel
por um computador (LINGUAGEM DE PROGRAMAO).
O algoritmo um conjunto de passos para executar uma tarefa.
(Receita). A formulao de um algoritmo pode ser descrita como um texto
contendo instrues que sero executadas em uma ordem determinada.
Na computao um algoritmo uma sequncia precisa que pode ser
utilizada por um computador para a soluo de um problema. O algoritmo
composto por um conjunto finito de passos, cada um requerendo uma ou mais
instrues. Cada uma destas instrues, tambm chamadas de operaes,
deve ser perfeitamente definida e clara.
Exemplo: Como somar dois nmeros?
Algoritmo SomarDoisNumeros
Incio
Ler (Num1)
Ler (Num2)
Soma = Num1 + Num2
Escrever (Soma)
O ato de criar um algoritmo uma arte que nunca poder ser totalmente
automatizada. Cada pessoa cria uma sequncia diferente para solucionar um
mesmo problema.
Para armazenar um algoritmo na memria do computador e para que o
computador possa entender e comandar as operaes a serem executadas,
necessrio que o algoritmo seja transcrito para uma linguagem de
programao (Delphi, Turbo Pascal, C, C++, Matlab, LabView, Visual Basic,
etc). Seja qual for a linguagem de programao, a soluo correta do problema
apresentada pelo computador depender da qualidade do algoritmo criado para
descrev-lo. Um algoritmo dito correto se, para cada instncia de entrada, ele
fornece a sada correta. Dizemos que um algoritmo correto resolve o problema
computacional dado.

Desenvolvimento de Algoritmos

Outro aspecto importante a validao do algoritmo gerado. A validao


um processo no qual se verifica se o algoritmo fornece os resultados corretos
considerando todas as entradas de dados possveis. Esta verificao
realizada independentemente do cdigo de programao utilizado na
implementao. Depois de implementado o programa tambm dever ser
validado verificando-se se est executando corretamente o que foi determinado
no algoritmo.
O processo completo que resulta em um programa computacional capaz
de solucionar determinado tipo de problema pode ser dividido em cinco reas
descritas a seguir:
Estabelecimento do problema: estabelecer os objetivos do trabalho.
O problema deve ser bem definido para que o trabalho de elaborao do
algoritmo seja facilitado.
Desenvolvimento de um modelo: influencia diretamente na soluo
do problema. Modelos mais complicados gastam mais tempo para serem
resolvidos e esto mais sujeitos a erros.
Criao do algoritmo: elaborar o algoritmo propriamente dito.
Avaliao do algoritmo: testar o algoritmo. Avaliar as possveis
entradas e verificar se as solues geradas so corretas. Avaliar, tambm, os
casos de exceo.
Implementao: traduzir o algoritmo para uma linguagem de
programao especfica.

Desenvolvimento de Algoritmos

2. DESENVOLVIMENTO DE ALGORITMOS
Recomenda-se que os algoritmos sejam estruturados partindo-se de
uma descrio geral e que, gradativamente, sejam acrescentadas
particularidades e detalhes soluo do problema. Esta tcnica chamada
refinamentos sucessivos, construo hierrquica ou desenvolvimento topdown (de cima para baixo).
Exemplo: Efetuar a diviso de dois nmeros.

Primeira Etapa: Descrio geral


Algoritmo Diviso
Fornecer o denominador
Fornecer o divisor
Diviso = Denominador / Divisor

Segunda Etapa: Controle de erro


Algoritmo Diviso
Fornecer o denominador
Fornecer o divisor
Se o divisor for diferente de zero : Diviso = Denominador / Divisor
Se o divisor for igual a zero: Diviso no existe

O refinamento sucessivo dos algoritmos permite abordar o problema de


maneira mais objetiva diminuindo-se a probabilidade de erros e facilitando a
sua reparao quando ocorrerem.
Existem diversas tcnicas que ajudam no desenvolvimento de algoritmos
facilitando seu entendimento para as pessoas.As mais utilizadas so o portugol
e o fluxograma.
2.1. PORTUGOL
O portugol uma forma de escrita estruturada, cuja finalidade
descrever, em uma sequncia lgica, os passos para a resoluo de um
problema. Nesta tcnica os algoritmos so escritos em uma linguagem simples
que no possui muitas regras para sua escrita.
Os algoritmos escritos em portugol devem ser escritos de maneira que
todas as linhas contenham uma nica instruo
Exemplo: Ler dois nmeros e determinar qual dele o maior.
Algoritmo Maior
Inicio
Escrever (Digite o primeiro nmero)
Ler (num1)
Escrever (Digite o segundo nmero)
Ler (num2)
Se num1>num2 ento
Escrever (O maior nmero , num1)
Se num2>num1 ento
Escrever (O maior nmero , num2)

Desenvolvimento de Algoritmos

Se num1=num2 ento
Escrever (Os nmeros so iguais)
FimMaior
2.2. FLUXOGRAMA
O fluxograma utiliza smbolos que indicam o tipo de operao que
dever ser realizada.
Exemplo: Ler dois nmeros e determinar qual dele o maior.
Algoritmo Maior
Incio

Ler num1

Ler num2

Num1>Num2

No

Num2>Num1

Sim

Sim

Maior = Num1

Maior = Num2

No

Nmeros
iguais

Fim

2.4. EXERCCIOS
Escreva algoritmos abaixo utilizando o portugol e o fluxograma:
Somar dois nmeros
Calcular a mdia entre trs nmeros
Ler um nmero e verificar se maior que 10

Desenvolvimento de Algoritmos

3. CONCEITOS IMPORTANTES
3.1. COMPILADOR
Para que os computadores entendam as instrues que esto escritas
em uma linguagem de programao estas instrues precisam ser traduzidas
em um cdigo especial chamado linguagem de mquina. Esta linguagem
apresenta vrios incovenientes pois todas as operaes so escritas como
conjuntos de uns e zeros para que possam ativar diretamente os dispositivos
eletrnicos do computador.
Mas, a pessoa que estiver programando no precisa se preocupar com a
traduo do cdigo escrito em uma linguagem de programao para a
linguagem de mquina. Os ambientes em que escrevemos nossos cdigos
(Pascal, Delphi, C e outros) possuem um programa que executado quando
pedimos para executar o cdigo que escrevemos e capaz de transform-lo
em um cdigo escrito em linguagem de mquina. Este programa chamado
COMPILADOR.
3.2. SINTAXE E SEMNTICA DE UM PROGRAMA
Estes dois termos so muito utilizados pelos programadores quando o
programa ou o algoritmo est sendo validado.
A SINTAXE de um programa est relacionada forma como ele foi
escrito. Ou seja, se as palavras e comandos existentes no cdigo do programa
esto escritos corretamente. Se existir erro de sintaxe significa que algum
comando ou instruo existente no programa foram escritos de maneira
incorreta e o programa no poder ser executado.
A SEMNTICA est relacionada ao contedo da instruo, ou seja, o
que a instruo significa. Quando existem erros de semntica significa que
alguma instruo no est fazendo o que queramos que fizesse e os
resultados apresentados pelo programa no so corretos.

Desenvolvimento de Algoritmos

3.3. OPERADORES E EXPRESSES


As expresses so instrues formadas por operadores e cujo resultado
depender de valores atribudos a estes operadores.
Exemplo: A equao x 2 + x um exemplo de expresso aritmtica. Como
no existe o smbolo relacionado raiz no teclado de um computador (e isto
ocorre com outros smbolos) esta expresso dever ser escrita em um
algoritmo da seguinte maneira: x^2+x^(1/2). Os operadores que formam esta
expresso so ^, +, ( ) e /.
x
dever ser escrita em um algoritmo da
A equao x 3 y3 + 4 xy
2
seguinte forma: x^3*y^3+4*x*y-x/2. Os operadores que formam esta
expresso so ^, *, -, / e +.
Os operadores podem ser aritmticos, lgicos ou relacionais. Os
operadores aritmticos geralmente fazem parte de expresses que envolvem
clculos. Os operadores lgicos fazem parte de expresses que envolvem
resultados caracterizados como verdadeiro ou falso. Finalmente, os
operadores relacionais indicam uma comparao a ser realizada entre os
termos de uma relao. A tabela mostrada a seguir apresenta os principais
operadores, seus tipos e smbolos.
OPERAO
Adio
Subtrao
Multiplicao
Diviso
Potncia
Conjuno
Disjuno
Negao
Maior
Maior ou igual
Menor
Menor ou igual
Igual
Diferente
Prioridade

TIPO
aritmtico
aritmtico
Aritmtico
Aritmtico
Aritmtico
Lgico
Lgico
Lgico
Relacional
Relacional
Relacional
Relacional
Relacional
Relacional
Relacional

SMBOLO
+
*
/
^
AND (E)
OR (OU)
NOT (NO)
>
>=
<
<=
=
<>
( )

Exemplo: A expresso (2+3 >2) AND (3+1<2) analisada da seguinte


maneira: o que est entre parntesis executado e a expresso simplificada
para (5>2) AND (4<2). Como 5 maior que 2, a primeira comparao resulta
em verdadeiro e, como 4 maior que 2, a segunda comparao resulta em
falso. Um valor verdadeiro e um valor falso conectados por AND resulta em
falso, que o resultado final da expresso.
Os operadores lgicos se relacionam da seguinte forma:
Verdadeiro AND Verdadeiro = Verdadeiro

Desenvolvimento de Algoritmos

Verdadeiro AND Falso = Falso


Falso AND Verdadeiro = Falso
Falso AND Falso = Falso
Verdadeiro OR Verdadeiro = Verdadeiro
Verdadeiro OR Falso = Verdadeiro
Falso OR Verdadeiro = Verdadeiro
Falso OR Falso = Falso
NOT Verdadeiro = Falso
NOT Falso = Verdadeiro

Quando uma expresso analisada o computador executa as


operaes de acordo com uma tabela de prioridades em que operadores com
prioridades mais altas so analisados primeiro. A ordem de prioridade dos
operadores a seguinte:
Parntesis : ( )
Potncia : ^
Multiplicao e diviso : * e /
Adio e subtrao : + e
Relacionais
NOT (NO)
AND (E)
OR (OU)
As linguagens de programao possuem algumas funes j
implementadas e que podem ser utilizadas nas expresses para facilitar o
trabalho do desenvolvedor do programa. Exemplos de algumas destas funes
so: truncar, arredondar, raiz quadrada, logaritmo e outras.
3.4. COMENTRIOS
Os comentrios so utilizados para facilitar o entendimento do algoritmo.
Pode ser um texto ou simplesmente uma frase que aparece delimitado por
chaves ({ }) ou precedido por duas barras (//).
Os comentrios explicam o que acontecer quando determinada
instruo for executada e servem, tambm, para ajudar quem escreveu o
algoritmo, caso haja a necessidade de analis-lo algum tempo depois de sua
criao. So estruturas que existem na maioria das linguagens de
programao.
Exemplo: Subtrair dois nmeros
Algoritmo Subtrao
Incio
{Ler dois nmeros}
Ler (num1)
Ler (num2)
{Subtrair os dois nmeros}
Resultado = num1-num2
Fim {fim do algoritmo subtrao}

Desenvolvimento de Algoritmos

3.5. EXERCCIOS
1) Escreva as expresses abaixo no formato utilizado em algoritmos:
a)

2x2 y
3+x

b)

1 3x
+
4y 2

c)

x2 + 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 (ax2+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,
(F 32) 5
sabendo-se que: C =
9

Desenvolvimento de Algoritmos

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 alfanumricos (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.

11

Desenvolvimento de Algoritmos

Nomes INVLIDOS para


variveis/constantes
2NOTA
MEDIA SIMPLES
%
VARIAO

Nomes VLIDOS para


variveis/constantes
NOTA
MEDIASIMPLES
PORCENTO
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.
1 1 1
1
S = 1+ + + + L +
2 3 4
N
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 2 3 L (N 1) N e 0! = 1

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

19

Desenvolvimento de Algoritmos

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
8

10

9,5

7,2

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] :=

20

Desenvolvimento de Algoritmos

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

21

Desenvolvimento de Algoritmos

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)
Coluna
1

Coluna
2

Coluna
3

Coluna
4

Coluna
5

10

9,5

7,2

Linha 1

3,6

10

Linha2

9,5

9,5

7,7

Linha3

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.

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:

23

Desenvolvimento de Algoritmos

MAT
8
0
9
2

-1
3
12
1

5
0
-11
2

3
1
5
1

2
4
6
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: R = V1 + ( V1 * V 2)
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 = X2+Y2

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. 1a edio, 936 p.
LOPES, A.; GARCIA, G. Introduo programao. Ed.Campus, 2001. 1a
edio, 584 p.
MANZANO,
J.A.;
OLIVEIRA,
J.F.
Algoritmos: lgica para o
desenvolvimento de programao. So Paulo, Erica, 1998. 13a edio,
274p.
MANZANO, J.A.; OLIVEIRA, J.F. Estudo dirigido de algoritmos. So Paulo,
Erica, 1998. 7a 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. 2a edio.
PREISS, B.R. Programao estruturada de computadores. Ed.Campus,
2002. 1a 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. 13a edio, 267p.

Você também pode gostar