4 İşlem
-
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. -
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
-
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
-
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ı ..
-
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 :)
-
:) sen calistiramamisindir. calisiyor istersen aldigin hatayi yaz bakayim istersen de suanda linuxteyim. windows'a gecince derliyip atarim.
-
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..
-
// // 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
