![]() |
Umrechnung in die interne Zahlendarstellung eines Rechners
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Für weitere und genauere Infos steh ich zur Verfügung
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; [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] |
Re: Brauche dringend Hilfe für letztes Uni Projekt
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:
|
Re: Brauche dringend Hilfe für letztes Uni Projekt
Zitat:
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. |
Re: Brauche dringend Hilfe für letztes Uni Projekt
Und die viel verschmähte und oft gemiedene Forensuchen ist auch mal einen Blick wert. ;)
|
Re: Brauche dringend Hilfe für letztes Uni Projekt
Wie ich sie von Hand umrechne ist mir schon klar.
Bei den ganzen Zahlen würde ich es wohl so machen
Delphi-Quellcode:
und bei dem binär System halt mir mod 2.
x:= StrToInt(MaskEditEingabeInt.Text);
i:=x; repeat y:=(i mod 16); i:=trunc(int(i/16)); hexa:=s[y]+hexa until i=0; 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 |
Re: Umrechnung in die interne Zahlendarstellung eines Rechne
Da dürfte dich zum einen
![]() ![]() 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:
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
type
TDoubleRec = record case Boolean of true: Float: Double; false: Bytes: packed array[0..7] of Byte; end; end; ![]() |
Re: Umrechnung in die interne Zahlendarstellung eines Rechne
Zitat:
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 ![]() also Int64/10000. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz