Progressió en una cursa ciclista

Al final d’aquest enunciat hi podeu trobar un programa a mig fer que haureu de completar. Concretament, hi han dues funcions que estan pendents d’implementar. A continuació us expliquem amb quines dades treballa el programa i què han de fer aquestes funcions.

El programa treballa amb un tipus de dada Cyclist, que representa un ciclista que participa en una carrera, que inclou el nom del ciclista, la seva posició actual i la seva velocitat actual. Per simplificar, utilitzem variables enteres enlloc de reals.

struct Cyclist {
  string name;
  int position;
  int velocity;
};

El programa també treballa amb un tipus de dada ListCyclists, que representa una llista de ciclistes:

typedef vector<Cyclist> ListCyclists;

Haureu d’implementar una funció que rep una llista de ciclistes i un temps transcorregut, i ha d’actualitzar la posició de tots els ciclistes afegint-los-hi la seva velocitat multiplicada per aquest temps transcorregut. Si algú vol pensar en termes d’unitats específiques, us podeu imaginar que la posició és en metres, el temps en segons, i la velocitat en metres per segon.

void progressCyclists(int time, ListCyclists &listcyclists)

A més a més, haureu d’implementar una funció que rep dos ciclistes i retorna cert si el primer ciclista és menor que el segon d’acord al criteri que descrivim seguidament. Un ciclista és menor que un altre si està en una posició estrictament menor que l’altre, o està a la mateixa posició que l’altre i té estrictament menys velocitat, o està a la mateixa posició i té la mateixa velocitat que l’altre però el seu nom és menor que el nom de l’altre en ordre lexicogràfic.

bool smallerCyclist(Cyclist c1, Cyclist c2)

La funció anterior es fa servir des d’un altre lloc del programa per a ordenar tots els ciclistes.

Completeu el següent codi a mig per per tal de solucionar l’exercici:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

// Here you can add more includes if you wish.
// ...

using namespace std;

struct Cyclist {
  string name;
  int position;
  int velocity;
};

typedef vector<Cyclist> ListCyclists;

// Auxiliary functions (you can add more functions if you wish)

// Pre:  
// Post: Prints all cyclists from first to last, one per line, and with the format:
//       name position velocity
void printCyclists(const ListCyclists &listcyclists)
{
  for (int i = 0; i < int(listcyclists.size()); i++) {
    const Cyclist &c = listcyclists[i];
    cout << c.name << " " << c.position << " " << c.velocity << endl;
  }
}

// Pre:  variable 'time' is strictly positive and represents a time elapsed.
// Post: All positions of cyclists in listcyclists have been updated
//       according to the given time elapsed and their corresponding velocity.
void progressCyclists(int time, ListCyclists &listcyclists)
{
  // Implement this function.
  //...
}

// Pre:  c1, c2 represent correct cyclists.
// Post: Returns true iff one of the following conditions holds:
//         - position of c1 is strictly smaller than position of c2.
//         - c1 and c2 have same position but velocity of c1 is strictly smaller than velocity of c2.
//         - c1 and c2 coincide in position and velocity, but c1 has smaller name than c2.
bool smallerCyclist(Cyclist c1, Cyclist c2)
{
  // Implement this function.
  //...
}

int main()
{
  int n;
  cin >> n;
  ListCyclists listcyclists(n);
  for (int i = 0; i < n; i++) {
    Cyclist &c = listcyclists[i];
    cin >> c.name;
    c.position = 0;
    c.velocity = 0;
  }
  string command;
  while (cin >> command) {
    if (command == "UPDATEVELOCITY") {
      int i, velocity;
      cin >> i >> velocity;
      listcyclists[i].velocity = velocity;
    } else if (command == "SORT") {
      sort(listcyclists.begin(), listcyclists.end(), smallerCyclist);
    } else if (command == "PRINT") {
      cout << "Current list cyclists:" << endl;
      printCyclists(listcyclists);
      cout << endl;
    } else if (command == "PROGRESSCYCLISTS") {
      int time;
      cin >> time;
      progressCyclists(time, listcyclists);
    }
  }
}

Entrada

La entrada consisteix en una llista de comandes per a actualitzar la velocitat d’un ciclista, ordenar-los, escriure’ls tots, i fer progressar tots els ciclistes. No us n’heu de preocupar massa perquè el main que us donem ja s’encarrega de llegir les comandes i cridar a les corresponents funcions.

Sortida

La sortida mostra els resultats de les comandes. No us n’heu de preocupar massa perquè el main que us donem ja s’encarrega de produïr aquesta sortida cridant a les corresponents funcions.

Informació del problema

Autoria: PRO1

Generació: 2026-01-25T22:06:54.752Z

© Jutge.org, 2006–2026.
https://jutge.org