Conversion d'une chaîne et table de multiplication

Petit nouveau ! | 3 Messages

18 déc. 2013, 17:35

Bonjour à tous !

Alors, je suis actuellement des études orientées programmation (donc je suis encore bien débutant en la matière), et je rencontre un petit soucis dans 2 exercices donnés par le prof' ! J'aurais donc besoin de votre aide pour m'orienter correctement ^^

Le premier, c'est de convertir une chaîne de caractère en entier. Mon problème vient du fait que s'il y a autre chose que +, -, 0...9, on doit afficher juste 0 ! Donc, la chaîne "-123456789" deviendra l'entier -123456789, mais si on a "123avza456", on aura 0. Mais je ne vois déjà pas comment on peut afficher juste le 0 (et en plus mon code ne fonctionne pas :( ) :
<?php
$chaine="103gyftyfd6879" ;
	for($i=0 ; $i<strlen($chaine) ; $i++) {
		if($chaine[$i]="0"||$chaine[$i]="1"||$chaine[$i]="2"||$chaine[$i]="3"||$chaine[$i]="4"||$chaine[$i]="5"||$chaine[$i]="6"||$chaine[$i]="7"||
		$chaine[$i]="8"||$chaine[$i]="9"||$chaine[$i]="+"||$chaine[$i]="-")
		echo intval($chaine[$i]) ;
		else
		echo "0" ;
}
?>

Le deuxième, c'est de faire une table de multiplication de ce type : http://j-reaux.developpez.com/tutoriel/ ... cation.jpg

Mais je ne vois pas comment afficher le orange pour la diagonale.

Mon code sur cet exercice :
<?php
echo "<table border=1>" ;
echo "<tr><td bgcolor='grey'>iXj</td>";
    for ($i=1;$i<10;$i++)
    echo "<th bgcolor='yellow'>$i</th>";
echo "</tr>";

    for ($j=1;$j<10;$j++) {
    echo "<tr><th bgcolor='yellow'>$j</th>";
        if($i==$j) {
            for ($i=1;$i<10;$i++) {
            $res=$i*$j ;
            echo "<td bgcolor='orange'>$res</td>";
}
}
        else
            for ($i=1;$i<10;$i++) {
            $res=$i*$j ;
            echo "<td>$res</td>";
}
echo "</tr>";
}
echo "</table>" ;
?>

Merci d'avance !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 déc. 2013, 18:17

salut,

Alors la première à ce rappeler c'est php n'est pas typer, du coup "1" ou 1 c'est la même chose (d'ailleurs c'est aussi la même chose que true).

sinon tu peux simplement suivre les infos de la doc http://www.php.net/manual/fr/language.t ... er.casting :mrgreen:

pour la seconde partie c'est simple tu as déjà le calcul et même le test.
le problème c'est que ut rajoute une boucle qui est inutile il faut juste que tu change la classe css

en pseudo code
si i = j alors
la classe css devient orange
sinon
pas de classe css
fin si

cela se traduit par
début affichage balise (<td )
test valeur et affiche ou pas du style
affichage de la fin du tag plus la donnée

pour info en xml la délimitation des attribut c'est les " et non les '
tu peux parfaitement utiliser les simple quote (') pour délimiter les chaines de caractères en php, ceci afin d'éviter d'utiliser la parseur de chaine de caractère au profit de la concaténation.
- parce que c'est plus rapide
- parce que c'est plus lisible
- pppppaaaarrrrccccceeeee qqqquuuuueeeee

donc echo '<td class="'.$class.'">'.$value.'</td>'; :mrgreen:

exemple de solution http://phpjungle.info/phpfrance/khyte.php
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

18 déc. 2013, 20:25

Merci beaucoup :) !
Pour le premier, c'est ok, je cherchais compliqué alors que ça ne l'était pas :mrgreen:
Par contre, pour le deuxième, je dois obligatoirement utiliser que du php :? .
(et ok, je penserais à utiliser les ' plutôt que " ^^)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 déc. 2013, 23:41

que du php c'est pas gagner pour la table html ;)

pour le second la solution t’attend quand tu auras trouvé c'est comme cela que fonctionne le code dont j'ai mis le lien.

il te manque juste la traduction en php du pseudo code que j'ai mis c'est simple pas besoin de chercher compliquer ;)


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 2278 Messages

19 déc. 2013, 11:19

en pseudo code
si i = j alors
la classe css devient orange
sinon
pas de classe css
fin si

en mon pseudocode
si i = j alors
$classe = "diagonale";
sinon
classe = "standard";
fin si

Et je vois mal comment avec seulement du php, à moins de s'imposer:
en mon pseudocode
si i = j alors
$cellule = "<td style = 'background-color:yellow'>$valeur</td>";
sinon
$cellule = "<td>$valeur</td>";
fin si
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 déc. 2013, 11:40

@sirakawa : oui c'est la seule solution ;)
par contrer yellow c'est jaune :mrgreen:


je suis déjà loin ....
Il en faut peu pour être heureux ......

Mammouth du PHP | 2278 Messages

19 déc. 2013, 12:48

@sirakawa : oui c'est la seule solution ;)
par contrer yellow c'est jaune :mrgreen:


je suis déjà loin ....
Si tu crois que j'allais me crever à chercher le code de la couleur!! :) :) :)
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 3 Messages

19 déc. 2013, 17:07

Et pourtant, je dois bien TOUT faire dans la balise php (je trouve ça un peu débile, perso, puisque le mieux serait bien entendu d'utiliser le php avec le html et le css ^^).
Le soucis, c'est bien que même si j'ai mis "si i=j, alors la cellule résultat sera orange", mais ça ne fonctionne pas :(

Mammouth du PHP | 2278 Messages

19 déc. 2013, 17:16

si $i == $j et non pas $i = $j
= est l'opérateur d'affectation
== est l'opérateur de comparaison
En confidence, ne dis pas à ton prof que tu aimerais bien voir sa solution uniquement en php (c'est un conseil qu'on donne aux candidats à un exam quand ils ne savent pas répondre à une question:"Monsieur, pouvez-vous m'éclairer en me donnant la réponse?").

à moins qu'il ait causé de sprintf ou printf (String Print Formated).... Mais sur cette fonction je suis assez creux.

Annexe: c'est la table d'un multiplicateur donné que tu fais. Comment fait-on pour généraliser la chose?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD