Aufgabe 6

1. Frage

Lösung

#!/usr/bin/perl -w
# "Ich bin durch 3 teilbar" Programm

use strict;
{
   my $i;
   
   for ($i=0; $i<=30; $i++) {
      if ($i % 3 == 0 && $i!=0) {
         print "\n$i : Ich bin durch 3 teilbar.\n";
      } else {
         print "$i,";
      }
   } 
   print "\n";
}

2. Frage

Lösung mit for-Schleife.

#!/usr/bin/perl -w
# "Ich bin durch x teilbar, der Multiplikator ist y." Programm
# for-Schleife

use strict;
{
   my $i;
   my $teiler;
   
   print "Bitte geben Sie den Teiler ein >";
   chomp($teiler=<>);
   
   for ($i=0; $i<=30; $i++) {
      if ($i % $teiler == 0 && $i!=0) {
         print "\n$i : Ich bin durch $teiler teilbar, der Multiplikator ist ",$i/$teiler,".\n";
      } else {
         print "$i,";
      }
   }
   print "\n";
}

Lösung mit foreach-Schleife.

#!/usr/bin/perl -w
# "Ich bin durch x teilbar, der Multiplikator ist y." Programm
# foreach-Schleife

use strict;
{
   my $i;
   my $teiler;
   
   print "Bitte geben Sie den Teiler ein >";
   chomp($teiler=<>);
   
   foreach $i (0..30){
      if ($i % $teiler == 0 && $i!=0 ){
         print "\n$i : ich bin durch $teiler teilbar. der Multiplikator ist ", $i/$teiler, "\n";
      } else {
         print "$i, ";
      }
   }
   print "\n";
}

Lösung mit Speziele Variable $_ .

#!/usr/bin/perl -w
# "Ich bin durch x teilbar, der Multiplikator ist y." Programm
# Test Speziele Variable $_

use strict;
{
   my $teiler;
   print "Bitte geben Sie den Teiler ein >\n";
   chomp($teiler = <>);

   foreach (0..30) {
      if ($_ % $teiler == 0 && $_!=0 ){
        print "\n$_ : ich bin durch $teiler teilbar. der Multiplikator ist ", $_/$teiler, "\n";
      } else {
        print "$_, ";
      }
   }
   print "\n";
}

3. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 6.3
#Liest eine Zeile ein und gibt nur die Vokale aus


use strict;

{ 

   my $zeile;
   my (@buchstaben,@vokale);
   my $buchstaben;
   my $vokal;

   print"Bitte geben Sie eine Zeile ein >>> ";
   $zeile=<>;
   chomp($zeile);
   $zeile=lc($zeile);

   @buchstaben=split(//,$zeile);
   @vokale=("a","e","i","o","u");

   foreach $buchstaben(@buchstaben){
      foreach $vokal(@vokale){
         if ($buchstaben eq $vokal){
            print"$buchstaben";
         }
      }
   }
}

4. Frage

Lösung

~ $ lynx -dump http://sz-magazin.sueddeutsche.de/texte/anzeigen/36659 > artikel.txt

oder Copy/Paste.

5. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 6.5
#Liest den Text aus einer Datei und gibt das erste Wort jeder Zeile aus


use strict;
use warnings;
{
   my $artikel = "artikel.txt";
   my $zeile;
   my @woerter;
   my $woerter;

   open(ARTIKEL,$artikel);
  
   while($zeile=<ARTIKEL>){
      chomp $zeile;
      @woerter=split(/[., ;:]+/,$zeile);
      if (defined($woerter[0])){
         print "$woerter[0]\n";
      }   
   }
close (ARTIKEL);
}

6. Frage

Lösung

#!/usr/bin/perl -w
# Aus artikel.txt den Text einlesen und eine einspaltige Liste erzeugen. 
# Die Liste in die Datei 'wortliste.txt' speichern.

use strict;
{
   my $file_input = "artikel.txt";
   my $file_output= "wortliste.txt";
   my $zeile;
   my @worter;
   my $element;
   open (EINGABE, $file_input);
   open (AUSGABE, ">$file_output");
   
   while ($zeile=<EINGABE>) {
      chomp($zeile);
      @worter=split(/[., ;:]+/,$zeile);
      
      foreach $element (@worter){
         print "$element\n";          
         print AUSGABE "$element\n";
      }
   }
   close EINGABE;
   close AUSGABE;
}

7. Frage

Lösung

#!/usr/bin/perl -w
# Aus 'artikel.txt' den Text einlesen und eine einspaltige Liste erzeugen. 
# Die Liste in die Datei 'wortliste.txt' speichern.
# Am Ende der Datei 'wortliste.txt' die Anzahl der Wörter, der Zeilen und Zeichen speichern.

use strict;
{
   my $file_input = "artikel.txt";
   my $file_output= "wortliste.txt";
   my $zeile;
   my @worter;
   my $element;
   my ($anz_worter, $anz_zeilen, $anz_zeichen);
   $anz_worter=0;
   $anz_zeilen=0;
   $anz_zeichen=0;
   
   open (EINGABE,$file_input);
   open (AUSGABE,">$file_output");
   
   while ($zeile=<EINGABE>) {
      chomp($zeile);
      $anz_zeilen++;
      
      @worter=split(/[ ]+/,$zeile);
      foreach $element (@worter){
         $anz_worter++;
         $anz_zeichen += length($element);
         print AUSGABE "$element\n";
      }
   }
   print "In $file_input sind $anz_zeilen Zeilen, $anz_worter Wörter und $anz_zeichen Zeichen.\n";
   print AUSGABE "In $file_input sind $anz_zeilen Zeilen, $anz_worter Wörter und $anz_zeichen Zeichen.\n";
   close EINGABE;
   close AUSGABE;
}

8. Frage

Lösung

~ $ wc artikel.txt

9. Frage

Lösung

#!/usr/bin/perl -w
# Suche nach einem Wort in artikel.txt

use strict;
{
   my $file_input = "artikel.txt";
   my $file_output= "wortliste.txt";
   my $zeile;
   my @worter;
   my $element;
   
   my $anz_worter       = 0;
   my $anz_zeilen       = 0;
   my $anz_zeichen      = 0;
   my $anz_wort_eingabe = 0;
   
   my $wort_eingabe;
   print "Bitte geben Sie das zusuchende Wort >>> ";
   chomp($wort_eingabe=<>);
   
   open (EINGABE,$file_input);
   open (AUSGABE,">$file_output");
   
   while ($zeile=<EINGABE>) {
      chomp($zeile);
      $anz_zeilen++;
      
      @worter=split(/[ ]+/,$zeile);
      $anz_worter += @worter;
      foreach $element (@worter){
         $anz_wort_eingabe++ if (lc($wort_eingabe) eq lc($element));
         $anz_zeichen += length($element);
         print AUSGABE "$element\n";
      }
   }
   print "In diesem text sind $anz_zeilen Zeilen, $anz_worter Wörter und $anz_zeichen Zeichen.\n";
   print "Wir haben in der Datei \"$file_input\" nach dem Wort \"$wort_eingabe\" gesucht.\n";
   print "Ihr Wort \"$wort_eingabe\" kommt $anz_wort_eingabe mal in der Datei vor.\n";
   print AUSGABE "In diesem text sind $anz_zeilen Zeilen, $anz_worter Wörter und $anz_zeichen Zeichen.\n";
   print AUSGABE "Wir haben in der Datei \"$file_input\" nach dem Wort \"$wort_eingabe\" gesucht.\n";
   print AUSGABE "Ihr Wort \"$wort_eingabe\" kommt $anz_wort_eingabe mal in der Datei vor.\n";
   close EINGABE;
   close AUSGABE;
}

10. Frage

Lösung

~ $ cat artikel.txt | tr '[:upper:]' '[:lower:]' | tr -s ' ' '\n' | sort | uniq -c | sort -nr | head -5
     58 die
     55 *
     39 der
     39 das
     38 und

Output Aufgabe 6.9:

Bitte geben Sie das zusuchende Wort >>> die
In diesem text sind 565 Zeilen, 3227 Wörter und 21648 Zeichen.
Wir haben in der Datei "artikel.txt" nach dem Wort "die" gesucht.
Ihr Wort "die" kommt 58 mal in der Datei vor.

Heufigkei eines Wortes (z.B: "die") mit Hilfe von UNIX-Befehlen:

~ $ cat artikel.txt | tr '[:upper:]' '[:lower:]' | tr -s ' ' '\n' | sort | uniq -c | sort -n | grep "\sdie$"
     58 die

11. Frage

Lösung

   Die Kodierung unterscheidet sich da wo die Umlaute sind. Punct c).
   
   od utf8.txt
   od iso_latin.txt

a) Anton UTF-8:
0000000 067101 067564 000156
0000005

ISO-Latin-1:
0000000 067101 067564 000156
0000005


b) Dez. 2010, 12:45 UTF-8:
0000000 062504 027172 031040 030460 026060 030440 035062 032464
0000020

ISO-Latin-1:
0000000 062504 027172 031040 030460 026060 030440 035062 032464
0000020


c) äää üüü ööö UTF-8:
0000000 122303 122303 122303 141440 141674 141674 020274 133303
0000020 133303 133303
0000024

ISO-Latin-1:
0000000 162344 020344 176374 020374 173366 000366
0000013