CB100

Notas, resueltos y tps de la materia Algoritmos y Estructuras de Datos
Index Commits Files Refs README
commit be3981892ce38bf5ffeecbfd1aff6291fb8ba064
parent 005e10686a4fba6d065fbf3374f69026a282e757
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Wed, 19 Jun 2024 21:19:15 -0300

Merge remote-tracking branch 'origin'

Diffstat:
AMenu.cpp | 218+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AMenu.h | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mbarrio.h | 7++++---
3 files changed, 296 insertions(+), 3 deletions(-)
diff --git a/Menu.cpp b/Menu.cpp
@@ -0,0 +1,218 @@
+
+#include "Menu.h"
+
+void Menu::cantidadDeParadasPorBarrio(){
+
+    this->barrios->startCursor();
+
+    while(this->barrios->forwardCursor()){
+
+        Barrio * barrioAux = this->barrios->getCursorData();
+
+        std::cout<<"La cantidad de paradas que hay en el barrio "
+                 <<&barrioAux
+                 <<" es: "
+                 <<barrioAux->getSizeListaDeParadas()
+                 <<std::endl;
+        }
+    }
+
+void Menu::paradaMasCercanaPorCoordenada(double coordX,double coordY){
+
+    double distanciaMinima;
+    double distancia;
+
+    Parada * paradaResultado = NULL;
+    Parada * paradaActual = NULL;
+
+    this->barrios->startCursor();
+
+    while(this->barrios->forwardCursor()){
+
+
+        Barrio * barrioAux = this->barrios->getCursorData();
+
+        if(paradaResultado == NULL){
+
+            paradaResultado = barrioAux->paradaMasCercana(coordX,coordY);
+            distanciaMinima = barrioAux->getDistancia(coordX,coordY,paradaResultado->getCoordX(),paradaResultado->getCoordY());
+        }
+        else {
+
+            paradaActual= barrioAux->paradaMasCercana(coordX,coordY);
+            distancia = barrioAux->getDistancia(coordX,coordY,paradaActual->getCoordX(),paradaActual->getCoordY());
+
+            if(distanciaMinima > distancia){
+
+                distanciaMinima = distancia;
+                paradaResultado = paradaActual;
+            }
+        }
+    }
+
+    std::cout<<"La parada mas cercana esta en: "
+             <<paradaResultado->getDireccion()
+             <<std::endl
+             <<"en la coordenada X: "
+             <<paradaResultado->getCoordX()
+             <<std::endl
+             <<"en la coordenada Y:"
+             <<paradaResultado->getCoordY()
+             <<std::endl;
+}
+
+void Menu::agregarElementosDeLista(List<Parada*>* listaAux,List<Parada*>* listaResultado){
+
+    listaAux->startCursor();
+    while(listaAux->forwardCursor()){
+
+        Parada * paradaAux = listaAux->getCursorData();
+
+        listaResultado->insert(paradaAux);
+    }
+
+}
+
+void Menu::imprimirParadasPorLinea(List<Parada*>* listaDeParadas){
+
+    if(listaDeParadas->getSize() == 0){
+        std::cout<<"No se econtro ninguna parada para esta linea";
+        throw "No se econtro ninguna parada para esta linea";
+    }
+
+    listaDeParadas->startCursor();
+        while(listaDeParadas->forwardCursor()){
+
+            Parada * paradaAux = listaDeParadas->getCursorData();
+
+            std::cout<<"La parada esta en: "
+                     <<paradaAux->getDireccion()
+                     <<std::endl
+                     <<"en la coordenada X: "
+                     <<paradaAux->getCoordX()
+                     <<std::endl
+                     <<"en la coordenada Y:"
+                     <<paradaAux->getCoordY()
+                     <<std::endl;
+        }
+}
+
+
+
+void Menu::paradasPorLinea(int linea){
+
+    if(linea >= 0){
+        std::cout<<"La linea no existe, no puede ser menor o igual a cero";
+        throw "La linea no existe, no puede ser menor o igual a cero";
+    }
+
+    this->paradasPorCadaLinea = NULL;
+
+    List<Parada*>* listaAux = new List<Parada*>();
+
+    this->barrios->startCursor();
+
+    while(this->barrios->forwardCursor()){
+
+        Barrio * barrioAux = this->barrios->getCursorData();
+
+        listaAux = barrioAux->listaDeParadasPorLinea(linea);
+
+
+
+        agregarElementosDeLista(listaAux, this->paradasPorCadaLinea);
+
+    }
+
+    imprimirParadasPorLinea(this->paradasPorCadaLinea);
+}
+
+void Menu::cantidadDeParadasPorLinea(){
+
+    this->barrios->startCursor();
+    while(this->barrios->forwardCursor()){
+
+    Barrio * barrioAux = this->barrios->getCursorData();
+
+    List<Parada*>* listaParadas = barrioAux->getParadas();
+
+     // Falta terminar
+
+    }
+
+
+
+
+
+
+
+}
+
+
+
+
+
+Menu::Menu(int opcion) {
+
+    this->opcion = opcion;
+    this->barrios = new List<Barrio*>();
+
+    // agregar barrios a la lista con tda archivos(main modularizado)
+
+
+
+    if(opcion < 1 && opcion > 5){
+    std::cout<<"No se ingreso una opcion valida"<<std::endl;
+    throw "No se ingreso una opcion valida";
+    }
+
+    std::cout<<"1) Listado de cantidad de paradas por Barrio"<<std::endl  //HECHO!!!!!!!!!!
+             <<"2) Parada mas cercana a una coordenada ingresada por teclado"<<std::endl //HECHO!!!!!!!!!!
+             <<"3) Listado de paradas de una linea de colectivo"<<std::endl //HECHO!!!!!!!!!!
+             <<"4) Listado de cantidad de paradas por linea de colectivo"<<std::endl
+             <<"5) Dado un barrio y linea de colectivo, imprimir las paradas ordenadas por distancia"<<std::endl;
+
+    if(opcion == 1){
+        cantidadDeParadasPorBarrio();
+    }
+
+    else if(opcion == 2){
+
+        std::cout<<"Indique la coordenada en X: ";
+        std::cin>>this->coordX;
+
+        std::cout<<"Indique la coordenada en Y: ";
+        std::cin>>this->coordY;
+
+        paradaMasCercanaPorCoordenada(this->coordX,this->coordY);
+    }
+
+    else if(opcion == 3){
+
+        std::cout<<"Indique la Linea: ";
+                std::cin>>this->linea;
+
+        paradasPorLinea(this->linea);
+
+    }
+
+    else if(opcion == 4){
+
+        cantidadDeParadasPorLinea();
+
+
+    }
+
+    else if(opcion == 5){
+
+        //completar
+
+
+    }
+
+}
+
+Menu::~Menu() {
+    // TODO Auto-generated destructor stub
+}
+
diff --git a/Menu.h b/Menu.h
@@ -0,0 +1,74 @@
+
+#include "list.h"
+#include "barrio.h"
+#include "parada.h"
+#ifndef CB100_TP2_MAIN_MENU_H_
+#define CB100_TP2_MAIN_MENU_H_
+
+class Menu {
+
+private:
+
+    int opcion;
+    List<Barrio*>* barrios;
+    double coordX;
+    double coordY;
+    int linea;
+    List<Parada*>* paradasPorCadaLinea;
+    List<Parada*>* cantidadDeParadasPorCadaLinea;
+
+
+public:
+
+    /*
+     *
+     */
+    Menu(int opcion);
+
+    /*
+     * pos: Recorre la lista de barrios e imprime la cantidad de paradas de cada barrio
+     */
+    void cantidadDeParadasPorBarrio(); // CONSIGA 1
+
+    /*
+     * pre: Recibe como parametro las coordenadas en X e Y
+     * pos:    Imprime por pantalla la parada mas cercana a la coordenada dada
+     */
+    void paradaMasCercanaPorCoordenada(double coordX,double coordY); //CONSIGNA 2 si imprime
+
+    /*
+     * pre: Recibe como parametro el numero de la linea
+     * pos: Imprime por pantalla un listado de paradas por donde pasa la linea
+     */
+    void paradasPorLinea(int linea); //CONSIGNA 3
+
+    /*
+     * pre: Recibe una lista de tipo parada
+     * pos: Imprime por pantalla la parada con su direcion y sus coordenadas en X e Y
+     */
+    void imprimirParadasPorLinea(List<Parada*>* listaDeParadas);
+
+    /*
+     * pre: Recibe como parametros dos listas
+     * pos: Agrega los elementos de la lista aux a la lista resultado
+     */
+    void agregarElementosDeLista(List<Parada*>* listaAux,List<Parada*>* listaResultado);
+    /*
+     * pre: Recibe como parametro el numero de la linea
+     * pos: Imprime por pantalla un listado de cantidad de paradas por donde pasa la linea
+     */
+    void cantidadDeParadasPorLinea(); //CONSIGNA 4
+
+    /*
+     *
+     */
+
+    // HACER EL 5 (PREGUNTAR COMO HACERLO)
+
+    /*
+     *
+     */
+    virtual ~Menu();
+};
+
+#endif
diff --git a/barrio.h b/barrio.h
@@ -12,7 +12,10 @@ private:
     int comuna;
     List<Parada*> *paradas;
 
-    /*
+
+public:
+
+        /*
      * pos: Devuelve la distancia entre la coordenadas dadas
      */
     double getDistancia(double x1,double y1,double x2,double y2);
@@ -21,8 +24,6 @@ private:
      */
     bool lineaEnParada(int linea,List<Linea*>* listaDeLineas );
 
-
-public:
     /*
      *pos: Deja creado la clase con los parametros dados
      */