Math en php ?

cs_marlene1 Messages postés 17 Date d'inscription samedi 19 mai 2007 Statut Membre Dernière intervention 22 août 2009 - 29 mai 2007 à 20:30
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 30 mai 2007 à 23:25
j' ai besoin d'une aide pour faire une addition un peu particulière en php
soit 22 cartes et 4 tirées au hasard j 'aimerai qu 'elles soit additionées et si le nombre trouvé est supérieur à 22 que ce dernier nombre soit readitioner suivant ses 2 chiffres
ex : 15+20+10+9 =54=9

je suis vraiment reconnaissante à ceux ou celle qui veulent bien m aider
merci infiniment  

19 réponses

atchoumen Messages postés 117 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 17 avril 2008
29 mai 2007 à 20:44
Salut moi je ferais comme ca

//tu tires un nbre au hasard
$carte1 = rand(1,22);
$carte2 = rand(1,22);
$carte3 = rand(1,22);
$carte4 = rand(1,22);

//tu additionnes
$total = $carte1 + $carte2 + $carte3 + $carte4;

//tu compares
if ($total >= 22) {
    //tu recuperes le premier chiffre
    $chiffre1 =
substr($total, 0,1);
  
    $chiffre2 =
substr($total, 1,2);
  $resultat = $chiffre1 + $chiffre2;
echo $resultat;
}else {
    echo $total;
}

J'ai pas testé si ca marche pas fais moi signe
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 43
29 mai 2007 à 23:28
Salut

tres mauvaise idee le code ci dessus... tu peux tirer deux fois la meme carte...

$cartes=array();
for ($i=0;$i<22;$i++){
$cartes[]=$i;
}
for ($i=0;$i<22;$i++){
$j = rand($i,21);
$a=$cartes[$i];
$cartes[$i]=$cartes[$j];
$cartes[$j]=$a;
}

// la t'as 22 cartes melangees... si tu mets $i<4 au lieu de $i<22 dans la seconde boucle, tu n'as melange que les 4 premieres cartes

c'est pas un melange parfait...

sinon, on peut reprendre le code plus haut

//tu additionnes
$total = $cartes[0] + $cartes[1] + $cartes[2] + $cartes[3];

//tu compares
if ($total >= 22) {
    //tu recuperes le premier chiffre
    $chiffre1 =
substr($total, 0,1);
  
    $chiffre2 =
substr($total, 1,2);
  $resultat = $chiffre1 + $chiffre2;
echo $resultat;
}else {
    echo $total;
}

une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
30 mai 2007 à 01:34
Salut,

@coucou747 :
$cartes=array();
for ($i=0;$i<22;$i++){
$cartes[]=$i;
}
for ($i=0;$i<22;$i++){
$j = rand($i,21);
$a=$cartes[$i];
$cartes[$i]=$cartes[$j];
$cartes[$j]=$a;
}

Moi, je ferais ça :

$cartes = range(1,22);
srand((float)microtime()*1000000);
shuffle($cartes);
$tirage = array_chunk($cartes, 4)
$total = array_sum($tirage[0]);
if ($total >=22)
{
$total = array_sum(str_split($total));
}
echo $total;

En fait, toutes les opérations qu'on fait intuitivement de tête peuvent trouver leur équivalent en fonction php...
Question perfs, je ne sais pas du tout ce que ça donne... Mais ça permet de ne pas réinventer la roue... (en même temps, j'ai pas testé...)
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 43
30 mai 2007 à 01:45
Salut

connaitre une api par coeur...
j'ai toujours eu des 0 en autodictes... par contre, cote logique, je pense pouvoir dire que je me debrouille... alors evidement, evidement les fonctions php seront plus rapides car ecrites en C.... seulement donner a un debutant sa fonction disons detaillee comme ca, a mon avis c'est plus constructif... (et ne compte pas sur moi pour chercher dans php.net a la place du debutant, si il sait me lire, il sait lire php.net....)

quand je debutais en php... j'ai meme recode substringcount...

une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
30 mai 2007 à 01:52
"seulement donner a un debutant sa fonction disons detaillee comme ca, a mon avis c'est plus constructif..."
=> oui et non. Parce que j'ai appris en apprenant à ne pas réinventer la roue.
Certes, j'ai mis ça un peu comme ça sort de la bétonneuse. Bon. Je le concède.
Cependant, même un débutant doit être capable de se dire qu'il faut chercher si une fonction existe pour faire ce qu'il veut. Là, c'était le cas...
Même dans les bouquins ils préconisent d'avoir la doc php en permanence sous les yeux quand on développe, pour, justement, y trouver les fonctions qu'on n'aura pas à réécrire.

Mais on pourrait se lancer dans un super débat qui pourrait s'intituler "De l'utilité de réécrire les fonctions natives". Ce serait intéressant... Parce que réécrire les fonctions natives, ça permet d'avoir une connaissance plus bas niveau du langage et de ses rouages. Seulement, quand on début, on cherche avant tout à avoir un script qui marche.

Bref, t'as pas tort dans ta démarche... On n'a juste pas tout à fait la même... Probablement pas le même parcours non plus...
Sur ce, bonne nuit.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 43
30 mai 2007 à 02:29
Salut

Cette annee, j'ai recode 4 ou 5 algos de tris en C, crois moi, j'ai beaucoup appris... j'ai aussi fait une classe jeuxdecartes en java, la t'apprends a couper et melanger un jeu (couper, c'est en fait un algo super con...)

Evidement, quand tu cherches les perfs (ce qui est normal) faut avoir la doc de php.... allez, juste pour te faire vomir, voila ce que je viens de coder a l'instant : imagerotate (si tu ne compiles pas php toi meme, t'as pas gd alors j'avais la fleme de le faire a chaque reinstall de mon serveur et de ma machine de test alors :) j'ai fait un truc gore)

mon algo plus haut lui permet d'apprendre a coder, le tien lui permet d'avoir un truc qui sera plus rapide... en debut d'annee, j'avais pas le net... ca ne m'empechait pas de coder... pourtant j'avais pas la doc sous les yeux...

bref, ma solution explique, et la tienne est la meilleur disons dans du code...

une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 43
30 mai 2007 à 04:15
Ajoutons simplement :

Ne pas toujours reinventer la roue, c'est ne pas perdre de temps

reinventer la roue, c'est savoir comment la roue qu'on utilisera finalement fonctionne...

en Cpp j'utilise pas souvent la STL, je devrais, oui, mais je ne le fais pas... pourquoi ? j'en sais rien, probablement pour m'ameliorer encore et toujours dans la maitrise des differentes structures de donnees... J'avais code une lib pour utiliser des grands nombres, mais si un jours j'en ai besoin, j'en choisirais une autre.... ma lib ne sera jamais aussi rapide que la leur... mais ca me permet de savoir comment ca marche... de savoir pouquoi certaines fonctions sont lentes... pourquoi Qsort ne doit pas etre appliquee sur une liste de 10 elements, etc...

une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
30 mai 2007 à 09:32
Hellooo...
array_rand — Pick one or more random entries out of an array

Soit $tirage = arrray_rand($cartes,4);

A+
0
atchoumen Messages postés 117 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 17 avril 2008
30 mai 2007 à 19:28
@coucou747

Juste pour réponde à ta critique ; "très mauvaise idée" il n'a jamais été question de tirer des cartes différentes donc ca laisse la possibilité de tirer 4 fois la même.
Enfin j'accepte la critique car c'est vrai que le code que j'ai posé été plutot simplicime et pas optimisé. :-)
Promis la prochaine fois je ne réinventerai pas la roue et je metterais un bon code bien optimisé.
En tous les cas pour une fois voila une question qui aura succité plus de 2 réponses.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 43
30 mai 2007 à 19:37
Salut
"soit 22 cartes et 4 tirées au hasard "=> pour moi ca veut dire que t'as un jeu de 22 cartes, et que t'en prends 4 pour te faire une main de 4 cartes.... (ca semble naturel comme ca...)

une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0
cs_marlene1 Messages postés 17 Date d'inscription samedi 19 mai 2007 Statut Membre Dernière intervention 22 août 2009
30 mai 2007 à 21:38
Bonsoir
pour l aide que tu m as apporté sur le tirage des 22 cartes


Et bien non ça ne marche pas mais je pense qu'il ne manque pas grand chose juste uns accolade ou quelquechoses comme ça j 'ai le texte


22) { $chiffre1 substr($total, 0,1); $chiffre2 = substr($total, 1,2); $resultat = $chiffre1 + $chiffre2; echo $resultat; }else { echo $total; } ?>
qui apparait sur l 'ecran mais pas de cartes

