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
FinnO hat folgendes geschrieben : |
..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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!