J’essaie de comprendre les points de blocage. Et donc de comprendre ta démarche, ton raisonnement, quand tu as lu ce sujet.
Oublie pour le moment la solution proposée. Le probleme des solutions, c’est que ça peut bloquer les gens, qu’ils se disent "je saurais pas écrire cette solution". Il est important d’oser proposer ses propres solutions, même si elles sont moins bien, ou même ne marchent pas.
Le principal est d’essayer de proposer une solution, peu importe la qualité de la réponse, du moment que cela vient de toi.
Pour entrer dans le détail…
Allez, un exercice plus dur, pour vous forger le caractère.
Comment as tu pris cette phrase ? Est-ce que le "plus dur" t’a motivé ou au contraire t’a fait peur ? Ou rien ?
Le but est de reproduire une fonction qui existe dans de nombreux autres langages, comme C# ou Python, et qui permet de supprimer les espaces, au début et à la fin d’une chaîne de caractères.
En lisant cette phrase, as tu compris le but de l’exercice, en terme de résultat attendu ? As tu réussit a imaginer le type de chaîne que tu aurais a traiter et le résultat attendu ?
A ce point, une chose qui peut aider, c’est d’écrire des tests qui permettent de vérifier que le code écrit fait correctement le travail demandée. (C’est ce que l’on appelle le développement orientée par les tests, ou TDD). C’est a dire savoir écrire ce genre de code :
chaîne testée = "hello world"
résultat attendu = ...
test(chaîne testée == résultat attendu)
chaîne testée = " hello world"
résultat attendu = ...
test(chaîne testée == résultat attendu)
J’ai écrit en pseudo code. Saurais tu compléter les parties "résultat attendu" ? Et ajouter d’autres tests ?
C’est généralement la première étape : avoir une idée du résultat attendu, en fonction des données qui sont données.
Pour aller plus loin, saurais tu écrire le code C++ correspondant a ces tests ? (sans le code qui réalise cette tache, juste les test). Pour la comparaison proprement dit, un simple std::cout
est suffisant ici.
A ce stade de la lecture de l’énoncé, on peut déjà penser a une solution (je rappelle que pour le moment, on a lu que les 2 premières phrases de l’énoncé). Si tu avais a résoudre ce probleme sur papier, pourrais tu expliquer (en français pseudo code, pas en vrai code C++) étape par étape comment tu ferais pour résoudre cet exercice. Utilise que des fonctionnalités simple, comme "je prend le premier caractère, je regarde si c’est un espace, etc". Ou alors, si tu penses a une solution dans un autre langage, c’est bon aussi. Le principal est d’avoir une idée de solution.
On va commencer avec ces questions pour le moment.
Tout dépend de quel est le but cherchée. Ce cours se concentre sur ce qu’on attend d’un vrai dev C++. Or, si tu regarde des solutions proposées sur StackOverflow, c’est des solutions avec des algorithmes de la bibliotheque standard. Par exemple https://stackoverflow.com/questions/216823/how-to-trim-an-stdstring ou https://stackoverflow.com/questions/83439/remove-spaces-from-stdstring-in-c
Tu m’écris une telle boucle for pour faire cette tache au boulot, je refuse tout simplement ton code. Ce que j’attend, c’est pas un dev qui sache réécrire un algo a coup de boucle for, mais quelqu’un qui fera des recherches pour savoir s’il existe déjà une solution (boost::trim, QString::trim, etc). Savoir réécrire l’algo a la main, c’est la dernière solution attendue.
C’est l’une des grosses critiques par rapport a l’apprentissage de la programmation avec une approche historique (= en général, apprendre le C en premier). Comme le C est un langage assez pauvre, ça donne l’habitude de tout réécrire a la main. Ce qui n’est pas ce qu’on attend d’un dev. Il faut normalement apprendre ensuite des langages plus haut niveau et bien expliquer aux apprenants que l’on attend pas une solution "comme on ferait en C" dans les autres langages. On veut utiliser les outils disponibles dans les autres langages.
Cela ne veut pas dire en soi que c’est mal de proposer un telle solution. C’est bien d’avoir un début de solution, même en C. Mais le but du cours est justement d’aller plus loin. Beaucoup de débutants (et parfois des personnes moins débutant) pensent que connaitre le C++, c’est de connaitre la syntaxe pour écrire des algos a la main (for, if, etc). Mais connaitre le C++, c’est savoir écrire des boucles for, savoir utiliser les outils proposés et savoir choisir correctement la bonne approche.
(Et c’est pour ça que pas mal d’école d’info "pisseuse de code" sont mauvaises et a éviter)
Je pense pas que ce soit le probleme. Ni un probleme. Le probleme est en amont, parce qu’il n’a pas pu proposer un début de solution sans lire la solution. Et je pense pas que le vocabulaire choisi soit un probleme ici.
Il n’y a pas de cours parfait, chaque apprenant a ses propres motivations, aucun cours ne peut satisfaire tout le monde.
Mais cf ce que j’expliquais juste avant. Ou cette récent discussion sur OC : https://openclassrooms.com/forum/sujet/baisser-lutilisation-memoire-de-mon-code. Le probleme d’un site comme france-ioi, c’est que cela s’intéresse qu’a la solution, pas la qualité du code. Ecrire des boucles for "comme en C" est tout a fait acceptable sur france-ioi. Et même d’écrire du C est acceptable dans un cours de C++ (cf la solution proposée dans OC). Personne ne dit a un moment "ta solution n’est pas celle qu’on attend d’un dev C++".
Et cela fait donc des lacunes dans l’apprentissage du C++, parce qu’on apprend pas a utiliser correctement le langage et ses outils.
Ça peut être un outil intéressant quand on veut justement bosser sur les syntaxes des boucles, conditions, etc. Et pratiquer l’algorithmique. Mais pour l’apprentissage correct d’un langage, c’est pas un site que je recommande.