DieMstar Geschrieben 13. März 2019 Geschrieben 13. März 2019 (bearbeitet) Mein Gedankengang: Zitat erstelleFluege(Datum:date, Pleatze:Integer) :Flug[] neues Array Auswahl_Fluege[] int i = 0 for (Linien_Fluege : flugObject){ if (flugObject.getFlugDatum == richtiges Datum && flugObject.getFreiePlaetze >= gewollte Anzahl Plätze) Auswahl_Fluege [ i ] = flugObject i++ Auswahl_Fluege[].sort aufsteigend } return Auswahl_Fluege[] Die Aufgabe: Bearbeitet 13. März 2019 von DieMstar Zitieren
Ulfmann Geschrieben 13. März 2019 Geschrieben 13. März 2019 (bearbeitet) Ja, fast. Schau dir mal, was du in jedem Schleifendurchlauf mit dem AuswahlArray machst. Edit: Gut, jetzt hast du es selbst korrigiert. Die Abbruchbedingung der Schleife (oder die Syntax) ist etwas seltsam, denn du benutzt dein i gar nicht und so ist nicht ersichtlich, wann die Schleife denn aufhört. Das kann man klarer ausdrücken. Die Sortierung würde ich am Schluss machen und du sagst nicht, wonach du sortierst. Bearbeitet 13. März 2019 von Ulfmann Zitieren
KeeperOfCoffee Geschrieben 13. März 2019 Geschrieben 13. März 2019 Ich wäre mal mit dem Sort() vorsichtig. Klar gibt es in jeder Sprache heutzutage. Wir durften aber in der Prüfung nur Funktionen nutzen die in der Aufgabenstellung vorgegeben waren. Pseudocode muss Sprachunabhängig sein. Dein Code setzt aber voraus, dass die Sprache eine Sortierfunktion für Arrays hat. Zitieren
Rienne Geschrieben 13. März 2019 Geschrieben 13. März 2019 vor 27 Minuten schrieb KeeperOfCoffee: Pseudocode muss Sprachunabhängig sein Pseudocode MUSS gar nix, das ist ja der Vorteil von Pseudocode. Man kann theoretisch auch alles in Java schreiben, wenn man möchte. Die Prüfer müssen nur verstehen, was du da genau machst. vor 28 Minuten schrieb KeeperOfCoffee: Ich wäre mal mit dem Sort() vorsichtig. Klar gibt es in jeder Sprache heutzutage. Wir durften aber in der Prüfung nur Funktionen nutzen die in der Aufgabenstellung vorgegeben waren. Würde ich prinzipiell auch sagen, aber, da die Aufgabe aus der Abschlussprüfung stammt, die ich selber geschrieben habe, weiß ich, dass unsere Prüfer jedenfalls .sort() zugelassen haben und es keinen Abzug gab. thereisnospace reagierte darauf 1 Zitieren
KeeperOfCoffee Geschrieben 13. März 2019 Geschrieben 13. März 2019 (bearbeitet) vor 17 Minuten schrieb Rienne: Pseudocode MUSS gar nix, das ist ja der Vorteil von Pseudocode. Pseudocode dient dazu einen Programmablauf unabhängig der zugrundelegenden Sprache/Framework zu beschreiben. Spezielle Funktionen zu nutzen würde den Sinn von Pseudocode ad absurdum führen. Heute geht dies zwar durch, ich glaube aber früher wurde dies wesentlich strenger geprüft. Edit: Und wenn, dann bitte nach dem for Sortieren und nicht im for Bearbeitet 13. März 2019 von KeeperOfCoffee Zitieren
Rienne Geschrieben 13. März 2019 Geschrieben 13. März 2019 @Ulfmann nein, natürlich sollte man schon angeben, dass es nach Preis sortiert werden soll. @KeeperOfCoffee Pseudocode ist und bleibt informell. D.h. es gibt keine Vorgaben an die man sich halten muss, ergo darf es auch keinen Abzug geben, wenn man spezielle Funktionen einer Programmiersprache nutzt, sofern der Lesende weiß, was gemeint ist. Das ist ja auch der Hauptgrund, warum jeder Prüfer empfielt solche Aufgaben in Pseudocode zu lösen und nicht als Struktogramm oder Programmablaufplan. Allerdings sollte die For-Schleife dann auch korrekt aufgerufen werden. Und soweit ich weiß ist vor einer Stunde schrieb DieMstar: for (Linien_Fluege : flugObject) in Java falsch. Es müsste umgekehrt sein: erst der Variablenname und dann der Arrayname: Zitat for (type variable : arrayname) { // code block to be executed } (Quelle: https://www.w3schools.com/java/java_for_loop.asp) thereisnospace reagierte darauf 1 Zitieren
DieMstar Geschrieben 13. März 2019 Autor Geschrieben 13. März 2019 (bearbeitet) Zitat erstelleFluege(Datum:date, Pleatze:Integer) :Flug[] neues Array Auswahl_Fluege[] int i = 0 // dient nur dazu die nächste Array ebene anzuwählen for (Object flugObject : Linien_Fluege[]){ //schleife endet wenn Array komplett durchgelaufen ist if (flugObject.getFlugDatum == richtiges Datum && flugObject.getFreiePlearte >= gewollte Anzahl Plätze) Auswahl_Fluege [ i ] = flugObject i++ } Auswahl_Fluege[].sort aufsteigend nach preis sortieren return Auswahl_Fluege[] habs nochmal korrigiert Bearbeitet 13. März 2019 von DieMstar Zitieren
DieMstar Geschrieben 13. März 2019 Autor Geschrieben 13. März 2019 könnte ich eigentlich bei Pseudo Code den int i als Zähler für das Array weglassen und einfach nur folgendes schreiben: Zitat if (flugObject.getFlugDatum == richtiges Datum && flugObject.getFreiePlearte >= gewollte Anzahl Plätze) if( Auswahl_Fluege[ ].isEmpty ){ Auswahl_Fluege[ 0 ] = flugObject }else{ Auswahl_Fluege[ ].next = flugObject } Zitieren
thereisnospace Geschrieben 13. März 2019 Geschrieben 13. März 2019 (bearbeitet) vor 24 Minuten schrieb DieMstar: könnte ich eigentlich bei Pseudo Code den int i als Zähler für das Array weglassen [...] Nein, so wird der Code tatsächlich unverständlich. Dein Ursprungspost entsprach ungefähr meiner Antwort in der Abschlussprüfung (habe nur keine foreach Schleife genutzt, sondern eine for). Zum Schluss habe ich auch einfach ein ".sort(Preis)" o.Ä. angegeben. Es gab die volle Punktzahl für die Aufgabe. Es wurde nicht erwartet einen Sortieralgorithmus wie Bubble Sort im Gedächtnis zu haben. Bearbeitet 13. März 2019 von Gottlike DieMstar reagierte darauf 1 Zitieren
arlegermi Geschrieben 14. März 2019 Geschrieben 14. März 2019 Zitat erstelleFluege(Datum:date, Pleatze:Integer) :Flug[] neues Array Auswahl_Fluege[] int i = 0 // dient nur dazu die nächste Array ebene anzuwählen for (Object flugObject : Linien_Fluege[]){ //schleife endet wenn Array komplett durchgelaufen ist if (flugObject.getFlugDatum == richtiges Datum && flugObject.getFreiePlearte >= gewollte Anzahl Plätze) Auswahl_Fluege [ i ] = flugObject i++ } Auswahl_Fluege[].sort aufsteigend nach preis sortieren return Auswahl_Fluege[] Auch wenn's Pseudocode ist, sollte man schon auf ein paar Sachen achten: Du denkst dir in der if-Bedingung auf einmal neue Variablen aus, die es nicht gibt. Du bekommst doch "Datum" und "Plaetze" als Argumente übergeben. Wieso nutzt du die nicht? Ich bin kein Prüfer, aber das würde ich dir auf jeden Fall ankreiden. Außerdem würde ich dringend dazu raten, if-Bedingungen zu klammern, auch wenn's nur Pseudocode ist. Gerade handschriftlich "verrutscht" die Einrückung von "i++" sonst u.U. mal nach links. Und wenn in der Beschreibung die Methoden mit "()" aufgerufen werden, würde ich das im Code auch so machen. Das "Object flugObject" wiederum ist in meinen Augen einfach falsch. Der Typ des Arrays ist "Flug[]" - wenn du da auf einmal Object hinschreibst, wirkt das auf mich, als hättest du nicht verstanden, was der Typ eines Arrays bedeutet. Zitieren
Whiz-zarD Geschrieben 14. März 2019 Geschrieben 14. März 2019 (bearbeitet) neues Array Auswahl_Fluege[] Genau genommen ist diese Zeile eigentlich schon falsch. Ein Array ist eine statische Datenstruktur. Also ein einzelner Block im Speicher und die Größe müsste bei der Erzeugung bekannt sein. Es gibt zwar Sprachen, die dynamisch wachsende Arrays besitzen aber in Wahrheit sind das keine Arrays, sondern dynamische Datenstrukturen, wie z.B. Listen oder Bäume oder haben eine Reallokierung der Arraygröße, indem intern ein Array mit einer bestimmten Größe erzeugt wird und wenn es zu klein wird, wird ein neues, größeres Array erzeugt und das alte Array in das neue Array kopiert. Darum finde ich es auch immer wieder ermüdend, wenn in den Abschlussarbeiten verlangt wird, ein Array zu erzeugen aber die Größe nicht bekannt ist, denn wenn ein Array zurückgegeben werden soll, müsste man erstmal die Anzahl der Flüge ermitteln, bevor man ein leeres Array erzeugen kann. Dies zeigt für mich immer eine Unkenntnis der Autoren, da sie offenbar keine Ahnung haben, was ein Array wirklich ist. Bearbeitet 14. März 2019 von Whiz-zarD Zitieren
Ulfmann Geschrieben 14. März 2019 Geschrieben 14. März 2019 Fällt das nicht komplett unter Sprachspezifität? Man muss doch im Pseudocode nur ausdrücken was man tun möchte und nicht auf syntaktische Feinheiten von bestimmten Sprachen achten. Wo hört man denn da auf? `neues` ist ja auch kein gültiges Keyword oder Operator. Wenn es die Aufgabenstellung nicht verlangt, auf die Größe des Arrays einzugehen, würde ich das auch nicht tun. Und vor allem würde ich nicht gleich jedem, der das in seiner Lösung offen lässt, unterstellen, keine Ahnung zu haben. Zitieren
Rienne Geschrieben 14. März 2019 Geschrieben 14. März 2019 Es kommt dabei glaube ich auch immer auf den Prüfungsausschuss an und die meisten sind da ja doch recht kulant. Ich meine letzten Endes kann man auch sagen, dass man nen neues Array hat, was die Größe des Ausgangsarrays hat und hat dann halt x leere Einträge. Aber ja, die Aufgabensteller machen sich da vermutlich nicht wirklich Gedanken und gehen auch nur auf die elementareren Datentypen ein, sonst hätte man vermutlich von Anfang an mit Listen gearbeitet. Zitieren
KeeperOfCoffee Geschrieben 14. März 2019 Geschrieben 14. März 2019 vor 34 Minuten schrieb Ulfmann: Und vor allem würde ich nicht gleich jedem, der das in seiner Lösung offen lässt, unterstellen, keine Ahnung zu haben. Das hat @Whiz-zarD auch in keinem einzigen Satz... Whiz-zarD reagierte darauf 1 Zitieren
Ulfmann Geschrieben 14. März 2019 Geschrieben 14. März 2019 vor 45 Minuten schrieb KeeperOfCoffee: Das hat @Whiz-zarD auch in keinem einzigen Satz... vor 1 Stunde schrieb Whiz-zarD: Dies zeigt für mich immer eine Unkenntnis der Autoren, da sie offenbar keine Ahnung haben, was ein Array wirklich ist. Wenn ich das missverstanden haben sollte, Sorry. Zitieren
Rienne Geschrieben 14. März 2019 Geschrieben 14. März 2019 @Ulfmann da bezieht sich @Whiz-zarD auf die Autoren der Prüfungsfrage, nicht auf die Prüflinge und deren Lösung. Zitieren
Ulfmann Geschrieben 14. März 2019 Geschrieben 14. März 2019 Okay, das hab ich tatsächlich anders aufgefasst, danke. Und sorry nochmal. Zitieren
Whiz-zarD Geschrieben 14. März 2019 Geschrieben 14. März 2019 vor 5 Minuten schrieb Rienne: @Ulfmann da bezieht sich @Whiz-zarD auf die Autoren der Prüfungsfrage, nicht auf die Prüflinge und deren Lösung. So sieht es aus. Schaut man sich weitere Programmieraufgaben der Abschlussarbeiten an, so wirken viele der Aufgaben sehr antiquarisch. Als ob die Autoren seit den 80ern nichts mehr mit Softwareentwicklung zu tun haben. In einer anderen Aufgabe wird die Indexierung eines Arrays als technische ID der Elemente verwendet. vor 1 Stunde schrieb Rienne: Es kommt dabei glaube ich auch immer auf den Prüfungsausschuss an und die meisten sind da ja doch recht kulant. Ich meine letzten Endes kann man auch sagen, dass man nen neues Array hat, was die Größe des Ausgangsarrays hat und hat dann halt x leere Einträge. Ja, ich denke auch, dass die Prüfungsschüsse beides durchgehen lassen. Also entweder die Erstellung eines leeren Arrays oder die Erstellung eines Array mit x leeren Einträgen aber wie ich schon sagte, eigentlich ist die Erstellung eines leeren Arrays nicht richtig. vor 2 Stunden schrieb Ulfmann: Fällt das nicht komplett unter Sprachspezifität? Man muss doch im Pseudocode nur ausdrücken was man tun möchte und nicht auf syntaktische Feinheiten von bestimmten Sprachen achten. Wo hört man denn da auf? `neues` ist ja auch kein gültiges Keyword oder Operator. Das ist der Knackpunkt: "Wo hört man denn da auf?" Die genannte Aufgabe war in diesem Forum schon mal ein Thema und z.B. mit Sprachfeatures einiger Sprachen wäre die Aufgabe ein Einzeiler. Beispiel C# public Flug[] ErstelleFluege(DateTime datum, int plaetze) return this.Linien_Fluege .Where(flug => flug.flugDatum == datum && flug.freiePlaetze == plaetze) .OrderBy(flug => flug.Preis) .ToArray(); Darum auch mein kleiner Einwand, denn die Erstellung eines leeren Arrays ist auch nur ein Sprachfeature. Die Frage ist also: "Wo werden die Grenzen gezogen?". Wenn man es nämlich Sprachunabhängig machen will, muss man entweder vorher die Anzahl der Flüge ermitteln oder das Array so groß machen, wie die Gesamtanzahl der Flüge, was im Zweifel enorm viel Speicher verbraucht oder man müsste eine Reallokierung des Arrays beschreiben. Genau das tut z.B. auch die Methode ToArray() in der LINQ-Erweiterung von C#. Zuerst wird ein Array für 4 Elemente erzeugt und dann gefüllt. Wenn es voll ist, dann ein Array für 8 Elemente. Das alte wird dort reinkopiert und die restlichen Plätze werden befüllt. Wenn es wieder voll ist, dann für 16 Elemente, dann für 32, 64, 128, ... Elemente. Zum Schluss wird die tatsächliche Menge ermittelt und dann ein Array für die exakte Anzahl der Elemente. Andere Sprachen, wie z.B. PHP nennen ihre Arrays zwar Arrays aber der erste Satz der Dokumentation verrät schon was anderes: Zitat Ein Array in PHP ist tatsächlich eine geordnete Map. Eine Map ist ein Typ, der Werte zu Schlüsseln zuordnet. Also ein leeres Array in PHP ist ein Sprachfeature, indem sie eine Map als Array verwenden. Arrays im herkömmlichen Sinne gibt es in PHP also gar nicht. Ich möchte auch nicht sagen, was richtig und was falsch ist, sondern einfach nur aufzeigen, welche Tücken diese Aufgaben eigentlich besitzen. Es ist meist von Arrays die Rede ist und die Azubis erzeugen selbstverständlich erst mal ein leeres Array, weil sie das evtl. so gewohnt sind oder es halt so aus den Aufgaben kennen aber bei genauer Betrachtung eigentlich so nicht richtig ist. Das selbe gilt auch hier für das Sort(). Es wird einfach angenommen, man kann eine Methode, namens Sort() verwenden aber darf man es überhaupt? Muss man nicht einen eigenen Sortieralgorithmus bauen? Wo fängt also die Verwendung von Sprachfeatures an und wo hört es auf? Ulfmann und KeeperOfCoffee reagierten darauf 2 Zitieren
AnotherStep Geschrieben 6. Mai 2019 Geschrieben 6. Mai 2019 Am 14.3.2019 um 13:06 schrieb Whiz-zarD: Genau das tut z.B. auch die Methode ToArray() in der LINQ-Erweiterung von C#. Zuerst wird ein Array für 4 Elemente erzeugt und dann gefüllt. Wenn es voll ist, dann ein Array für 8 Elemente. Das alte wird dort reinkopiert und die restlichen Plätze werden befüllt. Wenn es wieder voll ist, dann für 16 Elemente, dann für 32, 64, 128, ... Elemente. Zum Schluss wird die tatsächliche Menge ermittelt und dann ein Array für die exakte Anzahl der Elemente. Citation needed... Soweit ich das verstehe, benutzt LINQ intern ein IEnumerable<T>, also ist beim aufruf der ToArray() Methode die Menge der Elemente bekannt, und es wird nur ein Array mit der korrekten Größe erzeugt. Desweiteren hast du einen Typo/Flüchtigkeitsfehler: flug.freiePlaetze >= plaetze Zitieren
AnotherStep Geschrieben 6. Mai 2019 Geschrieben 6. Mai 2019 vor 32 Minuten schrieb AnotherStep: Citation needed... Soweit ich das verstehe, benutzt LINQ intern ein IEnumerable<T>, also ist beim aufruf der ToArray() Methode die Menge der Elemente bekannt, und es wird nur ein Array mit der korrekten Größe erzeugt. OK... hab selbst die Citation gefunden... Scheinbar hast du recht... https://thomaslevesque.com/2014/12/07/optimize-toarray-and-tolist-by-providing-the-number-of-elements/ Zitieren
Whiz-zarD Geschrieben 7. Mai 2019 Geschrieben 7. Mai 2019 vor 14 Stunden schrieb AnotherStep: Desweiteren hast du einen Typo/Flüchtigkeitsfehler: flug.freiePlaetze >= plaetze Stimmt. Danke für den Hinweis. vor 14 Stunden schrieb AnotherStep: OK... hab selbst die Citation gefunden... Scheinbar hast du recht... https://thomaslevesque.com/2014/12/07/optimize-toarray-and-tolist-by-providing-the-number-of-elements/ Ich hatte mir diesbezüglich auch mir vorher noch mal den Sourcecode zur Methode angeschaut. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.