www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

noob22222

Gepostet:
05.12.2011 21:17

dezimal zu binär  
Hi ich brauche unbedingt eine funktion die dezimal zahlen in binärzahlen umrechnet.

habe schon ein bisschen was geschaft
> binary2 a
> | b /= 0 = binary2 b
> | b == 0 = div a 2
> | c /= 0 = 1
> | c == 0 = 0
> where b = div a 2 ; c = mod a 2


dies rechnet mir die dezimalzahl runter bis auf null und das wars mir fehlt jetzt nur noch in jedem \\\"rekurivschritt\\\" das er den modulo berechnet und in den anfang einer liste steckt.

zur info mein ziehl ist es die dan für diese aufgabe zu verwenden

Aufgabe 8.1 (3). Gegeben ist folgende Sequenz von Zeichen aus dem Alphabet {1, 0, s, S}:
100000s11010s10100s1111s1010s110s11s1S
Diese Sequenz kodiert eine Liste von binärkodierten Zahlen, die jeweils mit einem Trennze-
ichen s voneinander getrennt sind. Man liest die Liste von links nach rechts und das Ende
der Liste ist mit einem S markiert. Jede Zahl gibt an, wieviel Zeichen die Restliste en-
thält. Die Liste, die die Beispielsequenz kodiert, ist:
[ 32 , 26 , 20 ,15 , 10 , 6 , 3 , 1 ]
Entwickeln Sie eine Funktion, die Listen (“beliebiger” Länge) nach diesem Schema er-
stellt:
distan :: Integral a = > a -> String
Die obige Sequenz wird dann mit diesem Aufruf erzeugt:
Hugs > distan 8
\\\" 100000 s 1 1 0 1 0 s 1 0 1 0 0 s 1 1 1 1 s 1 0 1 0 s 1 1 0 s 1 1 s 1 S \\\"
Zum Seitenanfang    
 
Landei

Gepostet:
06.12.2011 09:00

   
Nicht sehr effizient, aber einfach:


binary2 0 = []
binary2 n = binary2 (n `div` 2) ++ [n `mod` 2]


Eine effizientere Version verwendet einen Akkumulator:


binary2 n = bin n [] where
bin 0 acc = acc
bin n acc = bin (n `div` 2) (n `mod` 2 : acc)
Zum Seitenanfang    
 
Landei

Gepostet:
09.12.2011 08:54

   
Eine \"funktionalere\" Lösung wäre:


binary2 = reverse . map (`mod` 2) . takeWhile (>0) . iterate (`div` 2)
Zum Seitenanfang