Autor |
Beitrag |
-Nala-
      
Beiträge: 62
|
Verfasst: Sa 16.02.08 17:22
Hallo!
Ich habe eine Frage !
Für die Schule muss ich ein Programm schreiben, indem man Binärzahlen ins Dezimalsystem (und umgekehrt) rechnen kann. Ich habe allerdings keine Ahnung wie man das in die Unit eingibt ???
Könnt ihr mir vielleicht helfen ?
THX
|
|
LorenzS
      
Beiträge: 128
MS-DOS, WIN 7, WIN 10
BP7.0, D3, D5
|
Verfasst: Sa 16.02.08 17:51
Zuletzt bearbeitet von LorenzS am Sa 16.02.08 21:16, insgesamt 1-mal bearbeitet
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 16.02.08 18:04
Hi,
LorenzS hat folgendes geschrieben: | versuch mal mit IntToStr und StrToInt.
die frage ist was ist für dich eine Binäre Zahl? Int64/Longword/Integer/Word/Byte oder ein String aus den Zeichen '0' und '1'? |
Das hilft doch nicht, gefragt ist nicht nach einer Umwandlung in string, sondern in Binär!
Mit BINÄRCODE hast du dich schon beschäftigt?
Dann ist die Binärzahl gleich der Summe der Bitwerte - z.B.:
Quelltext 1: 2:
| 10001011 -> 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 10001011 -> 128*1 + 64*0 + 32*0 + 16*0 + 8*1 + 4*0 + 2*1 + 1*1 = 119 |
Ich weiss nicht, inwieweit du eine optimierte Lösung brauchst, also die Methode nachher auch verwenden willst...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function BinaerToDezimal(pBinaerzahl: array of (0,1)): Integer; var i: Integer; begin result := 0; if length(pBinaerzahl) <> 0 then begin for i := 0 to high(pBinaerzahl) do begin inc(result,pBinaerzahl[i] * Power(2,Index1)); end; end; end; |
Eventuell gibt es auch eine Möglichkeit die ausnutzt, dass der Computer intern ja sowieso mit Binärzahlen rechnet. Das varlangt dein Lehrer aber glaub' ich nicht - denn der will ja, dass du dich mit Binärzahlen beschäftigst.
Das geht bestimmt besser - ich glaube nicht, dass Boolean die Optimallösung dafür ist. Gibt es eig. den Datentyp bit, also bit = (0,1)??? Unter dem Namen schonmal nicht..
Edit: Überarbeitet und präzisiert.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Zuletzt bearbeitet von Hidden am So 17.02.08 09:03, insgesamt 3-mal bearbeitet
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Sa 16.02.08 18:07
LorenzS hat folgendes geschrieben: | versuch mal mit IntToStr und StrToInt. |
LorenzS hat folgendes geschrieben: | die frage ist was ist für dich eine Binäre Zahl? Int64/Longword/Integer/Word/Byte oder ein String aus den Zeichen '0' und '1'? |
theoretisch, zBsp: 0010b
zum Thema
wie würdest Du es auf dem Papier machen? Probiere es einmal schriftlich durch und setze dies dann in einer Prozedure um! Wenn es dann Probleme gibt, frage konkret weiter.
Hier mach keiner deine HA ohne Geld,
für 20€ sende ich Dir die Proc. zu, 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Sa 16.02.08 18:09
@Hidden: Na, da wird er ja toll lernen, bekommt 'ne Eins und wird hoffentlich Dein Kollege, der keinerlei Ahnung, aber 'ne Eins hat, 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 16.02.08 19:03
Kroko hat folgendes geschrieben: | @Hidden: Na, da wird er ja toll lernen, bekommt 'ne Eins und wird hoffentlich Dein Kollege, der keinerlei Ahnung, aber 'ne Eins hat,  |
Hi, Kroko
Was ich meinte war, dass dies dem Lehrer genügen könnte aber eigentlich eine unschöne, nicht zu sagen hässliche Lösung ist.
Edit: doppelquote entfernt.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Sa 16.02.08 19:47
@Hidden: Es ist aber Deine und nicht seine Lösung 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 16.02.08 20:19
@ Kroko:
Hab' absichtlich nur die Hälfte geschrieben,
die muss er verstehen, um die zweite zu schreiben...
[/OT]
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 17.02.08 01:19
Moin!
Hidden hat folgendes geschrieben: | Mit BINÄRCODE hast du dich schon beschäftigt?
[...]
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| Index1, Fakultaet: Integer; [...] Fakultaet := 1; for Index1 := 0 to high(pBinaerzahl) do begin if pBinaerzahl[Index1] then inc(result,Fakultaet); Fakultaet := 2 * Fakultaet; | |
Vielleicht solltest du dich besser nochmal mit der Fakultät beschäftigen, denn das, was du hier verwendest, ist ein Stellenwert, was eine bestimmte Potenz der Basis des Zahlensystems ist.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 17.02.08 08:36
Hi,
Eig. weiß ich das...
habe es oben berichtigt.
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: So 17.02.08 12:05
Danke schonmal für die vielen Antworten...
Also...
wenn ich es auf dem Papier machen würde, dann würde das so ablaufen :
Angenommen wir haben den Binärcode : 100110
Dann wäre die dezimalzahl = 1*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 0*2^0 = 32 + 4 + 2 = 38
(das ist im prinzip leicht zu programmieren, aber ... ich habe keine Ahnung wie ich mich inerhalb einer Zahl auf die einzelnen stellen beziehen kann...)
Andersherum ist allerdings viel mehr schreibarbeit...
Angenommen wir haben die Dezimalzahl : 38
Dann würde ich mir zuerst eine liste machen in der ich die ganzen 2^... ergebnissen :
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
da hör ich auf mit der liste .. da die 64 größer ist als die 38
Also weiß ich schonmal, dass unsere zahl 6 stellen hat...
ich fange also an : 1(für 2^5)
(ich rechne : 38 - 32 = 6)
es geht weiter: 1(für 2^5) 0 (für 2^4, da die 16 noch zu groß ist) 0 (für 2^3, da die 8 noch zu groß ist) 1 (für 2^2)
(ich rechne : 6 - 4 = 2)
es geht weiter: 1(für 2^5) 0 (für 2^4, da die 16 noch zu groß ist) 0 (für 2^3, da die 8 noch zu groß ist) 1 (für 2^2)
1(für 2^1)
(ich rechne : 2 - 2 = 0) -> alle restlichen stellen sind 0.
letzendlich ist die Binärzahl = 100110
ziemlich kompliziert...
|
|
Fabian E.
      
