Die Webseiten der Fachschaft Informatik am ERG Saalfeld


Tabelle der Quadratwurzeln

Es soll Programm geschrieben werden, welche eine Tabelle der Quadratwurzeln erstellt. Es sollen die Quadratwurzeln von 1 bis zu einer "größten Zahl" ermittelt werden. Diese "größte Zahl" wird als Parameter übergeben. Wenn der Parameter nicht übergeben wurde, dann soll dafür 15 verwendet werden. Zusätzlich sollen die Wurzeln mit 2 Stellen nach dem Komma ausgegeben werden.
 

Programm

Anmerkung: Damit das Script besser kommentiert und nachvollzogen werden kann (auch in Hinblick auf die Wertbelegungstabelle), wird jede Anweisung in einer extra Zeile aufgeführt. Für eine kürzere Fassung siehe unten

#!/usr/bin/perl
use strict;
use warnings;

my ($y, $z, $hilf);
my $groesste_zahl = $ARGV[0];

# wenn kein Parameter uebergeben wurde, dann nehmen wir 15
if (! defined($groesste_zahl)) {
  $groesste_zahl = 15;
}

for (my $x = 1; $x <= $groesste_zahl; $x++) {
  $hilf = sqrt($x);
  $hilf = $hilf * 100;
  $hilf = $hilf + 0.5;
  $hilf = int($hilf);
  $y    = $hilf / 100;
  $z    = sqrt($x);
  print '  ', $x, "\t", '   ',  $y,  "\t\t",  $z, "\n";
}

__END__

 

Der Aufruf sah bei mir so aus:

 

Wertbelegungstabelle

Es wird die Wertbelegungstabelle für x = 9 bis 11 erstellt. Die Zeile mit "for" würde dabei so aussehen:   for (my $x = 9; $x <= 11; $x++) {

    Aktion     $x     $hilf     $y     $z
      for (my $x = 9; $x <= 11; $x++)   9   ---   ---   ---
      $hilf = sqrt($hilf);   9   3   ---   ---
      $hilf = $hilf * 100;   9   300   ---   ---
      $hilf = $hilf + 0.5;   9   300.5   ---   ---
      $hilf = int($hilf);   9   300   ---   ---
      $y = $hilf / 100;   9   300   3   ---
      $z = sqrt($x);   9   300   3   3
      for (my $x = 9; $x <= 11; $x++)   10   300   3   3
      $hilf = sqrt($hilf);   10   3,162277660168379   3   3
      $hilf = $hilf * 100;   10   316,2277660168379   3   3
      $hilf = $hilf + 0.5;   10   316,7277660168379   3   3
      $hilf = int($hilf);   10   316   3   3
      $y = $hilf / 100;   10   316   3,16   3
      $z = sqrt($x);   10   316   3,16   3,162277660168379
      for (my $x = 9; $x <= 11; $x++)   11   316   3,16   3,162277660168379
      $hilf = sqrt($hilf);   11   3,3166247903554   3,16   3,162277660168379
      $hilf = $hilf * 100;   11   331,66247903554   3,16   3,162277660168379
      $hilf = $hilf + 0.5;   11   332,16247903554   3,16   3,162277660168379
      $hilf = int($hilf);   11   332   3,16   3,162277660168379
      $y = $hilf / 100;   11   332   3,32   3,162277660168379
      $z = sqrt($x);   11   332   3,32   3,3166247903554

 

Aufgaben

  1. Bringen Sie das Programm zum Laufen.
  2. Kommentieren Sie das Programm (jede Zeile!)
  3. Zeichnen Sie zu diesem Programm ein Struktogramm.
  4. Erläutern Sie anhand dieser Wertbelegungstabelle das Abrunden (Wurzel aus 10) bzw. das Aufrunden (Wurzel aus 11).
  5. Ergänzen Sie die Tabelle um einen Tabellenkopf.
  6. Statt dem "!" kann man auch "not" verwenden. Ändern Sie den Quelltext ab und probieren Sie das aus.

 

Hinweis:

Wie oben angegeben, läßt sich dieses Programm auch deutlich kürzer schreiben. Folgende Variante finde ich optimal (hier ohne Parameter):

#!/usr/bin/perl
use strict;
use warnings;

my ($y, $z);

foreach my $x (1 .. 15) {
  $y = int(100 * sqrt($x) + 0.5) / 100;
  $z = sqrt($x);
  print '  ', $x, "\t", '   ',  $y,  "\t\t",  $z, "\n";
}

__END__

 

zurück


© ERG Saalfeld   -   Hans-Dietrich Kirmse   10.01.2015