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.
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
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).
il suffit de faire une boucle for, tester la divisibilité par 3 (ie le reste de la division par 3 est nul), afficher le nombre si c'est divisible et passer au suivant
Plutôt appliquer son intelligence à des conneries que sa connerie à des choses intelligentes...
15/01/2006 - 09h37
zoup1
Date d'inscription
juillet 2004
Localisation
Paris
Âge
48
Messages
3 766
Re : Problème Langage C Sorte de Boucle
Envoyé par L'Etudiant
J'ai pensé à while, for, if et else, mais je ne vois pas comment, avec ça, je pourrais arriver à mes fins.
Si tu as pensé à tout cela et que ne vois pas comment faire, c'est sans doute qu'il y a un truc que tu n'as pas compris.
- Saurais tu faire un programme qui affiche tous les nombre jusqu'à l'entier que tu as entré ?
- Saurais tu faire un programme qui t'indique que le nombre que tu as entré est divisible par 3 ?
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
15/01/2006 - 10h25
L'Etudiant
Date d'inscription
janvier 2006
Âge
25
Messages
42
Re : Problème Langage C Sorte de Boucle
Merci de vos réponses à vous deux.
Pour Pat7111, je vais essayer de chercher une solution en débutant par for.
Pour Zoup1, je ne sais faire aucun des deux programmes que vous m'avez dit, néanmoins je sais faire un programme qui affiche tous les entiers jusqu'à un certain entier :
#include <stdio.h>
void main()
{
printf("Voici un programme qui va vous afficher les dix premiers\nentiers naturels sous l'appellation de n.\n\n");
int n;
n=0;
printf("\nIl vous suffit pour cela d'appuyer sur la touche ''Entree'' de votre clavier\nafin que s'affichent les dix premiers entiers naturels, et ce dans l'ordre\ncroissant.\n\n\n");
scanf("n=%d",&n);
while (n<10)
{
printf("n = %d\n\n",n);
n++;
}
printf("\n\n");
return;
}
Voilà, mais je ne sais pas faire ce que vous m'avez dit.
Cependant, je vais essayer de chercher, et en faisant ce que m'a proposé Pat7111, et en essayant de faire dans l'ordre les programmes que vous m'avez dit Zoup1.
Merci de votre aide
15/01/2006 - 12h54
zoup1
Date d'inscription
juillet 2004
Localisation
Paris
Âge
48
Messages
3 766
Re : Problème Langage C Sorte de Boucle
Envoyé par L'Etudiant
#include <stdio.h>
void main()
{
printf("Voici un programme qui va vous afficher les dix premiers\nentiers naturels sous l'appellation de n.\n\n");
int n;
n=0;
printf("\nIl vous suffit pour cela d'appuyer sur la touche ''Entree'' de votre clavier\nafin que s'affichent les dix premiers entiers naturels, et ce dans l'ordre\ncroissant.\n\n\n");
scanf("n=%d",&n);
while (n<10)
{
printf("n = %d\n\n",n);
n++;
}
printf("\n\n");
return;
}
Bon alors il semblerait qu'il y ait quelques confusions dans ce que tu as écris. En particulier, la variable n est utilisée à différentes choses qui n'ont rien à voir les unes avec les autres.
Pour faire un programme qui affiche tous les nombres jusqu'à la valeur que tu entres au début, il n'y a pas grand chose à changer par rapport à ce que tu as déjà fait.
Quand tu fais scanf("n=%d",&n);
Cela a pour effet de mettre la valeur que tu tapes au clavier dans la variable n.
Si tu remplaces cela par quelquechose comme
printf("dernière valeur : ");
scanf("%d",&max);
Cela te permet de mémoriser cette valeur dans une autre variable que celle qui va te permettre de faire la boucle while. Il faut au préalable déclarer cette variable avec un int max.
Ensuite dans ta boucle tu remplace le while (n<10)
par un while (n<max) et le tour est joué.
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
En fait, l'on m'a demandé pour ce programme de faire une boucle qui affiche les 10 premiers entiers naturels.
Je n'ai pas vraiment compris ce qui n'allait pas dans mon programme.
Si j'ai bien compris ce que vous m'avez proposé, c'est de faire un programme qui affiche tous les entiers naturels du nombre que j'entre, ce nombre étant définit par max, c'est ça ? Mais moi je veux juste pour les nombres inférieurs à 10. Donc ai-je vraiment besoin de faire ce que vous m'avez dit ? (je vous pose la question car je ne sais pas si j'ai bien compris ce que vous m'avez proposé ^^).
Et sinon, pour mon programme du début, je ne sais vraiment pas quoi faire.
J'ai essayé plein de choses, dont ça, mais rien ne marche
#include <stdio.h>
void main()
{
int E1;
printf("Saisir un entier E1 : ");
scanf("%d",&E1);
if(E1%3==0)
{
printf("E1=%d%3",E1);
}
return;
}
Pouvez-vous m'aider plus s'il-vous-plait ?
Merci
15/01/2006 - 17h54
Pole
Date d'inscription
juin 2005
Localisation
Sur terre, mais parfois dans la Lune.
Âge
20
Messages
481
Re : Problème Langage C Sorte de Boucle
Fait un boucle for qui va de 0 à ton nombre.
A chaque fois teste la divisibilité par 3 du compteur.
Après, je te laisse finir.
for(a;b;c) est égal à : a;while(b)..............c;
Seulement la première écriture est plus courte.
Bonne programmation.
Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.
15/01/2006 - 19h24
L'Etudiant
Date d'inscription
janvier 2006
Âge
25
Messages
42
Re : Problème Langage C Sorte de Boucle
Euh, est-ce que c'est 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
15/01/2006 - 19h55
zoup1
Date d'inscription
juillet 2004
Localisation
Paris
Âge
48
Messages
3 766
Re : Problème Langage C Sorte de Boucle
Envoyé par L'Etudiant
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).
i s'incremente de 1 en 1. Tu n'as pas vraiment à parler de ce qu'il y a à l'intérieur de la boucle.
Tu pourrais écrire une boucle comme cela également ;
for (int i=0 ; i<E1 ; i+=3){
}
Auquel cas tu aurais effectivement une incrémentation de 3 en 3 dans ta boucle.
Enlève moi un doute : Tu disposes d'un compilateur ? Parce que on ne peut passer son temps à vérifier que ce que tu écris est correct. Un compilateur C fait cela plus rapidement et plus surement que nous... On peut t'être utilise si le résultat obtenu ne correspond pas à ce que tu pensais obtenir....
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
15/01/2006 - 20h04
Philder
Date d'inscription
janvier 2006
Localisation
Londres
Âge
30
Messages
192
Re : Problème Langage C Sorte de Boucle
Salut,
si l'on reprend ton problème de départ: afficher tous les entiers divisibles par 3 qui sont inférieurs à une valeur saisie par l'utilisateur. Voici la démarche en pseudo-code:
debut
saisir valeur maximum (max)
pour i=3 a max (compris) par pas de 3 (i=i+3)
afficher i
fin pour
fin
(en effet il n'est pas nécessaire de parcourir tous les entiers puisque tu n'as besoin que de ceux divisible par 3, on commence donc a 3, puis 3+3, puis 3+3+3 ... jusqu'à la valeur saisie par l'utilisateur)
Par rapport au dernier code que tu as écrit:
void main()
{
int E1;
printf("Saisir un entier E1 : ");
scanf("%d",&E1);
for(int i=0;i<E1;i++) // i va de 0 à E1 par pas de 1 (i++ équivalent à i=i+1)
{
if((i%3)==0) // si (i%3) == 0 alors c'est divisible par 3
{
printf("%d ",i);
}
}
if(i==E1 && (i%3)==0) // si (i%3) == 0 alors c'est divisible par 3, la première condition est inutile puisque à la fin de ta boucle i vaudra forcément E1
{
printf("%d ",i);
}
return;
}
Bon courage
15/01/2006 - 20h41
L'Etudiant
Date d'inscription
janvier 2006
Âge
25
Messages
42
Re : Problème Langage C Sorte de Boucle
Pour Zoup1
Ah, effectivement, je peux soit faire
for (int i=0 ; i<E1 ; i++){}
soit faire
for (int i=0 ; i<E1 ; i+=3){}
En fait, si j’ai bien compris, bien que plus loin je demande que I augmente de 3 en trios, le fait de faire i++ est aussi bien que de faire i+=3, car même en faisant i++, ça augmentera certes de un en un, mais ça ne conservera que les entiers divisibles par trois.
Merci de vos explication
Et pour vous enlever votre doute, oui, j’ai un compilateur, j’ai Microsoft Visual Studio.Net 2003.
Pour Philder
Effectivement, je n’ai pas besoin de parcourir tous les entiers
Et merci, effectivement, dans mon deuxième if, ma première condition était inutile, car contrairement au premier, celui-ci n’était pas dans un for où i<E1 ^^
Mais par contre, il y a une dernière chose que je n'ai pas comprise, c'est pourquoi dans mon deuxième cas (deuxième if) fait que i va jusqu'à E1 si E1 est divisiblie par 3. Comment se fait-il qu'il n'aille pas à l'infini, car je n'ai dit nul part que i devait être inférieur ou égal à E1 (c'est pour ça que j'avais mis i=E1 au début ^^).
Pourriez-vous m'expliquer SVP ?
Voilà, merci à tout ceux qui m’ont répondu pour leur aide, car j’ai compris pas mal de choses là
Bonne soirée
Dernière modification par L'Etudiant ; 15/01/2006 à 20h45.
15/01/2006 - 20h57
zoup1
Date d'inscription
juillet 2004
Localisation
Paris
Âge
48
Messages
3 766
Re : Problème Langage C Sorte de Boucle
Je ne suis pas sur que tu es bien compris le déroulement linéaire du programme. i ne va pas à l'infini car c'est la boucle for qui controle son évolution (pas les if) or dans cette boucle for tu demande que :
- la première valeur prise par i soit 0
- ce qui se trouve entre les accolades de la boucle soit éxécuté
- puis qui i soit augmenté de 1
- et enfin de sortir de la boucle lorsque i n'est plus plus petit que E1.
Donc i ne prend que les valeurs comprisent entre 0 et E1 (E1 exclu d'ailleurs)
Ce que je te suggère c'est d'essayer d'utiliser le débuggueur de ton environnement de développement pour pouvoir suivre pas à pas ce que fait le programme que tu es en train d'écrire.
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
15/01/2006 - 21h08
L'Etudiant
Date d'inscription
janvier 2006
Âge
25
Messages
42
Re : Problème Langage C Sorte de Boucle
Bah non, justement, dans mon programme, j'ai fait en sorte que le deuxième if soit indépendant du for.
Regardez, j'ai fait comme ça :
for{if{}}
if{}
Donc le if ne dépend plus du for normalement, vu qu'il n'est pas dedans.
Ou alors, je n'ai rien compris ^^
En tous cas, en faisant ainsi (ie en mettant le if à l'extérieur du for), ça marche très bien, pour les entiers non divisibles par 3, il m'affiche tous les entiers divisibles par trois inférieurs à celui que j'ai saisi, et pour un entier divisible par trois, il m'affiche tous les entiers divisibles par trois jusqu'à celui que j'ai tapper.
Mais c'est justement là que je ne comprend pas pourquoi il ne va pas au delà (car mon if n'est pas dans mon for, mais si j'ai mal compris, alors mon autre imcompréhension vient de là ^^).
Merci de prendre le temps de me répondre, c'est sympa
++
15/01/2006 - 22h22
zoup1
Date d'inscription
juillet 2004
Localisation
Paris
Âge
48
Messages
3 766
Re : Problème Langage C Sorte de Boucle
Tu as raison, j'avais regardé trop vite...
Alors cela veut dire qu'il n'y a aucune raison de faire réference à i l'indice de boucle dans cette condition du if.
Je ne comprend toujours pas pourquoi tu voudrais que les choses aillent au delà de 10 ?
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
16/01/2006 - 00h40
Philder
Date d'inscription
janvier 2006
Localisation
Londres
Âge
30
Messages
192
Re : Problème Langage C Sorte de Boucle
Envoyé par L'Etudiant
Bah non, justement, dans mon programme, j'ai fait en sorte que le deuxième if soit indépendant du for.
Regardez, j'ai fait comme ça :
for{if{}}
if{}
Donc le if ne dépend plus du for normalement, vu qu'il n'est pas dedans.
Ou alors, je n'ai rien compris ^^
Ce que je te disais c'est que ton deuxième if dépend de comment s'est terminé ton for puisque tu testes la variable d'itération (i). Quand le for est terminé, ta variable i vaut E1 (puisque il est exclu dans la condition du for).