michl: komplexe if anweisung

Hallo,

ich stehe da vor ein Problem und komme nicht weiter.

Ich möchte mir ausrechenen lassen welcher E-Motor am besten geeignet ist.
Dazu habe ich 2 Werte und 5 Motoren.

Motor 1= 50PS und max 400 Umdrehungen
Motor 2= 100PS und max 660 Umdrehungen
Motor 3= 150PS und max 660 Umdrehungen
Motor 4= 200PS und max 660 Umdrehungen
Motor 5= 250PS und max 660 Umdrehungen

Die 2 Werte lasse ich mir von einem Script berechenen. $rest (PS) und $rest1 (Undrehungen).  Ich setzte jetzt einfach mal einen wirkürlichen wert.

$rest = 140;
$rest1 = 560;

So, Nun habe ich für rest eine Vorgabe

$a = 50;
$b = 100;
$c = 150;
$d = 200;
$e = 250;

$a1 = 400;
$b1 = 660;
$c1 = 660;
$d1 = 660;
$e1 = 660;

so, nun soll das Script sich den besten Motor aussuchen und immer die nächst beste Kategorie wählen.

Also rest 140 und rest1 560

rest liegt zwischen b und c also nehmen wir den nächst höheren also c. dann soll eine Ausgabe erfolgen mit der Meldung Motor 3 ist am besten geeignet.

Wie macht man das am besten?

  1. Grüße,
    über eine switch() abfrage.
    brauchst du ausfürhlcihere anweisung oder hast du soviel willenskraft "php switch() tutorial" zu googlen ?

    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    http://www.sexgott-or-not.com/?test=428054
    1. Hello,

      über eine switch() abfrage.
      brauchst du ausfürhlcihere anweisung oder hast du soviel willenskraft "php switch() tutorial" zu googlen ?

      Warum so unhöflich?

      Du hättest, was von netten Stammpostern eigentlich erwartet wird, zumindest einen Link setzen können
      http://de3.php.net/manual/en/control-structures.switch.php

      Ein harzliches Glückauf

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hallo Tom,

        eine Antwort um 6:05?

        Bist Du einfach nur ein Frühaufsteher oder Nieschläfer?

        Am Ende wohnst Du gar hier?

        off:PP

        1. Hello,

          Am Ende wohnst Du gar hier?

          Ich wohne direkt im Server. Da habe ich es nicht so weit :-)

          Ein harzliches Glückauf

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Huhu,

            Ich wohne direkt im Server. Da habe ich es nicht so weit :-)

            btw: Hat irgendwer ein Trägermedium, dass so rein zufällig Tron beheimatet?

            Gruß aus Berlin!
            eddi

            --
            Die Welt ist Dein Spiegel und sagt Dir wie schön Du bist - in Berlin steht ein "Man, bist Du kaputt." dahinter.
  2. $rest = 140;

    $a = 50;
    $b = 100;
    $c = 150;
    $d = 200;
    $e = 250;

    Wie macht man das am besten?

    vermutlich suchst du eine switch-anweisung - die ist für dein vorhaben besser geeignet als eine eine reihe ifs

    switch(true) {
    case $rest <= $a:
      $wert = $a;
      break;
    case $rest <= $b:
      $wert = $b;
      break;
    case $rest <= $c:
      $wert = $c;
      break;
    case $rest <= $d:
      $wert = $d;
      break;
    default
      $wert = $e;
    }

    obriges beispiel ist nicht getestet, sollte aber die erste hälfte deines wunsches erfüllen - das entspricht mit breaks einer if/else-if/else-verzweigung - wenn man die breaks (teilweise) weglässt lassen sich auch zb aufeinanderfolgende einzelne ifs mit weniger code realisieren

    1. Grüße,
      ohne break; s ;| ?
      MFG
      bleicher

      --
      __________________________-
      Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
      http://www.sexgott-or-not.com/?test=428054
  3. Hi michl!

    Wie macht man das am besten?

    Man kann das neben einer switch Anweisung auch mit einer while-Schleife machen.

    // Alle PS-Werte  
    $ps = array(50, 100, 150, 200, 250);  
    // Alle UPM-Werte  
    $umdrehungen = array(400, 660, 660, 660, 660);  
      
    // Berechnete Werte für PS und Umdrehungen  
    $rest = 154;  
    $rest1 = 534;  
      
    // Berechnung der oberen Grenzen  
    $i = 0;  
    while($rest > $ps[$i])  
      $i++;  
    $rest = $ps[$i];  
      
    $i = 0;  
    while($rest1 > $umdrehungen[$i])  
      $i++;  
    $rest1 = $umdrehungen[$i];
    

    Der Vorteil ist die Möglichkeit der einfachen Erweiterung. Möchtest du die PS- oder UPM-Werte ändern, brauchst du nur das entsprechende Array korrigieren.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hi michl!

      Wie macht man das am besten?
      Man kann das neben einer switch Anweisung auch mit einer while-Schleife machen.

      // Alle PS-Werte

      $ps = array(50, 100, 150, 200, 250);
      // Alle UPM-Werte
      $umdrehungen = array(400, 660, 660, 660, 660);

      // Berechnete Werte für PS und Umdrehungen
      $rest = 154;
      $rest1 = 534;

      // Berechnung der oberen Grenzen
      $i = 0;
      while($rest > $ps[$i])
        $i++;
      $rest = $ps[$i];

      $i = 0;
      while($rest1 > $umdrehungen[$i])
        $i++;
      $rest1 = $umdrehungen[$i];

      
      >   
      > Der Vorteil ist die Möglichkeit der einfachen Erweiterung. Möchtest du die PS- oder UPM-Werte ändern, brauchst du nur das entsprechende Array korrigieren.  
      >   
      > MfG H☼psel  
        
        
      Soweit so gut...  
        
      Aber ganz verstehe ich das noch nicht. Wie komme ich von der Schleife auf die Motoren? Als Ausgabe Motor 1 ist am besten geeignet.
      
      1. Hi michl!

        Aber ganz verstehe ich das noch nicht. Wie komme ich von der Schleife auf die Motoren?

        Das kommt darauf an, wovon du das abhängig machst.
        1. Möglichkeit: $rest > $ps[$i] und $rest1 > $umdrehungen[$i]
        2. Möglichkeit: $rest > $ps[$i]
        3. Möglichkeit: $rest1 > $umdrehungen[$i]

        Für die erste Möglichkeit (ich nehme mal an, das ist es, was du möchtest) muss der Code noch verändert werden:

        // Alle PS-Werte  
        $ps = array(50, 100, 150, 200, 250);  
        // Alle UPM-Werte  
        $umdrehungen = array(400, 660, 660, 660, 660);  
          
        // Berechnete Werte für PS und Umdrehungen  
        $rest = 154;  
        $rest1 = 534;  
          
        // Berechnung der oberen Grenzen  
        $i = 0;  
        while(($rest > $ps[$i]) OR ($rest1 > $umdrehungen[$i]))  
          $i++;  
        $rest = $ps[$i];  
        $rest1 = $umdrehungen[$i];  
        // $i (angefangen bei 0) enthält jetzt die Position des Motors, der gebraucht wird  
          
        echo 'Motor '.($i+1).' ist am besten geeignet. ('.$rest.' PS und '.$rest1.' Umdrehungen)';  
        // Ausgabe: Motor 4 ist am besten geeignet. (200 PS und 660 Umdrehungen)
        

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Hallo,

          danke, jetzt geht es. Eine Frage noch. Wie setzte ich eine Meldung rein, wenn die Leistung zuviel ist, dass es keinen passenden Motor gibt?

          1. Hi michl!

            Wie setzte ich eine Meldung rein, wenn die Leistung zuviel ist, dass es keinen passenden Motor gibt?

            if ($i > count($ps)) {  
              // Kein Motor verfügbar  
            }
            

            MfG H☼psel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
            Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)