[RESOLU] triangle en php

Vertigo61
Invité n'ayant pas de compte PHPfrance

20 nov. 2010, 17:07

Bonjour,
je suis débutant en php, pouvez-vous m'aider?

Pour un exercice, on m'a demandé de réaliser des figures géométriques

Par exemple, cellec-ci:
*
**
***
****
*****

J'ai réussi avec ce code:
$n = 5;
for ($i = 1; $i <= $n; $i++)
{
for ($k = 1; $k <= $i; $k++)
{
echo "*";
}
echo '\n';
}

Seulement, je n'arrive pas à faire ces figures (j'ai essayé pendant des heures, j'ai tout tenté, ça ne marche pas!!):
*****
****
***
**
*
Quel paramètre dois-je changer pour inverser la figure?
j'ai changé $i <= $n en $i => $n
j'ai changé $i++ en $i=$i - 1

je pensais que ce code fonctionnerait:
$n = 5;
for ($i = 1; $i <= $n; $i++) //nb de lignes, on rajoute une ligne quand le nb de lignes est inférieur ou = à 5//
{
for ($k = 5; $k => $i; $k=$k-1) //nb d'etoiles, on enlève une étoile quand le nb d'étoiles est supérieur ou = au nb de lignes//
{
echo "*";
}
echo "\n";
}

Mais non!!

Et pour cette figure?
*
* *
* *
* *
* *

Et si on veut reproduire cette figure de façon géométrique de façon à faire un losange?

Merci beaucoup si vous pouvez m'expliquer les bons codes

ViPHP
ViPHP | 1136 Messages

20 nov. 2010, 21:14

Salut ,

Test ce code , j'ai pas testé ..

Dans un sens
$i = 5;
while($i>0){
    echo str_repeat("*", $i--);
    echo '<br/>';
}
et dans l'autre
$i = 1;
while($i<=5){
    echo str_repeat("*", $i++);
    echo '<br/>';
}
Ch.

vertigo61
Invité n'ayant pas de compte PHPfrance

22 nov. 2010, 22:51

ça marche bravo! et merci
c'est beaucoup plus simple
mais je dois le faire dans les 2 sens avec des boucles for

Eléphant du PHP | 275 Messages

23 nov. 2010, 14:11

Ca va être dûr, va falloir réfléchir.

Et si tu n'y arrive il faudra probablement changer d'orientation.

Eléphanteau du PHP | 11 Messages

23 nov. 2010, 21:56

bah oui c'est pas facile, hein?

merci de ton aide mais c pas celle que j'attendais Maître du phpinfou

mais as-tu déjà su faire les triangles en php, et avec des boucles for() ?

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

24 nov. 2010, 03:22

salut,

tu n'a pas complètement compris la logique pour la boucle for.
pour inverser son effet il ne faut pas inverser le sens de l'égalité, mais inverser les condition "logiquement"
donc
<?php
$n = 5;
for ($i = 1; $i <= $n; $i++)
{
for ($k = 1; $k <= $i; $k++)
{
echo "*";
}
echo '<br />'."\n";
}?>
devient
<?php
for ($i = $n; $i >0; $i--)
{
for ($k = 1; $k <= $i; $k++)
{
echo "*";
}
echo '<br />'."\n";
}?>
que donne le premier for ?
for ($i = 1; $i <= $n; $i++) => je commence à 1, et je fait autant de boucle que je peut tant que $i est inférieur ou égale = $n et j'ajoute une unité à $i à chaque tour.
for ($i = $n; $i >0; $i--) => je commence à n, et je fait autant de boucle que je peut tant que $i est supérieur à zéro et j'enlève une unité à$i ) chaque tour.
donc inversion de borne et post incrementation devient post décrementation.
après pour le losange je ferais ça
<?php
$largeur=10;
for ($i=1;$i<= $largeur ; $i++) {
	echo str_replace(' ','&nbsp;',str_pad(str_repeat('*',$i),$largeur,' ',STR_PAD_BOTH)).'<br />';
}
$largeur--;
for ($i=$largeur;$i > 0 ; $i--) {
	echo str_replace(' ','&nbsp;',str_pad(str_repeat('*',$i),$largeur,' ',STR_PAD_BOTH)).'<br />';
}
?>
a ne pas présenter a un prof de math il est pas droit (normal je sais pas faire de demi espace insécable ^^).

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

vertigo61
Invité n'ayant pas de compte PHPfrance

24 nov. 2010, 23:00

Merci beaucoup