Lösungen
#!/usr/bin/perl #Aufgabe 13 Rekursion.1 #Berechnet die Fakultät einer Zahl use strict; use warnings; use utf8; { my $wert; print "Ich berechne die Fakultät einer eingegebenen Zahl.\nBitte geben Sie eine Zahl ein, die größer als 0 ist >>> "; chomp($wert = <>); while ($wert < 1){ print"Die Zahl muss größer als 0 sein!\n"; print"Bitte geben Sie eine Zahl ein, die größer als 0 ist >>> "; chomp($wert = <>); } print "Das Ergebnis lautet: ",&fak($wert),"\n"; } sub fak($){ my $zahl=$_[0]; if ($zahl == 0){ return 1; }else{ return ($zahl * &fak($zahl -1)); } }
#!/usr/bin/perl #Aufgabe 13 Rekursion.2 #Berechnet die Summe der Zahlen n + (n-1) + (n-2) + ... + 1 use strict; use warnings; use utf8; { my $wert; print "Bitte geben Sie eine Zahl ein >>> "; chomp($wert=<>); print "Das Ergebnis lautet: ",&sum($wert),"\n"; } sub sum($){ my $zahl=shift @_; if ($zahl == 0){ return 0; }else{ return ($zahl+&sum($zahl-1)); } }
#!/usr/bin/perl #Aufgabe 13 Rekursion.3 #Testet, ob eine Zahl in einer Liste vorkommt use strict; use warnings; use utf8; { my ($result,$eingabe); my @numbers = (1,2,3,4); print "Zahl eingeben >>> "; chomp($eingabe = <>); $result = &in_liste($eingabe,@numbers); print "$eingabe kommt in der Liste vor.\n" if ($result == 1); print "$eingabe kommt nicht in der Liste vor.\n" if ($result == 0); } sub in_liste($@){ my ($zahl,@liste) = @_; if (scalar(@liste) == 0){ return 0; } if ($zahl == $liste[0]){ return 1; } shift(@liste); return (&in_liste($zahl,@liste)); }
#!/usr/bin/perl #Aufgabe 13 Rekursion.4 #Führt eine Multiplikation zweier Zahlen aus, indem diese auf eine Addition zurückgeführt wird use strict; use warnings; use utf8; { my ($wert1,$wert2); print "Bitte geben Sie zwei Zahlen ein, die Sie miteinander multiplizieren möchten\n"; print "Zahl 1 >>> "; chomp($wert1=<>); print "Zahl 2 >>> "; chomp($wert2=<>); print "Das Ergebnis lautet: ",&multi($wert1,$wert2),"\n"; } sub multi($,$){ my $zahl1=shift @_; my $zahl2=shift @_; return ($zahl1,0) if $zahl2==0; return ($zahl1+(&multi($zahl1,($zahl2-1)))); }
Lösungen
#!/usr/bin/perl #Aufgabe 13.5 #gibt jedes zweite Element einer Liste aus use strict; use warnings; { my @zahlen = (1,2,3,4,5,6,7,8,9,10); &print_second(@zahlen); } sub print_second(@){ my @liste = @_; for (my $i = 1; $i < scalar(@liste); $i = $i+2){ print "$liste[$i]\n"; } }
#!/usr/bin/perl #Aufgabe 13.6 #dreht die Reihenfolge der Elemente einer Liste um use strict; use warnings; { my @zahlen = (1,2,3,4,5,6,7,8,9,10); my @reverse_liste = &my_reverse(@zahlen); print "@reverse_liste\n"; } sub my_reverse(@){ my @liste = @_; return (reverse(@liste)); }
#!/usr/bin/perl #Aufgabe 13.6 #entfernt jedes zweite Element aus einer Liste und dreht die Reihenfolge um use strict; use warnings; { my @zahlen = (1,2,3,4,5,6,7,8,9,10); my @zahlen_neu = &del_second(@zahlen); print "@zahlen_neu\n"; } sub del_second(@){ my @liste = @_; my @liste_neu; for (my $i = 1; $i < scalar(@liste); $i = $i+2){ unshift(@liste_neu, $liste[$i]); } return (@liste_neu); }