Beiträge: 554
Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
|
Verfasst: So 17.02.08 13:21
-Nala- hat folgendes geschrieben: |
(das ist im prinzip leicht zu programmieren, aber ... ich habe keine Ahnung wie ich mich inerhalb einer Zahl auf die einzelnen stellen beziehen kann...) |
das ist einfach. du könntest deine zahl in einen string verwandeln und dann über MyString[i] auf einzelne zeichen zugreifen. die einzelnen zeichen kannst du bei bedarf auch wieder in eine zahl umwandeln.
gruß
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: So 17.02.08 18:08
fehlt dir and?
(Zahl and 32)>0 heißt Bit6 gesetzt
(Zahl and 32)=0 heißt Bit6 nicht gesetzt
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: So 17.02.08 20:01
Bit 6 ???
Was ist das ?
und was ist Mystring ??? Wie kann ich mich genau auf die Zeichen beziehen ? Kann mir vllt. jemand einen Quelltext hochladen, in dem er dieses Mystring benutzt ?
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 17.02.08 20:08
Hi,
mit Bit6 ist Bit Nr. 6 gemeint, d.h. die Eins hier:
Quelltext
myString ist ein Beispielname für einen String.
Zu strings solltest du Tutorials finden...
DELPHI STRINGS
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: So 17.02.08 20:31
Ah ok... ich glaube jetzt hab ich es so langsam verstanden...
Ich habe folgenden Quelltext geschrieben. Allerdings zeigt der pc mir die Fehlermeldung Zeigertyp erwartet an den stellen wo ich ein hoch zeichen hingeschrieben habe. wie kann ich bei delphi potenzieren? ich habe es mit ^ gemacht.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); begin i := Edit1.text; e := StrToInt(i[1])^0 + StrToInt(i[2])^1 + StrToInt(i[3])^2 + StrToInt(i[4])^3 + StrToInt(i[5])^4 + StrToInt(i[6])^5 + StrToInt(i[7])^6 label3.Caption := 'Ergebnis : ' + IntToStr(e); end;
end. |
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 17.02.08 20:35
Das Dach ( ^ ) verwendest du bei Delphi lediglich für Pointer.
Eine Möglichkeit zu Potenzieren wäre entweder eine eigene Funktion dazu zu schreiben oder die Funktion POWER() aus der Unit Math zu benutzen.
Grüße
Marc
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 17.02.08 20:44
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: So 17.02.08 21:11
-Nala- hat folgendes geschrieben: | Bit 6 ???
Was ist das ?
... |
Nee nicht doch, Umwandlung binär in dezimal, Info und keine Ahnung von Bits, Toll!
Siehe BIT
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: Mi 20.02.08 16:43
Also... ich habe das Programm nun mit dieser Length(mystring) funktion geschrieben. Allerdings ist immer noch etwas nicht in ordnung. Hier ist der Quelltext :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); var a ,b : integer; c : extended; s : string; begin s := Edit1.Text; a := Length(s);
for b := 1 to a do begin c := StrToInt(s[b]) * power(2 , (-1 + b) ); end;
label3.caption := 'Ergebnis : ' + FloatToStr(c); end; |
man müsste die ganzen ergebnisse für c noch addieren.. aber wie programmier ich das ??
Zuletzt bearbeitet von -Nala- am Mi 20.02.08 17:00, insgesamt 1-mal bearbeitet
|
|