Schrift
[thread]8913[/thread]

eine Frage zu objektorientertem Perl (Seite 11)



<< |< 1 ... 8 9 10 11 12 13 14 15 >| >> 150 Einträge, 15 Seiten
ASDS
 2007-04-18 00:26
#75897 #75897
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
if ($n < $self->{val}) { $self->set_l($n) }
elsif ($n > $self->{val}) { $self->set_r($n) }

hier brauch ich ne erklärung...

wenn n kleiner is als der Wert in val dan soll die Methode set_l aufgerufen werden wo n übergeben wird?

wie kann ich das denn umlegen auf mein Programm....
aaaah meint ihr vielleicht ich sollte das erstellen den Baumes.. mit einer Sub Methode LINKS einer Sub Methode Rechts und einer submethode set machen?
ASDS
 2007-04-18 00:52
#75898 #75898
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
ich hab es jetzt versucht umzulegen sprich versucht
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
sub newtree {
.....

for my $zzahl (@$ref_liste1){
# my $refvalue = $ref_wurzel;
if ($knoten)
{ while (1) {

if($zzahl < $$knoten{'zahl'}) { #Beginn des Vergleichs

if(defined($$knoten{'linksweg'}))

{

$knoten = $$knoten{'linksweg'};

}

else {

$knoten->{'linksweg'} = knot($zzahl);

$knoten = $ref_wurzel;

last; #Ende
um zulegen versucht auf set_l bin aber nicht weit gekommen... bin aber daran gescheitert... genauso hab ich versucht rechts umzulegen
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                        }            

}

#wenns Links nicht mehr weiter geht, geh rechts weiter


if ($zzahl >= $$knoten{'zahl'}) {
if(defined($knoten->{'rechtsweg'}))

{

$knoten =$$knoten{'rechtsweg'};
}

else {

$$knoten{'rechtsweg'} = knot($zzahl);

$knoten = $ref_wurzel;

last;

das normale set wäre dann der teil nicht
Code: (dl )
1
2
3
4
                 $ref_wurzel= knot($zzahl);
$knoten = $ref_wurzel}}}
return $ref_wurzel;
}


ACHTUNG, ich hab mir meinen alten Code reingestellt, nicht den neuen, weil ich den jetzt nicht abgespeichert habe.
Ronnie
 2007-04-18 00:54
#75899 #75899
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=ASDS,17.04.2007, 22:26]
Code: (dl )
1
2
if ($n < $self->{val}) { $self->set_l($n) }
elsif ($n > $self->{val}) { $self->set_r($n) }

hier brauch ich ne erklärung...

wenn n kleiner is als der Wert in val dan soll die Methode set_l aufgerufen werden wo n übergeben wird?[/quote]
Ja, entweder ist es kleiner -> dann wird es links eingeordnet, oder größer dann rechts. Wenn es gleich ist, wird es ignoriert. Die Methoden set_l und set_r machen dann den Rest. Das ist aus meiner Sicht eine Lösung die viabel ist. Wenn du das Beispiel verstehst, kannst du evtl. aus deinem Code eine Lösung entwickeln. Aktuell ist er eher pseudo-objektorientiert, weil du wild alte Konzepte versuchst in eine Klasse zu pressen, ohne die Denkweise von OOP zu berücksichtigen. Aus meiner Sicht kann es so nur schiefgehen - trotzdem kannst du dabei 'ne Menge lernen. Evtl. hilft es dir erstmal 'ne Lösung mit 'nem Hash ganz ohne OOP zu programmieren.
ASDS
 2007-04-18 01:05
#75900 #75900
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
uuff, bin schon ur kaputt kann das stimmen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub set_l {
  my $ref_liste1 = shift;
  my $knoten = shift;
  my $val= shift;

    for my $zzahl (@$ref_liste1){
        if ($knoten)
 
  if ($konten->{'zahl'}) {
      $knoten = $knoten {'linksweg'};
  } else {
      knoten->{'zahl'} = $knoten->new($val);
  }
}


und meine new Methode wäre:
Code: (dl )
1
2
3
4
5
6
7
sub neu {
  my $class = shift;
  my $ref_wurzel = newtree(\@liste);
  my $self = { val => $ref_wurzel, l => \@liste};
  bless $self, ref($class) || $class;
  return $self;
}


Code: (dl )
1
2
3
4
sub knot { return ( {     'zahl' => shift,
'linksweg' => undef,
'rechtsweg' => undef } );
}
wäre vielleicht auch noch hilfreich\n\n

<!--EDIT|ASDS|1176844098-->
Ronnie
 2007-04-18 01:14
#75901 #75901
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=ASDS,17.04.2007, 23:05]kann das stimmen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub set_l {
my $ref_liste1 = shift;
my $knoten = shift;
my $val= shift;

for my $zzahl (@$ref_liste1){
if ($knoten)

if ($konten->{'zahl'}) {
$knoten = $knoten {'linksweg'};
} else {
knoten->{'zahl'} = $knoten->new($val);
}
}
[/quote]
Das ist schon mal keine Methode, weil sie von $self nix weiß. Außerdem übergibst du eine Liste an die Funktion. Diese Liste könnte aber auch Werte enthalten, die größer sind und deshalb in den rechten Ast gemusst hätten. Dein $knoten ist kein Objekt, sondern nur ein anonymes Hash. Bei dir wäre nur der root-Baum ein Objekt. Aber ein Baum besteht aus Bäumen.
ASDS
 2007-04-18 01:23
#75902 #75902
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Quote
Diese Liste könnte aber auch Werte enthalten, die größer sind und deshalb in den rechten Ast gemusst hätten.
ja und genau darum, hab ich es so gelöst wie ich es gelöst habe und da häng ich jetzt...

heißt das ich muss der sub to_s die Liste übergeben? edit: nein meine liste übergeb ich eh schon in NEW, d.h heißt jene liste die Später über die <STDIN> kommen soll, richtig? irgendwo muss ich die Liste nämlich übergeben! Denn ich möcht ja dann in append... eine weitere Liste hinzufügen...

kennst du mich  mit meiner Methode wo alles in einem is nicht aus? is die wirklich so verwirrend. Je öfter ich sie anguck, desto mehr und mehr gefällt sie mir eigentlich und ich hätt da so gerne ein lösung.\n\n

<!--EDIT|ASDS|1176845355-->
ASDS
 2007-04-18 01:48
#75903 #75903
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub set_left {
my $self = shift;

my $val= shift;


if (ref_self->{'zahl'}) {
$self->{'linksweg'}-> append{'val'};
} else {
$self->{'linksweg'} = $self->neu($val);
}
}


und die Neu Methode dazu ist:
Code: (dl )
1
2
3
4
5
6
7
8
sub neu {
my $class = shift;
my @liste = @_;
my $ref_wurzel = newtree(\@liste);
my $self = { val => 'zahl', l => 'linksweg', r => 'rechtsweg'};
bless $self, ref($class) || $class;
return $self;
}


Stimmt das jetzt, aber sag mal... wie kommt er denn jetzt tatsächlich zu diesen
Code: (dl )
1
2
3
sub knot { return ( {     'zahl' => shift,
'linksweg' => undef,
'rechtsweg' => undef } );
werten?
ASDS
 2007-04-18 10:21
#75904 #75904
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
*bettel* *bettel* *bettel* bitte Leute helft mir. Ich hab die ganze Nacht kaum geschlafen, weil ich das sogerne AUCH an meinem Programm schaffen würde. Ich hab mich - weil ich eh nicht schlafen konnte - gleich heute morgen wieder hingestetzt und sogar einen Teil der bekannten Fehlermeldung wegbekommen. Jetzt steht da nur noch:
Use of uninitialized value in String at Baum.pm line 84, <STDIN>line 10.
Meiner Meinung nach hab ich aber keinen String und wenn ich das hinkrieg.. glaubt ihr nicht, dass ich das Programm nach und formen kann?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub ausgabe {
my $self = shift;
my $knoten = undef;

if (defined($knoten->{'linksweg'}))
{
ausgabe($self, $knoten->{'linksweg'});
}

print "$knoten->{'zahl'}";

line 84 ist in diese Ausschnitt
line 10 ist vermutlich dieser hier...
Code: (dl )
1
2
3
4
5
6
sub knot {
my $knoten = { 'zahl' => shift,
'linksweg' => undef,
'rechtsweg' => undef };
return $knoten;
}
renee
 2007-04-18 10:45
#75905 #75905
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In $knoten->{zahl} steht nichts drin...
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/
ASDS
 2007-04-18 10:47
#75906 #75906
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
[quote=renee,18.04.2007, 08:45]In $knoten->{zahl} steht nichts drin...[/quote]
:-) ja renee das hast du mir gestern schon gesagt, so dumm bin ich auch nicht. Allerdings, find ich einfach nicht den Fehler woran es liegen könnte. Weißt du was ich mein?
<< |< 1 ... 8 9 10 11 12 13 14 15 >| >> 150 Einträge, 15 Seiten



View all threads created 2007-04-10 15:14.