Grundlagen der funktionsorientierten Programmierung mit SCHEME/Paritätsprüfung eines Bitmusters
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SchemeJS</language>
'''Autoren: Richard Walde; Veit Berger (2014)'''
== Grundlagen ==
[[Bild:RS232-Kabel1.jpg|miniatur|RS-232-Kabel zur seriellen Datenübertragung]]
Bei der seriellen Datenübertragung ist es mitunter möglich, ein Paritätsbit zu vereinbaren.<br />
So kann im RS-232-Standard (vgl. nebenstehende Abbildung) an eine Folge von 7 Datenbit ein Paritätsbit angefügt werden. Im Fall einer geraden Parität wird bei einer ungeraden Anzahl von Einsen eine weitere Eins ergänzt, anderenfalls eine Null.<br />
'''Beispiele:'''
"1001010" --> "10010101"
"0101000" --> "01010000"
Damit können mit recht hoher Wahrscheinlichkeit Übertragungsfehler erkannt werden, wenn die Paritätsprüfung des Empfängers keine gerade Anzahl von Einsen ergibt. Eine Fehlerkorrektur ist natürlich nicht möglich.
== Implementation ==
Mit den nachfolgende Prozeduren soll eine beliebige Anzahl zufälliger Bitmuster der Länge 7 generiert werden.<br />
Anschließend wird zu jedem Bitmuster ein Paritätsbit ergänzt, so dass wahlweise eine gerade bzw. eine ungerade Parität erfüllt ist.
<code id="541e7e88b9628">
(define gerade 0)
(define ungerade 1)
(define bitmuster
(lambda (n)
(if (= n 0)
""
(string-append (number->string (random 2)) (bitmuster (- n 1))))))
(define paritaet?
(lambda (zk art)
(letrec
([zaehlen
(lambda (zk)
(cond
[(= (string-length zk) 0) 0]
[(eqv? (string-ref zk 0) #\1) (+ 1 (zaehlen (substring zk 1 (string-length zk))))]
[else
(zaehlen (substring zk 1 (string-length zk)))]))])
(= (modulo (zaehlen zk) 2) art))))
(define bitliste
(lambda (n art)
(if (= n 0)
()
(let ([zk (bitmuster 7)])
(if (paritaet? zk art)
(cons (string-append zk "0") (bitliste (- n 1) art))
(cons (string-append zk "1") (bitliste (- n 1) art)))))))
</code>
<run id="541e7e88b96b7">
(bitliste 10 gerade)
</run>
Zurück zum [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Der Algorithmusbegriff|Algorithmusbegriff]].