تسجيل الدخول

مشاهدة النسخة كاملة : الحلقات، والتعقيد البرمجي لدي


أبو محسن
01-12-2013, 02:48 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته - حياكم الله جميعاً :)

لدي سؤال عن دالة for ، الحقيقة أني منذ أن عرفت لغات البرمجة حتى يومي هذا، وأنا في عدم توافق مع هذه الدالة... رغم أنها من البرمجة بمكانة
أحببت لو أن هُناك من يتفضل علي بشرح هذه الدالة بشكليها:
(1)
for i=x, y do
-- Do something here
end

(2)

for i,x in pairs(y) do
-- Do something here
end


سؤالي: ما الفرق بين الدالتين ؟؟ ومتى نستخدم الأولى!! ومتى نستخدم الثانية!!

مثال: أريد جلب ملفات في مجلد ما ووضعها في Listbox > لا شك أني سأحتاج إلى دالة for :abc_102:
مثال: معلوم أن الإكسبلور (مستعرض الويندوز) يشغل نفسه.. فهل يمكنني إغلاقه بشكل متكرر حتى لا يمكن فتحه..!
مثال: أريد أن أستخدم الدالة EnumerateTitles لإرجاع العمليات التي تعمل..
استخدمت الكود التالي:

All_titles = Window.EnumerateTitles();
count = Table.Count(all_titles)
for i = 1 , count do
Dialog.Message("",i)
end
طبعاً رجع لي بـ أرقام العمليات (1,2,3,4,....)
أريده يرجع لي بـ أسماء العمليات !!

أعلم أني قد أكثرت الكلام...
فـ الخلاصة يا أساتذتي: أريد معرفة آلية الحلقات...

- [ سؤالين خارج الموضوع ] -
هل يمكن إضافة Plugin Autoit للأصدار 8 !!
لدي استفسار عن لغة Autoit فهل هُناك أمكانية لطرح السؤال ؟؟

القنـاص المصرى
01-12-2013, 03:31 PM
بص يا اخى
انت تريد ان البرنامج يرجعلك باسماء العمليات صح ؟
ان كان ذلك فالكود هو :
all_titles = Window.EnumerateTitles();
for i,x in pairs(all_titles) do
Dialog.Message("",x)
end
بص يا اخى
عند استخدام for مع الجداول نستخدم متغيرين جديدين وليكن i,x
for i,x in pairs(variable)
i تشير هنا لرقم العنصر داخل الجدول وهو مايسمى index
x تشير هنا للعنصر نفسه
هذا ما اعلمه وان كان لى علم بشئ اكثر لازدتك

عبود عبود
01-12-2013, 07:14 PM
كلام صحيح يا قناص

فـــ التكرار :

for i=1,5 do --some thing end

يمكن إستخدامة مع الجداول ومع القيم المعروف لها بداية و نهاية .

أما التكرار :

for i in pairs(result) do --Something end

يستخدم مع الجداول فقط .

أبو محسن
01-12-2013, 07:18 PM
بص يا اخى
انت تريد ان البرنامج يرجعلك باسماء العمليات صح ؟
ان كان ذلك فالكود هو :
all_titles = Window.EnumerateTitles();
for i,x in pairs(all_titles) do
Dialog.Message("",x)
end بص يا اخى
عند استخدام for مع الجداول نستخدم متغيرين جديدين وليكن i,x
for i,x in pairs(variable)i تشير هنا لرقم العنصر داخل الجدول وهو مايسمى index
x تشير هنا للعنصر نفسه
هذا ما اعلمه وان كان لى علم بشئ اكثر لازدتك
جزاك الله خير وبارك فيك :abc_022:
أفهم أن شكل الدالة التالية:

for i,x in pairs (variable)
---
end

خاصة بالتعامل مع الجداول، ( i,x ) !!!

لكن الدالة التالية ما هي أستخداماتها ؟؟

for i=1, x do
---
end

!!!
هذا ما أردت فهمه

القنـاص المصرى
01-12-2013, 08:04 PM
مثل ماقالك الاستاذ عبود ان x=1 وخلافه دى بتكون لو انت عارف الجدول هينتهى فين
لكن for x,y in pairs ده بيبقى فى حالة انك قصادك جدول مش عارف هيخلص فين زى مثلا لو انت هتجيب ملفات جوا فولدر فلازم تستخدم الطريقة التانية for i,n in pairs مع العلم انك تقدر تكتب اى حرف انت عاوزه مش شرط i و x اختر ماتريد وايا ماتختار فالاول للاندكس والثانى للقيمة

النصل القاطع
02-12-2013, 12:00 AM
for i=1, x do
---
end
هذه حلقة for do
هذه الحلقة معلومة البداية و النهاية
أنت تحدد البداية
أنت تحدد النهاية
حتى و لو كانت البداية و النهاية متغيرات
بشرط حسابها قبل بداية الحلقة

أما الحلقة
for i,x in pairs (variable)
---
end

هى حلقة for in do
خاصة بمخرجات الجداول التى تكون دائما مفهرسة
فهى تعتبر أن بداية for هى أول عنصر بالجدول
و نهاية for هى آخر عنصر بالجدول
و لا تحدد أنت لها بداية أو نهاية


lملحوظة أخيرة
يمكن لحلقات for do أن تحل محل حلقات for in do
لا يمكن لحلقات for in do أن تحل محل حلقات for do

أبو محسن
02-12-2013, 09:43 AM
جزاكم الله خير
أشعر أني قد فهمت في هذا اليوم ما لم أفهمه في الأيام التي خلت... :abc_022:

سؤال أخير أخواني الأفاضل - تفضل الله عليكم -
هل يمكن أن تجسدوا لي ما تم توضيحه في مثال؟ وتحديداً الحلقات مع الجداول !!

كما أني لا انسى التالي :abc_102:

-- - [ سؤالين خارج الموضوع ] - --
هل يمكن إضافة Plugin Autoit للأصدار 8 !!
لدي استفسار عن لغة Autoit فهل هُناك أمكانية لطرح السؤال ؟؟
^ ... ^

Haitham.2012
02-12-2013, 11:11 AM
ان شاء الله هذا الملف يوضح لك الفكره

في المرفقات

أبو محسن
02-12-2013, 12:07 PM
الله يبارك فيك أستاذ هيثم، وباقي الأساتذة الفضلاء

وهذا تعديل بسيط على الكود الي في مشروعك أستاذ هيثم

sFind = File.Find(_DesktopFolder.."\\File", "*.txt", true, true, nil, nil);
for i,y in pairs(sFind) do
str = String.SplitPath(y);
ListBox.AddItem("ListBox1", str.Filename..str.Extension, "");
end
وأخيراً تم فهم آلية الحلقات :abc_065:
والله لم أتوقع أنها بهذه السهولة واليُسر... :)

يبقى لدي سؤال يخص لغة Autoit وبحكم أني مبتدئ في اللغة لم أجد له جواب + هو من الأهمية بمكانة
إن كان هُناك مجال لطرح السؤال.. وإلا فلقد أفدتموني :abc_139:

علاء الدين حسين
17-12-2013, 12:22 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

امل الماضي
03-01-2014, 05:11 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

ثامر أبو بلقيس
20-03-2014, 08:05 PM
موفق بإذن الله ... لك مني أجمل تحية .

فرح صالحي
20-03-2014, 10:51 PM
شـكــ وبارك الله فيك ـــرا لك .:abc_152:.. لك مني أجمل تحية .

ياسرهتهت
17-08-2014, 10:41 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .