Hallo,
kann mir bitte jemand schnell helfen, wiso geht das nicht?
Ich will im Array für den jeweiligen turm die scheiben haben, also das Array für turm 1 sieht am anfang z.B. so aus @turm1[1,2,3,4].
Jetzt will ich das erste element nehmen und z.B. auf den turm 2 legen, dann müssten die arrays so aussehen: @turm1[2,3,4] @turm2<font size="1">;
die übergabe klappt aber irgendwie nicht.
Danke im voraus.
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
1 #! /usr/bin/perl -w
2
3 my $count = 0;
4 my $num = 1;
5 my $n = 1;
6 my $x = 1;
7 my @tower1;
8 my @tower2;
9 my @tower3;
10
11 ($#ARGV == 0) or die "Syntax: $0 N
";
12 my $N = int($ARGV[0]);
13 ($N > 0) or die "$0: Nicht erlaubte Anzahl von Scheiben
";
14
15
16 #Array füllen#
17 while ($num<=$N) {
18
19 $tower1[$n] = $num;
20 $n++;
21 $num++;
22 }
23
24 hanoi($N, right, left, center, @tower1, @tower2, @tower3);
25
26 sub hanoi {
27 my ($n, $to, $from, $using, @to, @from, @using) = @_;
28
29 $count = $count+1;
30
31 if ($n == 1) {
32 print "move $from --> $to aaaa
"; # trivialer Fall
33
34 $temp = shift @from;
35 unshift @to, $temp;
36
37
38 } elsif ($n > 1) {
39 hanoi($n-1, $using, $from, $to, @using, @from, @to); # (*)
40 print "move $from --> $to xxxx
"; # (**)
41
42 $temp = shift @from;
43 unshift @to, $temp;
44
45 hanoi($n-1, $to, $using, $from, @to, @using, @from); # (***)
46 }
47 }
48
49 print"
-->$count
";
</font><hr></pre></blockquote>
Brauche schnell hilfe bei perl!!!
Re: Brauche schnell hilfe bei perl!!!
Super! Dann kannst du deine Lösung hier sicherlich auch gleich posten, oder?
Re: Brauche schnell hilfe bei perl!!!
wieso hier posten? das problem ist gelöst! man will doch nur hilfe haben und keine hilfe geben,die meisten sind so,geben nicht mal antwort ob was klappt oder nicht.egoismus pur.
Re: Brauche schnell hilfe bei perl!!!
kann man ja noch nachvollziehen, dass die freude ueber den erfolg ein "hurra, geschafft" posting nach sich zieht.
dass vergessen wird, die loesung mitzuposten, kann ich auch noch verstehen, auch wenn's schwer faellt. meist frage ich dann auch nach und meist kommt dann auch eine reaktion und auch die dementsprechende loesung.
nicht verstehen kann ich tin
ratte
dass vergessen wird, die loesung mitzuposten, kann ich auch noch verstehen, auch wenn's schwer faellt. meist frage ich dann auch nach und meist kommt dann auch eine reaktion und auch die dementsprechende loesung.
nicht verstehen kann ich tin
ratte
Re: Brauche schnell hilfe bei perl!!!
Hier die Lösung, die euch ja zu interessieren scheint.
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#! /usr/bin/perl -w
my $count = 0;
my $num = 1;
my $n = 0;
my $x = 1;
my @left;
my @right;
my @center;
($#ARGV == 0) or die "Syntax: $0 N
";
my $N = int($ARGV[0]);
($N > 0) or die "$0: Nicht erlaubte Anzahl von Scheiben
";
@left = (1..$N);
@right= ();
@center=();
CLS();
displ_stack( 0, @left );
displ_stack( 1, @center );
displ_stack( 2, @right );
sleep( 1 );
hanoi( $N, "right", "left", "center" );
sub hanoi {
my ( $n, $to, $from, $using ) = @_;
$count = $count+1;
if ($n == 1) {
# print "move $from --> $to
"; # trivialer Fall
array ($from, $to);
redispl_all_stacks( );
} elsif ($n > 1) {
hanoi($n-1, $using, $from, $to); # (*)
# print "move $from --> $to
"; # (**)
array ($from, $to);
redispl_all_stacks( );
hanoi($n-1, $to, $using, $from); # (***)
}
}
sub CLS {
print "^[[2J";
}
sub POS {
my ( $x, $y ) =@_;
print '^[['.$y.';'.$x.'H';
}
sub displ_disk{
my ( $size, $stack, $height ) = @_;
$disk = 'X'x (2*$size);
POS( 15+$stack*30-$size, 25-$height ); print "$disk
";
}
sub undispl_disk{
my ( $size, $stack, $height ) = @_;
$disk = ' 'x (2*$size);
POS( 15+$stack*30-$size, 25-$height );
print "$disk
";
}
sub displ_stack{
my ( $stackpos, @stack ) = @_;
my $size;
if ( scalar @stack == 0 ) { return 0 };
if ( scalar @stack == 1 )
{
$size = $stack[0];
displ_disk( $size, $stackpos, 0 );
return 1;
}
$size = $stack[0];
shift @stack;
$hight = displ_stack( $stackpos, @stack );
displ_disk( $size, $stackpos, $hight );
return ( $hight + 1 );
}
sub undispl_stack{
my ( $stackpos, @stack ) = @_;
my $size;
if ( scalar @stack == 0 ) { return 0 };
if ( scalar @stack == 1 )
{
$size = $stack[0];
undispl_disk( $size, $stackpos, 0 );
return 1;
}
$size = $stack[0];
shift @stack;
$hight = displ_stack( $stackpos, @stack );
undispl_disk( $size, $stackpos, $hight );
return ( $hight + 1 );
}
sub redispl_all_stacks {
undispl_stack( 0, @left );
displ_stack( 0, @left );
undispl_stack( 1, @center );
displ_stack( 1, @center );
undispl_stack( 2, @right );
displ_stack( 2, @right );
POS( 0, 27 );
sleep( 1 );
}
sub array {
my ($von, $nach) = @_;
if ($von eq "left") {
undispl_stack( 0, @left );
my $temp = $left[0];
shift @left;
if ($nach eq "right") {
unshift (@right, $temp);
displ_stack( 2, @right );
} elsif ($nach eq "center") {
unshift (@center, $temp);
displ_stack( 1, @center );
}
} elsif ($von eq "center") {
undispl_stack( 1, @center );
my $temp = $center[0];
shift @center;
if ($nach eq "right") {
unshift (@right, $temp);
displ_stack( 2, @right );
} elsif ($nach eq "left") {
unshift (@left, $temp);
displ_stack( 0, @left );
}
} elsif ($von eq "right") {
undispl_stack( 2, @right );
my $temp = $right[0];
shift @right;
if ($nach eq "left") {
unshift (@left, $temp);
displ_stack( 0, @left );
} elsif ($nach eq "center") {
unshift (@center, $temp);
displ_stack( 1, @center );
}
}
}
</font><hr></pre></blockquote>
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#! /usr/bin/perl -w
my $count = 0;
my $num = 1;
my $n = 0;
my $x = 1;
my @left;
my @right;
my @center;
($#ARGV == 0) or die "Syntax: $0 N
";
my $N = int($ARGV[0]);
($N > 0) or die "$0: Nicht erlaubte Anzahl von Scheiben
";
@left = (1..$N);
@right= ();
@center=();
CLS();
displ_stack( 0, @left );
displ_stack( 1, @center );
displ_stack( 2, @right );
sleep( 1 );
hanoi( $N, "right", "left", "center" );
sub hanoi {
my ( $n, $to, $from, $using ) = @_;
$count = $count+1;
if ($n == 1) {
# print "move $from --> $to
"; # trivialer Fall
array ($from, $to);
redispl_all_stacks( );
} elsif ($n > 1) {
hanoi($n-1, $using, $from, $to); # (*)
# print "move $from --> $to
"; # (**)
array ($from, $to);
redispl_all_stacks( );
hanoi($n-1, $to, $using, $from); # (***)
}
}
sub CLS {
print "^[[2J";
}
sub POS {
my ( $x, $y ) =@_;
print '^[['.$y.';'.$x.'H';
}
sub displ_disk{
my ( $size, $stack, $height ) = @_;
$disk = 'X'x (2*$size);
POS( 15+$stack*30-$size, 25-$height ); print "$disk
";
}
sub undispl_disk{
my ( $size, $stack, $height ) = @_;
$disk = ' 'x (2*$size);
POS( 15+$stack*30-$size, 25-$height );
print "$disk
";
}
sub displ_stack{
my ( $stackpos, @stack ) = @_;
my $size;
if ( scalar @stack == 0 ) { return 0 };
if ( scalar @stack == 1 )
{
$size = $stack[0];
displ_disk( $size, $stackpos, 0 );
return 1;
}
$size = $stack[0];
shift @stack;
$hight = displ_stack( $stackpos, @stack );
displ_disk( $size, $stackpos, $hight );
return ( $hight + 1 );
}
sub undispl_stack{
my ( $stackpos, @stack ) = @_;
my $size;
if ( scalar @stack == 0 ) { return 0 };
if ( scalar @stack == 1 )
{
$size = $stack[0];
undispl_disk( $size, $stackpos, 0 );
return 1;
}
$size = $stack[0];
shift @stack;
$hight = displ_stack( $stackpos, @stack );
undispl_disk( $size, $stackpos, $hight );
return ( $hight + 1 );
}
sub redispl_all_stacks {
undispl_stack( 0, @left );
displ_stack( 0, @left );
undispl_stack( 1, @center );
displ_stack( 1, @center );
undispl_stack( 2, @right );
displ_stack( 2, @right );
POS( 0, 27 );
sleep( 1 );
}
sub array {
my ($von, $nach) = @_;
if ($von eq "left") {
undispl_stack( 0, @left );
my $temp = $left[0];
shift @left;
if ($nach eq "right") {
unshift (@right, $temp);
displ_stack( 2, @right );
} elsif ($nach eq "center") {
unshift (@center, $temp);
displ_stack( 1, @center );
}
} elsif ($von eq "center") {
undispl_stack( 1, @center );
my $temp = $center[0];
shift @center;
if ($nach eq "right") {
unshift (@right, $temp);
displ_stack( 2, @right );
} elsif ($nach eq "left") {
unshift (@left, $temp);
displ_stack( 0, @left );
}
} elsif ($von eq "right") {
undispl_stack( 2, @right );
my $temp = $right[0];
shift @right;
if ($nach eq "left") {
unshift (@left, $temp);
displ_stack( 0, @left );
} elsif ($nach eq "center") {
unshift (@center, $temp);
displ_stack( 1, @center );
}
}
}
</font><hr></pre></blockquote>