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
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
A voir également:
- Passage d'un programme de C++ à C
- Programme demarrage windows 10 - Guide
- Passage qwerty azerty - Guide
- Desinstaller un programme - Guide
- Forcer la fermeture d'un programme - Guide
11 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
20 oct. 2010 à 10:40
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.
endl, c'est entre autre un retour à la ligne.
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
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); "
"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); "
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
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 ...
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 ...
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
20 oct. 2010 à 12:56
20 oct. 2010 à 12:56
pour moi, ça s'écrit pareil en C...
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
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?
enfin au début, est-ce que "void mot" correspond à l'initialisation d'une fonction appelée mot?
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
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.
void mot(..){ } correspond bien à la déclaration d 'une fonction.
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
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"?
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
20 oct. 2010 à 14:01
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.
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.
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
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?
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?
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
20 oct. 2010 à 14:19
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
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
21 oct. 2010 à 09:44
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...
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
21 oct. 2010 à 09:56
je crois que les modos ont une fonction "faire de ce commentaire uen réponse" ...
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
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();
}
#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();
}