IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Boucles for imbriquées


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 65
    Par défaut Boucles for imbriquées
    Bonsoir.
    J'ai une question sur des boucles for imbriquées.
    Lors de l'exécution d'un programme java, un entier n prend une valeur de façon dynamique, et ensuite j'aimerais faire n boucles for imbriquées. Est-ce que c'est possible en java?
    Sinon comment faire?
    merci.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Au dela du fait que tu n'a pas l'air de réaliser à quel point ton temps de calcul va exploser au delà du chiffre 5, il faut faire de la récursivité:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public int boucler(int boucles, int profondeur, int valeur){
        if (profondeur>1)
        for (int i=0;i<boucles;i++){
             valeur=boucler(boucles,profondeur-1,valeur);
        }
    }

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Bonjour,

    Pourrais tu nous dire pour quelles raisons tu souhaites faire n boucles imbriquées..... peut être y a t il une meilleur solution !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Tu veux coder une fonction ackermann ?

    Cordialement,
    Patrick Kolodziejczyk.

    source :
    http://en.wikipedia.org/wiki/Ackermann_function
    www.youtube.com/watch?v=i7sm9dzFtEI
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 65
    Par défaut
    Si,si, je réalise bien que le temps de calcul explose.

    C'est pour générer tous les entiers à n chiffres distincts.
    Si n est fixé dès le départ, je pense que le plus efficace (nombre de calculs, occupation mémoire), c'est n boucles for imbriquées.
    Par contre si n est initialisé au cours du programme, j'utilise la récursivité (ça ressemble un peu à la proposition de tchize):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void entierNChiffres(int niveau) {
    	for(int i=0; i<10; i++) {
    		int j = 0;
    		while (j <niveau && i != entier[j]) j++;
    		if (!(i==0 && niveau==1)  && j==niveau) {
    			entier[niveau-1] = i;
               	if (niveau == nbChiffres) affiche(entier);
                	else entierNChiffres(niveau+1);
    		}
    	}
    }
    void main(){
    	nbChiffres = 3;
     
    	entier = new int[nbChiffres];
    	for(int i=0; i<nbChiffres;i++) entier[i] = -1;
    	entierNChiffres(1);
    }

    Mais je me demandais si il n'y avait pas mieux au niveau nombre de calculs et mémoire (en évitant la récursivité par exemple).

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    En gros tu cherche toutes les combinaisons de 10 éléments parmis 10 où l'ordre à de l'importance, ça s'appelle un arrangement et effectivement la méthode la plus simple pour le résoudre c'est récursif, de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    arrangements(elements[])
      si elements vide, retourner le vide
      pour chaque element e de elements
        resultat = resultat U (e + arrangements(elements-e))
      retourner resultat
    tout simplement

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 65
    Par défaut
    Désolé Tchize mais je trouve ta solution moins bonne que la mienne:
    Pour renvoyer un arrangement (là je dirais plutôt permutation) de n éléments, ta fonction calcule les permutations de n-1 éléments, n-2 éléments... qui sont stockées en mémoire.
    Donc grosse occupation mémoire et beaucoup de calculs.
    Ma solution travaille sur une variable globale qui est modifiée à chaque appel récursif (donc peu d'occupation mémoire) et beaucoup moins de calculs.
    Mais est-ce qu'il n'y aurait pas une méthode encore meilleure, non récursive ?

Discussions similaires

  1. Boucles for imbriquées
    Par The eye dans le forum ASP
    Réponses: 2
    Dernier message: 19/07/2007, 12h00
  2. Boucle for imbriqué
    Par boula dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/07/2007, 12h42
  3. 2 boucles for imbriquées
    Par karimphp dans le forum Langage
    Réponses: 8
    Dernier message: 02/12/2006, 14h46
  4. Batch - Deux boucle For imbriquées plus un FC
    Par Lorponos dans le forum Windows
    Réponses: 17
    Dernier message: 27/07/2006, 14h58
  5. [Syntaxe] Boucle For imbriquées en 1.5
    Par Piolet dans le forum Langage
    Réponses: 5
    Dernier message: 09/01/2005, 00h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo