Você está na página 1de 80

Algoritmos e Programação

Para Iniciantes

Utilizando o Portal

URI Online Judge

www.urionlinejudge.com.br

Neilor Tonin

2021
Introdução

Noção de Lógica

Lógica é a forma com a qual organizamos os nossos pensamentos e demonstramos o raciocínio de maneira
correta. Sempre que alguém deseja falar ou escrever corretamente, deve colocar os pensamentos em uma
determinada ordem para que sejam compreendidos. A utilização da lógica é a melhor forma de solucionar
problemas e atingir objetivos.

A lógica é muito importante nas nossas vidas. Veja os exemplos abaixo:

a) Pedro, Maria e Paula são três irmãos, mas Pedro é mais velho.
Maria é a caçula da família.
Então Paula é mais nova do que Pedro, mas é mais velha do que Maria.

b) Ao acordar de manhã cedo, olho pela janela e percebo que tudo está molhado.
Não está chovendo, neste momento.
Então deve ter chovido durante à noite.

Noção de Algoritmos

Algoritmo é a lógica necessária para o desenvolvimento de um programa. É a forma organizada de


expressar uma sequência de passos que visam atingir um objetivo definido.

Apesar do nome estranho, os algoritmos são muito comuns no nosso cotidiano, por exemplo, uma receita
de bolo. Nela estão escritos os ingredientes necessários e a sequências de passos ou ações a serem
cumpridos para que se consiga fazer um determinado tipo de bolo.

Em um modo geral, um algoritmo segue um determinado padrão de comportamento, com objetivo de


alcançar a solução de um problema.

Padrão de comportamento: imagine a sequência de números: 5, 10, 15, 20, 25. Para determinar qual
será o sexto elemento dessa série, precisamos descobrir qual é a sua regra de formação, isto é, qual é o
seu padrão de comportamento.

Como a sequência segue certa constância, facilmente determinada, somos capazes de determinar qual
seria o sétimo termo ou outro termo qualquer.

Exercício: anote cada um dos passos para ir embora da sala na qual você se encontra e depois execute
cada um destes passos ao pé da letra (*será abordado ao final deste capítulo).

Vamos descrever então uma atividade bem cotidiana: falar por celular com um amigo. Apesar de parecer
óbvio demais, muitas vezes este tipo de atividade é feito inconscientemente, sem que se percebam os
pequenos detalhes. Vejamos como seria descrever esta atividade passo a passo, da forma mais simples
possível:

2
- pegar o celular, desbloquear e ir até a opção de teclado (telefone);
- digitar cada um dos dígitos do número desejado e efetuar a ligação;
- falar com o seu amigo.

Obviamente estes seriam os passos principais de uma ligação, mas pode-se perceber que que alguns
problemas poderão ocorrer. Temos que prever algumas situações que não dependem apenas de nossa
vontade, como um celular ocupado ou o amigo ocupado (não pode atender o celular no momento).

Em um primeiro momento pode-se pensar na situação onde a ligação é completada e é possível conversar
com o amigo. O algoritmo que representa este comportamento é apresentado abaixo:

- pegar o celular, desbloquear e ir até a opção de teclado (telefone);


- digitar cada um dos dígitos do número desejado e efetuar a ligação;
- se a ligação for completada e o seu amigo atender:
- falar com o seu amigo;
- encerrar a ligação;

Neste momento já deve ter passado pela sua mente que nem sempre é possível falar com um amigo na
primeira tentativa. Desta forma deve-se tentar prever outras possibilidades de comportamento possíveis
para que possa ser prevista a tomada de ação correta, independentemente da situação.

Suponha então que se insiste em refazer a ligação caso ela não possa ser completada ou não possa ser
atendida pelo seu amigo em um primeiro momento. Que ação tomar neste caso? Vamos pensar em
simplesmente aguardar alguns segundos e fazer uma segunda tentativa de ligação e independente do
resultado, ao final deve-se encerrar a ligação.

Esta situação continua sendo um desvio condicional. Só que agora não é mais tão simples quanto o caso
anterior. Ao executar a condição se (se a ligação...) estamos prevendo um desvio condicional onde
dois trechos de comandos completamente diferentes podem ser executados, mas nunca ao mesmo tempo.

- OU é possível falar com o amigo e depois desligar o telefone


- OU tenta-se efetuar a ligação mais uma vez para falar com o amigo

Vamos acompanhar este algoritmo:

- pegar o celular, desbloquear e ir até a opção de teclado (telefone);


- digitar cada um dos dígitos do número desejado e efetuar a ligação;
- se a ligação for completada e o seu amigo atender
- falar com o seu amigo;
- senão ///ocupado, fora de área, falta de créditos, etc.
- encerrar a ligação;
- aguardar alguns segundos;
- ligar novamente para o seu amigo;
- se a ligação for completada e o seu amigo atender:
- falar com o seu amigo;
- encerrar a ligação;

É muito comum para quem está aprendendo a programar deixar código redundante. Neste exemplo
anterior, ao invés de o “encerrar a ligação” estar no final do algoritmo, poderia estar sendo repetido tanto

3
no final da cláusula “se” quanto no final da cláusula “senão”. Funcionalmente seria o mesmo, mas não é
a forma correta de se programar.

Outras situações serão incorporadas mais adiante neste livro com o intuito de representar a situação real
de forma mais completa, no capítulo em que será tratada a repetição nos algoritmos.

Fatores que devem ser considerados na construção de um algoritmo

1. Complexidade
Percebeu-se, na medida em que colocávamos situações novas no problema a ser resolvido, que ia
aumentando a complexidade do algoritmo. Esse certamente é o maior problema envolvido na construção
de algoritmos. A complexidade tende a aumentar quando vamos incluindo situações novas em um
problema, situações estas que devem ser tratadas pela solução. Embora a complexidade seja um mal
necessário, devemos tentar diminuí-la ao máximo.

2. Legibilidade
Mede a capacidade de compreensão de um algoritmo por qualquer observador que não seja aquele que o
construiu; a clareza com que a lógica está exposta. A legibilidade ajuda em muito a diminuir a
complexidade de um algoritmo.

3. Portabilidade
A linguagem C++ será utilizada neste livro para implementação dos algoritmos. Esta linguagem,
juntamente com suas variantes (C#, objective C, etc) é uma das mais aceitas e mais utilizadas em todo o
mundo, principalmente no meio acadêmico e científico.
Se bem desenvolvido, um programa em linguagem C possui grande portabilidade. O mesmo código pode
rodar sem nenhuma ou o mínimo de modificação em diferentes sistemas operacionais.

4. Técnica de resolução por método cartesiano


A famosa frase de Descartes “Dividir para conquistar” é muito importante dentro da programação. É um
método que ataca um problema grande, de difícil solução, dividindo-o em problemas menores, de solução
mais fácil. Se necessário, pode-se dividir novamente as partes não compreendidas. Esse método é muito
importante dentro da programação e é implementado através da criação de rotinas, que além de deixar o
código mais limpo e claro, facilita a posterior reutilização.

5. Planejamento reverso
Consiste em, a partir do resultado final, determinar quais são os componentes básicos. Ou seja, a partir da
saída desejada, devemos poder determinar, de forma reversa, quais são os componentes da entrada de
dados necessários.
Por exemplo, se o desejado é um algoritmo para calcular as duas raízes de báskhara (denominadas aqui
de r1 e r2). Quais são os valores de entrada que deverão ser fornecidos?

4
Metodologia para construir um algoritmo

Existem várias metodologias para a construção de um algoritmo logicamente correto. Algumas são
genéricas, enquanto outras são mais adequadas a alguns problemas em específico. Uma metodologia A
não é melhor do que uma metodologia B. Isto vai depender do tipo de problema a ser resolvido e cada
estudante é livre para escolher a que melhor se encaixar em sua solução, de acordo com as suas
preferências.

O objetivo deste livro é apresentar algumas das metodologias já consolidadas na construção de algoritmos
e principalmente, adaptar e combinar estas metodologias com novas técnicas que facilitem a construção e
a compreensão de algoritmos.

a) Metodologia dos cinco passos


É uma metodologia padrão para análise de um problema e construção do algoritmo, que consiste nos 5
passos descritos a seguir:

1. Ler atentamente o enunciado


Deve-se reler o enunciado de um exercício várias vezes, até compreendê-lo completamente. A maior
parte da resolução de um exercício consiste na compreensão completa do enunciado.

2. Retirar a relação das entradas de dados do enunciado e definir as variáveis necessárias


Através do enunciado, descobrimos quais são os dados que devem ser fornecidos ao programa, via teclado,
a partir dos quais são desenvolvidos os cálculos. Na maioria das vezes os problemas informam de forma
explícita qual deverá ser a entrada. Existem alguns casos raros de algoritmos que não possuem entrada.

3. Retirar do enunciado, a relação das saídas das informações e definir as variáveis necessárias
Através do enunciado podemos descobrir quais são as informações que devem ser mostradas para compor
o resultado final, objetivo do algoritmo.

4. Determinar o processamento necessário para transformar as entradas nas saídas especificadas


Nessa fase é que teremos a construção do Algoritmo propriamente dito. Devemos determinar qual
sequência de passos ou ações é capaz de transformar um conjunto de dados nas informações de resultado.
Para isso, utilizamos os fatores descritos anteriormente, tais como legibilidade, portabilidade, método
cartesiano e planejamento reverso, e finalmente podemos construir o algoritmo.

5. Conferir as saídas geradas pelo programa e realizar vários testes


De nada vale construir um algoritmo ou programa se a resposta que ele fornece não está correta. Neste
ponto deve-se analisar o formato que tem a saída, conferindo se está exatamente como pede o exercício
ou problema. Isso diz respeito ao espaçamento, texto, formato dos valores, número de casas decimais, etc.
Acima de tudo, nunca se baseie apenas pelos casos de teste fornecidos pelo programa. Na maioria das
vezes eles não cobrem todas as situações possíveis. Se por exemplo um programa já foi testado e ao ser
submetido ao portal URI Online Judge para correção retorna como resposta que está incorreto, é
necessário complementar os testes com a criação de casos de testes adicionais com valores diferentes
daqueles fornecidos (mas dentro dos limites especificados na descrição do problema), para verificar em
que situação o programa não está apresentando a saída correta.

5
Exemplo: Ao calcular uma média entre dois valores com uma casa decimal, esta média também deverá
ter uma casa decimal e em muitos casos o programa exige a apresentação de uma mensagem específica.

Complemento
Este método é interessante porque obriga o estudante a “parar para pensar” naquilo que está resolvendo.
As novas gerações tendem a fazer várias coisas ao mesmo tempo sem focar realmente em algo específico.
Isso pode acabar resultando em uma perda de detalhes que são extremamente importantes na construção
de um algoritmo. Ao estruturar a forma inicial do algoritmo para calcular baskhara, por exemplo as
seguintes perguntas podem ser feitas:

- Foram utilizadas variáveis adequadas (inteiros, valores com ponto decimal, etc)?
- Em que situação não é possível calcular as raízes da equação? O algoritmo prevê isso?
- Quantos valores devem ser apresentados? Em que formato? Com quantas casas decimais?

Exercício: Leia o problema a seguir e utilize a metodologia dos cinco passos para definir corretamente as
entradas, saídas e os cálculos necessários para se chegar ao resultado esperado.

OBS: Neste momento para simplificar um pouco, desconsidere que há situações nas quais não é possível
calcular as duas raízes.

1036 - Fórmula de Bhaskara


Leia 3 valores de ponto flutuante e efetue o cálculo das raízes da equação de Bhaskara. Se não foi possível
calcular as raízes, mostre a mensagem correspondente “Impossivel calcular”, caso haja uma divisão por
0 ou raiz de número negativo.

Entrada
Leia três valores de ponto flutuante (double) A, B e C.

Saída
Se não houver possibilidade de calcular as raízes, apresente a mensagem "Impossivel calcular". Caso
contrário, imprima o resultado das raízes com 5 dígitos após o ponto, com uma mensagem correspondente
conforme exemplo abaixo. Imprima sempre o final de linha após cada mensagem.

6
Técnicas para construção dos algoritmos com base na metodologia apresentada

a) Divisão do problema em Entrada, Processamento e Saída

Esta técnica consiste em dividir todo o problema em três partes, relacionar o que é entrada, o que será
saída e quais os cálculos necessários para se chegar ao resultado. É aplicável à maioria dos problemas e é
uma técnica bastante simples.

Relacionar as entradas e seus tipos: a, b, c: todos valores reais.

Determinar o
processamento ou
Cálculos necessários:

relacionar as saídas e tipos:


R1, R2: ambos os valores reais.

b) Sequência de Passos.

Semelhante à metodologia anterior e pode ser aplicada após a mesma e é um pouco mais detalhada.
Define-se uma sequência de passos e cuida-se para não esquecer nenhum deles pois caso contrário, o
resultado obtido pode ser bem diferente do resultado esperado. Este é um método muito utilizado. Para o
problema em questão, a listagem dos passos seria:

- Definir e criar variáveis; a, b, c, R1, R2, delta: todos valores reais

- Ler a entrada fornecida armazenando nas respectivas variáveis: ler a, b, c

- Fazer cada um dos cálculos necessários, inclusive de variáveis auxiliares se for o caso:

Delta = b * b – 4 * a * c

R1 = -b + ...

R2 = -b - ...

- Apresentar cada uma das variáveis que foi utilizada para armazenar os resultados dos cálculos

Apresentar R1 e R2 no formato especificado pelo problema.

7
c) Metodologia de Fluxogramas

Outra técnica muito explorada em muitos livros de algoritmos é a utilização de Fluxogramas. O


Fluxograma é uma técnica gráfica que pode ser visualmente interessante quando os algoritmos se tornam
um pouco mais complexos. Através do fluxograma fica fácil ver aonde existe um desvio condicional e
quais são as ações realizadas de acordo com cada tomada de decisão.

No exemplo trabalhado aqui, o fluxograma é extremamente simples, pois não estão sendo consideradas
ainda as condições nas quais não é possível calcular as raízes de báskhara, ou seja, o nosso algoritmo
é apenas uma sequência de passos.
Início


Ler a,b,c

Calcular Delta

De
Calcular R1 e R2

De
Apresentar Resultados

Fim

Tipos de Informações

Toda linguagem de programação possui um conjunto primitivo de tipo de dados. Este determina como a
linguagem armazena e manipula as informações. Podemos classificar inicialmente os tipos de informações
a serem manipulados em um programa como dados e instruções.

Dados

São as informações a serem processadas por um computador. Aqui é de fundamental importância deixar
bem claro para o estudante o que é um dado.

Um programa de computador, independente da área para a qual for desenvolvido, tem um objetivo simples
de trazer um resultado. No exemplo da báskhara, foi citada a necessidade de os valores serem reais (a, b
e c, delta, R1 e R2). Além do tipo real, outros valores podem ser necessários, tais como:
a) Numérico Inteiro;
b) Numérico Real;
c) Caractere;
d) Texto;
e) Lógico.

8
Estes são tipos encontrados em praticamente todas as linguagens de programação existentes e são
considerados tipos primitivos de dados. Analisa-se agora cada um deste tipo de dado:

a) inteiro: toda e qualquer informação numérica que pertença ao conjunto dos números inteiros (negativa,
nula ou positiva), tais como 39, 0, -56 entre outros.
Exemplos:
- A idade de uma pessoa,
- A quantidade de estados de um país,
- A quantidade de países no mundo,
- A população mundial e assim por diante.

b) real: toda e qualquer informação numérica que pertença ao conjunto dos números reais (negativa, nula
ou positiva, inteiro ou fracionário), tais como - 4, 3, 0, 35, 1.23 entre outros.
Exemplos:
- A altura de uma pessoa,
- A temperatura,
- O saldo bancário.

c) caractere: algumas informações são essencialmente caracterizadas como tipos caracteres. Nestes se
enquadram todos os valores da tabela ASCII, as letras, números, símbolos, etc, tais como ‘a’, ‘1’, ‘#’,
entre outros.
Exemplos:
- A identificação do sexo de uma pessoa por ‘M’ ou ‘F’
- Sim e não (representados por ‘s’ ou ‘n’.

d) texto ou string: São caracterizadas como tipo texto ou string as sequências contendo letras, números
e símbolos especiais, tais como “Rua Alfa, 52 Apto 1”, “(54) 3574-9988”, “043-8”, entre outros.
Exemplos:
- O nome de uma pessoa,
- O endereço de uma pessoa,
- A espécie de um animal.

e) lógico: uma variável do tipo lógico só poderá conter 2 valores: verdadeiro e falso. O tipo lógico é
chamado por alguns de tipo boleano, devido à contribuição do filósofo e matemático inglês George Boole
na área da lógica matemática. Este tipo compreende valores tais como true, false, 0, 1, verdadeiro, falso.
São utilizados em condições lógicas e serão vistos mais adiante.

A tabela abaixo resume os tipos de dados mais comuns e sua definição em algumas linguagens:

Tipo Exemplo Basic (VB) Pascal/Delphi Java/C++ Português estrut.


Inteiro 2 | 45 | 100 Integer Integer int inteiro
Real 2.456 | 101.19 Single Real float e double real
Caractere / string “A” | “4” | “Algoritmos” Byte / String Char / String char / string caracter / texto
Lógico true | false | 0 | 1 Integer Integer Int / bool logico

9
Exercícios de Fixação

Determine qual é o tipo primitivo de informação presente nas sentenças abaixo:


a) Mangojata é a filha mais nova de dona Parcimonia, que tem 5 filhos.
b) Severina Poleão subiu 8 degraus da escada para pegar a maçã boa.
c) O dinheiro aplicado por Amaro Dinha rendeu R$ 3.38 em apenas um mês.

