Prof. Paulo Rettore
Universidade Federal de Lavras
GAC124 - Introdução aos Algoritmos
Dados fornecidos ao programa
Ex: informar duas notas
Cálculos e atribuições
Ex: calcular a média
Resultados para o usuário
Ex: mostrar a média
O lado direito é calculado primeiro; o resultado é então armazenado na variável que está à esquerda.
10 → 25 → 30
A expressão pontos = pontos + 5 usa o valor atual (25) para produzir e armazenar o novo valor (30).
| Operação | Operador | Exemplo | Resultado |
|---|---|---|---|
| Soma | + |
8 + 2 |
10 |
| Subtração | - |
8 - 2 |
6 |
| Multiplicação | * |
8 * 2 |
16 |
| Divisão | / |
8 / 2 |
4 |
| Resto | % |
8 % 3 |
2 |
O operador de resto % trabalha exclusivamente com valores inteiros.
A operação é resolvida antes da atribuição. Se os dois operandos forem inteiros, o resultado da divisão também será inteiro.
Para manter a parte decimal, use pelo menos um operando de ponto flutuante (como 7.0 em vez de 7).
Quando houver dúvida sobre a ordem de execução, use parênteses.
1. Substitua: X = 18 + 7 - 6 / 2
2. Divisão primeiro: X = 18 + 7 - 3
3. Da esquerda para a direita: X = 25 - 3 = 22
X = 22
Multiplicação, divisão e resto vêm antes de soma e subtração.
+=x += 3 é uma forma curta de escrever x = x + 3.
x = 7
x = 7 + 3 = 10
Resultado final: x = 10
Primeiro: z = 4 + 1 = 5
Depois: x = 5 e y = 2
Primeiro: x = 5 e y = 2
Depois: z = 5 + 2 = 7
Leia com atenção: x++ e ++x não produzem o mesmo valor dentro da expressão.
Também existem -=, *=, /=, %= e --.
A forma curta deve ser usada somente quando continuar clara para quem lê.
sqrt() : Raiz quadradapow() : Potenciaçãoabs() : Valor absoluto (módulo)ceil() : Arredondamento para cimafloor() : Arredondamento para baixo<< encadeia as informaçõesendl ou '\n' geram uma quebra de linhaO operador >> envia o valor digitado pelo usuário para a variável.
⚠️ Sempre declare a variável antes de realizar a leitura!
cout antes da leitura ajuda o usuário a entender o que deve informar.Saída gerada: Preço: R$ 19.50
Use <iomanip>, fixed e setprecision quando a quantidade de casas decimais importar.
Um arquivo permite guardar dados para que possam ser usados novamente depois que o programa termina.
Os dados são tratados como caracteres, linhas e palavras. É fácil abrir e conferir o conteúdo.
Os bytes são gravados diretamente, sem tradução para texto. É útil para dados estruturados e arquivos maiores.
Em C++, a biblioteca <fstream> oferece os fluxos usados para trabalhar com arquivos.
| Console | Arquivo | Função |
|---|---|---|
cin | ifstream | Entrada / leitura |
cout | ofstream | Saída / escrita |
| — | fstream | Entrada e saída |
A ideia é familiar: assim como cin >> valor lê do teclado, arquivo >> valor lê do arquivo.
ofstreamO arquivo é criado.
O conteúdo é substituído, salvo se outro modo for usado.
ifstreamSe o arquivo não existir, a abertura falha. Sempre confira o estado do stream antes de confiar nos dados.
fstream: ler e escreverios::in lê; ios::out escreve; ios::app acrescenta ao final.
Abra o arquivo com o fluxo que descreve a operação principal do programa.
Use if (!arquivo) ou is_open() antes de ler ou escrever.
ios::app acrescenta; abrir somente com saída pode substituir o conteúdo.
Teste o estado do stream e confirme se a gravação terminou corretamente.
Não use while (!arquivo.eof()) para controlar a leitura. Prefira testar a própria operação, por exemplo: while (arquivo >> valor).
switch-caseOs casos de um switch não criam automaticamente um novo escopo. Use chaves em cada caso quando declarar um arquivo.
As chaves delimitam o escopo de cada declaração. O break evita cair no próximo caso, e a abertura deve ser verificada em cada operação.
O ponto e vírgula separa os campos de cada registro.
Primeiro leia a linha inteira; depois separe os campos.
CSV é um formato de texto. O separador pode ser vírgula, ponto e vírgula ou outro caractere combinado pelo programa.
getline() e separadoresAlém de ler uma linha completa, getline() pode parar em um delimitador específico.
Use getline() quando o texto tiver espaços ou quando precisar controlar o separador.
Depois de cin >>, descarte o Enter pendente antes de chamar getline(cin, texto).
A repetição deve testar a leitura. Assim, cada valor válido é processado uma vez e o programa consegue distinguir fim de arquivo de uma falha de leitura.
1. Ler os dados
↓
2. Calcular o resultado
↓
3. Exibir o resultado
Não há desvios nem repetições: cada instrução é executada uma vez, de cima para baixo.
Uma sequência incorreta pode gerar um resultado incorreto mesmo quando cada linha está sintaticamente correta.
No exemplo da média:
cin recebe as duas notas informadas pelo usuário.
A expressão calcula a média e armazena na variável.
cout apresenta o resultado formatado na tela.
Essa decomposição ajuda a planejar a solução antes de programar.
O valor original de a é perdido na primeira atribuição.
A variável auxiliar salva o valor antes de ser sobrescrito.
media, nota1, precoFinal.| Erro | Correção |
|---|---|
Usar vírgula em decimal: 3,14 |
Usar ponto: 3.14 |
| Ler antes de declarar a variável | Declarar a variável primeiro |
Trocar cin >> por cin << |
Usar >> na entrada |
Colocar variável entre aspas no cout |
Deixar a variável fora das aspas |
Esperar 3.5 da operação 7 / 2 |
Usar 7.0 / 2 |
Antes de prosseguir, anote o valor final de a, x e y.
Saída gerada: 8 3 3.5
a passa de 7 para 8 por causa de a += 1.a / b usa dois inteiros e produz 3 (mesmo sendo armazenado em um double).a / 2.0 inclui um valor decimal e produz 3.5.= armazena o resultado da direita na variável da esquerda.cin recebe dados e cout apresenta resultados.Leia preço e quantidade e mostre o total com duas casas decimais.
Gabarito: inclua <iomanip> para usar fixed e setprecision(2).
Use estas fontes para consultas pontuais depois da aula:
Os slides completos, o Campus Virtual e o DREDD continuam sendo as fontes principais da disciplina.
Estruturas Condicionais
Como fazer o programa escolher caminhos diferentes com if-else e switch-case.