CB100

Notas, resueltos y tps de la materia Algoritmos y Estructuras de Datos
Index Commits Files Refs README
commit 7a03f48d034679836139fa3af6d6f1dcf2ba2731
parent e73627cda95a0aed32fc45cf287b2bef0e519f18
Author: Ignacio Cettour <129465157+IgnacioCettour@users.noreply.github.com>
Date:   Mon, 17 Jun 2024 23:20:07 -0300

actualizacion de consginas!!!!

agregamos partes pequenias de las consignas 1,2,3,4
Diffstat:
Mbarrio.cpp | 94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Mbarrio.h | 30+++++++++++++++++++++++++++++-
Mparada.cpp | 14+++++++-------
Mparada.h | 8++++----
4 files changed, 132 insertions(+), 14 deletions(-)
diff --git a/barrio.cpp b/barrio.cpp
@@ -1,4 +1,5 @@
 #include "barrio.h"
+#include <cmath>
 
 Barrio::Barrio(std::string nombre, int comuna) {
     this->nombre = nombre;
@@ -21,9 +22,9 @@ List<Parada*> *Barrio::getParadas() {
 void Barrio::addParada(std::string calle,
         int alturaPlano,
         std::string direccion,
-        double coord_x, double coord_y) {
+        double coordX, double coordY) {
 
-    this->paradas->insert(new Parada(calle, alturaPlano, direccion, coord_x, coord_y));
+    this->paradas->insert(new Parada(calle, alturaPlano, direccion, coordX, coordY));
 }
 
 int Barrio::getSizeListaDeParadas(){  // CONSIGNA 1
@@ -31,6 +32,95 @@ int Barrio::getSizeListaDeParadas(){  // CONSIGNA 1
     return this->paradas->getSize();
 }
 
+double Barrio::getDistancia(double x1,double y1,double x2,double y2){ //CONSIGAN 2
+
+    double dX = (x2 - x1);
+    double dY = (y2 - y1);
+
+    return std::sqrt(dX*dX + dY*dY);
+
+}
+
+
+Parada * Barrio::paradaMasCercana(double coordX, double coordY){ //CONSIGNA 2
+
+    this->paradas->startCursor();
+    Parada * resultado = NULL;
+    double distancia;
+    double distanciaMinima;
+
+    while(this->paradas->forwardCursor()){
+
+        Parada * aux = this->paradas->getCursorData();
+
+        if(resultado == NULL){
+            resultado = aux;
+            distanciaMinima = getDistancia(coordX,coordY,aux->getCoordX(),aux->getCoordY());
+        }
+        else {
+
+            distancia = getDistancia(coordX,coordY,aux->getCoordX(),aux->getCoordY());
+
+            if(distancia < distanciaMinima){
+
+                resultado = aux;
+                distanciaMinima = distancia;
+            }
+
+        }
+
+    }
+    return resultado;
+
+}
+
+bool Barrio::lineaEnParada(int linea,List<Linea*>* listaDeLineas ){ //CONSIGNA 3
+
+    listaDeLineas->startCursor();
+
+    while(listaDeLineas->forwardCursor()){
+
+        Linea * lineaActual = listaDeLineas->getCursorData();
+
+        if(lineaActual->getNumero() == linea){
+            return true;
+        }
+    }
+    return false;
+}
+
+List<Parada*>* Barrio::listaDeParadasPorLinea(int linea){ //CONSIGNA 3
+
+    List<Parada*>* resultado = NULL;
+
+    this->paradas->startCursor();
+
+    while(this->paradas->forwardCursor()){
+
+        Parada * paradaActual = this->paradas->getCursorData();
+
+        List<Linea*>* listaDeLineas = paradaActual->getLineas();
+
+        if(lineaEnParada(linea, listaDeLineas)){
+
+            resultado->insert(paradaActual);
+        }
+
+
+    }
+
+    return resultado;
+}
+
+unsigned int Barrio::getCantidadDeParadasPorLinea(int linea){ //CONSIGNA 4
+
+    List<Parada*>* auxiliar = listaDeParadasPorLinea(linea);
+    return auxiliar->getSize();
+}
+
+
+
+
 Barrio::~Barrio() {
     delete paradas;
 }
diff --git a/barrio.h b/barrio.h
@@ -12,6 +12,16 @@ private:
     int comuna;
     List<Parada*> *paradas;
 
+    /*
+     * pos: Devuelve la distancia entre la coordenadas dadas
+     */
+    double getDistancia(double x1,double y1,double x2,double y2);
+    /*
+     * pos: Devuelve True si la linea se encuentra en listaDeLineas, sino devuelve False
+     */
+    bool lineaEnParada(int linea,List<Linea*>* listaDeLineas );
+
+
 public:
     /*
      *pos: Deja creado la clase con los parametros dados
@@ -40,13 +50,31 @@ public:
     /*
      * pos: Agrega una para nueva
      */
-    void addParada(std::string calle, int alturaPlano, std::string direccion, double coord_x, double coord_y);
+    void addParada(std::string calle, int alturaPlano, std::string direccion, double coordX, double coordY);
 
     /*
      * pos: Devuelve el numero total de paradas que hay en el barrio
      */
     int getSizeListaDeParadas(); //CONSIGNA 1
 
+    /*
+     * pre:
+     * pos: Devuelve la parada mas cercana a una coordenada dada
+     */
+    Parada * paradaMasCercana(double coordX, double coordY);
+
+    /*
+     * pre: Recibe el numero de una Linea
+     * pos: Devuelve una lista con todas las paradas del numero dado
+     */
+    List<Parada*>* listaDeParadasPorLinea(int linea);
+
+    /*
+     * pre: Recibe el numero de una linea
+     * pos:    Devuelve la cantidad de paradas por linea
+     */
+    unsigned int getCantidadDeParadasPorLinea(int linea);
+
 };
 
 #endif /* BARRIO_H_ */
diff --git a/parada.cpp b/parada.cpp
@@ -3,12 +3,12 @@
 Parada::Parada(std::string calle,
         int alturaPlano,
         std::string direccion,
-        double coord_x, double coord_y) {
+        double coordX, double coordY) {
 
     this->alturaPlano = alturaPlano;
     this->calle = calle;
-    this->coord_x = coord_x;
-    this->coord_y = coord_y;
+    this->coordX = coordX;
+    this->coordY = coordY;
     this->direccion = direccion;
     this->lineas = new List<Linea*>(); // crea la lista para las lineas
 }
@@ -25,12 +25,12 @@ std::string Parada::getDireccion() {
     return this->direccion;
 }
 
-double Parada::getCoord_X() {
-    return this->coord_x;
+double Parada::getCoordX() {
+    return this->coordX;
 }
 
-double Parada::getCoord_y() {
-    return this->coord_y;
+double Parada::getCoordY() {
+    return this->coordY;
 }
 
 List<Linea*> *Parada::getLineas() {
diff --git a/parada.h b/parada.h
@@ -11,7 +11,7 @@ private:
     std::string calle;
     int alturaPlano;
     std::string direccion;
-    double coord_x, coord_y;
+    double coordX, coordY;
     List<Linea*> *lineas;  // lineas que tienen sentido y numero
 
 public:
@@ -21,7 +21,7 @@ public:
     Parada(std::string calle,
             int alturaPlano,
             std::string direccion,
-            double coord_x, double coord_y);
+            double coordX, double coordY);
 
     /*
      * post: Devuelve el numero de la calle
@@ -41,12 +41,12 @@ public:
     /*
      * post: Devuelve la coordenada en X de la parada
      */
-    double getCoord_X();
+    double getCoordX();
 
     /*
      * post: Devuelve la coordenada en Y de la parada
      */
-    double getCoord_y();
+    double getCoordY();
 
     /*
      * post: Devuelve una lista con las lineas de esa parada