Thread RDW #B - Raetsel der Woche Nummer B (25 answers)
Opened by esskar at 2004-12-21 15:11

esskar
 2004-12-21 15:11
#50263 #50263
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
RDW #B - Raetsel der Woche Nummer B
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Regeln:  * Bitte nicht vor Ablauf der ersten 72 Stunden ( = drei Tage ) nach
~~~~~~~    Veroeffentlichung Hinweise (Spoiler) oder Loesungen veroeffent-
          lichen!

        * Wenn diese Zeit abgelaufen ist, werde ich einen Thread mit passen-
          dem Titel erstellen, in dem die Loesungen gepostet werden und dis-
          kutiert werden koennen.

        * Die Loesungen sollten nicht nur gepostet, sondern auch an mich ge-
          mailt werden, damit ich sie testen, "bewerten"  und zusammenfassen
          kann. Die Adrese dafuer lautet:

          esskar <---AT---> perl <---MINUS---> community <---DOT---> de

          Im Betreff sollte 'RDW' und die Nummer des Raetsels stehen. Hilf-
          reich waere neben dem Quellcode der Username im Forum sowie Perl-
          und OS-Version, falls Du diese kennst.

        * Verstaendnisfragen duerfen in diesem Thread gestellt werden, aber
          Tipps und (Teil-) Loesungen sind hier unerwuenscht.

        * Ich werde die eingeschickten Programme im Netz zur Verfuegung
          stellen, so dass gerade lange Quellcodes nicht (komplett)
          gepostet werden muessen.

        * Zur Verwendung von Modulen: Ich moechte diese nicht generell aus-
          schliessen, aber wenn quasi die komplette Aufgabe durch die Ver-
          wendung eines Moduls ersetzt werden kann, ist dies vielleicht nicht
          der Sinn der Aufgabe gewesen.



Aufgabe: Mit großen Zahlen rechnen
~~~~~~~~

        (Dieser Vorschlag stammt von mir, Fragen bitte an mich richten =)
       
        Schreibe ein Package Rdw::BigInt, das Lange Zahlen darstellen kann.
       
        Hier die Signatur des Packages:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
         
        package Rdw::BigInt;
       
        sub new # construktor; als optimalen parameter kann eine große Zahl als String oder ein Object vom Typ Rdw::BigIntübergeben werden
        {
           # ...
        }
       
        sub set # erhält als parameter $bigint eine große Zahl als String oder ein Object vom Typ Rdw::BigInt
        {
           my ($self, $bigint) = @_;
           # ...
        }
       
        sub add # addiert $bigintobj; $bigintobj ist vom Typ Rdw::BigInt
        {
           my ($self, $bigintobj) = @_;
           # ...
        }
       
        sub sub # subtraiert $bigintobj; $bigintobj ist vom Typ Rdw::BigInt
        {
           my ($self, $bigintobj) = @_;
           # ...
        }
       
        sub mul # multipliziert $bigintobj; $bigintobj ist vom Typ Rdw::BigInt
        {
           my ($self, $bigintobj) = @_;
           # ...
        }
       
        sub div # dividiert $bigintobj; $bigintobj ist vom Typ Rdw::BigInt
        {
           my ($self, $bigintobj) = @_;
           # ...
        }
       
        sub mod # modulo rechnung $bigintobj; $bigintobj ist vom Typ Rdw::BigInt
        {
           my ($self, $bigintobj) = @_;
           # ...
        }        
       
        sub get_data #  gibt einen String zurück, der die Zahl repräsentiert
        {
          my ($self) = @_;
        }
       
        1;

       
        Natürlich dürfen auch andere Funktionen vorhanden sein;
        Alle Funktion sollten im Erfolg Fall, $self zurück geben; ansonsten undef.
       
        Beispiel 1:
       
        my $bigint1 = Rdw::BigInt->new("10");
        my $bigint2 = $bigint1->add("5");
       
        print $bigint1->get_data(); # "15"
        print $bigint2->get_data(); # "15"
       
        $bigint->add($bigint2);
        print $bigint1->get_data(); # "30"
       
        Beispiel 2:
       
        my $bigint = Rdw::BigInt->new();
       
        $bigint->set("6541831546313468413216810316864");
        $bigint->add("65464540");
       
        print $bigint->get_data(); # "6541831546313468413216875781404"
       
        Beispiel 3:
       
        my $bigint = Rdw::BigInt->new();
       
        $bigint->add("100");
       
        print $bigint->get_data(); # "100"        
       
        Dieses Rätsel ist Vorläufer für das nächste Rätsel. :)
                 
        Viel Spass.  
\n\n

<!--EDIT|esskar|1103640220-->

View full thread RDW #B - Raetsel der Woche Nummer B