IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Coder un arbre de noël en PHP


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 119
    Points : 64
    Points
    64
    Par défaut Coder un arbre de noël en PHP
    Bonjour,

    dans le cadre d'un test je dois coder un arbre de noel en php. l'exercice est de créer une gamme d'arbre allant de 3 à 9 (comme le montre l'image)
    Nom : chris3_9.png
Affichages : 593
Taille : 3,9 Ko

    j'ai réussi à créer l'arbre (il me reste juste à centrer):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for ( $i=1; $i<4; $i++ ) {
    for( $j=0; $j<(2 *$i - 1); $j++ ) {
    echo "*";
    }
    echo '' . "\n";
    }
    echo "*";
    ce qui donne :
    Nom : arbre.png
Affichages : 566
Taille : 2,5 Ko

    cela m'affiche une gamme mais le but est de créer successivement une gamme de 3 à 9, avec le moins de caractère possible.

    Comment on peut proceder ? j'ai trouvé la méthode clone() , je me demandais si on ne pouvait pas l'utiliser en incrémentant l'arbre. mais je ne sais pas comment m'y prendre.

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    pour afficher les espaces dans le navigateur, vous pouvez indiquer que le contenu n'est pas de l'html mais du texte brut comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    header("Content-type: text/plain");
     
    ?>
      *
     ***
    *****

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 119
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    ça ne fonctionne pas dans PHP sandbox, j'ai ce message d'erreur :

    "<br />
    <b>Fatal error</b>: Uncaught Error: Call to undefined function header() in [...][...]:4
    Stack trace:
    #0 {main}
    thrown in <b>[...][...]</b> on line <b>4</b><br />"


    Sinon, voici ce que j'ai réussi à obtenir maintenant :

    Nom : chris_php(1).png
Affichages : 541
Taille : 48,1 Ko

    J'obtiens les arbres avec 3 lignes, 4, 6 et 8 lignes. Mais toujours pas de 3 à 9.

    Je ne vois pas ou est mon erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
     
     
    $ligne = 4;
    function arbre($ligne) {
        for ( $i=0; $i<$ligne; $i++ ) {
            for( $j=0; $j<(2 *$i - 1); $j++ ) {
                echo "*";
            }
        echo '' . "\n";
        }
        echo "*";
    }
     
    for($i = 0; $i < 9; $i++) {
        $i++;
        arbre($i);
    }

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 119
    Points : 64
    Points
    64
    Par défaut
    MAJ:


    il me semble avoir réussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
     
     
    $ligne = 0;
    function arbre($ligne) {
        for ( $i=0; $i<$ligne; $i++ ) {
            for( $j=0; $j<(2 *$i - 1); $j++ ) {
                echo "*";
            }
        echo '' . "\n";
        }
        echo "*";
    }
     
    for($i = 4; $i < 11; $i++) {
        arbre($i);
    }
    Nom : chris_php_win.png
