2er Potenzen berechnen

Neue Frage »

KingChrisyLive Auf diesen Beitrag antworten »
2er Potenzen berechnen
Hallo smile
Ich hoffe hier Hilfe zu finden,was ich bis jetzt schon selbst versucht habe ?
Ich habe mir eine ganze Weile Gedanken über die Aufgabe gemacht aber komm einfach nicht auf den Lösungsweg obwohl mir die Lösung vorliegt. Ich habe auf verschiedenen Seiten geschaut,jedoch nichts brauchbares gefunden,jedenfalls meines Erachtens nicht braucbbares. Die Aufgabe ist folgende:

Suchen Sie die größte in der Zahl vorkommende Zweierpotenz (2n), eventuell durch Ausprobieren (fortgesetztes Verdoppeln von 2). Bei 374 wäre dies 256 (28).

Warum ist das so und wie lautet der Lösungsweg,es ist wirklich wichtig,dass ich das verstehe.
Draos Auf diesen Beitrag antworten »
RE: 2er Potenzen berechnen
So wie ich dass verstehe, bekommt man eine Zahl x und soll sagen, welche größte Zweierpotenz () zwischen 0 und der Zahl x liegt.

Der Weg wäre ausprobieren oder über Logarithmen (in den Fall Basis 2, also )

Anwendungsbeispiel wäre Informatik oder Umrechnung generell von Zahlensystemen (Hexa-,Octal-, Dual- und Dezimalsystem)
KingChrisyLive Auf diesen Beitrag antworten »

Genau,es geht darum,dass ich Dualzahlen in Dezimalzahlen umrechnen möchte.
Was soll ich denn wie ausprobieren ? In der Aufgabe selbst steht ja,ich soll durch fortgesetztes verdoppeln die höchste in der Zahl vorkommende Zweierpotenz finden,aber wie geh ich da genau vor ? Vielleicht würde mich das schon ein Stück weiter bringen.
frank09 Auf diesen Beitrag antworten »

Du suchst ja die(größte ganzahlige) Lösung für n der Gleichung:

logarithmieren



n dann ganzzahlig abrunden und in für die Lösung der Aufgabe einsetzen.

Anderer Ansatz: x sooft halbieren bis
Anzahl Halbierungen entspricht deinem n.

Siehe auch hier:
Dezimal-Dual-Hexadezimalsystem
Mystic Auf diesen Beitrag antworten »

Eine Umwandlung dezimal -> binär so vorzunehmen, indem man die höchstwertigsten Stellen der Binärdarstellung zuerst bestimmt, ist zwar aus algorithmischer Sicht ein Wahnsinn, trotzdem habe ich dir nachfolgend den DERIVE-Code dafür hingeschrieben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
binary(n, p_ := 1, s_ := []) :=
PROG(
    LOOP(      
       IF(p_ > n, exit),
        p_ := SHIFT(p_, 1)),
    LOOP(p_ := SHIFT(p_, -1),
       IF(p_ = 0, RETURN REVERSE(s_)),
       s_ := ADJOIN(IF(p_ <= n), s_),
       n :- FIRST(s_)·p_))

binary(22) = [1, 0, 1, 1, 0]

Hier wird im ersten loop die Zahl p_, die anfangs den Wert 1 hatte, solange verdoppelt, bis p_>n gilt und dann die Schleife verlassen. Beim Eintritt in die zweite Schleife wird p_ als erstes halbiert, d.h., man hat damit die größte Zweierpotenz p_, für welche gerade noch gilt p_<=n. Die einzelnen Bits von n werden dann von links nach rechts im Vektor s_eingesammelt mit Hilfe der Funktion if(p_<=n), welche 1 oder 0 liefert, je nachdem, ob die Bedingung erfüllt ist oder nicht. Allerdings geschieht das in verkehrter reihenfolge, sodass s_ vor der Ausgabe noch umgedreht werden muss.

Und wie geht es richtig, d.h. Bestimmung der Binärdarstellung von rechts nach links statt von links nach rechts wie oben? Auch hier ein Derive-Programm, das nun hoffentlich selbsterklärend ist.

code:
1:
2:
3:
4:
5:
binary(n, s_ := []) := 
LOOP(
    IF(n = 0, RETURN s_),
    s_ := ADJOIN(IF(ODD?(n)), s_),
    n := SHIFT(n, -1))

binary(22) = [1, 0, 1, 1, 0]

Es ist kürzer, es ist schneller, es ist logischer, man braucht insbesondere auch die größte Zweierpotenz p<=n gar nicht... Mit einem Wort, es ist der ersten Version haushoch überlegen! Wenn du das nun selber siehst, dann hätten meine Ausführungen hier wirklich was gebracht!

Übrigens: Wenn du Derive 6.1 hast, kannst du obige Programme direkt in die Eingabezeile hineinkopieren... Ist es nicht ein Jammer, dass es dieses unendlich benutzerfreundliche und für die Schule ideale CAS offiziell nun nicht mehr gibt?
KingChrisyLive Auf diesen Beitrag antworten »

@frank09
Danke für deine Bemühungen,aber ich versteh die einzelnen Begriffe in der Rechnung nicht. Für was steht n,ln2,lnx usw. ? Das scheint wohl ne ziemlich komplexe Aufgabe zu sein die ich mir da ausgesucht habe.

@Mystic
Weisst du zufällig wo man sich dieses Programm noch besorgen kann ?
 
 
Draos Auf diesen Beitrag antworten »

ist in seinen Falle der gesuchte Exponent der Zweierpotenz.
Dies ist ein Basiswechsel eines Logarithmus. Von der bekannten Basis will man auf die Basis . (Ist eine Logarithmus-Rechenregel).





Komplex nicht, da im Endeffekt du doch nur von Dezimal- zum Dualsystem umrechnen willst.

Mal nen einfaches Verfahren.

I. ist die gegebene Zahl.
II. Schreibe eine 1, wenn ungerade ist, sonst schreibe eine 0.
III. Definiere neu mit (ganzzahlig abrunden)
IV. Wiederholen von I. bis III. bis y=0.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »