Sonntag, 14. Februar 2010

Subroutines - Taschenrechner als Übung zu Unterfunktionen

Subroutines oder Unterfunktionen sind sehr nützlich. Als erste Übung habe ich einen einfachen Taschenrechner programmiert.


#!/usr/bin/perl
# Taschenrechner by Christian!
print "Bitte Zahl eingeben: ";
chomp($zahl1 = );
print "Rechenart eingeben (+,-,/,*)";
chomp($rechenart = );
print "Zweite Zahl eingeben: ";
chomp($zahl2 = );

if($rechenart eq '+') {
print "\nAddition wird durchgefuehrt.\n";
$ergebnis = &addition($zahl1, $zahl2);
}
elsif($rechenart eq '-') {
print "\nSubtraktion wird durchgeführt.\n";
$ergebnis = &subtraktion($zahl1, $zahl2);
}
elsif($rechenart eq '*') {
print "\nMultiplikation wird durchgeführt.\n";
$ergebnis = &multi($zahl1, $zahl2);
}
elsif($rechenart eq 'x') {
print "\nMultiplikation wird durchgeführt.\n";
$ergebnis = &multi($zahl1, $zahl2);
}
elsif($rechenart eq '/') {
print "\nDivision wird durchgeführt.\n";
$ergebnis = &division($zahl1, $zahl2);
}
elsif($rechenart eq ':') {
print "\nDivision wird durchgeführt.\n";
$ergebnis = &division($zahl1, $zahl2);
}


sub addition {
($_[0] + $_[1]);
}
sub subtraktion {
($_[0] - $_[1]);
}
sub multi {
($_[0] * $_[1]);
}
sub division {
($_[0] / $_[1]);
}

print "Das Ergebnis Ihrer Rechnung: " . $ergebnis . "!!!\n";

S54/3 - Wortliste alphabetisch sortieren (ASCII)

Wörter werden vom Benutzer nacheinander, durch ENTER getrennt, eingegeben. Das Prgramm soll diese alphabetisch (bzw ASCII-betisch) sortieren und ausgeben.

#!/usr/bin/perl

print "\nBitte Worte eingeben, durch Enter getrennt, Beenden mit Strg-D.\n";
@worte = ;
@sortiert = sort @worte;

print @sortiert;


Eine weitere Möglichkeit:

#!/usr/bin/perl
#Zweite Version, Sortierte Liste in einer Zeile ausgeben!
print "\nBitte Worte eingeben, durch Enter getrennt, Beenden mit Strg-D.\n";
chomp(@worte = ); #Worte liegen jetzt ohne \n in der Liste!
@sortiert = sort @worte;

# Leerzeichen an jedes Element anfügen:
foreach $sortiert (@sortiert)
{
$sortiert = $sortiert . " "; # Frage: warum nicht mit "+=" lösen möglich? vgl S.29!
}

# Ausgabe der kompletten Liste:
print "\nSortierte Worte: ",@sortiert,"\n";


Eine Frage, die mir noch offen geblieben ist: warum wird das Komma bei der Ausgabe der kompletten Liste benötigt?

S54/2 - Wörter einer Zahl zuordnen und ausgeben

In dieser Aufgabe von Seite 54 sollen Zahlen fest einem Wort zugeordnet (hardcoded) werden. Der Benutzer soll die 7 Zahlen in beliebeiger Reihenfolge eingeben, die Ausgabe der korrespondierenden Wörter erfolgt dann genau in dieser Reihenfolge.

#!/usr/bin/perl -w
# Aufgabe: Nummern einlesen in Liste und Ausgabe der passenden Namen.
@namen = qw! fred betty barney dino wilma pebbles bamm-bamm !;

print "Bitte Nummern von 1 bis 7 eingeben, durch ENTER getrennt: ";
chomp(@eingabe = ); # Eingabe beenden durch Strg-D.

foreach $eingabe (@eingabe)
{
print $namen[$eingabe - 1] . "\n";
# Frage: warum nicht (Perl gibt Verbesserungsvorschlag!)?:
# print @namen[$eingabe - 1] . "\n";
}

Freitag, 12. Februar 2010

Aufgabe S54/1: Liste einlesen und rückwärts ausgeben

Seite 54, Aufgabe 1

Schreiben Sie ein Programm, dass mehrere Worte (strings) Zeilenweise einliest (getrennt durch Enter-Taste). Nach Beendigung der Eingabe (end-of-input, zB durch Tastenkombination Strg-D (Linux) oder Strg-Z (Windows)) sollen die Worte in Umgekehrter Reihenfolge ausgegeben werden.

#!/usr/bin/perl -w

@lines = ; # Abbrechen mit Strg-D!

@lines = reverse @lines;
print "Rueckwaertsausgabe:\n";
print @lines;