Você está na página 1de 88

ngela Lhmann

Lgica de
Programao
e Algoritmos
Prof. Cludio Lus V. Oliveira
prof.claudioluis@fatec.sp.gov.br

Sumrio
Introduo.................................................................................................. 2
1.1. Lgica de Programao ....................................................................... 3
1.2. Algoritmo ............................................................................................ 6
1.3. Representao e Armazenamento de Dados ....................................... 9
1.4. Formas de Representao de Algoritmos .......................................... 12
1.5. Operadores ....................................................................................... 18
1.6. Portugol Studio.................................................................................. 25
1.7. Estrutura Sequencial ......................................................................... 28
1.8. Estruturas de Seleo ........................................................................ 31
1.9. Estruturas de Repetio .................................................................... 47
1.10. Vetores e Matrizes .......................................................................... 58
1.11. Funes ........................................................................................... 68
1.12. Estruturas, Registros e Campos ....................................................... 77
1.13. Linguagens de Programao ............................................................ 82
Referncias .............................................................................................. 87

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

Lgica de Programao e
Algoritmos
Introduo
Adotando uma abordagem bastante simplificada, podemos definir
que um computador consiste em um equipamento que permite o
processamento de dados. Qualquer programa desenvolvido,
independente da sua complexidade, sempre ir conter um conjunto de
dados de entrada, realizar algum tipo de processamento (transformao)
desses dados, produzindo um conjunto de dados de sada, conforme
podemos observar na Figura A.

Figura A: Processamento de dados


Dentro desta viso, quando pensamos na construo de programas,
basicamente devemos considerar os seguintes passos para a resoluo
computacional de problemas:
1. Entendimento do problema;
2. Criao de uma sequncia de operaes (algoritmo) que
permitem a soluo do problema;
3. Codificao (implementao) e execuo desta sequncia;
4. Verificao (teste) da adequao da soluo.
Na Figura B podemos observar que o desenvolvimento de um
programa passa por duas fases distintas. Na primeira, busca-se a soluo
do problema a partir de um conjunto ordenado de passos, ao final desta
fase temos a soluo algortmica.
A segunda fase consiste em realizar o desenvolvimento do
programa em si utilizando, para essa finalidade, uma linguagem de
programao.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

Figura B: Resoluo de problemas e implementao

1.1. Lgica de Programao


De maneira geral, podemos entender que a lgica de programao
consiste em desenvolvermos uma sequncia de passos que permitem
atingir um determinado objetivo, ou seja, no mbito da Tecnologia da
Informao (TI), a resoluo de um problema computacional.
O principal desafio para o desenvolvimento da lgica de
programao est em educar o nosso crebro para resolver as
problemas de forma estruturada,
mettica e detalhada, pois
naturalmente resolvemos as situaes cotidianas de forma inata, quase
que instintiva. Por exemplo, se voc est sentado em uma cadeira e
precisa apagar uma luz, normalmente fazemos isso sem pensar nos
passos detalhados para realizar essa ao. Ou seja, voc no ir pensar
que precisa se levantar, caminhar at o interruptor e deslig-lo. Muito
menos voc pensou nas etapas que so necessrias para se levantar da
cadeira ou mesmo como caminhar. Porm, o nosso crebro transmitiu
todas essas informaes para os nossos msculos.
Porm, diferente do que fazemos nas situaes corriqueiras e
cotidianas, quando programamos um computador temos que enviar
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

instrues detalhadas e organizadas, para que o computador as execute


passo-a-passo. Esse o grande desafio quando comeamos a criar
resolues de problemas que daro origem aos programas de
computador.
Infelizmente, no h uma frmula mgica para se desenvolver o
raciocnio lgico. Basicamente devemos conhecer um conjunto de
tcnicas, as quais sero abordadas nesta apostila, e colocar em prtica
esses conceitos na resoluo de exerccios de forma a desenvolver a
estruturao do pensamento.

Exerccios

Considerando as premissas a seguir, verifique quais as sentenas que


representam a concluso correta:
1) Scrates um ser humano. Todos os seres humanos so mortais. Logo:
a) Scrates mortal.
b) Scrates imortal.
c) Plato mortal.
d) Scrates no humano.
e) No possvel chegar a uma concluso.
2) Trs homens esto sentados mesa: 2 pais e 2 filhos. Quem so essas
trs pessoas?
a) O pai, o filho e o sobrinho.
b) O pai e seus dois filhos.
c) O tio, o pai e o filho.
d) O av, o pai e o filho.
e) No possvel chegar a uma concluso.
3) Gatos so animais. Animais possuem patas. Desta forma:
a) Todos os animais so gatos.
b) Gatos possuem patas.
c) Os gatos possuem quatro patas.
d) Gatos e cachorros so animais.
e) Gatos no possuem patas.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

4) Considerando a srie: 56, 56, 41, 41, 26, 26, N, N. Qual ser o valor
de N?
a) 14
b) 9
c) 11
d) 12
e) 13
5) Tringulos so figuras que tm ngulos. Se uma figura no tem ngulos.
Logo:
a) Essa figura pode ser um crculo.
b) Essa figura no um tringulo.
c) Essa figura pode ser um retngulo ou um tringulo.
d) No existem figuras sem ngulos.
e) No possvel chegar a uma concluso.
6) Considerando a sequncia: 1, 2, 3, 5, 8, N. Indicar o valor de N:
a) 15
b) 11
c) 14
d) 13
e) 12
7) Quando B maior que A, X menor que A. Porm, A nunca maior ou
igual a B. Assim:
a) X nunca menor que B.
b) X nunca menor que A.
c) X nunca maior que B.
d) A, B e X so iguais.
e) No possvel chegar a uma concluso.
8) Considerando a frase a seguir, qual a melhor comparao?
"Uma chamin est para a casa assim como uma rvore est para ...".
a) o riacho.
b) o galho.
c) a folha.
d) o cu.
e) o cho.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

9) Considerando a sequncia: 1, 2, 2, 4, 8, N. Indicar o valor de N:


a) 36
b) 30
c) 34
d) 28
e) 32
10) Dentre as palavras apresentadas nas alternativas, qual no est
relacionada s demais?
a) Gato
b) Cachorro
c) Rato
d) Peixe
e) Coelho
11) Coloque as frutas na ordem correta: Mamo, Melncia, Uva, Limo.
a) Limo, Mamo, Uva, Melncia
b) Uva, Limo, Mamo, Melncia
c) Melncia, Limo, Uva, Mamo
d) Limo, Melncia, Uva, Mamo
e) Mamo, Uva, Melncia, Limo
12) Um livro possui 99 pginas, quantas vezes o algarismo 1 aparece na
numerao das pginas?
a) 17
b) 18
c) 19
d) 20
e) 21

1.2. Algoritmo
Um algoritmo pode ser definido como uma sequncia ordenada,
finita e bem definida de passos que, quando executados, realizam uma
tarefa especfica ou resolvem um problema, por exemplo, uma receita de
bolo ou o manual de instrues de um televisor.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

Considere o problema das Torres de Hani (Figura 1.1) que tem,


como premissa, a necessidade de mover os discos de uma haste para
outra sem que o disco maior fique sobre o disco menor.

Figura 1.1: Torres de Hani


A soluo do problema ir consistir em um conjunto de passos que
permitiro atingir o objetivo final, por exemplo:
1. Mover o disco 1 para a haste C
2. Mover o disco 2 para a haste B
3. Mover o disco 1 para a haste B
4. Mover o disco 3 para a haste C
5. Mover o disco 1 para a haste A
6. Mover o disco 2 para a haste C
7. Mover o disco 1 para a haste C
Desta forma, podemos entender que em linhas gerais a elaborao
de um algoritmo obedece as seguintes etapas:
Identificao do Problema: determinar o que se quer resolver ou
qual objetivo a ser atingido;
Identificao das entradas do sistema: quais informaes estaro
disponveis (sero fornecidas);
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

Identificao das sadas do sistema: quais informaes devero


ser geradas/calculadas como resultado;
Definir os passos a serem realizados: determinar as sequncias de
aes que leve soluo do problema (transformao das entradas nas
sadas). Basicamente consistem em identificar as regras e limitaes do
problema, identificar as limitaes do computador e, por fim, determinar
as aes possveis de serem realizadas pelo computador.
Concepo do algoritmo: registrar a sequncia de comandos,
utilizando uma das formas de representao de algoritmos.
Teste da soluo: execuo manual de cada passo do algoritmo,
seguindo o fluxo estabelecido, para detectar possveis erros.

Exerccios

1) Descrever os passos necessrios para se trocar uma lmpada.


2) Enumerar os passos necessrios para realizar uma partida do tradicional
Jogo da Velha.
3) Descrever os passos necessrios para realizar a resoluo de uma
equao do 2 grau.
4) Definir a sequncia de passos necessrios para preparar uma omelete.
5) Enumerar os passos necessrios para cadastrar um nome e nmero de
telefone na agenda do seu celular.
6) Estabelecer a sequncia necessria para passar uma pea de roupa.
7) Descrever os passos necessrios para calcular a rea de um retngulo.
8) Enumerar os passos para plantar uma rvore.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

1.3. Representao e Armazenamento de Dados


Um dado para ser processado precisa estar armazenado na
memria principal do computador. Portanto, muitas instrues so
associadas ao processo de armazenamento ou transformao destes
valores. Na concepo de algoritmo, devemos considerar que a memria
consiste em um conjunto de posies (endereos), onde cada posio
recebe uma identificao (nome) e armazena um determinado valor.
Abstrao do Conceito de Memria
Identificador
Valor
idade
20
Nome
Jos da Silva
NOTA1
6,5
Desta forma, as posies de memria sempre armazenam um valor
(ou um conjunto deles) e seguem as seguintes premissas: se armazenamos
um novo valor em uma posio, o seu valor antigo ser perdido; se
nenhum valor for atribudo a uma determinada posio, esta ir possuir
um valor indeterminado.
Ento, podemos definir que um identificador consiste no nome de
uma posio (endereo) da memria que definido pelo desenvolvedor
do programa. Com o intuito de facilitar o entendimento das rotinas
recomenda-se o uso de nomes significativos, por exemplo, idade, NOME,
ValorFinal e PRECO_UNITARIO. Tambm devemos evitar identificadores
que no demostram claramente a sua finalidade, por exemplo, X1, kcp,
VAR_1 e Var_2.
Como regra geral para definio de identificadores, devemos inicialos sempre com uma letra e pode conter letras, nmeros e o caracter _.
Ento, temos como identificadores vlidos Nome, VLR_SALARIO e nota_1,
ao passo que 1 Nota, C&A e x-1 no so considerados vlidos.
Os identificadores podem ser classificados em constantes e
variveis. As constantes representam valores que no mudam no
decorrer do algoritmo, por exemplo, Digite um nmero: e PI entre
outros. Por outro lado, as variveis representam dados cujos valores so
modificados ao longo da execuo do algoritmo.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

As variveis alm de possurem um identificador (nome) tambm


precisam representar o tipo de dados que ser armazenado. Por exemplo,
tipos de dados numricos como inteiros (10, -3 ou 1024) ou reais (1,5,
45,86 ou -0,333). Tambm existem os tipos de dados no numricos
como, por exemplo, lgico (verdadeiro ou falso), caracter (A, @ ou 1)
ou cadeia de caracteres (string). Podem ser citados como exemplos de
cadeias de caracteres: Jos, Ana Maria e Rua das Flores, 100 entre
outros. No tipo de dados caractere utilizamos aspas simples como
delimitador, por outro lado, em cadeias de caracteres devemos utilizar as
aspas duplas como delimitadoras de contedo.
O valor a uma varivel pode ser atribudo atravs do operador =
(smbolo de igual). Neste caso, para representarmos a atribuio do valor
10 para a varivel NUMERO podemos utilizar a seguinte notao em
pseudolinguagem:
NUMERO = 10
Devemos ler essa instruo de atribuio como A VARIVEL
NUMERO RECEBE O VALOR 10 ou ALTERE O VALOR DA VARIVEL
NUMERO PARA 10. As variveis tambm podem ser agrupadas em
conjuntos dando origem aos conceitos de vetores, matrizes e registros os
quais sero abordados posteriormente.

