je rencontre des difficultés de compréhension sur cet algorithme une âme charitable pourrait éclarer ma lanterne :calim2:
Je ne comprend pas l’intérêt de ce mini programme ils nous prenne pour des débiles ou quoi :mur:
http://nimga.fr/f/wpbPS.jpg
Version imprimable
je rencontre des difficultés de compréhension sur cet algorithme une âme charitable pourrait éclarer ma lanterne :calim2:
Je ne comprend pas l’intérêt de ce mini programme ils nous prenne pour des débiles ou quoi :mur:
http://nimga.fr/f/wpbPS.jpg
Salut,
A vrai dire, je ne vois pas ce que tu ne comprends pas :D
Bon, la méthode utilisée pour représenter l'algorithme n'est pas vraiment ma méthode préférée (perso, quitte à faire des petits dessins, je préfère le nassi-schneiderman, qui est selon moi plus adapté à la représentation d'algorithme pour la programmation structurée, mais ce n'est qu'un avis strictement perso :D ), mais l'algorithme a sans doute pour objectif de te montrer l'intérêt des tests ;)
En effet, le programme affichera " a est egal à b", "a est inférieur b" ou "a est supérieur b" (en fonction de la situation) et le résultat de a + b.
L'intérêt du programme est, effectivement, plutôt limité en tant que tel (non, on ne prend pas les gens pour des idiots :D ), mais, l'intérêt de l'algorithme en lui meme est de permettre de comprendre qu'une fonction est en réalité une succession d'instructions dont l'exécution peut prendre des voies alternatives, en fonction du résultat de certains tests ;)
Et bien tout simplement je n’arrive pas à bien écrire la fonction 'if else’, j’utilise Codeblock. Des errors me complique la tâche ah vraiment trop type ce C++ galère ... galère pour un Newbie comme moi :cry:
Hia,
J'adore !
Tu insinues qu'ils te prennent pour un débile en te proposant un tel exercice basique, et tu n'arrives pas à le faire ! :)
Pour la syntaxe du langage, il existe moult bouquins/cours/didacticiels ...
Avant d'écrire de la littérature, il faut déjà connaître la grammaire de base. Il ne vous prennent pas plus pour des débiles qu'un prof de français qui expliquait que "la souris est mangée par le chat" "la souris" est sujet, "est mangée" est groupe verbal, et "par le chat" complément d'agent.
Maintenant, si tu as des problèmes de syntaxe, on ne pourra t'aider qui si tu nous montre le bout de code en question, ainsi que l'erreur de ton compilateur.
Merci de bien vouloir resté indulgent avec les débutants, rappelez vous de votre premier programme ? Bon trêve de plaisanterie voici mon bout de code non finie et merci pour vos remarques pertinentes dès que cela sera possible j’y prendrais part....
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 #include <iostream> //inclu la bibliothèque iostream (affichage du texte) #include <string> using namespace std; // indique la fonction que l'on va utiliser int main() // Fonction principale du programmes, tous les programmes commencent par cela { cout << "Entrer un nombre entier" << endl; int nombreEntiera; cin >> nombreEntiera; cout << "Entrer un deuxième nombre entier" << endl; int nombreEntierb; cin >> nombreEntierb; if nombreEntiera = nombreEntierb // si a = b { else (nombreEntiera + nombreEntierb) // Alors calculer a + b cout << nombreEntiera << " + " << nombreEntierb << " est égal à " << endl; // affiche à 'écran } if nombreEntiera < nombreEntierb // si a < b { else (nombreEntiera + nombreEntierb) // Alors calculer a + b cout << nombreEntiera << "est inférieur à " << nombreEntierb << endl; } return 0; } // en revanche je ne sais quel fonction utiliser pour le 'non'
Il faut vraiment que tu potasse à nouveau la syntaxe de base des tests.
La syntaxe est:
et nonCode:
1
2
3
4
5
6 if(condition){ //code à exécuter si condition vraie }else{ //code à exécuter si condition fausse }
Code:
1
2
3
4
5 if(condition){ else //code à exécuter si condition vraie <==dès le else, le compilo ne s'y retrouve plus...il ne comprendra plus rien par la suite ... } //et où met-on le code à exécuter si la condition est fausse? (else=sinon en anglais)
Un grand merci à therwald sans qui je n’aurais pu écrire et modifier mon code actuel, j’aurais encore besoin de votre soutiens pour résolver ses dernière erreurs de syntaxe :aie:
voici les errors affiché par codeblock :
19: error: expected `;' before '}’ token
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 <iostream> //inclu la bibliothèque iostream (affichage du texte) #include <string> using namespace std; // indique la fonction que l'on va utiliser int main() // Fonction principale du programmes, tous les programmes commencent par cela { cout << "Entrer un nombre entier" << endl; int nombreEntiera; cin >> nombreEntiera; cout << "Entrer un deuxième nombre entier" << endl; int nombreEntierb; cin >> nombreEntierb; if (nombreEntiera = nombreEntierb) // si a = b et a < b { cout << nombreEntiera << " + " << nombreEntierb << " est égal à " << endl; // affiche à 'écran cout << nombreEntiera + nombreEntierb // effectue le calcul } else // si condition fausse { cout << nombreEntiera << "est supérieur à " << nombreEntierb << endl; cout << nombreEntiera + nombreEntierb; } if (nombreEntiera < nombreEntierb) // si a < b { cout << nombreEntiera << "est inférieur à " << nombreEntierb << endl; cout << nombreEntiera + nombreEntierb; } else // si condition fausse { cout << nombreEntiera << "est supérieur à " << nombreEntierb << endl; cout << nombreEntiera + nombreEntierb; } cout << nombreEntiera << " + " << nombreEntierb << " = " << endl; return 0; }
C'est tout simple (et ça t'arrivera encore par étourderie un certain nombre de fois): tu as oublié de terminer la ligne 18 par un ;
C'est d'ailleurs ce que le compilo te dit en angliche dans le texte:
"19: error: expected ; before } token" ==> ligne 19: erreur: j'attendais ';' avant le signe '}'
:ccool: Ok merci encore j’avance doucement mais surement comme on dit ;) donc mon prog marche niquel, par contre le résultat sur la console n’est pas très jojo, j’aimerais plus un résultat du style :
7 + 7 est égal à 147
147 est supérieur à 7
147 + 7 = 154
http://nimga.fr/f/ymfYl.jpg
Les passages à la ligne sont mal placés parce que les utilisations endl qui les provoquent sont mal placés.
Mais tu ne devrais pas te concentrer sur ce détail, regarde les réponses et tu constateras qu'elles sont fausses: ta logique n'est pas correcte, et par conséquent bien que le programme compile et s'exécute sans erreur, il est faux.
Réanalyse le diagramme d’algorithme avec tes valeurs pour voir les réponses attendues et tu verras que les réponses du programme ne collent pas...
Grrrrr zut j’ai encore un ptit problème au niveau de la condition d’égalité et là je ne voit pas ou je plante :(
voici la console :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 #include <iostream> //inclu la bibliothèque iostream (affichage du texte) #include <string> using namespace std; // indique la fonction que l'on va utiliser int main() // Fonction principale du programmes, tous les programmes commencent par cela { cout << "Entrer un nombre entier" << endl; int nombreEntiera; cin >> nombreEntiera; cout << "Entrer un deuxième nombre entier" << endl; int nombreEntierb; cin >> nombreEntierb; if (nombreEntiera == nombreEntierb) // si a = b { cout << nombreEntiera << " est égal à " << nombreEntierb << endl; // affiche à 'écran } if (nombreEntiera < nombreEntierb) // si a < b { cout << nombreEntiera << " est inférieur à " << nombreEntierb << endl; } else // si a n'est pas < à b { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } cout << nombreEntiera << " + " << nombreEntierb << " = " << nombreEntiera + nombreEntierb << endl; return 0; }
http://nimga.fr/f/RDqgh.png
Dans ton code, tu dis que si a n'est pas inférieur à b, alors il est supérieur, ce qui est faux (le cas de l'égalité, que tu as justement traité avec tes valeurs d'exemple).
Quand tu regardes l'algorithme donné en dessin, quand les valeurs sont égales, tu doit totalement sauter le test avec '<', or dans ton cas, tu l'appelles systématiquement. Dit autrement, tes deux if doivent être imbriqués.
Tout à fait mais c’est justement cela mon problème car sur mon livre de cours il n’indique pas comment sauté une instruction :calim2:
Je comprend bien ce que tu veux dire en revanche je ne vois pas comment l’écrire...
correcteur svp ;) tout en sachant que je pense bien que ce code et faux :?
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 #include <iostream> //inclu la bibliothèque iostream (affichage du texte) #include <string> using namespace std; // indique la fonction que l'on va utiliser int main() // Fonction principale du programmes, tous les programmes commencent par cela { cout << "Entrer un nombre entier" << endl; int nombreEntiera; cin >> nombreEntiera; cout << "Entrer un deuxième nombre entier" << endl; int nombreEntierb; cin >> nombreEntierb; if (nombreEntiera <== nombreEntierb) // si a = b ou a < b { cout << nombreEntiera << " est égal à " << nombreEntierb << endl; // affiche à 'écran cout << nombreEntiera << " est inférieur à " << nombreEntierb << endl; } else // si a n'est pas < à b { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } cout << nombreEntiera << " + " << nombreEntierb << " = " << nombreEntiera + nombreEntierb << endl; return 0; }
JolyLoic a déjà dit le mot magique:.Citation:
imbrication
Regarde le diagramme d'algo: tu verra qu'il y a plusieurs niveaux imbriqués.
Tu dois reproduire cette logique avec tes blocs if/else: imbrique les pour que selon les cas certains tests imbriqués soient faits ou pas...
Par ailleurs, attention à ta rigueur sur les expressions logiques: le contraire de < n'est pas > mais >=
Tu fais comme tu veux, mais le contraire de < est >= dans un test, parce que si un nombre n'est pas inférieur à un autre, il peut être soit supérieur soit égal...
Justement je ne suis pas là pour te donner la réplique ;) mais seulement pour apprendre et là j’avoue que je ne comprend pas ou plus ? :aie:
Peut tu me dire ou tu as appris le langage C++, j’aimerais bien m’y référer car je n’avance pas avec cet algo qui me prend un peu la tête soit dit en passant, quand on ne sait faire c’est toujours plus difficile :arf:
Hé bien non!!!
Le contraire de < est >= !!! > est l'opposé de < ;)
Une petite table de vérité pour t'en convaincre
Tu remarqueras que, si ==, < et > ont un état unique à true, <= et >= ont un état unique à false, et que si tu écrit !(A < B ), le résultat correspond à... A >= B ou que si tu fais !(A > B) tu obtiens le résultat correspondant à A <= B ;)Code:
1
2
3
4
5
6
7
8
9
10
11 | A = 4 | A = 3 | A = 4 | | B = 4 | B = 4 | B = 3 | ==> état unique ___________________________________________ A == B | true | false | false | ==> true A < B | false | true | false | ==> true A <= B | true | true | false | ==> false A > B | false | false | true | ==> true A >= B | true | false | true | ==> false !( A == B ) | false | true | true | ==> false !( A < B ) | true | false | true | ==> false !( A > B ) | true | true | false | ==> false
il ne s'agit pas d'imbriquer des variables, mais des blocs if/else...de manière à reproduire les chemins d'exécution qui sont montrés dans le diagramme.
Repars du principe que quand la condition est vraie l'exécution passe par les instructions du bloc if, puis saute le bloc else, quand la condition est fausse l'exécution saute le bloc if et passe par le bloc else.
C'est pourtant clair:
Au niveau des colonnes, tu as
Chaque ligne donne le résultat obtenu lors de la comparaison des deux valeurs.
- La comparaison effectuée
- deux valeur identiques (A = 4 et B = 4)
- Deux valeurs dont la première est plus petite que la deuxième (A = 3 et B = 4 )
- deux valeurs dont la deuxième est plus petite que la première (A = 4 et B = 3 )
- l'état unique (l'état qui n'apparait qu'une fois sur les trois possibilités envisagées)
ainsi, si tu teste A == B, le test vaut vrai pour A = 4 et B = 4, faux pour A = 3 et B = 4, faux pour A = 4 et B =3 et donc, l'état unique d'un test d'égalité est vrai
Et l'on remarque donc que Non( A < B ) renverra exactement les memes résultat que A >= B ;)
Merci pour ses précisions de logique mais j’avais bien compris cela par contre c’est au niveau de l’écriture du code ou cela ce gâte car je ne sais comment l’écrire et cela me semble bien compliquer quand on sait que je n’ai appris pour le moment que quelques notions du langage C++. Une âme charitable peut elle résoudre mon équation please.... :calim2:
Je suis bloqué avec ce code j’ai beau le tourner dans tous les sens un coup c’est la ligne «*inférieur à*» et un coup «*supérieur à*» qui s’affiche en permanence.
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 #include <iostream> //inclu la bibliothèque iostream (affichage du texte) #include <string> using namespace std; // indique la fonction que l'on va utiliser int main() // Fonction principale du programmes, tous les programmes commencent par cela { cout << "Entrer un nombre entier" << endl; int nombreEntiera; cin >> nombreEntiera; cout << "Entrer un deuxième nombre entier" << endl; int nombreEntierb; cin >> nombreEntierb; if (nombreEntiera == nombreEntierb) // si a = b { cout << nombreEntiera << " est égal à " << nombreEntierb << endl; // affiche à 'écran } else // a est > b { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } if (nombreEntiera < nombreEntierb) // si a < b { cout << nombreEntiera << " est inférieur à " << nombreEntierb << endl; } else { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } cout << nombreEntiera << " + " << nombreEntierb << " = " << nombreEntiera + nombreEntierb << endl; return 0; }
Pas imbriqué :
Imbriqué :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 if (a) { } else { } if (b) { } else { }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 if (a) { if (b) { } else { } } else { }
Ok merci 8O j’ai compris l’imbrication, en effet je suis de ceux ou il faut expliquer longtemps pour comprendre mais je progresse enfin à vous de voir car j’ai encore un problème dans la console... sans doute une erreur de frappe euueueuue
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 #include <iostream> //inclu la bibliothèque iostream (affichage du texte) #include <string> using namespace std; // indique la fonction que l'on va utiliser int main() // Fonction principale du programmes, tous les programmes commencent par cela { cout << "Entrer un nombre entier" << endl; int nombreEntiera; cin >> nombreEntiera; cout << "Entrer un deuxième nombre entier" << endl; int nombreEntierb; cin >> nombreEntierb; if (nombreEntiera == nombreEntierb) // si a = b { cout << nombreEntiera << " est égal à " << nombreEntierb << endl; // affiche à 'écran if (nombreEntiera < nombreEntierb) // si a < b { cout << nombreEntiera << " est inférieur à " << nombreEntierb << endl; } else // a est > b { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } } else { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } cout << nombreEntiera << " + " << nombreEntierb << " = " << nombreEntiera + nombreEntierb << endl; return 0; }
Ici, c'est dans le cas où les valeurs sont égales que tu les compares pour savoir laquelle est la plus grande des deux, ce qui n'a pas vraiment de sens. C'est dans le cas où elles sont différentes que ça en a (le else).
En outre, je t'engage à faire un effort sur l'indentation de ton code. C'est vraiment important pour le relire sans erreurs par la suite.
Salut Geekaple,
Même si tu es sur un forum d'entraide, il est inutile d'encombrer la discussion avec des questions dont tu peux trouver la réponse par toi même. C'est un peu de la fainéantise que de demander ce qu'est "l'indentation d'un code" alors qu'une simple recherche google est suffisante.
Le principe d'un forum est de demander quelque chose dont tu n'as pu trouver la réponse (ou alors dont tu n'as pas compris la réponse) nul part ailleurs.
Merci de ta compréhension.
Je me suis exécuté et donc voici ce que cela à donné:
Mais désoler le résultat console reste toujours faut y aurait il pas un problème au niveau de codeblock car dès la fermeture de cette appli j’ai une erreur générer par le système.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 #include <iostream> //inclu la bibliothèque iostream (affichage du texte) #include <string> using namespace std; // indique la fonction que l'on va utiliser int main() // Fonction principale du programmes, tous les programmes commencent par cela { cout << "Entrer un nombre entier" << endl; int nombreEntiera; cin >> nombreEntiera; cout << "Entrer un deuxième nombre entier" << endl; int nombreEntierb; cin >> nombreEntierb; if (nombreEntiera == nombreEntierb) // si a = b { cout << nombreEntiera << " est égal à " << nombreEntierb << endl; // affiche à 'écran if (nombreEntiera < nombreEntierb) // si a < b { cout << nombreEntiera << " est inférieur à " << nombreEntierb << endl; } else // a est > b { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } } else { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } cout << nombreEntiera << " + " << nombreEntierb << " = " << nombreEntiera + nombreEntierb << endl; return 0; }
Prends le temps de considérer à tête reposée ce que SIGNIFIE ton code...
Imagine quelqu'un qui te dis:... tu ne sens pas comme une contradiction, là?Citation:
si je fais la même taille que toi alors voilà ce qu'il faut faire si je suis plus grand
Et deux petites remarques concernant des commentaires:
Le commentaire est faux : inclus le fichier d'en-tête iostream (hé oui, en C++, il est possible d'avoir des fichiers sans extension, mais il vaut mieux laisser cela à la seule bibliothèque standard ;) )Code:#include <iostream> //inclu la bibliothèque iostream (affichage du texte)
Il y a une différence entre un fichier d'en-tête et une bibliothèque:
Un fichier d'en-tête se "contente" d'indiquer au compilateur que certaines choses existent (le fichier iostream, par exemple, va indiquer au compilateur qu'il existe des éléments tels que cin, cout ou cerr et qu'ils se trouvent dans l'espace de nommage std ) alors qu'une bibliothèque fournit un code binaire correspondant à tout ce que l'on peut trouver dans un fichier d'en-tête ;)
Il n'y a pas de bibliothèque iostream, mais on trouve dans la bibliothèque standard (libstdc++.a, pour prendre l'exemple de gcc) le code binaire (comprend : utilisable par l'ordinateur) de tout ce que cin, cout ou cerr sont capables de faire ;)
Encore faux:Code:using namespace std; // indique la fonction que l'on va utiliser
Indique au compilateur qu'il peut accepter que l'on utilise tout ce qui se trouve dans l'espace de noms std sans devoir préciser explicitement que l'on souhaite utiliser fait partie de cet espace de noms particulier (à savoir std ).
C++ donne la possibilité de déclarer des espaces de noms, c'est à dire des sortes de "boites" dans lesquelles on va trouver un ensemble de choses qui sont faites pour "travailler ensemble" :D
Cela permet d'éviter les conflits si, pour une raison ou une autre, nous venions à utiliser deux bibliothèques différentes qui fournissent (c'est moche, mais cela peut arriver) toutes les deux une fonction ou un type utilisateur qui porte le même nom.
On compte en effet sur le fait que le projet A (qui s'occupe de l'une des bibliothèques) aura déclaré sa fonction ou sa classe dans l'espace de noms A et que le projet B (qui s'occupe de l'autre bibliothèque) l'aura fait, logiquement, dans l'espace de noms B.
De cette manière, les fonctions ou les types utilisateurs qui se trouvent aussi bien dans la bibliothèque A que dans la bibliothèque B n'entreront pas en conflit les uns avec les autres (parce que le compilateur applique la règle de la définition unique, et que, s'il trouve deux définition portant le même nom, il râle vraiment très fort :D );)
Ainsi, tout ce qui est fourni par la bibliothèque standard se trouve dans l'espace de noms std (pour STandarD :D ) ;)
La directive using namespace std; indique tout simplement que, s'il ne trouve pas quelque chose (par exemple cout) dans l'espace de noms global, il peut aller voir si cela existe, par le plus grand des hasards, dans l'espace de noms std (ce qui sera le cas, en l'occurence :D ) ;)
Mais l'idéal reste, autant que possible, de limiter l'utilisation de ce genre de directive et, surtout, de ne pas l'utiliser dans un fichier d'en-tête, parce qu'elle aurait alors tendance à se répandre dans tout le code, du fait du jeu des inclusions en cascades.
Nous pourrions alors perdre tout l'intérêt des espaces de noms et nous retrouver avec un conflit si une telle directive était utilisée pour l'espace de noms A et une autre pour l'espace de noms B dans l'exemple dont j'ai parlé plus haut : le compilateur ne saurais plus s'il doit prendre la fonction correspondante dans la bibliothèque A ou dans la bibliothèque B.
C'est d'autant plus vrai que l'utilisation de cette directive ne fait pas gagner grand chose (pour ce qui concerne la bibliothèque standard du moins): cela ne prend pas des masses de temps et n'use pas vraiment le clavier que de rajouter std:: avant les éléments qui se trouvent dans cet espace de noms ;)
:yaisse2: Salut les grosses têtes c’est bon j’ai trouvé la solution regarde à qui le veux :
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 #include <iostream> // écrire cette ligne permet entre autre de pouvoir utiliser la console using namespace std; // cette ligne évite de devoir rajouter du code à certain endroits int main() // Fonction principale du programmes, tous les programmes commencent par cela { cout << "Entrer un nombre entier" << endl; int nombreEntiera; cin >> nombreEntiera; cout << "Entrer un deuxième nombre entier" << endl; int nombreEntierb; cin >> nombreEntierb; // si les deux nombres sont égaux if (nombreEntiera == nombreEntierb) { cout << nombreEntiera << " est égal à " << nombreEntierb << endl; // affiche à 'écran } // sinon, si le nombre A est inférieur au b else if (nombreEntiera < nombreEntierb) { cout << nombreEntiera << " est inférieur à " << nombreEntierb << endl; } // sinon (c'est que le nombre A est suppérieur au b) else { cout << nombreEntiera << " est supérieur à " << nombreEntierb << endl; } cout << nombreEntiera << " + " << nombreEntierb << " = " << nombreEntiera + nombreEntierb << endl; return 0; }