folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder C# İle İlgili Basit Ama Programa Dönüştürmek Zor...



C# İle İlgili Basit Ama Programa Dönüştürmek Zor...

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    Regexe girmene gerek yok.

    http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm

    Buradaki örnekte kullanıldığı gibi c# da dinamik kod çalıştırma özelliği var yani string olarak verdiğin kodu çalıştırabilir.

    verdiğin matematik işlemi de C formatında olduğu için bunu çalıştırıp sonucu biyere yazdırabilirsin.

    web için fazla anlamadan kullanmak çok sakattır, çünkü matematik işlemi yazilacak yere kod yazıp serverda dosya falan yaratabilir adam doğru permissionları vermezsen.


    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Vegabond
    Vegabond's avatar
    Kayıt Tarihi: 04/Ocak/2009
    Erkek

    wking bunu yazdı:
    -----------------------------

    Hocam hiçbir şey anlamadım vallaha :/

    Eğer sorunun çözülmediyse ve tekrar anlatmaya üşenmezsem yardım edebilirim.


    -----------------------------

    hocam soru  :textbox a (12+5*3/6) gibi bir ifade yi kullanıcı tek seferde girecek programda bunu hesaplayacak fakat işlem öncelik sırasına göre yani önce çarpma işlemi ve bölme işemi sonra toplama ve çıkarma işlemi.

    grn arkadasımız yardımcı oldu binary tree (ikili ağaç)sistemiyle yapılabilinir dedi su an onu inceliyorum herkese teşekkürler..


    ||DuRuYoRsAm SeBeBi VaR SuSuYoRsAm NeDeNi VaR hErKes RaHaT OlSuN hErSeYiN bİr zAmAnI vAr..!!|| -||Yaşlanarak değil yaşayarak tecrübe kazanılır, zaman insanları değil armutları olgunlaştırır.-||
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Shimarik
    Shimarik's avatar
    Kayıt Tarihi: 14/Eylül/2008
    Erkek

    bi kere verdiğin örnek saçma olmuş senin dediğin matematik kurallarına göre doğru önce çarpma ve bölme sonra toplama ve çıkarma yapılır ama şunu unutma çarpma ve bölmeden öncede parantez içindeki değerler toplanır. senin istediğin olayda logo programında kdv hesaplama alında var grid üzerinde, neyse adam şunu yazarsa ne olcak 10+6/3 senin mantığına göre bu işlemin sonucu = 12 çıkar önce çarpma ve bölme ya bana göre ise = 5,33 çıkar yani senin önce işlemi yazma esnasında kendin parantezlere aldırman lazım

    bak şöyle bir mantık geldi aklıma sen bu işlemi yapabilmen için önce opertörlerini yakalaman lazım textbox changesinde operatörleri arat mesela adam 10+2/3 yazarsa sen önce operatörlere bak ve operatör öncesi ve sonrasındaki operand(yani sayıları) array içine at tek tek ve senin istediğin önceliklede array içinden döngü ile işlemi yaptır bu kadar basit.


    Bir Programcının Parmaklarının ucunda imkansız diye bişey yoktur.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Vegabond
    Vegabond's avatar
    Kayıt Tarihi: 04/Ocak/2009
    Erkek

    herkese ilgisi için teşekkürler grn arkadasımız sınıf arkadasım aynı zamanda ona ulastım değişik bi metot kullanarak çözdü ama benim bi pok anladıgım söylenemez ..=) sizlerle de paylasmak istedim kodları..

    ANA FORM
    public partial class MainForm : Form
        {
            public MainForm()
            {
                InitializeComponent();
            }
            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == '\r')
                    calculateButton.PerformClick();
            }

            private void calculateButton_Click(object sender, EventArgs e)
            {
                if ((label1.Text = textBox1.Text) == "")
                    return;
                Calculator c = new Calculator(textBox1.Text);
                label1.Text = c.Calculate().ToString();

            }      


        }

    ---------------------------------------İŞLEMLERi YAPTIGI KOD KISMIDA BURADA YER ALIYOR...------------------

    class Calculator
        {
            Tokens m_tokens;
            char[] m_spcChars = new char[] { '*', '/', '+', '-' };

            public Calculator(string str)
            {
                m_tokens = new Tokens();

                SeparateTokens(str);
            }

            private void SeparateTokens(string str)
            {
                int bfindex, i, j;
               
                for (bfindex = i = 0; i < str.Length; ++i)
                {
                    for (j = 0; j < m_spcChars.Length; ++j)
                    {
                        if (str[i] == m_spcChars[j])
                        {
                            m_tokens.AddToken(str.Substring(bfindex, i - bfindex), TypeExpression.number);
                            m_tokens.AddToken(m_spcChars[j].ToString(), TypeExpression.expression);
                            bfindex = i + 1;
                            break;
                        }
                    }
                }
                m_tokens.AddToken(str.Substring(bfindex), TypeExpression.number);
            }

            public double Calculate()
            {
                Token tk, tkadd;
                double db = 0;
                for(int i = 0; i < 4; i+= 2)
                    for (tk = m_tokens.m_root; tk != null; tk = tk.m_Next)
                    {
                        if (tk.m_type != TypeExpression.expression)
                            continue;
                        if (!(tk.m_value[0] == m_spcChars[i] || tk.m_value[0] == m_spcChars[i + 1]))
                            continue;
                        /*operatorun sagini ve solunu isleme sokuyoruz ;)*/
                        db = Operate(tk.m_Prev, tk.m_Next, tk);
                        //uzerinde bulundugumuzun soldakinin solu yoksa en bastayizdir;)
                        if (tk.m_Prev.m_Prev == null)
                        {
                            tk.m_Prev.m_value = db.ToString();
                            //sagdakinin sagi yoksa artik bitmistir gayri :)
                            if (tk.m_Next.m_Next == null)
                                break;
                            tk.m_Next.m_Next.m_Prev = tk.m_Prev;
                            tk.m_Prev.m_Next = tk.m_Next.m_Next;
                        }
                        else
                        {
                            //listede islem yaptigimiz dugumler cikartip. islem sonucunu onlarin yerine koyuyoruz;)
                            tkadd = new Token(db.ToString(), TypeExpression.number,
                                tk.m_Prev.m_Prev, tk.m_Next.m_Next);

                            tk.m_Prev.m_Prev.m_Next = tkadd;
                            if (tk.m_Next.m_Next != null)
                                tk.m_Next.m_Next.m_Prev = tkadd;
                        }
                        tk = tk.m_Next;
                    }
                return double.Parse(m_tokens.m_root.m_value);
            }

            private double Operate(Token tk1, Token tk2, Token tkexp)
            {
                switch (tkexp.m_value[0])
                {
                    case '+':
                        return double.Parse(tk1.m_value) + double.Parse(tk2.m_value);
                    case '-':
                        return double.Parse(tk1.m_value) - double.Parse(tk2.m_value);
                    case '*':
                        return double.Parse(tk1.m_value) * double.Parse(tk2.m_value);
                    case '/':
                        return double.Parse(tk1.m_value) / double.Parse(tk2.m_value);
                }
                return 0;
            }

        }

        //linked list of tokens
        //bu bagli liste atomlari tutucak.(it contains tokens)
        class Tokens
        {
            public Token m_root = null;
            public Token m_cur = null;
            public int m_count = 0;

            public Token AddToken(string value, TypeExpression tp)
            {
                if (m_root == null)
                {
                    m_cur = m_root = new Token(value, tp, null, null);
                    m_root.m_index = m_count++;
                    return m_root;
                }
                m_cur.m_Next = new Token(value, tp, m_cur, null);
                m_cur.m_Next.m_index = m_count++;
                return m_cur = m_cur.m_Next;
            }

            public Token InsertToken(Token tkind, string value, TypeExpression tp)
            {
                Token tk = new Token(value, tp, tkind, tkind.m_Next);
                tkind.m_Next.m_Prev = tk;
                tkind.m_Next = tk;
                m_count++;
                return tk;
            }

            public Token RemoveToken(Token tk)
            {
                Token tktr = m_root;
                for (; tktr != null; tktr = tktr.m_Next)
                {
                    if (tktr.m_value == tk.m_value && tktr.m_type == tk.m_type)
                    {
                        tktr.m_Prev.m_Next = tktr.m_Next;
                        tktr.m_Next.m_Prev = tktr.m_Prev;
                        m_count--;
                        return tktr.m_Prev;
                    }
                }
                return null;
            }

            public Token RemoveToken(string value)
            {
                Token tktr = m_root;
                for (; tktr != null; tktr = tktr.m_Next)
                {
                    if (tktr.m_value == value)
                    {
                        tktr.m_Prev.m_Next = tktr.m_Next;
                        tktr.m_Next.m_Prev = tktr.m_Prev;
                        m_count--;
                        return tktr.m_Prev;
                    }
                }
                return null;
            }
        }

        //Bagli listenin bir dugumu(one node of linked list)
        class Token
        {
            public Token m_Next;
            public Token m_Prev;
            public TypeExpression m_type;
            public string m_value;
            public int m_index;

            public Token(string value, TypeExpression tp, Token Prev, Token Next)
            {
                m_Next = Next;
                m_Prev = Prev;
                m_type = tp;
                m_value = value;
            }
        }

        enum TypeExpression : int
        {
            number = 0,
            expression,
        }

     

     

     


    ||DuRuYoRsAm SeBeBi VaR SuSuYoRsAm NeDeNi VaR hErKes RaHaT OlSuN hErSeYiN bİr zAmAnI vAr..!!|| -||Yaşlanarak değil yaşayarak tecrübe kazanılır, zaman insanları değil armutları olgunlaştırır.-||
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek

    Benim de yaptığım bir hesap makinem vardı split kullanarak baya bi kasmıştım:)

    Belki birinin işine yarar.. Tabi geliştirilmesi gerekiyor yarıda bırakmıştım..

     

     

     

    kodlar:

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            string a;
            public Form1()
            {
                InitializeComponent();
               
               
            }

            private void btn1_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    txtislem.Text = btn1.Text.ToString();
                }

                txtislem.Text = a+""+btn1.Text;

            }

            private void btn2_Click(object sender, EventArgs e)
            {

                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn2.Text.ToString();
                }

                txtislem.Text = a + "" + btn2.Text;  
            
            
            }

            private void btn3_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn3.Text.ToString();
                }

                txtislem.Text = a + "" + btn3.Text;  
               
              
            }

            private void btn4_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn4.Text.ToString();
                }

                txtislem.Text = a + "" + btn4.Text;  
            }

            private void btn5_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn5.Text.ToString();
                }

                txtislem.Text = a + "" + btn5.Text;  
            }

            private void btn6_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn6.Text.ToString();
                }

                txtislem.Text = a + "" + btn6.Text;  
            }

            private void btn7_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn7.Text.ToString();
                }

                txtislem.Text = a + "" + btn7.Text;  
            }

            private void btn8_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn8.Text.ToString();
                }

                txtislem.Text = a + "" + btn8.Text;  
            }

            private void btn9_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn9.Text.ToString();
                }

                txtislem.Text = a + "" + btn9.Text;  
            }

            private void btn0_Click(object sender, EventArgs e)
            {
                if (txtislem.Text != string.Empty)
                {
                    a = txtislem.Text;
                }
                else
                {
                    // MessageBox.Show(a);    kontrol mekanizması
                    txtislem.Text = btn0.Text.ToString();
                }

                txtislem.Text = a + "" + btn0.Text;  
            }

            private void btntemizle_Click(object sender, EventArgs e)
            {
                txtislem.Text = "";
                a = "";
               
            }

          
            private void btntopla_Click(object sender, EventArgs e)
            {
               
                string z = txtislem.Text;
                txtislem.Text = z + " + ";
               
                //MessageBox.Show(txtislem.Text); kontrol mekanizması
            }

            private void btncikar_Click(object sender, EventArgs e)
            {
                string z = txtislem.Text;
                txtislem.Text = z + " - ";
            }

            private void btnbol_Click(object sender, EventArgs e)
            {
                string z = txtislem.Text;
                txtislem.Text = z + " / ";
            }

            private void btncarp_Click(object sender, EventArgs e)
            {
                string z = txtislem.Text;
                txtislem.Text = z + " X ";
            }

            private void btnesittir_Click(object sender, EventArgs e)
            {
                string z = txtislem.Text;
                string[] satirlar = z.Split(' ');
               
                if (satirlar[1].ToString() == "+")
                {
                    int sayi1 = Int32.Parse(satirlar[0]);
                    int sayi2 = Int32.Parse(satirlar[2]);
                    int toplam = sayi1 + sayi2;
                    txtislem.Text = z + " = " + toplam.ToString();
                    return;
                }
                if (satirlar[1].ToString() == "-")
                {
                    int sayi1 = Int32.Parse(satirlar[0]);
                    int sayi2 = Int32.Parse(satirlar[2]);
                    int sonuc = sayi1 - sayi2;
                    txtislem.Text = z + " = " + sonuc.ToString();
                    return;
                }
                if (satirlar[1].ToString() == "X")
                {
                    int sayi1 = Int32.Parse(satirlar[0]);
                    int sayi2 = Int32.Parse(satirlar[2]);
                    int sonuc = sayi1 * sayi2;
                    txtislem.Text = z + " = " + sonuc.ToString();
                    return;
                }
                if (satirlar[1].ToString() == "/")
                {
                    int sayi1 = Int32.Parse(satirlar[0]);
                    int sayi2 = Int32.Parse(satirlar[2]);
                    int sonuc = sayi1 / sayi2;
                    txtislem.Text = z + " = " + sonuc.ToString();
                    return;
                }
                          
            } 
        }
    }


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek

    Hocam şimdi google amcaya girip. "Infix,Prefix,Postfix" yazıyosun. Ne olduklarını öğreniyosun.

    Senin Infix'i Postfix e çeviren bir fonksiyon yazman lazım sonra kolayca işleyebilirsin verileri :)


    There are 10 types of people in the world. Those who knows binary and those who dont...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SWAT
    SWAT's avatar
    Kayıt Tarihi: 26/Temmuz/2005
    Erkek

    C# da kolay bir yolu olabilir fakat cözümde Recursive Descent Parser işine yaracaktır.

    Biz bu sorunun biraz daha karmasığı ile ugraşmıştık.Recursive Descent Parser kullanarak yapılabiliyor.

    Bunun yanında 2 li ağaçla yapan arkadaşlarda olmuştu ama onlarda recursive kullanmışlar.Yığıt kullanılalarakta

    yapılabilir fakat onu yapmk biraz zor olabilir.

    Kolay gelsin..

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hunter
    j4x
    j4x's avatar
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek

    Aynen hoca expression parser lazim sana ilk. Switchle neyi sorgulayacaksn bir suru ic ice olabilir.


    The king is bleeding.
Toplam Hit: 3520 Toplam Mesaj: 19