Optimiser conditions while
Fermé
Programath
Messages postés
5
Date d'inscription
jeudi 9 décembre 2021
Statut
Membre
Dernière intervention
17 décembre 2021
-
Modifié le 25 janv. 2022 à 17:15
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 25 janv. 2022 à 17:33
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 25 janv. 2022 à 17:33
A voir également:
- Optimiser conditions while
- Optimiser pc - Guide
- Optimiser windows 10 - Guide
- Tcp optimiser - Télécharger - Optimisation
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Fonction rang excel avec plusieurs conditions ✓ - Forum Excel
2 réponses
yg_be
Messages postés
22732
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2024
1 477
17 déc. 2021 à 15:20
17 déc. 2021 à 15:20
bonjour,
moi j'utiliserais des vecteurs supplémentaires, un pour les noms de ville, et un autre pour mémoriser si la ville a déjà été sélectionnée.
ou bien, dans le while, j'appelerais une fonction qui vérifierait si la ville choisie est déjà dans le trajet.
moi j'utiliserais des vecteurs supplémentaires, un pour les noms de ville, et un autre pour mémoriser si la ville a déjà été sélectionnée.
ou bien, dans le while, j'appelerais une fonction qui vérifierait si la ville choisie est déjà dans le trajet.
mamiemando
Messages postés
33081
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 avril 2024
7 749
Modifié le 25 janv. 2022 à 17:41
Modifié le 25 janv. 2022 à 17:41
Bonjour,
Tu peux comme le suggères yg_be utiliser une structure auxiliaire, par exemple un
Si tes villes sont représentées par un entier connu a priori, tu peux t'en sortir avec un vecteur ou un tableau, mais si tu as un très grand nombre de villes, ça n'est pas forcément l'idéal en terme de mémoire, mais l'accès ce fait en O(1) et est donc plus rapide.
Voici ce que je te propose :
Exécution :
Remarque :
Attention, car un
Bonne chance
Tu peux comme le suggères yg_be utiliser une structure auxiliaire, par exemple un
std::set<std::string>qui stocke les villes déjà traversées. Si l'utilisateur saisit une valeur déjà présente dans cet ensemble, alors tu répètes la boucle
do ... while. La recherche et l'insertion dans un
std::setse fait en O(log(n)).
Si tes villes sont représentées par un entier connu a priori, tu peux t'en sortir avec un vecteur ou un tableau, mais si tu as un très grand nombre de villes, ça n'est pas forcément l'idéal en terme de mémoire, mais l'accès ce fait en O(1) et est donc plus rapide.
Voici ce que je te propose :
#include <iostream> #include <ostream> #include <set> // Pour afficher facilement un std::set template <typename T> std::ostream & operator << (std::ostream & os, const std::set<T> & s) { for (const T & x : s) { os << x << ' '; } return os; } int main(){ using namespace std; set<string> villes_traversees = {"Paris", "Londres"}; while (villes_traversees.size() < 5) { string ville; cout << "Saisir un nom de ville, hormis " << villes_traversees << endl; std::getline(cin, ville); if (villes_traversees.find(ville) != villes_traversees.end()) { cerr << "Cette ville est déjà traversée !" << endl; } else { villes_traversees.insert(ville); cout << "Ville ajoutée !" << endl; } cin.clear(); } cout << "Villes traversées : " << villes_traversees << endl; return 0; }
Exécution :
(mando@silk) (~) $ g++ toto.cpp -W -Wall && ./a.out
Saisir un nom de ville, hormis Londres Paris
San Francisco
Ville ajoutée !
Saisir un nom de ville, hormis Londres Paris San Francisco
Berlin
Ville ajoutée !
Saisir un nom de ville, hormis Berlin Londres Paris San Francisco
Rio de Janeiro
Ville ajoutée !
Villes traversées : Berlin Londres Paris Rio de Janeiro San Francisco
Remarque :
Attention, car un
std::setordonne les éléments qu'il contient selon une relation d'ordre (ici implicitement l'ordre lexicographique). Si tu veux garder l'ordre de la saisie, tu peux donc peupler un container qui préservera l'ordre de la saisie, par exemple un
std::vectorou une
std::list.
#include <list> #include <iostream> #include <ostream> #include <set> #include <string> // Pour afficher facilement un std::set template <typename T> std::ostream & operator << (std::ostream & os, const std::set<T> & s) { for (const T & x : s) { os << x << ' '; } return os; } // Pour afficher facilement un std::list template <typename T> std::ostream & operator << (std::ostream & os, const std::list<T> & s) { for (const T & x : s) { os << x << ' '; } return os; } int main(){ using namespace std; list<string> trajet = {"Paris", "Londres"}; set<string> villes_traversees = {"Paris", "Londres"}; while (villes_traversees.size() < 5) { string ville; cout << "Saisir un nom de ville, hormis " << villes_traversees << endl; std::getline(cin, ville); if (villes_traversees.find(ville) != villes_traversees.end()) { cerr << "Cette ville est déjà traversée !" << endl; } else { villes_traversees.insert(ville); trajet.push_back(ville); cout << "Ville ajoutée !" << endl; } cin.clear(); } cout << "Villes traversées : " << villes_traversees << endl; cout << "Trajet : " << trajet << endl; return 0; }
Bonne chance