[השמעת מוסיקה] אליסון BUCHHOLTZ-AU: היי לכולם. ברוכים הבאים לך הראשון סעיף CS50 רשמי. כפי שאתה, יכול לראות את זה הוא CS50-כמו סעיף, רק כדי למשוך את סדר היום שלנו להיום. אז, מי אני, כפי שאני בטוח שכולכם תוהה. אני TF שלך. אני לא רק תלמיד אקראי מי מתחזה TF שלך. ואני הולך לעבור סוג של יש קטעים יזרמו, ציפיות שיש לנו, משאבים, כך הלאה וכך הלאה. אנחנו הולכים לדבר על מערכים, ASCII פונקציות, פקודות בשורת הפקודה, וזה לא כאן, אבל אני גם יהיה לעזור אתה סוג של חושב דרך pset הבא שלך לשבוע הזה. שבו אני בטוח שכולכם יעריך. אז, question-- הראשון שאני, מלבד TF שלך השופע כאן. אני אליסון Buchholtz-Au. זו השנה השנייה שלי TFing CS50. אני גם CS51 TF באביב. ייתכן שתראה שוב יש אם אתה מחליט לקחת את זה. אני גם PAF, ולכן כל Freshmen-- ואם אתה לא בכיתה ט ', זו השנה השלישית שלי כבחור ייעוץ. אני בקיא מאוד ב מייעץ לך על חיים ועל קורסים בתוך CS ולא בתוך CS. אני מדעי מחשב מרוכז. אני בכיר באדמס הבית, הבית הטוב ביותר. ולפני שעברתי ל CS שלי הכיתה י האביב, למעשה הייתי מהנדס ביו-רפואי. אני הולך ללכת לבית הספר Med. אני הולך להיות מנתח טראומה. ושיש לו לחלוטין השתנה מאז שלקחתי CS50. לקחתי את הקורס סתיו כיתת י 'שלי. הייתה זו הפעם הראשונה שלי לCS אי פעם. אני היה אחד מ78% מכם ש היה אפס ניסיון מגיע, וזה שינה לחלוטין את חיי. ועכשיו אני עובד ב מיקרוסופט, וTF היפה שלך. וCS50 הוא כנראה אחד מהחוויות הטובות ביותר שהיה לי כאן ב Harvard-- שני לוקחים את הכיתה ולהיות מסוגל לעזור ללמד את התלמידים כמוך. אז אני ממש מתרגש שכולכם כאן. במקרה שאתה בא ב מאוחר, יש ממתקים, שבו אתה צריך להרגיש חופשי לבוא לתפוס, או לשלוח מישהו אחר כדי לתפוס אותו בשבילך. זה בסדר. אני לא רוצה לאכול את זה. החדר שלי מספיק שוקולד, כל כך כולכם צריך לנסות ולסיים את זה. אני יודע שיש 100 חתיכות, אבל כמו, 04:00 ביום שני, אני חושב שכולם יכול להשתמש בחלק הסוכר. אז כל מי שאתה באופן רשמי בסעיף שלי צריך קיבל בדוא"ל ממני עם מספר הטלפון שלי, הדוא"ל address-- מוזמן להוסיף אותי ב Gchat כלשהו, ​​אל תהסס להוסיף אותי בפייסבוק, וגם לכולכם, אתה יכול לשלוח לי כאן. ישנם שני H של. כולם תמיד עושה כמו שני L's או שתיים של C. שני H של בשם המשפחה. אחרת זה הולך להקפיץ, ו אני לא הולך לקבל את הדואר האלקטרוני שלך. אז תרגיש חופשי לשלוח לי, ליצור איתי קשר בכל עת. אני לא יכול לחזור ל שלך תוך 24 דקות, אבל אני מבטיח לחזור אליך תוך 24 שעות. אם אתה קורא לי חצי שעה לפני pset שלך נובע, אתה להיות כמו, אין לי מושג מה אני עושה אליסון. עזור לי. אני הולך להרגיע אותך, אבל בסופו של היום, אם אתה קורא לי חצי שעה לפני pset שלך נובע עם שום דבר שנכתב, אני הולך להיות כמו, כן, אולי זה זמן להשתמש באותו יום מאוחר. אז אני אענה לכולכם בקשות במאוד מועד. הטלפון שלי הוא בדרך כלל אוחז ביד שלי. אני בדרך כלל מגיב הרבה מהר יותר מאשר 24 שעות, אבל אני יכול רק להבטיח תגובת 24 שעות ביממה. בְּסֵדֶר. אז למה אנחנו כאן? כמו כן, אם יש לך שאלות ב כל עת, בבקשה ליידע אותי. אני מדבר הרבה. אני מדבר מהר, אבל בבקשה תרגיש חופשי להפריע לי. זה נותן לי לנשום חדר גם כן. אז חלקים הם זמן לנו באמת רק צלילה ב, לקבל קצת ניסיון מעשי, ל לעבור נושאים שהזכרנו בכיתה או בחומרי לימוד ש אנו ממליצים לך בחורים באינטרנט. ואנחנו באמת נלך דרך חלק מאותם משאבים בקצת. אז כמה הערות על תמיכת סעיף. CS50-- אחד מהדברים שגורם לי זה אחד השיעורים האהובים עליי התחושה היא שאתה אף פעם לא לבד. יש לנו צוות של מעל 100 אנשים שנמצאים כאן כדי לעזור לך. יש לנו שעתי עבודה הימים שני עד חמישי. אז יש כל כך הרבה אנשים ש אוהב את הכיתה בדיוק כמו שאני עושה ומי באמת כאן כי הם רוצים להיות כאן. רובנו הסטודנטים, וזה זה כמו בכיתה החמישית בתוספת לשאר העבודה שלנו. וזה הרבה עבודה, אבל אנחנו עושים את זה כי אנחנו אוהבים את זה, ואנחנו באמת אוהבים ללמד אותך ולעזור לחלוק את ההתרגשות שלנו לנושא זה וזה בכיתה. אז בבקשה לנצל. בואו לדבר איתנו. אני ארגיש בודד כאשר התלמידים שלי לא מדבר אליי, כך שאם אתה רוצה, לבוא לבלות איתי. זה יהיה נהדר. אז קטע הוא ללא ספק אחד הדברים הכי גדולים שלך. אנחנו נלך דרך דברים שלמדת בהרצאה, לעשות כמה דוגמאות קצרות כאשר יש לנו זמן, ובאופן כללי סוג של לקבל מושג על דברים אתה צריך לחשוב על ללהגדיר את הבעיה שלך. Shorts-- כמה אנשים באמת צפה בוידאו מההתחלה שלך קצר? כל אחד מכיר אותי? אז אלה הם גדולים מאוד. אתה בהחלט צריך לצפות אותם. הרבה עבודה כבר הכניס לתוכם. והם נועדו רק כדי להיות בגודל ביס חתיכות כדי שתוכלו רק לצפות במשך שלוש או ארבע דקות ולקבל הבנה טובה יותר של מושג. ללכת throughs-- איך אנשים רבים צופים ראו הנחיות המפורטות לקודמיו? Zamyla מדהים, נכון? כמו, הלוואי שהייתי Zamyla לפעמים. אז בהחלט להשתמש ההנחיות המפורטות לך. היא תהיה לשבור אותו ל חתיכות בגודל ביס קטן,. וכאשר יש לך ענק אלה מפרטים מסטי הבעיה שלך, זה הולך להיות ממש חשוב כדי להיות מסוגל רק כדי למצוא מקום כדי להתחיל ולעבוד לאט דרכו. בסדר, יש לנו גם Study50, ש הוא study50.harvard.edu, אני מאמין. אתה יכול רק גוגל ללמוד, ויבוא אותו. זהו אחד המשאבים הטובים ביותר שיש לנו. זה PowerPoints עם הערות ולתרגל בעיות בשבילך עם פתרונות שאתה למעשה יכול ללכת דרך. אז אם אי פעם אתה רוצה יותר בפועל, יותר מאיתנו בסעיפים או יותר מ סטי הבעיה שלך, זה הוא באמת מקום שאני ממליץ לך ללכת. הוא נבנה בקיץ שעבר על ידי כמה מהחברים שלי ממש טובים. וזה מדהים. למעשה, הרבה שקופיות שאני אהיה באמצעות לסעיף יבוא מStudy50. כל כך הרבה TFS להשתמש בו. ולבסוף, כפי ש כאמור, שעתי עבודה. אם אתה נתקלת בבעיה בהכנת שיעורי בית, אתה נתקל בבעיה עם רעיון, לבוא לשעתי עבודה. ללכת בתחילת השבוע אם אתה יכול. צא למרובע, כי זה סוג של רחוק. אף אחד לא אוהב ללכת לשם. אבל זה לטובתך, כי אז אתה הולך להיות כל TFS אלה, [לא ברור] מקיף אותך. ובמיוחד עכשיו, רק טיפ, ימי חמישי הם קרים מאוד עכשיו ב ר כי psets שלך נובעים בימי חמישי. ולדעת רוצה משתמש בימים שלך מאוחר עדיין. אז אם יש לך בעיה עם מושגים, יש הרבה TFS ש הם שם כדי לעזור לך. אז יצא לMather ביום חמישי. אם אתה רוצה לראות אותי, אני הולך להיות שם. אני בדרך כלל אני עושה את שיעורי הבית שלי, כי אף אחד לא רוצה את העזרה שלי. אז בואו לראות אותנו. לקראתנו. אז כמה אנשים השתתפו ב הרצאות או צפה בו באינטרנט? כמה אנשים הלכו ל סעיף סופר בשבוע שעבר? מגניב. זה בעצם מספר הוגן. כמה מכם קראו spec להשבוע, לpset שלך? אוו, אני גאה בך חבר 'ה! יותר סוכריות לכולכם. טוב, אז מה אנחנו אומר "לקראתנו," הוא הסעיף שהוא באמת רק הולך להיות סופר שימושי לך אם אתה בא שבקראת שלך מפרט pset שלך. כי כשאני עובר סקירה של דברים שאתה צריך להסתכל החוצה, זה לא הולך לעשות כמה שיותר הגיוני אם אתה לא יודע מה להגדיר את הבעיה שלך הולך להיות מבקשת ממך לעשות. אם אתה לא בא לסעיף, ללא ספק אני לא יכול להיות שכדאי לך. אני לא הולך לקחת את זה באופן אישי אם אתה לא בא לחלק שלי עכשיו, אבל אתה בהחלט צריך. אם אתה לא יכול, לצפות בם באינטרנט. הם שם מסיבה. שלי יהיה שם. כפי שאתה שם לב, אנחנו מקליטים, כך זה יהיה ממש שם בשבילכם. כמו גם, הולך lectures-- זה ברור שבו אתה מקבל את תתחיל מהחומר שלך כאן. אז בהחלט אני אנסה לעזור לך כמה שאני יכול, אבל אני יכול רק לפגוש אותך כל כך רחוק. יש לך לסוג של לפגוש אותנו באמצע דרך. Grading-- כך, כולכם שקיבל מייל ממני, אתה החלק הרשמי שלי. אני אהיה לדירוג psets שלך. ואני רק רוצה לומר, דבר יחיד ש אתה באמת צריך לשים לב ל הן ההערות. לעתים קרובות ההערות שימושיות יותר מהציון בפועל אנחנו נותנים לכם. והדברים הם למעשה שבו אני מבלה הרבה מהזמן שלי כשאני דירוג. אז אני אעריך זה אם אתה קורא אותם. והם בעצם איך אתה הולך כדי ללמוד עוד על עיצוב וסגנון ודברים שהם פחות חתך קטן ויבש. אז באמת לשים לב להערות אלה. אם יש לך שאלות לגביהם, או שאלות על הציון שלך, בבקשה לבוא לדבר איתי בין לפני הסעיף, אני כנראה תהיה בחוץ בלובי, או לאחר מכן. אם אתה רוצה לתזמן אחד-על-אחד מפגשים על איך אתה יכול לעזור לשפר מאוחר יותר סטי בעיה, רק יודיעו לי. ולאחר מכן רק כמה טיפים בשבילכם. אז אחד הדברים הגדולים ביותר ש אני תמיד מדגיש לסעיף שלי כאשר אתה לומד איך קוד הוא לכתוב דברים על נייר ראשון. אם יש לך תכנית משחק ל שם הקוד שלך צריך ללכת ומה שהוא צריך לעשות וזה מתפרק לחתיכות קטנות של פסאודו קוד קוד שהכתבת, אתה הולך להיות פחות צפוי לעשות שגיאות תחביר או ליצור אם לולאה ש אין אחר. אם אתה יודע איפה אתה הולך כולל, אתה פחות סביר שיעשה זעיר אלה טעויות שלפעמים לוקחות אותך שעות לתקן, בגלל שאתה כמו, שבו אני חסר הסוגר זה? בהקשר זה, אנא השתמש Style50. במיוחד כשאתה הולך לשעתי עבודה, אם הקוד שלך הוא כל עבר לצד אחד, זה מדיניות כמובן שאנו יכולים לומר, לתקן את זה כך זה נראה כמו Style50 אומר שהוא צריך, ואז אנחנו נעזור לך. אז זה יעשה את החיים קלים יותר. זה יהיה להפוך את חיינו לקלים יותר. כולם מאושרים יותר. כל אחד מקבל ציונים טובים יותר. האם זה לא מה שכולנו רוצים? אז לכתוב את דברים על נייר לפני אי פעם לגעת במחשב שלך. לדבר דברים החוצה ברמה גבוהה, ו ודא שאתה יודע לאן אתה הולך. ואם אתה לא בטוח, לשבת עם מישהו וללוות אותם באמצעות צעד אחר צעד מה הקוד שלך אמור לעשות. ותשע פעמים מתוך 10, אתה תהיה כמו, אה, שכחתי, אם מצב או שכחתי פסיק כאן או אני מעדכן שגוי משתנה זה. אז אלה הם הטיפים שלי להצלחה. אז מאז כמחצית אתה מסתכל כמוך השתתף סעיף סופר, אני רק הולך למאוד ללכת לזמן קצר באמצעות לולאות, אשר לא היו על סדר היום המקורי שלנו. אבל הם באמת חשובים. ואז אני הולך לסוג מהירות באמצעות אלה לפני שאנחנו נכנסים לסעיף בפועל שלנו. לפני שאני עושה את זה, יש כל questions-- לוגיסטי, באופן אישי, יש כל דבר שאתה רוצה דבר אחר לדעת עליי או על סעיף או בכיתה באופן כללי? כל טוב? אישור, מגניב. יפה. אז loops-- אתם כל צריכים להכיר יצירות אלה מהתחלה. אז לולאות הן בעצם רק דרך שלנו לעשות משהו כמה מספר הפעמים, כמה חוזר ונשנה פעולה מבוססת על כמה תנאים. אז יש לנו שלושה סוגים שונים. יש לנו ללולאה, ואילו, ולעשות-בזמן. אז לloops-- רק שיש לנו מאוד פריסה כללית כאן ללולאה for. וזה נהדר עבור כאשר אתה יודע איך פעמים רבות משהו צריך לבצע. כאשר אנו מדברים על לולאות אחרות, אתה מבין למה זה הבחנה חשובה. אבל ללולאות הם לסט משהו. אתה יודע או שאתה יכול לחשב את המספר או שאתה יודע את מספר הפעמים שאתה רוצה שזה חזר בתחילת. אז אם אתם רואים כאן, אנחנו יש רק סוג כללי של מסגרת שלד ללולאה for כאן. אז, זה לאתחול שבי המשתנים שלך מאותחלים. עם מריו, אני בטוח שאתם עשית משהו כמו i int שווה 0. זה מקום שבי שיקרה בכחול. יש לך המצב שלך, ש זה מה שבדק את כל זמן. אם מצב זה נכון, אז שאר הקוד מבצע. ואז זה ירוץ again-- ולשאול. ואז יש לנו עדכון, שבו אתה מעדכן משתנה. אז, שוב, עם כמו מריו, אני בטוח ש אתם עשו משהו כמו שאני פלוס פלוס. אז בכל פעם שלולאה רן, יש לי כל כך מעודכן כי כאשר אנו בודקים אותו כנגד כמה מצב, זה היה שינוי. כי אם אתה רק יש לי משתנה סטטי, אם הוא מבצע בפעם הראשונה, זה רק הולך לבצע אין שיעור. אז אתה צריך לוודא שאתה לעדכן את משתנה כמו שצריך. ויש לנו גם רק ייצוג חזותי יש. כולם טובים? ללולאות. היית צריך לראות את אלה בpset שלך. מגניב. אז הנה רק דוגמא קלה. הדפסה זו היא CS50! 10 פעמים. ולכן יש לנו האתחול שלנו, כפי שאנו רואים שם, עם i int שווה 0, להוא אני פחות מ -10, ואני פלוס פלוס. וזה יהיה להדפיס כי 10 פעמים. אז בזמן שloops-- תוך לולאות כאשר גדול שאתה עושה לא בהכרח צריך לדעת כמה פעמים זה הולך לעדכן בתחילת. אתה פשוט צריך קצת מצב זה נבדק. וזה יכול להיות משהו כמו while-- בואו ניקח דוגמא מpset שלך. אם מריו, אתה מנסה קלט מספר שלילי. נכון? הייתם אמורים מחדש תנחה המשתמש שלך. אז אתה יכול להגיד, טוב, אם תשומות המשתמשים משהו פחות מאפס, מחדש הפקודה שלהם. ואני בטוח שאולי יש לי משהו היה שכמה מכם שימוש בקוד שלך. אז זה דבר פשוט. יש לך זמן, כמה תנאי שנבדק בכל פעם שהקוד הולך לבצע. אם זה בוחן לנכון, אנחנו מפעילים אותו. אחרת אין לנו. ומה באמת important-- משהו שאני חושב שהדוד דיבר על בlecture-- היא הפלטה. לא משנה מה של ב הפלטה היא מה שבוצע. אם שכחת אותם פלטה, זה רק הולך להיות הקו ישיר לאחר הזמן שהוצא להורג. אז אם יש לך שלושה דברים שאמורים זה יקרה כאשר זה מצב מעריך לנכון, ואין לך פלטה אלה, רק הדבר הראשון שהולך לקרות. אז להיות מודע מאוד של איפה אתה שם את הפלטה שלך. אם אתה מקל עם Style50, זה בהחלט יעזור לך. מגניב. אז זה ספירה לאחור מ -10 עד אפס. וכפי שאתם רואים כאן, אנחנו לאתחל כמה דלפק מחוצה לה. דבר אחד ששונה הוא אנחנו לא אתחול כל משתנים בתוך לולאת ה while שלנו. זה אותחל מחוצה לה. אנחנו פשוט רק לשים להתנות לבעוד שלנו. אז במקרה הזה, זה זמן ש הספירה היא גדולה מאפס. ואנחנו להדפיס את מה שהיא הספירה שלנו, ואז אנחנו פחת משתנים. וזה גם דבר אחר לשים לב. העדכון שלנו לא קורה בתוך כי חלק הראשון של לולאת ה while. למעשה זה לא יקרה בתוך הפלטה, גוף הטקסט שלך. אז אל-בזמן loops-- לעשות-בזמן לולאות נהדרים עבור אימות משתמש. אז כמה מכם אולי יש לי גם בשימוש זה בpset שלך. אתה יכול להגיד, לעשות, כמו, לשאול את המשתמש לקלט. ולאחר מכן בזמן, כמו, קלט הוא פחות ממספר. אז למקרה מפורש עם מריו, זה יהיה לעשות printf, להיכנס מספר שלם, ועוד קצת מספרים שלמים שווים getint. ואז זה באמת יהיה לבצע קוד שראשון. למעשה אתה תצטרך איזה מספר שלם. ואז אתה יכול לומר, בזמן ש המספר השלם שהוא פחות מאפס. אז מה זה הולך לעשות הוא זה הולך לבצע לפחות פעם אחת. זה הולך לבדוק את מצבו. אם המצב הוא נכון, זה יחזור לרוץ. אז לעשות-בזמן הלולאות נהדר עבור אימות משתמש, כי אתה יודע את הקוד הוא הולך לבצע לפחות פעם אחת, ואילו עם תוך לולאות, אתה לא מובטח כי זה הולך יתבצע פעם אחת. זה הולך לבדוק את מצבו ראשון ולאחר מכן מחליט לבצע את זה, תוך-לעשות בזמן שיהיה לבצע את הקוד ראשון ולאחר מכן בדוק אם אתה צריך לחזור עליה. האם הבחנה ש הגיוני לכולם? אישור. מגניב. אז במקרה הזה, זה סוג ממה שדיברתי עליו, זה מחדש הנחיות עד ש לקבל מספר חיובי. אז אנחנו יודעים שprintf "יש להזין מספר חיובי" ובעצם מבקש ש קלט יקרה לפחות פעם אחת. אם המשתמש הוא רע ושומר הזנת מספר שלילי, ש יודע כמה פעמים זה יהיה לבצע. אבל הקוד הזה מובטח לבצע לפחות פעם אחת. ולכן זה נהדר לאימות קלט. ואתה משתמש בזה לא מעט. בסדר, כל שאלות עד כה? כולנו טוב? האם אני מדבר מהר מדי? אנחנו טובים? אישור. מדהים אז אנחנו הולכים קדימה ולדבר על מערכים. מגניב. אז מערכים הם ביסודם רק מבני נתונים המאפשר לנו לאחסן דברים מאותו הסוג. אז אם אי פעם יש לי מערך, זה או פשוט אצטרך ints או שזה רק הולך להיות צף או שזה רק הולך להיות תווים. אתה לא הולך להיות int עם char עם מצוף עם דאבל. דבר אחד. מערכים הם רק גודל אחד, או שהם רק סוג אחד. אז הנה יש לנו מערך של גודל שלוש עם שלושה מספרים שלמים בזה. הם יכולים צף, אבל אנחנו הולך להגיד ints אתה. אז דבר אחד הוא להבין כי מערכים הם בגודל מוגדר בעת האתחול שלהם, והם לא easily-- שכן כל שאתה פחות נוח, אתה פשוט צריך לחשוב עליהם כ לא להיות מסוגל להאריך בגודל. גדול עם זאת אתם יוצאים המערך שלך בהתחלה, זה הגודל זה הולך להישאר, כי מערכים הם אבניים רציפים של זיכרון. וכאשר אתם מקבלים לקצת יותר איך זיכרון של ממש מונח על דיסקים ובערמה והמחסנית, זה יעשה קצת יותר הגיוני. אבל אתה יכול רק לחשוב כמו, זה רק שורה של מקומות בדיסק שלך. ואתה לא יכול להבטיח שיש הולך להיות שטח פנוי אחריו. אתה יכול לאתחל מערך משלוש ואז אולי אתה לאתחל מערך נוסף של חמש מאוחר יותר, וזה מייד אחרי ש. אז אם היו לך ללכת מקום האחרון שלושה שבמערך הראשון, אתה הייתי כותב על משהו אחר. אז מערכי are-- בשבילכם, רק לחשוב עליהם כגודל קבוע. אז יצירת array-- אתה הולך לצריך לעשות את זה לא מעט. אז, באותו אופן שיש לנו מבנה כללי לנו ללולאות, יש לנו בכלל נחמד מבנה למערך שלנו. כי הם מסוג אחד, כל אלמנטים במערך הם מסוג אחד, אתה צריך לאתחל מה הוא הסוג ש. אז, כפי שאתה רואה כאן, יש לנו סוג נתוני הסוגר קטן ונחמד. אז אם אנחנו יוצרים int מערך, שיהיה int. אם אנו יוצרים char מערך, זה יהיה char. אם אנו יוצרים מחרוזת מערך, זה יהיה מחרוזת. ולאחר מכן את השם של המערך שלך, כל מה שהיית רוצה שזה יהיה. אז אולי זה ציונים מבחנים או אולי זה סטודנטים או אולי זה ממתק. לא משנה מה תחליט את השם שלך מערך, שזה מה שזה יהיה. ולאחר מכן בסוגריים, שתצליח יש לי הגודל שאתה רוצה. אז, אנו מאחסנים 10 תלמידים או אנחנו אחסון 15 סוגים של ממתקים? מה לא. לכן בדוגמא שלנו כאן, אנו יוצרים מערך גודל שלושה, שאתם לראות ממש כאן בצד הימין. וכאשר אנו לאתחל ראשון זה, כל מה שמוגדר כאפס. אז זה פשוט חשב ש כמו לוח חלק. יש לנו את כל המקומות האלה, יש לנו את כל קופסות האלה שאנחנו יכולים לשים את הנתונים שלנו ל, אבל הם פשוט ריקים לעת עתה. אז אם אנחנו רוצים בעצם להקצות להם ערכים אלה, אנו עושים זאת כממש מתחת לכאן מראה. אז יש לך כל מה שהשם שלך מערך הוא ואז מה מדד שאתה רוצה. אז המדד פשוט מתייחס ל, כמו, מה חריץ אנחנו מסתכלים. ודבר חשוב לשים לב הוא שמערכים צמודים לאפס. אז אם אנחנו רוצים החלל הראשון בזיכרון של המערך שלנו, זה הולך להיות אפס. אם אנחנו רוצים שני, זה יהיה אחד. אם אנחנו רוצים שלישיים, זה יהיה שני. כן הלאה וכן הלאה. זו גם הסיבה ש, כמקובל, אני כשאנחנו עושים לloops-- בטוח אתם תוהים, מדוע אנחנו מתחילים ב 0 לעומת 1? וזה בגלל שכאשר אנו מעבר לשימוש במערכים, זה ממפה בצורה נכונה. אז אם אתם רוצים לחזר למערך, זה עושה הרבה יותר הגיוני האם אני שווה 0, כי אנחנו יודע שיהיה מתאים למקום הראשון בזיכרון. כולם טובים בזה? מגניב. ולאחר מכן על התחתון כאן הוא פשוט דרך נוספת לאתחל מערך. עדיין יש לך שלך סוג הנתונים ואת השם, אבל במקום באמת לשים גודל שם, אתה פשוט יכול לעשות סוגריים ריקים. ולאחר מכן, בסוגריים מסולסלים אלה פלטה בתחתית, אתה יכול פשוט להכניס את הנתונים ש אתה רוצה מופרד בפסיקים. וזה יהיה באופן אוטומטי אומר, בסדר, אני רואה כי יש לך שלוש דברים בסיכות אלה. אז אני יודע שאני צריך להקצות שלוש בלוקים של זיכרון ולאחר מכן לאחסן אותם. אז הגרסה הראשונה שאתה עשוי להשתמש בי אם אתה שואל את המשתמשים שלך לכניסה ערכים, כך שאתה יכול איטרציות במערך וask-- לקבל קצת int לקלטם. אם אתה יודע את הערכים מראש, זה עושה הרבה יותר הגיוני להשתמש בדרך השנייה. אבל ברוב המקרים, אתה אולי לא יודע מה הערכים אלה הולכים להיות. מגניב. יש עוד שאלות? בסדר. אז גישה elements-- כך אחד הדברים הגדולים על מערכים הוא שהם אקראיים גישה, כלומר, אתה לא צריך להסתכל דרך כל בלוק. אם אתה יודע שאתה רוצה את מה שהוא בבלוק שני, אתה יכול רק להגיד, תן לי לחסום שני. ולכן אלה מדדים הם כל כך חשובים, וככה אנחנו בעצם לגשת אליהם. אז במקרה הזה, כפי שראינו קודם לכן, כאשר היינו הקצאת ערכים, באחד לפני, היו לנו את השם ו מדד שאנחנו רוצים גישה, נכון? אז באותה הדרך, זה כל מה ש לעשות דווקא למשוך את זה החוצה נתונים. יש לנו שם ואנחנו יש מדד שאנחנו רוצים. אז במקרה הזה, ללולאה כאן למטה בתחתית, כל אחד יודע מה הוא עושה, איך זה יהיה להדפיס את? "ממממ? בדיוק. אז כן, זה פשוט iterating דרך. היא i שווה לzero-- אנחנו יכולים ללכת באמצעות הקוד פשוט במהירות. היא i שווה לאפס, אני פחות משלושה, בשלב זה, נכון? כך שבודק את. ואנחנו אומרים, בסדר, ו הדפסה מה היא בטמפרטורת i. הוא לי אפס ממש כאן כאשר אנו ראשון לחזר, ולכן אנחנו הולכים למקום הראשון, ואנחנו אומרים, בסדר, 65 הוא מספר שאנחנו רוצים להדפיס. אז זה יהיה להדפיס את 65 ואז לעשות קו חדש. אני אעדכן, אז זה מדפיס 87. הוא מעדכן שוב, וזה יהיה להדפיס 30. כולם מגניבים? מדהים. בְּסֵדֶר. אז הנה סוג של אחד דבר שאני אומר איך אתה יכול לעקוב אחר הציון של מישהו ומדוע עליך להשתמש בראשון דרך של אתחול זה במקום שהדרך השנייה. וזה רק עובר. ושים לב שיש לנו מספר תלמידים בכיתה של 30. ואנחנו אתחול זה מערך של ints שהוא בגודל 30. ואז אנחנו iterating דרך ואנחנו לשאול את המשתמש לכניסה ציונים לכל אחד מאלה ולאחר מכן הקצה אותו ל במקום מסוים בזיכרון אי שם במערך ש. מגניב? האם זה הגיוני לכולם? "ממממ? אז hashtag להגדיר גודל כיתה 30 היא הוראת עיבוד מוקדמת, שרק אומר את זה gets-- יש לו לעשות כמו תהליך הקומפילציה. אתה יכול לחשוב על זה כמשתנה גלובלי. הדרך בה אנו עושים את זה היא typically-- היא מאפשרת את הקוד שלך להיות שונה בקלות רבה יותר. אז נניח שגודל הכיתה שלנו פתאום הולך 30-15, אם לא הייתי מגדיר אותה בדרך זו, הייתי צריך לעבור את כל התכנית שלי ולשנות את כל מופעים של 30-15. אבל עם זה, אני מקבל לשנות אחד מקום, ושינויי כל דבר אחר. אם אי פעם אתה רוצה לעשות חשיש להגדיר במקרה לאן אתה עוקב אחרי כמה להגדיר מספר הציונים לכיתה או שאתה משתמש במספר שישמש, כמו, בכל תכנית ארוכה מאוד, זה עדיף להגדיר כי בתחילת כך שאם אי פעם הוא משנה, אתה מקבל לשנות מקום אחד, במקום 100. כן? תלמיד: בין לעשות את זה ופשוט הכרזה [לא ברור] על בחלק העליון. אליסון BUCHHOLTZ-AU: אז זה יש לעשות עם efficient-- זה סוג של מחוץ להיקף של מה שאנחנו יכולים לכסות בסעיף זה. זה יש לעשות יותר עם יעילות ואיך בעצם דברים עבודה בתהליך הקומפילציה. אם אתה רוצה באמת לדעת על זה, אני שמח לשלוח לך דואר אלקטרוני עם משאבים על זה. חשיש להגדיר נוטה להיות העדיף לדברים. וכמו שאתה לקודד יותר, אתה סוג של ללמוד את הניואנסים כאשר אתה צריך להשתמש ב הגלובלי לעומת החשיש להגדיר. אבל לעת עתה, באמת אין לך לדאוג בקשר לזה הוא כי התשובה הקצרה. כולם טובים בזה? וגם, אם אתה רוצה להשתמש חשיש להגדיר, זה באמת חשוב לשים לב שהשם צריך להיות באותיות הגדולות. אנחנו לא רק עושים גודל כיתה להיות דרמטי. זה צריך להיות ממש בכל כמוסות. מגניב. כל דבר אחר שם? אנחנו טובים? יפה. ברוך הבא. אוקיי, אז אני רוצה שבחורים להעיף מבט בשלב זה ולראות אם אתה יכול למצוא את הבאג. אני אתן לך רמז. זה איפשהו שבלולאה ל. "ממממ? תלמיד: צריך להיות פחות מ שווה ל 2. אליסון: אז זה יכול להיות פחות או שווה ל 2, או שזה יכול להיות פחות מ -3. ומה הסיבות לכך? תלמיד: [לא ברור], 0, 1, 2. אליסון: בדיוק. אז במערך בגודל n, אנחנו יש רק מדדים של n מינוס 1. מגניב. ואז אנחנו יכולים לקבל באמת מטורפים ולקבל מערכים רב-ממדיים. אחת הבעיות כשלקחתי אותה בי מערכי שנה הנדרשים רב-ממדיים, ואני חושב שאחד מהם עלול לחייב זה השנה, כך יהיה נוח. לעטוף את הראש סביבו עכשיו. זה יחזור לרדוף את אתה, אבל בצורה מגניב. אז אתה באמת יכול לחשוב רק מערכים רב-ממדיים כמערכים של מערכים. אז אתה סוג של יכול לחשוב על החלק העליון הזה שורה כנתח הראשון של זיכרון. ואת זה הוא נתח שני של זיכרון, והשורה האחרונה היא נתח שלישי של זיכרון. ובתוך כך, יש מגוון. אבל כמובן, זה יותר קל לתאר כזה. אז אתה לאתחל אותו באותה דרך. זוהי דמות מועצת המנהלים של שלוש מול שלוש. אז יש לך שלוש שורות ושלוש עמודות. אנחנו מייצגים אותה בדרך זו. והיית לגשת אליו אותו אופן, טורו של שורה. וכך 1,1 כפי שאנו רואים כאן. אנחנו להקצות אפס, אפס שם למעלה. 2,0 ו0,2. אז היית לגשת them-- רק אם מישהו אי פעם עשה אלגברה לינארית, באותו אופן הגישה לאלמנט ב matrice, זה אותו הרעיון כאן. אז אתה יכול להתייחס אותו בחזרה למתמטיקה. אתה לא צריך לדאוג יותר מדי הרבה על זה עכשיו. זה טוב שיש חשיפה, לדעת שאתה יכול לעשות את זה. אתה יכול ליצור כמה משוגע number-- שאתה יכול ליצור מערכים משוגעים הוא כל מה שאני הולך להגיד. [לא ברור] זה נהיה קצת משוגע, אבל זה ממש מגניב. מדהים. ולאחר מכן, כך שיש לנו פה דוגמא. היא מחשבת אורך מחרוזת. אז כמה אנשים ידעו ש המחרוזות שאתה משתמש ב רק מערכים של תווים? אישור, כן. אז אתם יכולים לחשוב שיש לך לא מערכים השתמשו בעבר, אבל בכל פעם אתה משתמש getstring ב ספריית CSView, אתה למעשה רק לבקש מערך של תווים. ואנחנו דואגים לכל כי בקצה האחורי בשבילך. אבל יש לך כבר משתמשים ב מערכים מאז שהתחלתם. אתה פשוט לא יודע את זה עדיין. ובכל פעם שיש לך מערך תווים או מערך זה אחסון מחרוזת, הדבר האחרון שהוא תמיד מה ש בשם שליחות קטלנית null, ש זה ממש כאן. וזה בסופו של כל מילה שאתה אחסון. אז אם אנחנו רוצים להבין את אורך של מחרוזת, אנחנו יכולים לומר, גם, אתה יודע, תוכן של בלוק ש אינו שווה לשליחות קטלנית null. זה אומר שיש כמה אופי יש שאנחנו באמת אכפת שזה חלק מהמילה. אתה מגדיל את האורך שלך. ולאחר מכן כאשר אנו מקבלים למעשה סוף המילה, זה יהיה לסיים וזה יחזור האורך שלנו בשבילנו. "ממממ? תלמיד: האם החלל נחשב שליחות קטלנית null? אליסון: אז חלל הוא לא שליחות קטלנית null. אז אם יש לך multiple-- חלל הוא למעשה ערך ASCII ספציפי. תלמיד: מה קריאה שווה שוב? אליסון: אז, זה מה שאתה מתייחס ל. אם אי פעם אתה שומע אותי בשעתי עבודה, אני תמיד קורא לזה, כמו, מפץ שווה. אז מפץ הוא לא. אז זה לא שווה. אז אם אתה מנסה לראות אם משהו לא נכון, אתה תמיד יודע לעשות, מפץ מה משתנה הוא, ואם הוא שגוי, זה מעריך לנכון ואתה יכול לעשות דברים מגניבים עם זה. עוד על כך בהמשך. מגניב. כל מה שטוב שם? מדהים. אז עכשיו זה הזמן של החבר'ה שלך ל לעבוד, מאז שאני מדבר. אז אני רוצה אותך רק כדי ליצור מערך עם המספרים השלמים אחד, שתיים, שלוש, ואז יש להם הדפיס. אתה לא צריך לעשות, כמו, עיקרי, בלה, בלה, בלה, לא משנה מה. אני רק רוצה שלאתחל המערך ולאחר מכן ליצור ללולאה כדי להדפיס אותם out-- או לולאה בזמן, עד שאתה. אני רק אתן לך כמה דקות לעבוד על זה. אני הולך לנוח את הקול שלי. אם יש לך שאלות, אני שמח לבוא ולדבר אתכם. תרגיש חופשי לדבר אחד עם השני. קבל עוד ממתקים. למעשה, אני פשוט מסתובב עם ממתקים. איך זה? האם אתה רוצה בכלל? עוד מישהו בחדר הזה רוצה סוכרייה? אתה יכול גם לקחת יותר מאחד, בחורים. קח קומץ אם אתה רוצה. מאי גם כן. טוב שכולם? אישור. כמו כן, אני הולך ליצור טופס Google אנונימי, ואתם יכולים פשוט להגיש משוב לאחר כל סעיף אם יש משהו שאתה רוצה לשפר או משהו שאתה רוצה לעשות. אם אני קטן ומלאה חיים יותר מדי בשבילך, אני יכול למתן את זה. אני ליצור ושלשלוח את זה לכל לך אחר כך. בְּסֵדֶר. אז בואו נתחיל בקטן. איך היינו לאתחל המערך שלנו? מה סוג המערך שלנו? Int, נכון? אוקיי, אז מה אתה רוצה לקרוא המערך שלך? מערך int, מגניב. בסדר, אז יש לנו מערך int int שווה, ומה יש לנו אחרי זה? תלמיד: [לא ברור] בסוגריים. אליסון: סוגריים מסולסלים. ואז בתוך הסוגריים המסולסלים? אחד פסיק שתיים פסיק שלוש. מגניב. אז זה בסדר. אז עכשיו יש לנו שלנו ללולאה. אז בחלקו הראשון שלנו ללולאה, מה יש לנו? תלמיד: אני שווה 0? אליסון: אז int i שווה 0, ואז מה המצב שלנו? מה שאני הולך להיות פחות מ? פחות משלושה, ו איך אנחנו לעדכן אותי? אני פלוס פלוס, מעדכן אותו על ידי אחד. ואז אנחנו הולכים לי כמה printf של המספר השלם, ומה שעבר חלק זה בעצם הולך להגיד את מה שאנחנו צריכים להדפיס? זה יהיה שמו של מערך, שהוא מערך int, נכון? ומה בסוגריים של מערך int? אני. [? אז] אני? בשם שלי דוגמא, אבל הנה לך. לא כל כך נורא. כולם טובים? מגניב. אז סיימנו עם המערכים. מזל טוב. אתה הצליח לחזר דרך כל the-- כן? תלמיד: [לא ברור] אליסון: כן. תלמיד: יש לי שאלה. אתה אמור להגביה את הפלטה? אליסון: אז הפלטה צריכה להיות בקו עם ללולאה, ואז הכל בתוך יש מסוכסך הפלטה. תלמיד: בסדר, צריך ללולאה להיות מסוכסך? אליסון: ללולאה לא צריך להיות מסוכסך בשלב זה. אם הייתם בעיקרי, אם למעשה הייתה פונקציה העיקרית כאן, זה יהיה מסוכסך מראשי. אבל במקרה הזה, זה בסדר. כן, שאלה. תלמיד: האם אתה צריך סוגריים אחרי דוגמא? אליסון: כן, אם אתה אתחול את זה ככה. אז לזכור, זה השני דרך של אתחול מערך שבו יש לנו הפלטה ולאחר מכן בפועל שלנו נתונים מופרדים בפסיקים בתוך. תלמיד: חשבתי שיש סוגריים לדוגמא ש. אליסון: לא, הם פלטה. הם פלטה. אם אתה מאתחל אותו כי דרך שנייה, זה פלטה. אם היינו אומר, int example-- אם רק רצינו מערך ריק לints, זה יהיה דוגמא int סוגר שלוש. סוגריים מייצגים את הגודל. כאשר יש לך פלטה, זה הנתונים בפועל אתה מכניס את זה בדרך זו. אנחנו יכולים לגלול אחורה ממש מהר. אז בזה, זה רק שלנו מערך ראשוני, אתחול. והנה, אנחנו באופן אישי הקצאת מקומות אליהם, כך זה מייצג את המדד שלנו מערך, וזו הסיבה שיש לנו בסוגריים. אבל כאן, אם אתה שם לב, יש לנו עזבו הסוגריים בלי גודל, ואנחנו לאתחל אותו עם הנתונים בפועל כל אחד ב-עם פלטה. תלמיד: אז למה אין לנו בסוגריים בדוגמא זו? אליסון: אז, שבו חלק? תלמיד: לא היינו למשל, סוגריים דוגמא int שווה פלטה [לא ברורה] סוגריים לדוגמא. אליסון: הו, אני מצטער. אתה צודק. יש לנו בסוגריים יש. מצטער חבר, הרע שלי. כן, צריך להיות לך סוגריים אחרי הדוגמא. אתה צודק לגמרי. תלמיד: [לא ברור] לא עושה את זה. אליסון: לא, אתה צריך שתהיה לי סוגריים, כי אחר זה לא הולך להצהיר על מערך. תלמיד: [לא ברור]. מצטער על זה. אליסון: מצטער, אתה צריך סוגריים אחרי הדוגמא. טעות דפוס. לתפוס טוב, כוכב זהב בשבילך. כמו כן, אם אתה שואל את שאלה, אם אתם היו אומרים לי רק השמות שלך, אני אשמח ש. אני אשמח להיות מסוגל יודע את כל השמות שלך. אני לא הולך לקור קורא לך, אני ממש אין רק רוצה לדעת את השם שלכם. אז בבקשה בעצם אומר לי את השמות שלכם. לאה: לאה. אליסון: לאה. אוקיי, אז functions-- אני יודע בקצרה הם דיברו על זה בהרצאה. אז פונקציות הן סוג של פשוט כמו הדברים בגודל ביס הקטנים האלה שבו אתה עובר בתשומות, משהו קסום קורה, ואתה מקבל פלטים. מגניב. אז אתה בעצם משמש כבר הרבה כאלה. קבל int, תקבל מחרוזת, ו הדפסה. כל אלה הם הפונקציות שבו אתה פשוט קורא להם, יש המון דברים קסומים קורה ברקע שאתה לא בהכרח רואה, ואתה מקבל את מה שאתה רוצה. או לפחות שאתה מקבל מה שאתה מקווה שאתה רוצה. ובעצם הנקודה של פונקציות, ואחד הנושאים העיקריים של CS, הוא לשבור את הקוד שלך לחתיכות לניהול. כאשר אתה מתחיל בכתיבה תוכניות ארוכות באמת אלה, או בגרד כאשר היה לך הרעיון הגדול הזה למשחק, אתה צריך להיות מסוגל לשבור אותו עד ל, כמו, אישור, איך אני מתחיל? מה הן החתיכות הקטנות שאני צריך? אה, אני צריך לשאול משתמש למשהו. עכשיו אני צריך להדפיס משהו. אה, אני צריך לחשב ערך זה. וללמוד איך לשבור אותך קוד והבעיות הגדולות ש יש לי לחתיכות קטנות האלה ויצירת פונקציות הוא למעשה אחד אבני יסוד גדול של CS. אז אתה יכול לחשוב על פונקציה בדיוק כפי ש כמו קופסא שחורה, קופסא שחורה קסומה, כי אתה לשים את הדברים ב ולקבל פלט. ושאר התכנית לא צריך לדעת בהכרח מה קורה בתוך הקופסה שחורה ש. כל מה שמעניין אותו זה מה ש נכנס ומה יוצא. מגניב. אז למה פונקציות? Organization-- כמו שאמרתי, כשאתה התמודדות עם בסיסי קוד גדולים מאוד, איך לך לארגן את הקוד שלך יהיה הרבה יותר קל אם אתה משתמש בפונקציות. מכיוון שאתה יכול להיות, כמו, אישור, זה זה מה שהפונקציה הזו עושה ו הנה מה שעוד אחד עושה. ואתה יכול בקלות לראות איך כולם מתאים זה לזה. אז לשבור אותו לכל subparts ניהול אלה. אז simplification-- אני בטוח שאתם כל ראה את זה, כמו שאמרתי, עם גרד. יש לך הרעיון הזה גדול, ו אתם כמו, איך עושים את כל העבודה הזאת? אבל אם אתה מתקרב אליו טיפין טיפין, אתה אומר, בסדר, כיצד אוכל לבצע ספרייט אחד לצוף על פני המסך? זה קצת יותר קל. שימוש כל כך טוב של גורם פונקציה הקוד שלך הרבה יותר קל לקרוא. זה עושה את זה קל יותר לאתר באגים שכ אתה נכנסת לסטי הבעיה במועד מאוחר יותר, אתה הולך באמת רוצה להיות מסוגל לעשות. והם גם קלים יותר כדי לתכנן וליישם. אתה יכול לקודד את קטן לתפקד במהירות יחסית ולוודא שזה עובד לעומת מנסה כדי ליצור תכנית ארוכה כל כך ולאחר מכן סוג של לעבור ו לראות מה עובד ומה לא. ולאחר מכן שימוש חוזר. אז פונקציות צריכים רק להיות כתוב פעם אחת, ואז אתה יכול להשתמש בם כמו פעמים רבות ככל האפשר. אז זה, כמו, ידידותי לסביבה במובן מסוים. אם היה לך דברים כמו ו הדפסה, שבו אתה הייתי צריך לכתוב את הקסם שהולך מאחורי להדפיס F בכל פעם אתה רוצה להדפיס משהו, אתה יהיה די חולה ועייף מזה עד הסוף. אחד מהדברים שאתה ללמוד בכיתות מאוחר יותר CS, או אחד הטוב ביותר עצות שאני מקבל כלומר, אם אתה מעתיק ומדביק קוד, זה כנראה צריך להיות פונקציה. אם יש לך את אותו הדבר קווים לאורך כל הקוד שלך, אם אתה בחשבון אותם, הקוד שלך כנראה שהיית עושה חמש להיות, כמו, זמנים קצרים יותר ולהיות הרבה יותר קל לקריאה. ובמקום לנסות לפתור כל המקומות השונים הללו שבו דברים עלול להשתבש, יש לך תפקיד אחד שאתה מקבל כדי לפתור. ואני מבטיח, הרבה זה אולי נראה סוג של מופשט עכשיו, אבל כפי שאתה להיכנס מאוחר יותר והבעיה מאוחר יותר קובעת, זה יעשה הרבה יותר מובן ובאמת להיות מונע על הבית. האם יש שאלות על פונקציות עד כה? למה אנחנו משתמשים בהם? אני יודע שלא קיבלתי לגרגירי nitty עדיין. אז הגדרת function-- בדיוק כמו מערכים, אנחנו צריכים איזה של-- זה רק הפלט הכללי. אז זה פונקציה זה רק הולך קובייה קצת קלט. ובעמוד הבא, למעשה, יש לנו את כל הדברים האלה מדהים קטנים כאן. אז, כל אחד יכול לקרוא ש, מתוך סקרנות? אני יודע סגול ושחור יכול להיות קצת קשה. אבל דברים גדולים יודע-- כך הראשון אחד כאן הוא סוג ההחזרה שלנו. על הפלט אז זה מדבר של פונקציה זו בעת, במקרה זה, אנחנו שמים בחלק המספר, מה שאנחנו מקבלים הוא שחתוך לקוביות מספר. אז זה צריך להיות int במקרה זה. אולי זה יהיה כפול או משהו אחר מאוחר יותר, אבל במקרה הזה, זה int. עם ג, אתה תמיד צריך סוג החזרה. זה יהיה int. זה יהיה לצוף. זה יהיה כפול. אבל אתה צריך לציין מה פונקציה זו הולכת לחזור. אחרת זה יהיה לצעוק על אתה, וזה לא יעבור הידור. אתה תהיה עצוב, ואני אהיה עצוב. וזה פשוט לא טוב. אישור. ולאחר מכן יש לנו שם הפונקציה שלנו. וכפי שאתם יכולים לראות כאן, עם ג יש פרדיגמה מאוד עקבית זו. מה הסוג שלך, מה זה שם, ואז משהו אחר בסופו של הדבר. אז יש לנו סוג ההחזרה שלנו, השם שלנו הפונקציה, ולאחר מכן יש לנו הכותרת שלנו עם רשימת הפרמטרים שלנו. אז רשימת הפרמטרים היא, מה הוא פונקציה זו הולכת לקחת ב? רשימת פרמטרים היא פשוט מילה נרדפת ל, מה הן התשומות שלנו? ובאותו אופן שאנו צריך להגדיר הפונקציה שלנו ולתת לו תמורה הקלד, כל אחד מהתשומות שלנו צריך להיות סוג הקשורים אליו. אז אנחנו יודעים מה התפקיד שלנו למעשה יכול לעבוד עם. אז במקרה הזה, יש לנו כמה קלט int. אז שוב, זה יהיה הסוג ומה שאתה קורא לזה. ואז, כפי שאתה רואה כאן, יש לנו הגוף שלנו. אז יש לנו כמה פלט int, ש רק הפעמים הקלט שלנו עצמו פעמים את עצמו, שרק קוביות זה. ואז אנחנו חוזרים פלט ש. אז כפי שאתם רואים כאן, יש לנו int פעמים פעמים int int, כך היא מחזירה int, ש הוכרז שם. אז כל מה שהוא מלוכד. הכל שמח. הפונקציה שלך תפעל. וזו רק הדבר הכללי. אז תמיד להיות סוג חזרה, שם, ורשימת הפרמטרים שלך. כל דבר בך רשימת פרמטרים, או קלט, צריך להיות סוג הקשורים אליו. ואז יש לך שלך גוף כאן עם כל מה ש אתה רוצה לעשות עם הקלט שלך. ואז ברור שאתה רוצה להחזיר משהו. לפעמים פונקציות יהיו פשוט לחזור. הם לא באמת לחזור משהו כדי שתוכל להשתמש. אבל אתה צריך לחזור בדרך כלשהי. וכאשר אתה עושה פונקציות, משלך אנחנו יכולים להיכנס לזה קצת יותר לעומק. באופן אישי, אם אתה רוצה, יש הרבה דברים שונים שאתה יכול לעשות שם. כולם טובים? שום דבר ברשימה זו שאתה רוצה אותי ללכת על, שאתה לא מבין? כולם טובים שם? מגניב. מדהים. אוקיי, אז אנחנו מכניסים כולם ביחד זה עכשיו. אז יש לנו קצת קלט קוביית int, כך זה הוא תכנית מלאה כאן. עד עכשיו, יש לי סוג של עושה לך קטעי בחורים שאולי הולך בתוך תכנית. אנחנו פשוט הסתכלנו בפונקציות. אבל הנה תכנית כולה. אז כמה מכם זוכרים את אב טיפוס מילה מהרצאה? מגניב. יש לנו אחד. מה שמך? סטף: סטף. אליסון: סטף? אישור, מדהים. אז, אתה זוכר מה הוא אב-טיפוס? תלמיד: אתה אומר [לא ברור] לפני שאתה בעצם מתמודד עם זה. אליסון: האם אתה זוכר למה? תלמיד: מס ' אליסון: אישור. כוכב זהב. אז כן, יש לנו אב טיפוס לפני כן, כי אחר, המהדר שלנו הולך לצעוק עלינו. זה הולך לומר, אישור, מה היא פונקצית קובייה זה? כמו, פשוטו כמשמעו, שיש לך אמר לי שום דבר על זה. זה כמו שאתה נכנס לכיתה, ומישהו כמו, יש חידון היום. ואתם כמו, אף פעם לא סיפר לי על זה. אני לא שמח איתנו. אב הטיפוס הוא בעצם כמו תכנית הלימודים שלך אומרים, יסתכל. ראשים למעלה. יש הולך להיות חידון ביום זה. לא להתחרפן כשאתה מגיע לזה. אתה הולך להיות בסדר. אז כל האב-טיפוס זה הוא אומר לי עיקרי, אני הולך להשתמש בפונקציה זו. אני מבטיח שאני מגדיר אותה מאוחר יותר. לא להתחרפן עליי. רק לקמפל ולעשות את מה שאני אומר לך. אז יש לנו אב הטיפוס יש רק כדי להפוך את המהדר שלנו מאושר. וזה בעצם הבטחה ש שהגדרת פונקציה זו מאוחר יותר ושאתה לא רק קורא הדבר האקראי הזה ש אינו יודע מה אתה הולך לעשות. אז במקרה הזה, יש לי העיקרי כאן. נאתחל את חלק x מספר שלם. זה שתי. אנחנו הולכים להדפיס את מה שהוא x. אנחנו הולכים לקוביית x. כפי שאתם רואים, יש לנו שלנו הצהרה על פונקציה כאן למטה ש דיבר על העבר. זה יהיה קוביית x, ולאחר מכן, אם זכור, פונקצית הקובייה למעשה מחזיר מספר שלם ל שלנו, אשר מאוחסן בx שוב, כדי שנוכל להדפיס שמונה, או x קובייה עכשיו החוצה. האם זה הגיוני לכולם? אנחנו טובים? בְּסֵדֶר. מדהים. בְּסֵדֶר. כמה מכם הבחורים זוכר את זה כל כך זה הוא בעצם רק שלך מחסנית והערימה שלך, רק הדמיה של איך זיכרון מאוחסן כאן. אז אנחנו פשוט רוצים לעשות בטוח שאתה מבין איך אלה מיוצגים בזיכרון. אם אתה לוקח שיעורים כמו CS61 ודברים מאוחר יותר, אתה מקבל כדי ללמוד את זה הרבה יותר בעומק, וזה ממש מגניב. אני מאוד ממליץ על זה. אבל לעת עתה, אני אתן לי אתה הסקירה הרחבה ולכן אין לך יודע nitty גרגירי. אז החלק העליון רק קטע טקסט ש מכיל אפסים ואחדים בפועל, בינארי של. וזה משמש לאחסון משתנים גלובליים אם יש לך. כפי שאתה לנוע למטה, אנחנו יש לי, כפי שאתה רואה כאן, הנתונים אותחלו, שלא אותחל נתונים, ולאחר מכן ערימה. אז אנחנו לא ממש מדברים על הערימה עכשיו. עוד נגיע לזה מאוחר יותר. לעת עתה, אני פשוט הולך ל מניף את הידיים שלי ולהיות כמו, אתה לא צריך לדעת על זה עכשיו. אבל נדבר קצת קצת על הערימה. אז הערימה היא where-- יש לנו זום ב. זהו למעשה איך התכנית רק הסתכלנו מתרחש בזיכרון. אז מה שקורה הוא, בכל זמן שאנו מכנים פונקציה, אנחנו מקבלים את מה שנקרא ערימה מסגרת, שהוא אחד מאלה. פרמטרים אז של עיקריים. אז אלה הם הדברים כי אנחנו עוברים לעיקריים. אז הם צודקים כאן בתחתית, כי זה הדבר הראשון שאנחנו קוראים. ואז אנחנו מגיעים לעיקר של המקומיים, וכאשר אנו אומרים ש, אנו מתכוונים למשתנים המקומיים המאוחסנים בתוך עיקרי. אז המקומיים כאן יהיה, כמו, x הוא שווה לשניים במקרה זה. כי זה מקומי לעיקרי. האם כולם זוכרים היקף, הולך על זה בהרצאה? אישור. אז, רק את המשתנים ש אותחלו בתוך עיקרי. אז בגלל זה יש לנו [עיקרי? שירה. ?] ואז בתוך עיקרי, שאנו מכנים קובייה. נכון? אז אנחנו מקבלים מסגרת אחרת עם הפרמטרים של הקובייה. אז במקרה הזה, קובייה פרמטרים הם עכשיו x שעברנו ב, שני שעברנו ב. ולאחר מכן מקומי של הקובייה, שהוא שם עִקוּב בפועל קורה. ואז זה חוזר. אז מה שקורה הוא כקובייה בעצם עושה מה זה אמור לעשות, הוא חוזר. כאשר הוא חוזר, מסגרת זו יוצאת, ו חזר אל עיקרי. ואז בתוך עיקרי, אנחנו למעשה יכול להדפיס אותו. לכן, כאשר אתה אתה חוזר משהו, כאשר הפונקציה שלך מחזירה, זה כמו שעובר על ערכים אלה ל המסגרת מתחתיו ולאחר מכן עוזבת. ודברים צריכים לבצע כדי. וכשאתה מגיע לתוכניות גדולות יותר, אנחנו יכולים לעשות קרירים ויותר מסובכים תרשימים. אבל לעת עתה, זה הוא רק סקירה כללית אז יש לך סוג של הבנה של מה ש קורה כאשר אתה קורא לפונקציה ואיך בעצם שנראה בזיכרון. מגניב? כולם טובים? מדהים. אז זה אחד שהוא רק מנסה להחליף דברים. כפי שאנו רואים כאן, יש לנו אב טיפוס הפונקציה שלנו כך שהמהדר שלנו לא לצעוק עלינו. יש לנו כמה עיקרי, ואנחנו רוצה לעבור x ו- y. הם לא עשו בהדגמה זו בהרצאה עדיין, יש להם? יש להם לא? אישור. אז אנחנו הולכים ללכת מעל לזמן קצר מאוד זה. אתם תיכנסו לדוגמה זו יותר בעומק, אני חושב, זה שבוע. ואז בשבוע הבא אנחנו באמת יכולים לצלול לתוך למה זה לא עובד. אז יש לנו את החלל הזה החלפת here-- פונקציה. אז חלל רק אומר ש שום דבר לא חזר. ויש לנו int החלפה וint ב. ויש לנו כמה זמני משתנה זה. מקבל שהוקצה ל- B, ולאחר מכן ב מקבל שהוקצה לטמפ ' כך שA ו- B של ערכים כעת עברו. אבל, טוויסט העלילה, זה לא עובד. וחלק ממנו בעצם יש לעשות עם העובדה ש ו- B כאן, אלה שמועברים ב כאן, הם למעשה עותקים של x ו- y. לכן, כאשר הפונקציה מחזירה למעשה, זה עובר עותקים, אבל לא x ו- y של ממש. אז דרך אחת לחשוב על זה הוא that-- להעמיד פנים אלה הם החלפה. בסדר? אז בעיקרי, יש לנו x ו- y אותחל. אבל כאשר למעשה אנחנו לעלות למסגרות אלה עם החלפה, אנחנו עוברים את הערכים מעל לזה, והם אותחלו. והם היחידים שגרים כאן. אז A ו- B לחיות כאן. והם מקבלים החליפו. אבל כאשר אנו חוזרים, אנחנו לא לעשות משהו עם A ו- B. וחופשה ב עם הפונקציה שלנו. וכך x ו- y להישאר אותו הדבר. אתה תקבל יותר לכיצד לתקן את זה ו איך אנחנו באמת להתמודד עם זה אחר כך. אבל זה רק דבר אחד כדי לשמור על סוג של בראש. השתמש בו לעתיד. אל תדאגו אם זה לא הופך את כל התחושה בעולם. הם עותקים הוא הדבר הגדול ביותר. אם אתה הולך לקחת שום דבר מזה, אתה עבר בעותקים. אז המקור נשאר אותו הדבר. כולם טובים? מגניב. אז שורת הפקודה טיעונים. אני בטוח בהתחלה אתם כל היו כמו, חללים אלו גדולים, int ראשיים. ואתם כמו, מגניבים אישור. לא אכפת לי באמת. זה בדיוק מה שאני צריך לכתוב. אבל בתוכניות החדשות שלך, במיוחד בpset זה, ולמה יש גיר על הקרקע? עם pset הבא שלך, אתה עומד לראות את זה. Int העיקרי, arg int ג, מחרוזת v קשת, סוגריים. אז, ממה שאנחנו פשוט היום למד, מה אנחנו חושבים שפרמטר שני או שהמרכיב השני הוא כאן? זה מערך. איזה סוג של מערך? מערך מחרוזות, כן. מגניב. אז ככה אתה הולך להכרזה על אלה עכשיו. האם מישהו זוכר מה אלה לעמוד? לא? הממ? תלמיד: arg ג. אליסון: אז arg ג שומר דלפק. זה int. זה מספר, נכון? אז מה אתה חושב שהמספר הוא של? כן. אז arg c הוא מספר המחרוזות המרכיבים את שורת הפקודה. אז אם היינו do-- למעשה, יש דוגמאות אחרי זה, אז אני לא מקדים את עצמי. זה מספר המחרוזות ש פשוט להמציא שורת הפקודה שלך. לכן, כאשר אתה עושה, כמו, נקודה לקצץ מריו, זה מחרוזת אחת שעושה את זה. ביצירה זו, אתה בעצם להיות האכלת דברים לשורת הפקודה, כפי שאני בטוח שאתה בחורים ש קראו ראה המפרט. כך שבמקרים אלה, אולי אתה יש שניים או שלושה טיעונים. זה הולך להיות דבר שימושי לשימוש. ולאחר מכן arg v, כפי שאמרנו, רק מערך מחרוזות. כך שלמעשה מאחסן את מה ש אתה קלט לתוך שורת הפקודה. אז יש לנו אלה. יש לך כמה לוכסן נקודה להעתיק outfile infile. אז, אם arg c הוא מספר המחרוזות כי אנחנו עוברים לפקודה קו, מה הוא ג arg שלנו במקרה זה? שלוש. בדיוק. אז מה arg v אפס? אז מה הדבר הראשון שעלינו מאוחסן? דוט לקצץ עותק, בדיוק. ואז השני יהיה infile. השלישי יהיה outfile. אז מה לגבי arg v שלוש? זה יהיה ריק, כי זה סוף המערך שלנו, נכון? מגניב. ואז מה לגבי שישית? זה סוג של שאלה מכשילה. איש. האם אנחנו יודעים מה זה? זה לא מוגדר. אין לנו מושג מה זה יכול להיות. זה כל מה שהוא צודק לאחר המערך בזיכרון, ואין לנו מושג מה זה. וזה מסוכן לגעת אלה דברים, כי לכל מה שאתה יודע, זה חלק מסוים של זיכרון ש לא צריך להיות גישה או null. והוא יכול לעשות דברים מטורפים. זה נקרא על-אינדקס שלך חייב המערך שלך. אל תלכו מחוץ לגבולות שלך מערך, או דברים רעים יכול לקרות. אתה חוזר ו, כמו, החוקים פיסיקה נהרסו או משהו. מגניב. האם זה הגיוני לכולם? לא רע. אז עכשיו, כולם חלק אהוב, סקירת pset. יש! אישור. אז לאלה מכם ש לא קרא את מפרט pset, אתה עושה כמה באמת דברים מגניבים עם הצפנה. אתה הולך ליצור קיסר ההצפנה וצופן ויז'נר. בהחלט צריך לקרוא את spec כדי לראות איך עבודה אלה. ואם יש לך איזושהי בעיה על מה זה בעצם צריך לעשות, בבקשה לבוא לדבר איתי, שלח לי או טקסט לי. אני בסביבה. אז יש שלוש עיקרי פה דברים שאנחנו רוצה לדבר על-- רק סוג של הארכת ההרצאה. דברים שאתה אולי לא יודע על, רמזים וכלים שימושיים. אז אנחנו הולכים לעשות סקירה מהירה של ASCII, כי זה הולך להיות סופר חשוב להצפנה של Vigenere. אנחנו הולכים להמרה של שורת פקודת תשומות, ש יהיה מועיל מאוד לקיסר הצפנה. ולאחר מכן מודולו. מגניב. אז, ASCII מפות תווים למספרים. זהו תרשים גדול. אתה צריך זה סימניה במקום. אתה רוצה את זה ל טווח האמצע שלך הראשון. אני די בטוח שכל אחד יש את זה תרשים בגיליון אמצע הקדנציה שלהם. אז ללמוד את זה. אוהב את זה. שמור את זה בהישג יד. זה יהיה שימושי. וכל זה הוא קידוד הממפה האלפביתי, מספרי, ודמויות אחרות ל מספרים למחשב שלנו. כי כמובן, ב הסוף, כל מה שאנו מאחסנים הוא הולך לקבל המרה עד לאפסים ואחדים, ולכן אנחנו צריכים דרך כלשהי כדי לייצג את טקסט ותווים שכולנו רגיל לראות כסוג של מספר. אז כפי שאנו רואים כאן, יש לנו באותיות גדולות, שהוא ממש שם. זה 65. ואותיות קטנות הוא 97. אז אתה יכול להבין out-- כמו שאמרתי קודם, אם היה לך מערך של מספר רב של מחרוזות, מה שכל אחד מהם יש לי שליחות קטלנית null. זה יהיה מרחב. יש חלל special-- אני לא זוכר היכן שהוא כאן. אה. 32 הוא החלל. אז כל מה שממפה אליו. אז יש לנו המתמטיקה ASCII. tip-- Pro בVigenere של, אתה עשוי להתפתות כדי להמיר את המספרים למספרים שלמים, אבל זה בפועל ממש טוב כדי להיות מסוגל להשתמש ב דמויות כמו זו כאשר אתה בעצם לתמרן אותם. אז אם אתה רוצה להשתמש במספרים, אתה יכול. אבל דרך טובה יותר, או דרך ש אנו נוטים לחבב אתכם לעשות את זה, זה אופן שבו אתה למעשה הפחתת תווים. אז אני רוצה שבחורים ל סוג של להבין אלה. למה שלא תנסה כל אחד אחר? אז לעשות את הראשון, שליש, וחמישי. כי אני רוצה לוודא שאנחנו מדברים כל מה שעל שאנחנו צריכים לדבר עליו. אני רק הולך לומר, אחד מ דברים חשובים הו to-- לחכות, אתם לא ראו את זה אחד. אישור אז לעשות את השלושה הראשונים. בואו לעשות את זה. כי יש לנו לדבר על מודולו. אני יודע. המתמטיקה היא קשה. אתה יכול להשתמש במחשבון. זה בסדר. או למשוך את שולחן ASCII, כי אתה כנראה הולך רוצה ש. מגניב. אז אני אלך במהירות אתם באמצעות אלה. אז אנשים שולחנות ASCII עצרו? מהו המספרי שלנו מספר לאותיות קטנות? תלמיד: שבע. אליסון: אז אותיות קטנות הוא 97 ואותיות גדולות הוא 65. אז 97 מינוס 65? קהל: 32? אליסון: 62, כן. אז במקרה הזה, מה ש היה זה להדפיס את? כי ראשון? אם יש לנו ד אחוזים, מה שמצביעים על? תלמיד: מספר. אליסון: אנחנו הדפסה את המספר אמיתי. אז אנחנו בעצם הולכים להדפיס 32 כאן. ואם זה היה אחוז ג, 32 ייתנו לנו מרחב. אז הבנה ש ניתן להדפיס תווים גם כמספרים וכ הדמויות בפועל באמת חשוב, ומשלם תשומת לב לסוגים בפועל שאנחנו עושים כאן. מגניב. אז לכל אחד אחר מאלה, מה שאנחנו הולכים להיות דפוס? תלמיד: אופי. אליסון: אופי. מגניב. אז אם אתם רוצים לדעת, אתה יכול לעבוד אלה בעצמך. אם אתה נתקלת בבעיה, שלח לי. אבל השנייה אחת יהיה להדפיס ב אותיות קטנות. שליש ידפיס אותיות גדולות ב רבע ידפיס את C באותיות גדולות, ו האחרון יהיה א אותיות קטנות וone-- האחרון אנחנו בעצם הולכים כדי להיכנס למה שאחוזים המשוגעים סימן אפילו אומר בכמה שקופיות. אז תנסה אלה בעצמך. אם יש לך בעיה, בבקשה לבוא לדבר איתי. אם אתה בדרך כלל באולם D אדמס, אתה כנראה תמצא סביבי. אז, atoi. כמה מכם ראו את זה פונקציה או שמעה על זה בכלל? כל אחד? מגניב. אז מה זה בעצם עומד להוא ASCII למספר שלם. אז מה אתה יכול לעשות זה, עם קיסר, למי שקורא את המפרט, אתה הולך לעשות לוכסן נקודת קיסר אחרי שאתה כותב את התכנית שלך, ואז אתה הולך ל קלט כמה מספר ש רוצה לקודד המסר הסודי שלך עם. אבל, אם נזכור, כולנו תשומות מאוחסנות כמחרוזות. נכון? יש לנו מערך v arg זה כל מחרוזת הסוג. אז אם אתה רק מנסה למשוך את זה אחד, שזה יהיה חושב שזה מספר אחד או מה ש שבו השתמש הוא למעשה דמות. אז אתה הולך לקבל כמה תוצאות מטורפות. אז אם אתה באמת רוצה להפוך את זה למספר שלם כי אתה יכול להשתמש בו כדי לתפעל המילה שלך או את ההודעה שלך, אתה רוצה להשתמש בatoi. atoi רק ממיר המחרוזת שלך לint. אז אם יש לנו מחרוזת של 12, אם נקרא atoi ביום 12 ב, או מה שקלט שהוא, זה באמת יחזור לך המספר השלם. לא האופי או המחרוזת 12. אשר, כאשר אתה מתחיל תוסיף את זה למספרים, יהיה שונה מאוד, כי המחרוזת 12 היא כמה מספר מטורף ב ASCII, אבל השלם 12 הוא למעשה 12, וזה מה שאתה רוצה. אז אתה רוצה לוודא להשתמש atoi. אתה הולך רוצה את זה בקיסר, כי אתה צריך int המסופק על ידי משתמש בשורת הפקודה. אבל כששמתי אותו בפקודה קו, הוא מאוחסן כמחרוזת כדי להתחיל עם. האם זה הגיוני? אתה לא בהכרח צריך את זה Vigenere. עם Vigenere, כפי שאמרתי לפני, כדאי לך לנסות ולהשתמש ב מתמטיקה ASCII שנראית יותר כמו זה, שבו אתה בעצם באמצעות התווים שאנחנו ניתן לך. מגניב. כולם טוב שם? מדהים. אז מודולו. אז מה אם אתה נתון המספר העצום הזה לקיסר? יש לך הרעיון הזה ש אם אתה בZ ואתה ניתנו מספר שתיים, זה אומר שאתה need-- Z הופך השני מכתב אחרי עצמו, נכון? אז אתה צריך לעטוף איכשהו, ומודולו הוא הדרך לעשות את זה. אז כל שהיא עושה זה נותן לך את השארית של החלוקה המספר ראשון על ידי השני. ויש לנו כמה דוגמאות ל לעשות את זה קצת יותר קונקרטי. אבל בעיקרון, אתה משתמש במודולו כאשר אתה רוצה לעשות משהו לעטוף סביב. אז אם אתה רוצה רק מספרים אחד עד שמונה, אתה יכול להשתמש במודולו על כל דבר אחר מספר, וזה תמיד יהיה להחזיר מספר מאפס עד שמונה. אז כמה examples-- אם יש לנו 55 מודולו 10, זה פשוט נותן לך את שארית 55 חלקי 10, אשר יהיו 5. ולאחר מכן שלוש מודולו חמש, מישהו לנחש מה זה יהיה? שלוש. אז אם יש לך מספר קטן יותר לפני מודולו, זה לא יכול להימשך בצורה שווה. זה אפס. אז זה פשוט מחזיר את המספר עצמו. אז שמונה מודולו שמונה יהיה? תלמיד: אפס. אליסון: אפס. כי זה הולך באופן שווה. 16 מודולו 15? קהל: אחת. אליסון: מגניב. ואז זה אחרון הוא רק ל להראות you-- ייתכן שאתה תוהה, אישור, מה סדר הפעולות כאן? האם אנו מחלקים ראשון? האם אנו מודולו הראשון? אז מודולו מחזיק את אותו קדימות כחלוקה או כפל, והאסוציאטיבי שלה השמאלי. אז זה באותו אופן. אתה תמיד היה עושה סוגריים, אז כפל, חילוק, ומודולו לפי הסדר מהשמאל לימין. כללים אז סטנדרטיים. רק לשים אותו באותה הקטגוריה כחלוק והכפלה. אז במקרה הזה, הייתי עושה זאת יש לי 1 בתוספת 2 נותן לנו 3. אנו מכפילים כי על ידי 2, כך שאנו מקבלים 6. אנו מודולו כי על ידי 2, אשר נותן לנו? תלמיד: 0. אליסון: 0. ואז להוסיף 2, כדי ש מקבל 2 במקרה אחרון זה. אז modulo-- אתה בהחלט הולך לחשוב על דרכים לשלב שכאשר אתה גלישה סביב האלף-בית. אם אתה בZ ואתה צריך להעביר להעביר שלושה ברווחים על מנת להגיע לC, יש שכל קונספט עטיפה סביב. אז אני אשאיר את זה ל אתם להבין איך בדיוק אתה הולך להשתמש בו. אבל בהחלט כלי שימושי לpset השבוע. אני ממש אוהב את זה. זהו אחד psets האהוב עליי. אז אחרי שאתה עושה את זה, אם יש לך חברים, אתה יכול, כמו, לשלוח כל סוד אחר הודעות ולוודא שזה עובד. כי זה יהיה לפענח אותו או משהו כזה. הרבה כיף. וזה הסוף של קטע. גמרתי מוקדם. עדיין יש לי 15 דקות עם אתם, כך שאם יש משהו ש שבו היית רוצה לעבור על נוסף, אני אשמח לעשות את זה. יש עוד שאלות על pset שלך לאלו מכם שהחל או לקרוא את המפרט. כל דבר שדברנו על בשעה האחרונה ושהיינו לך כמו 15 דקותיי לסוג של חזרה על יסודות, אני אשמח ל. או שאנחנו יכולים לקרוא לזה נסגר, ושאתה יכול כל לעזוב ולקחת יותר ממתקים איתך כמו שאתה הולך. אבל אם יש התמהמהות שאלות, בבקשה ליידע אותי. גם אתה יכול לבוא ו לדבר איתי אחר כך. אני מבטיח שאני לא נושך. כל דבר אחר? כולם טובים? התחושה של כולם כמו הם יכולים להתמודד עם pset זה? אתה הולך להיות החבר בסדר. שעות פעילות משרד הן שם מסיבה. מגניב. בסדר. ובכן, במקרה זה, תודה כל מה שאתה כל כך הרבה שבאת. אני מקווה לראות אותך בשבוע הבא. יהיו עוד ממתקים. אולי יש דברים מגניבים אחרים. ואני מצפה לקבל את לדעת כולכם השנה.