Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos Parte1 PDF
Algoritmos Parte1 PDF
Maio / 2004
-1-
-2-
Captulo 1
Introduo
1. Conceito de Algoritmo
A automao o processo em que uma tarefa deixa de ser desempenhada pelo
homem e passa a ser realizada por mquinas, sejam estes dispositivos mecnicos, eletrnicos
(como os computadores) ou de natureza mista.
Para que a automao de uma tarefa seja bem-sucedida necessrio que a mquina
que passar a realiz-la seja capaz de desempenhar cada uma das etapas constituintes do
processo a ser automatizado com eficincia, de modo a garantir a repetibilidade do mesmo.
Assim, necessrio que seja especificado com clareza e exatido o que deve ser realizado em
cada uma das fases do processo a ser automatizado, bem como a seqncia em que estas
fases devem ser realizadas.
especificao da seqncia ordenada de passos que deve ser seguida para a
realizao de uma tarefa, garantindo a sua repetibilidade, d-se o nome de algoritmo.
Ao contrrio do que se pode pensar, o conceito de algoritmo no foi criado para
satisfazer s necessidades da computao. Pelo contrrio, a programao de computadores
apenas um dos campos de aplicao dos algoritmos. Na verdade, h inmeros casos que
podem exemplificar o uso (involuntrio ou no) de algoritmos para a padronizao do exerccio
de tarefas rotineiras (vide exemplos da Seo 2.1). No entanto, daqui adiante a ateno desta
apostila estar voltada automao de tarefas utilizando computadores.
Para que um computador possa desempenhar uma tarefa necessrio que esta seja
detalhada passo-a-passo, numa forma compreensvel pela mquina, utilizando aquilo que se
chama de programa. Neste sentido, um programa de computador nada mais que um
algoritmo escrito numa forma compreensvel pelo computador (linguagem de programao).
-3-
Captulo 2
Formas de Representao de Algoritmos
Existem diversas formas de representao de algoritmos, mas no h um consenso
com relao melhor delas.
O critrio usado para classificar hierarquicamente estas formas est diretamente ligado
ao nvel de detalhe ou, inversamente, ao grau de abstrao oferecido.
Algumas formas de representao de algoritmos tratam os problemas apenas em nvel
lgico, abstraindo-se de detalhes de implementao muitas vezes relacionados com alguma
linguagem de programao especfica. Por outro lado existem formas de representao de
algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por
obscurecer as idias principais do algoritmo, dificultando seu entendimento.
Dentre as formas de representao de algoritmos mais conhecidas podemos citar:
Descrio Narrativa;
Fluxograma Convencional;
Receita de bolo:
Misture os ingredientes
Unte a forma com manteiga
Despeje a mistura na forma
Se houver coco ralado
ento despeje sobre a mistura
Leve a forma ao forno
Enquanto no corar
deixe a forma no forno
Retire do forno
Deixe esfriar
Tomando um banho:
-4-
Operao de atribuio
Deciso
-4-
N1, N2
MEDIA aaa
(N1 + N2) / 2
.V.
MEDIA >= 7
"Aprovado"
.F.
"Reprovado"
Fim
Figura 2.2
2.3 Pseudocdigo
Esta forma de representao de algoritmos rica em detalhes, como a definio dos
tipos das variveis usadas no algoritmo. Por assemelhar-se bastante forma em que os
programas so escritos, encontra muita aceitao.
Na verdade, esta representao suficientemente geral para permitir a traduo de um
algoritmo nela representado para uma linguagem de programao especfica seja praticamente
direta.
A forma geral da representao de um algoritmo na forma de pseudocdigo a
seguinte:
-5-
2.4 Sntese
H diversas formas de representao de algoritmos que diferem entre si pela
quantidade de detalhes de implementao que fornecem ou, inversamente, pelo grau de
abstrao que possibilitam com relao implementao do algoritmo em termos de uma
linguagem de programao especfica.
Dentre as principais formas de representao de algoritmos destacam-se: a descrio
narrativa, o fluxograma convencional e o pseudocdigo (ou linguagem estruturada).
-6-
Captulo 3
Tipos de Dados
Todo o trabalho realizado por um computador baseado na manipulao das
informaes contidas em sua memria. Grosso modo, estas informaes podem ser
classificadas em dois tipos:
A maior parte das pessoas no ligadas rea de informtica ignora o potencial dos
computadores e imagina que eles so capazes de tratar apenas com dados numricos. Na
realidade, a capacidade dos mesmos se estende a outros tipos de dados.
O objetivo deste captulo justamente o de classificar os dados de acordo com o tipo
de informao contida neles. A classificao apresentada no se aplica a nenhuma linguagem
de programao especfica; pelo contrrio, ela sintetiza os padres utilizados na maioria das
linguagens.
-7-
-8-
3.4 Sntese
Os dados numricos dividem-se em duas classes:
reais, que podem possuir parte fracionria e podem ser positivos ou negativos.
-9-
Figura 3.2
) 0.21
)1
)V
) 0.
) 1%
) Jos
) 0,35
) .F.
) -0.001
(
(
(
(
(
(
(
(
) .T.
) +3257
) a
) +3257
) +3257.
) -0.0
) .F.
)3
(
(
(
(
(
(
(
) .V.
) .V
) abc
)F
)C
) Maria
) +36
- 10 -
Captulo 4
Variveis
A todo momento durante a execuo de qualquer tipo de programa os computadores
esto manipulando informaes representadas pelos diferentes tipos de dados descritos no
captulo anterior. Para que no se "esquea" das informaes, o computador precisa guardlas em sua memria.
Este captulo destinado ao estudo da forma como os computadores armazenam e
acessam informaes contidas em sua memria.
- 11 -
Endereo
0
1
2
3
4
5
Informao
b (98)
a (97)
n (110)
a (97)
n (110)
a (97)
- 12 -
Tipo de
dado
Informao
Figura 4.4
Toda varivel possui um nome que tem a funo de diferenci-la das demais. Cada
linguagem de programao estabelece suas prprias regras de formao de nomes de
variveis. Adotaremos nesta apostila as seguintes regras:
Exemplos:
- 13 -
SALARIO
1ANO
ANO1
A CASA
SAL/HORA
SAL_HORA
_DESCONTO
=
=
=
=
=
=
=
correto
errado (no comeou com uma letra)
correto
errado (contm o caractere espao em branco)
errado (contm o caractere "/)
correto
errado (no comeou com uma letra)
a palavra-chave VAR dever estar presente sempre e ser utilizada uma nica vez na
definio de um conjunto de uma ou mais variveis;
numa mesma linha podero ser definidas uma ou mais variveis do mesmo tipo. Para
tal, deve-se separar os nomes das mesmas por vrgulas;
NOME
IDADE
SALARIO
TEM_FILHOS
:
:
:
:
literal[10]
inteiro
real
lgico
- 14 -
) valor
) _b248
) nota*do*aluno
) a1b2c3
)3x4
) Maria
(
(
(
(
(
(
) km/h
) xyz
) nome empresa
) sala_215
) nota
) ah!
2. Supondo que as variveis NB, NA, NMAT e SX sejam utilizadas para armazenar a nota
do aluno, o nome do aluno, o nmero da matrcula e o sexo, declare-as corretamente,
associando o tipo adequado ao dado que ser armazenado.
- 15 -
Captulo 5
Expresses
5.1 Conceito
O conceito de expresso em termos computacionais est intimamente ligado ao
conceito de expresso (ou frmula) matemtica, onde um conjunto de variveis e constantes
numricas relacionam-se por meio de operadores aritmticos compondo uma frmula que, uma
vez avaliada, resulta num valor.
Figura 5.1
Por exemplo, a frmula de clculo da rea do tringulo da Figura 5.1 dada por:
AREA = 0.5 x B x H
Esta frmula utiliza trs variveis: B e H, que contm as dimenses do tringulo, e
AREA, onde guardado o valor calculado (resultado da avaliao da expresso). H, tambm,
uma constante (0.5) e o operador de multiplicao (x), que aparece duas vezes na expresso.
O conceito de expresso aplicado computao assume uma conotao mais ampla:
uma expresso uma combinao de variveis, constantes e operadores, e que, uma vez
avaliada, resulta num valor.
5.2 Operadores
Operadores so elementos funcionais que atuam sobre operandos e produzem um
determinado resultado. Por exemplo, a expresso 3 + 2 relaciona dois operandos (os nmeros
3 e 2) por meio do operador (+) que representa a operao de adio.
De acordo com o nmero de operandos sobre os quais os operadores atuam, os
ltimos podem ser classificados em:
binrios, quando atuam sobre dois operandos. Ex.: os operadores das operaes
aritmticas bsicas (soma, subtrao, multiplicao e diviso);
- 24 -
unrios, quando atuam sobre um nico operando. Ex.: o sinal de (-) na frente de
um nmero, cuja funo inverter seu sinal.
Operador
+
*
/
**
+
-
Tipo
Binrio
Binrio
Binrio
Binrio
Binrio
Unrio
Unrio
Operao
Adio
Subtrao
Multiplicao
Diviso
Exponenciao
Manuteno de sinal
Inverso de sinal
Prioridade
4
4
3
3
2
1
1
A prioridade entre operadores define a ordem em que os mesmos devem ser avaliados
dentro de uma mesma expresso. Este assunto ser tratado com maior profundidade numa
seo posterior.
O caractere (*) adotado na maioria das linguagens de programao para representar
a operao de multiplicao, ao invs do caractere (x), devido possibilidade da ocorrncia do
mesmo no nome de variveis. Pela mesma razo, o smbolo (**) adotado para representar a
operao de exponenciao. Algumas linguagens de programao adotam o smbolo (^ circunflexo) para esta finalidade, mas isto pouco freqente.
As variveis usadas em expresses aritmticas podem somente ser do tipo inteiro ou
real. Se todas as variveis que aparecem numa expresso so do tipo inteiro, ento o valor
resultante da expresso tambm do tipo inteiro. Se ao menos uma das variveis da
expresso aritmtica for do tipo real, ento o valor resultante da avaliao da expresso
necessariamente do tipo real.
Nos exemplos seguintes, assumiremos que:
- 25 -
Exemplos:
A+B*C
A+B+Y
A/B
X/Y
=
=
=
=
Operador
.OU.
.E.
.NO.
Tipo
Binrio
Binrio
Unrio
Operao
Disjuno
Conjuno
Negao
Prioridade
3
2
1
Para exemplificar o uso de operadores lgicos, a Tabela 5.3 apresenta duas variveis
lgicas A e B. Uma vez que cada varivel lgica possui somente dois valores possveis, ento
h exatamente quatro combinaes para estes valores, razo pela qual a tabela tem quatro
linhas. As diversas colunas contm os resultados das operaes lgicas sobre as combinaes
possveis dos valores das variveis A e B.
Tabela 5.3
A
.F.
.F.
.V.
.V.
B
.F.
.V.
.F.
.V.
.NO. A
.V.
.V.
.F.
.F.
.NO. B
.V.
.F.
.V.
.F.
A .OU. B
.F.
.V.
.V.
.V.
A .E. B
.F.
.F.
.F.
.V.
O operador lgico .NO. sempre inverte o valor de seu operando. Ex.: .NO. .V. =
.F. e .NO. .F. = .V.;
Para que a operao lgica .OU. tenha resultado verdadeiro basta que um de seus
operandos seja verdadeiro; Para melhor visualizar este efeito, podemos imaginar
que as variveis lgicas A e B so como dois interruptores ligados em paralelo
num circuito de acionamento de uma lmpada (Figura 5.2).
- 26 -
Nas expresses lgicas onde aparecem apenas os operadores lgicos da Tabela 5.2
somente variveis do tipo lgico podem ser usadas. Isto parece bvio, uma vez que os
operadores lgicos somente atuam sobre valores (constantes ou variveis) lgicos.
H, ainda, outro tipo de operador que pode aparecer em operaes lgicas: os
operadores relacionais, mostrados na Tabela 5.4.
Tabela 5.4
Operadores relacionais.
Operador
=
<>
<
<=
>
>=
Operao
Igual
Diferente
Menor
Menor ou igual
Maior
Maior ou igual
5.4 Sntese
Uma expresso uma combinao de variveis, constantes e operadores, que resulta
num valor quando avaliada.
Operadores so elementos funcionais que atuam sobre operandos. Segundo o
nmero de operandos sobre os quais atua, um operador pode ser classificado em unrio ou
binrio. Segundo os tipos de dados de seus operandos e do valor resultante de sua avaliao,
os operadores podem ser classificados em aritmticos, lgicos ou literais.
Um tipo especial de operador o relacional, que usado na comparao de
operandos de um mesmo tipo de dado e cujo resultado da avaliao sempre um valor lgico.
As expresses so classificadas de acordo com o valor resultante de sua avaliao em:
- 27 -
H trs regras bsicas que definem a seqncia correta de avaliao passo a passo de
expresses:
1. Operadores de maior prioridade devem ser avaliados primeiro. Em caso de
empate, a avaliao se faz da esquerda para a direita.
2. O uso de parnteses em subexpresses fora a avaliao das mesmas com maior
prioridade.
3. Os diversos tipos d operadores devem ser avaliados na seguinte seqncia dentro
de uma expresso complexa: primeiro os aritmticos e literais; a seguir, os
relacionais e, por ltimo, os lgicos.
A, B, C
X, Y, Z
NOME, RUA
L1, L2
:
:
:
:
inteiro
real
literal[20]
lgico
)A+B+C
)A+B+Z
) NOME + RUA
)AB
)AY
) NOME RUA
(
(
(
(
(
(
) L1 .OU. L2
) RUA <> NOME
)A+B/C
)A+X/Z
)A+Z/A
) A B = L1
(
(
(
(
(
(
) (A = B)
)X+Y/Z
)X=Z/A
) L1 ** L2
) A + B / L2
) X < L1 / RUA
Z = -1.0
L1 = .V.
NOME = PEDRO
RUA = PEDRINHO
L2 = .F.
- 28 -
-X ** B _____________________________________________________________
- (X ** B) ___________________________________________________________
(-X) ** B ____________________________________________________________
NOME + RUA _______________________________________________________
NOME = RUA _______________________________________________________
L1 .OU. L2 _________________________________________________________
(L1 .E.(.NO. L2)) ____________________________________________________
(L2 .E. (.NO. L1)) ___________________________________________________
(L1 .E. (.NO. L2)) .OU. (L2 .E. (.NO. L1)) ________________________________
_____________________________________________________________________
X Y .E. C = B ________________________________________________________
_____________________________________________________________________
(C - 3 * A) (X + 2 * Z) _________________________________________________
_____________________________________________________________________
- 26 -
Captulo 6
Instrues Primitivas
Como o prprio nome diz, instrues primitivas so os comandos bsicos que
efetuam tarefas essenciais para a operao dos computadores, como entrada e sada de
dados (comunicao com o usurio e com os dispositivos perifricos), e movimentao dos
mesmos na memria. Estes tipos de instruo esto presentes na absoluta maioria das
linguagens de programao. De fato, um programa que no utiliza nenhuma instruo primitiva
- como as que sero definidas neste captulo - incapaz de se comunicar com o mundo
exterior e, portanto, no tem utilidade alguma.
Antes de passar descrio das instrues primitivas, necessria a definio de
alguns termos que sero utilizados mais frente:
Sintaxe a forma como os comandos devem ser escritos, a fim de que possam ser
entendidos pelo tradutor de programas. A violao das regras sintticas
considerada um erro sujeito pena do no-reconhecimento do comando por parte
do tradutor;
Daqui por diante, todos os comandos novos sero apresentados por meio de sua
sintaxe e sua semntica, isto , a forma como devem ser escritos e a(s) ao(es) que
executam.
- 27 -
<varivel> aa
<expresso>
Figura 6.1
Pseudocdigo
Algoritmo EXEMPLO_6.1
Var PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Incio
PRECO_UNIT 5.0
QUANT 10
PRECO_TOT PRECO_UNIT * QUANT
Fim.
QUANT aaa 10
PRECO_TOT aaa
PRECO_UNIT *
QUANT
Fim
Figura 6.2
- 28 -
Tcnicas de Programao
<lista_de_
variveis>
ou
<literal>
Figura 6.3
- 29 -
Tcnicas de Programao
Fluxograma
Pseudocdigo
Algoritmo EXEMPLO_6.4
Var PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Incio
PRECO_UNIT 5.0
QUANT 10
PRECO_TOT PRECO_UNIT * QUANT
Escreva PRECO_TOT
Fim.
Incio
QUANT aaa 10
PRECO_TOT aaa
PRECO_UNIT *
QUANT
PRECO_TOT
Fim
Figura 6.4
<lista_de_
variveis>
-1-
Figura 6.5
PRECO_UNIT,
QUANT
PRECO_TOT
PRECO_TOT aaa
PRECO_UNIT *
QUANT
Fim
O algoritmo da Figura 6.6 ainda precisa sofrer algumas modificaes para ficar perfeito.
Em sua forma atual, ao incio de sua execuo, ele procura ler os valores para as variveis
PRECO_UNIT e QUANT.Um usurio diferente daquele que criou o programa, a no ser que
esteja bem treinado no uso do mesmo, poder encontrar dificuldades na interao com o
programa. Ele pode confundir a ordem em que os dados devem ser fornecidos ou
simplesmente esquecer o que o programa deseja que ele digite. Ao trmino da execuo o
programa escreve como resultado um nmero que pode no possuir nenhum significado ao
usurio se este no souber a finalidade para a qual o algoritmo foi concebido.
Uma preocupao constante de um bom programador deve ser a de conceber um
programa "amigo do usurio". Esta preocupao traduzida no planejamento de urna
interface com o usurio (meio pelo qual um programa e o usurio "conversam") bastante
amigvel. Em termos prticos, isto se resume aplicao de duas regras bsicas:
- 30 -
toda vez que um programa estiver esperando que o usurio fornea a ele um
determinado dado (operao de leitura), ele deve antes enviar uma mensagem
dizendo ao usurio o que ele deve digitar, por meio de uma instruo de sada de
dados;
Estas medidas tornam o dilogo entre o usurio e o programador muito mais fcil.
A verso final do algoritmo estudado mostrada na Figura 6.7.
Fluxograma
Incio
"Digite o preo
unitrio:"
QUANT
PRECO_UNIT
PRECO_TOT aaa
PRECO_UNIT *
QUANT
"Digite a quantidade:"
Fim
Pseudocdigo
Algoritmo EXEMPLO_6.7
Var PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Incio
Escreva Digite o preo unitrio:
Leia PRECO_UNIT
Escreva Digite a quantidade:
Leia QUANT
PRECO_TOT PRECO_UNIT * QUANT
Escreva Preo total: , PRECO_TOT
Fim.
Figura 6.7 Exemplo de aplicao das instrues primitivas de atribuio,
- 31 -
6.4 Sntese
A instruo primitiva de atribuio avalia uma expresso e armazena o valor
resultante numa varivel. O valor resultante da expresso e a varivel devem ter tipos
compatveis.
A instruo primitiva de sada de dados admite como argumentos uma lista de
variveis, um literal, ou uma mistura de ambos. No primeiro caso, o valor de cada uma das
variveis buscado na memria e colocado no dispositivo de sada. No caso de literais, estes
so copiados diretamente no dispositivo de sada.
A instruo primitiva de entrada de dados busca, no dispositivo de entrada, dados
que so guardados nas posies de memria correspondentes s variveis da lista que lhe so
passadas como argumento.
- 32 -
Incio
N2
"Digite o primeiro
nmero: "
N1
"A mdia ", M
"Digite o segundo
nmero: "
Fim
A
- 33 -
"Algoritmo para
calcular
y = 3x + 2"
Y aaa 3 * X + 2
"X:"
"Y = ", Y
Fim
- 34 -
DIST
"Volume de
combustvel
gasto (L):"
"Distncia total
percorrida (Km):"
VOL
Fim
- 35 -
- 36 -