Zum Inhalt springen
  • 0

C# code in der Ausgabe auf Nachfrage auf Anfang setzen


 Teilen

Frage

Hey, könnte jemand mir netterweise Zeigen was ich verändern muss, damit ich die das Programm nochmal laufen lassen kann, ohne es zu beennden.

Beste Grüße und danke schon mal 

Max Schlensag

 

 

 

 

 

 

namespace Taschenrechner2
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Benutzer begrüßen
            Console.WriteLine("Hallo Benutzer, bitte Formel eingeben");

            //string gleichung = "13*-3";
            // string gleichung = "12*13";
            string gleichung = Console.ReadLine();

            // nächsten Operator ermitteln
            char operatorWert = GetOperator(gleichung);

            while (operatorWert != ' ')
            {
                int index = gleichung.IndexOf(operatorWert);

                Console.WriteLine("Der Operator ist an Stelle {0}", index);

                int positionVorherrigerOperator = GetVorherrigerOperator(gleichung, index);

                string wert1 = "";

                for (int i = index - 1; i >= 0; i--)
                {
                    if (i > positionVorherrigerOperator)
                    {
                        wert1 = gleichung + wert1;
                    }
                }
                // Operator suchenl
                Console.WriteLine(wert1);

                int positionNaechsterOperator = GetNaechsterOperator(gleichung, index + 1);

                string wert2 = "";

                for (int index2 = index + 1; index2 < gleichung.Length; index2++)
                {
                    if (index2 < positionNaechsterOperator || positionNaechsterOperator == -1)
                    {
                        wert2 = wert2 + gleichung[index2];
                    }
                }

                Console.WriteLine(wert2);

                // jetzt versuchen wir zu rechnen
                double zahl1 = double.Parse(wert1);
                double zahl2 = double.Parse(wert2);

                double ergebnis = Rechne(zahl1, zahl2, operatorWert);

                gleichung = gleichung.Replace(wert1 + operatorWert + wert2, ergebnis.ToString());
                
                operatorWert = GetOperator(gleichung);
            }
            //Ergebnis ausgeben plus Rechnung
            Console.WriteLine("Ergebnis: " + gleichung);
            Console.WriteLine("Wollen sie noch eine Rechnung rechnen, dann schreiben sie j wenn sie keine weitere Rechnung rechen wollen n");
            Console.ReadKey();

            


        }

        //switch 
        private static double Rechne(double zahl1, double zahl2, char operatorWert)
        {
            switch (operatorWert)
            {
                case '*': return zahl1 * zahl2;
                case '/': return zahl1 / zahl2;
                case '+': return zahl1 + zahl2;
                case '-': return zahl1 - zahl2;
            }

            throw new ArgumentException("da hat was nicht geklappt");
        }
        //Methode
        private static char GetOperator(string gleichung)
        {   //mal rechnung
            for (int i = 0; i < gleichung.Length; i++)
            {
                char zeichen = gleichung;
                char zeichen2 = i > 0 ? gleichung[i - 1] : ' ';
                
                if (zeichen == '*' && IsOperator(zeichen, zeichen2))
                {
                    return '*';

                    


                }
                if (zeichen == '/' && IsOperator(zeichen, zeichen2))
                {
                    return '/';
                }


                

            }
            //geteilt rechnung
            for (int i = 0; i < gleichung.Length; i++)
            {
                char zeichen = gleichung;
                char zeichen2 = i > 0 ? gleichung[i - 1] : ' ';

                if (zeichen == '/' && IsOperator(zeichen, zeichen2))
                {
                    return '/';
                }
            }
            //plus rechnung
            for (int i = 0; i < gleichung.Length; i++)
            {
                char zeichen = gleichung;
                char zeichen2 = i > 0 ? gleichung[i - 1] : ' ';

                if (zeichen == '+' && IsOperator(zeichen, zeichen2))
                {
                    return '+';
                }
            }
            //minus rechung
            for (int i = 0; i < gleichung.Length; i++)
            {
                char zeichen = gleichung;
                char zeichen2 = i > 0 ? gleichung[i - 1] : ' ';

                if (zeichen == '-' && IsOperator(zeichen, zeichen2))
                {
                    return '-';
                }
            }

            return ' ';
        }

        private static int GetNaechsterOperator(string gleichung, int position)
        {
            int result = -1;

            for (int i = position; i < gleichung.Length; i++)
            {
                char zeichen = gleichung;
                char zeichen2 = i > 0 ? gleichung[i - 1] : ' ';

                if (IsOperator(zeichen, zeichen2))
                {
                    result = i;
                    break;
                }
            }

            return result;
        }
        //Zweiten Operator finden
        private static int GetVorherrigerOperator(string gleichung, int index)
        {
            int result = -1;

            for (int i = index - 1; i >= 0; i--)
            {
                char zeichen = gleichung;
                char zeichen2 = i > 0 ? gleichung[i - 1] : ' ';

                if (IsOperator(zeichen, zeichen2))
                {
                    result = i;
                    break;
                }
            }

            return result;
        }
        // Zum erkennen, dass es kein Operator ist
        private static bool IsOperator(char zeichen, char zeichen2)
        {
            if (zeichen == '*' || zeichen == '/' || zeichen == '+' || zeichen == '-')
            {
                if (zeichen2 == '*' || zeichen2 == '/' || zeichen2 == '+' || zeichen2 == '-' || zeichen2 == ' ')
                {
                    return false;
                }

                return true;
            }

            return false;
        }
    }
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

18 Antworten auf diese Frage

Empfohlene Beiträge

  • 1

Lagere das Zeug aus deiner Main() erstmal ein eine eigene Methode, die dann so lange läuft, wie deine Methode true zurückgibt (also an die Schleife). Ob true oder false zurückkommen entscheidet halt der Benutzer, wenn du abfragst, ob er noch eine Rechnung machen will.

Übrigens: Das hättest du locker in den anderen Thread packen können. Ist schließlich das gleiche Thema. 

Bearbeitet von KeeperOfCoffee
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Und noch eine kleine Randbemerkung: es gibt im Editor die Code Tags "<>".

Damit wird der Code formatiert im Thread dargestellt. Das würde die Übersicht wesentlich verbessern. ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Um das noch mal näher aufzugreifen: Dies ist kein Forum, wo man die Aufgaben von anderen übernimmt. Das musst du schon selbst machen. Wir können dir zwar zu konkreten Problemen Antworten geben aber wenn wir dir jetzt nun zeigen, was du genau machen sollst, lernst du nichts dazu.

Ich kann dir den Hinweis geben, dass du dir mal while-schleifen anschauen sollst. 

Noch eine Frage: Machst du gerade eine Ausbildung zum Fachinformatiker - Anwendungsentwickler und dein Chef ist dein Ausbilder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 3 Minuten schrieb Whiz-zarD:

Um das noch mal näher aufzugreifen: Dies ist kein Forum, wo man die Aufgaben von anderen übernimmt. Das musst du schon selbst machen. Wir können dir zwar zu konkreten Problemen Antworten geben aber wenn wir dir jetzt nun zeigen, was du genau machen sollst, lernst du nichts dazu.

Ich kann dir den Hinweis geben, dass du dir mal while-schleifen anschauen sollst. 

Noch eine Frage: Machst du gerade eine Ausbildung zum Fachinformatiker - Anwendungsentwickler und dein Chef ist dein Ausbilder?

Okay werde ich machen und ja mach ich plus er ist mein chef

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 14 Minuten schrieb Whiz-zarD:

Auweia...

so wie ich das verstanden habe, kommt das mit den Schleifen von seinem Chef.

So wie ich da sehe fehlen hier noch grundlegende Kenntnisse. 

Bitte erst mal ein wenig üben, bevor du an dem Rechner weitermachst.

Bearbeitet von KeeperOfCoffee
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

So, wie der hier steht, kann er gar nicht laufen:

private static char GetOperator(string gleichung)
{   //mal rechnung
    for (int i = 0; i < gleichung.Length; i++)
    {
        char zeichen = gleichung;
        [...]
    }
    [...]
}

Der Parameter "gleichung" dieser Methode ist ein string. Die Variable "zeichen" ist aber ein char und dennoch wird Variable mit "gleichung" intialisiert.

char zeichen = gleichung;

Beides sind aber unterschiedliche Typen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • -2

Hey!
Bitte programmiere in Englisch! Ich sehe das auch an der Berufsschule, dass die Lehrer es den Schülern auf Deutsch zeigen... No Go!
Weiterhin erzeuge mehr Klassen die sich um die verschiedensten Verhalten deines Programms kümmern - C# ist OOP! Es gibt noch mehr Punkte, aber das ist das Gröbste

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

Fachinformatiker.de, 2021 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung