#!/usr/bin/perl -w
use strict;
use utf8;
#Variablen initialisieren - safety first ;)
my ($buchstabe, $count, $entropie, $input, $logNat, $summeEntropie, $vorkommenAbsolut, $vorkommenProzent);
my @input_file;
my %alphabet;
########################################
####Input aus Datei#####################
open(FH, "<input.txt");
@input_file=<FH>;
close(FH);
#Array in Skalar umwandeln...ist besser zum zaehlen
$input=join (" ",@input_file);
# Gesamtzahl aller Zeichen
$count=$input=~tr/A-Za-z.,ÄäÖöÜüß \///;
print "\nDer Text besteht aus insgesamt $count Zeichen\n";
###########Alle Zeichen in ein Hash einlesen und zählen...geht das auch einfacher? Ne Schleife?!###
$alphabet{a}=$input=~tr/Aa//;
$alphabet{b}=$input=~tr/Bb//;
$alphabet{c}=$input=~tr/Cc//;
$alphabet{d}=$input=~tr/Dd//;
$alphabet{e}=$input=~tr/Ee//;
$alphabet{f}=$input=~tr/Ff//;
$alphabet{g}=$input=~tr/Gg//;
$alphabet{h}=$input=~tr/Hh//;
$alphabet{i}=$input=~tr/Ii//;
$alphabet{j}=$input=~tr/Jj//;
$alphabet{k}=$input=~tr/Kk//;
$alphabet{l}=$input=~tr/Ll//;
$alphabet{m}=$input=~tr/Mm//;
$alphabet{n}=$input=~tr/Nn//;
$alphabet{o}=$input=~tr/Oo//;
$alphabet{p}=$input=~tr/Pp//;
$alphabet{q}=$input=~tr/Qq//;
$alphabet{r}=$input=~tr/Rr//;
$alphabet{s}=$input=~tr/Ss//;
$alphabet{t}=$input=~tr/Tt//;
$alphabet{u}=$input=~tr/Uu//;
$alphabet{v}=$input=~tr/Vv//;
$alphabet{w}=$input=~tr/Ww//;
$alphabet{x}=$input=~tr/Xx//;
$alphabet{y}=$input=~tr/Yy//;
$alphabet{z}=$input=~tr/Zz//;
$alphabet{ae}=$input=~tr/Ää//;
$alphabet{ue}=$input=~tr/Üü//;
$alphabet{oe}=$input=~tr/Öö//;
$alphabet{sz}=$input=~tr/ß//;
$alphabet{punkt}=$input=~tr/.//;
$alphabet{komma}=$input=~tr/,//;
$alphabet{leer}=$input=~tr/ //;
$alphabet{slash}=$input=~tr/\///;
###################################################
#Zeichen Sortieren und Entropie ausrechnen
foreach $buchstabe (sort keys %alphabet) {
$vorkommenAbsolut=($alphabet{$buchstabe}/$count);
$vorkommenProzent=($alphabet{$buchstabe}/$count)*100;
$logNat=0;
$summeEntropie += $entropie;
eval { #ln(x) = ld(x)/ld(2)
$logNat=(log(1/$vorkommenAbsolut))/log(2);#Eval verhindert Abbruch bei Division durch 0
};
$entropie=$vorkommenAbsolut*$logNat;
print "Buchstabe: \"$buchstabe\"\n";
print "Häufigkeit: $alphabet{$buchstabe}\t";
printf "Wahrscheinlicheit p(x) Absolut: %.2f \t Prozent: %.2f%% \n", $vorkommenAbsolut, $vorkommenProzent;
print "Informationsgehalt = ld(1/p) = ld(1/$vorkommenAbsolut) = $logNat\n";
print "Entropie für das Zeichen \"$buchstabe\": $entropie\n";
print "-----------------------------------------------------------------------\n"
}
print "Die Entropie des Textes liegt bei $summeEntropie bit\n";