أساسيات الخوارزميات "Algorithms"



علاش Algorithms مهمة؟
     مستحيل تلقا مبرمج مكيعرفش الخورزميات، حتى HTML و CSS خاصك ترسم الواجهة فورقة ولا شي بلاصة عاد تبدا تبرمج، هادشي غينضم ليك الخدمة تاعك على عكس لي غادي مع الهواء فالكود.
        و لأن ALGO هي لي غتعرفك علا كيفاش غتولي تفكر كي الحاسوب. و هادي هي المادة الأساسية لي خص أي واحد باغي يدخل لهاد المجال يقراها لأنها غتحبب ليك البرمجة.
    أي واحد محترف سولتي شنو خاصني نبدا باش ندخل لهاذ المجال. مباشرة غيقوليك Algorithms و لي كيقوليك Python و java راه غير طانز عليك أخويا/ختي، لأن هاد اللغات راهم طالعين فالنيفو. بزاف و كيقراو فالسنة التانية لأي سلك.
      لي قاليك CSS أو HTML تبدا بيهوم مزيان ولاكن من الأحسن تاخد غير نضرة على ALGO، تا هادو. HTML CSS  خفاف ضراف و مكيبغيوش بزاف د الذكاء. و تا إلا بديتي ب C ماشي مشكل ولاكين أنا كنوريك الطريق الصحيح.
   هاد الهضرة لي كنقول راه ماشي من فراغ، أي مدرسة ديال البرمجة كيفما كانت:
OFFPT
BTS
EST
ENSA
1337
....
      فأول حاجة كتقرا فيها هي ALGORITHMs.  هاد الخورزميات راه مغتستعملهومش غير في البرمجة، حياتك الواقعية كتعتامد على الخورزميات، لي كيكون عندك مشكل كبير و كتقسموا لمشاكل صغار و كتحلهوم شوية بشوية. الخورزميات راه نمط حياة و سير قلب غا فاليوتوب و رد عليا.
     أولا غنتعرفوا على شوية ديال المصطلحات لي غنحتاجوهوم فالشرح تاعنا مستقبلا.
     - المتغير Variable: عبارة على واحد المساحة من الذاكرة، كتقوم بحفضها "reservation"، و كتسميها إسم، باش تعمرها من بعد بمجموعة من القيم المختلفة لي سواء كيدخلهوم ليك المستخدم أو كينتجوا عن عمليات نتا كتديرهوم أتناء عمل التطبيق.
     كيفاش كتعيط او "تديكلاري" بهاد المتغير كيختالف من لغة لأخرى، ولاكين Algo كولشي عندها متساوي.
     خصك غير تعرف أنه كاين فرق بين أعداد موجبة أو سالبة أو الحقيقية و لي فيها الفاصلة و تا الحروف راه متغيرات.
     ولاكين ماشي كولهوم عندهوم نفس الطريقة Reservation فاللغات.
     ولاكين حنا غنقوالبو الوقت و نديكلاريو الأعداد على أنهم Reel، أي عدد حقيقي و كينتامي للمجموعة R.
    هادو الأعداد اما الأحرف كتعتامد واش هو مجرد حرف:
Caractére
أو مجموعة من الحروف(جملة او كلمة):
Chaines de Caractére
    تال الأن مزيان تعلمنا المتغيرات. متلا باغي نديكلاري شي واحد نحط فيه عدد  نكتب.
Variables reel:  A,B,d ;
أو
A,b,C : reel;
 أو أو.... المهم داكشي يكون منطقي.
   و لاحض أنني كنحط هاد العلامة "," بين المتغيرات باش نفصلهوم.
     و لاحض في أخر الجملة كنحط ";" كإشارة لنهاية السطر البرمجي و من الأحسن تولف تكتبها من دابا. إلا كنتي غتبع ليها C.
    متلا غنديكلاري متغير نحط فيها حرف:
Variables charactére:  A;
أو
 A : Caractére;
      في حالة مبغيت نحط فيه جملة:
   variables Chaine de caractére: Name;
أو 
Name : chaine de caractére;
   هادشي باش زوينة ALGO. خاص غير داكشي تاعك يكون منطيقي. تا إلا بغيتي كتب ALGO بتيفيناغ مكاين لي غقوليك لا خطأ. المهم هو انت واش فهمتي داكشي، حنا فالمدارس كنتافقو مع الأساتذة على شي أساسيات و قوانين نتبعوهوم باش يعرف الأستاذ يصحح الوراق و ميتلفش، أما ALGO راه بحال الوساخ. الإبداع تاعك، ولاكين من الأحسن تقربها لللغة لينتا باغي تخدم.
   بطبيعت الحال كاينين قوانين كينضموا هادشي، متلا مي.مكنش ليك تديكلاري متغير و تسميه "؟" أو "+" او تستعمل إسم ديجا كتستعملوا حيت غتتلف متلا
Reel : reel
أو تدير متغير و تحط فيه شي حاجة لا علاقة لها مع داكشي لي ديكلاريتي ديجا متلا ديكلاي Caractere و تحط فيه عدد. أو العكس.
   أو تديكلاري متغير و تسميه شي سمية طويلة.
   هوما بزا د القوانين ولاكين حنا دابا الأساسيات، لأنه منقدرش نشرح ليك ALGO لي قراو ناس ف عاماين فبوسط واحد.
     مزيان دابا تهنينا من المتغيرات أجيو نشوفو الرموز و العمليات الحسابية لي تقدر تدير بيها.
     أولا داكشي العادي + و - و ÷ و × هاكو باينين غيرهو من الأحسن القسمة ترمز ليها ب / و الضرب ترمز ليه ب *.  و أخيرا = لي كنرمزوا ليها بسهم ---> متجه لليسار. إلا درتيه لليمين خطأ.
       متلا: نتا عندك متغيرات فيهوم قيم و باغي تدير ليهوم عمليات. السهم خاصو يكون متاجه لليسار ماشي اليمين. 
A,B,C: reel;
A <----- 3;
B <-----2;
دابا حطيت ف A القيمة 3.
و B حطيت فيه القيمة 2.
 A  <---- B * 2;
  القيمة لي كانت ديجا ف A مشات و ولات كتساوي 4.
C <---- A / B
دابا C ولات فيه ناتج قسمة A على B و لي هي 2.
 زيد عليه الأقواس راه تا هوما باينين كيفاش كيخدموا.
 و الأس متلا B أس 2 كتساوي 4 غنحطها ف C :
C <---  B ^ 2
كنضن هادشي لحد الأن مفهوم مكيحتاجش قدرات خارقة؟ أو لا
     المهم الأن غنتعرفوا على نوع أخر من المتغيرات و لي هو Boleen، صراحة معرفش واش هكا كيتكتب حيت أنا هو لي نوضني الأستاذ فالتالت و قاليا نصرف ليه étre فالماضي و لا معرفت أشمن زمن. و بقيت واحل و كال ليا البداية نتاعوا 
je suis
و أنا نكمل ليه
Je suis 
Tu suis 
il suis
Nous suisons
Vous suisez
ils suis
      3 سنين و هو كيضحك عليا  فينما شافني فالساحة، فبرا، كيتفرشخ بالضحك. 
    المهم باراكا من الضحك  هادشي غيرباش نخرجو من الروتين و صافي.
  من بعد مشفنا العمليات العادية + - x ÷ و )( و ^  عغندوزو لمقانة الأعداد. و قلنا غنتعرفوا على متغير سميتو Boleen هاذا كيحتاوي على 2 قيم : صحيح أو خطأ و يحتوي على قيمتين 1 أو 0. عقل عليه.
1 كتعني صحيح
0 كتعني خطأ
    هنا غنتعرفوا على مقارنة المتغيرات و الرموز تاعهوم:
 أولا نديكلاريو المتغيرات نتاوعنا :
Variables:
A reel;
B reel;
C reel;
و نحطو فيهوم قيم :
A <---- 1;
B <---- 5;
C <---- 2;
 متلا باغي نقارن A و B واش كيتساواو:
C <----- A = B;
الأن نتا قارنتي بين A و B واش كيتساواو الإجابة هي لا  إن C غتكون فيه العدد 0.
متلا تا باغي تشوف واش B كبر من A
C <---- A < B;
أو
C <---- B > A;
    الأن واش B كبر من A، الجواب هو ييه إذن C إلا قلبنا شنو فيه على القيمة لي فيه غنلقاو 1.
    متلا باغي نقارن A و B واش مختالفين:
C <---- A < > B
فهاد الحالة فعلا  A كيخالف B إذن C غتكون فيها القيم 1 يعني صحيح.
    بالنسبة لأكبر أو يساوي كتستعمل الرموز التالية:
>=
<=
    مزيان ها هنا تهنينا من المقارنة.
   حنا دابا خدامين على أساس ننتاقلو ل C، إذن نوعية البرنامج لي غيكون بحال داكشي د الهاكرز، الشاشة الكحلة  وكيطلعوا ليك الأوامر.
     دابا غنتعرفوا على 2 دوال وحدة كتطلع ليك ميساج فالشاشة و الأخرى كتبقى تتسناك تكتب قيمة و تكليكي على Enterz.
   الدالة الأولى هي Encrire ، كتكتب بيها ميساج للمستخدم. 
  متلا
Ecrire("Hi my name is Souhaile, what is your name"(;
داكشي لي كاين بين " " غيطلع للمستخدم فالشاشة.
      الأن غنديكلاري متغير نسميه Name و يكون كيهز جملة.
Variable
Name : chain de caractére
دابا بغيت المستعمل يدخل سميتو و نحفضها ف هاظ المتغير تاعي:
Lire(Name);
متلا دخل المستخدم الإسم Ayoub.
غيحطو الحاسوب في المتغير لي سميناه Name.
مزيان دابا بغيتو يرد عليه السلام غتكتب
Ecrire("Hi %D, nice to Meet you!",Name);
هنا غتلاحض حاجة جديدة ألا و هي:
℅D
عقلتي فاش قلت ليك بلي داكشي لي كيكون بين معقوفتين كيتكتب فالشاشة، حنا بغينا باش تطلع لينا داكشي لي كاين ف المتغير Name ماشي تطلع لينا Name. داكشي علاش و كنزيد ℅D و الحاسوب كيبدل ℅D بالمتغير لي مكتوب فالجنب خارج المعقوفتين، 
   إذن الناتج ديال :
Ecrire("Hi %D, nice to Meet you!",Name);
     غيكون 
Hi Ayoub nice to meet you!
     مزيان، دابا غنتعرفوا على عبارات ديال الشرط
   متلا أنا بغيت هاد خونا أيوب نقيدو فشي دوري ديال كورة، و هاد الدوري الدوري مصنف لجوج و هاد الدوري كيقيد على  حساب العمر:
  - أقل قطعا من 18 غيلعب مع الصغار.
  - مابين 18 و 60 غيلعب مع الكبار.
  - أكبر قطعا من 60 غيلعب مع العجائز.
   أولا غنديكلاري متغير نحط فيه العمر :
Age:  reel;
غينطلب منو يدخال العمر و نقراه من الشاشة و نحطو فالمتغير تاعي لي سميتو Age.
Ecrire("Hi user Plees Ernter your age");
Lire(Age);
   دابا ختاصنا نتيستيو على القيمة نتاع Age
     هنا غنتعرفو على Si و كتكتب بحال هكا:
Si ( الشرط ){
Exprision
}
في حالة ما إذا كان الشرط صحيح فإنه غيطبق داكشي لي مكتوب ف Exprision بين هاد جوجات {  }
   بسم الله: عقلتوا على تعابير المقارنة.
    إلا كان Age أصغر قطعا من 18 غيكتب ليه نتا غتلعب مع فئة الصغار Kids:
Si ( Age < 18 ){
Ecrire("You going to play with kids");
}
 و كتأكد من أنك تسد المعقوفتين {   } 
    مزيان دابا غنديرو 2 شروط و هنا غنتعرفوا من جديد على && و ||
   - && كتعني "و"
   - || كتعني "أو" 
(صحاب الماط مغتفعني فوالوا راه كنشوفكوم)
    مفهمتومش أنا نبسط هوم ليك:
    متلا قالت ليك أمك أو أبوك(لي ماتو ليه الله يرحمهوم و سمح ليا إلا كرتك فيهوم) نوض تسخر ليا:
  عطاك 10 دراهم قاليك سير جيب نصف لتر من حليب الجودة و نصف لتر من حليب سنطرال.
     نتا هنا مفروض عليك تجيب الجودة و سنطرال. حيت ستعمل "و".
    ماشي هي إلا قاليك سير جيب نصف لتر من الجودة أو سنطرال.
    نتا هنا مفروض عليك تجيب غير واحد منهوم. و تا إلا جبتيهوم بجوج راه مزيان (هادشي إلا خلصتيه من جيبك، أما تخلصو من ديك 10 دراهم لي عطاك عول على شي تفرشيخة عالمية خهههه).
    معلينا
   بما أنه بغيتو يكون كبر من 18 عام و صغر من 60 غنكتب فالكود:
Si ( Age > 18 && Age < 60 )
{
Ecrire("You going to play with the young's");
}
و هنا راك ستعملتي && أي " و " إذن خاصو يكون كبر قطعا من 18 و صغر قطعا من 60.
    التكميلة غتكون ساهلة للي كبر من60:
Si ( Age > 60 )
{
Ecrire("You going to play with the Old's");
}
هانتا تعلمتي الشرط ب Si، تقدر تدير بزاف تاع. Si متابعين أو تخدم ب Sinon Si، ولاكين هنا خدامين أساسيات.
     عيييتي ياك، خاصك تشوفي أنا لي تنكتب هههه. غير صبر بقات لينافقرة أخيرة.
   و هي Tant que و كتكتب على الشكل التالي
Tant que ( الشرط ){
Exprision
}
  و كتعني ما حد داك الشرط صحيح غيتبقا يتعاود داك Exprision. غنستغلوه باش نكونتروليو بنادم لي كيطنز علينا، متلا واحد غيجي و يدخل ليك 0 فالعمر أو -1 أو 10000 او يدخل ليك Abcd فالعمر أولا واحد باغي يشارك و عندو غير 4 سنين.
   أنا مبغيتوش بفيت غير لي بين 10 سنين و 100 عام أش غنكتب فاكود:
Tant que ( Age < 0 && Age > 100)
{
Ecrire("please give me your age");
Lire(age);
}
,هادشي لي الفوق معناه ماحد أن داك Age أكبر من 100 و صغر من 10 فإنه غيعاود يطلب منو العمر تاعوا. إنتبه لواحد الخطأ كبير، عمرك تيستي على متغير فارغ. خاصك أولا تحط فيه قيمة.
   غنخليكوم مع هاد الكود مختصر لكامل هادشي لي الفوق حاول تفهموا.  و حاجة أخير ALGO كيتكون من 3 د الفقرات، الإسم تاع الخوارزمية، بلاصة فين تديكلاري، و بلاصة الكود.
  Algorithm Age_of_player.
Variables:
Name: Chaine de caractére
Age: Reel
Début 
Ecrire("Please give me your name");
Lire(Name);
Ecrire("Hi %D please give me your age",Name);
Lire(Age)
Tant que ( Age < 10 && Age > 100)
{
Ecrire("please give me a corect age");
Lire(Age);
}
Si( Age < 18 )
{
Ecrire("You going to play with the Kid's");
}
Si ( Age > 18 && Age < 60 )
{
Ecrire("You going to play with the young's");
}
Si ( Age > 60 )
{
Ecrire("You going to play with the old's");
}
Fin
هاذا هو كل شيء بشكل مختصر و راه كاينين بزاف د العبارات الشرطية و الليبوكل و و و ولاكين هادشي هو الأساسي. و ℅D راه ماشي ديال كولشي. هادشي إنشاء الله نتعرفو عليه ف C.