Signaler

Permutation en C++

Posez votre question loic.vazquez 14Messages postés samedi 24 avril 2010Date d'inscription 27 septembre 2017 Dernière intervention - Dernière réponse le 27 sept. 2017 à 11:19 par KX
Bonjour,

J'ai un exercice a faire mais je ne comprend pas bien ce qu'il faut faire.

J'ai déjà fait ce code la dans CodeBlock mais ma prof me dit que ce n'est pas comme ça que ça doit être fait pourtant le résultat est celui que demande l'enoncé non ?

Vous trouverez l'enoncer de mon exercice et en dessous le code que j'ai écris dans CodeBlock

Écrivez un programme qui demande 3 entiers et qui les permute.
Les affichages demandés sont :
Avant la permutation, le 1er entier = ? et le 2èm entier = ? et le 3èm entier = ?
Après la permutation, le 1er entier = ? et le 2èm entier = ? et le 3èm entier = ?
Version 1 : Le 1er entier va dans le 2
ème
, le 2ème dans le 3ème et le 3ème dans le 1er
Version 2 : Le 1er entier va dans le 3
ème
, le 3ème dans le 2ème et le 2ème dans le 1er


#include <iostream>

using namespace std;

int main()
{
    //Écrivez un programme qui demande 3 entiers et qui les permute.
    //Les affichages demandés sont :
    int a,b,c;
    cout << "Entrer 3 entier pour la permutation" << endl;
    cin >> a >> b >> c;
    cout << endl;
    cout << "Avant la permutation, le 1er entier = ? et le 2eme entier = ? et le 3eme entier = ? " << endl;
    cout << "1er entier = " << a << "; 2eme entier = " << b << "; 3eme entier  = " << c << endl;
    cout << endl;
    cout << "Apres la permutation, le 1er entier = ? et le 2eme entier = ? et le 3eme entier = ? " << endl;
    cout << endl;
    //Version 1 : Le 1er entier va dans le 2ème, le 2ème dans le 3ème et le 3ème dans le 1er
    cout << "Version 1" << endl;
    cout << "Le 1er entier va dans le 2eme, le 2eme dans le 3eme et le 3eme dans le 1er." << endl;
    cout << a << " = " << c << endl;
    cout << b << " = " << a << endl;
    cout << c << " = " << b << endl;
    cout << endl;
    //Version 2 : Le 1er entier va dans le 3ème, le 3ème dans le 2ème et le 2ème dans le 1er
    cout << "Version 2" << endl;
    cout << "Le 1er entier va dans le 3eme, le 3eme dans le 2eme et le 2eme dans le 1er." << endl;
    cout << a << " = " << c << endl;
    cout << c << " = " << b << endl;
    cout << b << " = " << a << endl;
    return 0;
}



mais ne connaissant pas le code encore bien comme il faut, je ne sais pas comment m'y prendre. Est-ce que quelqu'un serais m'aider sans me donner la réponse afin que j'essaye ? Ou est-ce le même type d'exercice que l'autre

Merci beaucoup

Utile
+1
plus moins
Bonjour,

Par permutation on entends modification des valeurs.

C'est à dire que le résultat attendu doit se faire avec toujours le même affichage des même variables dans le même ordre, c'est leur valeur qui aura changé entre temps pour produire un résultat différent.

cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
Donnez votre avis
Utile
+0
plus moins
Mais sinon le reste de mon exercice est juste ?

Parce que d'après ma prof et d'après ce que j'en ai conclu, il doit avoir autre chose.

merci en tout cas pour ton aide
loic.vazquez 14Messages postés samedi 24 avril 2010Date d'inscription 27 septembre 2017 Dernière intervention - 26 sept. 2017 à 20:01
ça doit donc donné ceci dans mon code :

#include <iostream>

using namespace std;

int main()
{
//Écrivez un programme qui demande 3 entiers et qui les permute.
//Les affichages demandés sont :
int a,b,c;
cout << "Entrer 3 entier pour la permutation" << endl;
cin >> a >> b >> c;
cout << endl;
cout << "Avant la permutation, le 1er entier = ? et le 2eme entier = ? et le 3eme entier = ? " << endl;
cout << "1er entier = " << a << "; 2eme entier = " << b << "; 3eme entier = " << c << endl;
cout << endl;
cout << "Apres la permutation, le 1er entier = ? et le 2eme entier = ? et le 3eme entier = ? " << endl;
cout << endl;
//Version 1 : Le 1er entier va dans le 2ème, le 2ème dans le 3ème et le 3ème dans le 1er
cout << "Version 1" << endl;
cout << "Le 1er entier va dans le 2eme, le 2eme dans le 3eme et le 3eme dans le 1er." << endl;
cout << "a = " << c << endl;
cout << "b = " << a << endl;
cout << "c = " << b << endl;
cout << endl;
//Version 2 : Le 1er entier va dans le 3ème, le 3ème dans le 2ème et le 2ème dans le 1er
cout << "Version 2" << endl;
cout << "Le 1er entier va dans le 3eme, le 3eme dans le 2eme et le 2eme dans le 1er." << endl;
cout << "a = " << c << endl;
cout << "c = " << b << endl;
cout << "b = " << a << endl;
return 0;
}
Répondre
loic.vazquez 14Messages postés samedi 24 avril 2010Date d'inscription 27 septembre 2017 Dernière intervention - 26 sept. 2017 à 20:03
j'ai ceci dans lorsque je lance mon code http://img-19.ccm2.net/Yt31YskBvufvozWe9DbhSlLTkdI=/3496d60a9888482da5721076f1c3fa52/tmp/Exercice_en_image.PNG
Répondre
KX 14836Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 11 octobre 2017 Dernière intervention - 26 sept. 2017 à 20:17
C'est le même code que tout à l'heure donc ma réponse est la même.

Tu ne fais pas ce que l'on te demande, tu dois modifier les valeurs et toujours afficher les variables dans le même ordre pour montrer qu'elle ont changé.

Toi tu triches à l'aide d'un subterfuge qui fait croire que tu affiches "a" (par exemple) alors qu'en fait ce n'est pas la variable "a" que tu affiches, mais en vrai le valeur réelle de "a" est toujours la même, au début comme à la fin, "a" vaut toujours 1...
Répondre
Donnez votre avis
Utile
+0
plus moins
Mais a ce moment la que dois-je changer dans mon code pour que ce ne soit pas pris comme un subterfuge ?

Parce que j'ai essayé d'autre code en changeant et en mettant ce que j'ai pus trouver sur internet mais je ne vois pas ou est mon erreur ?

Merci
loic.vazquez 14Messages postés samedi 24 avril 2010Date d'inscription 27 septembre 2017 Dernière intervention - 26 sept. 2017 à 23:30
oui je sais mais la je comprend plus rien, est-ce que tu sais me donner le bon code a écrire que je compare les 2 codes et je vois ou est mon erreur, a ce moment la je serai comment faire une permutation de 3 variables.

Merci
Répondre
KX 14836Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 11 octobre 2017 Dernière intervention - 26 sept. 2017 à 23:58
Tout était décrit dans ton énoncé :

"Version 1 : Le 1er entier va dans le 2ème, le 2ème dans le 3ème et le 3ème dans le 1er"
cout << "Avant la permutation, le 1er entier = " << a
     << " et le 2èm entier = " << b << " et le 3èm entier = " << c << endl;
int prems = a;
a = c; // le 3ème dans le 1er 
c = b; // le 2ème dans le 3ème
b = prems; // le 1er entier va dans le 2ème
cout << "Après la permutation, le 1er entier = " << a
     << " et le 2èm entier = " << b << " et le 3èm entier = " << c << endl;

