dust Geschrieben 7. Mai 2017 Geschrieben 7. Mai 2017 Hallo Leute, ich wollte euch fragen ob meine Lösung richtig ist? mfg Alex function erstelleFluege(Datum : date, Plaetze : Integer): Flug[] Auswahl_Fluege[] = null // Linien_Fluege[] enthält die Flug-Objekte alle Flüge foreach Linien_Fluege as Linien_Flueg if Linien_Flueg.getFlugDatum() == Datum AND Linien_Flueg.getFreiePlaetze() > Plaetze then Auswahl_Fluege[Linien_Flueg.getPreis()] = Linien_Flueg end foreach sort Auswahl_Fluege[] 'pris' // Array nach Preis aufsteigend sortieren return Auswahl_Fluege[] end function Zitieren
Whiz-zarD Geschrieben 7. Mai 2017 Geschrieben 7. Mai 2017 Diese Aufgaben sind einfach zum Heulen ... Wie will man ein Array erzeugen, wenn man nicht mal weiß, wie viele Elemente letztendlich das Array haben muss? Eigentlich müsste man eine verkettete Liste erzeugen, welches dann später in ein Array umgewandelt wird... Die Problematik sieht man schon bei deinem Code: Auswahl_Fluege[] = null Du setzt das Ergebnis-Array auf null und dementsprechend gibt es eine NullReferenceException, wenn du darauf zugreifen willst. Du müsstest das Array initialisieren aber mit wie vielen Elementen? Das wissen wir gar nicht, da wir die Elemente noch ermitteln müssen. Das klassische Henne-Ei-Problem... Dein Code mag vielleicht in einigen Sprachen, wie z.B. PHP funktionieren, weil Arrays dort im Grunde keine Arrays sind, sondern Hashtabellen. Es bleibt aber weiterhin das Problem, dass Auswahl_Fluege Null ist. Wenn der Code für PHP geeignet sein soll, dann müsstest du: Auswahl_Fluege = Array(); schreiben. Ich könnte noch mehr über die Aufgabe meckern aber ich lasse es mal hierbei. Ansonsten würde ich deine Lösung schon als richtig ansehen. Das einzige, was ich nicht weiß, ist, da die Rede von einer Sortierung ist und ich nicht weiß, ob nicht vielleicht ein Pseudocode für ein Sortieralgorithmus verlangt ist aber bei der Anzahl der massiven Fehlgriffen in der Aufgabenstellung gehe ich mal nicht davon aus. Zitieren
pcpeasant Geschrieben 7. Mai 2017 Geschrieben 7. Mai 2017 Wäre es nicht einfacher das ganze nur als PAP oder NS zu machen? Pseudocode wäre nur eine erlaubte Variante. Ich weiß nicht, ob die PAP Variante so spezifisch sein muss, dass die Array-Größe vorweg angegeben werden muss. Wie ihr schon selbst erwähnt, hängt die Möglichkeit einer sauberen Implementierung stark von der verwendeten Sprache ab und die sollte doch bei Pseudocode möglichst keine limitierende Rolle spielen. Gesendet von meinem SM-N910F mit Tapatalk Zitieren
Rienne Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 (bearbeitet) vor 6 Stunden schrieb V1RTU4L: Wäre es nicht einfacher das ganze nur als PAP oder NS zu machen? Jein. NS und PAP haben feste Richtlinien, wie diese aufgebaut sein müssen. Pseudocode ist frei - d.h. du kannst ihn schreiben wie du willst, Hauptsache dein Gegenüber, in diesem Fall die Prüfer, verstehen, was du damit ausdrücken willst. Außerdem ist ein NS kaum erweiterbar, wenn dir einfällt, dass du an einer Stelle etwas vergessen hast. Gerade in der IHK Prüfung ist die Zeit doch sehr begrenzt um solche Algorithmen zu entwickeln und dann auch noch korrekt in ein "Bildchen" zu packen. Im Prinzip kommt es vor allem darauf an, womit sich der Prüfling am Sichersten fühlt, aber es gibt sehr viele Prüfer, die immer wieder zu Pseudocode raten. vor 10 Stunden schrieb Whiz-zarD: Dein Code mag vielleicht in einigen Sprachen, wie z.B. PHP funktionieren, weil Arrays dort im Grunde keine Arrays sind, sondern Hashtabellen. Es bleibt aber weiterhin das Problem, dass Auswahl_Fluege Null ist Das Problem kann man aber im Pseudocode einfach umgehen indem man die Zeile z.B. so schreibt: Erstelle leeres Array Auswahl_Fluege[]; (Ob man dort eine Größe angeben muss oder wie groß dieses sein sollte, ist dann erst ein sprachenspezifisches Problem bei der Implementierung) Oder man setzt die Größe gleich der Länge des Arrays Linien_Fluege[], da man es ja auf dessen Grundlage erstellt und definitiv maximal die gleiche Größe erreichen kann. vor 10 Stunden schrieb Whiz-zarD: da die Rede von einer Sortierung ist und ich nicht weiß, ob nicht vielleicht ein Pseudocode für ein Sortieralgorithmus verlangt ist aber bei der Anzahl der massiven Fehlgriffen in der Aufgabenstellung gehe ich mal nicht davon aus. Der Sortieralgorithmus muss mit rein! Es steht in der Aufgabenstellung, dass sortiert werden soll, also sollte es auch in der Lösung stehen. Es ist ja auch vom TO berücksichtigt...ob der Prüfungsausschuss allerdings einen Methodenaufruf dafür zulässt, ist eine andere Frage. Bearbeitet 8. Mai 2017 von Rienne Zitieren
Whiz-zarD Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 vor 16 Minuten schrieb Rienne: Das Problem kann man aber im Pseudocode einfach umgehen indem man die Zeile z.B. so schreibt: Erstelle leeres Array Auswahl_Fluege[]; (Ob man dort eine Größe angeben muss oder wie groß dieses sein sollte, ist dann erst ein sprachenspezifisches Problem bei der Implementierung) Jaein. Wenn man es genau betrachtet, ist dies auch falsch. Ein Array ist eigentlich ein zusammenhängender Block im Speicher. Man muss also schon im Vorwege wissen, wie groß dieser Block werden soll. Ein leeres Array wäre ein Array in der Größe von 0 Bytes. Du könntest dort also keine Daten speichern. Es gibt zwar schwachtypisierte Sprachen, die sowas kennen, wie leere Arrays, die dynamisch befüllt werden können, wie z.B. PHP aber dies sind genaugenommen keine Arrays sondern andere Datenstrukturen, wie z.B. Hashtabellen (im Falle von PHP) oder verkettete Listen. Also auch dein Pseudocode wäre von der Sprache abhängig. Unter C# oder Java könnte man dein Pseudocode nicht implementieren. Wenn man die Aufgabe genau betrachtet, ist das eigentlich auch nur eine Filterung mit einer anschließenden Sortierung. Ein sprachunabhängiger Pseudocode müsste also weg von der imperativen und hin zur funktionalen Vorgehensweise: function erstelleFluege(Datum : date, Plaetze : Integer): Flug[] Ergebnis = Filter Linien_Fluege Kriterium: getFlugDatum() == Datum UND getSitzplaetze() > Plaetze Sortiere Ergebnis nach getFlugDatum() return Ergebnis Wie man dann nun den Filter implementiert, ist dann den Entwickler überlassen. Mit C# und Linq wäre der gesamte Algorithmus sehr simpel: public Flug[] ErstelleFluege(DateTime datum, int platze) { return this.LinienFluege .Where(flug => flug.FlugDatum == datum && flug.Sitzplaetze > plaetze) .OrderBy(flug => flug.FlugDatum) .ToArray(); } Ich brauche also keine Arrays definieren oder sonst was. Das übernimmt das Framework für mich. vor 53 Minuten schrieb Rienne: Der Sortieralgorithmus muss mit rein! Es steht in der Aufgabenstellung, dass sortiert werden soll, also sollte es auch in der Lösung stehen. Es ist ja auch vom TO berücksichtigt...ob der Prüfungsausschuss allerdings einen Methodenaufruf dafür zulässt, ist eine andere Frage. Das er rein muss, ist mir schon klar. Mir ist aber nicht klar, ob der Prüfungsausschuss es akzeptiert, den Sortieralgorithmus als Blackbox zu betrachten, oder ob dieser als Pseudocode mit abgebildet werden muss. Zitieren
Rienne Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 (bearbeitet) vor 13 Minuten schrieb Whiz-zarD: Es gibt zwar schwachtypisierte Sprachen, die sowas kennen, wie leere Arrays, die dynamisch befüllt werden können, wie z.B. PHP aber dies sind genaugenommen keine Arrays sondern andere Datenstrukturen, wie z.B. Hashtabellen (im Falle von PHP) oder verkettete Listen. Also auch dein Pseudocode wäre von der Sprache abhängig. Unter C# oder Java könnte man dein Pseudocode nicht implementieren. Du gehst an das Thema viel zu komplex. Immerhin reden wir hier erstens von der FI-Abschlussprüfung (jedem Prüfer ist bewusst, dass die Aufgabenstellungen der IHK unschön sind und auch, dass das Zeitfenster sehr bemessen ist) und zweitens sind das Ansprüche, die nicht erfüllt werden müssen. In einem NS-Diagramm wird auch keine Definition und Initalisierung von Variablen verlangt. Keiner sagt, dass der Pseudocode stark oder schwach typisiert sein muss. vor 13 Minuten schrieb Whiz-zarD: Ein Array ist eigentlich ein zusammenhängender Block im Speicher. Man muss also schon im Vorwege wissen, wie groß dieser Block werden soll. Und wie ich darauffolgend erwähnt habe, ist die maximale Größe des Arrays ja bekannt. vor 13 Minuten schrieb Whiz-zarD: Ich brauche also keine Arrays definieren oder sonst was. Das übernimmt das Framework für mich. Du vielleicht nicht, die Aufgabenstellung der IHK verlangt dies aber. Anderes Beispiel dazu aus der Abschlussprüfung, die der TO hier zur Fragestellung genutzt hat (wenn auch GA2): Man soll ein Use-Case-Erstellen, bei dem der Nutzer Daten abrufen kann. Dazu (wortlaut der IHK) wird der Anwendungsfall "Abrufen der Informationen" um einen Anwendungsfall "Log-In" erweitert. Sprich: Die IHK wollte ein <<extends>> an dieser Stelle inkl. Verbindung zum Nutzer auf dieses Log-In (im Übrigen ganz ohne Extension Point). Im Normalfall wäre so ein Log-In allerdings ein <<include>> auf den Abruf und hätte zum User gar keine direkte Verbindung. vor 13 Minuten schrieb Whiz-zarD: Das er rein muss, ist mir schon klar. Mir ist aber nicht klar, ob der Prüfungsausschuss es akzeptiert, den Sortieralgorithmus als Blackbox zu betrachten, oder ob dieser als Pseudocode mit abgebildet werden muss Meine Worte! Bearbeitet 8. Mai 2017 von Rienne Zitieren
Whiz-zarD Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 vor 8 Minuten schrieb Rienne: Du gehst an das Thema viel zu komplex. Immerhin reden wir hier erstens von der FI-Abschlussprüfung (jedem Prüfer ist bewusst, dass die Aufgabenstellungen der IHK unschön sind und auch, dass das Zeitfenster sehr bemessen ist) und zweitens sind das Ansprüche, die nicht erfüllt werden müssen. In einem NS-Diagramm wird auch keine Definition und Initalisierung von Variablen verlangt. Keiner sagt, dass der Pseudocode stark oder schwach typisiert sein muss. Richtig. Es ist eine Abschlussprüfung. Da kann man eigentlich schon erwarten, dass man nach einer dreijährigen Ausbildung weiß, was genau ein Array ist und was nicht. Man muss sich doch auch mal im Klaren machen, was denn der Sinn von Pseudocode oder NS-Diagrammen ist. Es soll doch den Algorithmus darstellen, der dann von oben nach unten in eine Sprache geschrieben werden kann. Wenn ich aber gleich als erstes das Ergebnisarray deklariere, dann kann ich den Pseudcode oder das NS-Diagramm in vielen Sprachen einfach nicht umsetzen. Das Diagramm funktioniert dann vielleicht in PHP aber für C, C++, Java oder C# passt es nicht. Also ist der Pseudocode/das NS-Diagramm schon auf die jeweilige Zielsprache gemünzt und lässt sich nicht auf eine andere Sprache 1:1 übertragen. Man muss also schon die Eigenheiten der verwendeten Sprache kennen aber genau das sollte doch der Pseudocode oder das NS-Diagramm verhindern und das sind Dinge, die mich ein bisschen stören. Mag sein, dass der Prüfungsausschuss es nicht ganz so genau nimmt, denn man will die Azubis ja nicht durchfallen lassen aber ich finde das doch ein bisschen unschön. Zitieren
dust Geschrieben 8. Mai 2017 Autor Geschrieben 8. Mai 2017 (bearbeitet) würdest du mir nicht die volle Punktzahl geben? Bearbeitet 8. Mai 2017 von dust Zitieren
Rienne Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 vor 4 Minuten schrieb Whiz-zarD: Richtig. Es ist eine Abschlussprüfung. Da kann man eigentlich schon erwarten, dass man nach einer dreijährigen Ausbildung weiß, was genau ein Array ist und was nicht. Dass wird durch die Aufgabenstellung aber gar nicht in Frage gestellt. Nur wird hier nunmal ein Array gewünscht. Der Prüfer wird dir vermutlich aber keinen Punktabzug geben, wenn du im Pseudocode stattdessen z.B. eine ArrayList (ist aber auch wieder sprachspezifisch - was du aber im Pseudocode darfst) benutzt. vor 6 Minuten schrieb Whiz-zarD: Das Diagramm funktioniert dann vielleicht in PHP aber für C, C++, Java oder C# passt es nicht. Das muss es aber auch nicht! Noch einmal: Du sagst, dass ein Array erstellt werden soll. Das reicht! Ansonsten hätte die IHK etwas angeben müssen in Form von "..., das 400 Datensätze speichern kann,..." Wenn du so kleinlich sein willst, kann man ja erst einmal eine Schleife über das übergebene Array machen und zählen, wie viele Datensätze der Bedingung genügen und anhand dessen dann das Array erzeugen. Ob das so performant ist, ist eine andere Frage... Es ist ein Entwurf. Zur tatsächlichen Codeerstellung müssen sowieso noch andere "Dokumente" hinzugezogen werden - vielleicht steht ja in einem Entwicklungskonzept die genaue Größe der zu nutzenden Variablen. Weißt du es? Nein! Weil es hier nur um einen Ausschnitt eines solchen Szenarios geht und auch in einer sehr primitiven Form (Zur Erinnerung: GA1: 4 von 5 Handlungsschritten in 90 Minuten). Das einzige, was man dem TO bei seiner Lösung ankreiden kann im Bezug auf das Array ist, dass er es als "null" definiert hat. Dadurch existiert es für den folgenden Code nicht. Zitieren
thereisnospace Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 (bearbeitet) Hey dust, ich habe die Aufgabe ähnlich in meiner Abschlussprüfung gelöst und volle Punktzahl dafür bekommen. Ich denke die Antwort hilft dir hier mit am Meisten Habe übrigens tatsächlich eine ArrayList genommen, weil ich den Code in Java geschrieben habe. Bearbeitet 8. Mai 2017 von Gottlike dust reagierte darauf 1 Zitieren
Rienne Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 vor 4 Minuten schrieb dust: würdest du mir nicht die volle Punktzahl geben? Also ich würde es nicht! Aber auch nicht allzuviel abziehen. Was aber nicht daran liegt, dass du Pseudocode statt einem Struktogramm oder PAP benutzt hast, sondern, wie schon erwähnt, du das Array mit "null" initiert hast und beim Sortieren auf eine Blackbox-Methode (wie @Whiz-zarD es so schön genannt hat) zugreift. Zitieren
dust Geschrieben 8. Mai 2017 Autor Geschrieben 8. Mai 2017 (bearbeitet) Vielen Dank für die wertvollen Hinweise, könnt ihr bitte noch eine Aufgabe beurteilen Zitat function GetSumCurrentOrder(Wert: Integer) Summe:Integer Summe = 0 Rabat = 10 Versandkosten = 0 switch(Wert): case < 25 : Versandkosten = 5 case > 150 : Wert = Wert-(Wert*Rabat/100) default: Versandkosten = 0 Summe = Wert + Versandkosten return Summe end function Bearbeitet 8. Mai 2017 von dust Zitieren
arlegermi Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 (bearbeitet) vor 14 Minuten schrieb dust: case < 25 : Versandkosten = 5 Wenn man penibel ist, gibt's dafür Punktabzug. "Bis 25,00 EUR" interpretiere ich so, dass auch bei 25,00€ die Versandkosten noch 5€ betragen. vor 14 Minuten schrieb dust: function GetSumCurrentOrder(Wert: Integer) Summe:Integer Ich sehe nirgendwo in der Aufgabe, dass der Wert ein Integer sein soll. Viel mehr steht da recht eindeutig, dass es sich (wahrscheinlich) nicht um einen Integer-Wert handelt. Gerade auch die Rabatt-Rechnung deutet sehr auf eine Fließkomma-Zahl hin (genauer Datentyp ist hier ja egal). Ich würde solche Sachen bei Pseudo-Code einfach weglassen, damit kann man sich eigentlich nur selber ein Bein stellen. Bearbeitet 8. Mai 2017 von arlegermi Zitieren
Whiz-zarD Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 vor 3 Minuten schrieb arlegermi: Ich sehe nirgendwo in der Aufgabe, dass der Wert ein Integer sein soll. Viel mehr steht da recht eindeutig, dass es sich (wahrscheinlich) nicht um einen Integer-Wert handelt. Gerade auch die Rabatt-Rechnung deutet sehr auf eine Fließkomma-Zahl hin (genauer Datentyp ist hier ja egal). Eigentlich ist der genaue Datentyp hier nicht egal, da wir es mit Geldbeträgen zu tun haben und die eine besondere Vorsicht benötigen. Theoretisch wäre ein Integer sogar besser. Genau genommen ist die Aufgabe sehr lückenhaft. Die Methode heißt GetSumCurrentOrder(). Der Name suggeriert also, dass die Methode überhaupt keinen Eingangsparameter hat, sondern dass die Klasse schon die Bestellung im "Bauch" hat. Also müsste man erst mal die Gesamtsumme ausrechnen. Dann die Versandkosten und dann den Rabatt. function GetSumCurrentOrder(Wert: Integer) Summe:Integer summe = GetSumme() return summe + GetVersandkosten(summe) - GetRabatt(summe) end function Zitieren
arlegermi Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 (bearbeitet) vor 43 Minuten schrieb Whiz-zarD: Eigentlich ist der genaue Datentyp hier nicht egal, da wir es mit Geldbeträgen zu tun haben und die eine besondere Vorsicht benötigen. Theoretisch wäre ein Integer sogar besser. Für eine Pseudocode-Aufgabe halte ich den Datentypen tatsächlich für irrelevant. Ob ich da jetzt double, float, decimal oder int schreibe, ist für den Algorithmus völlig wumpe. Deshalb lasse ich solche Sachen in Pseudocode auch einfach weg. Wenn ich allerdings int als Datentyp nehme, darf ich nicht gegen (in diesem Fall) 25 vergleichen, sondern (mindestens) gegen 2500. In der Praxis könnte man sich tatsächlich darüber unterhalten, ob man Geldbeträge in Integer ausdrücken möchte (halte ich generell für nicht die beste Lösung; es gibt bessere Datentypen dafür (bspw. decimal in .Net)). Bearbeitet 8. Mai 2017 von arlegermi Zitieren
RipperFox Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 Zur Ersten Aufgabe: Linien_Flueg.getFreiePlaetze() > Plaetze Warum muss die Anzahl der freien Plätz größer sein als die Zahl der nötigen Plätze? Das hat jeder so einfach kopiert.. Dabei gäbe es doch einen passenderen Operator, oder? *wink* >=) Zweite Aufgabe: Auch bei bis inkl. 25€ wäre der Operator so zu wählen, dass er eben die 25€ mit einschließt. Wie Whiz-zarD schon schrieb: Geld oder sonstige "wichtige" Zahlen als Fließkommazahl abzulegen kann ungünstig sein, denn diese sind eigentlich nur Näherungen - mit so einigen Eigenheiten, die es zu beachten gilt.. Siehe z.B. dieses schöne Computerphile Video: oder schlicht hier auf WP: https://de.wikipedia.org/wiki/Gleitkommazahl Man kann sich bei Pseudocode natürlich nettweise auch Datentypen ausdenken - "money" oder "Geld" versteht jeder richtig, oder? 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.