Boucle for ( java )

mehdidani -  
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   122
 
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
mehdidani
 
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   Statut Membre Dernière intervention   122
 
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
danimo
 
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   Statut Membre Dernière intervention   861
 
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
danimo
 
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   Statut Membre Dernière intervention   861
 
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