Exemplo n.º 1
0
        public async Task <IActionResult> ChartAsync(string formula = "sin(x)", string from = "-40", string to = "40", string n = "500")
        {
            var klient = new HttpClient();
            HttpResponseMessage response = klient.GetAsync("http://localhost:5420/api/calculate/xy?formula=" + formula + "&from=" + from + "+&to=" + to + "+&n=" + n + "").Result;
            var jsonstr = await response.Content.ReadAsStringAsync();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                //Console.WriteLine(jsonstr);
                var jsonobj2 = JsonSerializer.Deserialize <responseXYRange>(jsonstr);
                //var jsonobj = JsonConvert.DeserializeObject<RPNWebAppMVC.Models.responseXYRange>(jsonstr);
                responseXYRange myres = (responseXYRange)jsonobj2;
                ViewBag.arr = new String[] { formula, from, to, n };
                //ViewBag.arr = jsonobj.result;
                //Console.WriteLine(response.ToString());
                return(View(myres));
            }



            return(View(new ErrorViewModel()));
        }
Exemplo n.º 2
0
        public IActionResult Get(string formula, string from, string to, string n)
        {
            string message = "";

            if (String.IsNullOrEmpty(formula) || String.IsNullOrEmpty(from) || String.IsNullOrEmpty(to) || String.IsNullOrEmpty(n))
            {
                message = "wrong url";
                goto end;
            }
            double fromDouble = 0;
            double toDouble   = 0;
            int    nInt       = 0;

            try
            {
                fromDouble = double.Parse(from.Replace('.', ','));
                toDouble   = double.Parse(to.Replace('.', ','));
                nInt       = int.Parse(n);
            }
            catch (Exception ex)
            {
                message = ex.Message;
                goto end;
            }
            if (nInt > 1000)
            {
                goto end;
            }
            RPN myRPN = new RPN(formula);

            if (!myRPN.properEquation())
            {
                message = "invalid formula";
                goto end;
            }
            try
            {
                myRPN.generateInfixTokens();
            }
            catch (Exception ex)
            {
                message = (ex.Message);
                goto end;
            }
            if (myRPN.invalidTokens)
            {
                message = "invalid tokens";
                goto end;
            }
            myRPN.generatePostfixTokens();
            try
            {
                List <string> results = myRPN.evaluatePostfix(fromDouble, toDouble, nInt);
                if (myRPN.evalError == false)
                {
                    List <xy> pairs = new List <xy>();
                    for (int i = 0; i < results.Count; i++)
                    {
                        string[] delimitedParts = results[i].Split('#');
                        pairs.Add(new xy {
                            x = double.Parse(delimitedParts[0]), y = double.Parse(delimitedParts[1])
                        });
                    }

                    responseXYRange returnResponseXYRange = new responseXYRange();
                    returnResponseXYRange.status = "ok";
                    returnResponseXYRange.result = pairs.ToArray();
                    return(Ok(returnResponseXYRange));
                }
                else
                {
                    List <xyErrors> pairs = new List <xyErrors>();
                    for (int i = 0; i < results.Count; i++)
                    {
                        string[] delimitedParts = results[i].Split('#');

                        if (double.TryParse(delimitedParts[1], out double parsed))
                        {
                            pairs.Add(new xyErrors {
                                x = double.Parse(delimitedParts[0]), y = parsed
                            });
                        }
                        else
                        {
                            pairs.Add(new xyErrors {
                                x = double.Parse(delimitedParts[0]), error = delimitedParts[1]
                            });
                        }
                    }
                    responseXYRangeError errorPairs = new responseXYRangeError();
                    errorPairs.status = "error";
                    errorPairs.result = pairs.ToArray();

                    return(StatusCode(222, errorPairs));
                }
            }
            catch (Exception ex)
            {
                message = ex.Message;
                goto end;
            }
end:
            responseError responseError = new responseError();

            responseError.status = "error";
            responseError.result = message;
            return(BadRequest(responseError));
        }