Programmation B Stroustrup ..
Bonsoir à toutes et tous .
Je ne parviens pas a comprendre l'énoncé d'un exercice du livre :
Citation:
Ecrivez un programme consistant en une boucle while qui (à chaque passage dans la boucle ) lit deux ints, puis les affiche. Le programme doit quitter à la saisie d'un '|' final. (C'est le texte du livre .)
Si vous comprenez ??? Merci de m'expliquer .
Cordialement.
Programmation B Stroustrup
Bonsoir à toutes et tous .
Merci , mais ..
Citation:
@Trademark
Citation:
Je ne vois pas très bien ce que tu ne comprends pas, peut-être qu'en reformulant ça ira mieux:
"Lire au clavier, et puis afficher, deux nombres entiers jusqu'à ce que l'utilisateur entre le caractère '|'".
Toujours aussi "nébuleux".
Cordialement.
Programmation B Stroustrup
Bonsoir à toutes et tous .
@Bousk . Merci .
Voici je que j'ai réalisé : :cry:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
#include "std_lib_facilities.h"
int main()
{
int unNombre = 0 ;
while (unNombre != 12 , unNombre != 24 ) {
cout << " Entrez les nombres 12 ou 24 !" << '\n';
cin >> unNombre;
cout << unNombre << " Merci !" << '\n' ;
break ;
if (unNombre == '|' );
cout << unNombre << " Erreur ! Au revoir , à bientôt !" << '\n';
}
} |
Chutttt... Oui .
Je ne parviens toujours pas à comprendre . A chaque fois que ....
Quelles sont mes erreurs ??
Merci .
Cordialement.
Programmation B Stroustrup
Bonsoir à toutes et tous .
@Trademark . Merci pour tes explications .
Je tournicote lamentablement depuis pas mal de temps .
Si j'écris :
Code:
1 2 3 4 5 6 7
|
int unNombre = 0;
int deuxNombres = 0;
while (unNombre != 5 || deuxNombre != 7) // tant que les numéros saisis sont différents de 5 ou 7 on continue l'invite
cout << unNombre << deuxNombres << " Saisissez deux nombres de 0 à 9 !" <<'\n';
cin >> unNombre >> deuxNombres ; |
Pour démarrer est-ce juste ? C'était ma première idée .
Le break , c'est pour stopper la boucle .
Cordialement.
J'vais bien finir par comprendre ???
Programmation B Stroustrup
Bonsoir à toutes et tous .
@Trademark . Merci .
Oui , je pense cette fois avoir compris une partie de mon problème .
Je doit demander à l'utilisateur de rentrer deux nombres ..... lui dire vous avez inscrit 'x' et 'y' et continuer l'invite tant qu'il ne saisi pas '|' .
Je me retrouve avec mon éternel problème : Comment vérifier la saisie de nombres ou de lettres . J'ai beau chercher sur le net , je ne trouve pas d'explication "franche".
Cordialement .
Programmation B Stroustrup
Bonjour à toutes et tous .
@Bousk , merci .
J'ai enfin réussi à "comprendre" le logarithme d'une boucle .(Je crois.)
Mon oeuvre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#include "std_lib_facilities.h"
#include <limits>
int main()
{
int a ;
int b ;
while (!(a && b == 0))
{
cout << " Entrez deux nombres !" << '\n';
cin >> a >> b;
if (!(cin.fail() || a < 0 || b < 0 && a > 100 || b > 100))
{
cout << " Vous avez choisi : " << a << " et " << b << " Merci !" << '\n' ;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max() , '\n');
} else if (a && b != 0) {
cout << " Erreur ! Arrêt du programme !" << '\n';
break;
}
}
return 0;
} |
Qu'en pensez-vous ???
Le break sert à stopper la boucle .... infinie .
Cordialement.
Programmation B Stroustrup
Bonsoir à toutes et tous .
@Bousk .Merci !.
Aie ... à ce point .:cry:
Me donnerais -tu le corrigé ??? :oops:
Il faut que je digère ...
Cordialement.
Programmation B Stroustrup
Bonsoir à toutes et tous .
@Bousk . Merci encore et toujours .
Citation:
Désolé pour le ton, mais je sais que c'est pas ton premier message et à chaque fois tes if sont foireux.
Pas de problèmes ..
Mais :
Citation:
Ecrivez un programme consistant en une boucle while
do while c'est pareille ???
Cordialement.
Programmation B Stroustrup
Bonjour à toutes et à tous .
@Bousk . Merci .
Je suis perplexe :
Code:
while (n1 != '|' && n2 != '|')
Je décompose :
tant que n1 et n2 sont différents de la barre droite on continue ... Mais il n'y a rien en mémoire .
Oui cela fonctionne . Mais ?
J'ai retouché et amélioré mon code .
Cela fonctionne "mieux avec des char" mais ce sont int demandés ?.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include "std_lib_facilities.h"
#include <limits>
int main()
{
char a = 0;
char b = 0;
while (true) // retourne vrais donc on continue
{
cout << '\n' << " Entrez deux nombres !" << '\n';
cin >> a >> b;
if (a == '|' || b == '|') { // si les entrées correspondent à deux barres , fin du programme
cout << " Erreur ! Arrêt du programme !" << '\n';
break;
}
if (a >= '0' || b >= '0' && a <= '9' || b <= '9') // si les entrées sont comprises entre 0 et 9 on continue
{
cout << '\n' << " Vous avez choisi : " << a << " et " << b << " Merci !" << '\n' ;
cin.clear(); // on défini l'état du flux , on efface les erreurs et on continue
cin.ignore(numeric_limits<streamsize>::max() , '\n'); // on vide le buffer ( " ignore() permet d'extraire les cractères du buffer ")
}
if (a > b) {
cout << '\n' << "Le plus grand nombre est : " << a << " Le plus petit est : " << b << '\n';}
else if (a < b){
cout << '\n' << "Le plus petit nombre est : " << b << " Le plus grand est : " << a << '\n';}
else if (a == b){
cout << '\n' << "Les deux nombres sont égaux ! " << a << " et " << b << '\n';}
}
return 0;
} |
Programmation B Stroustrup
Bonsoir à toutes et tous ;
@Bousk.Merci.
Citation:
Tu testes tes programmes ?! Tu le lances, tu mets des valeurs bidons et tu t'aperçois immédiatement que ça marche pas.
Oui je teste mes programmes , et ils fonctionnent comme désiré .
_Saisie de 2 nombres .
_Affichage des 2 nombres .
_Et nouvelle demande .
_Affichage du + grand .
_Affichage du + petit .
_Fin du programme si entré | .
Citation:
Ton test est toujours faux. Enfin je pense plutôt qu'il sera toujours vrai justement..
Code:
if (a >= '0' || b >= '0' && a <= '9' || b <= '9')
Ben .. C'est le but non ?
Cordialement .
Programmation B Stroustrup
Bonjour à toutes et tous .
Je continue à réfléchir à mon problème .
@Bousk . Merci .
Citation:
il est inutile de mettre en place toute une gestion de savoir si oui ou non un chiffre a été rentré.
Cela semble une évidence que je ne maitrise pas encore .:oops:
Une nouvelle version :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
int main()
{
char a = 0, b = 0;
while (a != '|' && b != '|')
{
cout << '\n' << " Entrez deux nombres !" << '\n';
cin >> a >> b ;
if ((a >= '0' && a <= '9') && (b >= '0' && b <= '9'))
cout << '\n' << " Vous avez choisi : " << a <<" et "<< b << " Merci !" << '\n';
else
cout << '\n' << " Erreur . Ce ne sont pas des nombres !" << endl;
if (a > b) {
cout << '\n' << "Le plus petit nombre est : " << b << " Le plus grand est : " << a << '\n';}
else if (a < b){
cout << '\n' << "Le plus grand nombre est : " << b << " Le plus petit est : " << a << '\n';}
else if (a == b){
cout << '\n' << "Les deux nombres sont égaux ! " << a << " et " << b << '\n';}
}
} |
Sans le "classement" tout fonctionne .
Avec il reste des "bugs" .
Comment séparer les blocs ?? pour que lorsque ont entre des lettres tout le contenu ne s'affiche plus .??
Cordialement.
Programmation B Stroustrup
Merci @Bousk .
Oui cela semble doublement évident que mon programme ne fonctionne pas ,
mais je préfère dire qu'il fonctionne à moitié ..:roll:
Pour les 'blocs' et les accolades c'est bien ce que j'avais compris . Mais cela apparait être dans l'absolu .
Dans ma petite tête je pensais que délimiter un bloc "supprimais" la suite .
Exemple :
Code:
1 2 3 4 5 6 7 8
|
cout << '\n' << " Entrez deux nombres !" << '\n';
cin >> a >> b ;
if ((a >= '0' && a <= '9') && (b >= '0' && b <= '9'))
cout << '\n' << " Vous avez choisi : " << a <<" et "<< b << " Merci !" << '\n';
else
cout << '\n' << " Erreur . Ce ne sont pas des nombres !" << endl; |
Séparer ce bloc du suivant pour éviter la poursuite du programme .Ca ne marche pas .
Bonjour à toutes et tous .:oops:
Cordialement.
PS: endl; c'est pour tester la différence ;
Programmation B Stroustrup
Bonjour à toutes et tous . (Re-)
@Trademark . Doublement , Merci . Pour ta réponse et tes encouragements. :zoubi:
Citation:
PS: endl; c'est pour tester la différence ;
Oui la différence avec : '\n' .
Pour le lien , mon anglais et ++ qu'élémentaire et la traduction googole pour unget me renvoies entre autre à un marchand de matériel de laveurs de carreau . .. le reste ressemble à du parlé ................. !(censuré).
Mais je vais trouver .
Cordialement.
Programmation B Stroustrup
Bonjour à toutes et tous .
Est-il possible est logique de "transformer" deux ou trois int en un char ???
Cela simplifierais le test de contrôle .
Ex :
Code:
int a , int b , int c = char a (Code totalement fantaisiste.)
Cordialement .
Programmation B Stroustrup
Bonsoir à toutes et tous .
@Ekleog && @Bousk , merci pour vos réponses .
Citation:
un int c'est en général 8 bits, un char 4 bits.
Oui bien sur . .:oops:
Cordialement.
Programmation B Stroustrup
Bonsoir à toutes et tous .
Après une 'pause' , je me remets au ''travail'' .
@Bousk ...:zoubi: Oh ...
La première partie de l'exercice est comprise .
Maintenant c'est quitter avec '|' que je ne parviens pas à réaliser .
Cordialement.
Programmation B Stroustrup
Bonjour à toutes et tous .
Après beaucoup de 'réflexion':P , j'ai réussi a comprendre (?) .
Voici mon oeuvre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
#include "std_lib_facilities.h"
int main()
{
int n1 , n2 ;
while ((n1 != '|') && (n2 != '|')) // tant que nous n'écrivons pas || on continue
{
cout << '\n' << " Entrez deux nombres séparés par un espace :" << '\n';
if (cin >> n1 >> n2) // on test si n1 et n2 sont enregistrés
{
cout << '\n' << "Vous avez écrit :" << n1 << " et " << n2 << '\n';
} else {
cout << " Erreur ! On ferme !" <<'\n'; // n1 et n2 non enregistrés fin du programme
break ;
}
if (n1 > n2) {
cout << '\n' << "Le plus petit nombre est : " << n2 << " Le plus grand est : " << n1 << '\n';}
else if (n1 < n2){
cout << '\n' << "Le plus grand nombre est : " << n2 << " Le plus petit est : " << n1 << '\n';}
else if (n1 == n2){
cout << '\n' << "Les deux nombres sont égaux ! " << n1 << " et " << n2 << '\n';
}
}
return 0;
} |
Je voulais a tout prix vérifier l'entrée ..(numéro ou lettre.) ce n'était pas nécessaire .
Si cela peut rendre service a un autre apprenti 8-) .
Merci à tous .
Cordialement.