Dessiner un Serpent C
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Dessiner un Serpent C



  1. #1
    Dankyller

    Dessiner un Serpent C


    ------

    Bonjour, Je suis étudiant et je ne sais pas du tout comment résoudre cet exercice.
    Attention : je ne dois pas réaliser le jeu snake, je dois juste dessiner un serpent de taille n.
    Merci d'avance
    Nom : IMG_20211006_123237.jpg
Affichages : 355
Taille : 30,6 Ko

    -----

  2. #2
    danyvio

    Re : Dessiner un Serpent C

    Pour dessiner un serpent, rien ne vaut le langage Python ?
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  3. #3
    umfred

    Re : Dessiner un Serpent C

    Déjà se faire un algorithme pour résoudre le problème (le langage vient après)
    De façon brute (dans un 1er temps), 3 lignes => 3 chaines l1, l2, l3
    au départ, l1="@", l2="", l3=""
    lecture de n
    si n=1, l2=l2+'0'
    si n=2, l2=l2+'0'; l3=l3+'0'
    si n=3, l2=l2+'0'; l3=l3+'0'; l3=l3+'0'
    si n=4, l2=l2+'0'; l3=l3+'0'; l3=l3+'0'; l3=l3+'0'
    si n=5, l2=l2+'0'; l3=l3+'0'; l3=l3+'0'; l3=l3+'0'; l2=l2+'0'
    si n=6, l2=l2+'0'; l3=l3+'0'; l3=l3+'0'; l3=l3+'0'; l2=l2+'0'; l1=l1+'0'
    si n=7, l2=l2+'0'; l3=l3+'0'; l3=l3+'0'; l3=l3+'0'; l2=l2+'0'; l1=l1+'0'; l1=l1+'0'
    etc
    ensuite, tu devrais voir une sorte de schéma qui se dessine, qui se répète régulièrement donc boucle(s) avec une certaine fréquence.

  4. #4
    polo974

    Re : Dessiner un Serpent C

    un truc bien pourri en C:
     Cliquez pour afficher



    (un truc marrant pour l'équipe du forum: si je prévisualise, tout disparaît de la fenêtre de saisie...)
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    Chenets

    Re : Dessiner un Serpent C

    Bonjour,

    je dois réaliser ce même "serpent", auriez vous gardé une trace de votre code si vous avez réussi ?

    merci.

  7. #6
    umfred

    Re : Dessiner un Serpent C

    Essai de suivre le raisonnement que j'ai indiqué dans ma réponse précédente pour trouver une solution.

  8. #7
    polo974

    Re : Dessiner un Serpent C

    Citation Envoyé par Chenets Voir le message
    Bonjour,

    je dois réaliser ce même "serpent", auriez vous gardé une trace de votre code si vous avez réussi ?

    merci.
    Ta demande commence par "je dois réaliser", si on se conforme à ces 3 mots assez simples à comprendre, il est clair que personne ne peut le faire à ta place.
    Jusqu'ici tout va bien...

  9. #8
    Ultimatom

    Re : Dessiner un Serpent C

    Bonjour !

    J'aurai personnellement répondu : "impossible de répondre à cette exercice"

    Vous donnez n = 29 et précisez que le serpent devrait ressembler exactement au serpert ci-dessus alors que le serpent ci-dessus ne possède que 23 "zéro".
    Incohérence dans les consignes de l'exercice => impossible à résoudre

    C'était facile !

  10. #9
    umfred

    Re : Dessiner un Serpent C

    Citation Envoyé par Ultimatom Voir le message
    Bonjour !

    J'aurai personnellement répondu : "impossible de répondre à cette exercice"

    Vous donnez n = 29 et précisez que le serpent devrait ressembler exactement au serpert ci-dessus alors que le serpent ci-dessus ne possède que 23 "zéro".
    Incohérence dans les consignes de l'exercice => impossible à résoudre

    C'était facile !
    peut-être que la capture est tronquée sur le dessin du serpent aussi d'une certaine façon

  11. #10
    MissJenny

    Re : Dessiner un Serpent C

    je dirais que l'algorithme dépend du type de "device" sur lequel on veut afficher le serpent. S'il est du type tty, c'est-à-dire que le programme affiche des lignes entières et ensuite ne peut pas modifier une ligne affichée, il faut précalculer le serpent, sinon on peut s'amuser à le dessiner pas à pas à partir de la tête.

  12. #11
    ArchoZaure

    Re : Dessiner un Serpent C

    Bonjour.

    Du coup, quand on a compris ça... on peut y remédier.

    Par exemple ici ce qu'on peut faire c'est de créer un tableau en mémoire qui affiche un serpent 3 de large et n de longueur.
    On le préremplit (c'est facile, vu la régularité)
    On le parcoure en partant de x=1 et y=1 en comptant le nombre de caractères, comme le suggère indirectement MissJenny, (là on peut, c'est pas un écran).
    Et on en déduit X max pour chaque ligne.

    Le xmax de chaque ligne étant la longueur qu'on va afficher ensuite en recopiant la portion correspondante du tableau.
    Dernière modification par ArchoZaure ; 06/10/2023 à 10h18.

  13. #12
    Ikhar84
    Animateur Informatique

    Re : Dessiner un Serpent C

    Bonjour Archozaure, regarde les tableaux (matrice) 2d et les boucles "imbriqués" pour comprendre ta proposition...
    J'ai glissé Chef !

  14. #13
    pm42

    Re : Dessiner un Serpent C

    Il n'y a pas spécialement besoin de tableaux ou de boucles imbriquées.
    On peut construire chaque ligne à la volée en calculant m = n modulo 8.
    Pour la 1ère ligne, on affiche m fois " 000". Pour la seconde, m fois " 0", pour la 3ème m fois "000 "
    Après, on raffine un peu pour gérer le fait qu'on commence la 1ère ligne par un "00" pas un "000" et pour le @.

    Une autre solution est d'utiliser le fait que même en mode texte, on peut tracer où on veut sur l'écran depuis les années 70 en gros (setcursorpos en Windows, move en curses/ncurses pour Unix/Linux/MacOS).

  15. #14
    Ikhar84
    Animateur Informatique

    Re : Dessiner un Serpent C

    Bonjour pm, j'essayais de faire réfléchir Archozaure sur sa proposition, qui était plus (conceptuellement) difficile à utiliser poir un néophyte que ce qu'il semblait penser...
    J'ai glissé Chef !

  16. #15
    albanxiii
    Modérateur

    Re : Dessiner un Serpent C

    Citation Envoyé par polo974 Voir le message
    Ta demande commence par "je dois réaliser", si on se conforme à ces 3 mots assez simples à comprendre, il est clair que personne ne peut le faire à ta place.
    Dit celui qui a posté un code juste au dessus sans que personne ne lui demande rien <smiley clown>
    Not only is it not right, it's not even wrong!

  17. #16
    polo974

    Re : Dessiner un Serpent C

    Oui, mais code tel que celui qui donne ça en réponse à l'exo se fera massacrer...
    Jusqu'ici tout va bien...

  18. #17
    pm42

    Re : Dessiner un Serpent C

    Citation Envoyé par Ikhar84 Voir le message
    Bonjour pm, j'essayais de faire réfléchir Archozaure sur sa proposition, qui était plus (conceptuellement) difficile à utiliser poir un néophyte que ce qu'il semblait penser...
    Bonjour.
    Je ne répondais pas à ton message en fait mais à ce qui a été dit depuis le #10.
    Mais effectivement, tu as raison : remplir le tableau tel que décrit par Archozaure n'est pas aussi simple que ça pour un néophyte.

    D'ailleurs, les 2 qui ont posé la question sur ce fil, le 1er en 2021 puis l'autre plus récemment ne sont pas revenus

  19. #18
    ArchoZaure

    Re : Dessiner un Serpent C

    Citation Envoyé par pm42 Voir le message
    Bonjour.
    Je ne répondais pas à ton message en fait mais à ce qui a été dit depuis le #10.
    Mais effectivement, tu as raison : remplir le tableau tel que décrit par Archozaure n'est pas aussi simple que ça pour un néophyte.
    Je ne suis pas d'accord puisque "je suis un néophyte" (je ne programme pas en c en général).

    Mon code :
    Code:
    #include <stdio.h>
    #include <stdbool.h>
    
    #define X_MAX 80  // Ajuster si nécessaire à la largeur réelle de l'écran en nombre de caractères
    #define Y_MAX 3
    #define LGT_MAX X_MAX * Y_MAX / 2
    
    int main ()
    {
    // Index de boucle
        int i,j;
        int x,y;
    
    // Longueur serpent
        int n;
    
    // Utilisés pour le test de validité de la valeur entrée
        bool saisie;
        char sn;
     
    // Chaines
        char ch[Y_MAX][X_MAX];
        int dx[8] = {0, 0, 1, 1, 0, 0, 1, 1};
        int dy[8] = {1, 1, 0, 0,-1,-1, 0 ,0};
    
    // Saisie longueur serpent n
        saisie = false;
        do
          {
            printf("Saisir longueur du Serpent (");
            printf(" Valeurs autorisées 1 à %d" , LGT_MAX);
            printf(") : ");    
            scanf("\n%s", &sn);
            if(sscanf(&sn,"%d", &n) == 1) 
              {
                if ((n>0) && (n<=LGT_MAX)) saisie = true;    
              }
           }
        while (saisie == false);
    
    // Initialiser les 3 chaines
        for (y = 0; y<Y_MAX; y++)
          {
            for (x = 0; x<X_MAX; x++)  ch[y][x] = ' ';
            ch[y][X_MAX-1] = '\0';
          }
        // Corps du Serpent de longueur n
        x = 0;
        y = 0;
        j = 0;
        for (i = 1 ; i <= n ; i++)
           {  
             ch[y][x] = '0';
             x = x + dx[j];
             y = y + dy[j];
             j++;
             if (j >= 8) j = 0;
           }
        // Tete du Serpent
        ch[0][0] = '@';
    
        // Affichage des 3 chaines
        for (y=0 ; y<Y_MAX ; y++) printf("%s\n", &ch[y][0]);  
    }
    Rien de bien méchant vous en conviendrez.
    Après c'est peut-être pas du grand style mais ça a l'air de fonctionner.

    Citation Envoyé par pm42
    Il n'y a pas spécialement besoin de tableaux ou de boucles imbriquées.
    On peut construire chaque ligne à la volée en calculant m = n modulo 8.
    Pour la 1ère ligne, on affiche m fois " 000". Pour la seconde, m fois " 0", pour la 3ème m fois "000 "
    Après, on raffine un peu pour gérer le fait qu'on commence la 1ère ligne par un "00" pas un "000" et pour le @.
    J'avais pensé à cette "solution" mais elle ne m'a pas semblé aussi évidente que ça.
    Mais si vous pensez que c'est mieux, je veux bien voir le code.

    Citation Envoyé par polo974
    un truc bien pourri en C:
    J'ai essayé de le faire tourner, mais ça n'a pas fonctionné chez moi.
    Déjà vous avez interverti un scanf avec un printf.

    Pour info, si ça intéresse ceux qui comme moi n'ont pas installé le compilateur C, j'utilise le site https://www.onlinegdb.com/online_c_compiler
    Dernière modification par ArchoZaure ; 07/10/2023 à 16h26.

  20. #19
    polo974

    Re : Dessiner un Serpent C

    À archo, non, je n'ai pas interverti de fonction.
    Il faut juste passer le nombre en paramètre du programme.

    Donc "déjà" apprenez à lire un code avant de lancer des affirmations fausses.
    Jusqu'ici tout va bien...

Discussions similaires

  1. Dessiner sur Abaqus
    Par invite710474d4 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 16/03/2010, 20h57
  2. logiciel pour dessiner un algorigramme (seulement dessiner ! )
    Par ptifefe dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 13/04/2009, 16h03
  3. Quel est ce serpent? (serpent du Nebraska)
    Par invite621ee2c3 dans le forum Identification des espèces animales ou végétales
    Réponses: 2
    Dernier message: 17/08/2008, 00h03
  4. Dessiner des molécules
    Par invitecc7891ee dans le forum Chimie
    Réponses: 6
    Dernier message: 13/05/2007, 16h01