Schrift
[thread]8693[/thread]

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



<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten
ASDS
 2007-01-29 19:42
#73792 #73792
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Geh ich richtig in der annahme das dieses Programm also so laufensollte:
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
#!/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 = <STDIN>)
{
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
#}

}


while($formula =~ s/\(([^\(]*?)\)/calc($1)/eg)
{
}

print sprintf("%.2f\n", calc($formula));

sub calc{
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) = @_;
return $x1 + $x2;
}
## SubMethode Muliplikation definieren
sub mal{
my ($x1,$x2) = @_;
return $x1 * $x2;
}

## SubMethode Subtraktion definieren
sub minus{
my ($x1,$x2) = @_;
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;


Bei mir kommt nämlich 0 raus...
renee
 2007-01-29 19:50
#73793 #73793
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach noch aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
for ( $formula = <STDIN>)
{
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
#}

}


das hier:
Code: (dl )
1
2
3
$formula = <STDIN>;
chomp($formula );
printf("Ihre Formel lautet, %s !\n",$formula ); ## Ausgabe mittels Zeichenkette


dann sollte es passen...
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/
renee
 2007-01-29 19:55
#73794 #73794
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
calc muss so aussehen:
Code: (dl )
1
2
3
4
5
6
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;
}


und subcalc so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
}
}
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/
ASDS
 2007-01-29 19:55
#73795 #73795
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Nein, LEIDER.
Kommt noch immer Null raus.

das calc guck ich ma noch schnell an...ich geb dann bescheid\n\n

<!--EDIT|ASDS|1170093385-->
ASDS
 2007-01-29 19:59
#73796 #73796
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Nein, leider auch mit der calc is Null... soll ich nochmal den ganzen Code reinstellen? vielleicht is ja irgendwo ein kleiner Hund drinnen
renee
 2007-01-29 20:00
#73797 #73797
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja, stell nochmal rein...
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/
ASDS
 2007-01-29 20:09
#73798 #73798
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
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/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 = <STDIN>)
#{
# 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 = <STDIN>;
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;


wobei ich so nicht wirklich glücklich bin... wollt dein programm ja net zu 100% übernehmen.
Jetzt kommt net mehr null raus, sondern ejtzt is überhaupt was falsch gelaufen, denn er schreibt was von: einer Klammer fehlt... line 91.. ich gucks mir auch gleich nochmal an hier herinnen, es is nämlich hier wirklich übesichticher als im editor
renee
 2007-01-29 20:21
#73799 #73799
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So wie Du es hier gepostet hast, passt es...
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/
ASDS
 2007-01-29 20:30
#73800 #73800
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
sehr witzig..habs jetzt direkt rauskopiert und in eines .pl und jetzt funkzs das auch okay...
gut.. und nachdem deinen code ja net 100/ übernehmen wollt bzw. ihn verstehen wollt, muss ich mir jetzt:
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){};

nochmla genau angucken. Diese RegEx oder wie man sie auch immer abkürzt sind nicht meins.

Aber herzlichen Dank für deine super HIlfe....
kann ich mich bei dir revangieren?

liebe grüße, danke
renee
 2007-01-29 21:07
#73801 #73801
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dieser Part beachtet die "Punkt-vor-Strich"-Regel. Zuerst werden alle Teile mit * oder / berechnet, also bei 12 + 3 * 4 + 4 wird daraus 12 + 12 + 4 und in der zweiten while-Schleife werden dann die "Strich"-Rechnungen gemacht...

Der ReguläreAusdruck(\d+)\s*([\*\/])\s*(\d+) matcht diese Sachen:

1 oder mehrere Ziffern (das landet in $1).
0,1 oder mehrere Leerzeichen (wird nicht gespeichert)
+ oder - (landet in $2)
0,1 oder mehrere Leerzeichen (wird nicht gespeichert)
1 oder mehrere Ziffern (das landet in $3).

also z.B. 12 + 3 oder 55-22

Interessantes zum Thema RegEx:
http://www.regenechsen.de/phpwcms/index.php?regex_allg (RegEx allgemein)
http://www.uni-kiel.de/rz/lehr/doku/regulaere_ausdruecke/ (Allgemein)
http://www.ssw.uni-linz.ac.at/Teachin....ra.html

perlrequick
perlretut
perlreref
perlre\n\n

<!--EDIT|renee|1170097713-->
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.