Schrift
[thread]7465[/thread]

binäre in dezimal



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Gast Gast
 2005-11-13 15:19
#60069 #60069
Hallo,

ich möchte eine Binärzahl in eine Dezimalzahl umwandeln.

Es handelt sich dabei um eine Übungsaufgabe.

Ich darf also keine vorgefertigte Perl Funktionen (wie z.b. sprintf oder so) benutzen.

Mein Problem liegt darin das ich nicht weiss wie ich eine Variable also z.b. $binzahl in ein array umwandeln.

$binzahl enthält einen Zahlenfolge aus Nullen und Einsen. (11010)

Über das array möchte ich auf jedes Element der Zahlenfolge zugreifen können.

Cu
afro

--------
www.uni-forum.ath.cx
renee
 2005-11-13 15:26
#60070 #60070
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
umwandeln in ein Array: perldoc -f split
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2005-11-13 15:58
#60071 #60071
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und wenn du kein array willst, könntest du mit Hilfe von substr auf jeweils ein Element des Strings zu greifen
Ronnie
 2005-11-13 16:02
#60072 #60072
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
in 8er Blöcke trennen, jeden 8er Block nocheinmal zerlegen und gemäß dem Stellenwert multiplizieren 2^x, zuletzt aufaddieren.
esskar
 2005-11-13 16:29
#60073 #60073
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wieso 8er blöcke? muss man nicht!
lichtkind
 2005-11-13 16:33
#60074 #60074
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
wenn es nur ums umwandeln geht reicht doch chop aus.
das liefert dir immer den letze ziffer. solang die variable noch inhalt hat, brauchst du nur jedesmal einen wert mit sich selbst addieren (+=; *2 geht auch) und wenn chop positiv liefert addierst du den wert auf die summe und so hast die zahl umgewandelt.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
esskar
 2005-11-13 16:38
#60075 #60075
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=lichtkind,13.11.2005, 15:33]wenn es nur ums umwandeln geht reicht doch chop aus.
das liefert dir immer den letze ziffer. solang die variable noch inhalt hat, brauchst du nur jedesmal einen wert mit sich selbst addieren (+=; *2 geht auch) und wenn chop positiv liefert addierst du den wert auf die summe und so hast die zahl umgewandelt.[/quote]
chop ist nicht gut, da man ja immer das i der i-ten Stelle braucht.\n\n

<!--EDIT|esskar|1131892811-->
lichtkind
 2005-11-13 17:03
#60076 #60076
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
mir gings erstmal um das umwandeln und wenn in der schleife i mal chop anwendet kommt man auch bis zur i ten stelle
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Dubu
 2005-11-13 17:09
#60077 #60077
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich finde das geht sehr gut mit chop().
Code: (dl )
1
2
> perl -le '$x=shift;$n=1;while($x){$_+=$n*chop$x;$n*=2};print' 101010
42
J-jayz-Z
 2005-11-13 19:37
#60078 #60078
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielleicht als lesbares script (da es ja eine "Hausaufgabe" war):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use strict;
use warnings;

my $x = shift(); #Übergabe sichern
my $n = 1; #$n auf 1 setzen
while($x) { #Solange $x war ist
$_ +=$n*chop($x); #Addiere $n*letztes Element von $x und entferne es
$n *= 2; #Und $n man 2 und in $n sichern
}

print $_ . "\n"; #Und ausgeben

Aber ich muss sagen, sowas macht die Theorie viel klarer wie jedes Lehrbuch ... :p

EDIT: C&P is nich das beste für die formatierung ...\n\n

<!--EDIT|J-jayz-Z|1131903533-->
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-11-13 15:19.