Bienvenue dans la Distillerie d'entraide Quelques soient vos problèmes, nous sommes là !
Réecrire un bout de C en PHP , Besoin d'aide
Topic Options
Topic Options
Suivre ce sujet
Envoyer ce sujet
Imprimer ce sujet
sephiroth1395
Écrit le : Lundi 02 Avril 2007 à 10h40
Tyran Sadique et Irascible
Groupe : Admin
Messages : 633
Membre n° : 217
Inscrit le : 22/07/2003
Voilà voilà... J'ai trouvé un petit bout de code en C bien intéressant qui permet de donner l'écriture en chiffres romains d'un nombre quelconque. J'aimerais bien l'intégrer à KoD mais je ne connais pas grand chose au C... Une bonne âme dans le coin ?
CODE #include <stdio.h> /* Didier STRAUS 10/01/01 Chiffre Romain v 1.0 Contact: ds.92@wanadoo.fr ModifiŽ pour CodeWarrior ©2001 All Rights Reserved */ int affiche(int j,int i); int main(){ int k,i=0,j=10; int table[4]={1000,100,10,1}; printf(" Chiffre Romain v 1.0 10/01/01\n\n"); printf("©2001 All Rights Reserved to Didier STRAUS\n"); do{ printf("\nChoisissez un nombre compris entre 1 et 3999\n"); scanf("%d",&k); } while((k<1) || (k>3999)); do{ do{ j--; if (j==0) { i++; j=10; } } while(k<(j*table[i])); if (j>0) { k-=(j*table[i]); if (affiche(j,i)!=0) { printf("********************************************\n\n"); printf("Attention erreur, contacter ds.92@wanadoo.fr\n"); printf("en prŽcisant comment est arriver le BUG.\n"); printf("\n********************************************\n"); } } i++; j=10; } while(k>0); printf("\n\nI=1 V=5 X=10 L=50 C=100 D=500 M=1000 IX=9 XC=90\n\n"); printf("Didier STRAUS: ds.92@wanadoo.fr\n"); return 0; /* Didier STRAUS ©2001 All Rights Reserved. 10/01/01 */ } /* Fin programme principal */ int affiche(int j,int i){ int e=0; char *tab[4]={"M","C","X","I"}; char *tabl[4]={" ","D","L","V"}; switch (j){ case 1: printf("%s",tab[i]); break; case 2: printf("%s%s",tab[i],tab[i]); break; case 3: printf("%s%s%s",tab[i],tab[i],tab[i]); break; case 4: printf("%s%s",tab[i],tabl[i]); break; case 5: printf("%s",tabl[i]); break; case 6: printf("%s%s",tabl[i],tab[i]); break; case 7: printf("%s%s%s",tabl[i],tab[i],tab[i]); break; case 8: printf("%s%s%s%s",tabl[i],tab[i],tab[i],tab[i]); break; case 9: printf("%s%s",tab[i],tab[i-1]); break; default: e=1; } return e; } /* Fin du sous-programme 'affiche' */
--------------------
Si un de vos messages comporte du rouge alors qu'il n'y en avait pas avant, c'est qu'un admin tyrannique a corrigé une faute d'orthographe qui lui avait échauffé le crâne.
Kane
Écrit le : Lundi 02 Avril 2007 à 13h08
Sylphe
Groupe : Citoyens
Messages : 257
Membre n° : 510
Inscrit le : 08/05/2004
Voila le code pour le type simple de notation Romaine :
CODE <?php function romanise($chiffre) { if (($chiffre / 1000) > 0) { $mlt = floor($chiffre / 1000); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "M"; $chiffre = $chiffre - 1000; } } if (($chiffre / 500) > 0) { $mlt = floor($chiffre / 500); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "D"; $chiffre = $chiffre - 500; } } if (($chiffre / 100) > 0) { $mlt = floor($chiffre / 100); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "C"; $chiffre = $chiffre - 100; } } if (($chiffre / 50) > 0) { $mlt = floor($chiffre / 50); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "L"; $chiffre = $chiffre - 50; } } if (($chiffre / 10) > 0) { $mlt = floor($chiffre / 10); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "X"; $chiffre = $chiffre - 10; } } if (($chiffre / 5) > 0) { $mlt = floor($chiffre / 5); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "V"; $chiffre = $chiffre - 5; } } if (($chiffre / 1) > 0) { $mlt = floor($chiffre / 1); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "I"; $chiffre = $chiffre - 1; } } return $romain; } ?>
CODE <?php // exemple echo "<br />" . romanise(8492); // MMMMMMMMCCCCLXXXXII echo "<br />" . romanise(1492); // MCCCCLXXXXII echo "<br />" . romanise(4000); // MMMM echo "<br />" . romanise(999); // DCCCCLXXXXVIIII echo "<br />" . romanise(18); // XVIII echo "<br />" . romanise(842); // DCCCXXXXII echo "<br />" . romanise(9); // VIIII echo "<br />" . romanise(90); // LXXXX echo "<br />" . romanise(900); // DCCCC ?>
tu met la fonction en début de code et tu l'appel avec romanise(ton-chiffre) (hésite pas a changer le nom j'était pas inspiré :
)
si j'ai le temps je te fait la version en notation Romaine Avancée (9 = IX au lieu de VIIII)
--------------------
Celui qui contrôle le passé,commande le futur. Celui qui commande le futur peut conquérir le passé.
Kane
Écrit le : Lundi 02 Avril 2007 à 13h19
Sylphe
Groupe : Citoyens
Messages : 257
Membre n° : 510
Inscrit le : 08/05/2004
et Wala la version Avancée :
CODE <?php function romanise($chiffre) { if (($chiffre / 1000) > 0) { $mlt = floor($chiffre / 1000); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "M"; $chiffre = $chiffre - 1000; } } if (($chiffre / 500) > 0) { $mlt = floor($chiffre / 500); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "D"; $chiffre = $chiffre - 500; } } if (($chiffre / 100) > 0) { $mlt = floor($chiffre / 100); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "C"; $chiffre = $chiffre - 100; } } if (($chiffre / 50) > 0) { $mlt = floor($chiffre / 50); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "L"; $chiffre = $chiffre - 50; } } if (($chiffre / 10) > 0) { $mlt = floor($chiffre / 10); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "X"; $chiffre = $chiffre - 10; } } if (($chiffre / 5) > 0) { $mlt = floor($chiffre / 5); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "V"; $chiffre = $chiffre - 5; } } if (($chiffre / 1) > 0) { $mlt = floor($chiffre / 1); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "I"; $chiffre = $chiffre - 1; } } $romain = str_replace("DCCCC", "CM", $romain); $romain = str_replace("LXXXX", "XC", $romain); $romain = str_replace("VIIII", "IX", $romain); return $romain; } ?>
CODE <?php // exemple echo "<br />" . romanise(8492); // MMMMMMMMCCCCXCII echo "<br />" . romanise(1492); // MCCCCXCII echo "<br />" . romanise(4000); // MMMM echo "<br />" . romanise(999); // CMXCIX echo "<br />" . romanise(18); // XVIII echo "<br />" . romanise(842); // DCCCXXXXII echo "<br />" . romanise(9); // IX echo "<br />" . romanise(90); // XC echo "<br />" . romanise(900); // CM ?>
c'est sans aucun doutes optimisable, mais ca fonctionne parfaitement
--------------------
Celui qui contrôle le passé,commande le futur. Celui qui commande le futur peut conquérir le passé.
sephiroth1395
Écrit le : Lundi 02 Avril 2007 à 16h55
Tyran Sadique et Irascible
Groupe : Admin
Messages : 633
Membre n° : 217
Inscrit le : 22/07/2003
Merci beaucoup
Tu ne tarderas pas à voir le résultat en ligne !
--------------------
Si un de vos messages comporte du rouge alors qu'il n'y en avait pas avant, c'est qu'un admin tyrannique a corrigé une faute d'orthographe qui lui avait échauffé le crâne.
Le poussin
Écrit le : Lundi 02 Avril 2007 à 19h34
Roi des abysses
Groupe : Citoyens
Messages : 507
Membre n° : 310
Inscrit le : 22/09/2003
Je ne sais pas si ça vient du code C de base mais le script ne fonctionne pas correctement : romanise(4) retourne IIII (et non IV). Je propose le code suivant pour avoir le résultat voulu :
CODE <?php function romanise($nb) { $romain = ''; $n = floor($nb/1000); $romain .= str_repeat('M',$n); $n = floor($nb/100) % 10; if( $n == 9 ) $romain .= 'CM'; elseif( $n == 4 ) $romain .= 'CD'; elseif( $n > 5 ) $romain .= 'D'.str_repeat('C',$n-5); else $romain .= str_repeat('C',$n); $n = floor($nb/10) % 10; if( $n == 9 ) $romain .= 'XC'; elseif( $n == 4 ) $romain .= 'XL'; elseif( $n > 5 ) $romain .= 'L'.str_repeat('X',$n-5); else $romain .= str_repeat('X',$n); $n = $nb % 10; if( $n == 9 ) $romain .= 'IX'; elseif( $n == 4 ) $romain .= 'IV'; elseif( $n > 5 ) $romain .= 'V'.str_repeat('I',$n-5); else $romain .= str_repeat('I',$n); return $romain; } ?>
--------------------
Cot cot cot
Mon site :
Kane
Écrit le : Mardi 03 Avril 2007 à 09h33
Sylphe
Groupe : Citoyens
Messages : 257
Membre n° : 510
Inscrit le : 08/05/2004
CODE <?php function romanise($chiffre) { if (($chiffre / 1000) > 0) { $mlt = floor($chiffre / 1000); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "M"; $chiffre = $chiffre - 1000; } } if (($chiffre / 500) > 0) { $mlt = floor($chiffre / 500); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "D"; $chiffre = $chiffre - 500; } } if (($chiffre / 100) > 0) { $mlt = floor($chiffre / 100); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "C"; $chiffre = $chiffre - 100; } } if (($chiffre / 50) > 0) { $mlt = floor($chiffre / 50); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "L"; $chiffre = $chiffre - 50; } } if (($chiffre / 10) > 0) { $mlt = floor($chiffre / 10); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "X"; $chiffre = $chiffre - 10; } } if (($chiffre / 5) > 0) { $mlt = floor($chiffre / 5); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "V"; $chiffre = $chiffre - 5; } } if (($chiffre / 1) > 0) { $mlt = floor($chiffre / 1); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "I"; $chiffre = $chiffre - 1; } } $romain = str_replace("DCCCC", "CM", $romain); $romain = str_replace("LXXXX", "XC", $romain); $romain = str_replace("VIIII", "IX", $romain); $romain = str_replace("IIII", "IV", $romain); return $romain; } ?>
Quand un chiffre va pas il suffit de rajouter une ligne
$romain = str_replace("Valeur", "Remplacement", $romain);
dans la liste, en pensant a le ranger par ordre décroissant dans la liste
--------------------
Celui qui contrôle le passé,commande le futur. Celui qui commande le futur peut conquérir le passé.
Kane
Écrit le : Mardi 03 Avril 2007 à 10h13
Sylphe
Groupe : Citoyens
Messages : 257
Membre n° : 510
Inscrit le : 08/05/2004
Voila, logiquement, tout est pris en compte et réécrit de 999 à 4 sans oubli.
CODE <?php function romanise($chiffre) { if (($chiffre / 1000) > 0) { $mlt = floor($chiffre / 1000); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "M"; $chiffre = $chiffre - 1000; } } if (($chiffre / 500) > 0) { $mlt = floor($chiffre / 500); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "D"; $chiffre = $chiffre - 500; } } if (($chiffre / 100) > 0) { $mlt = floor($chiffre / 100); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "C"; $chiffre = $chiffre - 100; } } if (($chiffre / 50) > 0) { $mlt = floor($chiffre / 50); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "L"; $chiffre = $chiffre - 50; } } if (($chiffre / 10) > 0) { $mlt = floor($chiffre / 10); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "X"; $chiffre = $chiffre - 10; } } if (($chiffre / 5) > 0) { $mlt = floor($chiffre / 5); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "V"; $chiffre = $chiffre - 5; } } if (($chiffre / 1) > 0) { $mlt = floor($chiffre / 1); for ($i = 1; $i <= $mlt; $i++) { $romain = $romain . "I"; $chiffre = $chiffre - 1; } } $i = 0; $romain = str_replace("DCCCCLXXXXVIIII", "IM", $romain); $romain = str_replace("DCCCCLXXXXV", "VM", $romain); $romain = str_replace("DCCCCLXXXX", "XM", $romain); $romain = str_replace("DCCCCL", "LM", $romain); $romain = str_replace("DCCCC", "CM", $romain); $romain = str_replace("CCCCLXXXXVIIII", "ID", $romain); $romain = str_replace("CCCCLXXXXV", "VD", $romain); $romain = str_replace("CCCCLXXXX", "XD", $romain); $romain = str_replace("CCCCL", "LD", $romain); $romain = str_replace("CCCC", "CD", $romain); $romain = str_replace("LXXXXVIIII", "IC", $romain); $romain = str_replace("LXXXXV", "VC", $romain); $romain = str_replace("LXXXX", "XC", $romain); $romain = str_replace("XXXXVIIII", "IL", $romain); $romain = str_replace("XXXXV", "VL", $romain); $romain = str_replace("XXXX", "XL", $romain); $romain = str_replace("VIIII", "IX", $romain); $romain = str_replace("IIII", "IV", $romain); return $romain; } ?>
et qui sait, ca me servira ptete plus tard aussi ^^
--------------------
Celui qui contrôle le passé,commande le futur. Celui qui commande le futur peut conquérir le passé.
Le poussin
Écrit le : Mardi 03 Avril 2007 à 21h51
Roi des abysses
Groupe : Citoyens
Messages : 507
Membre n° : 310
Inscrit le : 22/09/2003
Ça fait plus long quand même comme solution.
--------------------
Cot cot cot
Mon site :
Kane
Écrit le : Mercredi 04 Avril 2007 à 10h44
Sylphe
Groupe : Citoyens
Messages : 257
Membre n° : 510
Inscrit le : 08/05/2004
jamais content ce piti poulet bleu
j'ai précisé au début qu'il y avais surement plus optimisé, j'ai fait les 3 versions en un quart d'heure en cours hier hein
--------------------
Celui qui contrôle le passé,commande le futur. Celui qui commande le futur peut conquérir le passé.
sephiroth1395
Écrit le : Mercredi 04 Avril 2007 à 10h45
Tyran Sadique et Irascible
Groupe : Admin
Messages : 633
Membre n° : 217
Inscrit le : 22/07/2003
Merci à tous les deux, ça sera vite intégré à KoD
--------------------
Si un de vos messages comporte du rouge alors qu'il n'y en avait pas avant, c'est qu'un admin tyrannique a corrigé une faute d'orthographe qui lui avait échauffé le crâne.
sephiroth1395
Écrit le : Dimanche 15 Avril 2007 à 20h48
Tyran Sadique et Irascible
Groupe : Admin
Messages : 633
Membre n° : 217
Inscrit le : 22/07/2003
Je viens de coder ça :
CODE <?php [ Code relatif à l'intégration de la page au site ] // Fonction de romanisation de la chose xD function romanise($nb) { $romain = ''; $n = floor($nb/1000); $romain .= str_repeat('M',$n); $n = floor($nb/100) % 10; if( $n == 9 ) $romain .= 'CM'; elseif( $n == 4 ) $romain .= 'CD'; elseif( $n > 5 ) $romain .= 'D'.str_repeat('C',$n-5); else $romain .= str_repeat('C',$n); $n = floor($nb/10) % 10; if( $n == 9 ) $romain .= 'XC'; elseif( $n == 4 ) $romain .= 'XL'; elseif( $n > 5 ) $romain .= 'L'.str_repeat('X',$n-5); else $romain .= str_repeat('X',$n); $n = $nb % 10; if( $n == 9 ) $romain .= 'IX'; elseif( $n == 4 ) $romain .= 'IV'; elseif( $n > 5 ) $romain .= 'V'.str_repeat('I',$n-5); else $romain .= str_repeat('I',$n); return $romain; } //Affichage $milieu .= "<h1>Chiffres romains</h1>"; if ($_POST['nombre']) { $roman = romanise($POST_['nombre']); $chiffre_romanise = "<p style='text-align: center;'>Le chiffre <strong>".$_POST['nombre']."</strong> s'écrit <strong>".$roman."</strong> en chiffres romains.</p>"; } $milieu .= "<p>Cet outil en ligne vous permettra de transformer un nombre écrit à l'aide de chiffres arabes en son équivalent sous forme de chiffres romains. Il vous suffit simplement d'entrer le nombre, le site fait le reste !</p>"; $milieu .="<form method=\"post\" action=\"romanise.php\"><p style='text-align: center;'>\n"; $milieu .="<strong>Chiffre à transformer :</strong> \n"; $milieu .="<input type=\"text\" name=\"nombre\" value=\"Nombre\" size=\"30\" /><br />\n"; $milieu .="<input type=\"submit\" value=\"Transformer\" name=\"B1\" />\n"; $milieu .="</p></form>\n"; $milieu .= "".$chiffre_romanise.""; [ code relatif à l'intégration de la page au site ] ?>
Quand je veux "romaniser" un nombre, il me sort bien la phrase "Le chiffre gnagngna s'écrit gnagna" sauf que la variable $roman est vide. Qu'est-ce que j'ai mal fait ?
--------------------
Si un de vos messages comporte du rouge alors qu'il n'y en avait pas avant, c'est qu'un admin tyrannique a corrigé une faute d'orthographe qui lui avait échauffé le crâne.
Forty-two
Écrit le : Lundi 16 Avril 2007 à 04h06
Script Master
Groupe : Admin
Messages : 364
Membre n° : 262
Inscrit le : 04/08/2003
Typo à la ligne :
CODE $roman = romanise($POST_['nombre']);
qui devrait plutôt s'écrire :
CODE $roman = romanise($_POST['nombre']);
--------------------
sephiroth1395
Écrit le : Jeudi 19 Avril 2007 à 13h39
Tyran Sadique et Irascible
Groupe : Admin
Messages : 633
Membre n° : 217
Inscrit le : 22/07/2003
Désolé pour la réponse tardive je n'avais pas vu que tu avais répondu.
En tout cas, c'était bien ça, merci beaucoup
J'ai ajouté un paragraphe de remerciements pour vous trois sur la page.
--------------------
Si un de vos messages comporte du rouge alors qu'il n'y en avait pas avant, c'est qu'un admin tyrannique a corrigé une faute d'orthographe qui lui avait échauffé le crâne.
0 utilisateur(s) sur ce sujet (0 invités et 0 utilisateurs anonymes)
0 membres :
Suivre ce sujet
Pour recevoir une notification par email lorsqu'une réponse est faite dans ce sujet et que vous n'êtes pas présent sur les forums.
S'abonner à ce forum
Pour recevoir une notification par email lorsqu'un nouveau sujet est créé dans ce forum et que vous n'êtes pas connecté.
Télécharger / Imprimer ce sujet
Télécharger ce sujet dans différents formats ou afficher une version imprimable.
Habillé par Shadowillusions
Sites de nos membres :