Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dessiner un carré en console

fonction a 2 paramètres

Sujet résolu
    5 juillet 2010 à 10:53:33

    Bonjour, je m'entraine a créer un programme qui demande a l'utilisateur d'entrer la largeur d'un carré, puis la hauteur, et j'affiche ce carré a l'écran. Evidemment si je poste, c'est que je n'y arrive pas, surtout pour le côté droit du carrée.

    Voici ce que j'ai fais (ca affiche juste 2 côtés du carré) :

    #include <stdlib.h>
    
    void carre();
    void main()
    	{
    		carre(5, 5);
    	}
    
    void carre()
    {
    int x, y, i, j, k;
    printf("Donnez une valeur pour x :\n");
    scanf("%d", &x);
    printf("Donnez une valeur pour y :\n");
    scanf("%d", &y);
    
    for(i=0; i<x; i++)
    printf("B");
    
    printf("\n");
    
    for(j=0; j<y-1; j++)
    printf("B\n");
    }
    


    Donc si vous pouvez m'expliquer comment faire les autres côtés, et surtout le côté droit ! Je précise que l'intérieur du carré doit rester vide, pour x = 5 et y = 3, je devrais par exemple avoir :
    ABBBC
    B-----B
    CBBBA

    (Les "-" ne doivent pas apparaitre, ca doit être du vide).

    pour x = 6 et y = 4 j'aurais
    ABBBBC
    B-----B
    B-----B
    CBBBBA

    Voila, merci.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      5 juillet 2010 à 11:09:43

      Que dire à pars, bricolage ?

      #include <stdlib.h>
      
      void carre(int x, int y); /* MAUVAIS PROTOTYPE */
      
      int main(void) /* MAUVAISE DEFINITION DE MAIN ! */
      {
          carre(10, 12);
      
          return 0; /* PAS DE RETURN */
      }
      
      void carre(int x, int y)
      {
          int i, j, k;
      
          if (x > y) y = x;
          else if (y > x) x = y;
      
          printf("+");
          for (i=1; i<2*(x-1); i++)
              printf("-");
          printf("+");
      
          for (j=0; j<y-1; j++) {
              printf("\n|");
              for (k=1; k<2*(y-1); k++)
                  printf(" ");
              printf("|");
          }
      
          printf("\n");
      
          printf("+");
          for (i=1; i<2*(x-1); i++)
              printf("-");
          printf("+");
      }
      


      Autres remarques : les commentaires dans le code ci-dessus indiquent tes grosses erreurs... Et aussi, ton code est mal indenté.
      • Partager sur Facebook
      • Partager sur Twitter
        5 juillet 2010 à 11:21:17

        Ok, merci, c'est bien ce que je recherche, je dois bien regarder ton code pour le comprendre.
        • Partager sur Facebook
        • Partager sur Twitter
          5 juillet 2010 à 11:23:30

          En un petit peu plus simple mais beaucoup moins joli (et en reprenant les remarques de Foxhound sur le prototype):

          void carre(int x, int y)
          {
              int i, j;
          
              printf("\n");
          
              //On dessine le carré de haut en bas
              for(j=1; j <= y; j++)
              {
                  //Pour chaque ligne, on dessine le carré de gauche à droite
                  for(i=1; i <= x; i++)
                  {
                      //Si on est à la première ou dernière ligne, on dessine
                      //Si on est tout à gauche ou tout à droite, on dessine
                      if(j==1 || j==y || i==1 || i==x)
                      {
                          printf("B");
                      }
              
                      //Sinon, on met une case vide
                      else
                      {
                          printf(" ");
                      }
                      
                  }//Fin de la deuxième boucle (de gauche à droite)
                  
                  //On passe à la ligne suivante
                  printf("\n");
                  
              }//Fin de la première boucle (de haut en bas)
          
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            5 juillet 2010 à 11:29:45

            Stinson : chez moi, ça dessine plus un rectangle qu'un carré. :/
            • Partager sur Facebook
            • Partager sur Twitter
              5 juillet 2010 à 11:30:00

              J'ai juste une remarque : Le code de Foxhound est très bien, je ne dois pas avoir les mêmes caractères dans les coins, donc son code est bon. Par contre si je fais x = 1 et y = 1, je dois avoir "B" et ton code me met 4 caractères, comment arranger cela ?
              comme ca : if(j==1 || j==y || i==1 || i==x)
              {
              printf("B");
              }
              ??

              Le code de Stinson est très bien aussi, j'aime bin la simplicitée, mais par contre ton code met uniquement un seul caractères, je dois avoir un truc genre ca :
              ABBC
              B--B
              CBBA
              Comment changer les caractères des angles ?
              Merci.

              PS : C'est pas grave si c'est un rectangle, on doit pouvoir mettre x = 10 et y = 233 si on veut, donc on aura un rectangle.
              • Partager sur Facebook
              • Partager sur Twitter
                5 juillet 2010 à 11:37:45

                Bourrinement, je dirais de mettre des if en plus. Quand tu vas pour écrire un B, tu refais un if, pour voir si tu dois écrire un B, ou bien un A ou un C.
                • Partager sur Facebook
                • Partager sur Twitter

                Notre entreprise recrute, contactez moi en MP. (CDI, Bac+5, Lyon, C++, math, décodage binaire, conversions de modèles 2D/3D...)

                Anonyme
                  5 juillet 2010 à 11:40:42

                  Bon ben puisque le PO opte pour une méthode bourrine...

                  void carre(int x, int y)
                  {
                      int i, j;
                  
                      for(j=1; j <= y; j++)
                      {
                          for(i=1; i <= x; i++)
                          {
                              if ((j == 1 && i == 1) || (j == y && i == x))
                                  printf("A");
                              else if ((j == 1 && i == x) || (j == y && i == 1))
                                  printf("C");
                              else if (j==1 || j==y || i==1 || i==x)
                                  printf("B");
                              else
                                  printf(" ");
                          }
                          printf("\n");
                      }
                  }
                  


                  Mais bon, je ne vois pas en quoi ça peut faire progresser ce genre de pseudo exercice...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 juillet 2010 à 11:50:07

                    Voila ce que j'ai fais et qui fonctionne :
                    if(i==1 && j==1) printf("A");
                    else if (i==x && j==1) printf("C");
                    else if (i==1 && j==y) printf("C");
                    else if (i==x && j==y) printf("A");
                    else if(j==1 || j==y || i==1 || i==x)
                    {
                    printf("B");
                    }
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Dessiner un carré en console

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown