[השמעת מוסיקה] SPEAKER 1: זה CS50 ו זה הוא ההתחלה של שבוע שני. אז, בואו לצלול ישר לתוך משהו שהוא מרכבה, אם אפשר לומר כך. אז, כאן הוא IDE CS50 ולי עצרתי מראש זה screen-- ארור את זה. התראת ספוילר. בסדר. אני כבר משכתי את המסך הזה כאן, שבו יש תכנית מאוד פשוטה. אם לגלול למטה, רוב זה פשוט תגובות, אבל כאן בקווים 13 דרך 17 יש לנו תכנית. זה מבחינה תחבירית בתוקף, מה שאומר שאם אני לקמפל את זה, זה יהיה לקמפל ולהריץ, אבל זה עגלה. תכנית זו טוענת בתגובות למעלה שזה צריך להדפיס 10 כוכבים, אבל זה לא. ומבוסס על הניסיון שלך, או בקרוב להיות ניסיון עם C, אתה יכול להבחין באופן הגיוני מדוע זה, למעשה, מרכבה? כן? קהל: זה הולך מאפס עד 10. זה 11 חזרות. 1 SPEAKER: כן. אז, זה הולך מאפס דרך ושווה ל 10, מה שכמובן הוא 11 חזרות. אז, זה הולך הדפסה, אכן, 11 כוכבים. אז, כנס מדעי מחשב ברוב שפות תכנות הוא, אכן, רק כדי תתחיל לספור על אפס, אבל לספור עד, אבל לא דרך ערך שאתה באמת אכפת. עכשיו, זה דבר אחד ש לוקח קצת זמן להתרגל ל ואפילו שריטה, שנועדה כפי שהיא למתכנתים שאינם או מחשב שאינו מדענים ולילדים במידה רבה, נועד לי אתה מתחיל לספור בדרך כלל באחד. וזה בסדר. בהחלט ניתן להתחיל לספור באחד אם זה יותר נוח. ולספור עד ועד 10, אבל אתה מבין במיוחד השבוע ומעבר לזה כל כך פשוט הרבה דברים בתכנות להניח כי 0 הוא ראשון ספרה שבה אתה לספור, שאתה הולך למצוא את זה קל יותר רק כדי לקבל להרגל הזה של התחלה מאפס ולספור עד הערך אכפת לך עכשיו מ לקבל ללכת. אז, שקבוע ש. אנחנו שינינו את פחות או שווה רק פחות מ. בואו נסתכל דוגמא שנייה כאן. אז, בתכנית זו גם טוענת בה תגובות למעלה שזה צריך להדפיס עשרה כוכבים, אבל זה לא. מה באג כאן? אז, what-- ומצטערים, בואו נהיה ברור. 10 כוכבים. אחת בכל שורה, אבל זה לא. כך, למעשה, תן לי ללכת קדימה ולעבד זה אחד, כי זה קצת פחות לנקות מבוסס על תיאור זה. תן לי ללכת לספריית המקור שלנו. הפוך עגלה נטוי נקודה אחת, עגלה אחת. בסדר, אני רואה 11 כוכבים, ש עדיין בעייתי, אבל הם גם כל נמצאים בקו אחד. מה הבעיה כאן? כן. קהל: [לא ברור]. 1 SPEAKER: כן. אז זה עידון שייתכן זוכר אותי מה שהופך את אזכור קצר של. למרות שהכל נראה די, וזה יפה מסוכסך, וזה נראה כמו סוג של ניילון שבשורה 16 ​​ו -17 הן, אכן, עם כניסה תחת שללולאה. זה לא מהותי. המחשב אינו יודע או רואה שטח לבן. החלל לבן הוא רק ל שלנו בני אדם, מבחינה סגנונית. המחשב יודע מתי יש לך סוגריים מסולסלים, שהיית, אכן, לתקן את הבעיה. לכן, אם אנחנו באמת נכנסנו ו במפורש לשים בסוגריים המסולסלים אלה שלתקן בעיה זו על ידי להבהיר למהדר כי אני באמת רוצה לבצע שתי שורות של קוד שוב, ושוב, ושוב. אבל מה ההסבר הבסיסי? נכון? אנחנו לא צריכים בקפדנות מתולתל פלטה כל הזמן, למרות שזה כנראה הכי טוב בפועל להיכנס להרגל זה בכל מקרה למרות שזה מוסיף שני תווים לקוד שלך. למה? קהל: [לא ברור]? SPEAKER 1: כן אז זה פתרון אחר לגמרי. נכון? במיוחד אם במבט הראשון שאתה עושה לא באמת מעריך את מה שקורה. ובכן, אין ספק שאנחנו יכולים פשוט לעשות שני דברים בבת אחת ורק למנוע את הבעיה לחלוטין. וזה בסדר, אבל עכשיו, למטרות של היום, מה ש ההסבר לבאג? למה היו כל הכוכבים האלה בשורה אחת? כן? קהל: נראה כי אם יש לך שורה אחת של קוד, אתה יכול לעשות את זה בלי אלה. 1 SPEAKER: בדיוק. זוהי רק מוסכמה אנושית. אנשים מבינים שזה קצת מעצבן או משעמם יש לשים סוגריים מסולסלים כל של הזמן אם כל מה שאתה רוצה לעשות הוא לבצע שורה אחת של קוד. אז, בני האדם החליטו כמה זמן לפני שזה בסדר. אם אתה רוצה לשים את כל הלולאה שלך על רק ששורה אחת כמו זה, זה בסדר עם אחד פסיק בסוף. אבל אתה רק יכול לעשות אחד כזה קו ללא סוגריים המסולסלים. לכן, כאשר מדריך סגנון CS50 כאצביע לך, תראה שבדרך כלל זה הרגל טוב להיכנס לזה עד שאתה תועה די נוח ממיני אמנות אלו ועושה את הדבר שלך. כל עוד אתה עצמי עולה בקנה אחד. ונדבר עוד על סגנון קצת מאוחר יותר היום. אז, תן לי לפתוח את תכנית אחת אחרת. כמובן, אנחנו צריכים לתקן 10 שגם כן. תן לי ללכת קדימה ולכתוב אמיתי תכנית מהירה שאני אתקשר, נניח, לולאת dot ג אז, לולאת נקודה ג ובנקודת C לולאה אני הולך יש לי, כולל אני סטנדרטי / פלט נקודת H int חלל מרכזי. ועכשיו בואו פשוט לעשות, אכן, לולאה. אז, 4 אני int מקבל אפס. אני פחות מאשר, למשל, 50. אני בתוספת, בתוספת. ולאחר מכן בכאן בואו קדימה, להדפיס פ ואז אני רוצה להדפיס אני וקו חדש, פסיק. ואת זה צריך להדפיס את כל מספרי מאפס עד 50? כמה ראש מהנהן. כמה nos. מה באג כבר? מה הטעות קלה שעשיתי? כן. קהל: [לא ברור]. 1 SPEAKER: כן. אז למרות שזה נראה כמו זה מה שאני מתכוון, זוכר שגם רק תווי ASCII. לכן, אם אני אומר, "אני" הדפסה זה הולך ממש להדפיס I. אז, אם אני רוצה התוספת מציין מיקום ערך אני באמת צריך לעשות את זה ולאחר מכן חבר-ב ערך שלי באופן דינמי. אחרת אני פשוט הולך ל אני מקבל 50 של על המסך. אז, תן לי ללכת קדימה ו להפוך את הלולאה זו, להפעיל אותו, ואכן, יש לנו את כל בדרך למעלה דרך 49. ולי אם אני לגלול אחורה בזמן לראות המספר אפס בתחילת. ובכן, מה אם אני סוג של לפשל? מה אם אני עושה את זה? רק בגלל שאני לא חושב. מה בתכנית זו. ברגע מחדש לוקט ולרוץ, הולך לעשות באופן הגיוני? קהל: שום דבר. SPEAKER 1: שום דבר. למה? קהל: אני מיועד לאפס. אז, המצב הוא שקר. 1 SPEAKER: כן, בדיוק. כל הקוד הוא נכון, מבחינה תחבירית. זה יהיה לקמפל, זה קוד יפעל, אבל זה לא הולך לעשות משהו מועיל כי אני לאתחל אני לאפס. לאחר מכן, אנו בודקים, הוא שיותר מ -50? ברור, לא, זה לא. אז הלולאה לא מבצעת בכל. מה אם אנחנו עושים משהו קצת יותר פזיז? אז, מה אם אנחנו עושים כמו int אני מקבל אפס. ועכשיו תן לי להשתמש בזמן ש לולאה, שהייתה מצב אחר. ובעוד אני אומר, בזמן שאני גדול מ או שווה לאפס, ואז כאן אני קדימה, לשמור את הקובץ, לעשות לולאה. ואני עומד להפעיל אותו. מה אני הולך לראות את זה זמן עם לולאה בזמן? כן. קהל: לולאה אינסופית? 1 מרצה: לולאה אינסופית? כן, ומדוע? קהל: כי זה תמיד אפס. 1 SPEAKER: כן. אז, אני מאותחל כמו אפס. כמובן שאני תמיד גדול או שווה ל 0 כתוצאה מכך. אז, אני רק הולך ל ראה לאין שיעור זה. ועכשיו, זה הגיע פעם אחת או פעמיים לראשים של הקורס. מה קורה כאשר אתה יש לולאה אינסופית? קהל: בקרת ג 1 SPEAKER: כן. אז בקרת C סופו של דבר יגיב. למרבה הצער, אנחנו כבר הדפסנו מיליון ומיליון של אפסים כבר וכך המחשב יש סוג של לי לפניי. אז, זה הולך להתעלם שלי לקצת. אבל אם אתה רק פגע הבקרה C כמה פעמים במקלדת מק או למחשב, סופו של דבר זה צריך, אכן, לסיים. ואם לא, אנחנו אראה לך כמה טכניקות לפני זמן רב שבו אתה באמת יכול להרוג בכוח תוכניות, כמו ב- Windows ו- Mac OS, אם יהיה בכך צורך. אבל בואו ננסה משהו אחר. בואו למעשה להגדיל I. האם זה עדיין הולך להיות אינסופי? תן לי להפעיל את זה. ועכשיו אתה יכול סוג של לראות מה קורה. גם זה, הוא לולאה אינסופית. אבל זה קצת שאלה מכשילה. האם זה הולך להדפיס מספרים לנצח? קהל: מס ' SPEAKER 1: מס ' למה? שמעתי כמה nos כאן. Someone-- כן. קהל: אין לך מספיק ביטים באמת להמשיך. 1 SPEAKER: בסדר. אז לא היה לי מספיק ביטים להמשיך. אז, מה יקרה? זה רק הולך לעצור? קהל: בשלב מסוים זה יהיה לסגור כל-- 1 דובר: זה נסגר את הלולאה, אבל למה? מה הולך לקרות ב סוף מאוד של גבולותיה? כן? קהל: זה יהיה מחזור בחזרה למספרים שליליים. SPEAKER 1: כדי מספרים שליליים, או אם רק היו טיפול חיובי, אפס לפחות. אז כן, בהחלט. נזכיר כי ראינו בפעם האחרונה שאם אתה להגדיל הפיסות שלך פעם אחת יותר מדי, ואתה יש קדמי גלישה הקיבולת של int שלך או מה סוג הנתונים הוא, שאתה הולך לעטוף, כנראה, שני מספרים שליליים. או אם יש לך לציין ש טווח צריך להיות חיובי בלבד, שבו אתה יכול לעשות, אבל אנחנו כבר לא ראינו את זה עדיין, אתה עלול בסוף לפחות חזרה על אפס. אמנם, בעצם כן. במקרה זה, שלילי מספרים, ובמקרה זה הלולאה הולכת לסיים כי אני לא, למעשה, גדול או שווה ל אפס אם זה שלילי. אז, למרבה הצער, איך ארוך היינו צריכים לחכות? עכשיו אנחנו עד מה, 2 מיליון איש-? אנחנו כמו 2 מליארד דולרים, אנחנו הולכים צריכים לחכות עד שבאמת יכול לראות את הסימפטום הזה. אבל אנחנו יכולים לראות את זה קצת יותר מהר, maybe-- בואו לראות אם אנחנו יכולים להפריע. בחייך. אפילו התפריטים מופיעים לאט. בסדר. אז, אנחנו נחזור לזה לפני זמן רב. זה טוב time-- לעזאזל, גורים. זה זמן טוב לכמה הודעות. לכן, אם אתם אולי תרצו לעסוק בYHack, הלהיות אירוע בחסות החברים שלנו באוניברסיטת ייל. ואכן, חלק מהקורס של TFS באוניברסיטת ייל מעורב עם זה. YHack הוא בינלאומי האק-תון בהנחיית והחזיק באוניברסיטת ייל, וקירוב 1500 כמו האקרים ותמלילים כל אופקים בכל העולם. אם זה עניין, תסתכל כאן. אם זה יותר מדי בקצרה על מסך, תסתכל על השקופיות של היום לכתובת האתר לyhack.org. אז, גם כמה הודעות מהירות. אז, באופן רשמי סעיפים יתחילו בשבוע הבא גם כאן וגם בניו הייבן. זכור אתה תהיה מקבל דוא"ל מאוחר יותר בסוף השבוע הקרוב לוודאי. זה לוקח הרבה זמן לCS50 לסעיף, כל האנשים נתון ב כיתה וכולם מסתובבים. וכל עמיתי ההוראה " לוחות זמנים גם הם עדיין ביסוס, אבל להישאר מכוון לדואר אלקטרוני ואם צורך להיות, אתה יכול מחדש סעיף שם אחרי. Study.cs50.net. לכן, גם אם אתה משתתף קבוע בסעיפים, מבין שכמעט כל של המשאבים שאנו משתמשים בסעיפים הם זמינים לציבור בCS50 ללמוד בכתובת אתר זו כאן. אז, אם היית אי פעם רוצה מחדש סקירה חומר מסעיף, או לקרוא קדימה, או שאתה לא יכול לעשות את זה כמה שבוע, להבין ששקופיות המדגם, ובעיות, והגדרות, ועוד כולם שם גם כן. שעות משרד לחדש את היום, ומחר, וביום רביעי, וביום חמישי לבדוק את הקורס אתר ללוח הזמנים. וגם, כעת משיק היום הוא CS50 דיון. לכן, אם וכאשר יש לך שאלות ל אחד את השני או לצוות של הקורס, ובדרך כלל עובד על כמה סט בעיה, להבין שאתה לא בהכרח יש לפנות לאדם הבא שאתה. אם אין אף אחד שם, אתה יכול להגיע אלינו וחבריו לכיתה באינטרנט באמצעות CS50 דיון. אז, זה דיון לוח לקורס, ומבין שזה אולי הכי טוב מקום להתחיל כאשר יש לך שאלות כאשר מחוץ לשעתי משרד באופן מיוחד. ארוחות הצהריים מדי יתחילו את השבוע. באש וקרח [לא ברור] בניו הייבן. תסתכל על הקורס של אתר על מנת לאשר השתתפות. כל הקודם לשמש לכך. אם אתה לא מקבל בשבוע אנחנו נעשה את רוב בכל יום שישי הבאים במהלך התקופה. אישור, ועכשיו מילה על דירוג. במיוחד כשאנחנו נכנסים בעיה להגדיר אחד, שיצא השבוע, והבעיה להגדיר שני ואילך. איך אנחנו הולכים על הערכת סטי P והערכת איכותם? אז, זה ארבעה צירים שאנו משתמשים ב CS50, והם ארבעה אלה כאן. היקף, אשר לוכד במספרים בסיס רק כמה מסט P לא לכם להתמודד עם. זה בערך מתכתב עם מאמץ, וזה בדרך של לכידה שלנו האם לנסות מחצית P נקבע, כל סט P. זה קל לקבל מושלם ציונים באם אתה עושה, אכן, מנסה בכל היבט של קבוצת P. אז, לזכור את זה. תקינות היא בדיוק זה. האם עבודתך כקוד המפרט וכמו פתרון המדגם 'הצוותים מצביע על כך שהקוד שלך צריך, למעשה, לעבוד. בדקו 50, אם לא פגש אותו עדיין, הוא בP להגדיר מפרט אחד ובאופן כללי יהיה אתן לך כן / לא תשובות באשר לשאלה האם הקוד שלך הוא נכון. לפחות עד כה כאנחנו הולכים להעריך את זה מבוסס על הבדיקות שאנו מפעילים במסגרת התכנית ש. עיצוב הוא הרבה יותר סובייקטיבי. כך גם נכתב הוא הקוד שלך. וזה משהו ש אתה תקבל יותר טוב בלאורך זמן, וזה משהו שנוסיף ל לספק משוב איכותי יותר ב. ועל ידי עיצוב אולי אני אומר לפני זמן אתה עשוי להתפתות בחלק P נקבע לעשות משהו loopingly, אבל יש אולי שלושה, או ארבעה, או חמש לולאות הקדמיות מקוננות או בזמן מקונן לולאות. כי בדרך כלל צריך תתחיל לעשות לך להתכווץ וככלל יהיה עיצוב רע נחשב. ואתה תתחיל לראות בכיתה ו מתוך דרכים טובות בכיתה של לעשות דברים, דרכים רעות לעשות דברים ש אולי כל להיות נכון, אבל לא בהכרח מתוכנן היטב. כמו כתיבת מאמר. ייתכן שתוכל לשים מילים ב דף שהם נכונים מבחינה דקדוקית, אבל המאמר או תזה שהם בהיא רק מבולבל לגמרי או לא משכנע. וכך זה יכול להיות אנלוגי ב עולם בכתב של עיצוב רע או טוב. וסגנון, גם הוא די סובייקטיבי. אבל לפחות אנחנו מצפים עקביות. זה כמה יפה הוא הקוד שלך. האם דברים יפה מסוכסך? האם המשתנים שלך בשם טוב / האם כל הסוגריים שלך וסוגריים מסולסלים מיושר כמו שהם צריכים להיות? יש לי מדריך סגנון CS50 כפי ש סט הבעיה יצביע לך ב. אלה נוחים יותר הם בברכה לסטות שמ כל עוד אתה עצמי עולה בקנה אחד. וזה, גם הוא שיעור אנו לחזק בסעיף. לכן, אם כל זה היה קצת , לממש את סט P המהיר וחתכים ייכנס יותר לעומק לפני זמן רב. אבל בדרך כלל יש לנו מעט מאוד דליים לCS50. ציונים הם בדרך כלל בקנה מידה של אחד לשלושה, או אחד לחמש. אנחנו literally-- ואני לא יכול להגיד זה מספיק בשבוע הראשון. שלוש הוא טובים. אז, למרות ש, כן, שלוש מתוך של חמש בדרך כלל, מבחינה מתמטית, יכול להיות 60 אחוזים או כמו מינוס D. שלושה הוא, למעשה, טובים. ואכן, אנו מצפים רוב התלמידים בכיתה כדי להתחיל את הטווח סביב זוגות, שלשות ו, וארבעה. חמישיות כנראה שלא כל כך הרבה. לא יותר מדי אלה. אבל בדרך כלל להתחיל ב נקודה מתוקה שבעקומה כך שככל שהזמן מתקדם, יש למעשה מקום ל, והזדמנויות להתקדמות עליונה. אז, אנא אל להשוות שלוש עם 60%. זה הרבה יותר מופשט מזה. הנוסחה שבה אנו מחשבים ציונים משוקלל כדלקמן. התקינות שווה ביותר. העיצוב הוא שווה קצת פחות. סגנון הוא שווה קצת פחות. וזה בדרך כלל לוכד את כמות הזמן כי נכנס מקבל כל צירים אלה בדיוק. סגנון הוא סופר קל, צריך להיות סופר מהיר, אבל זה הרגל קל כדי לקבל עצלן על. תקינות עלולה לקחת אתה רוב הזמן. רודף אחרי כמה כוח באג לקחת את זה שעה נוספת או יותר, וכך, את הניקוד סופו של דבר לוכד ש. וכך, עכשיו מילה רצינית יותר. מאז CS50 יש הבחנה, לטוב או לרע, של להיות אולי טוב יותר להכיר עם הבעיות של אקדמי יושר מרוב כל קורס אחר. ואכן, זה למיטב ידיעתי ש אנו שולחים יותר תלמידים, למרבה הצער, למטרות משמעתיות בכל שנה כתוצאה מכך. אז, בעניין של מלא גילוי, בואו נדבר לרגע על מה שקורה בCS50, ומה שאתה יכול לעשות, ומה שאתה יכול להיות מודע. אז, הנה מאז 2007, כאשר ירשתי כמובן, הוא מספר המקרים מודעות לוח. מודעת המועצה היא משמעתי של אוניברסיטת הרווארד גוף, או עכשיו יועץ הכבוד, לאילו מקרים מכונים כאשר תלמידים לעשות משהו שכמובן של סילבוס רואה בלתי סביר. אין דפוס אמיתי כאן, הייתי אומר. הוא נע על פני שנים אבל בדרך כלל זה מספר מקרים המכונים. מספר התלמידים כי הם מעורבים? זה גם משתנה. בדרך כלל, בשנה שעברה ל למשל, 29 סטודנטים באוניברסיטת הרווארד היו מודעות עלו, כביכול. 29 תלמידים הנוכחיים, שניים מתלמידים לפניהם, ששתפו פעולה בדרך לא נעים. ולאחר מכן במונחים של אחוז, זה בדרך כלל כ -3% של המעמד זה, למרבה הצער, עושה החלטות מסוג זה. אז, בשנה שעברה זה היה 3.5% של הסטודנטים של CS50 שהיה מודעות עלו, כביכול. אז, מה המשמעות של כל זה אומר? ומה אנחנו בעצם עושים? אז, לגילוי מלא, אנחנו בהחלט, כמו מדעני מחשב, יש כלי תוכנה שברשותנו וזה קל מאוד עבורנו, בהגינות, חבריו לכיתה ש של זה שאינם חציית קווים אלה לחצות להשוות כל הגשה השנה נגד כל הגשה לשמונה השנים האחרונות. תוכנה עושה את זה. וסופו של דבר זה עיני אדם שמחליטות אם לא להפנות חלק משנה לשפיטה נוספת, אבל תוכנה בהחלט עוזרת. וזה, בכנות, ולכן אני חושב ש יש לנו מספר גדול כזה בCS50. זה לא בגלל CS50 תלמידים או סטודנטים CS יותר בדרך כלל הם פחות כנה מכל תלמידים אחרים, זה רק שיש לנו כלים והטכניקות עם שלקחת ראשון לעבור את זה. אבל אנחנו עושים לפקוח עין על כל הדברים האלה כמו גם, שוב, באינטרסים של הכרה בעבודה זה להיות לשים ברוב העל של הכיתה. והמדיניות של הקורס על יושר אקדמי, למרות שזה חבורה של סעיפים ארוך עם חבורה של כדורים כי הם מקווים די קריאים, זה באמת מסתכם להיות סביר. והשלטון הטוב ביותר של אגודל ש אנו מציעים את תכנית הלימודים ב זה, מהות כל העבודה שאתה להגיש לקורס זה חייב להיות שלך. ואכן, בכל אותם כמעט מקרים הופנו להליך משמעתי זה היה בגלל איזה סטודנט מאוחר אחד הלילה בדרך כלל פנה הקוד שלו או שלה על הסף לכיתה, שלאחר מכן אימץ אותה בשלמותה או שלהם באופן משמעותי. אבל באמת, זה בסדר. ואכן, במשרד שעות, הפתקים אתה כבר מסר אם אתה נכנס למשרד של שעות בשבוע שעבר מעודד כמה שיותר. אתה בהחלט בברכה ועודדתי כדי לדון בסטי בעיה עם חבריו לכיתה. לעזור אחד לשני כאשר נגף. אבל בדרך כלל את כלל אצבע צריך להיות זה, "כאשר אתה מבקש עזרה, אתה עשוי להראות את הקוד שלך לאחרים, אבל אתה לא יכול להציגם. " אז, במילים אחרות, אם אני נאבק עם כמה סט P ואני יושב שם ב חדר אוכל, או בספרייה, או בכיתה מנסה למצוא איזה פגם, אני בהחלט יכול להראות הקוד שלי על המסך שלי לאדם שישב ליד לי, בהחלט צוות, אבל גם לכיתה. אבל אם הפתרון ש לכיתה שלי מציעה היא, אה, כאן רק תסתכל על מה ש אני עשיתי, שחוצה את הקו. והייתי מעז לומר שזה בדרך כלל דבר סביר עבור רוב האנשים לזהות בקלות את הקו. וכך, לראות את תכנית הלימודים לקבלת פרטים נוספים. ועכשיו אחד יותר היבטים שנויים במחלוקת של תכנית הלימודים CS50 שחשבתי היה מדבר במסקנה כאן הוא סעיף החרטה מה שנקרא. אז, הנה כל האותיות הקטנות. אבל באופן כללי שראינו מעל 8 השנים בתוספת האחרונות כי, אכן, כמעט כל CS50 של מקרים של חוסר יושר אקדמי הייתה התוצאה של עניים רק קבלת החלטות בשעת הלילה מאוחר. התוצאה של לחץ, התוצאה חוסר האכילה, חוסר השינה, סטי P יותר מדי, יותר מדי מועדים, התחייבויות רבות מדי. מתח בנייה ב2:00, 3:00 בבוקר, 4:00 לפנות בוקר, עם בדד. רוב התלמידים במקרים אלה עתה קבל החלטות רעות כי הם עלולים גם מאוד מתחרטים למחרת בבוקר, אם לא דקות מאוחר יותר, אבל עד השנה שעברה לא היה שסתום שחרור שתלמידים אלה יכולים למעשה לפתוח להתייחס למעשה בעיה על ראש בלי פחד להיות מאותחל מהמכללה לגמרי. ואכן, הצגנו סעיף זה חרטה בשנה שעברה, שאומר שאם בתוך 72 שעות, שלושה ימים, לחצות איזה קו שנקבע בתכנית הלימודים אתה בא קדימה לאחד מהקורס של ויהיו לנו ראשי צ'אט על זה. יש עדיין להיות חלק תוצאה, בניגוד למה ש דווח להיפך. יש עדיין כמה תוצאות ש הוא פעולה על ידי כמובן, בדרך כלל איפוס סט P או לקחת חלק בפעולה אחרת, אבל אנחנו, אכן, להתמודד עם זה בעצמנו ולא להפנות אותו גבוה יותר היו התוצאה יכול להיות הרבה יותר חמור. ואכן, לחלוק את מה שקרה בשנה שעברה, בשמונה השנים, ועכשיו תשע שנים, ללמד קורס זה ולאחר התעסקות עם ידיות שונות, הפיכת חוגות שונות על העבר כמה שנים על יושר אקדמי, ורואה לנתונים לא ברורים השפעה, אפילו נאומים כמו זה, זה היה ידיים למטה הדבר הטוב ביותר אנחנו כבר הצגנו פדגוגיים בשמונה שנים יחד קווים אלה בCS50. 19 תלמידים הגיעו קדימה על פי סעיף זה בשנה שעברה. אנחנו לא נקטנו שום פעולה ל שבעה תלמידים אלה, קביעה שהם היו שלא לצורך מודאג. הם לא היו, למעשה, חציתי קו, אבל זה היה צ'אט טוב שיש בכל זאת. אנחנו מאופסים 11 של הציונים שהוגשו. ובמקרה אחד בקשנו תלמיד לעשות בעיה להגדיר. אבל משכנע יותר, בכנות, עם 19 שיחות אלה, שהיה יותר מדרך ש צפוי להיות, כל אחד מהם 10 דקות לאולי שעה ארוכה, גם הביא להדליק מספר הסוגיות הנוגעות ל סוגיות משפחתיות, בעיות ידיד, נושאים בתחום בריאות נפש שלאחר מכן עוסקים, עם ברכתו של התלמיד, תושב דיקן, או חברים, או כל מספר אחר משאבי תמיכה. כך שזה היה ללא ספק אחד מהשימושים הטובים ביותר של זמננו ואחת מההתערבויות הטובות ביותר. עם זאת אמרה, לא היה לו קלט בשיעור של זיהוי של חוסר יושר אקדמי באופן כללי יותר. ואני מעז לומר, משנה זה סטודנטים בשנה שעברה היה דמוגרפי ש בעבר מעולם לא הזדהיתי לפני ומעולם לא קשור לקודם. וכך, אלה היו סיפורי הצלחה נפלאים למרות שהם הובאו לאור בנסיבות פחות אופטימליות. אז, לשמור את זה בחשבון כמו שאתה עושה, אולי, כמה החלטה גרועה את עצמך בשעתי הלילה מאוחר, שיש זכות חזרה כל כך הרבה זמן כתלמיד במצב ש בעלים ולבוא קדימה כדי שנוכל יש סוג כזה של צ'אט ולהתמודד עם זה בדרך זה חינוכי, ולאחר מכן אנחנו יכולים לשים את זה מאחורינו ביום שלמחרת. אז בלי עיכובים נוספים, לקחת את עוקץ של השיחה הזאת, סיבת הגורים עד כלומר רק כדי לשבור את הקרח לרגע. ולמרבה הצער, הם כולם לישון, אבל מה שהיה אמורה לקרות כאן היה כולם היה אמור יראת הכבוד וסוג של להירגע לאחר שהשיחה מאוד כבדה. אבל כנראה ששמתי הגורים לישון. אבל אם אתה הולך לCS50 של גורים הנטויים אתר, אתה יכול לצפות בם כל היום. במיוחד אולי 2:00, או 3:00, או 4:00 בלילה לראות הפגת מתחים קטנה שם. אז זה לקצץ גורים. בסדר. לא היה כיף? אוקיי. אז, בחזרה לחלק המחשב מדע, אם יורשה לי. אז, זוכר שהפעם האחרונה שהתחלנו מחפש לא רק בעיקרי, ש הייתה פונקצית ברירת המחדל, כאשר הדגל ירוק לחץ שווה ערך, אבל אנחנו גם התחלנו בקצרה כתיבת חלק מהפונקציות שלנו. ועד כה אף אחד מהתפקידים אלה היה גדול או בשרני במיוחד. אתה נכנסת לגדול יותר אלה פונקציות ככל הנראה, P להגדיר 2, P להגדיר 3, בהחלט P להגדיר 4 ואילך. עכשיו רוב התוכניות שלך, אם לא כולם, בוודאי לP 1 סט ניתן לעשות לגמרי בעיקרי. אם התכנית שלך רק חמש שורות, 10 שורות, ארוך אפילו 20 שורות, בצורה מושלמת סביר לכתוב את זה כל בעיקרי ולא מעל לסבך הקוד שלך, אבל מה שאנחנו עושים היום ואילך מנסה גם להציג כמה טכניקות עיצוב טובות כך שבקוד שלך מקבל יותר מסובך וכמו הבעיות אתה רוצה לפתור מקבל יותר ויותר מעניין יותר שיש לך, סוג של, הכלים בארגז הכלים שלך עם ש לעצב פתרונות טובים לאלה. אז, בואו נעיף מבט מהיר לאחור ב תכנית זו מהשבוע האחרון שלי, ש היה פונקציות אפס נקודת C. ו שם לב ש, בפשטות, זה נראה כך עם שתי פונקציות, עיקרי ושם הדפסה. ולחשוב בחזרה או אולי הנדסה לאחור היום, מה היה המניע להצגה פונקציה בקו 28 בשם, שם הדפסה? או מה היה זו דוגמא ב מבחינת עיקרון או אוכל מהיר, אם היית. כמה מלמולים. מה? כן פירוק כל כך פונקציונלי הוא סוג של הדרך המפוארת של אומר, לפרק את התכנית שלך לחלקים המרכיבים אותה ולאחר מכן להשתמש בחלקים אלה להרכיב כולה. אז, שגם הוא רק סוג של פה מלא כבר, אבל זה אולי אפילו דוגמא טובה יותר של משהו רק בשם הפשטה. נכון? ההפשטה הולכת להיות אחד מהנושאים חוזרים ונשנים בCS50 וגם מדעי מחשב באופן כללי יותר שכן היא טכניקה שבה אתה יכול לפתור בעיות בצורה יעילה יותר, כי אתה יכול לכתוב פתרונות יותר באופן אינטואיטיבי ובאופן שבו קשקשים ומובן על ידי אנשים אחרים. מה שאני מתכוון לעשות את זה? אז, ניתן לטעון שזה הרבה יותר קריא להסתכל על תכנית כמו זו, סופר קצר למרות שזה. כאשר אתה רואה בקו 22 שיש פונקציה שנקראת, שם הדפסה. שם זה לבד אומר מה שהיא עושה. הפונקציה שלוקחת כנראה קלט בין הסוגריים שלה, וכנראה עושה משהו, ככל הנראה מדפיס את השם. וכך, למרות שאנחנו בהחלט יכול להיות עשיתי את מה שעשינו לפני שבוע, שהיה פשוט לקחת קו בפועל זה של קוד, להיפטר מזה, ולקבל להיפטר מזה כולם ביחד, אנחנו סוג של הפשטה משם הרעיון של הדפסה שם. לא אכפת לי אם אתה משתמש בdef הדפסה. לא אכפת לי אם יש לך S אחוזים ונ 'קו נטוי אלה פרטים מסתוריים מאוד. מה אכפת לי כ מתכנת מדפיס שם. וכך, מה דרך טובה יותר לעשות את זה מ על ידי קורא, שם הדפסת פונקציה? וכך, שהיה אחד מהמניעים לעושה משהו כזה. מה שהופך את הקוד לקריא יותר, יותר לשימוש חוזר, וגם תיאורים עצמיים. עכשיו, בואו נסתכל בדוגמה נוספת, שהיה אחד פונקציות, שהיו לנו כאן. אז, זה אחד הוא אולי אפילו יותר משכנע, כי, במקרה זה, אני לא רוצה רק כדי לקבל int. אני רוצה לקבל int חיובי. ומתברר לקבל חיובי int אתה צריך לעשות חבורה של התרוצצות. נכון? זה לא קו אחד פשוט קורא כמו שם הדפסה היה, שהוא אמנם פחות משכנע. כדי לקבל int חיובי, logically-- תן לי לגלול למטה כדי להסתיר את זה. מה אתה חייב לעשות? כמו בכל הכלים ש יש כרגע הם דברים כמו def הדפסה מרגיל ספרייה וגם מספריית CS50 יש לנו קבלו Int, וקבלו Float, קבל ארוך ארוך, קבל מחרוזת, אבל רק אחד, שיך, עכשיו הוא קבל Int. לכן, אם הכלי היחיד שיש לך בארגז הכלים שלך הוא קבל Int, איך אנחנו הולכים על יישום זה כדי לקבל int החיובי? קהל: יצירת יומן ולבדוק על אם הקלט שהם נתנו לי היה חיובי או לא. SPEAKER 1: מושלם. בדיוק. כלי נוסף שיש לנו בנו ארגז כלים משבוע לפני או שתיים הוא רק מבנה לולאות. וכך, כן, אם אנו משתמשים בזמן לולאה, או לעשות בזמן הלולאה, או קדמי לולאה אנחנו כנראה יכולים לברוח עם כל אלה בצורה כלשהי. אנחנו יכולים ליישם את הרעיון של גט int חיובי רק על ידי השימוש קבל Int, ואז פשוט להמשיך לקרוא את זה שוב ולשמור להציק למשתמש עד שהוא או היא למעשה נותן לנו את מה שאנחנו רוצים. אז עכשיו, זה הפשטה של ​​התהליך של מקבל int חיובי לפונקציה שנקראת קבל Int החיוביים הוא קצת יותר משכנע, כי מסתכלים על זה. אלה הם כמו 10 פלוס שורות של קוד ש מעורבים במקבל int חיובי, ולא ממש אכפת לי איך אתה עושה את זה. כל אכפת לי הוא שאתה יכול לעשות את זה, ולכן יש לי כל הפרטים האלה מסתתרים מאחורי פונקציה שנקראת קבל חיובית int ש, אכן, יש לעשות את זה תוך לולאה. ותראה בשבוע שעבר לתחביר יש, אבל זה פשוט מצהיר N, והיא מדפיסה את הוראה למשתמש. זה קורא קבל Int ולאחר מכן הוא בודק מצב זה שוב, ושוב, ושוב עד שהמשתמש משתף פעולה. אז עכשיו, כמה בדיקות שפיות. למי שמכיר אולי עם כמה תכנות, מדוע N מוצהר, למה אני יוצר מחוץ N של לעשות בזמן לולאה? למה זה על קו 29 ולא על 33 כמו, למשל. קהל: כי כשאתה להכריז עליו מבחוץ, זה סוג של יותר, הגדול יותר scope-- SPEAKER 1: טוב. קהל: --and אם תכריז זה בתוך הלולאה, [לא ברורה] כי הוא לא יודע על זה. 1 SPEAKER: בדיוק. אם אני יכול simplify-- זה נושא של היקף. והיקף מתייחס להקשר ב אשר משתנה קיים או שמיש. והכלל אצבע נחמד כאן הוא ש בדרך כלל כאשר אתה מצהיר או ליצור משתנה אתה יכול רק להשתמש בו בתוך של הקרוב מחבק סוגריים מסולסלים. אז מה זה אומר? אם אני, במקום, לבטל את זה וללכת עם משהו שמרגיש קצת יותר פשוט. נכון? קו 32 פשוט נראה נקי יותר לי עכשיו. אני עושה את שני הדברים ב הקצאה אחת ולאחר מכן יד ימין ביד השמאל. הבעיה עכשיו מבוססת על הגדרה זו של היקף הוא N, שניתן להשתמש בקווים 31 ו -32 בתוך לולאה זו, אבל איפה על ידי הגדרה ש זה יכול לא להיות בשימוש? בשורה מה? כן. קהל: 35. 1 מרצה: 35. בהחלט לא 35. וגם איפה עוד? קהל: 34. 1 SPEAKER: גם 34 הוא בעייתי כי זה מחוץ לסוגריים המסולסלים. וכך למעשה, בואו לראות מה קורה. נכון? זה אולי נראה קצת אינטואיטיבי או אולי לא, אבל בואו נראה מה יש מהדר לומר כש אנחנו הולכים לספריית המקור של היום. הפוך פונקציה אחת. אלוהים אדירים. ובכן, סוף סוף סיימתי ש, דרך אגב. בסדר. ומה הבעיה כאן? מאוד מסתורי להסתכל. אבל הנה מה שאני typed-- להפוך את הפונקציה אחת. הנה מה לעשות מושרה, שהוא למעשה באמצעות צלצול מהדר עם חלק מהדגלים האלה שנראה שוב לפני זמן רב. ושוב, תמיד נראה בשגיאה הראשונה, כי זה עלול רק צריך מדורג השפעה חסרת משמעות בקווים אחרים. אז מה שזה אומר הוא ש בעיה היא בפונקצית 1 ג זה בקו 32. וזה בטור, או אופי, 13. לכן, כאשר שיכול עורך הטקסט שלך לעזור לך לזהות היכן הבעיה היא. אז אם אני לגלול מעלה, מה הוא קו 32? זה אכן זה אחד שכבר הדגיש n משתנה תקין כאן-- שאינו בשימוש. אבל זה לא שאינו בשימוש. אני משתמש בו. אבל מהדר של מבולבל, כי זה רק קיים בתוך היקף זה. ואז אני לא יכול להשתמש בו כאן. אני לא יכול להשתמש בו כאן. והמהדר, ולכן, אפילו לא אכפת שאני מנסה. זה נראה שאינו בשימוש בתוך היקפה בפועל. אז אנחנו יכולים להרחיב את ההיקף על ידי עושה בדיוק מה שהתחלנו with-- int n. ולמרות שזה לא נראה אלגנטי כמו, אולי, ואנחנו לוקחים את קו נוסף כאן, עכשיו זה בהיקף בכל מקום. אז בואו ננסה שוב. אז להפוך את הפונקציה אחת. נחמד. ועכשיו אם אני אם אני מפעיל פונקציה אחד, בוא לתת לו שלילי 10, שלילי 1, 0, 1, וזה אכן עובד. אז יש פתרון אחר כאן. אתה יודע מה? מה אם אני באמת מתמודד עם זה? אני לא יודע איפה n אמור ללכת. אתה יודע מה? אני רק הולך לשים את הכל דרך בחלק העליון של הקובץ שלי כאן. מה זה תעשה, מה אתה חושב? כן? קהל: [לא ברור]. 1 SPEAKER: כן. אז אני כבר עשיתי את זה בעולם, אם אפשר לומר כך. אם יש לך משתנה זה מחוץ כל הפונקציות שלך שמותר, והקוד צריך לקמפל, וn עכשיו יהיה נגיש לא רק בגט int החיובי, אלא גם בmain-- ש קצת מדאיג כי יש כבר n בעיקרי, כך יותר על שרק moment-- אבל זה ייחשב עיצוב רע. בסדר. אם אתה צריך לפנות אל משהו כמו, הו, אני פשוט לשים אותו כאן, כי נראה את הקוד לקמפל הוא בדרך כלל לא נוהג הטוב ביותר. במקום זאת אתה רוצה לבחור ההיקף המצומצם למשתנים שלך, שמשמעותה הולך עם התכנון הראשוני שלנו, ש הוא כאן. עכשיו במאמר מוסגר, אם היה לך בשם-זהה משתנה כאן, ג הדרך יטפל זה-- למרות שזה לא יקרה גם often-- הוא שזה עדיין בסדר גמור כאן. אבל הגדרה זו של n בקו 22 יהיו צל הגלובלי אחד. אז זה אחד יעבוד ב עיקרי, והגלובלי אחד יהיה למעשה להחיל כשאתה ב לקבל int חיובי אבל עוד על כך ב בפעם אחרת, אבל רק עבור אלה סקרנים. אז בקיצור, אנחנו לתקן כאן זה. עכשיו בואו להפריד שני חלקים אחרים לפני שאנחנו מסתכלים על השורה האחרונה של קוד בתכנית זו. קבל int החיובי. בצד השמאל של שלה מילה היא המילה int. מה זה מסמל לדעתך? עד כה יש לנו בעיקר ראו חלל. כן? קהל: זה הסוג של משתנה שאתה שואל על. 1 SPEAKER: כן זה הסוג של, תן לי לא אומר משתנה, אבל הסוג של ערך שאני מבקש לחזור ל. ואכן, זה אינטואיטיבי כאן, אני מקווה. נכון? אם אתה רוצה לקבל int החיובי, מה זה אתה רוצה function-- כמו שלנו מתנדב משבוע שעבר למסור לך בחזרה חתיכה נייר עם int על זה? וכך אנו כבר צוינו ש מה שנקרא טיפוס החזרה של פונקציה זו הוא לקבל int החיובי. אם אנחנו לא רוצים שזה לחזור כל דבר, אתה אומר חלל. אם אתה רוצה שזה יחזור מחרוזת, אתה אומר מחרוזת. אם אתה רוצה שזה יחזור לצוף, אתה אומר לצוף. אבל רק אחד שחל כאן מבחינה לוגית, כי אני משתמש int גט, למרות שאני מגביל אותו ל ערכים חיוביים, הוא להחזיר int. אז להפך, מה זה אומר שיש חלל בסוגריים? מה לעשות הסוגריים בדרך כלל להגדיר? כן? קהל: זה אומר פונקציה של לא ממש מקבל את זה. 1 דובר: זה אומר פונקציה של לא ממש מקבל את מה ש? קהל: קלט. 1 מרצה: קלט, שהיא. אז אכן, אם סוגריים כאן תציין חלל, זה רק אומר שאני לא רוצה כל קלט. אני אתמודד עם הבעיה בעצמי. ואכן, אין לך ל תגיד לי מקבל שום דבר חיובי int. אתה פשוט אומר, לקבל int החיובי, וש הפונקציה ללכת ולעשות את הדבר שלו. אבל יש כבר טריק קטן לי שיחק כאן כל הזמן הזה כדי לוודא את הקוד הזה הידור. שים לב שint-- לקבל חיובי void-- int הוא בקו 27. אבל מסיבה כלשהי לכאורה מוזרה זה גם כאן בקו 16. ורק למען סדר טוב אני חוזר זה כך שזה זהה בצורה מושלמת. ואני כבר אמרתי אב הטיפוס עם תגובה שורה אחת קטנה. מה קורה אם אני מוחק את זה, ו עכשיו שידור חוזר לעשות פונקצית 1, להיכנס. אופס. חכה דקה. איפה הכרטיסייה שלי? הא? המתנה. הפוך פונקצית 1. יש לנו ללכת. אוקיי. לא הציל אותו כראוי. אז, אני חושב שיש קצת באג כאן שבו אני לא לראות את שם הכרטיסייה באותו הרגע. אז מה קורה כאן? הצהרה סמויה של פונקציה לקבל int החיובי הוא לא חוקי בC99. כל כך מבלבל שוב. אז מה הוא מעיד זו של? ובכן, מתברר ש C הוא די טיפשי. ובכן, זה תכנות שפה, או לייתר דיוק מהדר הוא. זה רק יודע מה יש לך לימד אותו, וזה רק הולך יודע משהו אם אתה לימדת אותו לפני. במילים אחרות, ב עיקרי כרגע, אני מנסה לקרוא לפונקציה נקרא לקבל int החיובי. אבל מהדר לא הולך שם לב שמקבל int החיובי קיים עד קו 26. ואז מה עושה מהדר הוא רק שגיאות ברגע שהיא מגיעה לקו 17, אומר הצהרה סמויה של מקבל int החיובי, ש היא רק דרך מפוארת של אומר, אני לא יודע מה יקבל int החיובי הוא עדיין. שפות אחרות כמו Java ו פייתון ורובי אולי להסתכל קדימה. C לא. וכך הדרך בה אנו לתקן זו אחת משתי דרכים. כל אחד, אם הבעיה היא שיקבל int החיובי לא ראה לפני כן, טוב, תן לי רק להעביר אותה לחלק העליון. זה יהיה לתקן את הבעיה. אבל בדרך כלל, זה טכניקה טובה יותר נחשב לשים הפונקציה העיקרית שלך במאוד עליון, כך שאדם קורא את הקוד שלך יודע מה התכנית עושה, בגלל עיקרי הוא לא קבר את כל הדרך בתחתית או באמצע. זה בחלקו העליון. כך שלא מרגיש אידיאלי. ולמעשה אתה יכול לקבל למצבים שבם אם שיחות פונקציה אחת אחר, שקורא אחר, אתה יכול להיכנס לנושא שבו לא יכול ללכת מעל השני, באופן הגיוני. זה פשוט לא אפשרי. וכך בדרך לעבודה סביב זה רק לקחת החתימה של הפונקציה, כך לspeak-- הקו הראשון שבו זה declared-- ופשוט להעתיק, להדביק אותו ב עליון, אבל לא עם braces-- המתולתל רק עם נקודה-פסיק. זה כמו רמז קטן של מה לבוא. ואכן, כל זה זמן שבו ראו דברים כמו io.h הסטנדרטי וcs50.h, באופן דומה, בנקודה אלה קבצי h יש אבות טיפוס אחרים. ואנו רואים כי לפני זמן רב. אז בקיצור, כאשר יש לך תכנית בקובץ עם פונקציות מרובות חוץ מזה עיקרי, אתה כמעט תמיד רוצה להכריז עליהם רק בדרך שלהם ראשון קו, ואחריו פסיק, בחלקו העליון של הקובץ. זה היה הרבה בבת אחת. יש שאלות? יש שאלות? בסדר. אז בואו נעבור על לאחר מכן למשהו כמו שיעול. אה. איך הולם. בסדר. שיעול. אז הנה הוא ג יישום תכנית שעשינו לפני כמה ימים ב שריטה שמאוד פשוט רק אומר שיעול, שיעול, שיעול. בסדר. ומישהו אמר כמה לפני ימים שיש דרך של ניקוי קוד זה כבר. בסדר? ברגע שאתה מעתיק ו הדבקת עיצוב כנראה רע. לפחות פעם אחת שנגיע לארבעה או חמישה או 20 שיעול, זה מרגיש רע בפועל. אנחנו פשוט לשמור עותק, הדבקה. מה הפתרון הברור לניקוי תכנית את זה? קהל: Loop. 1 SPEAKER: כן. אז להשתמש בלולאה. ואנחנו יכולים להשתמש בלולאה ל, ואילו לולאה, כל מספר של גישות. ואכן, זה מה ש אנחנו עושים בגרסה אחת כאן. במקום שלשכתב אותו בגרסה אחת של cough.c להיות רק שיעול בתוך לולאה ל. בסדר, אבל יש הזדמנות עכשיו לסוג של התחלה לעצב את זה קצת יותר כמו השיעור שלימדנו לפני רגע, אשר הוא זה-- מניח שאני רוצה כדי ליצור פונקציה שנקראת שיעול, הבה נבחן לרגע מה זה הולך להיראות. אז אם אני רוצה משהו להשתעל, אני רק צריך להשתמש ו הדפסה בתוך הפונקציה. ואכן אני. ואכן, כל זה זמן, כל פעם שאתה הדפסת משהו המסך, מתכנת היה קורא לזה תופעת לוואי. זה לא לי והושיט בחזרה מישהו ערך. זה אני לוקח חלק בפעולה שעשוי להיות מבחינה ויזואלית ברור. אבל שיעול פונקציה זו, אין זה לחזור דבר מבוסס על השורה הראשונה שלה? לא, כי סוג החזרתו בטל, שרק אומר זה לא נתן לי שום דבר בחזרה. זה יכול לעשות משהו מבחינה ויזואלית, אבל זה לא נתן לי לגבות פיסת נייר כמו בשבוע שעבר. האם זה צריך כל קלט? מס ' ואז זה מבוטל גם כאן. אז גם זה סוג של על-הנדסת בעיה זו. נכון? אני כבר עשיתי את התכנית יותר מורכבים יותר קווים, של קוד, אני לא עשיתי את זה כל זה יותר פונקציונלי, אבל יהיה קרש קפיצה, אולי, לרחב יותר הקשר עם קוד מסובך יותר. אבל מה עם זה? מה לי וdone-- רק מעיף מבט ב זה בלי להסתכל על התגובה בחלקו העליון של file-- מה שיש לי אני ביסודו נעשה כאן עם השיעול שלי יישום זה שונה? כן, בגב? קהל: תעשה את זה כדי שתוכל יש אופי לכבות. 1 SPEAKER: כן. אז זה מרגיש סוג של נחמד. נכון? זה כמו הוספת תכונה לך תכנית או הפונקציה שלך, במקרה זה. זה עדיין מחזיר שום דבר. אולי יש לו תופעת לוואי חזותי, כי זה מתקשר F הדפסה. אבל עכשיו יש לי parametrized הפונקציה, ש אומר שאני שציינת נלקחתי קלט של int הסוג וקורא לזה n, אבל אני יכול לקרוא לזה כל מה שאני רוצה. למעשה, זה יכול להיות רק פעמים כדי להיות עוד יותר מפורש. ואז אני יכול פשוט לשנות את זה כאן. אבל הנקודה היא שזה איך אני ליצור פונקציה שלוקחת קלט. ואם אתה זוכר מרפרף דרך אולי מקוון באחד של ההליכה-throughs, רביעי ודוגמא שיעול סופית, תוכל להבחין כאן אני כללי סוג further-- הקוד שלי של מופשט אותו עוד יותר. כמו שיעול ועיטוש, שניהם על כמו להגיד משהו או עושים איזה קול. שמור יהיה מתאים לחסום סריטות. ואז מה שעשיתי בגרסה זו, שבו אנו יכולים רק מבט חטוף ב, הוא שיעול הוא פשוט כמו להגיד, [שיעול], שיעול, ובינתיים, התעטשות היא כמו לומר, [אצ'ו]. ואז אני כבר להכליל יישומם של אלה על ידי החברה יישום פונקציה גנרית זה, אומר, שהוא מעניין למטרות של היום רק משום שהיא עדיין אין סוג תמורה. אבל כמה כניסות זה יש? קהל: שני. SPEAKER 1: שני. ולכן אם אתה רוצה לקחת בשתי טענות, רק להפריד ביניהם בפסיק. ואם אתה רוצה אז קורא לפונקציה זו, שמו לב שאתה רק קורא למשל, ציטוט, סוף ציטוט, לטענה הראשונה, נפוץ n, לטענה השנייה. אז שוב, אנחנו רק צריכים עכשיו אבני בניין, כך שבעצם אנחנו יכולים ליישם חלק מהפונקציות שלנו. בסדר. כל שאלות על אלה? אז עכשיו בואו לקלף שכבה אם כן. והמטרה, בסופו, היא קבוצת הבעיה של השבוע הבא הולך להיות על cryptogrophy-- האמנות של ערבול מידע. ובאופן ספציפי, המידע יהיה לך להצפין או לפענח הולך להיות טקסט. וכך זה סוג של מזמין השאלה היום כמו גם, מה קורה מתחת למכסת המנוע עם טקסט שחורגים מהשבוע ASCII אפס, ואיך אנחנו יכולים למעשה להתחיל לתפעל אותו? אז הנה הוא שמו של Zamyla. ובטקסט, שעשוי להיות הוזן כלפונקצית מחרוזת גט. ומתחיל עכשיו, כשאתה רואה מחרוזת כמו זה-- Z--M-Y-L-זה-- מתחיל לחשוב על זה כאילו כל תווים אלה הוא בתיבה שלה שלו. ואכן, בשבוע זה זמן, כל אחד מהתיבות הבאות הוא הולך לייצג באופן ספציפי מאוד בלוק של memory-- נשיכה של זיכרון. אז כל אחד מהמכתבים האלה, סופו של דבר, ייצג 8 סיביות. ואנחנו באמת תראו מה קורה במתחת למכסת המנוע במחשב שלי. אבל לזה לא מספיק רק להסתכל על Zamyla דרך העדשה, לפיה כל אחד מ המכתבים האלה הוא בתיבה משלו. ויפה מספיק ב- C שביכולתנו לגשת לכל תיבות אלה ישירות. אז אם אתם רוצים לקבל את ראשון מכתב של שמה, סופר קל בג אם אתה רוצה לקבל אחרון מכתב, סופר קל, כמו גם עם חתיכת התחביר חדש. אז אני הולך קדימה לCS50 IDE ולפתוח את המחרוזת אפס נקודה ג ובדוגמה זו כאן, יש כמה דברים חדשים קורה. אז קודם כל בשורה 19, יש לנו ראה מחרוזת גט before-- זה. אז רק כבדיקת שפיות מהירה, אם מישהו יכול להציע עד מילולי ההסבר של הדיוט של מה קורה בקו 19. סתם לתרגם את זה ל אנגלית ששותפה לא בCS50 אפשר להבין. כן. קהל: יש לי קלט המשתמש מחרוזת ולאחסן אותו בים משתנה. SPEAKER 1: טוב. יש לי קלט משתמש מחרוזת ולאחסן אותו בים משתנה. זה מצוין. אז ביד ימין צד, אנחנו קוראים למחרוזת גט. שמחזיר ערך שלא לקבל שהוקצו מצד הימני לשמאלי צד לים נקרא משתנה זה נועד לאחסן מחרוזת. בדיוק. אז עכשיו קו 22, ל התגובה בקו 21, ברור שמדפיס מחרוזת ש דמות אחת בכל שורה. אבל איך? אז קודם כל, אנחנו לאתחלי 0. ואז איך אנחנו מגיעים ל סוף השם של Zamyla? ובכן, בסוף שמו של Zamyla, שיכולתי להקליד ידני את התו האחרון של שמה איכשהו, או מספר זה. נכון? אם נחזור כאן-- Z--M-L-- Y-L-זה-- כדי שאוכל להקליד. מה המדד של המכתב האחרון של Zamyla? אם זה 0-- מדבר כמו programmer-- 0, 1, 2, 3, 4, 5, אני heard-- כך אכן, המכתב האחרון בשמו של Zamyla הוא השישי, אבל אם אנו סופרים מ0, זה הולך להיות מספר 5. אז לזכור את זה כאן. מתברר שיש פונקציה ב C נקרא strlen, ובחזרה ביום ועד עצם היום הזה עדיין, הרבה מתכנתים לבחור לסנכרן שמות להם פונקציות שנשמעות כמו המילים הם מנסים לומר. אז strlen הוא אורך מחרוזת. ואז מה יהיה אורך מחרוזת של S לחזור כאשר Zamyla הוא הקלט? קהל: חמש. 1 מרצה: Z--M-Y-L. שש. נכון? מה אורכו של שמו של Zamyla? נכון? ורק במציאות, שש אותיות. נכון? ואז מה זה אומר ללולאה שלנו? אנחנו הולכים ללכת מ 0 עד שש, ש הוא הולך לתת לנו חמש חזרות. מה שאנחנו עושים בכל איטרציה? ובכן, C אחוזים, מישהו ניחש היום האחר, משמעות מיקום עבור מה? קהל: תו. 1 SPEAKER: רק char. אז character-- אחת לא מספר תווים כמו מחרוזת. ואז הנה השורה החדשה שיש לנו הדפסה החוצה. ואז הנה התחביר החדש. אם אתה רוצה להדפיס את i-ה דמות במחרוזת S, כביכול, אתה יכול פשוט לומר שמו של S המחרוזת, ולאחר מכן פתח סוגריים מרובעים, ו אז סגר הסוגר מרובע, עם i האמצע. וזה סוג של נחמד שב זה נראה כמו סוג של ריבוע בדיוק כמו הריבועים שבי Zamyla של דמויות קיימות בתמונה שיש. אז אם אני באמת להפעיל את זה עכשיו, בואו לראות מה קורה. הפוך נטוי 0 נקודת מחרוזת מחרוזת 0, ולאחר מכן אני הולך להקליד את שמו של Zamyla. אין הנחיה, כי אני לא להשתמש ו הדפסה, אבל זה בסדר. אני רק יודע מה לעשות. ואכן, זה מדפיס שמו של Zamyla, אחת בכל שורה. עכשיו בואו להיות קצת פזיז. נניח שאני לא יודע על strlen וחשבתי, בסדר, אף אחד לא הולך לי שם גדול יותר כמו 50 תווים. בואו נלך קדימה ולהדר מחדש זה ולהפעיל מחדש את זה, ולאחר מכן הקלד בZamyla שוב. מבחינה הגיונית, מה הוא תכנית הולכת לנסות להדפיס? Z--M-Y-L-אז כמו 45 בתים לא ידועים של זיכרון. ואכן, אנחנו נחזור לרעיון הזה של זיכרון. אבל רק מבחינה לוגית, אם שמו של Zamyla הוא ארוך הזה, כמו לכל התמונה כאן, מה שאנחנו אומרים הוא להמשיך בהדפסה, להמשיך בהדפסה, לשמור הדפסה, להמשיך בהדפסה, להמשיך בהדפסה, כל הדרך לאופי ה -50, אשר מי יודע מה הולך לקרות. אז בואו באמת נסתכל. בואו נקליד בZamyla. מעניין. יש לנו מזל. רק חבורה שלמה של חלל לבן. אה. יש דמות אחת פאנקי. זה נראה כמו סוג של שאלה מוזרה לסמן שם, אבל יש שם של Zamyla. בואו לקבל באמת פזיז. מה דעתך עלינו להדפיס 500 בלוקים אל הלא הנודע? בואו נלך קדימה ולהפוך את זה הפעל מחדש, כמו גם ולאחר מכן. ובואו מסך מלא זה, כי אנחנו צריכים לראות יותר מקום. Zamyla. לי מזל שוב. מעז אנחנו מקבלים פזיזים יותר? בואו לקבל פזיז יותר. 50,000 תווים. זה הכי בוודאי לא רעיון טוב. בסדר. הפוך מחרוזת 0. זה יהיה ההדגמה האחרונה שלנו. Zamyla. איכס. איכס. אוקיי. אז הזיכרון שלי הוא באמת ריק עכשיו, שהוא למעשה סוג של נוח. מה שאני מנסה להשיג צריכה-- בסדר. ועכשיו אני רק הולך לקבל פזיז. 500,000. של Make-- לתת מסך מלא זה. הזן. Zamyla. יש לנו ללכת. יש לי מה שאין לי מושג הוא, אבל זה נשמע רע. בסדר. ואכן, עד מהרה, אם אתה בין כמה ברי מזל בשעתי עבודה ובבעיה להגדיר אחד, אתה ייתכן מאוד להיתקל זה. אשמת פילוח בעצם עושה יש משמעות מוגדרת היטב. זה אומר איזה טעות הנוגע לקטע של זיכרון. וגם במונחים של ההדיוט, זה אומר שאנחנו נגענו memory-- השתמשנו RAM במחשב שלי שלא צריך יש לי גישה ל. וזה מה ששניהם חזק וגם מסוכן על C הוא שאתה בעצם יש להם גישה בלתי מוגבלת לשלמות של הזיכרון של התכנית שלך או בתים או זיכרון RAM, לייתר דיוק. אז למרות ששמו של Zamyla הוא ארוך רק שישה תווים, אני עדיין יכול ללכת לשום מקום בזיכרון שאני רוצה. וכמו בצד, אם יש לך אי פעם לקרוא כמה מאמר לאורך השנים על כמה שרת או תכנית מקבל סדוק או פרוצים זה נצל ממשהו נקרא הצפת מאגר לנצל את זה בעצם אנחנו נעלה את לדבר על בכמה שבועות, זה בדרך כלל מתייחס לאיכשהו הטעיית מחשב להולך טוב מעבר לגבולות זיכרון שיש לו, ו למצוא משהו עסיסי שבmemory-- סיסמא, אולי, דרך לעקוף כמה מספר סידורי לבדוק, או רק בדרך כלל מסוגל להערים על המחשב מבצע קוד שלא נועד. אבל בואו נחזור ל מציאות לרגע שבו בתכנית זו הייתה מיושם עם strlen, ולהציג את הדבר אחד כאן. מה חדש בין שלושת קווים אלה העליונים? אז h נקודת מחרוזת. מתברר שיש ספרייה בשם מחרוזת דוט H, או ספריית המחרוזת, שקובץ הכותרת, אם אפשר לומר כך, הוא h נקודת מחרוזת שנותן לי גישה לפונקצית strlen זה. אם אני להשמיט ש, מהדר הוא הולך לצעוק עליי בצורה כלשהי. אבל אתה יודע מה? עכשיו בואו לקבל באמת ניואנסים. בקו 22, יש משהו נחמד של inefficient-- קשה שנועד, arguably-- על הקו הזה של קוד. היזכר איך מיושמים ללולאה ומה צעדים יקרו שוב ו שוב וagain-- האתחול, המצב, את הקוד ש מקבל להורג, אז תוספת או השינוי, אז המצב, אז הקוד, אז השינוי, אז המצב, אז את הקוד, אז השינוי, וכן הלאה. אז מה יכול להיות קצת מדאיג או גרוע עשה כאן? כן, בכחול. קהל: strlen הוא נקרא פעמים רבות. 1 SPEAKER: כן. אז strlen נקרא פעמים רבות, אבל מה הוא אורכו של שמו של Zamyla הפעם הראשונה הלולאה מבצעת? קהל: שישה. 1 מרצה: שש. ובכן, מה הוא אורכו של שמה בפעם השנייה את הקוד מבצע? קהל: שישה. 1 SPEAKER: בסדר. זה עדיין שש. נכון? שמו של Zarla יש לא שינה, גם אם אני מחפש בהוא רק חלק מהאותיות בשם שלה. וכך את העובדה שאני ביעילות שואל את השאלה הזאת, מה אורכו של Zamyla, מה האורך של Zamyla, מה האורך של Zamyla, שש פעמים נפרדות, או שבעה אפילו, הוא פשוט טפשים, כי זה משתנה תשובה ש. ואז מה שאני באמת יכול לעשות הוא זה-- במחרוזת אחת יש לי גרסה שולית יותר טובה כאן. יניהם-- מחרוזת whoops-- שתי יש לי גרסה שולית יותר טובה בי אני עושה זה-- במקום רק אתחולי 0, אני גם בפסיק להצהיר על משתנה בשם שני n-- אני לא צריך לומר int שוב. אני לא צריך, למעשה. אבל אני אומר n. ואז אני לאתחל n ל strlen של n, כך שעכשיו כמה פעמים אין strlen לקבל להורג בסך הכל? רק פעם אחת. ואז זה מה שאנחנו אומר מוקדם יותר על עיצוב טוב יותר. למעשה פעם אחת את הקוד שלך הוא נכון, חוזר וחושב דרך, אני משתמש במעט כ זיכרון או כמה שניות כ או אלפיות שנייה של זמן מחשב כ ניתן ליישם כמה בעיה? ואני הולך כדי לגלול ורק להזכיר שיש אזכור זה של null בגרסה זו, אבל אנחנו נחזור לזה לפני זמן רב. משום לעכשיו, בואו נסתכל בלאן זה הולך להוביל אותנו. אז אחד, מתברר ש עכשיו שיש לנו את היכולת להסתכל על תווים בודדים, אנו יכולים למנף משהו מהשבוע 0 שהיה מאוד מסתורי ו סוג של לא מעניין באותו הזמן. אבל עכשיו, ובמיוחד כאשר אנו להגיע להצפנה בשבוע, זה הולך להיות די חזק. מתברר שעם קצת ints וצוף types-- נתונים ותווים ומחרוזות ו אחר things-- כמה מהם ניתן להמיר בקלות למשנהו. לדוגמא, כאשר אנו מדברים על ASCII זמן ago-- הנה האותיות באמצעות M, נקודה, נקודה, dot-- אמר שיש מיפוי בין האותיות והמספרים האלה. ואכן, זה נכון לאותיות קטנות גם כן. אותיות קטנות הוא 97, הון הוא 65. ויש מספר בASCII, וזה רק מיפוי זה מערכת לכל מכתבים אחרים אלה. אז מה זה אומר? ובכן, אני הולך קדימה ופתוח עד אמיתי במהירות משהו שנקרא ASCII 0, שבם הוא הערות. ושוב באינטרנט, אתה תמיד יכול מבט דרך התגובות. ותסתכל מה זה הולך לעשות. אז יש לו פונקציה העיקרית. אני כבר בקידוד קשיח המספרים רק ל עכשיו, כי אני יודע מה אני עושה. אני יודע מה אני רוצה לראות כאן. ואני כבר אותחל אני עד 65. ואני סומך על עד 26 אותיות בסך הכל. ומה אני הולך להדפיס קו אחד בכל פעם אם אתה יכול לפרש זה מודגש קו? מה מקבל מודפסת? כן. קהל: האם אתה הולך כדי להדפיס את המכתב ש תואם את המפה של ערך מכתב וערך מספר שלם? 1 SPEAKER: בדיוק. אני הולך להדפיס את המכתב מתאים לערך השלם, ולהיפך, כדלקמן. ובכן זה, מישהו אמר קודם לכן, רק מציין מיקום עבור char. זה עדיין הוא. זה, כמובן, הוא מציין מיקום לint-- לא קו חדש. ועכשיו שם לב, הערך הראשון שלי ש אני חיבור למציין מיקום ש לא רק אני שאני אומר, בסוגריים, אני char, שchar הסוגריים הוא אומר למהדר, טיפול אני לא כמו מה שזה לא יהיה, שהוא מספר. להתייחס אליו כדמות ממשית. ואילו הערך השני אני פקיקה in-- אני- צריך להיות רק מספר. אז אם אני לקמפל program-- זה אז זה עושה ASCII 0, ASCII קו נטוי נקודת 0-- אני רק מקבל תרשים קטן זה שימושי ש מראה לי את כל האפשרי מיפויים מבלי חושב ש דרך או להבין את זה בעצמי. ואני גם להדפיס את, שם לב האותיות קטנות, בגלל כמה שורות לאחר מכן, אני גם להדפיס את מיפוי זה כמו גם, וזה רק ל אומר שברגע שאתה מבין מה קורה מתחת למכסת המנוע, אתה יכול להמיר באופן אוטומטי קדימה ואחורה. ולמעשה, אם מישהו מכם אי פעם עשיתי את זה בבית הספר יסודי או שמע על מישהו מיתי לוקח פתק והעברתו לו או חבר שלה בכיתה, אבל אתה מקושקשת מכתבים כמו הופך B, ו- B הופך C, או משהו יותר מסובך מזה, גם, איך היית הולך על יישום שבתור ילד? ובכן, אתה פשוט סוג של יודע הופך B, B הופך C, אבל מבחינה מתמטית, מה עושה ילד זה? מה הייתם מוסיף לכל אות? יעילות, 1. לכן, כאשר אתה משנה את A ל- B, זה כמו סוג של שינוי 65-66, שפירוש מתמטי פשוט להוסיף 1. ולכן אם היה לך ליישם טכניקה מטעה שקטנה למורה שלך בקוד, אתה אולי לעשות בדיוק את זה רק על ידי הוספת אות אחת ביחד. אז לפני זמן רב, אנחנו הולך לראות איך אנחנו יכול לנצל את זה לבעצם לטרוף ולפענח באמת מידע. בינתיים, יודע שאנחנו כבר התחלנו להציג כמה ספריות אחרות כאן-- המחרוזת היום אחד. ואתר מאוד מועיל אני מקווה שאתה תמצא נקרא reference.cs50.net, ש סגל ההוראה יש להרכיב, כך שאם אתה רוצה לחפש עבודות איך strlen, אתה יכול להתחיל להקליד שמו של הפונקציה, לחץ strlen שם, ולאחר מכן הסבר פחות נוח עומד להופיע. או אם אתה רוצה רשמי הסבר מבוסס לינוקס, אתה יכול ללחוץ נוח יותר בצד ימין למעלה, וזה יציג את אותו המידע, אבל במונחים מורכבים יותר. זה משאב שימושי ל ממש יודע מה עושה כל דבר. בפעם הבאה שאנחנו הולכים תסתכל על שוקו ועוד, ולהציג את עצמנו לעולם של הצפנה. לפני כן, אנחנו תראו שלך מאוחר יותר השבוע. ועכשיו, קולטון אוגדן. לראות אותך ביום רביעי. [השמעת מוסיקה] [השמעת מוסיקה] 1 דובר: מה אתה עושה [בליפ]? 1 מרצה: אני אוכל קינוח שלי? איך אוכל את זה? עם הידיים שלך? [השמעת מוסיקה]