Combinaisons possibles

Melissa75 Messages postés 21 Statut Membre -  
heyquem Messages postés 808 Statut Membre -
Bonjour, j'ai le programme java suivant qui permet de me donner les résultats ci-dessous:
public class Combin1 {

	public String[] init() {
		String mots[] = new String[3];
		mots[0] = "nom";
		mots[1] = "prenom";
		mots[2] = "age";

		return mots;
	}

	public int convertir_binaire(int x, int resultat[]) {
		int quotient, nb_bits = 0;
		int dividende = x;

		do {
			quotient = dividende / 2;
			resultat[nb_bits] = dividende - (2 * quotient);
			nb_bits++;
			dividende = quotient;
		} while (quotient > 0);

		return nb_bits;
	}

	void afficher_parties(int nb_elts, String[] m) {
		int i;
		int[] resultat = new int[8];
		for (int p = 0; p < 8; p++)
			resultat[p] = 0;

		int x = 0;
		int n = convertir_binaire(x, resultat);
		int compteur = 1;
		
		while (n <= nb_elts) {
		
			for (i = 0; i < n; i++)
				
				if (resultat[i] == 1)
					System.out.println(m[i]);
					
		
			System.out.println("\n");
			compteur++;
			x++;
			n = convertir_binaire(x, resultat);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Combin1 c = new Combin1();
		String ma[] = c.init();
		int nb_elts = ma.length;
		c.afficher_parties(nb_elts, ma);
}
}

ce programme me fournit le résultat suivant:

nom


prenom


nom
prenom


age


nom
age


prenom
age


nom
prenom
age

Mes questions sont: comment je pourrai modifier dans mon programme de tel sorte à éliminer l'apparence des combinaisons d'ordre 1 à savoir: nom tout seul, prenom tout seul ou age tout seul.
En plus comment je pourrai faire pour rajouter les autres combinaisons: puisque d'après ce programme j'obtiens par exemple "nom prenom" mais non pas l'inverse et ainsi de suite.
comment je pourrai mettre en jeux le signe ==> entre les différentes chaines de caractères? par exemple nom==>prenom , prenom==>nom,....
merci d'avance.

1 réponse

heyquem Messages postés 808 Statut Membre 131
 
Bonjour,

Pour le fun, je me suis demandé comment faire ce que tu veux en Python.
Ca donne ceci:

from itertools import permutations 

itrbl = ('nom','prenom','age') 
for i in xrange(2,len(itrbl)+1): 
    for el in permutations(itrbl,i): 
        print el,'   ','==>'.join(el)


qui affiche

('nom', 'prenom')     nom==>prenom 
('nom', 'age')     nom==>age 
('prenom', 'nom')     prenom==>nom 
('prenom', 'age')     prenom==>age 
('age', 'nom')     age==>nom 
('age', 'prenom')     age==>prenom 
('nom', 'prenom', 'age')     nom==>prenom==>age 
('nom', 'age', 'prenom')     nom==>age==>prenom 
('prenom', 'nom', 'age')     prenom==>nom==>age 
('prenom', 'age', 'nom')     prenom==>age==>nom 
('age', 'nom', 'prenom')     age==>nom==>prenom 
('age', 'prenom', 'nom')     age==>prenom==>nom


39 lignes ton code qui ne fait pas tout, 5 lignes le code en Python qui fait tout et que j'ai mis 5 minutes à écrire
Y a pas photo.

Juste pour info.

Bonne chance avec Java
0
heyquem Messages postés 808 Statut Membre 131
 
PS:

Je me suis dit qu'il doit bien y avoir, comme en Python, une fonction qui produise des permutations disponible dans les librairies de Java.
Tu aurais intérêt à l'utiliser pour raccourcir ton code. A moins que tu souhaites coder à titre d'exercice.

Mais ça n'a pas l'air facile de trouver une telle fonction:
"It would be nice if there were a reasonably well-known library that implemented this sort of thing. Please let us know if you do find one. "
https://coderanch.com/t/416646/java/Permutations

Je n'en suis qu'à moitié étonné.
N'y a-t-il pas de bibliothèques standard en Java qui fournissent rapidement les fonctions les plus usuelles ?
0
Melissa75 Messages postés 21 Statut Membre
 
Woow vraiment rien à dire!!! ça me donne envi de basculer vers le Python!!! Apparemment il n y a pas une bibliothèque java qui permet de faciliter la tache comme pour Python :/ Merci beaucoup pour vos contributions heyquem, c'est très gentil :) Y a t il une façon de modifier mon code pour avoir des résultats semblables à ceux de heyquem???
0
heyquem Messages postés 808 Statut Membre 131
 
Je vois que tu prends bien ma réponse, merci. Ce n'est pas toujours le cas, particulièrement de la part de javaïstes.
Mon but n'est pas que quelqu'un change brusquement de langage, ce n'est pas facile de changer, mais juste de donner l'envie de vraiment comparer. Il y a trop d'inertie en informatique, je crois que certains s'accrochent à des convictions et repoussent de façon réflexe tout ce qui n'est pas leur langage mais qu'il y en a beaucoup qui ne pensent tout simplement pas à s'intéresser de près au moins une fois à ce que pourraient leur apporter d'autres habitudes.

Je n'arrive quand même pas à croire qu'il n'y a pas de bibliothèque , soit standard soit extérieure à Java, qui forunisse une fonction donnant les permutations.
Tu aurais sans doute intérêt d'aller voir un peu sur le forum Java de developpez.com ce qu'on pourrait t'y répondre, il y a des membres balèzes là-bas dans tous les langages.

nb: pas la peine de me vouvoyer :)
0