Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Logit
Anmeldungsdatum: 22.03.2005 Beiträge: 27
|
Verfasst am: 06. Apr 2005 17:22 Titel: Rechnen |
|
|
hi,
mach ich also mal wieder den anfang in einem der basic Theard.
Also, wenn ich einem Benutzer zwei Zahle eingeben lasse und sie dann quasi also Variable gesichert habe, will ich diese beiden Zahlen multiplizieren.
Normal kann ich es ja so anstellen:
? 2 * 3
Aber wenn ich ja Variablen habe, muss ich ja so was ähnliches eingeben:
? zahl1$ * zahl2$
Aber der kann das nicht.
Der kann ja nur +, und das nur, wenn er die beiden zusammenfügt.
Also wenn zahl1$ = 1; und zahl2$ = 2 ....
... schreibt er ja dann auch nur 12.
Kann ich nur die 2 Variablen zusammenfügen?
Ich hoffe ihr versteht, was ich will. |
|
Nach oben |
|
|
|
Tobias
Anmeldungsdatum: 15.02.2005 Beiträge: 149
|
Verfasst am: 06. Apr 2005 18:00 Titel: |
|
|
Der Fluch von Basic, dass man die Variablen nicht dimensionieren muss.
Dein Problem ist, dass Basic die variablen als Strings (Zeichenketten) einliest. Auf Zeichenketten ist aber keine Operation "*" definiert. (Du kannst ja auch nicht "Kuh"*Pferd" multiplizieren).
Mit dem "$" Zeichen sagst du Basic, dass die Variable eine String-Variable ist. Wir brauchen aber einen ganzzahligen Datentyp.
Dim zahl1 as Int
Dim zahl2 as Int
Input "Gib Zahl1 ein", zahl1
Input "Gib Zahl2 ein", zahl2
Print "Das Ergebnis lautet ", (zahl1+zahl2) |
|
Nach oben |
|
|
Logit
Anmeldungsdatum: 22.03.2005 Beiträge: 27
|
Verfasst am: 06. Apr 2005 18:11 Titel: |
|
|
klappt es denn dann?
Soll ich alles so eingeben, wie du es geschreiben hast? |
|
Nach oben |
|
|
Tobias
Anmeldungsdatum: 15.02.2005 Beiträge: 149
|
Verfasst am: 06. Apr 2005 18:20 Titel: |
|
|
Ich muss doch jetzt nicht extra erwähnen, dass man es evt. ausprobieren könnte? |
|
Nach oben |
|
|
Logit
Anmeldungsdatum: 22.03.2005 Beiträge: 27
|
Verfasst am: 07. Apr 2005 14:18 Titel: |
|
|
ich war auf einem Geburtstag und hatte vergessen mir qb mitzunehmen.
Trotzdem Danke für deine Antwort. |
|
Nach oben |
|
|
Logit
Anmeldungsdatum: 22.03.2005 Beiträge: 27
|
Verfasst am: 07. Apr 2005 14:36 Titel: |
|
|
aber kann ich den auch dazu bringen, dass er 16a² ausrechnet?
also, dass man jetzt sagen kann 4a*4a.
Sodass er die Zahl mit a angeben kann und die angegebene Zahl dann ^2 gerechnet werden kann. |
|
Nach oben |
|
|
Gast
|
Verfasst am: 07. Apr 2005 15:26 Titel: |
|
|
Auf nicht überaus komplizierte Art nicht. |
|
Nach oben |
|
|
Logit
Anmeldungsdatum: 22.03.2005 Beiträge: 27
|
Verfasst am: 07. Apr 2005 17:19 Titel: |
|
|
schade |
|
Nach oben |
|
|
Logit
Anmeldungsdatum: 22.03.2005 Beiträge: 27
|
Verfasst am: 07. Apr 2005 17:20 Titel: |
|
|
aber geht das auch komplizerit.
Ich meine mann muss ja "nur" a² oder anderes herausbekommen können. |
|
Nach oben |
|
|
ME
Anmeldungsdatum: 07.04.2005 Beiträge: 4 Wohnort: Mainz
|
Verfasst am: 07. Apr 2005 18:08 Titel: |
|
|
Ich weiß nicht genau, was du vorhast. Wenn der Benutzer lediglich einen Wert für a angeben soll, mit dem dann intern weitergerechnet wird, ist es kein Problem.
Willst du allerdings Eingaben vom Schema Rechenterm = "4a * 4a", die dann vom Programm als "16a²" errechnet und ausgegeben werden sollen, müsstest du dir einen eigenen Parser dafür programmieren (oder mal im Internet suchen, ob sich jemand bereits die Mühe gemacht hat), was allerdings schon nur für Terme ohne variable Ausdrücke einen erheblichen Aufwand darstellt.
Ein Beispiel:
Der Rechenterm ist "4+4". Dieser Term wird als Variable des Datentyps String eingegeben und muss nun entsprechend mathematischer Regeln interpretiert werden. In diesem Fall würde der String von links nach rechts Zeichen für Zeichen durchlaufen, wobei der Parser feststellen müsste, dass er mit einer Zahl beginnt (4), auf die ein Rechenzeichen (+) und schließlich eine weitere Zahl (4) folgt. Diese beiden Zahlen müssten nun in einen numerischen Datentyp umgewandelt und per Bedingung entsprechend des dazwischen stehenden Rechenzeichens zusammengerechnet werden.
Logisch formuliert also etwa so:
wenn rechenzeichen = "+" dann ergebnis = zahl1 + zahl2
Das ist allerdings nur die Spitze des Eisbergs, da ein Term schließlich auch so aussehen könnte: "8+4*(-4/(2+8))"
Selbst diese Aufgabe ist noch verhältnismäßig leicht zu lösen, wenn man rekursive Programmierung einsetzt, um der Klammerausdrücke Herr zu werden. Ich möchte das hier nicht weiter vertiefen.
Möchtest du nun Variablen in einen Term einfügen ("(4a+17b*2-7a)*a"), müsstest du vermutlich allein zur Speicherung einer Zahl aus diesem Term einen komplexen Datentyp einsetzen, der beispielsweise "4a" als
zahl1.wert = 4
zahl1.variable = "a"
speichert.
Eine Addition dürfte dann beispielsweise nur ausgeführt werden, wenn beide beteiligten Zahlen in ihrer "variable"-Eigenschaft übereinstimmten.
wenn zahl1.variable = zahl2.variable und rechenzeichen = "+" dann
{
ergebnis.wert = zahl1.wert + zahl2.wert
ergebnis.variable = zahl1.variable
}
Einen Termparser zu programmieren, stellt sicherlich eine interessante Herausforderung dar. Meine Gedanken dazu können zudem nicht mehr als ein grundlegender Ansatz sein, der nicht unbedingt praktikabel sein muss.
Ein solches Programm ist jedoch ganz sicher nicht nebenbei aus dem Stehgreif zu schreiben. Ich persönlich könnte mir vorstellen, dass man sich daran ganz schön die Zähne ausbeißen kann und das eher ein Thema für die Diplomarbeit in Informatik ist.
In der Hoffnung, etwas mehr Klarheit in die Problematik gebracht zu haben
Marc |
|
Nach oben |
|
|
|