Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Klammer Prüfer


oOpadeisOo - So 27.09.09 19:28
Titel: Klammer Prüfer
Hi,
ich soll in meinem Inofrmatikkurs ein programm schreiben, dass prüft ob ich eine klammer vollständig eingegeben habe, das heißt ob wenn eine Klammer geöffnet wurde und dann auch wieder geschlossen wurde. Das problem dabei ist, dass ich nicht weiß wie ich anfangen soll, dass erkannt wird dass eine klammer eingegebne wurde UND das diese geschlossen werden muss.

Könnt ihr mir dabei helfen?


FinnO - So 27.09.09 19:34

Ich hab sowas zwar noch nie gemacht, aber ich würde da prinzipiell so vorgehen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
for i 1 bis länge vom text:
begin
  WENN text an der stelle i = "(" DANN
  inc(counter)
  ANSONSTEN, WENN text an der stelle i = ")" DANN 
  dec(counter);
end;

WENN Counter > 0 DANN Zu viele Klammern auf
WENN Counter < 0 DANN zu viele Klammern zu
WENN Counter = 0 DANN Okay ;)


anbest - So 27.09.09 19:52

[edit] Code entfernt [/edit]


gfehmke - So 27.09.09 20:07

Hi

Hab mal den Quellcode einer 'Jugendsünde' anno 2002 angehängt.
Hilft vielleicht weiter.

G.


Flamefire - So 27.09.09 20:36

du müsstest auch noch überprüfen, ob counter JEMALS <0 wird
dann hat man nämlich eine Klammer zuviel zu

andernfalls würde er folgendes als richtig erachten:

)3+2(=9


FinnO - So 27.09.09 20:44

dann wäre ja ein test in jedem Schleifendurchlauf möglich. würde Coutner <0, sofort mit Fehler exiten ..


alzaimar - So 27.09.09 21:03

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
..sofort mit Fehler exiten ..
Wie meinen? Wasndasfürndeutsch? Oh Graus. :bawling:
Aber im Prinzip hast du Recht, denn so etwas ("(())))((") wäre mit dem vorgeschlagenen Algorithmus korrekt (Zähler = 0), aber trotzdem Murks.

Also: Die Idee mit dem Zähler ist richtig, aber wenn der Zähler zwischendurch negativ wird, sofort abbrechen und einen Fehler melden.
Aber bitte nicht exiten.
Breaken wäre besser, obwohl mich das wiederum an :puke: erinnert.


FinnO - So 27.09.09 21:27

naja... mit "exitten" war ja auch nicht exit; gemeint.

also. Folgender Algorithmus... noch in Pseudocode, da die Frage ja noch offen ist:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
SOLANGE i <= Textlänge UND counter >0 MACHE
BEGIN
  WENN Text[i] = "(" DANN
  Erhöhe Counter
  ANSONSTEN WENN Text[i] = ")" DANN
  Erniedrige Counter

  i+
END

WENN Counter > 0 DANN Zuwenig ")" 
WENN Counter < 0 DANN Zuviele ")" 

WENN Counter = 0 DANN Super!


Jann1k - So 27.09.09 21:42

Zitat:
SOLANGE i <= Textlänge UND counter >0 MACHE


Aus dem counter > 0 sollte ein counter >=0 werden, ansonsten sieht das gut aus.