Passage d'un programme de C++ à C
Résolu
                    
        
     
             
                    etienne.raoul
    
        
    
                    Messages postés
            
                
     
             
            10
        
            
                                    Statut
            Membre
                    
                -
                                     
Nabla's Messages postés 20731 Statut Contributeur -
        Nabla's Messages postés 20731 Statut Contributeur -
        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;
}
            
            
                
            
                
    
    
    
        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;
}
        A voir également:         
- Passage d'un programme de C++ à C
- Passage qwerty azerty - Guide
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Passage windows 10 à 11 gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
11 réponses
                        
                    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.
    
                endl, c'est entre autre un retour à la ligne.
                        
                    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); "
    
                "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); "
                        
                    #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 ...
    
                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 ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
                        
                    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?
    
                enfin au début, est-ce que "void mot" correspond à l'initialisation d'une fonction appelée mot?
                        
                    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.
    
                void mot(..){ } correspond bien à la déclaration d 'une fonction.
                        
                    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"?
                
                
    
                
                        
                    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.
    
                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.
                        
                    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?
    
                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?
                        
                    SVP vous deux, évites de mettre toute votre discution en haut ...
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
    
                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
                        
                    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();
}
    
                #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();
}
