[השמעת מוסיקה] ANDI פנג: זה CS50, ו ברוכים הבאים לשבוע של סעיף שניים. זהו למעשה תוך שבוע שתיים מclass-- בעצם, בשבוע הראשון שהיינו לנו חלק. הרמת ידיים, כמה מכל מה שאתה הגיע לקטע סופר בשבוע שעבר? אישור, זה בסדר. זה בסדר. כמה מכם צפה סעיף העל בשבוע שעבר? אוקיי. ואתם עשו בסדר על בעיה להגדיר אחד? אז אני הולך לקחת את זה שיש לנו חבורה של ילדים ממש חכמים בכיתה ודברים זה יהיה בסדר. אוקיי. אז first-- ראשית, אנחנו פשוט הולכים לזמן קצר לעבור על סדר היום להיום. נדבר על לוגיסטיקה כמובן. הרבה אתה כנראה יש לך שאלות בנוגע ל איך דברים מתנהל בקורס זה. אנחנו לענות עליהן. אנחנו הולכים לזמן קצר לעבור על לולאות במקרה כולכם החמיץ סעיף סופר. נדבר על מיפוי ASCII. נדבר על מערכים, פונקציות, טיעוני שורת הפקודה. ולבסוף, מה אתם כנראה כל באמת רוצה להיות כאן כדי ללמוד על, הוא pset2. תהיה לנו כמה טריקים נחמדים וטיפים לאיך לעשות את זה. אוקיי. כמו כן, שנית, יש לנו המון ממתקים כאן. כל מי שאוהב ממתקים, רק לבוא לכאן. לתפוס קצת. יש לי חבורה. יש לנו המון במשרד. אני לא באמת רוצה לאכול ממתקים כל היום. אתם צריכים לאכול את כל הממתקים, כי אני הבאתי אותו כאן בשבילכם. פשוט לאכול ממתקים. שיהיה ממתקים בכל סעיף. אז קודם כל, מי אני? השם שלי הוא אנדי פנג. אני הראש ת"א של CS50 כאן באוניברסיטת ייל. ובנוסף ל כי, אני גם להיות-- אם מישהו היה like-- הריצה שלך חבר, כתף לבכות עליה. אם בלילה שלפני עקב של pset, אין לך מושג מה קורה, להכות אותי. אנחנו בצער יחד, וכולי. רק יודע שאני כאן כ משאבים עבורך כקו החזית בעוזרים לך להבין איך בחורים כדי לפתור בעיות בCS50 ומעבר. כתובת הדוא"ל שלי היא andi.peng@yale.edu. אני גם שולח בודד דוא"ל עם מספר הטלפון שלי בזה כך שלא כולם ב אינטרנט יכול לראות את מספר הטלפון שלי. אתה מוזמן להתקשר אליי בכל עת. ברצינות, הטלפון שלי הוא בדרך כלל מצורף ליד שלי. אני לא יכול להגיב בתוך כמה דקות. אני לא יכול להגיב בתוך כמה שעות. אבל אני יכול להבטיח לך, אם אתה דואר אלקטרוני אותי, אם אתה קורא לי, טקסט אותי, אני אגיב תוך 24 שעות. לעתים קרובות, אני נגיב לפני כי, משום שאני מבין כי לכולם יש כמה בעיות, ואתה רוצה תשובות שלך להיות ענה מהר מאוד. עם זאת, אם אתה קורא 30 דקות לפניי חתיכה שנובע יום חמישי night-- להיות כמו, אנדי, יעזור לי, אני לא started-- אני יכול לתת לי אתה הכתף לבכות על ש. אבל אולי הגיע זמן לחשוב על איך לא לעשות את זה בפעם הבאה. אוקיי. אופס. איך אני חוזר? הנה. אז בקורס זה, יש לנו טון של תמיכה לכולם. בנוסף פשוט חלקים כאן, שבו אתה בכל שבוע מקבל לבלות 90 דקות נפלאות איתי, יש לנו גם שעתי עבודה. כמה מכם יש כבר היה לשעתי עבודה לעזרה? גדול. זה באמת טוב לראות, כי אנחנו יש צוות של מעל 45 TAS ורשויות אישורים הוכשר לקורס זה שהם כאן על שעזרת לכם עם psets. ימים שני הם החזיקו בצהבהבים כיתה בבית היל 17 כאן באוניברסיטת ייל. ימי שלישי וחמישי, הם החזיקו בנחלת כלל. 8:00-11:00 פחות או יותר בכל יום חול. בואו, בוא החוצה. כל בעיה, לא problem-- רק לבוא ב, ואז אנחנו נעזור לך לצאת עם זה. שנית, בנוסף לשעתי עבודה וחתכים, יש לנו גם מכנסיים קצרים. האם מישהו אי פעם ראה כמה מכנסיים קצרים או ערוצים בקטעי הווידאו באתר? אוקיי. אז הם באמת, באמת מועילים. ייצור הרווארד היפה שלנו צוות שם בבית הספר ש בצפון, הם צילמו והפיק קטעי וידאו הדרכה המדהים הללו. הם ייקחו אותך צעד אחר צעד ב איך ללכת על פתרון בעיה. לעתים קרובות, אם אתה מבולבל על רעיון פשוט, רעיון ייחודי, תסתכל, כי אנחנו כנראה יש לי קצר על זה איפשהו באתר שלנו. וזה בדרך כלל משאב נהדר לחפש כאשר אתה ראשון איבד על איך להתמודד עם בעיה. שלישית, יש לנו גם study50 וreference50. אז ללמוד 50 ב אתר הוא רק קישור. זה, אני חושב, study.cs50.net או משהו כזה. פשוט גוגל זה. יש לנו המון שקופיות שהוכנו. יש לנו הרבה מכנסיים קצרים ו דברים walkthroughs-- כל הידור נחמד מאוד ומסודר לכולכם כדי לדפדף, לראות כל מושגים שאתה מבולבל לגבי. זה הייתי כנראה להיות מכוסה שם בstudy50. Reference50-- דומה. יש לנו הרבה הערות שונות זמין לרשותכם. ולבסוף, יש לנו מה נקרא CS50 דיון, פורום שבו, אם בלילה שלפני אתה עושה בעיות שלך, אומר, יש לך שאלה. התחבר כדי CS50 דיון. פרסם את השאלה שלך. ואז אחד hundreds-- אולי, thousands-- של עמיתים לוקח המעמד הזה באינטרנט להתחבר. ואולי מישהו יכול לקבל התשובה שלך לפני שפחית ת"א. זה בעצם רק פורום מקוון שכולנו יכול להשתמש בו כדי לדון בבעיות שלנו. זה מגניב. אוקיי. אז בעיה קובעת. אנחנו עומדים ממש ב עבה של בעיה להגדיר שני. הרבה מאתנו יש כבר נאבק בבעיה להגדיר אחד. אנחנו כבר יודעים שאולי מחכים לאמש לעשות pset זה לא הדבר הכי חכם לעשות בCS50. טיפים ועצות במהות ל הצלחה היא לקרוא את כל המפרט. כמה מכם יש כבר לקרוא את המפרט לpset 2? אוקיי. זה סכום מוצק. אני יודע שאתם כנראה הכירו עכשיו המפרט הוא באמת ארוך. הם באמת, באמת ארוכים. זה ממש קשה לקרוא כל שורה של שמילה בקפידה על ידי מילה. אתה רוצה רק כדי לרחף למקום שבי זה אומר לך לעשות משהו. אני יכול להבטיח לך, אל תעשה את זה. אם אתה עושה את זה, אתה כנראה הולך לפספס איפשהו שבו הוא אומר לך איך להתחיל בעיה או שזה אומר לך מה לשם הבעיה שלך או שזה אומר לך, זה כנראה הדרך הטובה ביותר להתחיל לעשות את הבעיה שלך. ואז אתה תהיה אבוד. כאשר אתה מנסה לקרוא שלך spec באמצע, הרבה החשוב information-- בכי אתה לא הולך להיות מסוגל באמת גישה. אז לקרוא את כל המפרט. נסה לקרוא את כל המפרט לפני שאתם מגיעים לקטע, כי אז, כאשר אנו לדבר על pset, כל יכול יש לנו רעיון של מה שקורה. שנית, מדובר בקונספט שאני רוצה להפנות הרבה לאורך כל סמסטר הקורס. אבל בעצם, לפגוש אותנו באמצע הדרך, נכון? שלי, כמו ת"א וג'ייסון כקורס מנהל וScaz כפרופסור שלך ודוד כפרופסור וכולך TAS היפה האחר בקורס זה, עוזרים בcourse-- זה אנחנו עושים כמיטב יכולתנו כדי להבטיח שאתה מגדיר עד כדי להצליח בקורס זה. אנחנו יקיימו את החלק. אנחנו יקיימו שעתי עבודה. אנו לענות לטלפון שלך שיחות, לענות הודעות הדואר האלקטרוני שלך, לעשות כל מה שאנחנו יכולים לעשות בטוח השאלות שלך נענות. עם זאת, לעזור לנו יותר מדי. לפגוש אותנו באמצע הדרך. אם אתה בא לשעתי עבודה לא שהלכתי לסעיף, לא אחרי שראה את ההרצאות, שאין לו המושג מה קורה, להיות כמו, יעזור לי. אני הולך להיות כמו, כן, אני מצטער. זה יכול להיות זמן להלוות הכתף לבכות על ש, כי אני לא בטוח מה אני יכול לעשות כדי לעזור לך אם אתה לא מנסה לפחות לעזור את עצמך קצת בהתחלה. לפגוש אותנו באמצע הדרך. אתה יודע, בבקשה לבוא מוכן לענות ולקבל מוכן לעסוק בחומר. זה עושה כל כך הרבה דברים קל יותר לכל המעורבים. כן, זה די הרבה זה. דירוג. אז בתכנית הלימודים, זה די לגבי מעמיק כיצד אנו כיתה. אבל בעצם, ההתמוטטות בזה הוא 50% מהציון שלך יהיה psets, ש הוא נחמד, כי זה שבו אתה מבלה את הרוב רוב הזמן כמובן שלך על. בחנים 40%, ושלך פרויקט גמר יהיה 10%. יהיו שני בחנים בכל במהלך הסמסטר. אני חושב פעמים והתאריכים גם מופיע בתכנית הלימודים. הדרך שתהיינה להיות לדירוג psets הוא שיש לנו בעצם ארבעה ערכים שאנו מקצים לכל כיתה. יש לנו ערך של היקף, תקינות, עיצוב וסגנון. אז כפי שאתם רואים, זה סוג שלנו נוסחה לחישוב psets. שלושה אנחנו נותנים ביותר משקל לנכונותו, כי ברור שהמאמן שלך יש בדיקה למקרים כי אנחנו רוצים את זה לבדיקה. יש לכם את כל check50 לרשותכם. זה פונקציה שימושית מאוד שכולכם יכולים להעלות את הקוד שלך לשרתים שלנו, שבו אנחנו נבדוק את זה בשבילך. ושראית אותם Frowny פנים, פרצופים מחייכים. הם באמת, באמת מועילים. נא לא להיות תלמיד שרוצה ניסיונות לhardcode בכל התשובות להם. אני בהחלט ראיתי בי pset מישהו ראה את כל הערכים של check50 והם פשוט קשים מקודדים in-- אם מספר זה, להדפיס את המספר הזה. אם מספר ש, להדפיס את המספר הזה. אל תעשה את זה. למרות שבחינה טכנית check50 הוא נכון, הדרך לפתרון שלך הבעיה היא לא נכונה. אז פשוט להשתמש check50 במשורה. אבל גם לוודא שאתה להבין איך זה פועל, התכנית פועלת בנוסף לcheck50, כי אנחנו לא יכולים לבדוק כל מקרה אפשרי של check50. אנחנו נהיה בדיקה כמה מהם. עיצוב הוא למעשה, כיצד מתוכנן היטב הוא את הקוד שלך? אם אתה מרובה עותק-הדבקה שורות קוד רב, פעמים רבות. אולי אתה לא צריך למדי העיצוב הטוב ביותר בקוד שלך. אולי זה זמן להוסיף לולאה ש. בעיקרו של דבר, כאן זה רק כל על מנסה לעשות את הקוד שלך, מנסה לכתוב את הקוד שלך בצורה יעילה ככל האפשר, כך שהתכנית שלך פועלת מהר ככל האפשר. לבסוף, יש לנו סגנון. אז סגנון הוא סוג של שרירותי, מונח סובייקטיבי. אני יודע שיש לנו באופן רשמי מדריך סגנון 50 לCS50, שבו הוא אומר לך, אה, אתה צריך מקום כאן. אתה צריך סוג של פורמט הקוד שלך בדרך זו. אתה צריך שם דברים בדרך זו. באמת לא אכפת לי, כשלעצמה, איך אתה בוחר סגנון הקוד שלך, רק כל עוד אתה נשאר עקבי. לדוגמא, אם אתה רוצה להשאיר רווח אחרי הארבעה לפני ארבע הלולאה שלך, רק לעשות את זה בכל פעם. לא סוג של לעשות את זה. אל תעשה את זה פעמים אחרות. אם אתה רוצה לשמור מתולתל שטח פלטה בצורה מסוימת, פשוט תמיד לעשות את זה ככה. לא סוג של לעשות את זה איפשהו פה ואי שם לא שם. כאשר אנחנו דירוג, זה באמת קשה אם אין לי מושג איך אתה עיצוב הקוד שלך, דברים מטורפים ומחוץ למקום. אם אתה פשוט לשמור אותו עולה בקנה אחד, זה הרבה יותר קל לי כגדול יותר כדי להיות מסוגל לקרוא את הקוד שלך. זה הרבה יותר קל לך כסטודנט כדי להיות מסוגל להסתכל דרך הקוד שלך ולראות מה לא בסדר עם זה לחתוך למה יש בעיות. סגנון הוא אחד הדברים הקלים ביותר אתם יכולים לעשות כדי לקבל ציונים מלאים. בעיקרו של דבר, אם אתה רק אכפת, אם אתה משלם חמש דקות של תשומת לב הקוד שלך כל שבוע, אתה צריך להיות מקבלים נקודות בסגנון מלאה. לבסוף, יש לנו מה שנקרא המכפיל של היקף. Scope-- אני יודע שזה גדול מילה, במיוחד במעמד הזה. אבל היקף, בכל אמצעים ש הוא שאתה מנסה psets למיטב יכולתך. אם תפעיל בשלושה מתוך ארבע הבעיות שלך ואפילו לא מנסה אחרון, אתה כנראה הולך לאבד כמה נקודות בהיקף. גם אם אתה רק מתחיל בעיה, לעשות את המיטב כדי לעבור אותו. גם אם זה לא עובד, פונה בזה, משום שמראה ומדגים לנו שאתה מנסה, ש אתה ניסית את הבעיה להגדיר למיטב יכולתך. ואז אנחנו יכולים לתת לך נקודות מלאה להיקף. היקף הוא גם חשוב מאוד עבורנו כאשר מדבר על ירידת ציון pset הנמוכה ביותר. אז במהלך סמסטר, יש לכם תשע psets. ואנחנו יהיו למעשה יורדים הציון הנמוך ביותר מאלה תשע, אבל רק אם יש לך נקודות היקף מלאה. אז אם אתה פונה בpset שלם, למרבה הצער, אנחנו לא יכולים לרדת כי אחד, בגלל ההיקף שלך נקודות לא הושלמו. אז גם אם יש לך את השבוע הנורא שבו אתה מת ואתה חולה או הכלב שלך מת, החתול שלך מת, ואתה עמוס בשיעורי בית, רק אנסה pset. לעשות את זה על הצד הטוב ביותר של היכולת שלך. אם זה לא עובד, זה לא משנה. רק להפעיל אותו ב. לפחות אנחנו יכולים לתת אתה מצביע על מאמץ. למאמץ בכיתה זו. בירידת הציון הנמוכה ביותר לפחות למאמץ. אז כן. זה פחות או יותר אותו. למישהו יש שאלות כל כך הרבה על איך אנחנו כיתה בכיתה? או כל אחד מאלה? כל אלה כל כך far-- סעיפים, שעתי עבודה? מגניב. אוקיי. אז זה נושא שלא אחד לא באמת אוהב לדבר עליו. אני לא ממש רוצה לדבר על זה. אתם לא באמת רוצים לשמוע אותי מדבר על זה. אך למרבה הצער, כולנו צריך לדבר על זה. דוד בילה 20 דקות הרצאה מדברת על זה. וכי הוא הנושא יושר אקדמי. אז כולנו כאן כנראה נכתבו מתישהו מאמר בקריירה שלנו ייל. כנראה שאנחנו מקבלים שיחה בי יש לנו כבר אמר לא לגנוב המאמר שלנו, בגלל שהעבודה היא לא שלנו. במדעי מחשב, יש לנו אותו הסוג של מושג. כל העבודה שאתה שולח, כל הקוד שאתה כותב צריך להיות קוד שכתבת. לא צריך להיות קוד שיש לך הועתק ממקום אחר. לא צריך להיות קוד ש אתה כבר בגוגל וצנחת ב ואתה לא באמת יודע אם זה עובד. אתה סוג של יש תחושה של מה הוא עושה, אבל לא ממש. במקרה של ספק, בעצם, זה פשוט להיות סביר. בתכנית הלימודים שלנו, יש לנו רשימה שלמה של דברים אנו רואים סבירים כ לעומת לא סביר. לדוגמא, סביר הוא שאתה וחבר שלך דיון מה הדרך הטובה ביותר ללכת על לוגי פתרון בעיה. זה די סביר. מה לא יהיה סביר הוא אם אתה בחורים הגיעו יחד, הקלידו אותו הקוד, ופנה באותו הקוד. זה לא סביר. אותו דבר, סוג של חיבור. אם אתה רוצה לדון ב עם חבר שלך, היי, זה מה שאני רוצה לכתוב על. אלה הם הצעדים שאני רוצה לקחת לכתוב על זה, גדול. זה נפלא. אנא לשתף פעולה אחד עם השני. אם אתם מתחילים כתיבה אותו הדבר, להפוך באותו המאמר, זה פחות אישור. אז במקרה של ספק, פשוט לא עושה את זה. כאן, בCS50, יש לנו אנחנו סקריפטים שהריצה כדי להפוך לבדוק לא רק את נכונות הקוד שלך, אלא גם את ייחודו של הקוד שלך. אז בבקשה, אל תעמידו אותנו בעמדה שיש להתייחס למקרה שלך EXCOMM. בבקשה, רק לכולם, בואו פשוט להפוך את זה לחוויה נפלאה. כולם לומדים טובים יותר, כולנו מאושרים יותר, וכולנו להגדיר ל להצליח בקורס זה. משהו שהוא מאוד ייחודי על זה בכיתה כי אני חושב שכולם באמת צריך לשים לב אליה הוא שיש לנו מה שנקרא החרטה סעיף בתכנית הלימודים שלנו. אז בעצם, בתוך 72 שעות, אם אתה מאמין שאתה עשית משהו אתה לא ממש בטוח ש מתאים, בבקשה לבוא אלינו. אנו מבטיחים לכם שתוך 72 שעות אנחנו נטפל במקרה עצמנו מבלי להתייחס לגבוה יותר סמכות בממשל. אז אם אתה בא אליי ואומר, אנדי, היי, אני באמת מצטער, אבל אני חושב שיש כמה קווים בי קוד אמש שאני סוג של בגוגל, ירד מסטאק גלישה, להעתיק ולהדביק, ואני באמת, באמת מצטער על זה, תודיע לי. נא לא רק לתת לו מוגלה ורק מקווה שאני תופס את זה. אנו לתפוס אותו. רק תבואו אליי. תודיע לי תוך 72 שעות. אנחנו להבין פתרון. ואנו מבטיחים כי לא נתייחס ל רשויות אוניברסיטה במהות. אז זה לטובתך רק להיות כנה עם כולם מעורב בקורס. אוקיי. אוקיי. אז עכשיו, במהירות לפני ש אני עובר על, עושה כל אחד יש לך שאלות בנוגע ללוגיסטיקה על איך קורסים שאנחנו הולכים לרוץ, איך חלקים הולכים לרוץ, כל זה? אוקיי. כן. קהל: [לא ברור]? ANDI פנג: כן. אז quizzes-- כמה מכם בסעיף השנייה / יום רביעי? כמה מכם נמצא ב ביום שלישי / יום חמישי? אוקיי, אז זה פיצול מוצק כאן. לכן הדרך שאנחנו רצים זה באוניברסיטת ייל הוא ש הולכים להיות שתי נפרדים quizzes-- אחד לכל section-- ש יילקח בזמן השיעור. אני חושב שזה באוקטובר, סוף אוקטובר, משהו כזה, כשבוע אחד של החידון. כן, כל כך פשוט מגיע לכיתה. באותו יום שני או ביום רביעי, אתה תיקח את החידון. ביום שלישי או ביום חמישי, אתה תיקח את חידון שונה. אבל את אותו החומר יהיה מכוסה. כן. שאלה טובה. כן. קהל: איפה אנחנו ללכת לבדוק הציונים שלנו? ANDI פנג: כן. אז אני אשלח את דואר אלקטרוני מה כל שבוע כאשר בחנים הם graded-- או, מצטער, כאשר psets מדורג. Psets בדרך כלל מופעלים בצהריים או ביום שישי. אז אני מבטיח שאני אעשה לנסות להשיג אותם בחזרה אליך על ידי הצהריים של יום שישי הבא. בכל פעם שאני כיתה pset, אני אשלח את הודעה על הספר בכיתה שאומר לך את הציון שלך ניתן לצפות באינטרנט. אז זכות זו בשבוע, אחרי ש לסיים דירוג psets בשבוע שעבר, אתם תקבלו דואר אלקטרוני הודעה אומרת לך, היי זה המקום שבך ללכת כדי להציג את הציונים שלך. ואתה יכול לראות בכל התפלגות הציונים שלך. אתה יכול לראות את ההערות. אה, דבר מהיר גם. סעיף התגובה בגדול ספר הוא המקום שבי אני בטח מבלה את רוב הזמן שלי לדירוג. אז דבר אחד זה באמת חשוב כאשר אתם צופים הציונים שלך בpsets הוא לא מחפש רק בציון הפיזי אבל לוקח גם זמן ל באמת לקרוא התגובות שלי. לעתים קרובות זה נותן לך משוב על איך שאתה פתרון בעיה. אם אתה צריך לעשות משהו קצת יותר טוב, ביקורת בונה בדרך כלל היא הטוב ביותר שניתן בסעיף הערות אלה. אז בבקשה, בבקשה, אני הולך לבלות זמן כתיבת הערות. אנא, הייתי ממש מעריך את זה אם אתם היו לקרוא תגובות אלה. אוקיי. מגניב. בסדר. אז אנחנו הולכים להתחיל לדבר ורק בדיקת מהירות חלק מהחומר מ שבוע אפס רק כדי שאנחנו בעמוד הנכון עבור מתחיל בעיות של השבוע. אז בזמן שהלולאה היא אחד של שלושה הסוגים של לולאות שהזכרנו קודם לכן במעמד הזה. לולאה בזמן שבעצם כתוב בתחביר שבו, בזמן שמצב מסוים, לעשות את זה שוב ושוב, נכון? תחשוב על זה בגרפיקה זה כאן. אתה הולך להתחיל ב נקודה מסוימת בקוד שלך. אתה הולך להיכנס למצב הלולאה if-- אני לא יודע-- x הוא פחות מאחד. אם זה נכון, אתה הולך כדי להפעיל את גוף הלולאה. ואתה הולך להמשיך לעשות כי שוב, שוב, שוב, שוב וover-- ולכן זה loop-- עד המצב שלך הופך להיות שווא. אז בדרך זו, תוך לולאה הוא אחת הדרכים פשוטות יותר לכתוב כל סוג של מצב ש צריך לחזור שוב ושוב ושוב. רק להיזהר בכל פעם ש אתה כותב כל סוג של לולאה שיש לך מצב יציאה כ גם עדכון לכל מה ש כך שהלולאה שלך לא רק לרוץ שוב ושוב לאין שיעור. בכל מקרה, אתה הולך לרוצה לוודא שאתה משנה היבט כלשהו של הקוד או בסוף הלולאה שלך רק כדי לוודא שיש לך דרך של התקדמות לקראת המצב שאתה רוצה לפגוש לסוף. האם זה הגיוני לכולם? אנחנו פשוט לא רוצים להיות תפס בספירלה שבו זה אנחנו הולכים סביב סביב ו אין דרך לשבור את הלולאה. וכל לולאה במהות יש דרך לעשות את זה. אוקיי. שנית, רבים מכם בpsets מריו כנראה הייתי צריך להעסיק סוג זה של לולאה. זה נקרא לעשות בזמן לולאה. קודם כל, כל אחד יכול להגיד לי מה ההבדל בין מטלות תוך לולאה ולולאה בזמן שהוא? כן. קהל: לעשות בזמן לולאה פועל בראשון [לא ברור]. ANDI פנג: כן, בדיוק. אז לעשות בזמן הלולאה תמיד עושה מה ש הוא בתוך המטלות, בתוך סוגריים שם ועושה מצב ש לפני בדיקה כל-- מצטער, עושה קוד שלפני בדיקת המצב. וזה רלוונטי במיוחד לנו כאן במעמד הזה, משום שרוב הפעמים אנחנו הולכים רוצים להנחות המשתמש לסוג כלשהו של קלט. ולאחר מכן, בהתאם ל הקלט הם נותנים לנו, אז אנחנו יכולים להעריך, הו, לעשות אנחנו צריכים להנחות אותם שוב? אז במריו, אם המשתמש נתן לך גובה שלילי, למשל, אתה הולך לפקודה הראשונה ולעשות כל מה שיש בתוכו. אז אתה הולך לבדוק אילו. אתה יודע, הוא שלילי 1, הוא שמספר חיובי? אם זה לא, אני מתכוון ללכת בחזרה ולחזור על המטלות וחזור וחזור וחזור עד ש לבסוף אתן לך מספר שאתה אוהב, שכולנו יכול להעסיק בקוד שלנו. זה די חשוב ל בעצם כל קלט משתמש. אני יכול להבטיח לך זמן בpset בי אנו מבקשים מכם הקלט כל סוג של קוד, אנחנו כנראה הולך לתת לך מקרה מבחן שבו אנו נמצאים הולך לתת לך משהו רע זה הולך לנסות לשבור את הקוד שלך. אם ננסה לשאול אותך לקלט מספר שלם, אנחנו יכולים רק לתת לך מחרוזת ותראה איך היית להתמודד עם זה. אם אנו מבקשים מכם להעסיק גיל, אנחנו יכולים לתת לך מספר שלילי כדי לראות איך היית להתמודד עם זה. רק לוודא שאתם בודקים ל מקרים שבהם אתה לא מקבל את הטוב ביותר קלט, בואו נגיד. ולעשות בזמן לולאה לעתים קרובות הוא הטוב ביותר דרך לעצב את הקוד שלך כל כך כי היא עונה על היקף זה. אוקיי. אוקיי. אז זה כנראה ביותר לולאה מתוך שלוש מורכבת שבדקנו עד כה. וזה נראה מאוד מפחיד בהתחלה. אבל אני מבטיח לך, ברגע שאתה חבר ' לקבל את העיקרון של איך להשתמש בלולאה, זה אחד הדברים השימושיים ביותר, רוב הכלים שימושיים בארסנל שלך להתקדמות במעמד הזה. כך למשל, בלגרד, היו לנו בלוק פשוט מאוד זה שרק אמר לחזור על זה מסוים ביטויי מספר מסוים של פעמים. אגב, SAJ-- זה Scaz אנדי ג'ייסון. אנחנו לעתים קרובות לחתום SAJ המיילים שלנו. אם אנחנו אומרים SAJ, אל תהיה מבולבל. זה רק אנחנו. אז בScratch, שהיינו מסוגלים לי בלוק שאמרו, אני אוהב לחזור על SAJ! 10 פעמים. פשוט מאד. ההיגיון מאחורי זה הוא מאוד, מאוד פשוט, נכון? אני רוצה ראשון לעבור הראשון זמן ורואה את זה, בפעם השנייה ורואה את זה, בפעם שלישית, כן הלאה וכן הלאה, עד שתגיע ל -10. וכפי שהיינו מצהיר כי ב קוד הוא רק דרך פשוט ללולאה. אז ל, אתה הולך להכריז משתנה כאן, במקרה זה, עם int. אנחנו הולכים לשם זה אני. אנחנו הולכים לאתחל אותו ל -0. ומהדורת העצירה היא הולך להיות לי הוא פחות מ -10. והעדכון הולך להיות אני ++. ובתוך הלולאה, זה הולך לביצוע עד סופו של דבר זה פוגע בסופו של condition-- בי מקרה, זה הולך לשבור את הלולאה. לא צריך להיות דברים שאתה בחורים שראו כל סוג של לפני והייתי צריך לעשות לבעיה שלך להגדיר אחד. האם יש למישהו שאלות לגבי ללולאות עכשיו? אוקיי. גדול. אוקיי. אז לאלה מכם שיש לי לקרוא את מפרט pset לשבוע יודע שאנחנו הולכים צריכים להעסיק משהו שנקרא ASCII ושולחן ASCII. אז דוד בהרצאה ניגש לזמן קצר איך הכל essentially-- מחשבים מקודד במחשב ב בינארי, באפסים ואחדים. ואופן שבו מחשבים יכולים כדי לאחסן ערכים שונים בתוספת לאפסים ואחדים הם באמצעות מיפוי מספרים אלה מייצגים ספרות אחרות או דמויות אחרות במהות. אז במקרה הזה, ASCII table-- כל שהיא עושה הוא דמויות מפה, או תווים, למספרים. אז את קובץ קוד המקור ב שלך computer-- הוא רואה, היי, חבורה של אפסים ואחדים, אפסים ואחדים, אפסים ואחדים. זה מה שמאוחסן ב זיכרון בפועל של המחשב שלך. אבל כאשר אנו בני אדם רוצים תקשורת עם המחשב, אנחנו want-- אומרים, למשל, אם אני רוצה רישיות, אני הולך צריך דרך כלשהי של מורים למחשב, אוי, כאשר אני מקליד אותיות גדולות, אני מתכוון ייצוג זה בינארי. ולכן הדרך שאנחנו עושים, כי הוא זרקה דבר שרירותי נקרא שולחן ASCII, שבו אנחנו, בני אדם, כ מתכנתים, לפני כמה זמן, החלטנו באופן שרירותי ש הולכים להקצות מספר אלה ערכים לדמויות הללו. אז אתם יכולים google מקוון זה. אני חושב שיש קישור אליו בך pset-- רק שולחן מפת ASCII, ASCII שולחן. זה פשוט מתרגם ינארי מספרים לתווים. וזה הולך להיות מאוד שימושי עבור סט הבעיה שלך בכל פעם שאתה רוצה לחשב משהו או אם אתה רוצה להציג מסוים תווים או מספרים שלמים או לתפעל תווים מסוימים. זה הולך להיות מאוד חשוב שכל מה שאתה יודע איך לנווט שולחן ASCII. כך למשל, באותיות גדולות מיוצג על ידי המספר 65. והאותיות קטנות מיוצג על ידי 97. לכן חשוב לדעת ש הבדל בין שני הערכים הוא 32. לעתים קרובות, אם אתה צריך להמיר מ אחת לשנייה, ההבדל הוא 32. ואל תדאגו אם אתה סוג מבולבל של על זה בהתחלה. אנחנו נלך על איך היינו להעסיק את זה בקוד בפועל. אוקיי. אז לאלה מכם עם מחשבים ניידים החוצה, אל תהסס להרים את שולחן ASCII, כי כנראה יהיו אלה אתם דורשים הפניה מה הם התווים. אוקיי. אז בידיעה כי מסוים דמויות המפה למספרים מסוימים, אם הייתי לרוץ רק הראשון קו של שcode-- printf, אותיות קטנות, בניכוי אותיות גדולות א 'האם מישהו יש ניחוש על מה יהיה הדפסה מתוך המסך עכשיו? אז קודם כל, מה עושה אותיות קטנות מייצג? מה מספר הוא ש מקודד בטבלת ASCII. מצטער? קהל: 97? ANDI פנג: 97, גדול. ומה הוא באותיות גדולות? קהל: 65. ANDI פנג: אז מה הוא 97 מינוס 65? קהל: 32. ANDI פנג: אישור. אז מה אתם חושבים שקורים ל יקרה כשקלט ששורת קוד למחשב שלי? קהל: [לא ברור]. ANDI פנג: מצטער, לדבר. אין דאגות. זה מאוד בטוח הסביבה, מינוס המצלמה. אנחנו הולכים כל צריכה-- אין דאגות. רק שכולנו הולכים להעמיד פנים כמו זה פשוט מצמרר אותנו בחדר הזה. אין דאגות. אין שאלה היא טפשה מדי. אין תשובה היא תשובה טיפשית. אני כנראה הולך לעשות טעויות במהלך ההוראה שלי. ברצינות, בחורים, פשוט לפלוט את זה. להיות בטוח בעצמך, אתה יודע? אז מה זה היה? מי אמר שהתשובה האחרונה? אוקיי. לצעוק שנחמד וברור. קהל: 32? ANDI פנג: 32. אישור, בואו להפעיל קוד זה ו לראות אם זה מה שקורה. אוקיי. אז כפי שאתם יכולים סוג של לראות, הסימון האופייני לי הקמתי כאן לאיך היינו להעסיק כל סוג של תכנית במחשב שלנו. יש לנו הפונקציה העיקרית שלנו בתוך הפונקציה העיקרית שלנו. אני רק הולך להעתיק ו להדביק את שורת קוד. גם להיות זהיר כשאתה בחורים מעתיק ומדביק את קוד. מפעילים מסוימים לפעמים לא להדביק על כראוי. במקרה זה, בניכוי סימן היה למעשה מקף. וכך המחשב לא להרים אותו. אז הייתי צריך לחזור ו הקלד פיזי ש. רק להיזהר כש אתם עושים את זה. אוקיי. אנחנו הולכים כדי להפעיל את זה כאן. אז אנחנו הולכים לCD לsection2. אני כבר נקרא asciimath תכנית זו. אז לזכור, כאשר אנחנו רצים כל תכנית, אנחנו רוצים לקמפל את זה ראשון על ידי הפעלתו באמצעות האיפור שלנו. ואז אנחנו רוצים לרוץ למעשה התכנית על ידי עושה dot-קו נטוי. אז אנחנו הולכים ל./asciimath. נכון, יש לנו ללכת. ואנחנו רואים 32. כל הכבוד. מגיע לך ממתק. סוכריות בשבילך. מצטער. בסדר. אוקיי. אז אנחנו יכולים לחזור לדוגמא שלנו כאן. אהה, לא. אהה. אוקיי. אני רק הולך לשמור את זה ככה. אוקיי. אוקיי. אז כפי שאתם יכולים לראות, אנחנו יכולים לעשות הרבה דברים מאוד מעניינים, הרבה דברים מאוד מגניבים, הרבה דברים מאוד מסובכים מעורבים תווי ASCII ומספרים. ברגע שאתה מגיע לקו חמש, זה הרבה פעל יחד. אנחנו לא מתכוונים ללכת באמצעות הסעיף. אל תהסס, אם אתה יכול, היגיון את זה על נייר ראשון על מה שצריך להיות קורים כאשר אתה קלט מחרוזת כזה של ערכים. לדוגמא, שבשורה האחרונה, יש לנו z-- המייצג number-- מסוים זה-- שמייצג גם modulos number-- בתוספת 1 מסוים 26 בתוספת אותיות קטנות. אם אתם תמשיכו לקרוא באמצעות אלה, ש יכול לראות דפוס לבוא ב איך אנחנו מניפולציה הקוד. אני מאוד, מאוד ממליץ אחרי סעיף כולכם בחורים קדימה, קלט אלה כל במחשב שלך ולראות איזה סוג של מספרים יוצאים והנמקה מדוע דרך אלה קורה, כי לpsets זה יהיה חשוב באמת לך להבין מדוע דברים מסוימים קורים. כל שקופיות אלה יהיו מקוונים. אז אינו דואג מנסה להעתיק פיזי את הערות. באינטרנט הכל. סעיף זה עצמו יהיה באינטרנט. כל קוד המקור שלי ש אני רץ יהיה מקוון. כן. האם עדיין יש לך שאלה? קהל: מה הוא modulos? ANDI פנג: אישור. אז מודולו הוא מפעיל שהולך להיות די חשוב pset של הבחורים שלך כאן. לכן הדרך שמפעילים ב- C ובעבודת תכנות הוא שיש לך מה שנקרא סמל חטיבה וסמל מודולוס, אשר הוא בדיוק כמו סימן אחוזים. אז ב- C, כאשר אתה עושה שלם מחולק במספר שלם עם קו נטוי, יש C נטייה רוצה לחתוך את כל הנקודות עשרוניות, כי שלם רוצה להמיר למספר שלם. זה לא הולך לרוצה להיות כפול עם חבורה של מספרים עשרוניים כל אחרי זה. אז אם אני עושה 3 חלקי 2, שזה הולך לנתק את 0.5 ורק לתת לך 1. אז זה משהו שיש זהיר מאוד של כשאתה עושה כל סוג של מתמטיקה בתכנות, הוא שהמספרים שאתה מקבל לא יכול להיות המספרים שאתה חושב, ולכן עיגול בך pset האחרון הוא כל כך חשוב. מודולו נותן לך את השארית. כך למשל, אם אני עשיתי 3 מודולו 2-- כך 3 אחוזים סימן 2-- זה ייתן לך את שארית ש. 3 מחולק אז על ידי 2 הוא 1.5. זה שארית 1 מתוך 1. זה היה נותן לך 1, ש הוא שארית ש. לכן, כאשר אתם נעים דרך שולחן ASCII, מודולו יהיה בסופו משהו שהוא מאוד חשוב, ונדברנו שמאוחר יותר. אוקיי. אז משהו שהוא יפה, די חדש ודי ייחודי שאנחנו כבר דנו השבוע הוא המושג מה הוא מערך. אז המערך הוא הראשון סוג של מבנה נתונים שאנחנו הולכים נתקל בזה בכיתה. כל מבנה הנתונים הוא איזה שרירותי, פשוטו כמשמעו דברים כמו מבנה שאנחנו כמתכנתים יצרנו, שאנחנו כבר לשים בקוד שלנו ש יכול להכיל קטעי קוד אחרים. אז במובן הזה, array-- לחשוב על זה כקובץ ממשלה, שבו אם אתה פותח שונה מדפים של ארון הקובץ שלך, אתה יכול לגשת לדברים שונים. בזיכרון, מערך הוא פשוט עושה אותו הדבר במחשב שלך. אתה יכול יש לנו blocks-- שונה קורא להם indices-- של מערך. זה בדיוק כמו בלוק, מדף של זיכרון שיצרנו בתוכך מחשב שאתה יכול קלט דברים מסוימים בחללים שונים. אז עם מערך, אתה תמיד צריך specify-- אתה צריך לציין שהכריז מערך בפורמט הבא. אתה הולך ראשון לציין את סוג הנתונים שברצונך ליצור המערך. אם אני רוצה מערך של מספרים שלמים, אני הולך לשים int ממש שם. אם אני רוצה מערך של מחרוזות, אני הולך לשים את המחרוזות שם, שמו של המערך שלך, ולאחר מכן אתה הולך להיות בסוגריים מרובעים. ובתוך סוגריים מרובעים, אתה הולך להיות בגודל של המערך שלך. משהו שבאמת חשוב ל יש לזכור בעת יצירת מערכים היא כי ברגע שאתה יוצר מערך, גודל שלא ניתן לשנות. אז אם אתה יודע שעכשיו יש לך מערך של גודל 10, אתה יודע שאני הולך יש לי 10 תאים בתוך או 10 מדדים במערך זה, וזה אף פעם לא קורה כדי להרחיב או לצמצם לא משנה מה, ושיש כיום רק 10 בלוקים של שטח הוקצה בזיכרון שלך שיכול לאחסן עד 10 דברים של מה שהשקעת. אז בדרך זו, סוג נתוני מערך, מבנה נתונים שהוא מערך שונה מאוד מכמה אחר שנציע ב להיות כיסוי מאוחר יותר בקורס זה. כן. לדוגמא, אם אתה רוצה ליצור מערך של גודל 3 ש משתנים כלולים של integer-- אה, סליחה, של temperature-- וטמפרטורה, של כמובן, הוא מספר שלם. אז היינו ליצור int, שהוא סוג נתונים של מה שאנחנו רוצים לאחסן. אנחנו הולכים לקרוא לזה בטמפרטורות למען המינוח של שמות משהו שכולנו מבינים. ואנחנו הולכים להיות בסוגריים מרובעים. ואנחנו רוצים שלושה מספרים. אז אנחנו הולכים לשים שלוש בתוכו. משהו שהוא באמת חשוב לזכור הוא שמערכים אפס אינדקס. כל זה אומר הוא שאתה תתחיל עם המדד של 0, ואתה מפעיל דרך גודל של המערך מינוס 1. כך למשל כאן, אנחנו יש מערך בגודל 3. זה הולך להיות מסוגל להחזיק שלושה ערכים. אבל המספרים themselves-- ש מספר, המערך, מדד ש, המערך, הם 0 עד 2. אז חבר'ה, באמת, באמת זהירים כאשר אתם עוברים הבעיות שלך להגדיר ויצירת כל סוג של מערך, כי הרבה פעמים זה באמת, באמת קל לשכוח את זה. אני באמת לא צריך את המדד של 3, שאני פשוט כרגע יש המדד של 2. ואם אתה מנסה לגשת למדד השלישי, זה הולך להיות מה בשם שליחות קטלנית null. זה לא הולך לבעצם קיימים במערך. והמחשב לא הולך רוצה את זה. כדי להיות זהיר בכל פעם ש אתה ניגש רק דברים כדי לוודא שאתה זוכר שמערכים הם אפס צמוד. אוקיי. אז הדוגמא הראשונה היא פשוט דרך של יצירת מערך אחד. הדוגמא השנייה שיש לי להלן הוא רק דרך נפרד של יצירת מה הוא אותם נתונים מבנה שיש לנו רק שהוזן. אז במקום פיזי פועל דרך ולשים בטמפרטורה של 0 שווה כל, טמפרטורת 1 שווה כל מה ש, 2 שווים הטמפרטורה מה, אני באמת יכול רק ישירות ליצור את כל זה בשורה אחת לסוגריים מרובעים טמפרטורה שווה. והודעה מוקדמת במקרה זה, אתה לא צריך כדי לציין עד כמה גדול המערך שלך הוא, מכיוון שהמחשב הולך לעבור ולראות שיש שלושה אלמנטים בסוגריים מסולסלים אלה. וזה הולך יודע, אישור, אני צריך מערך של גודל 3. אתה לא הולך צריך קלט זה בדרך הבאה. וגם, כן, ככה. האם יש למישהו שאלות לגבי איך אנחנו עושים את המערכים או איך המבנה של מערך עובד? כן. קהל: [לא ברור]? ANDI פנג: כן, בדיוק. אז אם אתה היה להכריז ולאתחל מערך בשיטה הבאה, שהוא הדרך השנייה, אתה יכול פשוט לעזוב אותם. והמחשב באופן אוטומטי יודע ש צריך לספור כמה אלמנטים הם בסוגריים מסולסלים אלה, מופרדים בפסיקים. אז הנה הם רואים 65, 87, 30. אז המחשב יודע, הו, יש שלושה מספרים שלמים. אני יודע ליצור שם מערך טמפרטורה עם שלושה אלמנטים בזה. שאלה טובה. כן. קהל: האם לא ניתן ליצור מערך עם סוגים שונים של נתונים שאפשר היה להיכנס לתוכו? לדוגמא, עם מספרים שלמים [לא ברור]? ANDI פנג: לעניין של המעמד הזה, לא, עכשיו. כאשר אתה יוצר נתונים מבנה דמוי מערך, אתה אומר לי מחשב, היי, אני צריך אותך להקצות זה הרבה זיכרון בכונן הקשיח שלי, עם כל תא ש מספר מסוים של ביטים. זכור שלמדנו בשבוע אפס כי הנתונים שונים יש סוגים גדלים שונים? כך למשל, מחרוזת הוא סכום שונה של שטח מאשר char, ש היא כמות השטח שונה ממספר שלם. ולכן אם לא תציין ולך לערבב ולהתאים אילו סוגים של משתנים יש לך, מחשב של הולך להיות מאוד מבולבל. וזה לא הולך לדעת כמה זיכרון לתת לך. אז למטרות של ימין עכשיו, מחשבים יכולים רק להכיר סוג אחד של מערך. שאלה טובה. אוקיי. אז באופן טבעי, שאלה שנייה שיש לנו הוא, ובכן, עכשיו שיצרנו מערך ואנחנו כבר לשים את כל הדברים האלה במערך, איך אנחנו הולך להיות מסוגל לגשת אליו? אז המבנה האופייני שאנחנו תמיד לגשת מערך הוא שלנו יפה ללולאה. אני מבטיח לכם שנהיה רואה הרבה הבחור הזה כאן. בעיקרו של דבר, כל עת שתרצה לקלט ערכים למערך או שאתה רוצה לגשת אליהם, הדרך הטובה ביותר לעשות זאת היא ללולאה, כי ללולאה, אתה יודע כמה פעמים אתה הולך רוצה לרוץ דרך המערך, כי יש לך מהדורת תחנה, נכון? ובכל פעם שאתה מפעיל דרך, אתה יכול לגשת ל אלמנט שונה של המערך. וגם, זה סיבה בדרך כלל אנחנו מתחילים ללולאות בערך 0, משום שכאשר אתה ניגש למערכים, אתה יכול לגשת למדד אפס. וכך זה מקביל יפה מאוד. אתם אולי רצינו לכתוב לint i שווה 1. הוא אני פחות או שווה ל -3. אבל זה לא היה עובד די כ גם כאן, כי אתה רק יש אלמנטים של 0, 1, ו -2. ולכן אם היה לך להתחיל אני שלך באלמנט 1, 2, ו -3, אתה הולך בסופו של פועל מחוץ לגבולות של המערך שלך, ודברים רעים הולכים לקרות. אז אני מקווה שאתם רואים את segue מדוע בשיעורים הקודמים אנחנו מלמדים אתכם איך לנהל ו לעצב ללולאת הדרך שאנחנו. זה בגלל ש, עכשיו יש לנו הועבר למערכים, אתה יכול לראות למה 0 משאיל עצמו יפה מאוד לגישה. אז כפי שאנחנו עושים את זה הוא לראות-- אני רק הדפסתו כאן למען של הדפסה את זה. אבל יש לי מציין המיקום, הפסיק שלי. ואת הגישה בפועל חלק שקורה. שמו של המערך נקרא טמפרטורה. אז זה טמפרטורה ו i-ה אלמנט של המערך. אז כמו ללולאה עובר, זה הולך להתחיל ב 0. זה הולך להדפיס את מדד ה 0 של מערך זה. אז זה הולך להדפיס את האלמנט הראשון. אז זה הולך להדפיס את השנייה. ואז אנחנו הולכים לשבור. האם כולם ברורים ב איך זה קורה? גדול. בסדר. אז הנה יש לנו דרך של אומר, אם אנחנו לא רוצים לקשה-קוד in-- כמתכנת. אני ממש פיזי לא רציתי לשים בכל מרכיב בודד של מערך זה. אם אני רוצה במקום יש ערכי קלט משתמש, מהי הדרך הטובה ביותר לעשות את זה? ובכן, כאן אני יצרתי הפונקציה הנחמדה הזה, שבו אני יכול להצהיר על מערך. אז int scores-- בואו רק אומר שאנחנו רוצים לעשות מערך שנערך הציונים של כל 18 של התלמידים כאן בסעיף זה. אני חושב שיש לנו קצת יותר מ -18 ילדים היום. אבל למען הדוגמא, בואו פשוט להניח לנו 18. הייתי ליצור שם מערך ציונים עם int סוג, בגלל ציונים, כמובן, הם מספרים. ואני הולך יש לי 18 בסוגריים מרובעים, כי זה כמה תלמידים ש רוצה להיות מסוגל לאחסן עשרות. והדרך הייתי לאכלס המערך הוא שלא היה לי להפעיל אותו דרך לולאה, של כמובן, עם 0 להיות מדד ה 0 שלי. ולאחר מכן עם 18 להיות שלי עצירת מהדורה, כי יש 18 אלמנטים במערך. ואז אני הולך לעשות printf, הזן לזכות student-- בלה בלה בלה. האם מישהו יכול להגיד לי למה אני כאן הדפסת i בתוספת 1 ולא אני? זה סוג של טריק שאלה, לא ממש. זה לא ממש פיזי משפיע על הריצה של הקוד. כן. קהל: [לא ברור] 0? ANDI פנג: כן, בדיוק. זה קצת מביך להגיד, היי, אתה התלמיד בכיתה ה 0 זה. זה קצת מוזר. אז לנו, כבני אדם, לא ממש אוהבים לחשוב על איך מחשבים חושבים. אז למרות ב מחשב, זה אחסון ערכים במדד 0-ה, כאשר אנחנו בני אדם, אנחנו לא באמת רוצה להתייחס לעצמנו כאפס. לכן, כאשר אני פשוט להדפיס את זה, אני הולך להדפיס ולהוסיף 1 רק למען הבהירות. לכן, כאשר אני מדפיס, אני הולך להיות תוכל להדפיס תלמידי 1 עד 18. זה לא ממש משפיע הריצה של הקוד בכל דרך, בדרך שאני להדפיס. אבל להיות זהיר כשאתה למעשה גישה למערך. כשאתה רואה את הציונים אני, מבחין כאן אני בעצם גישה למדד ה 0 ו לא בתוספת 0-- 1 או 1 פלוס 1, במקרה זה, מדד כל כך שזה בעצם ברור. האם כולם סוג של אישור על איך זה פועל דרך ועם כל מדד אני לשים ערך למערך ויצירת מערך עם 18 מספרים שהמשתמש הולך קלט? אוקיי. מגניב. אוקיי. עכשיו אנחנו עוברים למשהו שדי רלוונטי לפיסה להגדיר גם את זה. אני יודע בהרצאה, David-- מצטער, הייתה לך שאלה? קהל: האם אתה יכול להגדיל אותו? ANDI פנג: כן, אז ניסיתי. אבל אני לא יודע. מסיבה כלשהי, זה גרסה של PowerPoint הוא ממש לא עובד גם עם התצוגה. אז אנחנו פשוט הולכים כדי לשמור את זה ככה. כל אלה יועלו באינטרנט. מצטער, חבר'ה. כן. אוקיי. אז אנחנו יכולים להיות גם מחרוזות. אז אם אתם באמת notice-- אני לדעת רוב הלכו על זה בהרצאה ש שהוא did-- מחרוזת היא למעשה רק מערך של תווים, אם אתה חושב על זה, נכון? מחרוזת היא שם או משפט או מילה, נכון? אם הייתי ליצור מחרוזת בשם Andi-- רק את השם שלי, N-D-אני. אתה חושב על זה כפשוט משתנה אחד. אבל בעצם, זה מתפרק לפשוט מערך של תווים. אז יש לו אופי של מאוחסן במערך ערך. יש לו אופי של n מאוחסן ב מדד שני וכן הלאה וכן הלאה. אז באופן כזה, ש יש בעצם סוג זה של מבנה נקבע ב מקום למיתרים שלנו. אז הנה, אם הייתי קלט מילה "לאכול" - כך מילה שווה מחרוזת תקבל מחרוזת. אם הייתי קלט המילה "לאכול", ש הוא פיזי אופן שהמחשב שלי הוא אחסון מחרוזת שבזיכרון שלי. ואם אני רוצה לרוץ שב והדפסה שout-- כך לי שווה אפס, זוכרים, בהרצאה, ש משהו מכוסה שנקרא strlen, או האורך של המחרוזת. כי אני לא ממש יודע עד כמה גדול הוא המערך של כל מה שinputting-- של המשתמש לדוגמא, אני הוזנתי המילה "לאכול", ואני יודע ש זה ארוך שלוש דמויות, נכון? אז אני יכול להכניס לשם שלוש והכל יהיה בסדר. אבל אם משהו קלט המשתמש זה מספר שונה של ערכים, אתה הולך לא להיות מסוגל באמת יודע שכאשר אתה לתכנת את הקוד שלך. אז הדרך שבה אנו מטפלים מקרי מבחן כמו שזה שיש לנו משהו נקרא strlen, שהוא רק פונקציה זה אומר לך כמה זמן מחרוזת היא. אז strlen של מילה. המילה שלי היא לאכול. n שווה strlen של מילה. מישהו יכול להגיד לי מה ש ערך בעצם הוא שם? מה n מייצג תקין עכשיו, בדוגמא זו, אם היה לי לאכול? קהל: 3. ANDI פנג: 3, בדיוק. אז יש לנו לשווה אני int אפס, n שווה 3, בעצם. ואני הולך לרוץ עד שזה פחות מ3i ++. וזה הולך בעצם ללכת דרך ולעשות את אותו הדבר. זה הולך להדפיס וכל ערך לתת לך E-A-T. זה פשוט המציין דרך שונה של כתיבתו. זה הולך להיות מאוד מועיל. כן. קהל: מה היתרונות של לשים n שווה מילת strlen בתוך ש ללולאה [לא ברור]? ANDI פנג: כן. אז אם אני היה אומר צריכה--, למשל, אם הייתי עושה את זה ולאחר מכן do-- oop-- ש, בקוד שלי, זה היה למעשה להיות עושה כמו אותו הדבר. עם זאת, הדרך שהדוד הסביר שלו במהלך הרצאה, אם מישהו מכם בחורים זוכר, היה ש, כ בני אדם, כמתכנתים, אנחנו באמת מנסים לתכנתנו קוד כך שהמחשב שלנו לעבוד מינימאלי ככל האפשר, כך שהקוד שלנו הוא יעיל מאוד. אז אם היה לי שיש, מה ש יקרה דרך ללולאה שלי הוא שהייתי מכריז ראשון אני בשם משתנה הולך להיות 0. אני הולך לבדוק, אה, מה הוא strlen של מילה? אה, strlen הוא 3. אז הוא שפחות משלושה? כן זה כן. אני הולך לרוץ. ואז בפעם השנייה חזרה סביב הלולאה, אני הולך להגדיל i. אני הולך להיות אחד. ואני הולך לבדוק, אה, אבל מה strlen של מילה? אה, זה שלוש. ועושה את זה נראה סוג של בזבוז, בכל פעם שאתה מפעיל דרך הלולאה, לבדיקת התפקוד, למרות strlen של מילה לא משנה בעצם? אז זה תוספת כוח למחשב. כשאתה מתחיל לדבר על דברים כי מיליארדים ומיליארדים ומיליארדים של מקומות ארוך, לדמיין את המחשב צורך לעבור דרך פיזי ו לבדוק את כל זה בכל פעם. לכן, כדי לעשות רק למען היעילות, אנו נוטים רק כדי לעשות את זה, כי ככה אנחנו רק קריאה לפונקציה פעם אחת בהתחלה, וכי בכל פעם ש עובר זה הולך כדי לאחסן את הערך 3 שם, כי אתה לא צריך לבדוק כל זמן ללא הרף. כן. קהל: מצטער. רק [לא ברור]. אתה יכול לעשות int n שווה strlen ולשים שמעל מחוץ ללולאה גם כן? ANDI פנג: כן. אתה יכול לעשות את זה, בהחלט. הסיבה שיש לנו אותו בכאן היא כי הדרך לעבודות לולאה הוא שזה נקרא משתנה מקומי במובן שכל מה שאתה יצירת הפנימית של לולאה רק קיים בתוך לולאה. אז אני רק משתנה קיים בסוגריים אלה. וכאן המשתנים של n גם קיים רק בסוגריים אלה. אז אם היה לך להשתמש strlen של מילה מספר פעמים למטה, בהחלט הדרך הטובה ביותר לעשות את זה יהיה להכריז עליה את הראש אז אתה לא צריך לעשות את זה פעם אחת. כן. קהל: למה יש לך קו חדש לאחר אחוזים לראות אם אתה רוצה לשים את כל המכתבים לידו להפריד? ANDI פנג: אה, אני רוצה להדפיס את כולם בכל שורה. זה לא משנה. כן, זה עיצוב. זו שאלה טובה, אם כי. כן, אם אני רוצה להדפיס את כל זה על רק קו אחד, לא הייתי המקף ב. אוקיי. כולם טובים? אוקיי. מגניב. אז אני חושב שיש לי דיברתי מספיק. תורו של אתם לרוץ דרך קוד ויגיד לי מה לא בסדר כאן. איפה הבאג? אז כפי שאתם יכולים לראות, אני כבר הכריז מערך חדש של מחלקה בשם מחרוזת הסוג. ואני כבר הוזנתי סם, ג'ס, וקים לתוכו. ואני מנסה להדפיס כל האלמנטים של המערך. מישהו יכול להגיד לי למה זה הוא הולך לתת לי בעיות? אני אתן לכם 10 שניות לחשוב על זה. אוקיי. כן? קהל: האם מרכז השמאל שווה 3 או [לא ברור]? ANDI פנג: ימין. אז כמה פעמים הוא זה בעצם הולך לרוץ דרך לולאה זה? קהל: ארבעה. ANDI פנג: בדיוק. זה הולך דרך ארבע פעמים. זה הולך לרוץ דרך ב 0, 1, 2, ו -3, בגלל האלמנט שלהם הוא אני הוא פחות או שווה ל -3. זה לא הולך לעצור כאשר זה 2. זה הולך לשמור הולך עד שהוא מגיע 3. וכמו שאנחנו יודעים, יש רק שלושה אלמנטים במערך האמיתי שלנו. אם ננסה לגשת הרביעי אלמנט או המדד של 3, אתה הולך להכות איפשהו בזיכרון שאינו קיימים. זה נקרא שליחות קטלנית null. שום דבר לא הולך להיות שם. המחשב שלך לא עומד להיות מאוד שמח איתך. כן. האם יש למישהו שאלות במה שקורה? זה שטח משותף, כדי למנוע. כן. קהל: האם לא הראשון להחליק גם מחרוזת של 2? ANDI פנג: מס ' אז בעצם, כש אתה עושה מערך, כי זכות הסוגר שם, שכל number-- זה אומר לך איך אלמנטים רבים שיש לי. זה לא ממש אומר לי שלי האינדקסים של כל דבר. אז במקרה הזה, אני יודע שאני רוצה לכתוב עם שלושה מקומות, עם שלושה מקומות פיזיים ל להחזיק כל מה שאני רוצה להחזיק. אז זאת הסיבה המספר שלוש הוא שם. עם זאת, אם אני רוצה למעשה לגשת אליו, אם אני רוצה לומר, printf מספר הסוגר כיתה, אז אתה הולך לשים למעשה המדד הפיזי שם. כן, שאלה טובה. קהל: אז הוא פיזי מדד אמור להיות [לא ברור]? ANDI פנג: אני מצטער. האם אתה יכול לדבר קצת? קהל: אז הוא המדד הפיזי [לא ברור] כל אחת מהתיבות? [לא ברור]? ANDI פנג: כן. אז אני הולך לחזור לכאן. תחשוב על כאן. יש לנו מערך של גודל 3. יש שלושה מקומות, כמו, מצייני מיקום פיזיים בפה. אבל הם בשם 0, 1, ו -2. אז אם אני רוצה לגשת אליהם, אופן שבו אני לגשת אליהם הוא printf של מה שאני רוצה כאן. היית צריך להדפיס את שמו של זה, כי אז המחשב יודע, הו, אני צריך להסתכל במערך זה למדד ה 0. כן. אבל הגודל שלו לא משתנה. הגודל הוא 3, ללא קשר איך אתה לתייג אותם. אוקיי. כולם טובים? קהל: אז כל פעם שאני [לא ברור]? ANDI פנג: אישור. אז במקרה הזה, אנחנו לא באמת להיכנס לזה עכשיו בקורס. אבל יודע שstring-- כמו ש אמר לפני, מחרוזת היא למעשה מערך של תווים. אז אם אני יוצר מערך של מחרוזות, אני סוג של יש מערך של מערך של דמויות, נכון? אז במקרה הזה, כי אני יש מערך של מחרוזות, אם היית קלט מילה באמת ארוכה, שעדיין תופס רק חלל אחד, כי זה מחרוזת אחת. אבל אם היית חושב על הדמויות של מערך זה, אז זה תופס הרבה יותר דמויות מכל המילים האחרות הם. לא ממש חשוב לעכשיו. אבל זה רק באופן כללי איך זה עובד. אוקיי. אז זה משהו שאני אתן לך לעשות הרבה במהלך הסמסטר. אני צריך לנוח הקול שלי. אתם צריכים לעורר את עצמכם. הרבה אתה כנראה צריך לישון עכשיו. אני מזין בעיות אקראיות שבו אנו כתובענה או עם בן זוג לידך הולכים לבלות כמה דקות דנות על איך היינו הולכים על פתרון או יצירת תכנית כגון זו. אז עכשיו, אנחנו רוצים כדי ליצור program-- אנחנו הולכים לקרוא לזה upper.c-- שגרים מילה קטנה למעמד העליון אותיות רישיות string--, מצטער. מילה במחרוזות, מצטער, הוא נרדף. אני הולך לשנות אותם לאומר את אותו דבר. כן. קח כמה דקות. זה לא חייב להיות נכתב בכל שפה. רק בקוד פסאודו קוד או באופן הגיוני איך אפילו שהיינו ללכת על עושה את בעיה כזו. כן. [שיחת SIDE] אני גם שמתי לב שאתם can-- אני סוג של לראות כבר את התכנית. אני מניח שהחוסר שלי מצב מגיש הוא בעיה. אבל זה בסדר. [שיחת SIDE] כן, בבקשה, חבר 'ה. בואו לקבל ממתקים. בואו לקבל ממתקים. קהל: כן! [שיחת SIDE] ANDI פנג: כן, כן, אני אתחיל לזרוק סוכריות באנשים שלא לענות על שאלות. אז אתה צריך כל שאלות התשובה. או אני מניח שאנשים ש אין לענות על שאלות. כן, להיפך. [שיחת SIDE] קהל: [לא ברור] ANDI פנג: כן. כן. [שיחת SIDE] בסדר, הבחורים. קח, כמו, 10 שניות יותר. [שיחת SIDE] אישור, בחורים. אז לפני שאנחנו מתחילים מנסים ממש פיזי לכתוב קוד, הרגל טובה לפתח היא ש אנחנו רוצים סוג הראשון של סיבה בהיגיון איך היינו עושה את זה. אתה רוצה לוודא, לפני שאתה פיזי להתחיל לנסות לקודד במריו, שתבצע בטוח שיש לך פסאודו הקוד שלך. כי הוא לוקח אותך דרך מה שאתה צריך כדי ליצור כל כך כי, כשאתה פיזי לכתוב התכנית שלך מאוחר יותר, אתה יכול יותר טוב לתפוס שגיאות בקוד והדברים כאלה שלך. אז אנחנו הולכים רק כדי להתחיל by-- באנגלית, בפסאודו קוד, האם מישהו רוצה לתת לי לי הסבר הגנרית איך היינו ללכת על עושה את זה? כן. קהל: [לא ברור]. ANDI פנג: בטח, אין דאגות. קהל: האם אתה יכול לשאול אותו לאו לשאול מישהו כדי לקבל מחרוזת 1-- כן, מחרוזת, ואז-- ANDI פנג: כן, אז זה הוא התחלה טובה. אני אתחיל להקליד, מצטער, כמו שאתה מדבר. אז-- קהל: --the אותיות קטנות מספרים גבוהים יותר, נכון? או אותיות קטנות יש מספרים גבוהים? ANDI פנג: בדיוק. קהל: אז אנחנו לחסר 32 מכל מה [לא ברור]. ANDI פנג: נהדר. אז יש לנו סוג של תחושה כללית של איך לעבוד על בעיה זו. בידיעה שיש לנו סוג של למדו אופן שבו מחרוזות הפיזיות מאוחסנים בזיכרון, מה לעשות שאתה כבר יודע שאתה הולך כנראה צריך לכתוב בקוד שלך כדי לעבור את המחרוזת? קהל: ללולאה. ANDI פנג: ללולאה, בדיוק. גדול. אז אנחנו סוג של יש לי הגנרית פסאודו קוד הכתוב למטה כי סוג של נותן אתה מציין על איך אתה יעבור על פתרון הבעיה. עכשיו שיש לך את זה, אתה תוכל לחזור אליו מאוחר יותר כאשר אתה מנסה למעשה לכתוב את הקוד שלך. אז אנחנו באמת יכולים ללכת כאן. ויש לי פונקציה שנקראת upper.c-- שם זה הוא-- רק תבנית ריקה עכשיו שאתם הולכים ל תעזור לי להבין על איך לכתוב הקו הזה של code-- לא שורת קוד. זה יהיה מספר שורות הקוד. כאשר מתחיל כל סוג של pset הריק, מה הדבר הראשון שאני צריך לזכור לעשות? קהל: [לא ברור]. ANDI פנג: כן גדול. כולל. stdio.h. לעתים קרובות זה הוא אחד מ אנשי טעויות קלים ביותר יעשה כשהם כתיבה, היא שהם תשכח לכלול ספרייה חשובה שהם צריכים. אז אם זה שעתי עבודה ואתה כמו, אני לא יודע למה הקוד שלי לא עובד. האם אתה יכול להגיד לי למה זה לא עובד? אנחנו הולכים להגיד לך #include? אתה צריך #include זה. אוקיי. אז יש לנו תקן קלט / פלט כאן. האם זה רק הספרייה אנחנו הולכים צריכים כאן? מה עוד אנחנו הולכים לעשות? מצטער. מישהו פשוט לצעוק את זה? קהל: [לא ברור]. ANDI פנג: הנה לך. אוקיי. ואיך אני הולך על הפעלת כל סוג של פונקציה, כל סוג של פונקציה העיקרית במסגרת התכנית שלנו? Int הראשי. אוקיי. מה אני יכול לשים בתוך כאן? מה הדבר הראשון שאתה רוצה לעשות? אם אנחנו רוצים להגיע מחרוזת מהמשתמש, מה שאנחנו הולכים לעשות לעשות בשורה הראשונה זה? מצטער, אתם פשוט מרגישים חופשי לדבר וקול רם. רק לצעוק כל מה שיצא. קהל: בקש מהמשתמש? ANDI פנג: איך אנחנו עושים את זה? Ask-- אני הולך להקליד "לשאול את המשתמש"? קהל: printf. ANDI פנג: אישור. Printf. מה אני רוצה printf? קהל: סוג במשהו. ANDI פנג: כמו ש? חבר'ה, להעמיד פנים כאילו אני במחשב. תגיד לי מבחינה פיזית בכל שלב שאני צריך להקליד בפה? האם אני עושה משהו לא בסדר? אני צריך שהקלדת משהו? קהל: אתה צריך ציטוטים. ANDI פנג: אני צריך ציטוטים? אוקיי. אוקיי. קהל: ואז קו חדש. פסיק. ANDI פנג: פסיק? אוקיי. טוב. קהל: ואולי לציין שאתה רוצה את זה באותיות קטנות? ANDI פנג: נהדר. אתם צוחקים עליי שוכח לשים פסיק. אני מבטיח לך איפשהו בקורס מסוג זה, אתה לא תשכח לשים פסיק, וזה ייקח לך שלוש שעות כדי להבין מדוע הקוד שלך לא עובד. זה קרה לכולנו. זה כנראה לא יקרה לך. קבל ברגל טובה של שימוש בנקודה-פסיק. אוקיי. קהל: האם אתה רוצה לעשות הקו הנטוי ב? ANDI פנג: בטח. האם אתה רוצה לעשות הקו הנטוי ב? קהל: כן. ANDI פנג: נהדר. אוקיי. מה אני עושה עכשיו? קהל: קבל מחרוזת. ANDI פנג: קבל מחרוזת. אז מה אני מקליד? מישהו? קהל: מחרוזת s. ANDI פנג: מחרוזת s. קהל: GetString. ANDI פנג: מישהו, אתה יכול להגיד לי איפה GetString פונקציה זו מגיעה? קהל: string.h. ANDI פנג: string.h? אתה חושב שזה מstring.h? קהל: [לא ברור]. ANDI פנג: הנה לך. זה מCS50.h. אם אתה מבולבל תמיד על שם קובץ ספרייה הוא או קובץ כותרת הוא, Google, פשוטו כמשמעו, string.h, ואני אגיד לך מה הן כל הפונקציות שנמצאים בstring.h. אוקיי. אז עכשיו שאני יצרתי מחרוזת ויש לי לבקש מהמשתמש לזה, אני כבר מאוחסן זה במשתנה של שם, מה אני צריך לעשות עכשיו? קהל: בדוק אם זה באותיות קטנות. ANDI פנג: מצטער? קהל: בדוק אם זה באותיות קטנות. ANDI פנג: בסדר, בואו נעשה את זה. איך אני עושה את זה? למעשה, למטרות של המעמד עכשיו, אנחנו פשוט הולכים ל מניח את כל מה ש שהקלט שכבר כתוב באותיות קטנות. אם אתה רוצה לבדוק, שהיית רק להוסיף הצהרה מותנית שבדק, שעבר כל אלמנט במערך ובדק אם זה בין ערכים מסוימים. אני שוכח מה המספר ערכים של אותיות קטנות הם. אתה יכול לבדוק את זה על שולחן ASCII. אבל כן, זה נקודה טובה באמת. אבל כרגע, אנחנו רק הולכים להניח שכל המחרוזות שקלט הם באותיות קטנות. אוקיי. אז איך הייתי הולך על בעיה זו הבאה? קהל: ללולאה. ANDI פנג: ללולאה? אוקיי. תגיד לי מה להקליד. קהל: לint i שווה 0. ANDI פנג: אישור. קהל: אה, בעצם, אז אתה לעשות פסיק ולעשות n שווה strlen. ANDI פנג: דבר כל כך חשוב כי אני חושב שהיא שמה לב כאן הוא שאנחנו לא חייבים לומר int n בפעם השנייה שעשינו את זה. רק יודע של לולאה כשאתה מכריז, אתה באמת לא צריך int של בפעם השנייה שאתה עושה משתנה. אתה יכול לומר strlen n. קהל: סעיף. ANDI פנג: שניות. אוקיי. קהל: אז פסיק. ANDI פנג: בטח. קהל: ואז [לא ברור] n. אז אני ++. ANDI פנג: נהדר. בסדר. מה אנחנו רוצים בתוך זה ללולאה עכשיו? זכור, אם אנחנו הולכים לרוץ דרך מחרוזת ולהפעיל באמצעות מערך, אנחנו רוצים לבדוק דברים בזה. מה אנחנו הולכים צריכים? זהו סוג של החלק מסובך עכשיו. למישהו יש ניחוש? אוקיי. אז קודם כל, איך אנחנו אפילו לגשת? איך אנחנו אפילו סימון ראשון לעשות או לגשת אלמנט במערך? איך אנחנו עושים את זה? מה הסימון אנו משתמשים כדי לעשות את זה? מה שמו של מערך זה נקרא? זה נקרא ים, נכון? זכור, כל מחרוזת היא תמיד מערך. כל כך הסוגר אני, נכון? כי זה את הערך הנוכחי או ערך מדד אנחנו בודקים. ואנחנו הולכים להגדיר ששווים צריכה-- אנחנו רוצים ערך קטנה, נכון? אנחנו רוצים להפוך את זה lower-- מצטער, אנחנו רוצים באותיות גדולות. אנחנו רוצים להפוך את האותיות הקטנות ערך לאותיות גדולה. וכך like-- אני מצטער, מה שמך? קהל: היידי. ANDI פנג: מצטער? קהל: היידי. ANDI פנג: היידי. כמו היידי אמר בתחילה, אנחנו כנראה הולך צריך כל-- אנחנו כנראה אצטרך לחסר 32 מכל מה שcharc הוא, נכון? כי בASCII שולחן, ההבדל בין אות קטנה ואות גדולה היא 32. לכן, כאשר אנחנו עושים את זה, אנחנו כנראה הולך רוצה להחסיר 32, נכון? אז אנחנו הולכים לעשות שלי. האם כולם מבינים למה עשיתי את זה? כי עכשיו, במערך שלנו, אנחנו בודקים את מדד ה 0, נכון? ובמדד ה 0 ב מחרוזת, זה התו הראשון. ואופי שאנחנו הולכים להניח שזה קטנה. אם אנחנו רוצים לעשות את זה באותיות גדולות, אנחנו צריך להחסיר 32 מהערך שלה, כי בASCII שלנו שולחן, ככה אנחנו מקבלים את זה למשנה מקביל ערך זה עושה את זה באותיות גדולות. האם כולם מבינים את זה? כן. קהל: אתה יכול גם אין אותיות קטנות minus-- ANDI פנג: כן, אז זה ממש ממש טוב. אני הולך לחזור לזה שאלה אחרי שאנחנו עושים את זה. כן. ואז אם אני רוצה לראות מה קורה, אני כנראה הולך ל רוצה להדפיס, נכון? מישהו יגיד לי מה אני רוצה להדפיס כאן. קהל: printf אחוזים קו נטוי ג [לא ברור]. זה הערך של i S [לא ברור]. ANDI פנג: שניות אני, מצטער? קהל: [לא ברור]. ANDI פנג: אני לא יודע. מה אתה חושב? קהל: ובכן, אני wouldn't-- אני מניח שלא הייתי bring-- הייתי לוקח אותו בפנים, כי [לא ברור]. ANDI פנג: הו, אתה היה עושה את זה? קהל: כן. ANDI פנג: בוא נשאיר את זה בדרך זה, ואני אסביר מדוע בהמשך. זכור, גם כאשר אתה יש בעל מקום, אתה רוצה לשים סוגריים סביבו. בסדר. כך זה צריך להיות פונקציה מוצקה כאן. בואו להפעיל אותו ולראות אם זה הידור. הפוך עליון. או הו. זה לא נראה טוב מדי. למה זה קורה? כמו בכל שגיאה, אתה רוצה ללכת בחזרה ולהתחיל עם הראשון, כי בדרך כלל גורמי שגיאה אחת המון טעויות אחרות אחריו. כאן אנו רואים upper.c: 18: 25, שאומר לי שלי בתכנית זו בשם upper.c, על קו 18, שגיאה שהכריזה במשתמע ספרייה של פונקציות strlen עם סוג בלה unassigned--, אני לא יודע מה קורה אחרי ש. כל מה שאומר לי עכשיו הוא משהו שקורה strlen. והמחשב מבולבל, כי זה כמו, אני לא יודע מה הוא strlen? מה עושה את זה כנראה להגיד לך שאתה חסר? קהל: אתה חסר [לא ברור]. ANDI פנג: אתה צודק. בדיוק. אז זה המקום שבו זה חשוב לוודא שכל פונקציה שאתה משתמש בשלך קוד הוא שיש בכותרת הנכונה להגיש לספרייה, או אחר אתה הולך לקבל הרבה שגיאות והקוד שלך לא הולך לדעת מה קורה. אז אנחנו הולכים לכוללים string.h כאן. כעת, כאשר אנו מנסים לקמפל עליון. לקמפל כראוי. בואו להפעיל את התכנית. אז להקליד משהו באותיות קטנה. מה אתם רוצים להקליד? צועק משהו. בסדר, Charly פשוט הלך ב. אנחנו הקלד את השם של Charly. Charly באותיות קטנה. ואני מקווה, אני מקווה, זה הוא הולך לצעוק ולירוק Charly באותיות גדולה. יש! אין לכולם להבין כיצד הלכתי על פתרון זה? הדרך שאני יכול לתפעל באמצעות מספרים שלמים כדי לפתור משהו ש אני רוצה לעשות במחרוזות, בגלל תווים ומספרים שלמים יכולים הפניה באותה הדרך, כי מיפוי ASCII. אז לחזור לנקודה שלך, אם אני רציתי לשים כאן במקום 32 אותיות רישיות מינוס אותיות קטנות בדיוק כמו ש, שיעבוד באותה מידה גם, כי זה פשוט רק הבדל בין שני ערכים אלה. אם אני רוצה לעשות Charly again-- זה. אוי לא. אני חושב שהלכתי בדרך הלא נכונה, כן? קהל: [לא ברור] אותיות קטנות. ANDI פנג: הנה לך. כן. ומתוך יורק Charly. כדי להיות זהיר כאשר אתה הפחתת ערכים לזכור איזה מהם הוא יותר מאשר אחרים. לדוגמא, עד כאן שכחתי שאותיות קטנות הוא למעשה גדול מא רישיות אז כש ניסיתי להפחית אותם בדרך אחרת מסביב, יש לי 32 שליליים. וזה היה כמו המחשב שלי, אני לא יודע מה זה. זה הסתברות רק חלק אקראי ערך שאינו טוב מאוד. וכדי לוודא שאתה הפחתה באורך הנכון כדי למצוא את הדמות שאתה רוצה. אוקיי. מבולבל מישהו על איך אנחנו הלך על כתיבת פונקציה זו? אוקיי. אז בעצם, פונקציה כבר קיים בctype.h הספרייה בשם. ctype.h נקרא של הספרייה. פונקציה זו היא למעשה כבר כתב לך. זה נקרא לעליון. וכך למטרות של pset זה, אתה הולך כדי לגלות שאתה באמת רוצה להשתמש הרבה פונקציות הכלולות בתוך ספריית ctype. לעליון, להוריד, הוא עליון, הוא lower-- אלה הם כל הפונקציות שתוכל להשתמש מאוד, מהר מאוד בקוד שלך ש עושה בדיוק מה שזה עושה. כתבנו איך להמיר מחרוזת לאותיות גדולה. אבל זה הוא למעשה הקוד שמישהו אחר כתב וכי אתה יכול לגשת ל באמצעות פונקציה שונה. כן? קהל: אז אתה פשוט להעתיק של שם ולעשות את זה לכל אות ואות? ANDI פנג: כן, כי אני לא אכפת הערכים. אני פשוט אכפת שההבדל ביניהם הוא 32, נכון? ההבדל בין אותיות קטנות B ו- B באותיות גדולות הוא גם 32. וההבדל בין ג ו- C באותיות גדולות הוא תמיד 32. אני רק צריך לדאוג הבדל בין שתיים, כי כל המכתבים בצע את אותו הדפוס, נכון? אם יש לי את ההבדל בין אחד מהם, אני יודע מה ההבדל בין כולם הוא. שאלה טובה. כן. כולם טובים? אוקיי. OOP. אוקיי. אז רעיון אחר זה הולך להיות מאוד שימושי כמו שאתה תמשיך לפתח הקוד שלך הוא הרעיון הזה יצירת פונקציות או הפשטה. אז עכשיו, כולנו לקחנו אלגברה. באלגברה, אתה לומדים שיש הדבר הנפלא הזה שנקרא פונקציה מכונה, שבו אם אתה סוג אחד של קלט מספר, הוא פועל באמצעות הפונקציה הנפלאה הזה ואת אבא פלט שונה, נכון? בקוד, אותו הדבר קורה בכל סוג של פונקציה. אז אני יכול מבחינה פיזית לכתוב בגוף של הקוד שלי שלי הצהרה העיקרית שבעצם עושה כל מה שהגוף של הקוד עושה. אבל מחוץ לזה, אני יכול גם לכתוב פונקציות רבות ושונות כי לעשות דברים רבים ושונים. לדוגמא, יש לנו כבר התחיל להשתמש בחלק מהם. Printf-- שהוא פונקציה שמישהו אחר כבר כתב ש אנחנו יכולים לקרוא בקוד שלנו. לupper-- במקרה זה, upper-- היא פונקציה אחרת אנחנו כבר נכתבו ש יכול לקרוא בקוד שלנו. ואז אני מניח שהסיבה לעשות אפילו יש לנו פונקציות? למה אנחנו לא רק פלופ זה כולנו באותה שורת קוד? זה עושה את זה קל עבור כולם. ובכן, את ההיגיון מאחורי זה הוא, קודם כל, ארגון. זה ממש מעצבן הולך באמצעות הקוד של מישהו ותפקיד אחד כמו printf. אם אתם ממש ידעו מה printf הפונקציה כרוך לכתוב, זה, כמו, 1000 שורות קוד. אם בכל פעם שאני רוצה לprintf משהו, הייתי צריך לכתוב 1,000 שורות של קוד, זה יהיה ממש מעצבן לקרוא, נכון? זו הסיבה שיש לנו רק נוצר פונקציה מופשטת זה שיש לנו כבר מישהו אחר כתב במקום אחר. ובכל פעם שאנחנו צריכים להשתמש בו ב הקוד שלנו, אנחנו רק צריכים להגיד printf. וכי הוא מסוגל להשתמש בפונקציה מישהו אחר כתב בקוד שלנו. זה עושה את זה קל יותר הארגוני לקרוא קוד. שנית, זה פישוט. זה מפשט את הצעדים שיש לנו לקחת כדי לפתור את הבעיה שלנו. Printf, פונקציות כמו printf, פונקציות כמו לעליון כל הדברים שמאפשרים לנו לפשט את הקוד שלנו כלפי מטה, כך שזה יותר קל. והדבר האחרון הוא שימוש חוזר. אז העובדה שיש לנו printf פונקציה שנקראת שאנחנו יכולים לקרוא רבים ושונים פעמים ומאפשרת לה להיות לשימוש חוזר. אם הייתי לכתוב printf, אני כותב את זה רק פעם אחת. היא קיימת רק שבמקום אחד. אם אני רוצה לעשות את זה שוב, הייתי עושה יש להעתיק ולהדביק את כל זה בשורה השנייה שלי קוד. זו הסיבה שאם אנו יוצרים פונקציה שקיים מחוץ העיקרי שלנו, אנחנו רק יכולים לקרוא ל שלו ולהשתמש בו בכל פעם ש אנחנו צריכים כל כך שזה הרבה יותר קל עבורנו כתוכניות לכתוב. אז הדרך שאנחנו למעשה לכתוב פונקציה דומה מאוד, נכון? זהו סוג של הראשון למשל באשר נשלח ראה לקחת פונקציה בסגנון שונה מהחלל המרכזי int שלנו. במקרה זה, אם אני רוצה לכתוב פונקציה שנקראת Q, נכון? וערך int כאן הוא אומר לי כל, מה שאני רוצה זה לתפקד לחזור אליי? אם אני רוצה קובייה שלם, אני הולך לרוצה קלט. אלו הם הפרמטרים. אני הולך לתשומות ערך של int הסוג. ואני הולך לחזור ערך סוג אחר של int. וכאן, כפי שאתה ניתן לראות, כל מה שאני עושה הוא עִקוּב מה הקלט שלי הוא כפלט שלי והחזיר אותו. אז כל פונקציה זו עושה היא לוקח איזה מספר שלם. זה מכפיל אותו בעצמו פעמיים כך שהקוביות בתוקף. ואז זה חוזר מה הפלט שהוא. אז במקרה הזה, זה שתי שורות של קוד שהיה לנו לכתוב נוסף. אבל אם אנחנו רוצים לקרוא על זה מספר פעמים, זה הרבה יותר קל להקליד כי אחד קו ימין כאן זה בקובייה מ צריך לעבור מספר רב של פעמים. לכן הדרך שבעצם כל עיצוב לכל סוג של פונקציה הוא הולך להתקיים הוא כמו כאן. אז יש לנו את שם הפונקציה. במקרה זה, זה נקרא קובייה. ואנחנו שם את זה קובייה כי זה קל לזכור. אתה יכול שם זה מרובע ו בעצם יכול להיות קוביות זה. לא משנה. רק שם שאתה הקצאת הפונקציה שלך. זכות זו כאן, int, היא סוג של הפרמטר שאתה צריך. אז מה עושה בפונקציה זו צריך כדי לפעול? ובכן, הוא צריך קלט. אני שם את זה קלט. אתה יכול שם זה מה שאתה רוצה. אבל אני צריך משהו מסוג int. זה הולך לבצע בפועל כל מה שבתוך מכאן, הגוף של הפונקציה. ולאחר מכן את סוג ההחזרה ממש כאן, int-- זה כל זה אומר לי ש פונקציה זו היא הולך לחזור אליי בint. אז זה הולך לקחת בint, ו זה הולך לתת לך בחזרה int. האם כולם מבינים איך עיצוב מסוג זה עובד? מגניב. אוקיי. אז אל תהיה מודאג אם זה נראה זכות מופשטת קצת עכשיו. זה משהו שנדברנו על. אנחנו לצלול עמוק יותר ב בשלב מאוחר יותר בקורס. הדרך שכל סוג של רמה גבוהה יותר הפשטה של ​​העבודה את הדברים האלה הוא ש, בזיכרון, ב המחשב, הכל שלך מאוחסן בסוג זה של מחסנית, אני אגיד. אז לשם בראש. אני לא יודע אם אתה אתם יכולים לראות שכן. אני אנסה להתקרב. כאן בראש, אנחנו יש לי הטקסט הפיזי ממה שהמחשב הוא interpreting-- כל האפסים ואחדים ש קיימים בתוך המחשב שלנו. ואז יש לנו אותחל נתונים נתונים ולא מאותחלים, מה שאנו מכנים משתנים גלובליים. אז משתנים שקיימים בכל התוכניות ועל פני כולו שלך, בעצם, קוד. אל דאגה, אם אתם נמצאים סוג של לא ברור על זה. זה לא ממש משנה עכשיו. ולאחר מכן יש לנו מה זה נקרא ערימה בערימה. תחשוב על ערימה, פשוטו כמשמעו, כ בדיוק כמו ערימה של דברים, ערימת שונה דברים נדחפו על גבי של כל אחד אחר שמאחסנים שונים משתנים ותחביר בקוד שלך. ואז כאן בתחתית מאוד, יש לנו את משתני הסביבה של מה שאתה מבצע ב רק הקו הקטן שלך של קוד. ואנחנו רק הולכים להגדיל במצד הערימה בפועל. אז כאן, אם היינו כדי להתקרב בתחום זה רק על הערימה, זה מה שזה נראה. וזה בעצם די חשוב כאשר אתם מדברים על פונקציות, בגלל הודעה ש זיכרון של המחשב שלך הוא אחסון משתנה והפונקציות והפרמטרים של שני פונקציה והמשתנים העיקריים שלך במקומות שונים. אז עכשיו, הוא עיקרי הפונקציה הממשית שאתה מבצע בקוד. הפרמטרים שלו יש לך מאוחסנים כאן והמשתנים המקומיים שלה מאוחסנים כאן. משתנה מקומי רק אומר כל משתנים שקיימים רק בתוך הפונקציה ש. ועל גבי זה, יש לך את זה פונקציה נפרדת בשם קובייה. אתה צריך זה פרמטרים כמו גם מקומיים אלה. ואתה יכול הסיבה רואה כאן הוא שמה קורה כאשר לוקחת בקובייה ערך מהפונקציה העיקרית שלך הוא שלמעשה זה העתקה שמעל. אז אם אני רוצה קובייה 2 ולחזור 8, ש2 הוא הוזן למעשה כפרמטר וזה הועתק על כך שיש לך את זה הקיים בשני מקומות שונים בזיכרון. ואתה צריך להיות מאוד זהיר על זכירה שאחד מאותם אתה בעצם מניפולציה. ודוגמה למה שקרה זה יהיה מאוד, מאוד רע קיים כאן. אז כאן, יש לי, בתאוריה, תכנית ממש כאן, פונקציה עיקרי כי אני מכריז int x שווה 1. אני מכריז y int אחר שווה 2. ואז אני מפעיל אותו באמצעות פונקציה זו החלפה נקראת, שבו אני מניח ש זה החלפת שני הערכים. ואז אני הולך ל להדפיס אותם, נכון? זה מה שאני רוצה לעשות תכנית זו. אז בואו ארד ותסתכל. אז אם אני באמת לכתוב שונה פונקציה, כפי שניתן לראות, יש לנו הפונקציה העיקרית שלנו כאן. ואז יש לנו שלנו פונקציה שנייה כאן. החלפה מבוטלת. Void רק אומר שזה לא הולך לחזור כל דבר. שם הפונקציה הוא נקרא החלפה, וזה הולך שני משתני הצריכה, int ו int ב, מ[ לא ברור] הפונקציה שלך. אז בעצם כאן, אנחנו עובר x ו- y לפונקציה זו. ואם היינו ליצור זה-- ולכן אנחנו רוצים כדי ליצור ערך זמני, נכון? אנחנו הולכים להקצות של. ואז הוא הולך ב החברה שווה. ו- B הולך להיות חזרה שבו הערך הזמני היה, אשר הוא, כי כאשר אתה רוצה להחליף דברים, אתה לא יכול פשוט רוצה להחליף אותם. אתה צריך לשמור את אחד כאן, כך שהוא זוכר מה שהוא, כי ברגע ש אתה להחליף אחד, אתה שוכח מה שהערך המקורי היה, נכון? אז בתאוריה, תכנית זו צריך לעבוד, נכון? אם אני רוצה להחליף שני, הם צריכים להחליף. אז בואו להפעיל אותו ולראות אם זה עובד. אז כפי שאתם יכולים לראות, x היה פעם 1 ו- y היה פעם 2. ואם אני להדפיס אותו, x הוא עדיין 1 ו- y הוא 2. הממ, נראה שתכנית זו לא להיות עובד בדרך שאני רוצה שזה יעבוד. האם מישהו רוצה לקחת זריקה ב מנחש למה זה קורה? זה קשור לדרך שדברים שונים מאוחסן במקומות שונים בזיכרון. אוקיי. אז אתם לא צריכים לדאוג יותר מדי על זה עכשיו. אבל יודע שהקובייה של מקומי משתנים היו A ו- B, כי כאן בתפקוד שלנו, אנחנו כבר הכריזו וב כמשתנים שקיימים בתוך קובייה, פונקציה ש. אבל כפי שאתה יכול לראות, את הפרמטרים ש זה לוקח בהיו מאוחסן כאן. אבל לא היינו ממש חוזר כל דבר. אנחנו לא באמת משתנים x ו- y. אנחנו רק שינוי וב. אנחנו העתקתי x ו- y ל משהו שנקרא A ו- B. אבל אנחנו אף פעם לא באמת מניפולציות x ו- y את עצמם. האם אתם רואים איך זה קורה? האם שאנחנו פשוט העתקנו אותו מעל, אבל יש לנו לא שמרתי למעשה אחר שבו הם היו בזיכרון. ואז עכשיו המחשב מחפש, הו, לי לרוץ את הדבר הזה דרך הפונקציה הנחמדה הזה. אבל x ו- y הם עדיין x ו- y. שום דבר לא קרה לי שלהם בשל העובדה כי פרמטרים אלה ומשתנים מקומיים מאוחסנים בשונה מקום בזיכרון. וזה ברמה גבוהה יותר מושג שנוסיף ל תתחיל לראות בהמשך הקורס. אבל רק יודע שזה הוא בעיה שיכול לקרות ושאנחנו למצוא דרכים כיצד להתמודד עם זה בשלב מאוחר יותר בקורס. אוקיי. בסדר. אז הרעיון האחרון אנחנו באמת הולך לכסות זה הולך להיות שימושי לpset השבוע הם מה שנקראו שורת פקודת טיעונים. אז הלך רוב בהרצאתו ב סוג של קצר על איך העבודה הבאות. בעיקרו של דבר יודע ש כאשר אתה כותב כמו פונקציה העיקרית, כאשר אנו כתב פונקציות לפני בעבר, היו לנו החלל מרכזי int. והסיבה שהיו לנו חלל יש בגלל התוכניות שלנו לא צריך ערכי קלט לרוץ, נכון? כשרצתי מריו, אני לא צריך בעצם פשוט להקליד משהו כשרצתי מריו. אני יכול לבקש מהמשתמש בהמשך. אבל זה לא תמיד המקרה. לדוגמא, בזה הבעיה של השבוע קובעת, אתה הולך להישאל ש, ב בנוסף להפעלת התכנית שלך, אתה הולך רוצה קלט דברים מסוימים בישר כמו שאתה להפעיל את התכנית שלך. לכן הדרך שאנחנו עושים זה נקראת טיעון שורת הפקודה, ש זה כמו ויכוח אתה יכול קלט ישירות כפי שאתה מנסה להפעיל את התכנית שלך. אז הסימון לכך, זה נראה די מורכב, אבל זה באמת לא כל כך קשה. אז int main-- זה רק הפונקציה העיקרית שלך. לסוגר argv מחרוזת פסיק argc. אז כל מה שאמר הוא שזה int כל שargc-- אומר לך הוא שאותם הם מספר טיעוני המחשב צריך לצפות. אז דבר אחד שבאמת חשוב לשמור על מסלול של הוא השם הפיזי של התכנית שלך ספירה כאחד טיעונים אלה. אז אם אני רוצה שיהיה לי תכנית לרוץ בתוספת שורת הפקודה נוספת אחד ויכוח, אני בעצם תצטרך שני. Argc בעצם הולך להיות שתיים. ולאחר מכן argv המחרוזת bracket-- כל מה שהוא עושה, זה נותן לי מערך של מחרוזות זה הולך רק כדי להציג ולאחסן את מה ש כל טיעוני שורת הפקודה האלה. כך למשל, אם אני רוצה לקבל את זה תכנית, ./copy infile outfile, נכון? זה רק פקודה לינוקס טיפוסית. מה בעצם הוא argc? כמה טיעוני שורת הפקודה יש בעצם בזה? כל זה עושה הוא ליצור עותק של infile של שמו של קובץ אחד והוא מעתיק אותו ל קובץ אחר, נכון? זה כל מה שזה עושה. כפי שניתן לראות, אני עושה את זה בשורה אחת מבלי להזדקק לתכנית. מה הוא argc שלנו במקרה זה? כמה טיעונים יש לנו? קהל: שלוש? ANDI פנג: יש לנו שלושה, בדיוק. אז זה מאוד אינטואיטיבי ל פשוט חושב שזה פשוט infile וoutfile. אבל יודע ששם הפיזי של תכנית שאתה מפעיל ספירה כאחד. אז במקרה הזה, argc הוא למעשה שלוש. מה דעתך על, מה הוא argv 0? זכור, כל טיעוני שורת הפקודה היו מאוחסן במערך של מחרוזות. אז אם אני מנסה לגשת אליו, מה ש היה argv הסוגר 0 לתת לי? קהל: [לא ברור]. ANDI פנג: בדיוק. זה היה נותן לי נקודה לקצץ עותק, כי זה האלמנט ה 0, האלמנט הראשון של המערך שלי. מה לגבי argv 1? קהל: infile. ANDI פנג: infile, בדיוק. מה לגבי argv 2? קהל: outfile. ANDI פנג: outfile. זה קצת מסובך עכשיו. מה אתם חושבים argv 3 הולכים להיות נותנים לי אם ניסיתי להדפיס את זה? קהל: [לא ברור]? ANDI פנג: האם יש לך את יד? כן. קהל: חלופי. ANDI פנג: בדיוק. אז לזכור בהרצאה ש יש בסוף משהו גזע בשם שליחות קטלנית null? אנחנו נכנסים לזה גם נוסף על בכיתה. אבל יודע שבסימון, דרך המחשב שלך יודע שזה הסוף של המערך הוא שזה מכניס נקרא null משהו שליחות קטלנית או מקף אפס. אז אם אתה מנסה לגשת לargv 3, אתה הולך להכות מקף זה 0. זה אפילו יותר משאלה מכשילה. מה לגבי argv 4? אז זה שליחות קטלנית null עבר, עבר גבולות המערך שלנו. מה אתה חושב הולך קורה כאשר אנחנו מנסים לעשות את זה? קהל: [לא ברור]? ANDI פנג: מצטער? אומר שקצת יותר חזק? קהל: [לא ברור]. ANDI פנג: כן. שהוא שמו של אזור סביר להניח שתקבל. אבל יודע שargv 4-- המאפשר לך גישה ל מקומות במחשב שלך זיכרון שאתה באמת לא צריך להיות נוגעים ללב, כי נכון עכשיו אתה יודע מה argv הוא. אתה יודע שזה מערך של גודל 3 שיש עותק נקודה, infile וoutfile. אם אתה מנסה ללכת כל כך הרבה מעבר לזה שאתה עבר שליחות קטלנית null, המחשב שלך יש כנראה משהו מאוחסן בargv 4. ואתה באמת לא צריך להיות אפשר גישה לargv 4, בגלל שיש לך קובץ ממשלה ואתה רק אפשר גישה לשלושת מדפים אלה. אבל אם אתה מנסה להגיע הרבה מעבר ל המדף של איפה אתה מורשה, אתה הולך להתחיל להתעסק עם דברים אחרים בזיכרון של המחשב שלך. זה הולך להיות ממש, ממש רע. אז פשוט יודע את זה. להיות זהיר מאוד, כי אתה לא רק באופן אקראי להתחיל גישה לאלמנטים במערך ש לא היו במה שאתה רוצה ליצור. כן. אוקיי. אז אנחנו הולכים לעשות עוד דוגמא מסוף כאן. אוקיי. אז רוב במהירות בהרצאה היום האחר הלך דרך דוגמא זו, שבו הוא argv היה int int argc העיקרי המחרוזת סוגריים, שאומר לי שאני הולך להיות טיעוני שורת הפקודה. יש לו, אם argc שווה שווה 2-- לזכור, שווה שווים משמעות השוואה. אם זה שווה 2, אז אני הולך להדפיס שלום, מה הראשון אלמנט של המערך הוא. הדפסה אחרת, שלום עולם. מה זה הולך יקרה בעצם? מישהו יכול להסביר רק ב אנגלית מה התכנית הזו עושה? כן. קהל: אם מישהו הקליד בפקודה ואמר את השם הראשון והאחרון שלהם, זה לא פשוט להדפיס ראשון אחד ולומר, שלום, מה השם הפרטי שלך הוא. ANDI פנג: בסדר, בוא להפעיל אותו. כך למשל, אם אני היה לעשות קובץ זה לעשות שלום צריכה-- שלום צריכה-- מה אתה רוצה שאני קלט? קהל: ראשון ואחרון שם. ANDI פנג: פרטים אישיים? החדרים? קהל: כן. ANDI פנג: מישהו יכול להגיד לי שלי עכשיו, מה הוא argc? בדיוק שם? אופס, מצטער. תן לי לחזור. כמה טיעוני שורת הפקודה הן-- אתם באמת לא יכולים לראות. אבל אני אנסה להתמקד ב. אני מנסה. כן, יש שלוש, נכון? זה קו נטוי נקודת שלום, זה אנדי, וזה פנג. אז מה אתם חושבים שזה תכנית הולכת להיות הדפסה החוצה? אה. אה סליחה. שם הלא נכון. זה להדפיס אותו, הלו עולם. האם מישהו רוצה להסביר מדוע זה קורה? כן? קהל: [לא ברור]. ANDI פנג: בדיוק. אז הנה, הם על תנאי כלומר, אם argc שווה שווה 2. אז רק במקרה שיש שני טיעוני שורת הפקודה. אז אני הולך להדפיס, שלום, מה שזה לא. אבל אחר, אני הולך להדפיס רק, שלום עולם. אז מישהו רוצה לתת לי דוגמא איך אני יוכל לבעצם קבל את זה כדי להדפיס את הערך של argv 1? מה הייתי צריך קלט כאן? רק דבר אחד, נכון? בגלל שלום הנקודה לכבר ספירה כטענה הראשונה. יש לי רק אחד יותר. אז נקודה שלום אם אני פשוט עושה את אנדי. שלום, אנדי. האם כולם מבינים מדוע זה קורה? כן. קהל: אז את החלל שבין line-- הפקודה הוא [לא ברור] זה? ANDI פנג: מס ' אז המרחב בשורת הפקודה טיעון, x, לספר המחשב שזה הוא ההתחלה של מחרוזת חדשה. אז argv מחרוזת כאן-- זה חנויות כל הטענות שלך שורת הפקודות במחרוזות. וכך המקום בשורת הפקודה argument-- כל מה שעושה הוא להגיד לך, זה בסופו של מיתר אחד וזה זמן להמשיך הלאה למשנהו. כן. זה די חשוב ל pset, בגלל שאתה הולך להיות בדיקה אלה. אז האם מישהו יש שאלות על זה? בסדר מגניב. כן? הקהל: אז הסיבה שהיית לשים Calc טיעון השלם במקום של [לא ברור] יהיה כאשר אתה רוצה להקליד מידע נוסף ל [לא ברור]? ANDI פנג: כן, בדיוק. תוכניות מסוימות מחייבות לקלט טיעון שורת הפקודה שהוא עובר ושבמשתמש בזה. כן. קהל: אז מה אם [לא ברור]? ANDI פנג: ובכן, לעשות את מה שיש לי לשנות אז בתכנית שלי? קהל: רק 3. ANDI פנג: למה זה קורה, אתה חושב? קהל: כי [לא ברור]. קהל: היית צריך לשנות את זה ל 2 [לא ברור]. קהל: 1 ו -2. ANDI פנג: 1 ו -2, בדיוק. אז במקרה הזה, אתה כנראה היית רוצה להיות שני printf statements-- אחד שמודפס argv 1 ו אחד שמודפס argv 2. כאן. אני באמת יכול לעשות את זה ממש מהר. הנה לך. אה. לא בדיוק מה שרצית. אבל אם אתם להתעסק עם העיצוב, זה ייצא. כן. מגניב. אני יודע שאנחנו קצת קצרים בזמן. אבל אני רק הולך לבלות במהירות דקות זוג עוברות helpful-- קהל: יש לך שתי דקות. ANDI פנג: יש לי שתי דקות? תודה. כמה טיפים pset מהירים. אז לpset זה, אני מאוד ממליץ, כמו שאמרתי, כולם לקרוא את המפרט. אתה כותב שלוש programs-- אחד נקרא initials.c, אחד בשם caesar.c, vigenere.c נקרא אחד. כמה טיפים חשובים ש אתם באמת רוצים כדי לשמור על בmind-- כך יש פונקציה זו נקרא atoi-- כמו שאני אוהב לומר, טרואה. לא ברור אם זה למעשה איך אתה אומר את זה. אבל כל זה עושה, זה מזין. הוא ממיר מחרוזת לint. אז מייצג ASCII לי שלם. זה פשוט המרת ASCII ערכים לinteger ערכים. אז לזכור argv, המערך שחנויות כל הפקודות שלך בשורה arguments-- הוא מאחסן את כולם כמחרוזות. ולכן אם אתה רוצה להיות מסוגל יש אחד מהם הפך לשלם, אתה הולך לי להשתמש ערך זה כאן. מודולו, כמו שאנחנו מכוסים מוקדם יותר היום בכיתה, מאפשר לך להיות שאר מה שיש לך. אז אם יש לנו באמת, באמת מספרים גדולים בקיסר, מה אם יש לנו את הסוף של מחרוזת של Vigenere? איך אתה הולך להיות מסוגל כדי לקבל את זה כדי לעטוף? אם אני מכה z ואני רוצה זה לחזור ל, איך אני הולך לקבל כי כדי לעטוף? כנראה רוצה להשתמש מודולו שם איפשהו. שנית, לגלוש סביב הספרייה שלך. ctype.h. זה ספרייה חדשה שיש לנו. אתה תמצא הרבה באמת, באמת isupper functions-- שימושי, islower, toupper, tolower, isalpha, וכולי. כל הפונקציות שתהיינה מאוד שימושי כאשר אתה מנסה להבין, היא הדמות הזאת אות קטנה? כיצד ניתן להמיר את זה מחרוזת לאותיות גדולה? כל הדברים האלה יהיו מאוד, מועיל מאוד לpset. אוקיי. שעתי עבודה הלילה הם 8:00 עד 11:00 בכיתה צהבהב מחר כמו גם יום רביעי בלילה וביום חמישי. שעות פעילות משרד הן בנחלת כלל. מאוד ממליץ לך חבר ' כל להתחיל מייד, כי אתה לא רוצה להיות ש ילד יש יום חמישי בלילה שבעיות הגשת pset ו כמו, אני לא יודע מה לעשות. התחלתי, סיימתי, הגשתי. נסה לתת לעצמך כמה חדר, כי בבעיות קוד תמיד להתרחש. אתה רוצה לוודא שאתה נותן את עצמך הרבה זמן כדי להיות מסוגל כדי להשלים את psets. מגניב. אני להסתובב כאן. קהל: האם באינטרנט זה כבר? ANDI פנג: אני לא יודע אם זה באינטרנט כבר, אבל זה יהיה. אני להסתובב כאן אם מישהו יש כל שאלות כבר. תודה שבאת.