Passage d'un programme de C++ à C

Résolu
Bonjour,
ayant changé de classe récemment, j'ai peu de bases en informatiques (le peu concerne le langage C). Mon nouveau professeur m'a demandé de passer l'algorithme suivant du langage C++ au langage C. Je comprends quelques bases (comme cout<< qui remplace printf) mais l'ensemble reste incompréhensible. Pourriez-vous m'aider s'il vous plait?

L'algorithme qu'il nous a donné est le suivant :

#include <iostream>
using namespace std;
#include <cstring>

void mot(char t[20])
{
int x,i=0, j=1;
char a;

do {
x=0;
for(i=0; i<strlen(t)-1; i++)
if(t[i] > t[i+1])
{
a=t[i]; t[i]=t[i+1]; t[i+1]=a;
x++;
}
} while(x!=0);
}

int main()
{
char t1[20], t2[20];

cout<<"Tapez le premier mot : "; cin >> t1;
cout<<" "<<endl;
cout<<"Tapez le second mot : "; cin>>t2;
cout<<" "<<endl;
mot(t1);
mot(t2);

if (strcmp(t1,t2)==0) cout<<"Ces 2 mots sont des anagrammes."<<endl;
else cout<<"Ces 2 mots ne sont pas des anagrammes."<<endl;
cout<<" "<<endl;
system("PAUSE");
return 0;
}

11 réponses

  1. Contributeur
    C'est un algorithme de tri "mot()". Le problème ne doit pas venir du C++, car le code est très proche du C, à par cin et cout. cin, c'est l'équivalent de scanf.
    endl, c'est entre autre un retour à la ligne.
    0
    1. Pour "cout" et "cin" j'avais compris le problème se situe sur trois parties du programme dont je ne trouves pas l'équivalent en C. :

      "void mot(char t[20])
      {
      int x,i=0, j=1;
      char a;
      do {
      x=0;
      for(i=0; i<strlen(t)-1; i++)
      if(t[i] > t[i+1])
      {
      a=t[i]; t[i]=t[i+1]; t[i+1]=a;
      x++;
      }
      } while(x!=0);
      } "

      "char t1[20], t2[20]; "

      et

      "mot(t1);
      mot(t2); "
      0
      1. Contributeur
        #include <iostream>
        using namespace std;
        #include <cstring>

        ca c'est à remplacer par une déclaration C des fichiers stdio.h et string.h

        ainsi que les cin et cout à remplacer par des printf et scanf ...
        0
        1. Contributeur
          pour moi, ça s'écrit pareil en C...
          0
          1. le problème est que je ne comprends pas le raisonnement. De plus, à quoi correspond strcmp(t1,t2)? est-ce que ça existe en C?
            enfin au début, est-ce que "void mot" correspond à l'initialisation d'une fonction appelée mot?
            0
            1. Contributeur
              strcmp compare 2 chaines de caractères. ca renvoie 0 si les chaines sont égales. c'est uien fonction définie dans string.h

              void mot(..){ } correspond bien à la déclaration d 'une fonction.
              0
              1. J'ai compris la deuxième partie du programme, c'est à dire la fonction principale. Est-ce que quelqu'un pourrais me détailler le principe de fonctionnement de la fonction "mot"?
                0
                1. Contributeur
                  Je vois la souci : grosse lacunes en C. Le mieux est de prendre un cours de C et de la potasser, plein de chose deviendrons clairs après.
                  pour les fonctions C, il y a les "man" pages, exemple strcmp : http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcmp.3.html
                  Comme je te l'ai dit, "mot" est une fonction de tri.
                  0
                  1. Effectivement je ne suis qu'un débutant...
                    Par rapport à ce que j'ai compris, pour la fonction "mot":
                    - x serait le nombre d'apparition de chaque lettre
                    - "mot" réorganiserait les lettres selon l'ordre alphabétique (???)

                    je ne vois pas à quoi correspond "if(t[i] > t[i+1])"... t[i] est bien la lettre du mot t à l'emplacement i?
                    0
                    1. Contributeur
                      SVP vous deux, évites de mettre toute votre discution en haut ...

                      Effectivement je ne suis qu'un débutant...
                      Par rapport à ce que j'ai compris, pour la fonction "mot":
                      - x serait le nombre d'apparition de chaque lettre
                      - "mot" réorganiserait les lettres selon l'ordre alphabétique (???)
                      
                      je ne vois pas à quoi correspond "if(t[i] > t[i+1])"... t[i] est bien la lettre du mot t à l'emplacement i?

                      t[i] > t[i+1] => on teste si la lettre a l'emplacement i est supérieur (sa valeur ascii) à celle qui est situé à i+1 .

                      voici une belle table ascii pour les valeurs:
                      http://www.morbleu.com/wp-content/uploads/2009/08/ascii.gif
                      0
                      1. Contributeur
                        En effet, je n'avais pas vu tes intervention. Décidemment, je ne suis pas fan de la nouvelle disposition de ccm sur les messages...
                        0
                      2. Contributeur
                        je crois que les modos ont une fonction "faire de ce commentaire uen réponse" ...
                        0
                    2. je viens de faire un essai en C et ça me donne ça :

                      #include <stdlib.h>
                      #include <stdio.h>
                      #include <string.h>
                      #include <conio.h>
                      int mot (char t[20])
                      { int x, i=0;
                      char a;
                      do {x=0;
                      for(i=0;i<strlen(t)-1;i++)
                      if(t[i]>t[i+1])
                      {a=t[i]; t[i]=t[i+1]; t[i+1]=a; x++;}
                      }
                      while(x!=0);
                      }
                      int main()
                      { char t1[20], t2[20];
                      printf("Tapez le premier mot : ");
                      scanf("%s",&t1);
                      printf("\nTapez le second mot : ");
                      scanf("%s",&t2);
                      mot(t1);
                      mot(t2);
                      if (strcmp(t1,t2)==0) {printf("\nCes deux mots sont des anagrammes ");}
                      else {printf("\nCes 2 mots ne sont pas des anagrammes ");}
                      getch();
                      }
                      0