CB100

Notas, resueltos y tps de la materia Algoritmos y Estructuras de Datos
Index Commits Files Refs README
tps/2/barrio.cpp (2902B)
   1 #include "barrio.h"
   2 #include <cmath>
   3 
   4 Barrio::Barrio(std::string nombre) {
   5     this->nombre = nombre;
   6     this->paradas = new List<Parada*>; // crea la lista para las paradas
   7 }
   8 
   9 std::string Barrio::getNombre() {
  10     return this->nombre;
  11 }
  12 
  13 List<Parada*> *Barrio::getParadas() {
  14     return this->paradas;
  15 }
  16 
  17 void Barrio::addParada(std::string calle,
  18         std::string direccion,
  19         double coordX, double coordY, std::vector<int> lineas) {
  20 
  21     this->paradas->insert(new Parada(calle, direccion, coordX, coordY, lineas));
  22 }
  23 
  24 int Barrio::getSizeListaDeParadas() {  // CONSIGNA 1
  25     return this->paradas->getSize();
  26 }
  27 
  28 double Barrio::getDistancia(double x1,double y1,double x2,double y2){ //CONSIGAN 2
  29     double dX = (x2 - x1);
  30     double dY = (y2 - y1);
  31 
  32     return std::sqrt(dX*dX + dY*dY);
  33 }
  34 
  35 // lon -> X; lat -> Y;
  36 Parada *Barrio::paradaMasCercana(double lon, double lat) { //CONSIGNA 2
  37     double distancia;
  38     double distanciaMin;
  39 
  40     Parada *resultado, *aux;
  41 
  42     resultado = aux = NULL;
  43 
  44     this->paradas->startCursor();
  45     while(this->paradas->forwardCursor()){
  46         aux = this->paradas->getCursorData();
  47 
  48         if(resultado == NULL) {
  49             resultado = aux;
  50             distanciaMin = getDistancia(lon, lat, aux->getCoordX(), aux->getCoordY());
  51         }
  52         else {
  53             distancia = getDistancia(lon, lat, aux->getCoordX(),aux->getCoordY());
  54 
  55             if(distancia < distanciaMin) {
  56                 resultado = aux;
  57                 distanciaMin = distancia;
  58             }
  59         }
  60     }
  61 
  62     return resultado;
  63 }
  64 
  65 bool Barrio::lineaEnParada(int linea, std::vector<int> *listaDeLineas) { //CONSIGNA 3
  66     if(listaDeLineas == NULL) {
  67         return false;
  68     }
  69 
  70     for(size_t i = 0; i < listaDeLineas->size(); ++i) {
  71         if((*listaDeLineas)[i] == linea) {
  72             return true;
  73         }
  74     }
  75 
  76     return false;
  77 }
  78 
  79 List<Parada*> *Barrio::listaDeParadasPorLinea(int linea) { //CONSIGNA 3
  80     Parada *parada;
  81     List<Parada*> *resultado;
  82     std::vector<int> *listaDeLineas;
  83 
  84     resultado = new List<Parada*>;
  85 
  86     this->paradas->startCursor();
  87     while(this->paradas->forwardCursor()){
  88         parada = this->paradas->getCursorData();
  89         listaDeLineas = parada->getLineas();
  90 
  91         if(lineaEnParada(linea, listaDeLineas)) {
  92             resultado->insert(parada);
  93         }
  94     }
  95 
  96     if(resultado->getSize() == 0) {
  97         delete resultado;
  98         return NULL;
  99     }
 100 
 101     return resultado;
 102 }
 103 
 104 unsigned int Barrio::getCantidadDeParadasPorLinea(int linea) { //CONSIGNA 4
 105     Parada *parada;
 106     unsigned int cantidadDeParadas;
 107 
 108     cantidadDeParadas = 0;
 109 
 110     this->paradas->startCursor();
 111     while(this->paradas->forwardCursor()) {
 112         parada = this->paradas->getCursorData();
 113         for(size_t i = 0; i < parada->getLineas()->size(); ++i) {
 114             if((*parada->getLineas())[i] == linea) {
 115                 cantidadDeParadas++;
 116             }
 117         }
 118     }
 119 
 120     return cantidadDeParadas;
 121 }
 122 
 123 Barrio::~Barrio() {
 124     Parada *delParada;
 125 
 126     this->paradas->startCursor();
 127     while(this->paradas->forwardCursor()){
 128         delParada = this->paradas->getCursorData();
 129         // std::cout << "Eliminando parada `" << delParada->getDireccion() << "`\n";
 130         delete delParada;
 131     }
 132 
 133     delete this->paradas;
 134 }