Exerccios

1) Assinale os identificadores vlidos:


(
(
(
(
(
(
(
(
(

) 3VALOR
) SOBRENOME
) menor
) SAIDA
) DESC%
) eRRo
) PCT
) #MAIOR
) R$

(
(
(
(
(
(
(
(
(

) VALOR-1
) R1&R2
) EX=1
) Resposta
) DESC
) REAL
) P_C_T
) BRASIL
) Valor final

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

(
(
(
(
(
(
(
(
(

) PRECO_UNIT
) R1_R2
) SOL1
) SALDO-MED
) SALDO_MED
) DLAR
) PCT%
) result
) VLR+Bonus

(
(
(
(
(
(
(
(
(

) MAXVALOR
) CID
) sobreNome
) %DESC
) [INICIO]
) US$
) PCT.
) res-saida
) Cursos

10

2) Identifique o tipo de dados de cada um dos valores ou aponte o motivo


do erro quando encontrar uma representao que no seja vlida:
Valor a ser
Armazenado

Tipo de Dado

Jos
Jos da Silva
VERDADEIRO
34,560
-45
18
0,56565
-0,4560
0,00000
12,78
100 anos
Maria
10
--56,4
45,422
FALSO
45,001
4444
-56
13250-000
Escola
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

11

Faculdade
falso
Endereco
Cidade

1.4. Formas de Representao de Algoritmos


A descrio de um algoritmo de forma clara e precisa auxilia no
processo de desenvolvimento em uma linguagem de programao. Para
facilitar este trabalho, so utilizadas notaes especficas que permitem a
representao da lgica de programao, ou seja, da sequncia de aes a
serem realizadas na soluo de um problema.

1.4.1. Descrio Narrativa


Especificao verbal dos passos em linguagem natural. Apresenta
como desvantagens o fato que a linguagem natural imprecisa, possui
ambiguidades e ir proporcionar um maior trabalho na codificao em
uma linguagem de programao. interessante a sua utilizao apenas
para comentar algoritmos e programas, esclarecendo ou realando pontos
especficos. No quadro a seguir ilustramos o seu uso no problema da troca
de um pneu furado.
Verificar qual pneu est furado.
Afrouxar os parafusos da roda.
Pegar o macaco e o pneu de estepe.
Posicionar o macaco para erguer o veculo.
Retirar os parafusos.
Retirar o pneu.
Colocar o pneu de estepe.
Recolocar os parafusos.
Descer o veculo.
Guardar o macaco e o pneu furado.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

12

1.4.2. Fluxograma
Consiste no uso de ilustraes grficas para representar as
instrues. Apresenta a lgica de um algoritmo, enfatizando passos
individuais atravs de objetos grficos e o fluxo de execuo atravs de
setas.
Conjunto de smbolos utilizados em um fluxograma:
Smbolo

Finalidade
Identifica o incio ou o fim de um
algoritmo
Indica o sentido de execuo e
conecta os smbolos utilizados
Clculos e atribuies de valores

Entrada de dados (arquivo)

Entrada de dados (teclado)

Sada de dados (impressora)

Sada de Dados (monitor de vdeo)

Deciso

Conector (ou Juno)

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

13

Smbolo

Finalidade
Procedimento pr-definido

Conector para outra pgina

Como exemplo vamos considerar a elaborao de um algoritmo que


receba dois nmeros digitados pelo usurio e, em seguida, mostre o valor
da soma dos mesmos (Figura 1.2).

Figura 1.2: Exemplo de fluxograma


A construo do fluxograma comea pelo smbolo de incio, o
prximo passo consiste em realizar a entrada de dados, a qual permitir a
digitao dos dois nmeros.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

14

Aps a entrada dos dados ser realizada a soma dos dois nmeros o
resultado ser armazenado no identificador S. Em seguida, realizamos a
exibio de S e, por fim, indicaremos o fim do algoritmo.
A soluo para este mesmo problema pode ser representada de
uma forma mais detalhada, conforme podemos observar na Figura 1.3.
Este estilo de representao facilita a futura implementao da soluo do
problema em uma linguagem de programao, pois deixa mais claro os
passos a serem seguidos. Preferivelmente, procure adotar esse tipo de
soluo na resoluo dos problemas computacionais.

Figura 1.3: Fluxograma com a soluo detalhada


Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

15

1.4.3. Pseudolinguagem (ou Portugol)


Consiste em uma linguagem criada para desenvolvimento de
algoritmos, que utiliza expresses pr-definidas para representar aes e
fluxos de controle. Funciona como uma linguagem simplificada de
programao, logo, facilita a posterior implementao. Basicamente
consiste em uma descrio textual, estruturada e regida por regras, que
descrevem os passos executados no algoritmo. Possui caractersticas
similares s linguagens de programao, por exemplo, palavras-chaves,
variveis e apresenta um comando por linha entre outros recursos.
A seguir temos a implementao, em Portugol, de um programa que
ir receber dois nmeros digitados pelo usurio, calcular e exibir o valor
da respectiva soma.

{ Portugol }
programa
{
// Soma de dois nmeros digitados pelo usurio
funcao inicio()
{
// Declarao das variveis
inteiro n1, n2, s
// Mostrar uma mensagem na tela
escreva ("Digite um nmero: ")
// Obter um valor digitado pelo usurio
leia (n1)
escreva("Digite outro nmero: ")
leia (n2)
// Realizar a soma de n1 com n2 e armazenar
// o resultado na varivel s
s = n1 + n2
// Exibir o resultado obtido
escreva ("O valor da soma ", s)
}
}
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

16

No cdigo-fonte acima importante observar que a estrutura bsica


de um programa em Portugol consiste no uso do comando programa e a
delimitao atravs do uso de chaves {} para indicar o escopo do que ser
desenvolvido. Todos os elementos do programa devero estar entre essas
chaves que marcam o incio e o fim do programa.
Todo programa comea a sua execuo atravs das instrues que
esto na funo inicio, tambm observe que uma funo tambm deve
estar delimitada por chaves. Esta funo obrigatria para qualquer
programa e no dever ser removida ou ter o seu nome alterado.
Veja, neste mesmo exemplo, que a utilizao de barras duplas //
indica um comentrio, ou seja, consiste em uma linha que no ser
executada. ideal para documentar o cdigo-fonte, explicando o que cada
parte do programa est fazendo, por exemplo:

{ Portugol }
// Declarao das variveis
inteiro n1, n2, s
A exibio de dados de qualquer programa deve ser realizada
atravs da utilizao da funo escreva. Nesta funo passe os parmetros
(contedo) a serem exibidos separados por ponto, ou seja, no exemplo a
seguir a cadeia de caracteres "O valor da soma " e o valor da varivel s
sero exibidos.

{ Portugol }
escreva ("O valor da soma ", s)
Na funo escreva podemos usar o caractere especial \n dentro de
uma cadeia de caracteres (string) para realizar uma mudana de linha no
contedo que est sendo impresso, por exemplo, no programa a seguir
teramos o contedo da cadeia de caracteres sendo exibido em linhas
diferentes.

{ Portugol }
programa
{
funcao inicio()
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

17

{
escreva ("Ol\nPessoal")
}
}
A entrada de dados em um programa realizada atravs da funo
leia. Esta funo recebe o dado digitado no teclado e atribui a varivel
passada como parmetro da funo, no exemplo a seguir, temos a varivel
n1 recebendo o contedo digitado pelo usurio.

{ Portugol }
leia (n1)
Normalmente exibimos uma mensagem antes de uma entrada de
dados, utilizando a funo escreva, orientando o usurio sobre o que deve
ser digitado, por exemplo:

{ Portugol }
escreva ("Digite um nmero: ")
leia (n1)

1.5. Operadores
Alm do operador de atribuio (=) j abordado anteriormente,
existem tambm os operadores aritmticos, relacionais e lgicos. Os
operadores aritmticos so utilizados para a realizao de clculos
matemticos:

Operador
Adio
Subtrao
Multiplicao
Diviso
Resto

Representao Simblica
(Fluxograma ou pseudolinguagem)
+
*
/
%

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

18

Desta forma, por exemplo, uma expresso aritmtica pode ser


representada da seguinte maneira:

{ Portugol }
X = 25 + 12 - 4
Operadores relacionais permitem a comparao entre
identificadores, valores ou mesmo expresses. O resultado de uma
comparao sempre ser um valor booleano (ou lgico), ou seja,
verdadeiro ou falso.

Operador
Maior
Maior ou igual
Menor
Menor ou igual
Igual a
Diferente de

Representao Simblica
(Fluxograma ou pseudolinguagem)
>
>=
<
<=
==
!=

A seguir temos um exemplo que ilustra o uso de um operador


relacional comparando se um determinado identificador maior ou igual
ao resultado de uma expresso aritmtica.

{ Portugol }
A >= ((34 - 5) * 2)
Os operadores lgicos so adotados para conectar e associar
expresses que precisam realizar diversas comparaes diferentes.
Tambm importante salientar que o resultado dessas expresses
sempre ser um valor booleano (ou lgico).

Operador
E (And)
Ou (Or)
No (Not)

Representao Simblica
(Fluxograma ou pseudolinguagem)
e
ou
nao

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

19

Quando precisamos realizar vrias comparaes, por exemplo,


precisamos saber se o identificador A igual a ao identificador B e
tambm se o identificador B maior que zero. Neste caso, utilizamos o
operador lgico E (And) para associar as duas condies.

{ Portugol }
A == B e B > 0
Na operao lgica E (And) a sada ser verdadeira apenas se todas
as entradas forem verdadeiras, ou seja:
Entrada 1
falso
falso
verdadeiro
verdadeiro

Entrada 2
falso
verdadeiro
falso
verdadeiro

Sada
falso
falso
falso
verdadeiro

A operao lgica OU (OR) apresentar uma sada falsa apenas se


todas as entradas forem falsas, ou seja:
Entrada 1
falso
falso
verdadeiro
verdadeiro

Entrada 2
falso
verdadeiro
falso
verdadeiro

Sada
falso
verdadeiro
verdadeiro
verdadeiro

O operador lgico de negao (NOT) inverte o valor apresentado na


entrada:
Entrada
Sada
falso
verdadeiro
verdadeiro falso
As linguagens de programao estabelecem uma ordem de
avaliao dos elementos de uma expresso considerando, para isso, a
precedncia dos operadores. Quando no existir a precedncia entre os
operadores utilizados, a expresso ser avaliada da esquerda para a
direita. Alm da existncia da precedncia entre operadores de tipos

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

20

diferentes, operadores do mesmo tipo possuem tambm uma


precedncia. Na tabela a seguir podemos observar a precedncia.
Ordem de
avaliao
1
2
3
4
5
6
7
8

Operador
()
* ou /
+ ou =
==, <, >, <=, >= ou !=
nao
e
ou

Considerando o exemplo a seguir devemos considerar que


inicialmente so realizadas as operaes aritmticas, ou seja, 10 * B e
depois 10 + 2. Em seguida as expresses sero comparadas (maior que e
igual) e, concluindo a resoluo da expresso o conectivo lgico ser
avaliado.

{ Portugol }
A > 10 * B e B == 10 + 2
Ilustrando o conceito de resoluo da expresso vamos considerar o
seguinte cenrio:

{ Portugol }
A = 6
B = 2
A > 10 * B e B == 10 + 2
O programa ir realizar 10 * B, ou seja, 10 * 2 que igual a 20 e, em
seguida, 10 + 2 que 12. Desta forma, podemos observar agora a
resoluo parcial da expresso:

