Passage d'un programme de C++ à C

Résolu/Fermé
etienne.raoul Messages postés 9 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010 - Modifié par etienne.raoul le 20/10/2010 à 00:04
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 21 oct. 2010 à 09:56
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;
}



A voir également:

11 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 oct. 2010 à 10:40
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
etienne.raoul Messages postés 9 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010 1
20 oct. 2010 à 11:51
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
20 oct. 2010 à 12:11
#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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 oct. 2010 à 12:56
pour moi, ça s'écrit pareil en C...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
etienne.raoul Messages postés 9 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010 1
20 oct. 2010 à 13:00
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
20 oct. 2010 à 13:48
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
etienne.raoul Messages postés 9 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010 1
20 oct. 2010 à 13:51
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 oct. 2010 à 14:01
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
etienne.raoul Messages postés 9 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010 1
20 oct. 2010 à 14:11
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
20 oct. 2010 à 14:19
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
21 oct. 2010 à 09:44
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
21 oct. 2010 à 09:56
je crois que les modos ont une fonction "faire de ce commentaire uen réponse" ...
0
etienne.raoul Messages postés 9 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010 1
20 oct. 2010 à 14:41
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