C# Logische Auswertung eines Strings (Taschenrechner)

Status
Für weitere Antworten geschlossen.
Das sieht falsch aus. Wofür sind die verschachtelten Schleifen? Schau dir nochmal das Beispiel von Raijin an, das kommt komplett ohne Schleife aus.
Die Funktion muss nur das folgende machen:
1. Nimm die erste Zahl X aus dem String raus
2. Nimm den darauf folgenden Operator "+" aus dem String raus
3. return X+Term(restString), wobei restString eben der String ohne X und ohne + ist
Und halt noch ne Abbruchbedingung, wenn nach der Zahl X der String schon zuende ist: return X
 
Ja, ich checks einfach nicht. Ich habe keine Ahnung was ich mach... ich probiers später nochmal.
 
BeBur schrieb:
1. Nimm die erste Zahl X aus dem String raus
2. Nimm den darauf folgenden Operator "+" aus dem String raus
3. return X+Term(restString), wobei restString eben der String ohne X und ohne + ist
Und halt noch ne Abbruchbedingung, wenn nach der Zahl X der String schon zuende ist: return X

Das geht meinem Verständnis nach deshalb nicht, weil die Zerlegung nicht linear ist.
also zB 2*2-2 wäre:
2
*
2-2;
dann geht er weiter und zerlegt 2-2
2
-
2;
dann geht er zurück und rechnet 2*0. Zumindest passiert mir das.
Ich muss zuerst die Klammern auflösen und dann Punkt vor Strich, aber was wenn davor oder dahinter noch Strichoperatoren sind?
 
Mathematik wertet man im Rechner am einfachsten in präfix oder postfix aus. Da brauchst du dir nämlich keine Sorgen um Klammern und Operatorpräzedenz mehr machen. Um das aus Infix-Notation herzustellen eignet sich der Shunting-Yard-Algorithmus von Dijkstra.
 
  • Gefällt mir
Reaktionen: Raijin, BeBur, Schwachkopp und 2 andere
Ja, ich glaub ich cancel das Projekt jetzt. Ist mir zu mühsam. Vllt komm ich ein andermal drauf zurück.
 
Kann mir jemand erklären warum beim folgenden input string "123+456-7*2" das Minus nicht als Symbol erkannt wird?
Code:
private string Term(string input)
        {
            string[] output = new string[input.Length];
            char[] operation_stack = new char[input.Length];
            int j = 0, k = 0;
            while (input.Length > 0)
            {
                for (int i = 0; i < input.Length - 1; i++)
                {
                    if (char.IsSymbol(input[i]))
                    {
                        operation_stack[j] = input[i];
                        output[k] = input.Substring(0, i);
                        resultstring = input.Split(operation_stack[j], 2);
                        input = resultstring[1];
                        k++;
                        j++;
                        i = 0;
                    }
                }
            }
            return input;
        }
Ok, er erkennt das "-" überhaupt nicht als Symbol...
 
Zuletzt bearbeitet:
Ja, ekelhafte Plattform. Ich habe auch dort das selbe gefragt und wurde sofort gemeldet wegen "off-topic" oder "scheinfrage" und was weiß ich nicht was. Also man muss den Programmieren einmal wirklich vor Augenhalten, dass sie gar nicht so cool und toll sind, wenn sie sich darum bemühen, so gut wie möglich wie eine Maschne zu denken. Es ist echt schon ekelhaft was sich manche darauf einbilden.
 
Oder man nimmt Feedback einfach mal an und überlegt sich, ob die Frage nicht vielleicht OffTopic war oder was auch immer bemängelt worden ist.
 
BeBur schrieb:
Oder man nimmt Feedback einfach mal an und überlegt sich, ob die Frage nicht vielleicht OffTopic war oder was auch immer bemängelt worden ist.
Wir haben das dort bissl auch diskutiert - aber wie man ja sieht, haben sich auch schon andere darüber gewundert. Das Minus-Zeichen ist mehrdeutig, und dass es nicht in MathSymbol ist unintuitiv. Soll mir recht sein wenns so ist, aber deswegen ist die Frage ncht "off topic". Ich bin wirklich an der Stelle gehängt und hab mich gewundert. Ich bin kein Pro-Programmierer und mich selbst so rechtfertigen zu müssen ist schon zweifelhaft genug...
 
  • Gefällt mir
Reaktionen: Schwachkopp
DeepComputer schrieb:
ekelhafte Plattform
Nein, sondern eigentlich die Seite, wenn es um Fragen zu Programmierung geht. Mind. 90% meiner Probleme löse ich über Stackoverflow. Und nicht indem ich dort neue Threads erstelle sondern einfach nur mal lese. Denn nahezu alle Probleme hat schon mal ein anderer gehabt. Speziell wenn es wie bei dir um Grundlagen geht.
Und dass die so stringent bei OffTopic bzw DuplicateContent sind, ist sinnvoll.
 
Du - mein Urteil ist nicht verbindlich. Ich nutze die Seite auch, aber eine gewisse Willkür lässt sich nicht abreden, bzw. eben einen "Elitismus". Als wären Grundlagenfragen eine Bedrohung für das Image. Und wehe du hast nicht vorher alles möglich getan um das Problem selbst zu lösen - ja dann bist du dran! Manche Programmierer sind auf ihrer Selbstsuffizienz besonders stolz - die sind dann auch dementsprechend schnell gereizt! Wenn man schon auf dem Level ist darüber philosophieren zu müssen ob eine Frage überhaupt zulässig ist oder nicht, dann sollte man echt einbischen Abwechslung in sein Leben bringen. Aber sowas möchte ich eigentlich nicht diskutieren... also lassen wir das Thema. Ich mag das einfach nicht wenn Leute mit anständigen Fragen so zerfetzt werden.
 
Das recht strikt moderiert wird ist vermutlich ein Grund, wieso SO so erfolgreich geworden ist.
 
  • Gefällt mir
Reaktionen: mental.dIseASe und RenoV
Kann sein... Wie gesagt, ich war auch von der Seite begeistert - bis ich meine erste Frage gestellt hab... dann ist mir klarer geworden wer sich dahinter befindet. Jetzt will ich es nicht mehr so unterstützen wie zuvor. Wozu sich am Gemeinplatz tummeln, wenn man dort nicht willkommen ist? Es gibt auch kleine Kneipen abseits des Hauptplatzes, die leisten das Selbe und noch mehr.

Und weil du von Erfolg gesprochen hast - es ist schon merkwürdig was man in einem kapitalistischen System als "Erfolg" versteht. Ein Gemeinplatz ohne Tiefe. Jeder ist willkommen - und bist du einmal dort - bist du ein niemand! Und die die dort verweilen, werden dann zu Zombies und versteifen sich in ihrer Sache. Diese Versteifung möchte ich nicht Erfolg nennen. Sie mag zwar ihren Zweck erfüllen, aber das ist es mir nicht wert 10 mal überlegen zu müssen bevor ich eine Frage stellen darf. Aber so ist nun mal das Internet - ein Ort für alle und keinen.
 
RenoV schrieb:
Das ist doch Unsinn, was du hier schreibst.
Weil du in irgendeiner Position wärst über Sinn und Unsinn zu entscheiden... ge bitte, lass es einfach.
Es ist schon immer spannend, warum man sich zwar gerne "wertfrei" gibt, aber bei jeder Wertung, die einem nicht passt, man gleich zickt? Was ist das für ein Mechanismus dahinter?
Wenns dir nicht zu billig ist dein Wissen von SO zu beziehen, dann bitte machs doch. Sollst du glücklich damit werden. Mir ist es ziemlich egal.
 
Zuletzt bearbeitet:
DeepComputer schrieb:
Es ist schon immer spannend, warum man sich zwar gerne "wertfrei" gibt, aber bei jeder Wertung, die einem nicht passt, man gleich zickt?
Hast du das mal auf dich Reflektiert?
Grad bist du hier stark am zicken.

Jemand hat dich zurecht gewiesen (aus welchen Gründen auch immer) und das einzige, was dir grad einfällt ist, darüber zu lästern.
In dem anderen Thema, in dem du dich über dieses Thema ausgelassen hast, habe ich versucht dir objektiv darzulegen, warum du nicht erwarten kannst, in einem Forum o.ä. an die Hand genommen zu werden.
Reagiert hast du darauf nicht, ich mutmaße, weils grad nicht in dein Narrativ passt und deine aktuelle Gefühlslage nicht wiederspiegelt.

Mein Rat: Nimm erstmal Abstand von dem Thema und such die Fehler nicht bei anderen.
 
Ich habe dein Posting nicht gelesen, weil ich nicht dachte, dass es auf mich bezogen ist. Ich verfolge nicht immer jede Antwort. Also tut's mir leid wenn hier ein Missverständnis entstanden ist. Meine Meinung dir gegenüber ist völlig unbefleckt und hättest du dir eine Reaktion von mir erwartet im anderen Posting, so tuts mir leid. Ich habe (am Nachmittag) gesehen, dass es ein längerer Beitrag war und ich dachte nicht, dass er an mich gerichtet ist. Ich habe und nehme mir nicht immer die Zeit alles zu lesen.

Aber egal, dies ist wirklich nicht der Ort sich persönlich auszutauschen. Ich hab soeben gut gegessen und möchte den Abend entspannt ausklinken lassen. Unterhalten wir uns das nächste mal wieder übers Programmieren.
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben