www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

schaumbad

Gepostet:
10.01.2006 14:25

kreuzsicherungscode  
hi ich hab n problem, und zwar kann ich mit dem kreuzsicherungscode nichts anfangen soll aber diese aufgabe hierf bewältigen:

Implementieren sie den 1-fehlerkorrigierenden kreuzsicherungscoder, der ein 0-1-wort der länge n^2 in ein 0-1-wort der länge n^2 +2n umwandelt, indem die eingabe als n X n matrix aufgefasst und für die n zeilen jeweils die paritätsbits anhängt.

außerdem soll ich die funktionierende 1-fehlerkorrigierende decodierungsfunktion erstellen.

bei beiden aufgaben sollen teilaufgaben angegeben werden.

kann mir da bitte jmd helfen, ich versteh nur bahnhof
Zum Seitenanfang    
 
Jacke

Gepostet:
10.01.2006 17:07

   
ich werd mich gleich nachher mal ransetzen...

gruß jacke
Zum Seitenanfang    
 
Jacke

Gepostet:
10.01.2006 20:05

   
so hier erstmal ne teillösung


matrix =[[1,0,1],[0,0,0],[1,1,1]]
zeile=[1,0,1]

--rechnet das paritätsbit für eine folge aus
code [] acc=acc`mod`2
code (x:xs) acc= code xs (x+acc)

kreuzcode [] =[]
kreuzcode (x:xs)= (code x 0) : kreuzcode xs



Main> kreuzcode matrix
[0,0,1]
Main>

Zum Seitenanfang    
 
Jacke

Gepostet:
12.01.2006 15:46

   

module KreuzCode where

type Vector a = [a]
type Matrix a = [Vector a]

matrix :: Matrix Int
matrix =[[1,0,1],[0,0,0],[1,1,1]]
codewort="101000111"


--rechnet das paritätsbit für eine folge aus
parität :: Vector Int -> Int -> Int
parität [] acc = acc`mod`2
parität (x:xs) acc= parität xs (x+acc)

--gibt den kreuzcode der matrix aus
kreuzcode :: Matrix Int -> Vector Int
kreuzcode [] =[]
kreuzcode (x:xs)= (parität x 0) : kreuzcode xs

--wandelt einen string in eine liste von ints um
zeilehilf :: String -> Vector Int
zeilehilf "" = []
zeilehilf (s:xs) = [fromEnum s `mod` 48]++zeilehilf xs

--bestimmt die länge einer liste
länge []=0
länge (l:ls)=1+ länge ls

--erzeugt matrixzeilen aus einer liste von ints
zeile str [] acc accliste=accliste++[acc]
zeile str (l:ls) acc accliste
|((länge acc) == round(sqrt(länge str))) = zeile str (l:ls) [] (accliste++[acc])
|otherwise = zeile str ls (acc++[l]) accliste


--wandelt die zeilen einer matrix in spalten um
spalte :: Matrix Int -> Matrix Int
spalte [] = []
spalte [v] = map toList v
where toList :: a -> [a]
toList x = [x]
spalte (v:vs) = zipWith ( : ) v (spalte vs)

--rechnet die parität aus --zunächst die matrix zeilenweise --dann die paritätbits der zeilen --und die paritätsbits der spalten
alles str = ((zeile str (zeilehilf str) [] [])) ++ [(kreuzcode(zeile str (zeilehilf str) [] []))] ++ [(kreuzcode(spalte(zeile str (zeilehilf str) [] [])))]

--wandelt eine liste von ints in einen string um
toString :: Vector Int -> String
toString [] = ""
toString (x:xs)
| chr x == '\SOH' = "1"++toString xs
| otherwise = "0"++toString xs

--wandelt eine matrix in einen string um
toString2 :: Matrix Int -> String
toString2 [] = ""
toString2 (x:xs) = (toString x)++(toString2 xs)




use : toString2 (alles codewort)


fertig !!!!
Zum Seitenanfang    
 
schaumbad

Gepostet:
13.01.2006 15:42

   
vielen dank ;)
Zum Seitenanfang    
 
Jacke

Gepostet:
13.01.2006 16:48

   
gern geschehen...Smilie
Zum Seitenanfang