Boucle for ( java )

Fermé
mehdidani - 1 nov. 2009 à 13:59
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 - 2 nov. 2009 à 12:18
Bonjour,
je suis censé résoudre cette exercice mais je n'y arrive pas :

Écrivez un programme qui va compter le nombre de nombres entiers compris entre m et n, deux entiers, qui sont divisibles par k, un entier positif.

Il faut résoudre ce problème à l'aide d'une boucle for, a priori, cela ne devrait pas être compliqué, mais quand on était pas présent au cours sur le sujet..
A voir également:

6 réponses

tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
1 nov. 2009 à 14:16
Je ne suis pas sûr de comprendre le problème et ce k et entiers positifs etc etc,
Mais résumons la boucle for en java (comme en c, c++, php):


for(action initiale; condition à vérifier; action entre les itérations)
{
}



dans ton cas, la boucle doit être de la forme


// vérifications: positifs, le "k" etc etc par des if/else

for(int i = n; i < m; i++)
{

           // des if/else

 }



Si c'est pas suffisant, explique plus ton problème
0
Déja merci pour la description de la bloucle for, même si cela ne résout pas mon problème!

L'énoncé du probleme, il est tel que je vous l'ai donné, cela dit pas évident à comprendre c'est vrai.

Je pense que je dois faire une boucle, qui calcule le nombre de nombres qu'il y a entre les entiers m et n.

Par exemple, pour m= 38 et n=34, on obtiendrai comme réponse 5 ( car il y a 5 nombres entre ces deux nombres )


34, 35, 36, 37, et 38

L'histoire du K je ne comprend pas trop non plus, je pense qu'il faut que les deux nombres ( m et n ) soit divisible par k qui est un entier positif.
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
1 nov. 2009 à 14:47
Alors:

int nombreEntiers = 0;

int max;
int min;

if(m < n)then
{
min = m;
max = n;
}else
{
min = n;
max = m;
}

for(int i = min; i <= max; i++)
{
nombreEntiers++;
}

</code>

Pour le cas: il te faut un if/else qui vérifie le modulo.
0
Salut,

Écrivez un programme qui va compter le nombre de nombres entiers compris entre m et n, deux entiers, qui sont divisibles par k, un entier positif.

Moi je traduirais cet ennoncé magnifique comme ceci:

   /*
     *  
     * Écrivez un programme qui va compter le nombre de nombres d'entiers compris entre m et n.
     * m et n sont deux entiers positifs.
     * Le nombre d'entiers à trouver est celui des nombres de l'interval qui sont divisibles
     * par k qui est également un entier positif.
     *
     */
      
// donc:
       
         int diviseur1 = 2;
       
         int m = 31;
         int m2 = m;
         int n = 35;
         int resultat = 0;
         int k = diviseur1;

         for (int i = 0; i < ((n-m)+1); i++)
           {
               //System.out.println("m2 = " + m2);

               if (m2%k == 0)
               {
                  resultat++;
               }
               m2++;
            }
            System.out.println("\nRESULTAT: " + resultat);


Cordialement,

Dan
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
2 nov. 2009 à 01:00
Ce n'est pas faux.. mais c'est comment faire compliqué quand on peut faire plus simple (et un peu optimisé) :)
L'écart minimum entre 2 nombres divisibles par k est k (!!) donc ça ne sert à rien de faire une "recherche" dans la for() avec un pas de 1 (par le i++).

int m = 9;
int n = 23;
int k = 5;
int nb = 0;

if(m%k == 0) {
	nb++;
}

for(int i = m+k-m%k; i < n ; i+=k) {
	nb++;
}

System.out.println("resultat : "+nb);


Au passage... la boucle for() est complètement inutile pour cet exercice... mais bon on n'est pas là pour noter la débilité de certains exercices :).
Puisque m+k-m%k nous donne le premier nombre A divisible par k et A > m.
De même n-n%k nous donne le dernier nombre B divisible par k et B < n.
Donc (B-A)/k ... avec 2 if() une pour tester si m est divisible par k, et une pour vérifier que A < B (ce qui n'est pas le cas si k > n-m)
0
Salut,

>> bizu53

Ce n'est pas faux non plus, mais je ne pense pas que la lecture de cette petite boucle (imposée) soit compliquée à lire, j'ai simplement choisi de détailler un peu...

D'autre part, cet exercice n'est pas débile puisque c'est un exercice proposé suite à un cours sur les boucles.
Par contre l'énoncé...

Cordialement,

Dan
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
2 nov. 2009 à 12:18
Pour un des tous premiers exercices sur les boucles for() je pense que le prof s'attend à ce qu'on utilise la variable incrémentée dans la for()... alors que tu fais un i++ pour faire du m2++. Je comprends bien ta façon de faire, mais disons que ce n'est pas forcément la manière la plus évidente, celle qui vient en premier à l'esprit.

C'est sûr qu'il faut bien commencer par de petits exercices pour apprendre à se servir des for().. mais celui là est particulièrement mal choisi je trouve, c'est tout. (pour moi l'énoncé fait l'exercice, je ne dis rien sur le fait qu'il faille faire des exercices suite à qqch vu en cours)

;-)

Pour en revenir à l'initiateur de la discussion, au moins, c'est un bel exemple qu'en programmation il y a rarement (pour ne pas dire jamais) qu'une seule façon de faire :)
0