Schrift
[thread]542[/thread]

mathe Parser in Perl

Leser: 2


<< >> 10 Einträge, 1 Seite
Gast Gast
 2005-08-03 01:18
#5364 #5364
Hallo,
ich wollte einen Mathe Parser programmieren leider klappt es schon bei einfachen aufgaben nicht da ich nicht so der Pro bin ,aber ich dachte das es so ähnlich realisierbar wäre schauts euch mal bitte an:
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/local/bin/perl -w

use strict;

print "Math - by Patrick König\n";

sub calcString {

my @plus = split(/\+/,$_[0]);
my @minus = split(/-/,$_[0]);
my @mult = split(/\*/,$_[0]);
my @geteilt = split(/\//,$_[0]);

my $end = 0;

if($#plus != 0) {
foreach my $i (@plus) {
print "$i + $end = ";
$end = $i + $end;
print "$end\n";
}
}

if($#minus != 0) {
my $n = 0;
foreach my $i (@minus) {
if($i != 0) {

if($#minus != $n) {

print "$i - $minus[$n+1] = ";

$end = $i - $minus[$n+1];

print "$end\n";

$n++;

}
}
}
}

if($#mult != 0) {
my $n = 0;
foreach my $i (@mult) {
if($#mult != $n) {

if($n == 0) {

print "$i * $mult[$n+1] = ";

$end = $i * $mult[$n+1];

print "$end\n";

} else {

print "$end * $mult[$n+1] = ";

$end = $end * $mult[$n+1];

print "$end\n";

}

$n++;
}
}
}

if($#geteilt != 0) {
my $n = 0;
foreach my $i (@geteilt) {

}
}

print $end;

}

my $term = "2*5*2";

print "Calculateing ".$term." =\n\n\n";

calcString($term);


Gruß Patrick
cooldie
 2005-08-03 01:19
#5365 #5365
User since
2005-07-19
14 Artikel
BenutzerIn
[default_avatar]
Sorry,
war nicht eingeloggt dachte würde dann eingeloggt werden wenn ich meinen Benutzername eingebe.

Gruß Patrick
esskar
 2005-08-03 01:20
#5366 #5366
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
sub esskarCalcString {
return eval shift;
}
print esskarCalcString("2*5*2");


:)
cooldie
 2005-08-03 01:28
#5367 #5367
User since
2005-07-19
14 Artikel
BenutzerIn
[default_avatar]
Interessant warum sagt mir keiner das es sowas schon fertig gibt?

Trotzdem Danke

Gruß Patrick
renee
 2005-08-03 01:54
#5368 #5368
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du solltest aber einen String nicht einfach so durch eval jagen...
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/
dominicn
 2005-08-03 01:55
#5369 #5369
User since
2003-08-08
327 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,02.08.2005, 23:20]
Code: (dl )
1
2
3
4
sub esskarCalcString {
 return eval shift;
}
print esskarCalcString("2*5*2");


:)[/quote]
:laugh: :p :laugh:

Schöne Sache mit dem eval-Befehl.

@cooldie:
Da wird ja einfach Perl-Code ausgeführt. Du kannst das eben soweit benutzen, wie Perl auch mathematische Schreibweisen unterstützt. Das kann also einerseits nicht ausreichend sein und kann vor allem auch gefährlich sein, denn du kannst ja anstatt mathematischer Formeln dann auch system-Befehle oder so reinschreiben und auch das wird ausgeführt ...

Vielleicht helfen dir auch Module aus dem CPAN weiter:

z.B. CPAN: Math::Symbolic::Parser
Strat
 2005-08-03 09:55
#5370 #5370
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn der input von einem user kommt, dann besser kein eval (ist sonst eine sicherheitsluecke auf der suche nach einem unfall).

besser: perldoc Safe
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Ronnie
 2005-08-03 11:35
#5371 #5371
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Für Infix-Notation ist die Schwierigkeit Operator-Priorität (also Punkt- vor Strichrechnung, etc.) - was entsprechendes für Prefix-Notation (keine unterschiedliche Priorisierung notwendig! ) habe ich auf meiner Homepage http://www.ronnie-neumann.de - vieleicht hilft dir das ja. Ich würde an deiner Stelle evtl. die Infix- in eine Postfix-Notation umwandeln (glaube sowas im HOP gesehen zu haben) und diese dann evaluieren.\n\n

<!--EDIT|Ronnie|1123054651-->
renee
 2005-08-03 12:36
#5372 #5372
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Ronnie: Es gibt auch CPAN:Affix::Infix2Postfix
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/
Ronnie
 2005-08-03 15:04
#5373 #5373
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=renee,03.08.2005, 10:36]@Ronnie: Es gibt auch CPAN:Affix::Infix2Postfix[/quote]
Nett, dann bedarf es nur noch eines simplen Stacks um den umgeformten Term zu lösen.
<< >> 10 Einträge, 1 Seite



View all threads created 2005-08-03 01:18.