malkavianer Geschrieben 11. Juni 2004 Geschrieben 11. Juni 2004 tag auch! - ich wollte mal kurz und knapp etwas erfragen, unzwar: ich soll für mein praktikum einen rechner programmieren,(als vorbild windows rechner) bis jetzt ohne probleme, (also addition, subtraktion, multi, divi, prozent und potenz) jetzt soll ich die funktionen einer "klammer rechnung" einbauen O_o - wie das? ( als beispiel schaut euch mal bei programme -> zubrhör - > "rechner" an und geht auf ansicht, und wechselt zu "wissenschaftlich") naja, ich hoffe es hat jemand verstanden was mein prob is und kann mir helfen! knöpfe für die anderen rechenarten habe ich schon gesetzt und als case select mit den index-nummern als integer ausgewählt, soll ich die klammer da jetzt auch reinhaun oder nicht? naja- hoffe ihr könnt mir helfen! :mod: Zitieren
-roTekuGeL- Geschrieben 11. Juni 2004 Geschrieben 11. Juni 2004 die sachen die in einer klammer stehen berechnest du erstmal separat und machst dann den rest... 2 * (2+3) erst 2+3 rechnen und dann 2 * dem ergebnis aus der kalmmer, also 5... Zitieren
NoOneKnows Geschrieben 11. Juni 2004 Geschrieben 11. Juni 2004 ist garnicht so einfach, zumindest wenn die klammerausdrücke sehr kompliziert werden. ne schöne technik in dem zusammenhang ist syntax-bäume zu verwenden, aber ich glaub du hast davon wohl noch nix gehört, oder? man baut sich anhand der eingaben einen baum mit je zwei unterknoten pro hauptknoten auf. ein knoten ist entweder eine zahl, wenn es keine untergeordneten knoten besitzt, oder es entspricht einem rechenzeichen. je nachdem in welcher reihenfolge zahlen, rechenzeichen, klammer auf und klammer zu auftreten wird der baum konstruiert, heißt elemente werden zum beispiel unter- oder übergeordnet eingefügt. am schluß braucht der baum quasi nur noch durchgerechnet zu werden. ist zwar erstmal nicht so einfach, aber wenns einmal funktioniert, gehts dafür auch mit beliebig komplexen ausdrücken. Zitieren
malkavianer Geschrieben 14. Juni 2004 Autor Geschrieben 14. Juni 2004 aaaaaalso, ich hab zwar nich wirklich viel verstanden, aba das is erstmal der source-code ohne klammern, kannst du mir anhand eines kleinen "schubs" oder beispiels zeigen wie genau du das meinst plz? ________________________________________________________________ Option Explicit Dim fblnErgebniss As Boolean Dim flngButton As Long Dim fdblZahl As Double Private Sub cmd_neu_Click() txtZahl1.Text = "" flngButton = 0 End Sub Private Sub cmdknopp_Click(index As Integer) If txtZahl1.Text = "" Then Exit Sub If index = 7 Then flngButton = 0 txtZahl1.Text = txtZahl1.Text * CDbl((fdblZahl) / 100) End If If IsNumeric(txtZahl1.Text) = True Then 'Hier wird überprüft ob im Textfeld wirklich eine Zahl steht If flngButton <> 0 Then 'in dieser "if anweisung" wird vorher festgestellt ob ein knopf "ungleich" der 0 gedrückt wurde Select Case flngButton 'jeh nach index-nr. der zahl wird eine der folgenden rechenarten gewählt Case 1 fdblZahl = fdblZahl + CDbl(txtZahl1.Text) 'Addition Case 2 fdblZahl = fdblZahl - CDbl(txtZahl1.Text) 'Subtraktion Case 3 fdblZahl = fdblZahl * CDbl(txtZahl1.Text) 'Multiplikation Case 4 fdblZahl = fdblZahl / CDbl(txtZahl1.Text) 'Division Case 5 txtZahl1.Text = fdblZahl ^ CDbl(txtZahl1.Text) 'potenz Case 6 txtZahl1.Text = Sqr(txtZahl1.Text) 'Wurzel End Select Else If index = 6 Then txtZahl1.Text = Sqr(txtZahl1.Text) If index <> 7 Then fdblZahl = CDbl(txtZahl1.Text) 'falls vorher bereits eine andere rechenart benutzt wurde, wird diese in fdblZahl behalten End If flngButton = index 'hier wird durch die indexnummer unterschieden welcher knopf gedrückt wurde Else MsgBox "richtige zahl eintippen" = vbOKOnly ' falls im textfeld keine zahl eingegeben wurde, wird diese fehlermeldung angezeigt Exit Sub End If If index < 6 Then txtZahl1.Text = "" End Sub Private Sub CmdErgebniss_Click() 'hier wird das ergebniss berechnet Select Case flngButton Case 1 txtZahl1.Text = fdblZahl + CDbl(txtZahl1.Text) 'Addition Case 2 txtZahl1.Text = fdblZahl - CDbl(txtZahl1.Text) 'Subtraktion Case 3 txtZahl1.Text = fdblZahl * CDbl(txtZahl1.Text) 'Multiplikation Case 4 txtZahl1.Text = fdblZahl / CDbl(txtZahl1.Text) 'Division Case 5 txtZahl1.Text = fdblZahl ^ CDbl(txtZahl1.Text) 'potenzrechnung Case 7 txtZahl1.Text = fdblZahl + txtZahl1.Text 'prozentergebniss End Select flngButton = 0 'der startwert wird wieder auf 0 gesetzt fblnErgebniss = True End Sub Private Sub cmdKomma_Click() txtZahl1.Text = txtZahl1.Text & "," End Sub Private Sub cmdNummer_Click(index As Integer) If fblnErgebniss = True Then txtZahl1.Text = "" & index Else txtZahl1.Text = txtZahl1.Text & index End If fblnErgebniss = False End Sub Private Sub lblrechenweg_Click() lblrechenweg = lblrechenweg & " " & fdblZahl End Sub Private Sub lblrechenweg_DblClick() lblrechenweg = "" End Sub Zitieren
malkavianer Geschrieben 14. Juni 2004 Autor Geschrieben 14. Juni 2004 na danke, stempel mich doch zum kompletten volltrottel ab... O_o ich weiss schon wie man klammern rechnet, was mich interesiert ist, wie man es programmieren kann, das der computer in klammern rechnet?! (btw.: es handelt sich hier um VB6.0!) die sachen die in einer klammer stehen berechnest du erstmal separat und machst dann den rest... 2 * (2+3) erst 2+3 rechnen und dann 2 * dem ergebnis aus der kalmmer, also 5... Zitieren
Gast Geschrieben 14. Juni 2004 Geschrieben 14. Juni 2004 Zwar ist VB 6 keine objektorientierte Sprache, aber man kann trotzdem im begrenztem Umfang Objekte erstellen. Sobald der Benutzer eine "("-Klammer eingibt verlässt Du die aktuelle Rechnung, erstellst Du ein neues Rechnungsobjekt und verarbeitest die Ergebnise solange bis die ")"-Klammer kommt, dann übergibst Du das Ergebnis an die unterbrochene Rechnung und arbeitest dann weiter. Zitieren
malkavianer Geschrieben 14. Juni 2004 Autor Geschrieben 14. Juni 2004 weisste was? ^^ das war der nötige schlag auf den hinterkopf den ich gebraucht habe :uli danke dir vielmals!!! :marine Zwar ist VB 6 keine objektorientierte Sprache, aber man kann trotzdem im begrenztem Umfang Objekte erstellen. Sobald der Benutzer eine "("-Klammer eingibt verlässt Du die aktuelle Rechnung, erstellst Du ein neues Rechnungsobjekt und verarbeitest die Ergebnise solange bis die ")"-Klammer kommt, dann übergibst Du das Ergebnis an die unterbrochene Rechnung und arbeitest dann weiter. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.