AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

bin2dec

Ein Thema von n00b_on_knees · begonnen am 5. Apr 2003 · letzter Beitrag vom 6. Apr 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#1

bin2dec

  Alt 5. Apr 2003, 19:17
Hi Leute!

Bin neu hier, mein erster Post, und gleich ne wichtige Frage für meine Hausaufgaben, ich hoffe das mir jemand helfen kann, natürlich werde ich in meiner längeren oder kürzeren Boardlaufbahn natürlich auch versuchen euch etwas zu helfen!

Also, die Aufgabenstellung: Auf Knopfdurck soll eine Binärzahl (also 0, 1) aus einem Eingabefeld eingelesen werden, daraus soll die Dezimalzahl bestimmt werden, sowie ausgegeben werden, das ganze ist auch noch in viele Unterprogramme zu unterteilen, wobei hier bei mir nicht das Problem liegt. Mein Problem ist, das ich nicht weiß wie ich Die Binärzahlen in Dezimal umwandeln soll, zuerst dachte ich ans Hornerschema, aber das geht ja denke ich nur richtig umgekehrt, über Hex umwandeln wäre zu kompliziert, Hochzahlen wären ja eine Möglichkeit, aber ich bin mir nicht sicher wie ich die Anwenden soll!
Ich hoffe ihr habt ein paar Tipps für mich!!

mfg n00b_on_knees
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#2
  Alt 5. Apr 2003, 19:24
Hallo und herzlich Willkommen im Forum!

Damit kann man dies machen, aber vorsicht, Du musst ncoh abfragen rien machen ob es immer genug Stellen sind und das keine Buchstaben dabei sind usw..
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(Byte(StrToInt(Edit1.Text))));
end;
Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#3
  Alt 5. Apr 2003, 19:29
oha das ist ja eine sehr kurze Lösung! Danke!
Werde ich auf jeden Fall mal ausprobieren, allerdings Frage ich mich ob mein Lehrer das anerkennen wird, da er sich eventuell etwas "komplizierter" haben will (abgesehen von den functionen die ja schon nerven, da es ja anders viel schneller gehen würde, aber wir müssen ja grade bei diesem Kapitel sein)! hast du (oder jemand anderes) eine etwas längere lösung?

Edit: Obwohl, ich glaube ich lass es doch bei der Lösung
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#4
  Alt 5. Apr 2003, 19:36
Also, mit Zwischenvariablen und in jeder Zeile wird was umgewandelt.
Das ist ja mal eine Herrausforderung, schriebe etwas so umständlich wie möglich. //Hmm, gar nciht so einfach

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sEdit, sErgebnis: String;
  iEdit: Integer;
  bEdit: Byte;
begin
  sEdit := Edit1.Text; //Text aus dem Edit, also Bits einer Variable zuweisen
  iEdit := StrToInt(sEdit); //Dann die Variable in einen Integer umwandeln da der Edit es als String hat
  bEdit := Byte(iEdit); //Dann den Integer in ein Byte umwandeln
  sErgebnis := IntToStr(bEdit); //Den Wert des Bytes wieder in einen String umwandeln
  ShowMessage(sErgebnis); //Und schliesslich das Ergebniss in einer Message ausgeben
end;
Besser?

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#5
  Alt 5. Apr 2003, 20:01
Hallo,
wenn Du es noch 'komplizierter' möchtest, dann schau mal:

Delphi-Quellcode:
PROCEDURE TForm1.Button1Click(Sender: TObject);
VAR
   i : integer;
   bin : Extended;
   Dec : Extended;
BEGIN
   bin := 1;
   dec := 0;
   FOR i := 1 TO length(Edit1.text) DO
      BEGIN
         bin := intpower(2, i - 1);
         IF Edit1.text[i] = '1THEN
            dec := dec + bin;
      END;
   showMessage(FloatToStr(dec));
END;
Du brauchst eine TEdit und einen TButton

Achtung: das LSB ist links! D.H. 1011 -> 2^0 + 2^2 + 2^3 = 1 + 4 + 8 = 13
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#6
  Alt 5. Apr 2003, 20:03
