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

Langage PHP Discussion :

Pourquoi ça fonctionne


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Afpa
    Inscrit en
    Juillet 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Afpa

    Informations forums :
    Inscription : Juillet 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Pourquoi ça fonctionne
    Bonjour on a sans doute l'habitude de vous demander pourquoi un code ne fonctionne pas mais je vous demande ici pourquoi mon code fonctionne
    Je suis débutant en PHP et on m'a demandé de créer un code qui affiche la prochaine année bissextile voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $date=date('Y');
     
    while ($date%4!=0 and $date%100!=0) //la boucle s'arrête quand les modulos sont égales à 0
    {
       $date+=1;
    }
    echo $date;
    ?>
    Je suis partie du principe (selon wiki qu'une année bissextile est divisible par 4 et non divisible par 100, le principe de ma boucle était simple si le nombre est non divisible par 4 et divisible par 100 alors on incrémente le nombre sinon on affiche le dit nombre, ça ne fonctionnait pas alors j'ai testé de changer ma boucle en non divisible par 4 et non divisible par 100 et la miracle ça fonctionne et je ne comprend pas pourquoi la boucle ne devrait même pas démarré. Bref si vous avez une réponse je suis preneur.
    Enfin en bonus pour ceux qui aime les codes mal fichus j'ai pour vous un code de ma conception qui affiche une table de multi de 12x12 je vous laisse apprécier (je sais qu'il est dégueulasse il me fait juste marrer)
    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
    30
    echo "<table border=4px>"; //Création du tableau
    echo "<tr>";
    echo "<th></th>";  //th de la case blanche
    for ($i=0;$i<=12;$i++)
    {
        echo "<th>".$i."</th>"; //Première boucle pour les th en horizontale
     
    }
     
    echo "</tr>";
     
    for ($i2=0;$i2<=12;$i2++)
    {
        echo "<tr>";
     
        for ($i4=0;$i4<1;$i4++) //la deuxième boucle sert  à écrire la colone verticale des th elle s'arrete à 1 pour n'écrire qu'une valeur
        {
     
            echo "<th>".$i2."</th>"; //on écrit i2 car i4 lui revient à 0 à chaque tour de boucle
     
            for ($i3=0;$i3<=12;$i3++)
            {
                echo "<td>".$i2*$i3."</td>"; //une fois que la boucle i4 à finit son travail la boucle i3 lance les multiplication
     
            }
     
            echo "</tr>"; //une fois le th réalisé  on ferme le tr et on recommence la boucle.
        }
    }
    echo "</table>";

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 615
    Points : 43 588
    Points
    43 588
    Par défaut
    Ton algorithme est faux. Une année est bissextile si divisible par 4, pas par 100 sauf par 400. Exemple l'année 1900 n'est pas bissextile mais l'année 2000 si.

    Pour faire un et logique, il faut utiliser &&
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1-
    l'année sera bissextile (elle aura 366 jours)[1] :

    • si l'année est divisible par 4 et non divisible par 100,
      ou
    • si l'année est divisible par 400.

    (« divisible » signifie que la division donne un nombre entier, sans reste).
    Ça se traduit "logiquement" par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function is_annee_bissextile( $an )
    {
       return ( ($an%4==0 && $an%100!=0) || ($an%400==0) ); // true = bissextile
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $an = date('Y');
     
    while ( !is_annee_bissextile( $an ) ) // la boucle continue tant que PAS bissextile
    {
       $an+=1;
    }
    echo 'Prochaine année bissextile : '.$an;
    ?>
    2- Quant à ton tableau :

    Dernière modification par Invité ; 06/07/2019 à 13h18.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Afpa
    Inscrit en
    Juillet 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Afpa

    Informations forums :
    Inscription : Juillet 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Ton algorithme est faux. Une année est bissextile si divisible par 4, pas par 100 sauf par 400. Exemple l'année 1900 n'est pas bissextile mais l'année 2000 si.

    Pour faire un et logique, il faut utiliser &&
    Ça je sais qu'il est faux mon algorithme, je cherche juste à savoir pourquoi il fonctionne quand meme, je l'ai testé pour plusieurs années il me donne toujours la prochaine date bissextile, testais si vous n'y croyais pas je trouve ça incroyable
    Ah et désolé pour la non présence de balise code je suis encore débutant je ne savais pas trop comment faire.

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Citation Envoyé par Hermshell02 Voir le message
    Ça je sais qu'il est faux mon algorithme, je cherche juste à savoir pourquoi il fonctionne quand meme, je l'ai testé pour plusieurs années il me donne toujours la prochaine date bissextile, testais si vous n'y croyais pas je trouve ça incroyable
    Pose comme point de départ : l'an 2099 et regarde par toi-même le résultat. Ton algorithme te dit que l'année 2100 est bissextile alors que c'est faux.

    Pour une année bissextile :
    - si l'année est multiple de 100 alors elle doit être aussi multiple de 400
    - dans tous les autres cas, elle doit être multiple de 4

Discussions similaires

  1. pourquoi cela fonctionne dans un cas et pas dans l'autre ?
    Par Attila54 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 01/10/2010, 15h40
  2. Pourquoi Free fonctionne dans un cas et pas dans l'autre
    Par BuzzLeclaire dans le forum Langage
    Réponses: 8
    Dernier message: 25/01/2009, 14h04
  3. Pourquoi Firefox fonctionne et pas IE ?
    Par dinette dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 12/10/2008, 13h42
  4. pourquoi ça fonctionne ?
    Par hunter99 dans le forum C++
    Réponses: 9
    Dernier message: 24/12/2007, 17h23
  5. Réponses: 6
    Dernier message: 11/07/2007, 13h29

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