1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
#include <iostream>
#include <cmath>
using namespace std;
class Par {
private:
double left;
double right;
public:
Par() {left = 0; right = 0;}
Par(double l, double r) {left = l; right = r;}
void set_left(double n) {left = n;}
void set_right(double n) {right = n;}
double get_left() const {return left;}
double get_right() const {return right;}
virtual void print() const {
cout << "(" << get_left() << "," << get_right() << ")" << endl;}
};
class Ponto: public Par {
public:
Ponto():Par() {};
Ponto(double x, double y):Par(x,y) {};
void set_abc(int x) {set_left(x);}
void set_ord(int y) {set_right(y);}
double get_abc() {return get_left();}
double get_ord() {return get_right();}
virtual void print() const {
cout << "(" << get_left() << "," << get_right() << ")" << endl;}
};
template <class C, int I>
class Pilha
{
private:
typedef struct pilha_node
{
C elem;
struct pilha_node * next;
} Pilha_node, * Pilha_node_ptr;
Pilha_node_ptr pilha;
public:
Pilha() {pilha = NULL; count = 0;}
int count;
virtual C pop(){
if (pilha == NULL) {cout << " Pilha vazia " << endl;}
else {Pilha_node_ptr aux = pilha;
pilha = pilha -> next;
delete aux;
count = count--;
}
};
void push(C &i)
{
Pilha_node_ptr aux = new Pilha_node;
aux -> elem = i;
aux -> next = pilha;
pilha = aux;
count = count++;
};
virtual void printpilha() const
{
Pilha_node_ptr aux = pilha;
while (aux != NULL)
{aux -> elem.print();
aux = aux -> next;}
};
};
int main()
{
int j = 1;
int k = 1;
int l = 1;
double a, b;
double x, y;
int count = 0;
Pilha<Par, 10> pp;
while (j != 0) {
cout << " Escolha se pretende inserir ou retirar um objecto da pilha: " << endl;
cout << " 1. Inserir " << endl;
cout << " 2. Retirar " << endl;
cout << " 0. Saída " << endl;
cin >> j;
if (j == 1) {if (count > 10) {cout << "Pilha cheia." << endl;} else {
cout << " Escolha o tipo de objecto que pretende inserir: " << endl;
cout << " 1. Objecto da classe Par " << endl;
cout << " 2. Objecto da classe Ponto " << endl;
cout << " 0. Saída " << endl;
cin >> k;
switch(k) {
case 1: {cout << " Introduza o elemento da esquerda do par: ";
cin >> a;
cout << " Introduza o elemento da direita do par: ";
cin >> b;
Par p(a,b);
pp.push(p);
pp.printpilha();
cout << " Para continuar carregue numa tecla numérica. ";
cin >> l;
break;}
case 2: {cout << " Introduza a abcissa do ponto: ";
cin >> x;
cout << " Introduza a ordenada do ponto: ";
cin >> y;
Ponto q(x,y);
pp.push(q);
pp.printpilha();
cout << " Para continuar carregue numa tecla numérica. ";
cin >> l;
break;}
j = 0;}
};}
if (j == 2) {
pp.pop();
pp.printpilha();
cout << " Para continuar carregue numa tecla numérica. ";
cin >> l;
break;
j = 0;}
if (j == 0) {cout << "Obrigado" << endl;}
};
}; |
Partager