• Nenhum resultado encontrado

Exercício R2.1. Escreva as seguintes expressões matemáticas em C++.

Exercício R2.2. Escreva as seguintes expressões C++ em notação matemática. (a) dm = m * (sqrt(1 + v / c) / sqrt(1 – v / c) – 1); (b) volume = PI * r * r * h;

(c) volume = 4 * PI * pow(r, 3) / 3; (d) p = atan2(z, sqrt(x * x + y * y));

Exercício R2.3. O que está errado com esta versão da fórmula de Báscara? x1 = (-b – sqrt(b * b – 4 * a * c)) / 2 * a; x2 = (-b + sqrt(b * b – 4 * a * c)) / 2 * a;

Exercício R2.4. Forneça um exemplo de estouro de inteiro (overflow). Poderia o mesmo exemplo funcionar corretamente se você usasse ponto flutuante? Forneça

s s v t gt G a p m m FV PV INT = + + = + = ⋅ + 0 0 2 2 3 2 1 2 1 2 4 1 10 π ( ) 0 0 2 2 2 ⎛ ⎝⎜ ⎞ ⎠⎟ = + − YRS c a b ab cosγ a

um exemplo de erro de arredondamento em ponto flutuante. Poderia o mes- mo exemplo funcionar corretamente se você usasse inteiros? Quando usa inteiros, você pode naturalmente necessitar mudar para uma unidade menor, tal como centavos em vez de dólares ou mililitros em vez de litros. Exercício R2.5. Seja num inteiro e xum número em ponto flutuante. Explique a diferença

entre

n = x; e

n = static_cast<int>(x + 0.5);

Para quais valores de xeles fornecem o mesmo resultado? Para quais valo- res de xeles fornecem resultados diferentes? O que acontece se xé nega-

tivo?

Exercício R2.6. Encontre pelo menos cinco erros de sintaxe no seguinte programa. #include iostream

int main(); {

cout << "Por favor digite dois números:" cin << x, y;

cout << "A soma de << x << "e" << y << "é: " x + y << "\n";

return; }

Exercício R2.7. Encontre pelo menos três erros de lógica no seguinte programa. #include <iostream> using namespace std; int main() { int total; int x1;

cout << " Por favor digite um número:"; cin >> x1;

total = total + x1;

cout << "Por favor digite outro número:"; int x2;

cin >> x2;

total = total + x1; float average = total / 2;

cout << "A média dos dois números é " << average << "\n"

return 0; }

Exercício R2.8. Explique as diferenças entre 2, 2.0, "2"e "2.0".

Exercício R2.9. Explique o que cada um dos seguintes segmentos de programa calcula: x = 2;

y = x + x; e

s = "2"; t = s + s;

Exercício R2.10. Variáveis numéricas não inicializadas podem ser um problema sério. Você deve sempre inicializar cada variável com zero? Explique as vantagens e desvantagens desta estratégia.

Exercício R2.11. Explique a diferença entre entrada de strings orientada por palavra e entra- da orientada por linha. Como fazer para usar cada uma delas em C++? Quando você deve usar cada uma destas formas?

Exercício R2.12. Como fazer para obter o primeiro caractere de um string? E o último carac- tere? Como você remove o primeiro caractere? E o último caractere? Exercício R2.13. Como fazer para obter o último dígito de um número? E o primeiro dígito?

Isto é, se né 23456, como fazer para encontrar 2e 6? Dica:%, log. Exercício R2.14. Este capítulo contém diversas recomendações referentes a variáveis e cons-

tantes que tornam programas mais fáceis de ler e de manter. Resuma breve- mente estas recomendações.

Exercício R2.15. Suponha que um programa C++ contém os dois comandos de entrada cout << "Por favor digite seu nome: ";

string fname, lname; cin >> fname >> lname; e

cout << "Por favor digite sua idade: "; int age;

cin >> age;

O que será armazenado nas variáveis fname, lnamee agese o usuário fornecer as seguintes entradas?

(a) James Carter 56 (b) Lyndon Johnson 49 (c) Hodding Carter 3rd 44 (d) Richard M. Nixon 62

Exercício R2.16. Quais são os valores das seguinte expressões? Em cada linha, assuma que double x = 2.5; double y = -1.5; int m = 18; int n = 4; string s = "Hello"; string t = "World"; (a) x + n * y – (x + n) * y (b) m / n + m % n (c) 5 * x – n / 5 (d) sqrt(sqrt(n)); (e) static_cast<int>(x + 0.5) (f ) s + t; (g) t + s; (h) 1 – (1 – (1 – (1 – (1 – n)))) (i) s.substr(1, 2) (j) s.length() + t.length()

Exercícios de programação

Exercício P2.1. Escreva um programa que imprima os valores

1 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 10000000000 100000000000

como inteiros e como números em ponto flutuante. Explique os resultados. Exercício P2.2. Escreva um programa que exiba os quadrados, cubos e quartas potenciais

dos números entre 1 e 5.

Exercício P2.3. Escreva um programa que solicita ao usuário dois inteiros e então imprime A soma

A diferença O produto A média

A distância (valor absoluto da diferença) O máximo (o maior dos dois)

O mínimo (o menor dos dois)

Dica: As funções maxe minsão definidas no cabeçalho algorithm. Exercício P2.4. Escreva um programa que solicita ao usuário uma medida em metros e en-

tão a converte para milhas, pés e polegadas.

Exercício P2.5. Escreva um programa que solicita ao usuário uma medida de um raio e en- tão imprime

A área e a circunferência do círculo com este raio. O volume e a área de superfície da esfera com este raio.

Exercício P2.6. Escreva um programa que solicita ao usuário os tamanhos dos lados de um retângulo. Após imprime

A área e o perímetro do retângulo.

O tamanho da diagonal (use o teorema de Pitágoras). Exercício P2.7. Escreva um programa que solicita ao usuário:

Os tamanhos de dois lados de um triângulo A medida do ângulo entre os dois lados (em graus) Após o programa deve exibir:

O tamanho do terceiro lado.

As medidas dos outros dois ângulos. Dica: Use a lei dos cossenos.

Exercício P2.8. Escreva um programa que solicita ao usuário O tamanho de um lado de um triângulo.

Após o programa deve exibir:

Os tamanhos dos dois outros lados. A medida do terceiro ângulo. Dica: Use a lei dos senos.

Exercício P2.9. Dando troco. Implemente um programa que oriente uma caixa sobre como dar troco. O programa possui duas entradas: a quantia devida e a quantia re- cebida do cliente. Calcular a diferença e determinar o troco em notas e moe- das de 50, 25, 10, 5 e 1 centavo que o cliente deve receber.

Primeiro transforme tudo em um valor inteiro, denominado de centavos. Então calcule a quantidade de notas. Subtraia do saldo. Calcule o número de moedas de 50 centavos necessárias. Repita para as demais moedas. Exi- ba o restante.

Exercício P2.10. Escreva um programa que solicita ao usuário O número de litros de gasolina no tanque.

O consumo de combustível em quilômetros por litro. O preço do litro de gasolina.

E então imprime quantos quilômetros o carro pode andar com a ga- solina que possui no tanque e o custo por 100 quilômetros rodados. Exercício P2.11. Nomes de arquivos e extensões. Escreva um programa que solicita ao usuário a letra que indica o dispositivo (C), o caminho (\Windows\System), o no- me do arquivo (Readme) e a extensão (TXT). Após imprime o nome comple- to do arquivo C:\Windows\System\Readme.TXT(se você usa UNIX ou um Macintosh, use / ou : para separar diretórios).

Exercício P2.12. Escreva um programa que leia um número maior ou igual a 1.000 forneci- do pelo usuário e imprima o número usando separadores de milhares. Aqui está um exemplo de diálogo: a entrada do usuário está em cinza:

Por favor digite m inteiro >= 1000: 23456

23.456

Exercício P2.13. Escreva um programa que leia um número entre 1.000 e 999.999 fornecido pelo usuário, sendo que o usuário digita um ponto separando os milhares. Após imprima o número sem o ponto. Aqui está um exemplo de diálogo: a entrada do usuário está em cinza:

Por favor digite um inteiro entre 1.000 e 999.999: 23.456

23456

Dica: Leia a entrada como um string. Meça o tamanho do string. Suponha que ele contém n caracteres. Então extraia substrings consistindo dos pri- meiros n – 4 caracteres e dos últimos três caracteres.

Exercício P2.14. Imprimindo uma grade. Escreva um programa que imprima a seguinte gra- de para jogar tic-tac-toe (jogo da velha).

+--+--+--+ | | | | +--+--+--+ | | | | +--+--+--+ | | | | +--+--+--+

Naturalmente, você pode simplesmente escrever sete comandos como cout << "+--+--+--+";

Mas você pode fazer isto de uma maneira mais esperta. Defina variáveis string que armazenam dois tipos de padrão: um padrão em forma de um pente e o padrão da linha de fechamento. Imprima três vezes o padrão de pente e uma vez o padrão de fechamento.

Exercício P2.15. Escreva um programa que leia um inteiro e o particione em uma seqüência de dígitos individuais. Por exemplo, a entrada 16384 é exibida como

1 6 3 8 4

Você pode assumir que a entrada não possui mais do que 5 dígitos e não é negativa.

Exercício P2.16. O programa a seguir imprime os valores de seno e cosseno para 0 graus, 30 graus, 45 graus, 60 graus e 90 graus. Rescreva o programa para torná-lo mais claro através da colocação em evidência do código comum.

#include <iostream>

using namespace std;

const double PI = 3.141592653589793;

int main() {

cout << "0 graus: " << sin(0) << " " << cos(0) << "\n");

cout << "30 graus: " << sin(30 * PI / 180) << " " << cos(30 * PI / 180) << "\n";

cout << "45 graus: " << sin(45 * PI / 180) << " " << cos(45 * PI / 180) << "\n";

cout << "60 graus: " << sin(60 * PI / 180) << " " << cos(60 * PI / 180) << "\n";

cout << "90 graus: " << sin(90 * PI / 180) << " " << cos(90 * PI / 180) << "\n";

return 0; }

Exercício P2.17. Rescreva o programa do exercício anterior de modo que as três colunas da tabela fiquem alinhadas. Use saída formatada.

Exercício P2.18 (Difícil). Você ainda não sabe como programar decisões, mas aqui está uma forma de falsificá-las usando substr. Escreva um programa que solicite ao usuário como entrada

o número de litros de gasolina existentes no tanque de combustível; o consumo em quilômetros por litro;

a distância a ser percorrida. Após, imprime

Você vai conseguir

ou

Você não vai conseguir

O truque aqui é subtrair a distância desejada do número de quilômetros que o usuário pode percorrer. Suponha que tal número seja x. Suponha a seguir que temos uma forma de atribuir um valor 1 a n se x ≥ 0e 0se x < 0. Então podemos resolver nosso problema:

string answer = " não "; /* note os espaços antes e após não */

cout << "Você" + answer.substr(0, 5 – 4 * n) + "vai con- seguir";

É mais divertido descobrir isto por você mesmo, mas aqui estão algumas di- cas. Primeiro observe que x + |x|é 2 · x se x ≥ 0, 0 se x < 0. Se vo-

cê não quer se preocupar com a possibilidade que xseja zero, então você pode simplesmente examinar

Dividir por xnão funciona, mas você pode dividir com segurança por |x| + 1. Isto fornece a parte fracionária e você pode usar as funções floore

ceil para lidar com isto.

Exercício P2.19. Escreva um programa que leia dois horários em formato militar (0900, 1730) e imprima o número de horas e minutos entre os dois horários. Aqui está um exemplo de execução. A entrada do usuário está em cinza.

Por favor digite o primeiro horário: 0900

Por favor digite o segundo horário: 1730

8 horas 30 minutos

Você ganha crédito extra se puder lidar com o caso em que o primeiro horá- rio é posterior ao segundo horário:

Por favor digite o primeiro horário: 1730

Por favor digite o segundo horário: 0900

15 horas 30 minutos

Exercício P2.20. Execute o seguinte programa e explique a saída obtida. #include <iostream>

using namespace std;

int main() {

int total;

cout << "Por favor digite um número: "; double x1;

cin >> x1;

cout << "total = " << total << "\n"; total = total + x1;

cout << "total = " << total << "\n"; cout << "Por favor digite um número: "; double x2;

cin >> x2;

total = total + x2;

cout << "total = " << total << "\n"; total = total / 2;

cout << "total = " << total << "\n"; cout << "A média é " << total << "\n"; return 0;

}

Observe as mensagens de monitoramento que são inseridas para mostrar o conteúdo atual da variável total. Após corrija o programa, execute-o com as mensagens de monitoramento para verificar se ele funciona corretamen- te e após remova as mensagens.

x + x x x > 0 x < 0 = ⎧⎨⎪ ⎩⎪ 2 0 se se

Exercício P2.21. Escrever letras grandes. Uma letra grande H pode ser produzida da seguin- te forma: * * * * ***** * * * *

Ela pode ser declarada como uma constante string como a seguinte: const string LETRA_H =

"* *\n* *\n*****\n* *\n* *\n";

Faça o mesmo para as letras E, Le O. Após escreva a mensagem H E L L O em letras grandes.

Exercício P2.22. Escreva um programa que transforme números 1, 2, 3, . . . , 12 em seus correspondentes nomes de meses Janeiro, Fevereiro, Março, . . . ,

Dezembro. Dica: Faça um string bem longo "Janeiro Fevereiro Março...", no qual você adiciona espaços de modo que todos os nomes de meses possuam o mesmo tamanho. Após, use substr para extrair o mês que você deseja.

3