Aufgabe 7

1. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 7.1
#Fragt den Nutzer, wie oft der Text "Alles Gute zum Nikolaus!" ausgegeben werden soll
#und gibt den Text auf der Konsole und in die Datei nikolaus.txt aus

use strict;
use warnings;

{
   my ($eingabe,$zaehler);
   my $ausgabe = "nikolaus.txt";
   $zaehler=0;
   open (AUSGABE, ">$ausgabe");

   print "Geben Sie ein, wie oft Sie zum Nikolaus beglückwünscht werden möchten >>> ";
   $eingabe=<>;
   chomp($eingabe);

   while ($zaehler < $eingabe){
      print "Alles Gute zum Nikolaus!\n";
      print AUSGABE "Alles Gute zum Nikolaus!\n";
      $zaehler++;
   }
   close (AUSGABE);
}

2. Frage

Lösung for-Schleife

#!/usr/bin/perl
#Aufgabe 7.2
#Erstellt eine Frequenzliste von artikel.txt (mit for-Schleife)

use strict;
use warnings;

{
   my ($artikel,$ausgabe,$zeile,$wort,$i,$anzahlwoerter);
   my %lexikon;
   my @wort;
   
   $artikel = "artikel.txt";
   $ausgabe = "hash_wortliste.txt";

   open (EINGABE, $artikel);
   open (AUSGABE, ">$ausgabe");

   while ($zeile = <EINGABE>){
      chomp ($zeile);
      @wort = split (/[\p{Z}\p{P}]+/, $zeile);
      $anzahlwoerter = scalar(@wort);
      for ($i=0;$i<$anzahlwoerter;$i++){
         $lexikon{$wort[$i]}++ ;
      }  
   }
   foreach $wort(keys %lexikon){
      print AUSGABE "Das Wort \"$wort\" kommt $lexikon{$wort}mal vor.\n";
   }

   close (EINGABE);
   close (AUSGABE);
}

Lösung foreach-Schleife

#!/usr/bin/perl
#Aufgabe 7.2
#Erstellt eine Frequenzliste von artikel.txt (mit foreach-Schleife)

use strict;
use warnings;

{
   my ($artikel,$ausgabe,$zeile,$wort);
   my %lexikon;
   my @woerter;

   $artikel = "artikel.txt";
   $ausgabe = "hash_wortliste.txt";

   open (EINGABE, $artikel);
   open (AUSGABE, ">$ausgabe");

   while ($zeile = <EINGABE>){
      chomp ($zeile);
      @woerter = split (/[\p{Z}\p{P}]+/, $zeile);
      foreach $wort(@woerter){
        $lexikon{$wort}++;
      }
   }
   
   foreach $wort(keys %lexikon){
      print AUSGABE "Das Wort \"$wort\" kommt $lexikon{$wort}mal vor.\n";
   }  

   close (EINGABE);
   close (AUSGABE);
}

3. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 7.3
#Ermittelt die Anzahl an unterschiedlichen Woertern in artikel.txt

use strict;
use warnings;

{
   my ($artikel,$zeile,$wort,$anzahlelem);
   my %lexikon;
   my @woerter;
   $artikel = "artikel.txt";

   open (EINGABE, $artikel);

   while ($zeile = <EINGABE>){
      chomp ($zeile);
      @woerter = split (/[\p{Z}\p{P}]+/, $zeile);
      foreach $wort(@woerter){
         $lexikon{$wort}++;
      }
   }
   $anzahlelem = scalar(keys%lexikon);	  
   print "In $artikel kommen $anzahlelem unterschiedliche Wörter vor.\n";

   close (EINGABE);
}

4. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 7.4
#Fragt den Benutzer nach einem Wort und gibt dessen Vorkommen in artikel.txt aus

use strict;
use warnings;

{

   my ($artikel,$zeile,$wort,$eingabe,$lceingabe,$uceingabe);
   my %lexikon;
   my @woerter;
   $artikel = "artikel.txt";

   open (EINGABE, $artikel);

   while ($zeile = <EINGABE>){
      chomp ($zeile);
      @woerter = split (/[\p{Z}\p{P}]+/, $zeile);
      foreach $wort(@woerter){
         if (defined($lexikon{$wort})){
            $lexikon{$wort}++;
         }else{
            $lexikon{$wort} = 1;
         }
      }
   }
   
   print"Bitte geben Sie ein Wort ein >>> ";
   $eingabe=<>;
   chomp($eingabe);
   $lceingabe = lc($eingabe);
   $uceingabe = ucfirst($eingabe);

   if ((defined($lexikon{$uceingabe}))||(defined($lexikon{$lceingabe}))){
      print "Dieses Wort kommt in der Datei artikel.txt ",$lexikon{$uceingabe} + $lexikon{$lceingabe},"mal vor.\n";
      print "$lexikon{$uceingabe}mal in grossgeschriebener Variante\n" 
      if(exists $lexikon{$uceingabe});
      print "$lexikon{$lceingabe}mal in kleingeschriebener Variante.\n"
      if(exists $lexikon{$lceingabe});
   }else{
      print "Dieses Wort kommt in der Datei artikel.txt nicht vor.\n";
   }

close (EINGABE);

}

5. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 7.5
#Sortiert die Frequenzliste nach Häufigkeit (aufsteigend) 

use strict;
use warnings;

{
   my ($artikel,$ausgabe,$zeile,$wort);
   my %lexikon;
   my @woerter;
   $artikel = "artikel.txt";

   open (EINGABE, $artikel);


   while ($zeile = <EINGABE>){
      chomp ($zeile);
      @woerter = split (/[\p{Z}\p{P}]+/, $zeile);
      foreach $wort(@woerter){
         $lexikon{$wort}++;
      }
   }
   
   #Sortieren numerisch aufsteigend
   foreach $wort(sort {$lexikon{$a}<=>$lexikon{$b}} keys %lexikon){
      print "Das Wort \"$wort\" kommt $lexikon{$wort}mal vor.\n";
   }
   close (EINGABE);
}

6. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 7.6
#Sortiert die Frequenzliste nach Häufigkeit (absteigend) 

use strict;
use warnings;

{
   my ($artikel,$ausgabe,$zeile,$wort);
   my %lexikon;
   my @woerter;
   $artikel = "artikel.txt";

   open (EINGABE, $artikel);


   while ($zeile = <EINGABE>){
      chomp ($zeile);
      @woerter = split (/[\p{Z}\p{P}]+/, $zeile);
      foreach $wort(@woerter){
         $lexikon{$wort}++;
      }
   }
   
   # Sortieren numerisch absteigend
   foreach $wort(sort {$lexikon{$b}<=>$lexikon{$a}} keys %lexikon){
      print "Das Wort \"$wort\" kommt $lexikon{$wort}mal vor.\n";
   }
   close (EINGABE);
}

7. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 7.7
#Gibt die drei Woerter aus, die am häufigsten vorkommen 

use strict;
use warnings;

{

   my ($artikel,$zeile,$wort,$zaehler);
   my %lexikon;
   my @woerter;
   $artikel = "artikel.txt";
   $zaehler = 0;

   open (EINGABE, $artikel);

   while ($zeile = <EINGABE>){
      chomp ($zeile);
      @woerter = split (/[\p{Z}\p{P}]+/, $zeile);
      foreach $wort(@woerter){
         $lexikon{$wort}++;
      }
   }
   
   foreach $wort(sort {$lexikon{$b}<=>$lexikon{$a}} keys %lexikon){
      print "Das Wort \"$wort\" kommt $lexikon{$wort}mal vor.\n" if ($zaehler<3);
      $zaehler++;
      }
   print "Dies sind die drei häufigsten Woerter.\n";

   close (EINGABE);
}

8. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 7.8
#Gibt die zehn häufigsten Buchstaben aus

use strict;
use warnings;

{
   my ($artikel,$ausgabe,$zeile,$letter,$elem,$zaehler);
   my %lexikon;
   my @buchstaben;
   $artikel = "artikel.txt";
   $zaehler = 0;

   open (EINGABE, $artikel);

   while ($zeile = <EINGABE>){
      chomp ($zeile);
      @buchstaben = split (//, $zeile);
      foreach $letter(@buchstaben){
         if ($letter =~ /\p{L}/){
            $lexikon{$letter}++;
         }
      }
   }
   
   foreach $letter(sort {$lexikon{$b}<=>$lexikon{$a}} keys %lexikon){
      print "Der Buchstabe \"$letter\" kommt $lexikon{$letter}mal vor.\n" if ($zaehler<10);
      $zaehler++;
   } 

   close (EINGABE);

}