• Nenhum resultado encontrado

Comentário /* texto do comentário */

Fato Histórico 2

Sintaxe 2.3: Comentário /* texto do comentário */

// texto do comentário Exemplo:

/* valor total das moedas */ // valor total das moedas Finalidade:

Como foi divulgado, a Intel tinha descoberto independentemente este defeito em seus testes e havia iniciado a produção de chips que o corrigiam. O defeito foi causado por um erro em uma ta- bela que era usada para acelerar o algoritmo de multiplicação em ponto flutuante do processador. A Intel declarou que o problema era extremamente raro. Eles argumentavam que, sob uso normal, um consumidor típico somente iria perceber o problema uma vez a cada 27.000 anos. Lamentavelmente para a Intel, o Dr. Nicely não era um usuário normal. Agora a Intel tinha um problema real em suas mãos. Parecia que o custo de substituir todos os processadores Pentium que já haviam sido vendidos poderia custar uma enorme quantidade de dinheiro. A Intel já pos- suía mais encomendas para o chip do que podia produzir, e poderia ser particularmente desgas- tante ter que fornecer gratuitamente chips avulsos de reposição em vez de vendê-los. A direção da Intel decidiu apostar na questão e inicialmente se ofereceu para substituir os processadores somente para aqueles clientes que pudessem provar que seu trabalho exigia precisão absoluta em cálculos matemáticos. Naturalmente, isto não soava bem para as centenas de milhares de clien- tes que haviam pago no varejo 700 dólares ou mais por um chip Pentium e não queriam viver com a desagradável sensação que talvez, um dia, seu programa de imposto de renda poderia pro- duzir um resultado incorreto.

Finalmente, a Intel teve que submeter-se à demanda pública e substituiu todos os chips defei- tuosos, a um custo de cerca de 475 milhões de dólares.

O que você acha? A Intel alega que a probabilidade do defeito ocorrer em algum cálculo é ex- tremamente pequena – menor do que muitos riscos que enfrentamos a cada dia, tal como dirigir um automóvel até o trabalho. De fato, muitos usuários usaram seus computadores Pentium por muitos meses sem apresentar qualquer defeito, e os cálculos que o professor Nicely estava fazendo não po- deriam ser exemplos de necessidades de usuários típicos. Como resultado do seu grave erro de re- lações públicas, a Intel terminou pagando uma grande quantia de dinheiro. Sem dúvida, parte des- te valor foi acrescentado aos preços dos chips e então na realidade foi pago pelos clientes da Intel. Além disso, um grande número de processadores cuja manufatura consumia energia e causava al- gum impacto ambiental foram destruídos sem beneficiar ninguém. Poderia a Intel ter alegado que- rer substituir somente os processadores daqueles usuários que poderiam razoavelmente esperar so- frer o impacto do problema?

Suponha que, em vez de se colocar atrás de um muro de pedra, a Intel tivesse oferecido a esco- lha de uma substituição gratuita do processador ou 200 dólares de desconto. O que você teria feito? Você teria substituído seu chip defeituoso, ou você apostaria na sua sorte e embolsado o dinheiro?

2.2

Entrada e Saída

O programa da seção anterior não era muito útil. Se eu tivesse uma coleção de moedas diferente na minha carteira, deveria alterar as inicializações de variáveis, recompilar o programa e executá-lo novamente. Em particular, eu deveria ter um compilador C++ sempre disponível para adaptar o programa aos novos valores. Seria mais prático se o programa pudesse perguntar quantas moedas de cada valor eu tenho e então calcular o total. Aqui está um programa assim.

Arquivo coins2.cpp 1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 {

7 cout << "Quantas moedas de 1 centavo (pennies) você tem? ";

8 int pennies;

9 cin >> pennies;

10

12 int nickels;

13 cin >> nickels;

14

15 cout << "Quantas moedas de 10 centavos (dimes) você tem? ";

16 int dimes;

17 cin >> dimes;

18

19 cout << "Quantas moedas de 25 centavos (quarters) você tem? ";

20 int quarters;

21 cin >> quarters;

22

23 double total = pennies * 0.01 + nickels * 0.05 +

24 dimes * 0.10 + quarters * 0.25;

25 /* valor total das moedas */

26

27 cout << "Valor total= " << total << "\n";

28

29 return 0;

30 }

Quando este programa for executado, ele perguntará (ou exibirá um prompt) para você: Quantas moedas de 1 centavo (pennies) você tem?

O cursor irá permanecer na mesma linha do prompt e você deve digitar um número, seguido da tecla Enter. A seguir existirão mais três prompts, e finalmente a resposta é exibida e o programa termina.

A leitura de um número para a variável pennies é realizada pelo comando cin >> pennies;

Quando este comando é executado, o programa aguarda que o usuário digite um número e pres- sione Enter. O número é então colocado em uma variável e o programa executa o próximo comando. Neste caso, não inicializamos as variáveis que contam as moedas por que os comandos de entra- da movem valores para estas variáveis. Nós colocamos as definições de variáveis o mais perto pos- sível dos comandos de entrada para indicar onde os valores são colocados.

Você também pode ler valores em ponto flutuante: double balance;

cin >> balance;

Quando um inteiro é lido do teclado, zero e números negativos são permitidos como entra- das, mas números em ponto flutuante não são. Por exemplo, −10 poderia ser permitido como uma entrada para o número de moedas de 25 centavos, mesmo que isto não faça sentido – você não pode ter um número negativo de moedas em sua carteira. Números fracionários não são acei- tos. Se você digitar 10.75 quando é esperado um inteiro como entrada, o 10 será lido e colo- cado em uma variável do comando de entrada. O .75 não será ignorado. Ele será considerado no próximo comando de entrada (ver Figura 1). Isso não é intuitivo e provavelmente não é o que você esperava.

Algo ainda pior acontece se você não digitar um número. Por exemplo, se você digitar dez

ou help, então a rotina de processamento de entrada verifica que isso não é um número, e as- sim ela não configura uma variável do comando de entrada (isto é, o valor antigo daquela va- riável não se altera). E mais ainda, ela coloca o stream de entrada cin em um estado “falho”. Isso significa que cinperdeu a confiança nos dados que estava recebendo, e todos os coman- dos de entrada subseqüentes serão ignorados (ver Figura 2). Lamentavelmente, não existe ne- nhum sinal sonoro ou mensagem para alertar o usuário sobre este problema. Você vai aprender mais tarde como reconhecer e resolver problemas de entrada. Naturalmente, esta é uma habili- dade necessária para construir programas que possam sobreviver a usuários mal treinados ou desatentos. Neste momento, vamos apenas pedir a você que digite as respostas certas nos prompts de entrada.

É possível ler mais de um valor de cada vez. Por exemplo, o comando de entrada cin >> pennies >> nickels >> dimes >> quarters;

lê quatro valores do teclado (ver Sintaxe 2.4). Os valores podem estar todos em uma mesma linha, como em

8 0 4 3

ou em linhas separadas, como em 8

0 4 3