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. 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();
    }
    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. 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
        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. 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
            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. 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
                #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. 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
                    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.