Eduardo Gondo
2015
Sum
ario
1 Introduc
ao
11
1.1
Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2
1.3
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2 Estrutura de selec
ao ou decis
ao
25
2.1
2.2
Expressao logica . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3 Estruturas de repetic
ao
49
3.1
while (enquanto) . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.2
do/while (repita/ate) . . . . . . . . . . . . . . . . . . . . . . . 62
3.3
for (para) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.4
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4 Vetor
73
4.1
4.2
A Correc
ao dos exerccios da Introduc
ao
3
87
4
B Correc
ao dos exerccios do Capitulo 2
SUMARIO
95
Lista de Figuras
1.1
. . . 12
1.2
1.3
1.4
Estrutura de um algoritmo . . . . . . . . . . . . . . . . . . . . 16
1.5
1.6
1.7
2.1
Comando se em VisuAlg . . . . . . . . . . . . . . . . . . . . . 26
2.2
Comando if em Java . . . . . . . . . . . . . . . . . . . . . . . 26
2.3
2.4
2.5
2.6
2.7
2.8
2.9
LISTA DE FIGURAS
3.1
3.2
3.3
3.4
3.5
Separando o u
ltimo dgito do RM . . . . . . . . . . . . . . . . 55
3.6
Separando os dois u
ltimos dgitos do RM . . . . . . . . . . . . 56
3.7
3.8
3.9
Calculando md(24,15) . . . . . . . . . . . . . . . . . . . . . . 59
4.2
4.3
4.4
4.5
4.6
Lista de Tabelas
2.1
2.2
Operadores relacionais . . . . . . . . . . . . . . . . . . . . . . 36
2.3
Tabela Verdade . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.4
4.1
LISTA DE TABELAS
Resumo
Este documento destina-se a servir como material de auxlio `a disciplina
funde Algoritmos do curso Tecnologia de Desenvolvimento de Sistemas. E
damental sua leitura assim como assistir as aulas e, principalmente, fazer os
exerccios propostos.
Algoritmos e raciocnio logico sao fundamentais para aprender a programar e, na minha opiniao, a programacao esta para o profissional de computacao assim como assentar tijolos esta para o pedreiro. Claro que voce
pode nao trabalhar com programacao ou nao gostar de programar mas voce
tem que saber programar1 .
Boa jornada a Todos nesse ano!
10
LISTA DE TABELAS
Captulo 1
Introduc
ao
A medida que a Humanidade foi evoluindo, houve a necessidade de realizar milhares de operacoes matematicas com precisao e rapidez. Algumas situacoes que esses calculos foram necessarios: navegacao martima, maquinas
a vapor, censo demografico1 , sistema financeiro, decifrar mensagens criptografadas entre outras. Para ajudar o Homem nessas situacoes, algumas
coisasforam criadas: abaco, tabela de logaritmos, calculadora mecanica
ate chegar no computador.
Um dos primeiros computadores, o ENIAC, realizava em 1 segundo: 5000
somas, 357 multiplicacoes ou 38 divisoes. Ele foi construdo com o objetivo
de efetuar calculos balsticos para a Marinha Americana na epoca da 2a
Grande Guerra. Existiu outro computador, o Colossus, que foi construdo
na Inglaterra tambem na epoca da 2a Guerra que decifrava as mensagens
alemas criptografadas pela Enigma. Um dos responsaveis pelo projeto do
Colossus foi o matematico e criptoanalista Alan Turing que e considerado o
Pai da Ciencia da Computacao2 .
1
o censo de 1880 dos EUA demorou 7 anos para ser contabilizado e necessitou de 500
pessoas
2
recomendo voce a procurar informacoes sobre Alan Turing
11
CAPITULO 1. INTRODUC
AO
12
Figura 1.1: Jean Jennings Bartik (esq) e Frances Bilas Spence (dir)
Daquele tempo ate os dias de hoje, a computacao e o computador tiveram
um grande avanco. Porem, ainda precisamos de pessoas capazes de:
1. entender um problema
2. encontrar e entender a solucao do problema
3. transcrever essa solucao em algoque o computador entenda
4. verificar se a resposta do computador esta correta
muito importante perceber que o computador em si nao resolve um
E
problema, encontrar uma solucao do problema e tarefa do ser humano. Chamamos de Algoritmo essa solucao e o objetivo desta apostila e das aulas e
1.1. ALGORITMO
13
1.1
Algoritmo
CAPITULO 1. INTRODUC
AO
14
7. apertar os parafusos
1.1. ALGORITMO
15
CAPITULO 1. INTRODUC
AO
16
Solucao
1
2
3
4
5
6
7
8
9
10
11
12
...
...
public static void main ( String [] args ) {
Scanner entrada = null ;
entrada = new Scanner ( System . in ) ;
System . out . print ( " Informe 1 o num : " ) ;
int n1 = entrada . nextInt () ;
System . out . print ( " Informe 2 o num : " ) ;
int n2 = entrada . nextInt () ;
int soma = n1 + n2 ;
System . out . println ( " Soma
e " + soma ) ;
}
Figura 1.3: Solucao do Problema 1.2 em Java
1.1. ALGORITMO
17
Soluc
ao
1
2
3
4
5
6
7
8
9
10
11
12
CAPITULO 1. INTRODUC
AO
18
1.2
Vari
aveis e comandos de Entrada e Sada
1.2. VARIAVEIS
E COMANDOS DE ENTRADA E SAIDA
19
CAPITULO 1. INTRODUC
AO
20
Solucao
1
2
3
4
5
6
7
8
9
10
11
ps , nac , am , ms : real
4 inicio
5
....
....
escreva ( " A m
e dia semestral vale " , ms )
9 fimalgoritmo
Imagine a situacao que a media semestral e composta por mais de tres
notas, sera que precisaramos criar o mesmo n
umero de variaveis para cada
nota que compoe a media semestral? Veja abaixo outro algoritmo do Problema 1.4 que usa menos variaveis.
Com relacao a este algoritmo podemos observar:
1.3. EXERCICIOS
21
Soluc
ao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1.3
Exerccios
CAPITULO 1. INTRODUC
AO
22
1.3. EXERCICIOS
23
24
CAPITULO 1. INTRODUC
AO
Captulo 2
Estrutura de selec
ao ou decis
ao
muito frequente no desenvolvimento de algoritmos nos encontrarmos
E
em um ponto de decisao. Ou seja, em algumas situacoes queremos fazer
uma verificacao em nosso algoritmo. Tal verificacao pode ser uma validacao
sobre os dados de entrada, por exemplo, se ha um algoritmo que pede para
o usuario digitar um salario sabemos que o salario nao pode ser negativo.
Outro tipo de uso da instrucao de selecao pode ser da propria natureza
do problema. Por exemplo, o desconto do INSS do trabalhador e calculado
com base na faixa salarial de acordo com a Tabela 2.1.
Assim, se um programador ganha 3.000,00 ele se encontra na alquota de
11% e sera descontado no valor de R$ 330,00 para fins de contribuicao ao
INSS. Outro exemplo, suponha que um analista de sistemas receba o salario
Tabela 2.1: Contribuicao do INSS 2014
salario contribuicao (em R$)
alquota (em %)
ate 1.317,07
de 1.317,08 a 2.195,12
de 2.195,13 a 4.390,24
acima de 4.390,24
8,00
9,00
11,00
R$ 482,92
25
OU DECISAO
26
2.1
se simples
1 se ( < condicao >) entao
2
// bloco de instru
c~
o es
3 fimse
Figura 2.1: Comando se em VisuAlg
27
se/senao
1 se ( < condicao >) entao
2
// bloco de instru
c~
o es quando
3
// < condicao >
e verdadeira
4 senao
5
// bloco de instru
c~
o es quando
6
// < condicao >
e falsa
7 fimse
Figura 2.3: Comando se/senao em VisuAlg
A combinacao se/senao (if/else) implica que, pelo menos, um dos
blocos de instrucoes serao executados. Quando a expressao logica (<condicao>)
e verdadeira executa-se os as instrucoes que estao entre os comandos se e
senao, caso contrario as instrucoes executadas serao as que estao entre o
senao e o fimse. Tal combinacao e u
til quando e necessario executar instrucoes distintas de acordo com o resultado da expressao logica.
Note que o comando senao (else) somente vem apos um comando se
(if). A sintaxe nao permite um comando senao (else) sozinho.
OU DECISAO
28
1
2
3
4
5
6
7
8
se/senao encadeados
1 se ( < condicao1 >) entao
2
// bloco de instru
c~
o es quando
4 senao
5
// bloco de instru
c~
o es quando
8
9
10
11
senao
// bloco de instru
c~
o es quando
// < condicao1 > e < condicao2 > s~
a o falsas
fimse
12 fimse
29
// bloco de instru
c~
o es quando
4 }
5 else if ( < condicao2 >) {
6
// bloco de instru
c~
o es quando
8 }
9 else {
10
// bloco de instru
c~
o es quando
11
12 }
Nao ha limites na quantidade de comandos se que podemos encadear,
porem em uma situacao onde ha muitas condicoes coloque as que tem maior
probabilidade de serem verdadeiras no comeco; isso fara com que haja menos
comparacoes a serem executadas.
Exemplos
Veremos alguns exemplos ilustrango algumas situacoes de uso do comando
se, se/senao e se encadeado:
Problema 2.1 Dados dois n
umeros inteiros dividendo e divisor, escreva
um algoritmo que retorna o quociente e o resto do resultado da divisao entre
o dividendo e o divisor.
Vamos tomar um exemplo, considere dividendo = 237 e divisor = 7, veja
o resultado na Figura 2.5:
30
OU DECISAO
31
Observe que o comando se sozinho pode ser interpretado como um desviodentro do algoritmo, ou seja, o quociente e o resto da divisao serao apenas
calculados se o divisor for diferente de zero. Caso o divisor seja zero, nada
sera calculado. Ja na segunda situacao, com o comando se combinado com
o senao, podemos interpretar como sendo uma bifurcacaodentro do algoritmo, ou seja, ou eu calculo o quociente e o resto ou eu mostro a mensagem
que e impossvel fazer a divisao.
Agora, veremos na Figura 2.8, a solucao do Problema 2.1 na linguagem
Java:
OU DECISAO
32
4 fimse
33
5
6 resto <- numero % 2;
7 if ( resto == 0) {
8
9 }
Se um n
umero nao e par as instrucoes nao mostram nada na tela. Porem,
combinando com o senao podemos colocar uma instrucao quando o n
umero
e mpar. Veja o complemento do exemplo:
1 se ( numero mod 2 = 0) entao
2
3 senao
4
5 fimse
6
7 if ( numero % 2 == 0) {
8
9 }
10 else {
11
12 }
OU DECISAO
34
No problema da paridade de um n
umero inteiro, temos duas possibilidades
a decidir (par ou mpar), mas quando temos situacoes onde ha mais de dua
possibilidades? Nessa situacao usamos o comando se encadeado. O problema
que verifica se um certo n
umero e positivo, negativo ou nulo e um exemplo
dessa situacao.
Problema 2.3 Dado um n
umero real qualquer, escreva um algoritmo que
decida se o n
umero e positivo, negativo ou zero.
1 algoritmo " positivo "
2 var
3
numero : real
4 inicio
5
leia ( numero )
8
9
10
11
12
13
14
15
16 fimalgoritmo
Vejamos mais alguns exemplos de uso do comando se:
Problema 2.4 Escreva um algoritmo que recebe o valor de um produto e
mostra o valor parcelado e o valor para pagamento `a vista com boleto. A loja
35
4 inicio
5
leia ( valor )
10
senao
11
12
13
14
15
fimse
16 fimalgoritmo
Agora, o mesmo algoritmo em Java:
1 public static void main ( String args []) {
2
if ( valor < 0) {
OU DECISAO
36
6
else {
10
11
12
13
14
15 }
2.2
Express
ao l
ogica
operador
Java
==
<
>
!=
<=
>=
significado
igual
menor
maior
diferente
menor ou igual
maior ou igual
LOGICA
2.2. EXPRESSAO
37
1 soma > 0
2 num <> 1
3 valor = 23
4 nome <> " Joao "
5 area <= perimetro
6 x >= y
Ainda podemos combinar uma ou mais expressoes logicas utilizando os
operadores logicos: nao, e e ou (!, && e ||, respectivamente, em Java). O
operador logico nao e um operador unario, ou seja, ele e usado para inverter
o resultado de uma expressao logica. Ja os operadores e e ou sao operadores
binarios, ou seja, eles sao utilizados para combinar duas ou mais expressoes
com o objetivo de formar uma outra express
ao logica mais complexa. Vejamos
alguns exemplos:
1 soma > 0 e parcela <> 0
2 num <> 1 ou num <> 0
3 valor = 23 ou valor = 45
4 nome <> " Joao " e sobrenome = " Dias "
5 area <= perimetro e volume > dimensao
6 x >= y e y >= z ou z <> 10
Observe o exemplo da linha 6 que mistura o conector e com o ou. Ha uma
precedencia entre os conectores, primeiro deve ser resolvido o nao, e e depois
o ou. Quando utilizamos o comando se, em nossos algoritmos, pelo menos
uma expressao logica estara presente. Normalmente, essa expressao logica
realiza comparacoes entre variaveis e valores fixos ou apenas entre variaveis.
O Problema 2.5 nos mostra um exemplo de uso dos operadores logicos.
Problema 2.5 Escreva um algoritmo que calcula o salario lquido de um
OU DECISAO
38
4 inicio
5
leia ( salBruto )
leia ( desconto )
10
11
12
13
14
senao
escreva ( " Informe um valor positivo do sal
a rio " )
fimse
15 fimalgoritmo
Solucao em Java:
1 public class Salario {
2
3
LOGICA
2.2. EXPRESSAO
39
10
11
12
13
else {
14
15
16
17 }
Na linha 09 dos dois algoritmos temos um exemplo de uma expressao
logica complexa utilizando o operador e. Note que, para que o resultado da
expressao logica complexa seja verdadeira, as duas expressoes logicas internas
devem ser verdadeiras. Considere que X e Y sejam duas expressoes logicas,
a Tabela 2.3 mostra um resumo de todas as combinacoes entre X e Y com
seu respectivo resultado.
Tabela 2.3: Tabela Verdade
X
V
V
F
F
Y
V
F
V
F
nao X (!X)
F
F
V
V
X e Y (X && Y) X ou Y (X || Y)
V
V
F
V
F
V
F
F
OU DECISAO
40
a = 5, b = 7, c = 4 e d = 81 :
1. (a b) e (b < d)
2. (a = b) ou (c = b)
3. (d > a) e (c b)
4. (a b) ou (c d)
5. ((b > c) ou (c < a)) e (d b)
Vamos voltar ao exemplo do incio do captulo:
Problema 2.6 Escreva um algoritmo que le o salario de um funcionario
e calcula o desconto aplicado para sua contribuic
ao ao INSS. Use a tabela
abaixo para determinar a alquota de contribuic
ao.
Tabela 2.4: Contribuicao do INSS 2014
alquota (em %)
ate 1.317,07
de 1.317,08 a 2.195,12
de 2.195,13 a 4.390,24
acima de 4.390,24
8,00
9,00
11,00
R$ 482,92
Gabarito: V, V, F, V, F
LOGICA
2.2. EXPRESSAO
41
Solucao em VisuAlg:
1 algoritmo " previdencia "
2 var
3
// nunca use acento ou espa
c o nos nomes das
vari
a veis
4
salario , contribuicao : real
5 inicio
6
escreva ( " Digite o sal
a rio : " )
7
leia ( salario )
8
se (( salario >= 0) e ( salario <= 1317.07) ) entao
9
contribuicao <- salario * 0.08
10
fimse
11
se (( salario >= 1317.08) e ( salario <= 2195.12) )
entao
12
contribuicao <- salario * 0.09
13
fimse
14
se (( salario >= 2195.13) e ( salario <= 4390.24) )
entao
15
contribuicao <- salario * 0.11
16
fimse
17
se ( salario > 4390.24) entao
18
contribuicao <- 4390.24 * 0.11
19
fimse
20
escreval ( " O desconto do INSS ser
a de R$ " ,
contribuicao )
21 fimalgoritmo
Figura 2.9: solucao usando varios comandos se simples em VisuAlg
42
OU DECISAO
LOGICA
2.2. EXPRESSAO
43
OU DECISAO
44
2.3
Exerccios
2.3. EXERCICIOS
45
46
OU DECISAO
2.3. EXERCICIOS
47
Idade
5a7
8 a 10
11 a 15
16 a 30
acima de 30
= b2 4ac
b +
x1 =
2a
b
x2 =
2a
OU DECISAO
48
10. Escreva um algoritmo que calcule o que deve ser pago por um produto,
considerando o preco normal de etiqueta e a escolha da condicao de pagamento. Utilize os codigos da tabela a seguir para ler qual a condicao
de pagamento escolhida e efetuar o calculo adequado.
codigo
1
2
3
4
condicao de pagamento
A vista em dinheiro ou cheque, recebe 10% de desconto
A vista no cartao de credito, recebe 5% de desconto
Em duas vezes, preco normal de etiqueta sem juros
Em quatro vezes, preco normal de etiqueta mais juros de 7%
11. Faca um algoritmo que leia as medias semestrais obtidas por um aluno
na disciplina de Algoritmos, o n
umero de aulas ministradas e o n
umero
de aulas assistidas por este aluno nesta disciplina. Calcule e mostre a
media final deste aluno e diga se ele foi aprovado ou reprovado ou esta
de exame segundo os criterios da FIAP inclusive levando-se em conta
a frequencia.
12. Desenvolva um algoritmo que informe se uma data e valida ou nao. O
algoritmo devera ler 2 n
umeros inteiros, que representem o dia e o mes
e informar se e um dia do mes valido. Desconsidere os casos de ano
bissexto, ou seja, fevereiro tem 28 dias.
13. Escreva um algoritmo que recebe tres n
umeros inteiros e imprime eles
em ordem crescente.
Captulo 3
Estruturas de repetic
ao
A man provided with paper,
pencil, and rubber, and subject
to strict discipline, is in eect a
universal machine.
Alan Mathison Turing
a mesma do comando if
49
CAPITULO 3. ESTRUTURAS DE REPETIC
AO
50
3.1
while (enquanto)
A interpretacao do comando while: enquanto a <condicao> for verdadeira, executo as instrucoes dentro do bloco2 . Como a 1a acao do comando
while e testar a condicao, e possvel que as instrucoes dentro do bloco podem
nunca ser executadas, para isso basta que a condicao seja falsa. Vejamos a
forma de utilizacao do while em VisuAlg.
1 enquanto ( < condicao >) faca
2
// coloque aqui as instru
c~
o es
3
// que ser~
a o executadas enquanto
4
// a < condicao > for verdadeira
5 fimenquanto
No VisuAlg, o bloco de instrucoes sao definidos pelas palavras reservadas enquanto e fimenquanto. Vamos trabalhar o comando while com um
problema que ja foi visto em sala de aula.
Problema 3.1 Dados uma sequencia de 5 n
umeros inteiros. Calcule a soma
de todos os n
umeros da sequencia.
2
51
Segue abaixo um algoritmo, ja apresentado em sala de aula, desse problema. Observe que nos eslaides ele foi resolvido em VisuAlg mas dessa vez
apresentaremos em Java:
1 import java . util . Scanner ;
2
3 public class Soma5 {
4
5
public static void main ( String [] args ) {
6
Scanner tec = new Scanner ( System . in ) ;
7
int soma = 0;
8
int num ;
9
System . out . println ( " Digite n
u mero : " ) ;
10
num = tec . nextInt () ;
11
soma = soma + num ;
12
System . out . println ( " Digite n
u mero : " ) ;
13
num = tec . nextInt () ;
14
soma = soma + num ;
15
System . out . println ( " Digite n
u mero : " ) ;
16
num = tec . nextInt () ;
17
soma = soma + num ;
18
System . out . println ( " Digite n
u mero : " ) ;
19
num = tec . nextInt () ;
20
soma = soma + num ;
21
System . out . println ( " Digite n
u mero : " ) ;
22
num = tec . nextInt () ;
23
soma = soma + num ;
24
System . out . println ( " O valor
e " + soma ) ;
25
}
26 }
Figura 3.1: Solucao em Java do Problema 3.1
Observe as 5 repeticoes das instrucoes:
1
2
3
CAPITULO 3. ESTRUTURAS DE REPETIC
AO
52
53
(b) 1a iteracao
(c) 2a iteracao
(d) 3a iteracao
(e) 4a iteracao
(f) 5a iteracao
Na 5a e u
ltima iteracao da repeticao, a variavel qtd assume o valor 6 que
CAPITULO 3. ESTRUTURAS DE REPETIC
AO
54
o div do VisuAlg
55
1 public class RM {
2
3
public static void main ( String args []) {
4
// objeto que l^
e informa
c~
o es do teclado
5
Scanner tec = new Scanner ( System . in ) ;
6
int resto ;
7
System . out . println ( " Digite o RM : " ) ;
8
int rm = tec . nextInt () ;
9
resto = rm % 10;
10
rm = rm / 10;
11
System . out . println ( " D
gito : " + resto ) ;
12
System . out . println ( " RM restante : " + rm ) ;
13
}
14 }
Figura 3.5: Separando o u
ltimo dgito do RM
tanto o numerador e denominador sao n
umeros inteiros, alem disso, aproveito
a mesma variavel rm para armazenar o quociente da divisao. Se executarmos
esse codigo para a entrada 56395 serao impressos as informacoes:
D
gito: 5
RM restante: 5639
Melhorando o algoritmo anterior, poderamos mostrar os dois u
ltimos
dgitos do RM, veja na Figura 3.6 a solucao e note a repeticao das instrucoes
das linhas 10 a 13 com as linhas 15 a 18.
CAPITULO 3. ESTRUTURAS DE REPETIC
AO
56
1 public class RM {
2
3
public static void main ( String args []) {
4
// objeto que l^
e informa
c~
o es do teclado
5
Scanner tec = new Scanner ( System . in ) ;
6
int resto ;
7
System . out . println ( " Digite o RM : " ) ;
8
int rm = tec . nextInt () ;
9
10
11
resto = rm % 10;
12
rm = rm / 10;
13
System . out . println ( " D
gito : " + resto ) ;
14
System . out . println ( " RM restante : " + rm ) ;
15
16
resto = rm % 10;
17
rm = rm / 10;
18
System . out . println ( " D
gito : " + resto ) ;
19
System . out . println ( " RM restante : " + rm ) ;
20
}
21 }
Figura 3.6: Separando os dois u
ltimos dgitos do RM
Faca o teste de mesa e certifique-se que a sada do algoritmo sera:
D
gito: 5
RM restante: 5639
D
gito: 9
RM restante: 563
57
58
(b) 1a iteracao
(c) 2a iteracao
(d) 3a iteracao
(e) 4a iteracao
(f) 5a iteracao
59
(a) 1a divisao
(b) 2a divisao
(c) 3a divisao
(d) 4a divisao
(e) 5a divisao
60
61
CAPITULO 3. ESTRUTURAS DE REPETIC
AO
62
(b) 1a iteracao
(c) 2a iteracao
(d) 3a iteracao
3.2
do/while (repita/ate)
63
1 repita
2
// coloque aqui as instru
c~
o es
3
// que ser~
a o executadas enquanto
4
// a < condicao > for verdadeira
5 ate que < condicao >
64
3.3
65
for (para)
CAPITULO 3. ESTRUTURAS DE REPETIC
AO
66
1 para <var > de < inicio > ate < limite > passo <
atualizacao > faca
2
// coloque aqui as instru
c~
o es
3
// que ser~
a o executadas enquanto <var >
4
// n~
a o ultrapassar < limite >
5 fimpara
67
CAPITULO 3. ESTRUTURAS DE REPETIC
AO
68
3.4. EXERCICIOS
3.4
69
Exerccios
CAPITULO 3. ESTRUTURAS DE REPETIC
AO
70
Fn =
se n = 1 ou n = 2;
F
n1 + Fn2
se n > 2
3.4. EXERCICIOS
71
72
Captulo 4
Vetor
Any fool can write code that a
computer can understand. Good
programmers write code that
humans can understand.
Martin Fowler
CAPITULO 4. VETOR
74
4.1
Preliminares, definic
ao e exemplos
E EXEMPLOS
4.1. PRELIMINARES, DEFINIC
AO
75
6 7 8 9
0 0 0 0
v [0]
v [7]
v [4]
v [6]
=
=
=
=
1;
-3;
2;
5
CAPITULO 4. VETOR
76
0
1
1 2 3 4 5
0 0 0 2 0
6
5
7 8 9
-3 0 0
Note que o acesso a cada uma das posicoes pode ser feito de forma independente, bastando saber o ndice da posicao. Uma das maneiras mais
utilizadas para trabalhar com vetores e usar uma variavel inteira para percorrer os ndices e, consequentemente, todas as suas posicoes. Veja na Figura 4.1 um algoritmo que preenche um vetor com capacidade de armazenar
20 n
umeros inteiros com informacoes digitadas pelo usuario.
1 import java . util . Scanner ;
2
3 public class PreencheVetor {
4
5
public static void main ( String args []) {
6
Scanner tec = new Scanner ( System . in ) ;
7
int [] conjunto = new int [20];
8
for ( int i = 0; i < conjunto . length ; i ++) {
9
System . out . print ( " Digite inteiro : " ) ;
10
conjunto [ i ] = tec . nextInt () ;
11
}
12
}
13 }
Figura 4.1: Exemplo de preenchimento do vetor usando o for
Na linha 08 a palavra reservada new que e utilizada para instanciar um
objeto. Por essa razao todas as posicoes do vetor sao inicializadas com o
valor default do tipo do vetor. Por se tratar de um objeto, o vetor possui o
atributo length que indica a capacidade do vetor, na linha 08 do algoritmo
a instrucao conjunto.length devolve o valor 20 que representa o tamanho
do vetor.
Veja mais um exemplo:
E EXEMPLOS
4.1. PRELIMINARES, DEFINIC
AO
77
5 6 7 8 9
10 12 14 16 18
78
CAPITULO 4. VETOR
E EXEMPLOS
4.1. PRELIMINARES, DEFINIC
AO
79
CAPITULO 4. VETOR
80
E EXEMPLOS
4.1. PRELIMINARES, DEFINIC
AO
81
CAPITULO 4. VETOR
82
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4.2
4.2. EXERCICIOS: VETORES DE TIPOS BASICOS
83
CAPITULO 4. VETOR
84
x)2
n1
n1
i=0 (x[i]
(4.1)
4.2. EXERCICIOS: VETORES DE TIPOS BASICOS
85
alquota/valor
8%
9%
11%
11% sobre R$ 4.390,24
86
CAPITULO 4. VETOR
Ap
endice A
Correc
ao dos exerccios da
Introduc
ao
3. Escreva um algoritmo que recebe um n
umero x ele imprime x2 . Lembrese que x2 = x x.
1 algoritmo " quadrado "
2 var
3
x , pot : real
4 inicio
5
leia ( x )
pot = x * x
escreva ( " Sa
da : " , pot )
9 fimalgoritmo
4. Escreva um algoritmo que calcula a area e o permetro do crculo, use
3, 14 como valor de .
1 algoritmo " circulo "
87
DOS EXERCICIOS DA INTRODUC
88 APENDICE
A. CORREC
AO
AO
2 var
3
4 inicio
5
leia ( raio )
escreval ( "
A rea : " , area )
10
11 fimalgoritmo
5. Alem das 4 operacoes matematicas, as linguagens de programacao possuem o operador resto da divisao. O resto da divisao e uma operacao
que envolve apenas n
umeros inteiros e, na linguagem VisualG, e representada pelo operador % ou o mod. Vejamos um exemplo:
1 a <- 47
2 b <- 7
3 x <- a % 3
4 escreva ( x )
5 x <- 63 % b
6 escreva ( x )
7 x <- a % b
8 escreva ( x )
Este algoritmo mostrara na tela os seguintes valores respectivamente:
2, 0 e 5.
Sua tarefa e desenvolver um algoritmo que recebe um n
umero inteiro
de 0 a 99 e imprime o dgito das dezenas e o dgito das unidades desse
89
n
umero. Dica: usando papel e lapis faca a divisao do n
umero por 10
mas nao coloque vrgula e nem acrescente 0 na divisao.
1 algoritmo " divisao "
2 var
3
num : inteiro
dezena : inteiro
unidade : inteiro
6 inicio
7
// entrada de dados
leia ( num )
10
11
12
13
14 fimalgoritmo
x , y , z : inteiro
4 inicio
5
leia ( x )
DOS EXERCICIOS DA INTRODUC
90 APENDICE
A. CORREC
AO
AO
7
leia ( y )
10
leia ( z )
11
12 fimalgoritmo
5 inicio
6 // Se
c~
a o de Comandos
7
leia ( preco )
10
leia ( percentual )
11
12
13
14
15
91
16
17 fimalgoritmo
8. Usain Bolt e o recordista mundial dos 100 metros rasos com o tempo de
9,58 segundos. Escreva um algoritmo que calcula a velocidade media
em m/s e em km/h de um corredor, seu algoritmo recebe como dados
de entrada a distancia em metros e o tempo em segundos.
1 algoritmo " cemmetros "
2 var
3
5 inicio
6
leia ( espaco )
leia ( tempo )
10
11
12
13
14
15
16 fimalgoritmo
9. Neste mes, Joao recebeu um aumento no salario, porem ele nao sabe
calcular o percentual de aumento. Voce devera escrever um algoritmo
que recebe 2 n
umeros reais representando os salarios antes e depois do
DOS EXERCICIOS DA INTRODUC
92 APENDICE
A. CORREC
AO
AO
aumento e devera calcular e exibir o percentual de aumento que Joao
obteve.
1 algoritmo " percentual "
2 var
3
5 inicio
6
leia ( salAntes )
leia ( salDepois )
10
11
12
13
14 fimalgoritmo
rm , resto : inteiro
soma : inteiro
93
5 inicio
6
leia ( rm )
soma <- 0
9
10
11
rm <- rm div 10
12
13
14
15
rm <- rm div 10
16
17
18
19
rm <- rm div 10
20
21
22
23
rm <- rm div 10
24
25
26
27
rm <- rm div 10
28
29
30
31 fimalgoritmo
DOS EXERCICIOS DA INTRODUC
94 APENDICE
A. CORREC
AO
AO
Ap
endice B
Correc
ao dos exerccios do
Capitulo 2
1. Faca um algoritmo que receba um n
umero e mostre uma mensagem
caso este n
umero seja maior que 10.
1 algoritmo " ex1 "
2 var
3
numero : real
4 inicio
5
leia ( numero )
8
9
10 fimalgoritmo
96
4 inicio
5
leia ( num1 )
leia ( num2 )
10
11
senao
12
13
14
senao
15
16
fimse
17
fimse
18 fimalgoritmo
5 inicio
97
6
// Se
c~
a o de Comandos
leia ( timeCasa )
10
leia ( timeVisitante )
11
12
leia ( golCasa )
13
14
leia ( golVisitante )
15
16
17
18
19
20
21
22
23
24
fimse
25
26 fimalgoritmo
5. A jornada de trabalho semanal e de 40 horas. O funcionario que trabalhar mais de 40 horas recebera hora extra, cujo valor e o valor da hora
regular com um acrescimo de 50%. Escreva um algoritmo que leia o
n
umero de horas trabalhadas em um mes, o salario por hora e escreva
98
horasTrabalhadasMes : real
salarioHora : real
horaExtra : real
salario : real
7
8 inicio
9
10
leia ( horasTrabalhadasMes )
11
12
leia ( salarioHora )
13
14
15
16
17
18
19
senao
salario <- horasTrabalhadasMes *
salarioHora
20
fimse
21
22
23 fimalgoritmo
99
6. Faca um programa para ler dois n
umeros inteiros A e B e informar se
A e divisvel por B.
1 algoritmo " semnome "
2 var
3
a , b , resto : inteiro
4 inicio
5
leia ( a )
leia ( b )
10
se ( resto = 0) entao
11
12
escreva (a , "
e divisivel por " , b )
fimse
13 fimalgoritmo
4 inicio
5
// Se
c~
a o de Comandos
leia ( numero )
DOS EXERCICIOS DO CAPITULO 2
100 APENDICE
B. CORREC
AO
8
escreva ( " N
u mero negativo . Imposs
vel
calcular raiz quadrada " )
10
senao
11
12
13
fimse
14 fimalgoritmo
Idade
5a7
8 a 10
11 a 15
16 a 30
acima de 30
idade : inteiro
4 inicio
5
// Se
c~
a o de Comandos
leia ( idade )
9
10
101
11
12
senao
se ( idade < 5) entao
13
14
15
16
senao
se ( idade < 7) entao
escreva ( " Infantil " )
17
18
senao
se ( idade < 10) entao
19
20
21
22
23
senao
24
25
26
senao
27
escreva ( " S^
e nior " )
28
fimse
29
30
31
fimse
fimse
fimse
32
fimse
33
fimse
34 fimalgoritmo
DOS EXERCICIOS DO CAPITULO 2
102 APENDICE
B. CORREC
AO
Escreva um algoritmo que recebe os tres coeficientes da equacao, calcula
e imprime as razes reais se for possvel. Use a seguinte formula para
resolver a equacao:
= b2 4ac
b +
x1 =
2a
b
x2 =
2a
a , b , c : real
delta , x1 , x2 : real
5 inicio
6
leia ( a )
10
leia ( b )
11
12
leia ( c )
13
14
// processamento
15
se ( a = 0) entao
16
17
escreva ( " N~
ao
e equa
c~
a o de 2 o grau " )
senao
103
18
delta <- b * b - 4 * a * c
19
20
21
senao
22
23
24
25
26
fimse
27
fimse
28 fimalgoritmo
10. Escreva um algoritmo que calcule o que deve ser pago por um produto,
considerando o preco normal de etiqueta e a escolha da condicao de pagamento. Utilize os codigos da tabela a seguir para ler qual a condicao
de pagamento escolhida e efetuar o calculo adequado.
codigo
1
2
3
4
condicao de pagamento
A vista em dinheiro ou cheque, recebe 10% de desconto
A vista no cartao de credito, recebe 5% de desconto
Em duas vezes, preco normal de etiqueta sem juros
Em quatro vezes, preco normal de etiqueta mais juros de 7%
preco : real
formaPgto : inteiro
5
6 inicio
DOS EXERCICIOS DO CAPITULO 2
104 APENDICE
B. CORREC
AO
7
leia ( preco )
10
leia ( formaPgto )
11
se ( formaPgto = 1) entao
12
13
14
senao
se ( formaPgto = 2) entao
15
16
senao
17
se ( formaPgto = 3) entao
18
19
senao
20
21
22
23
fimse
fimse
fimse
24 fimalgoritmo
11. Faca um algoritmo que leia as medias semestrais obtidas por um aluno
na disciplina de Algoritmos, o n
umero de aulas ministradas e o n
umero
de aulas assistidas por este aluno nesta disciplina. Calcule e mostre a
media final deste aluno e diga se ele foi aprovado ou reprovado ou esta
105
de exame segundo os criterios da FIAP inclusive levando-se em conta
a frequencia.
1 algoritmo " semnome "
2 var
3
mediaFinal : real
frequencia : real
7 inicio
8
escreva ( " M
e dia 1 o semestre : " )
leia ( media1sem )
10
escreva ( " M
e dia 2 o semestre : " )
11
leia ( media2sem )
12
13
14
15
fimalgoritmo
16
fimse
17
18
19
20
leia ( aulasMinistradas )
21
DOS EXERCICIOS DO CAPITULO 2
106 APENDICE
B. CORREC
AO
22
leia ( aulasAssistidas )
23
24
se ( aulasMinistradas < 0) ou (
aulasAssistidas < 0) entao
25
26
27
fimalgoritmo
fimse
28
29
30
31
32
33
34
senao
35
36
37
senao
38
39
40
41
42
43
fimse
fimse
senao
escreva ( " Retido por falta " )
fimse
44 fimalgoritmo
107
12. Desenvolva um algoritmo que informe se uma data e valida ou nao. O
algoritmo devera ler 2 n
umeros inteiros, que representem o dia e o mes
e informar se e um dia do mes valido. Desconsidere os casos de ano
bissexto, ou seja, fevereiro tem 28 dias.
1 algoritmo " semnome "
2 var
3
4 inicio
5
leia ( dia )
leia ( mes )
9
10
11
12
fimalgoritmo
13
fimse
14
15
16
17
fimalgoritmo
18
fimse
19
20
21
22
fimalgoritmo
DOS EXERCICIOS DO CAPITULO 2
108 APENDICE
B. CORREC
AO
23
fimse
24
25
26
27
fimalgoritmo
28
fimse
29
30
31 fimalgoritmo
a , b , c : inteiro
4 inicio
5
// Se
c~
a o de Comandos
leia ( a )
leia ( b )
10
11
leia ( c )
12
13
14
15
109
16
17
18
19
20
21
senao
22
23
24
senao
25
26
27
senao
28
29
fimse
30
31
32
fimse
fimse
fimse
33 fimalgoritmo