
| Current Path : /var/www/web-klick.de/dsh/90_akt/DivBasicF/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/90_akt/DivBasicF/Vector.pm |
package DivBasicF::Vector;
use strict;
sub new_Bin {
my $class = shift;
my $self = {};
my $l = shift;
my $s = shift;
bless($self,$class);
$self->init_Bin($l,$s);
return($self);
}
#*****************************************************************
sub new_Hex {
my $class = shift;
my $self = {};
my $l = shift;
my $s = shift;
bless($self,$class);
$self->{'HEX'} = $s;
$s = $self->hex_to_bin($s);
$self->init_Bin($l,$s);
return($self);
}
#****************************************************************
sub new_Dec {
my $class = shift;
my $self = {};
my $l = shift;
my $s = shift;
bless($self,$class);
$self->{'DEC'} = $s;
$s = $self->dec_to_bin($s);
$self->init_Bin($l,$s);
return($self);
}
#****************************************************************
sub init_Bin {
my $self = shift;
my $l = shift;
my $s = shift;
my $l1 = length($s);
if ($l1 > $l) {
$s = substr($s,$l1-$l);
$l1 = $l;
}
while ($l1 < $l) {
$s = "0" . $s;
$l1 = $l1 + 1;
}
$self->{'BIN'} = $s;
$self->{'LENGTH'} = $l;
}
#****************************************************************
sub to_Bin {
my $self = shift;
return($self->{'BIN'});
}
#****************************************************************
sub to_Hex {
my $self = shift;
if (!(exists($self->{'HEX'}))) {
$self->{'HEX'} = $self->bin_to_hex($self->{'BIN'});
}
return($self->{'HEX'});
}
#****************************************************************
sub to_Dec {
my $self = shift;
if (!(exists $self->{'DEC'})) {
$self->{'DEC'} = $self->bin_to_dec($self->{'BIN'});
}
return($self->{'DEC'});
}
#**************************************************************
sub bin_to_hex {
my $self = shift;
my $s = shift;
my $erg = "";
my $l; my $o;
while (0 == 0) {
$l = length($s);
last if (!$l);
if ($l < 5) {
$o = $s;
$s = "";
} else {
$o = substr($s,$l-4);
$s = substr($s,0,$l-4);
}
$o =~ /^(0*)(.*)$/;
$o = $2;
if ($o eq "") { $erg = "0" . $erg; }
elsif ($o eq "1") { $erg = "1" . $erg; }
elsif ($o eq "10") { $erg = "2" . $erg; }
elsif ($o eq "11") { $erg = "3" . $erg; }
elsif ($o eq "100") { $erg = "4" . $erg; }
elsif ($o eq "101") { $erg = "5" . $erg; }
elsif ($o eq "110") { $erg = "6" . $erg; }
elsif ($o eq "111") { $erg = "7" . $erg; }
elsif ($o eq "1000") { $erg = "8" . $erg; }
elsif ($o eq "1001") { $erg = "9" . $erg; }
elsif ($o eq "1010") { $erg = "A" . $erg; }
elsif ($o eq "1011") { $erg = "B" . $erg; }
elsif ($o eq "1100") { $erg = "C" . $erg; }
elsif ($o eq "1101") { $erg = "D" . $erg; }
elsif ($o eq "1110") { $erg = "E" . $erg; }
elsif ($o eq "1111") { $erg = "F" . $erg; }
}
return($erg);
}
#********************************************************************
sub hex_to_bin {
my $self = shift;
my $s = shift;
my $erg = "";
my $l; my $o;
while (0 == 0) {
$l = length($s);
last if (!$l);
$o = substr($s,$l-1);
$s = substr($s,0,$l-1);
if ($o eq "0") { $erg = "0000" . $erg; }
elsif ($o eq "1") { $erg = "0001" . $erg; }
elsif ($o eq "2") { $erg = "0010" . $erg; }
elsif ($o eq "3") { $erg = "0011" . $erg; }
elsif ($o eq "4") { $erg = "0100" . $erg; }
elsif ($o eq "5") { $erg = "0101" . $erg; }
elsif ($o eq "6") { $erg = "0110" . $erg; }
elsif ($o eq "7") { $erg = "0111" . $erg; }
elsif ($o eq "8") { $erg = "1000" . $erg; }
elsif ($o eq "9") { $erg = "1001" . $erg; }
elsif ($o eq "A") { $erg = "1010" . $erg; }
elsif ($o eq "B") { $erg = "1011" . $erg; }
elsif ($o eq "C") { $erg = "1100" . $erg; }
elsif ($o eq "D") { $erg = "1101" . $erg; }
elsif ($o eq "E") { $erg = "1110" . $erg; }
elsif ($o eq "F") { $erg = "1111" . $erg; }
}
return($erg);
}
#*******************************************************************
sub bin_to_dec {
my $self = shift;
my $s = shift;
my $erg = 0;
my $o; my $l;
while (0 == 0) {
$l = length($s);
last if (!$l);
$o = substr($s,0,1);
$s = substr($s,1);
$erg = 2*$erg + $o;
}
return($erg);
}
#*******************************************************************
sub dec_to_bin {
my $self = shift;
my $s = shift;
my $erg = "";
my $x = 0;
my $q = 1;
while ($q <= $s) {
$q = 2*$q;
}
while ($q > 1) {
$q = 0.5*$q;
if ($x + $q <= $s) {
$erg = $erg . "1";
$x = $x + $q;
} else {
$erg = $erg . "0";
}
}
return($erg);
}
1;