Forum: PC-Programmierung Auf fehlenden Zähler prüfen


von Sandra (Gast)


Lesenswert?

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?

von foobar (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ich würde den Variablen sinnvolle und nicht  nach einem zweifelhaften 
Schema konstruierte Namen geben, dann stellt sich das Problem gar nicht 
erst ;-)

von A. S. (Gast)


Lesenswert?

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"?

von C. U. (chriull)


Lesenswert?

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.

von Sandra (Gast)


Lesenswert?

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.

von wendelsberg (Gast)


Lesenswert?

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

von Theor (Gast)


Lesenswert?

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?

von A. S. (Gast)


Lesenswert?

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.

von Sandra (Gast)


Lesenswert?

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.

von zitter_ned_aso (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von Dunno.. (Gast)


Lesenswert?

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.

von Nick M. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.