C# Metoda Zadanie .

0

Polecenie :

Metoda która jako parametr otrzymuje dwie liczby rzeczywiste i jeden znak.
Wykona ona kolejno na podanych liczbach operacje arytmetyczne(w zależności od podanego znaku) czyli + , - , * , /. Każdy inny znak ma zwrócić dodawanie.
Tak obliczony wynik należy zwrócić do głównego programu
Program ma wykonać 4 operacje na dwóch podanych liczbach przez użytkownika, liczby muszą być większe od zera.

Problem jest taki, że nie wiem jak ogarnąć to, kiedy użytkownik poda inny znak niż +,-,/,* żeby wypisywało tylko sumę.
Kod :


            int i;
            int a;
            Console.WriteLine("Podaj a - nie może być liczbą 0");
            a = Convert.ToInt32(Console.ReadLine());
            if (a ==0)
            {
                Console.WriteLine("Podaj a jeszcze raz");
                a = Convert.ToInt32(Console.ReadLine());
            }
            int b;
            Console.WriteLine("Podaj b - nie może być liczbą 0");
            b = Convert.ToInt32(Console.ReadLine());
            if (b ==0)
            {
                Console.WriteLine("Podaj b jeszcze raz");
                b = Convert.ToInt32(Console.ReadLine());
            }
            string znak;
            
          
            for (i = 0; i < 4; i++)
            {

                Console.WriteLine("podaj znak");
                znak = Convert.ToString(Console.ReadLine());



                if (znak == "+")
                {
                    Console.WriteLine(dodawanie(a, b));

                }

                if (znak == "-")
                {
                    Console.WriteLine(odejmowanie(a, b));

                }
                if (znak == "*")
                {
                    Console.WriteLine(mnozenie(a, b));

                }
                if (znak == "/")
                {
                    Console.WriteLine(dzielenie(a, b));

                }

            }

                    Console.ReadLine();
                }

                public static int dodawanie(int a, int b)
                {

                    return a + b;

                }
                public static int odejmowanie(int a, int b)
                {

                    return a - b;

                }
                public static int mnozenie(int a, int b)
                {
                    return a * b;
                }
                public static int dzielenie(int a, int b)
                {
                    return a / b;
                }


            }

}

1

Możesz użyć pattern matching:
https://docs.microsoft.com/en-us/dotnet/csharp/pattern-matching#using-pattern-matching-switch-statements
albo te cztery przypadki dać w jednym "ifie", a po else zwrócić dodawanie:

if (znak == "-" || znak == "+" || znak == "/" || znak == "*") {
    //....
}
else {
   // dodawanie
}
4

Nie trzeba pattern matchingu, normalny switch wystarczy:

switch (znak)
{
    case '/': 
        Console.WriteLine(dzielenie(a, b));
        break;
    case '*': 
        Console.WriteLine(mnozenie(a, b));
        break;
    case '-': 
        Console.WriteLine(odejmowanie(a, b));
        break;
    default: 
        Console.WriteLine(dodawanie(a, b));
        break;
}

Lepiej to by wyglądało, gdyby nie mieszać obliczeń z wyświetlaniem i przenieść switcha do oddzielnej metody zwracającej wynik ogólnego działania bo wtedy nie trzeba będzie żadnego break pisać.

Do tego ta pętla for chyba jest zbędna, za to do pobierania danych od użytkownika przydałoby się jakieś do-while.

0

@somekind: A jak zrobić, żeby podczas wpisania znaku np. X który nie należy do znaków które mogą być czyli +,-,/,* robiło tylko dodawanie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1