haskell funktionen

Alt 13.11.2008, 21:25   # 1
Prahlehans
 
Registriert seit: 17.07.2008
Beiträge: 37
Hey leutz, ich weiß jetzt nicht,ob das hier in den Teil passt, aber ich wüsste nicht wohin sonst.
Also ich soll ein Haskell-Programm schreiben, welches eine Liste an Tupeln erhält. Diese stellt eine Bitmap dar, wo an jeder Stelle aus der Liste ein * gesetzt ist. An allen anderen Stellen sind Leerzeichen. Die eigentliche Funktion sieht so aus, dass an den Stellen, wo ein * ist jetzt ein Leerzeichen sein... HIer hab ich mal meinen Quelltext bis jetzt.

type Bitmap = [(Int,Int)]

showBMP :: Bitmap -> Int -> Int -> IO()
showBMP l b h = putStr(bmph l b (h-1) 0) where
bmph l b h s
| s == b && h <= 0 = ""
| s == b = '\n': (bmph l b (h-1) 0)
| elem (s,h) l = '*': (bmph l b h (s+1))
| otherwise = ' ': (bmph l b h (s+1))

-- Maximale Breite und Höhe bestimmen

maxBH l = mBH l 0 0 where
mBH [] b h = (b,h)
mBH ((x,y):r) b h = mBH r (max (x+1) b) (max (y+1) h)

printBMP l = showBMP l b h where (b,h) = maxBH l

invert :: Bitmap -> Bitmap
invert [] = []
invert pic = inverth pic newPic where
newPic = let (b,h) = maxBH pic in [(x,y) | x<-[0..b], y<-[0..h-1]]

inverth :: Bitmap -> Bitmap -> Bitmap
inverth [] [] = []
inverth [] ((x,y):s) = []
inverth ((u,v):r) ((x,y):s) | (x,y) == (u,v) = inverth r s
| otherwise = [(x,y)]++inverth ((u,v):r) s


So Fehler ist jetzt, ich geb eine Bitmap ein, z.B [(0,0),(1,1),(2,2)]
erhalte dafür auch das richtige. Wenn ich nun aber auf die wieder die Funktion anwende, erhalte ich nur [(0,0),(1,1)]....
Kann mir jemand sagen, wo mein Fehler liegt???
  Mit Zitat antworten
Alt 16.11.2008, 00:07   # 2
Pr!xx
Gastposter
 
Hallo ,
Also ich hab dein Prog mal durch gespielt und bei mir erfüllt es voll und ganz seine Aufgabe ...habs mit einer Diagonale getestet...

Hast du dich den schonmal mit Aufgabe 2 und 3 auseinander gesetzt ??
3. müsste ja im prinzip wie das invert sein nur mit nem 3 Pic das die Koordinaten enthält!

und bei der 2 bin ich rat los!!

MFG Pr!xx
  Mit Zitat antworten
Alt 26.11.2008, 13:11   # 3
Prahlehans
Threadstarter
 
Registriert seit: 17.07.2008
Beiträge: 37
Hab jetzt was neues. Ich soll eine Liste von Tupeln mittels inSort (insertion sort) so ordnen, dass das kleinste Element vorn steht.
Bis jetzt sieht mein Quelltext so aus:

sortBMP :: Bitmap -> Bitmap
sortBMP [] = []
sortBMP ((x,y):r) | (x,y) < head r = [(x,y)]++sortBMP r
| otherwise = sortBMP ((x,y):r)

Ich weiß,dass die letzte Zeile nicht stimmen kann, weiß aber nicht, was da stattdessen hinmuss. Kann mir da jemand mal helfen?
Danke im Voraus
  Mit Zitat antworten

Alt 28.05.2012, 17:22 # --
News Flash
 
Benutzerbild von News Flash
 
 
 
   
Antwort
Themen-Optionen



Alle Zeitangaben in WEZ +2. Es ist jetzt 17:22 Uhr.