Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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;
        }
    }
}

Gelöst von Max01

Zur Lösung

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

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. ?

Hallo,

bitte verwende für Programmierfragen auch die passenden Unterbereiche dafür - ich habe den Thread mal richtig einsortiert.

Danke.

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?

  • Autor
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

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.

  • 2 Wochen später...

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.