Schrift
[thread]8693[/thread]

Anfänger Frage Taschenrechner: Erstellung einen Taschenrechners Anfänge



<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten
ASDS
 2007-01-29 12:57
#73762 #73762
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Hallo ihr lieben,

es meldet sich hier eine totale Anfängerin.
Ich soll einen Taschenrechner in Perl programmieren.
jetzt stellen sich mir folgende Fragen:

1) Den Input, welchen ich über die <STDIN> einlesen soll z.B wie folgt aussehen: (3*4) + ( 1*2). Soll ihn das als Stringt ode Array einlesen? Was ist für die weitere Verwendung einfacher?

2) die Funktion eval darf ich leider nicht verweden, ich muss sie sozusagen nachprogrammieren.
und das wirft mich dann weiters vor problem. Wie sag ich ihm... das is eine Klammer.. die "ignorier" bis zu nächsten und dann rechne den Inhalt??

wisst ihr was ich meine?
Dass er eben checkt das bei dem Ausdruck (3*4) + (1*2) an der ersten postion HIER eine klammer steht. er sich das merken soll und weitergehen soll.... bis die klammer sich schließt, dann den inhalt berechnet.
und was is wenn die formel 3+4 * (1*2) lautet.. dann steht keine Klammer am anfang.

wisst ihr was ich meine.
Bin momentan bissi überfragt, das erstellen der Eingabe is kein problem, ob Array oder String, ist schon erstellt... aber der eigentliche Body des Rechners stell mich vor ein riesen problem.

Habt ihr vielleicht Tipps?

lg
ASDS
 2007-01-29 13:10
#73763 #73763
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Und wenn ich es mit mittels Array machen? wie lang ist dan das Array, die Formel kann ja unendlich lang sein...

#my $laenge = @array; ##definieren der Länge des Arrays, über einen skalaren Kontext
# for(my $i = 0; $i < @laenge; $i++)
# if postion i = zahl dann

das hab ich schon.. so im gedanken... versteht ihr was mir unklar ist. selbst über die länge des arrays kann ich nicht gehen. aaaaaaaaaaaach kääääse.
ASDS
 2007-01-29 13:23
#73764 #73764
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
my $string = ""; 
my @array = ();
for ( $string = <STDIN>)
{
chomp($string);
printf("Ihre Formel lautet, %s !\n",$string); ## Ausgabe mittels Zeichenkette
@array = split(/\s+/,$string);
for (my $i = 0; $i < @array; $i++)
{
print "@array[$i] \n"; ## Ausgabe der jeweiligen Positionen im Array
}

}


so, das is mal die Eingabe, als String...wobei ich den Array teiler auch schon dabei hab, im falle dessen das ein Array gscheiter ist...
Nur jetzt komm ich nicht weiter... AAAAAAAAAAAAH, da fällt mir ein.. wenn ich Kommazahl berücksichtigen will, muss ich hier noch etwas verändern?

lg\n\n

<!--EDIT|ASDS|1170071339-->
nepos
 2007-01-29 13:42
#73765 #73765
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Könntest du bitte deinen Code in [ code] [ /code ] einschließen (ohne Leerzeichen natürlich)? Dann wirds etwas übersichtlicher :)
Danke dir :)
pq
 2007-01-29 13:47
#73766 #73766
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
CPAN:Math::Expression
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
ASDS
 2007-01-29 13:50
#73767 #73767
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
Is lieb, aber was fang ich damit ich.
Ich hab doch geschrieben, dass ich sozusagen eval nachbauen muss....

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
#!/usr/bin/perl 
use strict;

#my $input = 1;

###############
# Eingabe einer Formel über die Tastatur
###############
print "Bitte geben sie eine Formel ein und trennen sie mittel Leerzeichen : ";

my $string = "";
my @array = ();
for ( $string = <STDIN>)
{
chomp($string);
printf("Ihre Formel lautet, %s !\n",$string); ## Ausgabe mittels Zeichenkette
@array = split(/\s+/,$string);
for (my $i = 0; $i < @array; $i++)
{
print "@array[$i] \n"; ## Ausgabe der jeweiligen Positionen im Array
}

}

my $ergebnis = eval($string);
print sprintf("%.2f \n", $ergebnis );


so bring ichs auch zamm, das passt aber nicht.
renee
 2007-01-29 13:56
#73768 #73768
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dürfen es geschachtelte Klammern sein? Ist sichergestellt, dass nicht innerhalb der Klammern Leerzeichen auftauchen?
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/
lichtkind
 2007-01-29 13:56
#73769 #73769
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
vielleicht interessiert dich auch ein graphischer Taschenrechner:
http://wiki.perl-community.de/bin....apitel5\n\n

<!--EDIT|lichtkind|1170075015-->
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
ASDS
 2007-01-29 14:02
#73770 #73770
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
*dummbin* meinst du mit geschachtelten Klammern folgendes:
1* (2+ ( 3*4) - 4) / 3
oder etwas anderes.

Sichergestellt, dass in der Klammer kein Leerzeichen ist:
hm ich kanns ihm bei der Eingabe sagen


Code: (dl )
print "Bitte geben sie eine Formel ein und das OHNE Leerzeichen: ";
ASDS
 2007-01-29 14:06
#73771 #73771
User since
2007-01-29
115 Artikel
BenutzerIn
[default_avatar]
[quote=lichtkind,29.01.2007, 12:56]vielleicht interessiert dich auch ein graphsicher Taschenrechner:
http://wiki.perl-community.de/bin....apitel5[/quote]
Das is lieb von dir, mit dem grafischen TR, allerdings ist hier auch wieder eval gearbeitet worden. UND DAS SOLL oder darf ich ja nicht...
<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten



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