commit 30221546cbefceebf24bcfb06d69d588d84aee33
parent e73627cda95a0aed32fc45cf287b2bef0e519f18
Author: Martin J. Klöckner <mjkloeckner@gmail.com>
Date: Mon, 17 Jun 2024 23:32:31 -0300
Merge pull request #8 from IgnacioCettour/main
actualización de consignas
Diffstat:
| M | barrio.cpp | | | 94 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- |
| M | barrio.h | | | 30 | +++++++++++++++++++++++++++++- |
| M | parada.cpp | | | 14 | +++++++------- |
| M | parada.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