Zadanie rekrutacyjne i sposób jego wykonania

0

Cześć ostatnio dostałem takie zadanie:

Write a C# console application that evaluates a string expression consisting of
non-negative integers and the + - / * operators only, taking into account the normal
mathematical rules of operator precedence. Support for brackets is not required.

For example:
an input string of "4+5*2" should output 14
an input string of "4+5/2" should output 6.5
an input string of "4+5/2-1" should output 5.5

Submission:
Please send us your source code in a format that we can easily compile along with a brief description of how you approached the problem and the decisions you made in order to make our solution well thought out, maintainable and production quality. Please compress your source code into a single archive (*.ZIP only) and don’t include any binaries.

a moje wyknaniego tego zadania wygląda tak xd
Uznają mnie za idiotę bo kurcze nie ma ngidzie ze nie mogę używać bibliotek xd

    class Program
    {
        static void Main(string[] args)
        {

            //Skorzystałem z biblioteki https://github.com/mariuszgromada/MathParser.org-mXparser

            string a = Console.ReadLine(); // Pobranie wartości 

            double score =  Calculator.Calculate(a); // Wyliczenie wyniku

            Console.WriteLine(score); // Wyświetlenie wyniku na ekaranie
        }
    }
    public class Calculator 
    {
        public static double Calculate(string task) 
        {
            Expression e = new Expression(task); 

            double score = e.calculate(); 

            return score;
        }
    }
1

No raczej nie chodziło im o to :P

0

spytaj o co im chodzi, dostaniesz plusa za kompetencje miękkie bo umiesz się zapytać

0

Expression Tree & inorder traversal

1

Jesteś taki leniwy że nawet nie chcę ci się zerznac z kodu biblioteki którą znalazłeś?

1

A tak się zapytam gdzie jest wklad własny bo rozumiem że biblioteka robi za ciebie całą robotę. Ty tylko dane wrzucasz

0

kurcze to działa też bez użycia biblioteki

            string math = "4+5/2-1";
            string value = new DataTable().Compute(math, null).ToString();
            Console.WriteLine(value);
0

^^ Takie coś to już bym wysłał. Nie korzystasz z zew bibliotek, wykazałeś się umiejętnością szukania bądź wiedzą że takie coś istnieje, nie odkrywasz koła na nowo.

1

oni chcą abyś to rozwiązał algorytmicznie, a nie mechanizmem frameworka czy libką.

Bo równie dobrze mógłbyś w Roslyna to wrzucić i wykonać kod C# w C#, który returnowałby to wyrażenie.

2

Może zacznij od sparsowania wyrażenia, które pochodzi od użytkownika. Wyznacz sobie przy użyciu LINQ listy operandów i operatorów. Możesz stworzyć enuma Operator i jakąś metodę ParseOperator(char). Aby uniknąć ifów, można stworzyć słownik <char, Operator> i rzucać wyjątek, jeśli operator nie jest obsługiwany. Możesz sobie też napisać jakąś metodę PerformOperation(operand1, operand2, operator) i tu podobnie użyć słownika operator-funkcja. Potem tylko wystarczy powiązać indeks operatora z indeksem operandów. Trzeba pamiętać o kolejności wykonywania działań. Jeśli ma to być obiektowo, to zrób jakąś klasę MathExpression, która będzie przyjmowała w konstruktorze łańcuch znaków i będzie miała publiczną metodę Compute.

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