Décimo Exemplo utilizando Classes em C++

Propaganda
Linguagens de Programação
Prof. Miguel Elias Mitre Campista
http://www.gta.ufrj.br/~miguel
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Parte III
Introdução à Programação em C++
(Continuação)
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Relembrando da Última
Aula...
• Definição de classes e objetos
• Primeiros exemplos de programação orientada a
objetos
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Repetição Controlada por
Contador
• Variável contadora
– Usada para contar ocorrências de um determinado
evento ou para controlar laços de repetição
• Ex.: Indica qual entre as dez notas está sendo inserida
• Variável acumuladora
– Usada para acumular a soma de vários valores
– Em geral, é previamente iniciada do zero
• Do contrário, incluiria o valor anterior armazenado nessa
posição da memória
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
Função que utiliza
variável contadora e
acumuladora
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
Declaração das
variáveis contadora e
acumuladora
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
Inicialização das
variáveis
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
Executa o laço
de repetição 5
vezes
Calcula a média
ao final do laço
de repetição
Linguagens de Programação – DEL-Poli/UFRJ
Acumula e
incrementa as
variáveis
respectivas
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Nono Exemplo utilizando Classes
em C++
shell>$ g++ -c gradebook.cpp –o gradebook.o
shell>$ g++ -c principal.cpp –o principal.o
shell>$ g++ -o ex9 gradebook.o principal.o
shell>$ ./ex9
Warning: Nome “Programacao de Computadores e Sistemas Distribuidos” excede o limite
maximo de 25 caracteres...
Nome limitado aos primeiros 25 caracteres: Programacao de Computador
Nome do curso 1 eh: Programacao de Computador
Nome do curso 2 eh: CompI
Entre com a nota 1
Entre com a nota 1
Entre com a nota 1
Entre com a nota 1
Entre com a nota 2
Total das 5 notas eh: 6
Media eh: 1
Entre com a nota 2
Entre com a nota 2
Entre com a nota 2
Entre com a nota 2
Entre com a nota 3
Total das 5 notas eh: 11
Media eh: 2
shell>$
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Variáveis Não-inicializadas ou
Truncadas
• Variáveis não inicializáveis
– Contém valores indefinidos
• Não inicializar contadores e acumuladores pode provocar
erros de lógica
• Divisão de inteiros e truncamento
– Divisão de inteiros
• Divisão de dois inteiros leva a resultado truncado
– Uma fração do quociente resultante é perdida
– Assumir que a divisão de inteiros arredonda (em lugar de
truncar) pode gerar resultados incorretos
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Repetição Controlada por
Sentinela
• Também conhecida por repetição indefinida
• Usar um valor de sentinela
– Indica o final da entrada de dados
• Um valor de sentinela não pode ser um valor de entrada
válido
– É também conhecido por valor de sinal, valor fictício ou
valor de flag
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Repetição Controlada por
Sentinela
• Números de ponto flutuante
– Um número real com um ponto decimal
– O C++ fornece os tipos de dados float e double
• Os números double podem ter maior magnitude e mais
detalhes
– Isso é chamado de precisão
• Valores de ponto flutuante são tratados como valores
double por padrão
– Ex.: Surgidos da divisão de dois inteiros
– Valores de ponto flutuante em geral são apenas
aproximações
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Exemplo utilizando
Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Exemplo utilizando
Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Exemplo utilizando
Classes em C++
Biblioteca para
definir a
precisão da saída
numérica
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Exemplo utilizando
Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Exemplo utilizando
A variável
Classes em C++average
agora é
double
O while executa
desde que grade
não seja igual ao
valor de
sentinela -1
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Exemplo
utilizando
Calcula
a nota média usando
static_cast<double>
Classes em para
C++
executar uma
conversão explícita da
variável total. No resultado
da divisão prevalece o tipo
double
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Exemplo Define
utilizando
a precisão do
número de ponto flutuante
Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Fixa o número de
casas decimais
que são
impressas
Prof. Miguel Campista
Décimo Exemplo utilizando
Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Exemplo utilizando
Classes em C++
shell>$ g++ -c gradebook.cpp –o gradebook.o
shell>$ g++ -c principal.cpp –o principal.o
shell>$ g++ -o ex10 gradebook.o principal.o
shell>$ ./ex10
Warning: Nome “Programacao de Computadores e Sistemas Distribuidos” excede o limite
maximo de 25 caracteres...
Nome limitado aos primeiros 25 caracteres: Programacao de Computador
Nome do curso 1 eh: Programacao de Computador
Nome do curso 2 eh: CompI
Entre com a nota ou -1 para sair: 2
Entre com a nota ou -1 para sair: 1
Entre com a nota ou -1 para sair: 1
Entre com a nota ou -1 para sair: -1
Total das 5 notas eh: 4
Media eh: 1.33
Entre com a nota ou -1 para sair: 2
Entre com a nota ou -1 para sair: 2
Entre com a nota ou -1 para sair: 2
Entre com a nota ou -1 para sair: -1
Total das 5 notas eh: 6
Media eh: 2.00
shell>$
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Conversão de Tipos
• Operador de Coerção Unário
– Cria uma cópia temporária de seu operando com um tipo
de dado diferente
• Conversão explícita
– Converte tipos numéricos e tipos de classes relacionados
(polimorfismo)
– Ex.: static_cast< double > ( total )
• Cria uma cópia do ponto flutuante temporária de total
• Promoção
– Conversão de um valor (p. ex., int) em outro tipo de
dado (p. ex., double) para realizar um cálculo
• Conversão implícita
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Formatação de Números de
Ponto Flutuante
• Manipulador de fluxo parametrizado setprecision
– Especifica o número de dígitos de precisão para exibir à
direita do ponto decimal
– A precisão-padrão é de seis dígitos
• Manipulador de fluxo não parametrizado fixed
– Indica que os valores de ponto flutuante devem ser
enviados para a saída no formato de ponto fixo
• Em oposição à notação científica (3.1 × 103)
• Manipulador de fluxo showpoint
– Força a exibição do ponto decimal
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Primeiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Primeiro Exemplo
utilizando Classes em C++
Função para processar os
resultados de um exame de
uma turma
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Primeiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
DeclaraçãoExemplo
e inicialização
Décimo Primeiro
das variáveis locais
utilizando Classes em C++
Determina se esse aluno foi aprovado
ou reprovado e incrementa a variável
apropriada
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Primeiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Primeiro Exemplo
utilizando Classes em C++
shell>$ g++ -c gradebook.cpp –o gradebook.o
shell>$ g++ -c principal.cpp –o principal.o
shell>$ g++ -o ex11 gradebook.o principal.o
shell>$ ./ex11
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Entre o resultado (1 = aprovado, 2 = reprovado): 1
Aprovados 10
Reprovados 0
Prova estava mole!
shell>$
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Operadores de Incremento e
Decremento
• Operador de incremento ++
– Incrementa um ao valor da variável
• Exemplo
– c++
• Operador de decremento -– Decrementa um do valor da variável
• Exemplo
– c--
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Primeiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Primeiro Exemplo
Operadores
utilizando Classes
emde incremento
C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Sentença de Repetição (for)
• Apresenta todos os requisitos de uma repetição
controlada por contador
– Declaração e inicialização do contador
– Expressão de condição de contorno
– Operador de incremento
• Pode ser usada no lugar do while
inicialização;
while (expressão){
bloco;
incremento;
}
for(inicialização; expressão; incremento) {
bloco;
}
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Sentença de Repetição (for)
• Apresenta todos os requisitos de uma repetição
controlada por contador
– Declaração e inicialização do contador
– Expressão de condição de contorno
– Operador de incremento
• Pode ser usada no lugar do while
– Ex.:
for(int i = 0, j = 0; i + j <= 10; i++, j++) {
cout << i << j << endl;
}
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Sentença de Repetição (for)
• O corpo do for pode ser inserido na parte de
incremento
– Requer o uso da vírgula
int soma = 0;
for(int i = 0; i <= 10; i++) {
soma = soma + i;
}
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Sentença de Repetição (for)
• O corpo do for pode ser inserido na parte de
incremento
– Requer o uso da vírgula
int soma = 0;
for(int i = 0; i <= 10; i++) {
soma = soma + i;
}
int soma = 0;
for(int i = 0; i <= 10; soma += i, i++);
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Sentença de Repetição (for)
• O corpo do for pode ser inserido na parte de
incremento
– Requer o uso da vírgula
int soma = 0;
for(int i = 0; i <= 10; i++) {
soma = soma + i;
}
int soma = 0;
for(int i = 0; i <= 10; soma += i, i++);
corpo do for
Linguagens de Programação – DEL-Poli/UFRJ
Uso do ponto e vírgula
no lugar do corpo
Prof. Miguel Campista
Sentença de Repetição (for)
• O corpo do for pode ser inserido na parte de
incremento
– Requer o uso da vírgula
int soma = 0;
for(int i = 0; i <= 10; i++) {
soma = soma + i;
}
int soma = 0;
for(int i = 0; i <= 10; soma += i, i++);
Esse formato pode prejudicar a
legibilidade do código
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Função para
exibir a
progressão de um
investimento
Função para
calcular os juros
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Emprego de um
construtor
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Biblioteca
matemática para
cálculo dos juros
Função para
cálculo dos juros,
uso da função pow
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Define uma largura
de 21 caracteres e
justifica o texto à
direita. Caso o texto
tenha mais que 21
caracteres, a coluna
é expandida para
atender essa largura
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Define o formato de
saída dos resultados
Emprego do for e
inicialização da
variável contadora ano
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Segundo Exemplo
utilizando Classes em C++
shell>$ g++ -c gradebook.cpp –o gradebook.o
shell>$ g++ -c principal.cpp –o principal.o
shell>$ g++ -o ex12 gradebook.o principal.o
shell>$ ./ex12
Entre com o interesse: 0.05
Entre com o valor principal: 1000.0
Entre com o numero de anos: 10
A progressao eh:
Ano
Total
1
1050.00
2
1102.50
3
1157.63
4
1215.51
5
1276.28
6
1340.10
7
1407.10
8
1477.46
9
1551.33
10
1628.89
shell>$
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Leitura de Caracteres do
Teclado
• Uso da função cin.get()
– Função lê um caractere do teclado e retorna o valor
lido
• O valor de retorno pode ser armazenado também em uma
variável int
cout << “O caractere (" << 'a' << ") tem valor "
<< static_cast< int > ( 'a' ) << endl;
O caractere (a) tem valor 97
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Função para entrada de
notas pelo teclado
Função para exibir um
sumário das notas
Contadores para
contabilizar os conceitos
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Inicialização das
variáveis no construtor
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Uso da função
cin.get() para leitura
de caractere do teclado.
O caractere lido é
atribuído à variável
grade
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Após a inicialização da
variável grade, ela é
comparada ao EOF. Em
sistemas UNIX, o EOF
pode ser um Ctrl+d e
em WINDOWS, o
Ctrl+z
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Entradas podem ser em
letras maiúsculas ou
minúsculas
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Evita que
caracteres
diferentes dos
permitidos sejam
considerados pelo
programa. Ex.: ao
teclar ENTER um
caractere especial é
lido do teclado
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Décimo Terceiro Exemplo
utilizando Classes em C++
shell>$ g++ -c gradebook.cpp –o gradebook.o
shell>$ g++ -c principal.cpp –o principal.o
shell>$ g++ -o ex13 gradebook.o principal.o
shell>$ ./ex13
Warning: Nome “Programacao de Computadores e Sistemas Distribuidos” excede o limite
maximo de 25 caracteres...
Nome limitado aos primeiros 25 caracteres: Programacao de Computador
Nome do curso 1 eh: Programacao de Computador
Nome do curso 2 eh: CompI
Entre com o conceito.
Entre com o caractere EOF para finalizar.
a
a
a
b
b
c
^Z
Numero de alunos que receberam cada um dos conceitos:
A: 3
B: 2
C: 1
shell>$
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Operadores Lógicos
• And (&&), Or (||), Not (!)
• Manipulador de fluxo boolalpha
– Exibe o valor de cada expressão booleana
• true ao invés de 1
• false ao invés de 0
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Uso do manipulador
de fluxo
boolalpha
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
shell>$ g++ gradebook.cpp –o ex14
shell>$ ./ex14
Logico AND (&&)
falso && falso: false
falso && verdadeiro: false
verdadeiro && falso: false
verdadeiro && verdadeiro: true
Logico OR (||)
falso || falso: false
falso || verdadeiro: true
verdadeiro || falso: true
verdadeiro || verdadeiro: true
Logico NOT (!)
!falso: true
!verdadeiro: false
shell>$
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 1: Cadastro
• Escreva uma agenda em C++ para armazenar em
memória três cadastros contendo nome, telefone e
endereço. Cada um dos cadastros deve ser um objeto
da classe Cadastro. A classe Cadastro ainda deve
oferecer uma função para exibição dos dados de cada
cadastro.
?
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 1: Cadastro
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 1: Cadastro
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 1: Cadastro
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 1: Cadastro
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
• Escreva uma agenda em C++ para armazenar em
memória três cadastros contendo nome, telefone e
endereço. Uma classe Agenda deve ser criada e nela
três cadastros devem ser inseridos. Cada cadastro é
um objeto da classe Cadastro.
?
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Exemplo 2: Agenda
Arquivo Makefile
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Leitura Recomendada
• Capítulos 4 e 5 do livro
– Deitel, “C++ How to Program”, 5th edition, Editora
Prentice Hall, 2005
Linguagens de Programação – DEL-Poli/UFRJ
Prof. Miguel Campista
Download