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 :

encore un probleme de boucle


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut encore un probleme de boucle
    Salut

    J'ai ce tp a faire :



    Considérons les opérations suivantes applicables à un nombre entier :
    — si ce nombre est divisible par 3, on lui ajoute 4;
    — s’il n’est pas divisible par 3 mais divisible par 4, on le divise par 2;
    — s’il n’est divisible ni par 3, ni par 4, on lui soustrait 1.
    On répète ces opérations successivement jusqu’à arriver à 0. Concrètement, partant
    d’un entier n0, on applique les opérations à n0 pour obtenir n1, puis si n1
    n’est pas nul, on lui applique à nouveau les opérations précédentes, et ainsi de
    suite jusqu’à obtenir un nombre nk valant 0. Par exemple, si on part de 7, on
    trouve successivement les valeurs : 6, 10, 9, 13, 12, 16, 8, 4, 2, 1 et0. Le nombre
    k de répétitions des opérations décrites ci-dessus est alors 11. Par contre, si on
    part de 1, on tombe tout de suite sur 0, et le nombre de répétitions est alors de
    k = 1. On vous demande d’écrire un programme qui affiche le nombre de répétitions
    des opérations précédentes nécessaires pour tomber à 0, en partant tour à tour
    de chacun des entiers compris entre deux entiers saisis au clavier. Par exemple si
    l’on demande ce nombre de répétitions pour chaque entier entre 1 et 7, l’affichage
    produit par votre programme devra être :
    1 -> 1
    2 -> 2
    3 -> 12
    4 -> 3
    5 -> 4
    6 -> 10
    7 -> 11
    1
    Ici, 1 et 7 (dans la 1re colonne) sont les bornes entrées au clavier, et la seconde
    colonne correspond au nombre de répétitions nécessaires pour arriver à 0 en partant
    de chacun des nombres de la 1re colonne, par exemple 11 répétitions pour 7. Si
    l’on demande ce nombre de répétitions pour les entiers entre 99 et 100, l’affichage
    du programme devra être :
    99 -> 18
    100 -> 17


    J'en suis la :
    <-------------------------------------------------------------------------------------------------------------------------------------------------------------------->
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    import java.util.Scanner;
     
    public class Suite {
     
    		public static void main(String[] args) {
     
    	        Scanner clavier = new Scanner(System.in);
     
    			int debut=1;
    	        /**do {
                        System.out.print("de (>= 1) ? ");
                        debut = clavier.nextInt();
                    } while (debut < 1);**/
     
    	        int fin=7;
    	        /**do {
                        System.out.print("a (>= " + debut + ") ? ");
                        fin = clavier.nextInt();
                    } while (fin < debut);**/
     
    	        /*******************************************
                     * Completez le programme a partir d'ici.
                     ******************************************/
    	        int n0=fin;
    	        int n1=0;
    	        int d=debut;
    	        int f=fin;
    	        int compteur=0;
     
    	        do
    	        {
          	if(d<f);
    	        {
    	        	compteur++;
    	        	if(n0%3==0)
    	        	{
    	        		n0+=4;
    	        		}
    	        	else if(n0%4==0)
    	        	{
    	        		n0/=2;
    	           	}	
    	        	else
    	        	{
    	        		if (!(n0%3==0))
    	        		{
    	        			if(!(n0%4==0))
    	        			{
    	        				n0-=1;
     
    	        			}
    	        		}	
    	        		}	     			
    	         	System.out.print(d+"---->");
     
    	         	d++;
    	        }
    	        System.out.println(compteur);
    	        }   while(n0!=0);
     
    	        /*******************************************
                     * Ne rien modifier apres cette ligne.     *
                     *******************************************/
    	        clavier.close();
    		}
    }
    <----------------------------------------------------------------------------------------------------------------------------------------------------------------------------->


    Je pense que mon souci se situe ici sans certitude)

    On vous demande d’écrire un programme qui affiche le nombre de répétitions
    des opérations précédentes nécessaires pour tomber à 0, en partant tour à tour
    de chacun des entiers compris entre deux entiers saisis au clavier.

    tour a tour veut dire je pense que n0 doit devenir n1...mais ci c'est cela je ne vois pas comment faire.


    merci a vous pour vos reponse.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il y a plus qu'un problème de boucle dans ton programme.
    1. Déjà if(d<f);Le point-virgule fait que ce test qu'il soit vrai ou faux, ne déclenche aucun code. Le bloc qui suit, lui est exécuté à chaque tour de boucle (il n'est pas conditionné ce if).
    2. Ensuite, tu as 2 "problèmes" à résoudre :
      1. le calcul d'une suite
      2. les différents résultats du calcul de cette suite pour différentes valeurs de n0, allant de d à f

      Ce n'est pas du tout ce que fait ton programme.
      En résumé, on fait varier d jusqu'à ce qu'il soit supérieur à f (le test (d<=f) (pas d<f d'ailleurs parce qu'on doit faire le calcul pour f inclus) doit être une condition de fin de boucle et pas un simple if.
      Ensuite pour chaque n0=d, on calcule les différents ni jusqu'à trouver un ni qui vaut 0. Une autre condition de fin de boucle.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      System.out.print(d+"---->");
       d++;
      fait qu'on affiche dans la boucle de calcul de la suite différentes valeurs de d... alors que cette valeur ne doit être affichée qu'une fois par suite complète, associé au compteur. compteur qu'il faut réinitialiser chaque fois qu'on part d'un nouveau n0=d.
    3. On a donc 2 boucles : une avec incrément de compteur pour le calcul des différents termes de la suite (telle que n0=d au départ), avec condition de sortie sur n0 (n0==0), et une pour les différentes valeur de n0 au départ (qui varie de debut à fin inclus, donc un for serait le plus simple), et c'est la seule qui affiche quelque chose.


    A noter par ailleurs que ces deux tests sont inutiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if (!(n0 % 3 == 0)) {
    	 if (!(n0 % 4 == 0)) {
    En effet, n0%3==0 ayant été sélectionné pour le if (n0 % 3 == 0) {, ne peut être vrai dans le else. Idem pour le second test.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    salut

    merci pour ta reponse

    du coup pour le if(d<f);
    c'est un probleme de copier/coller car j'avais essayer avec une boucle do-while(je l'ai d'ailleurs toute essayer )

    ensuite j'ai vraiment un souci avec ce fait de je te cite :

    réinitialiser chaque fois qu'on part d'un nouveau n0=d.

    merci a toi

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    bah, tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for(int d=debut; d<=fin; d++) { // d varie de debut à fin inclus
     
         int n0=d; // terme initial de la suite n(0)=d
         int compteur=0; // pour compter le nombre de termes pour que n(i) soit égal à 0 
         while( n0!=0 ) {
               // je te laisse compléter...
         }
         System.out.println(d+" -> " + compteur); // on affiche le nombre de termes pour que n(i) soit 0 pour n(0)=d
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut ok merci
    re,

    oui bah en fait je l'ai fait cette boucle mais je declarais compteur et n0 a l'exterieur de la boucle alors du coup ca matchais pas.

    merci a toi
    par contre j'ai aussi reussi a afficher de 1 a 7 pour la premiere boucle et de 1 a 11 pour la seconde et avoir mes valeurs de 6, 10, 9, 13, 12, 16, 8, 4, 2, 1 et 0.
    et du coup coup j'ai du mal a voi l'utilite de faire ca ou plutot l'application que l'on peut en avoir ???ou bien est ce juste une utilite de maitrise des boucles dans le cadre d'un exercice..

    en tout cas encore merci ...

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par flyman29600 Voir le message
    ou bien est ce juste une utilite de maitrise des boucles dans le cadre d'un exercice..
    Je pense que c'est tout à fait ça.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut est ce ???
    est ce qu'autrement ce calcul est une suite de syracuse??
    j'avais trouve un tp ou il ne demandais pas le nombre de tours et ou le format de calcu etait le meme???
    merci

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par flyman29600 Voir le message
    est ce qu'autrement ce calcul est une suite de syracuse??
    On est sur un forum Java, ici, pas de Mathématiques... A priori, je dirais que ça ressemble par la forme à une série de Syracuse.
    Citation Envoyé par flyman29600 Voir le message
    'avais trouve un tp ou il ne demandais pas le nombre de tours
    Ok...ça te demandais pas de faire quelque chose... et donc ?
    Citation Envoyé par flyman29600 Voir le message
    et ou le format de calcu etait le meme???
    Le format de calcul ? Qu'est-ce que c'est ? Le même que quoi ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut merci
    c'etait une question de culture general.
    merci

Discussions similaires

  1. Encore un probleme de boucle for
    Par flysurfer dans le forum Flash
    Réponses: 1
    Dernier message: 28/04/2008, 14h44
  2. [Language]Problème de boucle
    Par marc_dd dans le forum Langage
    Réponses: 11
    Dernier message: 06/10/2005, 14h24
  3. Problem de boucle.....
    Par skad dans le forum C++
    Réponses: 6
    Dernier message: 29/09/2005, 16h28
  4. [C#] Probleme de boucle for et random
    Par Freeman166 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/01/2005, 14h34
  5. Réponses: 7
    Dernier message: 16/07/2004, 13h24

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