www.zkurd.org
ئه‌ندامه‌تی پرۆژه‌كان مه‌کۆ تاقیكاری IT فه‌رهه‌نگی ماڵه‌وه
  zanistperweran



پۆستی ئه‌له‌كترۆنی
(ته‌نها بۆ ئه‌ندامانه‌)
ناو
تێپه‌ڕه‌وشه‌
له‌ لایه‌ن Umed.A ه‌وه‌، ‌ ڕێكه‌وتی ٢٠٠٦/٥/٧    

شیكاركردنی هاوكێشه‌ به‌ #c


ناوه‌ڕۆكی ئه‌م وتاره‌
پێشه‌كی
ڕێگه‌ی گرافیك
سه‌رچاوه‌ی كۆده‌كه‌
داگرتن و نموونه‌




پێشه‌كی
له هه‌موو زمانه‌كانی به‌رنامه‌داڕشتندا (پێشه‌نگی priority) بۆ كرداره‌ بیركاری (ماتماتیكی)یه‌كان دانراوه‌، بۆ وێنه‌ كاری لێكدان پێش كۆكردنه‌وه‌ ئه‌نجام ده‌درێت، گه‌ر ته‌ماشای ئه‌م نموونه‌ ساده‌یه‌ بكه‌ین بۆ تێگه‌یشتنی ئه‌م پێشه‌نگییه‌:
٣ ٭ ٤ + ٢
گه‌ر بێت و كرداری (٭) یه‌كه‌مجار ئه‌نجام بده‌ین و پاشان (+)، ئه‌وا ئه‌نجامی ده‌سته‌واژه‌كه‌ ده‌كاته‌: (١٤).
خۆ ئه‌گه‌ر كرداری (+) یه‌كه‌مجار ئه‌نجام بده‌ین و پاشان (٭) ئه‌وا ئه‌نجامی ده‌سته‌واژه‌كه‌ ده‌كاته‌: (١٨).

به‌مشێوه‌یه‌ له‌ هاوكێشه‌ ئاڵۆزه‌كاندا كه‌ چه‌ندین كردار و كه‌وانه‌ دێنه‌ پێش، شیكاركردنی به‌ به‌رنامه‌ی تایبه‌ت ده‌كرێت.
ئه‌مڕۆ (نه‌خشه‌ function)یه‌ك ده‌نووسین به‌ زمانی c# كه‌ به‌ "سی شارپ" ده‌خوێنرێته‌وه‌، پاشان نه‌ خشه‌كه‌ له‌ به‌رنامه‌یه‌كدا ده‌سازێنین.



ڕێگه‌ی گرافیك
ده‌مانه‌وێ به‌رنامه‌یه‌ك بنووسین بتوانێ هاوكێشه‌یه‌ك که (+)، (-)، (*)، (/)، (زۆرینه‌ max)، (كه‌مینه‌ min) و په‌رانتێزی هه‌بێ، هه‌ڵهێنێ (شیكار بکات). بۆ وێنه:
(2*(4+3*2))/(5-1)
بۆ ئه‌م کاره‌، هێندێ که‌س دێن (هێڵكاری graph) به‌كار دێنن، یانی له‌پێشدا (هێڵكاری graph)یه‌ك له‌م فۆرمۆڵه‌ی ساز ده‌که‌ن، دوایه له‌ (هێڵكاری graph)یه‌كه‌دا له‌ گه‌ڵاکانڕا پێدا دێن یێک یێک وه‌ڵامه‌کان ده‌ردێنن هه‌تا ده‌گه‌نه‌ ئه‌نجام:

www.zkurd.org


هه‌ڵبه‌ت ده‌بێ ئه‌وه‌ش بزانین چاکردن و به‌ڕێوه‌بردنی هێڵكاری، بیرگه‌ و کاتێکی زۆرتری له‌چاو شێوازه‌کانی ‌تر پێویسته‌ بۆیه‌ به‌کارهێنه‌رانی ئه‌م شێوازه (Algorithm?) له‌ جیاتیی هێڵكاری، (Stack)ی ده‌کار دێنن.
ئێمه لێره‌دا ده‌مانهه‌وێ شیوازێکی ‌دی بۆخۆمان داڕێژین که‌ تێگه‌شتن و داڕشتنی (Implementation) هاسانه.


- هه‌تا په‌ڕانتێزێک ماوه
- فۆرمۆڵی نێو په‌ڕانتێزه‌که‌ ده‌ربێنه
- فۆرمۆله‌که‌ی هه‌ڵهێنه (حه‌ل که‌وه‌)
- وه‌ڵامه‌که‌ی له‌جێی په‌ڕانتێزه‌که‌ی دانێ



private void doSolve_Click(object sender, System.EventArgs e)
{
string f = formula.Text;
string inner = FindInnerFormula(f);
while (inner != null)
{
f = f.Replace(string.Concat("(", inner, ")"), Evaluate(inner).ToString());
inner = FindInnerFormula(f);
}
result.Text = Evaluate(f).ToString();
}
private string FindInnerFormula(string formula)
{
int posL, posR = formula.IndexOf(')');
if (posR > 0)
{
posL = formula.LastIndexOf('(', posR);
return formula.Substring(posL + 1, posR - posL - 1);
}
return null;
}


بۆ وێنه:
(2*(4+3*2))/(5-1) --> (2*10)/(5-1) --> 20/(5-1) --> 20/4 --> 5

بۆ هه‌ڵهێنانی فۆرمۆڵێکی بێپه‌ڕانتێزیش به‌پێی شێوازی خوارێ ده‌چینه پێشێ:


فۆرمۆڵه‌که‌ی به‌سه‌ر + ان دا بشکێنه، یانی 4+3*2 --> 4, 3*2
فۆرمۆڵه‌که‌ی به‌سه‌ر - ان دا بشکێنه، دوایه به‌شه‌کان لێک که‌م که‌وه‌
فۆرمۆڵه‌که‌ی به‌سه‌ر * ان دا بشکێنه، دوایه به‌شه‌کان تێکدا زه‌رب که
فۆرمۆڵه‌که‌ی به‌سه‌ر / ان دا بشکێنه، دوایه به‌شه‌کان پێکدا به‌ش که‌
فۆرمۆڵه‌که‌ی به‌سه‌ر ^ ان دا بشکێنه (له جیاتی Min)، دوایه که‌مترینیان هه‌ڵبژێره
فۆرمۆڵه‌که‌ی بۆ ~ ی هه‌ڵهێنه (حه‌ل که‌وه - ، زۆرینه‌ی هه‌ڵبژێره)


سه‌رچاوه‌ی كۆده‌كه‌




private double Evaluate(string f)
{
if (f.IndexOf('+') < 0)
return EvaluateMinus(f);
string[] pluses = f.Split(new char[]{'+'});
double res = 0;
for (int i = 0; i < pluses.Length; i++)
res += EvaluateMinus(pluses[i]);
return res;
}
private double EvaluateMinus(string plus)
{
if (plus.IndexOf('-') < 0)
return EvaluateMul(plus);
if (plus.StartsWith("-"))
plus = string.Concat("0", plus);
string[] minuses = plus.Split(new char[]{'-'});
double res = EvaluateMul(minuses[0]);
for (int i = 1; i < minuses.Length; i++)
res -= EvaluateMul(minuses[i]);
return res;
}
private double EvaluateMul(string minus)
{
if (minus.IndexOf('*') < 0)
return EvaluateDiv(minus);
string[] muls = minus.Split(new char[]{'*'});
double res = 1;
for (int i = 0; i < muls.Length; i++)
res *= EvaluateDiv(muls[i]);
return res;
}
private double EvaluateDiv(string mul)
{
if (mul.IndexOf('/') < 0)
return EvaluateMax(mul);
string[] divs = mul.Split(new char[]{'/'});
double res = EvaluateMax(divs[0]);
for (int i = 1; i < divs.Length; i++)
res /= EvaluateMax(divs[i]);
return res;
}
private double EvaluateMax(string div)
{
if (div.IndexOf('^') < 0)
return EvaluateMin(div);
string[] maxs = div.Split(new char[]{'^'});
double res = double.MinValue;
for (int i = 0; i < maxs.Length; i++)
{
double resi = EvaluateMin(maxs[i]);
if (res < resi)
res = resi;
}
return res;
}
private double EvaluateMin(string max)
{
if (max.IndexOf('~') < 0)
return Convert.ToDouble(max);
string[] mins = max.Split(new char[]{'~'});
double res = Convert.ToDouble(mins[0]);
for (int i = 1; i < mins.Length; i++)
if (res > Convert.ToDouble(mins[i]))
res = Convert.ToDouble(mins[i]);
return res;
}



داگرتن و نموونه‌
ئه‌و به‌رنامه‌یه‌ی به سه‌رچاوه‌ی كۆده‌كه‌وه‌ دابه‌زێنه له‌م به‌سته‌ره‌دا:
هاوكێشه‌ - نموونه‌ی یه‌كه‌م

ده‌توانن پاش دابه‌زاندنی ئه‌و به‌رنامه‌یه‌، بۆ وێنه ئه‌و فۆرمۆڵانه ‌تاقی که‌نه‌وه:

(2*3)^(5-1)
(3*19.5-2/1)/(32-3~2)




chapi bike

پێداچوونه‌وه‌ و ڕاستكردنه‌وه‌ی ڕێنووس، له‌سه‌ر بنه‌مای (ڕێنووسی یه‌كگرتووی زمانی كوردی): دیاكۆ.‌


مافی ئه‌م ماڵپه‌ڕه‌ پارێزراوه‌ بۆ گرووپی زانستپه‌روه‌رانی كورد، بۆ زانیاریی زۆرتر تكایه‌ كرته‌ی ئێره‌ ‌بكه‌
©٢٠٠٣-٢٠١٠