Post on 17-Dec-2018
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
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 IV
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
Acumula e incrementa as variáveis respectivasCalcula a média
ao final do laço de repetição
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++shell>$ g++ -Wall -c gradebook.cpp –o gradebook.o
shell>$ g++ -Wall -c principal.cpp –o principal.oshell>$ g++ -o ex9 gradebook.o principal.oshell>$ ./ex9Warning: Nome “Programacao de Computadores e Sistema s Distribuidos” excede o limite maximo de 25 caracteres...Nome limitado aos primeiros 25 caracteres: Programa cao de ComputadorNome do curso 1 eh: Programacao de ComputadorNome do curso 2 eh: CompIEntre com a nota 1Entre com a nota 1Entre com a nota 1Entre com a nota 1Entre com a nota 2Total das 5 notas eh: 6Media eh: 1Entre com a nota 2Entre com a nota 2Entre com a nota 2Entre com a nota 2Entre com a nota 3Total das 5 notas eh: 11Media eh: 2shell>$
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Variáveis Não-inicializadas ou Truncadas
• Variáveis não inicializadas– 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.: Resultado da divisão de dois inteiros
– Valores de ponto flutuante em geral são apenas aproximações• Calculados com aproximações em série: n = Σ2-i
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Exemplo de Aproximação de Ponto Flutuante
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 Classes em C++ A variável
average agora édouble
O whileexecuta 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 Classes em C++
Calcula a nota média usando static_cast<double>
para 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 utilizando Classes em C++
Define a precisão do número de ponto flutuante
Fixa o número de casas decimais
que são impressas
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++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 Sistema s Distribuidos” excede o limite maximo de 25 caracteres...Nome limitado aos primeiros 25 caracteres: Programa cao de ComputadorNome do curso 1 eh: Programacao de ComputadorNome do curso 2 eh: CompIEntre com a nota ou -1 para sair: 2Entre com a nota ou -1 para sair: 1Entre com a nota ou -1 para sair: 1Entre com a nota ou -1 para sair: -1Total das 5 notas eh: 4Media eh: 1.33Entre com a nota ou -1 para sair: 2Entre com a nota ou -1 para sair: 2Entre com a nota ou -1 para sair: 2Entre com a nota ou -1 para sair: -1Total das 5 notas eh: 6Media 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 implícita– Conversão de um valor (p. ex., int ) em outro tipo de dado (p. ex., double ) para realizar um cálculo
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
• Junto com o fixed está relacionado com o número de casas decimais
– 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
Décimo Primeiro Exemplo utilizando Classes em C++
Declaração e inicialização das variáveis locais
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.oshell>$ g++ -c principal.cpp –o principal.oshell>$ g++ -o ex11 gradebook.o principal.oshell>$ ./ex11Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Entre o resultado (1 = aprovado, 2 = reprovado): 1Aprovados 10Reprovados 0Prova 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 utilizando Classes em C++Operadores de incremento
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 Uso do ponto e vírgula no lugar do corpo
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++) ;
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++
Emprego do for e inicialização da
variável contadora ano
Define o formato de saída dos resultados
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.05Entre com o valor principal: 1000.0Entre com o numero de anos: 10A progressao eh:Ano Total
1 1050.002 1102.503 1157.634 1215.515 1276.286 1340.107 1407.108 1477.469 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 istream::get ���� int 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 EOFpode 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 ENTERum 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 Sistema s Distribuidos” excede o limite maximo de 25 caracteres...Nome limitado aos primeiros 25 caracteres: Programa cao de ComputadorNome do curso 1 eh: Programacao de ComputadorNome do curso 2 eh: CompIEntre com o conceito.Entre com o caractere EOF para finalizar.aaabbc^ZNumero de alunos que receberam cada um dos conceito s:A: 3B: 2C: 1shell>$
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>$ ./ex14Logico AND (&&)falso && falso: falsefalso && verdadeiro: falseverdadeiro && falso: falseverdadeiro && verdadeiro: true
Logico OR (||)falso || falso: falsefalso || verdadeiro: trueverdadeiro || falso: trueverdadeiro || verdadeiro: true
Logico NOT (!)!falso: true!verdadeiro: falseshell>$
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: AgendaArquivo 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