Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Dezimalzahlen ins Binärsystem (https://www.delphipraxis.net/155710-dezimalzahlen-ins-binaersystem.html)

NewDelphiBenutzer 4. Nov 2010 14:52

Dezimalzahlen ins Binärsystem
 
Hey Leute ich wollte ein Programm machen als freiwillige Zusatzhausaufgabe. Und da soll am Ende folgendermaßen aussehen: Man soll in ein Editfeld eine Zahl eingeben. Und diese Zahl soll dann ins Binärsystem umgewandelt werden.

Und zwar sind unter dem Editfeld 8 Checkboxen.
Das Programm soll entsprechend der Zahl Kreuze in die Boxen setzen.
Beispiel: Benutzer gibt 200 ins Editfeld ein.
Die Boxen sind von links nach rechts immer weniger wert.
128,64,32,16,8,4,2,1
x x / / x

Weil von 200 werden erst 128 angekreuzt, dann bleiben ja noch 72 übrig. Dann muss das Programm gucken in 72 passt 64 auch noch rein. Danach bleibt ja noch 8 übrig, dann guckt das Programm okay 32 und 16 gehen nicht, da soll kein Kreuz hin. Aber 8 sind übrig perfekt. Da kommt dann noch ein kreuz hin. Und die Anordnung kommt halt immer auf die Zahl an. Und das sollen wir irgendwie mit mod und dif machen aber ich weiß nicht genau wie meine diese Funktion anwendet. DAs ist ja immer etwas mit Rest. Ich habe auf jeden Fall eine Variable namens Dezimalzahl. Und ich wollte fragen wie ich das anfangen soll, damit das Programm funktioniert. Ich bräuchte eine kleine Starthilfe.
Würde mich sehr freuen !
Liebe Grüße Alex :)

Assarbad 4. Nov 2010 14:55

AW: Dezimalzahlen ins Binärsystem
 
Das Prinzip ist. Aber es ist deine Aufgabe. Starthilfe hast du nun. Benutze ein logisches UND (in Delphi and).

Code:
if(zahl and $01)then // Box für Bit 0
if(zahl and $02)then // Box für Bit 1
if(zahl and $04)then // Box für Bit 2
if(zahl and $08)then // Box für Bit 3
if(zahl and $10)then // Box für Bit 4

implementation 4. Nov 2010 14:58

AW: Dezimalzahlen ins Binärsystem
 
Mod und Div brauchste doch gar nisch?
Hier mal ein kleiner Pseudocode, wie das Umwandeln für den Anfang aussehen könnte:
Code:
LIES Editfeld AUS => VARIABLE "s"
WANDLE "s" MITTELS "IntToStr" IN "Integer" UM => VARIABLE "i"

WENN "i" >= 128 DANN
  SETZE höchstes bit (msb)
  ZIEHE 128 VON "i" AB

WENN "i" >= 64 DANN
  SETZE zweithöchstes bit
  ZIEHE 64 VON "i" AB

...
//Edit: War mal wieder jemand schneller ... Aber na gut, sind ja auch 2 unterscheidliche Ansätze :stupid:

NewDelphiBenutzer 4. Nov 2010 15:00

AW: Dezimalzahlen ins Binärsystem
 
aber wir müssen das mit mod und dif machen das ist die letzte vorbereitungsmöglichkeit für die am montag anstehende Klausur, weil wir das mit dem, was ihr vorgeschlagen habt, noch nicht hatten =(

Assarbad 4. Nov 2010 15:00

AW: Dezimalzahlen ins Binärsystem
 
Zitat:

Zitat von implementation (Beitrag 1059650)
//Edit: War mal wieder jemand schneller ... Aber na gut, sind ja auch 2 unterscheidliche Ansätze :stupid:

Allerdings. Und deiner zeigt, finde ich, sehr gut eine weitere Eigenschaft von Binärzahlen. :thumb:

implementation 4. Nov 2010 15:02

AW: Dezimalzahlen ins Binärsystem
 
Zitat:

Zitat von NewDelphiBenutzer
aber wir müssen das mit mod und dif machen

Hmm, okay. Dann benutzen wir statt des Abziehens einfach Mod und statt des Testens auf GrößerGleich eben Div :stupid:
Code:
WENN i div 128 = 1 DANN
  SETZE BOX
  i = i mod 128
:gruebel:

Neutral General 4. Nov 2010 15:02

AW: Dezimalzahlen ins Binärsystem
 
Ich gebe dir mal einen Ansatz/Beispiel:

10 : 2 = 5 Rest 0
5 : 2 = 2 Rest 1
2 : 2 = 1 Rest 0
1 : 2 = 0 Rest 1

Die Reste von oben nach unten ergeben dann die Binärzahl: 1010

5 div 2 = 2
5 mod 2 = 1

Damit lässt sich denke ich mal was anfangen ;)

