1

Quiero que al final me imprima la provincia con su total de casos ordenados de manera descendente. Ahí está el código. No lo logro culminar con lo de las provincias.

Escriba el programa que almacene en un vector la cantidad de casos activos de Covid-19 por cada una de las 10 provincias. El programa debe ordenar el vector de manera que se pueda visualizar desde la provincia con la mayor cantidad de casos activos hasta la que tiene menor cantidad. Considere un vector para los nombres de las provincias. Utilizar el método de ordenamiento por inserción.

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

int i, j, ps, ax;
string ac;
int cas[10];
int x[10];

string prov[] = { "BOCAS DEL TORO", "COCLE", "CHIRRIQUI", "COLON", "DARIEN", "HERRERA", "LOS SANTOS", "PANAMA", "VERAGUAS", "PANAMA OESTE" };

int main()
{
    cout << "            [COMPROBADOR DE CASOS DE COVID-19 EN PANAMA]" << endl;
    cout << "\nIngrese los CASOS ACTIVOS por Provincia" << endl;

    for (i = 0; i < 10; i++)
    {
        cout << "Ingrese los CASOS ACTIVOS de " << prov[i] << ": ";
        cin >> cas[i];
    }

    for (i = 0; i < 10; i++)
    {
        ps = i;
        ax = cas[i];
        while ((ps > 0) && (cas[ps - 1] > ax))
        {
            cas[ps] = cas[ps - 1];
            ps--;
        }

        cas[ps] = ax;
    }

    for (= 0; i < 10; i++)
    {
        i = cas[i];
    }

    cout << "\n             [PROVINCIAS CASOS COVID-19]" << endl;

    for (i = 0; i < 10; i++) cout << prov[i] << ": ";
    for (i = 9; i >= 0; i--) cout << cas[i] << endl;

    system("pause");
    return 0;
}
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
  • Has los mismos swaps que haces con la cantidad de casos en los nombres. Puede que te venga bien considerar organizar los datos dentro de una clase o dentro de `std::pair`. – Pablochaches May 19 '21 at 20:03

1 Answers1

1

Tu código tal y como está, es difícil de leer, entender y mantener; esto se debe a las siguientes malas prácticas:

  • Variables globales: No debes usar variables globales a no ser que sea necesario, y en tu caso ciertamente no lo es. Lee este hilo para más detalles.
  • Variables alejadas de su punto de uso: Relacionado con lo anterior, se considera buena práctica que las variables estén lo más cercanas posible al lugar en que se usan, haciendo que sea más fácil ver su cometido.
  • Nombres confusos: El nombre de una variable debe darnos una idea de cuál pretende ser su uso y misión, en otras palabras: debe ser auto-explicativo; ninguno de los nombres que usaste cumple con esto.

Dejando de lado eso, si tienes datos que están lógicamente ligados (que tienen una lógica como conjunto) deberían formar parte del mismo objeto o conjunto lógico. En tu caso quieres "casos activos de Covid-19 por provincia" así que ambos datos (provincia y casos) están lógicamente ligados y no tienen sentido individualmente por lo que vale la pena que estén juntos:

struct dato
{
    std::string provincia;
    int casos;
};

Puedes declarar el estado inicial de las provincias como hacías antes, pero añadiendo los casos:

dato covid_provincias[10]
{
    {"BOCAS DEL TORO", 0},
    {"COCLE", 0},
    {"CHIRRIQUI", 0},
    {"COLON", 0},
    {"DARIEN", 0},
    {"HERRERA", 0},
    {"LOS SANTOS", 0},
    {"PANAMA", 0},
    {"VERAGUAS", 0},
    {"PANAMA OESTE", 0}
};

Después puedes usar cualquier algoritmo que gustes para ordenar los datos y mostrarlos así:

for (const auto &casos_provincia : covid_provincias)
{
    std::cout << casos_provincia.provincia << " = " << casos_provincia.casos << '\n';
}

Pero yo no reinventaría la rueda, usaría std::sort de <algorithm>:

std::sort(std::begin(covid_provincias), std::end(covid_provincias), [](auto a, auto b) { return a.casos > b.casos; });

Puedes ver el código funcionando en Try it online!.

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
  • Teniendo en cuenta que es alguien que está empezando, casi seguro que le ayudará aún más si le facilitas enlaces a documentación que explique el funcionamiento de std::sort() y la utilidad de std::begin() y std::end(). Ídem con la expresión lambda que realiza la comparación. – V.Lorz May 20 '21 at 09:50
  • La pregunta no va sobre el funcionamiento de `std::sort` (el nombre ya nos dice qué hace), `std::begin`, `std::end` o lambdas. Si el autor de la pregunta necesita más detalles al respecto creo que sería una idea estupenda que abriese una nueva pregunta sobre el tema para hablar sobre todos los detalles de los que tenga dudas. – PaperBirdMaster May 20 '21 at 10:37