Traduire un programme du langage JAVA Script en langage C
Fermé
mememe
-
Modifié par mememe le 29/05/2016 à 17:27
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 - 1 juin 2016 à 19:01
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 - 1 juin 2016 à 19:01
A voir également:
- Nnnnnnnnnxxx
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Script vidéo youtube - Guide
- Langage binaire - Guide
- Comment traduire une page - Guide
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
29 mai 2016 à 17:33
29 mai 2016 à 17:33
Bonjour,
"je ne connaît absolument rien en JAVA Script"
Ça tombe bien vu que ce n'en est pas... là c'est du Java, rien à voir avec le Java Script, si ce n'est quelques éléments de langages (boucle for, if...) qui sont de toute façon empruntés au C/C++
Vu la simplicité du code que tu nous montres, je ne vois pas trop quel est le problème pour le traduire en C, surtout si tu connais ce langage !
Mais bon, déjà que tu as copier-coller ce code Java d'internet, si en plus c'est nous qui te faisons la traduction en C, quelle sera vraiment ta contribution dans cet exercice ?
"je ne connaît absolument rien en JAVA Script"
Ça tombe bien vu que ce n'en est pas... là c'est du Java, rien à voir avec le Java Script, si ce n'est quelques éléments de langages (boucle for, if...) qui sont de toute façon empruntés au C/C++
Vu la simplicité du code que tu nous montres, je ne vois pas trop quel est le problème pour le traduire en C, surtout si tu connais ce langage !
Mais bon, déjà que tu as copier-coller ce code Java d'internet, si en plus c'est nous qui te faisons la traduction en C, quelle sera vraiment ta contribution dans cet exercice ?
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
29 mai 2016 à 20:05
29 mai 2016 à 20:05
Bonjour,
La séquence au début du convert() est en effet spéciale, pour extraire les chiffres d'un nombre, elle utilise des substring().
Le portage de ces lignes donne :
On voit que code Java veut extraire du nombre les 3 chiffres formant les milliards, les 3 formant les millions, puis les 3 formant les milliers. Mais en 'pensant' C, on ferait cela autrement.
La séquence au début du convert() est en effet spéciale, pour extraire les chiffres d'un nombre, elle utilise des substring().
Le portage de ces lignes donne :
char sSumber[12+1]; sprintf( sNumber , "%012lu" , number ); // <=> aux 4 premières lignes char sc = sNumber[3]; sNumber[3] = '\0'; int lesMilliards = strtoul( &sNumber[0] , NULL , 10 ); sNumber[3] = sc; sc = sNumber[6]; sNumber[6] = '\0'; int lesMillions = strtoul( &sNumber[3] , NULL , 10 ); sNumber[6] = sc; ...
On voit que code Java veut extraire du nombre les 3 chiffres formant les milliards, les 3 formant les millions, puis les 3 formant les milliers. Mais en 'pensant' C, on ferait cela autrement.
Bonjour et merci pour ta réponse ,
est ce que le code que t'a écrit c'est exactement le même que ce code ?
Si oui peut tu m'expliquer plus en détails le traitement ?
Merci .
est ce que le code que t'a écrit c'est exactement le même que ce code ?
String snumber = Long.toString(number); // pad des "0" String mask = "000000000000"; DecimalFormat df = new DecimalFormat(mask); snumber = df.format(number); // XXXnnnnnnnnn int lesMilliards = Integer.parseInt(snumber.substring(0,3)); // nnnXXXnnnnnn int lesMillions = Integer.parseInt(snumber.substring(3,6)); // nnnnnnXXXnnn int lesCentMille = Integer.parseInt(snumber.substring(6,9)); // nnnnnnnnnXXX int lesMille = Integer.parseInt(snumber.substring(9,12));
Si oui peut tu m'expliquer plus en détails le traitement ?
Merci .
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
>
mememe
29 mai 2016 à 21:58
29 mai 2016 à 21:58
Oui, c'est le même code lusqu'à la ligne int lesMillions = ...
Les 2 1ères lignes correspondent aux 4 1ères lignes Java.
Elles consistent à écrire le nombre en ajoutant jusqu'à 12 zéros au début.
exemple : le nombre 1234567 donne la chaîne "000001234567".
La ligne java 'int les Milliards ...' est codée en 4 lignes en C.
Cela consiste à extraire de la chaîne précédente les 3 premiers caractères et les transformer en nombre. Java utilise sa capacité à travailler sur les chaînes et à reconvertir le résultat en nombre. En C, cela est complexe, car le C n'a pas de fonction simple de manipulation des chaînes, c'est pourquoi porter un code d'un langage vers un autre est souvent retord.
Ici, Il suffit de tout remplacer par :
Les 2 1ères lignes correspondent aux 4 1ères lignes Java.
Elles consistent à écrire le nombre en ajoutant jusqu'à 12 zéros au début.
exemple : le nombre 1234567 donne la chaîne "000001234567".
La ligne java 'int les Milliards ...' est codée en 4 lignes en C.
Cela consiste à extraire de la chaîne précédente les 3 premiers caractères et les transformer en nombre. Java utilise sa capacité à travailler sur les chaînes et à reconvertir le résultat en nombre. En C, cela est complexe, car le C n'a pas de fonction simple de manipulation des chaînes, c'est pourquoi porter un code d'un langage vers un autre est souvent retord.
Ici, Il suffit de tout remplacer par :
int lesMilliards = nombre / 1000000000;Et voilà tout est codé en 4 lignes si on oublie Java!
int lesMillions = (nombre / 1000000) % 1000;
int lesMille = (nombre / 1000) % 1000; // erreur de nommage Java appelle ça lesCentMille
int lesUnites = nombre % 1000; // erreur de nommage Java appelle ça lesMilles.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
>
mememe
29 mai 2016 à 22:17
29 mai 2016 à 22:17
Je te l'ai dit avant, il force des zéro devant le nombre, et ne sert plus à rien dans le code C.
Sinon voila j'ai finit de traduire mais il ne marche pas xD donc je ne sais pas si j'ai mal traduit ou j'ai oublier un truc merci de vérifier le code et me corriger SVP
#include <stdio.h> #include <stdlib.h> static char uniteNames1[][15] = { "", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf" }; static char dizaineNames[][15] = { "", "", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante", "quatre-vingt", "quatre-vingt" }; static char uniteNames2[][15] = { "", "", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix" }; char convertZeroToHundred ( int number){ int laDizaine = number / 10; int lUnite = number % 10; char resultat = ""; switch (laDizaine) { case 1 : case 7 : case 9 : lUnite = lUnite + 10; break; } // s�parateur "-" "et" "" char laLiaison = ""; if (laDizaine > 1) { laLiaison = "-"; } // cas particuliers switch (lUnite) { case 0: laLiaison = ""; break; case 1 : if (laDizaine == 8) { laLiaison = "-"; } else { laLiaison = " et "; } break; case 11 : if (laDizaine==7) { laLiaison = " et "; } break; } // dizaines en lettres switch (laDizaine) { case 0: resultat = uniteNames1[lUnite]; break; case 8 : if (lUnite == 0) { resultat = dizaineNames[laDizaine]; } else { resultat =* dizaineNames[laDizaine] + laLiaison + uniteNames1[lUnite]; } break; default : resultat = *dizaineNames[laDizaine] + laLiaison + uniteNames1[lUnite]; } return resultat; } char convertLessThanOneThousand ( int number) { int lesCentaines = number / 100; int leReste = number % 100; char sReste = convertZeroToHundred(leReste); char resultat; switch (lesCentaines) { case 0: resultat = sReste; break; case 1 : if (leReste > 0) { resultat = "cent " + sReste; } else { resultat = "cent"; } break; default : if (leReste > 0) { resultat = *uniteNames2[lesCentaines] + " cent " + sReste; } else { resultat = *uniteNames2[lesCentaines] + " cents"; } } return resultat; } char convert (long number) { if (number == 0) { return "zéro"; } char snumber = number; char mask = "000000000000"; /*char df = new char(mask); snumber = df.format(number);*/ int lesMilliards = number / 1000000000; int lesMillions = (number / 1000000) % 1000; int lesCentMille = (number / 1000) % 1000; int lesMille = number % 1000; char tradMilliards; switch (lesMilliards) { case 0: tradMilliards = ""; break; case 1 : tradMilliards = convertLessThanOneThousand(lesMilliards) + " milliard "; break; default : tradMilliards = convertLessThanOneThousand(lesMilliards) + " milliards "; } char resultat = tradMilliards; char tradMillions; switch (lesMillions) { case 0: tradMillions = ""; break; case 1 : tradMillions = convertLessThanOneThousand(lesMillions) + " million "; break; default : tradMillions = convertLessThanOneThousand(lesMillions) + " millions "; } resultat = resultat + tradMillions; char tradCentMille; switch (lesCentMille) { case 0: tradCentMille = ""; break; case 1 : tradCentMille = "mille "; break; default : tradCentMille = convertLessThanOneThousand(lesCentMille) + " mille "; } resultat = resultat + tradCentMille; char tradMille; tradMille = convertLessThanOneThousand(lesMille); resultat = resultat + tradMille; return resultat; } int main() { long number; printf("Entrez Le Nombre : "); scanf("%ld",&number); char resultat = convert(number); printf("%s",resultat); getch(); return 0; }
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
30 mai 2016 à 01:43
30 mai 2016 à 01:43
La concaténation des chaines de caractères ne se fait pas avec des '+' en C.
Un char c'est un simple caractère. Pour copier, concaténer et retourner d'une fonction une chaîne de caractère, il faut voir ton cours.
A quoi sert ?
char snumber = number;
char mask = "000000000000";
Le compilateur a du voir comme moi des dizaines d'erreurs. Il les signale par des warnings. Il faut les lire.
Par exemple dans le main()
Un char c'est un simple caractère. Pour copier, concaténer et retourner d'une fonction une chaîne de caractère, il faut voir ton cours.
A quoi sert ?
char snumber = number;
char mask = "000000000000";
Le compilateur a du voir comme moi des dizaines d'erreurs. Il les signale par des warnings. Il faut les lire.
Par exemple dans le main()
// non pas : char resultat = convert(number); // printf("%s",resultat); char resultat[200]; // mais plutôt convert( number , resultat ); printf( "%s" , resultat );
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
1 juin 2016 à 19:01
1 juin 2016 à 19:01
Messages d'erreur du compilateur ?
Effectivemet, on ne concatène pas les chaînes de caractères par des +, on utilise la fonction strcat de string.h.
Traduire un programme écrit dans un langage orienté objet comme le Java vers un langage impératif comme le C est une entreprise très difficile. Le traduire en C++ aurait été beaucoup plus simple.
En gros: je suis sûr que réécrire entièrement le programme par toi-même (que pour le coup je trouve très amusant et très intéressant comme exercice, convertir des nombres décimaux en lettres!) sera plus simple que de le traduire.
Effectivemet, on ne concatène pas les chaînes de caractères par des +, on utilise la fonction strcat de string.h.
Traduire un programme écrit dans un langage orienté objet comme le Java vers un langage impératif comme le C est une entreprise très difficile. Le traduire en C++ aurait été beaucoup plus simple.
En gros: je suis sûr que réécrire entièrement le programme par toi-même (que pour le coup je trouve très amusant et très intéressant comme exercice, convertir des nombres décimaux en lettres!) sera plus simple que de le traduire.
29 mai 2016 à 17:45
mon objectif c'est pas d'apprendre le langage JAVA (pour l'instant) cause de manque de temps parce que j'ai besoin d'un programme qui fait le traitement dont j'ai besoin et c'est le seul programme que j'ai trouver sur le net (malheureusement il est en JAVA) donc j'ai besoin de traduire ce programme en C , bon c'est pas que j'ai rien compris dans le programme mais par exemple ce code comment on peut l'ecrire en C ?
Merci .
29 mai 2016 à 18:02
j'ai trouver la solutions .
29 mai 2016 à 18:00
c'est dans ce genre de chose que j'ai des difficulté pour traduire puisque je ne connaît pas JAVA .