Perl :: Aufgabe #15

2 Lösungen Lösungen öffentlich

Ausgabe Weihnachtsbaum

Anfänger - Perl von Gustl - 07.12.2012 um 18:44 Uhr
Schreiben Sie ein Konsolenprogramm welches einen Weihnachtsbaum ausgibt.
Vor der Ausgabe soll noch die Höhe des Weihnachtsbaum abgefragt werden. (MIN 3)
Der Weihnachtsbaum soll bei einer Höheneingabe von 10 folgendermaßen aussehen:

Konsolenausgabe:

      *
***
*****
***
*****
*******
*****
*******
*********
###


Die Schwierigkeit besteht in den Stufenabschnitten der Tanne. Die Zeile die die meisten Sterne enthält sollte natürlich dann auch die letzte sein, also muss das Programm vielleicht bei einer zu großen Höheneingabe das Zeichnen der Sterne abbrechen und dann den Stamm ausgeben. (So wie bei diesem Beispiel, angegeben ist 10 aber der Baum hat nur 10 Reihen, ohne Baumstamm)

Lösungen:

vote_ok
von progdoc (2220 Punkte) - 23.12.2012 um 23:17 Uhr
Quellcode ausblenden Perl-Code
#!/usr/bin/perl 
use strict ;
use warnings ;
use List::Util qw ( max ) ;

my @rowstars = ( 1 , 3 , 5 ) ;
my @startarray = ( 1 , 3 , 5 ) ;
my @nextarray ;
foreach my $start ( 0..20  ) { #Schaffung des Zahlenarrays für die Anzahl der Sterne
    $nextarray[ 0 ] = $startarray[ 1 ] ;
    $nextarray[ 1 ] = $nextarray[ 0 ] + 2 ;
    $nextarray[ 2 ] = $nextarray[ 1 ] + 2 ;
    push @rowstars, @nextarray ;
    @startarray = @nextarray ;
   ;
}
print "Bitte geben Sie die Höhe des Baumes ein! ( Mindestwert 3 ):\n" ;
my $hoehe = <STDIN> ;
chomp $hoehe ;
while ( $hoehe < 3 || $hoehe > 65 ) {
   print "Bitte geben Sie die Höhe des Baumes ein! ( Mindestwert 3 ):\n" ;
   my $hoehe = <STDIN> ;
   chomp $hoehe ;
}

my $letzteZeile = max @rowstars[0..($hoehe - 1 ) ] ;
my $i = 0 ;
while ( $rowstars[ $i] != $letzteZeile ) {#wo im Array steht die größte Zahl ?
   $i++ ;
}
my $linksLetzteZeile = 2 + int( $letzteZeile / 2 ) ;#linker Rand für die letzte Zeile
my $linksvorschub ;
foreach my $n ( 0..$i ) { #Ausdruck des Baumes
   $linksvorschub = $linksLetzteZeile - int( $rowstars[ $n ] / 2 ) ;
   print " " x $linksvorschub ;
   print "*" x $rowstars[ $n ] . "\n" ;
}
$linksvorschub = $linksLetzteZeile - int( 3 / 2 ) ;
print " " x $linksvorschub ;
print "#" x 3 . "\n" ;
vote_ok
von Jusy (440 Punkte) - 23.04.2014 um 15:16 Uhr
Quellcode ausblenden Perl-Code
use strict;
use warnings;

print "Bitte Geben Sie eine Zahl ein(MIN 3):";
my $eingabe = <STDIN>;
if ($eingabe < 3)
{print "Baum zu klein"; exit;}
$eingabe =~ s/\s//;
my $count = 0;
my $counter = 0;
my $i = 1;
for(my $y = 0; $y <= $eingabe; $y++)
{
	if($counter == $eingabe)
	{
		last;
	}
	if($count == 3)
	{
		if($y == ($eingabe-1))
		{last;}
		else
		{
			$i = $i-4;
			$count=0;
		}
	}
	my $space = (($eingabe+2)-$i)/2;
	for(my $x = 0; $x < $space; $x++)
	{
		print " ";
	}
	for(my $j = 0; $j < $i ; $j++)
	{
		print "*";
	}
	print "\n";
	$count++;
	$counter++;
	$i = $i+2;
}


my $space = (($eingabe+2)-3)/2;
for(my $x = 0; $x < $space; $x++)
{
	print " ";
}
print "###";
1871257

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.