Constantes x Variáveis:
Entende-se por uma informação constante, aquela que não sofre nenhuma alteração no decorrer do tempo.
Qualquer programa de computador tem que manipular dados constantes e variáveis. Naquele exemplo no
qual o professor deseja calcular a média de um aluno de acordo com as notas de três provas, o que é
constante e o que é variável?

Media =(Nota1 + Nota2 + Nota3 ) / 3.0

O uso de Variáveis:

Tem-se como definição de variável tudo aquilo que é sujeito a variações. Variáveis são espaços de
memória que são alocados para armazenar informações. Por que se precisa de variáveis?

R: Para armazenar valores que serão utilizados posteriormente. Ex.: em um cálculo complexo, resultados
intermediários podem ser armazenados e posteriormente processados para se obter o resultado final.

Imagine que a memória de um computador é um grande armário com diversas gavetas, onde cada gaveta
pode conter somente um destes três valores: numérico, caractere ou lógico. Deve-se concordar que é
necessário identificar cada gaveta para sua utilização posterior, através de um nome.

Nomenclatura e declaração das variáveis:

O nome de uma variável faz referência ao endereço de memória onde essa variável se encontra. Existem
algumas regras para a utilização das variáveis e elas devem ser respeitadas:
● O nome de uma variável pode ter 1 ou mais caracteres e o primeiro cadactere deve ser uma letra
● Não é permitido espaços em branco ou acentuação no nome de uma variável;
● Nenhum nome de variável pode ser uma palavra reservada a uma instrução da linguagem usada
● Variáveis devem conter somente letras, números e sublinhado;
● Utilize nomes para variáveis que façam sentido. Exemplo: peso ao invés de x.

A declaração de uma variável também depende da linguagem. Nos algoritmos, e na linguagem C++, a
declaração pode ser feita conforme apresentado abaixo:

Portugues estruturado Linguagem C++ Esta variável pode assumir, por exemplo:
inteiro a; int a; 1, 3, 5, 8, 0
real b,c; double b,c; 1.0, 3.001, 5.4, 8.726, 0.0
caracter sexo; char sexo; 'j', 'J', '$' , '#', '3'
texto nome; string nome; “João S.”, “Pedro”, “teste”
logico entra; bool entra; true, false, 0, 1

10
Atribuição de variáveis:

O comando de atribuição ( = ) permite fornecer um valor a uma certa variável, onde o tipo de
informação deve ser compatível com o tipo de variável utilizada, ou seja, somente poderemos atribuir
“Pedro” a uma variável do tipo texto. Exemplos:

a = “mesa” b = 2 + 5 - XB c = - 5.4 - b

● Quando uma variável é declarada (criada) qual o seu valor inicial?

R: Não se pode saber o valor inicial de uma variável, pois na memória existem várias informações
armazenadas, muitas delas estão sendo utilizadas pelo computador, mas podem existir espaços em que
foram armazenadas informações anteriormente, mas que não estão mais em uso. Esses espaços, mesmo
com informação estão disponíveis para novas variáveis. Uma variável pode ser criada em um desses
espaços, e seu valor será um "lixo" qualquer da memória. Mas uma variável pode ser criada em um espaço
vazio da memória, nesse caso seu valor será nulo. Para resolver esse problema do valor inicial da variável,
algumas linguagens inicializam suas variáveis com 0 (zero) ou nulo.

Supondo que seja atribuído os seguintes valores às seguintes variáveis:


A = “mesa” B=0 C=2 D = -5.4 E = “João” F = 5.656

Veja abaixo como poderia ficar a Memória do computador:

1 2 mesa 0
C:\ 125 Endereço
BA TXT
-5,4 xYz 2
João 30 5656

Utilizado Não vazio, não utilizado (lixo) Vazio, não utilizado

Operadores Aritméticos:

Unários ou binários, têm uma ordem de prioridade que é alterada somente com utilização de parênteses.

Operador Operação Tipo Prioridade matemática


/ Divisão Binário 2
* Multiplicação Binário 2
% Resto de divisão Binário 2
+ Adição Binário 1
- Subtração Binário 1

11
Para potenciação ou exponenciação, deverá ser utilizada uma fórmula ao invés de um operador. Será
visto mais adiante nas fórmulas utilizadas.

Dica: Em muitas linguagens, dentre elas o C++, ao se dividir dois inteiros, assume-se o resultado da
divisão como inteiro (o que nem sempre é o desejado), mesmo que o resultado seja atribuído a uma
variável real. Por exemplo, x = 7 / 2 é diferente de x = 7.0 / 2 ou x = 7 / 2.0. No primeiro caso, x assume
o valor 3, enquanto nos dois casos seguintes, x assume 3.5 (obviamente se x for real).

(Dica) O operador resto de divisão (%) não deve ser confundido com o percentual.

Exercício para fixação: quais seriam os resultados das operações abaixo?


a) 6.0 / 2 % 2 b) 5 + 2 % 2 c) 5 * 3 + 0 % 2
d) 6 / 2 + 4 * 2 e) 5.0 / 2 + 2 * 3.5 * 2 f) 5.0 / 2 + 2 * 3.5 * 2 – 3

Instruções básicas ou Comandos básicos

As instruções ou comandos básicos são o conjunto de palavras-chave de uma determinada linguagem de


programação. Variam de linguagem para linguagem mas possuem o mesmo significado, assim como as
palavras na língua falada (português, inglês, etc.). Esses comandos, colocadas de forma estratégica,
formarão os blocos de programas e, como são palavras reservadas, não devem ser utilizadas como
nomes de variáveis.

Na utilização de alguma biblioteca em portuguuês na linguagem de programação, deve-se tomar cuidado


com palavras reservadas que serão utilizados nos programas, tais como: inicio, fim, var, variaveis,
programa, enquanto, se... entao, senao, ler, escrever, inteiro, real, caractere, texto, logico, etc.

Na utilização do C++ ou qualquer linguagem real de programação, deve-se tomar cuidado com as
palavras reservadas em inglês que serão utilizados nos programas, tais como: main(principal), while
(enquanto) , if(se)... , else(senão), int(inteiro), double(real), char(caractere), etc.

Comandos de Entrada e Saída de dados:

Conforme visto anteriormente, todo programa executado em um computador (salvo algumas exceções)
consiste de três etapas ou pontos de trabalho: a entrada de dados, o seu processamento e a saída dos
mesmos.

A entrada de dados deverá ser feita de acordo com os exemplos abaixo:

Comando em português estruturado Comando em C++


ler A; cin >> A;
ler B; cin >> B;

12
A saída de dados deverá ser feita de acordo com os exemplos abaixo:

Comando em português estruturado Comando em C++


escrever << A << “\n”; cout << A << endl;
escrever << “Valor de A:” << A << “\n”; cout << “Valor de A:” << A << endl;
escrever << “Somar B e C:” << B+C << “\n”; cout << “Somar B e C:” << B+C << endl;
escrever << “Voce pesa ” << X << “ quilos e tem ” << idade cout << “Voce pesa ” << X << “ quilos e tem << idade <<
<< “anos.\n”; “anos.\n”;

o “\n” fará com que o interpretador pule uma linha após escrever a mensagem de texto.

Exemplo de um pequeno programa completo:

Um programa pode ser definido como um conjunto de ações ou operações com objetivo de obter um
resultado específico. Todo programa terá limitadores que são as palavras início e fim (exemplo abaixo)
ou { (abre chaves) e } (fecha chaves) no caso do C++.

Programa em português estruturado Programa em C++


Inicio #include <iostream>
inteiro A, B, SOMA
ler A using namespace std;
ler B
SOMA <- A + B int main(){
escrever "Soma de A e B: ", SOMA int A, B, SOMA;
fim cin >> A;
cin >> B;
SOMA = A + B;
cout << "Soma de A e B: " << SOMA;
return 0;
}

Recomendamos a utilização da linguagem C++ por combinar características de alto e baixo nível e por
ser academicamente a linguagem mais aceita mundialmente, por seu desempenho, portabilidade,
eficiência, etc. O foco deste livro é utilizar o código C++ e testar os programas através do portal URI
Online Judge.

Segue a estrutura principal de um programa em C++ com um programa exemplo mais utilizado no mundo
dos iniciantes que é o famoso Hello World.

Dica: Um fator engraçado envolvendo o Hello World é que ele foi tão aceito pela comunidade de
programadores que é muito fácil encontrar exemplos de praticamente todas as linguagens utilizando ele
como base. Isso seria interessante para conhecer as diferentes sintaxes existentes.

// Meu primeiro programa em C++ Oi Mundo!!!


#include <iostream>

using namespace std;

int main () {
cout << "Oi Mundo!!!" ;
return 0;
}

13
O painel da esquerda apresenta o código fonte em C++. O painel da direita mostra o resultado do programa
uma vez que ele foi compilado e executado. Para poder executar os programas em C++ são necessários:
− Editor de programa (indicamos o Codeblock ) que é free com o compilador Mingw integrado.

// Meu primeiro programa em C++


− Isto é um comentário. Serve para documentar o código fonte
#include <iostream>
− As linhas que iniciam com '#' são diretivas de preprocessador. Elas indicam que o arquivo padrão
iostream (Acrônimo de Input/Output Stream) será incluído com o código fonte. Ele contém as
declarações da biblioteca de entrada e saída padrão básicas e permite utilizar comandos (cin) e (cout).
using namespace std;
− Define o uso do ambiente de nomes padrão do C++. Em C++ esta linha aparecerá sempre e ela evita
que se determine a origem de cada comando, por exemplo, std::cin ou std::cout
int main ()
− Todo programa C++, por definição, fica dentro do main() { }
cout << "Oi Mundo!!!";
− Isto é uma sentença ou comando C++. Out em inglês significa fora. Ou seja, o comando joga para a
tela a sentença Oi Mundo !!! O cout é declarado na biblioteca padrão iostream.
return 0;
− A sentença return causa o término da função principal. O código 0 é interpretado que o programa
trabalhou ou se comportou como o esperado, sem qualquer erro de execução.

Exercício para fixação:


Resolva o problema 1001 do portal URI Online Judge, apresentado abaixo, usando as três técnicas
apresentadas neste capítulo (entrada/processamento/saída, sequência de passos e fluxogramas)

1001 Extremamente Básico

Leia 2 valores inteiros e armazene-os nas variáveis A e B. Efetue a soma de A e B atribuindo o seu
resultado na variável X. Imprima X conforme exemplo apresentado abaixo. Não apresente mensagem
alguma além daquilo que está sendo especificado e não esqueça de imprimir o fim de linha após o
resultado, caso contrário, você receberá "Presentation Error".

Entrada
A entrada contém 2 valores inteiros.

Saída
Imprima a variável X conforme exemplo abaixo, com um espaço em branco antes e depois da igualdade.
Exemplos de Entrada
Exemplos de Saída
10 X = 19
9

-10 X = -6
4

14
Utilização das técnicas para construir o algoritmo e posteriormente o programa em C++:

a) Divisão do problema em Entrada, Processamento e Saída

relacionar entradas e seus tipos: A, B: inteiros

Processamento necessário: X = A + B

relacionar saídas e seus tipos X : inteiro

b) Sequência de Passos.

- definir e criar variáveis; A, B, X: inteiros

- ler a entrada fornecida armazenando nas respectivas variáveis: ler A


ler B

- Fazer cada um dos cálculos necessários: X = A + B

- Apresentar os resultados: Apresentar X de acordo com formato especificado.

c) Fluxograma.

Início

Ler A

Ler B

X=A+B

Apresentar X

Fim

15
Programa em C++:

#include <iostream> // Meu primeiro programa em C++ Utilizando o exemplo da


entrada com 10 e 9.
using namespace std;
A saída seria:
int main () {
X = 19
// Declaração das variáveis. Veja que o tipo
// esta alinhado ao que o problema pede
int A,B,X;
//Entrada dos dados solicitados
cin >> A;
cin >> B;
//Processamento
X = A + B;
//Saída conforme solicitado
//Muita atenção no formato da saída
cout << "X = "<< X << "\n" ;
return 0;
}

Funções matemáticas

Como complemento, as funções permitem agregarmos recursos extras aos nossos programas, ampliando
sua funcionalidade. Para adicionar funções já existentes no C++ você deverá incluir a chamada de uma
espécie de biblioteca da seguinte forma: #include <nome da biblioteca>

Veja que já foi utilizada uma biblioteca nos primeiros exemplos, conforme explicado ela deve ser inserida
para permitir a utilização do cin e cout. No caso das funções matemáticas a biblioteca mais utilizada é a
cmath, na tabela xx e por uma questão de simplificação, serão utilizadas poucas funções matemáticas nos
algoritmos:

Função Funcionalidade

cos(valor) Retorna o cosseno do valor passado por parâmetro

tan(valor Retorna a tangente do valor passado por parâmetro

sin(valor) Retorna o seno do valor passado por parâmetro

pow(valor,expoente) A função pow calcula o valor elevado ao expoente, por exemplo pow(2,3) será o mesmo que 23
retorna 8

(int) x Retorna o valor inteiro de x caso ele for real. Se x=3.452, int(x) ou int(3.452) retorna 3. Está
função também é conhecida como CAST.

abs(x) Retorna o valor absoluto de x. Se por exemplo, Se x= -2.45, abs(x) ou abs(-2.45) retorna 2.45

sqrt(x) retorna a raiz quadrada do valor x. Se por exemplo, x = 2 raiz(x) ou raiz(2) retorna 1.4142

16
Dica: Existem vários outros exemplos que podem ser encontrados no site www.cplusplus.com

Portugues estruturado C++


inteiro x,y; int x,y;
real z; double z;
caracter c2; char c2 (para 1 caracter)
string c2 (mais que 1 caracter);
ler x; cin >> x;
escrever <<“teste”<< 1 <<“a\n”; cout << “teste” << 1 << “a\n”;
escrever << int(2.5) << “\n”; cout << int(2.5) << endl;
escrever << abs(-2.5); cout << fabs(-2.5) <<endl; //f = ponto flutuante
escrever << potencia(x,3); cout << pow(x,3); // x elevado ao cubo
escrever << raiz(2); cout << sqrt(2);

Exemplo de um programa fazendo o uso de algumas funções

#include <iostream>
#include <cmath>

using namespace std;

int main(){
//No caso das competições sempre é indicado utilizar double no lugar do float
double x = -2.4576; // define x como real e atribui valor -2.4576 à x.
int y = 8; // define y como inteiro e atribui valor 8 à y
cout << int(x) << "\n"; // escreve na tela o inteiro do valor x
cout << abs(x) << "\n"; // escreve na tela o absoluto do valor x
cout << pow(x,2) << "\n";// escreve na tela o x elevado ao quadrado.
cout << sqrt(2) << "\n"; // escreve na tela a raiz quadrada do valor 2.
return 0;
}

Expressões matemáticas ou fórmulas matemáticas:

Uma expressão matemática apresentada como: X = {43.[55:(30+2)]} nos algoritmos deve ser apresentada
como: X =(43*(55/(30+2))). Conhecida também como linearização matemática de uma expressão

Uma fórmula que matematicamente é apresentada como: Área = b . h


2
nos algoritmos deve ser apresentada como: Area = (b * h)/2
Isso é necessário para facilitar e agilizar o momento de criação do código.

17
Exercício para fixação:
Escreva as fórmulas abaixo no formato que as mesmas devem ser utilizadas nos algoritmos:

Considerações finais

Aqui colocamos em prática os conceitos aprendidos anteriormente, nos fatores levados em consideração
na construção de um algoritmo. Sempre que estamos diante de um problema, este deve ser primeiro
resolvido por nós, para que depois seja resolvido pelo computador. Isto é, ele deve ser muito bem
compreendido para que depois se busque a solução no computador.

Neste momento também podemos apresentar como ficaria a solução dos problemas de Bhaskara
apresentado, lembrando que ainda não temos a possibilidade de decidir se o problema pode ou não calcular
as raízes, ou seja, isso será verificado nos próximos capítulos.

// Problema utilizando funções matemáticas


#include <iostream>
#include <iomanip> //Permite ajustar a precisão de saída
#include <cmath> //Inclui a biblioteca matemática do C++

using namespace std;

int main () {
//Declaração das variáveis
double a, b, c, R1, R2, delta;
//Entrada dos dados solicitados, veja que a leitura é feita na mesma linha
cin >> a >> b >> c;
//Processamento utilizando pow e sqrt
delta = pow(b,2) - 4 * a * c;
R1 = (-b + sqrt(delta))/(2 * a);
R2 = (-b - sqrt(delta))/(2 * a);
//Saída conforme solicitado, utilizando a formação para 5 casas decimais
cout << fixed << setprecision(5);
cout << "R1 = " << R1 << "\nR2 = " << R2 << "\n" ;
return 0;
}

18
Exercícios de Fixação

1) Preencha os espaços abaixo: I para inteiro (int), R para real (float), T para texto (string) C para caracter
(char) e L para Lógico (bool):
( ) 1000 ( ) “4.56”
( ) ‘2’ ( ) verdadeiro
( ) .v. ( ) “cinco”
( ) “Casa 8” ( ) “5”
( ) - 456 ( ) 456
( ) - 4.56 ( ) 45.8976

2) Supondo que as variáveis Nb, Na, Nmat e Sx sejam utilizadas para armazenar a nota de um aluno, o
nome do aluno, o número de matrícula do aluno e o sexo do aluno, respectivamente. Declare-as
corretamente:

3) Encontre os erros da seguinte declaração de variáveis:


int endereço, nfilhos, valor$, xpto, c, peso;
char idade, x;
bool 2lâmpada;

4) Seguindo a prioridade dos operadores, qual é o resultado das seguintes operações


a) pow(4,2) / 4 + 17 – 5.0 / (2%5)
b) pow(3,3) * 2 + abs(4 – 6 - 1) / 4.0 + 11
c) 3 * pow(int(7/2),2) + abs(4-6) / 4 + 1 + 4 % 3

5) Assinale com x os nomes válidos para variáveis, segundo a programação em português estruturado:
( ) Alpha ( ) BJ153 ( ) A:B ( ) inteiro
( ) 5x ( ) K7 ( ) Inps ( ) AWQ*
( ) E(13) ( ) X-Y ( ) FGTS ( ) Notas
( ) 1Beta ( ) Notas/2 ( ) PE&E ( ) Médias

6) Utilizando o seguinte trecho de algoritmo, e considerando a entrada dos valores 3 para x e -2 para y:
x y z
int main(){
int x,y,z;
cin >> x;
cout << x <<“ao cubo= “ <<pow(x,3);
cin >> y;
cout << x+y << “\n”;
z = x / y;
cout << z << “\n”;
z = int(z);
cout << z << “\n”;
z = z+7;
x = abs(y-z);
x = x%z;
cout << x << “\n”;
}
Explique o que está acontecendo em cada linha e qual será o resultado de cada ação executada.

19
Observações.:

a) para funções matemáticas, no caso fabs, pow e sqrt é necessário incluir no início do programa o:

#include <cmath>

b) Ao se dividir dois inteiros utilizando c++, pois a resposta será outro inteiro. Por exemplo:
cout << 5 / 2; resulta em 2

O correto, portanto, é utilizar ao menos uma das duas variáveis presentes na operação como ponto
flutuante, quando se deseja preservar o valor após o ponto(a vírgula). Por exemplo:
cout << 5 / 2.0; resulta em 2.5
cout << 5.0 / 2.0; resulta em 2.5

Exercícios propostos (Algoritmos sequenciais)

Observações:

a) a nomenclatura utilizada a partir de agora é para manter coerência com os problemas disponibilizados
para resolução no portal URI Online Judge (www.urionlinejudge.edu.br )

b) Ao resolver qualquer problema, leve em consideração os seguintes aspectos:


1. Use comentários nos programas de forma a esclarecer a lógica
2. Use nome elucidativos nos identificadores de variáveis, constantes, etc.
3. Mantenha sempre a mesma Identação, de 3 ou 4 caracteres
4. Use espaços e parênteses em expressões de forma a facilitar a leitura
5. Pule algumas linhas em branco, entre trechos do programa de forma a facilitar a leitura
6. A saída do programa desenvolvido deve ser no formato IDÊNTICO ao apresentado como
exemplo.

20
1002 - Área do Círculo

A fórmula para calcular a área de uma circunferência é: area = π . raio2. Considerando que para este
problema que π = 3.14159:
- Efetue o cálculo da área, elevando o valor de Raio ao quadrado e multiplicando por π.

Entrada
A entrada contém um valor de ponto flutuante (dupla precisão) no caso a variável raio.

Saída
Apresentar a mensagem "A=" seguido pelo valor da variável area, conforme exemplo abaixo, com 4 casas
após o ponto decimal. Utilize variáveis de dupla precisão (double). Como todos os problemas, não esqueça
de imprimir o fim de linha após o resultado, caso contrário, você receberá "Presentation Error".

Exemplos de Entrada Exemplos de Saída

2.00 A=12.5664

100.64 A=31819.3103

150.00 A=70685.7750

1003 - Soma Simples

Leia dois valores inteiros, no caso para variáveis A e B. A seguir, calcule a soma entre elas e atribua à
variável SOMA. A seguir escrever o valor desta variável.

Entrada
O arquivo de entrada contém 2 valores inteiros.

Saída
Imprima a variável SOMA com todas as letras maiúsculas, com um espaço em branco antes e depois da
igualdade seguido pelo valor correspondente à soma de A e B. Como todos os problemas, não esqueça de
imprimir o fim de linha após o resultado, caso contrário, você receberá "Presentation Error".

Exemplos de Entrada Exemplos de Saída

30 SOMA = 40
10

-30 SOMA = -20


10

0 SOMA = 0
0

21
1004 - Produto Simples

Leia dois valores inteiros. A seguir, calcule o produto entre estes dois valores e atribua esta operação à
variável PROD. A seguir mostre a variável PROD com mensagem correspondente.

Entrada
O arquivo de entrada contém 2 valores inteiros.

Saída
Imprima a variável PROD conforme exemplo abaixo, com um espaço em branco antes e depois da
igualdade. Não esqueça o fim de linha após o produto, caso contrário seu programa apresentará a
mensagem: “Presentation Error”.

Exemplos de Entrada Exemplos de Saída

3 PROD = 27
9

-30 PROD = -300


10

0 PROD = 0
9

1005 - Média 1
Leia 2 valores de ponto flutuante de dupla precisão A e B, que correspondem a 2 notas de um aluno. A
seguir, calcule a média do aluno, sabendo que a nota A tem peso 3.5 e a nota B tem peso 7.5 (A soma dos
pesos portanto é 11). Assuma que cada nota pode ir de 0 até 10.0, sempre com uma casa decimal.

Entrada
O arquivo de entrada contém 2 valores com uma casa decimal cada um.

Saída
Calcule e imprima a variável MEDIA conforme exemplo abaixo, com 5 dígitos após o ponto decimal e
com um espaço em branco antes e depois da igualdade. Utilize variáveis de dupla precisão (double) e como
todos os problemas, não esqueça de imprimir o fim de linha após o resultado, caso contrário, você receberá
"Presentation Error".

Exemplos de Entrada Exemplos de Saída

5.0 MEDIA = 6.43182


7.1

0.0 MEDIA = 4.84091


7.1

10.0 MEDIA = 10.00000


10.0

22
1006 - Média 2

Leia 3 valores, no caso variáveis A, B e C, que são as três notas de um aluno. A seguir, calcule a média do
aluno, sabendo que a nota A tem peso 2, a nota B tem peso 3 e a nota C tem peso 5. Considere que cada
nota pode ir de 0 até 10.0, sempre com uma casa decimal.

Entrada
O arquivo de entrada contém 3 valores com uma casa decimal, de dupla precisão (double).

Saída
Imprima a variável MEDIA conforme exemplo abaixo, com 1 dígito após o ponto decimal e com um
espaço em branco antes e depois da igualdade. Assim como todos os problemas, não esqueça de imprimir
o fim de linha após o resultado, caso contrário, você receberá "Presentation Error".

Exemplos de Entrada Exemplos de Saída

5.0 MEDIA = 6.3


6.0
7.0

5.0 MEDIA = 9.0


10.0
10.0

10.0 MEDIA = 7.5


10.0
5.0

1007 – Diferença

Leia quatro valores inteiros A, B, C e D. A seguir, calcule e mostre a diferença do produto de A e B pelo
produto de C e D segundo a fórmula: DIFERENCA = (A * B - C * D).

Entrada
O arquivo de entrada contém 4 valores inteiros.

Saída
Imprima a mensagem DIFERENCA com todas as letras maiúsculas, conforme exemplo abaixo, com um
espaço em branco antes e depois da igualdade.

Exemplos de Entrada Exemplos de Saída

5 DIFERENCA = -26
6
7
8

0 DIFERENCA = -56
0
7
8

23
1009 - Salário com Bônus

Faça um programa que leia o nome de um vendedor, o seu salário fixo e o total de vendas efetuadas por ele
no mês (em dinheiro). Sabendo que este vendedor ganha 15% de comissão sobre suas vendas efetuadas,
informar o total a receber no final do mês, com duas casas decimais.

Entrada
O arquivo de entrada contém um texto (primeiro nome do vendedor) e 2 valores de dupla precisão (double)
com duas casas decimais, representando o salário fixo do vendedor e montante total das vendas efetuadas
por este vendedor, respectivamente.

Saída
Imprima o total que o funcionário deverá receber, conforme exemplo fornecido.
Exemplos de Entrada Exemplos de Saída

JOAO TOTAL = R$ 684.54


500.00
1230.30

PEDRO TOTAL = R$ 700.00


700.00
0.00

1010 - Cálculo Simples

Neste problema deve-se ler o código de uma peça 1, o número de peças 1, o valor unitário de cada peça 1,
o código de uma peça 2, o número de peças 2, o valor unitário de cada peça 2 e calcula e mostra o valor a
ser pago.

Entrada
O arquivo de entrada contém duas linhas de dados. Em cada linha haverá 3 valores, respectivamente dois
inteiros e um valor com 2 casas decimais.

Saída
A saída deverá ser uma mensagem conforme o exemplo fornecido abaixo, lembrando de deixar um espaço
após os dois pontos e um espaço após o $. O valor deverá ser apresentado com 2 casas após o ponto.

Exemplos de Entrada Exemplos de Saída

12 1 5.30 VALOR A PAGAR: R$ 15.50


16 2 5.10

13 2 15.30 VALOR A PAGAR: R$ 51.40


161 4 5.20

1 1 15.10 VALOR A PAGAR: R$ 30.20


2 1 15.10

24
1011 – Esfera

Faça um programa que calcule e mostre o volume de uma esfera sendo fornecido o valor de seu raio (R).
A fórmula para calcular o volume é: (4/3) * pi * R3. Considere (atribua) para pi o valor 3.14159.
Dica: Ao utilizar a fórmula, procure usar (4/3.0) ou (4.0/3), pois algumas linguagens (dentre elas o C++),
assumem que o resultado da divisão entre dois inteiros é outro inteiro.

Entrada
O arquivo de entrada contém um valor inteiro, correspondente ao raio da esfera.

Saída
A saída deverá ser uma mensagem "VOLUME" conforme o exemplo fornecido abaixo, com um espaço
antes e um espaço depois da igualdade. O valor deverá ser apresentado com 3 casas após o ponto.

Exemplos de Entrada Exemplos de Saída

3 VOLUME = 113.097

15 VOLUME = 14137.155

1523 VOLUME = 14797486501.627

1012 – Área
Escreva um programa que leia três valores com ponto flutuante de dupla precisão: A, B e C. Em seguida,
calcule e mostre:
a) a área do triângulo retângulo que tem A por base e C por altura.
b) a área do círculo de raio C. (pi = 3.14159)
c) a área do trapézio que tem A e B por bases e C por altura.
d) a área do quadrado que tem lado B.
e) a área do retângulo que tem lados A e B.

Entrada
O arquivo de entrada contém três valores com um dígito após o ponto decimal.

Saída
O arquivo de saída deverá conter 5 linhas de dados. Cada linha corresponde a uma das áreas descritas
acima, sempre com mensagem correspondente e um espaço entre os dois pontos e o valor. O valor calculado
deve ser apresentado com 3 dígitos após o ponto decimal.

Exemplos de Entrada Exemplos de Saída

3.0 4.0 5.2 TRIANGULO: 7.800


CIRCULO: 84.949
TRAPEZIO: 18.200
QUADRADO: 16.000
RETANGULO: 12.000

12.7 10.4 15.2 TRIANGULO: 96.520


CIRCULO: 725.833
TRAPEZIO: 175.560
QUADRADO: 108.160
RETANGULO: 132.080

25
1013 - O Maior

Faça um programa que leia três valores e apresente o maior dos três valores lidos seguido da mensagem
“eh o maior”. Utilize a fórmula:

Entrada
O arquivo de entrada contém três valores inteiros.

Saída
Imprima o maior dos três valores seguido por um espaço e a mensagem "eh o maior".

Exemplos de Entrada Exemplos de Saída

7 14 106 106 eh o maior

217 14 6 217 eh o maior

1014 – Consumo

Calcule o consumo médio de um automóvel sendo fornecidos a distância total percorrida (em Km) e o total
de combustível gasto (em litros).

Entrada
O arquivo de entrada contém dois valores: um valor inteiro X representando a distância total percorrida
(em Km) e um valor real Y representando o total de combustível gasto, com um dígito após o ponto decimal.

Saída
Apresente o valor que representa o consumo médio do automóvel com 3 casas após a vírgula, seguido da
mensagem "km/l".

Exemplo de Entrada Exemplo de Saída

500 14.286 km/l


35

2254 18.119 km/l


124.4

Distância Entre Dois Pontos

Leia os quatro valores correspondentes aos eixos x e y de dois pontos quaisquer no plano, p1(x1,y1) e
p2(x2,y2) e calcule a distância entre eles, mostrando 4 casas decimais após a vírgula, segundo a fórmula:
Distancia =

Entrada
O arquivo de entrada contém duas linhas de dados. A primeira linha contém dois valores de ponto flutuante:
x1 y1 e a segunda linha contém dois valores de ponto flutuante x2 y2.

26
Saída
Calcule e imprima o valor da distância segundo a fórmula fornecida, com 4 casas após o ponto decimal.

Exemplo de Entrada Exemplo de Saída

1.0 7.0 4.4721


5.0 9.0

-2.5 0.4 16.1484


12.1 7.3

2.5 -0.4 16.4575


-12.2 7.0

1016 – Distância

Dois carros (X e Y) partem em uma mesma direção. O carro X sai com velocidade constante de 60 Km/h
e o carro Y sai com velocidade constante de 90 Km/h. Leia a distância (em Km) e calcule quanto tempo
leva (em minutos) para o carro Y tomar essa distância do outro carro.

Entrada
O arquivo de entrada contém um número inteiro.

Saída
Imprima o tempo necessário seguido da mensagem " minutos".

Exemplo de Entrada Exemplo de Saída

10 20 minutos

110 220 minutos

7 14 minutos

1017 - Gasto de Combustível

Joaozinho quer calcular e mostrar a quantidade de litros de combustível gastos em uma viagem, ao utilizar
um automóvel que faz 12 KM/L. Para isso, ele gostaria que você o auxiliasse através de um simples
programa. Para efetuar o cálculo, deve-se fornecer o tempo gasto na viagem (em horas) e a velocidade
média durante a mesma (em km/h). Assim pode-se obter distância percorrida e em seguida calcular quantos
litros seriam necessários. Mostre o valor com 3 casas decimais após o ponto.

Entrada
O arquivo de entrada contém dois inteiros. O primeiro é o tempo gasto na viagem (em horas) e o segundo
é a velocidade média durante a mesma (em km/h).

Saída
Imprima a quantidade de litros necessária para realizar a viagem, com três dígitos após o ponto decimal

27
Exemplo de Entrada Exemplo de Saída

10 70.833
85

2 15.333
92

22 122.833
67

1018 – Cédulas

Leia um valor inteiro. A seguir, calcule o menor número de notas possíveis (cédulas) no qual o valor pode
ser decomposto. As notas consideradas são de 100, 50, 20, 10, 5, 2 e 1. A seguir mostre o valor lido e a
relação de notas necessárias.

Entrada
O arquivo de entrada contém um valor inteiro N (0 < N < 1000000).

Saída
Imprima o valor lido e em seguida a quantidade mínima de notas de cada tipo necessárias, conforme o
exemplo fornecido. Não esqueça de imprimir o fim de linha após cada linha, caso contrário seu programa
apresentará a mensagem: “Presentation Error”.

Exemplo de Entrada Exemplo de Saída

576 576
5 nota(s) de R$ 100,00
1 nota(s) de R$ 50,00
1 nota(s) de R$ 20,00
0 nota(s) de R$ 10,00
1 nota(s) de R$ 5,00
0 nota(s) de R$ 2,00
1 nota(s) de R$ 1,00

11257 11257
112 nota(s) de R$ 100,00
1 nota(s) de R$ 50,00
0 nota(s) de R$ 20,00
0 nota(s) de R$ 10,00
1 nota(s) de R$ 5,00
1 nota(s) de R$ 2,00
0 nota(s) de R$ 1,00

503 503
5 nota(s) de R$ 100,00
0 nota(s) de R$ 50,00
0 nota(s) de R$ 20,00
0 nota(s) de R$ 10,00
0 nota(s) de R$ 5,00
1 nota(s) de R$ 2,00
1 nota(s) de R$ 1,00

28
1019 - Conversão de tempo

Leia um valor inteiro, que é o tempo de duração em segundos de um determinado evento em uma fábrica
e informe-o expresso no formato horas:minutos:segundos.

Entrada
O arquivo de entrada contém um valor inteiro N.

Saída
Imprima o tempo lido no arquivo de entrada (segundos), convertido para horas:minutos:segundos,
conforme exemplo fornecido.

Exemplo de Entrada Exemplo de Saída

556 0:9:16

1 0:0:1

140153 38:55:53

1020 - Idade em Dias

Leia um valor inteiro correspondente à idade de uma pessoa em dias e informe-a em anos, meses e dias
Obs.: apenas para facilitar o cálculo, considere todo ano com 365 dias e todo mês com 30 dias. Nos casos
de teste nunca haverá uma situação que permite 12 meses e alguns dias, como 360, 363 ou 364. Este é
apenas um exercício com objetivo de testar raciocínio matemático simples.

Entrada
O arquivo de entrada contém um valor inteiro.

Saída
Imprima a saída conforme exemplo fornecido.

Exemplo de Entrada Exemplo de Saída

400 1 ano(s)
1 mes(es)
5 dia(s)

800 2 ano(s)
2 mes(es)
10 dia(s)

30 0 ano(s)
1 mes(es)
0 dia(s)

29
1021 - Notas e Moedas

Leia um valor de ponto flutuante com duas casas decimais. Este valor representa um valor monetário. A
seguir, calcule o menor número de notas e moedas possíveis no qual o valor pode ser decomposto. As notas
consideradas são de 100, 50, 20, 10, 5, 2. As moedas possíveis são de 1, 0.50, 0.25, 0.10, 0.05 e 0.01. A
seguir mostre a relação de notas necessárias.

Entrada
O arquivo de entrada contém um valor de ponto flutuante N (0 ≤ N ≤ 1000000.00).

Saída
Imprima a quantidade mínima de notas e moedas necessárias para trocar o valor inicial, conforme exemplo
fornecido.

Exemplo de Entrada Exemplo de Saída

576.73 NOTAS:
5 nota(s) de R$ 100.00
1 nota(s) de R$ 50.00
1 nota(s) de R$ 20.00
0 nota(s) de R$ 10.00
1 nota(s) de R$ 5.00
0 nota(s) de R$ 2.00
MOEDAS:
1 moeda(s) de R$ 1.00
1 moeda(s) de R$ 0.50
0 moeda(s) de R$ 0.25
2 moeda(s) de R$ 0.10
0 moeda(s) de R$ 0.05
3 moeda(s) de R$ 0.01

Para pensar:

O que tem de especial os dois problemas abaixo, a e b? É possível resolvê-los utilizando somente os
algoritmos sequenciais ou a programação sequencial?
a) Escrever um algoritmo que calcule e mostre o fatorial de 5.
b) Escrever um algoritmo que escreve os números ímpares entre 10 e 20.

Leia e analise os dois problemas a seguir, c e d.

c) Leia a hora inicial e a hora final de um jogo. A seguir calcule a duração do jogo, sabendo que o mesmo pode começar em um
dia e terminar em outro, tendo uma duração máxima de 24 horas.

d) Com relação ao exercício anterior, calcule o tempo considerando os minutos.

Eles podem ser resolvidos utilizando-se comandos sequenciais somente. Isso implica em criar uma fórmula e aumentar o nível
de complexidade. Acompanhe a resolução para a letra a:
x = (24 – ti + tf) / 24.5
DUR = (24-ti + tf) – x * 24

Obviamente se está complexo demais deve haver outra forma mais simples de resolver. Neste caso em específico podemos
utilizar estruturas de controle que permitem desviar o fluxo de execução um programa, facilitando em muito a programação. Os
algoritmos que utilizam tais estruturas são denominados algoritmo de seleção.

30
Algoritmos com Seleção – Estruturas de Controle

Já foram vistos entrada, processamento e saída, que compõem os algoritmos puramente sequenciais, bem
como a utilização de variáveis, constantes e operadores aritméticos. Porém, esses recursos são muito
limitados dentro da programação, e haverá momentos em que um valor deverá ser tratado para que possa
ser efetuado um processamento mais adequado.

Como em todo o aprendizado, a evolução na criação de algoritmos também segue uma linha ligada aos
comandos que são aprendidos. Um fator importante que deve ser destacado é que cada comando exige
uma quebra de paradigma, já foi falado anteriormente que toda solução é ou pode ser utilizada no dia a
dia, mas a quebra ocorre quando o “programador” deve pensar no formato que a máquina (no caso o
computador) conseguirá entender. Como muitos autores comentam, o computador é uma máquina burra
que tem que ser ensinado, só que ele tem um poder de armazenamento e processamento muito maior que
o ser humano, por isso parece tão inteligente. Outro ponto que assunto que assusta muito dos iniciantes é
a matemática, agora que já foram realizados os exercícios sequenciais fica a pergunta, teria outra forma e
problemas iniciais se não fosse utilizando matemática? Por isso muitas vezes os cursos ligados a
computação são confundidos com excesso e necessidade de muito conhecimento em matemática, isso
pode ser até verdadeiro, porque toda a pessoa que tem um bom conhecimento matemático possui uma
lógica apurada. Mas, as pessoas que jogam Vídeo Game? Não teriam uma boa lógica? Por isso esse
capítulo é de grande importância ele irá abrir o leque de problemas e com isso poderá até ser apresentados
problemas que não sejam ligados a matemática. Outro conteúdo importante neste capítulo são os
conhecimentos relacionais e de tomada de decisão que não vão ficar restritos somente aos algoritmos de
seleção.

Através das estruturas básicas de controle do fluxo de execução – sequenciação, seleção, repetição – e da
combinação delas, poderemos criar algoritmos para solucionar qualquer problema.

Imagine a seguinte situação: queremos um programa que mostre a média de um aluno. Até aí muito
simples, mas além de calcular a média, queremos simplesmente que o programa apresente uma mensagem
dizendo se o aluno está aprovado, no caso da sua nota ter sido maior do que 5.

Desvio condicional simples

Para solucionar este problema, será necessário trabalhar uma nova instrução não vista até agora: se... entao
e fimse. Essa instrução tem por finalidade representar a tomada de uma decisão. Sendo a condição
Verdadeira, serão executadas todas as instruções entre se... entao e fimse. No caso da condição ser falsa,
o programa segue o fluxo normal após o comando fimse, não executando as linhas de programa que ficam
entre se... entao e fimse.
Algoritmo C++
... ...
se (<condição>) entao if (<condição>) {
<cmds p/ condição verd. somente> <cmds p/ condição verd. somente>
fimse }
... ...
comandos comandos

31
Fluxograma ou diagrama de blocos

O Fluxograma mostra, através de desenhos e setas, a ordem em que os comandos do programa devem ser
realizados pelo computador. Compare o funcionamento de um algoritmo sequencial e um algoritmo de
seleção, através dos fluxogramas de cada um deles:

Programa Fluxograma Programa com desvio Fluxograma

Sequencial: condicional simples:

Comando

Comando1 se <condição> entao


Comando2 Comando
Comando3 fimse
... Comando
Comandon ...

Operadores relacionais

A pergunta que fica do exemplo utilizado é. Como é feito a condição? É possível fazer uma pergunta real
ao computador, por exemplo, o aluno tem a média maior ou igual a 5? Que o computador saberá a
resposta?

Neste ponto que vem a quebra de paradigma, o computador não irá entende uma pergunta comum,
devemos montar uma expressão, até o momento foram utilizadas expressões aritméticas, como somas,
multiplicação e divisão, mas como será possível realizar uma relação entre a nota e o resultado esperado?

Neste momento é necessário entender um novo grupo de operadores, os chamados relacionais. Nos testes
condicionais dos algoritmos, são utilizados os seguintes operadores: >, <, ==, >=, <= e !=.

A primeira regra muito importante de ser aprendida é que toda a relação envolve dois indivíduos, ou seja,
alguém será maior ou igual que 5. Neste caso a MEDIA >= 7. Veja que a condição fica no formato de
uma notação matemática, porque o computador sim irá entender se a MEDIA é >= a 5.

Ótimo com isso podemos definir o que é verdadeiro, ou melhor, conseguimos responder uma pergunta
através de um resultado obtido ou uma entrada do usuário, mas e agora como fica o resultado que não
satisfaz minha pergunta, eu poderia informar para o usuário que se ele não atingiu 5 ou mais ele seria
reprovado?

32
Desvio condicional composto

Exemplo: considerando o caso anterior onde um algoritmo deve calcular a média de um aluno e mostrar
uma mensagem dizendo se esse aluno está aprovado (caso sua nota ter sido igual ou superior a Cinco),
uma cláusula senão deve ser incluída no algoritmo no caso do aluno ser reprovado (nota inferior a cinco.

C++
comandos
...
if (<condição>) {
<comandos para condição verdadeira>
} else {
<comandos para condição falsa>
}
...
comandos

Veja nos exemplos que os algoritmos facilitaram nossa relação com o computador, ou seja, eu não preciso
voltar a perguntar se a MEDIA é abaixo que 5, porque se ela não satisfaz a minha condição já sei que o
resultado é o que restou que neste caso seria reprovado.

Agora vem a pergunta, mas e se o aluno que tirou no abaixo de 5 não é imediatamente reprovado, ele
poderia prestar um exame se sua MEDIA ficar entre 4 e 5? Como pode ser montada essa estrutura?

Desvio condicional encadeado (ou aninhado)

Existem casos em que é necessário se estabelecerem verificações de condições sucessivas. Quando uma
ação é executada, ela poderá ainda estabelecer novas condições, isso significa condições dentro de
condições. Esse tipo de estrutura poderá ter diversos níveis de condição, sendo chamados de aninhamentos
ou encadeamentos.

O segundo encadeamento pode ser tanto para uma condição verdadeira quanto uma condição falsa.

comandos
...
if (<condição1>) {
<comandos para condição1 verdadeira>
}
else {
if (<condição2>) {
<comandos para condição2 verdadeira, porém condição1 Falsa>
}
else {
<comandos para condição1 e condição2 falsas>
}
...
comandos

33
Para o problema da MEDIA então já poderia ser realizada uma nova pergunta, por exemplo, ok o aluno
não tirou média suficiente para ser aprovados, mas ele teve nota para fazer o exame. Um fator importante
e que pode ser visualizado no exemplo é que a condição ou nova pergunta sempre é realizada novamente
pelo comando se, veja que o senão apenas abre uma nova possibilidade, mas ele não tem condição.

Veja como ficaria o exemplo da MEDIA

comandos
...
if (MEDIA >= 7) {
<comandos para condição1 verdadeira para APROVADO>
}
else {
if (MEDIA >= 4) {
<comandos para condição2 verdadeira, porém condição1 Falsa neste caso
EXAME>
}
else {
<condição1 e condição2 falsas neste caso sim REPROVADO>
}
}
...
comandos

Um macete muito importante para os programadores é que o númer de condicionais neste caso de senão
seguido de se pode ser determinado por uma conta obedecendo o número de condições que devem ser
realizadas. Veja no exemplo que o aluno tem a chance de passar direto, ficar em exame ou reprovar,
quantas possibilidades ele tem então?

Seriam 3 possibilidades, com isso o aninhamento será formado por 2 comandos se. Mas por quê?

Veja que primeiro você pergunta se ele passou direto, caso contrário pergunta se ele pegou exame, se
nenhum dos dois ocorreu sobrou a condição final que é a reprovação.

Então o macete para descobrir quantas condições seriam necessárias pode ser resolvida com um cálculo
básico:

NUMERO DE CONDICOES = NUMERO DE POSSIBILIDADES - 1 porque o último com certeza será


o restante contemplado pelo senão.

Muito importante lembrar que este macete só será válido quando o comando for aninhado, ou seja, as
perguntas forem feitas em sequência com o uso do senão se.

Considere o problema a seguir, onde se estabelecem 3 condições para se calcular o reajuste de salário de
um funcionário:
- Para salário < do que 500, o reajuste será de 15%
- Para salário >= 500 mas <= 1000, o reajuste será de 10%
- Para salário > 1000, o reajuste será de 5%

34
Fluxograma:

Faça o programa em C++ equivalente ao fluxograma acima

35
Operadores Lógicos

Pode ser que se necessite, em um determinado momento, trabalhar com o relacionamento de duas ou mais
condições, ao mesmo tempo na mesma instrução se, efetuando assim testes múltiplos. Nesses casos se
torna necessário trabalhar com operadores lógicos ou boleanos. Os operadores lógicos são três: e, ou, não
.

Operador Lógico: e

Também chamado de conjunção. Nesse caso, todas as expressões condicionais componentes de uma
conjunção devem ser verdadeiras para que a expressão resultante tenha valor verdadeiro. Abaixo é
apresentada a tabela de decisão para o operador e:

Condição 1 Condição 2 Resultado


Verdadeira Verdadeira V
Verdadeira Falsa F
Falsa Verdadeira F
Falsa Falsa F

Operador Lógico: ou

Também chamado de disjunção. Nesse caso quando qualquer uma das expressões componentes da
disjunção for verdadeira, a expressão resultante terá valor verdadeiro. Abaixo é apresentada a tabela de
decisão para o operador ou:

Condição 1 Condição 2 Resultado


Verdadeira Verdadeira V
Verdadeira Falsa V
Falsa Verdadeira V
Falsa Falsa F

Operador Lógico: não

Também chamado de negação. Nesse caso, a negação apenas inverte o valor verdade da expressão. Se x
for falso, não x é verdade. Abaixo é apresentada a tabela de decisão para o operador não

Condição Resultado
Verdadeira F
Falsa V

36
Exercício de Fixação
1) Para os algoritmos apresentados abaixo, considere a execução dos mesmos sendo fornecidos como
entrada os valores (a=2, b=3, c=5, d=9 e e=6) e realize as seguintes tarefas:
● assinale com X as linhas do algoritmo que serão executadas, para os algoritmos que tiverem ( );
● preencha a tabela com o programa equivalente em c++
● coloque o resultado final da variável alterada no algoritmo.

Código em C++ Resultado

if (a==2 && b==3){ ( )


c = c+1; ( ) c = ______
} else { ( )
c = c-1; ( )
}

Código em C++ Resultado

if (a==2 && b>3) { ( )


c = 1; ( )
}else { ( )
if (c==8){ ( ) c = ______
c = 2; ( )
} else ( )
c = 3; ( )
}
}

Código em C++ Resultado

if (not d > 5) {
X = (a + b) * d ; X = ______
} else {
X = (a - b) / c;
}

Código em C++ Resultado

if (a > 2 && < 7) {


X = (a + 2) * (b – 2);
} else { X = ______
X = (a + b) / d * (c + d);
}

37
Código em C++ Resultado

if (a == 2 || b < 7) {
X = (a + 2) * (b - 2);
X = ______
} else {
X = (a + b) / d * (c + d);
}

Código em C++ Resultado

if (a >= 2 || <=1) {
X = (a + d)/2; X = ______
} else {
X = d * c;
}

Código em C++ Resultado

if (not a > 2 || not b < 7) { X = ______


X = a + e;
} else {
X = a / e;
}

2) Com base nas tabelas-verdade apresentadas anteriormente, assinale com V ou F, indicando o


resultado da expressão contida em cada linha (V no caso da expressão ser verdadeira e F no caso da
expressão ser falsa). Utilize os valores: X=1 A=3 B=5 C=8 D=7 E=6
a) nao (x>3) ( )
b) (x<1) e nao (b>d) ( )
c) nao (D<0) e (C> 5) ( )
d) nao (X>3) ou (C< 7) ( )
e) (A > B) ou (C> B) ( )
f) (X>=2) ( )
g) (X< 1) e (B>=D) ( )
h) (D >3) ou (C> 5) ( )
i) nao (D>3) ou nao (B<7) ( )
j) (A>B) ou nao (C>B) ( )

38
URI Online Judge | 1035
Teste de Seleção I

Leia 4 valores inteiros A, B, C e D. A seguir, se B for maior do que C e se D for maior do que A e a soma de C com
D for maior que a soma de A e B e se C e D, ambos, forem positivos e se a variável A for par escrever a mensagem
"Valores aceitos", senão escrever "Valores nao aceitos".
Entrada
Quatro números inteiros A, B, C e D.
Saída
Mostre a respectiva mensagem após a validação dos valores.
Exemplo de Entrada Exemplo de Saída
5 6 7 8 Valores nao aceitos

Exemplo de Entrada Exemplo de Saída


5 7 6 8 Valores aceitos

URI Online Judge | 1036


Fórmula de Báscara

Leia 3 valores inteiros e efetue o cálculo das raízes da equação de báscara. Se não foi possível calcular as raízes,
mostre a mensagem correspondente “Impossivel calcular”, caso haja uma divisão por 0 ou raiz de numero
negativo.
Entrada
Leia três numeros inteiros A, B and C.
Saída
Se não houver possibildade de calcular as raízes, apresente a mensagem "Impossivel calcular". Caso contrário,
imprima o resultado das raízes com 5 dígitos após o ponto, com uma mensagem correspondente conforme
exemplo abaixo. Imprima sempre o final de linha após cada mensagem.
Exemplo de Entrada Exemplo de Saída
2 10 -5 R1 = 0.45804
R2 = -5.45804

Exemplo de Entrada Exemplo de Saída


2 -2 5 Impossivel calcular

URI Online Judge | 1037


Intervalo

O arquivo de entrada contém um valor real qualquer. O programa deve apresentar uma mensagem dizendo em
qual dos seguintes intervalos: [0,25] (25,50], (50,75], (75,100]. Se o valor for menor do que 0 ou maior do que
100 deve ser apresentada uma mensagem “Fora de intervalo”.
Por exemplo:
[0,25] indica valores entre 0 e 25.0000, inclusive eles.
(25,50] indica valores maiores que 25 Ex: 25.00001 até o valor 50.0000000
Entrada
O arquivo de entrada contém um número com ponto flutuante qualquer.

39
Saída
A saída deve ser uma mensagem conforme exemplo abaixo.

Exemplo de Entrada Exemplo de Saída


25.02 Intervalo (25,50]

URI Online Judge | 1038


Lanche
Com base na tabela abaixo, escreva um programa que leia o código de um item e a quantidade deste item. A
seguir, calcule e mostre o valor da conta a pagar.

Entrada
O arquivo de entrada contém dois valores inteiros correspondentes ao código e à quantidade de um item
conforme tabela acima.
Saída
O arquivo de saída deve conter a mensagem "Total: R$ " seguido pelo valor a ser pago, com 2 casas após o ponto
decimal.

Exemplo de Entrada Exemplo de Saída


2 3 Total: R$ 13.50

URI Online Judge | 1040


Média 3
Leia quatro números (N1, N2, N3, N4), cada um deles com uma casa decimal, correspondente às quatro notas de
um aluno. Calcule a média com pesos 2, 3, 4 e 1, respectivamente, para cada uma destas notas e mostre esta
média acompanhada pela mensagem "Media: ". Se esta média for maior ou igual a 7.0, imprima a mensagem
"Aluno aprovado.". Se a média calculada for inferior a 5.0, imprima a mensagem "Aluno reprovado.". Se a média
calculada for um valor entre 5.0 e 6.9, inclusive estas, o programa deve imprimir a mensagem "Aluno em exame.".
No caso do aluno estar em exame, leia um valor correspondente à nota do exame obtida pelo aluno. Imprima
então a mensagem "Nota do exame: " acompanhada pela nota digitada. Recalcule a média (some a pontuação do
exame com a média anteriormente calculada e divida por 2). e imprima a mensagem "Aluno aprovado." (caso a
média final seja 5.0 ou mais ) ou "Aluno reprovado.", (caso a média tenha ficado 4.9 ou menos). Para ambos os
casos (aprovado ou reprovado) na última linha apresente uma mensagem "Media final: " seguido da média final
para esse aluno.
Entrada
A entrada contém quatro números de ponto flutuante correspendentes as notas dos alunos.
Saída
Todas as respostas devem ser apresentadas com uma casa decimal. As mensagens devem ser impressas
conforme a descrição do problema. Não esqueça de imprimir o enter após o final de cada linha, caso contrário
obterá "Presentation Error".

