[C] Problème avec une sorte de boucle.

L'Etudiant -  
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir.

En fait, je débute en langage C, et j'aimerais bien faire un petit programme qui fait en sorte que, lorsque l'on tappe un entier relatif par exemple, celui-ci nous affiche toutes les entiers naturels inférieurs ou égaux à la valeur entrée tels que tous ces entiers soient divisibles par 3.



Alors j'ai juste fait la partie la plus simple du programme, à savoir :



#include <stdio.h>

void main()

{

int n;

printf("Saisir un entier n : ");

scanf("%d",&n);



return;

}



Mais après le scanf, je ne sais pas du tout par quoi continuer.

J'ai pensé à while, for, if et else, mais je ne vois pas comment, avec ça, je pourrais arriver à mes fins.



Voilà, alors je voudrais savoir si quelqu'un pourrait m'aider, mais sans me faire le programme, juste en me donnant quelques indices, car j'aimerais trouver tout seul (avec votre aide bien entendu).



Merci et bonne soriée.

11 réponses

L'Etudiant
 
Ah oui, excusez-moi, par exemple, si l'on entre l'entier 14, le programme nous affiche 3 ; 6 ; 9 ; 12.

Si l'on entre 20 : 3 ; 6 ; 9 ; 12 ; 15 ; 18.

Etc ...

Donc j'aimerais bien savoir comment on peut faire en sorte que ça fasse ça ;)

Merci de votre aide :)
0
L'Etudiant
 
Euh, quelqu'un pourrait-il m'aider SVP ?
0
L'Etudiant
 
Vraiment personne :(
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
salut

si on veut bien t'aider mais y nous faut ton numéro de carte bleue tu comprends bien : )
Plus sérieusement il suffit de faire une boucle for, qui ira de i=0 à i=à l'entier entré.Cela nous donne donc la boucle suivante :

for(int i=0;i<n;i++)
{
}

Ensuite dans cette boucle on veut sélectionner les différentes valeurs de i qui sont multiples de 3, et donc qui donnent un reste de division par 3 nul. Par exemple en faisait m=n%2, on aura dans la variable m le reste de la division de n par 2. Si ce reste est nul, n est donc un multiple de 2; si n=1, alors n n'est pas multiple de 2. Donc ca fera un boucle comme ca :

int m;

for(int i=0;i<n;i++)
{
if((i%3)==0)
{
printf("%d ",i);
}
}

Voila j'espère que ca répond a ta question si ca marche pas revient, je me pencherais plus sur le problème.
0

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

Posez votre question
L'Etudiant
 
Alors mon numéro de carte bleue, c'est ... euh ... arf mais je n'ai pas de carte bleue !!! Désolé ^^

Pour ce que vous m'avez proposé, c'est génial, mais je ne comprend rien ^^

Je vais étudier ce que vous m'avez écrit et tenter de comprendre ;)

Par contre, le seul problème, c'est que, quand par exemple, j'entre l'entier quinze, il me met tout jusqu'à douze, mais pas quinze compris (alors que 15 est divisible par 3.

Comment faire pour faire en sorte qu'il compte 15 ?

En vous remerciant.
0
L'Etudiant
 
Ahhhhhhhhhhhh, j'ai trouvé, oh miracle ^^

Voici mon programme (enfin la plupart à été fait par vous :D) :



#include <stdio.h>

void main()

{



int E1;



printf("Saisir un entier E1 : ");

scanf("%d",&E1);

for(int i=0;i<E1;i++)
{
if((i%3)==0)
{
printf("%d ",i);
}
}
if(i==15)
{
printf("%d ",i);
}



return;

}



Merci encore de votre aide.

Maintenant, je vais essayer de comprendre pourquoi vous avez utilisé ces termes, et comment ça se fait que ça marche ;)

Bonne soirée ;)
0
L'Etudiant
 
Euhhh, à la place de 15, c'est E1 :D
0
L'Etudiant
 
Arf, excusez-moi pour écrire plusieurs messages à la suite, mais je me suis encore trompé.

Voilà ce que je pense être bon :



#include <stdio.h>

void main()

{



int E1;

printf("Saisir un entier E1 : ");

scanf("%d",&E1);

for(int i=0;i<E1;i++)

{

if((i%3)==0)

{

printf("%d ",i);

}

}

if(i==E1 && (i%3)==0)

{

printf("%d ",i);

}



return;

}



Par contre, j'aurais un question :

Pourquoi dans la parenthèse de for, on incrémente i ?

Je vous dis ce que je pense avoir compris :

for (int i=0 ; i<E1 ; i++)

Alors voilà ce que j'ai compris :

On définit un entier i que l'on initialise comme égal à 0 (car 0 est divisible par 3), puis on dit qu'il ne peut être qu'inférieur à E1, puis on fait en sorte qu'il s'incrémente de trois en trois (grâce à ce que l'on écrit dans le if).

Ai-je bien compris ?

Merci de votre aide ;)

Bonne soirée ;)
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
c'est a peu pès ca.

en fait en algorithmique ca donne : pour i allant de 0 à E1-1 par pas de 1(d'où le i++ , qui signifie en fait que l'on incrémente i de 1 (par pas de ...) ).

Au départ on a effectivement i qui vaut zéro.

On effectue les actions présentes dans la boucle .A la fin de la boucle, on incrémente i de la valeur que l'on veut(ici i++ ou (i=i+1); on pourrait aussi bien mettre i=i+3, ce qui incrémenterait i de 3 à la fin de la boucle).

ensuite on regarde si i est inférieur à i E1 : si c'est le cas on effectue de nouveau les actions dans la boucle; sinon la boucle se termine et l'on poursuit le programme.

J'espère que j'ai été assez clair, sinon redemandez moi. Voila
0
L'Etudiant
 
Non non, merci beaucoup, c'est très bien expliqué, j'ai compris ;)

Merci de votre aide.

Au fait, une dernière chose, je pourrais aussi faire comme ça :



#include <stdio.h>

void main()

{

int E1;

printf("Saisir un entier naturel E1 : ");

scanf("%d",&E1);

printf("\n\n\nTous les entiers naturels divisibles par trois et inferieurs ou egaux\na la valeur E1 entree sont : \n\n\n\n");

for(int i=0;i<=E1;i++)

{

if((i%3)==0)

{

printf("%d ",i);

}

}



printf("\n\n\n\n");

return;

}



Voilà, merci encore, et bonne soirée ;)
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
Oui vous pouvez également faire cela.

Bonne soirée également.
0