Os alunos no final das aulas 13 e 14 deverão conhecer:
const
em
classes:
Deverão também ser capazes de:
A aula destina-se também a resolver o Trabalho Final.
Caso os alunos sintam que os objectivos não foram atingidos na totalidade deverão concluir/repetir os exercícios desta aula autonomamente e ou recorrer aos horários de dúvidas.
O resumo da matéria abordada nesta aula prática pode ser consultado aqui.
1. Já terminou o Trabalho Final? Ainda não!? Do que está à espera?
2. Complete o TAD Complexo
apresentado no ficheiro complexo.C
(que se encontra no directório ~/IP/Aula13
) de modo a que seja possível utilizar os seguintes operadores sobre
números complexos: +=
, -=
, *=
,
/=
,
+
,
-
,
*
,
/
, ==
, !=
e >>
[este último tem um canal como primeiro operando]).
Relembra-se que a divisão de um número complexo (x
+ i y) / (w + i z) tem como resultado ((x ×
w
+ y × z) + i (y × w - x
× z)) / (w2 + z2).
3.a) Construa um TAD Mapa
que associe cadeias de caracteres
e inteiros associados. Cada cadeia de caracteres está associada a um e um
só inteiro. Este tipo poderia servir para guardar
nomes de variáveis e os respectivos valores numa calculadora.
A classe C++ Mapa
deve permitir as seguintes instruções:
Antes de escrever qualquer código em C++ pense nas operações que devem ser suportadas pelo novo tipo. Desenvolva esta classe da mesma forma que foi sugerida para o exercício das filas de espera, na Aula prática 10. Escreva um pequeno programa que faça uso do TAD desenvolvido.
Mapa variáveis(10); //
criação de um mapa em que as cadeias de caracteres estão associadas,
//
por omissão, ao valor inteiro 10.
variáveis.mudaValorDe("x", 2); //
associa o valor 2 à cadeia de caracteres "x" no mapa
//
de variáveis.
variáveis.mudaValorDe("y", 3);
variáveis.mudaValorDe("z", variáveis.valorDe("y"));
cout << variáveis.valorDe("x") << endl; //
mostra 2!
cout << variáveis.valorDe("y")<< endl
;
//
mostra 3!
cout << variáveis.valorDe("z")<< endl
;
//
mostra 3!
cout
<<
variáveis.valorDe("w") << endl; //
mostra 10!
Nota: Podem-se definir classes C++ dentro de outras classes C++ (chamam-se classes C++ embutidas). Considere a possibilidade de definir a estrutura (classe C++ com todos os membros públicos)
como membro privado da classe C++
struct Par {
string chave;
int valor;
};
Mapa
.
3.b) Modifique a classe C++ Mapa
sobrecarregando do operador []
de modo a permitir as seguintes instruções:
Mapa variáveis(10); //
criação de um mapa em que as cadeias de caracteres estão associadas,
//
por omissão, ao valor inteiro 10.
variáveis["x"] = 2;
variáveis["y"] = 3;
variáveis["z"] = variáveis["y"];
cout << variáveis["x"] << endl; //
mostra 2!mostra 3!
cout << variáveis["y"] << endl; //mostra 3!
cout << variáveis["z"] << endl; //
cout << variáveis["w"] << endl; //
mostra 10!
3.c) Substitua as utilizações da classe C++ Mapa
pela classe map<string, int>
na função main()
do seu programa de exemplo. Veja o exemplo no ficheiro mapa_de_digitos.C
(que se encontra no directório ~/IP/Aula13
) para verificar como funciona a classe modelo map
.