4 İşlem

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    undefined-01
    undefined-01's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo

    HeadBanger bunu yazdı:
    -----------------------------

    recep ingilizce yetersizliği uyarısı verdk biz :)

    biraz daha anlyabileceğimiz bir şekilde bize anlatırmısın mahsuru yoksa


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

    senin icin editledim postumu :)

     

    Edit : 

    istegini yazayim dedim hemen.

     

     

                string strFormul = 

                    txtFormul.Text

                    .Replace("a", txtA.Text)

                    .Replace("b", txtB.Text)

                    .Replace("c", txtC.Text);

     

                var calc = new System.Data.DataTable();

                var dbSonuc = calc.Compute(strFormul, "");

                MessageBox.Show(dbSonuc.ToString());

     

     

    txtFormul,txtA,txtB,txtC forma eklenmeli. bunuda bir butonun icine yaz.


    Mesaj 25 Temmuz 2012 (Carsamba) Saat: 14:41'da rakkoc tarafından düzenlendi.

    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cali_KuSu
    Cali_KuSu's avatar
    Kayıt Tarihi: 04/Mayıs/2010
    Dişi

    RebelliouS_SouL bunu yazdı:
    -----------------------------

    Şimdi anladığımı yazim

    a+b=x

    x-c=y

    y/d=sonuc şimdi ben doğrumu anladım program bunumu yapacak eğer öyle ise paylaşırım c# olarak.

    formül programda sabit değilmi değişkenlik göstermeyecek.


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

     

    formül sürekli değişecek bunu sürekli belirttim :)

     

    neyse zaten bıraktım yapmıyorum süresi doldu iş de yattı :) teşekkr ederim herkese

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    undefined-01
    undefined-01's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo

    Cali_KuSu bunu yazdı:
    -----------------------------

    RebelliouS_SouL bunu yazdı:
    -----------------------------

    Şimdi anladığımı yazim

    a+b=x

    x-c=y

    y/d=sonuc şimdi ben doğrumu anladım program bunumu yapacak eğer öyle ise paylaşırım c# olarak.

    formül programda sabit değilmi değişkenlik göstermeyecek.


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

     

    formül sürekli değişecek bunu sürekli belirttim :)

     

    neyse zaten bıraktım yapmıyorum süresi doldu iş de yattı :) teşekkr ederim herkese


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

     

    Benim yazdigim kod o isi yapiyor zaten :s


    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cali_KuSu
    Cali_KuSu's avatar
    Kayıt Tarihi: 04/Mayıs/2010
    Dişi

    rakkoc bunu yazdı:
    -----------------------------

    Cali_KuSu bunu yazdı:
    -----------------------------

    RebelliouS_SouL bunu yazdı:
    -----------------------------

    Şimdi anladığımı yazim

    a+b=x

    x-c=y

    y/d=sonuc şimdi ben doğrumu anladım program bunumu yapacak eğer öyle ise paylaşırım c# olarak.

    formül programda sabit değilmi değişkenlik göstermeyecek.


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

     

    formül sürekli değişecek bunu sürekli belirttim :)

     

    neyse zaten bıraktım yapmıyorum süresi doldu iş de yattı :) teşekkr ederim herkese


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

     

    Benim yazdigim kod o isi yapiyor zaten :s


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

     

    Biraz geç kaldı .. 

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cali_KuSu
    Cali_KuSu's avatar
    Kayıt Tarihi: 04/Mayıs/2010
    Dişi

    rakkoc bunu yazdı:
    -----------------------------

    Cali_KuSu bunu yazdı:
    -----------------------------

    RebelliouS_SouL bunu yazdı:
    -----------------------------

    Şimdi anladığımı yazim

    a+b=x

    x-c=y

    y/d=sonuc şimdi ben doğrumu anladım program bunumu yapacak eğer öyle ise paylaşırım c# olarak.

    formül programda sabit değilmi değişkenlik göstermeyecek.


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

     

    formül sürekli değişecek bunu sürekli belirttim :)

     

    neyse zaten bıraktım yapmıyorum süresi doldu iş de yattı :) teşekkr ederim herkese


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

     

    Benim yazdigim kod o isi yapiyor zaten :s


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

     

     

    ayrıca denedim çalışmıyor :)

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    undefined-01
    undefined-01's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo

    :) sen calistiramamisindir. calisiyor istersen aldigin hatayi yaz bakayim istersen de suanda linuxteyim. windows'a gecince derliyip atarim.


    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek

    evde canim sikilmaya baslamisti, bunu gordum. c'de gercekliyim dedim. yaptim, oldu :) .p (xcode ile derledim, calistirdim)

    parantez konusunda, islem konusunda sikinti yok. ayrica ^ power ' i da ekledim. istediginiz kadar yazanbilirsiniz. ama pek dinamik degil, yani aslinda amac algoritmayi yapmak,, bu yuzden bellek ayirirken biraz sabitledim olayi..


    ..
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek
    //
    //  parser.c
    //  exp_parser
    //
    //  Created by guru on 7/22/12.
    //  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
    //
    
    #include "parser.h"
    
    
    #define PRI_POW 2
    #define PRI_MULTI 1
    #define PRI_DIVIS 1
    #define PRI_SUMM 0
    #define PRI_SUBS 0
    
    
    char *m_str_infix;
    char *m_str_temp;
    char *m_str_temp_pt;
    char *m_pt;
    Stack *m_stack;
    Queue *m_qu_postfix;
    int m_global_priority;
    
    
    void initalize_parser(void){
        
        m_stack = create_stack(4096 * 4096);
        m_qu_postfix = create_queue(4096 * 4096);
        m_str_infix = (char *)malloc(sizeof(char) * 4096 * 4096);
        m_str_temp_pt = m_str_temp = (char *)malloc(sizeof(char) * 4096);
        
    }
    
    void free_parser(void){
        close_queue(m_qu_postfix);
        close_stack(m_stack);
        
        free(m_str_infix);
    }
    
    BOOL get_number_if_exist(double *number){
        if (m_str_temp_pt == m_str_temp)
            return FALSE;
        
        *m_str_temp_pt = '\0';
        
        *number = atof(m_str_temp);
        
        m_str_temp_pt = m_str_temp;
        
        return TRUE;
    }
    
    
    void parse(){
        
        Node topStack;
        char chnext;
        double number;
        int priority;
        
        for (; (chnext = *m_pt++) != '\0';) {
            
            switch (chnext) {
                    
                case ',':
                case '.':
                case '0':case '1':case '2':case '3':case '4':
                case '5':case '6':case '7':case '8':case '9':
                    *m_str_temp_pt++ = chnext;
                    break;
                    
                case '(':
                    m_global_priority += 2;
                    break;
                case ')':
                    m_global_priority -= 2;
                    break;
                    
                case '^':
                    priority = PRI_POW + m_global_priority;
                    goto PROG;
                case '*':
                    priority = PRI_MULTI + m_global_priority;
                    goto PROG;
                case '+':
                    priority = PRI_SUMM + m_global_priority;
                    goto PROG;
                case '-':
                    priority = PRI_SUBS + m_global_priority;
                    goto PROG;
                case '/':
                    priority = PRI_DIVIS + m_global_priority;
                    
                PROG:
                    
                    if (get_number_if_exist(&number))
                        queue_put(m_qu_postfix, create_node(number, operand, 0));
                    
                    //if stack is not empty
                    //compare precedences
                    for (; !stack_isempty(m_stack); ) {
                        topStack = stack_pop(m_stack);
                        
                        if (topStack._priority > priority)
                            queue_put(m_qu_postfix, topStack);
                        else {
                            stack_push(m_stack, topStack);
                            break;
                        }
                    }
                    
                    stack_push(m_stack, create_node(chnext, operatr, priority));
                    break;
                default:
                    break;
            }
        }
        
        //last operations
        if (get_number_if_exist(&number))
            queue_put(m_qu_postfix, create_node(number, operand, 0));
        
        for (; !stack_isempty(m_stack); ) {
            queue_put(m_qu_postfix, stack_pop(m_stack));
        }
        
    }
    
    Queue *get_postfix(const char *exp){
        strcpy(m_str_infix, exp);
        
        clear_stack(m_stack);
        
        m_pt = m_str_infix;
        m_global_priority = 0;
        m_str_temp_pt = m_str_temp;
        
        parse();
        
        return m_qu_postfix;
    }
    
    
    
    double calc(Node oper, Node operand1, Node operand2){
        
        switch ((char)oper._value) {
            case '*':
                return operand1._value * operand2._value;
            case '+':
                return operand1._value + operand2._value;
            case '-': 
                return operand1._value - operand2._value;
            case '/':
                return operand1._value / operand2._value;
            case '^':
                return pow(operand1._value, operand2._value);
                
            default:
                perror("unexpectted operator");
                exit(0);
        }
        
    }
    
    double calculate(){
        
        Node node;
        Node topStack;
        Node temp;
        
        clear_stack(m_stack);
        
        for (; !queue_isempty(m_qu_postfix); ) {
            
            node = queue_get(m_qu_postfix);
            
            if (node._type == operand){
                stack_push(m_stack, node);
            }
            else {
                
                if (stack_isempty(m_stack)){
                    perror("there was no number in the stack");
                    exit(0);
                }
                topStack = stack_pop(m_stack);
                
                if (stack_isempty(m_stack)){
                    perror("there was no number in the stack");
                    exit(0);
                }
                temp = stack_pop(m_stack);
                
                //push back the result into the stack
                stack_push(m_stack, create_node(
                                                calc(node, temp, topStack), operand, 0));
            }
        }
        
        node = stack_pop(m_stack);
        
        return node._value;
    }
    
    
    void show(){
        Node node;
        
        for (; !queue_isempty(m_qu_postfix); ) {
            node = queue_get(m_qu_postfix);
            
            node._type == operand ? 
            printf("%f ", node._value) : printf("%c ", (char)node._value);
        }
    }
    
    
    
    
    
    projeyi asagiya ekledim, olayin dondugu kod kismi burasi oldugu icin, bunu da yazayim dedim.
     
    https://www.dropbox.com/s/bhng8h7n6e6ds25/exp_parser.zip

    ..
Toplam Hit: 5664 Toplam Mesaj: 39