Ich habe Variablennamen die mit dem Index 0...9 möglich sind.
Es gibt z.B.
var0, var2, var3
Nun kommt ein neues Objekt, dem ich auch eine Variablenbezeichnung geben
möchte, sinnvollerweise hier
var1
Wie kann ich in C effektiv überprüfen, welcher Zählerindex noch frei
ist, und welcher der niedrigste freie ist?
Das Problem dabei ist, dass die Variablenbezeichnungen durcheinander
reinkommen, z.b
var2, var3, var0
Ich steh hier echt auf dem Schlauch.
Wie würdet ihr das machen?
Alle 10 Varianten ausprobieren bist du ne unbenutzte gefunden hast, ist
effektiv. Ändert nicht mal was an der groß-O-Laufzeit deiner
Einfüge-/Suchroutine.
Sandra schrieb:> Nun kommt ein neues Objekt, dem ich auch eine Variablenbezeichnung geben> möchte
Wie kommen in C Objekte rein?
Wieso var0...var9?
Was meint "noch frei"?
Wäre was für eine Priority Queue. Wird sich aber bei 10 Elementen nicht
wirklich auszahlen - die 10 Werte durchsuchen könnte leicht effektiver
sein.
Wenn nicht unbedingt der niedrigste neue Wert benötigt wird wäre ein
Stack am effizientesten.
Der Anwender erzeugt Objekte und löscht Objekte. Die Namen der Objekte
lese ich entsprechend der erstellten Reihenfolge aus, da er aber auch
welche zwischendrin löschen kann, muss ich mit den Variablenbezeichnung
die Lücken füllen. Mein Namensbereich der Variablen liegt wie gesagt
zwischen var0 und var9.
Sandra schrieb:> Der Anwender erzeugt Objekte und löscht Objekte.
Die erste, bei der beim Erzeugen nicht kommt "gibt es schon" ist die
erste freie.
wendelsberg
Sandra schrieb:> Der Anwender erzeugt Objekte und löscht Objekte. Die Namen der Objekte> lese ich entsprechend der erstellten Reihenfolge aus, da er aber auch> welche zwischendrin löschen kann, muss ich mit den Variablenbezeichnung> die Lücken füllen. Mein Namensbereich der Variablen liegt wie gesagt> zwischen var0 und var9.
Der "Anwender" kann in der Regel keine neuen Objekte erzeugen oder
löschen. Dazu müsste er den Quellcode ändern und das macht der Anwender
definitionsgemäß nicht. Er wendet einer Software an, ändert sie aber
nicht.
C kann auch (von Haus aus) keine "Reflection", so dass der "Anwender"
entweder selbstgeschrieben Code zur Laufzeit hinzufügen kann oder, mit
einer Zwischenschicht, seine Eingaben, in Code umwandeln und hinzufügen
lassen kann.
Es ist aber möglich einen C-Interpreter oder Compiler in C zu schreiben.
Dann trifft von dem Folgenden die zweite Alternative zu.
1. Entweder handelt sich hier also um einen Software-Entwickler, der den
Quellcode ändern kann; und der erhält Fehlermeldungen, wenn Variablen
mehrfach definiert werden.
2. Oder es handelt sich um eine Software, in welcher der Anwender
"Objekte" definieren kann. Dann aber handelt es sich um die Aufgabe,
einen String in einem Array (oder sonst einer Organisationsform) von
Strings zu finden, einfügen und zu entfernen.
Dann aber geht es hier auch nicht um "Variablen" im Kontext eines
C-Programmes. Das Programm selbst ist dann eine Meta-Ebene, die
Variablen als Subjekte hat, also ein Interpreter oder auch Compiler oder
auch ein "Taschenrechner".
Hilft das weiter?
Ich denke, du solltest die Aufgabe Posten. Entweder ergibt Deine Frage
in ihrem Kontext Sinn, oder sie ist Folge Deiner Implementierung (die Du
dann ebenfalls posten solltest) und mit etwas "unkonventionellen"
Begriffen beschrieben.
Es handelt sich um eine graphische Software, der Anwender erstellt
Linien = Objekte und mein Programm möchte mit den Linien weiterarbeiten,
d.h. das Programm bezeichnet die Linien eben in der beschriebenen Art
und Weise. Nun bin ich am Überlegen, die ich die Namensgebung effektiv
hinbekomme.
Sandra schrieb:> das Programm bezeichnet die Linien eben in der beschriebenen Art> und Weise
Die Objekte in eine Liste packen? Dann gibt es auch kein Problem mit den
Namen. Und mit Löschen auch nicht.
Sandra schrieb:> der Anwender erstellt Linien = Objekte und mein Programm möchte mit den> Linien weiterarbeiten, d.h. das Programm bezeichnet die Linien eben in> der beschriebenen Art und Weise. Nun bin ich am Überlegen, die ich die> Namensgebung effektiv hinbekomme.
Dann stimmt was nicht. Wenn man sowas tun wollte, nähme man ein Array
und würde halt drüberschauen. Normalerweise limitiert man die Anzahl an
Linien aber nur per Speicher, nutzt also malloc oder sowas. Und selbst
wenn man es fest vorgibt, nimmt man fifos, stacks, doppelt verkettete
Listen, oder ... oder, aber nicht 10 Variablen.
Ich habe Mal ne einfache Speicherverwaltung für was ähnliches gebaut. Am
Ende war es am einfachsten und schnellsten, neue Elemente IMMER nach dem
letzten hinten an zu hängen, bis mein array voll war. Danach habe ich
dann angefangen nach freien Plätzen zwischen den vorhandenen zu suchen.
Sandra schrieb:> Nun kommt ein neues Objekt, dem ich auch eine Variablenbezeichnung geben> möchte, sinnvollerweise hier> var1
Soso, sinnvoll! Eher wohl "sinnvoll".
Wer sieht den Variablennamen? Niemand?
Dann bekommt das Ding eine ID, und die wird einfach hochgezählt. Die
Werte liegen in einem Array oder einer verketteten Liste (zusammen mit
der ID).