Einzelnen Beitrag anzeigen

Ghose

Registriert seit: 7. Nov 2009
Ort: Herzebrock-Clarholu
3 Beiträge
 
#1

Umrechnen von Zahlensystem

  Alt 7. Nov 2009, 17:39
Guten Abend,

und es werden sich jetzt wahrscheinlich wieder alle denken, warum kommt der mit diesem alten Thema wieder...

Es ist so, ich bin komplett neu in der Programmierung und haben keinen Schimmer davon wie ich damit anfangen soll. Ich habe mir jetzt schon ein Buch und diverse Tipps & Tricks angeguckt, jedoch ist es für mich immernoch schwierig, die gestellte Aufgabe zu meistern.

Es ist so das ich einen Umrechner für Dez, Binär und Hex erstellen muss.
Und dabei auch schon einiges mir jetzt zusammengebastelt habe und manches sogar halbwegs funktioniert. Nur steh ich zur Zeit einfach vor der Aufgabe wie ich Ausnahmen einbringe in meinen ganzen Code und ob ich es nicht einfacher haben könnte.

Der Rechner sollte von Dez, Bin und Hex nach Dez, Bin und Hex umrechnen können also 9 Umrechnungsarten sogesagt bzw. 6 da das andere ja nur eine Kopie ist.

Ich werde nun einfach mal meinen Quellcode hier reinschreiben und zu jeder Umrechnung entweder in den Quellcode mit Klammern oder darunter etwas schreiben bzw. fragen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Math, StrUtils;

type
  TForm1 = class(TForm)
    Eingaberadiogroup: TRadioGroup;
    Ausgaberadiogroup: TRadioGroup;
    Eingabeedit: TEdit;
    Eingabe: TLabel;
    Ausgabe: TLabel;
    Berechnungsbutton: TButton;
    Ausgabeedit: TEdit;
    procedure BerechnungsbuttonClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
      { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  x: integer;
  BinArray: Array [1..16] of Integer; /// Array mit 16 Speicherstellen von 1 bis 16 ///
  laenge: Integer;
  Zahl: Integer;
implementation

{$R *.dfm}

procedure TForm1.BerechnungsbuttonClick(Sender: TObject);
Var
     a ,b, i : Integer;
     c : extended;
     s : string;
     i1, i2 : Integer;
begin

    Ausgabeedit.Text:= '';

    
                               /// Hexadezimal in Dezimal ///
    IF ((Eingaberadiogroup.ItemIndex= 2) and (Ausgaberadiogroup.ItemIndex= 0)) then
      Begin
         i2 := StrToInt('$'+Eingabeedit.Text); // Umwandlung in INTEGER
         Ausgabeedit.Text := IntToStr(i2);
      end;


                              ///Dezimal in Hexadezimal///

    IF ((Eingaberadiogroup.ItemIndex=0) and (Ausgaberadiogroup.ItemIndex=2)) then
       begin
          i1 := StrToInt(Eingabeedit.Text); // wandelt String in Ganzzahl um
          Ausgabeedit.Text := Format('%x',[i1]); // Ausgabe als HEX
       end;


                               /// Dezimal in Binär///
    IF (( Eingaberadiogroup.ItemIndex=0) and (Ausgaberadiogroup.ItemIndex =1)) then


    x:= StrtoInt (Eingabeedit.text); // Eingabe //

    ///***Beginn Umrechnung von Dezimal in Binär***///

          For i:= 1 to 16 do

              Begin
                BinArray[i]:= x mod 2;
                x := x div 2;
                Ausgabeedit.Text:= InttoStr(BinArray[i]) + Ausgabeedit.Text;
                  If x = 0 Then
                  break;
              End;


                            ///Binär in Dezimal///

    IF ((Eingaberadiogroup.ItemIndex=1) and (Ausgaberadiogroup.Itemindex=0))then

    s:= reverseString(Eingabeedit.Text); /// Drehen des Eingabestrings
    a:= Length(s); /// Ermittlung der Länge des Eingabestrings
    C:= 0; /// C wird auf 0 deklariert

              ///*** Beginn der Umrechnung von Binär in Dezimal ***///
      For b:= 1 to a do
        begin
          c := c+ Strtoint(s[b]) * power(2 , (-1 + b) ); (Ich habs in Internet gefunden aber versteh es kein bisschen!)
        end;
            Ausgabeedit.Text := FloattoStr(c); //*** Ausgabe aufs Ergebnisedit ***//


Jetzt zu den Fragen speziell:

1. Wenn ich in der RadioGroup nach einer Umrechnung noch eine andere Umrechnung machen möchte, kommt immer Null raus.
2. Zudem funktionieren die Umrechnungen für sich alleine alle, jedoch wenn ich alle zusammen ohne ausklammern, mitnehme, kommt ebenfalls immer 0 raus.
3. Wie kann ich in den einzelnen Umrechnungen Ausnahmen einfügen, dass zum Beispeil bei Hex nur Buchstaben bis F eingegeben werden können und ab G dann eine Message aufblingt unzulässiger Buchstabe man dann jedoch einfach weitertippen, sofern man den unzulässigen Buchstaben gelöscht hat.
4. Bei Dezimal dürfen einfach garkeine Buchstaben auftauchen und er soll sofort meckern sofern etwas nicht zulässiges eingeben wird.
5. Bei Binär muss sich komplett auf 1 und 0 beschränkt werden.(sonderzeichen dürfen bei allen abfragen natürlich auch nicht eingegeben werden)
6. Wie erreiche ich, dass ich bei einer Hex Eingabe auch große Werte wie FFFFFFFF eingeben kann ohne das Delphi abstürzt oder hängt es vielleicht einfach mit meinen Quellcode zusammen.
7. Kann ich die Ausgabe auch über ein anderes Element wie das EditFenster erreichen, da ich beim Label (auch bei Label.Cation statt Edit.Text) immer Probleme hatte.


Das sind erstmal die Fragen die mir gerade spontan einfallen.

Sofern jetzt Ersatzquellcodes zwecks vereinfachung oder vorschlägen kommen, erklärt diese bitte sehr ausführlich da ich wirklich kompletter Anfänger bin und es einfach nicht verstehe.

Das Projekt ist unter http://ul.to/axurnz runterzuladen, damit man auch einen Eindruck gewinnt wie das ganze nachher aussehen soll bzw. vielleicht gibt es hier auch schon vereinfachungen.

Ich hoffe ihr könnt mir helfen, da ich oft bei der Suche nach Umrechnungen in diesem Forum gelandet bin, dachte ich mir das ich hier genau richtig sein muss.

Mit freundlichen Grüßen

Ghose
Angehängte Dateien
Dateityp: rar neu_105.rar (2,9 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat