Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Zahlensysteme_u1.pas 13.12.2009 18:02:54 Seite 1 von 4
- 1: unit Zahlensysteme_u1;
- 2:
- 3: interface
- 4:
- 5: uses
- 6: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- 7: Dialogs, StdCtrls, ExtCtrls;
- 8:
- 9: type
- 10: TForm1 = class(TForm)
- 11: Label1: TLabel;
- 12: Edit_Eingabe: TEdit;
- 13: Label2: TLabel;
- 14: Edit_Ausgabe: TEdit;
- 15: RG_Auswahl: TRadioGroup;
- 16: Button1: TButton;
- 17: Label_Dez: TLabel;
- 18: procedure Button1Click(Sender: TObject);
- 19: private
- 20: { Private-Deklarationen }
- 21: public
- 22: { Public-Deklarationen }
- 23: end;
- 24:
- 25: var
- 26: Form1: TForm1;
- 27:
- 28: implementation
- 29:
- 30: {$R *.dfm}
- 31:
- 32: procedure TForm1.Button1Click(Sender: TObject);
- 33: var
- 34: set_ziffer: set of char;
- 35: s_ein : string; // Eingabezahl als Zeichenkette gelesen
- 36: s_aus : string; // Ausgabezahl als Zeichenkette
- 37: basis : integer; // Hilfsvariable "basis"
- 38: stellen : integer; // Anzahl der Stellen der Eingabezahl
- 39: potenz : integer; // Höchster vorkommender Stellenwert
- 40: wert : integer; // Wert der aktuellen Potenz
- 41: zahl : integer; // Wert der Eingabezahl im Dezimalsystem
- 42: i : integer; // Hilfsvariable: Schleifenzähler
- 43:
- 44: begin
- 45: case RG_Auswahl.ItemIndex of
- 46: 0: // Dezimalzahl => Binärzahl
- 47: begin
- 48: set_ziffer := ['0' .. '9']; // Mögliche Ziffern der Eingabezahl
- 49: // Zunächst bestimmen wir den Wert der Eingabezahl im Dez-System
- 50: s_ein := Edit_Eingabe.Text; // Einlesen der Eingabezahl
- 51: basis := 10; // Eingabezahl im Dezimalsystem: Basis = 10
- 52: stellen := length(s_ein); // Zählen der Stellen der Eingabezahl
- 53: // Überprüfen der Eingabeziffern
- Zahlensysteme_u1.pas 13.12.2009 18:02:54 Seite 2 von 4
- 54: for i := 1 to stellen do
- 55: if not (s_ein[i] in set_ziffer)
- 56: then begin
- 57: MessageBox(0,'Falsche Ziffer in Eingabe','Hinweis',MB_OK);
- 58: exit;
- 59: end;
- 60:
- 61: // Berechnen der höchsten Potenz der Eingabezahl
- 62: potenz := 1;
- 63: for i := 1 to stellen-1 do
- 64: potenz := potenz * basis;
- 65:
- 66: zahl := 0; // "Erden" der Variable zahl
- 67: for i := 1 to stellen do
- 68: begin
- 69: zahl := zahl + strtoint(s_ein[i]) * potenz;
- 70: potenz := potenz div basis;
- 71: end; // for-Schleife
- 72:
- 73: // Die Variable zahl enthält nun den Wert der Eingabezahl im Dez-System
- 74: Label_Dez.Caption := inttostr(zahl);
- 75:
- 76: // Nun wird "zahl" ins Ausgabesystem umgewandelt:
- 77: basis := 2; // Binärsystem
- 78: // Bestimmen der höchsten Potenz im Ausgabesystem
- 79: potenz := 1; // Aktuelle Potenz im Ausgabesystem
- 80: while potenz <= zahl do
- 81: potenz := potenz * basis;
- 82: potenz := potenz div basis;
- 83: // Jetzt geht es los: Ziffern der Ausgabezahl bestimmen
- 84: s_aus := ''; // Ausgabestring "erden"
- 85: repeat
- 86: wert := zahl div potenz; // Wert der aktuellen Stelle
- 87: zahl := zahl mod potenz; // Zahl anpassen
- 88: s_aus := s_aus + inttostr(wert);
- 89: potenz := potenz div basis; // neuer Stellenwert
- 90: until potenz = 0;
- 91: Edit_Ausgabe.Text := s_aus;
- 92: end; // of case 0
- 93: 1: // Dezimalzahl => Hexadezimalzahl
- 94: begin
- 95: set_ziffer := ['0' .. '9']; // Mögliche Ziffern der Eingabezahl
- 96: // Zunächst bestimmen wir den Wert der Eingabezahl im Dez-System
- 97: s_ein := Edit_Eingabe.Text; // Einlesen der Eingabezahl
- 98: basis := 10; // Eingabezahl im Dezimalsystem: Basis = 10
- 99: stellen := length(s_ein); // Zählen der Stellen der Eingabezahl
- 100: // Überprüfen der Eingabeziffern
- 101: for i := 1 to stellen do
- 102: if not (s_ein[i] in set_ziffer)
- 103: then begin
- 104: MessageBox(0,'Falsche Ziffer in Eingabe','Hinweis',MB_OK);
- 105: exit;
- 106: end;
- Zahlensysteme_u1.pas 13.12.2009 18:02:54 Seite 3 von 4
- 107:
- 108: // Berechnen der höchsten Potenz der Eingabezahl
- 109: potenz := 1;
- 110: for i := 1 to stellen-1 do
- 111: potenz := potenz * basis;
- 112:
- 113: zahl := 0; // "Erden" der Variable zahl
- 114: for i := 1 to stellen do
- 115: begin
- 116: zahl := zahl + strtoint(s_ein[i]) * potenz;
- 117: potenz := potenz div basis;
- 118: end; // for-Schleife
- 119:
- 120: // Die Variable zahl enthält nun den Wert der Eingabezahl im Dez-System
- 121: Label_Dez.Caption := inttostr(zahl);
- 122:
- 123: // Nun wird "zahl" ins Ausgabesystem umgewandelt:
- 124: basis := 16; // Binärsystem
- 125: // Bestimmen der höchsten Potenz im Ausgabesystem
- 126: potenz := 1; // Aktuelle Potenz im Ausgabesystem
- 127: while potenz <= zahl do
- 128: potenz := potenz * basis;
- 129: potenz := potenz div basis;
- 130: // Jetzt geht es los: Ziffern der Ausgabezahl bestimmen
- 131: s_aus := ''; // Ausgabestring "erden"
- 132: repeat
- 133: wert := zahl div potenz; // Wert der aktuellen Stelle
- 134: zahl := zahl mod potenz; // Zahl anpassen
- 135: case wert of
- 136: 10: s_aus := s_aus + 'A';
- 137: 11: s_aus := s_aus + 'B';
- 138: 12: s_aus := s_aus + 'C';
- 139: 13: s_aus := s_aus + 'D';
- 140: 14: s_aus := s_aus + 'E';
- 141: 15: s_aus := s_aus + 'F';
- 142: 0..9:s_aus := s_aus + inttostr(wert);
- 143: end; // of case
- 144: potenz := potenz div basis; // neuer Stellenwert
- 145: until potenz = 0;
- 146: Edit_Ausgabe.Text := s_aus;
- 147: end; // of case 1
- 148: 2: // Binärzahl => Dezimalzahl
- 149: begin
- 150: end; // of case 2
- 151: 3: // Binärzahl => Hexadezimalzahl
- 152: begin
- 153: end; // of case 3
- 154: 4: // Hexadezimalzahl => Dezimalzahl
- 155: begin
- 156: end; // of case 4
- 157: 5: // Hexadezimalzahl => Binärzahl
- 158: begin
- 159: end; // of case 5
- Zahlensysteme_u1.pas 13.12.2009 18:02:54 Seite 4 von 4
- 160: end; // of case
- 161: end; // of procedure TForm1.Button1Click
- 162:
- 163: end.
Add Comment
Please, Sign In to add comment