Escolar Documentos
Profissional Documentos
Cultura Documentos
Instruções
de controle:
parte 2
3
Copyright © 2006 by Pearson Education
5.2 Princípios básicos de repetição
controlada por contador
• A repetição controlada por contador exige:
– Nome da variável de controle (contador de loop)
– Valor inicial da variável de controle
– Condição de continuação do loop que testa o valor final da
variável de controle
– Incremento/decremento da variável de controle de cada
iteração
4
Copyright © 2006 by Pearson Education
Resumo
fig05_01.cpp
Incrementa o valor
em counter.
5
Copyright © 2006 by Pearson Education
Erro comum de programação 5.1
6
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 5.1
7
Copyright © 2006 by Pearson Education
Boa prática de programação 5.1
8
Copyright © 2006 by Pearson Education
Boa prática de programação 5.2
9
Copyright © 2006 by Pearson Education
Boa prática de programação 5.3
10
Copyright © 2006 by Pearson Education
5.3 A instrução de repetição for
11
Copyright © 2006 by Pearson Education
Resumo
fig05_02.cpp
Incremento de
counter.
12
Copyright © 2006 by Pearson Education
Erro comum de programação 5.2
13
Copyright © 2006 by Pearson Education
Fig. 5.3 | Componentes de cabeçalho de instrução for.
14
Copyright © 2006 by Pearson Education
Boa prática de programação 5.4
Utilizar o valor final na condição de uma instrução while ou for e
utilizar o operador <= relacional ajudará a evitar erros off-by-one.
Para um loop utilizado para imprimir os valores de 1 a 10, por
exemplo, a condição de continuação do loop deve ser counter <= 10
em vez de counter < 10 (que é um erro off-by-one) ou counter < 11
(que, porém, é correto). Muitos programadores preferem a chamada
contagem baseada em zero, em que, para contar 10 vezes pelo loop,
counter seria inicializado como zero e o teste de continuação do loop
seria counter < 10.
15
Copyright © 2006 by Pearson Education
5.3 A instrução de repetição for (cont.)
17
Copyright © 2006 by Pearson Education
Dica de portabilidade 5.1
No padrão C++, o escopo da variável de controle declarada na seção
de inicialização de uma instrução for difere do escopo em
compiladores C++ mais antigos. Em compiladores pré-padrão, o
escopo da variável de controle não termina no fim do bloco que define
o corpo da instrução for; em vez disso, o escopo termina no fim do
bloco que inclui a instrução for. O código C++ criado com
compiladores C++ pré-padrão pode quebrar quando compilado em
compiladores compatíveis com o padrão. Se você estiver trabalhando
com compiladores pré-padrão e quiser certificar-se de que seu código
funcionará com compiladores compatíveis com o padrão, há duas
estratégias de programação defensivas que você pode utilizar:
declarar as variáveis de controle com nomes diferentes em cada
instrução for, ou, se preferir utilizar o mesmo nome para a variável
de controle em várias instruções for, declarar a variável de controle
antes da primeira instrução for.
18
Copyright © 2006 by Pearson Education
Boa prática de programação 5.5
19
Copyright © 2006 by Pearson Education
5.3 A instrução de repetição for (cont.)
20
Copyright © 2006 by Pearson Education
Erro comum de programação 5.4
21
Copyright © 2006 by Pearson Education
Erro comum de programação 5.5
22
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 5.1
Costuma-se às vezes colocar ponto-e-vírgula logo
depois de um cabeçalho for para criar um loop
chamado loop de retardo. Esse loop for com um
corpo vazio ainda assim realiza o loop pelo número
indicado de vezes, não fazendo nada além de contar.
Por exemplo, seria possível utilizar um loop de retardo
para tornar lento um programa que está produzindo
saídas na tela rápido demais para serem lidas. Mas
cuidado, porque um retardo assim pode variar entre
sistemas com diferentes velocidades de processador.
23
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 5.2
24
Copyright © 2006 by Pearson Education
Fig. 5.4 | Diagrama de atividades UML para a instrução for na Figura 5.2.
25
Copyright © 2006 by Pearson Education
5.4 Exemplos com a estrutura for
• Exemplos de instrução for
– Altere a variável de controle de 1 a 100 em incrementos de 1.
– for ( int i = 1; i <= 100; i++ )
– Altere a variável de controle de 100 para baixo até 1 em incrementos de –
1 (isto é, decrementos de 1).
– for ( int i = 100; i >= 1; i-- )
– Altere a variável de controle de 7 a 77 em passos de 7.
– for ( int i = 7; i <= 77; i += 7 )
– Altere a variável de controle de 20 para baixo até 2 em passos de –2.
– for ( int i = 20; i >= 2; i -= 2 )
– Altere a variável de controle sobre a seguinte seqüência de valores: 2, 5, 8,
11, 14, 17, 20.
– for ( int i = 2; i <= 20; i += 3 )
– Altere a variável de controle sobre a seguinte seqüência de valores: 99, 88,
77, 66, 55, 44, 33, 22, 11, 0.
– for ( int i = 99; i >= 0; i -= 11 ) 26
Copyright © 2006 by Pearson Education
Erro comum de programação 5.6
27
Copyright © 2006 by Pearson Education
Resumo
fig05_05.cpp
Altera o número de 2
para 20 em
incrementos de 2.
28
Copyright © 2006 by Pearson Education
5.4 Exemplos com a estrutura for (cont.)
29
Copyright © 2006 by Pearson Education
Boa prática de programação 5.6
30
Copyright © 2006 by Pearson Education
Boa prática de programação 5.7
31
Copyright © 2006 by Pearson Education
5.4 Exemplos com a estrutura for (cont.)
32
Copyright © 2006 by Pearson Education
Resumo
fig05_06.cpp
(1 de 2)
Função de biblioteca-padrão
pow (no arquivo de
cabeçalho <cmath>)
33
Copyright © 2006 by Pearson Education
Resumo
fig05_06.cpp
(2 de 2)
Calcula o valor
dentro da instrução
for.
34
Copyright © 2006 by Pearson Education
Erro comum de programação 5.7
35
Copyright © 2006 by Pearson Education
Boa prática de programação 5.8
Não utilize variáveis de tipo float ou double para
realizar cálculos monetários. A imprecisão de números de
ponto flutuante pode causar erros que resultam em
valores monetários incorretos. Nos Exercícios, exploramos
o uso de inteiros para realizar cálculos monetários. [Nota:
Alguns fornecedores independentes vendem bibliotecas de
classes C++ que realizam cálculos monetários precisos.
Incluímos vários URLs no Apêndice I.]
36
Copyright © 2006 by Pearson Education
5.4 Exemplos com a estrutura for (cont.)
37
Copyright © 2006 by Pearson Education
Dica de desempenho 5.1
38
Copyright © 2006 by Pearson Education
Dica de desempenho 5.2
39
Copyright © 2006 by Pearson Education
5.5 Instrução de repetição do…while
• Instrução do…while
– Semelhante à instrução while.
– Testa a continuação de loop depois de executar o corpo do
loop.
• O corpo do loop sempre é executado pelo menos uma vez.
40
Copyright © 2006 by Pearson Education
Boa prática de programação 5.9
41
Copyright © 2006 by Pearson Education
Resumo
fig05_07.cpp
42
Copyright © 2006 by Pearson Education
Fig. 5.8 | O diagrama de atividades UML para a instrução de repetição do...while da
Figura 5.7.
43
Copyright © 2006 by Pearson Education
5.6 A estrutura de seleção múltipla switch
• Instrução switch
– É usada para seleções múltiplas.
– Testa uma variável ou expressão.
• É comparada com expressões inteiras constantes para
determinar a ação a ser executada.
• Qualquer combinação de constantes de caractere e
constantes inteiras que são avaliadas como um valor
constante inteiro.
44
Copyright © 2006 by Pearson Education
Resumo
fig05_09.cpp
45
Copyright © 2006 by Pearson Education
Resumo
fig05_10.cpp
(1 de 5)
46
Copyright © 2006 by Pearson Education
Resumo
fig05_10.cpp
(2 de 5)
47
Copyright © 2006 by Pearson Education
Resumo
fig05_10.cpp
(3 de 5)
49
Copyright © 2006 by Pearson Education
Resumo
fig05_10.cpp
(5 de 5)
50
Copyright © 2006 by Pearson Education
5.6 A estrutura de seleção múltipla switch
(cont.)
• Lendo a entrada de caracteres
– Função cin.get()
• Lê um caractere do teclado.
– Valor inteiro de um caractere
• static_cast< int >( character )
– Conjunto de caracteres ASCII
• Tabela de caracteres e seus equivalentes decimais.
– EOF
• <ctrl> d no UNIX/Linux
• <ctrl> z no Windows
51
Copyright © 2006 by Pearson Education
Dica de portabilidade 5.2
52
Copyright © 2006 by Pearson Education
Dica de portabilidade 5.3
53
Copyright © 2006 by Pearson Education
5.6 A estrutura de seleção múltipla switch
(cont.)
• Instrução switch
– Expressão de controle
• Expressão entre parênteses após a palavra-chave switch.
– Rótulos case
• Comparados com a expressão de controle.
• As instruções após o rótulo case correspondente são
executadas.
– Em um rótulo case, não é necessário colocar as
múltiplas instruções entre chaves.
– A instrução break faz com que a execução prossiga
com a primeira instrução após switch.
• Sem uma instrução break, a execução falha no
rótulo case seguinte.
54
Copyright © 2006 by Pearson Education
5.6 A estrutura de seleção múltipla switch
(cont.)
• Instrução switch (cont.)
– Caso default
• Executa se nenhum case correspondente for encontrado.
• É opcional.
– Se não houver correspondência e nenhum caso
default
• O controle simplesmente continua após switch.
55
Copyright © 2006 by Pearson Education
Erro comum de programação 5.8
56
Copyright © 2006 by Pearson Education
Erro comum de programação 5.9
57
Copyright © 2006 by Pearson Education
Boa prática de programação 5.10
Forneça um caso default em instruções switch. Os
casos não explicitamente testados em uma instrução
switch sem um caso default são ignorados. Incluir um
caso default chama a atenção do programador para a
necessidade de processar condições excepcionais. Há
situações em que nenhum processamento default é
necessário. Embora as cláusulas case e default em uma
instrução switch possam ocorrer em qualquer ordem, é
comum colocar a cláusula default por último.
58
Copyright © 2006 by Pearson Education
Boa prática de programação 5.11
59
Copyright © 2006 by Pearson Education
Erro comum de programação 5.10
60
Copyright © 2006 by Pearson Education
Resumo
fig05_11.cpp
(1 de 2)
61
Copyright © 2006 by Pearson Education
Resumo
fig05_11.cpp
(2 de 2)
62
Copyright © 2006 by Pearson Education
Erro comum de programação 5.11
63
Copyright © 2006 by Pearson Education
Fig. 5.12 | Diagrama de atividades UML de instrução de seleção múltipla switch com
instruções break.
64
Copyright © 2006 by Pearson Education
Erro comum de programação 5.12
65
Copyright © 2006 by Pearson Education
5.6 A estrutura de seleção múltipla switch
(cont.)
• Tipos de dados de inteiros
– short
• Abreviação de short int
• O intervalo mínimo é –32,768 a 32,767
– long
• Abreviação de long int
• O intervalo mínimo é –2,147,483,648 a 2,147,483,647
– int
• Equivalente a short ou long na maioria dos computadores.
– char
• Pode ser utilizado para representar inteiros menores.
66
Copyright © 2006 by Pearson Education
Dica de portabilidade 5.4
67
Copyright © 2006 by Pearson Education
Dica de desempenho 5.3
68
Copyright © 2006 by Pearson Education
Dica de desempenho 5.4
69
Copyright © 2006 by Pearson Education
5.7 Instruções break e continue
• Instruções break/continue
– Alteram o fluxo do controle.
• Instrução break
– Faz com que o controle saia imediatamente da estrutura de
controle.
– Usada nas instruções while, for, do…while ou switch.
• Instrução continue
– Salta as instruções restantes em um corpo de loop.
• Prossegue para o incremento e teste de condição nos loops for.
• Prossegue para o teste de condição nos loops while/do…while.
– Posteriormente, executa a iteração seguinte (se não estiver
terminando).
– Usada nas instruções while, for ou do…while.
70
Copyright © 2006 by Pearson Education
Resumo
fig05_13.cpp
71
Copyright © 2006 by Pearson Education
Resumo
fig05_14.cpp
72
Copyright © 2006 by Pearson Education
Boa prática de programação 5.12
73
Copyright © 2006 by Pearson Education
Dica de desempenho 5.5
74
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 5.2
Há uma tensão entre conseguir uma engenharia de
software de qualidade e conseguir o software de melhor
desempenho. Em geral, um objetivo é alcançado à
custa do outro. Para todas as situações, exceto as de
desempenho muito alto, aplique a seguinte regra:
primeiro, faça com que seu código seja simples e
preciso; então, faça com que se torne rápido e menor,
mas apenas se necessário.
75
Copyright © 2006 by Pearson Education
5.8 Operadores lógicos
• Operadores lógicos
– Permitem formar condições mais complexas.
• Combinam condições simples com condições complexas.
• Operadores lógicos C++
– && (E lógico)
– || (OU lógico)
– ! (NÃO lógico)
76
Copyright © 2006 by Pearson Education
5.8 Operadores lógicos (cont.)
77
Copyright © 2006 by Pearson Education
Erro comum de programação 5.13
78
Copyright © 2006 by Pearson Education
Fig. 5.15 | Tabela-verdade do operador && (E lógico).
79
Copyright © 2006 by Pearson Education
5.8 Operadores lógicos (cont.)
80
Copyright © 2006 by Pearson Education
Fig. 5.16 | Tabela-verdade do operador || (OU lógico).
81
Copyright © 2006 by Pearson Education
5.8 Operadores lógicos (cont.)
82
Copyright © 2006 by Pearson Education
Dica de desempenho 5.6
83
Copyright © 2006 by Pearson Education
5.8 Operadores lógicos (cont.)
84
Copyright © 2006 by Pearson Education
Fig. 5.17 | Tabela-verdade do operador ! (negação lógica).
85
Copyright © 2006 by Pearson Education
Resumo
fig05_18.cpp
O manipulador de fluxo boolalpha (1 de 2)
faz com que valores bool sejam
exibidos como ‘true’ ou ‘false’.
86
Copyright © 2006 by Pearson Education
Resumo
fig05_18.cpp
(2 de 2)
87
Copyright © 2006 by Pearson Education
Fig. 5.19 | Precedência e associatividade de operadores.
88
Copyright © 2006 by Pearson Education
5.9 Confundindo operadores de igualdade
(==) com operadores de atribuição (=)
• Troca acidental dos operadores == (igualdade) e
= (atribuição)
– Erro comum
• As instruções de atribuição produzem um valor (o valor a ser
atribuído).
• As expressões que tiverem um valor podem ser usadas para
decisão
– Zero = false, não-zero = true
– Em geral, não provoca erros de sintaxe.
• Alguns compiladores emitem um aviso quando = é utilizado
em um contexto em que normalmente se usaria ==
89
Copyright © 2006 by Pearson Education
5.9 Confundindo operadores de igualdade
(==) com operadores de atribuição (=) (cont.)
• Exemplo
• if ( payCode == 4 )
• cout << "You get a bonus!" << endl;
– Se paycode for 4, o bônus é concedido.
• Se == fosse substituído por =
• if ( payCode = 4 )
cout << "You get a bonus!" << endl;
– paycode é configurado como 4 (independentemente do
valor anterior).
– A condição é true (desde que 4 seja não-zero).
• O bônus é concedido em qualquer caso.
90
Copyright © 2006 by Pearson Education
Erro comum de programação 5.14
91
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 5.3
Normalmente, os programadores escrevem condições
como x == 7 com o nome da variável à esquerda e a
constante à direita. Invertendo, para que a constante
esteja à esquerda e o nome da variável à direita, como em
7 == x, o programador que acidentalmente substituir o
operador == por = será protegido pelo compilador. O
compilador trata isso como um erro de compilação,
porque você não pode alterar o valor de uma constante.
Isso evitará a possibilidade de devastação de um erro de
lógica em tempo de execução.
92
Copyright © 2006 by Pearson Education
5.9 Confundindo operadores de igualdade
(==) com operadores de atribuição (=) (cont.)
• Lvalues
– Expressões que podem aparecer no lado esquerdo da
equação.
– Podem ser alteradas (isto é, são variáveis)
• x = 4;
• Rvalues
– Aparecem apenas no lado direito da equação.
– São constantes, como números (isto é, não é possível
escrever 4 = x;).
• É possível usar lvalues como rvalues, mas não o
inverso.
93
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 5.4
94
Copyright © 2006 by Pearson Education
5.10 Resumo de programação estruturada
• Programação estruturada
– Produz programas fáceis de compreender, testar, depurar e
modificar.
• Regras de programação estruturada
– Use apenas estruturas de controle de entrada única/saída
única.
– Regras (Fig. 5.21)
• A regra 2 é a regra de empilhamento.
• A regra 3 é a regra de aninhamento.
95
Copyright © 2006 by Pearson Education
Fig. 5.20 | As instruções de seqüência de entrada única/saída única, seleção e repetição
do C++.
96
Copyright © 2006 by Pearson Education
Fig. 5.21 | As regras para formar programas estruturados.
97
Copyright © 2006 by Pearson Education
Fig. 5.22 | Diagrama de atividades mais simples.
98
Copyright © 2006 by Pearson Education
Fig. 5.23 | Aplicando repetidamente a Regra 2 da Figura 5.21 ao mais simples diagrama
de atividades.
99
Copyright © 2006 by Pearson Education
Fig. 5.24 | Aplicando várias vezes a Regra 3 da Figura 5.21 ao mais simples diagrama de
atividades.
100
Copyright © 2006 by Pearson Education
5.10 Resumo de programação estruturada
(cont.)
• Estrutura de seqüência
– ‘Incorporada’ ao C++
• Estrutura de seleção
– if, if…else e switch
• Estrutura de repetição
– while, do…while e for
101
Copyright © 2006 by Pearson Education
Fig. 5.25 | O diagrama de atividades com sintaxe inválida.
102
Copyright © 2006 by Pearson Education
5.11 Estudo de caso de engenharia de software:
identificando estados e atividades dos objetos no
sistema ATM (opcional)
• Diagramas de estados de máquina
– Normalmente chamados de diagramas de estados.
– Modelam vários estados de um objeto.
• Mostram em que circunstâncias o objeto muda de estado.
• Focalizam o comportamento do sistema.
– Representação UML
• Estado inicial
– Círculo sólido
• Estado
– Retângulo arredondado
• Transições
– Setas
103
Copyright © 2006 by Pearson Education
Fig. 5.26 | Diagrama de estados do objeto ATM.
104
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 5.3
Em geral, os engenheiros de software não criam
diagramas de estados que mostram cada estado possível e
transição de estado para todos os atributos —
simplesmente, existem muitos. Os diagramas de estados
em geral mostram apenas os estados e transições de estado
mais importantes ou complexos.
105
Copyright © 2006 by Pearson Education
5.11 Estudo de caso de engenharia de software:
identificando estados e atividades dos objetos no
sistema ATM (opcional)
• Diagramas de atividades
– Focalizam o comportamento do sistema.
– Modelam o fluxo de trabalho de um objeto durante a
execução do programa.
• As ações a serem executadas pelo objeto e a ordem em que
serão executadas.
– Representação UML
• Estado inicial
– Círculo sólido
• Estado de ação
– Retângulo com os lados encurvados para fora
• Ordem da ação
– Seta
• Estado final
– Círculo sólido dentro de um círculo vazado 106
Copyright © 2006 by Pearson Education
Fig. 5.27 | Diagrama de atividades de uma transação BalanceInquiry.
107
Copyright © 2006 by Pearson Education
Fig. 5.28 | Diagrama de atividades de uma transação Withdrawal.
108
Copyright © 2006 by Pearson Education
Fig. 5.29 | Diagrama de atividades de uma transação Deposit.
109
Copyright © 2006 by Pearson Education
Para fazer em trios de até 3: 5.6, 5.7, 5.8, 5.9, 5.17,
5.26
110
Copyright © 2006 by Pearson Education