# Pseudocode verstehen und verbessern



## Susi123 (26. Nov 2019)

Als Beispiel dient folgender Klammerausdruck: ( ( ) ( ( ( ) ( ) ) ) )
Der Klammerausdruck ist meiner Meinung nach korrekt.

Folgender Algorithmus (Pseudocode) zur Überprüfung von Klammerausdrücken soll nicht immer korrekt arbeiten.

Kann mir jemand bei der Fehlersuche helfen? Wäre das ein Gegenbeispiel: ( ( ( )? Hier würde der Algorithmus doch "true" ausgeben, obwohl der Klammerausdruck "false" wäre. Verstehe ich das richtig?

Wie kann ich den Algorithmus korrigieren, damit er genau dann true ausgibt, wenn der Klammerausdruck korrekt ist. Mir würde es schon sprachlich helfen. Wenn aber noch jemand eine Idee hätte, wie der Pseudocode korrigiert werden könnte, wäre mir sehr geholfen.


----------



## Meniskusschaden (26. Nov 2019)

Susi123 hat gesagt.:


> Wäre das ein Gegenbeispiel: ( ( ( )? Hier würde der Algorithmus doch "true" ausgeben, obwohl der Klammerausdruck "false" wäre. Verstehe ich das richtig?


Ja, das wäre ein Gegenbeispiel.


Susi123 hat gesagt.:


> Wie kann ich den Algorithmus korrigieren, damit er genau dann true ausgibt, wenn der Klammerausdruck korrekt ist. Mir würde es schon sprachlich helfen. Wenn aber noch jemand eine Idee hätte, wie der Pseudocode korrigiert werden könnte, wäre mir sehr geholfen.


Spiele es doch mal manuell mit deinem Beispiel `((()` und einem korrekten Beispiel durch: bei einer öffnenden Klammer legst du einen  Zettel auf einen Stapel, bei einer schließenden nimmst du den obersten Zettel wieder hinunter. Was ist das Besondere, falls es mehr öffnende als schließende Klammern gab? Worin unterscheiden sich die beiden Beispiele zum Schluss?


----------



## Susi123 (28. Nov 2019)

Bei mehr öffnenden als schließenden Klammern wären Zettel übrig.
Man müsste damit ergänzen, dass am Ende noch überprüft werden muss, ob die Anzahl der öffnenden Klammern der Anzahl der schließenden Klammern entspricht. Ansonsten müsste auch „false“ ausgegeben werden. Ist das korrekt?
Mathematisch gesehen müsste die Differenz aus öffnenden Klammern und schließenden Klammern 0 betragen, um auf Korrektheit schließen zu können bzw. der Quotient aus öffnenden Klammern und schließenden Klammern müsste 1 betragen.


----------



## LimDul (28. Nov 2019)

Susi123 hat gesagt.:


> Bei mehr öffnenden als schließenden Klammern wären Zettel übrig.
> Man müsste damit ergänzen, dass am Ende noch überprüft werden muss, ob die Anzahl der öffnenden Klammern der Anzahl der schließenden Klammern entspricht. Ansonsten müsste auch „false“ ausgegeben werden. Ist das korrekt?
> Mathematisch gesehen müsste die Differenz aus öffnenden Klammern und schließenden Klammern 0 betragen, um auf Korrektheit schließen zu können bzw. der Quotient aus öffnenden Klammern und schließenden Klammern müsste 1 betragen.


Im Prinzip richtig. Und nun guck die mal den Pseudo-Code, ob der zeigt, wie man testen kann, ob "Zettel übrig" sind.


----------



## MoxxiManagarm (28. Nov 2019)

Susi123 hat gesagt.:


> Mathematisch gesehen müsste die Differenz aus öffnenden Klammern und schließenden Klammern 0 betragen, um auf Korrektheit schließen zu können bzw. der Quotient aus öffnenden Klammern und schließenden Klammern müsste 1 betragen.


Aber du willst nicht rechnen, du hast nur den Stack - also keine Differenz, kein Quotient. Wie müsste dieser Stapel aussehen am Ende des Vorgangs, damit die Klammerung korrekt ist?


----------



## Susi123 (3. Dez 2019)

Der Stapel müsste am Ende des Vorgangs leer sein. Aber wie baue ich das in den Pseudocode ein?


----------



## LimDul (3. Dez 2019)

```
if <Hier Bedingung einfügen, die definiert, dass der Stapel leer ist>)
then
  return false
else
  return true
```


----------



## Susi123 (3. Dez 2019)

Danke.


----------

