Buscar

Algoritmos Laminas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 421 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 421 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 421 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos - Notas de Aula
Ricardo Vargas Dorneles
9 de dezembro de 2016
1 / 421
Comando condicional
Comandos de Repetição
Vetores
Vetores
Lista de tópicos de vetores
Lista Vetores
2 / 421
Ementa
Construção de soluções algorítmicas para problemas numéricos
simples e problemas envolvendo entrada e saída de dados.
Utilização de rotinas de manipulação de variáveis.
Implementação de algoritmos para realização de operações
sobre conjuntos e de pesquisa e ordenação de dados.
3 / 421
Objetivo
Proporcionar condições de ensino-aprendizagem para que o
aluno seja capaz de analisar problemas, formular soluções
algorítmicas estruturadas que possam ser executadas pelo
computador.
Implementar algoritmos simples utilizando uma linguagem de
programação em português estruturado.
4 / 421
Conteúdo Programado
1 Introdução
1 1.1.Linguagens de programação de alto nível
2 1.2.Etapas no processo de elaboração e execução de programas
2 2. Introdução à programação estruturada com a construção de
soluções algorítmicas para:
1 2.1.Cálculo de expressões aritméticas simples
2 2.2.Problemas numéricos simples
3 2.3.Entrada e saída de dados
4 2.4.Classificação usando variáveis simples e operadores
relacionais
5 2.5.Processamento de uma ou mais entradas gerando uma ou
mais saídas
6 2.6.Cálculo de médias e do desvio padrão
7 2.7.Técnicas de verificação de algoritmos (teste de mesa ou
simulação de algoritmos)
5 / 421
Conteúdo Programado
1 3. Manipulação de variáveis
1 3.1.Auxiliares
2 3.2.Temporárias
3 3.3.Contadoras
4 3.4.Acumuladoras
5 3.5.Sinalizadoras
6 3.6.Totalizadoras
6 / 421
Conteúdo Programado
1 4. Algoritmos de operações com conjuntos
1 4.1.Operações básicas
2 5. Algoritmos de Ordenação e Pesquisa
1 5.1.Método bolha (bubble sort)
2 5.2.Método de seleção
3 5.3.Inserção ordenada
4 5.4.Fusão ordenada
5 5.5.Busca linear
6 5.6.Busca binária
7 / 421
Metodologia
A disciplina deve ser desenvolvida através de
exposições/discussões teóricas que serão realizadas em função
das atividades relacionadas aos conteúdos abordados.
Implementação de soluções para problemas específicos
priorizando a busca de soluções algorítmicas para classes de
problemas tradicionais da computação.
As soluções algorítmicas devem ser expressas em uma
linguagem na forma "português estruturado"para que sejam
trabalhados igualmente aspectos sintáticos e semânticos dos
comandos da linguagem.
8 / 421
Metodologia
A disciplina deve ser desenvolvida em sala de aula
convencional, permitindo que os alunos resolvam os problemas
propostos, testando e comparando soluções.
A disciplina deverá dispor de uma home-page com a função de
organizar o trabalho a ser desenvolvido.
Os alunos deverão ainda ter acesso a um ambiente virtual
através do qual lhes serão disponibilizados recursos para
aprendizagem , assim como recursos de comunicação com
professores e alunos, para tratar de temas e problemas de
interesse comum.
9 / 421
Avaliação
Os resultados da avaliação deverão retro-alimentar o processo
de ensino-aprendizagem.
O sistema de avaliação compreende três avaliações parciais
provas sobre o conteúdo programático, das quais é obtida a
média de aproveitamento do aluno quanto aos objetivos
propostos.
Serão atribuídos pesos diferenciados para cada uma das
provas, sendo que para a primeira prova será atribuído peso 1
(um), para a segunda prova será atribuído peso 2 (dois) e para
a terceira prova será atribuído peso 3 (três).
10 / 421
Avaliação
O resultado da avaliação será calculado de acordo com as
regras estabelecidas pela unidade responsável pela oferta do
curso, bem como a forma de recuperação da avaliação.
Será considerado aprovado o aluno que alcançar 60% dos
resultados das avaliações e tiver freqüência igual ou superior a
75% das aulas.
A nota final do aluno será expressa segundo as normas
regimentais da Instituição.
11 / 421
O cálculo da média final é feito pela média harmônica ponderada
das três provas, ou seja:
M.H. =
6
1
P
1
+ 2
P
2
+ 3
P
3
Alunos que não atingirem média 6 podem recuperar uma das
provas ao final do semestre.
12 / 421
Bibliografia Básica
FAR 89 FARRER, H. et al. Algoritmos Estruturados. Rio de Janeiro:
Editora Guanabara, 1999.
Cor 04 CORMEN, Thomas H.. Algoritmos: teoria e prática. Rio de
Janeiro: Elsevier, 2004.
13 / 421
Bibliografia Complementar
SCH 84 SCHEID, F. Computadores e Programação. São Paulo:
McGraw-Hill, 1984.
SIL 82 SILVA, H.V.R.C.; BARANAUSKAS, M.C.C.; DIAS, S.V.
Introdução a Programação de Computadores. Rio de Janeiro:
Campus, 1982.
TRE83 TREMBLAY, J.; BUNT, R.B. Ciência dos Computadores -
Uma abordagem algorítmica. São Paulo: McGraw-Hill, 1983.
SAL 98 SALVETTI, D.D.; BARBOSA, M.B. Algoritmos. São Paulo:
Makron Books, 1998.
ORT 02 ORTH, A.I. Algoritmos. Porto Alegre: Ciência dos
Computadores, 2002.
14 / 421
Bibliografia online
Curso de 15 Vídeo-aulas de Gustavo Guanabara disponíveis no
Youtube
Procurar por "Gustavo Guanabara Algoritmos"
15 / 421
Algoritmo
Definição
Um algoritmo é uma lista ordenada de comandos que, quando
executados, resultam em uma sequencia de ações, que visam
resolver um determinado problema.
Ex:????
16 / 421
Algoritmo n. 1
Um amigo vai viajar na Rota do Sol e está com medo de que
fure um pneu.
Ajude o seu amigo escrevendo um algoritmo com todos os
passos para trocar o pneu de um carro.
Considere que:
Ele não tem experiência nenhuma em troca de pneus, mas sabe
ler instruções e conhece razoavelmente a língua portuguesa.
É uma pessoa normal, sabe que para sair do carro precisa abrir
a porta e soltar o cinto :-)
Não tem muita experiência em direção e estará nervoso.
17 / 421
Nessa disciplina os algoritmos vistos serão algoritmos
computacionais, a serem executados por um computador.
A um conjunto de comandos que pode ser executado por um
computador chamamos de "Linguagem de Programação".
Exs:????? (uma consulta ao Google "Quantas linguagens de
programação existem"mostrará que existem centenas)
18 / 421
Ao conjunto de regras que definem os comandos válidos em
uma linguagem (de programação ou não) chamamos de
sintaxe da linguagem.
Sintaxe : é a parte da gramática que estuda a disposição das
palavras na frase e a das frases no discurso, bem como a
relação lógica das frases entre si.
Aplica-se a linguagens naturais, como a língua portuguesa
(lembram da análise sintática?)
Aplica-se a linguagens de programação
19 / 421
Nessa disciplina, todos os nossos algoritmos serão escritos em
uma linguagem chamada Português Estruturado, que é uma
tradução direta de uma linguagem chamada Pascal.
Todos os algoritmos nessa linguagem tem o formato:
Algoritmo
Declarações
Inicio
Comandos
Fimalgoritmo
20 / 421
Programador x Usuário
21 / 421
Estudo de Caso: O algoritmo Soma2
O objetivo do algoritmo soma2 é que o usuário digite 2
números no teclado e o algoritmo deve exibir na tela a soma
dos 2 números.
Um possível diálogo entre o algoritmo e o usuário seria:
(computador) - Digite o primeiro número
(usuário) 7
(computador) - Digite o segundo número
(usuário) 4
(computador) - A soma é 11
22 / 421
Para a construção de qualquer tipo de algoritmo, é necessário
seguir estes passos:
1 Compreender completamente o problema a ser resolvido,
destacando os pontos mais importantes e os objetos que o
compõem.
2 Definir os dados de entrada, ou seja, quais dados serão
fornecidos e quais objetos fazem parte desse cenário-problema.
3 Definir o processamento, ou seja,quais cálculos serão
efetuados e quais as restrições para esses cálculos. O
processamento é responsável pela transformação dos dados de
entrada em dados de saída. Além disso, deve-se verificar quais
objetos são responsáveis pelas atividades.
4 Definir os dados de saída, ou seja, quais dados serão gerados
depois do processamento.
5 Construir o algoritmo utilizando um formalismo conhecido.
6 Testar o algoritmo realizando simulações.
23 / 421
Comando de Escrita
A primeira ação do computador deve ser emitir para a tela a
mensagem "Digite o primeiro número". Para isso é utilizado o
comando de escrita.
O comando de escrita é utilizado para o algoritmo enviar
mensagens para a tela.
Essas mensagens podem ser mensagens solicitando dados ao
usuário ou resultados do processamento.
Seu formato é:
Escreva (lista de mensagens)
onde as mensagens da lista são separadas por vírgula, e cada
mensagem é uma sequência de quaisquer caracteres
delimitadas por � �.
24 / 421
Escreval
Ex:
Escreva("Bom","Dia")
Ao terminar de executar o comando Escreva, o cursor ficará
imediatamente após o último caracter escrito.
Alternativamente, o comando Escreval(lista de mensagens )
escreve uma lista de mensagens e posiciona o cursor na
primeira coluna da linha seguinte.
25 / 421
Variáveis
São os elementos de armazenamento de dados em um
programa.
Uma variável corresponde fisicamente a uma posição de
memória do computador.
Ela contem sempre um (1) valor.
Ao receber um novo valor, o valor anterior é substituído.
Uma variável é identificada por um nome, chamado
identificador da variável.
Um identificador de variável deve iniciar por letra e só pode
conter letras, dígitos e o caracter "sublinha". E não pode
conter caracteres acentuados ou cedilha.
E não pode ser nenhuma palavra reservada da linguagem
(p.ex. Escreva, algoritmo, inicio, fimalgoritmo...)
26 / 421
Uma variável pode ser vista como uma caixinha identificada
por um nome e que pode armazenar valores de um tipo
definido (por exemplo: inteiro ou real)
27 / 421
Comando de Atribuição
O comando utilizado para alterar o valor de uma variável
chama-se comando de atribuição e tem o formato:
variável <- expressão (leia-se "variável RECEBE expressão")
Ex:
a <- 1
a <- a+1
a <- a+b
Na atribuição, quando uma variável recebe uma expressão, o
valor da expressão é calculado e o resultado é atribuído à
variável.
Ao utilizar constantes reais em expressões, o ponto (.) é
utilizado como separador das casas decimais (ex: 3.14)
28 / 421
Em um algoritmo que contenha as variáveis a, b, c e d, após a
sequência de atribuições a seguir:
a <- 1
b <- 2
c <- 3
as variáveis terão os seguintes valores (o "?"em d significa que
d ainda não tem um valor definido ou, em outras palavras,
contem "lixo"):
29 / 421
Ex: O que será escrito pelo trecho de código abaixo?
a <- 1
b <- 2
a <- a+b
b <- a+b
a <- a+b
b <- a+b
a <- a+b
b <- a+b
escreva (a,b)
A lista de elementos do comando de escrita pode conter
variáveis e expressões. Nesse caso, é escrito o conteúdo da
variável ou, no caso da expressão, o valor resultante do cálculo
da expressão.
30 / 421
Teste de Mesa
O teste de mesa simula a execução de um algoritmo sem
utilizar o computador,empregando apenas "papel e caneta"(ou
melhor, sem utilizar um computador).
Passos para realizar o teste de mesa:
Identifique as variáveis envolvidas em seu algoritmo;
Crie uma tabela com uma coluna para cada uma das variáveis
do algoritmo;
Crie também uma coluna para o que será escrito pelo
algoritmo ao ser executado um comando de escrita
31 / 421
Situação inicial
Inicialmente nenhuma das variáveis possui um valor conhecido.
Isso pode ser representado por um "?"
a <- 1
b <- 2
a <- a+b
b <- a+b
a <- a+b
b <- a+b
a <- a+b
b <- a+b
escreva (a,b)
a b escritas
? ?
32 / 421
Simule a execução do algoritmo, passo a passo, a partir da
primeira instrução.
A cada comando de leitura a variável que recebe o valor lido
deve ser atualizada na tabela
A cada comando de atribuição, a variável que recebe a
expressão é atualizada na tabela
A cada comando de escrita, o valor escrito pelo comando é
colocado na coluna das escritas
O valor corrente da variável é representado pelo último valor
(mais embaixo) da coluna correspondente;
33 / 421
Primeira instrução
a <- 1
b <- 2
a <- a+b
b <- a+b
a <- a+b
b <- a+b
a <- a+b
b <- a+b
escreva (a,b)
a b escritas
? ?
1
34 / 421
Segunda instrução
a <- 1
b <- 2
a <- a+b
b <- a+b
a <- a+b
b <- a+b
a <- a+b
b <- a+b
escreva (a,b)
a b escritas
? ?
1
2
35 / 421
Terceira instrução
a <- 1
b <- 2
a <- a+b
b <- a+b
a <- a+b
b <- a+b
a <- a+b
b <- a+b
escreva (a,b)
a b escritas
? ?
1
2
3
36 / 421
Quarta instrução
a <- 1
b <- 2
a <- a+b
b <- a+b
a <- a+b
b <- a+b
a <- a+b
b <- a+b
escreva (a,b)
a b escritas
? ?
1
2
3
5
37 / 421
Quinta instrução
a <- 1
b <- 2
a <- a+b
b <- a+b
a <- a+b
b <- a+b
a <- a+b
b <- a+b
escreva (a,b)
a b escritas
? ?
1
2
3
5
8
38 / 421
Final da simulação
a <- 1
b <- 2
a <- a+b
b <- a+b
a <- a+b
b <- a+b
a <- a+b
b <- a+b
escreva (a,b)
a b escritas
? ?
1
2
3
5
8
13
21
34
2134
39 / 421
O valor escrito foi 2134 porque não há separação entre o a e b
O comando de escrita deve explicitamente identificar o que
será escrito entre as variáveis
Ex:
Escreva(a," ",b) // escreverá um espaço em branco entre a e
b
Escreva(a,",",b) // escreverá uma vírgula entre a e b
É importante executar TODOS os comandos, atualizando a
tabela a cada comando, sem pular nenhum.
Se um comando não for executado, o resultado obtido
provavelmente estará errado.
A simulação deve refletir o que o algoritmo realmente faz, e
não aquilo que o programador espera que ele faça
40 / 421
Declaração de variáveis
Para que uma variável seja utilizada em um algoritmo é
necessário que ela seja declarada no início do mesmo. O
formato de uma declaração é:
Var <lista de declarações>
onde cada declaração tem o formato
lista de variáveis : tipo
onde tipo pode ser inteiro ou real.
Ex:
Var a,b,c:inteiro
x,y:real
41 / 421
Comando de Leitura
É utilizado para o algoritmo receber dados pelo teclado. Seu
formato é:
Leia (lista de variáveis)
Ex:
Leia (valor1, valor2, valor3)
Ao executar esse comando, o algoritmo espera o usuário digitar
3 valores, e armazena o primeiro em valor1, o segundo em
valor2 e o terceiro em valor3.
42 / 421
Assim: o algoritmo Soma2 pode ser completado:
Algoritmo
var a,b,soma:inteiro
inicio
escreval("Digite um valor")
leia(a)
escreval("Digite outro valor")
leia(b)
soma <- a + b
escreval("A soma é ",soma)
escreval("Tenha um bom dia!!!")
fimalgoritmo
43 / 421
Exercícios
Faça um algoritmo que leia as 3 notas de um aluno (valores
reais) e calcule e escreva sua média aritmética.
Obs: A média aritmética de 3 valores a, b e c é dada por
a+b+c
3
Faça um algoritmo que leia as 3 notas de um aluno (valores
reais) e calcule e escreva sua média harmônica ponderada com
pesos 1, 2 e 3 (expressão abaixo):
MH =
6
1
N
1
+ 2
N
2
+ 3
N
3
44 / 421
Exercícios(2)
O coeficiente angular (inclinação) da reta que liga dois pontos
dados pelas coordenadas (x
1
,y
1
) e (x
2
,y
2
) é dado por
y
2
−y
1
x
2
−x
1
.
Faça um algoritmoque leias as coordenadas x e y de dois
pontos A e B (na ordem x
a
, y
a
, x
b
, y
b
) e calcule e escreva o
coeficiente angular entre os pontos a e b.
45 / 421
Baixe do UCS Virtual / Acervo da Turma o programa
vposeidon.jar (está sob o nome "Portal de Algoritmos")
Execute-o
46 / 421
Portal de Algoritmos - Versão Desktop
47 / 421
1 Editar, na janela da esquerda (editor de algoritmos) o
algoritmo a seguir:
Algoritmo
var a,b,soma:inteiro
inicio
escreval("Digite um valor")
leia(a)
escreval("Digite outro valor")
leia(b)
soma <- a + b
escreval("A soma é ",soma)
escreval("Tenha um bom dia!!!")
fimalgoritmo
48 / 421
Algoritmo digitado
49 / 421
1 Executar o algoritmo digitado (botão "Executar"em cima à
esquerda) diversas vezes, testando com as opções linha-a-linha
e leia aleatório selecionados.
50 / 421
1 Executar através do botão Passo-a-Passo.
2 Durante a execução passo a passo examinar o conteúdo das
variáveis na aba "Variáveis/Computação"(abaixo)
51 / 421
1 Executar através do botão Passo-a-Passo.
2 Durante a execução passo a passo examinar o conteúdo das
variáveis na aba "Variáveis/Computação"(abaixo)
52 / 421
Funcionalidades do Ambiente de Algoritmos
Além dos recursos apresentados (edição e execução de
algoritmos) o ambiente apresentado possui os seguintes
recursos:
Uma lista de aproximadamente 300 problemas cobrindo todo o
conteúdo de algoritmos da disciplina;
Um mecanismo de verificação automática da correção das
soluções para os problemas da lista;
Possibilidade de armazenar todas as soluções dos usuários em
um servidor, possibilitando o acesso às mesmas de qualquer
computador dentro ou fora da UCS;
Mecanismo de avaliação do custo de execução de uma solução;
"Ranking"dos usuários que resolveram corretamente a maior
quantidade de problemas em cada categoria.
53 / 421
"Ranking"dos usuários com mais exercícios resolvidos
Para acessar selecione no menu "Estatísticas"a opção Top5
54 / 421
Cadastro de usuário
Para utilizar as funcionalidades descritas, é necessário efetuar um cadastro no servidor do
ambiente
Sugere-se que utilize-se o mesmo login, email e senha do ucs virtual, mas não é indispensável,
mas o login, senha e email só podem conter letras e dígitos
O cadastro é efetuado através do menu Usuário mostrado abaixo:
55 / 421
Banco de Problemas
Após efetuar o cadastro, logar-se no ambiente e selecionar qual
categoria de problemas será trabalhada. Isso é feito na
caixinha de seleção "Tipo de Algoritmo"mostrada abaixo.
A lista de problemas é dividida em 8 categorias de problemas,
de acordo com os comandos necessários para resolvê-los.
Inicialmente trabalharemos com os problemas da categoria
"Sequenciais".
56 / 421
Seleção de Problema
Após selecionada a categoria, selecionar o problema a ser trabalhado na lista de problemas.
O enunciado do problema irá aparecer na caixinha "Problema Selecionado".
57 / 421
Seleção da solução a ser trabalhada
Um usuário pode manter no servidor várias soluções para um
mesmo problema.
Isso pode ser útil para poder comparar desempenhos de
algoritmos diferentes para o mesmo problema.
Após selecionar o problema a ser trabalhado, o usuário pode iniciar
uma nova solução a partir de um algoritmo vazio, ou carregar
alguma solução já existente para o editor de algoritmos.
A seleção de uma solução já existente é feita na caixa de seleção
"Soluções".
58 / 421
Criação de uma solução para um problema novo
Se o problema selecionado ainda não possui uma solução ou
deseja-se criar uma solução nova, deve-se seguir os seguintes
passos:
a) Criar uma solução vazia para o problema (Botão "Criar
Solução"embaixo, à direita).
b) A solução criada irá aparecer na lista de soluções do
usuário, abaixo.
c) Selecionar a solução recém criada na lista de soluções,
carregá-la para o editor (botão "Carregar") e editar a solução
do problema na janela de edição de algoritmos.
Obs: Os dados de teste para a validação do problema só serão
carregados ao ser clicado o botão "Carregar".
59 / 421
Salvamento de uma solução
O salvamento de uma solução no servidor só é habilitado
quando ela está associada a algum problema da lista.
O salvamento pode ser feito a qualquer momento durante a
edição, mesmo que a solução não esteja completa ou que não
funcione.
60 / 421
Salvamento de uma solução
O salvamento de uma solução no servidor só é habilitado
quando ela está associada a algum problema da lista.
O salvamento pode ser feito a qualquer momento durante a
edição, mesmo que a solução não esteja completa ou que não
funcione.
61 / 421
Cálculo do Custo de uma solução
No cálculo do custo são contabilizadas todas as operações
aritméticas, atribuições, escritas, leituras, testes e desvios
efetuados pelo algoritmo.
No exemplo abaixo as 8 operações executadas são:
1) Escrita de uma mensagem 2) Salto de linha na escrita
3) Uma leitura 4) Cálculo de uma multiplicação
5) Uma atribuição 6) Escrita de uma mensagem
7) Escrita de uma variável 8) Salto de linha na escrita
62 / 421
Validação de uma solução
Na validação de uma solução, ela é executada para diversos
conjuntos de dados, que buscam testar se o algoritmo funciona
em diferentes situações.
Se o algoritmo não gerar o resultado esperado para algum dos
conjuntos de dados previstos, será emitida uma mensagem de
erro.
O algoritmo abaixo funciona somente para a=1 e o erro será
identificado quando o algoritmo tentar escrever o resultado
(errado) gerado.
63 / 421
Validação de uma solução
Na validação de uma solução, se o algoritmo testado gerar a
resposta correta para todos os dados de teste, será mostrada a
mensagem "Executou corretamente todas as instâncias"
Nesse caso o custo total das diversas execuções será mostrado
imediatamente abaixo da tela de edição à esquerda.
64 / 421
Alternativa B - Visualg
O Visualg é um ambiente de edição e execução de algoritmos
produzido pela Apoio Informática.
É um programa de livre uso e distribuição e não é necessário
efetuar uma instalação no computador, podendo ser usado
mesmo a partir de um pen drive.
Ao contrário do vposeidon ele permite o salvamento dos
algoritmos em disco e permite a importação/exportação
(ctrl-c/ctrl-v) de trechos de algoritmos.
O executável do VisuAlg pode ser baixado em
http://www.apoioinformatica.inf.br/produtos/visualg
65 / 421
Visualg
66 / 421
Visualg: vantagens e desvantagens (em relação ao
vposeidon)
Vantagem:
Não é necessário ter Java instalado no computador
Desvantagens (de modo geral, devidas a não estar ligado a
servidor):
Os algoritmos a serem trabalhados devem estar na máquina
que está sendo usada (ou carregados em um pendrive)
Não possui um mecanismo de validação automática da
correção dos problemas
Os comandos que contém erro são identificados somente na
hora da execução
Há alguns erros na linguagem utilizada
67 / 421
Visualg
Para executar um algoritmo, basta digitá-lo na janela de
edição e executá-lo clicando no ícone correspondente:
68 / 421
S00000050 - Faça um algoritmo que leia um valor N, representando
o lado de um quadrado, e calcule e escreva a área do quadrado.
algoritmo "S001_S00000050"
var N,area:inteiro
inicio
Escreval("Digite o valor do lado")
leia (N)
area<-n*n
escreval("A area é ",area)
fimalgoritmo
69 / 421
S00000100 - Faça um algoritmo que leia dois valores inteiros e
escreva a sua soma.
algoritmo "S001_S00000100"
var a,b,soma:real
inicio
escreva("Digite dois valores:")
leia(a,b)
soma < − a+b
escreva("A soma é ",soma)fimalgoritmo
70 / 421
S00000150 - Faça um algoritmo que leia 3 valores reais, notas de
um aluno, e escreva sua média aritmética. A média aritmética de
um conjunto de valores é dada pela soma dos valores dividido pela
quantidade de valores considerados.
algoritmo "S002_S00000150"
var a,b,c,media:real
inicio
leia(a,b,c)
media<-(a+b+c)/3
escreva("a média é ",media)
fimalgoritmo
71 / 421
S00000200 - Faça um algoritmo que leia 2 valores reais v1 e v2 e
calcule e escreva a área do triângulo que tem base igual a v1 e
altura igual a v2. Dica:A área de um triângulo é dada pela
expressão: (base x altura)/2
72 / 421
S00000220 - O produto escalar A.B de dois vetores A=[a1,a2,a3...]
e B=[b1,b2,b3...] é dado pelo somatório a1*b1+a2*b2+a3*b3+...
Faça um algoritmo que leia as coordenadas ax,ay,az,bx,by,bz de
dois vetores no espaço tridimensional e calcule e escreva seu
produto escalar.
a l g o r i tmo "S001_S00000220"
va r ax , ay , az , bx , by , bz : r e a l
i n i c i o
l e i a ( ax , ay , az , bx , by , bz )
e s c r e v a ( ax∗bx+ay∗by+az∗bz )
f ima l g o r i tmo
73 / 421
Expressões:
Podem ser aritméticas, lógicas ou literais. Consistem da
aplicação de operadores sobre operandos resultando em
valores. Os operadores podem ser:
Aritméticos : são aplicados a operandos numéricos e resultam
em valores numéricos. Os operadores aritméticos suportados
pelo AlgoUCS são o seguintes:
74 / 421
Operação Operador Prioridade Associatividade Tipo de valor retornado
Troca de Sinal - 1 <- o mesmo do operando
Potenciação � 2 <-
se algum operando é real,
resulta real, caso contrário
resulta inteiro
Multiplicação * 3 -> idem à potenciação
Divisão / 3 -> real
Quociente da divisão inteira \ 3 -> inteiro
Resto da divisão inteira % 3 -> inteiro
Soma + 4 -> idem à potenciação
Subtração - 4 -> idem à potenciação
Observações:
O operador de troca de sinal é o único operador de apenas um
operando
Os operadores de quociente e resto de divisão inteira só são
aplicáveis a operandos inteiros
75 / 421
Observações:
1 Operadores da mesma prioridade são avaliados pela sua
associatividade, normalmente da esquerda para a direita, com
exceção da potenciação e troca de sinal, que são avaliadas da
direita para a esquerda.
2 Parênteses podem ser utilizados para alterar a ordem de
avaliação dos operadores.
3 Radiciação pode ser obtida com o operador de potenciação.
76 / 421
A distância entre dois pontos definidos pelas coordenadas
(x
1
, y
1
) e (x
2
, y
2
) no plano cartesiano é dada por:√
(x
1
− x
2
)2 + (y
1
− y
2
)2
Escreva a expressão correspondente de acordo com as regras e
operadores utilizados em português estruturado:
As raízes da equação ax
2 + bx + c = 0 podem ser calculadas
pela fórmula de Baskhara a seguir:
−b ±√b2 − 4ac
2a
Escreva a expressão correspondente de acordo com as regras e
operadores utilizados em português estruturado:
77 / 421
1 Escreva as expressões correspondentes na nossa linguagem à
expressão da fórmula de Baskhara.
2 Entre com o Firefox em http://vposeidon9.ucs.br e logue-se
com seu usuário (quem não veio à aula anterior e ainda não
tem usuário, execute as orientações da aula anterior).
3 Resolva os exercícios 300 e 900.
78 / 421
S00000300 - Faça um algoritmo que leia 3 valores a, b e c,
coeficientes de uma equação de segundo grau, e calcule e escreva a
soma das raízes da equação. Dica:As raízes de uma equação podem
ser calculadas pela fórmula de Baskhara.
a l g o r i tmo
va r a , b , c , d e l t a , x1 , x2 : r e a l
i n i c i o
l e i a ( a , b , c )
d e l t a <−r a i z q ( b^2−4∗a∗c )
x1<−(−b+d e l t a )/(2∗ a )
x2<−(−b−d e l t a )/(2∗ a )
e s c r e v a ( x1+x2 )
f ima l g o r i tmo
79 / 421
S00000350 - Faça um algoritmo que leia 3 valores a, b e c,
coeficientes de uma equação de segundo grau, e calcule e escreva o
produto (multiplicação) das raízes da equação. Dica:As raízes de
uma equação podem ser calculadas pela fórmula de Baskhara.
a l g o r i tmo
va r a , b , c , d e l t a , x1 , x2 : r e a l
i n i c i o
l e i a ( a , b , c )
d e l t a <−r a i z q ( b^2−4∗a∗c )
x1<−(−b+d e l t a )/(2∗ a )
x2<−(−b−d e l t a )/(2∗ a )
e s c r e v a ( x1∗x2 )
f ima l g o r i tmo
80 / 421
Funções raizq( ) e abs( )
Além dos operadores aritméticos, também podem ser
utilizadas em expressões as funções raizq( ), que calcula a raiz
quadrada de um valor, e a função abs( ) que calcula o valor
absoluto (módulo) de um valor.
Uma chamada de função pode ser colocada em qualquer lugar
da expressão onde iria um operando. Ex:
a <- raizq (b� 2-4*a*c)
b <- a + abs(x-y)
Resolver os exercícios 400, 500 e 600 do portal.
81 / 421
S00000210 - O produto vetorial AxB de dois vetores A=[ax,ay] e
B=[bx,by] é um vetor perpendicular ao plano formado pelos vetores
A e B, de módulo igual a |ax*by-ay*bx|. Faça um algoritmo que
leia as componentes ax,ay,bx e by dos vetores A e B, e calcule e
escreva o módulo do vetor resultante do produto vetorial.
a l g o r i tmo
va r ax , ay , bx , by : r e a l
i n i c i o
l e i a ( ax , ay , bx , by )
e s c r e v a ( abs ( ax∗by−ay∗bx ) )
f ima l g o r i tmo
82 / 421
S00000400 - Faça um algoritmo que leia 2 valores e escreva o
maior deles. Dica:O maior entre dois valores quaisquer v
1
e v
2
pode
ser calculado pela expressão
v
1
+v
2
+|v
1
−v
2
|
2
. O operador matemático
de módulo ( |x| ) é representado na nossa linguagem pela função
abs(x)
algoritmo
var a,b,valor:real
inicio
escreva ("digite 2 valores")
leia (a,b)
valor < − (a+b+abs(a-b))/2
escreva ("o maior número é",valor)
fimalgoritmo
83 / 421
S00000500 - Faça um algoritmo que leia 2 valores e escreva o
menor deles. Dica:O menor entre dois valores pode ser obtido a
partir do maior valor e da soma dos dois (por exemplo: Se a soma
de dois valores é 15 e o valor do maior é 10, como pode ser
calculado o valor do menor?).
algoritmo
var a,b,menor:real
inicio
leia(a,b)
maior< −(a+b+abs(a-b))/2
menor< −a+b-maior
escreva(menor)
fimalgoritmo
84 / 421
S00000600 - Faça um algoritmo que leia 3 valores escreva o
maior deles. Dica:O maior entre três valores pode ser
encontrado pela aplicação repetida da expressão para
encontrar o maior entre dois valores.
85 / 421
algoritmo
var a,b,c,valor:real
inicio
escreva ("digite 3 valores")
leia (a,b,c)
valor < − (a+b+abs(a-b))/2
valor < − (valor+c+abs(valor-c))/2
escreva ("o maior número é",valor)
fimalgoritmo
86 / 421
S00000900 - Faça um algoritmo que lê 3 valores, lados de um
triângulo, e calcule e escreva a área do triângulo formado.
Dica: A área de um triângulo de lados l
1
, l
2
e l
3
pode ser
calculada pela expressão
Area =
√
S ∗ (S − l
1
) ∗ (S − l
2
) ∗ (S − l
3
)
onde S é o semi-perímetro, ou seja, a metade da soma dos
lados.
87 / 421
algoritmo "S001_S00000900"
var a,b,c,s,area:real
inicio
leia(a,b,c)
s<-(a+b+c)/2
area<-raizq(s*(s-a)*(s-b)*(s-c))
escreva(area)
fimalgoritmo
88 / 421
Operadores de divisão inteira
São utilizados para divisões entre valores inteiros, que devem
resultar em um quociente inteiro e um resto inteiro.
Os operadores são o de quociente inteiro, representado pela
contrabarra (\) e o de resto inteiro, representado pelo
percentual (%).
Os operadores são independentes um do outro, pode-se querer
calcular só o resto ou só o quociente.
Se for necessário calcular os dois (o resto e o quociente),
deve-se executar dois comandos, um para o cálculo do resto e
um para o cálculo do quociente.Ex:
b <- 378
a <- b \ 100 nesse comando a variável a recebe 3
c <- b % 100 e c recebe 78
Resolva os exercícios 700, 800 e 1000 do portal.
89 / 421
S00000700 - Faça um algoritmo que lê um valor inteiro em reais e
calcula e escreve qual o menor número possível de notas de
100,50,20,10,5,2 e 1 real em que o valor pode ser decomposto.
Dica:Isso pode ser calculado a partir de operações de divisão inteira.
l e i a ( v a l o r )
Notas100 <− v a l o r \ 100
v a l o r <− v a l o r % 100
Notas50 <− v a l o r \50
v a l o r <− v a l o r %50
. . .
90 / 421
S00000800 - Faça um algoritmo que lê uma quantia inteira em
segundos e escreva o número de horas, minutos e segundos
correspondente. Dica:Pode-se converter segundos para minutos
usando-se a divisão inteira por 60. Ou pode-se converter segundos
para horas usando-se a divisão por 3600.
91 / 421
S00001000 - Faça um algoritmo que le um valor entre 0 e 9999 e
calcula a soma dos seus dígitos. Dica: O dígito menos significativo
de um número inteiro pode ser obtido pelo resto da divisão do
número por 10. Os dígitos restantes podem ser obtidos pela divisão
inteira por 10.
92 / 421
Ex: Separação de dígitos
l e i a ( v a l o r )
m i l h a r <− v a l o r \ 1000
93 / 421
Ex: Separação de dígitos
l e i a ( v a l o r )
m i l h a r <− v a l o r \ 1000
v a l o r <− v a l o r % 1000
94 / 421
Ex: Separação de dígitos
l e i a ( v a l o r )
m i l h a r <− v a l o r \ 1000
v a l o r <− v a l o r % 1000
centena <− v a l o r \ 100
95 / 421
Ex: Separação de dígitos
l e i a ( v a l o r )
m i l h a r <− v a l o r \ 1000
v a l o r <− v a l o r % 1000
centena <− v a l o r \ 100
v a l o r <− v a l o r % 100
96 / 421
Ex: Separação de dígitos
l e i a ( v a l o r )
m i l h a r <− v a l o r \ 1000
v a l o r <− v a l o r % 1000
centena <− v a l o r \ 100
v a l o r <− v a l o r % 100
dezena <− v a l o r \ 10
97 / 421
Ex: Separação de dígitos
l e i a ( v a l o r )
m i l h a r <− v a l o r \ 1000
v a l o r <− v a l o r % 1000
centena <− v a l o r \ 100
v a l o r <− v a l o r % 100
dezena <− v a l o r \ 10
un idade <− v a l o r % 10
98 / 421
Ex: Separação de dígitos (b)
l e i a ( v a l o r )
un idade <− v a l o r % 10
v a l o r <− v a l o r \ 10
dezena <− v a l o r % 10
v a l o r <− v a l o r \ 10
centena <− v a l o r % 10
m i l h a r <− v a l o r \ 10
99 / 421
S00001200 - Faça um algoritmo que leia 4 valores, Hi, Mi, Hf, Mf,
representando respectivamente a hora e minuto inicial e final de um
evento, e calcule a duração do mesmo em horas e minutos.
Considere que o evento inicia e termina no mesmo dia. Dica: Para
simplificar o problema, converta cada par de valores em um único
valor em minutos.
algoritmo "S001_S00001200"
var hi,mi,hf,mf,dh,dm,d:inteiro
inicio
leia(hi,mi,hf,mf)
d<-hf*60+mf-hi*60-mi
dh<-d\60
dm<-d % 60
escreva(dh,"horas e ",dm,"minutos")
fimalgoritmo
100 / 421
S00001300 - Faça um algoritmo que leia dois horários (hora,
minuto e segundo) e escreva quantos segundos transcorreram entre
esses dois horários.
algoritmo "S001_S00001300"
var hi,mi,si,hf,mf,sf:inteiro
inicio
leia(hi,mi,si,hf,mf,sf)
escreva(hf*3600+mf*60+sf-(hi*3600+mi*60+si))
fimalgoritmo
101 / 421
S00001350 - Faça um algoritmo que leia um horário (hora, minuto
e segundo) e escreva o horário correspondente ao segundo seguinte.
Ex: se for lido, 17,21,36 escrever 17,21,37. Considere que os
horários (lido e escrito) estão na faixa de 00:00:00 a 23:59:59.
a l g o r i tmo
va r h ,m, s : i n t e i r o
i n i c i o
l e i a (h ,m, s )
s<−3600∗h+60∗m+s+1
h<−(s \3600)%24
m<−s%3600\60
s<−s%60
e s c r e v a (h ,m, s )
f ima l g o r i tmo
102 / 421
S00001400 - Faça um algoritmo que a partir de um horário (hora,
minuto, segundo) e uma quantidade de segundos transcorridos,
calcule o segundo horário.
a l g o r i tmo "S001_S00001400"
va r h ,m, s , s t : i n t e i r o
i n i c i o
l e i a (h ,m, s , s t )
s<−s+s t
m<−m+s \60
s<−s%60
h<−h+m\60
m<−m%60
e s c r e v a (h ,m, s )
f ima l g o r i tmo
103 / 421
S00001500 - Faça um algoritmo que leia a quantidade de alunos
em uma sala de aula e a quantidade de alunos por grupo, e calcule
e escreva quantos grupos serão formados e o resto de alunos que
não foram suficientes para formar mais um grupo.
a l g o r i tmo "S001_S00001500"
va r N, Ag , g , r : i n t e i r o
i n i c i o
l e i a (N, Ag)
g<−N\Ag
r<−N%Ag
e s c r e v a ( g , r )
f ima l g o r i tmo
104 / 421
S00001650 - Faça um algoritmo que leia um número de 10 dígitos e
rotacione os dígitos uma posição para a esquerda, de modo que o
primeiro dígito passe a ocupar a última posição. Ex: 1234561234
deve gerar 2345612341 (todos os dígitos foram uma posição para a
esquerda e o 1 da primeira posição passou a ocupar a última
posição).
a l g o r i tmo "S001_S00001650"
va r a : i n t e i r o
i n i c i o
l e i a ( a )
e s c r e v a ( a%1000000000∗10+a \1000000000)
f ima l g o r i tmo
105 / 421
S00001700 - Faça um algoritmo que leia 5 números inteiros e
escreva a quantidade deles que são pares. Dica:Um número é par se
o resto da sua divisão por 2 é zero.
a l g o r i tmo "S001_S00001700"
va r a , b , c , d , f : i n t e i r o
i n i c i o
l e i a ( a , b , c , d , f )
e s c r e v a (5−(a%2+b%2+c%2+d%2+f %2))
f ima l g o r i tmo
106 / 421
S00001800 - Faça um algoritmo que leia 5 números inteiros e
escreva a soma dos que forem ímpares. Dica:Um número é ímpar se
o resto da sua divisão por 2 é um.
a l g o r i tmo "S001_S00001800"
va r n1 , n2 , n3 , n4 , n5 , soma : i n t e i r o
i n i c i o
l e i a ( n1 , n2 , n3 , n4 , n5 )
n1<−n1 % 2 ∗ n1
n2<−n2 % 2 ∗ n2
n3<−n3 % 2 ∗ n3
n4<−n4 % 2 ∗ n4
n5<−n5 % 2 ∗ n5
soma<−n1+n2+n3+n4+n5
e s c r e v a ( soma )
f ima l g o r i tmo
107 / 421
Troca de variáveis
Para trocar os conteúdos de duas variáveis entre si, é
necessário copiar o valor de uma delas para uma terceira
variável.
O trecho a seguir é o trecho padrão para trocar entre si os
valores de a e b:
aux <- a
a <- b
b <- aux
Resolva o exercício 1100.
108 / 421
S00001100 - Faça um algoritmo que leia 3 valores v1, v2 e v3, e
troque os valores entre si de modo que ao final a variável v2
contenha o valor que foi lido para v1, a variável v3 contenha o valor
que foi lido para v2, e a variável v1 contenha o valor que foi lido
para a variável v3. Dica:Para trocar os valores de duas variáveis
(digamos v1 e v2) entre si, salva-se o valor de uma delas (p.ex., v1)
em uma variável auxiliar qualquer (p.ex., aux) , copia-se o valor da
segunda (v2) para a variável que foi salva (v1), e copia-se o valor
da variável auxiliar (que contem o valor original da primeira), para a
segunda variável.
109 / 421
Comando Se ou Comando Condicional
É utilizado quando o algoritmo deve executar comandos
diferentes em diferentes situações.
Seu formato é:
Se condição
entao lista de comandos
fimse
ou
Se condição
entao lista 1
senao lista 2
fimse
onde condição é uma expressão de comparação que resulta
verdadeiro ou falso.
110 / 421
Os operadores de comparação (chamados de operadores
relacionais porque identificam a relação entre dois valores)
são:
=
<> (diferente)
>
<
>=
<=
Exemplo:
Se a>0
entao escreva("Positivo")
senao escreva("Negativo")
fimse
Se a>b
entao escreva(A, "é maior")
fimse
111 / 421
O comando condicional deve ser utilizado quando há diversas
situações que devem ser tratadas de formas diferentes pelo
algoritmo. Os passos para utilizá-lo são:
1 Identificar com clareza quais as diferentes situaçõesque devem
ser tratadas pelo algoritmo.
2 Definir qual o comportamento (comandos que devem ser
executados) que o algoritmo deve ter em cada uma das
situações.
3 Encontrar expressões que permitam ao algoritmo identificar
cada uma das situações.
112 / 421
Caso mais simples: Há somente 2 situações
Nesse caso um único "se"é suficiente para diferenciar as duas
situações
Se a>0
entao escreva("Positivo")
senao escreva("Negativo")
fimse
Pode ocorrer também que no caso de a condição falhar, nada
deve ser feito.
Nesse caso o "senao"pode ser omitido
Se a>b
entao escreva(A, "é maior")
fimse
Resolva os exercícios 20, 40, 60, 80, 100, 200, 1200, 300, 350
e 360 da lista de condicionais.
113 / 421
C00000300 - Faça um algoritmo que leia 3 valores a, b e c,
coeficientes de uma equação de segundo grau, e verifique se a
equação tem raízes reais. Se a equação tiver raízes reais,
calcule e escreva as raízes da equação (em ordem crescente).
Se não tiver, escreva "A equação não possui raízes reais".
Dica: As raízes de uma equação podem ser calculadas pela
fórmula de Baskhara. Uma equação não possui raízes se reais
se B*B-4*a*c < 0
114 / 421
C00000040 - Faça um algoritmo que leia um valor e escreva:
0, se o valor é par;
1, se o valor é ímpar.
C00000060 - Faça um algoritmo que leia dois valores e,
através de uma comparação, escreva o maior deles. Considere
que os dois valores são diferentes.
C00000080 - Faça um algoritmo que leia dois valores e escreva
os dois em ordem crescente.
115 / 421
Caso menos simples: Há mais de 2 situações
Nesse caso um único "se"não é suficiente para diferenciar as
diferentes situações
Pode-se utilizar um "se"para identificar cada situação
Nesse caso, a expressão deve ser suficiente para identificar
cada caso dentre todos os casos
C00000020 - Faça um algoritmo que leia um valor e escreva:
0, se o valor é zero;
1, se o valor é maior que zero;
-1 - se o valor é negativo.
116 / 421
escreva("Digite um valor:")
leia(a)
Se a>0
entao escreva(1)
fimse
Se a=0
entao escreva(0)
fimse
Se a<0
entao escreva(-1)
fimse
117 / 421
Alternativa B - Comandos Se aninhados
A sintaxe do comando Se é:
Se cond i ção
entao l i s t a de comandos
senao l i s t a 2
f ims e
As listas de comandos (do entao e do senao) podem conter
qualquer comando dentre os comandos já vistos, leitura,
escrita, atribuição... inclusive o comando se.
Para utilizar um comando se dentro de outro (no então ou no
senão), ele deve estar completo (Se condição entao lista de
comandos fimse).
Um exemplo de uso é:
118 / 421
Se a=0
entao escreva("zero ",0)
senao Se a>0
entao escreva("positivo", 1)
senao escreva("negativo", 2)
fimse
fimse
119 / 421
O que NÃO fazer em hipótese nenhuma
Combinar as duas soluções:
Se a=0
entao escreva("zero ",0)
fimse
se a>0
entao escreva("positivo", 1)
senao escreva("negativo", 2)
fimse
Qual é o problema com essa abordagem?
120 / 421
Operadores Lógicos
uma condição pode conter diversas expressões de comparação
combinadas com o uso dos operadores e e ou.Ex:
Se a>=b e a>=c
entao escreva(a, "é maior")
fimse
uma expressão com e é verdadeira se ambas as subexpressões
são verdadeiras.
Uma expressão com ou é verdadeira se pelo menos uma das
expressões é verdadeira.
O operador e tem prioridade maior que o operador ou.
Pelo descrito acima, a linguagem não permite expressões do
tipo a>b>c.
121 / 421
C00000100 - Faça um algoritmo que leia 3 valores v
1
, v
2
e v
3
,
e escreva-os em ordem crescente.
Há 6 ordens possíveis (sem contar a possibilidade de ocorrerem
números repetidos)
v1 < v2 < v3
v1 < v3 < v2
v2 < v1 < v3
v2 < v3 < v1
v3 < v1 < v2
v3 < v2 < v1
122 / 421
Uma alternativa é utilizar um "se"para cada situação:
se v1<v2 e v2<v3
entao e s c r e v a ( v1 , " " , v2 , " " , v3 )
f ims e
se v1<v3 e v3<v2
entao e s c r e v a ( v1 , " " , v3 , " " , v2 )
f ims e
se v2<v1 e v1<v3
entao e s c r e v a ( v2 , " " , v1 , " " , v3 )
f ims e
se v2<v3 e v3<v1
entao e s c r e v a ( v2 , " " , v3 , " " , v1 )
f ims e
se v3<v1 e v1<v2
entao e s c r e v a ( v3 , " " , v1 , " " , v2 )
f ims e
se v3<v2 e v2<v1
entao e s c r e v a ( v3 , " " , v2 , " " , v1 )
f ims e
O que acontecerá se houverem valores repetidos?
Como se pode corrigir?
123 / 421
Alternativa B - Cada teste só é feito se o teste anterior falhou:
se v1<v2 e v2<v3
entao e s c r e v a ( v1 , " " , v2 , " " , v3 )
senao se v1<v3 e v3<v2
entao e s c r e v a ( v1 , " " , v3 , " " , v2 )
senao se v2<v1 e v1<v3
entao e s c r e v a ( v2 , " " , v1 , " " , v3 )
senao se v2<v3 e v3<v1
entao e s c r e v a ( v2 , " " , v3 , " " , v1 )
senao se v3<v1 e v1<v2
entao e s c r e v a ( v3 , " " , v1 , " " , v2 )
senao se v3<v2 e v2<v1
entao e s c r e v a ( v3 , " " , v2 , " " , v1 )
f ims e
f ims e
f ims e
f ims e
f ims e
f ims e
O que acontecerá se houverem valores repetidos? Como se pode corrigir?
O último teste é necessário?
124 / 421
C00000200 - Faça um algoritmo que leia 3 valores v1, v2 e v3
e coloque-os em ordem crescente, de forma que v1 contenha o
menor, v2 contenha o elemento do meio (nem o maior, nem o
menor), e v3 contenha o maior. Escreva os valores ordenados.
A solução anterior não pode ser utilizada nesse exercício
porque o enunciado pede explicitamente que os valores sejam
trocados e v1 fique com o menor valor.
Para se conseguir isso, compara-se as variáveis entre si,
trocando-as entre si quando necessário:
125 / 421
algoritmo "C001 C00000100"
var a,b,c,aux:inteiro
inicio
leia(a,b,c)
se a>b entao
aux<-a
a<-b
b<-aux
fimse
se a>c entao
aux<-a
a<-c
c<-aux
fimse
se b>c entao
aux<-b
b<-c
c<-aux
fimse
escreva(a,b,c)
fimalgoritmo
126 / 421
C00000250 - Escreva um algoritmo que leia os valores das
quatro provas de um aluno e escreva a média aritmética
considerando apenas as três melhores notas. Por exemplo, se o
valores lidos foram 9, 9.5, 7, e 8, a média será (9 + 9.5 +
8)/3 (a prova de nota 7 é descartada). Dica:Não esqueça de
considerar a possibilidade de ocorrerem notas iguais.
127 / 421
C00000350 - Faça um algoritmo que leia 3 valores a, b e c,
lados de um triângulo, e verifique o tipo de triângulo formado
escrevendo:
0 - se o triângulo é equilátero (os três lados são iguais);
1 - se o triângulo é isósceles (dois lados iguais e um diferente);
2 - escaleno (3 lados diferentes).
128 / 421
Alternativa 1
Leia(a,b,c)
se a=b e a=c
entao escreva("Equilatero ",0)
fimse
se a<>b e a<>c e b<>c
entao escreva("Escaleno ",2)
fimse
se a=b e a<>c ou a=c e a<>b ou b=c e a<>b
entao escreva("Isósceles ",1)
fimse
129 / 421
Alternativa 2
Leia(a,b,c)
se a=b e a=c
entao escreva("Equilatero ",0)
senao se a<>b e a<>c e b<>c
entao escreva("Escaleno ",2)
senao escreva("Isósceles", 1)
fimse
fimse
130 / 421
Alternativa 3
Leia(a,b,c)
se a=b e a=c
entao escreva("Equilatero ",0)
senao se a=b ou a=c ou b=c
entao escreva("Isósceles", 1)
senao escreva("Escaleno ",2)
fimse
fimse
131 / 421
Qual das três alternativas é mais eficiente?
Por quê é mais eficiente?
Por que a expressão do Isósceles na alternativa 1 é diferente da
alternativa 3?
Em que situações se pode colocar um se dentro do outro (Se's
aninhados)
Pode-se colocar sempre?
Pode-se usar Se's aninhados no código seguinte?
132 / 421
C00000360 - Faça um algoritmo que leia 3 valores a, b e c,
lados de um triângulo, e verifique o tipo de triângulo formado
escrevendo:0 - se o triângulo é retângulo (A
2 = B2 + C 2);
1 - se o triângulo é obtusângulo (um dos ângulos internos é
obtuso, isto é, maior que 90) (A
2 > B2 + C 2) ;
2 - se o triângulo é acutângulo (todos os ângulos internos são
agudos, isto é, menores que 90)(A
2 < B2 + C 2).
Lembre que, para aplicar as relações mostradas, o algoritmo
deve garantir que o maior dos 3 lados estará em A.
133 / 421
C00000400 - Faça um algoritmo que leia 3 valores l1,l2 e l3 e
verifique se formam um triângulo. Se formarem, calcule e
escreva a área do triângulo formado (veja exercício
S00000900). Se não formarem, escreva -1.
Obs: A área do triângulo de lados a, b e c pode ser calculada
pela fórmula de Hierão, dada abaixo:
Area =
√
S(S − a)(S − b)(S − c)
onde
S =
a + b + c
2
134 / 421
Obs: Uma triângulo pode ser definido pelo valor de seus três
lados. Entretanto, nem todo conjunto de 3 valores formam um
triângulo. Assim, 3,4,5 formam um triângulo. 10,3,2 não
formam. 10,5,5 formam? Qual a condição para que 3 valores
formem um triângulo?
135 / 421
Condição para 3 valores formarem um triângulo
"Cada um dos três lados deve ser menor que a soma dos
outros dois"
ou seja, "A deve ser menor que B+C, B deve ser menor que
A+C e C deve ser menor que A+B"
ou, como uma condição: A<B+C e B<A+C e C<A+B
136 / 421
Condição para 3 valores NÃO formarem um triângulo
"Um dos lados deve ser maior que a soma dos outros dois"
ou seja, "A deve ser maior ou igual a B+C, B deve ser maior
ou igual a A+C OU C deve ser maior ou igual a que A+B"
ou, como uma condição: A>=B+C ou B>=A+C ou
C>=A+B
137 / 421
C00000410 - Faça um algoritmo que leia 3 valores l1,l2 e l3 e
verifique se formam um triângulo e, se formarem, o tipo de
triângulo formado, escreva:
0 - se não formarem triângulo;
1 - se formarem um triângulo equilatero (os três lados são
iguais);
2 - se formarem um triângulo isósceles (dois lados iguais e um
diferente);
3 - se formarem um triângulo escaleno (3 lados diferentes)
138 / 421
C00000450 - Faça um algoritmo que implemente uma
calculadora de 4 operações. O algoritmo deve ler, nessa
ordem: o primeiro operando, o operador (+,-,*,/) e o segundo
operando, e deve escrever o resultado da operação. Por
exemplo, se o usuário digitar 2,+,3 o algoritmo deve escrever
5. Dica: Para que uma variável possa receber um texto
(mesmo que seja apenas o caracter "+") ela deve ser
declarada como "literal".
139 / 421
Literais
Variáveis literais são variáveis utilizadas para trabalhar com
informação não numérica.
Elas devem ser declaradas como "literal"e podem conter
qualquer sequencia de caracteres.
Para atribuir um texto a uma variável literal usa-se o comando
de atribuição, da mesma forma que uma variável numérica. Ex:
nome <- "Maria"
140 / 421
Comparação de Literais
Pode-se efetuar comparações entre literais usando os
operadores de comparação:
se nome="Juca"
entao ...
Para comparação de maior ou menor, é considerada a ordem
lexicográfica (alfabética).
Resolva o exercício 450 da lista de condicional.
141 / 421
C00000460 - Faça um algoritmo que leia um literal contendo
uma expressão com 3 caracteres, onde o primeiro caractere é
um dígito entre 0 e 9, o segundo é um operador (+,-,*,/) e o
terceiro caractere é um dígito entre 0 e 9, e efetue o cálculo da
expressão escrevendo o resultado. Dica:Use a função subliteral
para separar os 3 caracteres e a função val para converter os
operandos em seus valores numéricos.
142 / 421
Função subliteral
Além de atribuição e comparação há outras funções para
trabalhar com literais:
subliteral ( literal, posicao inicial, numero de posicoes) -
retorna o subliteral, a partir de <posicao inicial> por
<numero posicoes>
Ex: nome<-subliteral("Joana",2,3)
retorna o literal "oan"(3 caracteres a partir da segunda
posição)
143 / 421
val(lit,var) - converte o literal em lit para o valor numerico
correspondente que coloca em var.
A função retorna um valor lógico (verdadeiro ou falso) dizendo
se o literal era um valor numérico ou não
se val("123",valor)=verdadeiro entao...
vai colocar o valor 123 na variável "valor". Se o literal não for
um número válido, retorna falso
tamanho(literal) - retorna o tamanho do literal, em caracteres
e o operador + aplicado a literal concatena os literais
ex: Nomecomp <- "Joao"+ "da Silva"
5) Resolva o exercício 460 da lista de condicional.
144 / 421
C00000500 - Faça um algoritmo que leia 3 notas de um aluno
e escreva sua média harmônica. Dica: A média harmônica
entre três valores N1, N2 e N3 é calculada pela expressão
3
1/N
1
+ 1/N
2
+ 1/N
3
O que acontece se alguma das notas for igual a 0? Que
resultado o algoritmo deve emitir?
145 / 421
C00000600 - Faça um algoritmo que leia 3 notas de um aluno
e escreva sua média harmônica. Se o aluno obteve média
abaixo de 6.0, E SOMENTE NESSE CASO, leia uma quarta
nota (da prova de recuperação) e substitua a menor das três
notas pela nota da recuperação e recalcule a média harmônica.
Escreva a média harmônica final e o conceito obtido (0, se
média harmônica (MH) < 6.0; 1 se 6.0 <= MH <7.0; 2 se 7.0
<= MH < 8.0; 3 se 8.0 <= MH < 9.0; 4 se MH>=9.0).
146 / 421
C00000650 - Faça um algoritmo que leia 3 notas de um aluno
e escreva sua média harmônica (MH). Caso alguma das notas
seja 0 (zero), MH deve receber 0 (zero). Se o aluno obteve
uma MH abaixo de 6.0 e AINDA PUDER OBTER média igual
ou superior a 6.0, o algoritmo deve ler uma quarta nota (da
prova de recuperação) e substituir a menor das três notas pela
nota da recuperação, recalculando MH. O algoritmo deve
escrever a MH final e o conceito obtido (0, se MH < 6.0; 1 se
6.0 <= MH <7.0; 2 se 7.0 <= MH < 8.0; 3 se 8.0 <= MH
< 9.0; 4 se MH>=9.0). Dica:No caso do aluno ter obtido
média inferior a 6.0, uma forma de verificar se ele pode
alcançar média 6.0 através da prova de recuperação é
substituindo a menor nota por 10 e verificando se a MH
resultante é igual ou superior a 6.0.
147 / 421
C00000660 - Faça um algoritmo que leia 4 valores, Hi, Mi, Hf,
Mf, representando respectivamente a hora e minuto inicial e
final de um evento, e calcule a duração do mesmo em horas e
minutos. Considere que o evento pode iniciar em um dia e
terminar no dia seguinte. Algumas (mas não todas) situações
que podem ocorrer são:
Entrada: 10:30 Saída: 10:45 Duração: 00:15
Entrada: 10:30 Saída: 11:15 Duração: 00:45
Entrada: 22:15 Saída: 01:45 Duração: 03:30
Entrada: 22:15 Saída: 10:45 Duração: 12:30
148 / 421
C00001000 - Faça um algoritmo que leia para um trabalhador
o valor que ganha por hora, a hora de entrada e a hora de
saída (valores inteiros, sem minutos) e calcule quanto ele
ganhou pelo turno. Considere que ele entra e sai no mesmo
dia, e que as horas a partir das 20:00 valem 20% a mais
(adicional noturno).
Quantos casos diferentes existem?
Que cálculo deve ser feito em cada caso?
Como o algoritmo pode identificar cada caso?
149 / 421
150 / 421
he: hora de entrada
hs: hora de saída
vh: valor por hora
Caso Entrada Saída condição cálculo
1 até as 20:00 até as 20:00 hs<=20 sal←(hs-he)*vh
2 até as 20:00 entre 20:00 e 24:00 he<=20 e hs>20 sal←(hs-he)*vh+(hs-20)*vh*0.2
ou
sal←(20-he)*vh+(hs-20)*vh*1.2
3 a partir das 20:00 após 20:00 he>=20 sal←(hs-he)*vh*1.2
Exemplos (considerando VH (valor por hora)=10 reais):
Caso Entrada Saída Salário
1 15 19
2 15 21
3 21 23
151 / 421
C00001100 - Faça um algoritmo que leia para um trabalhador
o valor que ganha por hora, a hora de entrada e a hora de
saída (valores inteiros, sem minutos) e calcule quanto ele
ganhou pelo turno.Considere que ele entra e sai no mesmo
dia, e que as horas antes das 6:00 da manhã e a partir das
20:00 valem 20% a mais (adicional noturno).
Quantos casos diferentes existem?
Que cálculo deve ser feito em cada caso?
Como o algoritmo pode identificar cada caso?
Como devem ser tratados os casos-limite? (p.ex. He=6,
Hs=6, He=20, Hs=20)
152 / 421
153 / 421
Caso Entrada Saída condição cálculo ex: Resultado
1 <=6 <=6 HS<=6 sal←(hs-he)*vh*1.2 He=4,Hs=5,VH=10 12
2
3
4
5
6
154 / 421
C00001200 - Faça um algoritmo que leia para um trabalhador
o valor que ganha por hora, a hora de entrada e a hora de
saída (valores inteiros, sem minutos) e calcule quanto ele
ganhou pelo turno. Considere que ele pode entrar em um dia e
sair no outro, mas que o total de horas trabalhadas não excede
23 horas.
Quantos casos diferentes existem?
Que cálculo deve ser feito em cada caso?
Como o algoritmo pode identificar cada caso?
155 / 421
C00001250 - Faça um algoritmo que leia para um trabalhador
o valor que ganha por hora, a hora de entrada e a hora de
saída (valores inteiros, sem minutos) e calcule quanto ele
ganhou pelo turno. Considere que ele pode entrar em um dia e
sair no dia seguinte, e que se ele permanecer mais do que 8
horas, as duas horas a partir da nona hora valem 20% a mais,
e as horas a partir da décima primeira hora valem 50% a mais
(horas extras).
156 / 421
C00001300 - Faça um algoritmo que leia para um trabalhador
o valor que ganha por hora, a hora de entrada e a hora de
saída (valores inteiros, sem minutos) e calcule quanto ele
ganhou pelo turno. Considere que ele pode entrar em um dia e
sair no outro, mas que o total de horas trabalhadas não excede
23 horas. Considere que as horas a partir das 20:00 valem 20%
a mais (adicional noturno).
157 / 421
C00001400 - Faça um algoritmo que leia para um trabalhador
o valor que ganha por hora, a hora de entrada e a hora de
saída (valores inteiros, sem minutos) e calcule quanto ele
ganhou pelo turno. Considere que ele pode entrar em um dia e
sair no outro, mas que o total de horas trabalhadas não excede
23 horas. Considere também que as horas antes das 6:00 da
manhã e a partir das 20:00 valem 20% a mais (adicional
noturno).
158 / 421
C00001700 - Escreva um algoritmo que leia duas datas, cada
uma composta de Dia, Mês e Ano, e as escreva em ordem
cronológica crescente. Ex:se as datas são 01/04/2000 e
17/05/1988, o algoritmo deve escrever 17/05/1988
01/04/2000.
Na comparação de duas datas, o ano deve ser considerado em
primeiro lugar. Se os anos das duas datas são diferentes, o mês
e o dia não interessam.
Se os anos são iguais, deve ser considerado o mês (e o dia não
interessa).
O dia só é considerado quando o ano e o mês são iguais.
159 / 421
Sugestões:
Converta cada data (dia,mês,ano) em um único valor, da
forma como fizemos com hora-minuto-segundo, para poder
efetuar uma única comparação (que pesos podem ser
atribuídos aos anos e aos meses?); ou
Efetue primeiro a comparação entre os anos, se esses forem
iguais compare os meses e, se anos e meses forem iguais
compare os dias.
Idem ao anterior, mas em uma única expressão de comparação.
160 / 421
data1 <− ano1∗10000 + mes1∗100 + d i a1
data2 <− ano2∗10000 + mes2∗100 + d i a2
se data1<data2 entao . . .
s e ano1>ano2
entao e s c r e v a ( d ia2 , mes2 , ano2 , d ia1 , mes1 , ano1 )
senao se ano1<ano2
entao e s c r e v a ( d ia1 , mes1 , ano1 , d ia2 , mes2 , ano2 )
senao se mes1>mes2
entao . . .
. . .
f im s e
f ims e
f ims e
se ano1>ano2 ou ano1=ano2 e mes1>mes2 ou ano1=ano2 e mes1=mes2 e d ia1>d i a2
entao . . .
senao
f ims e
161 / 421
C00001750 - Escreva um algoritmo que leia três datas, cada
uma composta de Dia, Mês e Ano, e as escreva em ordem
cronológica crescente.
Ex:se as datas são 01/04/2000, 17/05/1988 e 23/10/1969, o
algoritmo deve escrever 23/10/1969 17/05/1988 01/04/2000.
Sugestão: As mesmas do exercício anterior
162 / 421
C00001790 - Escreva um algoritmo que leia uma data,
composta por dia, mês e ano, e verifique se a data corresponde
ao último dia do mês, escrevendo:
1, se for o último dia do mês
0 se não for o último dia do mês.
Considere, para simplificar o problema, que ano bissexto é
aquele divisível por 4, e que fevereiro tem 28 dias (29 em ano
bissexto).
Setembro, abril, junho e novembro têm 30 dias e todos os
outros meses tem 31 dias.
163 / 421
C00001800 - Escreva um algoritmo que leia uma data,
composta por dia, mês e ano, e escreva a data correspondente
ao dia seguinte.
Considere, para simplificar o problema, que ano bissexto é
aquele divisível por 4, e que fevereiro tem 28 dias (29 em ano
bissexto), setembro, abril, junho e novembro têm 30 dias e
todos os outros meses tem 31 dias.
Sugestão: lâmina seguinte
164 / 421
leia(dia,mes,ano)
Se {dia é o último dia do ano}
estao escreva (1, 1, ano+1)
senao se {dia é o último dia do mes}
estao escreva (1, mes+1, ano)
senao escreva(dia+1,mes,ano)
165 / 421
C00001850 - Escreva um algoritmo que leia uma data,
composta por dia, mês e ano, e escreva quantos dias
passaram-se desde o início do ano. Considere, para simplificar
o problema, que ano bissexto é aquele divisível por 4, e que
fevereiro tem 28 dias (29 em ano bissexto), setembro, abril,
junho e novembro têm 30 dias e todos os outros meses tem 31
dias.
166 / 421
C00001900 - Para enviar uma carta são necessários um selo e
um envelope. O selo custa 12 centavos e o envelope custa 5
centavos. Faça um algoritmo que leia uma quantia inicial de
selos, envelopes e centavos, e escreva o número de cartas que
podem ser enviadas com esses selos, envelopes e centavos
(utilizando-os para comprar mais selos e envelopes). Considere
que não é possível converter selos ou envelopes em dinheiro.
167 / 421
Quais são as diferentes situações que podem ocorrer?
Há mais selos que envelopes e:
O dinheiro é suficiente para igualar os dois
O dinheiro não é suficiente para igualar os dois
Há mais envelopes do que selos e:
O dinheiro é suficiente para igualar os dois
O dinheiro não é suficiente para igualar os dois
O caso em que o número inicial de selos e envelopes é igual
pode ser tratado dentro de algum dos casos anteriores
168 / 421
C00001925 - Para enviar uma carta são necessários um selo e
um envelope. O selo custa 12 centavos e o envelope custa 5
centavos. Faça um algoritmo que leia uma quantia inicial de
selos, envelopes e dinheiro (em reais), e escreva o número de
cartas que podem ser enviadas com esses selos, envelopes e
centavos (utilizando-os para comprar mais selos e envelopes).
Escreva também, nessa ordem, a quantidade de selos,
envelopes e dinheiro (em centavos), que restará após enviadas
as cartas. Considere que não é possível converter selos ou
envelopes em dinheiro.
169 / 421
C00001950 - Uma fábrica produz um recipiente de plástico
com sua tampa (também de plástico). Ambos os componentes
utilizam o mesmo equipamento para fabricação (ou seja, não
podem ser fabricados ao mesmo tempo). A fabricação do
recipiente consome duas horas; a fabricação da tampa
consome meia hora. Um cliente deseja o máximo de
recipientes (com tampa) para 10 dias. A fábrica trabalha 24
horas/dia e já dispõe de uma quantidade r de recipientes e t de
tampas em seu estoque (não necessariamente iguais). Faça um
algoritmo que leia os valores de r e t e informe o máximo de
conjuntos recipiente-tampa que ela pode fornecer em 10 dias.
170 / 421
C00002100 - A distância entre dois pontos definidos pelas
coordenadas (X
1
,Y
1
) e (X
2
,Y
2
) é dada por√(X
1
− X
2
)2 + (Y
1
− Y
2
)2
.
Faça um algoritmo que leia 8 valores representando as
coordenadas X e Y de 4 pontos,vértices de um polígono, e
verifique se os pontos formam um quadrado, escrevendo:
1 - se formam um quadrado;
0 - se não formam.
Considere que os pontos são lidos no sentido horário, seguindo
o perímetro do quadrado.
171 / 421
C00002150 - Faça um algoritmo que leia oito valores
correspondentes às coordenadas dos quatro vértices de um
quadrilátero convexo no espaço cartesiano (X
0
,Y
0
, X
1
,Y
1
,
X
2
,Y
2
, X
3
,Y
3
). O algoritmo deve identificar o tipo de polígono
formado escrevendo:
1 se os 4 pontos formam um quadrado;
2 se formam um retângulo;
3 se formam um losango;
4 se formam um paralelograma;
5 se formam um papagaio (2 pares de lados adjacentes iguais.
Ex: lados de tamanhos 3,3,4 e 4);
6 se não formam nenhum dos anteriores.
172 / 421
173 / 421
A distância (tamanho dos lados) entre dois pontos quaisquer
(X
i
,Y
i
) e (X
j
,Y
j
) pode ser obtida através da fórmula
distX
i
Y
i
X
j
Y
j
=
√
(X
i
− X
j
)2 + (Y
i
− Y
j
)2).
Por exemplo, se os pontos lidos foram (3,2), (0,5), (3,8) e
(6,5), a figura formada é um quadrado e o algoritmo escreve 1.
Para que a figura seja um quadrado, os comprimentos das
duas diagonais devem ser iguais, bem como os 4 lados.
Se os pontos lidos foram (4,2), (1,4), (4,6) e (7,4), a figura
formada é um losango.
Se os pontos lidos foram (2,3), (0,5), (3,8) e (5,6), a figura
formada é um retângulo.
Se os pontos lidos foram (7,3), (0,3), (2,5) e (5,5), a figura
formada não é nenhuma das anteriores e o algoritmo escreve 6
Os pontos são fornecidos em sentido horário ao longo do
perímetro do quadrilátero.
174 / 421
C00003100 - Faça um algoritmo que leia as dimensões (altura,
largura e profundidade) de duas caixas e verifique se a primeira
caixa pode ser colocada dentro da segunda. Considere que as
caixas podem ser rotacionadas em qualquer direção. Se a
primeira caixa couber dentro da segunda escreva 1, caso
contrário escreva 0.
175 / 421
C00003300 - Faça um algoritmo que leia 4 valores
X
1
,Y
1
,X
2
,Y
2
, correspondendo às coordenadas do canto inferior
esquerdo e canto superior direito de uma região retangular no
plano. Leia a seguir dois valores X,Y correspondendo a um
ponto no plano e escreva:
0 - Se o ponto está fora da região retangular;
1 - Se o ponto está dentro da região retangular;
2 - Se o ponto está exatamente na borda da região retangular.
176 / 421
177 / 421
C00003000 - Escreva um algoritmo que leia dois valores D e
DS, correspondentes a um dia do mes, e ao dia da semana que
corresponde a ele (1-domingo 2-segunda 3- terça 4-quarta
5-quinta 6-sexta 7-sábado). Calcule e escreva em que dia da
semana caiu o dia primeiro do mês do dia digitado.
Exemplo: dia 10 no mês e 3 (terça) na semana. Resposta 1
(domingo)
Exemplo: dia 30 no mês e 4 (quarta) na semana. Resposta 3
(terça feira)
Sugestão:
Subtraia do dia do mês as semanas inteiras, reduzindo o dia a
um valor entre 1 e 7
Calcule a diferença do dia resultante até o dia 1.
Subtraia a mesma diferença do dia da semana, corrigindo-o se
o resultado for menor que 1.
178 / 421
C00003100 - Faça um algoritmo que leia as dimensões (altura,
largura e profundidade) de duas caixas e verifique se a primeira
caixa pode ser colocada dentro da segunda. Considere que as
caixas podem ser rotacionadas em qualquer direção. Se a
primeira caixa couber dentro da segunda escreva 1, caso
contrário escreva 0.
Sugestões:
a) Ordene as dimensões das duas caixas e verifique se cada
dimensão da segunda é menor que a dimensão correspondente
da primeira ou
b) Verifique se há alguma permutação das dimensões da
segunda caixa que cabe na primeira caixa.
179 / 421
C00003200 - Faça um algoritmo que leia dois números de três
dígitos cada um, e verifique se possuem os mesmos dígitos.
Considere que pode haver dígitos repetidos em um número, e
que a cada dígito de um número deve corresponder
exatamente um dígito do outro número. Assim, os números
221 e 112 não tem os mesmos dígitos, porque apesar de
ambos terem somente os dígitos 1 e 2, aos dois dígitos 2 do
primeiro número corresponde o mesmo dígito no segundo
número. O algoritmo deve escrever 1, caso os números tenham
os mesmos dígitos, e 0 em caso contrário.
Sugestões:
a e b) As duas sugestões do problema anterior ou
c) Encontre uma função matemática que converta os 3 valores
em um único valor, de modo que dois conjuntos com os
mesmos valores gerem o mesmo valor, e conjuntos com valores
diferentes gerem valores diferentes, e compare os valores
correspondentes aos dois conjuntos.
180 / 421
C00003250 - Faça um algoritmo que leia um número de três
dígitos e escreva o maior número que possui os mesmos dígitos
do número lido. Se um dígito aparecer repetido no número
lido, deve ser repetido o mesmo número de vezes no número
gerado.
Dica: Ordene os dígitos e gere um número com os mesmos
dígitos, com peso maior para o maior dígito.
181 / 421
C0003650 - A locadora Só Filmassos classifica os filmes em
"lançamentos"e "acervo", sendo que a diária do lançamento é
5 reais e a diária do acervo é 3 reais. A locadora está com uma
promoção, ao locar 2 lançamentos o cliente tem direito a um
filme de acervo grátis. Faça um algoritmo que leia a
quantidade de lançamentos e a quantidade de filmes de acervo
a serem locados, e calcule o valor (mínimo) a ser pago.
Exemplos:
Acervo Lançamentos Valor a ser pago
3 2 16 reais
10 10 65 reais
182 / 421
C00003700 - A locadora Só Filmassos classifica os filmes em
"lançamentos"e "acervo", sendo que a diária do lançamento é
5 reais e a diária do acervo é 3 reais. A locadora está com uma
promoção, ao locar 2 lançamentos o cliente tem direito a um
filme grátis, podendo ser de acervo ou lançamento. Faça um
algoritmo que leia a quantidade de lançamentos e a
quantidade de filmes de acervo a serem locados, e calcule o
valor (mínimo) a ser pago.
Exemplos:
Acervo Lançamentos Valor a ser pago
3 2 16 reais
5 3 25 reais
3 4 23 reais
183 / 421
Questões de provas anteriores
1) Considere um reservatório com três segmentos cilíndricos ,
conforme o diagrama abaixo:
184 / 421
Faça um algoritmo que leia as dimensões R
1
, H
1
, R
2
, H
2
, R
3
e
H
3
em metros e a vazão da água preenchendo o reservatório
em litros/segundo. Leia a seguir um tempo T e calcule a
altura atingida pela água no tempo T. Se no tempo T o
reservatório já estiver completamente preenchido, escreva
"Reservatório completo". O volume de um cilindro é dado por
pir2h. 1 metro cúbico equivale a 1000 litros. Considere o valor
de pi como 3.14.
185 / 421
Sugestão de dados de teste:
Vazão=1000 l/s (1 m
3
/s)
R
1
=1 H
1
=1 T
1
(Tempo para encher o segmento
1):=piR2
1
H
1
/vazão = 3.14 seg
R
2
=2 H
2
=2 T
2
=25.12
R
3
=3 H
3
=3 T
3
=84.78
Tempo (seg) Altura (metros)
2
186 / 421
2) A função abaixo descreve a altitude de um modelo de foguete
desde o momento em que é disparado até o momento em que
atinge o solo. O tempo é dado em segundos e a altura é dada em
metros. Escreva um algoritmo que leia um tempo T e calcule a
altura do projétil no tempo T. Se o projétil já tiver atingido o solo,
escreva "O projétil já atingiu o solo".
h(t) =

