Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Integerwerte aneinander-reihen?


NetZwerg - So 04.04.04 22:55
Titel: Integerwerte aneinander-reihen?
Hallo,

ich möchte zwei Zufalls-Integer werte aneinander reihen... Ich möchte sie allerdings nicht addieren. Wie mache ich das?


Delphi-Quelltext
1:
Integer := (Random(4) + Random(4);                    


Würde ja nur bewirken, das irgendwas zwischen 0 und 6 rauskommt. Ich möchte aber das zum Beispiel 35 oder 27 rauskommt!?

Tschüss, NetZwerg :nixweiss:


toms - So 04.04.04 22:57

Hi,

Dazu musst du zuerst beide Integer Werte in einen String umwandeln
und das Resultat wieder zurück in ein Integer.

Also so:


Delphi-Quelltext
1:
Integer := StrToInt(IntToStr(Random(4)) +IntToStr(Random(3)))                    


NetZwerg - So 04.04.04 22:58

aber es geht irgendwie nich...


Delphi-Quelltext
1:
Should := StrToInt(IntToStr(Random(3))) + StrToInt(IntToStr(Random(3)));                    


Should is mein integerwert. Dann kommt immer nur 2, 5 oder so raus!?


NetZwerg - So 04.04.04 23:09

oh, hab meinen fehler!

Ich muss ja nur einmal StrToInt() und zwischen die klammern muss das ganze gedöns!


Delphi-Quelltext
1:
Should := StrToInt(IntToStr(Random(3)) + IntToStr(Random(3)));                    


bms - So 04.04.04 23:21

edit: war ich wohl zu langsam


Delete - Mo 05.04.04 09:19

Hm... also für dein Beispiel würde mir aber noch was wesentlich einfacheres einfallen:


Delphi-Quelltext
1:
Should := Random(3)*10 + Random(3);                    


NetZwerg - Mo 05.04.04 10:01

ja, hat was... so könnte man's machen! Aber is ja gut das man ma weiß wie man sowas aneinanderreiht, jetz ma unabhängig von meinem beispiel... THX! :beer:


MSCH - Mo 05.04.04 17:58

noch einfacher :-)
da du nur Werte unterhalb des Wertebereiches eines Bytes erstellst (Random (3)...) wäre
auch gut, einfach die Bytes zu verschieben.
Pseudocode:

Quelltext
1:
2:
3:
I:= Random(3);
I:= I shl 8;
I:= I and Byte(Random(2));


grez
msch


raziel - Mo 05.04.04 18:52


Quelltext
1:
2:
3:
I:= Random(3);
I:= I shl 8;
I:= I and Byte(Random(2));

hier gibs aber dann nur 7 verschiedene ergebnisse (genauso viel wie am anfang...)!

[edit]is doch eins ergebnis mehr... (hab die null vergessen)[/edit]


tommie-lie - Mo 05.04.04 20:14

MSCH hat folgendes geschrieben:
noch einfacher :-)
da du nur Werte unterhalb des Wertebereiches eines Bytes erstellst (Random (3)...) wäre
auch gut, einfach die Bytes zu verschieben.
Das würde aber nicht wie gewünscht funktionieren (zumindest nicht im Dezimalsystem) :roll:
Da wir hier keine BCD-Zahlen benutzen, steht nicht ein Byte für eine Zahl, sondern das ganze Byte für Zahlen von 0 bis 255. Bei deiner Schiebungsaktion würde also keine zweistellige Dezimalzahl rauskommen, sondern... was anderes (zu faul zum Denken bin :mrgreen:).
Die Lösung von Brainiac:Should := Random(3)*10 + Random(3);ist also schon die einzig sinnvolle und kürzeste (man kann "*10" nicht mit einfachem shiften erreichen, und der MUL-Opcode dürfteda schon das schnellste sein).