#!/usr/bin/perl use strict; ############### # Eingabe einer Formel über die Tastatur ############### print "Bitte geben sie eine Formel ein und das OHNE Leerzeichen: "; my $formula = ""; my @array = (); #for ( $formula = ) #{ # chomp($formula ); # printf("Ihre Formel lautet, %s !\n",$formula ); ## Ausgabe mittels Zeichenkette #@array = split(/\s+/,$formula ); #for (my $i = 0; $i < @array; $i++) #{ # print "@array[$i] \n"; ## Ausgabe der jeweiligen Positionen im Array #} #} $formula = ; chomp($formula ); printf("Ihre Formel lautet, %s !\n",$formula ); while($formula =~ s/\(([^\(]*?)\)/calc($1)/eg) { } print sprintf("%.2f\n", calc($formula)); sub calc{ my ($part) = @_; while($part =~ s!(\d+)\s*([\*\/])\s*(\d+)!subcalc($1,$2,$3)!eg){}; while($part =~ s!(\d+)\s*([\+\-])\s*(\d+)!subcalc($1,$2,$3)!eg){}; return $part; } sub subcalc{ my ($x1,$y,$x2) = @_; if($y eq '*'){ return mal($x1,$x2); } elsif($y eq '/'){ return div($x1,$x2); } elsif($y eq '+'){ return plus($x1,$x2); } elsif($y eq '-'){ return minus($x1,$x2); } else{ return 0; } } ## SubMethode Addition definieren sub plus{ my ($x1,$x2) = @_; #@_ speichern der Übergabeparameter return $x1 + $x2; } ## SubMethode Muliplikation definieren sub mal{ my ($x1,$x2) = @_; #@_ speichern der Übergabeparameter return $x1 * $x2; } ## SubMethode Subtraktion definieren sub minus{ my ($x1,$x2) = @_; #@_ speichern der Übergabeparameter return $x1 - $x2; } ##SubMethode Division definieren sub div{ my ($x1,$x2) = @_; return $x1 / $x2; } ########### # LOG - File Ausgabe ######### my ($sekunde, $minute, $stunde, $tag, $monat, $jahr) = (localtime)[0..6]; ++$monat; $jahr += 1900; printf "Datum: %02d.%02d.%4d Uhrzeit: %02d:%02d:%02d\n", $tag, $monat, $jahr, $stunde, $minute, $sekunde;