Linguagens de Programação - GTA / COPPE / UFRJmiguel/docs/lingprog/aula5.pdf · Linguagens de...

Post on 17-Dec-2018

223 views 1 download

Transcript of Linguagens de Programação - GTA / COPPE / UFRJmiguel/docs/lingprog/aula5.pdf · Linguagens de...

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