{ Portugol }
A > 20 e B == 12

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

21

O passo a seguir consiste em realizar as comparaes, ou seja, A >


20. Substituindo o valor de A temos 6 > 20 que retorna um valor lgico
falso. Na prxima comparao B = 12, ou seja, 2 = 12, tambm resultar
em um valor falso. Agora podemos observar a expresso da seguinte
maneira:

{ Portugol }
falso e falso
A ltima etapa da resoluo consiste em avaliar os operadores
lgicos, neste caso, teremos como resultado final da expresso o valor
falso.
Outra forma de avaliar uma expresso atravs da construo de
tabela verdade. Uma tabela verdade permite demonstrar o conjunto de
possibilidades existentes para a combinao de variveis ou expresses e
operadores lgicos. Por exemplo, considerando a seguinte expresso:

{ Portugol }
X > 10 e Y <= 100
A tabela verdade ser utilizada para demonstrar as vrias
possibilidades de combinaes, conforme ilustramos a seguir:

Expresso
Resultados
possveis

Exerccios

X > 10
F
F
V
V

Y <= 100
F
V
F
V

Operador
e (And)
X > 10 e Y <= 100
F
F
F
V

1) A partir das expresses a seguir, identificar o resultado (verdadeiro ou


falso) de cada uma delas em funo dos valores dados, considerando que
varivel X seja atribudo o valor 4 e varivel Y seja atribudo o valor 6.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

22

a)
b)
c)
d)
e)
f)
g)

X == 4 e Y == 5
X == 3 e Y == 7
X < 5 ou Y != 8
X <= 2 e Y == 7
nao X == 2 e Y == 6
X < 5 e Y > 2 ou Y != 7
Y < 5 ou X > 0 e nao X != Y

2) Considerando a seguinte atribuio de valores para as variveis:

{ Portugol }
I = 2
J = 9
K = 6
Avaliar as expresses indicando o resultado final (verdadeiro ou falso):
a)
b)
c)
d)
e)
f)
g)
h)
i)
j)

I > 2 e K == 6
I != 2 ou J <= 5
I == 3 ou J >= 2 e K == 9
I == 3 e nao J <= 10 e K == 6
I != 2 ou J == 9 e K > 2
J > I e K != I
I > J ou J < 5
I != J e J == K
K >= 2 ou I < J
I >= J ou J > I e K != J

3) Elaborar a tabela verdade para as expresses:


a)
b)
c)
d)
e)
f)

A < 6 ou B >= 5
J != 10 e K >= 5
nao X == 5 ou Y < 3
A > 4 e B != 8 ou C > 2
X != Y e Y > 0 ou X > 0
J >= I e nao K < I ou I == J

4) Considerando o seguinte algoritmo.


Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

23

{ Portugol }
programa
{
funcao inicio()
{
inteiro I, J, K
real X, Y, Z
cadeia Nome, Rua
logico ImovelProprio
I = 3
J = 6
K = 4
X = 5.5
Y = 8.0
Z = -4.0
Nome = "Jos da Silva"
Rua = "Rua das Flores, 100"
ImovelProprio = verdadeiro
// Expresso a ser avaliada, neste exemplo,
// item a, ou seja, Nome = Rua
escreva (Nome == Rua)
}
}
Determinar o resultado das expresses a seguir, considerando que cada
um dos itens ser colocado como parmetro da funo escreva:
a)
b)
c)
d)
e)
f)
g)
h)

Nome == Rua
X >= Y e K == J
(K + 2 * J) >= (Z - 3 * X)
((Y / 2) == X) ou ((J * 2) >= (I + K))
nao ImovelProprio
nao J > I e I + K <= 10 ou ImovelProprio != verdadeiro
(K 10) > (Z / 2) ou (K 20) < (Y * 2)
nao K < (I * 10)

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

24

1.6. Portugol Studio


Com o intuito de facilitar o aprendizado, a implementao dos
exemplos em Portugol, que sero desenvolvidos neste captulo, poder
ser realizada atravs do programa Portugol Studio, que consiste em um
programa gratuito e multiplataforma, ou seja, pode ser executado tanto
em computadores com Windows ou Linux entre outras plataformas. O
mesmo poder ser obtido atravs do endereo http://univalil2s.github.io/Portugol-Studio-Site/.
Aps instalar o programa, execute o mesmo e a janela inicial dever
ser mostrada conforme Figura 1.4.

Figura 1.4: Portugol Studio


Escolha a opo Sair Programando (Ctrl + N). Neste momento, ser
mostrada a janela do editor de programas, contendo a estrutura bsica de
um programa em Portugol, conforme podemos observar na Figura 1.5.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

25

Figura 1.5: Novo programa


Digite dentro da funo incio o comando escreva, conforme pode
ser observado no programa a seguir. Observe que no Portugol programas,
funes e blocos de comando devem ser delimitados por chaves.

{ Portugol }
programa
{
funcao inicio()
{
escreva("Ol Pessoal!")
}
}

Utilize, em seguida, o cone


ou as teclas de atalho Shift + F6,
para executar o algoritmo criado conforme indicado na Figura 1.6.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

26

Figura 1.6: Executando o programa criado


O resultado da execuo do programa ser mostrado na aba
Console (Figura 1.7) localizada na parte inferior da janela do Portugol
Studio. Observe tambm que quando houver erros no programa a ser
executado os mesmos sero exibidos na aba de Mensagens.

Figura 1.7: Aba Console

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

27

1.7. Estrutura Sequencial


Um algoritmo uma sequncia de passos (comandos) que, na
maioria das vezes, seguem uma estrutura sequencial, ou seja, o conjunto
de comandos executado de maneira linear, do smbolo de incio at o
smbolo que indica o fim do algortimo, na ordem indicada pelas setas. Na
Figura 1.8, como exemplo, podemos considerar o fluxograma de uma
aplicao que precisa obter o nome do usurio e, em seguida, exibi-lo na
tela.

Figura 1.8: Entrada e exibio de dados


Este mesmo problema pode ter a sua soluo representada atravs
de pseudolinguagem (Portugol), conforme pode ser observado a seguir.

{ Portugol }
programa
{
funcao inicio()
{
cadeia Nome
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

28

escreva ("Digite o seu nome: ")


leia (Nome)
escreva ("O seu nome ", Nome)
}
}
Digite este exemplo no Portugol Studio e, em seguida, realize a sua

execuo clicando sobre o cone


ou pressionando as teclas de atalho
Shift + F6. Agora observe na aba Console que o programa ir solicitar a
digitao, aps digitar o nome e pressionar Enter, a mensagem ser
exibida e o programa, neste momento, encerrado (Figura 1.9).

Figura 1. 9: Entrada de dados no Portugol Studio

Exerccios

Apresente a soluo dos problemas a seguir utilizando fluxograma e


pseudolinguagem (Portugol):
1) Criar uma aplicao que receba por digitao o nome e o sobrenome e,
em seguida, realize a exibio da seguinte maneira: sobrenome, nome.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

29

2) Elaborar um programa que realize a multiplicao de dois valores


numricos do tipo de dado real digitados pelo usurio e, depois, exiba o
valor calculado.
3) Escrever uma aplicao que receba quatro nmeros inteiros digitados
pelo usurio e, em seguida, calcule e exiba a valor da soma desses
nmeros.
4) Criar uma aplicao que receba trs nmeros reais digitados pelo
usurio e, em seguida, calcule e exiba a valor da mdia.
5) Uma determinada loja precisa calcular o preo de venda de um
produto. O clculo dever ser efetuado atravs da multiplicao do preo
unitrio pela quantidade vendida e, posteriormente, subtrair o valor do
desconto. Considerar todas as variveis do tipo de dado real e que as
mesmas sero digitadas pelo usurio.
6) Calcular a mdia final de um aluno considerando que o mesmo ir
realizar duas provas (P1 e P2), sendo que a P1 dever ter peso 4 e a P2
peso 6. Adotar que as notas so do tipo de dado real e que elas sero
fornecidas pelo usurio.
7) A Lei de Ohm define que a resistncia (R) de um condutor obtida
atravs da diviso da tenso aplicada (V) dividida pela intensidade de
corrente eltrica (A). Desta forma, a partir de uma tenso e corrente,
digitadas pelo usurio, calcule e mostre o valor da resistncia.
8) Adotando como referncia o exerccio 7, calcule e exiba a intensidade
da corrente eltrica (A) a partir da tenso (V) e resistncia (R) que o
usurio ir fornecer ao programa.
9) A potncia (P) consumida por determinado aparelho eletroeletrnico
definida pela tenso (V) multiplicada pela corrente (A). Elaborar um
programa que, a partir da tenso e corrente fornecidas pelo usurio,
calcule e mostre na tela a potncia.
10) Considerando o exerccio 9 calcule e exiba a corrente (A) que circula
por determinado aparelho eletroeletrnico a partir da potncia (P) e
tenso (V) digitadas pelo usurio.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

30

1.8. Estruturas de Seleo


As estruturas de seleo, tambm conhecidas por estruturas de
deciso, permitem a escolha de um grupo de aes para serem
executadas de acordo com a avaliao de uma expresso ou um conjunto
delas. Desta forma, passamos a ter a execuo condicional de um grupo
de comandos do programa.

1.8.1. Se
O comando de seleo se ir executar um bloco de comandos
especfico se a condio testada for verdadeira ou o bloco de comandos
senao, que opcional, quando a condio for falsa. Um bloco de
comandos deve ser entendido como um conjunto de instrues
delimitadas por abrir e fechar chaves {}. Conforme podemos observar na
Figura 1.10, na elaborao do fluxograma utilizaremos o smbolo do
losango para caracterizar o uso da estrutura de seleo:

Figura 1.10: Estrutura de seleo


Como exemplo, vamos considerar uma situao na qual devemos
indicar a partir da idade de uma pessoa se a mesma maior ou menor de
idade. Desta forma, na fluxograma poderamos ento realizar a seguinte
representao (Figura 1.11):

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

31

Figura 1.11: Seleo se a pessoa maior ou menor de idade


Utilizando pseudolinguagem o comando de seleo se
representado da maneira indicada pelo trecho de programa mostrado a
seguir. No trecho de programa a seguir devemos avaliar a expresso
presente no comando se, ou seja, se o valor da varivel idade for maior ou
igual a 18 (idade >= 18). Caso a expresso seja avaliada como verdadeira a
mensagem Maior de idade ser exibida no console, caso contrrio, ser
executada a instruo contida no senao e, desta maneira, a mensagem
Menor de idade ser mostrada no console.

{ Portugol }
se (idade >= 18)
{
escreva ("Maior de idade")
}
senao
{
escreva ("Menor de idade")
}
Quando um bloco de comandos constitudo por uma nica
instruo as chaves passam a ser opcionais podendo ser omitidas. Desta
forma, o mesmo trecho de programa mostrado acima poderia ser
representado da seguinte maneira:

{ Portugol }
se (idade >= 18)
escreva ("Maior de idade")
senao
escreva ("Menor de idade")
Existem outras situaes nas quais possvel omitir a instruo
senao. Considere um problema no qual devemos exibir o valor absoluto
(sem sinal) de um determinado nmero que foi digitado pelo usurio. Se o
nmero for negativo devemos multiplic-lo por (-1), caso contrrio, no
necessrio fazer nada. Ou seja, na prtica, no h instruo para ser
colocada no bloco senao, conforme podemos observar na Figura 1.12.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

32

Figura 1.12: Estrutura de seleo sem o senao


Na representao em pseudolinguagem basta omitir a bloco seno,
conforme podemos observar no trecho de programa a seguir.

{ Portugol }
se (num < 0)
{
num = num * (-1)
}
Aps esses conceitos iniciais vamos, neste prximo exemplo,
inserindo o conceito de estrutura de seleo dentro de um programa
completo. Vamos considerar um programa no qual o usurio ir digitar o
ano de nascimento e, em seguida, a idade ser calculada e, ao final, ser
informado se o mesmo maior ou menor de idade. Na Figura 1.13
podemos observar a representao da soluo para o clculo da idade
atravs de fluxograma:

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

33

Figura 1.13: Clculo da idade


Utilizando pseudolinguagem teramos, como uma possvel soluo
para o problema, o programa a seguir.

{ Portugol }
programa
{
funcao inicio()
{
inteiro ano_nasc, idade
escreva ("Digite o ano de nascimento: ")
leia (ano_nasc)
idade = 2015 - ano_nasc
se (idade >= 18)
{
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

34

escreva ("Maior de idade")


}
senao
{
escreva ("Menor de idade")
}
}
}
Em determinadas situaes so necessrios vrios comandos se
para resolvermos um determinado problema, por exemplo, vamos
considerar a necessidade de a partir de trs nmeros digitados pelo
usurio, identificarmos o maior deles. Neste caso, como so trs as
possibilidades, um nico comando se no ir conseguir resolver o
problema. Em situaes como essa, devemos utilizar os comandos de
modo aninhados, conforme ilustrado pelo fluxograma apresentado na
Figura 1.14.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

35

Figura 1.14: Identificao do maior nmero

Adotando a pseudolinguagem a soluo poderia ser expressa da


seguinte maneira:
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

36

{ Portugol }
programa
{
funcao inicio()
{
inteiro a, b, c
escreva ("Digite o primeiro valor: ")
leia (a)
escreva ("Digite o segundo valor: ")
leia (b)
escreva ("Digite o terceiro valor: ")
leia (c)
se ((a > b) e (a > c))
{
escreva ("O maior : ", a)
}
senao
{
se (b > c)
{
escreva ("O maior : ", b)
}
senao
{
escreva ("O maior : ", c)
}
}
}
}
Com o intuito de reforar esses conceitos vamos desenvolver um
outro exemplo, no qual aplicaremos o comando se para resolver um outro
problema de seleo. Vamos considerar um programa que, a partir de
uma sigla digitada pelo usurio, devemos exibir o nome de um estado
brasileiro. No fluxograma, mostrado na Figura 1.15, importante observar
que faremos a soluo apenas para trs estados, porm, relativamente
simples ampliar a soluo de modo que a mesma suporte vrios estados.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

37

Figura 1.15: Nome do estado


Utilizando Portugol temos, a seguir, uma das solues possveis para
o problema.

{ Portugol }
programa
{
funcao inicio()
{
cadeia est
escreva ("Digite a sigla do estado: ")
leia (est)
se (est == "SP")
escreva ("So Paulo")
senao
se (est == "RJ")
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

38

escreva ("Rio de Janeiro")


senao
escreva ("Desconhecido")
}
}

1.8.2. Escolha caso


Outra estrutura que pode ser adotada para resolver alguns
problemas de seleo escolha caso. Esta estrutura pode ser usada
quanto necessrio verificar vrias condies para uma mesma varivel e,
em seguida, executar o bloco de comandos relacionado condio
verdadeira. Este comando somente pode ser empregado quando uma
verificao de igualdade com base em uma mesma varivel ou
expresso.
Com o intuito de ilustrar esse conceito vamos desenvolver um
programa que mostre o valor por extenso de um nmero inteiro digitado
pelo usurio. No fluxograma (Figura 1.16) importante observarmos que
a representao sempre a mesma, independente se formos utilizar se ou
escolha caso em uma posterior implementao. Tambm note que, para
fins didticos, vamos representar na soluo apenas o extenso de um, dois
ou trs.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

39

Figura 1.16: Valor por extenso de um nmero


Utilizando Portugol podemos realizar a seguinte implementao:

{ Portugol }
programa
{
funcao inicio()
{
inteiro num
escreva ("Digite um nmero: ")
leia (num)
escolha (num)
{
caso 1:
escreva ("Um")
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

40

pare
caso 2:
escreva ("Dois")
pare
caso 3:
escreva ("Trs")
pare
caso contrario:
escreva ("No sei!")
}
}
}
de fundamental importncia salientar que toda soluo que utiliza
escolha caso pode ser realizada com se, conforme ilustrado no programa
a seguir. Por outro lado, o contrrio no verdadeiro, ou seja, muitas
representaes com se no podem ser reescritas utilizando escolha caso.
Ento importante lembrar-se sempre das condies para uso do
comando escolha caso: Este comando somente pode ser empregado
quando a verificao com base em uma mesma expresso e tambm
que a expresso que apresente somente igualdade.

{ Portugol }
programa
{
funcao inicio()
{
inteiro num
escreva ("Digite um nmero: ")
leia (num)
se (num == 1)
{
escreva ("Um")
}
senao
{
se (num == 2)
{
escreva ("Dois")
}
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

41

senao
{
se (num == 3)
{
escreva ("Trs")
}
senao
{
escreva ("No sei!")
}
}
}
}
}
Tambm importante salientar que, quando aplicvel, a
representao com escolha caso torna o cdigo mais legvel e de fcil
entendimento, conforme podemos observar nesta soluo que adotou
apenas o encadeamento de comandos se para resolver o mesmo
problema.

Exerccios

Desenvolver as solues para os problemas a seguir utilizando fluxograma


e pseudolinguagem.
1) Criar um programa que receba quatro nmeros inteiros e exiba o
menor deles.
2) Especificar uma aplicao que faa a leitura do nome e ano de
nascimento de uma pessoa, calcule sua idade e exiba a idade calculada
tambm indicando se a pessoa maior ou menor de idade.
3) Escreva um programa que, a partir de um nmero inteiro digitado pelo
usurio, mostre se o nmero par ou mpar.
4) Elaborar uma rotina que, a partir de um nmero real digitado pelo
usurio, mostre o seu valor absoluto.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

42

5) Considerando que a aprovao de um aluno em determinada disciplina


requer uma mdia final maior ou igual a 6,0 (seis). Elaborar um programa
que receba duas notas, realize o calculo da mdia, exiba o valor calculado
e tambm se o aluno est aprovado ou reprovado.
6) Criar um programa que permita ao usurio digitar dois nmeros reais e
uma das quatro operaes matemticas bsicas e, em seguida, exiba o
resultado do clculo efetuado. A aplicao tambm no poder permitir a
tentativa de diviso de um nmero por zero.
7) A partir de cinco nmeros reais, digitados pelo usurio, exibir o valor da
mdia considerando apenas os nmeros que so maiores que zero e
menores do que mil.
8) Para converter a temperatura de graus Celsius para Fahrenheit, utilizase a frmula: F = C 1,8 + 32. Elaborar uma rotina que realize essa
converso a partir de uma temperatura digitada pelo usurio.
9) Atravs do clculo do ndice de Massa Corporal (IMC) possvel saber
se uma pessoa est acima ou abaixo dos parmetros ideais de peso em
relao a sua altura. Para calcular o IMC necessrio dividir o peso (Kg) de
uma pessoa pela sua altura (m) elevada ao quadrado. Elaborar um
programa que exiba o valor do IMC de uma pessoa e mostre a sua
situao em relao tabela a seguir:
Valor do IMC
Abaixo de 18,5
Entre 18,5 e 24,9
Entre 25,0 e 29,9
Entre 30,0 e 34,9
Entre 35,0 e 39,9
40,0 e acima

Situao
Voc est abaixo do peso ideal
Parabns, voc est em seu peso normal!
Voc est acima de seu peso (sobrepeso)
Obesidade grau I
Obesidade grau II
Obesidade grau III

10) Elaborar um programa que realize a resoluo de uma equao do 2


grau utilizando, para isso, a Frmula de Bskara.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

43

11) A partir dos lados de um retngulo ou quadrado, digitados pelo


usurio, elaborar uma rotina que calcule e exiba o valor da sua rea e
informe se o mesmo um retngulo ou um quadrado. Lembrando que a
rea obtida pela multiplicao da base (L) pela altura (A).
12) Considerando a moeda Real, Dlar Americano e Euro elaborar uma
rotina na qual o usurio ir digitar o valor, a respetiva moeda e a moeda
para a qual deseja converter o valor. Em seguida, o programa dever
calcular o exibir o valor convertido, por exemplo:
Entrada:
Digite a moeda: US$
Digite o valor: 100,00
Digite a moeda para qual deseja realizar a converso:
R$
Sada:
Resultado: R$ 245,00
Importante: Obter a cotao das moedas no dia da resoluo do exerccio.
13) Elaborar um programa de realize a converso entre metros, ps,
polegadas e milhas adotando, como referncia que 1 polegada = 25.4
Milmetros, 1 p = 30.48 Centmetros e 1 Milha = 1609.344 metros.
14) A partir de um valor digitado pelo usurio e o respectivo prefixo
mostrar a representao do valor nos demais prefixos, por exemplo:
Entrada:
Digite o valor: 10.000
Digite o prefixo: M
Sada:
10.000.000 k
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

44

10 G
0,01 T
Adotar, como referncia a tabela mostrada a seguir:
Prefixo

Valor (Decimal)
103
k (kilo)
(1000)
106
M (mega)
(1,000,000)
109
G (Giga)
(1,000,000,000)
1012
T (Tera)
(1,000,000,000,000)
15) Utilizando a mesma tabela do exerccio anterior, elaborar uma rotina
na qual o usurio ir digitar o valor, o respetivo prefixo e o prefixo para a
qual deseja representar o valor. Em seguida, o programa dever exibir a
representao do valor, por exemplo:
Entrada:
Digite o valor: 1.000.000
Digite o prefixo: M
Digite o prefixo que deseja visualizar: T
Sada:
Resultado: 1 T
16) A partir de cinco nmeros inteiros, digitados pelo usurio, determinar
e exibir a quantidade de nmeros que so pares.
17) Considerando trs nmeros inteiros, fornecidos pelo usurio, exibi-los
em ordem crescente.
18) Elaborar uma rotina que, a partir de quatro nmeros inteiros que
devero ser digitados pelo usurio, determine e mostre o maior nmero
par.
19) A partir de quatro nmeros inteiros, inseridos pelo usurio, exibir a
quantidade de nmeros que so mltiplos de 5, maiores ou iguais a 100 e
menores do que 200.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

45

20) Considerando trs nomes, digitados pelo usurio, exibi-los em ordem


alfabtica.
21) Elaborar uma rotina que determine e mostre a diferena entre o maior
e o menor valor dentre quatro nmeros reais fornecidos pelo usurio.
22) Desenvolver uma rotina que a partir de 5 letras digitadas pelo usurio,
determine e mostre a quantidade de vogais.
23) A rea de um tringulo (A) definida pela metade do produto da
altura (H) pela respectiva base (B). Escrever um programa que, a partir dos
valores da altura e base, que devero ser valores reais e maiores que zero
digitados pelo usurio, realize o clculo e exiba o valor da rea.
24) O IPVA de um veculo calculado tomando como base o valor do
veculo, o combustvel utilizado e o tipo do veculo que sero fornecidos
pelo usurio. Em seguida, o IPVA ser calculado como 4% do valor do
veculo, no caso de automveis movidos a gasolina ou flex. J para carros
movidos somente a etanol, eletricidade ou gs ou qualquer desses trs
combustveis combinados, a alquota de 3%. Para motos, camionetes
cabine simples e nibus ou micro-nibus a alquota de 2% e para
caminhes, de 1,5%. Elaborar uma rotina que, a partir destas informaes,
calcule o mostre o valor do IPVA.
25) Elaborar um programa que calcule e exiba o comprimento de uma
circunferncia, a partir de um raio (R), digitado pelo usurio e que dever
ser um nmero real positivo. O comprimento obtido atravs da frmula:
2 x x R.
26) Desenvolver um programa para uma loja que precisa determinar o
preo final de uma compra, a partir dos seguintes dados fornecidos pelo
usurio: cdigo, descrio, peso, quantidade e preo. Em seguida, para
determinar o preo final, devem-se utilizar os seguintes critrios para
clculo:
a) O preo total (bruto) obtido multiplicando o preo unitrio com a
quantidade;
b) O valor do imposto ser obtido atravs das seguintes faixas:
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

46

Preo total (bruto)


< R$ 500,00
>= R$ 500,00
e < R$ 1.500,00
>= R$ 1.500,00

Valor do Imposto
5,0% do preo total (bruto)
7,5% do preo total (bruto)
10,0% do preo total (bruto)

c) Quando o peso total do produto (peso x quantidade) for maior que


10kg acrescentar R$ 50,00 de custo de frete, caso contrrio, o frete
ser gratuito;
d) O preo final ser obtido somando o preo total (bruto) com o valor
do imposto e o custo do frete.
27) A partir do salrio e categoria, digitados pelos usurio, calcular o
reajuste de salrio de determinado funcionrio baseando-se na tabela
mostrada a seguir, sendo que o programa dever aceitar tanto letras
maisculas como minsculas para determinar a categoria do funcionrio.
Reajuste
10%
15%
25%
35%
50%

Categoria
A, C
B, D, E
F, L
G, H
I, J

1.9. Estruturas de Repetio


Em vrias situaes torna-se necessrio repetir a execuo de uma
rotina ou de uma parte do programa, por exemplo, para realizar o clculo
do preo final de uma compra, a partir do preo unitrio dos diversos
produtos adquiridos por uma pessoa. As estruturas de repetio,tambm
conhecidas como lao ou loop, so adotadas quando se deseja repetir
certo conjunto de instrues por um determinado nmero de vezes. O
nmero de repeties pode ser conhecido previamente ou no, mas
necessariamente precisa ser especificada uma condio que permita o
encerramento da estrutura de repetio, pois, caso contrrio, o programa
nunca chegar ao seu final.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

47

1.9.1. Enquanto
A estrutura enquanto consiste em uma estrutura de repetio com
o teste no incio, ou sejam neste tipo de estrutura a condio de repetio
verificada antes de entrar no bloco de comandos a serem repetidos.
Enquanto a condio for verdadeira o bloco ser repetido. Com o intuito
de ilustrar esse conceito, vamos considerar um programa no qual o
usurio precisa digitar cinco nmeros inteiros e, aps isso, o programa
dever mostrar a somatria dos valores fornecidos.
Utilizando fluxograma, uma das solues possveis para o problema
encontra-se ilustrada pela Figura 1.17.

Figura 1.17: Estrutura de repetio - enquanto


Atravs do Portugol podemos utilizar a estrutura de repetio
enquanto para repetir por cinco vezes a leitura de um nmero e acumular
o seu valor na varivel soma. Alm disso, devemos ter uma varivel que
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

48

registre a quantidade de repeties j ocorridas para que seja possvel, em


determinado momento, encerrar as repeties.

{ Portugol }
programa
{
funcao inicio()
{
inteiro cont, soma, num
cont = 1
soma = 0
enquanto (cont <= 5)
{
escreva ("Nmero: ")
leia (num)
soma = soma + num
cont = cont + 1
}
escreva ("A soma ", soma)
}
}
Como podemos observar no exemplo e do mesmo modo que j foi
explicado anteriormente, o conjunto de instrues a serem executadas
dentro de uma estrutura de repetio devem estar delimitadas por abrir e
fechar chaves {}, exceto quando apenas uma instruo deve ser repetida,
neste caso, o uso das chaves passa a ser opcional.

1.9.2. Faa enquanto


A estrutura faa enquanto uma estrutura de repetio com teste
no fim. Ela permite que um ou mais comandos sejam executados
enquanto a condio seja verdadeira. A estrutura muito parecida com
enquanto, porm a diferena bsica consiste no fato que quando
utilizamos faa o conjunto de comandos a serem repetidos ser executado
pelo menos uma vez, independente da condio, pois a verificao
realizada apenas no fim do bloco de instrues a serem repetidas, atravs
da instruo enquanto.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

49

Considerando o mesmo exemplo utilizado anteriormente, ou seja,


precisamos escrever um programa no qual o usurio precisa digitar cinco
nmeros inteiros e, aps isso, o programa dever mostrar a somatria dos
valores fornecidos. Inicialmente, vamos desenvolver o fluxograma da
soluo do problema (Figura 1.18). Observe, neste caso, que o teste da
condio (cont <= 5) realizado aps bloco de repetio.

Figura 1.18: Estrutura de repetio faa enquanto


Utilizando pseudolinguagem utilizaremos a estrutura de repetio
faa enquanto para desenvolver a soluo do problema:

{ Portugol }
programa
{
funcao inicio()
{
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

50

inteiro cont, soma, num


cont = 1
soma = 0
faca
{
escreva ("Nmero: ")
leia (num)
soma = soma + num
cont = cont + 1
} enquanto (cont <= 5)
escreva ("A soma ", soma)
}
}

1.9.3. Para
O terceiro tipo de estrutura de repetio aquela que utiliza uma
varivel para controle sendo, representada em Portugol, pelo comando
para. Neste tipo de estrutura a varivel de controle define exatamente o
nmero de vezes que um determinado conjunto de comandos dever ser
executado.
Com o intuito de ilustrar o uso do comando para vamos continuar a
utilizar o mesmo exemplo, ou seja, o usurio precisa digitar cinco nmeros
inteiros e, aps isso, o programa dever mostrar a somatria dos valores
fornecidos.
Na Figura 1.19 temos a soluo representada atravs de um
fluxograma observe que, neste caso, utilizaremos um hexgono para
representar a instruo para. Observe que dentro da instruo para
devemos especificar a varivel que ir atuar como contador, em seguida
temos o seu valor incial, o valor final e o passo (incremento).

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

51

Figura 1.19: Estrutura de repetio - para


A soluo, atravs do Portugol pode ser observada a seguir. Dentro
da instruo para iniciamos a varivel cont com 1. Em seguida, definimos a
condio para repetio que, neste exemplo, ser enquanto o valor da
cont for menor ou igual a cinco (cont <= 5). Se a condio for verdadeira o
bloco de comando repetido, caso contrrio o comando para
finalizado. Por ltimo realizado o incremento que, neste caso, cont =
cont + 1.

{ Portugol }
programa
{
funcao inicio()
{
inteiro cont, soma, num
soma = 0
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

52

para (cont = 1; cont <= 5; cont = cont + 1)


{
escreva ("Nmero: ")
leia (num)
soma = soma + num
}
escreva ("A soma ", soma)
}
}
Como inconveniente podemos observar que no bloco de montagem
repita no possvel controlar o passo, ou seja, ele sempre atuar cum
um passo igual a um. Desta forma, em situaes onde for necessrio atuar
com passos diferentes de um, utilize o bloco de montagem repita at
que ao invs do bloco repita.

Exerccios

Desenvolver as solues para os problemas a seguir utilizando fluxograma


e pseudolinguagem.
1) Escreva um programa que realize a exibio dos nmeros inteiros pares
entre 0 e 100.
2) Escreva um programa que realize a exibio, em ordem decrescente,
dos nmeros inteiros entre 0 e 200 e que tambm sejam mltiplos de 5.
3) Elaborar um programa que exiba os nmeros inteiros contidos em um
intervalo digitado pelo usurio.
4) Considerando uma moeda lanada 10 vezes, criar uma aplicao que
determine o nmero de ocorrncias de cada um dos lados.
5) Escrever um programa que mostre os nmeros mpares entre 101 e
121.
6) Elaborar uma rotina que mostre a tabuada de um determinado nmero
inteiro entre 1 e 10 fornecido pelo usurio.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

53

7) A partir de dois nmeros inteiros digitados pelo usurio escrever uma


rotina que mostre a mdia dos valores inteiros contidos no intervalo entre
esses dois nmeros.
8) Considerando 10 nmeros reais digitados pelo usurio, exibir o menor
deles.
9) Considerando 15 nmeros inteiros digitados pelo usurio, exibir o maior
deles.
10) Considerando 10 nmeros reais digitados pelo usurio, exibir o valor
da diferena entre o maior e o menor deles.
11) Determinada loja precisa digitar o nome e o preo dos seus produtos,
aps cada produto digitado dever ser realizada uma pergunta se deseja
digitar outro produto. Caso o usurio responda sim um novo produto
ser digitado, caso contrrio, o programa dever, antes de encerrar, exibir
o nome do produto mais caro.
12) Obter atravs de digitao 10 nmeros divisveis por 3, calcular a soma
entre eles e mostrar o resultado.
13) Considerando seis nmeros inteiros representando dois intervalos de
tempo (horas, minutos e segundos), elaborar uma rotina que calcule a
diferena de tempo entre os intervalos.
14) A partir de uma temperatura e opo de converso, fornecidas pelo
usurio, realize converso entre temperaturas conforme ilustrado pela
tabela a seguir. Aps cada converso o programa dever perguntar se o
usurio deseja realizar uma nova converso. Quando o usurio digitar
sim uma nova temperatura e opo de converso devero ser
solicitadas, caso contrrio, o programa dever ser encerrado.
De
Celsius

Para

Frmula

Fahrenheit F = C 1,8 + 32

Fahrenheit Celsius

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

C = (F 32) / 1,8

54

Celsius

Kelvin

K = C + 273,15

Kelvin

Celsius

C = K 273,15

Fahrenheit Kelvin
Kelvin

K = (F + 459,67) / 1,8

Fahrenheit F = K 1,8 - 459,67

15) Considerando um nmero inteiro digitado pelo usurio, calcular e


exibir o valor da sua fatorial.
16) Escrever um programa que mostre a soma dos nmeros mpares entre
51 e 91.
17) Desenvolver um programa que mostre a mdia dos nmeros pares
maiores que zero e menores que vinte.
18) Considerando os nmeros entre 40 e 80, elaborar uma rotina que
mostre a quantidade de nmeros neste intervalo que so mltiplos de 4.
19) Mostrar a quantidade de nmeros mltiplos de 7 que esto em um
intervalo fornecido pelo usurio.
20) Elaborar um programa que calcule e mostre os 6 primeiros nmeros
da Sequncia de Fibonacci, ou seja, 1, 2, 3, 5, 8 e 13.
21) Criar uma rotina que mostre a somatria dos 10 primeiros valores da
Sequncia de Fibonacci.
22) Desenvolver um programa que recebe um nmero inteiro, digitado
pelo usurio, e calcule o produto dos nmeros pares de 1 at o nmero
fornecido pelo usurio.
23) Considerando um nmero inteiro mpar, digitado pelo usurio, exiba
na tela um diamante, por exemplo, se o usurio digitou nove, devemos
obter a seguinte sada:
*
***
*****
*******
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

55

*********
*******
*****
***
*
24) Faa uma rotina que permita calcular o valor da associao em srie
de trs resistores R1, R2 e R3, que sero digitados pelo usurio. O
programa ficar solicitando os valores de R1, R2 e R3 e exibindo o
resultado at que o usurio digite um valor para R1, R2 ou R3 igual a zero.
O valor da associao em srie de trs resistores ser obtido atravs da
frmula: R = R1 + R2 + R3.
25) Faa uma rotina que permita calcular o valor da associao em
paralelo de dois resistores R1 e R2, que sero digitados pelo usurio e
consistem em nmeros reais positivos. O programa ficar solicitando os
valores de R1 e R2 e exibindo o resultado at que o usurio digite um
valor para R1 ou R2 igual a zero. O valor da associao em paralelo de dois
resistores ser obtido atravs da frmula: R = R1 x R2 / (R1 + R2).
26) Elabore um programa que determine quantos nmeros so mltiplos
de 2 e de 3 no intervalo entre 1 e 100.
27) Desenvolva uma rotina que apresente os valores de converso
degraus Celsius em Fahrenheit, de 10 em 10 graus, iniciando a contagem
em 0 Celsius e finalizando em 100 Celsius. A rotina dever exibir tanto o
valor em Celsius quanto em Fahrenheit e a seguinte frmula dever ser
adotada: F = C 1,8 + 32.
28) Desenvolver uma rotina que a partir de 10 letras digitadas pelo
usurio, determine e mostre a quantidade de vogais e tambm a
quantidade de consoantes.
29) Elaborar um programa que apresente a resoluo do seguinte
problema: Determinada loja precisa digitar o nome e o preo de 10
produtos. Aps a digitao dos 10 produtos o programa dever, antes de
encerrar, exibir o nome do produto mais caro.
30) Elaborar um programa que imprima a sequncia a seguir. Ou seja, para
um nmero inteiro n, digitado pelo usurio, exibir at a n-sima linha,
por exemplo:
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

56

1
2 2
3 3 3
4 4 4 4
...
n n n n n n ... n
31) Desenvolver um programa que sorteie um nmero aleatrio entre 0 e
500 e pergunte ao usurio qual o "nmero mgico". O programa dever
indicar se a tentativa efetuada pelo usurio maior ou menor que o
nmero mgico e contar o nmero de tentativas. Quando o usurio
acertar o nmero o programa dever mostrar uma mensagem,
classificando o usurio como:
De 1 a 3 tentativas: muito sortudo;
De 4 a 6 tentativas: sortudo;
De 7 a 10 tentativas: normal;
10 tentativas: tente novamente.
32) Desenvolver uma rotina que a partir de um caractere e uma
determinada quantidade de linhas e colunas, todos fornecidos pelo
usurio, realize a repetio do respectivo carectere na quantidade de
linhas e colunas que foram digitadas. Por exemplo:
Entrada:
Linhas? 3
Colunas? 5
Caractere? X
Sada:
XXXXX
XXXXX
XXXXX
33) Elaborar um programa que a partir de uma determinada quantidade
de linhas e colunas digitadas pelo usurio exiba um retngulo, por
exemplo:
Entrada:
Linhas? 4
Colunas? 6
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

57

Sada:
+----+
|
|
|
|
+----+

1.10. Vetores e Matrizes


At o momento utilizamos variveis que permitem o
armazenamento de apenas um valor por vez, quando um novo valor
atribudo o anterior apagado. Porm, h casos, em que se torna
necessrio armazenar um conjunto de valores.
Os vetores podem ser entendidos como uma lista de elementos de
um mesmo tipo de dados e que exploram a contiguidade da memria.
Desta forma, qualquer elemento dessa lista pode ser acessado
instantaneamente atravs de um ndice. Quando os vetores possuem mais
de uma dimenso os mesmos se tornam matrizes.
Considerando uma situao em que necessrio armazenar cinco
nmeros inteiros, possvel observar que o vetor v, mostrado na Figura
1.20, ir conter um conjunto de valores, onde cada valor pode ser
individualmente acessado atravs de um ndice:

Figura 1.20: Exemplo de vetor


Desta forma, neste primeiro exemplo, temos que o primeiro
elemento do vetor encontra-se referenciado pelo ndice zero (0) e todos os
demais elementos apresentam-se nas posies subsequentes. Dentro
deste conceito, para determinar o valor do terceiro elemento do vetor,
utilizaremos a notao v[2] o que nos retornar o valor 5.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

58

As prximas abordagens utilizam-se do conceito de contiguidade


para determinar qualquer posio dentro do vetor a partir de uma
determinada posio relativa, como podemos observar na Figura 1.21.

Figura 1.21: Conceito de contiguidade


Considerando a ndice de inicial do vetor como i, qualquer elemento
pode ser acessado atravs da frmula i + n, onde n possui o nmero de
posies que o elemento est distante de i. Por exemplo, i + 1 far com
que o elemento de valor 4 seja acessado.

Figura 1.22: Acesso a partir da posio final


Por outro lado, como mostrado na Figura 1.22, possvel tambm
fazer o caminho inverso. Neste caso a partir de uma posio final
possvel determinar as demais posies.
O vetor utilizado acima poderia ser declarado em pseudocdigo da
seguinte maneira:

{ Portugol }
inteiro vetor[5]
Enquanto que a atribuio dos valores devem sempre conter o
ndice da posio que ir receber o valor, ou seja:

{ Portugol }
vetor[0]
vetor[1]
vetor[2]
vetor[3]

=
=
=
=

8
4
5
7

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

59

vetor[4] = 1
As estruturas de repetio, em especial, o para so ideais para
percorrer os vetores, por exemplo, para exibir os valores armazenados no
vetor podemos utilizar o seguinte pseudocdigo.

{ Portugol }
para (inteiro i = 0; i < 5; i = i + 1)
{
escreva (vetor[i])
}
Desta forma, no programa a seguir podemos unir todos os conceitos
sobre vetores que explicamos at o presente momento. Neste caso, o
vetor declarado, em seguida, os valores so atribudos a cada um dos
elementos e, ao final, utilizamos a funo escreva, dentro da estrutura de
repetio para, que ir exibir os valores armazenados.

{ Portugol }
programa
{
funcao inicio()
{
inteiro vetor[5]
vetor[0]
vetor[1]
vetor[2]
vetor[3]
vetor[4]

=
=
=
=
=

8
4
5
7
1

para (inteiro i = 0; i < 5; i = i + 1)


{
escreva (vetor[i], ", ")
}
}
}

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

60

De maneira alternativa podemos inicializar os itens do vetor no


momento da sua declarao, desta fora, o exemplo que acabamos de
desenvolver poderia ser reescrito da seguinte forma:

{ Portugol }
programa
{
funcao inicio()
{
inteiro vetor[5] = {8, 4, 5, 7, 1}
para (inteiro i = 0; i < 5; i = i + 1)
{
escreva (vetor[i], ", ")
}
}
}
No prximo exemplo a ser desenvolvido, vamos considerar uma
situao na qual precisamos determinar e, em seguida, exibir o valor da
mdia de cinco nmeros reais digitados pelo usurio. Na Figura 1.23
podemos observar um fluxograma contendo uma das resolues possveis
do problema.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

61

Figura 1.23: Clculo da mdia


Em Portugol podemos apresentar a seguinte soluo, sendo
importante observar a declarao do vetor v e tambm o uso de uma
estrutura de repetio para obter os valores de cada item do vetor e, em
seguida, utilizar o valor armazenado para acumular na varivel soma.
Ao trmino do para a mdia calculada e exibida.

{ Portugol }
programa
{
funcao inicio()
{
real v[5], soma, media
soma = 0.0
para (inteiro i = 0; i < 5; i = i + 1)
{
escreva ("Nmero: ")
leia (v[i])
soma = soma + v[i]
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

62

}
media = soma / 5
escreva ("A mdia ", media)
}
}
Estruturas que necessitam de mais que um ndice para identificar os
itens armazenados so conhecidas por matrizes. Ento, uma matriz possui
n dimenses, onde n consiste em um valor maior do que um. Como
exemplo podemos citar uma matriz com dimenso 2, ou seja, uma matriz
que utiliza dois ndices para identificar um elemento. Desta forma, no
exemplo a seguir, as variveis i e j correspondem aos ndices da matriz
nota sendo necessria a utilizao de dois laos para acessar todos os
elementos da matriz.

{ Portugol }
programa
{
funcao inicio()
{
real nota[3][2]
para (inteiro i = 0; i < 3; i++)
{
para (inteiro j = 0; j < 2; j++)
{
escreva ("Elemento ", i, ", ", j, ": ")
leia (nota[i][j])
}
}
}
}
Vamos ilustrar esse conceito a partir de um problema no qual
necessrio armazenar um conjunto de notas de alunos de uma
determinada turma com 10 alunos, na qual, cada aluno possui duas notas.
Em seguida, o programa dever calcular e exibir a mdia final de cada um
dos alunos indicando, caso a mdia seja menor que 6,0 (seis) que o aluno
est reprovado, caso contrrio, deveremos mostrar como aprovado.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

63

Na Figura 1.24 podemos observar o fluxograma contendo uma das


solues possveis para o problema.

Figura 1.24: Clculo da mdia final dos alunos


Utilizando pseudolinguagem o problema poderia ser resolvido da
seguinte maneira:

{ Portugol }
programa
{
funcao inicio()
{
real nota[10][2], media
para (inteiro i = 0; i < 10; i = i + 1)
{
para (inteiro j = 0; j < 2; j = j + 1)
{
escreva ("Aluno ", (i + 1), " - Nota ", (j +
1), ": ")
leia (nota[i][j])
}
}
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

64

para (inteiro i = 0; i < 10; i = i + 1)


{
media = (nota[i][0] + nota[i][1]) / 2
se (media < 6)
escreva("Aluno ", i, " - mdia: ", media, " reprovado\n")
senao
escreva("Aluno ", i, " - mdia: ", media, " aprovado\n")
}
}
}
Observe no trecho de programa a seguir que a entrada de dados
utilizar duas estruturas de repetio. A primeira estrutura de repetio,
que utiliza a varivel i, ser responsvel por identificar cada aluno,
enquanto a segunda estrutura de repetio, que utiliza a varivel j,
indicar a nota, ou seja:

{ Portugol }
para (inteiro i = 0; i < 10; i = i + 1)
{
para (inteiro j = 0; j < 2; j = j + 1)
{
escreva ("Aluno ", (i+1), " - Nota ", (j+1), ": ")
leia (nota[i][j])
}
}
Depois, com o intuito de determinar a mdia de cada aluno, iremos
utilizar um lao que ir acessar os dez alunos, realizar o calculo e verificar
a sua situao: aprovado ou reprovado, conforme podemos notar no
trecho de programa mostrado a seguir.

{ Portugol }
para (inteiro i = 0; i < 10; i = i + 1)
{
media = (nota[i][0] + nota[i][1]) / 2
se (media < 6)

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

65

escreva("Aluno ", i, " - mdia: ", media, " reprovado\n")


senao
escreva("Aluno ", i, " - mdia: ", media, " aprovado\n")
}

Exerccios

Desenvolver as solues para os problemas a seguir utilizando fluxograma


e pseudolinguagem.
1) Dada uma sequncia de 10 nmeros inteiros, imprimi-la na ordem
inversa da leitura.
2) Considerando 5 nmeros reais digitados pelo usurio e armazenados
em um vetor, a exibir o valor da somatria dos mesmos.
3) Deseja-se determinar o nmero de acertos de um aluno em uma prova
em forma de testes. A prova consta de 25 questes, cada uma com
alternativas identificadas por A, B, C, D e E. Para determinar os acertos,
esta prova dever ser comparada ao seguinte gabarito: B, C, A, D, B, B, E, C,
A, B, D, A, A, A, A, B, D, C, E, E, A, C, E, D, B.
4) Um dado de jogo foi lanado 20 vezes. A partir dos resultados dos
lanamentos, determinar o nmero de ocorrncias de cada face.
5) Dados dois vetores A e B, ambos com 5 elementos, determinar o
produto desses vetores.
6) Dado um vetor de 10 nmeros inteiros, determinar o nmero de vezes
que cada um deles ocorre no mesmo. Por exemplo, o vetor = [7, 3, 9, 5, 9,
7, 2, 7, 7, 2], produziria a seguinte sada: 7 ocorre 4 vezes, 3 ocorre 1 vez, 9
ocorre 2 vezes, 5 ocorre 1 vez e 2 ocorre 2 vezes.
7) Em uma classe h 10 alunos, cada um dos quais realizou 3 provas com
pesos distintos. Sendo que a primeira prova possui peso 3, a segunda

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

66

possui peso 4 e a terceira peso 3. Aps o lanamento das notas, calcular a


mdia ponderada para cada um dos alunos.
8) Dada uma sequncia de 5 nmeros inteiros digitados pelo usurio,
determinar e exibir a mdia.
9) Dada uma matriz real A[4x3], verificar se existem elementos repetidos
em A.
10) Implemente o tradicional jogo da velha a partir de uma matriz 3 por 3.
Sendo que a matriz deve representar os seguintes valores possveis: O, X e
nulo (vazio).
11) Considerando o vetor A com tamanho 10 e os valores 4, 7, 2, 5; e o
vetor B com tamanho 3 e os valores 3, 2, 1. Escrever uma funo que insira
os elementos do vetor B ao final do vetor A.
12) Considerando um vetor contendo, no mximo, 12 nmeros reais
digitados pelo usurio. Elaborar uma rotina que mostre o maior nmero
armazenado no vetor.
13) Representar em uma matriz e, em seguida, exibir na tela o seguinte
estado de um jogo da velha:
O
X

X
O
O

14) Desenvolver um algoritmo que efetue a leitura de dez nmeros


inteiros e os armazene no vetor A. Em seguida o vetor B do mesmo
tipo de dados, dever ser carregado observando a seguinte regra: se o
valor do ndice for par o valor do elemento dever ser multiplicado por 5,
caso contrrio, dever ser somado com 5. Ao final, o programa dever
mostrar os valores armazenados nos dois vetores.
15) Armazenar em um vetor os primeiros 20 nmeros inteiros positivos
que so mltiplos de 5.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

67

16) Considerando um vetor de 500 nmeros inteiros, carregado


randomicamente com valores entre 1 e 1000, calcular e exibir o valor da
mdia dos elementos armazenados no vetor.
17) Considerando um vetor de 200 nmeros inteiros, carregado
randomicamente com valores entre 1 e 100. Exbir apenas o valores
armazenados no vetor que sejam mltiplos de 4.

1.11. Funes
Na medida em que os programas vo se tornando mais complexos,
torna-se necessrio estruturar o cdigo em partes menores com
funcionalidades especificas. Desta forma, as funes podem ser definidas
como sub-rotinas que executam uma tarefa particular dentro do
programa. Outra vantagem da utilizao das funes consiste em permitir
a reutilizao de parte do programa, evitando assim que um mesmo
trecho do cdigo tenha que ser escrito vrias vezes.
Vamos considerar uma aplicao que implemente uma calculadora
simples, na qual o usurio ir escolher qual das quatro operaes
aritmticas bsicas ser realizada. Em seguida, o programa realizar a
leitura de dois nmeros reais e exibir o resultado da operao escolhida.

Figura 1.25: Modularizao de programas


Conforme mostrado na Figura 1.25, aplicando o conceito de
funes, o programa pode ser modularizado em rotinas especficas para
cada uma das operaes desejadas, deixando na rotina principal apenas
um menu para o usurio escolher a operao desejada.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

68

1.11.1. Funes sem retorno (ou procedimentos)


Inicialmente devemos realizar a especificao das funes. A partir
do momento que um projeto segue os conceitos de modularizao um
novo fluxograma deve ser definido para uma das funes. Aplicando estes
conceitos e conforme ilustrado na Figura 1.26, vamos elaborar o
fluxograma da funo somar. Observe que o smbolo de incio ir receber
no nome da funo, ou seja, somar. Por outro lado, o smbolo de fim ser
identificado como retornar, indicando o trmino da funo, sendo que a
partir deste momento a execuo continua na rotina que fez a chamada
da funo.

Figura 1.26: Funo para somar dois nmeros


Ser solicitada ao usurio a entrada de dados que, por sua vez,
sero atribudos a duas variveis reais, em seguida, a soma ser realizada
e armazenada na varivel resultado. Concluindo a funo, o valor da
operao realizada ser exibido. Na implementao em Portugol,
mostrada a seguir, observe que esta funo foi declarada com a palavra
reservada vazio, indicando que a mesma realizar o processamento,
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

69

porm no retornar um valor funo que a chamou que, no nosso


exemplo, a funo inicio. Tambm importante salientar que as funes
devem ser declaradas dentro da instruo programa.

{ Portugol }
funcao vazio somar()
{
real valor1, valor2, resultado
escreva ("Valor 1:
leia (valor1)
escreva ("Valor 2:
leia (valor2)
resultado = valor1
escreva ("Soma: ",

")
")
+ valor2
resultado)

}
Em seguida, devemos realizar a declarao das outras funes que
sero utilizadas no exemplo, ou seja, subtrair, multiplicar e dividir. Neste
caso, vamos apenas especificar a sua estrutura sem nos preocuparmos
com a implementao em si, a qual poder ser realizada posteriormente.

{ Portugol }
funcao vazio subtrair()
{
// Realizar a subtrao de dois nmeros reais
}
funcao vazio multiplicar()
{
// Realizar a multiplicao de dois nmeros reais
}
funcao vazio dividir()
{
// Realizar a diviso de dois nmeros reais
}

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

70

Aps a definio das funes, agora podemos construir o


fluxograma do programa principal (Figura 1.27), o qual ser responsvel
pela chamada das funes que definimos anteriormente.

Figura 1.27: Programa modularizado


No cdigo-fonte a seguir podemos visualizar como o programa
principal poderia ser representado atravs de pseudolinguagem
(Portugol). Observe a utilizao das estruturas faa enquanto e se para
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

71

implementar o menu da aplicao, na qual cada funo ser chamada a


partir da respectiva opo escolhida pelo usurio.

{ Portugol }
programa
{
funcao inicio()
{
inteiro opcao
faca
{
escreva ("\nDigite 1. Somar, 2.
Multiplicar, 4. Dividir ou 0. Sair ? ")
leia (opcao)

Subtrair,

3.

se (opcao == 1)
somar()
senao
se (opcao == 2)
subtrair()
senao
se (opcao == 3)
multiplicar()
senao
se (opcao == 4)
dividir()
} enquanto (opcao != 0)
}
}

1.11.2 Funes com retorno


As funes tambm podem ser utilizadas retornando valores, neste
caso elas podem ser utilizadas em expresses, como se fossem
identificadores, ou seja, uma funo retorna um valor de um determinado
tipo de dados.
Ilustrando este conceito, vamos considerar um problema que
consiste em realizar o clculo da fatorial de um nmero inteiro a ser
digitado pelo usurio. O desenvolvimento do fluxograma ir aplicar o
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

72

conceito de modularizao, desta forma, na Figura 1.28 iremos mostrar o


programa principal.

Figura 1.28: Clculo da fatorial


Em seguida, na Figura 1.29, apresentamos o fluxograma da funo
que ir implementar a lgica para a resoluo da fatorial.

Figura 1.29: Funo para resolver uma fatorial


Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

73

A seguir temos a soluo completa do problema implementada em


Portugol:

{ Portugol }
programa
{
funcao inteiro fatorial (inteiro n)
{
inteiro r = n
para (inteiro i = 1; i <= (n 1); i = i + 1)
{
r = r * i
}
retorne (r)
}
funcao inicio()
{
inteiro valor, resultado
escreva ("Digite um nmero: ")
leia (valor)
resultado = fatorial(valor)
escreva ("Fatorial: ", resultado)
}
}

1.11.3. Escopo das variveis


A partir do momento que comeamos a modularizar os programas
torna-se necessrio entender a definio de escopo das variveis. O
conceito de escopo define o ciclo de vida das variveis utilizadas no
programa e nos procedimentos e funes. As variveis globais so
declaradas no algoritmo principal e so acessveis por todos os algoritmos
hierarquicamente inferiores. A seguir temos o algoritmo da calculadora
simples, j desenvolvido anteriormente, porm agora utilizando o
conceito de varivel global. Observe que as variveis valor1, valor2 e
resultado encontram-se declaradas no programa principal estando,
desta forma, disponveis para todas as funes do programa, ou seja,
inicio, somar, subtrair, multiplicar e dividir.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

74

{ Portugol }
programa
{
inteiro opcao
real valor1, valor2, resultado
funcao vazio somar()
{
escreva ("Valor 1:
leia (valor1)
escreva ("Valor 2:
leia (valor2)
resultado = valor1
escreva ("Soma: ",
}

")
")
+ valor2
resultado)

funcao vazio subtrair()


{
// Realizar a subtrao de dois nmeros reais
}
funcao vazio multiplicar()
{
// Realizar a multiplicao de dois nmeros reais
}
funcao vazio dividir()
{
// Realizar a diviso de dois nmeros reais
}
funcao inicio()
{
faca
{
escreva ("Digite 1. Somar, 2.
Multiplicar, 4. Dividir ou 0. Sair ? ")
leia (opcao)
se (opcao == 1)
somar()
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

Subtrair,

3.

75

senao
se (opcao == 2)
subtrair()
senao
se (opcao == 3)
multiplicar()
senao
se (opcao == 4)
dividir()
} enquanto (opcao != 0)
}
}
Por outro lado, as variveis locais so aquelas declaradas dentro de
um procedimento ou funo e so acessveis exclusivamente dentro do
respectivo procedimento ou funo. No exemplo a seguir, as variveis
encontram-se declaradas na funo somar, deste modo, apenas existiram
durante a execuo da funo e tambm no so acessveis pelo
programa principal ou por qualquer outra funo do programa.

{ Portugol }
funcao vazio somar()
{
real valor1, valor2, resultado
escreva ("Valor 1:
leia (valor1)
escreva ("Valor 2:
leia (valor2)
resultado = valor1
escreva ("Soma: ",

")
")
+ valor2
resultado)

Exerccios

Desenvolver as solues para os problemas a seguir utilizando fluxograma


e Portugol.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

76

1) Termine o exemplo da calculadora simples, desenvolvendo os


procedimentos que faltam: Subtrair, Multiplicar e Dividir.
2) Acrescentar ao exemplo da calculadora simples um procedimento para
calcular o quadrado de um nmero real digitado pelo usurio.
3) Considerando o problema de converso de temperatura j
apresentando anteriormente, resolv-lo aplicando o conceito de
procedimentos. A partir de uma temperatura e opo de converso
fornecidas pelo usurio, realize converso entre temperaturas conforme
ilustrado pela tabela a seguir. Aps cada converso o programa dever
perguntar se o usurio deseja realizar uma nova converso. Quando o
usurio digitar sim uma nova temperatura e a opo de converso
devero ser solicitadas, caso contrrio, o programa dever ser encerrado.
De
Celsius

Para

Frmula

Fahrenheit F = C 1,8 + 32

Fahrenheit Celsius

C = (F 32) / 1,8

Celsius

Kelvin

K = C + 273,15

Kelvin

Celsius

C = K 273,15

Fahrenheit Kelvin
Kelvin

K = (F + 459,67) / 1,8

Fahrenheit F = K 1,8 - 459,67

1.12. Estruturas, Registros e Campos


Os vetores e as matrizes, abordados anteriormente, permitem
expressar o conceito de colees em uma linguagem de programao.
Porm, exigem que todos os seus elementos possuam um mesmo tipo de
dados, mas, em algumas situaes, torna-se necessrio representar
colees nas quais temos tipos de dados diferentes.
Por outro lado, no mundo real, frequentemente torna-se necessrio
representar e relacionar vrios conjuntos de dados. Por exemplo, um
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

77

cliente de uma loja possui como atributos que o caracteriza o nome,


endereo e o telefone. Porm, os clientes de uma determinada loja so
muitos e no apenas um. Neste contexto, temos o conceito de estruturas
que pode ser entendido como a definio de um conjunto de atributos,
conhecidos como campos, que juntos iro caracterizar cada um dos itens
do conjunto de dados. Desta forma, podemos criar um vetor a partir de
uma estrutura o que permitir a representao de um conjunto de dados.
Cada item desta coleo chamado de registro.
Como exemplo, imagine um conjunto de informaes de produtos
conforme mostrado na tabela a seguir:
Cdigo

Descrio

11

Televisor

12

Rdio

14

Notebook

15

Bluray Player

Preo
1.900,00
90,00
2.380,00
500,00

Neste caso, devemos criar uma estrutura que permita representar


os dados que definem um produto, ou seja, neste exemplo, cdigo
descrio e preo. Em seguida, devemos declarar um vetor a partir da
estrutura que foi definida conforme podemos observar no cdigo-fonte a
seguir.

IMPORTANTE: At a data de concluso desta apostila o


programa Portugol Studio no implementava a
funcionalidade de estruturas, registros e campos. Desta
forma, os exemplos neste tpico so conceituais e esto
desenvolvidos para fins exclusivamente didticos com o
intuito de ilustrar os conceitos abordados. No funcionaro
se implementados no Portugol Studio.

{ Portugol }
programa
{
const inteiro MAX = 10
estrutura produto
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

78

{
inteiro codigo
cadeia descricao
real preco
}
estrutura produto prod[MAX]
funcao inicio()
{
}
}
importante observar que um item do vetor representa o conjunto
de caractersticas de um nico produto. Tambm sabemos que os dados se
referem a um mesmo produto, pois o ndice o mesmo. Neste mesmo
exemplo, tambm declararmos uma constante que ir determinar o
tamanho mximo do vetor.
Ou seja, nesta estrutura que definimos temos o armazenamento de
at 10 produtos contendo, cada um deles, o cdigo, a descrio e o preo,
por exemplo, o primeiro item da tabela seria armazenado do seguinte
modo:

{ Portugol }
prod[0].codigo = 10
prod[0].descricao = "Televisor"
prod[0].preco = 1900.00
Observe que agora sempre que precisamos acessar a estrutura de
vetores precisamos referenciar o ndice do produto. Desta maneira, a
entrada de dados, neste tipo de exemplo, pode ser realizada atravs de
um lao.

{ Portugol }
funcao vazio entrada()
{
para (inteiro i = 0;
{
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

i < MAX; i = i + 1)

79

escreva ("Cdigo: ")


leia (prod[i].codigo)
escreva ("Descrio: ")
leia (prod[i].descricao)
escreva ("Preo: ")
leia (prod[i].preco)
}
}
A exibio dos dados dos produtos tambm pode ser realizada
atravs de uma estrutura de repetio que ir percorrer cada elemento
armazenado no vetor, conforme mostrado a seguir.

{ Portugol }
funcao vazio saida()
{
para (inteiro i = 0; i < MAX; i = i + 1)
{
escreva ("Cdigo: ", prod[i].codigo)
escreva ("Descrio: ", prod[i].descricao)
escreva ("Preo: ", prod[i].preco)
}
}

Exerccios

Desenvolver as solues para os problemas a seguir.


1) A partir da estrutura de vetores definida anteriormente, exibir apenas
os elementos cadastrados no qual a descrio do produto inicia-se com a
letra 'R';
2) A partir da estrutura de vetores definida anteriormente, procurar e
exibir a descrio do produto mais caro que est armazenado nos vetores.
3) Considere a seguinte agenda de telefones, desenvolva uma estrutura
que permita a sua representao, levando em conta o cadastro de, no
mximo, 100 pessoas:
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

80

Nome

DDD

Telefone

Joo

11

3453-3455

Maria

19

3223-2545

Ana

11

45222300

Jos

15

45343422

Cristina

11

4523-2323

4) Utilizando a estrutura da agenda telefnica, elaborar uma rotina que a


partir de um nome digitado pelo usurio mostre o DDD e o telefone da
pessoa;
5) Utilizando a estrutura da agenda telefnica, escrever uma rotina que
mostre quantidade de pessoas cadastradas na agenda que possuem o DDD
igual a 11.
6) Definir uma estrutura que permita armazenar o nome e as notas de
alunos de uma determinada turma com 10 alunos, na qual, cada aluno
possui duas notas. Em seguida, o programa dever calcular e exibir o
nome, a mdia final de cada um dos alunos indicando, caso a mdia seja
menor que 6,0 (seis) que o aluno est reprovado, caso contrrio,
deveremos mostrar como aprovado.
7) Criar um programa que a partir de uma relao de 100 veculos
contendo modelo, ano de fabricao e cor, exiba quantos so da cor azul.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