Exemplo de Entrada Exemplo de Saída


2.0 4.0 7.5 8.0 Media: 5.4
6.4 Aluno em exame.
Nota do exame: 6.4
Aluno aprovado.
Media final: 5.9

40
URI Online Judge | 1041
Coordenadas de um Ponto

Leia 2 valores com uma casa decimal (x e y), que devem representar as coordenadas de um ponto em um plano.
A seguir, determine qual o quadrante ao qual pertence o ponto, ou se está sobre um dos eixos cartesianos ou na
origem (x = y = 0).

Se o ponto estiver na origem, escreva a mensagem “Origem”.


Se o ponto estiver sobre um dos eixos escreva “Eixo X” ou “Eixo Y”, conforme for a situação.
Entrada
A entrada contem as coordenadas de um ponto.
Saída
A saída deve apresentar o quadrante em que o ponto se encontra.

Exemplo de Entrada Exemplo de Saída


4.5 -22 Q4

URI Online Judge | 1042


Sort Simples

Leia 3 valores inteiros e ordene-os em ordem crescente. No final, mostre os valores em ordem crescente, uma
linha em branco e em seguida, os valores na sequência como foram lidos.

Entrada
A entrada contém três números inteiros.
Saída
Imprima a saída conforme foi especificado.

Exemplo de Entrada Exemplo de Saída


7 21 -14 -14
7
21

7
21
-14

URI Online Judge | 1043


Triângulo

Leia 3 valores reais (A, B e C) e verifique se eles formam ou não um triângulo. Em caso positivo, calcule o
perímetro do triângulo e apresente a mensagem:
Perimetro = XX.X
Em caso negativo, calcule a área do trapézio que tem A e B como base e C como altura, mostrando a mensagem
Area = XX.X
Entrada
A entrada contém três valores reais.

41
Saída
O resultado deve ser apresentado com uma casa decimal.

Exemplo de Entrada Exemplo de Saída


6.0 4.0 2.0 Area = 10.0

URI Online Judge | 1044


Múltiplos

Leia 2 valores inteiros (A e B). Após, o programa deve mostrar uma mensagem "Sao Multiplos" ou "Nao sao
Multiplos", indicando se os valores lidos são múltiplos entre si.
Entrada
A entrada contém valores inteiros.
Saída
A saída deve conter uma das mensagens conforme descrito acima.

Exemplo de Entrada Exemplo de Saída


6 24 Sao Multiplos

URI Online Judge | 1045


Tipos de Triângulos

Leia 3 valores de ponto flutuante (A,B e C) e ordene-os em ordem decrescente, de modo que o lado A representa
o maior dos 3 lados. A seguir, determine o tipo de triângulo que estes três lados formam, com base nos seguintes
casos, sempre escrevendo uma mensagem adequada:
● se A > B+C, apresente a mensagem: NAO FORMA TRIANGULO
2
● se A = B2 + C2, apresente a mensagem: TRIANGULO RETANGULO
2
● se A > B2 + C2, apresente a mensagem: TRIANGULO OBTUSANGULO
2
● se A < B2 + C2, apresente a mensagem: TRIANGULO ACUTANGULO
● se os três lados forem iguais, apresente a mensagem: TRIANGULO EQUILATERO
● se apenas dois dos lados forem iguais, apresente a mensagem: TRIANGULO ISOSCELES
Entrada
A entrada contem três números de ponto flutuante, A, B e C.
Saída
Imprima todas as classificações do triângulo especificado na entrada.
Exemplo de Entrada Exemplo de Saída
7 5 7 TRIANGULO ACUTANGULO
TRIANGULO ISOSCELES

URI Online Judge | 1046


Tempo de Jogo

Leia a hora inicial e a hora final de um jogo. A seguir calcule a duração do jogo, sabendo que o mesmo pode
começar em um dia e terminar em outro, tendo uma duração máxima de 24 horas.
Entrada
Dois números inteiros representando o incío e o fim do jogo.

42
Saída
Mostre a duração do jogo conforme exemplo abaixo.
Exemplo de Entrada Exemplo de Saída
16 2 O JOGO DUROU 10 HORA(S)

URI Online Judge | 1047


Tempo de Jogo com Minutos

Leia a hora inicial, minuto inicial, hora final e minuto final de um jogo. A seguir calcule a duração do jogo.
Obs: O jogo tem duração mínima de um (1) minuto e duração máxima de 24 horas.
Entrada
Quatro números inteiros representando a hora de incício e fim do jogo.
Saída
Mostre a seguinte mensagem: “O JOGO DUROU XXX HORA(S) E YYY MINUTO(S)” .
Exemplo de Entrada Exemplo de Saída
7 51 9 30 O JOGO DUROU 1 HORA(S) E 39 MINUTO(S)

Qual é a ordem de execução dos operadores de cada uma das expressões abaixo:
a) se (a > b + c * d) e (a + b * potencia(c,d) - 2 > (x + y))
b) se (a + b – c * d) > (a - b) ou (c > 2 * 3 * a)
c) se nao ((a + b) < (c * d)) ou (a > c - d) e (2 > 3 * a)
d) se nao (a > b + c * d) ou (b * x > y) ou (a > b) e (a > c) e (a > d)
e) se (a + b > c) ou (c + d > a) ou (a + b > 10) e (c > d) e nao (a > c)

Considerando: double a = 2, b = 5 e C = 6, mostre o resultado da execução dos algoritmos abaixo.

a = b * c - a * b; SOMA DE A, B E C=
se (b > a) e nao (b <= C) entao
b = c * 2 - (a + 2);
c = b - a * c * 2;
senao
c = c + 2 * a + 2;
b = c * 2 - a * 2;
fimse
x = a + b + c;
escrever << “SOMA DE A, B E C=“ << x;

a = b * c + a * b;
SOMA DE A, B E C=
b = potencia (b,2) + (a + 6);
se (b > a) e nao (b <= C) entao
b = c * 2 - (a + 2);
c = b - a * c * 2;
senao
c = c + 2 * a + 2;
b = c * 2 - a * 2;
fimse
x = a + b + c;
escrever << “SOMA DE A, B E C=“ << x;

43
Algoritmos com Repetição – Laços de Repetição

Em vários momentos, na programação, se torna necessário repetir um trecho de um programa um


determinado número de vezes. Nesse caso, pode ser criado um laço de repetição que efetue o
processamento de um determinado trecho, tantas vezes quantas forem necessárias. Os laços de repetição
também são conhecidos por loopings.

Voltando ao exemplo apresentado no início do livro, da ligação entre dois amigos através do celular.
Considere que quem esteja ligando insista até que o seu amigo atenda. O algoritmo com previsão para
esta situação é apresentado a seguir:

- pegar o celular, desbloquear e ir até a opção de teclado (telefone);


- digitar cada um dos dígitos do número desejado e efetuar a ligação;
- se a ligação for completada e o seu amigo atender
- falar com o seu amigo;
- senão ///ocupado, fora de área, falta de créditos, etc.
- enquanto não conseguir estabelecer uma comunicação com o seu amigo
- encerrar a ligação;
- aguardar alguns segundos;
- efetuar novamente a ligação para o seu amigo e aguardar ele atender
- Falar com o seu amigo
- encerrar a ligação

Neste momento percebe-se a utilização de outro comando, o comando de repetição “enquanto”. O trecho
que está dentro do enquanto tende a ficar sendo repetido infinitamente.

Obviamente ninguém gostaria de ficar o resto da vida tentando contato com o seu amigo pelo celular.
Digamos que você seja uma pessoa persistente e quer efetuar 3 tentativas de comunicação e depois desistir
(caso seu amigo não atenda).

- pegar o celular, desbloquear e ir até a opção de teclado (telefone);


- digitar cada um dos dígitos do número desejado e efetuar a ligação;
- se a ligação for completada e o seu amigo atender
- falar com o seu amigo;
- senão ///ocupado, fora de área, falta de créditos, etc.
- tentativas = 1;
- enquanto não estabelecer comunicação com o seu amigo e tentativas <=3
- encerrar a ligação;
- aguardar alguns segundos;
- efetuar novamente a ligação para o seu amigo e aguardar ele atender;
- tentativas = tentativas + 1 ;
- se (tentativas <= 3)
- falar com o seu amigo;
- encerrar a ligação

Inicialmente, tínhamos um pequeno conjunto de ações que deveriam ser executadas (estrutura
sequencial). Através de uma condição, incluímos posteriormente uma estrutura de seleção. Na
necessidade de repetir um determinado trecho do algoritmo, construiu-se no final uma estrutura de
repetição.

44
Cada um destes assuntos será exaustivamente trabalhado neste livro com uma metodologia particular
aliada à resolução de problemas específicos disponibilizados na categoria “Iniciante” do portal URI
Online Judge.

Outro ponto a se mencionar neste momento é o uso da endentação, que pode ser percebido em todos os
algoritmos aqui utilizados. Endentação é o deslocamento de comandos para a direita através de 2 ou 3
espaços em branco.

Pode-se perceber de forma clara, através deste deslocamento de linhas para a direita, qual é a sequência
de comandos e quais são os comandos que estão sujeitos à uma determinada condição. Imagine se tudo
estivesse alinhado à esquerda, iniciando sempre na mesma coluna. Seria possível descobrir os comandos
que estão dentro do comando “senão” ou dentro do comando “enquanto”?

Infelizmente muitos estudantes simplesmente esquecem de utilizar endentação quando escrevem o seu
código. Embora um programa possa funcionar sem a endentação, a sua ausência dificulta em muito, tanto
para o professor quanto para o aluno, a leitura e compreensão do que foi escrito há pouco tempo atrás.
Portanto, é muito recomendável utilizar sempre a endentação para que os algoritmos sejam o mais claro
possível para quem os esteja lendo.

Supondo que se queira executar um determinado trecho de um programa três vezes (3x). Por exemplo,
suponha que um programa deva ler dois valores e mostrar a média entre esses valores. Certamente a
melhor técnica não seria repetir simplesmente um mesmo trecho três vezes, como é mostrado abaixo:

inicio
real n1,n2,media;
Ler n1;
Ler n2;
media = (n1+n2)/2;
escrever << “Media:” << media;

Ler n1;
Ler n2;
media = (n1+n2)/2;
escrever << “Media:” << media;

Ler n1
Ler n2
media = (n1+n2)/2;
escrever << “Media:” << media;
fim

Para esse e outros casos similares, existem comandos apropriados para efetuar a repetição de determinados
trechos de programa tantas vezes quantas forem necessárias. A principal vantagem é que o programa passa

45
a ter um tamanho muito menor, podendo ser ampliada a amplitude de processamento como for necessária.
Existem 2 tipos de repetições:
− definidas e garantidas, ou seja, um mesmo trecho de programa será executado um número pré-
determinado de vezes e;
− indefinida e sem garantia, ou seja, um trecho de programa poderá ser executado indefinidamente, não
havendo garantia do término da execução do algoritmo.

Repetição utilizando estrutura definida e garantida

A estrutura do Para/Próximo é definida e garantida, e sua sintaxe em português estruturado é apresentada


no seguinte formato:

para <var> de <início> ate <fim> passo <incremento>


<comandos>
proximo

Veja o exemplo anterior, aplicando-se nele o laço de repetição Para / Próximo.

real media,n1,n2
inteiro i
inicio
para i de 1 ate 3 passo 1 // (passo 1 é opcional)
Ler n1;
Ler n2;
media = (n1+n2)/2;
escrever << “Média:” << media;
proximo
fim

O algoritmo, que tinha que 17 linhas, passou a ter 10 linhas, com a mesma
funcionalidade e ainda com a vantagem de se ampliar o número de repetições de 3 para 300, com a maior
facilidade.

Tabela de correspondência entre Algoritmos (para i) e C++ (for i)

Algoritmo C++
... ...
para i de 1 ate 3 passo 1 for (i=1 ; i<=3; i = i+1) {
ler n1; cin >> n1;
ler n2; cin >> n2;
media = (n1+n2)/2; media = (n1+n2)/2;
escrever << “Média: ” << media; cout << “Media: ” << media;
proximo }

Exercício: preencha a tabela abaixo conforme o exemplo:

46
Algoritmos Equivalente em C++ Val. assumidos pelo i
para i de 1 ate 5 for ( i=1 ; i<=5 ; i=i+1) 1, 2, 3, 4, 5
para i de 4 ate 5
para i de 5 ate 5
para i de 5 ate 4
para i de 5 ate 4 passo -1
para i de 1 ate 5 passo 2
para i de 2 ate 5 passo 3
para i de 2 ate 5 passo 4
para i de 1.5 ate 0.4 passo -0.5
para i de 5 ate 5 passo -1
para i de 5 ate 7 passo -1

Contador

É uma variável de controle, inteira, que serve para controlar quantas vezes um determinado trecho de
programa foi executado. Considere, por exemplo, um programa que leia 6 valores, podendo eles serem
somente negativos ou positivos (desconsidere os valores nulos). A seguir, considere que o programa deva
mostrar a quantidade de valores positivos digitados. Nesse caso, devemos fazer um teste a cada leitura, e,
no caso do valor lido ser positivo, adicionar +1 para uma variável tipo contador (contp=contp+1). Tente
fazer o exercício A_R2.

Acumulador

É uma variável de controle, inteira, que serve para acumular valores. Considere que um programa deva
ler 6 valores e mostrar a quantidade de números positivos. Além disso, considere que o programa deva
mostrar a média dos valores digitados. Tente fazer o exercício A_R3.

Algoritmos Propostos

A_R1
Faça um programa que mostre os números pares entre 1 e 100, inclusive.

Exemplo de entrada Saída para o exemplo de entrada


2
4
...
100

A_R2
Faça um programa que leia 6 valores, podendo eles serem somente negativos ou positivos (desconsidere os valores nulos). A
seguir, mostre a quantidade de valores positivos digitados

47
Exemplo de entrada Saída para o exemplo de entrada
7 4 valores positivos
-5
6
-3.4
4.6
12

A_R3
Faça um programa que leia 6 valores e mostre a quantidade de números positivos. Na linha seguinte, o programa deve mostrar
a média dos valores positivos digitados.

Primeiro Exemplo de entrada Saída para o exemplo de entrada


7 4 valores positivos
-5 7,4
6
-3.4
4.6
12

A_R4
Calcule e mostre a soma dos números pares entre 1 e 100, inclusive. Na linha seguinte, apresente a média deles

Exemplo de entrada Saída para o exemplo de entrada


????
????

A_R5
Faça um programa que leia 5 valores inteiros. Conte quantos destes valores digitados são pares e mostre esta informação.

Exemplo de entrada Saída para o exemplo de entrada


7 3 valores pares
-5
6
-4
12

A_R6
Leia 5 valores para uma variável A. A seguir mostre quantos valores digitados foram pares, quantos valores digitados foram
ímpares, quantos foram positivos e quantos foram negativos.

Exemplo de entrada Saída para o exemplo de entrada


-5 3 valor(es) par(es)
0 2 valor(es) impar(es)
-3 1 valor(es) positivo(s)
-4 3 valor(es) negativo(s)
12

48
A_R18
Faça um algoritmo que leia um conjunto de 5 valores, um de cada vez, acompanhados de um código 1 ou 2. O valor representa
o número de cobaias utilizadas em uma das 5 experiências feitas e os códigos 1 e 2 representam respectivamente coelhos e
ratos. Mostre no final, o total de cobaias utilizadas, o total de coelhos, total de ratos, e o percentual de coelhos e ratos.

Exemplo de entrada Saída para o exemplo de entrada


5 1 Total de cobaias utilizadas: 25
6 2 Total de coelhos: 16
7 1 Total de ratos: 10
4 1 Percentual de coelhos: 64 %
3 2 Percentual de ratos: 36 %

A_R19
Faça um algoritmo que mostre a sequência apresentada no exemplo abaixo:

Exemplo de entrada Saída para o exemplo de entrada


I=1 J=60
I=4 J=55
I=7 J=50
...
I=? J=0

A_R20
Faça um algoritmo que mostre a sequência apresentada no exemplo abaixo:

Exemplo de entrada Saída para o exemplo de entrada


I=1 J=7
I=1 J=6
I=1 J=5
I=3 J=7
I=3 J=6
I=3 J=5
...
I=9 J=7
I=9 J=6
I=9 J=5

A_R21
Faça um algoritmo que mostre a sequência apresentada no exemplo abaixo:

Exemplo de entrada Saída para o exemplo de entrada


I=1 J=7
I=1 J=6
...
I=1 J=5
I=3 J=9 I=9 J=15
I=3 J=8
I=3 J=7 I=9 J=14
...
I=9 J=13

49
A_R22
Faça um algoritmo que mostre a sequência apresentada no exemplo abaixo:

Exemplo de entrada Saída para o exemplo de entrada


I=2 J=7
I=2 J=6 ...
I=4 J=6
I=10 J=3
I=4 J=5
... I=10 J=2

A_R23
Faça um algoritmo que mostre a sequência apresentada no exemplo abaixo:

Exemplo de entrada Saída para o exemplo de entrada


I=0 J=1
I=0 J=2
...
I=0 J=3
I=0.2 J=1.2 I=2 J=?
I=0.2 J=2.2
I=0.2 J=3.2 I=2 J=?
...
I=2 J=?

A_R24
Leia 1 valor N.
Este N é a quantidade de valores X e Y que você deve ler a seguir.
Para cada valor X e Y lido, o programa deve mostrar a soma dos ímpares que estão entre eles, inclusive se for o caso.

Exemplo de entrada Saída para o exemplo de entrada


3 5
4 5 24
13 10 0
4 4

Explicação das saídas:


5 somente o 5 é ímpar neste intervalo [4,5] 24 é a soma de 11 + 13 0 não há ímpares entre 4 e 4

A_R25
Escreva um algoritmo que leia 50 valores, um de cada vez. Mostre então o maior valor lido.

Exemplo de entrada Saída para o exemplo de entrada


1 Maior: 51234
...
63
17

50
Repetição utilizando estrutura indefinida e sem garantia

Embora também possa ser utilizada quando se tem um número pré-determinado de repetições a executar,
como nos exemplos anteriores, essa estrutura é mais indicada quando é necessário repetir um determinado
trecho de programa indefinidamente (por isso é denominada estrutura indefinida). A estrutura é
denominada sem garantia porque pode ficar executando indefinidamente, até que o programa seja
interrompido pelo usuário. Para ilustrar, suponha que um determinado valor deva ser lido indefinidamente,
até que seja digitado zero (condição de parada). Nesse caso devemos usar a estrutura enquanto:

Algoritmo C++
inicio ...
inteiro val; int val;
val = 1; val = 1;
enquanto (val != 0) faz while (val != 0) {
escrever “Valor:”; cout << “Valor:”;
ler val; cin >> val;
... ...
<comandos1> ; <comandos1>
fimEnquanto }
<comandos2> ; <comandos2>
fim
Nesse caso, quando for digitado 0 (zero) para val, o fluxo do programa segue até chegar no comando
fimEnquanto. Ao retornar na linha enquanto, é verificado que o valor não é diferente de zero e o controle
do programa passa para a linha comandos2. A partir daí o fluxo do programa segue normalmente.

Veja abaixo como ficaria a utilização do laço enquanto para o exercício das 4 repetições:

inicio
inteiro i;
real media,n1,n2;
i = 1;
enquanto (i <= 3) faz
Ler n1;
Ler n2;
media = (n1+n2)/2;
escrever << “Média:” << media;
i = i+1;
fimEnquanto
fim

Embora existam outros tipos de laços de repetição, além do para e enquanto, somente trabalharemos
com estes nos algoritmos, pois são encontrados em praticamente todas as linguagens de programação e
resolvem qualquer problema que necessite repetição.

51
Algoritmos que incluem repetição indefinida e sem garantia

A_R26
Faça um algoritmo que leia um conjunto não determinado de pares de valores M e N (parar quando algum dos valores for
menor ou igual a zero). Para cada par lido, mostre a sequência do menor até o maior, inclusive e a soma dos inteiros
consecutivos do menor até o maior, inclusive.

Exemplo de entrada Saída para o exemplo de entrada


5 2 2 3 4 5 Soma=14
6 3 3 4 5 6 Soma=18
5 0

A_R27
Leia 1 variável X inúmeras vezes (parar quando o valor digitado for menor ou igual a zero (0)). Para cada valor lido mostre a
sequência de 1 até o valor lido. Obs: cuide não deixar espaço em branco após o último valor apresentado na linha.

Exemplo de entrada Saída para o exemplo de entrada


5 1 2 3 4 5
10 1 2 3 4 5 6 7 8 9 10
3 1 2 3
0

A_R28
Leia 1 valor para X indefinidas vezes. (O programa irá parar quando o valor de X for menor ou igual a 0). Em seguida mostre
a soma dos 5 ímpares consecutivos a partir de X, inclusive se for o caso.

Exemplo de entrada Saída para o exemplo de entrada


4 45
11 75
0

Explicação das saídas:


45 é o valor de 5 + 7 + 9 + 11 + 13
75 é o valor de 11 + 13 + 15 + 17 + 19

A_R29
Faça um programa que leia um inteiro N. N será o número de casos de testes que vem logo a seguir. Para cada caso de teste,
será lido a população de uma cidade A, a população de uma cidade B, uma taxa de crescimento anual em percentual (0-100)
para a cidade A e uma taxa de crescimento anual em percentual (0-100) para a cidade B. Mostre, para cada caso de teste,
quantos anos levará para que a cidade A ultrapasse a cidade B em número de habitantes. Obs.: se o tempo for mais do que
100 anos o programa deve apresentar a mensagem: Mais de 1 seculo.

Exemplo de entrada Saída para o exemplo de entrada


4 16 anos.
90000 120000 5.5 3.5 12 anos.
56700 72000 5.2 3 Mais de 1 seculo.
123 2000 3 2 10 anos.
100000 110000 1.5 0.5

52
Dica: de alguma maneira, você deve interromper a contagem quando passar de 100 anos, pois vai demorar muito para calcular
e vai dar TLE (Time Limit Exceeded). Cuide este controle.

A_R30
Escreva um algoritmo que leia indefinidamente um número e diga se este número é perfeito ou não. O programa deve parar
quando for digitado 0 na entrada. Um número perfeito é aquele que é igual à soma de seus divisores. Ex: 1+2+3=6 ,
1+2+4+7=28 , etc...

Exemplo de entrada Saída para o exemplo de entrada


6 6 eh perfeito
5 5 nao eh perfeito
0

Algoritmos com Fatoriais e números Primos

È muito comum encontrarmos problemas que envolvam o fatorial de um determinado valor ou valores
primos. Quanto ao fatorial, existem várias formas de calcular o fatorial de um determinado valor. Por
definição, as regras para definir um valor fatorial são as seguintes:
O fatorial de 0 é igual a 1. Ou seja 0!=1;
O fatorial de qualquer outro valor é igual ao valor * (valor-1)!
Para calcular o fatorial de 5, por exemplo o cálculo deve ser: fat=5*4*3*2*1 ou fat=1*2*3*4*5

A_R31
Faça um algoritmo que leia um valor inteiro para M. Valide para que seja repetida a entrada de M até que este seja positivo .
Calcule e mostre o seu fatorial.

Exemplo de entrada Saída para o exemplo de entrada


-6 6! = 720
-51
6

No caso dos números primos, por definição, um número primo é aquele que pode ser divisível somente
por 1 e por ele mesmo, a partir do valor 2. Assim sendo, 2 é primo, 3 é primo, 4 não é primo porque pode
ser dividido por 1, 2 e 4, 5 é primo e assim sucessivamente.

A_R32
Escrever um algoritmo que leia um valor qualquer N. Este valor N é o número de casos de teste que vem a seguir. Para cada
caso de teste, mostre se o valor lido é primo ou não é primo.

Exemplo de entrada Saída para o exemplo de entrada


2 51 nao eh primo
51 7 eh primo
7

53
Exercício

Mostre nas telas ao lado a execução dos seguintes algoritmo (os cálculos devem aparecer). Escreva
também o programa C++ correspondente a cada algoritmo.
a) s = 3
x = 0 Soma =
Cálculos (memória)
para i de 1 ate 3 passo 2
para j de 6 ate i passo -3
s = s – 1
x = x + i * j * s
proximo
proximo
escrever "Soma = ", x

b)C = 0 Cálculos
C=
para i de 1 ate 3
para j de 6 ate i passo –3
C = C+i
escrever C
proximo j
proximo
escrever “C=”,C

c) A = 12 B = 27 D = 0
Cálculos
enquanto (A <= B) faz D=
para i de 1 ate int(A/6)
D = D+A
proximo
A = A+10
fimEnquanto
escrever "D=”,D

Considerando a entrada dos valores 4, 5, 2, 3, 0, -1, 5 para X, mostre na tela a execução dos algoritmos:

d)
Cálculos
s = 0 Soma =
x = 1
enquanto (x != 0) faz
ler x
s = s + x
fimEnquanto
escrever “Soma =” , s

e soma = 0
Cálculos
) ler x Soma =
enquanto (x >= 0) faz
para i de 1 ate x passo 2
soma = soma + i
proximo
ler x
fimEnquanto
escrever “Soma =” , soma

54
Algoritmos Complementares envolvendo repetições

A_CR1
Escreva um algoritmo para repetir a leitura de um número enquanto o valor fornecido for diferente de 0. Para cada número
fornecido, imprimir se ele é NEGATIVO ou POSITIVO. Quando o número 0 for fornecido a repetição de ser encerrada sem
imprimir mensagem alguma.

Exemplo de uma entrada Saída para o exemplo de entrada


4 Positivo
-1 Negativo
2 Positivo
6 Positivo
0

A_CR2
Escreva um algoritmo para ler uma quantidade indeterminada de valores inteiros. Para cada valor fornecido escrever uma
mensagem que indica se cada valor fornecido é PAR ou IMPAR. O algoritmo será encerrado imediatamente após a leitura de
um valor NULO ou NEGATIVO.

Exemplo de uma entrada Saída para o exemplo de entrada


11 Impar
3 Impar
2 Par
10 Par
5 Impar
-2

A_CR3
Ler uma quantidade indeterminada de duplas de valores (2 valores de cada vez). Escrever para cada dupla uma mensagem que
indique se ela foi informada em ordem crescente ou decrescente. A repetição serão encerrado ao ser fornecido para os elementos
da dupla valores iguais.

Exemplo de uma entrada Saída para o exemplo de entrada


5 4 Decrescente
7 2 Decrescente
3 8 Crescente
2 2

A_CR4
Escreva um algoritmo para repetir a leitura de uma senha até que ela seja válida. Para cada leitura da senha incorreta informada
escrever a mensagem "Senha invalida". Quanto a senha for informada corretamente deve ser impressa a mensagem "Acesso
Permitido" e o algoritmo encerrado. Considere que a senha correta é o valor 2002

Exemplo de uma entrada Saída para o exemplo de entrada


2200 Senha Invalida
1020 Senha Invalida
2022 Senha Invalida
2002 Acesso Permitido

55
A_CR5
Escreva um algoritmo para ler as coordenadas (X,Y) de uma quantidade indeterminada de pontos no sistema cartesiano. Para
cada ponto escrever o quadrante a que ele pertence. O algoritmo será encerrado quando pelo menos uma de duas coordenadas
for NULA (nesta situação sem escrever mensagem alguma).

Exemplo de uma entrada Saída para o exemplo de entrada


2 2 primeiro
3 -2 quarto
-8 -1 terceiro
-7 1 segundo
0 2

A_CR6
Leia um valor N. Este N será a quantidade de 2 valores (dividendo e divisor) que serão lidos a seguir. Para que a divisão
entre 2 números possa ser realizada, o divisor não pode ser nulo. Escreva um algoritmo para ler 2 valores e imprimir o
resultado da divisão do primeiro pelo segundo. Caso não for possível mostre a mensagem “divisao impossivel” para valores
em questão.

Exemplo de uma entrada Saída para o exemplo de entrada


3 -1.5
3 -2 divisao impossivel
-8 0 0
0 8

A_CR7
Altere a solução do exercício anterior. para que seja impressa “valor invalido” caso o segundo valor informado seja ZERO.

Exemplo de uma entrada Saída para o exemplo de entrada


3 -1.5
3 -2 valor invalido
-8 0 0
0 8

A_CR8
Escreva um algoritmo para ler as notas da 1a. e 2a. avaliações de um aluno, calcular e imprimir a média semestral. Faça com
que o algoritmo só aceite notas válidas( uma nota válida deve pertencer ao intervalo [0,10]. Cada nota deve ser validada
separadamente. Deve ser impressa a mensagem "nota invalida" caso a nota informada não pertença ao intervalo [0,10].

Exemplo de uma entrada Saída para o exemplo de entrada


-3.5 nota invalida
3.5 nota invalida
11 media=6.75
10

A_CR9
Reescreva o algoritmo para o problema 8 para que no final seja impressa a mensagem novo calculo (1-sim 2-nao) solicitando
ao usuário que informe um código (1 ou 2) indicando se ele deseja ou não executar o algoritmo novamente. Se for informado
o código 1 deve ser repetida a execução de todo o algoritmo para permitir um novo cálculo, caso contrário ele deve ser
encerrado.

56
Exemplo de uma entrada Saída para o exemplo de entrada
-3.5 nota invalida
3.5 nota invalida
11 media=6.75
10 novo calculo (1-sim 2-nao)
1 media=7.5
8 novo calculo (1-sim 2-nao)
9
2

A_CR10
Reescreva o algoritmo do exercício 9 validando a resposta do usuário para a pergunta novo calculo (1-sim 2-nao) (aceitar
apenas os código 1 ou 2).
Exemplo de uma entrada Saída para o exemplo de entrada
-3.5 nota invalida
3.5 nota invalida
11 media=6.75
10 novo calculo (1-sim 2-nao)
1 media=7.5
8 novo calculo (1-sim 2-nao)
9 novo calculo (1-sim 2-nao)
3
2

A_CR11
Escreva um algoritmo para ler 2 notas de um aluno, calcular e imprimir a média final. Logo após escrever a mensagem
"Calcular a media para outro aluno (1.sim 2.nao)" e solicitar um resposta. Se a resposta for 1, o algoritmo deve ser executado
novamente, caso contrário deve ser encerrado imprimindo a quantidade de alunos aprovados. Obs: considere como
aprovados todos os alunos com média maior ou igual a 5.0. Não serão digitadas notas inválidas.

Exemplo de uma entrada Saída para o exemplo de entrada


3.5 media=6.75
10 Calcular a media para outro aluno (1.sim 2.nao)
1 media=7.5
8 Calcular a media para outro aluno (1.sim 2.nao)
9 Alunos aprovados:2
2

A_CR12
Reescreva o algoritmo do exercício 11, para que seja impresso no final, a quantidade de alunos aprovados, reprovados ou que
ficaram em exame. Obs: Não serão digitadas notas inválidas.

Exemplo de uma entrada Saída para o exemplo de entrada


3.5 media=6.75
10 Calcular a media para outro aluno (1.sim 2.nao)
1 media=7.5
8 Calcular a media para outro aluno (1.sim 2.nao)
9 Alunos aprovados:1
2 Alunos em exame:1
Alunos reprovados:0

57
A_CR13
A Federação Gaúcha de Futebol contratou você para escrever um programa para fazer uma estatística do resultado de vários
GRENAIS. Escreva um algoritmo para ler o número de gols marcados pelo Inter, o número de gols marcados pelo GRÊMIO
em um GRENAL, imprimindo o nome do time vitorioso ou a palavra EMPATE. Logo após escrever a mensagem "Novo
grenal (1-sim 2-nao)" e solicitar uma resposta. Se a resposta for 1, o algoritmo deve ser executado novamente solicitando o
número de gols marcados pelos times em uma nova partida, caso contrário deve ser encerrado imprimindo:

-Quantos GRENAIS fizeram parte da estatística.


-O número de vitórias do Inter.
-O número de vitórias do Grêmio.
-O número de Empates.
- Uma mensagem indicando qual o time que venceu o maior número de GRENAIS (ou NÃO HOUVE VENCEDOR).

Exemplo de uma entrada Saída para o exemplo de entrada


3 2 Novo grenal (1-sim 2-nao)
1 Novo grenal (1-sim 2-nao)
2 3 Novo grenal (1-sim 2-nao)
1 3 grenais
3 1 Inter:2
0 Gremio:1
Empates:0
Inter venceu mais

A_CR14
Escrever um algoritmo que escreve um único valor na tela. Este valor é a soma dos números que não são múltiplos de 13
entre 100 e 200, inclusive estes, se for o caso.

A_CR15
Escrever um algoritmo que escreve os números que não são múltiplos de 13 entre 1000 e 2000, inclusive estes, se for o caso,
um valor por linha.

A_CR16
Escrever um algoritmo que escreve todos os números entre 1 e 1000000, sempre que o resto da divisao deste número por 5
for igual a 2 ou 3. Por exemplo o número 7 e o número 8 satisfazem esta condição.

A_CR17
Um Posto de combustíveis deseja determinar qual de seus produtos tem a preferência de seus clientes. Escreva um algoritmo
para ler o tipo de combustível abastecido (codificado da seguinte forma: 1.Álcool 2.Gasolina 3.Diesel 4.Fim). Caso o usuário
informe um código inválido (fora da faixa de 1 a 4) deve ser solicitado um novo código (até que seja válido). O programa será
encerrado quando o código informado for o número 4 escrevendo então a mensagem: "MUITO OBRIGADO" e a quantidade
de clientes que abasteceram cada tipo de combustível.

Exemplo de uma entrada Saída para o exemplo de entrada


8 MUITO OBRIGADO
1 Alcool:1
7 Gasolina:2
2 Diesel:0
2
4

58
A_CR18
Escreva um algoritmo para imprimir a seguinte saída:

Exemplo da saída
1 2 3 PUM
5 6 7 PUM
...
37 38 39 PUM

A_CR19
Escreva um algoritmo para escrever a seguinte saída

Exemplo da saída
1 1 1
2 4 8
3 9 27
4 16 64
...
10 100 1000

A_CR20
Escreva um algoritmo para escrever a seguinte saída
Exemplo da saída
1 1 1
1 2 2
2 4 8
2 5 9
3 9 27
3 10 28
4 16 64
4 17 65
...
10 100 1000
10 101 1001

A_CR21
Escreva um algoritmo que imprima os números ímpares existentes de entre 1(inclusive) e 100. A cada 10 números ímpares
impressos o programa deve apresentar uma linha em branco.

A_CR22
Escreva um algoritmo que imprima os números pares existentes de entre 1 e 1000(inclusive). A cada 10 números ímpares
impressos o programa deve apresentar uma linha em branco.

A_CR23
Escreva um algoritmo que leia um valor N (Este N será um valor entre 1 e 10). A seguir, mostre uma sequência de 1 até 100,
pulando uma linha em branco a cada N valores. Obs. Cada sequência deve ser mostrada em uma linha apenas, com 1 espaço
em branco entra cada numero

59
Exemplo de uma entrada Saída para o exemplo de entrada
3 1 2 3
4 5 6
7 8 9
10 11 12
...
97 98 99
100

A_CR24
Escreva um algoritmo para ler um valor N (validar para aceitar apenas valores positivos). Imprima a seguir “PROGRAMA” N
vezes.

A_CR25
Escreva um algoritmo para ler um valor N (validar para aceitar apenas valores positivos) e imprimir os N primeiros números
inteiros.

A_CR26
Escreva um algoritmo que leia um valor N (pode ser um valor de 1 até 1000). Imprima a seguir a tabuada deste N.

Exemplo de uma entrada Saída para o exemplo de entrada


200 1X200=200
2X200=400
3X200=600
...
10X200=2000

A_CR27
Ler 10 valores e escrever quantos destes valores são negativos.

A_CR28
Ler 10 valores, calcular e escrever a média aritmética destes valores.

A_CR29
Ler 2 valores (considere que o primeiro valor lido sempre será menor que o segundo), calcular e escrever a soma dos
números inteiros existentes entre eles(incluindo os 2 valores lidos na soma).

A_CR30
Reescreva o exercício anterior considerando que o primeiro pode ser maior que o segundo e vice-versa.

A_CR31
Escreva um algoritmo que forneça quantos números devem existir em sequência a partir do 1 (1,2,3,4,...) para que a sua soma
ultrapasse a 100 o mínimo possível.

A_CR32
Ler um valor A e um valor N. Imprimir a soma dos N números a partir de A(inclusive). Caso N seja negativo ou ZERO,
deverá ser lido um novo N(apenas N).
Valores para teste (aqui há 2 exemplos, mas o programa só vai ler 1 conjunto A N):
A N SOMA
3 2 7 (que seria a soma 3+4)
4 5 30 (que seria a soma 4+5+6+7+8)

60
A_CR33
Ler um valor X e um valor Z (se Z for menor que X deve ser lido um novo valor para Z). Contar quantos números inteiros
devemos somar em sequência ( a partir do X inclusive) para que a soma ultrapasse a Z o mínimo possível. Escrever o valor
final da contagem.
Valores para teste (aqui há 3 exemplos, mas o programa só vai ler 1 conjunto X Z)::
X Z Resposta
3 20 5 (que seria a soma 3+4+5+6+7=25)
30 40 2 (que seria a soma 30+31=61)

A_CR34
A seguinte sequência de números 0 1 1 2 3 5 8 13 21... é conhecida como série de Fibonacci. Nessa sequência, cada número,
depois dos 2 primeiros, é igual à soma dos 2 anteriores. Escreva um algoritmo que mostre os 46 primeiros números dessa
série, todos na mesma linha, separados por um espaço em branco.

A_CR35
Ler um valor (só deve aceitar valores positivos), calcular e escrever seu respectivo fatorial.
Fatorial de n = n *(n-1)*(n-2)*(n-3)*...*1
Ex: Fatorial de 4 = 4*3*2*1 = 24

A_CR36
Ler um número indeterminado de dados, contendo cada um, a idade de um indivíduo. O último dado, que não entrará nos
cálculos, contém o valor de idade negativa. Calcular e imprimir a idade média deste grupo de indivíduos.

A_CR37
Escreva um algoritmo para calcular e escrever o valor de S, sendo S dado pela fórmula:

A_CR38
Escreva um algoritmo para calcular e escrever o valor de S, sendo S dado pela fórmula:
S = 1 + 3/2 + 5/4 + 7/8 + ... + 40/?

A_CR39
Escreva um algoritmo para mostrar na tela a seguinte sequência, um número em cada linha:

Exemplo da saída
1
3/2 na tela vai mostrar 1.5
5/4 na tela vai mostrar 1.25
...
39/?

A_CR40
Escreva um algoritmo para mostrar na tela os 15 primeiros numeros da sequência abaixo, um número em cada linha:

Exemplo da saída
1/2 na tela vai mostrar 0.5
2/4 na tela vai mostrar 0.5
3/8 na tela vai mostrar 0.375
...
15/?

61
A_CR41
Escreva um algoritmo para calcular e escrever o valor de S, sendo S dado pela fórmula:
S= 1/2 + 2/4 + 3/8 + 4/16 + 5/32 + ... + 20/?

A_CR42
Escreva um algoritmo que calcule e escreva a soma dos 30 primeiros termos da série:

A_CR43
Elabore um algoritmo para resolver o valor de S, sendo S dado pela fórmula:
S= 1/1 - 2/4 + 3/9 - 4/16 + 5/25 - 6/36 ... - 10/100

A_CR44
Escreva um algoritmo que lê um valor n inteiro e positivo e que calcula a seguinte soma:
S = 1 + 1/2 + 1/3 + 1/4 + ... + 1/n
O algoritmo deve escrever cada termo gerado e o valor final de S.

Exemplo da saída
1
0.5
0.333333
...

A_CR45
Elabore um algoritmo que calcule e escreva o valor H, sendo que ele é determinado pela seguinte série:
H = 1/1 + 3/2 + 5/3 + 7/4 + .... 99/50.

A_CR46
Escreva um algoritmo para calcular e escrever o n-ésimo termo da série abaixo, onde o valor de N é será informado pelo
usuário. O programa irá encerrar quando for digitado 0 (zero) para N.
5,6,11,12,17,18,23,24, ....

Exemplo de uma entrada Saída para o exemplo de entrada


3 11
5 17
8 24
0

A_CR47
Escreva um algoritmo que calcule e escreva a soma dos dez primeiros termos da série:
2/500 - 5/450 + 2/400 - 5/350 + ....

A_CR48
Ler 2 valores A e B. Se A for igual a B devem ser lidos novos valores para A e B. Se A for menor que B calcular e imprimir
a soma dos números ímpares existentes entre A(inclusive) e B(inclusive).Se A for maior que B calcular e imprimir a média
aritmética dos múltiplos de 3 existentes entre A(inclusive) e B(inclusive).
OBS: Considere que só serão informados valores inteiros positivos.

62
A_CR49
Suponha que exista um prédio de 20 andares onde existam três elevadores, identificados pelos número 1,2 e 3. Para otimizar
o sistema de controle dos elevadores, foi realizado um levantamento no qual cada usuário respondia qual o elevador que
utilizava com mais freqüência. Escreva um algoritmo que leia o número de usuários do prédio, leia as respostas de cada
usuário calcule e imprima qual o elevador mais freqüentado.

A_CR50
Considere uma sequência de números que tenha a propriedade que começa com o quarto deles, e cada número é a soma do
anterior mais duas vezes o anterior ao anterior a ele, menos o anterior dele. Por exemplo, o 8o. deles é (o 7o. deles) mais duas
vezes (o 6o. deles) menos (o 5o. deles). Suponha que os primeiros três números na sequência são: 1,2,3, escreva um
algoritmo que encontre o 15o deles.

A_CR51
Ler um número inteiro N e escrever todos os divisores de N.

A_CR52
Ler um número inteiro N (só aceitar valores positivos-Caso o N não seja positivo deverá ser lido um novo valor para o N) e
escrever se é ou não PRIMO.

Exemplo de uma entrada Saída para o exemplo de entrada


8 8 NAO EH PRIMO

Exemplo de uma entrada Saída para o exemplo de entrada


19 19 EH PRIMO

A_CR53
Escrever os números de 1 a 20 com seus respectivos divisores.

Exemplo da saída
Divisores de 1:
1

Divisores de 2:
1
2

Divisores de 3:
1
3

...

A_CR54
Escreva um algoritmo que imprima todos os números primos existentes entre N1 e N2, onde N1 e N2 são números positivos
fornecidos pelo usuário.

Exemplo de uma entrada Saída para o exemplo de entrada


10 O 2 eh primo
1 O 3 eh primo
O 5 eh primo
O 7 eh primo

63
A_CR55
Calcular e escrever a maior nota entre N notas lidas. O valor de N será informado pelo usuário.

A_CR56
Ler um número indeterminado de pares de valores. Cada par representa a idade de um aluno e a sua respectiva nota. Calcular
e escrever:
- A idade do aluno que obteve a maior nota. (na primeira linha da saida)
- A nota do aluno mais velho. (na segunda linha da saida)
Obs: O algoritmo será encerrado imediatamente após o usuário fornecer uma idade negativa (sem fornecer a respectiva nota).

A_CR57
Ler um número indeterminado de notas. O algoritmo deverá ser encerrado ao ser fornecido um valor negativo para a nota.
Calcular e escrever a menor nota entre as notas lidas.

A_CR58
Calcular e escrever o maior entre N valores lidos do teclado. O valor de N será fornecido pelo usuário.

A_CR59
Ler um conjunto de dados contendo, cada um, uma nota. Determinar e escrever a maior e a menor nota da turma, uma nota
em cada linha. O último dado que não será processado, contém, nota = 99.

A_CR60
Ler o código e a altura de cada aluno de uma turma de 10 alunos. Escrever o código e a altura do aluno mais alto.

A_CR61
Escrever um algoritmo que escreve a soma dos números que são múltiplos de 17 entre 100 e 200, inclusive, se for o caso.

A_CR62
Elabore um algoritmo que obtenha o número inteiro que mais se aproxima da raiz quadrada de um número fornecido pelo
usuáro.

A_CR63
Escrever um algoritmo que calcula e mostra a média aritmética dos números pares compreendidos entre 13 e 73.

A_CR64
No planeta Alpha vive a criatura Blobs, que come precisamente 1/2 de seu suprimento de comida disponível todos os dias.
Escreva um algoritmo que leia a capacidade inicial de suprimento de comida (em Kg), e calcule quantos dias passarão antes
de Blobs coma todo esse suprimento até atingir um quilo ou menos.

Exemplo de uma entrada Saída para o exemplo de entrada


200 8 dias

A_CR65
Chico tem 1,50 metro e cresce 2 centímetros por ano, enquanto Zé tem 1,10 metro e cresce 3 centímetros por ano. Construa
um algoritmo que calcule e imprima quantos anos (somente o valor numerico) serão necessários para que Zé seja maior que
Chico.

64
A_CR66
Ler um conjunto de 10 pares de dados contendo, cada um, a altura e um código para masculino (1) e outro para feminino (2)
de uma turma de alunos. Calcular e escrever, um valor por linha:
-a maior altura
-a menor altura
-a média de altura das mulheres.

Exemplo de uma entrada Saída para o exemplo de entrada


1.78 1.92
1 1.45
1.64 1.57
2
1.62
2
...

A_CR67
Ler um número indeterminado de dados, contendo cada um o peso de um indivíduo. O último dado que não entrará nos
cálculos, contém um valor negativo. Calcular e imprimir:
-A média aritmética das pessoas que possuem mais de 60 Kg.
-O peso do mais pesado entre aqueles que possuem menos de 60 Kg.

Exemplo de uma entrada Saída para o exemplo de entrada


67 74.6
78 47
78.8
47
-10

A_CR68
Faça um algoritmo que leia vários números inteiros e positivos e calcule o produto de todos os números pares digitados. O
fim da leitura será indicado pelo número 0.

Exemplo de uma entrada Saída para o exemplo de entrada


66 5148
25
78
0

A_CR69
Construa um algoritmo para receber uma seqüência de números inteiros qualquer. Quando o número zero for entrado a
repetição deve ser interrompida e deve ser mostrada a média dos números digitados (sem o 0 -zero).

Exemplo de uma entrada Saída para o exemplo de entrada


66 56.3333
25
78
0

65
A_CR70
Um rainha requisitou os serviços de um monge e disse-lhe que pagaria qualquer preço. O monge, necessitando de alimentos,
perguntou a rainha se o pagamento poderia ser feito em grãos de trigo dispostos em um tabuleiro de damas, de forma que o
primeiro quadrado tivesse apenas um grão, e os quadrados subseqüentes, o dobro do quadrado anterior. A rainha considerou
o pagamento barato o pediu que o serviço fosse executado, sem se dar conta de que seria impossível executar o pagamento.
Escreva um algoritmo para calcular o número de grãos que o monge esperava receber.

A_CR71
Faça um algoritmo que leia um número N indefinidas vezes (parar quando for digitado 0 para N). Para cada N lido, deve ser
impresso em ordem decrescente a seqüência variando de 2 em 2 do valor até atingir zero, todos os valores separados por uma
vírgula e espaço.

Exemplo de uma entrada Saída para o exemplo de entrada


5 5, 3, 1
6 6, 4, 2, 0
0

A_CR72
Faça um algoritmo que leia um número N indefinidas vezes (parar quando for digitado 0 para N). Para cada N lido, deve ser
impresso em ordem decrescente a seqüência dos ímpares, desde o numero lido ate 1 (um), um valor por linha.

Exemplo de uma entrada Saída para o exemplo de entrada


5 5
4 3
0 1
3
1

A_CR73
Escreva Algoritmo que apresente todos fatoriais cujo resultado seja inferior a um dado valor que é lido pelo teclado.

Exemplo de uma entrada Saída para o exemplo de entrada


100 4! = 24
3! = 6
2! = 2
1! = 1
0! = 1

A_CR74
Existem números de 4 dígitos (de 1000 a 9999) que obedecem à seguinte característica: se dividirmos o número em dois
números de dois dígitos, um composto pela dezena e pela unidade, e outro pelo milhar e pela centena, somarmos estes dois
novos números gerando um terceiro, o quadrado deste terceiro número é exatamente o número original de quatro dígitos. Por
2
exemplo: 2025-> separando: 20 e 25 -> somando temos 45 -> 45 = 2025. Escreva um programa para calcular todos os
números que obedecem a esta característica.

A_CR75
Ler um número N qualquer (assuma que seja positivo) e apresente o valor obtido da multiplicação sucessiva de N por 3 (ou
seja: N*3, N*3*3, N*3*3*3, ...), enquanto o produto for menor do que 5000.

66
Exemplo de uma entrada Saída para o exemplo de entrada
10 30
90
270
810
2430

A_CR76
Leia um valor com ponto flutuante que é um saldo inicial de uma conta corrente. Em seguida, leia 1 valor que será o número
de casos de teste que virão a seguir. Para cada caso de teste, leia 2 valores (um numérico e um caracter (D ou C)) que indicam
a operação a ser feita na conta (Débito ou Crédito). Apresente então o saldo da conta.

Exemplo de uma entrada Saída para o exemplo de entrada


53.80 57.62
4
8 C
14.2 D
6.81 C
3.21 C

A_CR77
Considerando a configuração dos leds dos numeros abaixo, leia um valor inteiro, sem sinal e escreve a quantidade de leds
necessário para montar o valor.

Exemplo de uma entrada Saída para o exemplo de entrada


5380 23 leds

Obs.: para o exemplo acima seria a soma de 5 + 5 + 7 + 6

A_CR78
Leia uma variável N. N será o número de casos de teste a seguir. Para cada caso de teste, leia um X que será a quantia de
valores inteiros que serão lidos e leia em seguida estes valores. Cada conjunto de valores é uma tomada de preço. Apresente
para cada caso de entrada o segundo menor valor. Se não há 2 valores diferentes apresente -1.

Exemplo de entrada Saída para o exemplo de entrada


3 -1
1 2
12 10
3
3 2 1
6
10 12 12 25 6 6

67
Estruturas de dados

Temos os seguintes tipos de dados básicos: numéricos (inteiros e reais), lógicos e caracteres. Baseando-
se nestes tipos básicos podemos construir tipos compostos. Os tipos compostos dividem-se em dois:
homogêneos (vetores e matrizes) e heterogêneos (registros).

Tipos de dados Homogêneos – VETORES e MATRIZES

Os tipos homogêneos são conjuntos do mesmo tipo básico. A utilização desse tipo de estrutura de dados
recebe diversos nomes, tais como: variáveis indexadas, compostas, arranjos, tabelas em memória, arrays
(do inglês) vetores e matrizes. Para simplificar utilizaremos somente os nomes vetores e matrizes. Os
vetores são uma lista de elementos do mesmo tipo. Quando os vetores possuem mais de uma dimensão se
tornam matrizes.

Todas as variáveis e constantes ocupam um espaço em memória. Este espaço ocupado é um espaço linear,
ou seja, se temos a seguinte declaração :

inteiro a,b

provavelmente (dependendo do compilador da linguagem utilizada) estas variáveis ocuparão espaços


subsequentes em memória. Baseado na necessidade de utilização de tipos como vetores e utilizando esta
linearidade do armazenamento em memória fica fácil para as linguagens de programação implementarem
estes tipos.

Vetores:

Quando possuímos uma ordem e um índice de acesso aos elementos de um conjunto então temos
caracterizado um vetor. Para definirmos um vetor a sintaxe utilizada será a seguinte :
tipo identificador[índice] exemplo: inteiro X[3]

Para se ter idéia de como utilizar vetores em uma determinada situação, considere o seguinte problema:
Calcular a média geral da turma segundo a tabela abaixo:

Aluno Nota 1 Nota 2 Média


1 4.0 6.0 5.0
2 6.0 7.0 6.5
3 9.0 8.0 7,5
4 3.0 9.0 6.0
?
5 4.0 6.0 5.0
6 7.0 7.0 7.0
7 8.0 7.0 7.5

68
Agora basta escrever um programa para efetuar as 7 médias, onde serão utilizadas as médias finais de
cada aluno, sendo que a média do primeiro aluno está na variável MD1, do segundo em MD2, do
terceiro em MD3, assim por diante. Então tem-se:
MD1 = 5
MD2 = 6.5
...
MD7 = 7.5
Com o conhecimento adquirido até o presente momento, seria então elaborado um programa que efetuaria
a leitura de cada nota, a soma das mesmas e uma divisão do valor da soma por 7.

...
real MD1, MD2, MD3, MD4, MD5, MD6, MD7, soma, med
Soma = 0
Ler MD1, MD2, MD3, MD4, MD5, MD6, MD7
soma = MD1+ MD2 + MD3 + MD4 + MD5 + MD6 + MD7
med = soma /7
escrever “Média =” , med
...

Como seria o cálculo utilizando um Vetor MD, com 7 elementos?


Nesse caso, teremos então uma única variável indexada (vetor) contendo todos os valores das 8 notas.
Isso pode ser apresentado da seguinte forma:
MD[ 0 ] = 5
MD[ 1 ] = 6.5
MD[ 2 ] = 7.5
MD[ 3 ] = 6.0
MD[ 4 ] = 5.0
MD[ 5 ] = 7.0
MD[ 6 ] = 7.5

A declaração do vetor é feita da seguinte forma (vetor de valores reais – ponto flutuante)
Algoritmo C++
variaveis double MD[7];
real MD[7]

a) Faça o exercício para calcular a média da turma utilizando o vetor.


