Schrift
[thread]8913[/thread]

eine Frage zu objektorientertem Perl (Seite 15)



<< |< 1 ... 12 13 14 15 >| >> 150 Einträge, 15 Seiten
renee
 2007-04-18 16:11
#75937 #75937
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und woran lag's?
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 16:17
#75938 #75938
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
oh gott... ich hab einerseits mein .pl verworfen und es so gemacht wie in dem oft schon zitiertem link..mal auf deppen sicher ohne großartig viel drum herum nämlich:
Code: (dl )
1
2
3
4
my $tree = Baum1->neu(3,2,4,1,5); 
$tree->ausgabe();
$tree->append(7,6,8);
$tree->ausgabe();


und dann hab ich
Code: (dl )
1
2
3
4
sub neu {
my $this = shift;
my $class = ref($this) || $this;
my @liste = @_; ........
hier mich gespielt und die Ausgabe bissi verändert...
in dem ich nochmal ne sub ausgabe geschrieben hab. Alsoo ich hab einmal:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub AusgabeBaum {
if (defined(my $knoten = shift)){
if (defined($knoten->{'linksweg'})) {
AusgabeBaum($knoten->{'linksweg'});
}
print $knoten->{'zahl'};
print " ";
if (defined($knoten->{'rechtsweg'})) {
AusgabeBaum($knoten->{'rechtsweg'});
}
}
}


und dann noch:
Code: (dl )
1
2
3
4
sub ausgabe {
my $self = shift;
AusgabeBaum($self->{'val'});
}
Ich freu mich voll....... und dazu hab ich stunden gebraucht um das zu behirnen...
ASDS
 2007-04-18 16:20
#75939 #75939
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
[quote=renee,18.04.2007, 14:11]Und woran lag's?[/quote]
Jetzt bin ich aber kaputt!

Renee, hast du nen tipp für mich, wie ich meine Append dazu bekomm, von der while (1) wegzugehen das programm noch mal durchzulaufen und if eine zahl großer is als die jetztig zahl auf die eine seite zu gehen und else auf die andere bzw. noch ein else dieselbe Zahl noch mal zu setzen?

Muss doch eigentlich eh ähnlich der Ausgabe sein, oder?
ASDS
 2007-04-18 16:47
#75940 #75940
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub append {
my $self = shift;
my @vals = @_;
while ( my $n = shift @vals ) {

if ($n < $self->{val}) {
$self->newtree($n)
}
elsif ($n > $self->{val}) {
$self->newtree($n)
}
}
}

das sollte doch funzen, oder?
bitte sagt was... gebt mir nen Tipp
ASDS
 2007-04-18 16:59
#75941 #75941
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub append {
my $self = shift;
my @vals = @_;
my $n = shift @vals;
while ( my $ref_wurzel ) {

if ($n < $self->{val}) {
$self->newtree($n)
}
elsif ($n >= $self->{val}) {
$self->newtree($n)
}
}
}


so mit diesem Code gibt er mir: 1 2 3 4 5 1 2 3 4 5
somit bring ich die
Code: (dl )
 append(7,6,8);
nicht rein...
müsste doch passen.. ich sag erm mittels...my @vals = @_; dass er die Werte übernehmen soll und leg sie dann mit n um, oder nicht?
BAh, ich bin schon ur blind...
ASDS
 2007-04-18 18:24
#75942 #75942
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
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
sub append {
my $self = shift;
my @vals = @_;
my $knoten = $wurzel;
while (my $nextvalue =shift) {
my $wurzel = $self->{val};
my $knoten = $wurzel;
while (1) {
if (defined($knoten)) {
if ($nextvalue < $knoten->{'zahl'}) {
if (defined($knoten->{linksweg})) {
$knoten = $knoten->{linksweg};
} else {
$knoten = knot($nextvalue);
last;
}

}
}
}
} }

1;
er schreit mir hier nach Global symbol "$wurzel" requires explict package name ... aber eigentlich sollte er es doch erkennen, oder?

lg
ASDS
 2007-04-18 18:44
#75943 #75943
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
vagesst es hab schon DANKE
PerlProfi
 2007-04-18 19:28
#75944 #75944
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Hast du dein ganzes Problem gelöst, oder nur dass mit $wurzel ?

Du holst dir die anzuhängenden Werte schon am Anfang in @vals, warum holst du dir diese nochmals in deiner while Schleife ?
ASDS
 2007-04-19 00:36
#75945 #75945
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
das problem mit dem Wurzel und das append überhaupt
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
sub append {
my $self = shift;
my @vals = @_;
while (my $nextvalue =shift) {
my $wurzel = $self->{val};
my $knoten = $wurzel;
while (1) {
if (defined($knoten)) {
if ($nextvalue < $knoten->{'zahl'}) {
if (defined($knoten->{linksweg})) {
$knoten = $knoten->{linksweg};
} else {
$knoten = knot($nextvalue);
last;
}

}
else {
if ($nextvalue >= $knoten->{'zahl'}) {
if (defined($knoten->{'rechtsweg'})) {
$knoten =$knoten->{'rechtsweg'};
} else {
$knoten->{'rechtsweg'} = knot($nextvalue);
$knoten = $knoten->{rechtsweg};
last;}
}
}
}
}
}
}


Sorry, deine Frage versteh ich nicht. Ich hol mir die Werte doch nur 1x
PerlProfi
 2007-04-19 20:22
#75946 #75946
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Ich hab deine Subroutine mal entwurstet:
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
sub append
{
# pick parameters
my($self, @vals) = @_;

foreach my$val (@vals)
{
# get root
my $knoten = $self->{val};

while (1)
{
if (defined($knoten)) {
if ($val < $knoten->{'zahl'}) {
if (defined($knoten->{linksweg})) {
$knoten = $knoten->{linksweg};
}
else {
$knoten = knot($val);
last;
}
}
else {
#### $knoten ist hier nicht definiert ####
#### du greifst aber ständig drauf zu ####
if ($val >= $knoten->{'zahl'}) {
if (defined($knoten->{'rechtsweg'})) {
$knoten =$knoten->{'rechtsweg'};
}
else {
$knoten->{'rechtsweg'} = knot($val);
$knoten = $knoten->{rechtsweg};
last;
}
}
}
}
}
}

Am Ende war eine } zu viel.
Ich habe $wurzel ganz rausgenommen, wozu war das denn da ?
Den Anfang habe ich so verändert, dass du dir die Werte nicht mehr doppelt holst.
Ansonsten siehst du ja, $knoten ist nicht definiert, du benutzt es aber immer wieder in diesem else-Block.

MfG\n\n

<!--EDIT|PerlProfi|1176999875-->
<< |< 1 ... 12 13 14 15 >| >> 150 Einträge, 15 Seiten



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