merci quand même
0
cs_marlene1 Messages postés 17 Date d'inscription samedi 19 mai 2007 Statut Membre Dernière intervention 22 août 2009
30 mai 2007 à 21:38
Bonsoir
pour l aide que tu m as apporté sur le tirage des 22 cartes


Et bien non ça ne marche pas mais je pense qu'il ne manque pas grand chose juste uns accolade ou quelquechoses comme ça j 'ai le texte


22) { $chiffre1 substr($total, 0,1); $chiffre2 = substr($total, 1,2); $resultat = $chiffre1 + $chiffre2; echo $resultat; }else { echo $total; } ?>
qui apparait sur l 'ecran mais pas de cartes

merci quand même
0
cs_marlene1 Messages postés 17 Date d'inscription samedi 19 mai 2007 Statut Membre Dernière intervention 22 août 2009
30 mai 2007 à 21:42
Je suis vraiment désolée mais sur ma page il n'y a que
 =22) { $chiffre1 = substr($total, 0,1); $chiffre2 = substr($total, 1,2); $resultat = $chiffre1 + $chiffre2; echo $resultat; }else { echo $total; } ?> qui apparait  ..problême d'accolades ou autre mais comme je suis une vraie débutante sur ce sujet
je colle ....
merci encore si tu peut verifier ton aide est bienvenue et je t'en remercie
mais je me pencherais sur le sujet demain
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
30 mai 2007 à 21:58
Bonjour,

Je crois que défois, il est vraiment interessant de connaitre l'API "par coeur" :

<?php
    header('content-type:text/plain');
    error_reporting(E_ALL|E_STRICT);

$i=0;
while ( $i<22 ) $cartes[] = ++$i;

    echo "Les cartes\n";print_r($cartes);

$tirage = array_rand($cartes,4);

    echo "Le tirage\n";print_r($tirage);

$sum = array_sum($tirage);

    echo "Somme intermémdiare : $sum\n";

if ( $sum > 22 ) $sum = array_sum(str_split($sum));

    echo "Somme finale : $sum\n";
?>

Ca permet, entre autre, de faire ce problème en 5 lignes... Ce qui évite beaucoup d'erreur de frappe, oubli de crochet et autre...

A+
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
30 mai 2007 à 22:02
@J_G:
"while ( $i<22 ) $cartes[] = ++$i;"

A la limite, c'est mieux, dans ces conditions, d'utiliser range(). C'est un peu plus mieux qu'une boucle... En plus tu commences à 0, et je ne sais pas s'il y a des cartes qui valent 0 (m'enfin bon...)
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
30 mai 2007 à 22:35
A bah voilà... Une fonction qui m'a échappée !!! La coquine!

Merci neigedhiver

Donc on en est à 1 ligne :

<?php
echo 'Somme finale = '.((($s=array_sum(array_rand(range(1,22),4)))>22)?array_sum(str_split($s)):$s);
);
?>

Bon mais c'est un peu abusé là ;)

A+

PS : non je commençais bien à 1 car : ++$i (et non $i++, soit l'incrémentation avant d'affecter)
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
30 mai 2007 à 22:36
Pardon :

<?php echo 'Somme finale = '.((($s=array_sum(array_rand(range(1,22),4)))>22)?array_sum(str_split($s)):$s);?>
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
30 mai 2007 à 22:46
"Bon mais c'est un peu abusé là ;)"
LOOOOOOOL

"PS : non je commençais bien à 1 car : ++$i (et non $i++, soit l'incrémentation avant d'affecter)"

Au temps pour moi, j'ai pas l'habitude d'incrémenter comme ça...

C'est vrai que c'est bourrin... Mais c'est marrant...
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 43
30 mai 2007 à 23:25
Salut
"
<?php echo 'Somme finale = '.((($s=array_sum(array_rand(range(1,22),4)))>22)?array_sum(str_split($s)):$s);?>"

lol, bande de programmeurs perl XD pour moi c'est incomprehensible, alors que mon algo plus haut l'est beaucou plus...

une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0