Traduire un programme du langage JAVA Script en langage C
mememe
-
paly2 Messages postés 254 Date d'inscription Statut Membre Dernière intervention -
paly2 Messages postés 254 Date d'inscription Statut Membre Dernière intervention -
Bonjour ,
je souhaite traduire un programme du langage JAVA en langage C , mais je ne connaît absolument rien en JAVA Script par contre en C oui du coup j'ai besoin de votre aide pour me le traduire , je sais que sa peut prendre un peut de temps mais j'en ait vraiment besoin merci mille fois a celle ou celui qui le fera , c'est un programme qui convertie un entier en toutes lettres , et juste un petite précisions est ce que c'est possible de déclarer le nombre a traduire tant que long long int svp , je poste le code ici et encore merci beaucoup :
je souhaite traduire un programme du langage JAVA en langage C , mais je ne connaît absolument rien en JAVA Script par contre en C oui du coup j'ai besoin de votre aide pour me le traduire , je sais que sa peut prendre un peut de temps mais j'en ait vraiment besoin merci mille fois a celle ou celui qui le fera , c'est un programme qui convertie un entier en toutes lettres , et juste un petite précisions est ce que c'est possible de déclarer le nombre a traduire tant que long long int svp , je poste le code ici et encore merci beaucoup :
package com.rgagnon.howto; import java.text.*; class FrenchNumberToWords { private static final String[] dizaineNames = { "", "", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante", "quatre-vingt", "quatre-vingt" }; private static final String[] uniteNames1 = { "", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf" }; private static final String[] uniteNames2 = { "", "", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix" }; private FrenchNumberToWords() {} private static String convertZeroToHundred(int number) { int laDizaine = number / 10; int lUnite = number % 10; String resultat = ""; switch (laDizaine) { case 1 : case 7 : case 9 : lUnite = lUnite + 10; break; default: } // s�parateur "-" "et" "" String 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; default: } // 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; } private static String convertLessThanOneThousand(int number) { int lesCentaines = number / 100; int leReste = number % 100; String sReste = convertZeroToHundred(leReste); String 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; } public static String convert(long number) { // 0 � 999 999 999 999 if (number == 0) { return "zéro"; } 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)); String tradMilliards; switch (lesMilliards) { case 0: tradMilliards = ""; break; case 1 : tradMilliards = convertLessThanOneThousand(lesMilliards) + " milliard "; break; default : tradMilliards = convertLessThanOneThousand(lesMilliards) + " milliards "; } String resultat = tradMilliards; String tradMillions; switch (lesMillions) { case 0: tradMillions = ""; break; case 1 : tradMillions = convertLessThanOneThousand(lesMillions) + " million "; break; default : tradMillions = convertLessThanOneThousand(lesMillions) + " millions "; } resultat = resultat + tradMillions; String tradCentMille; switch (lesCentMille) { case 0: tradCentMille = ""; break; case 1 : tradCentMille = "mille "; break; default : tradCentMille = convertLessThanOneThousand(lesCentMille) + " mille "; } resultat = resultat + tradCentMille; String tradMille; tradMille = convertLessThanOneThousand(lesMille); resultat = resultat + tradMille; return resultat; } public static void main(String[] args) { System.out.println("*** " + FrenchNumberToWords.convert(0)); System.out.println("*** " + FrenchNumberToWords.convert(9)); System.out.println("*** " + FrenchNumberToWords.convert(19)); System.out.println("*** " + FrenchNumberToWords.convert(21)); System.out.println("*** " + FrenchNumberToWords.convert(28)); System.out.println("*** " + FrenchNumberToWords.convert(71)); System.out.println("*** " + FrenchNumberToWords.convert(72)); System.out.println("*** " + FrenchNumberToWords.convert(80)); System.out.println("*** " + FrenchNumberToWords.convert(81)); System.out.println("*** " + FrenchNumberToWords.convert(89)); System.out.println("*** " + FrenchNumberToWords.convert(90)); System.out.println("*** " + FrenchNumberToWords.convert(91)); System.out.println("*** " + FrenchNumberToWords.convert(97)); System.out.println("*** " + FrenchNumberToWords.convert(100)); System.out.println("*** " + FrenchNumberToWords.convert(101)); System.out.println("*** " + FrenchNumberToWords.convert(110)); System.out.println("*** " + FrenchNumberToWords.convert(120)); System.out.println("*** " + FrenchNumberToWords.convert(200)); System.out.println("*** " + FrenchNumberToWords.convert(201)); System.out.println("*** " + FrenchNumberToWords.convert(232)); System.out.println("*** " + FrenchNumberToWords.convert(999)); System.out.println("*** " + FrenchNumberToWords.convert(1000)); System.out.println("*** " + FrenchNumberToWords.convert(1001)); System.out.println("*** " + FrenchNumberToWords.convert(10000)); System.out.println("*** " + FrenchNumberToWords.convert(10001)); System.out.println("*** " + FrenchNumberToWords.convert(100000)); System.out.println("*** " + FrenchNumberToWords.convert(2000000)); System.out.println("*** " + FrenchNumberToWords.convert(3000000000L)); System.out.println("*** " + FrenchNumberToWords.convert(2147483647)); /* *** OUTPUT *** zéro *** neuf *** dix-neuf *** vingt et un *** vingt-huit *** soixante et onze *** soixante-douze *** quatre-vingt *** quatre-vingt-un *** quatre-vingt-neuf *** quatre-vingt-dix *** quatre-vingt-onze *** quatre-vingt-dix-sept *** cent *** cent un *** cent dix *** cent vingt *** deux cents *** deux cent un *** deux cent trente-deux *** neuf cent quatre-vingt-dix-neuf *** mille *** mille un *** dix mille *** dix mille un *** cent mille *** deux millions *** trois milliards *** deux milliards cent quarante-sept millions ** quatre cent quatre-vingt-trois mille six cent quarante-sept */ } }
A voir également:
- Nnnnnnnnnxxx
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Langage binaire - Guide
- Comment traduire un site en français - Guide
- Script vidéo youtube - Guide
3 réponses
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 ?
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 .
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.
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; }
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 );
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.
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 .
j'ai trouver la solutions .
c'est dans ce genre de chose que j'ai des difficulté pour traduire puisque je ne connaît pas JAVA .