Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 15 sur 20

Problème Langage C Sorte de Boucle

  1. L'Etudiant

    Date d'inscription
    janvier 2006
    Âge
    25
    Messages
    42

    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
     


    • Publicité



  2. pat7111

    Date d'inscription
    décembre 2005
    Localisation
    Region parisienne
    Âge
    39
    Messages
    1 071

    Re : Problème Langage C Sorte de Boucle

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

  3. zoup1

    Date d'inscription
    juillet 2004
    Localisation
    Paris
    Âge
    48
    Messages
    3 766

    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.
     

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

  5. zoup1

    Date d'inscription
    juillet 2004
    Localisation
    Paris
    Âge
    48
    Messages
    3 766

    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.
     


    • Publicité



  6. L'Etudiant

    Date d'inscription
    janvier 2006
    Âge
    25
    Messages
    42

    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
     

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

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

  9. zoup1

    Date d'inscription
    juillet 2004
    Localisation
    Paris
    Âge
    48
    Messages
    3 766

    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.
     

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

  11. 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++, &#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ème if, ma première condition était inutile, car contrairement au premier, celui-ci n’était pas dans un for o&#249; 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 &#231;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.
     

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

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

    ++
     

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

  15. Philder

    Date d'inscription
    janvier 2006
    Localisation
    Londres
    Âge
    30
    Messages
    192

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


    • Publicité




Poursuivez votre recherche :




Sur le même thème :




 

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, 02h32
  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, 20h12
  3. Probleme de boucle FOR-Next
    Par zanzeoo dans le forum Électronique
    Réponses: 8
    Dernier message: 17/08/2004, 12h25
  4. Problème en langage VBA
    Par knecmotet dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 09/07/2004, 13h00


Les tags pour cette discussion