Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8693[/thread]

Anfänger Frage Taschenrechner: Erstellung einen Taschenrechners Anfänge (Seite 5)



<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten
ASDS
 2007-01-30 18:52
#73802 #73802
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Huhu du...

bei dem obigen Code.. ich hab nix verändert geht folgende Formel nicht: ( 1 + 2) / 2 ( " /2 ist synatkirsch an dieser stelle nicht verarbeitbar ") UND bei ( 1 + 2 * (1*4)) kommt 9 raus... warum... wo liegt da der fehler...
ASDS
 2007-01-30 19:02
#73803 #73803
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
waaaaaaaaaaaaaaaaah ich trottel... ich kann net rechnen LOL... okay... d.h das 1+2 * 1*4 hat sich gerade erledigt...
UND das andere jetzt auch *grrrrrrrrr* sorry für die Störung

vielen dank nochmal\n\n

<!--EDIT|ASDS|1170176682-->
docsnyder
 2007-01-31 17:28
#73804 #73804
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Nur mal so zum Spaß: hier ist noch ein anderer Ansatz:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
$term = '((1 + 2) * (2 -1) + 7 / 5) + (2 * 3) + 5';

printf("TERM : $term\n");

$term =~ s/\s+//g;
$idx = 1;

#-----------------------------------------------------------------------------#
sub evalSubTerm {
my($op1, $op, $op2) = @_;

if ( $op eq '*' ) { return($op1 * $op2); }
elsif ( $op eq '/' ) { return($op1 / $op2); }
elsif ( $op eq '+' ) { return($op1 + $op2); }
else { return($op1 - $op2); }
}

#-----------------------------------------------------------------------------#
sub resolveOps {
my($op) = @_;

for $subTerm ( values(%subTerms) ) {
while ( ($subTerm =~ s!^(.*?[+-].*?)(T?\d+(?:\.\d*)?${op}T?\d+(?:\.\d*)?)(.*?)$!$1T$idx$3!) ||
($subTerm =~ s!^(.*?)(T?\d+(?:\.\d*)?${op}T?\d+(?:\.\d*)?)(.*?[+-].*?)$!$1T$idx$3!) ) {
$subTerms{"T$idx"} = $2; $idx++;
}
}
}

#-----------------------------------------------------------------------------#
sub rearrangeTerms {
my($subTerm, $value) = @_;
my($tmpSubTerm, $retVal);

for $tmpSubTerm ( keys(%subTerms) ) {
$subTerms{$tmpSubTerm} =~ s!$subTerm!$value!g;
}

$retVal = $subTerms{$subTerm};

delete($subTerms{$subTerm});

return($retVal);
}

#-----------------------------------------------------------------------------#
sub resolveTerms {
my($subTerm, $retVal);
my($modified) = 0;

while ( scalar(%subTerms) >= 1 ) {
for $subTerm ( keys(%subTerms) ) {
if ( $subTerms{$subTerm} =~ m(^(\d+(?:\.\d*)?)([+\-\*/])(\d+(?:\.\d*)?)$) ) {
$subTerms{$subTerm} = evalSubTerm($1, $2, $3);
$retVal = rearrangeTerms($subTerm, $subTerms{$subTerm});
}
}
}

return($retVal);
}

#-----------------------------------------------------------------------------#
while ( $term =~ s/^(.*?)\(([^\(\)]+)\)(.*?)$/$1T$idx$3/ ) {
$subTerms{"T$idx"} = $2; $idx++;
}

$subTerms{"T0"} = $term;

for $op ( ('\*', '/', '\+', '-') ) { resolveOps($op) };

printf("RESULT: %s\n", resolveTerms());


Gruß, Doc\n\n

<!--EDIT|docsnyder|1170257524-->
docsnyder
 2007-02-02 09:56
#73805 #73805
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@renee

Ich habe Probleme mit Deinem Code.

Gibt man als Term

Code: (dl )
my $formula = '((1 + 2) * (2 -1) + 7 / 5) + (2 * 3) + 5';

ein, liefert Dein Code '4.15' anstatt '15,4'.

Woran liegt's?

Gruß, Doc
renee
 2007-02-02 10:20
#73806 #73806
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@docsnyder: hast recht, Du musst aber nur die zwei RegEx's verändern:
Code: (dl )
1
2
 while($part =~ s!([\d.]+)\s*([\*\/])\s*([\d.]+)!subcalc($1,$2,$3)!eg){};
while($part =~ s!([\d.]+)\s*([\+\-])\s*([\d.]+)!subcalc($1,$2,$3)!eg){};
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten



View all threads created 2007-01-29 12:57.