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.
Ich würde den Variablen sinnvolle und nicht nach einem zweifelhaften Schema konstruierte Namen geben, dann stellt sich das Problem gar nicht erst ;-)
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).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.