Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

Problème Langage C Sorte de Boucle



  1. #1
    L'Etudiant

    Problème Langage C Sorte de Boucle


    ------

    Bonjour à tous

    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).



    Merci de votre aide

    -----

  2. Publicité
  3. 📣 Nouveau projet éditorial de Futura
    🔥🧠 Le Mag Futura est lancé, découvrez notre 1er magazine papier

    Une belle revue de plus de 200 pages et 4 dossiers scientifiques pour tout comprendre à la science qui fera le futur. Nous avons besoin de vous 🙏 pour nous aider à le lancer...

    👉 Je découvre le projet

    Quatre questions à explorer en 2022 :
    → Quels mystères nous cache encore la Lune 🌙 ?
    → Pourra-t-on bientôt tout guérir grâce aux gènes 👩‍⚕️?
    → Comment nourrir le monde sans le détruire 🌍 ?
    → L’intelligence artificielle peut-elle devenir vraiment intelligente 🤖 ?
  4. #2
    pat7111

    Re : Problème Langage C Sorte de Boucle

    il suffit de faire une boucle for, tester la divisibilit&#233; 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...

  5. #3
    zoup1

    Re : Problème Langage C Sorte de Boucle

    Citation 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.

  6. #4
    L'Etudiant

    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

  7. A voir en vidéo sur Futura
  8. #5
    zoup1

    Re : Problème Langage C Sorte de Boucle

    Citation 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.

  9. #6
    L'Etudiant

    Re : Problème Langage C Sorte de Boucle

    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

  10. Publicité
  11. #7
    Pole

    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.

  12. #8
    L'Etudiant

    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

  13. #9
    zoup1

    Re : Problème Langage C Sorte de Boucle

    Citation 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.

  14. #10
    Philder

    Re : Problème Langage C Sorte de Boucle

    Salut,
    si l'on reprend ton probl&#232;me de d&#233;part: afficher tous les entiers divisibles par 3 qui sont inf&#233;rieurs &#224; une valeur saisie par l'utilisateur. Voici la d&#233;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&#233;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'&#224; la valeur saisie par l'utilisateur)

    Par rapport au dernier code que tu as &#233;crit:

    void main()
    {
    int E1;
    printf("Saisir un entier E1 : ");
    scanf("%d",&E1);
    for(int i=0;i<E1;i++) // i va de 0 &#224; E1 par pas de 1 (i++ &#233;quivalent &#224; 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&#232;re condition est inutile puisque &#224; la fin de ta boucle i vaudra forc&#233;ment E1
    {
    printf("%d ",i);
    }
    return;
    }

    Bon courage

  15. #11
    L'Etudiant

    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&#234;me en faisant i++, &#231;a augmentera certes de un en un, mais &#231;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&#232;me if, ma premi&#232;re condition &#233;tait inutile, car contrairement au premier, celui-ci n’&#233;tait pas dans un for o&#249; i<E1 ^^



    Mais par contre, il y a une derni&#232;re chose que je n'ai pas comprise, c'est pourquoi dans mon deuxi&#232;me cas (deuxi&#232;me if) fait que i va jusqu'&#224; E1 si E1 est divisiblie par 3. Comment se fait-il qu'il n'aille pas &#224; l'infini, car je n'ai dit nul part que i devait &#234;tre inf&#233;rieur ou &#233;gal &#224; E1 (c'est pour &#231;a que j'avais mis i=E1 au d&#233;but ^^).
    Pourriez-vous m'expliquer SVP ?


    Voil&#224;, merci &#224; tout ceux qui m’ont r&#233;pondu pour leur aide, car j’ai compris pas mal de choses l&#224;

    Bonne soir&#233;e
    Dernière modification par L'Etudiant ; 15/01/2006 à 21h45.

  16. #12
    zoup1

    Re : Problème Langage C Sorte de Boucle

    Je ne suis pas sur que tu es bien compris le d&#233;roulement lin&#233;aire du programme. i ne va pas &#224; l'infini car c'est la boucle for qui controle son &#233;volution (pas les if) or dans cette boucle for tu demande que :
    - la premi&#232;re valeur prise par i soit 0
    - ce qui se trouve entre les accolades de la boucle soit &#233;x&#233;cut&#233;
    - puis qui i soit augment&#233; 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&#232;re c'est d'essayer d'utiliser le d&#233;buggueur de ton environnement de d&#233;veloppement pour pouvoir suivre pas &#224; pas ce que fait le programme que tu es en train d'&#233;crire.
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  17. Publicité
  18. #13
    L'Etudiant

    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

    ++

  19. #14
    zoup1

    Re : Problème Langage C Sorte de Boucle

    Tu as raison, j'avais regard&#233; trop vite...
    Alors cela veut dire qu'il n'y a aucune raison de faire r&#233;ference &#224; i l'indice de boucle dans cette condition du if.

    Je ne comprend toujours pas pourquoi tu voudrais que les choses aillent au del&#224; de 10 ?
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  20. #15
    Philder

    Re : Problème Langage C Sorte de Boucle

    Citation 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).

  21. #16
    Pole

    Re : Problème Langage C Sorte de Boucle

    Citation Envoyé par L'Etudiant
    for (int i=0 ; i<E1 ; i++){}

    soit faire

    for (int i=0 ; i<E1 ; i+=3){}
    ......
    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 ?
    Si tu mets i<=E1 alors tu peux te passer du deuxième if car i sera entre 0 (inclu) et E1 (inclu).
    C'est plus simple, plus court et plus facile.

    @+.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  22. #17
    L'Etudiant

    Re : Problème Langage C Sorte de Boucle

    Merci &#224; tout le monde pour avoir pris le temps de me r&#233;pondre et pour l'aide apport&#233;e.

    Bonne soir&#233;e

  23. #18
    L'Etudiant

    Re : Problème Langage C Sorte de Boucle

    Au fait, j'aurais encore une petite question, mais cette fois-ci, c'est un peu différent :

    Si j'ai envie de faire une boucle qui affiche les 10 premiers entiers naturels divisibles par 3, puis qu'ensuite je veux afficher la somme de ces dix premiers entiers divisibles par 3, comment puis-je faire ?

    J'ai fait un petit truc qui marche bien, mais je suis bloqué au moment d'afficher la somme, je ne vois pas trop comment faire :



    #include <stdio.h>

    void main()

    {


    int n;

    n=0;

    int N;

    N = n%3;

    printf("Appuyez sur la touche ''entree'' afin que le programme vous affiche, sous\n\nl'appellation de n, les dix premiers entiers naturels divisibles par 3\n\n\n");

    scanf("n=%d",n);

    for(n=0;n<=28;n+=3)

    {

    printf("n=%d\n\n",n);

    }

    printf("\n\nLa somme de tous ces entiers est N =\n\n\n\n",N);

    return;

    }



    Voilà, dans mon dernier printf, je ne sais pas quoi mettre après le =.

    Et puis, une autre chose, je pense que mon programme n'est pas très rigoureux, mais visibilement, ça marche

    Voilà, quelqu'un pourrait-il m'aider SVP ?

    Bonne soirée

  24. Publicité
  25. #19
    ginkoTA

    Re : Problème Langage C Sorte de Boucle

    Apres avoir defini un entier somme N, tu peux calculer la somme des dix entiers dans la boule ou tu fais l'affichage :

    N=0 ; // Initialisation de la somme

    for(n=0;n<=28;n+=3)
    {
    printf("n=%d\n\n",n);
    N+=n ;
    }

    printf("\n\nLa somme de tous ces entiers est N =%d\n\n\n\n",N);

  26. #20
    L'Etudiant

    Re : Problème Langage C Sorte de Boucle

    Ahhh, c'est aussi simple que ça ?!

    Merci, je viens d'apprendre une nouvelle chose.

    Bonne soirée

Discussions similaires

  1. probleme d'indexage de boucle for avec matlab
    Par RBM dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 23/10/2007, 03h32
  2. calculer et afficher le temps d'une boucle en langage C
    Par lui dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 18/02/2007, 21h12
  3. Probleme de boucle FOR-Next
    Par zanzeoo dans le forum Électronique
    Réponses: 8
    Dernier message: 17/08/2004, 13h25
  4. Problème en langage VBA
    Par knecmotet dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 09/07/2004, 14h00
Découvrez nos comparatifs produits sur l'informatique et les technologies.