تعلم كيفية البرمجة ب #C


الدرس: تطبيق : العمليات الحسابية داخل الحلقة


الصفحة السابقة
هذا كل شيء ، بفضل الفصل السابق ، يجب أن تكون لديك فكرة جيدة عن ماهية الحلقات. ومع ذلك ، قد لا ترى حتى الآن أنها سوف تخدمك طوال الوقت.
إنه عنصر أساسي لإتقانه. لذلك تحتاج إلى تدريب للتأكد من أنك تفهم كل شيء. 
هذا هو بالضبط الهدف من TP الثاني. لا مزيد من الحلقات نظريا ، نفسح المجال لممارسة التطبيقية للحلقات!
هدفنا هو إجراء الحسابات التي ستحتاج إلى for و  foreach .
هل انت جاهز لذلك دعونا نذهب

تعليمات للقيام بعمل التطبيق العملي (TP)


سيكون الهدف من هذا TP هو إنشاء 3 طرق.
سيتم استخدام الأول لحساب مجموع أعداد صحيحة متتالية. إذا أردت على سبيل المثال حساب مجموع الأعداد الصحيحة من 1 إلى 10 ، أي1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 ، سأستدعي هذه الوظيفة بتمريرها كمُدخلات 1 و 10 ، بمعنى حدود الأعداد الصحيحة التي يجب إضافتها.
شيء مثل:

Console.WriteLine(CalculSommeEntiers(1, 10));
Console.WriteLine(CalculSommeEntiers(1, 100)); 
مع العلم أن النتيجة الأولى لهذا المثال تساوي 55 (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55) والثانية 5050.
الطريقة الثانية ستقبل قائمة التكرارات كمُدخلات ويجب أن تُرجع معدل ​​التكرارات في القائمة. مثلا :

List<double> liste = new List<double> { 1.0, 5.5, 9.9, 2.8, 9.6};
Console.WriteLine(CalculMoyenne(liste)); 
نتيجة هذا المثال 5.76.
أخيرًا ، يجب أن تقوم الطريقة الأخيرة أولاً بإنشاء قائمة أعداد صحيحة من 1 إلى 100 وهي مضاعفات 3 (3 ، 6 ، 9 ، 12 ، ... ) . ثم ، قم بإنشاء قائمة أخرى من الأعداد الصحيحة من 1 إلى 100 وهي مضاعفات 5 (5 ، 10 ، 15 ، 20 ، ... ) . وفي المرة الأخيرة ، سيكون من الضروري حساب مجموع الأعداد الصحيحة الشائعة في القائمتين ... يجب عليك بالطبع العثور على 630 نتيجة لذلك
هنا ، الأمر متروك لك ...
حسنًا ، هيا ، سأظل أعطيك بعض النصائح للبدء. ليس عليك أن تقرأها إذا شعرت أنه يمكنك القيام بهذا التمرين بمفردك.
من الواضح أنك ستفهم أنه سيتعين عليك استخدام الحلقات.
لن أقدم النصيحة عن الطريقة الأولى ، إنها فقط عملية الاحماء .
بالنسبة للطريقة الثانية ، ستحتاج إلى تقسيم مجموع كل الاعداد على حجم القائمة. ربما لا تعرف كيفية الحصول على هذا الحجم. المبدأ هو نفسه بالنسبة لحجم المصفوفة ، وربما تكون قد عثرت عليه إذا بحثت قليلاً في وظائف القائمة. ومع ذلك ، للحصول على حجم القائمة ، سنستخدم liste.Count ، على سبيل المثال:

int taille = liste.Count; 
أخيرًا ، بالنسبة للطريقة الأخيرة ، سيتعين عليك العثور على جميع مضاعفات 3 و 5. أبسط ، في رأيي ، لحساب كل مضاعفات 3 ، هو إنشاء حلقة تبدأ في 3 والتقدم 3 في 3 حتى القيمة المطلوبة. ونفس الشيء بالنسبة لمضاعفات 5.
بعد ذلك ، سيكون من الضروري إنشاء حلقتين متداخلتين من أجل تحديد التقاطعات. بمعنى ، استعرض قائمة مضاعفات 3 وداخل هذه الحلقة ، استعرض قائمة مضاعفات 5. نقارن بين العنصرين ، إذا كانا متساويين ، فهما مشتركان في كلا القائمتين.
هنا ، يجب أن يكون لديك كل العناصر في متناول اليد للنجاح في هذا التمرين ، الأمر متروك لك 

الحل المقترح


أتصور أنك نجحت في هذا الاختبار ، ليس من دون صعوبة ، ولكن بفضل التجربة والخطأ ، لقد نجحت بلا شك. ألف مبروك.
إذا لم تكن قد حاولت حتى ، أحسنت .
على أي حال ، هذا هو التصحيح الذي أقترحه.
الطريقة الأولى:

static int CalculSommeEntiers(int borneMin, int borneMax)
{
    int resulat = 0;
    for (int i = borneMin; i <= borneMax ; i++)
    {
        resulat += i;
    }
    return resulat;
} 
لم يكن الأمر معقدًا جدًا ، يجب علينا أولاً إنشاء طريقة تُرجع عددًا صحيحًا وتقبل اثنين من الأعداد الصحيحة كمُدخلات.
بعد ذلك ، ندخل في تعليمة  for الحد الأدنى إلى الحد العلوي (مضمن ، لذلك يجب علينا استخدام عامل المقارنة <=) بزيادة العداد 1 في كل تكرار.
نضيف قيمة العداد إلى نتيجة ، والتي نعود إليها في نهاية الحلقة.
الطريقة الثانية:

static double CalculMoyenne(List liste)
{
    double somme = 0;
    foreach (double valeur in liste)
    {
        somme += valeur;
    }
    return somme / liste.Count;
} 
هنا ، المبدأ هو نفسه تقريبًا ، والفرق هو أن الطريقة تُرجع المضاعفة وتقبل قائمة المضاعفات كمُدخلات. هنا نستخدم الحلقة foreach للتكرار من خلال جميع العناصر التي نضيفها إلى النتيجة. أخيرًا ، نرجع هذه النتيجة مقسومة على حجم القائمة.
الطريقة الثالثة:

static int CalculSommeIntersection()
{
    List multiplesDe3 = new List();
    List multiplesDe5 = new List();

    for (int i = 3; i <= 100; i += 3)
    {
        multiplesDe3.Add(i);
    }
    for (int i = 5; i <= 100; i += 5)
    {
        multiplesDe5.Add(i);
    }

    int somme = 0;
    foreach (int m3 in multiplesDe3)
    {
        foreach (int m5 in multiplesDe5)
        {
            if (m3 == m5)
                somme += m3;
        }
    }
    return somme;
} 
ربما الأكثر تعقيدا ... 
نبدأ بإنشاء قائمتينا من مضاعفات. كما نصحتك ، أستخدم حلقة for تبدأ في ثلاثة مع زيادة قدرها 3. وعلى هذا النحو ، أنا متأكد من أن لدي جميع مضاعفات 3 في قائمتي. إنه نفس المبدأ بالنسبة للمضاعفات 5 ، مع العلم أنه في كلتا الحالتين ، يكون شرط الخروج عندما يكون المؤشر أكبر من 100.
بعد ذلك ، لدي حلقتان متداخلتان حيث أقارن القيمتين وإذا كانا متساويين ، فأضف القيمة إلى إجمالي المبلغ الذي أعود إليه في نهاية الوظيفة.
لفهم ما يجري في الحلقات المتداخلة ، يجب أن نفهم أننا سنتصفح القائمة مرة واحدة فقط multiplesDe3 ولكننا سنتصفح القائمة عدة مرات كما multipleDe5 توجد عناصر في القائمة multipleDe3 ، هذا يعني 33 مرة.
ربما ليس من السهل تصميمه من البداية ، ولكن لمساعدتك ، يمكنك محاولة وضع الخوارزمية في رأسك:
  • ندخل الحلقة التي تعبر القائمة multiplesDe3
  • m3 تساوي 3
  • ندخل الحلقة التي تعبر القائمة multiplesDe5
  • m5 تساوي 5
  • قارنا 3 و 5 ، فهما مختلفان
  • نذهب إلى التكرار التالي من القائمة multiplesDe5
  • m5 قيمتها 10
  • قارنا 3 و 10 ، فهما مختلفان
  • إلخ ... حتى ننتهي من تصفح قائمة multiplesDe5
  • نذهب إلى التكرار التالي من القائمة multiplesDe3
  • m3 تساوي 6
  • ندخل الحلقة التي تعبر القائمة multiplesDe5
  • m5 تساوي 5
  • قارنا 6 و 5 ، فهما مختلفان
  • نذهب إلى التكرار التالي من القائمة multiplesDe5
  • الخ ...

اذهب أبعد من ذلك


لاحظت أنه في الطريقة الثانية ، استخدم حلقة foreach لتصفح القائمة:

static double CalculMoyenne(List<double> liste)
{
    double somme = 0;
    foreach (double valeur in liste)
    {
        somme += valeur;
    }
    return somme / liste.Count;
} 
من الممكن أيضًا استعراض القوائم باستخدام علامة for والوصول إلى عناصر القائمة باستخدام فهرس ، كما نفعل مع صفيف.
والتي من شأنها أن تعطي:

static double CalculMoyenne(List<double> liste)
{
    double somme = 0;
    for (int i = 0; i < liste.Count; i++)
    {
        somme += liste[i];
    }
    return somme / liste.Count;
} 
لاحظ أننا نستخدمها liste.Count للحصول على حجم القائمة وأننا نصل إلى العنصر الحالي بالقائمة [i] .
أدرك أن الحلقة foreach أكثر وضوحًا ، لكن قد يكون من المفيد معرفة مسار القائمة مع الحلقة for . لكم واسع النظر.
ستلاحظ أيضًا تقنيتي في الحصول على مضاعفات 3 و 5. أنا أفكر في واحدة على وجه الخصوص والتي تستدعي المفاهيم التي رأيناها من قبل: قسمة الاعداد الصحيحة وقسمة double .
لمعرفة ما إذا كان الرقم هو رقم مضاعف للرقم ، يكفي تقسيمهم بينهم ومعرفة ما إذا كان هناك باقي للقسمة. هناك طريقتان للقيام بذلك. إما عن طريق مقارنة القسمة بأكملها بالقسمة "double" والتحقق من أن النتيجة هي نفسها. إذا كانت النتيجة هي نفسها ، فهذا يعني أنه لا توجد أرقام بعد العلامة العشرية:

for (int i = 1; i <= 100; i++)
{
    if (i / 3 == i / 3.0)
        multiplesDe3.Add(i);
    if (i / 5 == i / 5.0)
        multiplesDe5.Add(i);
} 
تستدعي هذه التقنية المفاهيم التي لم نرها بعد: كيف يمكننا مقارنة عدد صحيح بـ double ؟ سوف نرى ذلك لاحقا. الحل الآخر هو استخدام عامل التشغيل modulo الذي رأيناه سابقًا والذي يفعل ذلك تمامًا:

for (int i = 1; i <= 100; i++)
{
    if (i % 3 == 0)
        multiplesDe3.Add(i);
    if (i % 5 == 0)
        multiplesDe5.Add(i);
} 
ميزة هاتين الطريقتين هي أنه يمكنك إنشاء قائمتين من المضاعفات في حلقة واحدة.
هنا ، انتهى TP . لا تتردد في وضع يديك على هذه الضفائر لأنه من الضروري أن تتقنها. تعامل مع نفسك ، وحاول دفعها إلى الامام ، وحاول حل المشاكل الأخرى ، ... الشيء المهم هو الممارسة.
هذا الجزء الأول يقترب الآن من نهايته.
لقد بدأنا في دراسة C# عن طريق تحديد بالضبط ما كنا سنقوم به في هذا البرنامج التعليمي ، ما هو C# وكيفية إنشاء التطبيقات باستخدامه.
لقد تمكنت من اكتشاف أساسيات البرمجة في C# عبر الفصول المختلفة. يجب أن تبدأ لتكون قادرًا على الاستمتاع ببعض البرامج الصغيرة.
في الفصل التالي ، سنذهب أبعد من ذلك في دراسة أساسيات C# .