Willkommen in der Webstatt Zum Webstatt Blog und Stories
Neals am 05.10.06 17:33

Programmiere gerade ne Funktion, welche die Zahlen umcodiert, je der Basis nach, wer in den höheren Stufen Informatik hatte, weiß was ich meine.

Hier das Script:
function changebasis ($data, $basisnow, $basislater) {
// (Zahl die umgerechnet werden soll, jetzige Basis, gewünschte Basis)

// Ändert die Codierung einer Zahl

// Array mit Codezeichen
$figures = array_merge(range("0","9"), range("a", "z"));

// Code ändern
// in Dezimal umrechnen
$codelen = strlen($data); // Ermittelt die länge der Zahl
$issue = 0;
for($i=0; $i<$codelen; $i++) {
// Zeichen in Zahl umwandeln
foreach($figures as $key=>$value) {
if(strtoupper($figures[$key]) == strtoupper(substr($data, (-$i-1), 1))) {
$cipher = $key;
}
}
$issue += $cipher * pow($basisnow, $i); // Rechnet den Wert aus
/* # */echo $cipher." * ".$basisnow." ^ ".$i." = ".$issue."<br />";
}
// in gewünschten Wert umrechnen
$result = $issue;
$issue = "";
while($result > 0) {
/* # */echo "(".$result." / ".$basislater.") - ((".$result." % ".$basislater.") / ".$basislater.") R. ".($result % $basislater)." ".$figures[($result % $basislater)]."<br />";
$issue .= strtoupper($figures[($result % $basislater)]);
$result = ($result / $basislater) - (($result % $basislater) / $basislater);
/* # */echo $result."<br />";
}
return strrev($issue);
}

/* # */ sind Ausgaben um das Script zu testen

So funktioniert es auch ganz gut, wenn jedoch die ersten beiden Ziffer von links 19 sind, dann kriegt er das nicht mehr hin. Er kommt bei $result von 1 an und wenn er dann dividiert berechnet er nicht 0 Rest 1 sondern 0,1 R 0.... warum macht er das?

Ausserdem sobald die Zahlen über 11 Ziffern lang werden funzt garnichts mehr, hilfe!

netcup.de Warum gibt es hier Werbung?
Michael Michael am 05.10.06 17:41

Geht es dir tatsächlich um den Fehler? Dann schaue ich noch einmal. Ansonsten hilft dir [dok]base_convert[/dok]

Neals am 05.10.06 17:46

Das ist ja langweilig, fertige Funktionen, will es halt mal selbst Programmieren.

Snake am 05.10.06 18:35

es wäre wohl einfacher, wenn du die eingabezahl erstmal schön zu nem array aufsplittest.
tollerweise ist dann der array key gleich der stellenwertigkeit. dann kannste das, wofür du ne extra schleife brauchst, in nur einer zeile machen.

also in etwa so...

$set = array(
0=>0,
1=>1,
.....
A=>10,
B=>11,
...
);

$issue += $set[strtoupper($data{$i})]*pow($basisnow, $i);


so in etwa irgendwie...

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt