JavaRush /בלוג Java /Random-HE /הרווארד CS50: מטלות שבוע 1 (הרצאות 3 ו-4)
Masha
רָמָה

הרווארד CS50: מטלות שבוע 1 (הרצאות 3 ו-4)

פורסם בקבוצה
הרווארד CS50: מטלות שבוע 1 (הרצאות 3 ו-4) - 1חברים, אתם יכולים ללקט מידע תיאורטי בסיסי מהערות הסמינר . שם, בנוסף ליסודות של C, הוא מתאר כיצד להתחבר לענן מיוחד IDE CS50 (יש לעשות זאת כדי לבצע ולבדוק משימות), ומתאר את הפקודות הבסיסיות ומבני השפה ההכרחיות של לינוקס. אם לא מצאתם מספיק חומר על ג' בהרצאה ובהערות, פנו למקורות אחרים. לדוגמה, אלה המפורטים בסוף מאמר זה. בנושא " חומרים נוספים "
  • יעדי שבוע ראשון
  • IDE CS50
  • עדכון שורת הפקודה ושולחן העבודה
  • עבודה ב-IDE
  • שלום, C!
  • באגים?
  • בדיקת אימות: מבחן check50
  • יסודות C: השוואה עם Scratch
  • סוגי נתונים בסיסיים ב-C
  • ספריות ג
  • שלום C שוב: ניתוח התחביר של התוכניות הפשוטות ביותר
  • קצת יותר על I/O ב-C
חומרים בנושא זה:
  • הזנת נתונים מאומתת: פונקציות מיוחדות של ספריית cs50.h
  • משימה 1. חישוב חכם של צריכת המים
  • משימה 2. מריו איתנו!
  • משימה 3. הגיע הזמן לקבל שינוי
  • כיצד לאמת את הקוד ולקבל ציונים
  • משאב קוד
  • ספרות נוספת

הזנת נתונים מאומתת: פונקציות מיוחדות של ספריית cs50.h

כדי להפוך את הקורס הזה לנוח יותר, פיתחנו ספריית CS50 מיוחדת, שיש לה, במיוחד, פונקציות שימושיות מאוד לעיבוד נתונים שהוזנו על ידי המשתמש.
  • GetString()קורא את המחרוזת שהזין המשתמש;

  • GetInt()קורא את המחרוזת שהזין המשתמש ובודק האם היא מכילה מספר שלם;

  • GetFloat()קורא את המחרוזת שהזין המשתמש ובודק האם היא מכילה מספר נקודה צפה;

  • GetLongLong()קורא את המחרוזת שהזין המשתמש ובודק האם היא מכילה מספר אמיתי ארוך.

משימה 1. חישוב חכם של צריכת המים