"Version 2 : Le 1er entier va dans le 3ème, le 3ème dans le 2ème et le 2ème dans le 1er"
cout << "Avant la permutation, le 1er entier = " << a
     << " et le 2èm entier = " << b << " et le 3èm entier = " << c << endl;
int prems = a;
a = b; // le 2ème dans le 1er 
b = c; // le 3ème dans le 2ème
c = prems; // le 1er entier va dans le 3ème
cout << "Après la permutation, le 1er entier = " << a
     << " et le 2èm entier = " << b << " et le 3èm entier = " << c << endl;
Répondre
loic.vazquez 14Messages postés samedi 24 avril 2010Date d'inscription 27 septembre 2017 Dernière intervention - 27 sept. 2017 à 00:26
le "int prems" signifie quoi exactement ? ou en tout cas le "prems" ?

Merci pour ton aide en tout cas je vois bien ou est mon erreur la maintenant
Répondre
loic.vazquez 14Messages postés samedi 24 avril 2010Date d'inscription 27 septembre 2017 Dernière intervention - 27 sept. 2017 à 00:48
Voila j'ai donc changer le code que tu m'as donner par celui que j'avais j'obtiens donc ceci ;
#include <iostream>

using namespace std;

int main()
{
    //Écrivez un programme qui demande 3 entiers et qui les permute.
    //Les affichages demandés sont :
    int a,b,c;
    cout << "Entrer 3 entier pour la permutation" << endl;
    cin >> a >> b >> c;
    cout << endl;
    cout << "Avant la permutation, le 1er entier = " << a << " et le 2eme entier = " << b << " et le 3eme entier = " << c << endl;
    int prems = a ;
    a = b; // le 1er va dans le 2eme
    b = c; // le 2eme va dans le 3eme
    c = prems; // le 3eme va dans le 1er
    cout << "Apres la permutation, le 1er entier = " << a << " et le 2eme entier = " << b << " et le 3eme entier = " << c << endl;
    cout << endl;
    cout << "Avant la permutation, le 1er entier = " << a << " et le 2eme entier = " << b << " et le 3eme entier = " << c << endl;
    int prems = a ;
    a = c; // le 1er va dans le 3eme
    c = b; // le 3eme va dans le 2eme
    b = prems; // le 2eme va dans le 1er
    cout << "Apres la permutation, le 1er entier = " << a << " et le 2eme entier = " << b << " et le 3eme entier = " << c << endl;
    return 0;
}


mais lorsque je le lance il me met un message d'erreur a la ligne 14 et 21 pour les "int prems = a;"

ça signifie quoi cette ligne de code au juste ? surtout le "prems" et aussi comment je résous le problème qui me donne ?

Merci pour tout en tout cas, ça m'a bien aider
Répondre
KX 14836Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 11 octobre 2017 Dernière intervention - 27 sept. 2017 à 11:19
La variable "prems" aurait pu être n'importe quoi, en général on l'appelle plutôt "temp", ici ça aurait pu être "d" par exemple, moi je l'ai appelé prem's parce qu'elle contenait la première valeur.

Comme tu n'as pas fait l'exercice par toi même tu n'as pas pu voir ce qu'il se cache derrière, mais il est nécessaire de passer par une variable intermédiaire (un pivot).

Exemple avec deux variables :
a=1; b=2;

a=b; // a=2, b=2
b=a; // a=2, b=2

C'est faux, on a perdu la valeur 1. Pour la conserver il est nécessaire de la sauvegarder temporairement quelque part afin d'effectuer la dernière affectation.

a=1; b=2;

int prems=a; // prems=1, a=1, b=2
a=b; // prems=1, a=2, b=2
b=prems; // prems=1, a=2, b=1

Remarque : comme pour n'importe quelle autre variable, il ne faut la déclarer qu'une seule fois, ou alors changer son nom lors de la deuxième déclaration.
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !