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 :

[PHP-JS] instruction if, elseif ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut [PHP-JS] instruction if, elseif ?
    Bonjour tout le monde !

    Voilà, j'ai un code qui me retourne tous les résultats d'une combinaison. ci-dessous :

    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
    31
    32
    33
     
     
    <?php
     
    function combi($s, $i, $n, $p)
     
     
    {
     
    static $cpt; 
     
    if ($p == 0) 
    {
     
    echo $s.'<br>'; 
    return ++$cpt; 
    }
     
     --$p;
     
    for (;$i <= $n; ++$i)
    {
     
     
    combi($s." ".$i, $i + 1, $n, $p); } 
     
    return $cpt;
    }
     
    set_time_limit(0);
    echo 'Nombre de Solution: '.combi('',1,12,6); 
     
    ?>
    Aussi j'aimerais intégrer une instruction pour exclure toutes les combinaisons contenant les chiffres '1' et '7'. Ainsi j'insère l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    if ($s == 1 and 7) {
    $s = 'false';
     
    }
    De la même manière j'aimerais aussi intégrer une instruction qui exclue les combinaisons contenant les chiffres '2' et '8' par le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    if ($s == 1 and 7) {
    $s = 'false';
    }
    else if ($s == 2 and 8) {
    $s = 'false';
    }
    Cependant au lieu d'exclure les combinaisons contenant '1' et '7' d'une part ET celles contenant '2' et '8' d'autre part, cette instruction me supprime toutes les combinaisons contenant les chiffres '1', '2', '7' et '8'


    Comment m'y prendre alors?


    Sinon, [ echo 'Nombre de Solution: '.combi('',1,12,6); ] me retourne le nombre de combinaisons (ici 924). Comment soustraire à ce résultat toutes les combinaisons supprimées par l'instruction ci-dessus ?

    Merci d'avance !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 61
    Par défaut
    A l'instar du JavaScript, elseif doit etre collé en PHP non ?

  3. #3
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Effectivement le manuel php nous dit que c'est elseif : Structure de contrôle

    Moi c'est pas ce qui me gêne, c'est surtout que j'ai pas compris ce que tu voulais faire surtout ta condition.

    Tu veux que ton $s soit soit égale à 1 soit égale à 7 c'est bien ça ou je me trompe ??

    Tu es sûre de tes conditions ?

  4. #4
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    oups pour le elseif, il me semblait que les deux syntaxes marchaient (attachées ou pas )

    Sinon, j'ai revu un peu mon code concernant les combinaisons. Aussi, admetons que nous avons 15 possibilités numérotés de 1 à 15 et que nous souhaitons afficher et comptabiliser toutes les combinaisons à 4 chiffres (soit 1365 résultats possibles dans l'exemple) en excluant toutes les combinaisons comportant les suites :

    1,2,3 --> soit 1 et 2 OU 2 et 3 OU 1 et 3 OU 1 et 2 et 3
    4,5,6
    7,8,9
    10,11,12
    13,14,15

    Voici les premiers résultats de notre requête. Ainsi, toutes ces lignes sont à supprimer :

    1 2 3 4
    1 2 3 5
    1 2 3 6
    1 2 3 7 ---> parce que 1 et 2 et 3
    1 2 3 8
    1 2 3 9
    1 2 3 10
    1 2 3 11
    1 2 3 12
    1 2 3 13
    1 2 3 14
    1 2 3 15
    1 2 4 5 ---> parce que 1 et 2 ET 4 et 5
    1 2 4 6
    1 2 4 7
    1 2 4 8
    1 2 4 9
    1 2 4 10 ---> 1 et 2

    Voici le code qui me retourne les résultats de la combinaison :

    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
    31
    32
     
    <?php
     
    function combi($s, $i, $n, $p)
     
     
    {
     
    static $cpt; 
     
    if ($p == 0) 
    {
     
    echo $s.'<br>'; 
    return ++$cpt; 
    }
     
     --$p;
     
    for (;$i <= $n; ++$i)
    {
     
     
    combi($s." ".$i, $i + 1, $n, $p); } 
     
    return $cpt;
    }
     
    set_time_limit(0);
    echo 'Nombre de Solution: '.combi('',1,15,4); 
     
    ?>

    Merci d'avance

  5. #5
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    pas sur d'avoir bien pigé. Essai ça:

    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
    function combi($s, $i, $n, $p) {
      static $cpt; 
      if ($p == 0) {
        $echo = true;
        $a = explode(" ", trim($s));
        for ($k = 0; $k < count($a) - 1; ++$k) {
          if (($a[$k] + 2) >= $a[$k+1]) {
            $echo = false;
            break;
          }
        }
        if ($echo) echo $s.'<br>'; 
        return ++$cpt; 
      }
      --$p;
      for (;$i <= $n; ++$i) {
        combi($s." ".$i, $i + 1, $n, $p);
      } 
      return $cpt;
    }
     
    set_time_limit(0);
    echo 'Nombre de Solution: '.combi('',1,15,4);

  6. #6
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Coucou goodpz et merci de ton post

    Concernant les conditions de la requête, il faut que je respecte ces lignes :

    1ere ligne : 1,2,3
    2eme ligne : 4,5,6
    3eme ligne : 7,8,9
    4eme ligne : 10,11,12
    5eme ligne : 13,14,15

    En gros, il faut que la combinaison contienne seulement 1 chiffre parmi les lignes ci-dessus

    Exemple :

    1,4,7,10
    1,5,7,14
    2,5,8,14

    ...

    Merci tout le monde

  7. #7
    Membre expérimenté Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Par défaut
    Citation Envoyé par Angelik
    oups pour le elseif, il me semblait que les deux syntaxes marchaient (attachées ou pas )
    else if est tout à fait aurorisé et j'ai même l'impression que c'est la forme la + utilisée.

    Citation Envoyé par Angelik
    Voilà, j'ai un code (ci-dessous) qui me retourne les nombre de combinaisons possibles à 4 chiffres pour 15 possibilités différentes.

    parmi les 1365 résultats que me retourne la requête j'aimerais exclure toutes les combinaisons dont le résultats inclus deux ou trois chiffres
    cas d'étude assez classique... si c'est le cas, j'imagine que tu as vu la matière nécessaire pour résoudre le problème.

    Citation Envoyé par Angelik
    par et parmi les 5 lignes ci-dessous :
    1,2,3
    4,5,6
    7,8,9
    10,11,12
    13,14,15
    si tu as droit à toutes les fonctions php, alors transforme $s en array et tu pourras utiliser array_intersect()... pour le cas 1,2,3 par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(count(array_intersect(array(1,2,3), $s)) > 1) return $cpt;
    peut se traduire en francais par... si l'intersection de l'ensemble {1,2,3} avec l'ensemble $s donne + qu'un élément, alors rejeter la combinaison.

    bonne chance

  8. #8
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Citation Envoyé par Angelik
    De la même manière j'aimerais aussi intégrer une instruction qui exclue les combinaisons contenant les chiffres '2' et '8' par le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    if ($s == 1 and 7) {
    $s = 'false';
    }
    else if ($s == 2 and 8) {
    $s = 'false';
    }
    Salut,

    concernant cette conditionnelle, il me paraît plus juste d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($s == 1 || $s == 7) {
    $s = 'false';
    }
    elseif ($s == 2 || $s == 8) {
    $s = 'false';
    }
    Tu regardes si $s vaut 1 ou 7, si oui, tu le mets à false ( ton and signifie que ton $s vaut deux valeurs en même temps, or ça me paraît pas probable )

    Clique sur si c'est le cas,
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  9. #9
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Pas seulement ça buchs. ça veut surtout dire qu'il teste si $s égale à 1 et comme 7 sera toujours à vrai il suffit que la première soit vrai pour entrer dans le if.

    D'où le fait que je dise plus haut que ça me gênais .

    Mais son test ne devrait pas être $s == 2 and $s == 8 ??

  10. #10
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Oui en effet, j'avoue ne pas avoir tout lu ( honte a moi )

    Ce qui me gêne moi, c'est de séparer les deux instructions alors qu'elles font la même chose au final, mettre $s à false, autant faire le tout dans le if, mais bon, après tout est question de principe

    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  11. #11
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    C'est vrai que si on fait directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(($s == 1 and $s == 7) or ($s == 2 and $s == 8))
    ça revient au même résultat.

    ps : je n'ai toujours pas compris ce qu'elle veut faire exactement en plus

  12. #12
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Citation Envoyé par Kerod
    C'est vrai que si on fait directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(($s == 1 and $s == 7) or ($s == 2 and $s == 8))
    ça revient au même résultat.

    ps : je n'ai toujours pas compris ce qu'elle veut faire exactement en plus
    Euh, ta conditionnelle renverra toujours false... Comment une variable peut-elle valoir 1 et 6 ou 2 et 8 en même temps?

    Plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($s == 1 or $s == 2 or $s == 7 or $s == 8)
    Non?

    Bon, on va arrêter de spéculer sur cette conditionnelle étant donné qu'on sait même pas exactement ce qu'il cherche à faire...
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

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

Discussions similaires

  1. Instruction php "si requete reussi" ?
    Par lusos dans le forum Langage
    Réponses: 12
    Dernier message: 26/04/2008, 10h50
  2. Réponses: 9
    Dernier message: 23/07/2007, 15h24
  3. [Système] Instruction PHP s'exécutant 2 fois de suite
    Par saluts92 dans le forum Langage
    Réponses: 1
    Dernier message: 12/02/2007, 21h24
  4. Double instructions conditionnelles en php ?
    Par Martyin dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2006, 16h27
  5. [PHP-JS] if et elseif
    Par sam01 dans le forum Langage
    Réponses: 10
    Dernier message: 23/12/2005, 12h45

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