نمایش نتایج 1 تا 6 از 6

نام تاپیک: ماشین حساب مهندسی

  1. #1
    کاربر دائمی آواتار nava_2012
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    mashhad
    پست
    167

    ماشین حساب مهندسی

    سلام.
    يه سوال اين ماشين حساب با اولويت بندي ها (پرانتز گذاري ) مثل ماشين حساب هاي مهندسي کار ميکنه
    مثال
    8=(2+2)/(5^2)
    چطوری پیاده سازی کنم؟

  2. #2

    نقل قول: ماشین حساب مهندسی

    با سلام

    تا اوونجایی که من اطلاعات دارم : به دو روش میتونید این ماشین حساب رو پیاده سازی کنید: 1) به کمک پشته (Stack) که حالا با آرایه یا صف یا لیست میتونید اینو پیاده سازی کنید 2) به کمک کدهای خود کامپایلر #C

    در هر صورت اگه کمکی از دستم بر بیاد، خوشحال میشم

  3. #3
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: ماشین حساب مهندسی

    نقل قول نوشته شده توسط nava_2012 مشاهده تاپیک
    سلام.
    يه سوال اين ماشين حساب با اولويت بندي ها (پرانتز گذاري ) مثل ماشين حساب هاي مهندسي کار ميکنه
    مثال
    8=(2+2)/(5^2)
    چطوری پیاده سازی کنم؟

    یه سرچ تو ویکی بزن و الگوریتم RPN رو پیاده کن.(Reversed Polish Notation)

  4. #4
    کاربر دائمی آواتار nava_2012
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    mashhad
    پست
    167

    نقل قول: ماشین حساب مهندسی

    using System;
    using System.Collections.Generic;

    class Rpn {
    public static void Main() {
    char [] sp = new char [] {' ','\t'};
    for (;;) {
    string s = Console.ReadLine();
    if (s==null) break;
    Stack<string> tks = new Stack<string>
    (s.Split(sp,StringSplitOptions.RemoveEmptyEntries));
    if (tks.Count==0) continue;
    try {
    double r = evalrpn(tks);
    if (tks.Count!=0) throw new Exception();
    Console.WriteLine(r);
    }
    catch (Exception e) {Console.WriteLine("error");}
    }
    }

    private static double evalrpn(Stack<string> tks) {
    string tk = tks.Pop();
    double x,y;
    if (!Double.TryParse(tk, out x)) {
    y = evalrpn(tks); x = evalrpn(tks);
    if (tk=="+") x += y;
    else if (tk=="-") x -= y;
    else if (tk=="*") x *= y;
    else if (tk=="/") x /= y;
    else throw new Exception();
    }
    return x;
    }
    }
    از این کد چطوری استفاده کنم؟

  5. #5

    نقل قول: ماشین حساب مهندسی

    public void Run()
    {
    Eval("(1+2)");
    Eval("5*4/2");
    Eval("((3+5)-6)");
    }

    public static void Eval(string input)
    {
    var ans = Evaluate(input);
    MessageBox.Show(input + " = " + ans);
    }

    public static double Evaluate(String input)
    {
    String expr = input.Substring(0, 1) == "(" ? input : "(" + input + ")";
    Stack<String> ops = new Stack<String>();
    Stack<Double> vals = new Stack<Double>();

    for (int i = 0; i < expr.Length; i++)
    {
    String s = expr.Substring(i, 1);
    if (s.Equals("("))
    {
    }
    else if (s.Equals("+")) ops.Push(s);
    else if (s.Equals("-")) ops.Push(s);
    else if (s.Equals("*")) ops.Push(s);
    else if (s.Equals("/")) ops.Push(s);
    else if (s.Equals("sqrt")) ops.Push(s);
    else if (s.Equals(")"))
    {
    int count = ops.Count;
    while (count > 0)
    {
    String op = ops.Pop();
    double v = vals.Pop();
    if (op.Equals("+")) v = vals.Pop() + v;
    else if (op.Equals("-")) v = vals.Pop() - v;
    else if (op.Equals("*")) v = vals.Pop()*v;
    else if (op.Equals("/")) v = vals.Pop()/v;
    else if (op.Equals("sqrt")) v = Math.Sqrt(v);
    vals.Push(v);

    count--;
    }
    }
    else vals.Push(Double.Parse(s));
    }
    return vals.Pop();
    } فقط داخل متد،Run
    عبارت دلخواه خودتو بذار

  6. #6

    نقل قول: ماشین حساب مهندسی

    نقل قول نوشته شده توسط reza20202020 مشاهده تاپیک
    public void Run()
    {
    Eval("(1+2)");
    Eval("5*4/2");
    Eval("((3+5)-6)");
    }

    public static void Eval(string input)
    {
    var ans = Evaluate(input);
    MessageBox.Show(input + " = " + ans);
    }

    public static double Evaluate(String input)
    {
    String expr = input.Substring(0, 1) == "(" ? input : "(" + input + ")";
    Stack<String> ops = new Stack<String>();
    Stack<Double> vals = new Stack<Double>();

    for (int i = 0; i < expr.Length; i++)
    {
    String s = expr.Substring(i, 1);
    if (s.Equals("("))
    {
    }
    else if (s.Equals("+")) ops.Push(s);
    else if (s.Equals("-")) ops.Push(s);
    else if (s.Equals("*")) ops.Push(s);
    else if (s.Equals("/")) ops.Push(s);
    else if (s.Equals("sqrt")) ops.Push(s);
    else if (s.Equals(")"))
    {
    int count = ops.Count;
    while (count > 0)
    {
    String op = ops.Pop();
    double v = vals.Pop();
    if (op.Equals("+")) v = vals.Pop() + v;
    else if (op.Equals("-")) v = vals.Pop() - v;
    else if (op.Equals("*")) v = vals.Pop()*v;
    else if (op.Equals("/")) v = vals.Pop()/v;
    else if (op.Equals("sqrt")) v = Math.Sqrt(v);
    vals.Push(v);

    count--;
    }
    }
    else vals.Push(Double.Parse(s));
    }
    return vals.Pop();
    } فقط داخل متد،Run
    عبارت دلخواه خودتو بذار
    سلام
    این جواب مربوط به سوال ماشین حساب بوسیله پشته است؟
    میشه یه توضیح در موردش بدید؟

تاپیک های مشابه

  1. مقاله: سورس کامل ماشین حساب مهندسی
    نوشته شده توسط MBG73 در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: سه شنبه 06 مهر 1389, 10:43 صبح
  2. سورس ماشین حساب مهندسی
    نوشته شده توسط saeed2008 در بخش برنامه‌نویسی جاوا
    پاسخ: 0
    آخرین پست: چهارشنبه 30 اردیبهشت 1388, 16:45 عصر
  3. درخواست برنامه ماشین حساب مهندسی
    نوشته شده توسط nazaninahmady_sh در بخش VB.NET
    پاسخ: 1
    آخرین پست: شنبه 06 بهمن 1386, 12:51 عصر
  4. سورس یک ماشین حساب مهندسی
    نوشته شده توسط ghafoori در بخش VB.NET
    پاسخ: 0
    آخرین پست: چهارشنبه 10 خرداد 1385, 20:16 عصر
  5. شبیه سازی media player در دلفی و ماشین حساب مهندسی
    نوشته شده توسط hobnob در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: چهارشنبه 10 خرداد 1385, 08:18 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •