1
votes

Programme de vérification de la destination de vol - C ++

J'essaye de résoudre la question suivante:

Ecrire un programme, qui sera obtenu de l'utilisateur

  1. le nombre de vols (N)
  2. la destination du train (ville)
  3. le numéro de train pour une certaine destination (numéro)
  4. le nom de la ville de destination souhaitée, pour laquelle nous recherchons des trains possibles. Le programme doit trouver et afficher tous les nombres de trains qui vont à la destination souhaitée. S'il n'y a pas de tel train, le programme doit afficher "Ville inaccessible!" .

Maintenant, le problème est que j'ai écrit un code qui trouve ce numéro de train, mais pas les numéros de tous les trains, il ne peut pas afficher tous les numéros de train allant au point de destination souhaité.

C'est-à-dire si j'entre les données suivantes:

#include <iostream>
#include <string>
using namespace std;

class MyClass {  
    
  public:      
  
    string city;      
    string number;  
    
};

int main() {
    
    int N;
    cin >> N;
        
  MyClass myObj;  
  
 for (int i=0; i<N; i++){
     cin>>myObj.city;
     cin>>myObj.number;
 }
 string destination;
 cin >> destination;
     if(myObj.city==destination){
         cout << myObj.number;
     }
     else{
         cout << "Unreachable city!";
     }
  return 0;
}

Il ne me montre que le dernier numéro de train A-465 , alors que la bonne réponse serait: I -789 J-159 A-465

3
Chicago I-789
Chicago J-159
Chicago A-465
Chicago


8 commentaires

Vous devez probablement commencer par std :: vector myDestinationArray;


Vous n'avez qu'un seul objet et qui a un ensemble singulier de valeurs. Y a-t-il une raison pour laquelle vous pensiez pouvoir stocker plusieurs valeurs de cette façon?


@crashmstr en fait, je ne sais pas comment stocker plusieurs objets dans un tel code?


Once utilisera généralement un std :: vector pour une collection de données. Vous devriez probablement envisager un bon livre ou un cours en ligne en C ++, car on devrait vous enseigner ces concepts.


Oui, le problème est que je dois écrire mes devoirs jusqu'à demain et que je ne comprends toujours pas en quoi les vecteurs et les tableaux diffèrent. C ++ est beaucoup plus difficile que python.


Il y a un exemple sur la façon de placer des éléments dans un vecteur au bas de ceci: https: //en.cppreference.com/w/cpp/container/vector


Cette réponse peut vous aider: https://stackoverflow.com/a/27554323/487892


En supposant que vous ayez déjà couvert les tableaux, alors ce serait une façon de le faire (pas une méthode C ++ moderne, mais une façon). À tout le moins, votre enseignant ou votre matériel devrait déjà avoir couvert les informations dont vous avez besoin pour terminer le devoir (sinon, ils ne font pas un bon travail d'enseignement).


3 Réponses :


1
votes

Premièrement, myObj n'est pas un bon nom, changeons-le en une liste vide de destinations.

MyClass(string _c, string _n) : city(_c), number(_n) {};
...
string city, number;
cin >> city;
cin >> number;
destinations.pushback(MyClass(city, number));

Ensuite, poussez chaque nouvelle valeur dans le vecteur. Pour cela, il serait préférable d'avoir un constructeur qui définit les valeurs. Construire une destination sans valeur est inutile.

#include <vector>
...
vector <MyClass> destinations;

Vous pouvez maintenant écrire vos boucles pour parcourir le vecteur à la recherche des données dont vous avez besoin.


2 commentaires

Merci. Mais je n'ai pas trouvé exactement où mettre ces extraits de code. Pouvez-vous préciser quelles pièces dois-je remplacer?


Ce code est un exemple que vous devez lire et comprendre. Il répond à votre question initiale. C'est à vous de faire vos devoirs.



1
votes

Sur votre commentaire:

C ++ est beaucoup plus difficile que python.

Les langages de programmation ne sont que des outils. Vous les utilisez pour résoudre un problème. Si vous ne savez pas comment utiliser un outil, vous ne pouvez pas résoudre le problème. Votre ordinateur est un outil, si vous ne savez pas comment vous en servir, vous ne pouvez pas faire vos devoirs. Cela ne veut pas dire que les ordinateurs sont difficiles à utiliser. De même, C ++ est un outil, si vous ne le connaissez pas, cela ne veut pas dire que c'est difficile.

Passons au problème.

Le problème

Le programme devrait trouver et afficher tous les nombres de trains qui vont à la destination voulue. S'il n'y a pas de tel train, le programme doit afficher "Ville inaccessible!".

Décomposons-le

  • En lisant attentivement le problème, nous pouvons voir qu'il n'y a pas qu'un "seul" train mais plusieurs "trains".
  • Nous devons prendre en compte les commentaires de l'utilisateur (destination souhaitée)
  • Ensuite, nous devons trouver "tous" les "trains" qui vont dans cette ville.
  • Si aucun train n'a été trouvé, nous affichons "Ville inaccessible!"

Le problème avec votre code

Le problème avec votre code est qu'il n'y a qu'un "train":

class Train {  
  public:      
    string destination;      
    string number;  
};

Vous continuez à écraser ses valeurs à chaque fois que vous recevez des commentaires de l'utilisateur.

Apprendre l'outil

Alors, que pouvez-vous faire pour résoudre ce problème? En programmation, lorsque nous voulons stocker plusieurs valeurs du même objet, nous créons généralement un tableau. Un tableau est simplement une collection de valeurs d'un type. Exemple:

class Train {};

Les index de tableau commencent à 0 . Nous pouvons stocker des valeurs dans un tableau comme suit:

class MyClass 

Vous pouvez également stocker des valeurs directement:

//create a vector, with size = N
vector <MyClass> Trains (N);

//take input from user
for (int i=0; i<N; i++){
  cin >> Trains[i].city;
  cin >> Trains[i].number;
} 

C'est bien beau et très bien cependant il y a un petit problème avec les tableaux. Nous devons connaître la "taille" du tableau avant de le créer.

#include <vector> // you need this for vector
int N;
cin >> N;
std::vector <int> myvector(N); //vector of size N

//access the values as you would with the array
myvector[0] = 10;
myvector[5] = 9; //WRONG. 

Alors, que devons-nous faire? Nous ne pouvons pas connaître le nombre d'objets que nous voulons toujours. Ne vous inquiétez pas, car C ++ nous fournit un joli conteneur: std :: vector qui peut être utilisé pour résoudre ce problème.

int N;
cin >> N;
int array[N]; //WRONG, even it works, this is wrong.

Résoudre votre problème

Notez que je ne vais pas vous donner directement la solution, mais je vais vous montrer le chemin et vous donner les outils. C'est votre problème, c'est votre défi, et si vous essayez, il est assez facile de résoudre le problème.

Nous avons donc appris les vecteurs et les tableaux. Ensuite, vous vous demandez peut-être comment créer un vecteur pour votre type. Simple:

int myarray[5] = {1, 2, 3, 4, 5};
cout << myarray[3]; // prints "4"

La dernière partie sera assez similaire. Vous avez besoin d'une boucle, puis parcourez toutes les valeurs du vecteur pour trouver les "destinations" que vous voulez.


Note d'accompagnement

Vous devriez commencer par nommer vos objets et variables de manière à ce qu'il vous soit facile et naturel de réfléchir à votre problème. Par exemple:

cin >> myarray[0];  //take input from user and store it into the "first" place in our array
cin >> myarray[1]; //store in the "second" place
cin >> myarray[4]; //store in the "last" place
cin >> myarray[5]; //WRONG! Don't do this. It will result in errors and bugs!! (Undefined Behaviour)

Cela ne dit à personne, rien sur votre classe ou ce que vous voulez en faire. Quel pourrait être un meilleur nom pour cela? En regardant le problème, je suggère le nom Train:

int myarray[5]; //can store 5 "int" values
                //size is given inside the [] (square brackets)

Le problème nous dit aussi que chaque train a une "ville de destination" et un " numéro de train ". Nous pouvons refactoriser notre classe Train pour contenir ce qui suit:

  MyClass myObj;  //one object only


6 commentaires

Merci beaucoup!!!! J'ai écrit un nouveau code que je poste ici. Maintenant, cela fonctionne correctement mais ajoute malheureusement toujours "Ville inaccessible!" à la fin de la liste des trains corrects: (((


Je ne peux pas dire quel est le problème sans voir votre code


Je l'ai posté ci-dessous :)


Ne fais pas ça. À la place, modifiez votre question et publiez-y le nouveau code en tant que mise à jour . Les réponses sont pour répondre à la question :)


Votre code ne fonctionne pas car vous vérifiez si une ville existe pour toutes les villes, et si ce n'est pas le cas, vous imprimez immédiatement «Inaccessible». Tu ne veux pas faire ça. Au lieu de cela, supprimez l'autre partie. Utilisez une variable booléenne, bool cityFound . Si vous trouvez la ville, définissez-la sur true dans votre condition if . Lorsque votre boucle se termine, si la variable cityFound est toujours false , cela signifie que la ville n'a pas été trouvée et vous pouvez imprimer "Inaccessible" une seule fois :)


Si votre problème est résolu, et si ma réponse est bonne, vous pouvez «l'accepter» :)



0
votes
    #include <iostream>
#include <string>
using namespace std;
#include <vector> // you need this for vector

class Train {  
  public:      
    string city;      
    string number;  
};

int main(){
int N;
cin >> N;
string dest;
vector <Train> Trains (N);
int i;

//take input from user
for (i=0; i<N; i++){
  cin >> Trains[i].city;
  cin >> Trains[i].number;
} 
   cin >> dest;
for(i=0; i<Trains.size(); i++){
  if(Trains[i].city==dest){
     
    cout << Trains[i].number <<" ";
}
else{
    cout << "Unreachable city!";
}
}
}
Now it is always printing Unreachable city next to right results :(

0 commentaires