b) Como se faz a leitura de um vetor A que tenha 10 elementos (A[10])

Algoritmos Propostos

A_V1
Faça um algoritmo que leia um vetor V[6]. Conte a seguir, quantos valores de V são negativos. Mostre no final, todos os valores
do vetor V, um por linha e na linha seguinte a quantia de número negativos.

Exemplo de uma entrada Saída para o exemplo de entrada


6 V[0]=6
-5 V[1]=-5
0 V[2]=0

69
2 V[3]=2
234 V[4]=234
-3 V[5]=-3
2

A_V2
Faça um algoritmo que leia um vetor A[10]. No final, mostre todas as posições do vetor que armazenam um valor menor ou
igual a 10 e o valor armazenado na posição.

Exemplo de uma entrada Saída para o exemplo de entrada


0 A[0]=0
-5 A[1]=-5
63 A[3]=-8.5
-8.5 ...
...

A_V3
Faça um algoritmo que leia um vetor X[10]. Substitua, a seguir, todos os valores nulos e negativos do vetor X por 1 e escreva
novamente o vetor X.

Exemplo de uma entrada Saída para o exemplo de entrada


0 X[0]=1
-5 X[1]=1
63 X[2]=63
0 X[3]=1
... ...

A_V4
Faça um algoritmo que leia um vetor N[20]. Troque a seguir, o 1o elemento com o último, o 2o elemento com o penúltimo, etc.,
até trocar o 10o com o 11o. Mostre o vetor modificado.

Exemplo de uma entrada Saída para o exemplo de entrada


0 N[0]=230
-5 N[1]=63
... ...
63 N[18]=-5
230 N[19]=0

A_V5
Faça um algoritmo que preencha um vetor N[15], com os valores 1,2,4,8 e assim sucessivamente. Mostre o vetor em seguida,
um valor por linha.

Saída para o exemplo


N[0]=1
N[1]=2
N[2]=4
...

70
A_V6
Faça um algoritmo que preencha um vetor N[15], com os valores de 1 a 15. Mostre o vetor em seguida, um valor por linha.

Saída para o exemplo


N[0]=1
N[1]=2
N[2]=3
...

A_V7
Faça um algoritmo que preencha um vetor Fib[30] com os 30 primeiros termos da série de Fibonacci, onde os 2 primeiros
elementos da série são 0 e 1 e cada próximo termo é a soma dos 2 anteriores a ele.

Saída para o exemplo


Fib[0]=0
Fib[1]=1
Fib[2]=1

A_V8
Faça um algoritmo que preencha um vetor N[20], com os múltiplos de 3, iniciando em 3 e assim sucessivamente. Mostre o
vetor em seguida, um valor por linha.

Saída para o exemplo


N[0]=3
N[1]=6
N[2]=9
...

A_V9

Faça um algoritmo que preencha um vetor N[21], e apresente o vetor preenchido, conforme mostrado abaixo.

Saída para o exemplo


N[0]=0
N[1]=1
N[2]=2
N[3]=0
N[4]=1
N[5]=2
N[6]=0
N[7]=1
N[8]=2
...
N[20]=2

71
A_V10
Faça um algoritmo que preencha um vetor N[10], e apresente o vetor preenchido, conforme mostrado abaixo.

Saída para o exemplo


N[0]=200
N[1]=100
N[2]=50
N[3]=25
N[4]=12.5
...

A_V11
Faça um algoritmo que preencha um vetor N[10], e apresente o vetor preenchido, conforme mostrado abaixo.

Saída para o exemplo


N[0]=100
N[1]=99
N[2]=97
N[3]=94
N[4]=90
N[5]=85
...

A_V12
Faça um algoritmo que lê um conjunto de 30 valores e os coloca em 2 vetores conforme estes valores forem pares ou ímpares.
O tamanho do vetor é de 5 posições. Quando algum vetor estiver cheio, escrevê-lo. Terminada a leitura escrever o conteúdo
restante dos dois vetores. Cada vetor pode ser preenchido tantas vezes quantas for necessário.

Exemplo de uma entrada Saída para o exemplo de entrada


1 2 3 4 5 6 7 8 9 10 ... impar[0]=1
impar[1]=3
...
par[0]=2
...

A_V13
Faça um algoritmo que leia um vetor N[20]. A seguir, encontre o menor elemento do vetor N e a sua posição dentro do vetor,
mostrando esta informação na tela.

Exemplo de uma entrada Saída para o exemplo de entrada


1 2 3 4 -5 6 7 8 9 10 ... O menor valor eh -5 e sua posicao eh 4

A_V14
Escreva um algoritmo que leia um vetor de 1000 posições (0-999) e mostre-o ordenado em ordem crescente.

Exemplo de uma entrada Saída para o exemplo de entrada


-5 6 17 8.72 2 10 ... -123 -82.5 -43 0 0 0 1 1.1 1.23 ...

72
A_V15
Escreva um algoritmo que leia um vetor de 20 posições. Em seguida, troque o primeiro elemento com o último, o segundo com
o penúltimo, o terceiro com o antepenúltimo, e assim sucessivamente. Mostre o novo vetor depois da troca.

Exemplo de uma entrada Saída para o exemplo de entrada


1 2 3 4 5 ...14 18 18
14
...
2
1

A_V16
Escrever um algoritmo que gera os 100 primeiros números primos a partir de 100 e os armazena em um vetor de X[100]
escrevendo, no final, o vetor X.
Saída para o exemplo
101 103 107 ... ...691

A_V17
Escrever um algoritmo que lê um vetor K[15]. A seguir, apresente somente os valores do vetor K que são primos, segundo o
exemplo apresentado abaixo.
Exemplo de uma entrada Saída para o exemplo de entrada
8 K[2]=101
10 K[7]=2
101 ...
26
...

A_V18
Escrever um algoritmo que lê um vetor X[12]. Escreva, a seguir, cada um dos valores distintos que aparecem em X dizendo
quantas vezes cada valor aparece em X, pela ordem crescente dos valores de X.
Exemplo de uma entrada Saída para o exemplo de entrada
8 4 aparece 1 vez(es)
10 8 aparece 1 vez(es)
8 10 aparece 2 vez(es)
26 26 aparece 1 vez(es)
4 ...
...

A_V19
Faça um algoritmo que leia dois vetores de 20 posições de caracteres. A seguir, troque o 1º elemento de a com o 20º de b, o 2º
de a com o 19º de b, assim por diante, até trocar o 20º de a com o 1º de b. Mostre os vetores depois da troca.

Exemplo de uma entrada Saída para o exemplo de entrada


b f c t ... k a a[0]=c
z t u y ... m c a[1]=m
...
a[19]=z
b[0]=a
b[1]=k
...

73
b[19]=b
A_V20
Faça um algoritmo que leia um vetor (A) de 100 posições. Em seguida, compacte o vetor, retirando os valores nulos e negativos,
colocando o resultado em um vetor B de 100 posições (mostre o vetor B, um elemento por linha-somente as posições utilizadas).
Consideração: o vetor A tem pelo menos 1 valor válido.

Exemplo de uma entrada Saída para o exemplo de entrada


1 234 -43 345 -5 0 123 ... B[0]=1
B[1]=234 O último pode ser qualquer
B[2]=345
... valor de 0 a 99
B[??]=33

A_V21
Faça um algoritmo que leia um vetor de 10 posições. Mostre então os 3 menores valores do vetor.

Exemplo de uma entrada Saída para o exemplo de entrada


1 234 -43 345 -512 0 123 ... -43
-512
0

A_V22
Uma locadora de vídeos tem guardada, em um vetor de 500 posições, a quantidade de filmes retirados por seus 500 clientes
durante o ano de 2009. Agora, esta locadora está fazendo uma promoção e, para cada 10 filmes retirados, o cliente tem direito
a uma locação grátis. Faça um algoritmo que crie um vetor G contendo a quantidade de locações gratuitas a que cada cliente
tem direito. Mostre o vetor G no final

Exemplo de uma entrada Saída para o exemplo de entrada


1 G[0]=0
23 G[1]=2
0 G[2]=0
12 G[3]=1
... ...

A_V23
Faça um algoritmo que leia um vetor A[10]. Preencha então um vetor B[10] com o fatorial de cada valor de A respeitando as
posições, caso o referido valor for positivo ou nulo. Deixe os valores negativos intactos. Mostre o vetor B (o resultado cabe em
uma variável tipo inteiro).

Exemplo de uma entrada Saída para o exemplo de entrada


1 B[0]=1
5 B[1]=120
4 B[2]=24
0 B[3]=1
-1 B[4]=-1
... ...

74
A_V24
Faça um algoritmo que leia um vetor A[10]. Preencha então um vetor B[10] com o fatorial de cada valor de A respeitando as
posições, caso o referido valor for positivo ou nulo. Substitua no final os valores negativos por 0 (zero). Mostre o vetor B.

Exemplo de uma entrada Saída para o exemplo de entrada


1 B[0]=1
5 B[1]=120
4 B[2]=24
0 B[3]=1
-1 B[4]=0
... ...

A_V25
Faça um algoritmo que leia um vetor A[10] de inteiros. Preencha então um vetor B[10] com a quantidade de divisores de cada
valor do vetor A, respectivamente. Mostre o vetor B. Simplesmente copie o valor para B se o mesmo for <=0.
Exemplo de uma entrada Saída para o exemplo de entrada
1 B[0]=1
6 B[1]=4
... ...

A_V26
Leia uma variável N. N será o número de casos de teste a seguir. Para cada caso de teste, leia um nome e mostre-o ao contrário

Exemplo de entrada Saída para o exemplo de entrada


3 etset
teste arvalap
palavra ocsid
disco

A_V27
Preencha um vetor com 15 posições (0-14) com os elementos seguindo a seguinte lógica: os primeiros 2 valores são 0 e 1. A
partir daí cada próximo valor calculado é sempre igual a 2 * o último valor calculado + o penúltimo valor calculado. Para
ilustrar. O vetor ficaria assim:

2*1+0 2*2+1 2*5+2 2*12+5 ...


vet[30]= 0 1 2 5 12 29 ... ... 33461 80782 195025
0 1 2 3 4 5 6 13 14 15

Exemplo de entrada Saída para o exemplo de entrada


vet[0]=0
vet[1]=1
...

75
Matrizes
A matriz mais comum é a de duas dimensões (linha e coluna), por se relacionar diretamente com a utilização de tabelas.
Trabalharemos somente com matrizes de 2 dimensões, por serem mais comuns, mas podem ser necessárias, em algum momento,
matrizes de 3 ou mais dimensões.

Uma matriz de 2 dimensões estará sempre fazendo menção a linhas e colunas e será representada por seu nome e tamanho. Dessa
forma, uma matriz Tabela[4,5] indica que tem 4 linhas e 5 colunas:

Matriz Tabela Colunas



0 1 2 3 4
Linhas →
0
1
2
4

A matriz pode ser declarado da seguinte forma (valores reais – ponto flutuante):

Algoritmo C++
variaveis Double M[10][10];

real M[10,10]

76
Exercícios

A_M1
Faça um algoritmo que leia uma matriz M[6,6] e uma matriz N[6,6]. A seguir, calcule o produto de M por N, colocando os resultados
em uma matriz PROD[6,6]. Apresente o de cada uma das posições da matriz prod

Exemplo de uma entrada Saída para o exemplo de entrada


1 5 4 0 -1 PROD[0][0]=2
2 5 4 6 3 PROD[0][1]=10
... PROD[0][2]=12
2 2 3 2 -1 PROD[0][3]=0
2 2 2 2 2 ...
... PROD[5][5]=1

A_M2
Faça um algoritmo que PREENCHA uma matriz M[7][7] de acordo com a saída abaixo, e após mostrar a matriz (linha a linha)
mostre todos os valores, um por linha. Obs.: Deixe o espaço no final de cada linha .

Exemplo de uma entrada Saída para o exemplo de entrada


2 1 1 1 1 1 1
1 2 1 1 1 1 1
1 1 2 1 1 1 1
1 1 1 2 1 1 1
1 1 1 1 2 1 1
1 1 1 1 1 2 1
1 1 1 1 1 1 2
M[0][0]=2
M[0][1]=1
M[0][2]=1

M[6][4]=1
M[6][5]=1
M[6][6]=2

A_M3
Leia uma matriz M[7][7]. A seguir, calcule e mostre a soma dos elementos da área hachurada. Considere a entrada de valores com
ponto flutuante.

Linha 2

A_M4
Leia uma matriz M[7][7]. A seguir, calcule e mostre a soma dos elementos da área hachurada. Considere a entrada de valores com
ponto flutuante.
Coluna 5

77
A_M5
Leia uma matriz M[7][7]. A seguir, calcule e mostre a soma dos elementos da área hachurada. Considere a entrada de valores com
ponto flutuante.

A_M6
Leia uma matriz M[7][7]. A seguir, calcule e mostre a soma dos elementos da área hachurada. Considere a entrada de valores com
ponto flutuante.

A_M7
Leia uma matriz M[7][7]. A seguir, calcule e mostre a soma dos elementos da área hachurada. Considere a entrada de valores com
ponto flutuante.

A_M8
Leia uma matriz M[7][7]. A seguir, calcule e mostre a soma dos elementos da área hachurada. Considere a entrada de valores com
ponto flutuante.

A_M9
Leia uma matriz M[7][7]. A seguir, calcule e mostre a soma dos elementos da área hachurada. Considere a entrada de valores com
ponto flutuante.

A_M10
Leia uma matriz M[7][7]. A seguir, calcule e mostre a soma dos elementos da área hachurada. Considere a entrada de valores com
ponto flutuante.

78
A_M11
Leia uma matriz M[5][5] de valores com ponto flutuaante e crie 2 vetores Sl[5] e Sc[5] que contenham respectivamente as somas
das linhas e das colunas de M.

Saída para o exemplo


Sl[0]=-8.23
...
Sl[4]=12
Sc[0]=4.68
...
Sc[4]=6.08

A_M12
Leia uma matriz M[2][3] de valores reais. Após, divida os 3 elementos de cada linha da matriz pelo maior elemento de sua respectiva
linha. Coloque o resultado em uma matriz S[2][3]. Mostre a matriz S[2][3]

Saída para o exemplo


S[0][0]=-8.23
S[0][1]=-6.23
S[0][2]=12
...
S[1][2]=4

A_M13
Escreva um algoritmo que lê uma matriz M[5][5] de valores reais. Substitua, a seguir, todos os valores negativos da matriz pelo seu
módulo. Exemplo: substitua -2 por 2, -16 por 16, assim por diante. Mostre a matriz M, um elemento por linha.

Saída para o exemplo


M[0][0]=8.23
M[0][1]=6
...

A_M14
Escreva um algoritmo que lê uma matriz M[6][6] de valores reais. A seguir, troque os elementos da primeira coluna com os
elementos da segunda coluna, os da terceira coluna com a quarta coluna e os elementos da quinta coluna com os elementos da
sexta coluna. Mostre a matriz M, um elemento por linha.

Saída para o exemplo


M[0][0]=8.23
M[0][1]=6
M[0][2]=8
...

A_M15
Escreva um algoritmo que lê uma matriz M[6][6] de valores reais. A seguir, troque os elementos da primeira linha com os
elementos da segunda linha, os da terceira linha com a quarta linha e os elementos da quinta linha com os elementos da sexta
linha. Mostre a matriz M modificada, um elemento por linha.
Saída para o exemplo
M[0][0]=8.23
M[0][1]=6
M[0][2]=8
...

79
A_M16
Faça um algoritmo que leia um valor numérico inteiro (considere a entrada de um valor entre 0 e 35 inclusive). Gere a seguinte
matriz e a mostre na tela. Mostre também a posição solicitada (no exemplo seria a posição sete (0 1 2 3 4 5 6 7 8 … )

Exemplo de uma entrada Saída para o exemplo de entrada


7 1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
2

A_M17
Faça um algoritmo que leia um valor numérico inteiro (considere a entrada de um valor entre 0 e 35 inclusive). Gere a seguinte
matriz e a mostre na tela. Mostre também a posição solicitada
Exemplo de uma entrada Saída para o exemplo de entrada
8 1 3 3 3 3 2
3 1 3 3 2 3
3 3 1 2 3 3
3 3 2 1 3 3
3 2 3 3 1 3
2 3 3 3 3 1
3

A_M18
Elaborar um algoritmo que lê uma matriz inteira M[5][5] e um valor inteiro A e multiplica a matriz M pelo valor A e coloca
os valores da matriz multiplicados por A em um vetor de V[25] e escreve no final o vetor V.

Exemplo de uma entrada Saída para o exemplo de entrada


1 V[0]=3
6 V[1]=18
-2 V[2]=-6
... ...
3 V[24]=...

A_M19
Este exercício tem por base o velho jogo de computador “campo minado”. Elaborar um algoritmo que lê uma matriz de
caracteres M[6][6], onde somente haverá o caractere hífen (-) (indicando um espaço) ou * (indicando uma mina) . Apresente
na tela o resultado conforme o exemplo abaixo, onde na saída, cada valor diferente de zero indica a quantidade de minas
adjacentes para cada posição da matriz.

Exemplo de uma entrada Saída para o exemplo de entrada


---*-- 001*10
------ 002331
---**- 001**1
------ 001332
----*- 0001*1
------ 000111

80

Você também pode gostar