Einsendeaufgabe zu Studienheft CGP 1

- Perl 1 -

Frage 1

Erklären Sie den Unterschied zwischen einem Interpreter und einem Compiler und gehen Sie genauer auf die Arbeitsweise des Perl-Interpreters ein.

Ein Compiler ist ein Programm, das ein in einer Quellsprache (z. B. Perl) geschriebenes Programm, in ein semantisch Äquivalent in einer Zielsprache übersetzt.
Ein Interpreter ist ein Programm, das einen Programm-Quellcode einliest, analysiert und ausführt. Die Analyse des Quellcodes erfolgt zur Laufzeit des Programms.

Frage 2

Schreiben Sie ein Perl-Skript, das eine Umrechnung von DM in Euro durchführt. Der Anwender soll einen beliebigen Wert in DM eingeben und nach der Umrechnung soll der entsprechende Wert in Euro (mit einer Genauigkeit von vier Nachkommastellen) ausgegeben werden. Es kann hier ein Fester Umrechnungskurs verwendet werden. Er ist: 1 Euro = 1,95583 DM

print <<HERE_TEXT;

 Aufgabe 2: Umrechnung von DM in Euro...
 =======================================

 Geben Sie bitte einen DM-Wert ein:

HERE_TEXT

chomp ($betrag = <>);
$euro = $betrag / 1.955830;
$gerundet = sprintf('%.4f', $euro);

print "\n"."\n".
  " Dies entspricht ".$euro." Euro. \n"."\n".
  " Grundet auf 4 Nachkommastellen ergibt das einen Wert von: ".$gerundet." Eu-ro.\n";
Frage 3

Schreiben Sie ein Perl-Skript, das ein Menü mit vier Verzweigungen anzeigt. Bei der Wahl der ersten drei Optionen sollen mit der Eingabe des Users jeweils verschiedene Rechenoperationen ausgeführt und das Ergebnis ansgegeben werden. Das Skript soll sich über die vierte Option beenden lassen.

$menu = <<HERE_MENU;

 Ein einfaches Men\x81 mit vier Verzweigungen auf der Kommandozeile:

 Addition                      <1>
 Multiplikation                <2>
 Potenzierung                  <3>
 Beenden                       <4>

HERE_MENU

while(1)
{
  print $menu;
  print "\n\n Bitte geben Sie die gew\x81nschte Funktion ein: (4) "; chomp($action = <>);
  if ($action eq '1')
    {
      print "Addition a + b => c ...\n\n";
      print " a = ? "; $a = <>;
      print " b = ? "; $b = <>;
      print " a + b = ".($a + $b)."\n\n";
    }
    elsif ($action eq '2')
    {
      print "Multiplikation a * b => c ...\n\n";
      print " a = ? "; $a = <>;
      print " b = ? "; $b = <>;
      print " a * b = ".($a * $b)."\n\n";
    }
    elsif ($action eq '3')
    {
      print "Potenzierung a ^ b => c ...\n\n";
      print " a = ? "; $a = <>;
      print " b = ? "; $b = <>;
      print " a ^ b = ".($a ** $b)."\n\n";
    }
    else
    {
      last;
    }
    print "\n";
  }
Frage 4

Schreiben Sie ein Perl-Skript, das eine einfache Passwortabfrage durchführt. Legen Sie das einen Hash an, indem fünf User-Namen gespeichert sind. Jedem Benutzernamen soll ein individuelles Passwort zugeordnet sein. Das Skript soll zuerst den User-Namen abfragen und danach die Eingabe des Passworts verlangen. Ist die Eingabe korrekt, soll ein Begrüßungstext angezeigt werden und das Skript beendet werden. Ist die Eingabe falsch, soll die Passwortabfrage bis zur korrekten Eingabe wiederholt werden.

%user =
  (
    'Anna' => 'annA',
    'Berta' => 'atreB',
    'Chef' => 'fehC',
    'Doris' => 'siroD',
    'Emil' => 'limE'
  );
  while(1)
  {
    print " Login zum Testzugang...\n".
    "\n".
    " Bitte geben Sie Ihren Namen ein: ";
    chomp($name = <STDIN>);
    print " Bitte geben Sie Ihr Passwort ein: ";
    chomp($pass = <STDIN>);
    if ((exists $user{$name}) && ($user{$name} eq $pass))
    {
      print "\n". "Der Loginvorgang konnte erfolgreich durchgef\x81hrt werden.\n";
      last;
    }
  }
Frage 5

Schreiben Sie ein Perl-Skript, das vom Anwender die Eingabe eines Zahlenwerts verlangt. Ist die Eingabe größer als 10 oder kleiner al 0, soll eine Fehlermeldung ausgegeben werden. Ist der Wert korrekt, sollen der Eingabewert quadriert und das Ergebnis ausgegeben werden. Danach soll der Eingabewert um 1 erhöht werden. Mit diesem Wert sollen die Berechnungen und die Aufgabe nochmals erfolgen. Dieser Vorgang soll fünfmal wiederholt werden, bevor das Skript beendet wird.

print
  "Einfache Schleife mit einer Reihenentwicklung...\n".
  "Bitte geben Sie einen Startwert zwischen 0 und 10 ein!\n".
  "\n".
  " Startwert: "; chomp($s = <>);
if ($s < 0 || 10 < $s)
  {
    print "Der eingegebene Wert lag nicht zwischen 0 und 10.\n".
          "Bitte geben Sie einen richtigen Wert ein!\n";
  }
  else
  {
    for($i = 0; $i < 6; $i++)
    {
      print " $s ^ 2 = ".($s * $s)."\n";
      $s += 1;
    }
  }