ROB אודן: זה סעיף נוח יותר, אבל זה לא אומר שאם אתה מרגיש שאתה לא יותר נוח אתה לא תלמד דברים כאן. אז בואו נתחיל. האם יש לך שקופיות הולך ישר לתוך דברים. האם אני עומד פשוט לקחת את זה עכשיו? החלפת מחשבים ניידים. אליסון: אתה לא רוצה להציג את עצמך, רוב? ROB אודן: אה, אני רוב. זה CS50 השנה החמישית שלי TF-ing. גבריאל: אני גבריאל. אני TF ראש CS50. הייתי TF בשנה שעברה והשנה. אליסון: ואני אליסון, וזה הוא CS50 TF-ing השנה השני שלי. ROB אודן: בסדר, כל כך הדבר הזה בצד השמאל, אני מקווה שאתה ראית את זה לפני. אם לא בגללך להוריד אותו בעצמך, היית צריך לראות את זה בהרצאה. אז זה מכשיר CS50, והוא עשה משהו של תיאור שלו בהרצאה. אבל בעיקרון זה רק אתה פועלים הפעלה מערכת ההפעלה שלך בתוך מערכת, כך שנוכל לתת לך תוכניות ללא צורך לדאוג, הו הוא זה הולך לעבוד על שניהם Windows ו- Mac, או אם חלק מכם כבר משתמש בלינוקס, לינוקס. אבל זה אמור ל להיות משחק משותף שדה כל כך לכולם יש אותה סביבה בדיוק. אז אם יש לך לא הוריד כבר את זה, אתה צריך להוריד אותו, בגלל שאתה תצטרך את זה לסט הבעיה. וזה שני ג'יגה-בייט להוריד, כך שזה עשוי לקחת זמן מה. בהרווארד זה ילך מהר. מכשיר כל כך CS50. עכשיו בהתחלה, אנחנו הולכים לדבר על סתם חבורה של שורת הפקודה דברים, וזאת על ידי ש, אני מתכוון לעבוד בסביבה הקטנה הזה כאן. ושים לב כל דברים אני אומר כאן ועכשיו הולכים לעבוד אם אתה בתוך מסוף הפנימי של המכשיר, או אם אתה בתוך חלון מסוף gedit בתוך המכשיר. אז סביבות אלו זהות. אבל אני הולך ללכת בדרך שלישית. ושים לב כאן זה כתובת ה- IP קטנה ממש כאן. אז אין לך לעשות את זה, אבל IP זה address-- עכשיו אם אני- מלבד זה חסום על ידי הדבר הזה. אישור, כך שכתובת ה- IP מעל במסוף here-- כך מסוף זה מעל כאן הוא מסוף ב- Mac שלי. אז זה בשום אופן לא כרגע הקשורים למכשיר בכל. ואם אתה ב- Windows, ואז אתה הולך צריך להוריד משהו במיוחד עבור זה, בפרט אנשים נוטים להשתמש במרק, P-U-T-T-Y. אז מה אני הולך לעשות הוא להקליד SSH ולאחר מכן שכתובת ה- IP. ובכן, jharvard שבכתובת ה- IP. אז 192.168.24.220. הודעה מפחידה זה, להתעלם מזה. פשוט הקלד את כן. זה CS50 בתיבה. שואל אותו לסיסמא שלך. וכך בהרבה הקשרים אלה שבי הוא מבקש הסיסמה, [לא ברור]. יש לנו הרבה שאלות שבי זה אומר שזה לא ממש הקלדה. זה לא מראה לך את התווים של הסיסמה בעת ההקלדה, אם משהו, לתכונת אבטחה, כי אם מישהו מסתכל על כתף שלך והם רואים כוכב כוכב כוכב כוכב, אז הם יודע שהסיסמה שלך הוא ארבע דמויות. אז הרעיון הוא זה ישאל לך על הסיסמה, הסוג שלך. זה לא הולך להראות אתה התווים, אבל זה בעצם לקבל אותם. במקרה זה, כל פעם שאתה אי פעם לראות בקשת סיסמא התמודדות עם המכשיר, סיסמא הולכת להיות אדום. אז ארגמן. ועכשיו כאן בתוך זה חלון שהוא ב- Mac שלי, אני בעצם אני נתקלתי אותה ההשקפה המדויקת כבתוך של מסוף במכשיר. אז אתה לא חייב לעשות את זה. אתה יכול לעשות כל מה שאתה רוצה פנימי של המכשיר. אני כמעט אף פעם לא באמת עושה שום דבר במכשיר. אני כמעט תמיד למזער את זה ועכשיו אני עובד SSH למכשיר. אם שום דבר, אם אתה יש מחשב איטי יותר, אתה עשוי להבחין בהבדל. אני עושה את זה כי אני מעדיף חלון מסוף זה. יש לו כמה תכונות כמו אני יכול לפצל את החלון, ועכשיו אני יכול SSH ב באמצעות המכשיר. יש לי שני SSH קורה בבת אחת. אם המחשב שלך הוא איטי במיוחד ואתה עובד במכשיר, ואתה מבין שזה באמת laggy, מה. נוטה להיות הרבה יותר מהר אם אתה SSH-ed ב. אבל חוץ מזה אתה יכול לעבוד בכל מקרה. קהל: מה SSH זה אומר? ROB אודן: פגזים מאובטחים, משהו כזה? מה SSH זה אומר? גבריאל: מעטפת מאובטחת. אליסון: זה פגז רק מאובטח. ROB אודן: מעטפת מאובטחת. זה פרוטוקול שyou-- זה פרוטוקול מאובטח, כך מוצפן. אנשים לא יכולים לחטט ברשת ו לראות מה שאתה אומר לכל דבר אתה SSH-אד. ואכן, בההם ימים של CS50, כך בשינה 2009 כשאני היה בכיתה ט ', בדרך ש אתה עבד על סטי בעיה CS50, היה לך SSH-ED לכמה שרת שנתנו לך גישה ל, ואתה עבד שם. אז אתה לא צריך את זה מכשיר גרפי. לא היה לך gedit. לא היית כל הדברים האלה ש אתה יכול מבחינה ויזואלית הצבע ולחץ. אתה היה צריך לעבוד בממשק זה. אני מעדיף לעבוד בממשק זה. אז חלק ממה שאנחנו הולכים להיות הולך על עכשיו חבורה של פקודות שאתה צריך תתחיל להכיר כ אתה הולך יחד בקורס. ובכנות, ברגע שאתה להתרגל אליהם, זה כל כך הרבה יותר מהר ל לעבוד בסביבה זו מאשר לעבוד עם Finder, גרירה ולחיצה דברים. אז הנה אנחנו. עכשיו אני רק SSH-ed ב, וכך ברירת המחדל location-- ראיתי כמה מהפקודות האלה בכיתה, אבל אנחנו נלך על כל אותם שוב. מיקום ברירת המחדל שאנחנו בהוא ספריית הבית. וספרייה, רק מילה אחרת לתיקייה. אז אנחנו בספריית הבית. הקלד ls, רשימת הקבצים במדריך זה. מסתבר שאני יצרתי blah.c קודם לכן. אז יש לנו ספריית שולחן עבודה. אתה שם לב להדגשת התחביר? הדגשה בצבע התכלת מציינת ספרייה והישרה לבן מציין רק קובץ רגיל. אז יש הולכים להיות כמה צבעים אחרים שאתה רואה. קובץ הפעלה הוא כנראה הולך להיות ירוק או משהו כזה. אוקיי, אז אנחנו נמצאים בספריית הבית. עכשיו, אם אני רוצה להיכנס לשונה ספרייה, CD היא את הפקודה שאני רוצה. אז לשנות את הספרייה, ואז אתה מעביר את השם של הספרייה כי אתה רוצה להיכנס ל. אז הנה יש לנו ארבע אפשרויות. אני יכול להיכנס להורדות, וכעת אנו רואים כאן היא עדכנה זה בסוגריים להגיד שאני ב~ / הורדות. אז מה היא טילדה? זה קיצור ל ספריית הבית שלך. אז כמעט כל מה שאתה צריך לעשות זה ללכת ל להיות ביחס לתיקיית הבית שלך, ומע"צ היא רק פקודה אני משתמש פעם בשנה ש רק מדפיס את הספרייה הנוכחית. ואז אתה רואה כאן ש ~ / הורדות באמת פותרת ל/ home / jharvard / הורדות. אז / home / jharvard היא ספריית הבית שלי. אז אנחנו CD יכולים dot dot. עכשיו נקודת נקודה היא ספרייה מיוחדת ש תמיד מתייחס לתיקייה אחת למעלה. אז אם אני ב~ / הורדות, אז נקודת cd הנקודה הוא הולכת להביא לי לטילדה. מה אנחנו חושבים נקודת נקודת cd הוא הולך להביא לי עכשיו? זה יביא לי / בית. אז טילדה ידי ספריית עבודה הדפסה, אני בחברה / הבית / jharvard. ספרייה אחת למעלה מזה, עכשיו זה אומר כאן / בית. עכשיו נקודת נקודת CD. עכשיו אני בספריית השורש, ואתה לא יכול לעשות את זה שוב. אתה פשוט תישאר ב ספריית שורש לנצח. יש ספריית שורש חבורה שלמה דברים ש, אם אתה רוצה להסתכל לתוך, אתה יכול. לדוגמא, אם אני הולך לפח, המכיל כל קבצים בינאריים אלה, כגון ls, וCD, ואת כל הדברים האלה. אז פקודות אלה צריכים קיים במקום כלשהו במערכת, וזה בספריית bin /. אבל כמעט כל מה שאתה צריך לעשות זה הולך להיות מספריית הבית שלך. וCD ללא כל ויכוחים שהיא, אפשר לומר cd ~, לא צריך. CD הוא הולך להביא לך חזרה לספריית הבית שלך. אחרון אחד. CD - הוא הולך להביא אותך חזרה ל הספרייה האחרונה, שהיית ב. אז אני פשוט cd'd פעמיים ברציפות, כך שלי ספרייה שעברה הייתה בספריית הבית. אם אני הולך לקצץ בן, ועכשיו בואו נלך ולמשתמש. נתח משתמש. בואו נלך למנית משתמש. עכשיו אני עכשיו בנתח משתמש. CD -, חזרה בפח. אז זה מקבל שימושי במיוחד כאשר אתה have-- וזה יהיה לעבור. כלומר, מנית משתמש, גב סל, סל מניות. אז זה מקבל שימושי. אתה עלול למצוא את עצמך שיש הרבה, רבות, רבות ספריות מקוננות. ואתה רוצה לעשות משהו מהיר אמיתי בספרייה עליונה. אתה הולך לספרייה ש, לעשות שינויים ודברים כאלה, ועכשיו אתה רוצה ללכת בחזרה למקום שבו היית. CD -. אני תמיד מתוסכל כשאני במקרה הלכתי לזה אני מדריך רציתי לעשות עבודה ב. אני תמיד מקבל מתוסכל כאשר עשיתי זה בשני שלבים במקום צעד אחד, כי זה אומר שתקליטור ש-- הולך להביא שלמיקום ביניים במקום שבו אני רוצה ללכת. כך אנו רואים את כל הקבצים ברשימה. אנחנו יודעים איך לעקוף עד כה. אז עכשיו בואו נדבר על עריכת קבצים. אז בקורס זה, אתה כמעט תמיד צפוי להשתמש gedit. אם אתה רוצה, אתה יכול לקחת את הצעד הבא ולהתחיל ללמוד את טקסט שורת הפקודה עורך. אז אפשרויות שונות קיימות. ואלה הם כנראה הולך להיות רלוונטי לך, יש לנו ננו, Vim, וEmacs. אז Nano הוא למתחילים שורת פקודת עורך טקסט. אז Nano בוא נלך על blah.c יצרתי קודם לכן. זה פשוט קובץ C תקן זה. ואתה רואה חבורה של דברים שלמה קורה בחלק התחתון של המסך, וblah.c כנראה מכיל קוד C זה. אז בעורך המסוים הזה, מה זה אומר בbottom-- עכשיו סמל תו זה, אנו רואים ^ G, ^ X, ^ O זה. כך שכמעט בכל הקשר שאתה רואה, אתה עשוי לראות שסמל סימן הכניסה ב מקומות אחרים באינטרנט, בהצפת מחסנית, משהו כזה. זה כמעט תמיד מתייחס לשליטה. אז כדי לצאת אני רוצה לעשות שליטת X. בקרת X, עם יציאתו. ואני יכול להשתמש החץ שלי מפתחות כדי לנוע. שים לב אני לא יכול להצביע וללחוץ בקלות. אתה צריך להשתמש בחיצים שלך מפתחות כדי לנוע. אולי יש הגדרה הצבע ולחץ. אבל בואו נעשה כמה שינויים. עכשיו בקרת X ללכת יציאה. זה הולך לומר להציל חיץ שונה. עכשיו הפקודה, y עבור yes, n ללא. ג שליטה לביטול. אני רק אגיד כן. שם קובץ לכתוב. ברירת המחדל הוא הקובץ כי הוא כבר נמצא. לחץ על Enter. אישור. עכשיו אני רק בעריכת קובץ ש, הציל אותו, והוא השתנה. אז Nano הוא הקלה ביותר עורך טקסט להתרגל. החלופות Vim וEmacs. אלה הם עורכי טקסט ברמה גבוהה יותר שיש לי עקומה למידה תלולה מאוד. אז ההעדפה האישית שלי הוא Vim. ויש לו מגוון רחב של אפשרויות. וברגע שאתה מתרגל לזה, אתה לעולם לא רוצה ללכת לכל אחר עורך טקסט, כי אתה פשוט יש כל כך הרבה דברים עומד לרשותך באלה, אבל זה לוקח באמת זמן רב ללמוד. אז אולי אתה פשוט רוצה להכריח את את עצמך עכשיו להתרגל לזה, אבל אני הייתי אומר שזה שווה את זה. אבל זה קשה. ולאחר מכן Emacs. אני תמיד במאבק בEmacs כי אני יודע איך לעשות את הדבר וחצי דבר. כנראה Emacs הוא לא כברירת מחדל מותקן על המכשיר. אנחנו כנראה נוסיף ש כהתקנות ברירת מחדל. ברגע שאתה לומד אחד מ Vim או Emacs, יש אין סיבה משכנעת אי פעם ללמוד אחרים, אבל זה סגנון שונה לחלוטין. אישור אז זה עריכת קבצי טקסט. קהל: אם היית תקוע בVim עכשיו, איך לעשות we-- ROB אודן: יש מצבים מרובים בVim, ויש כל הדרכות על למידת Vim. אז אם יקרה לך להיות במצב הכנסה כדי להקליד טקסט, שבו אתה יכול להיכנס כי בדרכים שונות, אבל לי איך להיכנס למצב הכנסה. באו לצאת מכל מיוחד מצב שאתה ב, רק בריחה. ואתה רק לנגח את הבריחה כדי לקבל מתוך כל מצבים מקוננים בך. רק בסדר, עכשיו אני שוב במצב רגיל. וכך במצב רגיל, מעי גס. אתה רואה את זה מופיע בתחתית. ואז q. אז q יעזבו אם עשה שינויים, שאני- יש לי עשה שינויים? אני עשיתי שינויים כנראה. אז אם אתה ביצעת שינויים, זה יהיה אומר שאתה יכול לשים סימן קריאה. אני הולך לקרוא לזה מפץ. אז אתה יכול לשים את איסור רק להפסיק בלי לעשות שום דבר, או WQ המעי הגס יחסוך ויפסיק. אז w באופן כללי הוא לכתוב. אז לכתוב את הקובץ. אני יכול לכתוב ולהפסיק. או שאתה יכול פשוט טריקת qx, מפץ q רק לצאת משם בלי קשר על כל שינוי שביצעת. בסדר, אז עכשיו בואו go-- אנחנו יכולים ליצור קבצים. בואו נתחיל בהסרה של קבצים. ואני פשוט אזרוק באחד הפקודה מהירה חדשה, מגע. אז לגעת foo. בר מגע. לגעת באז. אם אני ls, עכשיו אנחנו רואים כי קבצים אלה קיימים. הם ריקים לחלוטין. אז המגע הוא רק קל דרכו של אחד, [לא ברור]. שני, מבחינה טכנית רק למדינה זה, זה מעדכן את חותמות הזמן. אז יש כל קובץ שאתה יוצר חותמת הקשורים אליו. אז באז נוצר ב ספטמבר 14 ב16:21. עכשיו זה 16:22, כך שאם אני נוגע באז שוב, אנחנו לראות באז שהיה רוב שונה לאחרונה ב16:22. אבל חוץ מזה אני כמעט אף פעם לא מסתכל על חותמות הזמן על קבצים. אז מגע, כאן אני רק באמצעות בו כדי ליצור כמה קבצים מהירים. כל, אז עכשיו rm הנכון הוא הפקודה שאכפת לנו כאן. ואנחנו יכולים RM boo. אומר להסיר boo קובץ הריק הרגיל. ואנחנו יכולים להקליד y, ועכשיו זה מסיר. באז rm. להסיר את הקובץ ריק רגיל באז וn הסוג ללא. עכשיו זה לא הוסר. אז בר ואז עדיין קיימות. Foo נעלם. גבריאל: תמשיך לדבר. ROB אודן: נהדר. אז ההודעה המעצבנת כאן, להסיר empty-- הרגיל מה אתה עושה שם למטה? להסיר את הקובץ ריק רגיל. אז אם אנחנו לא רוצים להיות הטריד אותו המסר, אנחנו יכולים לזרוק ב-f זה דגל, ואז זה כוח. ועכשיו אם אני RM -f, זה לא הולך ל אומר שאתה רוצה להסיר את הקובץ הזה. זה פשוט יעשה את זה. וls, אני לא רואה את בר שם יותר. עכשיו זה פוטנציאל הפקודה מסוכנת. הוא נוטה שלא לרע. אנחנו נחזור בשניים איך זה יכול להיות ממש מסוכן. ובואו ליצור כמה ספרייה זמנית. mkdir, פקודה אחרת. אז mkdir היא הפקודה זה עושה את ספרייה. ועכשיו על ידי ls אנו רואים אור זה נחמד כחול מודגש ספרייה זמנית. אני יכול CD לטמפ '. ואני יכול mkdir foo. CD לfoo. בר mkdir. CD לבר. כך אנו רואים שאנו יכולים לקבל בקלות לכמה קינון די עמוק. עכשיו איך אני מסיר את ספרייה? rmdir. אז אם אני פשוט ישר מנסה rm, כמו שעשינו עם קובץ רגיל, בר rm הולך אומר לא יכול להסיר את הסרגל. זה מדריך. יש פקודה מיוחדת ל הסרת ספריות, סוג של. בר אז rmdir. עכשיו בר נעלם. אוקיי, אז rmdir אני פחות או יותר לא להשתמש. הסיבה עכשיו being-- בואו להפוך את בר קובץ רגיל כאן. boo אז rmdir. rmdir. נכשל ניסיון להסיר foo. מדריך אינו ריק. אז אתה לא יכול להשתמש להסיר dir ב ספרייה שיש דברים בזה. אז יש לך כמה אפשרויות. אתה יכול להיכנס לספרייה ש, להסיר הכל ידני, ולאחר מכן יצא וRMDIR הספרייה. זה כמובן נשמע מעצבן. מה אם יש אלפים קבצים שם? ובכן, אתה יכול RM *. נדבר על * בשני. זה בעצם אומר את כל הדברים. אבל עדיין טוב יותר, -r כך rm. אז rm -r-- בהרבה הקשרים, -r אומר רקורסיבית, שנדברנו על מה ש אמצעי רקורסיבית בכמה שבועות. אבל זה בעצם אומר חוצה השלמות של ספרייה זו ולהסיר את כל מה. foo -r אז rm הולך להגיד יורד אל foo ספרייה? כן. הסר קובץ foo / בר ריק רגיל? כן. הסר foo ספרייה? כן. אז עכשיו foo וכל מה ש בתוכו הוסר. עכשיו שיכול לקבל מעצבן במיוחד when-- בואו לגעת 1, לגעת 2, לגעת 3. יכול להיות חבורה של קבצים שלמה. אם אני רוצה, אני יכול ליצור אלפי קבצים כאן. וfoo -r rm הולך להיות די מעצבן. כן, כן, כן, כן, כן, כן. עם הרבה יותר קבצים שאתה לראות במהירות כמה פעמים הייתי צריך להקליד כן. ובכן, אנחנו פשוט ראינו לפני כמה שאנחנו יכולים להיפטר מהצורך להקליד כן, -f. מגע אז mkdir CD foo foo 1 2 3. אישור, foo -rf כך rm הולך באופן עיוור להסיר foo לחלוטין. אין הנחיה. אין שום דבר. Foo נעלם. אז אני נוטה להשתמש בזה הפקודה כל הזמן. שאמרו, זה הפקודה מאוד מסוכנת, כי אם אני עושה משהו כמו זה, זה לא יבקש ממך. זה כבר לא יהיה. וזה קורה לעתים קרובות למדי, ואפילו בקורסי CS רמה גבוהה יותר. לפעמים אנחנו תראו משהו בו מישהו אומר שאני בטעות RF-ed rm שלנו הבית שלי ספרייה וכל קבוצת P שלי נעלמה. וזה הרסני, אבל אין פח אשפה. אין שם שום דבר לך לאחזר. זה פשוט נעלם. חמור מכך יהיה משהו כמו / -rf rm. אז אנחנו רק דנו שספריית השורש. זה מחזיק בכל קבצים במערכת שלך. דברים נוטים להיות די מבולגן בעת הסרת דברים כמו ls, וCD, ואת כל אלה. קהל: מה ההבדל בין rm, RF, ו* rm ROB אודן: * אז rm - אליסון: השאלה הייתה מה הבדל בין rm, RF, ו* rm. ROB אודן: אז rm *. כוכבים באמצעים כלליים כל את תוכנו של מדריך זה. מנסה לחשוב על אחרים דרכים להראות כוכב. ובכן, לככב למעשה, בדרך כלל, פירוש הדבר התאים לשום תבנית. אז אם יש לי קובץ בשם dog1, לגעת dog2, לגעת cat1, לגעת cat2. אז ls * 1 הולך להדפיס cat1 ו dog1, כי כוכב שיכול להיות מלא בwith-- אחד צריך להיות שם, אבל כוכב יכול להיות או חתול או כלב. זה קלף פראי. זה המילה שאני מחפש. Wild Card. או שאני יכול ls * כלב, ו אני חייב לראות dog1, dog2. אז אלה הם מפרטים את הקבצים התואמים את דפוס מסוים ש. אתה יכול להשתמש בls בדרך זו. Ls * כוכב תואם שום דבר. אז זה הולך להדפיס את כל את תוכנו של מדריך זה מאז כולם להתאים. זה לא הולך להדפיס כל דבר בספריות ברמה גבוהות. אם יש לי תת ספרייה, foo, ו לגעת 1 2 3-- אז עכשיו אם * rm כוכב, להסיר cat1, cat2, dog1, dog2. לא ניתן להסיר foo. זה מדריך. אז כוכב מתרחב לכל קבצים בספרייה. אז מבחינה טכנית rm * זה כמו לומר cat1 rm, cat2, dog1, dog2, foo. בעוד -rf rm, מבחינה טכנית סטאר להשיג את מה שאנחנו רוצים, אבל rm -rf-- אם אני יוצא מזה ספרייה, טמפ -rf rm, זה הולך להיכנס לטמפ 'ו באופן רקורסיבי להסיר את כל מה. אז הכוכב הוא נפרד שב הוא הבין by-- כך הדבר הזה , דבר שאני רץ בזה שמעודד אותי לפקודות ולאחר מכן ביצוע ועושה שלהם, אני קורא לזה הפגז שלי. וכך פגז זה הוא עצמו תכנית. ואם אני רוצה, אני יכול לרוץ ב/ bin / bash. הפגז נקרא bash. ועכשיו אנחנו מבחינים במשהו מעט השתנה, וזה בגלל שההגדרות שלי ל הפגז שונה במקצת. אבל עכשיו אני מבחינה טכנית פועל פגז בתוך המעטפת המקורית שלי, ואני יכול לצאת פגז ש, ועכשיו אני חוזר לקונכייה ברמה העליונה שלי. המטרה לומר שis-- הכוכב. אז הכוכב הוא משהו מובן על ידי bash. אז -rf rm, דגל -rf הוא הבין רק על ידי rm. הוא יודע שכאשר אתה לעבור -rf ש רוצה את זה כדי להסיר באופן רקורסיבי כל הקבצים מבלי להציג הודעה. הכוכב הבין משהו על ידי bash שכאשר אתה אומר * rm, bash לא הולך להגיד היי * rm, להסיר כוכב. Bash הולך להגיד rm * להסיר cat1, cat2, dog1, dog2. זה באופן אוטומטי הולך להרחיב כל הקבצים בספרייה. ובאופן דומה טילדה עוד סמל שbash מבין. כשאתה אומר cd ~, bash מתרחב כי לספריית הבית שלך. שאלות אחרות כל כך רחוק? אישור אז אנחנו הולכים להתחיל ללכת מהר. השלמת כרטיסייה. רק כדי לזרוק אותו בחוץ. הרבה אנשים לא מבין את זה קיים. אז אם אני מקליד CD דאו, אני רוצה להיכנס להורדות. אני לא צריך להקליד nloads. אני יכול פשוט מקיש על Tab. אז היא מכירה בכך דאו הוא קידומת ש אינו תואם במדריך זה אחר, כך היא תשלים את זה בשבילך. עכשיו אני יכול להיכנס. אני גם עושה את זה באופן רקורסיבי. foo אז mkdir. בואו נלך לfoo. בר mkdir. אז חוזר לבית שלי ספרייה, אני יכול לראות את ההורדות. עכשיו לחיצה על טאב שוב, באופן אוטומטי הולך למלא בfoo. זה המדריך בלבד. לחיצה על טאב שוב, באופן אוטומטי הולך למלא בבר. אז עכשיו אני ב( ~ הורדות / foo / בר). אז השלמת כרטיסייה זו, בכל פעם שיש לי לשעתי עבודה, ואני עומד על כתפו של מישהו, והם הולכים rm D-O-W-N-L-O-A-D-S, אני מת. כרטיסייה רק, כרטיסייה, כרטיסייה, כרטיסייה. אז בהחלט משמש כרטיסייה. ובאופן דומה ו למטה, הרבה אנשים רק שקרה לי מעולם לא הכה למעלה ולמטה. זה יעבור הקודם פקודות, כך שאם אתה רק רץ משהו, ואתה רוצה להפעיל אותו שוב, רק להחזיק עד שתגיעו לזה. אישור. כל כך מהר, כמה דברים אחרים. בואו נחזור לטמפ '. בואו ליצור כמה קבצים. אז כאן, אני רק הולך לרשום כמה מילות. כלב, חתול, מיאו. בואו נעשה כלב, דגים. אז עכשיו נציג הוא מאוד פקודות שימושיות ש להשתמש בו כדי לחפש בכל קבצים עבור טקסט מסוים, מבחינה טכנית אתה יכול לעשות באמת ביטויים מורכבים על מנת שיתאימו. אז הנה, אם אני grep, ומה אני רוצה לחפש? נניח שאני מחפש חתולים, ו אני רוצה לחפש את כל הקבצים הללו. אז איך אני עושה את כל הקבצים הללו? כוכבים. אז בקובץ אחד, יש לי חתול. כנראה שיהיה לי קרא לזה משהו טוב יותר, כי זה נראה כמו מספרי שורות או משהו. אבל בקובץ אחד יש לי קו עם חתול. בקובץ שני יש לי קו עם חתול. אז עכשיו אני יכול להסתכל בתוך קובץ אחד ו לראות אה, כן, הקובץ שעשה לי חתול. קובץ הודעה של שלושה לא תאם בגלל חתול הוא לא שם. אני יכול grep "מיאו". להגיש רק שני יש מיאו. אז זה אתה יכול לשלב, שוב, עם -r, ש כמו שאמרתי קודם לעתים קרובות משמעות הדבר היא רקורסיבית. ואז אני יכול לבוא לכאן, grep -r לכל מקרה של-- בואו לערוך זה אחד רק כדי לזרוק את חתול לשם. אז grep -r לכל מקרה של חתול בכל ספרייה זו. וזה מספר פעמים חיפוש בכל תיקיות המשנה. אז באז, יש חתול. בטמפ '/ 2, יש חתול. ובטמפ '/ 1 יש חתול. אז זה חיפוש בתוך קבצים. עכשיו אתה יכול גם להשתמש למצוא. וכך מוצא הוא באופן ספציפי על מחפש קבצים עם שם שניתן. אז בואו לעשות קצת יותר. בואו נלך להורדות. לגעת dog1. לגעת cat2. לגעת cat_dog. לגעת catcat. אז אני רוצה למצוא את כל קבצים עם כלב בשם. אז למצוא, ולארוך ביותר זמן אף פעם לא זכר איך למצוא עבד, עד שלבסוף לקרוא משהו שעשה את זה כל כך ברור. אז למצוא, באופן אוטומטי רקורסיבית. אתה לא צריך לעבור -r. אז למצוא נקודה. לא דברנו על הנקודה עדיין. בעוד נקודת נקודה תמיד משמעות הדבר היא ספרייה אחת למעלה. דוט תמיד אומר את הספרייה הנוכחית. כדי שאוכל RM נקודת -r ב אותו אופן אני יכול rm -rf *. סופו של דבר הם להשיג את אותו הדבר. rm -rf נקודה הוא הולכת להסרת במדריך הנוכחי כולו. אישור, שאני לא רוצה לעשות שם. אבל למצוא נקודה. אז באופן רקורסיבי חיפוש הנוכחי ספרייה, ועכשיו כל מה ש אחרי זה היא חבורה של דגלים ש להשתמש בו כדי להוציא את הדברים מהתמורה. אז למצוא נקודה מחזירה את כל מה ש יכול למצוא מהספרייה הנוכחית. כל אלה הם הקבצים באופן רקורסיבי חיפוש. נצטרך לראות כמה מאלה בשניים. אבל במקרה שאתה תוהה איך אני עושה כי, כך הפיקוד K, לכל הפחות במסוף שלי בMac מנקה אותו. שליטת L בדרך כלל מנקה בו לכל סוג של מסוף. ניתן גם להקליד ברור. ואם אי פעם לקבל לscenario-- מוזר זה קרה לי כמה time-- שבו הצבעים של ההנחיות שלך כולם פישל, או שאתה הם לא מסוגלים לראות שום דבר מוקלד כאשר אתה מקליד, כי לפעמים כמו צבע רקע מוגדר זהה לצבע החזית ועכשיו אתה לא יכול לראות את הגופנים. איפוס הוא משהו שפשוט מחזיר לך הרקע השחור ברירת המחדל, כניסה לבנה, או מה ש אתה מגדיר אותם. אז איפה היינו? מצא את הנקודה. אז עכשיו כל מה שעבר זה נקודה מגבילה את התוצאות למשהו שמתאים ל הדפוס שניתן. אז הנה אני רוצה לחפש כל מה שעם שם החתול. אני לא קיבלתי שום דבר. למה זה המקרה? ובכן, אני רק מחפש משהו עם בדיוק את שם החתול. אם אני רוצה לחפש משהו שיש לו איזה דפוס, וcat-- הציטוטים מבחינה טכנית אין צורך, אבל אני זורק אותם לשם. אז עכשיו הוא מוצא catcat כי זה הדבר היחיד ש יש כמה שרירותי דפוס ואחריו חתול. אני יכול לשים את * חתול, ועכשיו למצוא catcat, cat_dog, cat2, בגלל כל אלה הם הדברים עם חתול בתחילת ואחריו שום דבר. אתה יכול לשלב את זה. אם אתה רוצה לחפש את כל קבצי C שיש לך, אתה יכול לעשות * .c. יש לנו blah.c כאן. אז זה עובד למצוא. אתה יכול לחפש. יש לו חבורה של דגלים כל להגבלות נוספות. ואחד עליהם, נניח -d. אז מיושן. אה, זה לא מה שאני רוצה. לא -d. סוג ד. אז למצוא נקודה - ד הסוג. אז מה שעשה כרגע הוא שאני מחפש לכל הקבצים בספרייה הנוכחית עם a-- ד עומד על סוג ספריית directory--. זה מחזיר את כל הספריות במדריך הנוכחי. והסוג F הוא כל קבוע קבצים, כל ספריות שאינן. אז זה פשוט דוגמא לדרכים אחרות ש יכול להגביל את החיפוש אחר לא רק את שמו של הקובץ. זה היה 30 דקות. ובכל זאת הולכת. אליסון: אני רוח באמצעות. זה יהיה בסדר. ROB אודן: אז כמה דברים אחרים. עכשיו לדפוק, סימן קריאה. כך שבדרך כלל means-- טוב, בואו יראו את דוגמא. אז f!, מה שהולך לעשות? ובכן נראה שיש לי f מסוג dot למצוא חוזר ונשנה. מה לגבי ז!? כי רק grep חתול -r *. אז לדפוק אתה יכול להשתמש בו כדי לחזור הפקודה לאחרונה נעשתה. אז אם אני מקליד! GRE, זה הולך להפעיל מחדש את הפקודות שהחלו עם GRE ביותר לאחרונה. ואתה יכול לראות את כל אלה פקודות עם ההיסטוריה. אז ההיסטוריה. כל אלה פקודות שמפעיל כיום. וגם, זה לא ממש מוגבל היום ל, אבל אני השתמשתי רק זה מכשיר נכון להיום. זה השלמות שלך היסטוריה של פגז bash שלך, מלבד זה קוטע את בשלב מסוים. קהל: מה קורה אם אתה עושה היסטוריה פקודה [לא ברור] ושגיאה בתוצאה עדיין יהיה להדפיס the-- ROB אודן: כן, אם יש שגיאה באחד commands-- אלה אז נניח, ש פקודת השגיאה לא נמצאה. עדיין מופיע בהיסטוריה. בְּסֵדֶר. שאלות אחרות על כל דבר? אז זה מפץ. עכשיו, הפקודה באמת שימושית, גבר. אז זה נותן לך מדריך לפקודה מסוימת. אז בואו נגיד שls אדם, כך זה מראה לי ls. הוא מפרט את תוכן ספרייה. וזה המקום שאני רואה שיש הם אלה דגלים שונים שקיימים. כך אנו רואים ש ls -l קיים אם היינו קורא את זה. ls -l נותן לי את רשימה מלאה של ספרייה עם מי בעלים של הקובץ, גודלו של הקובץ, חותמת הזמן שונה. אז -a ls הוא עוד אחד שאתה אולי למעשה משתמש בתדירות גבוהה במקצת. -al הוא הדגל הנפוץ ביותר שלי ls האחרון. אז -a, שם לב שיש הרבה יותר מאשר רק קבצי ls. ls -a. מה במשותף עם כל הקבצים הללו? הם מתחילים עם נקודה. אז זה כנס בלינוקס ש קבצים שמתחילים בנקודה מוסתרים. אז זה רק אומר ש כאשר אנחנו רק ls ישר, או שאנחנו מחפשים בספרייה זו באמצעות שווה הערך מאתר, או Windows שווה Explorer, ש לא רוצה לראות את קבצי הנקודה הבאים. הם פשוט לזהם את התצוגה של דברים. אז הם מוסתרים אלא אם כן אתה באופן ספציפי לבקש אותם עם משהו כמו -a. אז אני יכול CD ל.local, ואני רואה שהוא בעצמו ספרייה עם ספרייה משותפת, ו יישומים, ובלה בלה בלה. אז נקודה, קבצים שהם פשוט מוסתרים. אישור, חשובים שבם כל כך אחרים. יש לי כמה אני יכול לדלג. בואו נדבר מהירים רק אמת על הדברים ניתוב מחדש של קובץ. אז יש סדרה מורכבת כולה דברים שאתה יכול לעשות עם אלה, אבל רק כדי לראות אותם, נניח, הד. פקודה אחרת. הפקודה באמת מטומטמת. האם כל זה הוא הדפסה מה שאני אומר את זה ל. אז הד שלום. זה פשוט הדהד שלום למסך. שלום עולם. הדי שלום עולם. אז פקודה אחת או אחד סמל שbash מבין זה גדול יותר מסמל, ו כי הוא הפלט לסמל קובץ. אז אם אני פלט זה ל foo, יש עכשיו קובץ בשם foo, בתוך שהוא שלום עולם. אז שם לב שכשאני הד שלום צינור עולם לfoo, זה לא הדהד שלום עולם. במקום זאת הוכנסה לקובץ foo. ופקודה אחרת רק לזרוק אותה עליך, חתול. זה דרך קלה פשוט לחלוטין רשימה של תוכן הקובץ כך שאני לא צריך לפתוח עורך טקסט כדי להציג אותו. כך שהתוכן של קובץ foo הוא עולם שלום. ואני יכול blah.c חתול, התוכן הוא זה. שוב, אלה הם פקודות ש, לא מצפה לך אותם כל שינן. הרעיון הוא שראית אותם. אולי אתה עובד על משהו, ואתה כמו נמאס לי מפתיחת קובץ זה. אני מאחל רק יכולתי להסתכל בתוכן מהיר אמיתי. אתה יכול לעשות את זה, אז להסתכל אחורה ולומר, הו, אני זוכר משהו כמו שקיים, וזה חתול. כך שהיא הולכת לקובץ. עכשיו אין באמת טוב דוגמא לקריאה מקובץ עדיין. מה זה משהו שלוקח משהו מרגיל ב? כל פקודה לינוקס פשוט? כשאנחנו מגיעים לזה, בכמה שבועות כל piece-- גם, השבוע יש לך חתיכה שבו אתה להתחיל לקחת קלט מהמשתמש. ולכן בדרך כלל אתה מקליד קלט שבמקלדת. במקום להקליד ש קלט במקלדת, במקום שאתה יכול צינור במקובץ כך שכאשר אתה עושה את מריו, ./mario, צינור בכל קובץ נתון, ו זה הולך להפעיל את תכנית מריו. לא ציפיתי לקלט ב המקלדת, במקום זה רק הולך לקרוא קווים מקובץ foo. אז גדול מfoo מכניס לתוכו קובץ foo, ופחות מ foo לוקח דברים מקובץ foo ו משתמש שכקלט לתכנית זו. ורק כדי לראות את זה, אנחנו יכולים גם הד באז foo בר, ולאחר מכן במקום אחד גדול מ, בואו נעשה את שני לfoo. מה זה עושה? זה פשוט מצרף לקובץ. אז במקום לשים לב אם אני הד בלה ל foo ולאחר מכן foo חתול, זה רק בלה. לכן, כאשר אתה פלט לקובץ, זה מחליף לגמרי את הקובץ. אם אתה רק רוצה להוסיף, כפול [? תלמיד כיתה. ?] ואחרון הוא צינור. צינור מקבל הרבה יותר מסובך, שבו זה לוקח את הפלט של פקודה אחת ומזין אותו לפקודה הבאה. אז כמה דבר שכיח, היסטוריה. אז, איכס, אני לא רוצה להסתכל על זה. תראה לי את כל הפקודות בהיסטוריה שלי איפה אני grep-ED למשהו. לא, זה מבלבל. תראה לי את כל הפקודות שבו אני מוצא. כל למצוא פקודות שאי פעם רצנו. אז ההיסטוריה. עכשיו תפוקות היסטוריה ל מסך זה רשימה של פקודות, אבל אני לא רוצה פלטת אותו למסך. במקום זאת אני הולך בצינור לgrep. אז בואו grep לכל המופעים של ממצא. אז עכשיו במקום לקחת grep הקלט, במקום של-- grep הוא מסוגל להתמודד עם כinput-- אנחנו באמצעות grep בצורה קצת שונה כאן. אז במקום להקליד את רשימת דברים שאנחנו רוצים לחפש ואמר grep הוא לוקח כקלט. אז אם אני פשוט grep למצוא, זה מחכה לי להקליד את הדברים. אז חתול למצוא שלום. שלום. מצא את. שים לב בכל פעם שאני מקליד למצוא היא מכירה בכך שהקלדתי למצוא. אז במקום זה, יהיה חיפוש קבצים למציאה. אז ההיסטוריה היא עכשיו הולכת ל פלט רשימה של כל הפקודות. אנחנו שמים את הפלט ש, ואנחנו מאכילים אותו לgrep, ואז זה לירוק כל המופעים של ממצא. הסיבה שאמרתי את זה הייתי מבלבל הוא אם אני- זה עדיין מבלבל. אם אני grep לgrep. שימו לב שזה פחות או יותר תמיד מראה את הפקודה אני רק רץ בגלל שהפקודה ש יש עצמו grep בתוכו. אוקיי, אז שאלות על כל דבר? ואני נעביר אותו מעל בשלב זה. אני מקווה שזה נחמד סקירה של כל הפקודות שאתה לא צריך שיננתי, אבל אלה מרכיבים 95% מוצקים של מה שאני לעשות בשורת הפקודה. כמו כן יש לזכור כי בשורת הפקודה עצמו, bash הוא שפת תכנות, ולכן כאשר אתה מקבל על זה, לך ייתכן שתרצה לעשות דברים באמת מורכבים. וכך יש לו דברים כמו לולאות, ואילו, וכל אלה כי אתה הולך להתרגל ל עם שפות תכנות שלך. אבל זה מעבר ל היקפו של סעיף זה. אוקיי, אז אין שאלות? אליסון: אין? גבריאל: האם אתה הולך to-- אליסון: אני יכול לעשות את זה על שלי אם אתה רוצה. אנחנו יכולים לראות מה קורה. ROB אודן: Off לאליסון. אליסון: וו. אתה קשה מעשה לעקוב, רוב. האם אתה רוצה שאני נעבור איתך? או שיש לך, על אישור. אני הולך לנסות ולא די להיות ארוך כמו שיש. בואו תראו אם רצון זה עובד כמו שאני רוצה אותו. אולי? Haha! כן. אז אני פשוט הולך מהר מאוד באמצעות משתנים, לולאות, משפטי תנאי, וקצת על מהדר. אם יש לך שאלות ב כל עת, בבקשה לעצור אותי. החבר 'ה האלה מזכירים לי לחזור השאלה שלך למקרה שאשכח, אבל לא צריך להיות יותר מדי רע. אז משתנה, כן. אין לנו אחד משלך חתיכות שריטה כאן. אני בטוח שרובכם, אם היה לך איזה משחק שיצרת עם גרד, היה לך כדי לעקוב אחר משהו כמו ציון, או זמן, או משהו כזה. אז כתום הבהירים אלה חלקים שאנחנו רואים שם רק צורת Scratch של משתנים, ואתה בהחלט להיות שימוש במשתנים בכל התוכניות שלך. אם אתה לא, אני לא ממש בטוח מה שאתה עושה. אבל בכל מקרה, דבר גדול, הגדרת משתנים. עם C כל משתנה יש יש סוג הכריז, כך שנתתי לך מאוד כללי אחד בראש. כך יהיה לך שלך הקלד ולאחר מכן כל מה ש אתה מחליט לקרוא למשתנה שלך. אז במקרה, זה סוג ברשימה משתנית. יש לנו שלוש דוגמאות. תווים של כמה כיתה, של, וזה מה ש אני בטוח שכל מה שאתה רוצה כדי לקבל בכיתה זו. ניתן להגדיר מספר רב של משתנים בשורה אחת כל עוד הם כולם מאותו הסוג, אשר היא הדוגמא השנייה שלנו שם שבו יש לך שלוש משתנים, x, y, z. הם כולם צף. ואז אתה יכול גם, בזה אחרון דוגמא עם ציון int ומספר צוותי, שאתה יכול לאתחל אותם שם. אז בדוגמא האמצעית שבו אנו רק צריך לצוף של x, y, z, אלה אינם מאותחלים עדיין. אין להם שום ערך. או שיש להם ערכי זבל. ואם אתה מנסה ולהשתמש בם, המהדר לצעוק עליך. אתה צריך גם להכריז ו לאתחל המשתנים שלך. אז בזה אחרון, אנחנו עושים את שניהם. אנחנו הצהרה על משתנה של ציון ומספר צוותי, ואנחנו מאתחלים אותם, נותנים לי שלהם הערכים הראשוניים שלהם של 7 ו 4 בהתאמה. מגניב. כולם טובים? מדהים. אוקיי, אז יש כמה מוסכמות. אם אתם קראתם דרך סגנון 50, אלה רק דברים שאנחנו רוצים ל לך ליישם בסגנון שלך. שמות כל כך משמעותיים. אם אתה מתחיל לקרוא את הדברים רק x, y, z, במיוחד כפי שאתה להיכנס לארוך יותר תוכניות, אתה כנראה הולך לבלבל את עצמך ולהיות כמו מה שמשתנה זה מתייחס ל. אין לי מושג מה זה אומר. אז אם זה אמור להחזיק ציון, קורא לזה ציון. אם זה אמור להחזיק כמה תשובה או לגרום, לתת לה שם כמו ש. ללולאות, שבו אנו להיכנס בשקופית הבאה, משתני אות אחת הם בסדר גמור. ROB אודן: אני, j, ו- k הם רק אמנות ללולאות שכולם מצפה להם שייקרא i, j, ו- k. אתה יכול לקרוא them-- אני רואה שורה לפעמים עמודה או שורת שיחה לשתי לולאות מקוננות, ו זה גם סוג של סטנדרט. אבל i ו j מובן לחלוטין. אליסון: כן, אני ו j אתה בסדר גמור. לשם בהירות כמו בחלק מקבוצות P שלך, זה אולי הגיוני יותר דברים תיאורים שם רק כדי לעקוב אחר זה. אבל אני חושב שאני, j, k ואני חושב ש רובם המכריע שלנו כל השימוש. ROB אודן: עם אלה אמנות, כל כך הסגנון הוא חשובה. זה אחד מארבעת הצירים שבו אתה מדורג, וזה כל כך קל פשוט לעבור על P להגדיר בסוף ולוודא שאין טעויות סגנוניות. אז לוודא שאתה tabbing בצורה נכונה. ודא המשתנים שלך בשם. השאר כמה הערות. זה מאוד קל להשיג נקודות אלה. אתה לא צריך לחשוב על שום דבר כדי לקבל נקודות אלה. אתה לא צריך להבין שום דבר. זה רק עושה את זה נראה יפה. אליסון: למעשה, אנחנו יש לי סגנון 50, ש אגיד לך שבו אתה מתעסק למעלה אם אתה להתעסק בסגנון ואגיד לך בדיוק מה שאתה צריך לתקן ואיך אתה צריך לתקן את זה. זה גם רק טוב להזכיר שזה כמובן מדיניות כי אם אתה במשרד שעות והקוד שלך הוא בלגן, אנחנו יכולים לרדת כדי לעזור אתה עד שזה נראה יפה יותר. אז להתחיל תקין, לשמור על סגנון עקבי, אתה גם רק הולך לעשות חייך הרבה יותר קל כש אתה מנסה לעבור ניפוי שגיאות. אם אתה מנסה להבין שבו אתה חסר ישע מתולתל והם בכל המקום, אתה רק עושה את החיים שלך יותר קשה. אז בקנה אחד עם סגנון. אני מבטיח שזה יעשה את החיים קלים יותר. זה יהיה להפוך את חיינו לקלים יותר. כולם יהיה הרבה יותר מאושרים. וזה מה שאתה רוצה. גבריאל: הכיתה שלך תהיה גבוהה יותר. אליסון: כן, והכיתה שלך. אם TF שלך כמו שאתה, נוטה להיות חיובי. בסדר, ואז פשוט הנקודה השנייה כאן. אתחולים בקנה אחד. אז כפי שראינו, אתה יכול להכריז ולאתחל את הדברים. משתנים מרובים על אותו הקו. דבר אחד אנחנו רוצים אותך לא לעשות הוא להכריז על חלק ממשתנים ולא לאתחל אותם על אותו קו שאתה אתחול אחר. אז במקרה שגרם לא הגיוני, שהיא יש לנו הדוגמא כאן לאן אנחנו מכריזים ints במשתנים של רבעונים מטבעות ופרוטות, אבל רבעים ופרוטות אין להם ערך ראשוני. אנחנו לא אותחלנו, אבל ממש באמצע יש אנחנו כבר אותחלו מטבעות ל -0. אז או שיעשה רבעים, מטבעות, פרוטות. או לעשות רבעים שווים 0. פרוטות שווה 0. פרוטות שווים 0, או מה ש ערכים הראשוניים אלה. דבר גדול עם סגנון, להיות עקבי. במקרה של ספק, להיות עקבי. אבל לעקוב אחרי מדריך הסגנון שלנו גם. מגניב. כולם טוב שם? קהל: איפה מדריך הסגנון? אליסון: מדריך הסגנון הוא on-- מה באתר? גבריאל: אני חושב שזה manual.cs50.net/-- אליסון: סגנון? גבריאל: סגנון. כן. אליסון: כן. אז שאלה של, שבו הוא בסגנון 50. manual.cs50.net/style. כן? קהל: אם אנחנו מגדירים משתנים, האם זה בסדר אם אנחנו שמים כמו [לא ברורים] כמו ציון int, ואז int מטרה. אז היית אומר שעכשיו יש לנו יש להגדיר אותם ביחד? אליסון: אז שאלה, צריך יש לך קוד מיותר כאשר אתה מגדיר משתנה כגון ציון int ו על משחק int השורה הבא? ROB אודן: יש בהחלט מקרים שבם קוד מיותר הוא רע. לא הייתי מחשיב את כי קוד מיותר. אני כמעט אף פעם לא להכריז מרובה משתנים על אותו הקו אי פעם. ואם משהו, זה בגלל ש בדרך כלל אני משאיר איזה תגובה להסביר מה הוא משתנה ל. אז אני אגיד את קו נטוי קו נטוי ציון int. עוקב אחר כל מה ש. בסך הכל קו נטוי קו נטוי. כך שזה הרבה Grosser שבדרך לשים את כולם על אותו הקו. אני פשוט אף פעם לא לשים אותם באותה השורה. אליסון: אני מרגיש שזה העדפה אישית בשלב זה. קהל: האם זה הולך ל ללולאות ודברים יותר מדי? ROB אודן: כמו בפנים? כמו int i שווה 0 פסיק אורך שווה משהו? כי אין לך ברירה. עם לולאות האתחול part-- כך שאתה יכול לראות רק int i שווה 0 פסיק אני פחות מ כל פסיק אני פלוס פלוס. כי אני int שווה 0, מבחינה טכנית אתה יכול גם לעשות את מה שראינו לפני עם תחביר הפסיק. int i שווה j 0 פסיק שווה 3 k הפסיק שווה 5. אין לך ברירה לפצל כי עד לקווים מרובים, וזה סטנדרטי. רואה את זה שם יפה. אליסון: מדהים. ובכן, Segue הנוח ללולאות. אז כן, יש לנו כאן כמה דוגמאות של לולאות שאתם ראו בהתחלה. וכמובן כל אלה יכול רק ליצור מחדש בג והם בעצם מאפשרים לך לחזרה על מקטע מסוים של קוד עד מצב מסוים הוא נפגש, אשר נשלח להיכנס מייד אחרי מדבר על לולאות עם תניות. אז יש לנו שלושה סוגים עיקריים. ל, ואילו, ובזמן שתעשה, ש כולנו נעבור עכשיו. אז ראשון הוא ללולאות. אז לכמה מצב, לבצע הבלוק הזה של קוד. יש לנו קצת קריר זה לשרטט כאן בתחתית. אבל בעצם יש לך ב לך, שהשורה הראשונה, אתה הולך לאתחל המשתנים שלך. אז כמו שדיברנו עליו, הוא אני שווה 0 או שאני שווה 10. לא משנה מה אתה צריך את זה משתנה להיות זה הולך להיות מאותחלים יש, הוכרז ואותחל לערך כלשהו. אז יש לנו כמה מצב זה הולך להיות בדיקה שלנו משתנה נגד משהו. אז במקרה המקרה הטיפוסי שבי אולי אתה רוצה חלק זה של קוד לבצע חמש פעמים. ככה שהיינו צריך int i שווה 0, ואנחנו רוצה שזה יהיה כאשר הוא אני פחות מ -5. אז מצב זה רק הולך לבדוק שכל פעם. אם תנאי ש מעריך לנכון, זה הולך להריץ את הקוד, וזה בדיוק מה התרשים הקטן הזה מראה. וכך מבצע אותה. הוא מעדכן משתנה, וזה מה שאנו רואים בחלקו האחרון של לנו אתחול לולאה יש. אז זה פשוט להמשיך לעשות את זה עד שהמצב שלא נפגש, ואז זה יהיה לצאת הלולאה ולהמשיך נע על עם שאר התכנית שלך. כולם טוב שם? מגניב. אז הנה דוגמא, דומה מאוד למשהו שאני פשוט דיברתי על. אז אנחנו פשוט רוצים להדפיס זה CS50 10 פעמים. אז אתה רואה כאן יש לנו לנו, ואז אנחנו לאתחל משתנה אני להיות שווה ל -0. המצב שלנו הוא לבדוק שזה פחות מ -10. אז להעריך לנכון כאשר אנו ראשון להתחיל, ולאחר מכן מעדכן את המשתנה שלנו בכל פעם שזה באמת מבצע ומדפיס את זה CS50. ויסתיים אחרי 10 פעמים. מגניב. וכך, בעוד לולאות הן ליד. וכפי שאתם רואים כאן, רק שיש לנו כמה זמן ששאלת condition-- זה? קהל: איך אני יכול לקפוץ למעשה רק לא מספר אחת, אבל שני מספרים [לא ברור] אני פלוס פלוס פלוס? אליסון: אז השאלה הייתה איך אתה יכול לעדכן את משתנה על ידי יותר מאדם אחד בכל פעם. אז אני פלוס פלוס תהיה עדכון על-ידי אחד בכל פעם. אם אתה רוצה לעדכן אותו על ידי שתי, אתה יכול לעשות לי תוספת שווה 2. ROB אודן: האם ראית בתוספת שווה בהרצאה עדיין? קהל: [לא ברור]. אליסון: זה ביעילות אותו דבר כמו שאני שווה אני ועוד 2. כך שזה הולך לקחת את זה ו לעדכן אותו על ידי שתיים בכל פעם. בתוספת שווה רק משהו אנו קוראים סוכר תחבירי. ROB אודן: כן, אלה קיימים ל פחות או יותר כל מפעילי החשבון. פעמים אז אני שווה יכפיל את המספר. פער j שווה 3 הוא אותו כj שווה j חלקי 3. אליסון: או מינוס שווה 2 היית הפחה אני על ידי שני בכל פעם. ROB אודן: גם שווים mod. אתה לא ראית את מפעילים סיביים האופרטור, אבל תו שווה ואמפרסנד שווה, כל אלה קיימים. אליסון: אז הרבה פעמים, במיוחד עם הזוג הראשון שלכם בסטי P, אתה בטח הגדלה ידי אחד, אז אני פלוס פלוס, j פלוס פלוס כל הדברים שאתה הולך להיות בדרך כלל באמצעות. אבל זה מצב עדכון באופן מלא בשליטה שלך. אתה יכול לעדכן אותו על ידי כל מה שמרווחים או בכל הדרך שאתה מחליט. אולי אתה אפילו רוצה שזה יהיה מספר אקראי לפעמים. אבל כן, יש הרבה דברים שאתה יכול לעשות עם זה. אתה לא מוגבל לi פלוס פלוס. ROB אודן: רק כך אתה יודע שהוא קיים, שהוא גם קיים בצורה אחרת, בתוספת פלוס אני. אז אם אי פעם שאתה מחפש באינטרנט ובמקרה רואה בתוספת פלוס אני, פחות או יותר אומר את אותו הדבר. אליסון: מגניב. טוב? מדהים. וכך, בעוד לולאות. מאוד דומה. יש לך כמה מצב. הדבר העיקרי שיש לשים לב כאן הוא במקום שיש שלושה חלקים שונים כדי להגדיר, יש לנו אחד. רק יש לנו כמה מצב זה נבדק. ובאותו אופן, כל עוד המצב שמעריך לנכון, הקוד שלך הולך לרוץ. ואם זה שקר, זה יסתיים, מהלך על החלק הבא של התכנית שלך. אז זה סוג של like-- מה דוגמא טובה לבדיקה עבור חלק מהמצב נורמלי? גבריאל: בעוד אמיתי. אליסון: אתה יכול לעשות בזמן נכון. ובכן, 1 שווה ל 1. ROB אודן: אתה יכול לעשות while-- רק במקום להשתמש בלולאה, תמיד אתה יכול קוד ללולאה בתוך לולאה בזמן, אז אני גדול מ -0 או בזמן שאני פחות מ -10. אליסון: מדהים. ולאחר מכן יש לנו לעשות בזמן לולאות, ש הוא נהדר עבור אימות משתמש, שבו אתה רוצה לקבל משהו מ המשתמש שלך, לראות אם זה תקף, ולאחר מכן להמשיך משם. אז אחת מהדברים שצריכים לדעת הוא ב לעשות בזמן הוא שזה הולך לבצע, ואז זה יהיה מחדש לבצע אם תנאי זה מתקיים. אז כנראה הדרך הטובה ביותר לעשות זאת הוא רק כדי לראות דוגמא כאן. אז כמו שהזכרתי זה עתה, משתמשים אימות היא באמת useful-- או לעשות whiles באמת שימושי עם אימות משתמש. אז זה רק הולך מחדש תנחה כמה משתמשים עד שנכנסים למספר חיובי, אשר עשוי להיות שימושי עבור קבוצת P שלך השבוע. ולכן במקרה זה, כאשר אנו בתחילה להפעיל את התכנית, זה הולך להדפיס להזין מספר חיובי. זה הולך לקבל קצת קלט מהמשתמש, ואז זה הולך לבדוק קלט שנגד המצב כי אתה כבר נקבע לו. אז במקרה הזה זה הולך לבדוק. זה הולך לומר, אישור, הוא הקלט שלילי שלנו, או שזה 0 או שלילי, אשר יהיה לא חוקי. אז זה יהיה מחדש הנחיה. שאלה? קהל: האם זה אותו אז כ בעוד לולאה אם ​​אתה רק העתקת את קוד ש ולשים אותו [לא ברור] ואילו לולאה? אליסון: אז השאלה הייתה היית זה יהיה אותו הדבר כמו רק בעוד לולאה אם ​​היינו רק להעתיק ואילו לולאה מעל. אז במקרה הזה, ואילו הלולאה שלך היא הולך לבדוק את התנאי ראשון. אז במקרה הזה, אם אנסה לכתוב רק כלולאה בזמן, זה הייתי אומר, ו קלט הוא פחות מאחוז אחד. אבל אין לנו קלט עבורו. קהל: אם אתה [לא ברור] בעוד לולאה כולל את הקוד הזה, אבל אז אתה התמודד הקוד מעל הלולאה בזמן גם. אתה פשוט היה הקוד הזה [לא ברור] ואילו לולאה. אליסון: זה יהיה אותו הדבר, כן. אז אתה יכול פשוט write-- במקום שיש כן do--. גבריאל: אבל זה יותר אלגנטי. אליסון: כן, זה יותר אלגנטי. אתה יכול להיכנס לעיצוב ומה לא, אבל כן, אתה יכול לגמרי לעשות את זה. יש עוד שאלות? אישור, מגניב. אז יש לנו דיברתי הרבה על תנאים עם כל לולאות אלה שיש לנו, ולכן אנחנו בעצם נכנסים תנאים בביטויים בוליאני. שוב, אתה משתמש אלה ב- C, כל כך פשוט סוג של מעבר מממשק גרפי יותר לקידוד למעשה. מגניב, כל כך גדול אחד, אם. בעצם רק מאפשר לנו להציג קצת היגיון לתכנית ובדיקה שלנו תנאי sys. אז במקרה הזה, על אישור, הוא n גדול מ -0? כן זה הוא, כך שתוכל לבצע את זה. זה פשוט בודק כמה מצב שיש לך נקבע, שאני חושב שכולנו נוח עם בדיקת תנאים. מגניב. אז אם עוד אחד האחר שלך, אתה יכול להגיד על אישור, אם זה נכון, לעשות דבר ראשון זה. אחרת אני רוצה ש ברירת מחדל ולעשות משהו אחר. כמו במקרה זה, או שאתה בוחר מספר חיובי או מספר שלילי. יש לך רק שתי אפשרויות. אתה צריך את זה כדי לבצע ללא קשר של מה תשומות המשתמש שלך. אז אתה יכול לומר גם, זה גדול מ -0? מגניב. הדפסת מספר חיובי. אם זה לא, להדפיס שלילי. כולם טובים? ואז דבר אחד הוא להכיר הוא שאם אם התנאי מתקיים, אחר לעולם לא גם לבצע. רק אחד מהם יהיה לבצע בכל פעם. אז זה את סחר. אתה לא מקבל שיש את שניהם. גם לך יש את התנאי הראשון. או שיש לך אם או אחר, לא את שניהם. אז מה שיכול לגרום לדברים עוד יותר מסובך, כי אתה יכול לעשות אם, זה דבר אחר, ולאחר מכן אחר. אז במקרה הזה, אנחנו יש שלושה תנאים. ושוב, רק אחד מהם הוא הולך בסופו שהוצא להורג. אז ייתכן שאתה תוהה גם, מה אם אתה יש משהו ש יכול לענות על שני אלה. אולי כל מה שאתה מזין עונה על שני התנאים לאם ואחר אם. דבר היחיד שהולך לרוץ אליסון: ברגע שהוא מוצא משהו שהם עומדים בתנאים של מעריך לנכון, זה מה ש זה הולך לרוץ ולא שום דבר אחר. אז אם היה לך הוא מספר זה בין 0 ו- 5 עבור הראשון שלך, או שמספר זה בין 3 ו -5 לאחרים אם חלק, ואתה קלט את number-- אמרתי 0 ו -5 and-- 4. זה הולך להכות את הראשון. זה הולך לומר על אישור, זה מספר הוא בין 0 ל 5. ביצוע ולהשאיר. זה לעולם לא פגע כי אפשרות שנייה. מגניב? מדהים. אישור יש לנו גם אמירות מתג אם אתה רוצה לקבל אפילו more-- או מצטער, המתג הוא הבא. אני מקדים את המאוחר כאן. שוב, מרובה אם בלוקים שבו כמו שאמרתי זה עתה הוא ברגע שאתה מוצא את מצב שפגש ואם אחר אם אחר, זה משאיר. אם אתה צריך לבדוק דברים מרובים, אתה הולך רוצה להשתמש כי זה זה יהיה לבדוק כל זמן כאן. אז זה יפעל באמצעות ואם זה גדול או שווה ל -90, זה הולך להדפיס את זה. וזה יפעל דרך ו לבדוק כל אחד ואחד מהם. קהל: אז זה יהיה יותר מרכבה מ [לא ברור]. האם זה יהיה כמו [לא ברור]? אליסון: השאלה היא האם זה יהיה מרכבה או זה עושה את מה שאתה רוצה. זה באמת תלוי במה אתה רוצה מהתכנית שלך. קהל: אני מתכוון כמו אם אתה שם 90 ב. אליסון: אם תשים 90-- קהל: [לא ברור]. גבריאל: אתה הולך לקבל שני דברים. אליסון: אתה הולך לקבל שני דברים. כן, שתי. ROB אודן: שני? אליסון: מס ' ROB אודן: ארבעה. אם תשים 90, זה הולך לומר לך יש, יש לך B, יש לך C, יש לך ד ' קהל: [לא ברור]. אליסון: נכון. אז תלוי מה אתה רוצה מן התכנית שאתה. לפעמים אתה צריך לבדוק דברים רבים. אתה תקבל הרבה יותר עמוק לתוך מה ש עיצוב טוב הוא כמו שאתה הולך קדימה. הדבר החשוב ל מבין הוא שזה יבדוק את כל ארבעת התנאים כאן. לעומת זאת, אם זה היה אם אחר אם אחר אם אחר, זה היה מכה שהמקרה הראשון, זה יהיה להדפיס לך ולעשות. ROB אודן: גם אם אנחנו החליט לשנות את זה לאם וגדול או שווה ל -90, אם וגדול או שווה ל 80, וקטן או שווה ל- 89, אם n גדול או שווה ל -70, וn קטן או שווה ל 79, כך שיהיה נכון. שיעשה מה שאנחנו רוצים, אבל זה עדיין בודק כל זה. אז אילו בתרחיש הראשון, אם להיכנס 90 עם רק אם אם אם אחר אחר, ואנו נכנסים 90, ולאחר מכן זה הולך לתקן. זה יהיה לבדוק ראשון אחד, הדפסה שיש לך, דלג על הכל, כי זה כבר מצא אחד שעובד. כל המקרים הם סותרים המבוסס על אם אם אם אחר אחר. אז זה יהיה לבצע את ראשון אם, אז עושה את זה. זה ילך עד הסוף. לעומת זאת, אם נשנה זה להיות מה שהיה אומר עם פחות או שווה ל 89. זה הולך לבדוק את הראשון. זה יהיה להדפיס. זה יהיה לבדוק את השני. זה לא הולך להדפיס. בדוק את שליש. לא הולך להדפיס. בדוק את הרביעית. עכשיו הולך להדפיס. אז במקרה ש, אחר אם גרסה, שכן במקרים אלה אינם יכול להתקיים, זה שימוש טוב יותר אם אחר אם אם אחר, בגלל שהוא הולך להיות פחות בדיקות של התנאים יותר מגרסה זו. אליסון: מדהים. אז עוד דבר שאנחנו יכולים לעשות הוא הצהרות מתג. בעיקרון הצהרה בורר לוקח בחלק משתנה, במקרה הזה זה n, ו קובע שמקרה לבצע. אז זה גם אחד שבו מקרים שלך צריך להיות סוג של סותרים. אז במקרה הזה, אם אנחנו אנחנו מקבלים אחד, זה הולך להתאים כל מה ש variable-- מה הערך של n הוא אחד ממקרים אלה, כך 1, 2, או 3, ולהדפיס את הקו המקביל. ואז אם אתה שם לב כאן, יש לנו גם ברירת מחדל, שבו אתה יכול בחושב כמוך אחר. אז אם אתה בוחר כל מספר אחר מלבד 1, 2, ו -3 במקרה זה זה רק הולך להדפיס חוקי. החלטה מתי להשתמש IFS לעומת אם elses לעומת מתגים הולך להיות משהו שאתם יהיו לראות את העיצוב חכם כמו שאתה מתחיל בכתיבה תוכניות מורכבות יותר, ו אין כללים קשים ומהר מתי להשתמש בם. זה באמת תלוי בהקשר שלך. ROB אודן: ולא רק לזרוק אותו שם שכן הוא חלק נוח יותר. מתגים, הם נוטים be-- כך אתה מוגבל במספר הדרכים יכול להשתמש בם, כי IFS, המצב יכול להיות די כל דבר שאתה רוצה. עם מתגי מקרים צריך להיות מספרים, או מבחינה טכנית הם יכולים להיות תווים, אבל תווים, כפי שנראה, הם רק מספרים. אז הם צריכים להיות מספרים, אבל מתגים הם באמת יעילים יותר מאשר אם אחר אם אחר אם, משום שגם לוקח הדוגמא before-- גם, דוגמא הכיתה נראית טובה. ובכן בואו נגיד כאן, אנחנו במקום לעשות כאם אחר אם זה אם תרחיש אחר. אז אם n שווה שווה 1, להדפיס שבחרת מספר נמוך. אם אחר אם n שווה שווה 2, שבחרת מספר בינוני. אחר אם שווים שווים 3, גבוה. אחר לא חוקי. אז בואו נגיד שזה היה התרחיש שלנו. אז בואו נגיד שאנחנו נכנסים 4, ולכן אנו צופים לא חוקיים. כך שאם אחר אם אחר אם גישה היא ללכת לעבודה היא בודק את התנאי הראשון. שאין הוא מרוצה. אז אנחנו בודקים את התנאי השני. שאין הוא מרוצה. בדוק את מצבו השלישי. לא מרוצה. אז אנחנו הולכים לעוד ולהדפיס לא חוקיים. דרך עבודות המתג זה הידור את למה שאנחנו הולכים לקרוא שולחן קפיצה. בן הרעיון המרכזי כי כאשר אתם נכנסים 4, זה מייד יכול ללכת לברירת המחדל. היא לא צריכה לבדוק בבוקר אני מקרה 1? לא ולא זה לא זה. מקרה 2? לא ולא. מקרה 3? לא ולא. ברירת מחדל. אישור, זה חייב להיות מקום שבו רוצה, ולאחר מכן לבצע את זה. לא, זה מייד קופץ לברירת המחדל. או לי להזין 2, זה מייד הולך ל2 ללא צורך לעבור מקרה 1. אז ככה, באופן מציאותי בימינו זה לא שהרבה משיפור ביעילות. בדרך כלל מחשבים הם די מהר, וזה לא כל כך גדול. אבל זה המקרה ש מתגים מהירים יותר. אם אתה באמת מנסה כדי לייעל, להשתמש במתג. אליסון: מגניב. ולאחר מכן יש לנו מפעיל משולש. אז אני יודע שציינתי קודם לכן מילת סוכר תחבירי. אז זה רק דברים שגורמים לי הקוד שלך הרבה יותר תמציתי. אז זה אחד מאותם מקרים. אז מפעיל משולש הוא סימן שאלה מעי גס כפי שאנו רואים במחרוזת הקו של שווה n גדול מ 100 סימן שאלה נמוך גבוה מעי גס. אז בעצם איך זה עובד הוא שזה n הגדול מ 100 הוא מצב. אז אני חושב שזה יכול להיות הגיוני. זה כמו לשאול שאלה. זה אומר אה, הוא n גדול מ 100. מי יודע? ואם זה מעריך ל נכון, זה הולך לתת לך הדבר הראשון זה מופיע שם, שהוא גבוה. אחרת זה הולך לתת לך נמוך. כך שזה רק ממש פשוט ו דרך יעילה לעשות כמו אם אחר. זה כל מה שזה. ואם היינו כותב את זה כאם אחר מותנה, זה יהיה אם n הוא גדול יותר מ -100, תשואה גבוהה. אחר, לחזור נמוך. זה רק הרבה יותר דרך תמציתית של כתיבתו. ROB אודן: אז דוגמא זו בפרט הוא בכל פעם שאתה עושה משהו כמו זה, זה הדפוס שבו אני משתמש משולש לעתים קרובות מאוד. אז אנחנו לא דיברנו על ההיקף עדיין, אבל אני שונא לראות את הנקודה-פסיק מחרוזת s. אם n גדול מ 100, של שווה גבוה. אחר, של שווה נמוך. אז דפוס ש, חמש שורות אלה קוד, פשוטו כמשמעו, 100 של הפעם% ניתן להעביר לתוך מה ש היה שם למעלה עם משולש. אז המשולש, שורה אחת של קוד. אם אחר, חמש. זו דוגמא אני מצביע את כל זמן. זה היית מקום נהדר למפעיל משולש. זה כל כך נקי. אבל אנשים נוטים לא להשתמש בו. אליסון: קח את זה משם גייב. גבריאל: אז עכשיו אתם כל למד בהרצאת השבוע כל מה שב מחשב הוא בינארי, נכון? בדיוק כמו המנורות כאן. אתה יכול להיות או להפעיל ולכבות. ועל ידי הכול, אני מתכוון ממש הכל. מספרים מסוימים, ותווים, ומחרוזות, ואפילו את הקוד שאתה כותב כש הוא מקבל הידור למכונה קוד ודברים כאלה, אז זה הכל מסתכם 0 ו 1 '. וכך, כאשר יש לנו עסק עם מספרים שלמים, ש זה משהו שמאוד מבחינה טכנית פשוט, אנחנו צריכים להיות מסוגלים לעשות את הדברים כמו שמוסיף אותם, שהוא כנראה אחד הדברים הפשוטים ביותר אתה יכול לעשות את שני מספרים שלמים, נכון? אז חיבור וחיסור עובד בדיוק כמו שזה עובד בשיטה עשרונית, מלבד כאן זה בינארי, נכון? אז זה בבסיס שני. אז להוסיף 1 פלוס 1. זה נותן לי 0, ו -1 נושאת מעל. ורק להמשיך ולעשות זאת, אז עכשיו עולה השאלה מעניינת יותר. אנחנו יודעים איך לייצג את כל מספרים שלמים וחיוביים במחשב, אבל בואו נעשה את זה תרגיל. העמד פנים שכולכם נמצאים בשנת 1960 או משהו מנסה ליצור מחשב, ואתה צריך לבוא מ דרך של אחסון מינוס 1, לדוגמא, או בניכוי כל שלם לצורך העניין. איך אתה הייתי עושה את זה? יש לך רעיונות? פשוט לזרוק כל דבר עליי. כן? קהל: [לא ברור] לייעד מיוחד אם [לא ברור] שלך. גבריאל: אתה יכול לייעד קצת מיוחד, שיהיה 0 או 1. נניח שאחד אם זה חיובי ו 0 אם זה שלילי. ולאחר מכן את שאר קצת הוא רק כדי לאחסן את המספר. מגניב. אז זה רעיון טוב מאוד. יש לנו, אני לא יודע, 200. ואם קצת הראשון הוא מופעל, אז זה בתוספת 200. אם הוא כבוי, זה מינוס 200. מגניב. יש רק אחד קטן בעיה עם זה, היא, אם אנחנו מנסים לסכם את הדברים. אז דמיין שיש לנו 11111 כאן, ו אנחנו מסכמים את זה עם 00100 מה. אם שני אלה הם חיוביים, זה בסדר. אבל אז אם אחד מ שלהם הוא שלילי, כמו נניח שזה קצת כאן הוא זה שאחראי for-- אני הולך לעשות separate-- אז זה אחד אומר שמספר זה כאן הוא חיובי. אחד זה אומר שזה מספר כאן הוא שלילי, נכון? אבל אז כשאתה הולך לסכם, ש צריך אם הצהרה אומר הו, אם זה הוא 0, אז הסכום שלי יהיה משהו שונה, נכון? אז יש מעט יותר דרך חכמה לעשות ש, אשר נקרא של שתיים משלימים. אז בעצם מה שאנחנו לעשות הוא אנו מגדירים מינוס 1 להיות הדבר שאם נוסיף עד 1 נותן לנו 0. תן לי לחזור על זה. אז בואו נגיד שזה כאן הוא 1. מהו הדבר ש באופן טבעי במספרים שלמים וחיוביים בנוסף לכל זה נותן לנו 0? מה אם אנסה להוסיף אותו למספר הזה? אנחנו הולכים have-- אוקיי, אז בואו נוסיף. אנחנו הולכים יש לי 1 פלוס 1 הוא 0, ולאחר מכן היא מבצעת מעל. ואז אנחנו הולכים לקבל 0 שוב. אני מקבל מבולבל. ואתה הולך לקבל 0 ו 0 ו 0 ו 0 ו -0 ו -0. הרבה 0 של. לכל אחרון, אנחנו לא הולך להיות מסוגל לבצע את זה על, כי נניח שרק מתעסקים עם בית אחד, כך שרק 8 סיביות. אז מה המחשב עושה כברירת מחדל רק שוכח ש[ לא ברור], בסדר? אז זה מה שנקרא של שתיים משלימים. אנחנו פשוט להגדיר מינוס 1 להיות דבר כאן שאם אתה מוסיף שעד 1 היה נותן לך 0. וזה די מגניב כי אנחנו לא באמת צריך סוף ליישום סוג של סכום שונה תלוי אם זה שלילי או מספר חיובי. האם זה הגיוני? דבר כל כך שאנחנו עושים כאן על מנת להמיר בין חיובי ושלילי המספר שלם אז להעיף את כל מה ש, ולאחר מכן אנו מוסיפים 1 למספר ש. אם אתה מנסה לעשות את זה בעצמך על פיסת נייר, אתה הולך לראות את זה הגיוני. אבל אם אני לוקח את המספר הזה כאן, זה חמש. אז אם אני מעיף את כל מה ש כאן, כל כך 1, 1, 1, 1, 1. הפוך, הפוך, להעיף. ואז אני מוסיף 1 לזה. אני הולך יש לי בדיוק מינוס 5. בסדר? זה סוג של היגיון, כי אם אתה מנסה לסכם את זה עם המספר שהיו לנו קודם, ש was-- בואו להפוך את זה שוב. זה היה 101 והרבה 0 של. אם תנסה להוסיף אלה שני מספרים יחד, אתה הולך להיות בדיוק 0. אישור. שאלות? קהל: [לא ברור] גבריאל: מה זאת אומרת? קהל: שלילי ל חיובי [לא ברור]. גבריאל: לא, אתה להעיף ואתה מוסיף 1 תמיד. כן. אוקיי, אז דמויות גם מקודדות קבצים בינאריים. יש לנו שולחן ASCII, כפי שאתה גם ראה בהרצאה, נכון? אז זה בעצם מיפוי של דברים. וכאן אני לא יכול להדגיש מספיק כי למחשב, ו -65 ממש אותו הדבר. אז אם אני כותב משהו כמו char ג שווה, אני יכול באותו הזמן פשוט לכתוב 65 כאן, וזה יהיה בדיוק אותו הדבר, בסדר? אין הבדל כלשהו. בדרך כלל אנחנו נוטים לשים דמויות במשתנים מהסוג. תו, לא בגלל שהם במהות עשיתי בשביל זה, אבל בגלל ש אמנה אנושית. אבל אתה יכול פשוט להתמודד עם מספרים שלמים במקום משתנים מהסוג char, ואתה תהיה בסדר. ההבדל בפועל רק בין ג char ואני int הוא שיש int ארבעה בתים ברוב מערכות, ואילו לדמות יש בית אחד. שבמהותם אותו דבר במונחים של נתונים. אז מה יודפס כאן? כאן אנחנו מדפיסים ספרה באמצעות printf עם פלוס 1, ובדיוק כמו מספרים שלמים, אפשר לסכם תווים, כך ניתן גם סיכמו תווים. אז זה בדיוק 65. אז יש הולך להיות 66, וכאן יש לנו 65 בתוספת קטנה גדול מינוס, אשר יהיה, אני לא ממש יודע. אבל זה יהיה בדיוק את הפער בין האותיות גדולות ואותיות הקטנות יותר, כך אנחנו הולכים לקבל קטנים, נכון? כן. אז זה הולך להדפיס אופי וזה בדיוק זה. טוב? שאלות? כאן יש לנו חבורה של שונה סוגים עבור משתנים מספריים. אנחנו כבר מדברים על int. Float הוא רק דרך to-- זה באמת מצחיק, כי כאשר נודע לי לראשונה לתכנת חזרה היום עם Python, התכנית הראשונה ש ניסיתי לכתוב, ראיתי שיש סוג המכונה ובסוג המכונה לצוף. והמצופים לכל מספרים הממשיים. אז שאלתי למה צריך פעם להשתמש int אז? כי אם אני יכול להשתמש בכל מספרים אמיתיים עם מצוף, הייתי פשוט להפסיק את השימוש בints, נכון? כיוון שמספרים אמיתיים הם הרבה כמו יותר גנרי. מתברר כי מדובר ב לא כך דבר במחשבים משום שבמהותם דברים שונים. אז מספרים שלמים וצף, פעולות שאתה עושה להם שונים במהותם, כי אופן שבו הם מאוחסנים, בסדר? אנחנו הולכים לדבר קצת קצת יותר על זה תוך שני. אז כפול הוא פשוט לצוף גדול יותר. בדרך כלל ברוב המערכות, לצוף הוא ארבעה בתים, בדיוק כמו int. וכפול שמונה בתים. ארוך ארוך הוא למעשה רק סמל שאתה לצרף לסוג כמו int. אתה אומר ארוך ארוך int כמו זה. x int הארוך הארוך כדי לעשות את זה יותר. ולכן ברוב המערכות, זה ייתן לי שמונה בתים במקום ארבעה הרגילים. ואתה באמת יכול להוריד ב, כך שהוא יכול רק לומר ארוך ארוך, וזה גם פועל, בסדר? גם אתה יכול לעשות דברים אחרים כמו int חתום, או שוב רק שאינו חתום יעבוד גם. וזה יגרום x להיות משתנה כמו כל דבר הוא חיובי, כך שאתה לא באמת יכול להיות השפעות שלילית מספרים בדרך שראינו כאן. אז הבא נפלא נקודה צפה ודיוק. זה אחד הסיבות למה אתה רוצה להשתמש ints במקום צף, כי ints הם 100% מדויקים, נכון? זה בדיוק מספר ש. לנקודות צפות, אם אתה אומרים תשובה שווה 1 על 10-- אני במקרה יש לי זה מדויק תכנית כאן, float.c. שמדפיס עד 20 ספרות אחרי נקודה עשרוניות. 1 מחולק ב -10, וש בדרך כלל הוא 0.1, נכון? אבל כאן, אם אנחנו עושים לצוף ואז להפעיל אותו, אנחנו רואים שזה לא בדיוק 0.1. זה 0.149 משהו. ומדוע זה כך? מכיוון שאתה לא באמת יכול לייצג כל מספר אמיתי אפשרי יחיד לזכרו בגלל שיש uncountably רבים מהם. אז אנחנו מבחינה טכנית רק יכולים מייצג כמות סופית שלהם עם כמות סופית של נתונים. אבל זה באמת מעניין. עכשיו זה מעלה את שאלה של איך היית ללכת על ייצוג זה עם חתיכות, נכון? אז איך צף מאוחסנים? עם מספרים שלמים שזה היה קל. אבל עם צף אתה רוצה על מנת למקסם את הטווח, ואתה רוצה להיות מסוגל לייצג מספרים עצומים ומספרים מאוד קטנים כמו 0.000001 באותו הזמן. אז שוב, אותו משחק. האם יש למישהו מושג איך אנחנו יכולים ללכת על הייצוג לצוף בזיכרון? פשוט לזרוק שום דבר. כן, בבקשה. קהל: [לא ברור] כ אם זה היה שני ints ואחד להיות [לא ברור] וישות אחת כל מה שאחרי הנקודה העשרונית. גבריאל: בסדר, מגניב. אז שני מספרים שלמים שונים. אתה יכול לקבל 12.45, כך שזה 12 ו -45. נחמד. מה לפני שיתנה לך הולך להגיד? אותו הדבר? כן? קהל: [לא ברור] בסימון שבו אתה נפרד הבסיס. גבריאל: סימון מדעי, כן זה בדרך כלל מה שקורה. אז זה מה שנקרא מנטיסה. זה מה שהוא למעשה מספר, ולאחר מכן המעריך הוא בדיוק איפה הפסיק, נכון? אז זה הולך להיות משהו 5 פעמים של הטופס 1, 2, 3, 4, 10 ל4 מינוס. רק עכשיו הבנתי that-- כן, בדיוק. ואז 10 זה ל4 מינוס הוא הולך להגדיר היכן הפסיק, בסדר? בברזיל אנחנו משתמשים בפסיק. כאן אתם תשתמשו בנקודה. אז נקודה. וזה מגניב, כי אז אתה יכול להתמקד הרבה ביטים שלך על הבחור הזה כאן, שבֶׁבֶר, ואז זה הולך להיות הדיוק שלך בפועל. ואתה יכול לעשות את זה גם בעשרוני או במערכת מבוססת בינארי. יש שונים דרכים ליישום זה. שאלות? כן? קהל: כמה מקומות אחרי הנקודה העשרונית [לא ברור]? גבריאל: זאת שאלה מסובכת, כי זה אף פעם לא באמת 100% מדויק, כי כפי שאתה רואה כאן, ל כמה מספריו הוא 100% מדויקים. אני מאמין שאם אנחנו שמים 0.5 כאן, זה הולך להיות 100% מדויקים. זה הולך להיות .500000. אז במקרה זה, זה מושלם. אבל במקרים אחרים, זה הרבה פחות מושלם. מניסיוני, כמו עד ארבעה, חמש ספרות אחרי נקודה עשרונית היא די מדויקת. אם אתה משתמש בכפול, זה הולך להיות הרבה יותר מדויק מזה, בסדר? ROB אודן: אז רק כדי לזרוק כמה הקשר יותר בצף, אני אף פעם לא זוכר 100% איך מפרט של צף באמת עובד, אבל אני עושה לך תמיד אזכור שצף מתחיל לקבל מבולגן. אז הרעיון הוא שכאשר אתה מקבל באמת, באמת מספרים גדולים או באמת, באמת מספרים קטנים, אנחנו מתחילים מקבל יותר ויותר גרוע בהבחנה בין שני צף קרוב. אז איך אני רוצה לחשוב על זה עם חוסר דיוק נקודה צפה, יש שני צף ש אם אני מנסה להגדיר אותם ב- C, למרות העובדה ש הם מספרים שונים, הם הולכים להיות יתפרש כאותו המספר, כי אנחנו לא יכולים לאחסן אותם בצורה שונה. אנחנו צריכים להשתמש באותו סיביות. ואז, כשנגיע ל באמת, באמת מספרים גדולים, מדבר כמו 10 עד 300 או משהו, זה בשלב זה כי 10 עד 300 או 5 פעמים 10 עד 300 לא יכול להיות מובחן מ 7 פעמים 10 עד 300. אז זה הבדל די גדול בין שני המספרים. אבל אז כשאתה מגיע לדברים הטווח נורמלים, אתם נוטים להיות די טוב בהבחנה. ואז כשאתה מגיע ממש קטן, אתה גם מקבל די רע שוב. אז כמו חבורה של כל 0.0000, הוא מקבל די רע. גבריאל: כן, אז הערה מהירה. אף פעם לא לעשות את זה. לעולם אל תנסה להשוות שלו צפה בבאמצעות שווים שווים, כי גם אם הם כמעט אותו דבר, כמעט אותו הדבר זה לא אותו הדבר. אז מה אתה עושה בדרך כלל הוא מחסר שלהם, לקחת את הערך המוחלט של ש, ולראות אם זה קטן יותר 0.0001 או משהו כזה, בסדר? ומגניב. אני מכיר הרבה אנשים שיש לי קצת רקע ב- Java, במיוחד אלה שעשו מדעי מחשב AP, נכון? וJava היא שפה שמבוסס בעיקר על C, יש לה כמה הבדלים גדולים מאוד. אבל ללולאות, ואילו, ודברים כאלה כי, הם כולם באותו תחביר. יש לי כמה תוכניות לכאן כדי להראות את זה. כך למשל, עולם שלום פשוט. זה שלום עולם ב- C, שבו אתה בחורים בהחלט מכירים, וזה וזה אחד הוא ב- Java. אז ב- Java יש לנו זה מעמד ציבורי, שלום עולם, ומבוטל ציבור סטטי ארגומנטים עיקריים, ומחרוזת. Args המחרוזת הולך להופיע בC זמן קצר מאוד. אבל בואו לא נלך לשם עדיין. כרגע יש לנו פה תהום, מה שאומר ש עיקרי שלא לקחת שום טענות. ולאחר מכן יש לנו System.out.println, וזה סוג של המקבילה לprintf. כאן אנחנו לא באמת צריכים את הקו הנטוי n כי LN ההדפסה עושה את זה בשבילך. זה מצרף הקו הנטוי n בסוף השורה. אבל אם אתה הולך ל משהו כמו ל, ניתן לראות כי הם פחות או יותר את אותו הדבר. אז אתחול, ו מצב, והעדכון is-- התגעגעתי חלל here-- הם פחות או יותר אותו הדבר, פרט לג'אווה יש ככמה דברים יותר ברמה גבוהה. כאן אנו יכולים לעשות ובנוסף אני ו באופן אוטומטי Java יהיה להפוך את זה אני כאן, שהוא מספר שלם, למחרוזת, ולאחר מכן להוסיף את שתי מחרוזות ביחד. כאן ב- C שאנחנו צריכים לעשות ו% ד. הקו כאן, ל נראה בדיוק אותו הדבר. ואם אנחנו מסתכלים על אם, IFS גם נראה בדיוק אותו הדבר, נכון? אם כן, ההבדלים הגדולים האמיתיים הם באותם דברים שאתה רואה כאן. ציבור סטטי, חלל, ו אז מעמד ציבורי אם. אז Java יש את מה שהוא בשם מכונה וירטואלית. והוא מבוסס במידה רבה על מה ש נקרא תכנות מונחה עצמים, וזה מאוד, מאוד נפוץ הפרדיגמה לתכנות בימינו. ודבר זה בכיתה הוא מה שאתה רואה, משהו מנטיית אובייקט, הוא ליצור מעמד ואז אתה יכול להפיק חפצים מאותו הסוג. אנחנו לא הולכים לדבר יותר מדי על זה יותר מדי בCS50, אבל זה בהחלט משהו ממש מגניב, במיוחד אם אתה רוצה להיכנס ל התפתחות אינטרנט מתוחכמת יותר בסוף הקורס, כמו להגיש פרויקט הגמר שלך וכמה מסגרות ודברים נחמדים. אז בעצם הרעיון הוא שאתה לא רוצה לחזור ליישם משהו, כך אתה יוצר משהו שהוא מאוד גנרי, כמו הצורה, ואז אתה יוצר צורות שונות מזה, ולאחר מכן מכל אחד מ הצורות האלה, שאתה יוצר כמה צורות ספציפיות יותר בשלוש ממדים או משהו כזה. ויש להם היררכיה זו הם יורש מהאחרים, ולכן כל הפונקציות ואת כל המשתנים ש הצורה הגדולה כאן יש, כל אלה הולכים להיות, וכל אלה הם הולך להיות, וכן הלאה וכן הלאה. אז זה הרעיון הבסיסי. אין C ש, אבל C ++ האם יש סוג כזה של תכונה. ו- Java מושפע מאוד בזכות אוריינטצית אובייקט, אז זו הסיבה שאתה רואה כיתה כאן כל הזמן. וזה הדבר האחר מכונה זו Java וירטואלית. אז זה, אני חושב, הוא רעיון מאוד חכם. אז מה אנשים ש java המציא עשה הוא הם לא רוצים לקמפל את הקוד שלהם פעמיים אם הם היו צריכים להעביר אותו ב- Windows, או Mac או Linux, אז מה שהם עושים הוא באמת ובתמים שמנוהלים משהו כמו המכשיר, אבל אתה לא באמת רואה את זה קורה. אז הם רצים על מכונה וירטואלית בתוך המחשב שלך, ש הוא בעצם כמו מערכת הפעלה מיני. והפעלה ש המטרה של המערכת בחיים רק לרוץ מה שנקרא קוד בתים. אז במקום ב- C, כפי שהיינו לקמפל זה עושה אם, ולאחר מכן להפעיל ./if. שכחתי הלוכסן האחורי ב. ב- Java, היית עושה ראשון Java C להדר אותו, if.c. זה לא java הנקודה של C. זה. ואז אתה צריך להפעיל לא ./. אתה מקבל קובץ חדש if.class, אבל אתה לא יכול באמת לרוץ if.class עכשיו רק כמו שעשינו לפני. זה אינו קובץ הפעלה. אתה צריך לרוץ. אתה צריך להאכיל אותו ל תכנית בשם Java, ותכנית שהמכונה הווירטואלית, ואז אתה עושה if.class, או אם. כן. ואז זה עובד. אישור אז זה סוג של מכונה וירטואלית קורה. אין C ש, כך שאם הייתי לשים את התכנית במחשב של Windows, זה לא יעבוד בג ב- Java שהיא עושה. שאלות? מגניב. זה אם לחלק העל להיום.