Forum
Tipps
News
Menu-Icon

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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.

Und für was genau braucht man diese Funktionen ?. Ohnen diesen Funktionen funktioniert das Programm nicht oder ?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Richtig. Die eigentliche Arbeit machen die Funktionen umrechnen_dez_dual und umrechnen_dual_dez. Und wenn du genau hinschaust, wirst du feststellen, dass diese Hilfsfunktionen dort aufgerufen werden.

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.

 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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;
« Letzte Änderung: 05.06.08, 20:42:56 von Lisaa »

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. 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
rval - was ist das genau ?
Kurz für return value (Rückgabewert). Das Ergebnis halt.

Zitat
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.

Zitat
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 !

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
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...

Zitat
rval:= rval * 2 + StrToInt ( number{i} );
Rückgabewert (rval) wird mit 2 multipliziert und dannach ?.
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):
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.
« Letzte Änderung: 05.06.08, 20:45:18 von Lisaa »

danke sehr. das hab ich jetzt verstanden - hoff ich mal :)

find ich echt klasse das du mir da so behilflich bist !.

schönen abend noch.


« mehrdimensionale arrays in C++Java: Button IOException??? »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Generations-Prinzip
Das Generations-Prinzip wird auch als das "Opa-Vater-Sohn-Prinzip" bezeichnet. Dieses Rotationsschema zur Speicherung von Daten ist eine überschreibende Datensicheru...

Hostname
Ein Hostname ist der eindeutige Name, der einem Gerät in einem Netzwerk zugewiesen wird. Dieser Name wird (parallel zu der IP Adresse) verwendet, um das Gerät i...

STRG
Die STRG-Taste, abgekürzt für "Steuerung" - auf englischen Tastaturen CTRL (für "Control") genannt - ist eine der wichtigsten Tasten unter Windows und Linu...