Partage
  • Partager sur Facebook
  • Partager sur Twitter

boucle triangle

    18 janvier 2020 à 20:15:44

    salut a tous

    j'ai récemment réalisé un petit bout de code mais je ne comprends pas pourquoi il marche

    #include <stdio.h>
    #include <time.h>
    int main(void)
    {
        int longueurVoulue,longueurFigure,longueurAjustee,i,k;
        i=0;
        scanf("%d",&longueurVoulue);
        longueurFigure=(((longueurVoulue-1)*2)+1);
    
        for(k=0;k<longueurVoulue;k++)
        {
            while(i<longueurFigure)
            {
                longueurAjustee = longueurFigure-(longueurFigure-k);
                int met = (longueurFigure-k);
                if(i<longueurAjustee || i >= met)
                {
                    printf("%d",k);
    
                }
                else
                {
                    printf("#");
                }
                i++;
            }
            printf("\n");
            i=0;
        }
    }

    voila lors du 1er if je met cette ligne

    if(i<longueurAjustee || i >= met)

    si j'enlève le = la pyramide ne s'affiche plus correctement, je comprend ABSOLUMENT PAS DU TOUT pourquoi .

    si quelqu'un peut m'expliquer merci





    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2020 à 20:25:18

      Le programme ne marche pas, il s'exécute.

      On dit qu'il marche quand il fait _toujours exactement_ ce qu'il est censé faire, et tu ne nous dis pas quoi.

      -
      Edité par michelbillaud 18 janvier 2020 à 20:25:43

      • Partager sur Facebook
      • Partager sur Twitter
        19 janvier 2020 à 3:27:46

        Salut,
        En le testant, je peux deviner ce qu'il fait mais sans savoir si c'est correct.
        Je te suggèere de faire un printf avant ton scanf pour indiquer ce qu'on devrait entrer.
        Tu ne vérifies pas non plus si la valeur entrée est correcte.
        Ça fait quoi si j'entre 1000000?
        Avec 0, il n'affiche rien. Avec 11, ce n'est pas trèes joli, mais c'est cohérent.
        (et il affiche bien 11 lignes)
        Avec 10, il affiche 10 lignes. La dernièere comporte 9 '9' de chaque côté du '#'.
        C'est une bonne question à se poser: «ça marche, mais je ne sais pas pourquoi».
        «j'aurais préféré que ça ne marche pas ...»
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          19 janvier 2020 à 14:10:39

          «ça marche, mais je ne sais pas pourquoi».
          «j'aurais préféré que ça ne marche pas ...»

          Je crois que cette phrase m'a beaucoup aidé et m'aidera beaucoup par la suite.

          du coup m'inspirant de tes conseils j'ai réalisé ce programme. N'hésitez pas à le juger :p

          #include <stdio.h>
          
          int main(void)
          {
              int longueurVoulue,longueurFigure,longueurAjustee,longueurFigureSide,i,k;
              i=0;
              printf("choissez une hauteur,comprise entre 2 et 25 (il est possible de faire plus avec la console en fullscreen) : ");
              scanf("%d",&longueurVoulue);
              longueurFigure=(((longueurVoulue-1)*2)+1);
              longueurFigureSide=(longueurFigure-1)/2;
          
              for(k=0;k<longueurVoulue;k++)
              {
                  while(i<longueurFigure)
                  {
                      longueurAjustee = longueurFigure-(longueurFigure-k);
                      if(i<longueurAjustee || i >=(longueurFigure-k))
                      {
                          printf(" ");
          
                      }
                      else
                      {
                          printf("#");
                      }
                      i++;
                  }
                  printf("\n");
                  i=0;
              }
              if(k>=longueurVoulue)
              {
                  for(k=0;k<longueurVoulue;k++)
                  {
                      while(i<longueurFigure)
                      {
                          if(i<longueurFigureSide-k || i >longueurFigureSide+k)
                          {
                              printf(" ");
          
                          }
                          else
                          {
                              printf("#");
                          }
                          i++;
                      }
                  printf("\n");
                  i=0;
                  }
              }
          }
          



          Merci encore

          -
          Edité par Arth897512 19 janvier 2020 à 14:36:46

          • Partager sur Facebook
          • Partager sur Twitter
            19 janvier 2020 à 19:16:35

            Écris une fonction " afficher n fois le caractère c".

            Et après, tu l'utilise, tu verras que ça te simplifie énormément  la vie.

            • Partager sur Facebook
            • Partager sur Twitter
              19 janvier 2020 à 19:33:35

              je n'en suis pas encore là dans le cour, mais merci quand même il faut effectivement que je le fasse !
              • Partager sur Facebook
              • Partager sur Twitter
                19 janvier 2020 à 22:37:35

                AU passage, tu te compliques beaucoup la vie ici

                   longueurAjustee = longueurFigure-(longueurFigure-k);
                   if(i<longueurAjustee || i >=(longueurFigure-k))
                       

                L'expression

                longueurFigure-(longueurFigure-k)

                 se simplifie gentiment en  k  tout court.

                On peut donc se débarrasser de longueurAjustee et faire

                if ( i < k  || i >= (longueurFigure - k)) {
                   ...
                }
                



                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2020 à 9:37:50

                  Ah mais oui effectivement, j'ai pas été très malin sur ce coup là !

                  D'ailleurs pensez vous qu'il est pertinent d'essayer des réalisations plus complexes afin de progresser sur les fondamentaux (faire d'autres figures).

                  Ou faudrait il plutôt avancer plus loin dans le cours ? Mon objectif est de comprendre le langage profondément, peu m'importe la vitesse d'apprentissage, je veux le maîtriser.

                  En tous cas merci beaucoup pour votre correction

                  -
                  Edité par Arth897512 20 janvier 2020 à 9:39:25

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 janvier 2020 à 10:13:59

                    C'est pas le langage qu'il faut maitriser, c'est la programmation. Et maitriser est un grand mot.

                    Il faut se familiariser avec (c'est une activité intellectuelle assez particulière), et pratiquer.

                    Les exercices, ça ne peut pas faire de mal.

                    Maintenant que tu dessines des triangles, fais aussi des rectangles, des losanges, des sapins de noel, des hexagones etc.

                      * * * 
                     * * * * 
                    * * * * * 
                     * * * * 
                      * * * 
                    
                    Hexagone avec côté = 3


                    Quand tu en arriveras au stade "oui bon ok, c'est jamais que de tracer un certain nombre de lignes avec un certain nombre d'étoiles et de blancs, et il suffit de prendre un papier un crayon et de calculer combien il en faut pour la ligne L d'un machin de taille N - et après de traduire en C", ça sera réglé pour cette partie.

                    -
                    Edité par michelbillaud 20 janvier 2020 à 10:19:32

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 janvier 2020 à 11:22:59

                      Finalement, une fois qu'on comprend les boucles, les conditions, les opérateurs, bref la structure du langage, es-que le reste c'est pas "simplement" de l'utilisation de fonctions qui ont été crées grâce à cette base ?

                      -
                      Edité par Arth897512 20 janvier 2020 à 11:24:07

                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 janvier 2020 à 12:33:31

                        Bonjour,

                        Arth897512 a écrit:

                        Finalement, une fois qu'on comprend les boucles, les conditions, les opérateurs, bref la structure du langage, es-que le reste c'est pas "simplement" de l'utilisation de fonctions qui ont été crées grâce à cette base ?

                         ___

                        Tu oublies les pointeurs ...

                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 janvier 2020 à 13:30:30

                          Et la littérature, c'est juste savoir écrire des mots les uns derrière les autres ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 janvier 2020 à 15:54:39

                            Tu admettras qu'il ya plus de mots en littérature qu'en C toute même ..

                            Je trouve quand même incroyable qu'on puisse bâtir des empires numériques sur deux boucles trois conditions et un pointeur ...

                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 janvier 2020 à 16:34:57

                              Il y a juste 26 lettres dans l'alphabet. On fait plein de choses avec.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                20 janvier 2020 à 17:07:52

                                Arth897512 a écrit:

                                Finalement, une fois qu'on comprend les boucles, les conditions, les opérateurs, bref la structure du langage, es-que le reste c'est pas "simplement" de l'utilisation de fonctions qui ont été crées grâce à cette base ?


                                Disons que si le "simplement" est entre quote, c'est pas pour rien.

                                Puis bon, tout se base sur des 0 et des 1 tant qu'on y est. Alors certes c'est vrai, mais c'est réducteur. Tout comme dire que la littérature, juste c'est juste du noir sur du blanc. Ou que l'univers (y compris la vie), c'est juste des protons, des neutrons et des électrons.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  20 janvier 2020 à 17:28:25

                                  Je sais faire des additions et des soustractions. Pourquoi n'ai-je pas rédigé la théorie de la relativité restreinte ...
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Le Tout est souvent plus grand que la somme de ses parties.

                                    21 janvier 2020 à 12:59:39

                                    Mathématiquement, elle n'utilise rien de plus compliqué que des racines carrées et le théorème de Pythagore. C'est du niveau 3è... :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    boucle triangle

                                    × 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