// Este programa lê dois números inteiros do teclado, multiplica-os, e escreve o resultado no ecrã.
#include <iostream>
using namespace std;int main ()
{
cout << "Introduza dois números inteiros: ";
int primeiro_numero;
int segundo_numero;
cin >> primeiro_numero >> segundo_numero;int resultado = primeiro_numero * segundo_numero;
cout << "O resultado da multiplicação dos dois números é "
<< resultado << endl;
}
2.a) Escreva um programa que peça ao utilizador para inserir dois números inteiros e os some. Depois de terminar o programa, o seu ecrã deve ter o seguinte aspecto:
Insira dois números: 12 234R:
A soma dos dois números inseridos é: 246
// Este programa lê dois números inteiros do teclado, soma-os, e escreve o resultado no ecrã.2.b) Altere o seu programa de modo a que possa inserir números decimais (com vírgula).
#include <iostream>
using namespace std;int main()
{
cout << "Introduza dois números: ";
int primeiro_numero;
int segundo_numero;
cin >> primeiro_numero >> segundo_numero;int resultado = primeiro_numero + segundo_numero;
cout << "A soma dos dois números é " << resultado << endl;
}
R:
Basta substituir int por double
(ou float ou long double):
// Este programa lê dois números decimais do teclado, soma-os, e escreve o resultado no ecrã.2.c) Altere o seu programa para fazer a leitura de cinco números e somá-los.
#include <iostream>
using namespace std;int main()
{
cout << "Introduza dois números: ";
double primeiro_numero;
double segundo_numero;
cin >> primeiro_numero >> segundo_numero;double resultado = primeiro_numero + segundo_numero;
cout << "A soma dos dois números é " << resultado << endl;
}
R:
Solução ingénua:
// Este programa lê cinco números decimais do teclado, soma-os, e escreve o resultado no ecrã.2.d) Se usou mais do que duas variáveis para fazer a alínea anterior, reescreva o seu programa usando apenas duas variáveis. Uma delas deve guardar o valor lido, enquanto a outra deve guardar o valor acumulado da soma dos números inseridos até ao momento. Faça o traçado deste programa (usando o depurador) visualizando a evolução de ambas as variáveis.
#include <iostream>
using namespace std;int main()
{
cout << "Introduza cinco números: ";
double n1, n2, n3, n4, n5;
cin >> n1 >> n2 >> n3 >> n4 >> n5;double resultado = n1 + n2 + n3 + n4 + n5;
cout << "A soma dos cinco números é " << resultado << endl;
}
Repare que as variáveis de tipos básicos contêm lixo se não foram inicializadas na sua definição e antes da primeira atribuição de um valor.
R:
Solução melhorada:
// Este programa lê cinco números decimais do teclado, soma-os, e escreve o resultado no ecrã.3.a) Escreva um programa que, dado um caractere, escreva no ecrã o seu código. Exemplo:
#include <iostream>
using namespace std;int main()
{
cout << "Introduza cinco números: ";
double n;
double resultado = 0;
cin >> n;
resultado += n;
cin >> n;
resultado += n;
cin >> n;
resultado += n;
cin >> n;
resultado += n;
cin >> n;
resultado += n;cout << "A soma dos cinco números é " << resultado << endl;
}
#include <iostream>Note-se que int(c) devolve o código do caractere c como um inteiro. Note-se ainda que cin.get(c) lê um caractere do teclado coloca o seu código em c. A solução com cin >> c descarta todos os espaços, tabuladores e fins-de-linha que encontrar antes do caracter, e por isso o utilizador não conseguirá saber o código do caractere espaço ' '.
using namespace std;int main()
{
cout << "Por favor introduza um caractere: ";
char c;
cin.get(c);
cout << "O código do caractere '" << c << "' é: " << int(c) << endl;
}
3.b) Escreva um programa que, dado um caracter, escreva no ecrã o seu número de ordem no alfabeto (assuma que se utiliza o código ASCII, como em Linux). Exemplo:
#include <iostream>Nota: que acontece se o caractere introduzido for uma letra maiúscula? E se não for uma letra de todo? Experimente...
using namespace std;int main()
{
cout << "Por favor introduza um caractere: ";
char c;
cin.get(c);
cout << "A ordem do caractere '" << c << "' é: "
<< int(c) - int('a') << endl;
}
3.c) Escreva um programa que, dado um caracter, escreva no ecrã o caractere seguinte no alfabeto (assuma de novo o código ASCII).
R:
#include <iostream>Nota: que acontece se o caractere introduzido for 'z' ou 'Z'? E se não for uma letra de todo? Experimente... Tente fazer surgir a letra 'a'.
using namespace std;int main()
{
cout << "Por favor introduza um caractere: ";
char c;
cin.get(c);
cout << char(int(c) + 1) << endl;
}
4.a) Use o seu programa de soma (a versão feita para inteiros, na alínea 2.a)) para tentar somar os números 2147483647 e 2. Faça um traçado do programa e tente perceber porque não funciona.
R:
Não funciona porque 2147483647 é
o maior dos int numa máquina Linux de arquitectura Intel.
4.b) Experimente "corrigir" o programa mencionado na alínea anterior usando variáveis do tipo float. Funcionou? Porquê?
Nota: para visualizar os float com presisão adequada, faça cout << setprecision(20); antes de os escrever (e faça #include <iomanip> no início do programa).
R:
// Este programa lê dois números decimais do teclado, soma-os, e escreve o resultado no ecrã.Não funciona como espectável porque os float não têm precisão suficiente para guardar o inteiro 2147483647.
#include <iostream>
#include <iomanip>using namespace std;
int main()
{
cout << "Introduza dois números: ";
float primeiro_numero;
float segundo_numero;
cin >> primeiro_numero >> segundo_numero;float resultado = primeiro_numero + segundo_numero;
cout << setprecision(20);
cout << "A soma dos dois números é " << resultado << endl;
}
5. Escreva o seguinte programa:
#include <iostream>Tente compilar e executar este programa. Funcionou? Então corrija o programa de modo a que o valor de x seja de facto alterado e passe a conter o valor introduzido.
using namespace std;int main ()
{
cout << "Insira o valor de x: ";const int x = 10;
cin >> x;cout << "O valor actual de x é: " << x << endl;
}
R:
A constante x tem de passar a variável.
Além disso é escusado inicializá-la:
#include <iostream>6. Escreva o seguinte código:
using namespace std;int main()
{
cout << "Insira o valor de x: ";
int x;
cin >> x;cout << "O valor actual de x é: " << x << endl;
}
#include <iostream>Compile, execute e faça o traçado (com o depurador) deste programa examinando os valores que tomam as variáveis. Acrescente novas linhas ao fim do programa, semelhantes às duas últimas linhas, de modo a testar o efeito de cada um dos operadores listados no resumo acima.
using namespace std;int main ()
{
cout << "Insira os valores de x e y (inteiros): ";
int x, y;
cin >> x >> y;cout << "Insira os valores de f e g (decimais): ";
double f, g;
cin >> f >> g;cout << "A soma de x e y é: " << x + y << endl;
cout << "A soma de f e g é: " << f + g << endl;
}
Repare que ao mostrar o valor de uma expressão booleana (e.g. cout << (x > y) << endl;) o que aparece no ecrã é 0 caso a expressão seja falsa e 1 caso contrário. A norma do C++ inclui o manipulador boolalpha para mostrar true e false em vez de 1 e 0. O manipulador boolalpha pode utilizar-se da seguinte forma:
cout << boolalpha << (x > y) << endl;Infelizmente a versão das bibliotecas de C++ que estamos a utilizar ainda não suporta este tipo de operação.
Atenção: As precedências dos operadores são importantes. Tente fazer:
cout << x > y << endl;e depois
cout << (x > y) << endl;e procure explicar porque uma destas instruções funciona e a outra não.
R:
A primeira versão é interpretada
pelo compilador como
(cout << x) > (y << endl);pois o operador << tem maior precedência que o operador >.