Autor Beitrag
-Nala-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

MS-DOS, WIN 7, WIN 10
BP7.0, D3, D5
BeitragVerfasst: Sa 16.02.08 17:51 
erster


Zuletzt bearbeitet von LorenzS am Sa 16.02.08 21:16, insgesamt 1-mal bearbeitet
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 16.02.08 18:04 
Hi,

user profile iconLorenzS 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 Suche in der Entwickler-Ecke BINÄRCODE hast du dich schon beschäftigt?
Dann ist die Binärzahl gleich der Summe der Bitwerte - z.B.:
ausblenden 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...
ausblenden 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));  //2^i
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Sa 16.02.08 18:07 
user profile iconLorenzS hat folgendes geschrieben:
versuch mal mit IntToStr und StrToInt.
:?:

user profile iconLorenzS 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, :lol:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 16.02.08 19:03 
user profile iconKroko 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, user profile iconKroko

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 16.02.08 20:19 
@user profile iconKroko:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 17.02.08 01:19 
Moin!

user profile iconHidden hat folgendes geschrieben:
Mit Suche in der Entwickler-Ecke BINÄRCODE hast du dich schon beschäftigt?
[...]
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  Index1, Fakultaet{Hilfsvariable}: Integer;  //Suche in der Entwickler-Ecke FAKULTÄT
[...]
    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. :mahn:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 17.02.08 08:36 
Hi,

:oops: :oops: :oops:
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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: So 17.02.08 13:21 
user profile icon-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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 17.02.08 20:08 
Hi,

mit Bit6 ist Bit Nr. 6 gemeint, d.h. die Eins hier:
ausblenden Quelltext
1:
0000100000					


myString ist ein Beispielname für einen String.
Zu strings solltest du Tutorials finden...
Suche in der Entwickler-Ecke 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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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.

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 17.02.08 20:44 
user profile icon-Nala- hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
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;


  • Denk noch einmal nach, ob so denn das richtige Ergebnis herauskommen würde.
  • deine Prozedur braucht einen konstant langen string, schau dir doch noch einmal Suche in der Entwickler-Ecke LENGTH(MYSTRING) an.

Edit: in Kombination mit der for-Schleife.

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: So 17.02.08 21:11 
user profile icon-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 Suche in Wikipedia 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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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 :

ausblenden 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