Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

 

index.jpg

Geschrieben

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.

Geschrieben

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

 

 

 

 

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

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

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

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

Geschrieben (bearbeitet)

Vielen Dank für die wertvollen Hinweise, könnt ihr bitte noch eine Aufgabe beurteilen :)

2017-05-08 11_46_55-file.jpeg.png

 

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 von dust
Geschrieben (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 von arlegermi
Geschrieben

 

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   

 

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

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

 

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