danke, das is mir schonmal sehr geholfen... nur wie überprüfe ich den ganzen string auf 0 und 1en? wenn darin nur jeweils eben eine Zahl wäre, würde das einfacher gehen, wie geht es mit einer if abfrage, nur weitergemacht wird, wenn sich eben 0 und 1 drin befinden, buchstaben etc. nicht? Ansonsten wird eben eine ShowMessage mit einer Fehlermeldung anegeben...
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#7
  Alt 5. Apr 2003, 20:24
Hallo,

also mit folgendem Code, kann man in dem Edit nur noch 0, 1 und BackSpace drücken, somit kann man schonmal nichts falsches eingeben.
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0', '1', #8]) then
   Key := #0;
end;
Dann gibt es beim Edit im Objekt Inspector noch die Eigenschaft MaxLegth, das stellst Du auf 8. Damit man nur 8 Stellen maximal eingeben kann. Sonst ist es ja kein Byte mehr, sondern ein Word oder sonst was.
Delphi-Quellcode:
if Lenght(Edit1.Text) < 8 then
begin
  ShowMessage('Zuwenig Stellen!');
end
else
begin
  //hier kommt dann die umrechnung rein.
end;
Das bewirkt, das Dein Code nur ausgeführt wird, wenn im Edit 8 Stellen drin sind, falls dies nicht der Fall ist, also weniger, wird dann die eine Message ausgegeben.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#8
  Alt 5. Apr 2003, 21:04
thx nochma für die ganzen antworten, ich werde das aber erst morgen ausprogrammieren... bin heute nachmittag auch die ganze zeit an einem anderem sinnlosen prog sitzen müssen!
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 6. Apr 2003, 02:05
Moin Noob on Knees,

und so ginge es auch:

Delphi-Quellcode:
function BinToInt(const AsValue : string) : integer;

const
  // In einer Binärzahl erlaubte Ziffern
  _aBinDigits = ['0','1'];

var
  iPowerOfTwo : integer; // Enthält den Wert der 2er Potenz der gerade bearbeiteten Stelle
  i : integer; // Schleifenzähler

begin
  Result := 0; // Ergebnis initialisieren
  iPowerOfTwo := 1; // mit 2 hoch 0 anfangen
  // Auf gültige Länge prüfen
  if (length(AsValue) < 1) or (length(AsValue) > 32) then
  begin // Sonst Exception erzeugen
    raise Exception.Create('Die Zahl muss zwischen 1 und 32 Stellen haben.');
  end;
  // mit der niederwertigsten Stelle anfangen und hocharbeiten
  for i := length(AsValue) downto 1 do
  begin
    // Auf gültige Ziffer prüfen
    if not (AsValue[i] in _aBinDigits) then
    begin // falls nicht Exception erzeugen
      raise Exception.Create('Es dürfen nur die Ziffern 0 und 1 vorkommen.');
    end;
    // Wenn die Stelle eine 1 ist
    if AsValue[i] = '1then
    begin // dann das entsprechende Bit setzen
      Result := Result or iPowerOfTwo;
    end;
    // Wert für nächste Stelle setzen
    iPowerOfTwo := iPowerOfTwo shl 1;
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#10
  Alt 6. Apr 2003, 09:35
Moin Christian,
Zitat von Christian Seehase:
  if (length(AsValue) < 1) or (length(AsValue) > 32) then
Das hat mich auf eine Idee gebracht.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  bByte: Byte;
  iErgebnis: Integer;
begin
  iErgebnis := 0;
  bByte := StrToInt(Edit1.Text);
  if (bByte and 1) <> 0 then
    iErgebnis := iErgebnis + 1;
  if (bByte and 2) <> 0 then
    iErgebnis := iErgebnis + 2;
  if (bByte and 4) <> 0 then
    iErgebnis := iErgebnis + 4;
  if (bByte and 8) <> 0 then
    iErgebnis := iErgebnis + 8;
  if (bByte and 16) <> 0 then
    iErgebnis := iErgebnis + 16;
  if (bByte and 32) <> 0 then
    iErgebnis := iErgebnis + 32;
  if (bByte and 64) <> 0 then
    iErgebnis := iErgebnis + 64;
  if (bByte and 128) <> 0 then
    iErgebnis := iErgebnis + 128;
  ShowMessage(IntToStr(iErgebnis));
end;
Grüsse, Daniel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:45 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