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