Powered by Invision Power Board


Forum Rules Bienvenue dans la Distillerie d'entraide

Quelques soient vos problèmes, nous sommes là !

  Reply to this topicStart new topicStart Poll

> Réecrire un bout de C en PHP, Besoin d'aide
sephiroth1395
Écrit le : Lundi 02 Avril 2007 à 10h40


Tyran Sadique et Irascible
Group Icon

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.
PMEmail Poster
Top
Kane
Écrit le : Lundi 02 Avril 2007 à 13h08


Sylphe
Group Icon

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é : tongue.gif )

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é.
PMEmail Poster
Top
Kane
Écrit le : Lundi 02 Avril 2007 à 13h19


Sylphe
Group Icon

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 happy.gif


--------------------
Celui qui contrôle le passé,commande le futur. Celui qui commande le futur peut conquérir le passé.
PMEmail Poster
Top
sephiroth1395
Écrit le : Lundi 02 Avril 2007 à 16h55


Tyran Sadique et Irascible
Group Icon

Groupe : Admin
Messages : 633
Membre n° : 217
Inscrit le : 22/07/2003




Merci beaucoup smile.gif 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.
PMEmail Poster
Top
Le poussin
Écrit le : Lundi 02 Avril 2007 à 19h34


Roi des abysses
Group Icon

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 user posted image
Mon site : user posted image
PMUsers Website
Top
Kane
Écrit le : Mardi 03 Avril 2007 à 09h33


Sylphe
Group Icon

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 Wink.gif


--------------------
Celui qui contrôle le passé,commande le futur. Celui qui commande le futur peut conquérir le passé.
PMEmail Poster
Top
Kane
Écrit le : Mardi 03 Avril 2007 à 10h13


Sylphe
Group Icon

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é.
PMEmail Poster
Top
Le poussin
Écrit le : Mardi 03 Avril 2007 à 21h51


Roi des abysses
Group Icon

Groupe : Citoyens
Messages : 507
Membre n° : 310
Inscrit le : 22/09/2003




Ça fait plus long quand même comme solution. tongue.gif


--------------------
Cot cot cot user posted image
Mon site : user posted image
PMUsers Website
Top
Kane
Écrit le : Mercredi 04 Avril 2007 à 10h44


Sylphe
Group Icon

Groupe : Citoyens
Messages : 257
Membre n° : 510
Inscrit le : 08/05/2004




jamais content ce piti poulet bleu tongue.gif

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 laugh.gif


--------------------
Celui qui contrôle le passé,commande le futur. Celui qui commande le futur peut conquérir le passé.
PMEmail Poster
Top
sephiroth1395
Écrit le : Mercredi 04 Avril 2007 à 10h45


Tyran Sadique et Irascible
Group Icon

Groupe : Admin
Messages : 633
Membre n° : 217
Inscrit le : 22/07/2003




Merci à tous les deux, ça sera vite intégré à KoD smile.gif


--------------------
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.
PMEmail Poster
Top
sephiroth1395
Écrit le : Dimanche 15 Avril 2007 à 20h48


Tyran Sadique et Irascible
Group Icon

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>&nbsp;\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.
PMEmail Poster
Top
Forty-two
Écrit le : Lundi 16 Avril 2007 à 04h06


Script Master
Group Icon

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']);


--------------------
#define QUESTION ((2b) || !(2b))
#define ANSWER 42

mon site perso
PMEmail PosterUsers Website
Top
sephiroth1395
Écrit le : Jeudi 19 Avril 2007 à 13h39


Tyran Sadique et Irascible
Group Icon

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 smile.gif
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.
PMEmail Poster
Top
1 utilisateur(s) sur ce sujet (1 invités et 0 utilisateurs anonymes)
0 membres :

Topic Options Reply to this topicStart new topicStart Poll

 


Habillé par Shadowillusions

Sites de nos membres :
Le blog de Mortis Ghost Le site de la réécriture Avatar RPG Le site de Fauna Friends