Partage
  • Partager sur Facebook
  • Partager sur Twitter

Permutation Circulaire

Sujet résolu
17 novembre 2018 à 19:56:59

Salut,

J'ai un exo dont voici la consigne

"Ecrire un programme qui permute circulairement à gauche 3 variable

Exemple : A = 1, B= 10, C=8"

Je souhaiterais savoir si ce programme est considéré comme la permutation circulaire ou si c'est juste un simple changement d'affectation. Y a t-il un algorithme plus "sophistiqué" ou "automatique" si par exemple on a 20 variables par exemple ?

        int tableauEntier[] = {1, 10, 8};
        System.out.println("A :" + tableauEntier[0]);
        System.out.println("B :" + tableauEntier[1]);
        System.out.println("C :" + tableauEntier[2]);

        System.out.println("Apres permutation à gauche");
        System.out.println("A :" + tableauEntier[1]);
        System.out.println("B :" + tableauEntier[2]);
        System.out.println("C :" + tableauEntier[0]);



Merci d'avance :)

-
Edité par ZeldaQuatre 17 novembre 2018 à 20:45:46

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2018 à 23:59:09

Bonsoir,

Il me semble bien qu'ici tu ne fait qu'afficher les cases de ton tableau dans un ordre different, je pense que le but est d'ecrire un algo qui te fait ta permunation sur n variable quelque soit n choisi, non ?

Est-ce que tu debute ? (C'est pour savoir si je te donne une reponse plus fournis ensuite ou pas ^^)

Question : Tu as choisi de le faire avec un tableau ou c'est impose ?

-
Edité par SawssenH 18 novembre 2018 à 0:02:28

  • Partager sur Facebook
  • Partager sur Twitter
18 novembre 2018 à 10:26:07

Oui je débute.

"Question : Tu as choisi de le faire avec un tableau ou c'est impose ?" Non c'est pas imposé.

Sinon j'ai trouvé un autre algo mais en faîte il ne permute pas à gauche il fait plutôt un tri par ordre croissant

        int a = 1, b = 10, c = 8;
        int aux;
        System.out.println("A : " + a);
        System.out.println("B : " + b);
        System.out.println("C : " + c);
        
        if (a>b) {
            aux=a;
            a=b;
            b=aux;
        }
        if (b>c){
        aux=b;
        b=c;
        c=aux;
        if(a>b) {
            aux=a;
            a=b;
            b=aux;
        }
        }
        
        System.out.println("Après permutation à gauche " );                
        System.out.println("A :" +a);
        System.out.println("B :" +b);
        System.out.println("C :" +c);

PS: aux veut dire variable auxiliaire:)

  • Partager sur Facebook
  • Partager sur Twitter
18 novembre 2018 à 12:13:15

Coucou.
Le fait de permuter circulairement à gauche revient à dire : la valeur de la cellule d'un tableau prend la valeur de la cellule suivante.
Voici un pseudo-code d'une fonction réalisant cela :
function circularPermutation (Input : in Integer[]) returns Integer[] is
	Output : Integer[] := Initialize_With_Size(Input.length())
begin
	for i in 0 .. (Input.length - 1) loop
		Output[i] := Input[i + 1];
	end loop;

	Output[Input.length - 1] = Input[0];

	return Output;
end circularCermutation;

-
Edité par Heziode 18 novembre 2018 à 14:25:42

  • Partager sur Facebook
  • Partager sur Twitter
Ensemble créons l'avenir !
18 novembre 2018 à 14:15:16

Alors tu peut tout mettre dans un tableau et creer une methode comme ca :

* -> ici tu stock la valeur de la case 1 (case 0 du tableau parce qu'un tableau va de 0 a taille-1)

** -> ici tu dis que la valeur de la case i va valoir la valeur de la case i+1 (ex tab[1] = 2 et tab[2] = 52 -> tab[1] = tab[2] maintenant tab[1] = 52 et tab[2] = 52) ca se passe dans une boucle for, une boucle for va faire un truc autant de fois que tu le voudra, ici je lui dis que de i=0 jusqu'a ce que i vaut taille-1 il met tab[i] = tab[i+1] puis il augmente i de 1 et recommence. Ca veut dire que dans ma premiere iteration i vaut 0 et du coup il fait tab[0] = tab[1] puis il augmente i de 1 et a ma seconde iteration i vaut 1 et du coup il me fait tab[1] = tab[2] etc..  jusqu'a ce que i = taille du tableau -1

***-> du coup ici je lui dit que la derniere case du tableau vaut la valeur de la premiere que j'avais stocke avant tout le changement !

Hesite pas si tu as d'autre question ou quoi c'est avec plaisir !

Petite erreur derniere ligne c'est tab[tab.length]

-
Edité par SawssenH 18 novembre 2018 à 14:16:50

  • Partager sur Facebook
  • Partager sur Twitter
18 novembre 2018 à 14:33:08

@SawssenH tu as fait deux fautes dans l'implémentation de l'algo que tu donnes.

  • ce n'est pas tab[length], ni tab[tab.length] mais tab[tab.length - 1] sinon tu va dépasser la taille du tableau
  • ton affectation dans ta boucle n'est pas bonne en raison du tab[i++]. En faisant cela tu incrément i de 2 par itération au lieu de 1. Il aurait fallu tab[i + 1]

Tu peux également utiliser la fonctionnalité code </> de l'éditeur du forum pour présenter le code. Ça facilite la vie à tout le monde :)

-
Edité par Heziode 18 novembre 2018 à 14:34:21

  • Partager sur Facebook
  • Partager sur Twitter
Ensemble créons l'avenir !
18 novembre 2018 à 15:10:21

Ou la la oui je l'ai fais tellement vite j'ai pas fais gaff !

Merci !

C'est la premiere fois que je publie du code ici :honte:

  • Partager sur Facebook
  • Partager sur Twitter
15 janvier 2020 à 19:50:30

comment faire une permutation circulaire vers la gauche
  • Partager sur Facebook
  • Partager sur Twitter
16 janvier 2020 à 14:53:37

Bonjour,

@MohamedArthur Merci de créer votre propre sujet, en nous fournissant le code que vous avez écrit.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

-
Edité par AbcAbc6 16 janvier 2020 à 14:54:38

  • Partager sur Facebook
  • Partager sur Twitter