Schrift
[thread]7238[/thread]

Währungsumrechner: Euro und DM haben das gleich Ergebnis (Seite 3)



<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
Gast Gast
 2005-09-08 19:51
#57491 #57491
Hi leute ich bin mir sicher langsam nervts mit dem Rechner. Doch leider muss ich auch einen machen. Dieser soll punkt vor strich beachten und den string nach unzulässigen eingaben durchsuchen. Also des mit den unzulässigen eingaben hab ich gelöst aber des mit dem ausrechen noch nciht ganz:).Ich hab überhaupt keinen peil wie ich des machen soll.

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
#! /usr/bin/perl -w
################################## Taschenrechner ################################
# #
#Programmierer: Max Florian #
#Unterstützung: Benda Franz #
# #
#Programm: Dies ist ein einfacher Taschenrechner der die vier Grundrechenarten #
# beherscht. Desweiteren war die Aufgabe, dass der Rechner Punkt vor #
# Strich und negative Zahlen beachtet. Zur Sicherheit soll eine #
# Fehlermeldung erscheinen sollte eine ungueltige Ziffer eingeben werden. #
# #
##################################################################################

use strict;
use warnings;

#Ueberpruefen der Usereingaben
sub eingabepruef
{
my $usreingabe = $_[0];
if($usreingabe !~ /^[\d+\+\-\*\/\(\)]+$/)
{
print "Fehler! Sie haben einen oder mehrere Buchstaben verwendet\n";
exit;
}
}


#Hauptprogramm
sub main
{
#Variablendefinition
my $usreingabe = "0"; #Speichert die eingebene Rechnung
my $Ergebnis = "0"; #Zeigt ausgerechnetes Ergebnis an

#Usereingaben werden gespeichert
print "Geben sie ihre Berechung ein:\n";
chomp ($usreingabe = <STDIN>);


#Richtige Usereingaben (keine Sondereingaben)?
&eingabepruef($usreingabe);


#Berechnung der Eingaben
#Zerlegen des Strings
#
#$usreingabe =~ /^(\d+\.?\d*)(d+\.?\[\d+\+\-\*\/]{1})(\d*)([\d+\+\-\*\/]{1})(\d+\.?\d*)$/


print "Ergebnis: $usreingabe\n";


}
main();
exit(0);


(Ich weis der Code sieht nicht so professionell aus wie ihr des gewohnt seid, aber vielleicht könnt ihr mir trozdem helfen)

Zuerst hab ich gedacht dass die eingaben von STDIN in der Variablen einfach berechnet werden, aber des war leider nicht der fall.
Ronnie
 2005-09-08 20:47
#57492 #57492
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Du kannst ja, statt dir Gedanken über Punkt-vor-Strich-Rechnung zu machen, dir Gedanken machen wie du von Infix- zu Postfix-Notation (z.B. CPAN Affix::Infix2Postfix) kommst - wo Punkt-vor-Strich-Rechnung kein Thema ist. Prinzipiell sind alle diese Terme Bäume, du musst sie nur in eine entsprechende Datenstruktur bekommen und kannst sie dann durch Traversierung entsprechend lösen (Beispiel auf http://www.ronnie-neumann.de).

Jetzt die einfache (schmutzige) Methode: Wenn du sicherstellst das es sich eindeutig um einen mathematischen Term handelt, kannst du diesen auch per eval-Befehl von Perl evaluieren lassen und Perl das Problem mit der Punkt-vor-Strich-Rechnung überlassen.\n\n

<!--EDIT|Ronnie|1126198166-->
chakopelli
 2005-09-08 22:57
#57493 #57493
User since
2005-09-08
3 Artikel
BenutzerIn
[default_avatar]
DANKE!!!!!!
Jetzt hab ichs der des mit dem eval geht des ist ja so easy dann!
Wie kommst du auf diesen Befehl bzw wo schaust du sowas nach?
Und jetzt sag nciht des Kamelbook weil des hab ich auch :)

Ich übergeb ja nur zeichenketten denn den in meiner subrutine überprüf ich ja den String ....
Ronnie
 2005-09-09 01:26
#57494 #57494
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=chakopelli,08.09.2005, 20:57]Wie kommst du auf diesen Befehl bzw wo schaust du sowas nach?[/quote]
http://perldoc.perl.org/perlfunc.html (wenn erreichbar) ansonsten per Kommandozeile:
Code: (dl )
perldoc perlfunc

Aber Achtung: eval ist eine höchst gefährliche Funktion, wenn Eingaben ungeprüft evaluiert werden.\n\n

<!--EDIT|Ronnie|1126214829-->
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2005-08-28 12:45.