Escolar Documentos
Profissional Documentos
Cultura Documentos
2 o Ano - 2 o Semestre
2022-2023
Capı́tulos do programa:
2. Hello, World!
3. Objetos, tipos e valores.
4. Computação.
Conteúdo dos slides adaptado do livro: Programming principles and practice
using C++, Bjarne Stroustrup, 2a edição, capı́tulo 4.
4.1. Computação.
4.3. Expressões.
4.5. Funções.
4.6. Vetores.
4.9. Exercı́cios.
▶ Graficamente:
▶ A expressão mais simples consiste num valor literal, como 10, ’a’ , 3.14 ,
ou ”Norah”.
▶ Ou seja, length é o nome de um objeto do tipo int que contém o valor 99.
▶ Estas constantes são úteis para que o código seja mais fácil de ler, uma
vez que os valores de determinadas constantes no meio do código podem
não ser reconhecı́veis à primeira vista, ao contrário do seu nome.
Expressões constantes
▶ Para lidar com casos em que o valor de uma constante deverá ser
inicializada com um valor que não é conhecido aquando da compilação,
mas que nunca é alterado após a sua inicialização, em C++ existe uma
outra forma de constante (const):
Expressões constantes
Operadores
Operadores
Conversões
▶ Exemplos:
▶ Uma vez que o resultado foi calculado, o compilador pode ter que
convertê-lo (novamente) para usá-lo como um inicializador ou o braço
direito de uma atribuição. Exemplos:
▶ Este código não representa uma conversão exata da temperatura uma vez
que 9/5 é igual a 1 em vez de 1.8.
Seleção
▶ Nos programas, como na vida, muitas vezes temos que escolher entre
alternativas.
Comando if
#include<iostream>
using namespace std;
int main()
{
int a = 0;
int b = 0;
cout << "Insira dois inteiros\n";
cin >> a >> b;
if (a<b) // condicao
// primeira alternativa (condicao verdadeira):
cout << "max(" << a << "," << b <<"): " << b <<"\n";
else
// segunda alternativa (condicao falsa):
cout << "max(" << a << "," << b <<"): " << a << "\n";
}
▶ Em C++:
▶ O programa anterior testa primeiro para unit == ’i’, depois para unit ==
’c’ e se não for um destes casos a saı́da é uma mensagem que informa
deste facto.
▶ Pode parecer que foi usado um comando else-if, mas este não existe em
C++.
▶ Em vez disso, foram combinados dois comandos if, cuja forma geral é:
Comando switch
▶ Por este tipo de seleção ser tão comum, existe em C++ um comando
especial para o efeito: o comando switch.
▶ Não é obrigatório incluir uma clausula default, mas é boa ideia fazê-lo, a
não ser que tenhamos a certeza de que todas as alternativas foram
listadas.
1. O valor que usamos no switch deve ser do tipo int, char ou enum
(capı́tulo 9). Não pode ser usada uma string.
2. Os valores nas clausulas case devem ser expressões constantes. Não
podem ser usadas variáveis.
3. Não pode ser usado o mesmo valor para duas clausulas case.
4. Podem ser usadas várias clausulas case para o mesmo caso
(conjunto de instruções).
5. Cada case deve ser terminado com um break. Infelizmente,
provavelmente o compilador não o avisa se se esquecer.
#include<iostream>
using namespace std;
int main()
{
cout << "Gosta de peixe?\n";
string s;
cin >> s;
switch (s) { // erro: o valor tem de ser do tipo int, char, ou enum
case "nao":
// . . .
break;
case "sim":
// . . .
break;
}
}
▶ Para uma seleção com base numa string, deve ser usado um comando if
ou um mapa (capı́tulo 21), uma vez que o comando switch gera um
código otimizado para comparação com um conjunto de constantes.
▶ No entanto, isto significa que os valores das clausulas case devem ser
constantes e distintos, como no exemplo do slide seguinte.
#include<iostream>
#include<cmath> // pow(base,expoente)
using namespace std;
int main()
{
int i = 0;
while (i<100) {
cout << i << ’\t’ << pow(i,2) << ’\n’;
++i; // incrementar i
}
}
▶ Use um ciclo para escrever uma tabela de caracteres com os seus valores
inteiros correspondentes de a a z.
Blocos
Blocos
▶ Por vezes, um bloco vazio { } é útil para expressar que nada deve ser
feito. Exemplo:
#include<iostream>
#include<cmath> // pow(base,expoente)
using namespace std;
int main()
{
for (int i = 0; i<100; ++i)
cout << i << ’\t’ << pow(i,2) << ’\n’;
}
Programação Aplicada: C++ Atlântica, Instituto Universitário
4.4 Comandos (statements).
Comandos for
▶ O comando for no código anterior significa: executar o corpo com i
começando em 0 incrementando i após cada execução do corpo até que i
seja igual a 100.
▶ Um comando for é sempre equivalente a algum comando while, e neste
caso, os dois conjuntos abaixo são equivalentes.
for (int i = 0; i<100; ++i)
cout << i << ’\t’ << pow(i,2) << ’\n’;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
for (int i = 0; i<100; ++i) {
cout << i << ’\t’ << pow(i,2) << ’\n’;
++i; // deve ser um erro!
}
}
int main(x) {
cout << quadrado(2) << ’\n’; // escreve 4
cout << quadrado(10) << ’\n’; // escreve 100
}
▶ Não temos de usar o resultado da chamada de função, mas temos que dar
à função exatamente os argumentos que ela requer. Considere:
{
return x*x; // devolve o quadrado de x
}
Porquê funções?
Porquê funções?
▶ O tipo de elemento vem depois da palavra vector entre os sı́mbolos < >,
é neste caso é <int>.
▶ Outro exemplo:
vector<double> vi(1000,-1.2)
Aumentar um vector
▶ push back() é uma função membro de vector e deve ser chamada esta
notação com ponto:
▶ O tamanho do vector pode ser obtido por uma chamada de outra funções
membro de vector: size().
▶ No exemplo do slide anterior são lidos vários números do tipo double que
representam temperaturas.
▶ temp é uma variável temporária do tipo double que é usada para leitura
de cada valor: cin >> temp.
▶ A novidade aqui é que cin >> temp pode ser usado como condição num
comando for.
▶ Neste caso, cin >> temp é verdadeiro se um valor foi lido corretamente e
falso caso contrário, de modo que o comando lê todos os valores do tipo
double que fornecemos e para quando é fornecido outro tipo de dado.
// temperatura media
double sum = 0;
for (int i=0; i<temps.size(); i++) sum += temps[i];
cout << "temperatura media: " << sum/temps.size() << ’\n’;
// mediana
sort(temps.begin(),temps.end()); // ordenar temperaturas
cout << "mediana: " << temps[temps.size()/2] << ’\n’;
}
// temperatura media
double sum = 0;
for (double x : temps) sum += x;
cout << "temperatura media: " << sum/temps.size() << ’\n’;
// mediana
sort(temps.begin(),temps.end()); // ordenar temperaturas
cout << "mediana: " << temps[temps.size()/2] << ’\n’;
}
▶ O resultado será:
▶ =, +, ==, -, /, etc.
▶ =, +, ==, -, /, etc.
11. Indique alguns problemas comuns que ocorrem com os comandos switch.
11. Indique alguns problemas comuns que ocorrem com os comandos switch.
11. Indique alguns problemas comuns que ocorrem com os comandos switch.
11. Indique alguns problemas comuns que ocorrem com os comandos switch.
13. Em que situações deve ser usado um ciclo for e em que situações deve ser
usado um ciclo while?
13. Em que situações deve ser usado um ciclo for e em que situações deve ser
usado um ciclo while?
13. Em que situações deve ser usado um ciclo for e em que situações deve ser
usado um ciclo while?
▶ Ciclo for: nº de iterações definido à partida.
Ciclo while: nº de iterações definido por uma determinada condição.
13. Em que situações deve ser usado um ciclo for e em que situações deve ser
usado um ciclo while?
▶ Ciclo for: nº de iterações definido à partida.
Ciclo while: nº de iterações definido por uma determinada condição.
▶ int{’a’}
Programação Aplicada: C++ Atlântica, Instituto Universitário
4.8 Questões de revisão.
15. Na definição de uma função descreva o que significa a linha:
char foo (int x)
16. Em que situações se deve definir uma função em separado como parte de
um programa?
17. Indique o que se pode fazer com um int que não se pode fazer com uma
string?
16. Em que situações se deve definir uma função em separado como parte de
um programa?
17. Indique o que se pode fazer com um int que não se pode fazer com uma
string?
16. Em que situações se deve definir uma função em separado como parte de
um programa?
17. Indique o que se pode fazer com um int que não se pode fazer com uma
string?
16. Em que situações se deve definir uma função em separado como parte de
um programa?
17. Indique o que se pode fazer com um int que não se pode fazer com uma
string?
20. Indique como se pode escrever um loop que imprime todos os elementos
de um vetor?
20. Indique como se pode escrever um loop que imprime todos os elementos
de um vetor?
▶ 2.
20. Indique como se pode escrever um loop que imprime todos os elementos
de um vetor?
▶ 2.
20. Indique como se pode escrever um loop que imprime todos os elementos
de um vetor?
2. Altere o programa para escrever “o menor valor é: ” seguido do menor dos
números e “o maior valor é: ” seguido pelo maior valor.
5. Altere o programa para que escreva “os números são quase iguais” depois
de escrever qual deles é o maior e menor se a diferença entre os dois
números for menor do que 1.0 / 100.
7. Adicione uma unidade a cada double lido; isto é, insira valores como
10cm, 2.5in, 5ft ou 3.33m. Aceite quatro unidades: cm, m, in, ft.
Considere os fatores de conversão 1m == 100cm, 1in == 2.54cm, 1ft
== 12in. Leia o indicador da unidade numa string. Pode considerar 12
m (com um espaço entre o número e a unidade) equivalente a 12m (sem
espaço).
11. Crie um programa para encontrar todos os números primos entre 1 e 100.
Uma maneira de fazer isso é escrever uma função que irá verificar se um
número é primo (isto é, ver se o número pode ser dividido por um número
primo menor que o próprio) usando um vetor de números primos
ordenados (de modo que se o vector é chamado de primos, primos [0] ==
2, primos [1] == 3, primos [2] == 5, etc.). De seguida, escreva um ciclo
que vai de 1 a 100, verifica cada número para ver se é primo e armazena
cada número primo encontrado num vetor. Escreva outro ciclo que lista os
primos encontrados. O resultado pode ser verificado comparando o vetor
de números primos com primos. Considere que 2 é o primeiro primo.
16. Na secção “prática” foi escrito um programa que, dada uma série de
números, encontra o máximo e o mı́nimo desta série. O número que
aparece mais vezes numa sequência é chamado modo. Crie um programa
que encontre o modo de um conjunto de inteiros positivos.