المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تمرين ...... الطرح بواسطة المسابقة نحو الصفر


عبد الهادي بهاب
26-11-2015, 12:02 AM
السلام عليكم

لفت انتباهي طريقة من طرق الطرح الحسابية
تسمى المسابقة نحو الصفر
وهذا نموذج للطريقة من اجل حساب حاصل طرح
1932-1889
http://cdn.top4top.co/i_bc54378ad01.png

مثال اخر من اجل 3863-1779
http://cdn.top4top.co/i_c76475cf2c1.png

السؤال : كيف اصمم كود يقوم بمثل هذه العملية



:abc_022::abc_022:

عبد الهادي بهاب
26-11-2015, 07:19 PM
السلام عليكم

محاولة للاجابة ...............
هذا الكود ............ طبعا هو طويل يحتاج الى اختصار لكنه حاليا يفي بالغرض من اجل الطرح لرقمين كل منهما باربعة اعداد


nn1= String.ToNumber(Input.GetText("Input1"));
nn2= String.ToNumber(Input.GetText("Input2"));
Label.SetText("Label2", nn1-nn2);
if nn1<1000 or nn2<1000 then
Dialog.Message("","ÇßÊÈ ÚÏÏ ÇßÈÑ ãä 1000");
else

if nn1 < nn2 then
Input.SetText("Input1", nn2);
Input.SetText("Input2", nn1);
else

n1= String.ToNumber(Input.GetText("Input1"));
n2= String.ToNumber(Input.GetText("Input2"));

n11 = String.Mid(n1, 1, 1);
n22 = String.Mid(n2, 1, 1);
v1=String.Mid(n1, 1, 1)*1000
v2=String.Mid(n2, 1, 1)*1000

if v2<v1 then
Label.SetText("D1", v2);
else
Label.SetText("D1", v1);
end
Label.SetText("L1", n1-String.ToNumber(Label.GetText("D1")));
Label.SetText("P1", n2-String.ToNumber(Label.GetText("D1")));


for i=1,4 do
if String.ToNumber(Label.GetText("P"..i))>1000 then
Label.SetText("D"..i+1, 1000);
elseif String.ToNumber(Label.GetText("P"..i))<1000 and String.ToNumber(Label.GetText("P"..i))>100 then
Label.SetText("D"..i+1, String.Mid(Label.GetText("P"..i), 1, 1)*100);
elseif String.ToNumber(Label.GetText("P"..i))<100 and String.ToNumber(Label.GetText("P"..i))>10 then
Label.SetText("D"..i+1, String.Mid(Label.GetText("P"..i), 1, 1)*10);
elseif String.ToNumber(Label.GetText("P"..i))<10 then
Label.SetText("D"..i+1, Label.GetText("P"..i));
end

Label.SetText("L"..i+1, String.ToNumber(Label.GetText("L"..i))-String.ToNumber(Label.GetText("D"..i+1)));
Label.SetText("P"..i+1, String.ToNumber(Label.GetText("P"..i))-String.ToNumber(Label.GetText("D"..i+1)));
end
end
end

for ii=1,4 do
if String.ToNumber(Label.GetText("P"..ii))<0 then
Label.SetVisible("P"..ii,false);
elseif String.ToNumber(Label.GetText("L"..ii))<0 then
Label.SetVisible("L"..ii,false);
elseif String.ToNumber(Label.GetText("D"..ii)) <0 then
Label.SetVisible("D"..ii,false);
end
end




التطبيق التنفيذي
http://www.mediafire.com/download/j4i1195rkuuqu14/moins.rar

الملف المفتوح
http://www.mediafire.com/download/5fe281l92grw5s5/moins.apz

تحياتي

ثامر أبو بلقيس
26-11-2015, 07:22 PM
3863 - 1779 = 20894 إلى غاية شرح هذه النتيجة في مثالك الثاني
حالات مثل هذه تناقش احتمالين حين تكون المراتب الكبرى متساوية و في حالة عدم تساويها مثل المثال السابق
3 ألاف تطرح من ألف واحدة أي هنا الالاف غير متساوية عكس المثال الأول مراتب الالاف متساوية 1932 - 1889 فكلاهما ألفا

في انتظار تبرير النتيجة المشار اليها :abc_138:

ثامر أبو بلقيس
26-11-2015, 07:37 PM
السلام عليكم ورحمة الله وبركاته

هاهي محاولة سريعة وفق الحالة الثانية و في مثالي اخترت العملية الثانية و التي تعنى بعدد الالاف لا يكون متساوي
و غير مشترط أربع مراتب المهم عدد الالاف لا بكونا متساويان - رقم المرتبة الكبرىيختلف عن الأخرى - وعدد المراتب متساوي
x =3863
y =1779
v = ""
repeat
d1=x-1000;d2=y-1000
x=d1;y=d2
v=v..x.."-"..y.."\r\n"
until String.Length(x)-String.Length(y) ==1;
k=String.ToNumber(String.Mid(x, String.Length(x)-1, String.Length(x)))
if k ~=0 then
repeat
d3=x-k;d4=y-k
x=d3;y=d4
v=v..x.."-"..y.."\r\n"
until k ~=0;
end
d3=x-String.ToNumber((String.Mid(y, 1, 1)*100))
d4=y-String.ToNumber((String.Mid(y, 1, 1)*100))
x=d3;y=d4
v=v..x.."-"..y.."\r\n"
d3=x-y;d4=y-y
x=d3;y=d4
v=v..x.."-"..y.."\r\n"
------------
Dialog.Message("Notice",v );

موفق :abc_138:

عبد الهادي بهاب
26-11-2015, 08:12 PM
3863 - 1779 = 20894 إلى غاية شرح هذه النتيجة في مثالك الثاني
حالات مثل هذه تناقش احتمالين حين تكون المراتب الكبرى متساوية و في حالة عدم تساويها مثل المثال السابق
3 ألاف تطرح من ألف واحدة أي هنا الالاف غير متساوية عكس المثال الأول مراتب الالاف متساوية 1932 - 1889 فكلاهما ألفا

في انتظار تبرير النتيجة المشار اليها :abc_138:

لم افهم بالملاحظة الاولى فالكود ناجح في المثال
http://cdn.top4top.co/i_f22f4a6e701.png

جربته مع اعداد 4 ارقام .......... و طبعا يحتاج الى تعديل

ثامر أبو بلقيس
26-11-2015, 08:25 PM
الملاحظة التي استوقفتك مبنية على معطيات التمرين و ليس المحاولة
حتى الفارق الزمني لا يسمح بالاطلاع

عبد الهادي بهاب
27-11-2015, 08:35 AM
السلام عليكم ورحمة الله وبركاته

هاهي محاولة سريعة وفق الحالة الثانية و في مثالي اخترت العملية الثانية و التي تعنى بعدد الالاف لا يكون متساوي
و غير مشترط أربع مراتب المهم عدد الالاف لا بكونا متساويان - رقم المرتبة الكبرىيختلف عن الأخرى - وعدد المراتب متساوي
x =3863
y =1779
v = ""
repeat
d1=x-1000;d2=y-1000
x=d1;y=d2
v=v..x.."-"..y.."\r\n"
until String.Length(x)-String.Length(y) ==1;
k=String.ToNumber(String.Mid(x, String.Length(x)-1, String.Length(x)))
if k ~=0 then
repeat
d3=x-k;d4=y-k
x=d3;y=d4
v=v..x.."-"..y.."\r\n"
until k ~=0;
end
d3=x-String.ToNumber((String.Mid(y, 1, 1)*100))
d4=y-String.ToNumber((String.Mid(y, 1, 1)*100))
x=d3;y=d4
v=v..x.."-"..y.."\r\n"
d3=x-y;d4=y-y
x=d3;y=d4
v=v..x.."-"..y.."\r\n"
------------
Dialog.Message("Notice",v );

موفق :abc_138:

جميل جدا ......:abc_050::abc_050: ......... يحقق المطلوب

-------------------
استفسار : بخصوص الدوال until و repeat الا تشبه دالة التكرار for و if