Ankündigung

Einklappen
Keine Ankündigung bisher.

Die beste Kombination aus verschiedenen Parametern herausfinden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Die beste Kombination aus verschiedenen Parametern herausfinden

    Hallo Leute, vielleicht könnt ihr mir ja helfen...
    ...also ich versuche einen automatischen Rechenprozess zu erstellen, es ist ein Schulprojekt daher handel es sich um eine Art Abiturrechner.

    Man hat Beispielsweise folgende Parameter gegeben sortiert nach Fach und Semester:
    Semester (S1) S2 S3 S4
    Sport (F1) F1S1 F1S2 F1S3 F1S4
    Spanisch(F2) F2S1 F2S2 F2S3 F2S4
    EDV (F3) F3S1 F3S2 F3S3 F3S4
    Das ist jetzt nur ein Beispiel, sind natürlich viel mehr Fächer. Die dick gedruckten Zellen enthalten die
    Noten nach MSS (also 0-15).
    Jetzt ist das ganze allerdings noch abhängig von der Kombination der Leistungskurse. Bei alles Fächerkombinationen müssen am Ende 36 Semester eingebracht werden, bei manchen kann man am Ende noch zwischen 2-8 (je nach Kombi) selbst festlegen welche man mit rein bringt. Beispiel: Fächerkombi 4 kann man noch 4 Semester frei einbringen.
    Jetzt entstehen allerdings kleine Schwierigkeiten oder halt Regeln bei der Einbringung:
    1. Wenn ein Semester eingebracht wird muss automatisch auch S4 mit eingebracht werden (Bsp. Ich will F1S2 einbringen, dann muss auch F1S4 mit rein)
    2. Sport dürfen max. 3 Semester eingebracht werden
    Jetzt brauch ich brauch ich also für das Beispiel mit den 4 freien Semster alle Anzahlen an Kombinationsmöglichkeiten und von diesen dann den höchsten Wert.

    Ich hoffe ich wisst ungefähr was ich meine und wie ich das Lösen kann

  • #2
    Ich hoffe ich wisst ungefähr was ich meine
    Ehrlich gesagt, nein.

    Kommentar


    • #3
      Ich ehrlich gesagt auch nicht. Bis es konkreter wird und ich verstehe, was das mit PHP zu tun haben soll:

      MOD: Verschoben von PHP-Einsteiger
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Zitat von MOC Beitrag anzeigen
        Hallo Leute, vielleicht könnt ihr mir ja helfen...

        Ich hoffe ich wisst ungefähr was ich meine und wie ich das Lösen kann
        Ich verstehe das jetzt so, daß eine Person in den einzelnen Fächern unterschiedlich gut ist und die Bewertung in den Körper-Feldern der Tabelle stehen. Dann macht das ganze natürlich nur Sinn, wenn die Leistung zusätzlich zum "Talent" auch vom Aufwand abhängt und der Gesamtaufwand eine begrenzte Ressource ist. Sonst wäre das Problem relativ schnell gelöst. Programmieren kann man das mit so ziemlich jeder Sprache, aber da du es hier postest, gehe ich von eine Web-Anwendung aus und dann wäre selbstverständlich PHP die richtige Wahl.

        Ich denke aber, du solltest das Problem erst einmal unabhängig von einer Programmierung als Optimierungsproblem lösen. Ohne diese Vorarbeit wirst du auf jeden Fall suboptimal programmieren.

        Gib Bescheid, inwieweit du diesen Schritt (den Hauptschritt) bei der Problemlösung selbständig, selbständig/geführt ... komplett geschenkt haben willst. Mit Ausnahme des letzten Falles kann ich dir auf jeden Fall ein paar sachdienliche Hinweise geben.

        Kommentar


        • #5
          MOC Kannst du mal bitte sagen, ob es Beschränkungen bei den Ressourcen gibt oder nicht.

          Kommentar


          • #6
            Zitat von Alf2016 Beitrag anzeigen
            MOC Kannst du mal bitte sagen, ob es Beschränkungen bei den Ressourcen gibt oder nicht.
            Ich verstehe nicht so ganz was du mit ressourcen meinst, also ich versuch das modell mal ganz einfach zu erklären.
            Also erstmal ohne die Regeln, die kann ich ja mit If und Else lösen.

            Wir haben 12 Noten (À 3 Fächer mit je 4 Semester) davon sollen die Summe der besten 4 Noten ausgegeben werden

            Kommentar


            • #7
              Zitat von MOC Beitrag anzeigen

              Ich verstehe nicht so ganz was du mit ressourcen meinst, ...
              Dann wird der Aspekt bei dir auch nicht einbezogen sein und wir können das weglassen.
              Also erstmal ohne die Regeln, die kann ich ja mit If und Else lösen.
              Jaaa. Allerdings muß vorher geklärt sein, Ob du wirklich alle Kombinationen durchspielen mußt.

              Wir haben 12 Noten (À 3 Fächer mit je 4 Semester) davon sollen die Summe der besten 4 Noten ausgegeben werden
              Das hast du bisher nicht gesagt. Außerdem ist unklar, was du mit "4 freie Semester" meinst.

              Kommentar


              • #8
                Zitat von MOC Beitrag anzeigen
                Also erstmal ohne die Regeln, die kann ich ja mit If und Else lösen.
                Nicht mit if und else lösen, sondern erstmal in deutsch. Wenn dir jemand eine Notentabelle und die Regel geben würde, wie würdest du das per Hand lösen?

                Kommentar


                • #9
                  Zitat von erc Beitrag anzeigen

                  Nicht mit if und else lösen, sondern erstmal in deutsch. Wenn dir jemand eine Notentabelle und die Regel geben würde, wie würdest du das per Hand lösen?
                  Wie gesagt, erstmal fachlich lösen bzw. einen Algorithmus aufstellen (ja, genau, auf deutsch! Wichtiger Punkt!). Dann hätte ich noch eine Frage: Hat der Mensch, der dein "Tool" benutzt, schon seine Noten?

                  Wenn ich das jetzt richtig verstehe, hat der Mensch, der dein Tool benutzt, bereits diese 12 Noten und es geht darum, für die 4 Noten, die er sozusagen im Rahmen eine Studienbewerbung oder was weiß ich (?? - wäre auch nicht schlecht, wenn man da ein bisschen Kontext hätte). "einbringen" kann, "einsetzt".

                  Gäbe es diese Regeln nicht, wären das, wenn ich jetzt keinen ganz dicken Denkfehler mache, die 4 besten Noten aus den 12. Nun muß aber geprüft werden, ob diese Kombination die Regeln verletzt. Ist dies der Fall, muß die schlechteste Note von denen, die die Regeln verletzten, gestrichen werden. Sie wird durch die 5. beste ersetzt usw.

                  Das soll jetzt nicht schon die Lösung sein, sondern dient dazu, daß ich das ganz verstehe. Also bitte, falls nicht, sagen: Wo, wodurch und warum?

                  Kommentar


                  • #10

                    Wir haben 12 Noten (À 3 Fächer mit je 4 Semester) davon sollen die Summe der besten 4 Noten ausgegeben werden
                    Ich hab`s mal mit 4 Fächern gemacht, kannst du ja abändern, so wie du es brauchst, soll ja nur das Prinzip erläutern.
                    PHP-Code:
                    <?php
                    // Array aus 4 Fächern mit 4 Semester und Noten erstellen
                    $points['f1'] = array('s1'=>13,'s2'=>10,'s3'=>12,'s4'=>13);
                    $points['f2'] = array('s1'=>9,'s2'=>10,'s3'=>12,'s4'=>9);
                    $points['f3'] = array('s1'=>10,'s2'=>12,'s3'=>12,'s4'=>11);
                    $points['f4'] = array('s1'=>10,'s2'=>9,'s3'=>11,'s4'=>9);


                    foreach(
                    $points as $subject){
                        
                    $maxpoint[] = max($subject);
                    }
                    echo 
                    "Summer der besten Noten ist :" array_sum($maxpoint) . "<br><hr><br>\n";


                    // andere Variante
                    foreach($points as $fkey=>$subject){
                        
                    arsort($subject);
                        
                    reset($subject);
                        echo 
                    "Fach/Semester " $fkey key($subject) . " Erreichte Punkte: " current($subject). "<br>\n";
                        
                    $max[] = max($subject);
                    }

                    echo 
                    "Summer der besten Noten ist :" array_sum($max) . "<br>\n";

                    ?>
                    ergibt
                    Code:
                    Summer der besten Noten ist :48 
                    Fach/Semester f1s4 Erreichte Punkte: 13 Fach/Semester f2s3 Erreichte Punkte: 12 Fach/Semester f3s3 Erreichte Punkte: 12 Fach/Semester f4s3 Erreichte Punkte: 11 Summer der besten Noten ist :48
                    Die Array Funktionen solltest du dir im Handbuch nachschlagen.
                    foreach im Handbuch.

                    Kommentar


                    • #11
                      Zitat von protestix Beitrag anzeigen

                      Ich hab`s mal mit 4 Fächern gemacht, kannst du ja abändern, so wie du es brauchst, soll ja nur das Prinzip erläutern.
                      ...

                      Die Array Funktionen solltest du dir im Handbuch nachschlagen.
                      foreach im Handbuch.
                      Es ist doch stets hocherfreulich, wenn zwei Leute empfehlen, ein Problem zunächst fachlich zu operationalisieren und dann erst it-technisch einer Lösung zuzuführen und dann kommt einer daher, der die exakt umgekehrte Richtung (tätlich!) empfiehlt und damit dem TE die Möglichkeit nimmt, eine eigene Lösung zu finden...

                      P.S. ... und dann noch eine zumindest in entscheidenden Punkten unvollkommene Lösung präsentiert

                      Kommentar


                      • #12
                        Wenn er nur die Spur eines Ansatzes gehabt hätte, dann hätte er hier nicht in der Art gefragt, wie er es gemacht hat. Es bringt manchmal nichts den Weg zu erklären, wenn schon die Sprache nicht verstanden wird.

                        Ein einfach nachvollziehbares Codebeispiel halte ich daher für angebracht zumal ich die Verweise zu den Funktionen auch erbracht habe.
                        So einfache Sachen dermassen zu verkomplizieren, dass sie selbst ich nicht verstehe halte ich auch nicht für zielführend.

                        Und als Abschluss: Alles kaputtzusabbeln und Abseits des Themas sich in Details zu verheddern hat noch keinem Anfänger geholfen, der seine ersten Schritte in dieser Thematik wagt.

                        Kommentar


                        • #13
                          Zitat von Alf2016 Beitrag anzeigen
                          Wie gesagt, erstmal fachlich lösen bzw. einen Algorithmus aufstellen (ja, genau, auf deutsch! Wichtiger Punkt!). Dann hätte ich noch eine Frage: Hat der Mensch, der dein "Tool" benutzt, schon seine Noten?

                          Wenn ich das jetzt richtig verstehe, hat der Mensch, der dein Tool benutzt, bereits diese 12 Noten und es geht darum, für die 4 Noten, die er sozusagen im Rahmen eine Studienbewerbung oder was weiß ich (?? - wäre auch nicht schlecht, wenn man da ein bisschen Kontext hätte). "einbringen" kann, "einsetzt".

                          Gäbe es diese Regeln nicht, wären das, wenn ich jetzt keinen ganz dicken Denkfehler mache, die 4 besten Noten aus den 12. Nun muß aber geprüft werden, ob diese Kombination die Regeln verletzt. Ist dies der Fall, muß die schlechteste Note von denen, die die Regeln verletzten, gestrichen werden. Sie wird durch die 5. beste ersetzt usw.

                          Das soll jetzt nicht schon die Lösung sein, sondern dient dazu, daß ich das ganz verstehe. Also bitte, falls nicht, sagen: Wo, wodurch und warum?
                          Das ist einfach ein Schulprojekt, also die Noten uns so gehören keinem. An sich gibt man auf dieser Projektseite seine Noten an und die werden alle einzeln als $F1S1 usw. gespeichert, funktioniert auch alles einwandfrei bis auf diese Funktion die ich jetzt brauche...

                          Zitat von erc Beitrag anzeigen

                          Nicht mit if und else lösen, sondern erstmal in deutsch. Wenn dir jemand eine Notentabelle und die Regel geben würde, wie würdest du das per Hand lösen?
                          Hab das schon per Hand gelöst, bzw mit MS Excel, da funktioniert das auch recht einfach. Die Sache ist sowohl auf Excel als auch bei mir bei PHP kann ich das Lösen indem ich alle Kombinationen einzeln aufschreibe...Problem: Das sind mehrere Tausend Datensätze.

                          Zitat von erc Beitrag anzeigen

                          Nicht mit if und else lösen, sondern erstmal in deutsch. Wenn dir jemand eine Notentabelle und die Regel geben würde, wie würdest du das per Hand lösen?
                          Soweit hab ich das auch also hab zumindest mit max() gearbeitet

                          PHP-Code:
                          if($F6 != "m&uuml;ndlich"){

                                      
                          /*Hier sind jetzt mal für F6 alle möglichen Fächerkombinationen wenn man 4 Stück frei wählen darf*/
                                     /*Die hinter dem $FK stehende Buchstabenkombination a/b/c/d/x ist für mich zum Unterscheiden welche Semestervariation dran kommt, dabei ist x ein Platzhalter dafür, dass dieses Semester nicht mit einbezogen wird*/
                                          
                          $FKxxdx $FKF11d;
                                          
                          $FKxacx $FKF7a+$FKF11c;
                                          
                          $FKxxca $FKF11c+$FKF19a;
                                          
                          $FKxaxc $FKF7a+$FKF19c;
                                          
                          $FKxxac $FKF11a+$FKF19c;
                                          
                          $FKxbbx $FKF7b+$FKF11b;
                                          
                          $FKxbxb $FKF7b+$FKF19b;
                                          
                          $FKxxbb $FKF11b+$FKF19b;
                                          
                          $FKxbaa $FKF7b+$FKF11a+$FKF19a;
                                          
                          $FKxaba $FKF7a+$FKF11b+$FKF19a;
                                          
                          $FKxaab $FKF7a+$FKF11a+$FKF19b;
                                          
                          $FKxxpx $FKF12d;
                                          
                          $FKxaox $FKF7a+$FKF12c;
                                          
                          $FKxxoa $FKF12c+$FKF19a;
                                          
                          $FKxaxc $FKF7a+$FKF19c;
                                          
                          $FKxxmc $FKF12a+$FKF19c;
                                          
                          $FKxbnx $FKF7b+$FKF12b;
                                          
                          $FKxbxb $FKF7b+$FKF19b;
                                          
                          $FKxxnb $FKF12b+$FKF19b;
                                          
                          $FKxbma $FKF7b+$FKF12a+$FKF19a;
                                          
                          $FKxana $FKF7a+$FKF12b+$FKF19a;
                                          
                          $FKxamb $FKF7a+$FKF12a+$FKF19b;

                                         
                          /*Hier wird dann aus den oberen Variablen der höchste Wert rausgesucht*/     
                                          
                          $FKtotal max($FKxxdx$FKxacx,$FKxxca,$FKxaxc,$FKxxac,$FKxbbx,$FKxbxb,$FKxxbb ,$FKxbaa ,$FKxaba ,$FKxaab,$FKxxpx ,$FKxaox ,$FKxxoa,$FKxaxc,$FKxxmc,$FKxbnx ,$FKxbxb$FKxxnb ,$FKxbma$FKxana ,$FKxamb);

                          Kommentar


                          • #14
                            Zitat von MOC Beitrag anzeigen
                            Soweit hab ich das auch also hab zumindest mit max() gearbeitet

                            PHP-Code:
                            if($F6 != "m&uuml;ndlich"){

                            /*Hier sind jetzt mal für F6 alle möglichen Fächerkombinationen wenn man 4 Stück frei wählen darf*/
                            /*Die hinter dem $FK stehende Buchstabenkombination a/b/c/d/x ist für mich zum Unterscheiden welche Semestervariation dran kommt, dabei ist x ein Platzhalter dafür, dass dieses Semester nicht mit einbezogen wird*/
                            $FKxxdx $FKF11d;
                            $FKxacx $FKF7a+$FKF11c;
                            $FKxxca $FKF11c+$FKF19a;
                            $FKxaxc $FKF7a+$FKF19c;
                            $FKxxac $FKF11a+$FKF19c;
                            $FKxbbx $FKF7b+$FKF11b;
                            $FKxbxb $FKF7b+$FKF19b;
                            $FKxxbb $FKF11b+$FKF19b;
                            $FKxbaa $FKF7b+$FKF11a+$FKF19a;
                            $FKxaba $FKF7a+$FKF11b+$FKF19a;
                            $FKxaab $FKF7a+$FKF11a+$FKF19b;
                            $FKxxpx $FKF12d;
                            $FKxaox $FKF7a+$FKF12c;
                            $FKxxoa $FKF12c+$FKF19a;
                            $FKxaxc $FKF7a+$FKF19c;
                            $FKxxmc $FKF12a+$FKF19c;
                            $FKxbnx $FKF7b+$FKF12b;
                            $FKxbxb $FKF7b+$FKF19b;
                            $FKxxnb $FKF12b+$FKF19b;
                            $FKxbma $FKF7b+$FKF12a+$FKF19a;
                            $FKxana $FKF7a+$FKF12b+$FKF19a;
                            $FKxamb $FKF7a+$FKF12a+$FKF19b;

                            /*Hier wird dann aus den oberen Variablen der höchste Wert rausgesucht*/
                            $FKtotal max($FKxxdx$FKxacx,$FKxxca,$FKxaxc,$FKxxac,$FKxbbx,$FKxbxb,$FKxxbb ,$FKxbaa ,$FKxaba ,$FKxaab,$FKxxpx ,$FKxaox ,$FKxxoa,$FKxaxc,$FKxxmc,$FKxbnx ,$FKxbxb$FKxxnb ,$FKxbma$FKxana ,$FKxamb);

                            WTF.

                            Bau dir Datenstrukturen mit jeweiliger Zuordnung "(Fach -> Semester) -> Punkte)" auf, daraus kannst du dann algorithmisch (nicht das was du bisher gemacht hast) die entsprechenden Punkt-Kombinationen berechnen. Aus diesen lassen sich dann die gewünschten Informationen herleiten ("Beste Belegung", maximale Punkte, ...).
                            Der Ansatz von Protestix ist schon mal ein minmaler Anfang. Das erzeugen der Datenstruktur kannst du hier aber auch etwas automatisieren und vereinfachen (auch in der Ausgabe).

                            Die Oberfläche kannst du z.B. so mit sehr wenig Code generieren:
                            Code:
                            $courses = [
                                'Sport',
                                'Spanisch',
                                'EDV'
                            ];
                            $semesters = 4;
                            ?>
                            
                            <form method="post">
                            <?php
                            foreach ($courses as $course) {
                                echo $course . ': ';
                                for ($i = 0; $i < $semesters; ++$i)
                                    printf('<input type="number" name="points[%s][%d]" />', $course, $i);
                                echo '<br />';
                            }
                            ?>
                            <button type="submit">Absenden</button>
                            </form>
                            (Keine Zeilenumbrüche im PHP-Code Tag, deshalb normaler Code-Tag)

                            Der Vorteil hierbei ist, dass du nach Absenden direkt eine fertige Datenstruktur vorliegen hast:
                            Sport: 0 1 2 3
                            Wobei das Semester über die jeweilige Position/Index identifiziert werden kann.

                            Jetzt kannst du den Datensatz theoretisch in ein Ranking (Selection algorithm) überführen und somit durch Auswählen der Top 36 Semester herausfinden, welche Auswahl getroffen werden muss um die meisten Punkte zu bekommen.


                            Allerdings sehe ich den Ansatz auch eher wie erc. Erst auf dem Papier einen Lösungsweg und entsprechende Datenstrukturen aufstellen. Wenn ein Verständnis für das Vorgehen da ist, lässt es sich auch wesentlich einfacher implementieren.
                            Und das was du oben gemacht hast, ist definitiv kein Lösungsweg, das kann auch ein Grundschüler.

                            EDIT:
                            Entsprechende Nebenbedingungen (nur x mal Sport o.ä.) lassen sich dann nach dem Ranking ebenfalls durchführen.
                            "Software is like Sex, it's best if it's free." - Linus Torvalds

                            Kommentar


                            • #15
                              PHP-Code:
                              if($F6 != "m&uuml;ndlich"){} 
                              bitte tue und sowas nicht an.

                              Kommentar

                              Lädt...
                              X