AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Umrechnung in die interne Zahlendarstellung eines Rechners
Thema durchsuchen
Ansicht
Themen-Optionen

Umrechnung in die interne Zahlendarstellung eines Rechners

Ein Thema von sahry · begonnen am 20. Dez 2009 · letzter Beitrag vom 20. Dez 2009
Antwort Antwort
sahry

Registriert seit: 19. Dez 2009
2 Beiträge
 
#1

Umrechnung in die interne Zahlendarstellung eines Rechners

  Alt 20. Dez 2009, 00:14
Hallo,

ich brauche dringend Hilfe für mein letztes Uni Projekt. Mir fehlt nur noch dieser eine Schein und dann kann ich auch meine Diplom Arbeit abgeben, aber leider habe ich mich auf eine Projektarbeit eingelassen in einer Gruppe und wurde nun von dieser im Stich gelassen.. Ich hab die Aufgabe ein Umrechnungsprogramm zur internen Zahlendarstellung (im Hexsystem unn im Binärsystem) in Pascal zu schreiben. Was die Benutzeroberfläche angeht haben wir relativ strikte vorgaben. Ich glaub das hab ich richtig gelöst.
Ich bräuchte dringend Hilfe und das so schnell wie möglich. Ich würde echt nicht Fragen wenn ich mehr Zeit hätte, aber mich hat es schon 3 Wochen gekostet die Benutzeroberfläche zu erstellen weil ich mich mit Delphi/Pascal wirklich null auskenne. Vielleicht möchte mir ja jemand Helfen und hat sogar spaß an der Aufgabe.



Delphi-Quellcode:
unit EINGABE1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Buttons, Mask, ExtCtrls;

type
  TFormular = class(TForm)
    LabelUeberschrift: TLabel;
    RadioGroupAusgabetyp: TRadioGroup;
    RadioButtonFestpunkt: TRadioButton;
    RadioButtonIBMDW: TRadioButton;
    RadioButtonIBMExt: TRadioButton;
    RadioButtonIEEELReal: TRadioButton;
    RadioButtonIEEEExtReal: TRadioButton;
    LabelEingabe: TLabel;
    MaskEditEingabeInt: TMaskEdit;
    MaskEditEingabeReal: TMaskEdit;
    LabelAusgabe: TLabel;
    EditAusgabeHex: TEdit;
    EditAusgabeBin: TEdit;
    BitBtnExit: TBitBtn;
    BitBtnUmrechnen: TBitBtn;
    GroupBoxEingabetyp: TGroupBox;
    RadioButtonInteger: TRadioButton;
    RadioButtonReal: TRadioButton;
    LabelSedezimal: TLabel;
    LabelBinaer: TLabel;
    procedure RadioButtonIntegerClick(Sender: TObject);
    procedure RadioButtonRealClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BitBtnUmrechnenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Formular: TFormular;

implementation

{$R *.DFM}

procedure TFormular.RadioButtonIntegerClick(Sender: TObject);
begin
  RadioButtonIBMDW.Enabled := FALSE;
  RadioButtonIBMExt.Enabled := FALSE;
  RadioButtonIEEELReal.Enabled := FALSE;
  RadioButtonIEEEExtReal.Enabled := FALSE;
  RadioButtonFestpunkt.Enabled := TRUE;
  RadioButtonFestpunkt.Checked := TRUE;
  MaskEditEingabeInt.Visible := TRUE;
  MaskEditEingabeReal.Visible := FALSE;

end;

procedure TFormular.RadioButtonRealClick(Sender: TObject);
begin
  RadioButtonIBMDW.Enabled := TRUE;
  RadioButtonIBMExt.Enabled := TRUE;
  RadioButtonIEEELReal.Enabled := TRUE;
  RadioButtonIEEEExtReal.Enabled := TRUE;
  RadioButtonFestpunkt.Enabled := FALSE;
  RadioButtonFestpunkt.Checked := FALSE;
  RadioButtonIBMDW.Checked := TRUE;
  MaskEditEingabeInt.Visible := FALSE;
  MaskEditEingabeReal.Visible := TRUE;
end;

procedure TFormular.FormShow(Sender: TObject);
begin
  RadioButtonInteger.Checked := TRUE;
end;


{ NEU }

procedure TFormular.BitBtnUmrechnenClick(Sender: TObject);


begin { TFormular.BitBtnUmrechnenClick }
  IF (RadioButtonFestpunkt.Checked AND(MaskEditEingabeInt.Text = ''))
     OR (RadioButtonReal.Checked AND (MaskEditEingabeReal.Text = ''))
  THEN Exit;

  IF RadioButtonFestpunkt.Checked
  THEN BEGIN { Ganzzahlige Umrechnung }

         { ===> Code für ganzzahlige Umrechnung einfügen }

         { Ausgabe nach EditAusgabeHex.Text und EditAusgabeBin.Text }

       END
  ELSE BEGIN { Realzahlige Umrechnung }
         IF RadioButtonIBMDW.Checked
            OR RadioButtonIBMExt.Checked
         THEN BEGIN

                { ===> Code für Umrechnung IBM-Gleitpunktformate einfügen }

                { Ausgabe nach EditAusgabeHex.Text und EditAusgabeBin.Text }

              END
         ELSE BEGIN

                { ===> Code für Umrechnung IEEE-Gleitpunktformate einfügen }

                { Ausgabe nach EditAusgabeHex.Text und EditAusgabeBin.Text }
              END;
       END;

end { TFormular.BitBtnUmrechnenClick };


end.


Die Benutzeroberfläche sind dementsprechend so aus:

(Siehe Anhang)

So jetzt fehlen mir natürlich die Code Teile für die Umrechnungen. Wenn jemand mir helfen möchte einfach hier melden.

Edit: Ahso für die Eingaefelder gibt es auch Beschränkungen.
Wenn es Integer ist dann dürfen nur ganze Zahlen eingegeben werden und Vorzeichen.
Bei Real darf auch noch ein Komma eingegeben werden.
Damit hab ich mich schon beschäftigt und dachte an diese Lösung:

Delphi-Quellcode:
procedure TFormular.MaskEditEingabeIntKeyPress(Sender: TObject;
  var Key: Char);
   begin
     if not (Key in ['0'..'9', '+', '-', #8]) then
     begin
     SysUtils.Beep;
     ShowMessage('Bitte geben Sie eine ganze Zahl ein');
     Key := #0;

        end;
     end;

procedure TFormular.MaskEditEingabeRealKeyPress(Sender: TObject;
  var Key: Char);
begin
     if not (Key in ['0'..'9', ',', '+', '-', #8]) then
     begin
     SysUtils.Beep;
     ShowMessage('Bitte geben Sie eine Zahl ein');
     Key := #0;

     end;
      end;
Für weitere und genauere Infos steh ich zur Verfügung

[edit=SirThornberry]Bild in Anhang gepackt damit der Beitrag nicht irgendwann wertlos/unvollständig wird wenn das Bild vom externen Server verschwindet. Mfg, SirThornberry[/edit]
Miniaturansicht angehängter Grafiken
18905236_588.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Brauche dringend Hilfe für letztes Uni Projekt

  Alt 20. Dez 2009, 00:44
Kannst du bitte deinem Beitrag einen aussagekräftigen Titel geben der das Problem ansatzweise beschreibt? Titel wie "Problem bei Schulprojekt", "Brauche Hilfe bei Programm" etc. sagen leider rein gar nichts darüber aus worum es bei dem Thema geht. ("Hilfe", "Dringend" etc. können übrigens weg gelassen werden da so ziemlich jeder der eine Frage hat Hilfe benötigt und diese möglichst schnell haben will).
Aus deinem Beitrag geht übrigens auch nicht hervor bei was konkret du Probleme hast. Du schreibst nur
Zitat:
So jetzt fehlen mir natürlich die Code Teile für die Umrechnungen.
Aber welches Problem konkret dich da aufhält verschweigst du so das wir dir nur schwer helfen können.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Brauche dringend Hilfe für letztes Uni Projekt

  Alt 20. Dez 2009, 00:52
Zitat von sahry:
Ich würde echt nicht Fragen wenn ich mehr Zeit hätte, aber mich hat es schon 3 Wochen gekostet die Benutzeroberfläche zu erstellen weil ich mich mit Delphi/Pascal wirklich null auskenne. Vielleicht möchte mir ja jemand Helfen und hat sogar spaß an der Aufgabe.


Sorry, selbst ein Anfänger kann die von Dir gezeigte Oberfläche in einer Stunde zusammenklicken.

Wie rechnest Du die Zahlen denn von Hand um? Nichts anderes musst Du in Delphi machen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Brauche dringend Hilfe für letztes Uni Projekt

  Alt 20. Dez 2009, 00:57
Und die viel verschmähte und oft gemiedene Forensuchen ist auch mal einen Blick wert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
sahry

Registriert seit: 19. Dez 2009
2 Beiträge
 
#5

Re: Brauche dringend Hilfe für letztes Uni Projekt

  Alt 20. Dez 2009, 01:12
Wie ich sie von Hand umrechne ist mir schon klar.
Bei den ganzen Zahlen würde ich es wohl so machen
Delphi-Quellcode:
x:= StrToInt(MaskEditEingabeInt.Text);
i:=x;
repeat
y:=(i mod 16);
i:=trunc(int(i/16));
hexa:=s[y]+hexa
until i=0;
und bei dem binär System halt mir mod 2.

Da weiß ich aber nich wie ich die Vorzeichen sinnvoll einfügen kann.


Aber was ist den mit dem Kommazahlen?

da müsste ich theoretisch einmal die Vorkommazahl und die Nachkommazahl seperat berechnen lassen dann noch die Zahl normieren oder wie das heißt und dann noch den Exponenten umrechnen und dann aus allem zusammen die Gleitkommazahl der internen Darstellung bilden oder wie? Weil ich soll ja die Interne Darstellung des Rechners angeben und nich einfach umrechnen. Das ist doch ein Unterschied.

Weil 18,4 einfach umgerechnet ist: 10010,011001100110011...
als Gleitkommazahl dagegen ist 18,4= 0 10000011 00100110011001100110011
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Umrechnung in die interne Zahlendarstellung eines Rechne

  Alt 20. Dez 2009, 02:42
Da dürfte dich zum einen dieser Artikel interessieren, genauer aber wohl eher der hier, der sich auf die in Computern meist verwendeten Fließkommazahlen bezieht, und u.a. auch Umrechnungsmöglichkeiten angibt.
Edit: Ich seh grad, dass ihr sehr spezifische Normen, u.a. auch 128Bit Floats umrechnen müsst. Da wäre der erste Artikel erstmal interessanter, da er generell auf Floats eingeht. Der 2. bezieht sich auf die heutzutage in Home-PCs üblicherweise verwendeten Normen. Der folgende Tipp ist daher nur eingeschränkt in deinem Beispiel verwendbar.

Für den Fall, dass ihr die Umrechnung nicht unbedingt bauen müsst, sondern es eher um die Anzeige geht, kann man sich auch mit ein wenig "Tricksen" (variante Records) behelfen:
Delphi-Quellcode:
type
  TDoubleRec = record
    case Boolean of
      true: Float: Double;
      false: Bytes: packed array[0..7] of Byte;
    end;
  end;
Wenn du einer Variablen von dem Typ (nennen wir sie mal "Foo") nun via "Foo.Float := 3.1415629;" einen Wert zuweist, stehen im Array "Foo.Bytes[]" die einzenen Bytes die zu der internen Darstellung gehören. Die Bytes nun wie gewohnt in Binärdarstellung bringen und hintereinander schreiben, und du müsstest es haben. Eventuell muss man dabei noch die Endianness beachten.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#7

Re: Umrechnung in die interne Zahlendarstellung eines Rechne

  Alt 20. Dez 2009, 10:18
Zitat von Medium:
Edit: Ich seh grad, dass ihr sehr spezifische Normen, u.a. auch 128Bit Floats umrechnen müsst.
Jupp, genau hier muß man wohl selber die Darstllung errechnen und kann nicht abgucken, so wie bei den IEEE-Formaten, welche Windows, bzw. der PC kennt.
Also vermute ich mal, daß diese IEEE-Typen auch selber berechnet werden sollen.


PS: Was ist ein 32-Bit-Festpunkt?
Das sagt mir nichts in welchem Format und mit wieviel Nachkommastellen das sein soll.

Currency ist z.B. ein 64-Bit Festpunkttyp mit 4 Nachkommestellen und in der Zweierkomplement-Darstellung,
also Int64/10000.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz