Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (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:

aufgabePseudocode.jpg.5c88798158030f942030e0a8470000db.jpg

Bearbeitet von DieMstar
Geschrieben (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 von Ulfmann
Geschrieben

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.

Geschrieben
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.

Geschrieben (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 von KeeperOfCoffee
Geschrieben

@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)

 

Geschrieben (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 von DieMstar
Geschrieben

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 

}

 

Geschrieben (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 von Gottlike
Geschrieben
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.

Geschrieben (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 von Whiz-zarD
Geschrieben

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.

Geschrieben

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. :)

Geschrieben
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.

Geschrieben

 

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. :D

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?

  • 1 Monat später...
Geschrieben

 

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


 

Geschrieben
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/

Geschrieben
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. :)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...