Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction miroir

    19 février 2017 à 17:39:04

    Bonjour, je souhaite créer une fonction qui donne retour le miroir de la chaine d'entrée. ex: je rentre "bonjour", c'est "ruojnob".Pourriez vous m'aider svp.

    int main()

    {

        char palin[20] = "bonjour";

        int i ;

        printf("Le miroir de %s\n",palin);

        for(i = 0;i < strlen(palin); i++)

        {

            palin[i] = palin[strlen(palin)-1 - i];

        }

        printf(" est %s ",palin);

     return 0;

    }

    • Partager sur Facebook
    • Partager sur Twitter
      19 février 2017 à 17:48:21

      Salut,

      • Utilise les balises de code pour poster ton code.
      • Utilise int main(void), int main() n’est pas valide.
      • Retire le 20, écris plutôt char palin[] = "Bonjour"
      • Ton programme est presque bon, mais tu dois échanger les lettres jusqu’à la moitié du moitié du mot, c’est-à-dire strlen(palin) / 2. Là tu ne fais pas d’échange, mais juste une affectation.
      • Stocke plutôt strlen(palin) dans une variable, par exemple len pour ne pas avoir à le recalculer à chaque fois.

      -
      Edité par yo@n97one 19 février 2017 à 17:57:47

      • Partager sur Facebook
      • Partager sur Twitter
      Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
        19 février 2017 à 19:00:42

        -
        Edité par PouyuyttCtgiogjjgr 19 février 2017 à 19:07:40

        • Partager sur Facebook
        • Partager sur Twitter
          19 février 2017 à 19:56:54

          Bonjour,

          Ton code ne fonctionnera pas. Si tu souhaites modifier ta chaîne, il faut échanger les caractères de chaque côté, sinon il suffit d'afficher chaque caractère à partir de la fin (et tu gardes ainsi la liste dans le même état). 

          Actuellement, la première moitié du mot obtenu à la fin de ton programme sera correcte mais la 2e moitié ne le sera pas : en effet, ton programme lui affectera les valeurs du début de la liste qui ont déjà été modifiées juste avant... 

          Voici un exemple de code (avec modification) : 

          char mot[];
          ...
          int taille_mot = strlen(mot), i_lettre;
          for(i_lettre = 0 ; i_lettre < taille_mot/2 ; i_lettre++)
          {
             char lettre = mot[taille_mot-i_lettre];
             mot[taille_mot-i_lettre] = mot[i_lettre];
             mot[i_lettre] = lettre;
          }
          printf("%s\n", mot);

          Bonne chance. 

          • Partager sur Facebook
          • Partager sur Twitter
            19 février 2017 à 20:12:46

            yo@n97one a écrit:

            Salut,

            • Utilise int main(void), int main() n’est pas valide.


            Bonsoir , 

            Comment ça c'est pas valide ? J'ai toujours mis int main () et j'ai jamais eu de warning .

            • Partager sur Facebook
            • Partager sur Twitter
              19 février 2017 à 20:14:40

              @H.H. : à la ligne 7 de ton programma, c’est taille_mot - i_lettre - 1, sinon, quand i_lettre vaut 0, tu as un accès hors tableau.

              /* includes et autres */
              
              void swap(char *str, size_t i, size_t j)
              {
                  char tmp = str[i];
                  str[i] = str[j];
                  str[j] = tmp;
              }
              
              int main(void)
              {
                  char str[] = "bonjour";
                  size_t len = strlen(str);
                  printf("Le miroir de %s", str);
                  for(size_t i = 0; i < len / 2; i++)
                      swap(str, i, len - i - 1);
                  printf(" est %s.", str);
                  return 0;
              }
              

              Comment ça c'est pas valide ? J'ai toujours mis int main () et j'ai jamais eu de warning .

              Et pourtant elle n’est pas valide. La norme reconnaît deux formes de main. int main(void) et int main(int argc, char *argv[]). Avec des options de compilation, tu devrais avoir un avertissement.

              PS : Il y a aussi moyen de faire une belle fonction récursive miroir.

              -
              Edité par yo@n97one 19 février 2017 à 20:37:06

              • Partager sur Facebook
              • Partager sur Twitter
              Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs

              fonction miroir

              × 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