NewDelphiBenutzer 4. Nov 2010 15:13

AW: Dezimalzahlen ins Binärsystem
 
hmm also soll ich schreiben
Delphi-Quellcode:
if dezimalzahl div128=1
          then checkbox128.check;
und muss das nicht irgendwas mit boolean rein oder so? das sagt mein delphi und mein lehrer hat es auch erwähnt, aber ich wusste nich, was das bedeutet. ich bin echt ziemlich blöd

Assarbad 4. Nov 2010 15:14

AW: Dezimalzahlen ins Binärsystem
 
Leuts, ich hab das Gefühl, daß hier schon ein paar Grundlagen fehlen. Es geht ja hier mal nicht nur um die Darstellungsweise.

Aber nochmal, es ist deine Aufgabe. Wenn dein Lehrer in der Klausur was abgewandeltes fragt, hilft dir die exakte Lösung eines spezifischen Problems auch nicht mehr. Also versuch doch mal es wenigstens zu verstehen ... okay?

Zitat:

Zitat von NewDelphiBenutzer (Beitrag 1059652)
aber wir müssen das mit mod und dif machen das ist die letzte vorbereitungsmöglichkeit für die am montag anstehende Klausur, weil wir das mit dem, was ihr vorgeschlagen habt, noch nicht hatten =(

Okay, da du was lernen und begreifen sollst, versuchen wir doch mal was anderes.

Was weißt du über Dezimalzahlen, Binärzahlen und Hexadezimalzahlen und deren Zusammenhänge?
Hier mal eine kleine, vielleicht überraschende, Eigenschaft:

Code:
dez  hex  bin
 0    00     0000
 1    01     0001 *
 2    02     0010 *
 3    03     0011
 4    04     0100 *
 5    05     0101
 6    06     0110
 7    07     0111
 8    08     1000 *
 9    09     1001
10    0A    1010
11    0B    1011
12    0C    1100
13    0D    1101
14    0E    1110
15    0F    1111
-----------------
16    10    10000 *
Erkennst du das Muster? Siehst du, daß eine Hexadezimalstelle immer exakt 4 Bits entspricht (also Binärstellen)? ... siehste was bei den markierten Zahlen?

Nun gebe ich dir eine Hexadezimalzahl. Wie schnell kannst du die in eine Binärzahl umwandeln (ohne Taschenrechner) und wie hast du es gemacht?

Kannst du den Zusammenhang mit dem Code oben erkennen? Und den mit dem Vorkommen von 128 in den Codebeispielen?

DeddyH 4. Nov 2010 15:15

AW: Dezimalzahlen ins Binärsystem
 
2 Möglichkeiten:
Delphi-Quellcode:
if dezimalzahl div 128 = 1 then
  checkbox128.checked := true
else
  checkbox128.checked := false;
Oder eleganter:
Delphi-Quellcode:
checkbox128.checked := dezimalzahl div 128 = 1;

implementation 4. Nov 2010 15:18

AW: Dezimalzahlen ins Binärsystem
 
Zitat:

Zitat von DeddyH (Beitrag 1059659)
2 Möglichkeiten:
Delphi-Quellcode:
if dezimalzahl div 128 = 1 then
  checkbox128.checked := true
else
  checkbox128.checked := false;
Oder eleganter:
Delphi-Quellcode:
checkbox128.checked := dezimalzahl div 128 = 1;

Man bedenke, dass nachfolgende Mod nicht zu vergessen, sonst kommt bei 64, 32, 16, 8, 4, 2 und 1 nur Crap raus.:warn:

DeddyH 4. Nov 2010 15:23

AW: Dezimalzahlen ins Binärsystem
 
Es ging doch in meinem Post nur darum, wie man eine Checkbox checkt ;)

implementation 4. Nov 2010 15:25

AW: Dezimalzahlen ins Binärsystem
 
Zitat:

Zitat von DeddyH (Beitrag 1059662)
Es ging doch in meinem Post nur darum, wie man eine Checkbox checkt ;)

