Anzeige

Hilfe für Schulprojekt


#1
Hallo :)
ich komme gleich zum Thema ich habe Informatikleistungskurs in der Schule und brauche nun ein Projekt für eine Klausurersatzleistung. Ich finde einfach keine Ideen für die vorgegebenen Bedingungen..
Vielleicht kann mir hier ja einer helfen. :D

Hier sind die Anforderungen:
- Es müssen mindestens zwei verschiedene komplexe Datenstrukturen (Array != Datenstruktur) zur Speicherung von Daten verwendet werden. Die Datenstrukturen sollten dabei den Anforderungen entsprechend gewählt werden.
- Das Programm sollte eine grafische Benutzeroberfläche bieten. Diese sollte möglichst einfach gestaltet sein und den Benutzer alle Ein- und Ausgaben ermöglichen.

Was die Möglichkeiten natürlich eingrenzt ist die Tatsache, dass wir an komplexen Datenstrukturen im Unterricht bisher nur Lineare Liste, Schlange und Stack hatten. :/
Ich hoffe es findet sich dennoch jemand mit einer Idee und sonst wünsch ich euch allen noch einen schönen Tag :)
Cookie | Tabs
 

cwriter

Erfahrenes Mitglied
#4
ich komme gleich zum Thema ich habe Informatikleistungskurs in der Schule und brauche nun ein Projekt für eine Klausurersatzleistung.
Wie viel Zeit willst du denn investieren?

Es müssen mindestens zwei verschiedene komplexe Datenstrukturen (Array != Datenstruktur) zur Speicherung von Daten verwendet werden. Die Datenstrukturen sollten dabei den Anforderungen entsprechend gewählt werden.
Ein Array ist sehr wohl eine Datenstruktur (aber nicht wirklich komplex :) ). Ein Stack ist allerdings schon eher einfacher als ein Array.
Das Programm sollte eine grafische Benutzeroberfläche bieten. Diese sollte möglichst einfach gestaltet sein und den Benutzer alle Ein- und Ausgaben ermöglichen.
Also doch eher viel Zeit?

danke ich werd mal reinschauen :)
eine Idee wie man eine Schlange oder eine lineare Liste in den upn rechner integrieren kann? :D
Mh. Bei Rechnern sind Bäume eigentlich besser geeignet als lineare Listen.
Mit Bäumen könntest du aber auch Kurvendiskussionen machen.

Gruss
cwriter
 
#5
Wie viel Zeit willst du denn investieren?
also viel mehr zeit als ne woche hab ich nich mehr hehe.. .-.


Ein Array ist sehr wohl eine Datenstruktur (aber nicht wirklich komplex :) ). Ein Stack ist allerdings schon eher einfacher als ein Array.
unser lehrer meinte damit, dass das array in diesem falle nicht als komplexe datenstruktur gilt und ich somit zwei brauche ohne array.

Hättest du sonst eine andere idee? :D bin bei sowas echt unkreativ...
 

ComFreek

Mod | @comfreek
Moderator
#6
Mit Bäumen könntest du aber auch Kurvendiskussionen machen.
Da könntest du zum Beispiel schön einfach Ableitungen errechnen. Sagt dir AST etwas?
Aber das zu realisieren wird wohl länger dauern, weil du dann auf der Eingabeseite auch einen Parser benötigst/einbinden musst. Zumindest Mitte 2014 konnte ich für mich keine zufriedenstellende fertige Java-Bibliothek finden, siehe meinen Post hier: Java library to transform a math formula into an AST. Damals habe ich dann JavaScript-Code in Java ausführen lassen, da es dank Math.js eine tolle JavaScript-Bibliothek für den Anwendungszweck gab :)

Wie wäre es mit einer Save/Restore Funktion im Taschenrechner, sodass du Zwischenergebnisse in Variablen abspeichern kannst und diese per Klick auch wieder laden kannst?
Der Einfachheit halber kannst du das Laden darauf beschränken, die gespeicherte Zahl einfach als Benutzereingabe zu simulieren.
Den Variablennamen kann der Nutzer per Eingabefeld eingeben, intern hast du dann die Zuordnung Name (String) -> gespeicherter Wert (int/double). Nach welcher Datenstruktur klingt das? ;)
 

cwriter

Erfahrenes Mitglied
#7
Aber das zu realisieren wird wohl länger dauern, weil du dann auf der Eingabeseite auch einen Parser benötigst/einbinden musst.
Ja, eine Woche ist sehr kurz für sowas...

Wie wäre es mit einer Save/Restore Funktion im Taschenrechner, sodass du Zwischenergebnisse in Variablen abspeichern kannst und diese per Klick auch wieder laden kannst?
Normale "M"-Funktionalität wäre aber allerhöchstens ein Stack mit peek(), eher nur ein einfacher 1-Wert-Speicher.

Der Einfachheit halber kannst du das Laden darauf beschränken, die gespeicherte Zahl einfach als Benutzereingabe zu simulieren.
Wird doch auch von Taschenrechnern so gemacht? :eek:

Den Variablennamen kann der Nutzer per Eingabefeld eingeben, intern hast du dann die Zuordnung Name (String) -> gespeicherter Wert (int/double). Nach welcher Datenstruktur klingt das? ;)
Ehrlich gesagt (zumindest für mich): Sicher nicht nach Liste, die in O(n) sucht. Eher Baum (O(log(n)) oder Array (O(log(n))), was aber nicht erlaubt ist...

Gruss
cwriter
 

cwriter

Erfahrenes Mitglied
#9
Oje langsam hab ich das Gefühl, ich bin zu dumm dafür D:
Wofür?
Gewisse Datenstrukturen sind für gewisse Applikationen besser als andere.
Falls du die Landau-Notation nicht verstehst:

Man unterscheidet Algorithmen nach Güte.
Ich mache es mal am Beispiel des Arrays:
Sagen wir, du hast den Array int[] arr.
Wenn du eine Position i darin füllen willst, dann schreibst du arr[i] = x;
Nun ist die Frage, wie lange ein Computer dafür braucht.
Ein Array ist schlicht ein Speicherblock, und heutzutage im RAM (Random Access Memory). Dieses Random heisst, dass du jedes Wort (meist 4/8 Bytes, Maschinenabhängig) direkt auslesen kannst (also random, nicht in einer bestimmten Reihenfolge).
Daher ist jeder Zugriff in konstanter Zeit machbar ( O(1) ), schreiben wie lesen. O(1) ist dabei dasselbe wie O(100000), da man ja nicht definiert hat, wie gross die Zeiteinheiten sind. Es sind nur qualitative Angaben.
Eine Liste hingegen hat das Problem, dass du nur weisst, wo das erste Element ist. Um auf das letzte Element einer Liste mit n Elementen zuzugreifen, brauchst du n Schritte, also eine Laufzeit von O(n).
Sagen wir, du hast eine sortierte Datenstruktur. Mittels binärer Suche kommst du dann beim Array auf eine Suchzeit von O(log(n)), bei der Liste geht das nicht, da du ja immer wieder von vorne beginnen müsstest.

Zum Projekt: Du könntest eine kleine Zugsimulation schreiben. Dort sind Listen (Züge) und Stacks (Passagiere) besser möglich.
Aber es ist schwierig, die Sache so anzugehen. Normalerweise weiss man, was man will, und nimmt dann die passende Struktur.

Gruss
cwriter
 
#10
Man unterscheidet Algorithmen nach Güte.
Ich mache es mal am Beispiel des Arrays:
Sagen wir, du hast den Array int[] arr.
Wenn du eine Position i darin füllen willst, dann schreibst du arr[i] = x;
Nun ist die Frage, wie lange ein Computer dafür braucht.
Ein Array ist schlicht ein Speicherblock, und heutzutage im RAM (Random Access Memory). Dieses Random heisst, dass du jedes Wort (meist 4/8 Bytes, Maschinenabhängig) direkt auslesen kannst (also random, nicht in einer bestimmten Reihenfolge).
Daher ist jeder Zugriff in konstanter Zeit machbar ( O(1) ), schreiben wie lesen. O(1) ist dabei dasselbe wie O(100000), da man ja nicht definiert hat, wie gross die Zeiteinheiten sind. Es sind nur qualitative Angaben.
Eine Liste hingegen hat das Problem, dass du nur weisst, wo das erste Element ist. Um auf das letzte Element einer Liste mit n Elementen zuzugreifen, brauchst du n Schritte, also eine Laufzeit von O(n).
Sagen wir, du hast eine sortierte Datenstruktur. Mittels binärer Suche kommst du dann beim Array auf eine Suchzeit von O(log(n)), bei der Liste geht das nicht, da du ja immer wieder von vorne beginnen müsstest.
Das hab ich sogar verstanden :D

Aber es ist schwierig, die Sache so anzugehen. Normalerweise weiss man, was man will, und nimmt dann die passende Struktur.
Genau das ist mein Problem mir fällt eben kein Projekt ein, was auf die Anforderungen passt :/
 

ComFreek

Mod | @comfreek
Moderator
#11
Normale "M"-Funktionalität wäre aber allerhöchstens ein Stack mit peek(), eher nur ein einfacher 1-Wert-Speicher.
Ich meinte, dass man mehrere Werte unter verschiedenen benutzerdefinierten (Eingabefeld!) Namen speichern kann

Wird doch auch von Taschenrechnern so gemacht? :eek:
Die klassische M-Funktionalität macht das, stimmt :) Aber es gibt auch welche, die im Term dann den Variablennamen stehen lassen und erst bei der Auswertung diese ersetzen. Das hat den Vorteil, dass du den Variablenwert danach ändern kannst, in der Historie hochscrollen kannst und reevaluieren lassen kannst.

Also wenn du Speichern drückst, passiert map.put(inputField.getText(), accumulator.getValue()). @CptCookielike Akkumulator ist der aktuell errechnete Wert, der dann auch angezeigt wird.
Wenn du Laden drückst, passiert accumulator.setValue(map.getOrDefault(inputField.getText(), 0)).

Ehrlich gesagt (zumindest für mich): Sicher nicht nach Liste, die in O(n) sucht. Eher Baum (O(log(n)) oder Array (O(log(n))), was aber nicht erlaubt ist...
Ich dachte da an Map<String, Double>. Sicherlich kannst du das intern als TrieMap realisieren, aber ich glaube, du hast mich schon oben bei der M-Funktionalität missverstanden :p


@CptCookielike: Wie programmiert ihr die GUI an sich? Habt ihr da ein schulinternes Framework z. B.?
 

cwriter

Erfahrenes Mitglied
#13
Ich dachte da an Map<String, Double>. Sicherlich kannst du das intern als TreeMap realisieren, aber ich glaube, du hast mich schon oben bei der M-Funktionalität missverstanden :p
Ah, du gehst von der Map aus.
Ich weiss aber nicht, ob der TE die Strukturen nicht selbst schreiben muss - einfach Standardbibliotheken benutzen scheint mir ein bisschen zu simpel (bis zu einem gewissen Grad sind die Interfaces ja ähnlich bis dieselben), speziell daher:
Was die Möglichkeiten natürlich eingrenzt ist die Tatsache, dass wir an komplexen Datenstrukturen im Unterricht bisher nur Lineare Liste, Schlange und Stack hatten. :/
Aber klar, wenn die Standard-Map erlaubt ist, dann ist es sicher besser, diese zu nehmen, statt alles selbst zu schreiben :)

Na dann bist du ja nicht zu dumm dafür :)

Genau das ist mein Problem mir fällt eben kein Projekt ein, was auf die Anforderungen passt :/
Mhm. Mir fielen nur noch Zahlenberechnungen ein, die aber als Array besser gingen (Sieb des Eratosthenes usw.). Aber möglicherweise kann man argumentieren, dass eine Liste besser ist, da es weniger Platz braucht.
Mit Listen gingen auch einige Graphenalgorithmen, aber die hattet ihr wohl noch nicht.
Stacks/Queues sind halt sehr spezifische Dinge, die man nicht einfach mal so braucht.
(Genaugenommen braucht man halt meist Arrays, weil sie schlicht in fast allen Belangen (einzige Ausnahme: Starke Veränderungen der Struktur (bspw. Grössenwechel)) den meisten anderen Strukturen überlegen sind; und man sie auch zu Hashtabellen pimpen kann, wodurch sie noch mächtiger werden.

Aber ich muss sagen, dass ich ratlos bin, wofür man eine Liste und einen Stack gleichzeitig brauchen sollte :/

Darfst du eigentlich Standardstrukturen (eben bspw. Map) verwenden?

Gruss
cwriter
 
Anzeige
Anzeige