81

1.13. Linguagens de Programao


Conforme j mencionado anteriormente e ilustrado novamente na
Figura 1.30, a soluo computacional de um determinado problema passa
por duas etapas distintas que so a soluo algortmica, que foi o assunto
abordado nesta obra at este momento, e o programa de computador,
assunto que passaremos a discutir a partir deste tpico, com foco na
utilizao das linguagens de programao C, Java, C# e Phyton.

Figura 1.30: Resoluo de problemas atravs do computador


A elaborao de programas de computador nem sempre foi um
tarefa simples. Nos primeiros computadores (dcadas de 1940 e 1950) a
tarefa de programao exigia profundos conhecimentos dos circuitos
eletrnicos do equipamento utilizado, alm disso, os programas escritos
eram exclusivos para determinado equipamento. Neste contexto, eram
utilizadas as linguagens de programao de baixo nvel, tambm
conhecidas como linguagem de montagem ou Assembly.
Com o intuito de ilustrar a estrutura sinttica e semntica das
linguagens de programao vamos tomar, como exemplo, uma aplicao
extremamente simples que consiste apenas em exibir o texto Ol
Pessoal! e implement-la utlilizando vrias linguagens existentes.
Inicialmente vamos adotar as ferramentas que j abordamos, desta forma,
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

82

utilizando um fluxograma poderamos representar o programa proposto


da maneira ilustrada na Figura 1.31.

Figura 1.31: Representao atravs de fluxograma


Em pseudolinguagem (Portugol) teramos o seguinte cdigo-fonte:

{ Portugol }
programa
{
funcao inicio()
{
escreva ("Ol Pessoal!")
}
}
Enquanto, atravs de Scratch utilizaramos os seguintes blocos de
montagem para implementar a soluo para o problema (Figura 1.32).

Figura 1.32: Soluo em Scratch


Agora vamos passar para o desenvolvimento deste pequeno
programa em algumas linguagens de programao. A seguir podemos
visualizar como o programa seria implementado utilizando uma
linguagem de programao de baixo nvel, neste caso, a linguagem
Assembly para a arquitetura Intel/AMD x86 de 16 bits.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

83

org 100h
mov dx,msg
mov ah,9
int 21h
mov ah,4Ch
int 21h
msg db 'Ola Pessoal!',0Dh,0Ah,'$'
Nas dcadas seguintes, com a evoluo e barateamento dos
componentes eletrnicos dos computadores, comeam a surgir linguagens
que passam a apresentar instrues independentes do hardware. Estas
linguagens chamadas de linguagens programao de alto nvel
apresentam, como instrues, palavras utilizadas em lnguas faladas,
normalmente o ingls. A criao de programas de computador torna-se
mais acessvel e no mais necessrio o conhecimento de eletrnica. As
linguagens de programao como Pascal, Cobol, C e Java dentre muitas
outras podem ser citadas como exemplos de linguagens de programao
de alto nvel. A seguir temos o programa desenvolvido em Cobol, observe
uma peculiaridade desta linguagem, onde os comandos devem ser
especificados a partir da oitava coluna, ou seja, necessrio digitar sete
espaos em branco antes de comearmos a escrever um comando.

IDENTIFICATION DIVISION.
PROGRAM-ID. Ola.
PROCEDURE DIVISION.
DISPLAY "Ol Pessoal!".
STOP RUN.
No exemplo a seguir temos o mesmo programa que foi apresentado
anteriormente, porm agora desenvolvido na Linguagem de Programao
C.
#include <stdio.h>
int main ()
{
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

84

printf (Ol Pessoal!\n);


return 0;
}
Neste momento tambm importante observarmos que as
instrues de um programa escrito, em uma linguagem de programao
de alto nvel, no so reconhecidas pelo hardware do computador. Desta
forma, torna-se necessrio passar por um processo de traduo dessas
instrues para um conjunto de instrues, que so efetivamente
reconhecidas pelo hardware, este processo denomina-se compilao. Ou
seja, considerando o exemplo acima em Linguagem C, o mesmo dever
ser compilado para dar origem a um programa de computador o qual
poder ser executado pelo computador, conforme podemos observar na
Figura 1.33.

Figura 1.33: Processo de compilao


Uma caracterstica deste tipo de linguagem de programao gerar
um programa executvel que dependente de plataforma, ou seja, o
programa apenas pode ser executado na arquitetura de hardware e no
sistema operacional no qual foi compilado.
Considerando o exemplo anterior, poderamos ter o mesmo
programa desenvolvido utilizando a linguagem de programao Java:

Java
public class Exemplo
{
public static void main (String args[])
{
System.out.println (Ol Pessoal!);
}
}
A linguagem de programao Java apresenta uma abordagem
independente de plataforma (Figura 1.34), na qual aps a compilao do
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

85

cdigo-fonte so gerados bytecodes, que consiste em um conjunto de


instrues intermedirias entre a linguagem de programao e as
instrues em cdigo de mquina. Os bytecodes so similares a cdigo de
mquina, entretanto, no so especficos para um tipo particular de
arquitetura de computador, de forma que programas em Java podem ser
executados em arquiteturas distintas sem a necessidade de serem
recompilados.

Figura 1.34: Desenvolvimento e execuo de aplicaes em Java

No momento da execuo da aplicao os bytecodes so


convertidos pela Java Virtual Machine (JVM) em cdigo de mquina.
Desta forma, os bytecodes podem ser executados em qualquer plataforma
ou Sistema Operacional que possua uma JVM suportada.
A tecnologia .Net da Microsoft, tambm abordada nesta obra
atravs da linguagem de programao C#, tambm independente de
plataforma. Na Figura 1.35 podemos observar o desenvolvimento e
execuo de um programa em C# (.Net).

Figura 1.35: Desenvolvimento e execuo de aplicaes em C# (.Net)


O programa compilado gerando um cdigo intermedirio em uma
linguagem chamada MSIL (Microsoft Intermediate Language) a qual
executada pelo .Net Framework. Desta forma, qualquer plataforma que
possua uma implementao do framework pode executar o programa
criado. A seguir temos um exemplo de programa em C#.

namespace Exemplo
{
class Program
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira

86

{
static void Main(string[] args)
{
Console.WriteLine("Ol Pessoal!");
Console.ReadKey();
}
}
}
Outra categoria de linguagens de programao so as interpretadas.
Neste caso, o cdigo-fonte enviado diretamente a um programa
chamado interpretador que, em tempo de execuo, converte as
instrues em linguagem de mquina e envia ao sistema operacional. A
linguagem de programao Python, tambm abordada nesta obra, um
exemplo de linguagem interpretada e a seguir podemos ver um programa
bem simples que exibe um texto.

print ("Ol Pessoal!")


Note a simplicidade quando comparado ao mesmo exemplo j
apresentado nas outras linguagem.

Referncias
Oliveira, C.; Lhmann, A. Aprenda Lgica de Programao e Algoritmos
com implementaes em Portugol, Scratch, C, Java, C# e Python. Rio de
Janeiro: Editora Cincia Moderna, 2016*.
Ascencio, A.; Campos, E. Fundamentos da Programao
Computadores: algoritmos, Pascal e C/C++ e Java. Longman, 2007.

de

Forbellone, A.; Ebersptcher, H. Lgica de programao: a construo de


algoritmos e estruturas de dados. 3 ed. So Paulo: Pearson Prentice
Hall, 2005.
* Previso de lanamento. Livro em processo de diagramao e edio.

Lgica de Programao e Algoritmos


Prof. Cludio Lus V. Oliveira

87