Kimossab

TAP - Freq 2011

Jan 8th, 2015
369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.42 KB | None | 0 0
  1. //Toda a resolução não é única e pode não ser, digamos o mais eficiente/efetivo, por isso não pensem que com isto tirariam 20 pois eu próprio dúvido
  2. //1 se nao for possivel usar o string usem o char * que está em comentários
  3. //a
  4.  
  5. class Veiculo
  6. {
  7.     std::string matricula; //char *matricula
  8.     std::string marca; //char *marca
  9.     public:
  10.         Veiculo()
  11.         {
  12.             matricula=""; //matricula = NULL;
  13.             marca=""; //marca = NULL;
  14.         }
  15.         Veiculo(std::string mat, std::string mar) //Veiculo(char *mat, char *mar)
  16.         {
  17.             matricula = mat;
  18.             marca = mar;
  19.         }
  20.         ~Veiculo() {}
  21.         //b
  22.         string GetMarca()
  23.         {
  24.             return marca;
  25.         }
  26.         string GetMatricula()
  27.         {
  28.             return matricula;
  29.         }
  30.         bool operator==(Veiculo &V)
  31.         {
  32.             return (matricula == V.GetMatricula() && marca == V.GetMarca()); //return (!strcmp(matricula,V.GetMatricula()) && !strcmp(marca,V.GetMarca()));
  33.         }
  34. };
  35.  
  36. //c
  37. //Pressupostos: Veiculo::SetMat(string mat); < muda a matricula do Veiculo;
  38. //Veiculo::SetMarca(string mar); < muda a marca do Veiculo;
  39. #include <string>
  40. #include <stdio.h>
  41. #include <iostream>
  42.  
  43. using namespace std;
  44.  
  45. void main()
  46. {
  47.     int nv;
  48.     cout << "Insira o número total de veiculos: " << endl;
  49.     cin >> nv;
  50.  
  51.     Veiculo *V = new Veiculo[nv];
  52.  
  53.     string buff="";
  54.  
  55.     for(int i=0; i<nv; i++)
  56.     {
  57.         cout << "Insira a matricula do veiculo " << i << ": " << endl;
  58.         cin >>  buff;
  59.         V[i].SetMat(buff);
  60.         cout << "Insira a marca do veiculo " << i << ": " << endl;
  61.         cin >>  buff;
  62.         V[i].SetMar(buff);
  63.     }
  64.  
  65.     int iguais=0;
  66.  
  67.     for(int i=0; i<nv-1; i++)
  68.         for(int n=i+1; n<nv; n++)
  69.             if(V[i]==V[n])
  70.                 iguais++;
  71.  
  72.     cout << "Existem " << iguais << " Veiculos iguais." << endl;
  73.  
  74.     delete[] V;
  75. }
  76.  
  77. //2
  78. Lista<ArvBin<Veiculo>> LAV;
  79.  
  80. //3
  81. //a NOTA: Veiculo2 = Veiculo
  82. //http://i.imgur.com/PgpJIjZ.jpg
  83.  
  84. //b
  85. // "Maxima Altitude" > Veiculo_Aéreo
  86. // "Potencia do Motor" > Veiculo
  87. // "Comprimento minimo da pista de descolagem" > Avião
  88.  
  89. //4
  90. //Pressupostos:
  91. //template class NO<T> que é um nó de uma lista Lista<T>
  92. //data members:
  93. //  T *info;
  94. //  NO<T> *prox;
  95. //construtor do NO:
  96. //  NO<T>(T *A = NULL, NO<T> *p = NULL); < altera o info para A e prox para p
  97. //funções do NO:
  98. //  T *GetInfo(); < retorna info
  99. //  NO<T> *GetProx(); < retorna prox
  100. //  void SetProx(NO<T> *p); < muda o prox para p
  101. //  void SetInfo(T *i); < muda info para i
  102. //data members da lista:
  103. //  int nel; < numero de elementos da lista
  104. //  NO<T> *inicio; < NO do inicio da lista
  105. void Lista<T>::InsereApos(T *A, T *B)
  106. {
  107.     NO<T> *p=inicio;
  108.     while(p)
  109.     {
  110.         if(p==B)
  111.         {
  112.             NO<T> *novo = new NO<T>(A);
  113.             p->SetProx(novo);
  114.             novo->SetProx(p->GetProx());
  115.             nel++;
  116.             return;
  117.         }
  118.     }
  119.     p = new NO<T>(A);
  120.     nel++;
  121. }
  122.  
  123. //5
  124. void Lista<T>::Inverter()
  125. {
  126.     NO<T> *n = inicio, *ant = NULL, *aux;
  127.     while(n)
  128.     {
  129.         aux = n->GetProx();
  130.         n->SetProx(ant);
  131.         ant = n;
  132.         n=aux;
  133.     }
  134. }
  135.  
  136. //6
  137. //data members da arvore:
  138. //  Arvore<T> *esq;
  139. //  Arvore<T> *dir;
  140. //  T* info;
  141. int Arvore<T>::Contar(T *A)
  142. {
  143.     if(info == A) //se for igual a A
  144.     {
  145.         if(esq && dir) //se for igual a A e tiver esquerda e direita
  146.             return 1+esq.Contar(A)+dir.Contar(A);
  147.         if(esq) //se for igual a A e tiver esquerda
  148.             return 1+esq.Contar(A);
  149.         if(dir)//se for igual a A e tiver direita
  150.             return 1+dir.Contar(A);
  151.         return 1; //se nao tiver esquerda nem direita
  152.     }
  153.     if(esq && dir) //se for igual a A e tiver esquerda e direita
  154.         return esq.Contar(A)+dir.Contar(A);
  155.     if(esq) //se for igual a A e tiver esquerda
  156.         return esq.Contar(A);
  157.     if(dir)//se for igual a A e tiver direita
  158.         return dir.Contar(A);
  159.     return 0; //se nao tiver esquerda nem direita
  160. }
  161.  
  162. //7
  163. //sendo V um só ponteiro ao inseri-lo em 2 listas essas listas iram ter um elemento "em comum" (com o mesmo endereço)
  164. //o perigo é que se formos a eliminar a informação desse ponteiro numa das listas também é removido na outra e isso pode levar a erros nas listas
  165. //porque o ponteiro passa a apontar para NULL, ou seja deixa de conter a informação e os restantes elementos nao são alterados
  166. //uma solução: L1.Inserir(new Veiculo()); L2.Inserir(new Veiculo());
  167.  
  168. //8
  169. //Polimorfismo é usar usar uma class base numa outra class, por exemplo criar uma class Linha com a class ponto por base.
  170. //Isto faz com que a "nova" class tenha um ponteiro para a class base, ou seja, essa class pode aceder às variaveis/funçoes da class base que não sejam "private" ("public"/"protected")
  171. //deste modo pode-se criar variáveis e/ou funções gerais para todas as classes que tenham por base uma outra class, e usar as cariáveis comums.
  172. //exemplo:
  173. class pessoa
  174. {
  175.     protected:
  176.         int NIF;
  177.     public:
  178.         pessoa(int n=0)
  179.         {
  180.             NIF = n;
  181.         }
  182.         ~pessoa();
  183.         void SetNIF(int n)
  184.         {
  185.             NIF = n;
  186.         }
  187. };
  188. class professor : public pessoa
  189. {
  190.     string disciplina;
  191.     public:
  192.         professor()
  193.         {
  194.             NIF = 12345678;
  195.             disciplina = "Matemática";
  196.         }
  197. };
  198. class aluno : public pessoa
  199. {
  200.     int nota;
  201.     public:
  202.         aluno()
  203.         {
  204.             NIF = 12345679;
  205.             nota = 20;
  206.         }
  207. };
  208.  
  209. //9
  210. int Arvore<T>::ContarNT()
  211. {
  212.     if(esq && dir) //se tiver no esquerdo e direito
  213.         return esq.ContarNT() + dir.ContarNT();
  214.     if(!esq && !dir) //se nao tiver no esquerdo nem direito
  215.         return 1;
  216.     if(esq) //se houver no esquerdo (não há direito)
  217.         return esq.ContarNT();
  218.     return dir.ContarNT();
  219. }
  220.  
  221. //10
  222. void Arvore<T>::ColocarLista(Lista<T> *L)
  223. {
  224.     if(esq)
  225.         esq.ColocarLista(L);
  226.     if(dir)
  227.         dir.ColocarLista(L);
  228.  
  229.     NO<T> *aux = L->GetInicio();
  230.     L->SetInicio(info);
  231.     L->GetInicio()->SetProx(aux);
  232. }
Advertisement
Add Comment
Please, Sign In to add comment