דובר 1: בואו נדבר על מים. בבעיה זו, אנו מבקשים מהמשתמש לספר לנו כמה זמן בדקות המקלחת שלהם הייתה ואז אנו מחשבים המקבילה מספר בקבוקי מים כי המקלחת שלהם בשימוש. אז מה הם המטלות של שלנו לבעיה זו? ראשית, אנחנו הולכים רוצים כדי להנחות ולאחר מכן אמת הקלט שהמשתמש נותן לנו. ברגע שאנו להבטיח שאנחנו יש קלט משתמש חוקי, אנחנו הולכים על מנת לחשב את מספר שווה של בקבוקי מים שהמשתמש היה במהלך המקלחת שלהם, ולאחר מכן אנחנו הולך לספר להם על ידי הדפסת המספר הזה. אז בואו להתמודד הראשון שלנו משימה, מה שגרם ואימות קלט המשתמש. בשביל זה אנחנו כבר כתבנו פונקציה בשבילך בשם get_int הממוקם בספריית CS50. get_int מבטיח כי תשומות המשתמשים מספר שלם, ולכן כל מספרים חיוביים, מספרים שליליים, או אפס כולם קיבלו. אבל אם המשתמש תשומות דבר אחר, כך כל שילוב של אותיות או מספרים או מספרים עשרוניים, אזי המשתמש יתבקש לנסות שוב והפונקציה לא תקבל כלום עד שהמשתמש נותן להם מספר שלם. אז איך אנו משתמשים get_int? אם אתה פותח את סביבת העבודה שלך ואת ליצור קובץ בשם integer.c בואו הקלד את השורה הבאה. סולמית כוללת cs50.h. דבר זה הכרחי מכיוון get_int היא פונקצית ספריית cs50, ולכן עלינו ב- Hashtag כולל הצהרתה כדי כדי להשתמש בפונקציה. ואז הראשי שלי לתפקד אני רק הולך להתקשר get_int פונקציה פשוט. אז בואו להפעיל את זה ולראות איך זה עובד. אני כבר מלוקט זה, אז בוא פשוט להמשיך להפעיל את התוכנית, ./מספר שלם. כאן יש לי בקשה וכאן אני מקיש את הערך. תגיד שמתי רק שלם מסוימים, 50, excepts ו פורש תוכנית וזהו. אבל לומר אני מפעיל את זה שוב אני קלטתי משהו אחר. אולי, hello world. זהו אינו מספר שלם כך התוכנית תנחה אותי לנסות שוב. בואו ננסה שוב עם אולי עשרוני הפעם. 0.5, שוב, לא שלם כך התכנית לא וקבלה וזה יגיד לי לנסות שוב. אז בואו לתת אותו למספר אחר. התוכנית מקבלת את זה, ייסגר ולאחר שנסיים. אז עכשיו יש לנו פונקציה המאפשר לנו ומבטיחים כי המשתמש תשומות שלם, אבל איך אנחנו יכולים למעשה לעקוב אחר שלם שהוזן על ידי המשתמש? ובכן, כל שנעשינו הוא חנות ערך זה משתנה, אומר n. אז אם אני להכריז על n מספר שלם, ואני להגדיר שערך get_int, אז n אז תשמור מה מעריכי המשתמש שהוזן. בסדר, אז עכשיו אנחנו שווידאת המשתמש ייתן לנו מספר שלם ואנחנו יודעים איך לעקוב אחר של המספר השלם, אך יש לזכור, מספרים שלמים הם חיוביים ושליליים כאחד. אז זה לא ממש הגיוני בהקשר של בעיה זו שהמשתמש מתקלח של אומרים 12 דקות שליליות. אז אנחנו צריכים לוודא שהמשתמש למעשה נותן לנו מספר חיובי. עכשיו אין לנו רק פונקציה אחת בשביל זה, אז אנחנו הולכים לעשות כדי ליצור את עצמנו. אז אנחנו רוצים הרף מהמשתמש עד שהם נותנים לנו מספר חיובי. אם אני עושה משהו ברציפות אז זה דומה לולאה, חזרה. אז אחד המבנים שאנו משתמשים ב ג ליישם החזרה ולולאות הוא לולאה בזמן. אז לולאת while, כפי המוצג כאן, יריץ מה נמצא בתוך הגוף של הלולאה כמו עוד מעריכה מצב נתון כאמת. ברגע שהתנאים מעריכת כ- false, התכנית תמשיך מה מגיע לאחר הגוף של הלולאה. אז בעוד לולאות הולכות להיות באמת שימושי CS50. אבל בפרט זה במקרה, אנחנו יודעים שאנחנו הולך להציג למשתמש לפחות פעם אחת ולאחר מכן לולאה רק במידת הצורך. אז הנה אנחנו מגיעים מבנה מיוחד זה דומה מאוד בזמן לולאה נקראת לולאה עשה מה. אז לולאה עשה תוך מבצעת את הגוף של הלולאה לפחות פעם ואז זה בודק אם זה צריך לבצע, בניגוד לולאת while, אשר יבדוק את המצב ולאחר מכן להפעיל את הגוף. אז בלולאה עשה תוך מה שאפשר לעשות זה מהמשתמש מספר שלם, ואז לבדוק אם זה חוקי או לא. אם זה חוקי, אנחנו נעלה לחזור על התהליך לשאול את המשתמש לתת לנו עוד מספר שלם, ולאחר מכן רק כאשר מספר שלם כי הוא תקף, נמשיך מה שבא אחר כך. עכשיו תוכל להבחין כי הכרזה על n השלם שונה במקצת למה שאנחנו עשה לפני בדוגמה הקודמת וזה בגלל היקף. אם הייתי הכרזתי n השלם בתוך של הגוף של הלולאה עשה בזמן, אז אנחנו לא יוכל לגשת הערך של n מחוץ אלה מתולתל כתפיות המציין את הגוף של הלולאה. אבל אנחנו למעשה רוצים לגשת ערך של n בהמשך התוכנית שלנו. אוקיי, אז עכשיו בואו נדבר על מה מצב זה צריך להיות. אנחנו רוצים רק reprompt משתמש כל עוד n אינה חוקית. אז תחשוב לעצמך מה לנכה ערך שלם ייראה ולאחר מכן ליצור בוליאני ביטוי לבטא. אנחנו כמעט סיימנו עם פעילות המשנה שלנו לכון ואימות קלט משתמש. אז בואו נעשה את זה קצת קצת יותר ידידותי למשתמש ולתת למשתמש קצת מידע קצת יותר של מה שאנחנו שגרמנו אותם. אז בואו להציג למשתמש, בהתאם מפרט, עם דקות המחרוזת. זאת באמצעות דוחות printf שלך, להפיק בטוח שאתה להתאים בדיוק זה. בסדר. אז עכשיו יש לנו משתמש חוקי קלט, מספר חיובי ערך עבור כמה דקות ארוכות הם בילו במקלחת. אז מה הלאה הוא לחשב מספר שווה של בקבוקים. מה אנחנו הולכים לעשות כאן אולי להיות מאוד ברור לך בהתחלה, וזה בסדר. מה שאנחנו רוצים לעשות הוא אנחנו רוצה להתחיל לתרגל הרעיון של גילוי דפוסים פיתוח פורמולות לבעיה. אז אנחנו אומרים לפי המפרט שדקה במקלחת שווה ערך לכ 12 בקבוקים של מים. אז שתי דקות היו להיות שווה ערך ל 24, וחמש דקות היו להיות שווה ערך ל 60. אז עכשיו אם אתה חושב יש לך את זה, אז בואו לראות אם אתה יכול לבוא עם דפוס או נוסחה להביע אם יש לנו לומר, n דקות, כמה בקבוקי מים שתתבטא שמבחינת n? שוב, גם אם זה יכול להיות פשוט בהתחלה, בהמשך כשנגיע יותר בעיות מסובכות אנחנו הולכים רוצים להיכנס הפרקטיקה של זיהוי התבניות והנוסחאות פיתוח כדי להבין את הדברים האלה. ב- C יש לך גישה פעולות אריתמטיות סטנדרטיות, חיבור, חיסור, כפל וחילוק. אז אני אשאיר אותו אתה עכשיו להבין איך מבטאים את מספר שווה של בקבוקים שהמשתמש נצרך במהלך המקלחת שלהם. בסדר, אנחנו כמעט סיימנו. שמנו מתבקש המשתמש עבור הקלט שלהם, וידאנו שזה קלט חוקי, ואז הבנו איך כדי לחשב את המקבילה מספר הבקבוקים שהם צרכו. אז הדבר האחרון לעשות הוא פלט מספר שווה של בקבוקים ואנו מקווים לעודד אותם כדי לחסוך קצת מים. פלט הערך יהיה להיות הצהרת printf. אם רציתי להגיד לך שאני יש שלוש חיות מחמד, למשל, אני יכול להשתמש הצהרת printf זה נראה משהו כזה. יש לי שלוש חיות מחמד, חדש בתור עיצוב נחמד. עכשיו אנחנו לא רוצים דברי קוד קשה פשוט. אומר את המספר שלי חיות מחמד משתנה במשך הזמן. אז אני הולך לעשות שימוש מצייני מיקום משפט printf שלי. אז הנה המספר שלי הוא מספר שלם. אז אני הולך לעשות מציין מיקום עבור מספר שלם באמצעות i%. אני הולך לכתוב את המחרוזת, ואז לאחר המחרוזת אני כותב פסיק ואז משתנה כי אני רוצה להדפיס. אז הערך שיודפס במקום שאני מציין מיקום,%. אתה יכול להשתמש מצייני מיקום, כמו גם עבור צף עם f%. ניתן גם יש מספר רב של מצייני מיקום במחרוזת. למשל, אם יש לי מספר כמה כלבים וכמה מספר החתולים, הכנסתי שתי placeholders כאן ולאחר מכן שני המשתנים שלי כדי בהתאמה. אז עכשיו אנחנו יודעים כיצד להדפיס את הערכים המאוחסנים משתנים, הדבר האחרון מאוד לעשות הוא להבטיח כי אנו להדפיס את הערך בפורמט המדויק מצוין במפרט. עם זאת, אנו פועלים מתבקשים משתמשים ומאומתים הקלט שלהם. אז שמנו מחושב המקבילה מספר בקבוקי מים כי הם צורכים במהלך המקלחת שלהם, ואנחנו כבר outputted ערך להם. וכך, שנשלים מים. שמי [? Zamila,?] וזה CS50.