War auch keine Kritik an dich, ich wollte nur vermeiden, dass der TE das nachher noch vergisst und habe es daher vorsichtshalber nochmal gepostet :cyclops:

NewDelphiBenutzer 4. Nov 2010 15:26

AW: Dezimalzahlen ins Binärsystem
 
das müssten dann ja 10.000.000 sein, wenn man das Muster verfolgt.

implementation 4. Nov 2010 15:29

AW: Dezimalzahlen ins Binärsystem
 
Zitat:

Zitat von NewDelphiBenutzer (Beitrag 1059664)
das müssten dann ja 10.000.000 sein, wenn man das Muster verfolgt.

Was jetzt? dec 128 => bin? Dann rechne lieber nochmal nach :wink:

Assarbad 4. Nov 2010 15:31

AW: Dezimalzahlen ins Binärsystem
 
Zitat:

Zitat von implementation (Beitrag 1059665)
Was jetzt? dec 128 => bin? Dann rechne lieber nochmal nach :wink:

Hmm? :gruebel:

implementation 4. Nov 2010 15:35

AW: Dezimalzahlen ins Binärsystem
 
Steinige mich, ich hatte einen Moment geistiger Umnachtung :wall:

NewDelphiBenutzer 4. Nov 2010 15:36

AW: Dezimalzahlen ins Binärsystem
 
hmm was denn jetzt??? ich habe das muster verstannden
die zahlen 1,2,4,8,16,32 usw sich wird ne null hinten rangehängt bei den binärzahlen bei jeder verdopplung

NewDelphiBenutzer 4. Nov 2010 15:46

AW: Dezimalzahlen ins Binärsystem
 
also wie soll ich das jetzt machen ich muss ja noch irgendwas mit strTofloat oder so einfügen ich versteh es irgendwie nicht

DeddyH 4. Nov 2010 15:54

AW: Dezimalzahlen ins Binärsystem
 
Du musst nur den Inhalt des Edits in eine Zahl wandeln, die Du dann untersuchen kannst. Dazu kannst Du StrToInt oder besser TryStrToInt verwenden.

Assarbad 4. Nov 2010 17:00

AW: Dezimalzahlen ins Binärsystem
 
Zitat:

Zitat von NewDelphiBenutzer (Beitrag 1059670)
hmm was denn jetzt??? ich habe das muster verstannden
die zahlen 1,2,4,8,16,32 usw sich wird ne null hinten rangehängt bei den binärzahlen bei jeder verdopplung

... beißt sich irgendwie mit:

Zitat:

Zitat von NewDelphiBenutzer (Beitrag 1059674)
also wie soll ich das jetzt machen ich muss ja noch irgendwas mit strTofloat oder so einfügen ich versteh es irgendwie nicht

Das TEdit bekommt die Zahl als Text. Dann wandelst du die um wie Detlef es beschrieben hat. Dann hast du die Zahl als Integer (Ganzzahl) und solltest diese nun überprüfen um sicherzustellen, daß der Wert zwischen 0 und 255 liegt (mehr paßt nicht in 8 bit, bzw. Checkboxen). Und dann wendest du das Muster an welches implementation und Neutral General beschrieben haben (meins ging ja nicht, weil div und mod dri sein sollten). Wo hakt es denn? Wenn du möchtest, daß dir geholfen wird, solltest du nicht voraussetzen, daß wir hier alle mit Glaskugeln :glaskugel: rumsitzen ...

Wenn du deine komplette Aufgabe vorgekaut und gelöst haben willst, kann das hier sicher jemand machen. Fähig dürften die meisten sein und vielleicht findest du einen der es auch reinklimpert. Das bringt dir aber nichts, außer daß du deinem Lehrer die Aufgabe abgeben kannst und behauptest es sei deine Lösung. Bei mir bist du da an der falschen Stelle. Das haben zwei ehemalige Klassenkolleginnen (aus der Primarstufe, in der Sekundarstufe I waren sie in anderen Schulen) von mir mal bitter von ihrer Russischlehrerin erfahren, nachdem sie eine Übersetzung von mir haben machen lassen und ich die mit ein paar Kommentaren ausgeschmückt habe wie langweilig es doch sei für die beiden die Übersetzung zu machen. Hätten die einmal drübergelesen und versucht es zu verstehen, hätten sie es bemerkt und es vor Abgabe filtern können. Aber die haben es 1:1 übernommen ohne es zu begreifen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 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