www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

chrisslater

Gepostet:
21.03.2009 20:57

Berechnen des Klammergebirges  
Hallo

Ich hab vor einiger Zeit ein Programm in C++ geschrieben, welches von einem vollständig geklammertem Ausdruck das Klammergebirge berechnete.

Hier das Programm


void berechneGebirge()
{
int k=0;
int j=0;
while (eingabe[k]!= '\0')
{
if (eingabe[k]=='(')
j++;
gebirge[k]=j;
if (eingabe[k]==')')
j--;
k++;
}

}


Bei Eingabe von zum Beispiel (Hallo) erhielt ich als Ausgabe 1111110

Dieses Prinzip wollte ich nun in Haskell realisieren, jedoch habe ich keine Idee wie das möglich wäre...
Ich würde mich über jede Hilfe freuen
Zum Seitenanfang    
 
Siracusa

Gepostet:
22.03.2009 15:46

   
Hallo,

als Ansatz würde ich folgende Hilfsfunktion vorschlagen: klammergebirge' :: String -> Int -> [Int]. Der erste Parameter ist der Eingabestring, der zweite die aktuelle Höhe. Du gehst rekursiv durch den String, änderst beim rekursiven Aufruf der Funktion immer die Höhe abhängig vom aktuellen Eingabezeichen und hängst die Höhe gleichzeitig an die Ausgabeliste an. Die eigentliche Startfunktion klammergebirge ruft dann nur die Hilfsfunktion mit dem String und der Starthöhe 0 auf.


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
chrisslater

Gepostet:
22.03.2009 16:51

   
Ich denke dir für die Hilfe bei der Aufgabe und wollte nur mal fragen was du zu meiner Lösung sagst

gebirge :: String -> [Int]
gebirge (x:xs) = gebirge' (x:xs) 0


gebirge' :: String -> Int -> [Int]
gebirge' (x:xs) y | x == '(' = (y+1) : gebirge' xs (y+1)
| x == ')' = (y-1) : gebirge' xs (y-1)
| otherwise = y: gebirge' xs y


Zum Seitenanfang    
 
Siracusa

Gepostet:
22.03.2009 17:03

   
Hhm, fehlt noch ein Rekursionsanfang für leere Strings. Sieht sonst aber gut aus. :-)
Zum Seitenanfang