הרווארד CS50: מטלות שבוע 1 (הרצאות 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: מטלות שבוע 1 (הרצאות 3 ו-4) - 3מכירים את האינסטלטור הכי מפורסם בעולם? בעזרת נינטנדו, הבחור הבדיוני המשופם והמעט שמנמן בכיפה אדומה הפך לגיבור של כמה דורות של גיימרים. אם אתם לא יודעים על מי אנחנו מדברים, הנה קישור למשחק הקלאסי משנת 1985 : תאמינו לי, הוא עדיין טוב ושווה לבדוק! אתה יכול גם למצוא גרסה של Super Mario הקלאסי לסמארטפונים או אמולטורים לא מקוונים. אנחנו צריכים את כל זה להתפתחות כללית, זו, למרבה הצער, עדיין לא משימה ;). והמשימה היא זו. בסוף רמת מריו הראשונה, כל שחקן ראה את חצי הפירמידה הזו: צור קובץ mario.cב- ~/workspace/pset1. התוכנית שלנו תצייר חצי פירמידה דומה לזו שאתה רואה, אבל ישירות בקונסולה, ללא גרפיקה: כל אחד מהבלוקים יהיה מורכב מאייקון hash (#). גם אם עדיין לא הבנת איך לעשות את זה, תאמין לי: זה קל. כדי להפוך את הבעיה למעניינת יותר, נוסיף לה את היכולת לקבוע את גובה חצי הפירמידה באמצעות מספר שלם לא שלילי מ-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: מטלות שבוע 1 (הרצאות 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 עבור קלט ומספריית printfI/O הסטנדרטית עבור פלט. בנוסף, על התוכנית לבדוק את נכונות הקלט. ביקשנו מכם להשתמש ב- 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. חזור על חמד. ג.
      6. בכרטיסייה או חלון נפרדים, היכנס ל- CS50 Submit .
      7. לחץ על שלח בפינה השמאלית התחתונה של החלון.
      8. תחת ערכת בעיות 1 בחלון שמופיע, לחץ על העלה הגשה חדשה.
      9. בחלון שמופיע, לחץ על הוסף קבצים... אמור להופיע חלון בשם פתח קבצים.
      10. נווט אל המיקום שבו הורדת hello.c. הוא ממוקם בדרך כלל בתיקיית ההורדות או בתיקייה שהוקצתה לך כברירת מחדל להורדות. לאחר שתמצא את hello.c, לחץ עליו פעם אחת כדי לסמן אותו, ולאחר מכן לחץ על פתח.
      11. לחץ על הוסף קבצים... שוב וחלון פתח קבצים יופיע שוב.
      12. כעת מצא את הקובץ water.c באותו אופן. לחץ עליו ולאחר מכן לחץ על פתח (או "פתח").
      13. עכשיו מצא את mario.c. וגם לחץ ופתח באותו אופן.
      14. הכל אותו דבר עם הקובץ greedy.c.
      15. לחץ על התחל העלאה כדי להתחיל בהעלאת הקבצים שלך לשרתי CS50.
      16. במסך שיופיע תראה חלון שכותרתו לא נבחר קובץ. אם תזיז את סמן העכבר לצד שמאל של המסך, תראה רשימה של קבצים שהורדת. לחץ על כל אחד כדי לאשר את התוכן של כל אחד. (אין צורך ללחוץ על כפתורים או אייקונים אחרים). אם אתה בטוח שאתה מוכן לשלוח את הקובץ לאימות, ראה שסיימת! אם אתה רוצה לבדוק שוב את הקוד שלך בעצמך או לתקן משהו, חזור אל CS50 Submit וחזור על שלבים אלה. אתה יכול לשלוח שוב כמה פעמים שאתה רוצה; רק ההגשה האחרונה תיבדק.
  3. שלב 2 מתוך 2 (זה לא נדרש להערכה, אם זה =))

    כעת עבור לקישור https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x שם תמצא טפסים מיוחדים. בהן אתה צריך לענות על מספר שאלות תיאורטיות, ולאחר מכן ללחוץ על שלח מתחתיהן.

יש צורך בשאלות עם כוכביות:
  • בסדר, הייתי צריך לראות את זה מגיע! בכמה משפטים בלבד, מהי ספריה? * (תאר בקצרה מהי ספרייה)
  • בכמה משפטים בלבד, איזה תפקיד ממלא #include <cs50.h> כשאתה כותב את זה על גבי תוכנית כלשהי? *(מה תפקידה של שורת #include <cs50.h> המופיעה בחלק העליון של תוכניות מסוימות?)
  • בערך כמה שעות היית אומר שהשקעת ב-Problem Set 0: Scratch?
  • בערך כמה שעות היית אומר שהשקעת בבעיה 1: ג?
  • מה דעתך על CS50x עד כה? *(דעתך לגבי ה-CS50 כרגע, בחר באפשרות 'אהבתי' או 'לא אהבתי')
  • האם ביקשת עזרה מחברים לכיתה או מהצוות דרך קבוצת הפייסבוק של CS50s בכתובת http://www.facebook.com/groups/cs50? *(האם ביקשת עזרה מתלמידים או עוזרים אחרים בקבוצת הפייסבוק)
  • האם ביקשת עזרה מחברים לכיתה או מהצוות דרך CS50s Subreddit בכתובת http://www.reddit.com/r/cs50 *(האם ביקשת עזרה מתלמידים או עוזרים אחרים דרך Subreddit)
  • האם ביקשת עזרה מחברים לכיתה או מהצוות באמצעות Twitter באמצעות @cs50 או #cs50? *(האם ביקשת עזרה מתלמידים אחרים או TAs בטוויטר באמצעות @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