Font
[thread]8913[/thread]

eine Frage zu objektorientertem Perl (page 4)



<< |< 1 2 3 4 5 6 7 ... 15 >| >> 150 entries, 15 pages
ASDS
 2007-04-12 14:20
#75827 #75827
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
Ich wehre mich schon, is schon okay...


Code: (dl )
   $self->{'wurzel'} = newtree (\@liste);

da gehört aber eher hin
$self->{'ref_wurzel'} = newtree (\@liste);

oder nicht und wenn nicht warum nicht.
Und was macht das self entspricht es dem Horese in der perlboot oder?
GwenDragon
 2007-04-12 14:27
#75828 #75828
User since
2005-01-17
14169 articles
Admin1
[Homepage]
user image
[quote=ASDS,12.04.2007, 12:20]
Code: (dl )
   $self->{'wurzel'} = newtree (\@liste);

da gehört aber eher hin
   $self->{'ref_wurzel'} = newtree (\@liste);

Und was macht das self entspricht es dem Horese in der  perlboot oder?[/quote]
Ja, du hast Recht. Ich habe das ref _ mitgedacht, weil doch sowieso im Hash eine Referenz drin steht.

Das $self ist das Objekt.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

ASDS
 2007-04-12 14:48
#75829 #75829
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
okay, d.h in meine Ausgabe muss ich auch noch ein Objekt einauen, oder?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub ausgabe {

my $refvalue = shift;
my $self = shift;

if(defined($$refvalue{'linksweg'})) {
ausgabe($$refvalue{'linksweg'})
}

print "$$refvalue{'zahl'}\n";

if(defined($$refvalue{'rechtsweg'})) {
ausgabe($$refvalue{'rechtsweg'})
}
}
ausgabe($ref_wurzel);


