Joli sapin de noel
Résolu
Sabetodo
Messages postés
120
Date d'inscription
Statut
Membre
Dernière intervention
-
Sabetodo Messages postés 120 Date d'inscription Statut Membre Dernière intervention -
Sabetodo Messages postés 120 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Raccourci clavier sapin de noel
- Télécharger clavier arabe - Télécharger - Divers Web & Internet
- Numéro père noël whatsapp - Accueil - Messagerie instantanée
- Raccourci clavier retourner écran - Guide
- Creer un raccourci clavier - Guide
- Raccourci clavier - Guide
6 réponses
Bonsoir
¿ No sabes todo ? ;-)
J'ai testé ton programme et il a l'air de marcher moyennant quelques adaptations :
Dans tes lignes :
$blank = $last_line($taille) / 2 - $first_line($num) / 2;
$stars = $first_line($num) - 1;
fais attention, les noms des fonctions first_line et last_line ne doivent pas commencer par $
Le PHP n'est pas le C. Il ne lance pas l'exécution de la fonction main(). Il faut que tu programmes toi-même l'appel. Quant aux paramètres $args et $argv, ça dépend si tu appelles ton script en ligne de commande ou comme page HTTP. Si tu appelles en ligne de commande, regarde dans le manuel PHP, mais je ne pense pas que ça se passe comme ça. Et les chaînes de caractères en PHP ne se terminent pas par un zéro.
Si tu appelles ton script de manière classique, tu peux passer les paramètres par la méthode GET. Mais il faut aussi quelques aménagements comme le remplacement de \n par des <br />, celui des espaces par et encadrer le tout de balises <pre> </pre>
¿ No sabes todo ? ;-)
J'ai testé ton programme et il a l'air de marcher moyennant quelques adaptations :
Dans tes lignes :
$blank = $last_line($taille) / 2 - $first_line($num) / 2;
$stars = $first_line($num) - 1;
fais attention, les noms des fonctions first_line et last_line ne doivent pas commencer par $
Le PHP n'est pas le C. Il ne lance pas l'exécution de la fonction main(). Il faut que tu programmes toi-même l'appel. Quant aux paramètres $args et $argv, ça dépend si tu appelles ton script en ligne de commande ou comme page HTTP. Si tu appelles en ligne de commande, regarde dans le manuel PHP, mais je ne pense pas que ça se passe comme ça. Et les chaînes de caractères en PHP ne se terminent pas par un zéro.
Si tu appelles ton script de manière classique, tu peux passer les paramètres par la méthode GET. Mais il faut aussi quelques aménagements comme le remplacement de \n par des <br />, celui des espaces par et encadrer le tout de balises <pre> </pre>
Tu ne me rappelles pas que tu dois exécuter le script depuis la ligne de commande, tu me l'apprends. Ou plutôt tu confirmes ce que je soupçonnais.
Quand je dis programmer toi-même l'appel, je veux dire qu'une fonction en PHP ne s'exécute pas si elle n'est pas appelée, pas même la fonction main. Il faut au moins une ligne en dehors de toute fonction pour faire quelque chose. Dans ton cas :
<?php
function last_line($taille)
....
function main($argc, $argv)
{
...
} // fin de main
main ($argc, $argv); /appel de la fonction main avec des paramètres tels que tu les attends
?>
Pour ce qui est de $argc et $argv, je ne savais pas qu'ils existaient aussi en PHP mais tu as raison. Mais attention, ce sont des variables globales, pas de paramètres passés automatiquement à une fonction dont le nom est obligatoirement main (même si dans ton exemple tu appelles ta fonction main et que tu donnes ce nom à tes paramètres).
Quant à l'utilisation de \n et <br /> non, tu n'as pas le choix. En ligne de commande c'est obligatoirement \n et en HTML c'est obligatoirement <br />
Tu sais que ton length et ta fonction trans sont inutiles en PHP ? Tu peux faire directement sapin($argv[1]). En C tu pouvais aussi simplifier beaucoup avec sscanf mais ça n'est pas le sujet.
Bonne soirée
Quand je dis programmer toi-même l'appel, je veux dire qu'une fonction en PHP ne s'exécute pas si elle n'est pas appelée, pas même la fonction main. Il faut au moins une ligne en dehors de toute fonction pour faire quelque chose. Dans ton cas :
<?php
function last_line($taille)
....
function main($argc, $argv)
{
...
} // fin de main
main ($argc, $argv); /appel de la fonction main avec des paramètres tels que tu les attends
?>
Pour ce qui est de $argc et $argv, je ne savais pas qu'ils existaient aussi en PHP mais tu as raison. Mais attention, ce sont des variables globales, pas de paramètres passés automatiquement à une fonction dont le nom est obligatoirement main (même si dans ton exemple tu appelles ta fonction main et que tu donnes ce nom à tes paramètres).
Quant à l'utilisation de \n et <br /> non, tu n'as pas le choix. En ligne de commande c'est obligatoirement \n et en HTML c'est obligatoirement <br />
Tu sais que ton length et ta fonction trans sont inutiles en PHP ? Tu peux faire directement sapin($argv[1]). En C tu pouvais aussi simplifier beaucoup avec sscanf mais ça n'est pas le sujet.
Bonne soirée
ok Mr Toto, je viens de modifier mon code en apportant des modifications que tu m'as proposées. Et cela ne marche toujours pas. C'est surprenant que tu me dises que ça marche chez toi.
le voici:
En fait, si j'enleve la fonction trans cela ne va pas marche, raison pour laquelle je l'ai maintenue.
<?php function last_line($taille) { $lastline = 7; $jump = 6; for ($i = 1; $i < $taille; $i++) { if (($i % 2) != 0) $lastline += $jump; else if ($i != 1) { $jump += 2; $lastline += $jump; } } return($lastline); } function first_line($taille) { $firstline = 1; $jump = 4; for ($i = 1; $i < $taille; $i++) { if (($i % 2) != 0) $firstline += $jump; else if ($i != 1) { $jump += 2; $firstline += $jump; } } return ($firstline); } function draw($num,$taille) { $blank = last_line($taille) / 2 - first_line($num) / 2; $stars = first_line($num) - 1; $jump = 4; $hauteur_branche = $num + 3; for ($i = 0; $i < $hauteur_branche; $i++) { for ($j = 0; $j < $blank; $j++) echo(" "); for ($j = 0; $j < $stars; $j++) echo("*"); $blank--; $stars += 2; echo("*"); echo("<br/>"); } } function draw_tronc($taille) { if (($taille % 2) != 0) $largeur_tronc = $taille; else $largeur_tronc = $taille + 1; $hauteur_tronc = $taille; $blank = (last_line($taille) / 2) - ($largeur_tronc / 2); for ($i = 0; $i < $hauteur_tronc; $i++) { for ($j = 0; $j < $blank; $j++) echo(" "); for ($j = 0; $j < $largeur_tronc; $j++) echo("|"); echo("<br/>"); } } function sapin($taille) { if ($taille > 0) { $i = 1; while ($i <= $taille) { draw($i, $taille); $i++; } draw_tronc($taille); } } function trans($arg,$length) { $res = 0; $p = 1; $res += ($arg[($length--)] - '0'); while (($length >= 0) && ($arg[$length] != '-')) { $p *= 10; $res += (($arg[$length--] - '0') * $p); } return ($res); } function main($argc, $argv) { if ($argc == 2) { $length = 0; while($argv[1][$length] != 0) $length++; $length--; sapin(trans($argv[1], $length)); } else echo("Veuillez entrer la taille du sapin\n"); } main($argc, $argv); ?>
En fait, si j'enleve la fonction trans cela ne va pas marche, raison pour laquelle je l'ai maintenue.
finalment ca marche!!Mais pour cela, j'ai du remplacer le retour a la ligne par "\n".
je sais que que je ne dois pas faire cela, mais lorsque je mets la balise <br/> ca ne marche meme pas.
Cependant il m'affiche un avertissement dont je n'arrive pas a me debarasser:
PHP Notice: Uninitialized string offset: 1 in /nfs/s1/space/users/sept2/ca_n/rendu/web/www/jour_02/sapin.php on line 121
je sais que que je ne dois pas faire cela, mais lorsque je mets la balise <br/> ca ne marche meme pas.
Cependant il m'affiche un avertissement dont je n'arrive pas a me debarasser:
PHP Notice: Uninitialized string offset: 1 in /nfs/s1/space/users/sept2/ca_n/rendu/web/www/jour_02/sapin.php on line 121
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour le problkème /n ou <br>, je te l'avais pourtant bien dit...
Pour l' avertissement que tu as, je te l'avais dit aussi dès le message 1 : Et les chaînes de caractères en PHP ne se terminent pas par un zéro.
Il ne faut pas chercher un zéro pour trouver la longueur de la chaîne : il n'y en a pas ! Donc ton compteur augmente et tu dépasses la fin...
Utilise directement la fonction strlen() qui te donne la longueur de la chaîne
D'ailleurs comme je te l'ai déjà dit aussi dès le 1er message, tu n'as pas besoin de la longueur non plus, la traduction de chaîne en nombre est automatique en PHP : ta fonction trans ne sert à rien
Pour l' avertissement que tu as, je te l'avais dit aussi dès le message 1 : Et les chaînes de caractères en PHP ne se terminent pas par un zéro.
Il ne faut pas chercher un zéro pour trouver la longueur de la chaîne : il n'y en a pas ! Donc ton compteur augmente et tu dépasses la fin...
Utilise directement la fonction strlen() qui te donne la longueur de la chaîne
D'ailleurs comme je te l'ai déjà dit aussi dès le 1er message, tu n'as pas besoin de la longueur non plus, la traduction de chaîne en nombre est automatique en PHP : ta fonction trans ne sert à rien
enfin, ça marche. Je viens de me rendre compte pourquoi tu me disait qu'en php on n'a pas besoin du caractere 0 pour savoir si on est à la fin d'une chaine ou pas. Et quant au retour à la ligne, s'il s'agit d'un script qui sera executé depuis la ligne de commande, on peut mettre un "\n". Cela fait tout à fait le boulot; par contre si c'est dans une page web on n'a vraiment pas le choix, c'est toujours <br/>.
Je te remercie quand même pour ton aide. Excellente journée.
Je te remercie quand même pour ton aide. Excellente journée.
Comment je peux l'appeler par le méthode GET?
Quant au retour à la ligne, je te rassure que "\n" marche aussi. J'aurai pu utiliser la balise <br/>.