قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 26-01-2016, 06:31 PM المشاركة 1   
x4 خوارزميات Twitter FaceBook Google+



بسم الله الرحمن الرحيم

خوارزميات ( نصائح و خدع )

السلام عليكم و رحمة الله و بركاته

اخوانى المحترمين ,

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

لذلك فان موضوعنا يصلح لاى مبرمج فى اى مستوى بالاضافة لاى لغة برمجة , مع العلم ان امثلتنا ستكون بلغة السي و خاصة Embedded C .
و الموضوع مفتوح للجميع لندلى بدلونا و ننفق لتعليم الناس الخير .

و ان شاء الله سنخطو مع بعضنا و كل من له الخبرة يعلمنا بها , و اكثر النصائح او الخدع ستكون منقولة من كتب او مقالات اجنبية مع بعض الشرح ان شاء الله عند الضرورة .
ان شاء الله المعلومات ستكون على شكل قواعد

و الله الموفق و المستعان

اللهم ادخلنا برحمتك فى عبادك الصالحين المصلحين


اعلانات

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 26-01-2016, 07:12 PM المشاركة 2   
x4 خوارزمى_01


بسم الله الرحمن الرحيم


السلام عليكم و رحمة الله و بركاته

القاعدة_01 : البرنامج هو مشروع يجب الاستعداد و الاعداد له و من اهم الاستعدادات هى :

1- الهدف الواضح بمعظم التفاصيل و يفضل كتابتها و رسمها ان امكن .

2- النية لانه بالنية تؤجر على وقتك فى بذلك للعمل و يكون عبادة حتى وان حدث ما اثر على اكتماله , و بغير النية فان اكتمل العمل اخذت اجرك المادى ان كان له مقابل ثم لا تجد له اثر فى الاخرة , فتكون قد بعت جزء من وقتك يعنى جزء من حياتك فى الدنيا للدنيا و ليس لله , و النية تجددها كلما بدات فى العمل .

3- يجب وضع خطة للمشروع و خطواته و تصور للتصميم هارد و سوفت.


4- بناءا على التصميم يتم اختيار الميكرو و سرعته و المكونات المساعدة .

4- يجب وضع خوارزم للبرنامج قبل البدأ فيه و عدم الكسل و الاعتماد على التفكير و التطبيق المباشر (لا تبرمج مباشرة من عقلك ) .


كود:
   
Rule-02 
Good Algorith + Bad Coding   >  Bad Algorith + good coding 
وهذا منطقى ان العمل المنظم افضل من العمل العشوائي.

و هناك طريقتين (ما اعرفه ) لتصميم algorith او الخوارزميات اما يدوى بورقة وقلم او باستخدام برنامج حاسوبى و من البرامج المجانية و جميلة لاستخدامات كثيرة منها الخوارزميات :

برنامج Edraw mind map



و الله الموفق و المستعان

اللهم ادخلنا برحمتك فى عبادك الصالحين المصلحين




اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 27-01-2016, 11:40 AM المشاركة 3   
x4 خوارزمى_02


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

القاعدة_01:

هذه القاعدة خاصة بخطوات انشاء مشروع برمجى , اما ان المبرمجين هى شركة فانها تتبع ما يعرف "دورة حياة تطوير البرمجيات"
او اختصارا
“software development life cycle” , و هو ما يمكن تطبيقه على المبرمج الفردى , و لكننا هنا سنذكر خطوات بسيطة للمبرمج الفردى و هى :

Planning or make Algorithms for program -1

2- Implementing or coding

3- Building or compiling

4- Debugging any errors

5- Lint the program for none appeared errors

6- Testing by simulation or real test and repair




و الله الموفق و المستعان

اللهم ادخلنا برحمتك فى عبادك الصالحين المصلحين



مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 28-01-2016, 02:16 PM المشاركة 4   
x4 خوارزمى_03



بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

القاعدة_01:
التعليقات
Comments

‘‘When the code and the comments disagree, both are probably wrong.’’Norm Schryer
Norm Schryer عالم حاسبات و مدير ابحاث فى مركز AT&T و يظهر اهمية التعليقات حتى بالنسبة للمحترفين .
و التعليقات من الاهمية بحيث وقتما تحتاج انت العودة للبرنامج لاى تعديل لا تجهد نفسك فى قراءة كل التفاصيل لتتذكره بينما ممكن بالتعليقات توفير كثير من الوقت فى المراجعة و التذكر


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

/*
 * Project name:     LED_Blinking (Simple 'Hello World' project)
* Copyright:     (c) Mikroelektronika, 2011.
* Description:     This is a simple 'Hello World' project. It turns on/off LEDs connected to
     PORTA, PORTB, PORTC, PORTD and PORTE.
        *MCU:             PIC18F45K22
*/


التعليقات القصيرة : و تكون من داخل البرنامج فى بداية كل دالة او حلقة او ربما عند سطر برمجى معين يحتاج لشئ من التوضيح
يفضل ان تكون كلماتها قصيرة و تعبر عن ماذا تفعل (what ) الدالة مثلا و ليس كيف تفعله (how) مثلا لو انك تحسب متوسط حساب لمجموعة قيم ممكن تكتب :

كود:
 
// compute main value
/* compute main value*/
افضل من ان تكتب :
كود:
// calculate summation of values then divide by N

و الله الموفق و المستعان
اللهم ارحمنا و تقبلنا و احباءنا فى الصالحين


التعديل الأخير تم بواسطة : مشتاق الله بتاريخ 28-01-2016 الساعة 04:35 PM

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 29-01-2016, 02:15 PM المشاركة 5   
x4 خوارزمى_04


بسم الله الرحمن الرحيم


السلام عليكم و رحمة الله و بركاته


القاعدة_01: الاسبقية precedence

لذلك من المهم معرفة و فهم اسبقية تنفيذ البروسيسور للعمليات الحسابية و المنطقية و غيرها .

كل العمليات فى اى لغة لها اسبقية , اي اذا وجد اكثر من عملية في نفس الامر (السطر) ايهما ينفذ اولا , مثال :

كود:
  3+2*5 = ?            // MULTIPLY precedes  addition so result = 3+10 = 13 
  4*5 + 3*8 = ?     // two * appear and they equal in precedence
                   // so processor start from left to right 
                               // so first is   1) 20 + 3*8     , 2) 20 + 24     , 3) 44   
لذلك من المهم معرفة و فهم اسبقية تنفيذ البروسيسور للعمليات الحسابية و المنطقية و غيرها .
بالنسبة للغة السي فان جدول الاسبقية كالتالى :
http://www.difranco.net/compsci/C_Op...ence_Table.htm
يفضل قراءته و فهمه جيدا .

الخدعة_01 : ستجد انه فى اعلى قمة الاسبقية فى الجدول هو الاقواس الهلالية ( ) , اذن يمكنك ان تخدع البروسيسور
و تجعله يقوم باسبقية تريدها انت و لا ينظر لاسبقيته هو و ذلك بان تجعل كل ما تريده داخل الاقواس , مثال :
كود:
(3+2) * 5 =? // first adding (3+2)=5 then multiply >>> 5*5 = 25 4* (5+8) *8 = ? // first adding (5+8) =13 then multiply >>>> 4*(13)*8 = 52*8=416

ملاحظة مهمة :
زيادة استخدام الاقواس لتجزئة و توضيح الكود هذه الاقواس لا تزيد حجم البرنامج ولا تزيد زمن تنفيذ البرنامج على البروسيسور ,
كما نتصور احبانا . لكن ممكن ان يؤدى الى التباس فى فهم البرنامج ... مثال :

كود:
    If (kp&&kp||4&&kp!=12) {}
Can be read as :

كود:
   If ( (kp&&kp) || (4&&kp)!=12) ) {}
Or as :
كود:
    If ( kp && (kp||4) && (kp!=12) ) {}
و بالطبع النتائج مختلفة , لذلك عليك عند كتابة مثل هذه الاكواد ان تراجع جدول الاسبقية او ان تريح نفسك و تستخدم الاقواس كما تريد .

و الله الموفق و المستعان
اللهم انا نعوذ بك من فتن الدنيا ظاهرها و باطنها و من فتن القبر




مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 31-01-2016, 06:42 PM المشاركة 6   
x4 خوارزمى_05


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

التحذير_01: اياك ان تنخدع و تستخدم الاسلوب الذكى التالى :

يتمثل الاسلوب انك اذا اردت ان تضرب رقم ما ( x= -125 ) فى رقم 2 مثلا= 250-
ممكن تلجأ للحيلة و هى : ; x = x<<1
و بالمثل ممكن تلجأ للقسمة على 2 بانك تعمل x = x>>1

لو قمت بضرب (125-) بعمل ازاحة يمين خانة واحدة فلن تكون النتيجة= (250-)
بل ستكون النتيجة = 6 + !!!! قم بتجربتها و طبعا النتيجة غير صحيحة
و كذلك فى القسمة
. الخلاصة :

القاعدة_02: لا تستخدم عمليات bit wise مثل ~ , ^ , & , | , >> , <<
فى التعامل المتغير ذو الاشارة الا بكل حرص , ولا تستخدمها فى الضرب او القسمة مطلقا مع اى متغير له اشارة SIGNED و لكن استخدم *و / و % .
امثلة :

كود:
">   // Division via bit-shift doesn’t work when negative.
int8_t signed_data = -4;
signed_data >>= 1; // not necessarily -2

// Left-shifts of signed data are undefined (in ISO C).
int32_t signed_data = -100;
signed_data <<= 1;

// The meaning of bit flips also varies for signed data.
uint8_t max_unsigned = ~0; // 255 (max unsigned)
int8_t max_signed = ~0; // -1 (not max signed)
و الله الموفق و المستعان
خذ العلوم الكون من اى عالم

ولا تاخذ علوم الدين الا من اتقى عالم




مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 04-02-2016, 11:13 AM المشاركة 7   
x4 خوارزمى_06


بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته


القاعدة_01:
اى عدد تم اعلانه انه ذو اشارة ( sign ) لا يجب وضعه فى اى امر او مقارنة او عملية مع اى عدد بلا اشارة (unsigned).

مثال :

كود:
 
 int s = -9;
 unsigned int u = 6;
 // WARNING! Dangerous mix of signed and unsigned.
 if (s + u < 4)
 {
 //  مع ان ناتج العملية سيكون كالتالى 
// if (-9 + 6) is -3 < 4, as humans expect.
 // الا انه لن يتم تنفيذ هذين القوسين 
  }
 else
 {
 // سيتم تنفيذ اوامر هذين القوسين
 // This incorrect path is actually executed
 }
و الله الموفق و المستعان
اللهم حياة ترضيك عنا و موتة تضحكك منا




احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 04-02-2016, 08:16 PM المشاركة 8   
افتراضي


مبدع اخوووووووووووي
سأتواصل معك

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 09:28 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025