مشاهدة النسخة كاملة : حساب متوسط زمني
عبد الهادي بهاب
17-03-2016, 12:31 AM
السلام عليكم ورحمة الله وبركاته
في احد المشاريع المطلوب حساب المتوسط الزمني
و حسب ما فهمته فهو اشبه ما يكون بالمعدل بين مجموعة ازمنة
مثال عندنا هذه الازمنة : ميلي ثانية : ثانية : دقيقة
02:25:56
12:12:45
00:01:15
12:45:55
22:22:45
12:45:13
كيف السبيل الى ايجاد ذلك ؟
عبد الهادي بهاب
17-03-2016, 01:45 AM
محاولة خاطئة ....تحتاج الى تعديل
--------données-----------
r1 ="10:22:25";
r2 = "12:02:35";
r3 = "11:10:45";
r4 = "01:00:55";
r5 = "02:02:05";
r6 = "02:07:15";
-------------------------------
m1=0;c1=0; mil1=0;
------------------
for i=1,6 do
m1 = m1+ String.ToNumber(String.Mid(r..i,1,2)); Dialog.Message("",m1);
c1 = c1+ String.ToNumber(String.Mid(r..i,4,2));
mil1 = mil1+ String.ToNumber(String.Mid(r..i,7,2));
end
tot = mil1 + c1*60 + m1*3600;
ttt = tot/6;
tot1 = Math.Floor(ttt);
tttm = Math.Floor(tot1/3600);
tot2 = ttt - tttm*3600;
tot3 = Math.Floor(tot2/60);
tot4 = ttt - tttm*3600 - tot3*60 ;
Dialog.Message("moyen_time",tttm.." : "..tot3.." : "..tot4);
الخطا هو انني لا اعرف التعامل بالمغيرات دون ليبال او انبوتات .........الكود فعال اذا كان r هو Label.GetText(r"r"..i)........
عبد الهادي بهاب
17-03-2016, 01:47 AM
m1=0;c1=0; mil1=0;
-------------------------
for s=1,6 do
m1 = m1+ String.ToNumber(String.Mid(Label.GetText("r"..s),1,2));
c1 = c1+ String.ToNumber(String.Mid(Label.GetText("r"..s),4,2));
mil1 = mil1+ String.ToNumber(String.Mid(Label.GetText("r"..s),7,2));
end
tot = mil1 + c1*60 + m1*3600;
ttt = tot/6;
tot1 = Math.Floor(ttt);
tttm = Math.Floor(tot1/3600);
tot2 = ttt - tttm*3600;
tot3 = Math.Floor(tot2/60);
tot4 = ttt - tttm*3600 - tot3*60 ;
Label.SetText("time1",tttm.." : "..tot3.." : "..tot4);
ثامر أبو بلقيس
17-03-2016, 02:29 AM
ما ناتج الكود المستعمل
أي ما هو المتوسط الزمني للأزمنة أعلاه ... :abc_138: ؟
كونها تبدو من المعطيات محاولة :abc_085: فاشلة:abc_085:
:abc_085::abc_085:
عبد الهادي بهاب
17-03-2016, 09:28 AM
حسب ما فهمته ..........نجمعها كلها ثم نقسم على 6 ............لذلك في الكود .....جمعت الساعات وحدها و الدقائق وحدها و الثواني وحدها ...........ثم حولت ها كلها الى ثواني ..........ثم قسمت المجموع على 6 .........ثم العملية العكسية تحويلها الى ثواني و دقائق ثم دقائق ................و الله اعلم
ثامر أبو بلقيس
17-03-2016, 09:29 AM
ما هو الناتج ؟ هذا ما اريد
ثامر أبو بلقيس
17-03-2016, 09:35 AM
و لاحظ لا يوجد الساعات في السؤال بل
ملي ثانية - ثانية - دقائق
أليس كذلك ؟
ثامر أبو بلقيس
17-03-2016, 01:36 PM
my_table = {"02:25:56","12:12:45","00:01:15","12:45:55","22:22:45","12:45:13"};
tamer =0
for i = 1,#my_table do
x1 = tonumber(String.Mid(my_table[i], 1, 2));
x2 = tonumber(String.Mid(my_table[i], 4, 2));
x3= tonumber(String.Mid(my_table[i], 7, 2));
---------------------
Ms=(x1*60000)+(x2*1000)+x3
-------------------------
tamer=tamer+Ms
--------------------------------------
end
Dialog.Message("Notice",string.format("%02d:%02d:%03d",math.floor(math.floor(tamer/#my_table / 1000) / 60), math.floor(tamer/#my_table / 1000) % 60, tamer/#my_table % 1000) );
عبد الهادي بهاب
17-03-2016, 03:33 PM
و لاحظ لا يوجد الساعات في السؤال بل
ملي ثانية - ثانية - دقائق
أليس كذلك ؟
صح اقصد ميلي ثانية ........لكن استعملت كود os.date لكن في onshow لم اكتب Page.Start(1000) f بل فقط 1 لذلك اعتبرت الرقم الاول عن اليمين بالميلي ثانية .........لكنه الكود يظهر فقط رقمين ................
ثامر أبو بلقيس
17-03-2016, 03:40 PM
صح اقصد ميلي ثانية ........لكن استعملت كود os.date لكن في onshow لم اكتب Page.Start(1000) f بل فقط 1 لذلك اعتبرت الرقم الاول عن اليمين بالميلي ثانية .........لكنه الكود يظهر فقط رقمين ................
os.date ؟؟؟
onshow؟؟؟؟
Page.Start(1000) ؟؟؟
كلها مصطلحات لم تطرح بأي شكل من الاشكال و لا علاقة لها بمعالجة
معطيات ثابتة أليس كذلك " واحد منا غلطان " :abc_138:
على العموم كتبت لك الكود الذي يفي بالغرض مع ملاحظة أن
1 ثا = 1000 ملي ثانية
عبد الهادي بهاب
17-03-2016, 03:44 PM
my_table = {"02:25:56","12:12:45","00:01:15","12:45:55","22:22:45","12:45:13"};
tamer =0
for i = 1,#my_table do
x1 = tonumber(string.mid(my_table[i], 1, 2));
x2 = tonumber(string.mid(my_table[i], 4, 2));
x3= tonumber(string.mid(my_table[i], 7, 2));
---------------------
ms=(x1*60000)+(x2*1000)+x3
-------------------------
tamer=tamer+ms
--------------------------------------
end
dialog.message("notice",string.format("%02d:%02d:%03d",math.floor(math.floor(tamer/#my_table / 1000) / 60), math.floor(tamer/#my_table / 1000) % 60, tamer/#my_table % 1000) );
جميل جدا..............لم يوحى الي فكرة المصفوفة ........ربي ينورك ....افكار جد ائعة جدا .......
الكود واضح جدا ..........لكن جزئبة المتوسط اي قسمة على 6 لم افقهها جيدا اين ترجمتها في الكود
ثامر أبو بلقيس
17-03-2016, 03:50 PM
الجزئية :
tamer/#my_table
هي عبارة عن العدد المعبر عن مجموع " الميلي ثوان " لكل الازمنة مقسوم على عدد عناصر المصفوفة
لم أكتب 6 صريحة حتى يكون الكود عام للاستعمال لأي عدد كان في مصفوفة من عناصر
عبد الهادي بهاب
17-03-2016, 04:00 PM
os.date ؟؟؟
onshow؟؟؟؟
Page.Start(1000) ؟؟؟
كلها مصطلحات لم تطرح بأي شكل من الاشكال و لا علاقة لها بمعالجة
معطيات ثابتة أليس كذلك " واحد منا غلطان " :abc_138:
على العموم كتبت لك الكود الذي يفي بالغرض مع ملاحظة أن
1 ثا = 1000 ملي ثانية
جرب هذا ................
في On show
Page.StartTimer(1);
d = 0
و في time
d=d+1
Label.SetText("time", os.date("!%X",d));
ما اريك سيدي الكريم ؟ كانه ليس ميلي ثانية بل جزء من الثانية بمقدار 60 و ليس 1000
عبد الهادي بهاب
17-03-2016, 04:03 PM
الجزئية :
tamer/#my_table
هي عبارة عن العدد المعبر عن مجموع " الميلي ثوان " لكل الازمنة مقسوم على عدد عناصر المصفوفة
لم أكتب 6 صريحة حتى يكون الكود عام للاستعمال لأي عدد كان في مصفوفة من عناصر
بارك الله فيك استاذ ..........شرح واضح و بين و جميل ...........يعني # هي عدد عناصر مصفوفة :abc_022::abc_022:
ثامر أبو بلقيس
17-03-2016, 04:21 PM
جرب هذا ................
في On show
Page.StartTimer(1);
d = 0
و في time
d=d+1
Label.SetText("time", os.date("!%X",d));
ما اريك سيدي الكريم ؟ كانه ليس ميلي ثانية بل جزء من الثانية بمقدار 60 و ليس 1000
هنا أنت تتوقع بأنه تم ضم عداد بالميلي ثانية بينما ما قمت به هو أنك " جريت الثوان فقط " فظهرت لك و كأنها ميلي ثانية
فالأبعاد هي للثوان و الدقائق و الساعات لا دخل للميلي ثانية هنا
اطلع على الاستغلال لتلك الأبعاد
http://www.abc4web.net/vb/showthread.php?t=33101
أما إن كان بحثك عن كود لإظهار الميلي ثانية فذلك مبحث آخر :abc_138:
عبد الهادي بهاب
17-03-2016, 04:30 PM
هنا أنت تتوقع بأنه تم ضم عداد بالميلي ثانية بينما ما قمت به هو أنك " جريت الثوان فقط " فظهرت لك و كأنها ميلي ثانية
فالأبعاد هي للثوان و الدقائق و الساعات لا دخل للميلي ثانية هنا
اطلع على الاستغلال لتلك الأبعاد
http://www.abc4web.net/vb/showthread.php?t=33101
أما إن كان بحثك عن كود لإظهار الميلي ثانية فذلك مبحث آخر :abc_138:
هو نفس الموضوع الذي استعملت منه الكود ..........يعني لما غيرت 1000 الى 1 ظننت ان الكود سيظهر ميلي ثانية .......العدد الاخير يجري بسرعة فليس للثواني ........اليس كذلك ؟
عبد الهادي بهاب
17-03-2016, 04:32 PM
أما إن كان بحثك عن كود لإظهار الميلي ثانية فذلك مبحث آخر :abc_138:
اكون شاكر جدا سيدي الكريم ........لو تكرمت علينا بهذا المبحث
ثامر أبو بلقيس
17-03-2016, 06:19 PM
لاستغلال التعامل مع التايمر فيه و عليه ....
لذلك مبدئيا أحاول تغليط التايمر و جعل الساعات --- دقائق
و الدقائق --- ثوان و الثوان -- ملي ثانية
كيف سيكون الشكل مقبول مرفوض لا أدري المهم خربشة على الطريق قد تكون الطريق
ضمن عملك أنبوتا
و في on show سنكتب ما فكرت فيه أنت :
Page.StartTimer(1);
c = 0
و في on timer
c=c+1
g1 =os.date("!%S",c);g2 =os.date("!%M",c);m =os.date("!%H",c)
Input.SetText("Input1",m..":"..g2..":"..Math.Floor(g1*1000/60));
بدون نقد
الهدف : تصحيح فكرة :abc_138:
العداد يفقد توازنه بعد ساعة
عبد الهادي بهاب
17-03-2016, 08:05 PM
لاستغلال التعامل مع التايمر فيه و عليه ....
لذلك مبدئيا أحاول تغليط التايمر و جعل الساعات --- دقائق
و الدقائق --- ثوان و الثوان -- ملي ثانية
كيف سيكون الشكل مقبول مرفوض لا أدري المهم خربشة على الطريق قد تكون الطريق
ضمن عملك أنبوتا
و في on show سنكتب ما فكرت فيه أنت :
Page.StartTimer(1);
c = 0و في on timer
c=c+1
g1 =os.date("!%S",c);g2 =os.date("!%M",c);m =os.date("!%H",c)
Input.SetText("Input1",m..":"..g2..":"..Math.Floor(g1*1000/60));
بدون نقد
الهدف : تصحيح فكرة :abc_138:
العداد يفقد توازنه بعد ساعة
الكود شغال جدا ........في حالة اردنا تدارك المشكل بعد ساعة ......... الا يمكن اضافة شرط مثلا بحيث اذا بغلت قيمة m >= 59 فانها تصبح 0 و نضيف سترينج اضافي للساعات ؟؟؟؟؟؟؟ ايمكن ان تنجح الفكرة
نضيف h=0 للحدث في on show
ثم في التايمر
c=c+1
g1 = os.date("!%S",c);
g2 = os.date("!%M",c);
m = os.date("!%H",c);
if String.ToNumber(m) >= 59 then
m = 0;
h = m+1;
end
Label.SetText("time",h..":"..m..":"..g2..":"..Math.Floor(g1*1000/60));
vBulletin® v3.8.11, Copyright ©2000-2024, abohmam