funzt das mit $self-> (($$refvalue}
GwenDragon
 2007-04-12 15:06
#75830 #75830
User since
2005-01-17
14169 articles
Admin1
[Homepage]
user image
Deine Referenz auf einen Baum sieht doch so aus, oder:
{ zahl => Wert,
linksweg => Referenz auf Knoten
rechtsweg => Referenz auf Knoten
}


$self->{'ref_wurzel'}->{'rechtsweg'} ist der Inhalt von rechtsweg
$self->{'ref_wurzel'}->{'linkssweg'} ist der Inhalt von linksweg
$self->{'ref_wurzel'}->{'zahl'} ist die Zahl
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

ASDS
 2007-04-12 15:13
#75831 #75831
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
Eine andere Frage...
Code: (dl )
1
2
3
4
5
6
7
8
my $ref_liste1 = shift;
my $zahl = shift(@$ref_liste1); #Wurzel wird mit erster Zahl der Liste1 erstellt
my $ref_wurzel = knot($zahl);

for $zahl (@$ref_liste1){
my $refvalue = $ref_wurzel;

if ($zahl)
Hier sag ich ihm dass er mit der Liste 1 arbeiten muss -> die er bei mir ja als STDIN bekommt.
nur das is ja alles fad... lustig wäre es, wenn ich noch äste dazufügen könnte.

ich müsst erm dann im .pl was ich ja auch noch machen muss, ne Abfrage schreiben: Ob die Zahlen die defaultweise im Programm eben Liste 2 noch an den Baum angefügt werden sollen.

Aber wie kann ich jetzt eine Methode anfertigen, die Hinzufügen heißt und eben an den bestehenden Baum die Äste zufügt:
Code: (dl )
1
2
3
sub hinzufuegen {
my $self = shift;
my @newList = my @liste2;
erkennt er hier, dass er die Liste zwei von oben nehmen soll?
ASDS
 2007-04-12 15:24
#75832 #75832
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
[quote=GwenDragon,12.04.2007, 13:06]Deine Referenz auf einen Baum sieht doch so aus, oder:
{ zahl => Wert,
linksweg =>  Referenz auf Knoten
rechtsweg =>  Referenz auf Knoten
}


$self->{'ref_wurzel'}->{'rechtsweg'} ist der Inhalt von rechtsweg
$self->{'ref_wurzel'}->{'linkssweg'} ist der Inhalt von linksweg
$self->{'ref_wurzel'}->{'zahl'} ist die Zahl[/quote]
so?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub ausgabe {

my $refvalue = shift;
my $self = shift;

if(defined($self->{'ref_wurzel'}->{'linksweg'}})) {
ausgabe($$refvalue{'linksweg'})
}

print "$self->{'ref_wurzel'}->{'zahl'}\n";

if(defined($self->{'ref_wurzel'}->{'rechtsweg'})) {
ausgabe($$refvalue{'rechtsweg'})
}
}
ausgabe($ref_wurzel);
schaut aber komisch aus.
GwenDragon
 2007-04-12 15:45
#75833 #75833
User since
2005-01-17
14169 articles
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub ausgabe {
my $self = shift;
my $refvalue = shift;

if (defined( $self->{'ref_wurzel'}->{'linksweg'} ) ) {
ausgabe( $self->{'ref_wurzel'}->{'linksweg'} )
}

print $self->{'ref_wurzel'}->{'zahl'},"\n";

if( defined( $self->{'ref_wurzel'}->{'rechtsweg'} ) ) {
ausgabe( $self->{'ref_wurzel'}->{'rechtsweg'} )
}
}
ausgabe($ref_wurzel);


Was gefällt dir nicht?

So ganz weiß ich auch nicht, ob du wirklich Objektorieniertes Perl verwendest.

So zum Beispiel müsste es eigentlich sein:
my $bintree = new MeinModul::BinTree;
$bintree->ausgabe( $bintree->wurzel() );
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

ASDS
 2007-04-12 15:55
#75834 #75834
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
was mir nicht gefällt? Hm keine Ahnung, diese Referenzen müssen doch einfacher zu lösen sein, oder? Bzw. dass das nicht so doof ausschaut.

Naja... was ich so glesen und gehört habe, muss ich sowieso zwei Files haben, in dem einen stehen die Methoden drinnen, im anderen werden die Methoden aufgerufen. Nicht?

Kannst du mir noch die Frage mit dem Hinzufügen benantworten *liebschau* Bitte
Struppi
 2007-04-12 16:17
#75835 #75835
User since
2006-02-17
628 articles
BenutzerIn
[Homepage]
user image
Nein du brauchst keine zwei Files, du kannst Pakete und die dazugehörigen Funktionen alle in eine Datei packen, üblich ist aber für jedes Paket eine Datei zu verwenden.
ASDS
 2007-04-12 17:04
#75836 #75836
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
So ich komm net drauf... was sagst ihr.. muss ich den Code nochmal neu machen , oder wie bring das PRogramm dazu, die Liste 2 nach Anforderung an die Liste1 und somit dem Baum anzuhängen.

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!c:/perl
use strict;
use warnings;


my @liste1 = ();
my @liste2 = (4, 28, 9, 100, 12, 84, 10, 11);


sub knot { return ( { 'zahl' => $_[0],
'linksweg' => undef,
'rechtsweg' => undef } );
}

sub newtree {
############################
#Eingabe der ersten 10 Zahlen
############################
for(0..9){
print "Bitte geben Sie eine Zahlen ein: ";
my $eingabe = <STDIN>;
chomp($eingabe);
push @liste1,$eingabe;
}
print "Sie haben folgende Zahlen eingegeben: (@liste1) \n";

######################
# Erstellen des Trees
######################

my $ref_liste1 = shift;
my $zahl = shift(@$ref_liste1); #Wurzel wird mit erster Zahl der Liste1 erstellt

my $ref_wurzel = knot($zahl);

for $zahl (@$ref_liste1){
my $refvalue = $ref_wurzel;

if ($zahl)
{
while {
############################
#Beginn des Vergleichs

if($zahl < $$refvalue{'zahl'}) {
if(defined($$refvalue{'linksweg'}))
{
$refvalue = $$refvalue{'linksweg'};
}
else {
$$refvalue{'linksweg'} = knot($zahl);
last; #Ende
}
}
#######
#wenns Links nicht mehr weiter geht, geh rechts weiter
else {
if(defined($$refvalue{'rechtsweg'}))
{
$refvalue = $$refvalue{'rechtsweg'};
}
else {
$$refvalue{'rechtsweg'} = knot($zahl);
last;
}
}
}}}
return($ref_wurzel);
}



########
#Hauptprogramm
########

###################
#Ausgabe des Trees
####

sub ausgabe {

my $refvalue = shift;
my $self = shift;

if(defined($self->{'ref_wurzel'}->{'linksweg'}})) {
ausgabe($$refvalue{'linksweg'})
}

print "$self->{'ref_wurzel'}->{'zahl'}\n";

if(defined($self->{'ref_wurzel'}->{'rechtsweg'})) {
ausgabe($$refvalue{'rechtsweg'})
}
}
ausgabe($ref_wurzel);


sub new {
my $class = shift;
my $self = {};
bless( $self, $class );

my @liste = @_;
$self->{'ref_wurzel'} = newtree (\@liste);
return $self;
}
###############
#Hinzufügen weiterer Äste
###############
sub hinzufuegen {
my $self = shift;
my @newList = my @liste2;


ich denk, dass hier der springende Punkt liegt:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $ref_liste1 = shift;
my $zahl = shift(@$ref_liste1); #Wurzel wird mit erster Zahl der Liste1 erstellt

my $ref_wurzel = knot($zahl);

for $zahl (@$ref_liste1){
my $refvalue = $ref_wurzel;

if ($zahl)
{
while {
############################
#Beginn des Vergleichs

if($zahl < $$refvalue{'zahl'}) {
if(defined($$refvalue{'linksweg'}))
{
$refvalue = $$refvalue{'linksweg'};
zahl und refvalue auf undef setzen oder () ?
<< |< 1 2 3 4 5 6 7 ... 15 >| >> 150 entries, 15 pages



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