Datenübertragung Teil 3

zurück zur Hauptseite Datenübertragung
Gruppe: dj, 14.06.03

Aufgabenstellung

Da nicht nur einzelne Nullen und Einsen übertragen werden sollen, müssen alle anderen Zahlen, Zeichen, ... in eine Folge von Nullen und Einsen codiert werden. In diesem Teil soll die Klasse TBitFolge um die Fähigkeit erweitert werden, umzuwandeln.
Dazu soll ein Test- und Veranschaulichungs-Programm geschrieben werden.

Ressourcen

Erweitertes Klassendiagramm:

Wir interpretieren die Bitfolgen dazu als Zahlen in binärer Darstellung (mit der höchstwertigen Stelle links und der niedrigstwertigen Stelle rechts). Dann kann die Umwandlung dieser Binärzahlen in Dezimalzahlen nach folgendem Schema geschehen:

Die Umwandlung von einer Dezimalzahl in eine Binärzahl ist schon schwieriger:

Zur Nutzung der ASCII-Tabelle stehen in Delphi schon die Funktionen zur Verfügung.

Pflichtenheft zur 3. Teilaufgabe


/1/ Der Benutzer soll eine Folge von 8 Bits, eine Zahl zwischen 0 und 255 oder einen einzelnen Buchstaben in separate Eingabefelder eingeben können.
/2/ Die Ansicht wird aktualisiert, d.h. bei Verlassen eines Eingabebereiches wird die Eingabe in die anderen Formate gewandelt und angezeigt.
/3/ Die Methoden sollen folgende Bezeichner tragen:

"interne Pflichten":

/4/ Die Dokumentation ist konsequent weiterzuführen.

Prototyp

Umsetzung in Struktogramme


Implementierung

procedure TBitFolge.fromByte( b : byte );
var 
  i : byte;
begin
  for i := 8 downto 1 do
  begin
    if ( b mod 2 = 0 ) then
      setBit( i, Null )
    else
      setBit( i, Eins );
    b := b div 2;
  end;
end;

procedure TBitFolge.fromChar( c : char );
begin
  fromByte( ord(c) );
end;

function TBitFolge.toByte : byte;
var 
  i, wertigkeit, b : byte;
begin
  b := 0;
  wertigkeit := 128;
  for i := 1 to 8 do
  begin
    if ( getBit(i) = Eins ) then
      b := b + wertigkeit;
    // sonst b := b + 0*wertigkeit = b
    wertigkeit := wertigkeit div 2;
  end;
  RESULT := b;
end;

function TBitFolge.toChar : char;
begin
  RESULT := chr( toByte );
end;
procedure TGUI.UpdateView;
begin
  eBitFolge.Text := myBits.toString;
  eByte.Text     := inttostr( myBits.toByte );
  eChar.Text     := myBits.toChar;
end;

procedure TGUI.OneBitFolgeExit(Sender: TObject);
begin
  myBits.fromString(eBitFolge.Text);
  UpdateView;
end;

procedure TGUI.OneByteExit(Sender: TObject);
begin
  myBits.fromByte( strtoint(eByte.Text) );
  UpdateView;
end;

procedure TGUI.OneCharExit(Sender: TObject);
begin
  if ( eChar.Text <> '' ) then
  begin
    myBits.fromChar( eChar.Text[1] );
    UpdateView;
  end;
end;

Test