ג'ייסון הירשהורן: ברוכים באים CS50 סעיף, כולם. שמי הוא ג'ייסון הירשהורן. אני הרבה TFS שלך, אבל הרבה אנשים יהיו בתקווה שיצטרפו אלינו , תלמידי שלוחה מקוונים או סטודנטים מנסה להסתכל דרך סעיף אם הם פספס הקטע שלהם באותו שבוע או פשוט להתעדכן אם הם רוצים לסקור קצת חומר. אז כמו לכל תכנית הלימודים, שבו כל מכם קראו, לתקן? אני רואה הרבה מהנהן בראש. מדורים לספק לך הזדמנויות כדי לחקור את המהלך של חומר בסביבה אינטימית יותר, כמו גם לצלול לתוך הידיים על פעילויות. אז זה בעצם מה שאנחנו הולך לעשות כל שבוע. אנחנו הולכים לעבור את מה שיש לנו נחוש בדעתו להיות חשוב ביותר נושאים נלמדים בהרצאה, ואת אלה כנראה גם שימושי וביותר סיכוי טוב ביותר לעלות על קבוצות בעייתי ובחידונים, ובקידוד שלך חיים מחוץ לCS50. אז אנחנו הולכים להיכנס לנושאים אלו, לדון בהם, לעבור עליהם, לענות על כל שאלה שיש לך חבר 'ה, ו אז אנחנו הולכים לעשות הרבה בעיות בקידוד בפועל. אתם הביאו את מחשבים ניידים, אשר הוא פנטסטי. זו היא מחלקה למדעי מחשב. עם זאת, הרבה מהתרגילים שאנו עושים, אתה לא צריך למחשבים הניידים שלך. אתה יכול לעשות אותם על גיליון נייר. ככה אתה הולך לעשות אותם בחידונים. ואכן, זה דרך מצוינת באמת יודע כי לך איך לעשות משהו אם אין לך בדוק 50 עד להסתמך על או הצע להסתמך על, ואמר לי אתה עשית את כל שגיאות. אז אתה מוזמן קוד על מכשיר או run.cs50.net, שהוא כלי נוסף שמאפשר לך קוד באינטרנט, אבל אני גם ממליץ, אם אתה לא ניסית את זה, תוך שימוש בגיליון נייר ומנסה בפועל אלה בעיות על דף נייר. כי שוב, זה סופו של דבר מה שאתה הולך להיות ביקש לעשות בחידונים. אז בואו נתחיל עימנו סדר יום להיום. אנחנו הולכים לעבור על כמה נורמות עבור החלק שלנו, ואז אנחנו הולכים לצלול למערכים, פונקציות, ושורת הפקודה ויכוחים, וזה מה שאתם כיסיתי את השבוע האחרון בהרצאה ואז יום שני, ומה תוכל לכסות יותר ממחר. ולבסוף, אנחנו הולכים לדבר על pset2. אם אני יכול לקבל הרמת ידיים, אם אתה לא הסתכל על סט הבעיה שתיים מפרט. אנחנו נגיד לכולם. פנטסטי. נדבר על קבוצות בעייתיים במעט, אבל אם אתה קורא את סט הבעיה מפרט, זה כל מה שאתה צריך לעשות. אם אתה קורא את זה לפני שאתם מגיעים ל כיתה וסעיף ביום שלישי, יהיה לך להיות בעמדה מצוינת. אנחנו יכולים לעבור את קבוצת הבעיה, וזה מה שאנחנו הולכים לעשות בסוף. אנחנו הולכים לעבור ההיגיון, ודא שכולם באותו הדף. אני רוצה להיות מסוגל לעזוב יום שלישי מרגיש מאוד בנוח עם מה שאתה צריך לעשות לקבוצת הבעיה של השבוע, ואם לא תעשה זאת, אעשה זאת בשמחה להישאר אחרי ולעבוד איתך. אבל זה דבר אחד שיש לך לעשות, אבל אני חושב שיהיה ממש חכם, רק כדי לקרוא את ערכת הבעיה מפרט על פי מעמד ביום שלישי, שזה נשמע כמו הרבה חבר 'ה עשה את זה. אני אתחיל עם סדר יום כל כיתה אז אתה יודע לאן אנחנו הולכים. זה גם מועיל לאנשים צופים באינטרנט, כי כל קטע הוא מקודד לפי צבע, כך שאם אתה רוצה לבוא הלוך ורק לצפות 10 דקות ולא מסעיף 90 דקות השלמה, אתה יכול פשוט ללכת למקטע המקודד הצבע ומסתכל על חלק הזה. אז אני כבר ניסיתי לשבור אותם ליפה מודולים שיאפשר לך - אם אתה רוצה לחזור ולסקור, או תלמידים אחרים שהם רק צפייה בקטע לסקור - כדי למצוא את הדבר הספציפי שהם רוצה לשים לב וללמוד עוד על. מתוק. נורמות. אני מנהיג FOP בקמפוס. אני לא יודע אם מישהו עשה FOP. האם מישהו יעשה FOP? אדם אחד עשה FOP. שני אנשים עשו FOP. מדהים. אז FOP הוא השנה הראשונה תחת כיפת השמיים תכנית כיווניות. אנחנו לוקחים את תלמידי שנה א 'אל תוך היער ולעשות החוויות הקסומות ביותר של חייהם, נכון? כן. נשמע בסדר. אז רק רציתי להתחילנו הראשון סעיף דן בכמה נורמות לכיתה ומערכת היחסים שלנו כי אני חושב הם חשובים מאוד. בראש ובראשונה, כמו אלה מכם ש הם החלק שלי וקבל כבר דן בכך דואר אלקטרוני, אני אוהב את זה. זה החלק האהוב עליי של השנה. אני כבר כל כך מתרגש. אני פה כבר במשך שעות היום. אני לא עזבתי את הבניין הזה אלא ללכת לאכול כי אני אוהב את CS50 סעיף, אני אוהב את ההוראה, אני אוהב את העבודה עם אתם. אחת העדיפויות הגבוהות ביותר שלי, אם לא שלי בעדיפות ראשונה, לא רק עבור המעמד הזה, אבל כולל אחר שלי שיעורים וחוגים של, הוא תומכים בכם חבר 'ה, ולעזור לכם, ו עושה כמיטב יכל כדי לוודא שאתה החבר 'ה נפלא, כיף, פורה, מרתק, מרגש ניסיון במעמד הזה. זה מה שאני מחויב. זו הסיבה שאני אוהב לעשות את זה. זה המספר שלי דבר אחד, תמיכה לך החבר 'ה. אם יש לך שאלות כלשהן בנוגע להרצאה, סט הבעיה, סעיף, חיים, גם אם אתה רוצה לדבר על חיים, אתה מוזמן להגיע. יש לך את מספר הטלפון הסלולרי שלי, יש לך הדואר האלקטרוני שלי כתובת, יש לך Gchat שלי. אתה יכול לפנות אליי בכל או את כל אלה בכל פעם, אבל כנראה לא יקבלו תגובה בכל פעם. אני מנסה ולחזור תוך 24 שעות. לעתים קרובות זה יהיה בתוך 20 דקות או 24 דקות. הייתי צריך להגיד ש כדי לעשות את זה במקביל. אבל אתה תקבל תגובה די מהר. אם טקסט אותי שעה לפני בעיה של הקבוצה בשל, אני ארגיע אותך למטה ולעשות תרגילי נשימה עמוקים איתך, אבל אם אתה לא התחיל, אתה כנראה לא הולך עד הסוף, ו אני באמת לא יכול לעזור לך שם למרות שאני אנסה הכי טוב שלי. אז אני אעשה הכל אני יכול לתמוך בך. אנא הרגש חופשי להגיע אם זה בסעיף שוב, בשעתי עבודה אם אתה רואה אותי, או אפילו בחוץ. אני שמח להגדיר זמן להיפגש ועבודה דרך בעיות עם או לעבור על חומר. אז זה מספר אחד, תמיכה. אני אעשה כל מה שאני יכול לתמוך בך. מספר שתיים, פגישה באמצע. כמה שאני רוצה להיות, אני לא כל יכול או כל יכול או כל הידיעה, ולכן אני לא יודע את כל זמן אם מה שאני עושה הוא מקבל על פני, אם אופן בו אני מלמד נושא מסייע לך ללמוד את זה, או אם אתה מבולבלים בנושא אך לא להרים את היד שלך, או שואל אותי או לשלוח לי מייל. או אפילו אם אתה, שוב, מבולבל על משהו על סט הבעיה. אם אתה לא להגיע אליי, אני לא יכול לדעת את זה בודאות. אני הולך לעשות את הכי טוב שלי כדי לבדוק על חבר 'ה, לוודא שהכל הולך טוב, נסה ללמד את הדברים בצורה שיהיה תורם לרוב סגנונות הלמידה שלך, אבל אם יש משהו שאני יכול לעשות, תן לי לדעת. לאורך שורות אלה, אם אתה רוצה קצת עזרה עם סט הבעיה, אני יותר אשמח לעזור לך עם סט הבעיה. אנחנו הולכים לעשות הרבה כי לקראת השני מחצית מסעיף זה. אבל אם לא קראו את הבעיה מגדירה לגבות ולא צפה את ההליכה דרך ולא צפה את המכנסיים הקצרים ומצפה ממני ללמד אותך כל מה שכבר צלם בוידאו באינטרנט או שאתה יכול למצוא בCS50 המחקר, שזה לא ממש הוגן לי או לחברים האחרים שלך. אז בבקשה, אני יותר משמח לעזור לך, אבל אתם חייבים לפגוש אותי ב האמצע. יש לנו טונות של משאבים עבור לך זמין בCS50. הזכרתי כמה מהם. אנא לנצל אותם. אם אתה מבולבל, אני יותר שמח כדי לעזור לך להסביר אותם ב דרך אחרת, אבל זה לא הוגן אם תלמידים להופיע בשעתי עבודה, לא התחיל שום דבר, וזה יום חמישי בלילה ושהם מצפים TF ללכת דרך כל אחת דבר לבעיה קבע בשל בצהרי היום שלמחרת. הגיוני? שוב, בבקשה לפגוש אותנו באמצע. ולבסוף, ציפיות גבוהות. אני הולך להיות כולם לדירוג מי בסעיף שלי, או ניקוד שלך סטים בעייתיים. יש לך בעיה לא חזר להגדיר אפס או אחד עדיין. אנחנו מצטערים על כך. לקח לנו קצת זמן סוף סוף ליישב את חלקיו, ועכשיו אנחנו יכולים להתחיל לדירוג. אני אקבל אותם בחזרה אליך בהקדם האפשרי. אלה הם חלק ממני חניכה בחוץ. אני אקבל אותם בחזרה אליך בהקדם האפשרי. ועבור קבוצת הבעיה שתיים, נהיה על לוח זמנים ונתחיל לקבל אותם די לך במהירות לאחר אתה מפעיל אותם פנימה כאשר אתה מקבל להגדיר את הבעיה שלך בחזרה, אתה יקבל ציונים, כפי שאתה יודע מ קריאת הסילבוס - נכונותו, עיצוב, היקף וסגנון ציונים. כמו כן תוכל לקבל תגובות. ההערות הן חשובים יותר יותר מהציונים. אני חושב שזה בטוח להגיד את זה. ציונים הם רק מספר מאת אחת עד חמש. קשה לקרוא לאלה. קשה לשפר מאלו. אך התגובות תהיה להצביע ספציפיות דברים שאתה לא טוב או אזורים אתה יכול לשפר ובתיתן לך קצת רעיונות לעתיד או החלופי דרכים לעשות דברים. אז בבקשה, בבקשה, בבקשה לקרוא דרך התגובות. אני משקיע הרבה זמן לתוך ההערות האלה. אנא קרא אותם ולא רק לגלול למטה לתחתית PDF, לחפש את הציון שלך, או גולשים באינטרנט ולמצוא את הציון שלך, ולאחר מכן להתעלם על דבריו. זה לא איך אתה הולך להשתפר. זה לא איך שאתה הולך להגדיל הציונים שלך סופו של דבר, רק על ידי הסתכלות על הציונים. נא להסתכל על ההערות האלה. ולאורך הקו של ציפיות גבוהות, שוב, כמו שאמרתי, לך יכול להיות הבקיע מאחד עד חמש. צמדים, שלישי, ורביעיות הם הרוב מכריע של ציונים אתה הולך להיות מקבל. אלה וחמישיים הם שניהם באמת נדירים. תמיד יש דברים אנחנו יכולים לעשות יותר טובים. כל פעם שאני קוד תכנית, יש תמיד יש משהו שאני היה יכול לעשות יותר טוב. אז במקום לומר שאתה מקבל חמישה כל הזמן על כל דבר, ולא עשיתי הכל מושלם, אני לא חושב שכל מאתנו באמת מאמינים שאנחנו - או בתקווה, אנחנו לא עושים את כל מה מושלם כל הזמן. אז אל תהיה מודאג אם אתה לא קבל חמש. חמישה לא על גבי המפה, ארבעה לא למפות על B, שלוש עושה לא על מפת C. זה לא איך הציונים עובדים. כמו דיוויד אמר פעמים רבות, ב הסוף של הסמסטר כל הציונים שלך ו התרומה שלי, TF שלך, לבוא יחד ולקבוע את ציון סופי עבורך. אבל שוב, זה לא חמש, , ארבע, ב ', וכולי. אז אני הולך יש ציפיות גבוהות לחבר 'ה. אני הולך לצפות בעיה טובה סטים ואני הולך לתת לי לך משוב ככזה. וזה לא הולך לאומר שאתה הולך לקבל ציון גרוע. אתה מדורג במונחים של ההתקדמות שלך משבוע לאפס קצו של הקורס. ולבסוף, במונחים של גבוה ציפיות בכיתה, אני אוהב כש אנשים להשתתף. אני מבין כמה אנשים להרגיש יותר או פחות נוח להשתתף. אנשים אחרים משתתפים לא על ידי הרמת היד שלהם ו מדבר כל הזמן. אבל אנחנו במעמד הזה הולכים להיות עושה הרבה בעיות קטנות, הרבה שאלות מיני, ולאחר מכן כמה קידוד גדול יותר בעיות. אז בהחלט עובד התרגילים האלה החוצה כאשר אנחנו עושים אותם במחשב שלך או על גיליון נייר. אבל אני גם אתן לך קצת זמן לפני מישהו אי פעם יש לענות על חלק מהשאלות שאני שואל. אז בגלל שאני אתן לך קצת זמן תחשוב על זה, כי אנחנו הולכים לעשות דברים בשותפים לפעמים, אני מצפה שכולם להיות מעורב במידה מסוימת. ומחוסר מונח טוב יותר, יש כנראה יהיה קורא קר, אשר מקום שבו כולם יהיה סיכוי לחשוב על התשובה, ולאחר מכן אני אתקשר עליך, ולאחר מכן אתה תגיד את התשובה. אל תדאגו, לפחד על זה. אני כבר עשיתי את זה בעבר ואנחנו כבר נמצאו שזה הרבה יותר מוצלח, קראו גם מחקר חינוכי עליו כדי לקבוע אם או לא היה טקטיקה. טובה זה מאוד מועיל, במיוחד אם אתה לתת לתלמידי זמן לחשוב על תשובות ולא עושה אותם רק לבוא ואומר את זה מייד את בת. אבל אם אתה לא מרגיש בנוח התשובה, אני גם די טוב ב חישה את זה, ואנחנו לא הולכים לשים אותך על המקום, במיוחד על המצלמה, למרות שאף אחד מן אתה על מצלמה עכשיו. אז אלה הם הנורמות שיש לי. עוד דבר אחד לאורך הקווים של פגישה באמצע. אני הולך לתת לך את החבר 'ה המון פידבקים. תן לי בבקשה משוב גם כן. יש אתר אינטרנט, sayat.me/cs50. אז זה משוב כנים. אם אתה רוצה לתת לו בסעיף, אני מקבל דוא"ל בכל פעם שזה קורה. אנחנו ניקח הפסקה בקצת, אז אני להסתכל דרך המשוב לאחר מכן. אם אי פעם יש לך משוב, בבקשה לתת לי את זה לשם. אם תיתן לי משוב על שאלה, זה נפלא, אבל זה המדריך שאתה עושה בסוף. אבל זה יהיה בסוף הסמסטר כל כך אני לא אהיה מסוגל לקחת את כל זה משוב ולהפוך אותה להוראה אתם טובים יותר. אז בבקשה, אם יש לך משוב, לתת לי את זה. אני אוהב את המשוב. חזרה לFOP, אנחנו מקבלים משוב כל הזמן. אתה יכול לתת לי פלוסים, דברים טובים, תות, דברים שאני יכול לשפר. אתה יכול להגיב על התלבושות שלי. שלא יהיה מועילה כמו, אבל אתה מוזמן להגיב על כל ו הכל. אנא, אנא תן לי משוב. אני מעריך אותו הרבה וזה אומר לי המון. אחד נורמה יותר, כיף. אנחנו הולכים להיות הרבה כיף. יש לקוות בקורס זה, תוכל יש הרבה כיף. תהיה לנו סוכריות בסעיף. תהיה לנו מוסיקה. אנחנו נהיה בתקווה להכיר אחד עוד מעט טוב, ולכן אני רוצה זה יהיה כיף, חוויה מרתקת. אני יודע שכמה מכם נרדמתי ב את ההרצאות שהיו לך מוקדם יותר היום, כך אני מקווה שלא להיות במקרה עכשיו. ואם זה המקרה, עכשיו, רק לא נוחר משום שאולי להיתפס על מצלמה. מתוק. שאלות, הערות, או החששות לפני שאני ממשיך הלאה על כל דבר שיש לנו דיבר על? גדול. אז אנחנו הולכים ללכת למערכים ראשונים. זה איך אתה להפוך את מערך. אנחנו כבר ראינו את זה קודם. יש לך סוג הנתונים, יש לך שם, ואז יש לך גודל. ממש כאן, אני יוצר שני מערכים. הראשון הוא מערך של תווים, ויש לו 26 מקומות. השני הוא מערך של ציונים, וזה שלושה רווחים לתקופה של שלושה מספרים שלמים. כן? תלמיד: האם כל אלה שקופיות זמין אי שם בשבילנו? ג'ייסון הירשהורן: שאלה גדולה. השאלה הייתה, הם כל אלה מחליקים זמינים? כן. כל שקופיות אלה יהיו זמינים, ובעתיד, אני לשלוח אותם אל שלך לפני הקטע. אבל היום, בגלל זה הוא ראשון שבוע, היו לנו התחלה מאוחרת. אז בדרך כלל, תקבל שקופיות אלה, אך הם יהיו מקוונים וזמינים אני אשלח לך אותם מייד אחרי השיעור. יש עוד שאלות? אז שוב, מערכים הם תיבות, לחוסר מילה טובה יותר, שמחזיקה מרובות אלמנטים של סוג נתונים אחד, והם זה לצד זה בזיכרון. וכך שוב, זה איך אתה יכול להפוך את שני סוגים של מערכים. אז אחרי שעשית את המערך שלך עם הקו ראשון ש-- ציוני int, סוגר סוגר שלוש, קרוב - לך רוצה לאתחל אותו. אתה רוצה לשים כמה ערכים שם. וזה איך אתה לשים כמה ערכים ב שם, רק בבחירת מנוכי העונתיות ו כותב את המספר. בואו לצייר את זה על הלוח. האם כל אחד יכול לראות? כל אחד יכול לראות. מתוק. אז זה הולך להיות שלי מערך נקרא ציוני. כפי שאתה יכול לראות, זה גודל שלוש. ישנם שלוש קופסות לשם. כל אחד יכול להתאים את מה סוג של סוג הנתונים? תלמיד: מספר שלם. ג'ייסון הירשהורן: מספר שלם בתחום הזה. כתבנו עשרות int, והמילה הראשונה הוא סוג הנתונים שהולכים ללכת בתיבות במערך זה. כך שאני יכול להתאים לשלוש. למה יש לי אפס עד יש על הלוח? למה זה אומר אפס ציון שווה 1? מזכיר לי את השם שלך. תלמיד: קורט. ג'ייסון הירשהורן: קורט. סטודנט: כן. ג'ייסון הירשהורן: למה? תלמיד: כי המדד הראשון הוא אפס, אנחנו מתחילים לספור על אפס. ג'ייסון הירשהורן: אז אנחנו מתחילים לספור על אפס. זה בדיוק נכון. זה החלק המבלבל וטיול אותך, במיוחד כשאתה מנסה לחזר באמצעות מערכים, שאנחנו עושים בקצת. אנחנו מתחילים לספור על אפס. אז אם אני רוצה להתייחס לראשון תיבה, זה לא תיבה אחת. למרבה הצער, זה אפס קופסה. תיבה אחת השני הוא, ובכך מקרה, שליש תיבה שתיים הוא. מה תיבה שלוש על? איפה תיבת שלוש היא? או אם אני רוצה לעשות את ציונים, סוגר שלושה סוגר, קרוב, מה זה? אז אתה אמר את אופי null. כל מחשבות אחרות? מה הוא סוגר ציון שלושה סוגר? תלמיד: זה לא באמת קיים, כי אתה מוגדר רק כציונים, סוגר שלוש. ג'ייסון הירשהורן: אז אתה אומר זה לא באמת קיים. במקרים מסוימים, כאשר יש לנו עסק עם המיתרים, בדרך כלל אנו מכניסים null דמות בסוף. אנחנו נגיע לזה בשנייה. אבל במקרה הזה, יש אין כאן תיבה שלישית. אז התיבה האחרונה בכל מערך הוא בגודל מינוס 1. אז אם יש לנו מערך של הגודל n, התיבה הראשונה היא על אפס, את האחרון הוא בn מינוס 1. ובמקרה זה, זה לא קיים. יש משהו כאן ב זיכרון אבל זה לא שלנו. אנחנו לא בעלים שלה. אנחנו לא בקשו את זה. אז אם אנחנו מנסים לגשת אליו, שבו אנו יהיו לעשות בקצת, אנחנו כנראה הולכים להסתבך בצרות. במקרה זה, אני מאתחל אותי מערך עם שלושה משתנים. אנחנו מכניסים אחד בתיבה אפס, שתיים בתיבה אחת, ושלוש שתיים בתיבה. האם יש למישהו שאלות על אתחול מערך? אז הלכנו על זה רק עכשיו. ציונים, סוגר שלוש, קרוב סוגר שאינו קיימים. אנחנו צמודים אפס במדעי מחשב, אז אנחנו מתחילים לספור על אפס. התיבה האחרונה לרשותנו, זה הוא התיבה השלישית, אבל זה נקרא תיבה מספר שתיים. למטה, זו אלטרנטיבה דרך של אתחול מערכים. אז במקום ליצור מערך על אחד קו, ממלא את התיבה הראשונה, ולאחר מכן התיבה השנייה, ולאחר מכן התיבה השלישית, אתה יכול לעשות את כל זה בשורה אחת. כך שבשורה, שני המערכים. זה יוצר את אותו מערך בדיוק כמו מה שיצרנו כאן, אבל זה פשוט עושה את זה בשורה אחת. עכשיו יש לנו יצרנו המערך שלנו. בדרך כלל ברגע שאתה יוצר מערך, אתה רוצה לעשות משהו עם זה, בין אם זה למלא אותו או לקבל את הדברים מחוץ לזה ולהדפיס אותם על המסך. במקרה זה, אנחנו הולכים דרכנו מערך ציונים, שבו אנו מאותחלים על השורה הראשונה כאן באפור. ולאחר מכן בשורה השנייה, אנחנו מתחילים iterating באמצעות המערך. האם יש למישהו שאלות על המבנה ללולאה? אז זה ללולאה. יש לנו המצב הראשוני שלנו, ולאחר מכן מצבנו הסופי, ואז אנחנו לחזר, אני, כל לולאה. ובסוגריים המסולסלים בזה עבור לולאה, מה קורה אם אני היה לרוץ תכנית זו? מישהו יכול להגיד לי מה היינו מקבל? [? Matu? ?] Matu: להדפיס את כל הציונים בכל שורה. זה יהיה להדפיס כל ציון בשורה נפרדת. ג'ייסון הירשהורן: מה בדיוק הייתי זה להדפיס? סטודנט: זה יהיה להדפיס אחד, אז שתיים, ואז שלוש. ג'ייסון הירשהורן: בדיוק. זה יהיה להדפיס אחד, ואז שתיים, ואז שלוש, כל אחד בשורות נפרדות, כי אנחנו עוברים מערך ואתה רואה ששני, printf הצהרה, ציוני i. אז בסיבוב הראשון שלנו לדרך לולאה, אני שווה אפס, מה שאומר שאנחנו מקבל את הערך אפס בציון - אשר, אם אנחנו חוזרים ל התרשים שלנו, הוא אחד - ומילוי - אה, זה אומר ג. זה צריך להיות% d. אני אסדר את זה קצת כש אני יד שמחוץ לחבר 'ה. אבל אנחנו מציגים מספר שלם כך שזה צריך להיות% d ממש כאן, ולא% ג. מהו ג% ל? תלמיד: תווים. ג'ייסון הירשהורן: תווים, בדיוק. מהו שני? אם אתה לא רוצה לעשות% לד שלם, מה עוד אתה יכול לעשות? תלמיד: אני. ג'ייסון הירשהורן:% i, בדיוק. אז שאלות בנוגע iterating באמצעות המערך? אז מה קורה אם אנחנו עושים את זה? במקום לעשות לי הוא פחות מ שלוש, אנחנו הוא פחות או שווה לשלוש. מה קורה כאשר אנו מפעילים את הקוד הזה? כן, אנני? תלמיד: הם הולכים להדפיס דברים מוזרים על הקו הרביעי. ג'ייסון הירשהורן: אז אתה אומר, האם זה הולכים להדפיס את הדברים מוזרים על השורה הרביעית? האם יש למישהו תשובה לשאלתה? אז רוב הסיכויים הם שכאשר אנחנו מקבלים - כך בסיבוב הרביעי באמצעות לנו לולאה, בדיוק כמו שחשבת, אנני, זה יהיה שלושה ציונים שסוגר, שכבר הבינו שלא עושה קיימות, ואנחנו הולכים לנסות ולגשת לזה, להדפיס אותו החוצה, להשתמש בו בדרך כלשהי. אז המחשב יהיה כנראה כועס עלינו. אתה צודק. זה יכול להפסיק את התכנית לגמרי. זה יכול להדפיס משהו ממש מוזר. אתה לא יכול להגיד בודאות. רוב הסיכויים הם שזה בטח מקבלים כועס על לך ופשוט להפסיק מייד. אבל זו טעות נפוצה יהיה לך שבו אתה ממש ליד על ידי אחד בכל הסוף, ומדובר בבאג שיהיה להציק לך בכל הקידוד שלך. דרך אחת שאני אוהב לעשות היא רק על לוח לבן, לעבור את כל איטרציה של הלולאה על יד או על נייר כדי לראות מה שקורה, ואז אתה בדרך כלל מבין, אה רגע, אני לא צריך הלכתי פחות או שווה לשלוש. הייתי צריך לעצור בשתיים, שהוא מה קורה אם המצב שלך הוא פחות משלוש. כל שאלות עד כה? מתוק. אז כל מה שיש לך את המחשבים שלך פתוחים. אנחנו הולכים לתת לך 02:58 דקות כדי לכתוב תכנית ש יוצר מערך עם המספרים השלמים אחד עד חמש ולאחר מכן מדפיס את כל מספר שלם בשורה חדשה. ואם יש לך שאלות, להרים את היד שלך. אני שמח לבוא. כמו שאמרתי, בואו ניקח שלושה דקות לכתוב את זה. האם כולם בסדר אם אני הולך ל חלון חדש ולסגור את זה? אני מצטער אם לא היה לך סיכוי כדי לסיים, אבל אנחנו הולכים לעשות את זה יחד עכשיו. אז על המסך, יש לי # include cs50.h, # include stdio.h. מישהו יכול להגיד לי מה שני הקווים האלה עושים? מייקל? תלמיד: הם כוללים את הספריות שCS50 עשה ושיש לו סטיב הציל לך להשתמש בו כדי להקל על חייך. ג'ייסון הירשהורן: אז אתה אמר שהם כולל ספריות, אחד שCS50 עשה, cs50.h, ואחד שהוא פשוט סטנדרטי, מגיע עם חבילת C, stdio.h. מה זאת אומרת כוללת הספריות, אם כי? האם אתה יכול להיות קצת יותר ספציפי? תלמיד: זה עושה את זה, כך שאתה יכול להשתמש במילות קוד מסוימות שתהיה לי לתפקד יקרה מבלי ללכת ולהפוך את פונקצית ג עצמך. ג'ייסון הירשהורן: האם אתה יכול לתת לי דוגמה? סטודנט: כמו printf הוא אחד שאתה יכול להשתמש. ג'ייסון הירשהורן: printf. אז אתה אמר printf הוא אחד מאלה פונקציות שבו ולא יצטרכו לכתוב printf בעצמך, הוא printf כלול למעשה בstdio.h, כך ש יכול פשוט להשתמש בו ומניח שזה יעבוד. ב stdio.h, אם פתח את הקובץ, האם זה כולל כמה printf עבודות, את כל הקוד עבור printf? למה אתה מטלטל את הראש שלך? תלמיד: בגלל קובץ הכותרת פשוט כולל את ההצהרה על הפונקציה. ג'ייסון הירשהורן: בדיוק נכון. קובץ הכותרת פשוט כולל ההצהרה על הפונקציה. אז בעצם, כאשר אתה מהדר את זה, פגע הפוך רוזן, שנעשינו ב שני, המהדר יודע שאם אתה משתמש printf, printf קיים. זה הולך להיות מוגדר במקום כלשהו. זה לא בעיה בשבילך להשתמש בו. ואז בשלב מאוחר יותר, זה יהיה לכלול אלה ואפסים שבעצם מכילים היישום של printf ו למזג אותם עם הקוד שלך. איך אתה לוודא שזה כולל את אלה ואפסים, למשל, לקבל את המחרוזת? תלמיד: קבל מחרוזת הוא בcs50.h. ג'ייסון הירשהורן: נכון. אז זה אומר לקבל את המחרוזת קיים, ההצהרה על הפונקציה. אבל אז אלה ואפסים, בינאריים קובץ הכולל למעשה יישום המחרוזת לקבל? איך אתה לוודא כי הולך עם התכנית שלך? סטודנט: לעבור מקשר ב ויכוח שורת הפקודה. ג'ייסון הירשהורן: לעבור מקשר בויכוח שורת הפקודה. איך אתה עושה את זה? תלמיד: זה L-קו בצלצול ג'ייסון הירשהורן: בדיוק נכון. אתה אומר-l cs50, נכון? זה כולל את אלה ואפסים. סטודנט: אבל עושה הפוך זה בשבילך, נכון? ג'ייסון הירשהורן: בדיוק. הפוך את עושה את זה בשבילך, אבל סופו של דבר, לא יהיה לך הפוך, או תצטרך לעשות הפוך בעצמך, אז זה דבר טוב שיש לזכור. אם היית הולך להשתמש באחד מאלה ספריות אחרות, לא רק שיש לך לכתוב ו# כולל לאחר מכן בספרייה. אתה גם צריך לקשר אותו פנימה ואלה שני דברים שונים. L-cs50 שונה מ # כולל cs50.h. אז יש לנו סוגריים מסולסלים void main int, ועכשיו אנחנו הולכים לקוד בתוך ראשי. השורה הראשונה שיש לי כאן היא תגובה שאומר, ליצור מערך עם ints אחד עד חמש. מה היא מילה טובה לתאר את מה שאני יש כרגע על המסך, פשוט הערות בתוך ראשי? מה אנחנו קוראים לזה? תלמיד: Pseudocode. ג'ייסון הירשהורן: Pseudocode. תודה לך, ג'פרי. זה בדיוק נכון. Pseudocode. יש לכם ראה pseudocode לפני? הרם את ידך, אם אתה כבר בשימוש pseudocode לפני הבעיה מוגדרת אחת. כמחצית מכם. אני מאוד ממליץ להשתמש pseudocode לשבור בעיות לתוך קטן יותר, יותר קל לנגוס חתיכות. כמו כן, אם אתה עושה pseudocode, אתה יש לך הערות כבר במידה רבה מובנה, כך שאתה לא צריך לחזור ולנסות להבין מה שאתה עושה. אז מישהו יכול לתת לי את השורה הראשונה זה כדי ליצור מערך עם ints אחד דרך חמש? אתה? סטודנט: int ואז אתה יכול להתקשר מה מספר, ולאחר מכן כיכר סוגר חמש. ג'ייסון הירשהורן: מספרים אז int, כיכר סוגר חמש. תלמיד: שווה, ו אז סוגריים מסולסלים. ג'ייסון הירשהורן: שווה, סוגריים מסולסלים. תלמיד: אחת, שתיים, שלוש, ארבעה. ג'ייסון הירשהורן: אחת, שתיים, שלוש, ארבע, חמש. תלמיד: ואז סוגריים מסולסלים ולאחר מכן פסיק. ג'ייסון הירשהורן: ומתולתל פלטות ופסיק. מצוין. להדפיס את כל int בשורה חדשה. יכול מישהו אחר ייתן שלי קוד זה, בבקשה? [? Matu? ?] קדימה. תלמיד: ל( ג'ייסון הירשהורן: ל( תלמיד: אני int = 0 ג'ייסון הירשהורן: int i = 0 תלמיד: פסיק אני פחות מחמישה. ג'ייסון הירשהורן: פסיק, אני פחות מ -5. תלמיד: פסיק, אני + +. ג'ייסון הירשהורן: פסיק, אני + +. תלמיד: סוגריים סגורים, לאחר מכן סד פתוח. ג'ייסון הירשהורן: סוגריים סגורים ושתי פלטות. בתוך הסוגריים המסולסלים? תלמיד: ואז printf "% ד / n" ג'ייסון הירשהורן: מצטער, להחזיק מעמד. Printf "% ד / n, ציטוט סגור. תלמיד: ואז ציטוט סגור, פסיק, ספירה, סוגרי. ג'ייסון הירשהורן: פסיק, לספור, אני סוגר. תלמיד: מצטער, אני סוגר את המספרים. ג'ייסון הירשהורן: מספרים, אני סוגר. תלמיד: מצטער. ולאחר מכן סגר את הסוגריים, פסיק. ג'ייסון הירשהורן: סגור סוגריים, פסיק. אני הולך להציל את זה. אנחנו הולכים לעשות את הספירה. ואיך אני מפעיל את הספירה? תלמיד: קו נטוי הפוך. תלמיד: דוט קו נטוי - ג'ייסון הירשהורן:. / לספור, בדיוק. תודה. . / לספור. אחת, שתיים, שלוש, ארבעה, חמש על קווים חדשים. נראה כאילו שזה עבד. כן, נח? תלמיד: אתה יכול גם לעשות פחות או שווה לארבעה, כמו שהוא פחות מ או שווה לארבעה? האם יש יתרון לעושה פחות מחמש, או רק דרך שונה כותב את זה? ג'ייסון הירשהורן: אז השאלה היא היה יכול לעשות לי הוא פחות או שווה לארבעה במקום אני הוא פחות מחמש. האם זה עובד אותו הדבר? סטודנט: זה צריך. ג'ייסון הירשהורן: כן. זה לגמרי לא היה עובד אותו הדבר. מבחינה סגנונית, זה בדרך כלל פחות מ, ואתה תראה בשנייה שבה אנחנו מחרוזות, אתה יכול להשתמש במשהו נקרא strlen, שראית בעבר, כדי לקבל את האורך של המחרוזת. ואתה לא יכול לעשות פחות מ או שווה strlen. אתה יכול לעשות פחות או שווה strlen מינוס אחד. אז זה פשוט יותר נחמד לעשות פחות מ strlen. כן? סטודנט: ובחידונים בפועל, לעשות אנחנו צריכים לספק הערות עלינו קוד גם כן? ג'ייסון הירשהורן: השאלה היה בחידונים, יעשה לך יש לספק הערות? אז נדבר עוד על חידונים כש הם באים, אבל בדרך כלל, טוב כלל אצבע הוא בכל פעם שאתה כתיבת קוד, לספק הערות. אם אתה מקבל את הקוד הלא נכון, אבל להגיב נכון, אתה יכול לקבל איזה אשראי הן מאותי אם אני לדירוג לך על סט או בעיה בחידון. אז הערות תמיד טוב לספק. מתוק. לספור. עבודה מצוינת. בואו נעבור הלאה. המיתרים. המיתרים. ראינו את זה בעבר בהרצאה. זה פוצץ את דעתי כשאני גילו את זה ראשון. כנראה שזה לא פוצץ אף אחד של אכפת כאן, אבל זה בסדר. מחרוזות הן מערכים של תווים, ו הם בסופו עם, כפי שאמרת קודם לכן, שליחות קטלנית null, אשר היא דמות / 0 זה. אם אנחנו הולכים לצייר על מחרוזת לוח, נצטרך לצייר אותו לכאן. אז כמה זמן היא מחרוזת זו? סליחה. כמה זמן היא מחרוזת זו? תלמיד: [לא ברור]. ג'ייסון הירשהורן: ארבע? למה זה ארבע? תלמיד: בגלל המקום החמישי הוא על דמותה הריקה. ג'ייסון הירשהורן: אז המקום החמישי הוא על דמותה הריקה. אז אם אני היה לרוץ על strlen זה, זה היה נותן לי ארבע. נכון. והמערך, אם כי, אם הייתי לאתחל מערך זה, כמה חללים הייתי אני צריך לבקש? תלמיד: חמש. ג'ייסון הירשהורן: חמש. הייתי צריך לשאול לחמישה, אבל אני יכול רק לשים בארבע דמויות כאן כי אני צריך לשים null כי שליחות קטלנית בסופו של הדבר. אז אנחנו הולכים לכתוב ב" ohai "ו לשים null בשליחות קטלנית בסוף. אנחנו אומרים את זה הוא מחרוזת ים שווה את זה. מה הוא אפס סוגר של? סוגר של אפס, אנני? תלמיד: O. ג'ייסון הירשהורן: O, בדיוק. של סוגר אחד? סוגר של חמש? סוגר של חמש? תלמיד: לא קיים. ג'ייסון הירשהורן: לא קיימת. בדיוק נכון. מגניב. שאלות לגבי הבנה מחרוזות כמערכים של תווים? על אישור, ולאחר מכן. תכנית אחת יותר בשבילכם. כתוב תכנית ששואלת את המשתמש למחרוזת לאחר מכן מדפיס את כל דמות בשורה חדשה. אז בואו ניקח שלוש דקות כדי לכתוב תכנית זו, ולאחר מכן נצטרך לקודד אותו כקבוצה. סליחה. האם אתה צריך לראות את זה? תלמיד: לא. ג'ייסון הירשהורן: אישור. בואו ניקח עוד דקה אחת לקוד הזה, או לפחות להתחיל לעבוד על זה. אז אתה יכול להמשיך לעבוד, אבל אני הולך להתחיל ללכת דרכו. אז לפני שאוהב, יש לי על המסך # כולל cs50.h, # כולל stdio.h. int החלל ראשי. בתוך הסוגריים המסולסלים של העיקרי, יש לי שתי הערות, pseudocode. אחת הוא לבקש מחרוזת מהמשתמש. השני הוא להדפיס את כל דמות בשורה חדשה. אז אנה, אתה יכול לתת לי לשאול למחרוזת מהמשתמש? סטודנט: printf. ג'ייסון הירשהורן: printf? סטודנט: כן. ( ג'ייסון הירשהורן: ( תלמיד: "תן לי את מחרוזת. ג'ייסון הירשהורן: "ייתן לי שלי str - אופס - מחרוזת. תלמיד: / n ") פסיק. ג'ייסון הירשהורן: סיים את המחרוזת, סוגריים סגורים, פסיק. סטודנט: כן. והשורה הבאה, ואז מחרוזת S = מקבל מחרוזת. ג'ייסון הירשהורן: מחרוזת S = מקבל מחרוזת. סטודנט: כן. ולאחר מכן () ג'ייסון הירשהורן: () תלמיד: פסיק. ג'ייסון הירשהורן: פסיק. פנטסטי. אז אני הולך לקבל מחרוזת ו אני הולך לחסוך במה זה? מה משתנה בשם שיצרת? תלמיד: מחרוזת s. ג'ייסון הירשהורן: משתנה נקרא ים. זה סוג מחרוזת. בדיוק. הדבר הבא שאנחנו רוצים הוא להדפיס את כל תו בשורה חדשה. מי יכול לתת לי את הקוד הזה? [לא ברור]? אתה יכול לתת לי את זה? סטודנט: בוודאי. ג'ייסון הירשהורן: בואו נעשה את זה. ומצטער. אני לא רוצה לחזור על מה שאתה אומר בגלל שאתה מקבל את זה נכון, אבל אני צריך לחזור על זה, כך שכאשר הם לתמלל את זה, הם יכולים לקבל את כל הטקסט על התעתיקים. אז אתה פשוט יכול להמשיך לדבר. למרבה הצער, יש לי להגיד את זה עליך. אני מצטער, אבל - סטודנט: זה בסדר גמור. לint i = 0 ג'ייסון הירשהורן: עבור אני int = 0 תלמיד: אני פחות מ - ג'ייסון הירשהורן: פסיק. תלמיד: לפני זה, אנחנו יכולים לשים משתנה כך שאתה מקבל int שם אורך? ג'ייסון הירשהורן: אה, אתה לא רוצה לשים פסיק? אישור. אז מה אתה רוצה לעשות אחרי אפס? תלמיד: אני רוצה להגיע מחרוזת באורך של שעות ו נקבע, כי למשתנה? ג'ייסון הירשהורן: בסדר, אז איך אני עושה את זה? תלמיד: אז אתה עושה אורך int = ג'ייסון הירשהורן: int אורך = תלמיד: S-T-R-L-E-N. ג'ייסון הירשהורן: S-T-R-L-E-N - תלמיד: של S. סוגריים. ג'ייסון הירשהורן: (ים). תלמיד: ואז אני חושב שיש לך לשים פסיק בין שני ints. ג'ייסון הירשהורן: פסיק אחרי אפס? סטודנט: כן. ואז לשים פסיק אחרי זה, ו אתה אומר, אני פחות מאורך. אני פחות מ אורך, אשר הוא משתנה. תלמיד: ואז פסיק. ג'ייסון הירשהורן: פסיק. תלמיד: אני + +. ג'ייסון הירשהורן: אני + +. יש הלולאה עבורנו. מניח את הדעת, בתוך ללולאה. סטודנט: ואז לעשות printf. ג'ייסון הירשהורן: printf. תלמיד: בסוגריים. ג'ייסון הירשהורן: סוגריים, ציטוטים. תלמיד: סוגריים, ציטוטים,% ג / n. ג'ייסון הירשהורן:% ג, בסדר. תלמיד: / n. ג'ייסון הירשהורן: / n. תלמיד: ציטוטים סגורים. ג'ייסון הירשהורן: ציטוטים סגורים. תלמיד: פסיק. ג'ייסון הירשהורן: פסיק. תלמיד: ס ג'ייסון הירשהורן: ס תלמיד: אני סוגר. ג'ייסון הירשהורן: תושבתי. סטודנט: וסוגריים לאחר מכן נסגרו. ג'ייסון הירשהורן: סוגריים סגורים. תלמיד: ואז פסיק. ג'ייסון הירשהורן: פסיק. פנטסטי. אז בואו נחסוך את זה. הפוך לאיית. אוי ואבוי. יש לי כמה טעויות. שגיאה הראשונה ב -11 בקו, הוא אומר, ציפיתי ביטוי, וזה נותן לי הודעת שגיאה שהשנייה int, יש שגיאה. יש איזו שגיאה בסביבה שם. האם מישהו יודע מה שגיאה הוא ש? קורט? תלמיד: אני חושב שזה אמור להיות פסיק ולא פסיק. ג'ייסון הירשהורן: אוקיי, פסיק במקום פסיק. אז הוא שכולנו צריכים לתקן? תלמיד: לא. ג'ייסון הירשהורן: מה עוד אנחנו צריכים לתקן? סטודנט: יש לנו לכלול string.h. ג'ייסון הירשהורן: כלול string.h. איפה אני צריך לכלול את זה? תלמיד: באותו מקום שאתה בכלל דברים האחרים, נכון לאחר לכלול stdio.h. ג'ייסון הירשהורן: בואו תראו אם זה פועל ראשון, כי באופן כללי, אני אוהב כדי לתקן דבר אחד תחילה, ולאחר מכן להפעיל אותו, ולאחר מכן לראות את השגיאות שאנו מקבלים. אז אנחנו הולכים כדי לנקות את המסוף עם השליטה n, בואו עושים כישוף. אז שגיאה אחרת בקו 11. צפוי פסיק. ואני עדיין מקבל שגיאות בקו זה. אז זה לא נתן לי שגיאה אומרת את זה לא מבין מה הוא strlen, אבל זה נותן לי שגיאות על זה קו, אז מה עוד לא בסדר? מארק? מרקוס. תלמיד: האם יש לך להסיר הצהרת int השנייה? ג'ייסון הירשהורן: הסר int השני. בואו ננסה את זה. עכשיו לנקות את המסוף. הפוך לאיית. שגיאה. הכרזה במשתמע ספרייה פונקצית strlen. אז עכשיו אנחנו רואים את השגיאה הזאת. מה אנחנו צריכים לכלול? תלמיד: string.h. ג'ייסון הירשהורן: כלול string.h, אנחנו נעשה # כוללים string.h בראש של המסך. בואו לשמור, לעשות לאיית. עכשיו הידור. אז שוב, את הדברים שאנחנו צריכים זוכר את הקו 12 בלולאה כאשר עבורנו אנחנו מקימים אותו, אני int = 0, אורך = strlen (ים). זו אסטרטגיה פנטסטית. הסגנון של זה הוא גדול, עיצוב של זה הוא גדול. אנחנו יכולים להיכנס לסיבות אלה מאוחר יותר, אבל בדרך זו אתה רק צריך להתקשר strlen פעם אחת במקום כל אחד פעם שאתה מפעיל דרך הלולאה. עם זאת, עליך להשתמש בפסיק שם ואתה לא צריך int שוב. אם אתה מכריז הן כאלה משתנים ביחד, אתה לא צריך int שוב. ולאחר מכן, אם אתה הולך להשתמש strlen, אשר ספרייה אחרת פונקציה לא נכלל ב stdio.h או cs50.h, לעשות הקפד לכלול string.h. קורט? תלמיד: אז אם אתה לא צריך לומר את מה שהוא סוג האורך, עושה את זה אומר שזה צריך להיות int? לא יכול להיות לך שני שונה סוגים יש? ג'ייסון הירשהורן: אז אתה יכול יש שני סוגים שונים. אורך אף הוא int כאן,. אורך הוא int כי זה פסיק ולאחר מכן את אותו הדבר. תלמיד: אז הוא מניח שזה הולך להיות אותו הדבר כמו בפעם הראשונה? ג'ייסון הירשהורן: בדיוק. אנחנו לא הולכים לעשות את זה עכשיו, אבל אתה יכול לכלול שני משתנים על אותו קו תוך שימוש בסוג נתונים אחד. אז x int, y ייצור שני משתנים. אז x int, y, אם אנחנו עושים את זה, זה נותן לי לי x ו-y משתנה שאינו בשימוש, כי אנו לא משתמשים בם. אז לשים חלל הוא רק לפני טריק מפואר, אם אתה לא משתמש משהו, כדי להשתמש בו. אבל כפי שאתה רואה, אני יוצר X ו-Y באותה השורה עם פסיק. זה יוצר שני מספרים שלמים ממש שם. אז כן, אפשרי לחלוטין ליצור שני דברים על אותו הקו מופרד על ידי פסיק. בואו להיפטר מאלה, אם כי. אז יש קסם. תודה לך חבר 'ה לקידוד זה בשבילנו. בואו נעשה את זה עוד פעם אחת, להפעיל אותו. תן לי את מחרוזת. [לא ברור], שעשית את רובו. מה את המחרוזת? תלמיד: שלום. ג'ייסון הירשהורן: שלום. H-E-L-L-O, כל תו בשורה אחת. נראה נהדר. בואו להפעיל אותו שוב. תמיד הולך לבדוק למקרים פינתיים. מה מקרה פינה טוב כדי לבדוק? תלמיד: מספר? ג'ייסון הירשהורן: מספר. אז אני אשים ב1, וזה מדפיס את 1. זה לא מבקש מכתבים, ולכן זה נראה כמו מספרי עבודה. מקרה פינה טוב לבדוק. מה פינה טובה נוספת כדי לבדוק את מקרה? תלמיד: מחרוזת ריקה. ג'ייסון הירשהורן: הממ? סטודנט: כמו מחרוזת ריקה. ג'ייסון הירשהורן: מחרוזת ריקה. אז בואו לא לשים בשום דבר. ומה מקבל הדפיס? סטודנט: שום דבר. ג'ייסון הירשהורן: שום דבר. נראה כאילו זה עובד. אתה יכול לנסות יותר מקרי פינה, אבל בדרך כלל מספרים, נתונים שונים הוא מצוין לנסות, כמו גם שום דבר. שום דבר, אפס, תשלילים תמיד דברים גדולים כדי לנסות ודברים שאתה צריכים בדיקה, דברים בהחלט נצטרך לבדוק ולבדוק 50 יבדקו אם קיימים. שאלות לגבי spell.c? זה בסדר, תן את הראש לאחור. יש לי אחד יותר תכנית בשבילכם לכתוב. זה נקרא students.c. זוהי תכנית ששואלת את המשתמש עבור חמישה שמות, ולאחר מכן בוחר באופן אקראי ומדפיס את אחד השמות. תכנית זו היא קצת יותר מעורב יותר משני האחרון שכתבנו, אז למה שלא ניקח חמש דקות קוד זה בנפרד, ואחר כך קוד זה כקבוצה. תכנית זו גם כרוכה בכמה דברים ייתכן שלא ראה לפני כן, כך שאם יש לך שאלה על, איך לעשות אני עושה את זה, להרים את היד שלך. אני אבוא ואצביע לך בכיוון הנכון. אבל אנחנו גם עושים את זה כי זה תהיה דרך טובה להכניס קצת נושאים שהם מסובך. כך זה עובד, נכון? סטודנט: כן. ג'ייסון הירשהורן: בכל פעם שאתה פונה ב להגדיר את הבעיה, יש דרכים רבות לעשות את זה, אבל קצת יותר אלגנטי יותר מאחרים. תן לנו לצלול פנימה # כולל cs50.h. # Include stdio.h. החלל עיקרי int, סוגריים מסולסלים. בתוך הסוגריים המסולסלים, יש לי שתי הערות. הראשון הוא, לשאול משתמש במשך חמישה שמות. השני הוא, באופן אקראי לבחור ולהדפיס את אחד השמות. אז בואו לעשות את הראשון, לשאול המשתמש במשך חמישה שמות. מי ששאל את המשתמש לחמישה שמות ויכול להגיד לי איך לעשות את זה? רק שני אנשים שעשו את החלק הראשון. שלושה אנשים עשו את החלק הראשון. ארבעה, חמש. טום, איך אתה עושה את זה? תלמיד: היית להכריז על מחרוזת ולאחר מכן שמו, סוגר חמש. ג'ייסון הירשהורן: מחרוזת שם סוגר חמש. אז מהו הקו הזה עושה, מחרוזת שם סוגר חמש? סטודנט: תכריז מערך של מחרוזות. ג'ייסון הירשהורן: זה מערך של מחרוזות. כמה חוטים הולכים כדי שיתאים לכאן? תלמיד: חמש. ג'ייסון הירשהורן: חמש. מצוין. אנחנו הולכים לקרוא לזה שמות כי אנחנו הולכים לקבל את אלה מרובים. אוקיי, הבא? סטודנט: ואז אתה יש ללולאה - ג'ייסון הירשהורן: ללולאה. תלמיד: - עבור i = 0. ג'ייסון הירשהורן: עבור (אני int = 0. תלמיד: פסיק. ג'ייסון הירשהורן: פסיק. תלמיד: אני פחות מחמישה. ג'ייסון הירשהורן: אני פחות מחמישה. תלמיד: פסיק. ג'ייסון הירשהורן: פסיק. תלמיד: אני + +. ג'ייסון הירשהורן: אני + +. סטודנט: וסוגריים לאחר מכן נסגרו. ג'ייסון הירשהורן: סוגריים סגורים, ולאחר מכן כמה סוגריים מסולסלים. בתוך הסוגריים המסולסלים? תלמיד: ואז printf. ג'ייסון הירשהורן: printf. תלמיד: סוגריים פתוחים, שם% d. ג'ייסון הירשהורן: סליחה? תלמיד: 'שם'. ג'ייסון הירשהורן: 'שם'. סטודנט: ולאחר מכן רווח ולאחר מכן% ד. ג'ייסון הירשהורן: שם, מרחב,% ד. סטודנט: ולאחר מכן / n, ולאחר מכן נסגר. ג'ייסון הירשהורן: שם אז, מרחב, סגור סוגריים%, d / n. תלמיד: פסיק, אני + 1. אני מצטער. ציטוט סגור, ולאחר מכן פסיק, אני 1. ג'ייסון הירשהורן: סגור ציטוט, פסיק, אני 1. סטודנט: כן. ולאחר מכן את השורה הבאה - ג'ייסון הירשהורן: אני + 1. סטודנט: כן. ולאחר מכן השקופית הבאה אני סוגר הוא שמות. ג'ייסון הירשהורן: השורה הבאה אני סוגר הוא שמות. תלמיד: = מקבל מחרוזת. ג'ייסון הירשהורן: = קבל - הון ה-G-E-T - מחרוזת. אופס, סליחה. תלמיד: פתוחים, סגורים סוגריים ולאחר מכן - ג'ייסון הירשהורן: פתוח, סגור סוגריים. תלמיד: פסיק. ג'ייסון הירשהורן: פסיק. אוקיי, אז אתה לאתחל את המערך של מחרוזות, שמות, ולאחר מכן לעבור ללולאה, וחמש פעמים להדפיס את חלק תבקש למשתמש ולאחר מכן לאחסן חמישה המיתרים. האם יש למישהו כל התאמות לזה? טום, אני חושב שכולם מסכים איתך. נראה די טוב. אישור. למה עשית לי 1, אם כי? תלמיד: אני מתכוון, אין לי להיות, אבל אני +1 כך שזה שם אחד שם חמש. אחרת, זה יהיה שם אפס שם ארבעה. ג'ייסון הירשהורן: אז אתה עשית לי 1 כי אחר זה יהיה הדפיס אפס עד ארבע, כי ככה מחשבים חושבים, אבל בני אדם לא באמת קוראים ככה. זה דבר אחר אתה נתקל. לפעמים כשאתה מדפיס משהו למשתמש, אתה רוצה לעשות את זה קצת יותר יפה, ועושה אני +1 במקרה זה הוא דרך לעשות את זה יותר יפה. אני גם רואה חמש פעמיים, שם מחרוזת הוא חמש, אני הוא פחות מחמש. אני יודע איפה יש לך חמש. יש לך את זה ממני אומר לי לך חמישה שמות. אבל אם אנחנו רוצים להפוך את הקוד קצת חזק יותר, דבר אחד אנחנו יכול לעשות הוא כאן, מחוץ לint, אנחנו יכולים לעשות משהו כזה, # להגדיר, ושאנחנו יכולים לעשות שמות 5. אז בעצם, בכל מקום שאני כותב הון N, הון, הון M, E ההון, ההון S, המחרוזת, הוא יחליף כי עם 5 בקוד. או בואו פשוט נקראים לזה - אנחנו פשוט קוראים לזה ספרות. אז אני מגדיר את כל כמוסות מספר שיש 5. אז עכשיו בכל מקום שיש לי את המספר 5, אני יכול להחליף אותו בכל מספר הכובעים. ועכשיו, אם אני רוצה לשנות את המספר של שמות, כל מה שאני צריך לעשות הוא הקו הזה, הקו ארבעה, שבו יש לי # להגדיר מספר 5, לשנות את זה ל 10, או לשנות את זה עד 4. כאשר הקוד שלך מקבל יותר, אתה לא הולך לזכור את כל המקומות שאתה לשים כמה שמות שאתה רוצה, ובשינה על מנת שתוכל לא לפספס אחד, זה דרך טובה לעשות את זה, כדי למצוא משהו למעלה, ואז פשוט להשתמש בביטוי ש בכל מקום לאורך כל הקוד שלך. מרקוס? תלמיד: האם זה מועדף סגנונית מהגדרה גלובלית n קבוע? ג'ייסון הירשהורן: אז הוא ש העדיף סגנונית מהעולם הגדרת n קבוע? אז אתה אומר שאתה יכול לעשות, מספר int = 5? תלמיד: האם יש להם עיצורים ב-C או לא? ג'ייסון הירשהורן: או const - בשווה. אז אתה אומר שרק משתנה גלובלי? סטודנט: כן. ג'ייסון הירשהורן: אז סגנונית, אין בהכרח זכות אחת ענה, אבל שני אלה הם טובים יותר מסתם לזרוק אקראי אלה מספרים ברחבי הקוד שלך. אנו קוראים להם מספרי קסם. כשאני מסתכל על הקוד שלך, או כאשר מישהו קורא דרכו, הם לא רוצים סתם המספרים האקראיים הללו שאינם הגיוני. אפילו את המספר 26, אשר בדרך כלל הוא מספר האותיות באלף הבית, עדיף להגדיר את א"ב עליון ולשמור את המספר 26 במחרוזת ש, אם זה נשמע הגיוני. או על בעיה מוגדרת אחת, ולא - שוב, אנחנו לא מדברים על זה ב הזמן, אבל במקום סתם לזרוק בכל מקום 25 או 10, אתה יכול לשמור את המספר 25 כרבע או כ10 אגורה, וזה עושה את זה יותר קל לי מי שקורא את הקוד שלך לדרך להבין למה אתה בחרת את המספר הזה. וגם בשבילך, אם תרצה אי פעם לעדכן את הקוד שלך, זה עושה את זה קצת חזק יותר. כן? סטודנט: האם קוד זה גם הולך כדי להיות זמין עבורנו אחרי? ג'ייסון הירשהורן: כל הקודים האלה שיש לנו בכתב בצירוף הם הולכים יישלח אליך החבר 'ה וזמינה. כן. אז תשאל את המשתמש במשך חמישה שמות. באופן אקראי לבחור ולהדפיס אחד השמות. מי עשה את הקו הזה? זהו קו trickiest כאן. מצטער, טום. עשית עבודה ממש טובה, אבל זה קצת יותר מסובך. מרקוס, קדימה. תלמיד: ובכן ראשית, אתה הולך צריך לכלול stdlib.h וtime.h. ג'ייסון הירשהורן: אז אתה אומר ב העליון, כולל שתי ספריות נוספות. אתה רוצה שאני כולל S-T-D-L-I-B נקודת H, ספרייה רגילה, ומה היה שני? תלמיד: Time.h. ג'ייסון הירשהורן: # כולל time.h. אז אלו הם שתי ספריות נוספות. אני מניח שעכשיו אנחנו הולכים להיות באמצעות פונקציות הכלולות באלה שתיים, וזו הסיבה שאתה צריך לכלול אותם? תלמיד: אז, קודם אתה הולך רוצה לכתוב srand. ג'ייסון הירשהורן: srand. תלמיד: (זמן (0) ג'ייסון הירשהורן: מצטער. Srand (זמן ( תלמיד: 0. ג'ייסון הירשהורן: 0. תלמיד:)), פסיק. ג'ייסון הירשהורן: עוד paren הסגור? פסיק. אני הולך רק כדי להחליף אפס עם NULL. זה יעשה על אותו הדבר, אבל בדרך כלל, אתה תראה NULL, אשר נדבר על זה קו בשני. תלמיד: בחינה סגנונית טוב יותר? ג'ייסון הירשהורן: באופן כללי, אנשים NULL צודק, אבל אותו דבר. תלמיד: ואז שם int. ג'ייסון הירשהורן: שם Int. תלמיד: = ג'ייסון הירשהורן: = תלמיד: ראנד. ג'ייסון הירשהורן: ראנד. תלמיד: () ג'ייסון הירשהורן: () תלמיד: מספר מודולו. ג'ייסון הירשהורן: מה זה מודולו? האופי? אופי אחוזים? תלמיד: אופי אחוזים. מודולו מספר שהוגדרת למעלה. ג'ייסון הירשהורן: מספר מודולו. תלמיד: ואז פסיק. ג'ייסון הירשהורן: פסיק. סטודנט: ולאחר מכן קו חדש, printf. ג'ייסון הירשהורן: printf. תלמיד: ( ג'ייסון הירשהורן: ( תלמיד: " ג'ייסון הירשהורן: " תלמיד:% s / n ג'ייסון הירשהורן:% s / n תלמיד: " ג'ייסון הירשהורן:% s / n " תלמיד: פסיק, שמות חלל. ג'ייסון הירשהורן: שטח - תלמיד: הו, אני מניח, מה לא שאנחנו קוראים לזה כאן? ג'ייסון הירשהורן: אנחנו קראנו לזה בשמות. תלמיד: סוגר פתוח, שם. ג'ייסון הירשהורן: פתיחת סוגריים, שם. תלמיד: סוגר סגור. ג'ייסון הירשהורן: סוגר סגור. תלמיד:) ג'ייסון הירשהורן:) תלמיד: פסיק. ג'ייסון הירשהורן: פסיק. אוקיי, בואו להציל. בואו נעשה את הקוד הזה. תלמידים. בואו להפעיל את הקוד הזה. תלמידים. לא. / סטודנט. . / סטודנטים. שם אחד. אנחנו נגיד דוד. שם שתיים, RJ. שם שלושה, רוב. שם ארבעה, לוקאס. שם חמש, יוסף. ואז זה מדפיס את יוסף שוב. אז תן לי להפעיל את זה שוב. תן לי לעשות את אותם שמות. דוד, RJ, רוב, לוקאס, יוסף. וזה נתן לי דוד בזמן זה. אז עשיתי את אותו דבר, אבל זה נתן לי לי דבר אחר, וזה כי, כמובן, שאנחנו מבקשים לשם אקראי. אז אני חושב, מבוסס על הנחה שלי משוטט מסביב לחדר, שרוב האנשים כנראה קיבל את החלק הראשון נכון, הקמת מערך ושלאחר מכן מקבל את את כל השמות. אני מדבר על קווי 10 עד 16. אבל שורות 18 עד 21 הן כנראה כמה דברים שלא ראית קודם, אז בואו לעבור אותם. קו זה, NULL זמן srand הוא למעשה - מצטער, בואו נדלג למטה קו, rand (). זה נותן לך מספר אקראי, שלם אקראי. אם אתה מכה אדם רנד, אשר הרבה שעשית - M-N-מרחב R--N-D - במסוף כזה, M--N שטח R--N-D, על Enter. היית לבוא למדריך ול יהיה מסוגל לקרוא שראנד בתים אקראיים פסאודו num יציאות פיקוד לאחר זריעת המספר האקראי גנרטור פעם אחת. אז זה תיאור. זה מה שעושה ראנד, נותן אתה מספר אקראי כאשר אתה קורא לפונקציה הזאת. למרבה הצער, זה לא באמת אקראי כי אם אתה פשוט קורא אקראי מבלי להיכנס לזה קצת זרעים, חלקם נקודת ההתחלה, זה תמיד יהיה לבחור אותו אחד, והוא משתמש בנוסחה כדי לקבוע את הבאה. אז אם אתה קורא לראנד, זה יהיה פשוט לתת לך את אותו דבר. זה יהיה מאוד צפוי. זה באמת לא יהיה אקראי. אז מה שאנחנו צריכים לעשות, למרקוס של הוראות לי, היו ראנד הזרעים עם משהו אחר, וזה מה פונקצית srand עושה. זה זרעי rand עם משהו קצת יותר אקראי מאותו הדבר, ו הוא זריעה אותו עם NULL הזמן, אשר כלומר, רק על ידי אמנה, הנוכחי זמן בשניות. אז אתה יוצא מנקודת הנחה שכולם לא הולך להפעיל את הקוד במדויק אותה שנייה, כך שזה הימור בטוח כי NULL הזמן הוא הולך להיות שונה בכל פעם שהקוד הזה הוא לרוץ. הימור בטוח שכך, ראנד הזרע srand עם משהו שונה בכל פעם אחת. אז על ידי אמנה, כאשר אנחנו רוצים מספר אקראי, אנחנו כותבים את הקו הזה, NULL הזמן srand, כדי לתת לנו הרבה יותר זרע אקראי יותר, ולאחר מכן אנחנו רצים ראנד, אשר נותן לנו מספר אקראי. כן? תלמיד: האם אתה יכול לומר מה אתה מתכוון בזרע? ג'ייסון הירשהורן: זרעים כמו ב-- כך ראנד הולך לקטוף כמה מספר וזה הולך להשתמש בחלק נוסחה כדי להגיע לשם. אז זה הולך להתחיל עם משהו ולאחר מכן להפוך אותו למשהו מבוסס הנחה של נוסחה. אם אתה תמיד נותן לו את אותו דבר, זה תמיד הולך להפוך אותו ל אותו דבר. אז הדבר הראשון שאתה נותן לו הוא הזרע. אז אתה רוצה לתת לו משהו אחר כדי להתחיל עם, ואז זה יהפוך אותו למשהו אחר. ולבסוף, קו 20, % זה נקרא מודולו, וזה מבלבל. זה משהו שהוא קצת שונה כאן, כי אתה לא באמת יש במתמטיקה בחיים אמיתית. אבל בעצם, כשאתה לוקח את ענקית מספר ואתה מחלק ב-C, מה קורה לשאר? תלמיד: זה נהיה קטום. ג'ייסון הירשהורן: זה נהיה קטום. אז 20 חלקי 3 הוא מה? האם זה מה שיחזיר ל לך, 20 חלקי 3. מצטער, 10 מתחלק ב 3. האם זה מה שיחזור אליך? תלמיד: [לא ברור]. ג'ייסון הירשהורן: 10 חלקי 3 רק 3, לא חוזר 3 היתר 1. אז מה 10 מחזירה מודולו 3 רק השארית, 1. אז אם אתה רוצה לדעת מה חילק 10 על ידי 3 בעצם היו, שהיית לעשות 10 חלקי 3, היית מקבל 3 שלך, ואז היית עושה 10 מודולו 3, ו היית מקבל 1. אז היית מבין שחלקו 10 על ידי 3 היא 3, שארית 1. ובתחום הזה, יכול להיות ראנד כל מספר שלם, בעצם. אז מודולו הוא אומר, לחלק אותו על ידי מספר, שהוא במקרה זה 5. ואם אי פעם אתה מחלק על ידי מספר, תמיד יש מספר שלם להיות פחות מ את המספר הזה. אז אם אתה על ידי חלוקת מספר 5, השאר תמיד הולך להיות אפס עד ארבע. זה בדיוק אופן שבו המתמטיקה תסתדר. אז מספר גדול moduloed על ידי קטנה המספר תמיד יחזור שארית ותמיד להחזיר חלק מספר זה נמוך מהמספר שאתה מחולק על ידי. האם יש למישהו שאלות על מודולו, כי זה יבוא במאוד, שימושי מאוד, ולכן אני רוצה לוודא כולם מבין את זה? מגניב. וראינו שהתכנית הזו עבדה. בסדר, ממשיך הלאה. אז הבא, אנחנו הולכים להיכנס פונקציות, ואנחנו הולכים ללכת דרך שאר החומר הזה די מהר, כי אני רוצה להגיע ל טיעוני שורת הפקודה. אז פונקציות הן בעצם, כפי שראית, קופסות שחורות. הם לוקחים את הדברים בפרמטרים הנקראים, הם עושים להם משהו, או לשנות אותם או ליצור כמה תופעות לוואי, ולבסוף, הם ירקו משהו, שהוא ערך ההחזרה. מישהו יכול לתת לי סיבה אחת מדוע היינו להשתמש בפונקציות? אף אחד? אחת סיבות לכך היינו שימוש בפונקציות? אף אחד? ראיתי שתי ידי. מה סיבה טובה? מרקוס? תלמיד: אם יש לך לקרוא אותו נתח של קוד מספר רב של פעמים. ג'ייסון הירשהורן: בסדר, אם אתה צריך לקרוא לאותו נתח של קוד מספר רב של פעמים. ג'ף, האם יש לך מסיבה אחרת? סטודנטים: רק כך ש אתה יכול קוד פחות. ג'ייסון הירשהורן: אתה יכול קוד פחות. נכון. אם אתה רוצה לעשות משהו הרבה - בקוד הקודם, אני יכול לי כתב לקבל מחרוזת חמש פעמים, אבל ללולאה גורמת לזה להיראות יותר נחמד ו אתה צריך לכתוב קוד פחות. פונקציות הן רעיון דומה. אם אני רוצה לעשות את אותו הדבר הרבה, להעביר אותו לפונקציה וקורא לזה לתפקד בכל פעם. שיעשה את הדבר הזה בשבילך. זה סיבה מצוינת כדי להשתמש בפונקציות. אז האנטומיה של פונקציה. פונקציה בדרך נראה ככה. זה יתחיל עם סוג התמורה, אז תקבל את השם. זה ייקח את הטיעונים, אחרת המכונה את הפרמטרים, ובתוך הסוגריים המסולסלים האלה, אתה לכתוב את הקוד שלך. ראינו פונקציה אחת הרבה. זה ראשי. הנה עיקרי על גבי שהיה לי קודם לכן אנטומיה. מה משמעות של int ממש כאן מסמל? מה משמעות של int אומר? כשאני כותב int ראשי (חלל). תלמיד: סוג חזרה? ג'ייסון הירשהורן: סליחה? תלמיד: סוג התמורה. ג'ייסון הירשהורן: INT הוא לחזור סוג, בדיוק כמו שצריך. עיקרי מחזיר int. מהו עיקרי? תלמיד: שם פונקציה. ג'ייסון הירשהורן: הראשי הוא שם של הפונקציה. בדיוק נכון. ומבוטל? מהו בתוך הסוגריים ריקים? תלמיד: זה לא לוקח כל ערך חיצוני. ג'ייסון הירשהורן: חלל אז - נכון. בתוך הסוגריים, אנחנו שמים את פרמטרים או את הטענות הפונקציה לוקחת, מה שקורה בתוך הקופסה השחורה. כשאתה כותב הריק, שאתה אומר זה לוקח שום דבר פנימה חלל מרכזי אז int פירושו העיקרי של לא לוקח שום דבר פנימה בתוך הסוגריים המסולסלים, יש לנו כמה קוד, ולאחר מכן אנו רואים בסוף להחזיר אפס. מה משמעות של חזרה אפס? ובכן, אנחנו מדברים על סוג ההחזרה. עיקרי צריך להחזיר int. זה מה שעושה את הקו הזה. זה מחזיר int, אפס. כמובן, שלא ראו את זה הרבה משום שבתכנות שאנחנו עושים עם המכונות שאנחנו עושים ואת מהדרים אנו משתמשים בימינו, אתה לא צריך את זה קו. העיקרי הוא מיוחד מספיק שהוא יודע כאשר אתה מגיע לסוף ראשי, רק תחזיר אפס אם הכל יתנהל כשורה. למעשה, אם משהו לא הולך טוב, לעתים קרובות עיקרי להחזיר שונה מספר מסמל משהו ש השתבש עם התכנית שלך. אז בדרך כלל כשאתה רואה את קוד, אתה לא כותב תשואה אפס, אבל זה טוב לדעת שזה קורה מאחורי הקלעים כי בכל פעם שאתה כותב עוד סוג של פונקציה, אתה הולך צריך כולל קו תמורה. אם אתה אומר אני הולך להחזיר int, שיש לך לכתוב להחזיר משהו. אם אתה אומר כאן בחלל התחלה, חלל עיקרי בטל, דוגמה, אז זה לא חוזר שום דבר - לא אומר כלום החלל - כך שאתה לא צריך את קו שחזרה. אבל אי פעם שאתה כותב משהו שהוא לא לבטל לסוג התמורה, אתה צריך שורה שאומרת לך וחזרה צריך לשים שם משהו התואם את הסוג. שאלות בנוגע לזה? מתוק. היקפה. זה משהו שיש לנו נגע גם כן. כל משתנה, כפי שאנו יודעים, יש היקף מסוים, וזה בעצם מדבר על בו משתנה עשויים או לא עשוי להיות מופנה. ואני רוצה לומר מה קורה בסוגריים מסולסלים נשאר בתוך הסוגריים המסולסלים. כך לדוגמה, אם אנו מסתכלים על הקוד הזה, אנחנו מגדירים משתנים גלובלי מחוץ לראשי, int, עד כאן בחלק העליון. אנחנו קוראים לעוד int ראשי בפנים. יש לנו כמה סוגריים מסולסלים יותר, ו אנחנו קוראים int אחר. יש לנו שלוש של בקוד. אלה הם לא אותו דבר. יצרתי שלושה משתנים שונים. ואז בתוך אלה מתולתל הפנימיים פלטות, אני אומר = 4. אשר הוא שדבר עליו, הראשון, השני, או שליש? תלמיד: שליש. ג'ייסון הירשהורן: הוא מדבר על שליש. כל אלה בעצם יכולים להיות דיבר על זה בבפרט למשל משום שהיקפם הכל הולך לסוגריים המסולסלים הכמוסים ביותר של אלה. עם זאת, כאשר אתה קורא את דבריו שם, יש משהו שנקרא מסתתר. אז אתה רק להתמודד עם או לתקן או להשתמש המשתנה האחרון, או אחד הכי קרוב אליך. אז פה, בתוכנו, בשליש הזה הוא קרוב ביותר כדי שהשורה, = 4, כך שזה משפיע על שליש. והשורה האחרונה, = 2, אשר הוא שדבר עליו, ראשון, שני, או שלישי? תלמיד: שני. ג'ייסון הירשהורן: הוא מדבר על השנייה. כמובן, השלישי היא קרוב ביותר ל זה בקוד, אבל השלישי לא קיימת מחוץ אלה סוגריים מסולסלים. ברגע שאתה תגיע לזה סגור מתולתל סד, זה כמו שזה נעלם, למעשה. אז רק שתיים שנותרו לך הם אלה שני ראשונים, וכמובן, עכשיו זה הכי קרוב לשנייה אחת. אז זה דבר טוב זוכר על היקפה. לדוגמה, אני בטוח שאתה כבר נתקל זה בזמן שעושה לולאה. אם אתה לאתחל את המשתנה בתוך אל תוך לולאה ואז אתה מנסה לגשת אליו מבחוץ, אתה כנראה קיבל קצת כמו אזהרה, זה משתנה אינו קיים. זה בגלל רעיון ההיקף, שדברים קיימים רק בתוך הסוגריים המסולסלים האלה. סוגריים מסולסלים הם כמו חיבוק ענק ש אתה נותן לקוד שלך, זה דבר אחר דרך לחשוב על זה. אז זו פונקציה אחרת, משהו לחבר 'ה לקוד, hellofunction.c. אנחנו הולכים לדלג כי לעת עתה, אבל זה משהו שאני ממליץ לך לתרגל בעצמך. כתוב תכנית שבשיחות עיקריות פונקציה נוספת שמדפיסה ברכה למשתמש. זה בעצם לוקח את שלום העולם והפשטה שprintf לתוך פונקציה אחרת. אבל אנחנו לא הולכים לעשות את זה עכשיו משום שאין לנו כל כך הרבה זמן יצא כמו שאני היה רוצה. אז הכרזת פונקציה. ראינו את זה בעבר גם כן. אם אתה רוצה לכתוב פונקציה אחרת, אתה צריך ליידע את המחשב ו עיקרי יודע שהוא קיים. אז מה שאנחנו עושים הוא מעל עיקרי, אנו כותבים סוג התמורה, את השם, ו פרמטרים, ולאחר מכן למטה ראשי, כאן למטה, אנחנו בעצם להעתיק את הקו ואז לכתוב את הקוד עצמו. אז ככה, אם אתה קורא לפונקציה בעיקרי בצמרת, יודע שעיקרי שלום קיים, למשל, אם הייתי לקרוא לשלום, ואז זה נראה לי היישום למטה. מה קורה אם אני לא לכלול את זה בשורה העליונה, לבטל את שלום (חלל)? אם אני לא כולל את הקו הזה ושיחות עיקריות שלום, אני הולך לקבל את שגיאה. אני הולך לקבל שגיאה כי המהדר אינו יודע שהדבר הזה קיים. זה דומה למה שאנו אל # כוללים cs50.h. מה בעצם הוא עושה cs50.h היא לשים את המחרוזת שם למעלה. זה לשים לקבל int שם למעלה. זה לשים את כל פונקציה אלה אבות טיפוס עד לפני עיקרי, כך שכאשר אתה קורא להם בראשי, עיקרי יודע שהדברים האלה קיימים. זה מה הקבצים. H האלה לעשות. ואז אם אתה הולך להפוך את עצמו פונקציה, אתה חייב לוודא אתה שם את אב הטיפוס ששם למעלה. כל שאלות על זה עד כה? טיעוני שורת הפקודה. זה מה שאנחנו הולכים לסיים את ב, ולאחר מכן אני מקווה שיהיו לסחוט כמה pset. אני לא יודע אם נהיה מסוגל לסחוט כי בבגלל הזמן, אבל עם אתם שנמצאים כאן, ואם אתה חבר 'ה רוצה לומר אחריו קצת, אנחנו יכול לעבור על זה מבחוץ. אבל אנחנו הולכים לסיים עם טיעוני שורת הפקודה במשך 15 דקות האחרונות. אנחנו ער, מייקל? אתה ער? טוב. אני לא יודע אם אתה ישן בעיניים עצומות. זה יהיה מסובך. טיעוני שורת הפקודה. אלה הם דרך אחת להעביר מידע לתכנית. סופו של דבר, יגיע לאחרים. אבל בעצם, אנחנו הולכים לעצור כתיבת int ראשי (הריק) אם אנחנו רוצים לקחת כמה טיעוני שורת הפקודה. אנחנו הולכים לכתוב את הדבר הזה שם עיקרי int (int argc, מחרוזת argv, בסוגריים. זה מבלבל. זה הרבה אותיות שאינכם נמצאים ב אנגלית האנושית, ולכן אנחנו הולכים לפרוק אותם עכשיו. Argc מייצג ספירת טיעון - ושוב, כל אלה יהיו יהיה זמין באינטרנט - וזה מספר הטיעונים. Argv מייצג וקטור ויכוח, ו אלו הם הטיעונים עצמם. זה מערך של מחרוזות. למעשה ראינו מערך של מחרוזות לפני היום. אנחנו יצרנו את אחת שבעברנו התכנית קדדנו. אז הנה דוגמה. אני כותב. / Ohai cs50 סעיף בשורת הפקודה שלי. Argc במקרה זה שווה 3. Argv סוגר 0 הוא ohai, argv סוגר 1 הוא cs50, argv סוגר 2 הוא סעיף. שוב, argc הוא מספר הארגומנטים, וקצת נסיעה עד שאתה קצת, אנחנו תמיד לספור את שמו של לתפקד כטענה הראשונה. אז במקרה הזה, יש שלוש טיעונים, את השם של הפונקציה ולאחר מכן שני אלה שהקלדתי פנימה בשלב בא, אנחנו הולכים להציל את אלה טיעונים עצמם בargv. ושוב, בדיוק כפי שראינו בעבר, שעשינו זה בתכנית האחרונה שקודדנו. באפשרותך להעביר באמצעות המערך של argv ולקבל את המיתרים הללו. זה בעצם מה שעשינו ב סוף התכנית האחרונה שלנו. אספנו שם אקראי ולאחר מכן הלכנו ל כל מה שסוגר שמות ומודפסים מתוך המחרוזת ממוקם שם. על גבי רק מערך אחד, כי מחרוזות מערכים עצמם, כפי דיבר עליו, אתה יכול לקבל את המערכים של מערכים, שהוא בעצם מה הוא argv. דרך אחת אתה יכול לחשוב על זו היא שורות ועמודות. אני יכול לצייר על זה כרגע. אז argv - זה לא מוחק. בואו לצייר תחת ohai. אז אם כתבתי בסעיף cs50 ohai, אני הולך לחתוך קטע לדוגמה זו. אבל למעשה, רב ממדי שלי מערך, ohai cs50, אנחנו הולכים לעשות את הכת. אז הנה, אני יכול לגשת - אם אני רק נותן argv מספר אחד - זה לא בסדר. מה לא בסדר בתרשים זה? תלמיד: תתחיל מאפס. ג'ייסון הירשהורן: זה צריך תתחיל עם אפס. אני כנראה צריך גם לסובב אותו, אבל מאז שאני כבר צויר עליו, אני הולך להשאיר אותו על שם לעת עתה. אבל זה מתחיל באפס. זה נכון. אני מצטער אם זה קטן. אתם יכולים לראות סוג של? אז אם אני עושה argv 0, אני יהיה לקבל את כל ohai. אם אני עושה 1 argv, אני אביא את כל cs50. אם אני עושה את argv 2, אני אקבל את כל כת. אבל עכשיו, כאמור, מחרוזות הם מערכים עצמם. אז מה אני יכול לעשות הוא שאני יכול לטפל בזה כמערך רב ממדי, ואני יכול לעשות משהו בנוסח 0 argv, 0, מה שנותן לי רק תו 0. 0 argv, 1, מה שנותן לי רק שעות. 1 argv, 3, מה שנותן לי רק 0 זה כאן למטה בcs50. אז בגלל שמייתרים עצמם הם מערכים, אנחנו מכניסים כי במערך אחר. עכשיו יש לנו מערך של מערכים, ואנחנו יכול מדד למערך הראשון שלנו ו אז מדד למערך השני שלנו. וכפי שהיית מצפה, אנחנו עושים את זה רק על ידי לשים את שני אלה - אנחנו עושים את סוגריים המרובעים רק ממש ליד אחד את השני. אז בדוגמה זו, 1 argv הוא cs50 ו 1 argv, 2, כמו שאמרנו, הוא רק 5. האם יש למישהו שאלות על מערכים רב ממדים? אתם עושים מדהים. מתוק. אז יש לנו תכנית אחרת כאן, וזה הדבר האחרון שאנחנו הולך לעשות עכשיו. אז אני רוצה שתכתוב תכנית ה לוקח את השם המלא של משתמש, ורק שתיים שני טיעוני שורת הפקודה, ולבסוף, להדפיס את ברכה ל משתמש הכולל את השם הראשון שלהם. אז למה שלא תיקח שלושה או ארבעה דקות כדי לעשות את זה, ואחר כך נלך על זה כקבוצה, ו אז לעטוף את? ושוב, כאן, כאשר אנו אומרים לקחת שמו המלא של המשתמש לתיאור לבעיה זו, זה צריך להיות הפקודה קו טיעונים, לא משתמשים לקבל מחרוזת. כן, מרקוס? תלמיד: אז כשאתה אומר שתיים הפקודה שורת טענות, היא שבנוסף ל . / לרוץ, או - ג'ייסון הירשהורן: שאלה טובה. האם, כולל. / הריצה, השלושה טיעוני שורת הפקודה. או בכלל. / מותאם אישית, ב מקרה זה, כי זה שמו של קובץ זה. אז argc יהיה שלוש. אבל אני רוצה רק שני טיעונים נתן לתכנית. אני צריך לציין את זה. אני אעשה את השינוי, כי לפני שאני נפרסם אלה ולשלוח אותם לחבר 'ה. סטודנט: מה אם יש שם באמצע? ג'ייסון הירשהורן: אם יש לך באמצע שם, אתה מזל. אני מצטער. או אם אתה הולך רק על ידי שאקירה, אתה גם מזל. כן? תלמיד: לכן, כאשר אנשים אין לי cs50.h, האם הם מגדירים argv כchar argv הכוכב? או שזה עדיין נקרא מחרוזת argv? ג'ייסון הירשהורן: כן. אז מחרוזת, שוב, אנחנו מסכה על מה בדיוק קורה שם. זה הולך להיות אולי פרק ביום רביעי, אבל בקרוב. זה כמו גלגלים עזר. כי בעצם, זה את אותו הדבר. אז בואו ניקח עוד דקה לתכנית זה, ולאחר מכן נעבור על זה כקבוצה, ולאחר מכן כמו שאמרתי, לעטוף. ואני חושב שהם עדיין ממתק נוסף, אז אני מקווה שאתם צריכים לקחת זה, או בבקשה לקחת את זה. מצטער אם אתה עדיין כותב, אבל אני רוצה לצלול ובאנחנו יכול לסיים את זה ביחד. אז כתבתי ב, # כולל cs50.h, # include stdio.h. int הראשי (חלל), מתולתל סד, מתולתל סד, בתוך שלוש שורות של pseudocode, לקחת את השם המלא של משתמש, שתיים ורק שתיים שורת הפקודה טיעונים, להדפיס את ברכה ל משתמש הכולל את השם הראשון שלהם. אז הראשון, לקחת שמו המלא של משתמש. מי יכול לעזור לי לקחת שמו המלא של משתמש? איך אני עושה את החלק הזה? האם אתם עושים חלק ראשון? קח את שמו המלא של משתמש. ובכן, בשביל זה שורת פקודה אחת ויכוח, מה אני צריך לכתוב? מה עליי לשנות על ההצהרה על הפונקציה שלי? תלמיד: אתה לא רוצה זה יהיה חלל ריק יותר. ג'ייסון הירשהורן: בדיוק. אני לא רוצה שזה יהיה מבוטל. מה אני רוצה שזה יהיה? תלמיד: argc Int. ג'ייסון הירשהורן: int argc. תלמיד: מחרוזת argv. ג'ייסון הירשהורן: מחרוזת argv. תלמיד: סוגר, סוגר. ג'ייסון הירשהורן: סוגר, סוגר. זה בדיוק נכון, וזה בעצם איך אני הולך לקבל שמו המלא של משתמש. הם הולכים לשים אותו שם. כך שאף אחד עושה את זה. אז עכשיו אני רוצה שתיים ורק שניים טיעוני שורת הפקודה. אז נח, מה היא דרך שאוכלת אחד לבדוק את מספר הפקודה קו טיעונים שיש לי? תלמיד: אתה עושה אם הצהרה. ג'ייסון הירשהורן: אם הצהרה, בדיוק. מה אני רוצה כתנאי? תלמיד: אם argc גדול מ -3. ג'ייסון הירשהורן: אם argc הוא גדול מ -3. אם argc גדול מ -3, מה עליי לעשות? תלמיד: 1 חזור. ג'ייסון הירשהורן: 1 חזור. יהיה להבטיח שיש לי שתיים ורק שניים? תלמיד: לא. אם argc הוא גדול יותר מאשר 3 ופחות מ -2. ג'ייסון הירשהורן: אם argc הוא גדול יותר מ 3 וargc הוא פחות מ 2. מה הדרך היחידה שאני יכול לכתוב את זה בסתם שורה אחת, או ללא שימוש ש ובוליאני מפעיל? תלמיד: זה לא שווה ל 2. ג'ייסון הירשהורן: אם argc אינו שווה ל 2. בדיוק. אז אם argc הוא לא שווה ל 2, כי ייתן לי תכנית זו, אישית, כשאני מפעיל אותו, ו שייתן לי כמה טיעוני שורת הפקודה? כמה תהיה לי לבדוק? סליחה. תן לי לנסח מחדש את זה. אם argc = 2, כמה דברים עשו המשתמש לכתוב בשורה? תלמיד: אחת. ג'ייסון הירשהורן: רק אחת. אז לפני, היית נכון, נח. מה אני באמת צריך לשים שם? תלמיד: זה שווה 3. ג'ייסון הירשהורן: argc לא שווה 3. אני רוצה להיות שווה 3 כי אני רוצה אישית בתוספת שני האחרים. אז אם התכנית + 3 לא שווים, תחזיר 1. למה אמר להחזיר 1? תלמיד: בגלל ש אומר שזה לא בסדר. ג'ייסון הירשהורן: זה אומר שזה לא בסדר, ומה שהוא הולך לעשות? תלמיד: Re-תנחה את המשתמש. ג'ייסון הירשהורן: זה הולך להיסגר התכנית, כך שהוא יצטרך לרוץ שוב, אבל אין לנו שום דבר לכאן כדי לבקש אותם שוב. אני לא בקשו את זה. אז זה בדיוק נכון. 1 חזור פשוט ייסגר את התכנית. גדול. ולהדפיס את ברכה למשתמש הכולל את השם הראשון שלהם. איך אני יכול לעשות את זה? אנה? סטודנט: printf. ג'ייסון הירשהורן: printf. תלמיד: (" ג'ייסון הירשהורן: ( תלמיד: "שלום ג'ייסון הירשהורן: "שלום תלמיד:% s ג'ייסון הירשהורן:% s תלמיד: / n ג'ייסון הירשהורן: / n תלמיד: ", ג'ייסון הירשהורן: ", תלמיד: argv ג'ייסון הירשהורן: סליחה? תלמיד: argv ג'ייסון הירשהורן: argv תלמיד: סוגריים מרובעים 1. ג'ייסון הירשהורן: סוגריים מרובעים? תלמיד: 1. ג'ייסון הירשהורן: 1. סטודנט: ו) פסיק. ג'ייסון הירשהורן:) פסיק. תן לנו להפעיל את זה. הפוך אישית. . / אישית. זה פשוט להפסיק. למה זה להפסיק? סטודנט: לא לשים את כל טענות. ג'ייסון הירשהורן: אני לא לשים את כל טיעונים פנימה נראה נהדר. אתם מסמרים אותו. אז שוב, אתה נכנס לargv ואתה בדק בתכנית + ההתחלה. אלה הם שתיים חשובים דברים שיש לזכור. אז בשתי דקות האחרונות שלנו לפני שאנו לעזוב, אנחנו לא תקבלו לpset שתיים, אבל כמו שאמרתי, אם אתה רוצה להישאר אחרי במשך 10 דקות, הוא הייתי שמח ללכת על איתכם ההיגיון עבור קבוצות בעייתי אלה. היו לנו הרבה כדי לכסות את היום אז אני לא מקבל אותם. באופן כללי, אני רוצה לכלול כי בסופו של הדבר. אז אם אתה רוצה להישאר בסביבה, להישאר בסביבה במשך 10 דקות. אנחנו נעשה את זה. ואז, כפי שציינתי בהתחלה, pset אפס ואחד, נקבל כי משוב אחזור אליך ב ההקדם האפשרי. המטרה היא לקבל משוב pset אחד, חלק ההערות, לפני pset שתיים נובע. אז אם אתה עשית כמה טעויות או מבחינה סגנונית, דברים יכולים להיות טובים יותר, יהיה לך מידע שאתה כל כך לא לעשות את אותם דברים בpset שתיים. ולאחר מכן בעתיד, תוכל לקבל את כל המשוב שלך והערות pset בחזרה לפני הבא הוא נובע. לבסוף, אם אני יכול לשים אחר התוספת למשוב. זהו הסעיף הראשון שלך. זה היה הקטע הראשון שלי מלמד את זה שנה. ללכת לשם. לכתוב דברים, טוב ורע, ואני אשתמש בו כדי להפוך קטע טוב יותר בפעם הבאה. ואחרון, שוב, אם אתה צריך משהו, תודיע לי. אני יותר משמח לעזור לכם. אם אתה רק רוצה סוכריות, אני תהיה לי ממתקים נוסף. אני שמח להביא לך את זה. זה הולך להיות כמובן מדהים. זהו אחד, אם לא אהוב עליי כמובן, אני כבר לקחתי בכל החיים שלי, ואני מקווה שזה יהיה כי נפלא בשבילך. אז אני רוצה לעשות כל שביכולתי כדי לעשות את זה כי מדהים בשבילך. אני הולך לשלוח דוא"ל אם אתה בסעיף או נח שלי, ו הולך לנסות ולתזמן עם כל אחד אתם זמן לבדוק בלמעלה מ כמה שבועות אז אני יכול לקבל תחושה של מה הרקע של CS שלך, וזה גם יעזור לי חייט אלה חלקים טובים יותר לצרכיך. אז זה מה שיש לי בשורה. שוב, אני אראה אותך מחוץ אם אתה רוצה להיות שם. זה היה בשבוע שסעיף שתיים. תודה לך כל כך הרבה חבר 'ה.