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.
    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); "
      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 ...
        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?
          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.
            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"?
              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.
                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?
                  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
                    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...
                    2. Contributeur
                      je crois que les modos ont une fonction "faire de ce commentaire uen réponse" ...
                  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();
                    }