50 ∗ t2 p/t ≤ 1
50+ 50(t − 1)− 5(t − 1)2 p/t > 1 e t ≤ 8
155− 20(t − 8) p/t > 8 e t <= 15.75
187 / 4213) Um resistor, R=4Ω, e um indutor, L=1.3 H, são conectados em
um circuito a uma fonte de tensão conforme a figura abaixo.
Quando a fonte de tensão aplica uma onda retangular de amplitude
V=12 V de duração 0.5 segundos, mostrado na figura abaixo.
188 / 421
A corrente i(t) no circuito é dada por:
i(t) =
{
V
R
(1− e(−Rt)/L) p/ 0 ≤ t ≤ 0.5s
V
R
e
−(Rt)/L(e(0.5R)/L − 1) p/ 0.5 ≤ t
Faça um algoritmo que leia um tempo T e calcule e escreva a
corrente no circuito no instante T. Considere para a constante "e"o
valor de 2.7182.
189 / 421
4) A velocidade de uma partícula que se move ao longo de uma
linha reta, como função do tempo, é dada pelas equações abaixo:
v(t) =

1.4t p/ 0 ≤ t ≤ 10 s
14+ 5sin( pi
10
(t − 10)) p/ 10 ≤ t ≤ 25 s
9 p/ 25 ≤ t ≤ 35 s
9− 9
5
(t − 35) p/ 35 ≤ t ≤ 40 s
Faça um algoritmo que que leia um tempo T e calcule e escreva a
posição da partícula no instante T.
190 / 421
C00000750 - Faça um algoritmo que leia, para duas barras de
ouro, o seu peso e seu valor. O algoritmo deve ler também o
limite de peso de uma mochila, e verificar e escrever que barra
(s) devem ir na mochila de modo a maximizar o valor dentro
dela, sem exceder seu limite de peso. O algoritmo deve
escrever:
0 - Se nenhuma das barras puder ser colocada na mochila sem
exceder o limite de peso
1 - Se a melhor solução for colocar somente a barra 1 na
mochila
2 - Se a melhor solução for colocar somente a barra 2 na
mochila
3 - Se a melhor solução for colocar a barra 1 e a barra 2 na
mochila
191 / 421
Casos possíveis:
Cabem as duas barras na mochila
Cabe a primeira barra e não cabe a segunda
Cabe a segunda barra e não cabe a primeira
Não cabe nenhuma das barras na mochila
MAIS ALGUM????????
192 / 421
Lista de problemas sequenciais e condicionais por
categorias:
Números primos
Separação de dígitos
Ordenar poucos valores
Conversões hora-minuto-segundo
Aplicação de tabelas
193 / 421
Comandos de Repetição
São utilizados quando um ou mais comandos deve ser
executado mais de uma vez no algoritmo.
Nossa linguagem possui três comandos de repetição, o
Enquanto, o Para e o Repita.
O formato do comando Enquanto é:
Enquanto condição faca
lista de comandos
fimenquanto
onde condição é uma expressão lógica, como as condições do
comando se.
194 / 421
Ao entrar no comando
Enquanto a condição é
avaliada.
Se ela é verdadeira, a lista
de comandos é executada.
Isso (avalia condição +
executa comandos) se
repete até que a condição
seja falsa.
Por exemplo, o trecho ao
lado escreve de quanto a
quanto?
a←1
enquanto a<4 faca
escreva(a)
a←a+1
fimenquanto
195 / 421
Teste de Mesa
Uma coluna para cada variável e uma coluna para os
comandos de escrita
Executa-se os comandos sequencialmente, um a um
A cada atribuição, a coluna da variável que recebeu o valor
deve ser atualizada
A cada comando de escrita, a coluna das escritas é atualizada
Esse formalismo é usado há 60 anos e funciona muito bem.
Não tente inventar algo diferente.
a←1
enquanto a<4 faca
escreva(a)
a←a+1
fimenquanto
a esc
1
196 / 421
Teste de Mesa
a←1
enquanto a<4 faca
escreva(a)
a←a+1
fimenquanto
a esc
1 1
197 / 421
Teste de Mesa
a←1
enquanto a<4 faca
escreva(a)
a←a+1
fimenquanto
a esc
1 1
2
198 / 421
Teste de Mesa
a←1
enquanto a<4 faca
escreva(a)
a←a+1
fimenquanto
a esc
1 1
2
199 / 421
Teste de Mesa
a←1
enquanto a<4 faca
escreva(a)
a←a+1
fimenquanto
a esc
1 1
2
200 / 421
Teste de Mesa
a←1
enquanto a<4 faca
escreva(a)
a←a+1
fimenquanto
a esc
1 1
2 2
E continua até concluir a simulação...
201 / 421
Uma estrutura de repetição, como o enquanto, também é
chamada de laço de repetição (ou loop)
Cada repetição dos comandos dentro do enquanto também é
chamada de iteração.
Por essa razão algoritmos ou métodos que utilizam estruturas
de repetição são ditos iterativos
202 / 421
Ex: os trechos a seguir escrevem o que na tela? (teste de mesa)
a)
i <−1
Enquanto i <=2 fa ca
e s c r e v a ( i )
i<− i +1
f imenquanto
b)
i <−1
Enquanto i <=2 fa ca
i<− i +1
e s c r e v a ( i )
f imenquanto
203 / 421
Ex: os trechos a seguir escrevem o que na tela? (teste de mesa)
c)
i <−1
enquanto i <3 f a ca
i<− i +1
e s c r e v a ( i )
f imenquanto
d)
i <−1
enquanto i <3 f a ca
e s c r e v a ( i )
i<− i +1
f imenquanto
204 / 421
Ex: os trechos a seguir escrevem o que na tela? (teste de mesa)
e)
a<−1
b<−2
enquanto a<200 f a ca
a<−a+b
b<−a+b
e s c r e v a ( a , "" , b , "" )
f imenquanto
f)
a<−100
enquanto a>0 f a ca
e s c r e v a ( a%2)
a<−a\2
f imenquanto
205 / 421
g)
a<−1234
b<−0
enquanto a>0 f a ca
b<−b∗10+a%10
a<−a\10
f imenquanto
e s c r e v a ( b )
h)
a<−100
d<−2
enquanto a>1 f a ca
se a%d=0
entao
e s c r e v a ( d )
a<−a\d
senao
d<−d+1
f ims e
f imenquanto
206 / 421
I00000100 - Faça um algoritmo que escreva os números de 1 a
20.
I00000200 - Faça um algoritmo que escreva todos os números
pares entre 1 e 50.
Esse exercício pode ser resolvido por dois caminhos diferentes:
a) Gerando todos os números entre 1 e 50 e escrevendo somente
os que forem pares;
b) Gerando e escrevendo somente os números pares.
207 / 421
a)
a<−1
enquanto a<=50 f a ca
se a %2=0 entao
e s c r e v a ( a )
f ims e
a<−a+1
f imenquanto
b)
a<−2
enquanto a<=50 f a ca
e s c r e v a ( a )
a<−a+2
// o inc r emento da v a r i á v e l
// que c o n t r o l a o l a ç o pode
// s e r d i f e r e n t e de 1
f imenquanto
208 / 421
I00000300 - Faça um algoritmo que escreva todos os números
entre 1 e 200 que são múltiplos de 11.
(Não está no Portal) Faça um algoritmo que escreva 1000
vezes o nome do melhor time do Rio Grande do Sul
A solução para esse problema deve, de alguma forma, repetir
1000 vezes o comando Escreval("Internacional!")
Para isso, utiliza-se uma estrutura de repetição com uma
variável que controle as 1000 repetições.
209 / 421
i <−1
enquanto i <=1000 f a ca
e s c r e v a ( " I n t e r n a c i o n a l ! ! ! " )
i<− i +1
f imenquanto
Nesse algoritmo, a variável i tem a importante função de
controlar o número de repetições, para que o comando de
escrita seja executado exatamente 1000 vezes, nem uma a
mais, nem uma a menos.
À variável que controla o número de repetições dá-se o nome
de variável de controle.
210 / 421
Um laço controlado por variável de controle deve conter 3
elementos:
1 A definição do valor inicial (inicialização) da variável de
controle, que deve obrigatoriamente ser feita fora do laço, e
apenas uma vez, no início
2 O incremento (ou decremento) da variável de controle
3 Uma condição de saída que resulte falsa quando o número de
iterações desejadas for completada.
211 / 421
Alguns erros comuns ao implementar laços controlados são:
Falta da inicialização da variável de controle
Inicialização da variável de controle dentro do laço
Falta do incremento (ou decremento) da variável de controle
Condição de saída incompatível com o valor inicial e
incremento da variável de controle, o que fará com que nunca
termine a execução do laço (o famoso "entrar em loop")
212 / 421
I00000400 - Faça um algoritmo que leia 10 números e escreva os
que forem pares.
i<-1
enquanto i<=10 faca
leia(N)
se N %2=0
entao escreva(N)
fimse
i ← i + 1
fimenquanto
213 / 421
I00000600 - Faça um algoritmo que leia 30 valores e conte
quantos estão no intervalo [10,20], escrevendo

Outros materiais