Nur ein einfaches Schleifenproblem?

30/09/2008 - 23:11 von Sven Schulz | Report spam
Hallo,

ich habe hier ein Problem(in Pseudocode) bei dem ich die Lösung nicht
sehe.Vermutlich ist das "Problem" ein Anfàngerfehler . . .

Ich initialisiere meine for-Schleife mit einer Lànge des Vektors den er
zu Beginn des Programms hat. Die Inhalte des Vektors werden auf
Gleichheit überprüft. Ist ein Inhalt gleich, dann soll der Vektor an
dieser Stelle eingekürzt/gelöscht werden. Dann ist aber die Vektorlànge
veràndert worden und die for-Schleife arbeitet nicht mehr korrekt! Die
for-Schleife wurde mit einem anderen Wert initialisiert, der Wert
stimmt zur Laufzeit nicht mehr.

for i=1 bis Vektor
if Vektor(i)==Vektor(i+1)
loesche Vektor(i+1)
end
end

Wie kann ich das Problem lösen?

Wenn mir jemand ein Lösung sagen könnte, dann wàre PseudoCode am
einfachsten. C oder àhnlich geht natürlich auch.


Danke für die Hilfe.

Sven
 

Lesen sie die antworten

#1 Matthias Schramm
01/10/2008 - 00:00 | Warnen spam
Hallöchen!

Am Tue, 30 Sep 2008 23:11:14 +0200 schrieb Sven Schulz:

Hallo,

ich habe hier ein Problem(in Pseudocode) bei dem ich die Lösung nicht
sehe.Vermutlich ist das "Problem" ein Anfàngerfehler . . .

Ich initialisiere meine for-Schleife mit einer Lànge des Vektors den er
zu Beginn des Programms hat. Die Inhalte des Vektors werden auf
Gleichheit überprüft. Ist ein Inhalt gleich, dann soll der Vektor an
dieser Stelle eingekürzt/gelöscht werden. Dann ist aber die Vektorlànge
veràndert worden und die for-Schleife arbeitet nicht mehr korrekt! Die
for-Schleife wurde mit einem anderen Wert initialisiert, der Wert stimmt
zur Laufzeit nicht mehr.

for i=1 bis Vektor
if Vektor(i)==Vektor(i+1)
loesche Vektor(i+1)
end
end

Wie kann ich das Problem lösen?

Wenn mir jemand ein Lösung sagen könnte, dann wàre PseudoCode am
einfachsten. C oder àhnlich geht natürlich auch.


Danke für die Hilfe.

Sven



Wie Du richtig erkannt hast, wird dein Vektor veràndert und damit stimmt
deine Zàhlschleife bei dieser Konstruktion nicht mehr.
Die einfachste Lösung wàre, den Vektor nicht vom Anfang zum Ende zu
durchlaufen, sonder von Hinten nach Vorne ;)

for i = (Vektorgröße - 1) bis 1
if Vektor(i) == Vektor(i+1)
loesche Vektor(i+1)
end
end

Dadurch ist sichergestellt, dass du erst das vorletzte Element mit dem
letzten vergleichst und bei Bedarf löschst. Danach wird dein i
dekrementiert und steht im Zweifel wieder beim (nun neuerdings)
vorletzten Element.

MfG
Matthias

Der viel zu lange schon kein C/C++ geproggt hat und mal wieder Lust
darauf hàtte.

Ähnliche fragen