Affichages : 531
Taille : 4,8 Ko

    Mais comment je peux centrer le tout ? sachant que mon support de travail s'effectue içi :
    https://code.golf/christmas-trees#php

    Je ne peux pas utiliser de balises HTML visiblement.

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    C'est déjà une sortie texte brut. Il faut écrire des espaces pour centrer correctement tes *

    Arbre de taille 3 :
    ligne 1 : 2 espaces puis 1 *
    ligne 2 : 1 espace puis 3 *
    ligne 3 : 0 espace puis 5 *
    ligne 4 (tronc) : 2 espaces puis 1 *
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour,

    petit jeu sympa...

    ...surtout quand on connait quelques fonctions bien utiles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    // Arbre de Noel
    //----------
    function arbre_noel($nbre_lignes) 
    {
    	$arbre = '';
    	// largeur de l'arbre (en nombred de caractères)
    	$total_car = (2*$nbre_lignes -1); 
    	// branches
        for ( $i=0; $i<$nbre_lignes; $i++ ) 
    	{
    		$branche = str_repeat('*',1+2*$i);
    		$branche = ' '.str_pad($branche, $total_car, " ", STR_PAD_BOTH);
             $arbre .= $branche."\n";
        }
    	// tronc
    	$tronc = '*';
    	$tronc = ' '.str_pad($tronc, $total_car, ' ', STR_PAD_BOTH);
        $arbre .= $tronc."\n"."\n";
     
    	echo $arbre;
    }
    //----------
    // affichage 3 à 9 lignes
    for($i=3; $i<=9; $i++) 
    {
        arbre_noel($i);
    }
    ?>
    1- Pour l'afficher à l'écran (HTML), remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<pre>'.$arbre.'</pre>';
    2- Pour aligner tous les arbres, remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $total_car = (2*$nbre_lignes -1);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $total_car = (2*9 -1);  // forcément impair
    où 9 est ici le nombre maxi de lignes

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 119
    Points : 64
    Points
    64
    Par défaut
    Merci jreaux62 pour ta réponse.

    J'ai pris le temps d'étudier ta technique, je ne connaissais pas jusqu'à présent les 2 fonctions str_pad et repeat.

    Le véritable challenge de cet exercice était de pouvoir le faire avec le moins de caractère possible mais l'exercice en soi est déjà résolu.

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 119
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Séb. Voir le message
    C'est déjà une sortie texte brut. Il faut écrire des espaces pour centrer correctement tes *

    Arbre de taille 3 :
    ligne 1 : 2 espaces puis 1 *
    ligne 2 : 1 espace puis 3 *
    ligne 3 : 0 espace puis 5 *
    ligne 4 (tronc) : 2 espaces puis 1 *
    Merci

  9. #9
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Le même code, minimisé (en conservant néanmoins un minimum de lisibilité/indentation) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function a($n)
    {
    	for($i=0;$i<$n;$i++){ echo ' '.str_pad(str_repeat('*',1+2*$i),(2*$n-1),' ',STR_PAD_BOTH)."\n"; }
    	echo ' '.str_pad('*',(2*$n-1),' ',STR_PAD_BOTH)."\n\n";
    }
    for($i=3;$i<=9;$i++){ a($i); }

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    [EDIT]Mince, j'avais pas tilté que le paramètre était la "hauteur" de l'arbre, je croyais que c'était le nombre de bouloches en bas. Du coup ça simplifie le code:[/EDIT]

    En utilisant une chaîne formatée et sa capacité à justifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function a($n){
        $F='%1$'.($n-1)."s*%1\$s\n";
        $L='';
        do printf($F,$n?$L:''); while( $n-- && $L.='*' );
    }
     
    a(9);
    avec:
    • $n la hauteur sans la dernière ligne du tronc dont on déduit avec $n-1 la taille de la justification à droite. On utilise ensuite $n comme compteur de la boucle do..while.
    • $F le format de la chaîne:
      • % marque le début du placeholder,
      • 1$ précise qu'il s'agit du premier paramètre passé (après le format),
      • $n-1 la taille de la justification (par défaut à droite et complétée par des espaces),
      • s précise que le paramètre est à traiter comme une chaîne de caractères.
    • $L contient les branches d'un coté.


    demo
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Coder un arbre de proba
    Par tipeel dans le forum Maple
    Réponses: 0
    Dernier message: 02/12/2011, 13h31
  2. Réponses: 0
    Dernier message: 06/08/2009, 15h40
  3. Arbre n-aire en php
    Par ilood dans le forum Langage
    Réponses: 3
    Dernier message: 01/12/2008, 10h03
  4. [PHP-JS] Coder un collapse ou expand
    Par skyangel dans le forum Langage
    Réponses: 9
    Dernier message: 29/06/2006, 15h00
  5. utilisation du php, comment coder ?
    Par arnolem dans le forum Langage
    Réponses: 8
    Dernier message: 05/04/2006, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo