Im Prinzip machen die Funktionen genau das, was der Name sagt. Bei StrToInt/IntToStr ist es einfach, hier wird einfach Str() bzw. Val() aufgerufen - Standardfunktionen, die nämlich genau Integer in Strings und umgekehrt wandeln.
Potenzen berechnet die Potenz aus Basis und Exponent (hier etwas unglücklich Potenz genannt). Da 2^3 = 2*2*2 wird es hier in der Schleife genau so "abgerollt". Die Basis wird mit sich selbst multipliziert und der Exponent danach um 1 verringert - und das solange bis der Exponent nur noch 1 ist. Sicherlich nicht die eleganteste Lösung, wie das hier programmiert ist (vor allem die Variablennamen) aber es funktioniert.
Pascal - Programm zum Umrechnen in die verschiedenen Zahlensysteme - – Seite 2
sorry lisa jetzt muss ich dich nochmal nerven.
Könntest du mir vielleicht noch Schritt für Schritt erklären wie die funktion dez_dual und dual_dez abläuft ?.
Ich bin noch anfänger und wenn ich das programm verstehe dann werd ich mir sicher leichter tun bei meinem programm.
nur zur zeit blick ich noch nicht so durch !.
danke schon im Voraus.
Ich hab die Funktionen mal etwas vereinfacht, vielleicht ist es dann besser zu verstehen. Sind im Grunde genommen Implementierungen der hier beschriebenen Algorithmen
FUNCTION umrechnen_dez_dual( number:INTEGER ) :STRING;
VAR rval:STRING;
BEGIN
ClrScr;
rval := '';
REPEAT
rval := IntToStr( number MOD 2 ) + rval;
number := number DIV 2;
UNTIL number = 0;
umrechnen_dez_dual := rval;
END;
(************************************************************)
FUNCTION umrechnen_dual_dez( number:STRING ) :INTEGER;
VAR rval:INTEGER;
i:INTEGER;
BEGIN
ClrScr;
rval := 0;
FOR i := 1 TO length( number ) DO
rval := rval * 2 + StrToInt( number[ i ] );
umrechnen_dual_dez := rval;
END;
Ok ich versuchs mal in worten zu erklären, sag mir dann bitte ob ich etwas falsch habe.
umrechnen_dez_duau
rval - was ist das genau ?
1) bildschirm wird gelöscht
2) rval bekommt die zeichen ``;
danach wird rval berechnet. die eingebene zahl MOD 2 + nochmal rval;
jetzt wird dividiert durch 2
Solange bis 0 rauskommt.
Versteh ich das so richtig ?. ich hoffe du weißt was ich damit meine
.
ich würde das halt gerne in worten erklären können...
danke für die tipps.
rval - was ist das genau ?Kurz für return value (Rückgabewert). Das Ergebnis halt.
2) rval bekommt die zeichen ``;'' steht für den leeren String, d.h. rval wird damit initialisiert. Dadurch stelle ich sicher, dass da nicht schon was drinsteht, weil ich später nur noch anhänge.
danach wird rval berechnet. die eingebene zahl MOD 2 + nochmal rval;Genau. In jedem Durchgang wird der ganzzahlige Rest (das Ergebnis von zahl MOD 2) *vorne* an den String angefügt. Also jedesmal eine 0 oder eine 1. Danach die Zahl halbiert. Solange bis sie 0 ist. Also wird hier genau das gemacht: http://de.wikipedia.org/wiki/Dualsystem#vom_Dezimalsystem_ins_Dualsystem
oke, also die erste hab ich mal verstanden ! 
jetzt die zweite dual_dez
Bildschirm wird gelöscht.
Und der rückgabewert (rval) wird auf null gesetzt.
Danach i:=0 TO length ( number) Do - > das versteh ich nicht ??
rval:= rval * 2 + StrToInt ( number{i} );
Rückgabewert (rval) wird mit 2 multipliziert und dannach ?.
sorry das ich mich so dumm anstelle aber ich glaube danach sind wir fertig und ich kenne mich aus !
Danach i:=0 TO length ( number) Do - > das versteh ich nicht ??Die Zahl ist ja eine Folge von 1en und 0en. Das was gleich passiert, muss für jede davon gemacht werden. Also von der ersten bis zur letzten. Die erste hat den Index 1*, die letzte kriege ich mit length( number ) raus, was einfach nur die Anzahl der Zeichen in dem String zurückliefert.
*) In der Funktion ist ein Fehler, es muss heißen FOR i:=1 TO ... in Pascal wird ja ab 1 gezählt, in anderen Programmiersprachen immer ab 0. Ich frage mich nur gerade, warum es trotzdem funktioniert...
rval:= rval * 2 + StrToInt ( number{i} );Danach wird die Zahl an der i-ten Position unserer Dualzahl dazuaddiert. Gemäß diesem Algorithmus (2. Tabelle, Prior value ist hier rval und Next Bit entspricht eben number):
Rückgabewert (rval) wird mit 2 multipliziert und dannach ?.
http://en.wikipedia.org/wiki/Binary_numeral_system#Decimal
Das ist ein etwas anderer Algorithmus als der ursprüngliche, der mit Potenzen gearbeitet hat. Ich finde diesen schöner und man braucht auch die Potenzen-Funktion nicht mehr.
| « mehrdimensionale arrays in C++ | Java: Button IOException??? » | ||
