JavaRush /مدونة جافا /Random-AR /Harvard CS50: واجبات الأسبوع الأول (المحاضرتان 3 و4)
Masha
مستوى

Harvard CS50: واجبات الأسبوع الأول (المحاضرتان 3 و4)

نشرت في المجموعة
هارفارد CS50: واجبات الأسبوع الأول (المحاضرتان 3 و 4) - 1أيها الأصدقاء، يمكنكم الحصول على المعلومات النظرية الأساسية من ملاحظات الندوة . هناك، بالإضافة إلى أساسيات لغة C، يصف كيفية الاتصال بسحابة خاصة IDE CS50 (يجب القيام بذلك لتنفيذ المهام والتحقق منها)، ويصف أوامر Linux الأساسية وهياكل اللغة الأساسية. إذا لم تجد ما يكفي من المواد حول C في المحاضرة والملاحظات، فانتقل إلى مصادر أخرى. على سبيل المثال، تلك المذكورة في نهاية هذه المقالة. في موضوع " مواد إضافية "
  • أهداف الأسبوع الأول
  • إيد CS50
  • تحديث سطر الأوامر ومنضدة العمل
  • العمل في IDE
  • مرحبًا ج!
  • البق؟
  • فحص التحقق من الصحة: ​​اختبار check50
  • أساسيات لغة C: المقارنة مع برنامج سكراتش
  • أنواع البيانات الأساسية في لغة C
  • المكتبات ج
  • مرحبًا C مرة أخرى: تحليل بناء جملة أبسط البرامج
  • المزيد عن الإدخال/الإخراج في لغة C
المواد في هذا الموضوع:
  • إدخال بيانات تم التحقق من صحتها: وظائف خاصة لمكتبة cs50.h
  • المهمة 1. الحساب الذكي لاستهلاك المياه
  • المهمة 2. ماريو معنا!
  • المهمة 3. حان الوقت للحصول على التغيير
  • كيفية التحقق من صحة التعليمات البرمجية الخاصة بك والحصول على العلامات
  • مورد الكود
  • الأدب الإضافي

إدخال بيانات تم التحقق من صحتها: وظائف خاصة لمكتبة cs50.h

لجعل هذه الدورة أكثر ملاءمة، قمنا بتطوير مكتبة CS50 خاصة، والتي، على وجه الخصوص، لديها وظائف مفيدة للغاية لمعالجة البيانات التي يدخلها المستخدم.
  • GetString()يقرأ السلسلة التي أدخلها المستخدم؛

  • GetInt()يقرأ السلسلة التي أدخلها المستخدم ويتحقق مما إذا كانت تحتوي على عدد صحيح؛

  • GetFloat()يقرأ السلسلة التي أدخلها المستخدم ويتحقق مما إذا كانت تحتوي على رقم فاصلة عائمة؛

  • GetLongLong()يقرأ السلسلة التي أدخلها المستخدم ويتحقق مما إذا كانت تحتوي على رقم حقيقي طويل.

المهمة 1. الحساب الذكي لاستهلاك المياه

هارفارد CS50: واجبات الأسبوع الأول (المحاضرتان 3 و 4) - 2إنه أمر منطقي: كلما طالت مدة الاستحمام، كلما تم إنفاق المزيد من المياه في هذه العملية. دعونا معرفة كم؟ حتى لو كان الدش الخاص بك مفتوحًا بالكاد، فإن ما يقرب من 6 لترات من الماء يتدفق منه في الدقيقة. وهذه عبارة عن 12 زجاجة ماء تحملها معك للشرب. عادة ما يستغرق الشخص حوالي 10 دقائق للاستحمام، وفي المجموع، للاستحمام، تحتاج إلى 120 زجاجة نصف لتر. كثيرا نوعا ما! قم بإنشاء ملف water.cفي ملف ~/workspace/pset1. يجب أن يحسب البرنامج عدد زجاجات المياه المستخدمة للاستحمام حسب الوقت. إنه:
  1. يسأل البرنامج المستخدم عن عدد الدقائق التي قضاها في الحمام
  2. يقوم المستخدم بإدخال عدد صحيح موجب
  3. يقوم البرنامج بعرض عدد الزجاجات التي يستخدمها المستخدم.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
للتبسيط، سنفترض هذه المرة أن المستخدم يقوم دائمًا بإدخال عدد الدقائق بشكل صحيح، أي أننا لا نتحقق مما إذا كان الرقم الذي تم إدخاله موجبًا وعددًا صحيحًا. سنتعلم لاحقًا كيفية كتابة الشيكات، لكن هذا يكفي حاليًا. للتأكد من أن البرنامج يعمل بشكل صحيح باستخدام check50,تحتاج إلى إدخال السطر التالي في المحطة:
check50 2015.fall.pset1.water water.c
وإذا كنت تريد أن ترى كيف يعمل البرنامج waterالذي كتبه طاقم الدورة، قم بتشغيل الأمر التالي:
~cs50/pset1/water

المهمة 2. ماريو معنا!

هارفارد CS50: واجبات الأسبوع الأول (المحاضرتان 3 و 4) - 3هل تعرف أشهر سباك في العالم؟ بمساعدة نينتندو، أصبح الرجل الخيالي ذو الشارب والممتلئ قليلاً الذي يرتدي قبعة حمراء بطلاً لعدة أجيال من اللاعبين. إذا كنت لا تعرف من نتحدث عنه، فإليك رابط للعبة الكلاسيكية لعام 1985 : ثق بي، فهي لا تزال جيدة وتستحق التحقق منها! يمكنك أيضًا العثور على نسخة من لعبة Super Mario الكلاسيكية للهواتف الذكية أو المحاكيات غير المتصلة بالإنترنت. كل هذا نحتاجه من أجل التطوير العام، وهذه للأسف ليست مهمة بعد؛). والمهمة هي هذه. في نهاية مستوى ماريو الأول، رأى كل لاعب نصف الهرم هذا: قم بإنشاء ملف mario.cفي ملف ~/workspace/pset1. سيقوم برنامجنا برسم نصف هرم مشابه لذلك الذي تراه، ولكن مباشرة في وحدة التحكم، بدون رسومات: ستتكون كل كتلة من أيقونة التجزئة (#). حتى لو لم تكتشف كيفية القيام بذلك بعد، صدقني: إنه أمر سهل. ولجعل المشكلة أكثر إثارة للاهتمام، نضيف إليها إمكانية تحديد ارتفاع نصف الهرم باستخدام عدد صحيح غير سالب من 0 إلى 23. ويعتبر ارتفاع الهرم في الصورة في أعلى مكان، أي يساوي 8. إذا قام المستخدم بإدخال الرقم بشكل غير صحيح، عليك أن تطلب منه القيام بذلك مرة أخرى. ثم قم بإنشاء (باستخدام printf الهرم). احرص على محاذاة الزاوية اليسرى السفلية من نصف الهرم مع الحافة اليسرى لنافذة المحطة الطرفية، كما في المثال أدناه. النص الذي تحته خط هو ما يدخله المستخدم بنفسه.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
لاحظ أن العمودين الموجودين في أقصى اليمين لهما نفس الارتفاع. لا يستحق توليد الأنابيب والسحب وماريو نفسه بعد =). على الأقل لهذه المهمة. إذا قام المستخدم بإدخال بيانات غير صحيحة (لم يدخل رقم، أو أدخل رقم أقل من واحد أو أكبر من 23)، يجب أن يطلب منه البرنامج إدخال البيانات مرة أخرى، كما في المثال أدناه، حيث يكون النص الذي تحته خط هو ما دخل المستخدم من لوحة المفاتيح. لقراءة السلسلة المدخلة، استخدم GetInt. يمكن أن يساعد في التحقق من الإدخال غير الصحيح، ولكن ليس في جميع الحالات.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
لتجميع البرنامج، أدخل السطر في المحطة:
make mario
أو نسخة أكثر شفافية ولكن أطول:
clang -o mario mario.c -lcs50
بعد ذلك قم بتشغيل البرنامج للتنفيذ:
./mario
إذا كنت تريد التأكد من أن البرنامج يعمل بشكل صحيح، قم بتشغيل check50:
check50 2015.fall.pset1.mario mario.c
وإذا كنت تريد اللعب بنسخة ماريو الخاصة بمساعدي الدورة، فاكتب السطر التالي:
~cs50/pset1/mario

المهمة 3. حان الوقت للحصول على التغيير

هارفارد CS50: واجبات الأسبوع الأول (المحاضرتان 3 و 4) - 4في خطوط العرض لدينا، لم نر هذا، ولكن في الولايات المتحدة، يبدو أن هناك مثل هذه اللعبة، كما هو موضح في الصورة: تم تصميم الأسطوانات للعملات المعدنية بأقطار مختلفة (والفئات)، ويتم تحريرها بواسطة آلية زنبركية ، ويمكن ربط الوحدة نفسها بحزام أمين الصندوق الطفل. ومع ذلك، ماذا يحدث إذا دفع شخص ما لأمين الصندوق فاتورة كبيرة؟ تخيل مدى صعوبة حساب العملات المعدنية من أجل التغيير. لتقليل عدد العملات الصادرة، يمكنك استخدام ما يسمى بالخوارزميات "الجشعة". إنهم، وفقًا لتعريف المعهد الوطني للمعايير والتكنولوجيا (NIST)، يجدون دائمًا الحل الأمثل في كل خطوة في حل المشكلة، على افتراض أن الحل النهائي (الذي تم الحصول عليه من مجمل هذه الخطوات) سيكون هو الأمثل أيضًا. ماذا يعني ذلك؟ لنتخيل أن أمين الصندوق مدين للعميل بمبلغ 41 سنتًا من التغيير، ولديه أسطوانات من العملات المعدنية على حزامه للتغيير من فئات 25 و10 و5 و1 سنت. سوف يرغب أمين الصندوق الذي يسترشد بخوارزمية "جشعة" على الفور في إعطاء الحد الأقصى في الخطوة الأولى. في هذه المرحلة، الحل الأمثل أو الأفضل هو توزيع 25 بنسًا. 41-25 = 16.16 بنسًا متبقية للدفع. من الواضح أن 25 بنسًا أكثر من اللازم، بحيث يتبقى 10. 16-10 = 6. الآن نوزع 5 بنسات وفقًا لنفس المبدأ، ثم 1. وبالتالي، سيحصل المشتري على أربع عملات معدنية فقط من فئة 25، 10 و 5 و 1 بنسات. اتضح أن التعليمات "الجشعة" خطوة بخطوة لإصدار الأموال هي الأمثل ليس فقط في هذه الحالة، ولكن أيضًا لفئات العملة الأمريكية (والاتحاد الأوروبي أيضًا). أي أنه إذا كان لدى أمين الصندوق ما يكفي من العملات المعدنية من أي فئة، فإن الخوارزمية ستعمل بشكل أفضل، أي أنها ستصدر الحد الأدنى لعدد العملات المعدنية من جميع الحالات الممكنة. إذًا، ما هو الحد الأدنى لعدد العملات المعدنية التي نحتاجها لإجراء التغيير؟ هذه هي مهمتنا الثالثة. قم بإنشاء ملف greedy.cفي الدليل الخاص بك ~/workspace/pset1. المعطى: عملات معدنية من فئة 25، 10، 5، 1 سنت. يجب على البرنامج:
  1. اسأل المستخدم عن مقدار التغيير الذي يجب تقديمه
  2. احسب الحد الأدنى لعدد العملات التي يمكنك القيام بذلك بها
ملحوظة:سوف نستخدم دالة GetFloatمن مكتبة CS50 للإدخال ومن printfمكتبة الإدخال/الإخراج القياسية للإخراج. وبالإضافة إلى ذلك، يجب على البرنامج التحقق من صحة الإدخال. لقد طلبنا منك استخدام GetFloat، للسماح للمستخدم بإدخال قيمة بالدولار والسنت مفصولة بنقطة. على سبيل المثال، إذا كنا مدينين بمبلغ 9.75 دولارًا أمريكيًا، فيجب على المستخدم إدخال 9.75 دولارًا أمريكيًا، ولكن ليس 9.75 دولارًا أمريكيًا أو 975 دولارًا أمريكيًا. ويجب عليك التأكد من قيام المستخدم بإدخال رقم منطقي. GetFloatلنفترض أنها غير سلبية، فالوظيفة نفسها لن تساعد في هذا . إذا قام المستخدم بإدخال غير صحيح، عليك أن تطلب منه تكرار ذلك وتشغيل البرنامج فقط مع البيانات الصحيحة. احذر من عدم الدقة المتأصلة في أرقام الفاصلة العائمة. على سبيل المثال، لا يمكن تمثيل 0.01 مباشرة كـ float. حاول استخدام الإخراج المنسق، على سبيل المثال مع 50 منزلة عشرية، باستخدام الكود أدناه:
float f = 0.01;
printf("%.50f\n", f);
بالمناسبة، قبل حساب أي شيء، سيكون من المنطقي تحويل المبلغ بالكامل إلى سنتات (وفي نفس الوقت تحويله من floatإلى int)، مما سيساعد على تجنب الكثير من الأخطاء والصعوبات. للتأكد من أن محلل الشفرات التلقائي الخاص بنا يمكنه فحص مشكلتك بشكل صحيح، تأكد من أن السطر الأخير من مخرجات برنامجك لا يحتوي على أي معلومات أخرى بخلاف الحد الأدنى لعدد العملات المعدنية: عدد صحيح يتبعه \n (أولئك الذين يتعلمون JavaRush يدركون جيدًا ما نتحدث عنه هنا =)). فيما يلي مثال لما يجب أن تبدو عليه نتيجة برنامجك.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
نظرًا لطبيعة أرقام الفاصلة العائمة، يمكنك تجاهل الصفر وإدخال هذا الرقم في النموذج .41. بالطبع، يجب على المستخدمين الذين يريدون التحقق من البرنامج لإمكانية إدخال بيانات غير صحيحة بالكامل أن يروا شيئًا مثل:
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
-0.41
How much change is owed?
-0.41
How much change is owed?
foo
Retry: 0.41
4
بناءً على هذه المتطلبات والمثال الذي رأيته أعلاه، من المرجح أن تحتوي شفرتك على نوع من الحلقات. إذا أدركت، أثناء اختبار التطبيق، أن الحلقة لا تتوقف، فيمكنك مقاطعة تنفيذ البرنامج باستخدام تركيبة ctrl-c (أحيانًا عدة مرات). أنت تعرف بالفعل كيفية تجميع البرنامج وتشغيله. إذا كنت تريد التحقق مما إذا كان برنامجك يعمل بشكل صحيح، باستخدام الأداة المساعدة check50، أدخل السطر التالي في الوحدة الطرفية:
check50 2015.fall.pset1.greedy greedy.c
وإذا كنت تريد اللعب بهذا البرنامج الذي أعده مساعدو الدورة، فاكتب الأمر التالي:
~cs50/pset1/greedy

كيفية التحقق من صحة التعليمات البرمجية الخاصة بك والحصول على العلامات

  1. الخيار 1

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

    check50 2015.fall.pset1.name name.c

    دخلت في السطر النهائي من CS50 IDE؟ أين nameهو اسم ملف المهمة الخاص بك.

  2. الخيار 2

    إذا كنت ترغب في الحصول على درجات (مثل تشغيل check50 بشكل أساسي، ولكن مع تذكر النتيجة وملء بعض النماذج باللغة الإنجليزية، فاتبع الخطوات التالية:

    • الخطوة 1 من 2

      1. عندما تكون التطبيقات جاهزة، قم بتسجيل الدخول إلى CS50 IDE.
      2. في الزاوية العلوية اليسرى من CS50 IDE، داخل متصفح الملفات الخاص به، وليس النافذة الطرفية، انقر بزر الماوس الأيسر أو انقر بزر الماوس الأيمن على ملف hello.c (الملف الموجود في دليل pset1) وانقر فوق تنزيل. يجب أن تجد أن المتصفح قد قام بتحميل hello.c.
      3. كرر للمياه. ج.
      4. كرر لـ mario.c.
      5. كرر ل greedy.c.
      6. في علامة تبويب أو نافذة منفصلة، ​​قم بتسجيل الدخول إلى CS50 إرسال .
      7. انقر فوق إرسال في الزاوية اليسرى السفلية من النافذة.
      8. ضمن مجموعة المشكلات 1 في النافذة التي تظهر، انقر فوق تحميل إرسال جديد.
      9. في النافذة التي تظهر، انقر فوق إضافة ملفات…. يجب أن تظهر نافذة تسمى "فتح الملفات".
      10. انتقل إلى الموقع حيث تم تنزيل hello.c. يوجد عادةً في مجلد التنزيلات أو في المجلد المخصص لك افتراضيًا للتنزيلات. بمجرد العثور على hello.c، انقر عليه مرة واحدة لوضع علامة عليه، ثم انقر فوق فتح.
      11. انقر فوق إضافة ملفات... مرة أخرى وستظهر نافذة فتح الملفات مرة أخرى.
      12. الآن ابحث عن الملف water.c بنفس الطريقة. انقر عليها، ثم انقر فوق فتح (أو "فتح").
      13. الآن ابحث عن mario.c. وقم أيضًا بالنقر والفتح بنفس الطريقة.
      14. كل شيء هو نفسه مع ملف greedy.c.
      15. انقر فوق "بدء التحميل" لبدء تحميل ملفاتك إلى خوادم CS50.
      16. على الشاشة التي تظهر، سترى نافذة بعنوان لم يتم تحديد ملف. إذا قمت بتحريك مؤشر الماوس إلى الجانب الأيسر من الشاشة، فسترى قائمة بالملفات التي قمت بتنزيلها. انقر على كل منها لتأكيد محتويات كل منها. (لا حاجة للنقر على الأزرار أو الرموز الأخرى). إذا كنت متأكدًا من أنك جاهز لإرسال الملف للتحقق، فاعتبر أنك انتهيت! إذا كنت تريد التحقق من الكود الخاص بك مرة أخرى بنفسك أو إصلاح أي شيء، فارجع إلى إرسال CS50 وكرر هذه الخطوات. يمكنك إعادة الإرسال عدة مرات كما تريد؛ سيتم تقييم التقديم الأحدث فقط.
  3. الخطوة 2 من 2 (ليست مطلوبة للتقييم، إذا كان ذلك =))

    انتقل الآن إلى الرابط https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x حيث ستجد النماذج الخاصة. تحتاج فيها إلى الإجابة على العديد من الأسئلة النظرية، ثم انقر فوق إرسال تحتها.

الأسئلة ذات العلامات النجمية مطلوبة:
  • حسنًا، كان يجب أن أرى هذا قادمًا! في بضع جمل فقط، ما هي المكتبة؟ * (وصف بإيجاز ما هي المكتبة)
  • في بضع جمل فقط، ما هو الدور الذي #include <cs50.h> تلعبه عندما تكتبه فوق بعض البرامج؟ *(ما هو دور السطر #include <cs50.h> الذي يظهر أعلى بعض البرامج؟)
  • ما هو عدد الساعات التي تعتقد أنك قضيتها في حل مجموعة المشكلات 0: الصفر؟
  • ما هو عدد الساعات التي تعتقد أنك قضيتها في حل مجموعة المسائل 1: ج؟
  • ما هو رأيك في CS50x حتى الآن؟ *(رأيك في الـ CS50 حالياً، اختر خيار الإعجاب أو عدم الإعجاب)
  • هل طلبت المساعدة من زملاء الدراسة أو الموظفين عبر مجموعة CS50s Facebook على http://www.facebook.com/groups/cs50؟ *(هل طلبت المساعدة من طلاب أو مساعدين آخرين في مجموعة الفيسبوك)
  • هل طلبت المساعدة من زملاء الدراسة أو الموظفين عبر CS50s Subreddit على http://www.reddit.com/r/cs50 *(هل طلبت المساعدة من طلاب أو مساعدين آخرين عبر Subreddit)
  • هل طلبت المساعدة من زملاء الدراسة أو الموظفين عبر Twitter باستخدام @cs50 أو #cs50؟ *(هل طلبت المساعدة من طلاب أو مساعدين آخرين على Twitter باستخدام @cs50 أو #cs50).
أيها الأصدقاء، إذا كانت لديكم أي أسئلة، فاكتبوها في التعليقات أسفل هذا الدليل. إذا لم تصل إلى المستوى 5 من JavaRush لتلقي دعوة للحصول على معلومات، فنوصيك بالقيام بذلك. إنه مجاني ومثير للاهتمام وليس صعبًا للغاية.

مصدر الكود:

  1. المحاضرة الثالثة

    http://cdn.cs50.net/2015/fall/lectures/1/w/src1w.zip

  2. المحاضرة الرابعة

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f.zip

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f/

الأدب الإضافي

http://cpp.com.ru/kr_cbook - النسخة الروسية من الكتاب الكلاسيكي عن لغة C من مؤلفي اللغة - بريان كيرنيغان ودينيس ريتشي. معروف على نطاق واسع في الدوائر الضيقة باسم K&R. لكن الترجمة ليست من أحدث الطبعة. قراءة الفصول الثلاثة الأولى. سيكون هناك مواد أكثر بقليل مما تحتاج إليه، ولكنها كافية لحل المشكلات. https://computer.howstuffworks.com/c.htm هو مورد موصى به من قبل مؤلفي CS50. باللغة الإنجليزية. صفحة 1-7 و9 و10.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION