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 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
Acumula e incrementa as variáveis respectivas
Calcula 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++ -c gradebook.cpp –o gradebook.o
shell>$ g++ -c principal.cpp –o principal.o
shell>$ g++ -o ex9 gradebook.o principal.o
shell>$ ./ex9Warning: Nome “Programacao de Computadores e Sistemas Distribuidos” excede o limite maximo de 25 caracteres...Nome limitado aos primeiros 25 caracteres: Programacao 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 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 Classes em C++A variável
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 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 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.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 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
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.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
bbc^ZNumero de alunos que receberam cada um dos conceitos: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