1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [מוסיקה מתנגנת] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> דוד י מלאן: בסדר, זה CS50. 5 00:00:16,240 --> 00:00:18,010 וזה שבוע. 6 00:00:18,010 --> 00:00:22,050 אז לזכור כי בפעם האחרונה בשבוע אפס, התמקדנו חשיבה חישובית. 7 00:00:22,050 --> 00:00:25,440 ואנחנו מעבר ממעגל Scratch, תכנות גרפי 8 00:00:25,440 --> 00:00:27,360 שפה מהחברים שלנו במעבדת המדיה של MIT. 9 00:00:27,360 --> 00:00:31,730 >> ועם שריטות, עשינו לחקור רעיונות כמו פונקציות, ותנאים, 10 00:00:31,730 --> 00:00:35,210 ולולאות, ומשתנה, ואפילו אירועים, וחוטים ועוד. 11 00:00:35,210 --> 00:00:37,880 והיום, אנחנו הולכים להמשיך להשתמש רעיונות אלה, 12 00:00:37,880 --> 00:00:40,630 ובאמת לקחת אותם כמובן מאליו, אבל לתרגם אותם 13 00:00:40,630 --> 00:00:44,220 לשפה אחרת המכונה עכשיו ג, C היא שפה מסורתית יותר. 14 00:00:44,220 --> 00:00:46,020 זה רמה נמוכה שפה, אם תרצה. 15 00:00:46,020 --> 00:00:47,300 >> זה גרידא טקסטואלי. 16 00:00:47,300 --> 00:00:49,910 וכך במבט ראשון, זה הכל הולך נראה די נסתר 17 00:00:49,910 --> 00:00:51,430 אם אף פעם לא מתוכן לפני. 18 00:00:51,430 --> 00:00:53,530 אנו מתכוונים לקיים חצי נקודות וסוגריים, 19 00:00:53,530 --> 00:00:55,150 ו סוגריים מסולסלים, ועוד. 20 00:00:55,150 --> 00:00:57,240 אבל להבין כי גם למרות שהתחביר 21 00:00:57,240 --> 00:01:00,600 עומד להיראות קצת לא מוכר כדי שרובכם, לראות מעבר לכך. 22 00:01:00,600 --> 00:01:03,220 ולנסות לראות את הרעיונות כי הם, אכן, מוכרים, 23 00:01:03,220 --> 00:01:06,750 כי כאן בשבוע אחד מה נתחיל לעשות הוא להשוות, 24 00:01:06,750 --> 00:01:08,980 בתחילה, גרד לעומת ג 25 00:01:08,980 --> 00:01:12,350 >> כך, למשל, לזכור כי כאשר אנו יישמתי את הראשון של התוכניות שלנו 26 00:01:12,350 --> 00:01:16,220 הפעם האחרונה, היו לנו בלוק שנראה משהו קטן כמו זה- כאשר 27 00:01:16,220 --> 00:01:19,990 דגל ירוק נקש, ולאחר מכן היה לנו אחד או יותר חתיכות הפאזל מתחתיה, 28 00:01:19,990 --> 00:01:22,150 במקרה זה, אומר, hello world. 29 00:01:22,150 --> 00:01:24,870 אז, אכן, ב Scratch, כאשר אני לוחץ כי דגל ירוק 30 00:01:24,870 --> 00:01:27,390 כדי להפעיל את התוכנית שלי, כך לדבר, אלה הם 31 00:01:27,390 --> 00:01:29,520 אבני כי מוצאים להורג, או לרוץ. 32 00:01:29,520 --> 00:01:32,230 וגם, באופן ספציפי, Scratch אמר, שלום, עולם. 33 00:01:32,230 --> 00:01:35,377 >> עכשיו, יכולתי ציינתי מילים שונות כאן. 34 00:01:35,377 --> 00:01:37,960 אבל נראה כי, אכן, רב של blocks-- אלה ואכן, 35 00:01:37,960 --> 00:01:41,880 ב- C רב functions-- יכול להיות parametrized או מותאם אישית 36 00:01:41,880 --> 00:01:43,150 לעשות דברים שונים. 37 00:01:43,150 --> 00:01:45,520 למעשה, ב- C אם אנחנו רוצה להמיר, עכשיו, 38 00:01:45,520 --> 00:01:47,567 תוכנית Scratch זה לשפה אחרת זה, 39 00:01:47,567 --> 00:01:49,650 אנחנו הולכים לכתוב משהו קטן כזה. 40 00:01:49,650 --> 00:01:52,540 >> אמנם, יש כמה מוכר התחביר שם ככל הנראה, int, 41 00:01:52,540 --> 00:01:54,380 סוגריים, ומבוטל. 42 00:01:54,380 --> 00:01:57,740 אבל printf-- למרות שהיית חושב שזה יהיה רק ​​הדפסה. 43 00:01:57,740 --> 00:02:00,120 אבל הדפסה אומרת הדפסה מעוצב, כפי שאנו בקרוב לראות. 44 00:02:00,120 --> 00:02:02,140 זה יהיה ממש להדפיס למסך מה 45 00:02:02,140 --> 00:02:05,990 הוא בתוך סוגריים אלה, אשר כמובן שבמקרה זה, hello world. 46 00:02:05,990 --> 00:02:09,290 >> אבל תבחין כמה אחרים תחביר, כמה במרכאות כפולות, 47 00:02:09,290 --> 00:02:11,890 כי הסוגריים בסוף, the-פסיק וכדומה. 48 00:02:11,890 --> 00:02:15,027 אז יש קצת מעלינו, כביכול, הן מבחינה קוגניטיבית 49 00:02:15,027 --> 00:02:17,860 ו תחבירית, כי אנחנו הולכים צריך לזכור לפני זמן רב. 50 00:02:17,860 --> 00:02:20,720 אבל להבין כי עם תרגול, זה יתחיל לקפוץ החוצה אליך. 51 00:02:20,720 --> 00:02:24,920 >> למעשה, בואו נתמקד שאחד פונקציה specifically-- במקרה זה, 52 00:02:24,920 --> 00:02:26,290 להגיד שלום העולם. 53 00:02:26,290 --> 00:02:27,560 אז אומר היא הפונקציה. 54 00:02:27,560 --> 00:02:31,320 שלום העולם הוא הפרמטר שלה, או ויכוח, ההתאמה האישית שלה. 55 00:02:31,320 --> 00:02:34,320 >> ואת השקילות ב- C היא רק הולך להיות קו אחד זה כאן, 56 00:02:34,320 --> 00:02:38,710 שם printf שווה, אומרים, המחרוזת הכפולה המצוטטת, שלום 57 00:02:38,710 --> 00:02:41,470 העולם הוא שווה, כמובן, למה יש בתוך הקופסה הלבנה שם. 58 00:02:41,470 --> 00:02:45,680 ואת מהלך סרק n, אם כי קצת מוזר נעדר מאפס, 59 00:02:45,680 --> 00:02:49,380 פשוט הולך להיות השפעה אנחנו נעלה לראות במחשב, כמו Mac שלי או מחשב, 60 00:02:49,380 --> 00:02:51,660 רק הזזה הסמן לשורה הבאה. 61 00:02:51,660 --> 00:02:53,970 זה כמו להכות Enter במקלדת. 62 00:02:53,970 --> 00:02:55,580 >> אז נראינו כי בעוד זמן לא רב. 63 00:02:55,580 --> 00:02:58,640 אבל קודם, בואו נסתכל על זה דוגמא אחרת במקרה של לולאות. 64 00:02:58,640 --> 00:03:02,830 היו לנו לנצח לולאה זו הפעם האחרונה, בהן היתה שורה של חתיכות פאזל 65 00:03:02,830 --> 00:03:05,490 כי עשה משהו ממש forever-- במקרה זה, 66 00:03:05,490 --> 00:03:08,360 לומר, שלום עולם, hello world, hello world, hello world. 67 00:03:08,360 --> 00:03:10,350 אז זה ללולאה אינסופית על ידי עיצוב. 68 00:03:10,350 --> 00:03:14,580 >> ב C, אם אנחנו רוצים ליישם את זה אותו רעיון, נוכל פשוט לעשות את זה. 69 00:03:14,580 --> 00:03:19,570 בעוד נכון, printf שלום בעולם-- עכשיו זמן מה, רק סמנטי, סוג של 70 00:03:19,570 --> 00:03:23,090 מעלה את הרעיון של לעשות משהו שוב, ושוב, ושוב, 71 00:03:23,090 --> 00:03:23,980 ובמשך כמה זמן? 72 00:03:23,980 --> 00:03:27,990 ובכן, כזכור true-- כי נכון הוא רק על או אחד. 73 00:03:27,990 --> 00:03:30,660 >> וזה נכון, כמובן, תמיד נכון. 74 00:03:30,660 --> 00:03:33,060 אז זה סוג של משמעות שמירה על הפרטים רק לומר אמת. 75 00:03:33,060 --> 00:03:36,890 אבל אכן, זה מכוון, כי אם נכון הוא פשוט תמיד נכון, 76 00:03:36,890 --> 00:03:40,850 מ ואילו נכון רק מרמז, אם קצת בעקיפין, 77 00:03:40,850 --> 00:03:44,070 שקווי הקוד הבא בין אלה סוגריים מסולסלים 78 00:03:44,070 --> 00:03:48,320 צריך רק לבצע שוב, ושוב, ושוב, ואף פעם לא ממש להפסיק. 79 00:03:48,320 --> 00:03:50,230 >> אבל אם אתה רוצה שלך לולאה להפסיק, כפי שאנו 80 00:03:50,230 --> 00:03:54,500 עשה בפעם האחרונה עם משהו כמו זו, לחזור על 50 הפעמים הבאות, 81 00:03:54,500 --> 00:03:57,700 ב- C אנחנו יכולים לעשות את אותו הדבר עם מה נקרא על loop-- מילת המפתח 82 00:03:57,700 --> 00:03:59,330 לא להיות זמן מה, אבל עבור. 83 00:03:59,330 --> 00:04:03,290 ואז יש לנו כמה תחביר חדש כאן, עם int i שווה 0, אני פחות מ -50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 ואנחנו נחזור לזה. 86 00:04:05,430 --> 00:04:09,660 אבל זה פשוט איך היינו לתרגם את הסט של בלוקים Scratch 87 00:04:09,660 --> 00:04:13,079 לקבוצה של שורות קוד C. 88 00:04:13,079 --> 00:04:14,450 >> בינתיים, לשקול משתנים. 89 00:04:14,450 --> 00:04:16,540 ואכן, אנחנו רק ראיתי אחד לפני רגע. 90 00:04:16,540 --> 00:04:21,220 וגם במקרה של גירוד, אם אנחנו רציתי להכריז על משתנה בשם i 91 00:04:21,220 --> 00:04:24,590 עבור i להיות שלם, רק מספר, ואנחנו רוצים להגדיר אותו ערך כלשהו, 92 00:04:24,590 --> 00:04:28,410 היינו להשתמש כתום זה לחסום כאן-- ואינדינ ל -0. 93 00:04:28,410 --> 00:04:30,800 >> ואנחנו נראה היום מעבר, בדיוק כמו בשבוע שעבר, 94 00:04:30,800 --> 00:04:33,850 מתכנת לעשות כמעט תמיד מתחילים לספור מאפס, באמת 95 00:04:33,850 --> 00:04:34,950 לפי האמנה. 96 00:04:34,950 --> 00:04:37,250 אבל גם בגלל ביטול מן בדיוננו בינארי, 97 00:04:37,250 --> 00:04:39,990 המספר הקטן ביותר שאתה יכול מייצג עם כל מספר סיבי 98 00:04:39,990 --> 00:04:41,640 רק הולך להיות 0 עצמה. 99 00:04:41,640 --> 00:04:45,190 וכך נתחיל בדרך כלל אתחול אפילו משתנים שלנו 0. 100 00:04:45,190 --> 00:04:47,710 >> וגם ב- C כדי לעשות את אותו הדבר, אנחנו הולכים לומר int 101 00:04:47,710 --> 00:04:50,110 עבור מספר שלם, אני פשוט על ידי האמנה. 102 00:04:50,110 --> 00:04:53,390 יכולתי לצלצל משתנה זה כל מה שאני רוצה, בדיוק כמו שריטה. 103 00:04:53,390 --> 00:04:57,770 ואז שווה 0 רק מקצה הערך 0 מימין 104 00:04:57,770 --> 00:05:01,319 ומכניס אותו לתוך המשתנה, או מיכל אחסון שם, בצד שמאל. 105 00:05:01,319 --> 00:05:04,360 ואת הפסיק כפי שאנו שתראה-- ו ראינו כמה already-- אלה 106 00:05:04,360 --> 00:05:06,530 רק אומר סוף מחשבה. 107 00:05:06,530 --> 00:05:09,430 המשך לעשות משהו אחר על השורות הבאות. 108 00:05:09,430 --> 00:05:11,330 >> עכשיו, מה לגבי ביטויים בוליאני? 109 00:05:11,330 --> 00:05:14,320 נזכיר כי ב Scratch, אלה היו ביטויים 110 00:05:14,320 --> 00:05:16,740 כי הם או נכונים או שאלות false--, 111 00:05:16,740 --> 00:05:18,910 באמת, כי הם או אמת או שקר. 112 00:05:18,910 --> 00:05:21,960 אז במקרה של גירוד, נוכל לשאול שאלה פשוטה כמו זו, 113 00:05:21,960 --> 00:05:24,586 הוא לי פחות מ -50? 114 00:05:24,586 --> 00:05:25,710 אז אני, שוב, הוא מספר שלם. 115 00:05:25,710 --> 00:05:27,210 אולי אנו משתמשים בו בתוכנית Scratch 116 00:05:27,210 --> 00:05:29,310 כדי לעקוב אחר ציון או משהו כזה. 117 00:05:29,310 --> 00:05:33,810 אז תחביר זה כאן Scratch רק אומר, הוא שאני פחות מ -50? 118 00:05:33,810 --> 00:05:37,330 ובכן, למרבה המזל, משהו הוא פשוט ב C. וכדי לתרגם, 119 00:05:37,330 --> 00:05:41,780 זה אנחנו פשוט היה אומר לי פחות מ -50, באמצעות המקש המוכר 120 00:05:41,780 --> 00:05:42,850 במקלדת. 121 00:05:42,850 --> 00:05:45,141 >> בינתיים, אם אתה רוצה לומר משהו כללי יותר, 122 00:05:45,141 --> 00:05:49,890 כמו, ובכן, הוא x פחות מ y כאשר כל של x ו- y הם עצמם משתנים? 123 00:05:49,890 --> 00:05:52,280 אנחנו יכולים לעשות את אותו הדבר ב C, ולכן כל עוד יש לנו 124 00:05:52,280 --> 00:05:53,942 כבר נוצר משתנים אלה. 125 00:05:53,942 --> 00:05:55,650 ואנחנו נראה איך לעשות את זה לפני זמן רב. 126 00:05:55,650 --> 00:05:58,590 אנחנו פשוט היו אומרים x פחות מ y. 127 00:05:58,590 --> 00:06:00,530 >> אז אתה מתחיל לראות כמה קווי דמיון. 128 00:06:00,530 --> 00:06:03,490 ואלה אנשים שעשו Scratch היה בהחלט 129 00:06:03,490 --> 00:06:05,250 בהשראת כמה רעיונות בסיסיים אלה. 130 00:06:05,250 --> 00:06:10,350 ואתה רואה את זה סוג של תחביר languages-- רב 131 00:06:10,350 --> 00:06:12,160 לא רק גרד, לא רק C, אבל פייטון, 132 00:06:12,160 --> 00:06:14,790 ו- JavaScript, ו בשפות אחרות עדיין. 133 00:06:14,790 --> 00:06:18,270 >> הבה נבחן מבנה אחר מ C, הרעיון של מצב, 134 00:06:18,270 --> 00:06:20,370 עושה משהו על תנאי. 135 00:06:20,370 --> 00:06:22,720 אם משהו הוא נכון, לעשות את זה. 136 00:06:22,720 --> 00:06:24,457 אם משהו אחר נכון, לעשות את זה. 137 00:06:24,457 --> 00:06:27,040 זה סוג של תכנות מקבילה של להצטלבות הדרכים. 138 00:06:27,040 --> 00:06:29,730 אולי זה מזלג דו כיוונית, מזלג משולש, או יותר. 139 00:06:29,730 --> 00:06:32,800 וגם שריטה, כמו שיש לה ראיתי משהו כזה. 140 00:06:32,800 --> 00:06:34,010 >> אז יש לנו פה אחת גדולה. 141 00:06:34,010 --> 00:06:36,750 אבל לשקול את היחסים הפשטות של ההיגיון. 142 00:06:36,750 --> 00:06:44,010 אם x קטן מ y, אז אומרים x קטן מ y, אחר אם x גדול מ- y, 143 00:06:44,010 --> 00:06:46,230 אז אומרים x גדול מ- y. 144 00:06:46,230 --> 00:06:48,300 ואז, באופן הגיוני, אם אתה חושב בחזרה Scratch 145 00:06:48,300 --> 00:06:52,610 או פשוט אינטואיציה אנושית משלך, טוב, אם x אינו עולה y, ו- x 146 00:06:52,610 --> 00:06:57,000 לא פחות מ y, אז כמובן x הולך להיות שווה y. 147 00:06:57,000 --> 00:06:59,690 אז במקרה הזה, על ידי קינון אלה אבני Scratch, 148 00:06:59,690 --> 00:07:02,580 אנחנו יכולים להשיג שלוש מזלג הדרך בכביש? 149 00:07:02,580 --> 00:07:04,980 >> בינתיים, אם אנחנו רוצים לעשות את זה ב- C, זה ללא ספק 150 00:07:04,980 --> 00:07:08,420 נראה simpler-- קצת לפחות ברגע שאתה מקבל מכיר את התחביר. 151 00:07:08,420 --> 00:07:12,050 אם x קטן מ y, x printf הוא פחות מ y. 152 00:07:12,050 --> 00:07:16,140 x אחר אם הוא גדול מ y, x printf עולה y. 153 00:07:16,140 --> 00:07:21,210 x printf אחר שווה y-- ו, שוב, עם אלה מהלך סרק מסתיים רק 154 00:07:21,210 --> 00:07:24,160 עבור קווים חדשים אלה, כך שאם אתה ממש רצה זה סוג של תוכנית 155 00:07:24,160 --> 00:07:25,940 זה היה רק ​​לעבור הסמן בסופו של דבר 156 00:07:25,940 --> 00:07:28,100 לשורה הבאה של המסך. 157 00:07:28,100 --> 00:07:31,270 >> עכשיו, בינתיים Scratch היה אחר יותר תכונות מתוחכמות, רק 158 00:07:31,270 --> 00:07:34,320 שחלקם אנחנו הולכים בתחילה לעבור אל העולם של ג 159 00:07:34,320 --> 00:07:37,010 ואחד מהם היה נקרא רשימת Scratch. 160 00:07:37,010 --> 00:07:39,100 וזה היה מיוחד סוג של משתנה 161 00:07:39,100 --> 00:07:42,840 מותר לך לאחסן דברים מרובים ב אותו בחזרה, אל גב, לגבות, לגבות. 162 00:07:42,840 --> 00:07:45,540 >> ב C, אין לו רשימות, כשלעצמה, אלא משהו 163 00:07:45,540 --> 00:07:48,090 כי הם באופן כללי יותר יהיו שנקרא מערכים, למרות שאנחנו 164 00:07:48,090 --> 00:07:50,590 לחזור מאוחר יותר בסמסטר הזה כדי להביט במשהו 165 00:07:50,590 --> 00:07:52,780 קרא רשימה, או באמת רשימה מקושרת. 166 00:07:52,780 --> 00:07:55,510 אבל לעת עתה, הדבר הקרוב ביותר המקבילה C בשבילנו 167 00:07:55,510 --> 00:07:57,345 הולך להיות משהו נקרא מערך. 168 00:07:57,345 --> 00:07:59,740 ואת מערך פשוט סוג מיוחד של משתנה 169 00:07:59,740 --> 00:08:03,160 המאפשר לך לאחסן נתונים בחזרה, לגבות, לגבות, אל גב. 170 00:08:03,160 --> 00:08:05,840 >> ואכן, ב Scratch, אם אנחנו רוצים לגשת 171 00:08:05,840 --> 00:08:09,030 הרכיב הראשון של מערך או list-- ואני הולך לקרוא לזה, 172 00:08:09,030 --> 00:08:13,600 לפי האמנה, argv, הטיעון וקטור, אבל עוד על כך לפני זמן רב. 173 00:08:13,600 --> 00:08:17,090 אם אני רוצה לקבל את האלמנט הראשון של argv, בעולם של Scratch 174 00:08:17,090 --> 00:08:20,930 אתה בעצם לעשות בדרך כלל מתחילים לספור מ -1. 175 00:08:20,930 --> 00:08:22,850 >> וכך אני עלול לקבל פריט 1 של argv. 176 00:08:22,850 --> 00:08:26,310 זה בדיוק איך MIT מיושם הרעיון של רשימות. 177 00:08:26,310 --> 00:08:29,860 אבל ב- C, אני הולך יותר פשוט פשוט לומר, argv, 178 00:08:29,860 --> 00:08:32,758 אשר שוב הוא השם של שלי list-- או להיות ברור, מערך. 179 00:08:32,758 --> 00:08:34,549 ואם אני רוצה את הראשון אלמנטים, אני הולך 180 00:08:34,549 --> 00:08:37,890 להשתמש בסוגריים מרובעים, אשר אתה אולי לעתים קרובות לא בשימוש תחת המקלדת. 181 00:08:37,890 --> 00:08:40,150 >> אבל 0 רק אומר, אני צריך את הראשון. 182 00:08:40,150 --> 00:08:42,160 לכן, בהזדמנות וכפי הזמן עובר, אנחנו הולכים 183 00:08:42,160 --> 00:08:44,570 כדי להתחיל לראות הדיכוטומיות הללו בין Scratch ו- C, 184 00:08:44,570 --> 00:08:46,070 לפיה Scratch משתמש בכרטיס. 185 00:08:46,070 --> 00:08:47,670 אנחנו ב- C להשתמש 0 כאן. 186 00:08:47,670 --> 00:08:49,420 אבל תוכל לראות במהירות ברגע שאתה מבין 187 00:08:49,420 --> 00:08:52,920 היסודות של כל שפה, כי הדברים האלה מתחילים לקבל את כל יותר 188 00:08:52,920 --> 00:08:56,860 מוכר באמצעות תרגול בפועל. 189 00:08:56,860 --> 00:08:59,700 >> אז בואו באמת נראים כעת על תכנית. 190 00:08:59,700 --> 00:09:04,031 כאן יהיה הראשון של C שלנו קוד מקור של תוכניות מלאות. 191 00:09:04,031 --> 00:09:06,280 והתוכנית אנחנו הולכים להציע בתמורה 192 00:09:06,280 --> 00:09:09,340 הוא זה שווה ערך לזה חתיכת Scratch קודם לכן. 193 00:09:09,340 --> 00:09:13,210 >> אז כאן, יש לנו מה זה ניתן לטעון את תוכנית C הפשוטה 194 00:09:13,210 --> 00:09:15,410 אתה יכול לכתוב כי באמת עושה משהו. 195 00:09:15,410 --> 00:09:18,250 עכשיו, נחפש בעבר, לעת עתה, יש לכלול, 196 00:09:18,250 --> 00:09:21,190 io.h סטנדרטי, וזווית אלה בסוגריים, ו int, ומבוטל, 197 00:09:21,190 --> 00:09:22,840 ואת סוגריים מסולסלים, וכיוצא באלה. 198 00:09:22,840 --> 00:09:25,390 >> ובואו רק להתמקד מה, לפחות באופן אינטואיטיבי, 199 00:09:25,390 --> 00:09:26,860 אולי לקפוץ החוצה אליך כבר. 200 00:09:26,860 --> 00:09:30,300 למעשה, עיקרי, אני לא בהכרח יודע מה זה, 201 00:09:30,300 --> 00:09:34,580 אבל הרבה כמו שריטה היתה שכאשר דגל ירוק לוחץ פיסת הפאזל, 202 00:09:34,580 --> 00:09:39,070 וכך גם C כשפת תכנות יש חתיכה ראשית של קוד 203 00:09:39,070 --> 00:09:43,380 מקבל להורג כברירת מחדל. ואכן, זה ממש הולך להיקרא ראשי. 204 00:09:43,380 --> 00:09:44,720 >> אז עיקרי היא פונקציה. 205 00:09:44,720 --> 00:09:48,720 וזה תפקיד מיוחד שקיים ב- C שכאשר אתה מפעיל תוכנית, 206 00:09:48,720 --> 00:09:52,720 זה ראשי שמקבל מנוהל על ידי בְּרִירַת מֶחדָל. בעולם של גרד, 207 00:09:52,720 --> 00:09:56,970 זה היה בדרך כלל כאשר דגל ירוק והכה נדרס כברירת מחדל. 208 00:09:56,970 --> 00:10:01,130 >> בינתיים, ראינו את זה קודם, printf או מעוצב הדפסה, זה 209 00:10:01,130 --> 00:10:05,620 הולך להיות פונקציה שמגיעה עם C, יחד עם חבורה שלמה של אחרים, 210 00:10:05,620 --> 00:10:10,140 רצון כי מעה והזמן שוב, כדי לעשות בדיוק 211 00:10:10,140 --> 00:10:12,450 כשמו, להדפיס משהו. 212 00:10:12,450 --> 00:10:13,500 מה אנחנו רוצים להדפיס? 213 00:10:13,500 --> 00:10:15,770 ובכן, נראה כי על ידי תווים תוחמים 214 00:10:15,770 --> 00:10:18,680 כמו these-- העולם שלום, n לוכסן אחורי במרכאות כפולות, 215 00:10:18,680 --> 00:10:23,040 אנחנו יכולים לספר printf בדיוק מה להדפיס על המסך. 216 00:10:23,040 --> 00:10:26,430 >> אבל כדי לעשות זה, לצערנו 217 00:10:26,430 --> 00:10:30,010 צריך לקחת משהו שהוא כבר נסתר לנו, בני האדם, 218 00:10:30,010 --> 00:10:34,510 אבל לפחות זה קצת readable-- חדה כוללים, io.h סטנדרטי, int, 219 00:10:34,510 --> 00:10:39,340 העיקרי, חלל, printf, כל קסום לחשים אנחנו פשוט ראינו על המסך. 220 00:10:39,340 --> 00:10:42,470 אבל אנחנו באמת צריכים ללכת יותר מסתורי עדיין. 221 00:10:42,470 --> 00:10:47,140 אנחנו קודם צריכים לתרגם את הקוד שנכתוב לקוד מכונה. 222 00:10:47,140 --> 00:10:51,370 ולהיזכר מהשבוע שעבר כי מכונות, לפחות מאלה שאנו מכירים כאן, 223 00:10:51,370 --> 00:10:54,450 בסוף היום היחיד להבין אפסים ואחדים. 224 00:10:54,450 --> 00:10:58,100 >> ואלוהים שלי, אם היינו צריכים לכתוב אלה אפסים ואחדים לתכנית למעשה, 225 00:10:58,100 --> 00:11:01,260 זה היה מאוד, מאוד מהר מוציא את כל הכיף של דבר. 226 00:11:01,260 --> 00:11:05,150 אבל מתברר, בשבוע שעבר, שדפוסים אלו של אפסים ואחדים 227 00:11:05,150 --> 00:11:06,400 יש רק משמעות מיוחדת. 228 00:11:06,400 --> 00:11:08,500 בהקשרים מסוימים, הם אולי זה אומר במספרים. 229 00:11:08,500 --> 00:11:11,840 >> בהקשרים מסוימים, ויכול להיות שפירושן אותיות או צבעים, או כל מספר 230 00:11:11,840 --> 00:11:14,710 הפשטות אחרות יש על. 231 00:11:14,710 --> 00:11:18,450 אבל בדיוק כמו המחשב שלך יש מעבד, יחידת עיבוד מרכזית, 232 00:11:18,450 --> 00:11:20,390 או במוחם הפנימי של המחשב. 233 00:11:20,390 --> 00:11:22,240 זה בדרך כלל אינטל בפנים, כי זה 234 00:11:22,240 --> 00:11:24,900 אחת החברות הגדולות שגורם מעבדים למחשבים. 235 00:11:24,900 --> 00:11:28,910 >> ובכן, מעבד אינטל ואחרים פשוט החליטו מראש 236 00:11:28,910 --> 00:11:33,970 כי דפוסים מסוימים של אפסים אלה משמעו דברים ספציפיים. 237 00:11:33,970 --> 00:11:37,040 דפוסים מסוימים של אפסים ואחדים יהיה משמעות, להדפיס זה למסך, 238 00:11:37,040 --> 00:11:39,710 או להוסיף שני מספרים אלה, או לחסר שני מספרים אלה, 239 00:11:39,710 --> 00:11:43,310 או להזיז את הכלי של נתונים הזיכרון של המחשב שלי לכאן, 240 00:11:43,310 --> 00:11:47,870 או כל מספר של רמה נמוכה מאוד אחרת, אבל בסופו של דבר שימושי, פעולות. 241 00:11:47,870 --> 00:11:53,022 אבל, למרבה המזל, אנחנו בני האדם לא הולכים צריך לדעת את רמת הפירוט הזו. 242 00:11:53,022 --> 00:11:56,230 ואכן, בדיוק כמו בפעם הקודמת, איפה אנחנו שוב מפוזר, ושוב, ושוב, 243 00:11:56,230 --> 00:11:58,930 בניין מרמה נמוכה מאוד הפרימיטיבים כמו אפסים ואחדים 244 00:11:58,930 --> 00:12:01,160 למושגים ברמה גבוהה יותר כמו מספרים ואותיות, 245 00:12:01,160 --> 00:12:04,330 וצבעים, ועוד, גם אנחנו יכולים כמו מתכנתים 246 00:12:04,330 --> 00:12:07,080 לעמוד על הכתפיים אחרים שבאו לפנינו 247 00:12:07,080 --> 00:12:11,260 ולהשתמש תוכנה אחרת אנשים כתבו לפני us-- 248 00:12:11,260 --> 00:12:14,340 כלומר תוכניות שנקראו מהדרים. 249 00:12:14,340 --> 00:12:17,770 >> C היא שפה בדרך כלל עובר הידור, 250 00:12:17,770 --> 00:12:22,130 כלומר מרה קוד המקור לקוד מכונה. 251 00:12:22,130 --> 00:12:25,230 בפרט, מה זה אומר הוא שאם יש לך המקור שלך 252 00:12:25,230 --> 00:12:29,530 קוד שאתה עצמך כותב, כפי שאנו בקרוב יהיה בעוד רגע על המסך, 253 00:12:29,530 --> 00:12:33,140 ואתה רוצה להמיר אותו בסופו של דבר מכונה code-- 254 00:12:33,140 --> 00:12:37,100 אפסים ואחדים אלה רק Mac או PC שלך 255 00:12:37,100 --> 00:12:41,230 understands-- יש לך ראשון להאכיל כי קוד המקור כפי 256 00:12:41,230 --> 00:12:46,340 קלט מיוחד תוכנית בשם מהדר, 257 00:12:46,340 --> 00:12:48,974 הפלט של אשר אנו שנראה הוא קוד מכונה. 258 00:12:48,974 --> 00:12:51,890 ואכן, בפעם האחרונה שדיברנו על, באמת, בסוף היום, 259 00:12:51,890 --> 00:12:52,610 פתרון בעיות. 260 00:12:52,610 --> 00:12:53,360 יש לך תשומות. 261 00:12:53,360 --> 00:12:54,318 ויש לך יציאות. 262 00:12:54,318 --> 00:12:56,560 ויש לך איזשהו של אלגוריתם באמצע. 263 00:12:56,560 --> 00:12:59,830 >> אלגוריתמים בטח יכול להיות מיושם בתוכנה, 264 00:12:59,830 --> 00:13:02,900 כפי שראינו בשבוע שעבר פסאודו קוד וכפי שנראים עם קוד בפועל 265 00:13:02,900 --> 00:13:03,490 השבוע. 266 00:13:03,490 --> 00:13:06,430 וכך מהדר באמת רק יש קבוצה של אלגוריתמים בתוך 267 00:13:06,430 --> 00:13:10,060 מזה שיודע להמיר את מילות המפתח מיוחד, 268 00:13:10,060 --> 00:13:12,180 כמו ראשי, printf, ואחרים שאנחנו פשוט 269 00:13:12,180 --> 00:13:17,620 ראה לתוך התבניות של אפסים אלה אינטל מעבד בתוך ואחרים 270 00:13:17,620 --> 00:13:20,020 בעצם מבין. 271 00:13:20,020 --> 00:13:22,460 אז איך עושים את זה? 272 00:13:22,460 --> 00:13:24,470 מנין אנו שואבים מהדר? 273 00:13:24,470 --> 00:13:26,400 >> רובנו כאן יש מק או PC. 274 00:13:26,400 --> 00:13:29,152 ואתה מפעיל Mac OS, או Windows או Linux, Solaris או, 275 00:13:29,152 --> 00:13:30,860 או כל מספר של אחרים מערכות הפעלה. 276 00:13:30,860 --> 00:13:32,568 ואכן, יכולנו לצאת על גבי האינטרנט 277 00:13:32,568 --> 00:13:35,710 ולהוריד מהדר עבור Mac שלך או למחשב 278 00:13:35,710 --> 00:13:37,360 במערכת ההפעלה הספציפית שלך. 279 00:13:37,360 --> 00:13:39,617 אבל כולנו יהיה על דפים שונים, אם אפשר לומר כך. 280 00:13:39,617 --> 00:13:41,450 נצטרך מעט תצורות שונות. 281 00:13:41,450 --> 00:13:43,210 ודברים לא יעבדו בכל זאת. 282 00:13:43,210 --> 00:13:45,280 ואכן, בימים אלה רבים מאיתנו לא להשתמש 283 00:13:45,280 --> 00:13:47,516 תוכנה שפועלת רק על המחשבים הניידים שלנו. 284 00:13:47,516 --> 00:13:49,390 במקום זאת, אנו משתמשים משהו כמו דפדפן 285 00:13:49,390 --> 00:13:52,930 מאפשר לנו לגשת מבוסס אינטרנט יישומים בענן. 286 00:13:52,930 --> 00:13:55,630 ובהמשך בסמסטר הזה, ואנו לעשות בדיוק את זה. 287 00:13:55,630 --> 00:13:59,660 נכתוב יישומים או תוכנה באמצעות code-- לא C, 288 00:13:59,660 --> 00:14:02,860 אבל בשפות אחרות כמו פייתון JavaScript-- שמופעל בענן. 289 00:14:02,860 --> 00:14:05,860 >> וכדי לעשות את זה, אנחנו עצמנו במהלך הסמסטר 290 00:14:05,860 --> 00:14:11,890 למעשה ישתמש ענן מבוסס סביבה המכונית CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 זהו תכנות מבוסס אינטרנט סביבה, או פיתוח משולב 292 00:14:16,030 --> 00:14:20,610 הסביבה, IDE, זה נבנה על גבי חלק תוכנת קוד פתוח בשם קלאוד 9. 293 00:14:20,610 --> 00:14:22,966 וגם ביצענו כמה פדגוגית הפשטה אליו 294 00:14:22,966 --> 00:14:25,840 כדי להסתיר תכונות מסוימות בשבועות הראשונים שאנחנו לא צריכים, 295 00:14:25,840 --> 00:14:27,770 לאחר מכן אתה יכול לחשוף אותם ולעשות ביותר 296 00:14:27,770 --> 00:14:29,400 כל מה שאתה רוצה עם הסביבה. 297 00:14:29,400 --> 00:14:32,470 >> וזה מאפשר לנו גם כדי טרום להתקין תוכנות מסוימות. 298 00:14:32,470 --> 00:14:35,330 דברים כמו מה שנקרא CS50 הספרייה, אשר אנו בקרוב לראות 299 00:14:35,330 --> 00:14:39,210 מספק לנו ב- C עם כמה פונקציונליות נוספת. 300 00:14:39,210 --> 00:14:44,392 אז אם אתה הולך, בסופו של דבר, CS50.io, יתבקשו לך להתחבר, 301 00:14:44,392 --> 00:14:46,350 וברגע שאתה עושה וליצור חשבון בחינם, 302 00:14:46,350 --> 00:14:52,150 תוכלו לגשת בסביבה שנראית די ככה. 303 00:14:52,150 --> 00:14:53,760 >> עכשיו, זה נמצא במצב ברירת המחדל. 304 00:14:53,760 --> 00:14:55,650 הכל נחמד בהיר על המסך. 305 00:14:55,650 --> 00:14:57,941 לרבים מאתנו יש רגל של עובד על חתיכת CS50 זה 306 00:14:57,941 --> 00:14:59,150 מאוחר למדי אל תוך הלילה. 307 00:14:59,150 --> 00:15:02,400 וכך שחלקכם מעדיפים ולהפכו מצב לילה, אם אפשר לומר כך. 308 00:15:02,400 --> 00:15:05,550 >> אבל, בסופו של דבר, מה אתה הולך לראות בתוך CS50 IDE 309 00:15:05,550 --> 00:15:08,340 הוא שלושה האזורים-- ברורים שטח על שם שמאלה 310 00:15:08,340 --> 00:15:12,604 הקבצים שלך הולכים להיות ענן, שטח בפינה הימנית העליונה 311 00:15:12,604 --> 00:15:14,270 שם הקוד שלך הולך להיות לעריכה. 312 00:15:14,270 --> 00:15:16,650 תוכל לפתוח מכרטיסיות עבור כל תכנית 313 00:15:16,650 --> 00:15:19,670 שאתה כותב בסמסטר הזה בתוך זה בפינה הימנית העליונה. 314 00:15:19,670 --> 00:15:23,070 ואז ביותר arcanely, ובכל זאת בעצמה, 315 00:15:23,070 --> 00:15:26,610 הולך להיות הדבר הזה בבית בתחתית המכונית חלון מסוף. 316 00:15:26,610 --> 00:15:29,450 >> זהו בית ספר ישן ממשק שורת פקודה, 317 00:15:29,450 --> 00:15:32,240 או CLI, המאפשר לך לבצע פקודות 318 00:15:32,240 --> 00:15:35,260 על computer-- במקרה זה, את המחשב cloud-- 319 00:15:35,260 --> 00:15:39,090 לעשות דברים כמו לקמפל קוד שלך מקוד המקור לקוד מכונה, 320 00:15:39,090 --> 00:15:43,600 כדי להפעיל את התוכניות שלך, או להתחיל שלך שרת אינטרנט, או לגשת מסד הנתונים שלך, 321 00:15:43,600 --> 00:15:47,454 וכל מספר טכניקות אחרות כי נתחיל להשתמש לפני זמן רב. 322 00:15:47,454 --> 00:15:49,370 אבל כדי להגיע לשם, אנחנו הולך להיות ממש 323 00:15:49,370 --> 00:15:51,240 להיכנס לאינטרנט ולהתחיל לשחק. 324 00:15:51,240 --> 00:15:54,399 וכדי לעשות את זה, בוא ראשון להתחיל להתעסק ראשי, 325 00:15:54,399 --> 00:15:55,940 ולכתוב את החלק העיקרי של התוכנית. 326 00:15:55,940 --> 00:15:59,170 ובואו להשתמש בפונקציה כי printf, בו השתמשנו קודם לכן, 327 00:15:59,170 --> 00:16:01,050 פשוט לומר משהו. 328 00:16:01,050 --> 00:16:04,910 >> אז הנה אני כבר בפנים של IDE CS50. 329 00:16:04,910 --> 00:16:05,930 התחברתי מראש. 330 00:16:05,930 --> 00:16:07,360 ואני מלא הוקרן החלון. 331 00:16:07,360 --> 00:16:09,670 וכך, בסופו של דבר, אתה מדי בעיות קרובות 332 00:16:09,670 --> 00:16:12,960 צעדים הנדרשים דומים כי יספק תיעוד מקוון. 333 00:16:12,960 --> 00:16:16,360 אז אתה לא צריך לדאוג קליט כל צעד טכני קטן 334 00:16:16,360 --> 00:16:17,730 כי אני עושה כאן היום. 335 00:16:17,730 --> 00:16:19,222 >> אבל תקבל מסך כזה. 336 00:16:19,222 --> 00:16:20,430 אני דווקא להיות במצב לילה. 337 00:16:20,430 --> 00:16:22,944 ואתה יכול להאיר הכל על ידי השבתת מצב לילה. 338 00:16:22,944 --> 00:16:24,860 ובסוף של היום, אתה הולך לראות 339 00:16:24,860 --> 00:16:30,090 עיקרי שלושה האזורים-- את הקובץ דפדפן בצד השמאל, כרטיסיות הקוד למעלה, 340 00:16:30,090 --> 00:16:32,430 ואת חלון המסוף בתחתית. 341 00:16:32,430 --> 00:16:34,890 >> תן לי ללכת קדימה לכתוב התוכנית הראשונה שלי. 342 00:16:34,890 --> 00:16:42,300 אני הולך ללכת מנעתי אל הקובץ, שמור, ושמור את הקובץ שלי hello.c. 343 00:16:42,300 --> 00:16:46,850 ואכן, לפי האמנה, כל שאנו התוכנית תכתוב כתוב בשפת C 344 00:16:46,850 --> 00:16:49,739 צריך להיות שם משהו נקודה ג, לפי האמנה. 345 00:16:49,739 --> 00:16:53,030 אז אני הולך שם את זה hello.c, כי אני רק רוצה להגיד שלום לעולם. 346 00:16:53,030 --> 00:16:54,820 עכשיו אני הולך להגדיל מתוך ולחץ על שמור. 347 00:16:54,820 --> 00:16:58,180 וזה כל מה שיש לי כאן כרגע היא כרטיסייה שבו אני יכול להתחיל לכתוב קוד. 348 00:16:58,180 --> 00:16:59,490 >> זה לא הולך לקמפל. 349 00:16:59,490 --> 00:17:00,300 זה לא אומר כלום. 350 00:17:00,300 --> 00:17:02,750 וכך גם אם המרתי זה אפסים ואחדים, 351 00:17:02,750 --> 00:17:05,390 המעבד הוא הולך להיות לא מושג מה קורה מסביב. 352 00:17:05,390 --> 00:17:14,170 אבל אם אני כותב את השורות כי תואם עם ההוויה C conventions-- של C, 353 00:17:14,170 --> 00:17:20,150 שוב, זה language-- עם תחביר כמו זה, printf שלום בעולם-- ויש לי 354 00:17:20,150 --> 00:17:22,210 והתרווח עם עושה את זה לאורך זמן. 355 00:17:22,210 --> 00:17:24,510 אז אני לא חושב שעשיתי כל שגיאות דפוס. 356 00:17:24,510 --> 00:17:27,910 >> אבל, תמיד, ראשון פעם שאתה עושה זה, תרצה. 357 00:17:27,910 --> 00:17:31,090 ומה שאני עומד לעשות אולי מאוד גם לא מצליח לכם בפעם הראשונה. 358 00:17:31,090 --> 00:17:33,610 וזה בסדר גמור, כי עכשיו אתה 359 00:17:33,610 --> 00:17:37,662 יכול רק לראות הרבה חידוש כולו, אבל לאורך זמן ברגע שאתה מקבל מוכר 360 00:17:37,662 --> 00:17:39,870 עם הסביבה הזאת, בשפה זו, ואחרים, 361 00:17:39,870 --> 00:17:42,370 תתחיל לראות דברים או נכונים או לא נכונים. 362 00:17:42,370 --> 00:17:44,369 >> וזה מה עמיתי הוראה כמובן 363 00:17:44,369 --> 00:17:48,780 עוזרים מקבלים כל כך טובים בשלב מעל, הוא תצפית טעויות או באגים בקוד. 364 00:17:48,780 --> 00:17:52,110 אבל אני טוען שיש אין באגים בקוד זה. 365 00:17:52,110 --> 00:17:53,990 אז עכשיו אני רוצה להפעיל את התוכנית. 366 00:17:53,990 --> 00:17:57,440 >> עכשיו ב- Mac או PC שלי, אני הרגל של סמלי לחיצה כפולים 367 00:17:57,440 --> 00:17:59,350 כשאני רוצה להריץ כמה תכנית. 368 00:17:59,350 --> 00:18:01,080 אבל זה לא המודל כאן. 369 00:18:01,080 --> 00:18:04,570 בסביבה זו, המהווה CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 אנחנו משתמשים תפעוליים מערכת בשם לינוקס. 371 00:18:07,192 --> 00:18:09,900 לינוקס היא מזכירה עוד מערכת ההפעלה, המכונה בדרך כלל 372 00:18:09,900 --> 00:18:10,850 כמו יוניקס. 373 00:18:10,850 --> 00:18:16,340 ו- Linux ידוע במיוחד עבור בעל CLI, בסביבת שורת פקודה. 374 00:18:16,340 --> 00:18:20,070 עכשיו, אנו משתמשים ספציפיים טעם של לינוקס בשם אובונטו. 375 00:18:20,070 --> 00:18:22,770 ואובונטו הוא פשוט גרסה מסוימת של לינוקס. 376 00:18:22,770 --> 00:18:27,900 >> אבל בימים אלה של לינוקס אלה בעצם לעשות מגיע עם ממשק משתמש גרפי. 377 00:18:27,900 --> 00:18:30,360 ואת אחד אנחנו לקרות להשתמש כאן הוא מבוסס אינטרנט. 378 00:18:30,360 --> 00:18:32,735 אז זה עשוי להיראות אפילו קצת שונה ממשהו 379 00:18:32,735 --> 00:18:35,310 אתה עצמך יכול להיות לראות או להפעיל בעבר. 380 00:18:35,310 --> 00:18:37,910 >> אז אני הולך קדימה עכשיו לבצע את הפעולות הבאות. 381 00:18:37,910 --> 00:18:40,950 שמרתי את הקובץ כפי hello.c. 382 00:18:40,950 --> 00:18:47,350 אני הולך קדימה, סוג clanghello.c אז קלאנג 383 00:18:47,350 --> 00:18:49,850 עבור שפת C הוא מהדר. 384 00:18:49,850 --> 00:18:51,952 זה מותקן מראש ב CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 ואתה בהחלט יכול להוריד להתקין זה ב- Mac או PC שלך. 386 00:18:54,910 --> 00:18:57,910 >> אבל, שוב, לא היית צריך את כל התצורה-מראש נעשתה בשבילך. 387 00:18:57,910 --> 00:19:00,940 אז לעת עתה, אני פשוט הולך לרוץ clanghello.c. 388 00:19:00,940 --> 00:19:03,240 ועכשיו לב תחביר זה כאן יהיה בסופו של דבר 389 00:19:03,240 --> 00:19:06,930 פשוט מבינים אומר שאני בתוך תיקייה או ספרייה בשם Workspace. 390 00:19:06,930 --> 00:19:11,030 סימן הדולר זוהי רק מוסכמה אחר משמעות, להקליד פקודות שלך כאן. 391 00:19:11,030 --> 00:19:14,560 >> זה מה שנקרא מהיר, צודק לפי האמנה הוא סימן דולר. 392 00:19:14,560 --> 00:19:19,130 ואם אני הולך קדימה עכשיו ולחץ זן, שום דבר לא נראה קורה. 393 00:19:19,130 --> 00:19:20,930 אבל זה בעצם דבר טוב. 394 00:19:20,930 --> 00:19:23,650 פחות זה יקרה על המסך, כך סביר יותר 395 00:19:23,650 --> 00:19:26,710 הקוד שלך הוא יהיה נכון, לפחות מבחינה תחבירית. 396 00:19:26,710 --> 00:19:29,120 >> אז אם אני רוצה לנהל את העניינים התוכנית, מה עלי לעשות? 397 00:19:29,120 --> 00:19:33,770 ובכן, מתברר כי שם ברירת מחדל לפי אמנה 398 00:19:33,770 --> 00:19:38,854 לתוכניות כשאינך לציין שם עבור התוכנית שלך היא רק a.out. 399 00:19:38,854 --> 00:19:41,270 וזה גם תחביר, שתצליח להכיר לפני זמן רב. 400 00:19:41,270 --> 00:19:47,500 >> Dot לקצץ רק אומר, היי, CS50 IDE, להפעיל תוכנית בשם a.out 401 00:19:47,500 --> 00:19:49,400 זה בתוך הספרייה הנוכחית שלי. 402 00:19:49,400 --> 00:19:51,520 נקודה כלומר את הספרייה הנוכחית. 403 00:19:51,520 --> 00:19:55,040 ואנחנו נראים מה רצפים כאלה אחרים תווים אומר לפני זמן רב. 404 00:19:55,040 --> 00:19:58,430 >> אז הנה זה בא, זן, hello world. 405 00:19:58,430 --> 00:20:00,080 ואתה שם לב, זה מה שקרה? 406 00:20:00,080 --> 00:20:01,580 לא רק זה להדפיס hello world. 407 00:20:01,580 --> 00:20:05,990 כמו כן העביר את הסמן לשורה הבאה. 408 00:20:05,990 --> 00:20:07,160 >> ולמה זה היה? 409 00:20:07,160 --> 00:20:12,400 מה היה הקוד שכתבנו לפני כי הבטיח כי הסמן היה 410 00:20:12,400 --> 00:20:14,882 ללכת על הקו הבא? 411 00:20:14,882 --> 00:20:16,840 דבר מצחיק על המחשב הוא זה רק הולך 412 00:20:16,840 --> 00:20:18,570 לעשות ממש מה אתה אומר את זה כדי לעשות. 413 00:20:18,570 --> 00:20:26,050 >> אז אם אתה אומר את זה כדי printf שלום, פסיק, רווח, עולם, ציטוט קרוב, 414 00:20:26,050 --> 00:20:29,090 זה ממש רק הולך להדפיס תווים אלה. 415 00:20:29,090 --> 00:20:31,980 אבל היה לי אופי מיוחד זה בסוף, כזכור, קו נטוי הפוך n. 416 00:20:31,980 --> 00:20:34,230 וזה מה הבטיח שהדמות הלכה 417 00:20:34,230 --> 00:20:36,570 לשורה הבאה של המסך. 418 00:20:36,570 --> 00:20:38,097 >> למעשה, תן לי ללכת ולעשות את זה. 419 00:20:38,097 --> 00:20:39,430 תן לי ללכת קדימה ולמחוק זה. 420 00:20:39,430 --> 00:20:41,180 עכשיו, שימו לב כי העליון של המסך שלי יש 421 00:20:41,180 --> 00:20:42,890 נורה אדומה קטנה ב בכרטיסייה המציינת, 422 00:20:42,890 --> 00:20:45,047 היי, אתה כבר לא הצלת את קובץ. 423 00:20:45,047 --> 00:20:47,880 אז אני הולך קדימה עם שליטה S או הפקודה S, לשמור את הקובץ. 424 00:20:47,880 --> 00:20:51,130 עכשיו זה goes-- ירד ירוק moment--. 425 00:20:51,130 --> 00:20:53,760 ועכשיו היא חזרה פשוט להיות סמל סגירה. 426 00:20:53,760 --> 00:21:01,860 >> אם אני עכשיו לרוץ clanghello.c שוב, זן, לוכסן נקודה, a.out, זן, 427 00:21:01,860 --> 00:21:04,110 תראה שהיא עדיין מתפקדת. 428 00:21:04,110 --> 00:21:06,020 אבל זה ללא ספק עגלה קטנה. 429 00:21:06,020 --> 00:21:08,714 כרגע, סביבת עבודה prompt-- שלי, ואז זה סימן הדולר, 430 00:21:08,714 --> 00:21:10,880 ואז prompt-- בפועל שלי הכל באותה שורה. 431 00:21:10,880 --> 00:21:14,540 אז בהחלט זה באג אסתטי, גם אם זה לא ממש באג לוגי. 432 00:21:14,540 --> 00:21:16,250 >> אז אני הולך לבטל את מה בדיוק עשיתי. 433 00:21:16,250 --> 00:21:18,560 אני הולך להפעיל מחדש a.out. 434 00:21:18,560 --> 00:21:22,710 שים לב הוספתי את בחזרה אופי שורה חדשה. 435 00:21:22,710 --> 00:21:24,280 שמרתי את הקובץ. 436 00:21:24,280 --> 00:21:31,630 >> אז אני הולך להפעיל מחדש a.out, ו-- לעזאזל, באג, באג כלומר טעות. 437 00:21:31,630 --> 00:21:35,020 אז הבאג הוא שלמרות הוספתי את מהלך סרק n שם, 438 00:21:35,020 --> 00:21:41,180 מחדש הציל, מחדש ניהל את התוכנית, ההתנהגות הייתה זהה. 439 00:21:41,180 --> 00:21:42,640 למה זה יהיה? 440 00:21:42,640 --> 00:21:43,910 >> אני חסר צעד, נכון? 441 00:21:43,910 --> 00:21:47,620 זה צעד מפתח קודם לכן היה שיש לך עם-- בעת שינוי קוד המקור שלך, 442 00:21:47,620 --> 00:21:49,610 מתברר גם לרוץ זה דרך המהדר 443 00:21:49,610 --> 00:21:51,102 שוב, כך שאתה מקבל קוד מכונה חדשה. 444 00:21:51,102 --> 00:21:52,810 ואת הקוד מכונה, אפסים ואחדות, 445 00:21:52,810 --> 00:21:56,260 הולכים להיות כמעט זהה, אבל לא באופן מושלם כל כך, כי אנחנו צריכים, 446 00:21:56,260 --> 00:21:57,510 כמובן, כי הקו החדש. 447 00:21:57,510 --> 00:22:02,640 >> אז כדי לתקן את זה, אני הולך צריך להפעיל מחדש clanghello.c, זן, נקודה 448 00:22:02,640 --> 00:22:03,800 סלאש, a.out. 449 00:22:03,800 --> 00:22:08,402 ועכשיו, hello world חוזר למקום שבו אני מצפה שזה יהיה. 450 00:22:08,402 --> 00:22:09,610 אז זהו כל טוב ויפה. 451 00:22:09,610 --> 00:22:13,150 אבל a.out הוא שם די מטומטם בשביל התוכנית, למרות שזה קורה להיות, 452 00:22:13,150 --> 00:22:16,530 מסיבות היסטוריות, default-- כלומר פלטי הרכבה. 453 00:22:16,530 --> 00:22:20,780 >> אבל תן לי ללכת קדימה כאן ולעשות את זה בצורה שונה. 454 00:22:20,780 --> 00:22:24,760 אני רוצה תכנית שלום העולם שלי למעשה להיקרא שלום. 455 00:22:24,760 --> 00:22:28,320 אז אם זה היה סמל על שלי שולחן העבודה, זה לא יהיה a.out. 456 00:22:28,320 --> 00:22:29,730 זה ייקרא שלום. 457 00:22:29,730 --> 00:22:33,660 >> אז כדי לעשות זאת, מתברר כי קלאנג, כמו תוכניות רבות, 458 00:22:33,660 --> 00:22:37,980 תומך שורת הפקודה טיעונים, או דגלים, או מתגים, 459 00:22:37,980 --> 00:22:39,600 אשר פשוט להשפיע על ההתנהגות שלה. 460 00:22:39,600 --> 00:22:45,160 באופן ספציפי, קלאנג תומך קורטוב o דגל, אשר לאחר מכן הוא לוקח מילה שנייה. 461 00:22:45,160 --> 00:22:48,190 במקרה זה, אני יהיה שרירותי, אבל סביר, קוראים לזה שלום. 462 00:22:48,190 --> 00:22:50,710 אבל אני יכול לקרוא לזה משהו אני רוצה, חוץ a.out, אשר 463 00:22:50,710 --> 00:22:52,390 מעדיף להיות שייך לעניין. 464 00:22:52,390 --> 00:22:55,640 >> ואז פשוט לציין את שם של הקובץ אני רוצה לקמפל. 465 00:22:55,640 --> 00:22:59,190 אז עכשיו אף בתחילה של הפקודה עדיין יש לי קלאנג, 466 00:22:59,190 --> 00:23:01,410 בסוף הפקודה עדיין יש לי את הקובץ, 467 00:23:01,410 --> 00:23:05,520 עכשיו יש לי שורת הפקודה האלה ויכוחים, דגלים אלה כי אומרים, 468 00:23:05,520 --> 00:23:11,180 אה, דרך אגב, פלט-o, קובץ בשם שלום, לא a.out המחדל. 469 00:23:11,180 --> 00:23:13,810 >> אז אם אני מכה זן עכשיו, שום דבר כנראה קרה. 470 00:23:13,810 --> 00:23:17,900 וגם, עדיין, עכשיו אני יכול לעשות נקודת לוכסן שלום. 471 00:23:17,900 --> 00:23:19,089 אז זה אותו דבר התוכנית. 472 00:23:19,089 --> 00:23:21,380 האפסים ואת אלה הם זהה בסוף היום. 473 00:23:21,380 --> 00:23:24,210 >> אבל הם בשני a.out files-- השונה, 474 00:23:24,210 --> 00:23:26,490 המהווה את הגרסה הראשונה ופשוט בשם בטיפשות, 475 00:23:26,490 --> 00:23:30,250 ועכשיו שלום, שהינה הרבה שם מושך יותר עבור תוכנית. 476 00:23:30,250 --> 00:23:33,195 אבל, בכנות, אני אף פעם לא עוד נזכור את זה שוב, 477 00:23:33,195 --> 00:23:34,070 ושוב, ושוב. 478 00:23:34,070 --> 00:23:36,411 וזה, בעצם, כפי שאנו לכתוב יותר תוכניות מסובכות, 479 00:23:36,411 --> 00:23:38,160 את הפקודות שאתה הולך צריך לכתוב 480 00:23:38,160 --> 00:23:40,920 הולכים להתנקם יותר מסובך. 481 00:23:40,920 --> 00:23:41,940 >> וכך לא לדאוג. 482 00:23:41,940 --> 00:23:46,220 מתברר כי בני אדם לפני לנו הבינו גם הם 483 00:23:46,220 --> 00:23:47,530 היתה לי בעיה בדיוק זה. 484 00:23:47,530 --> 00:23:50,900 הם גם לא נהנו צורך הקלד ארוכות למדי, פקודות מסתוריות, 485 00:23:50,900 --> 00:23:52,200 כמה וכמה לזכור אותם. 486 00:23:52,200 --> 00:23:56,070 וכך אדם לפנינו עשו תוכניות אחרות שמקלות 487 00:23:56,070 --> 00:23:57,670 לקמפל את התוכנה. 488 00:23:57,670 --> 00:24:01,609 >> ואכן, אחד כזה התוכנית נקראת הפוך. 489 00:24:01,609 --> 00:24:03,150 אז אני הולך קדימה, לעשות זאת. 490 00:24:03,150 --> 00:24:05,691 אני הולך לבטל את כל מה שאני רק עשיתי את הדרך הבאה. 491 00:24:05,691 --> 00:24:07,690 תן לי להקליד LS. 492 00:24:07,690 --> 00:24:10,980 ותבחין שלושה things-- a.out, וכוכב, שלום 493 00:24:10,980 --> 00:24:12,810 וכוכב, ו hello.c. 494 00:24:12,810 --> 00:24:14,730 יש לקוות, זה צריך להיות קצת אינטואיטיבי, 495 00:24:14,730 --> 00:24:18,220 ככל קודם לכן היה דבר סביבת עבודה זו. 496 00:24:18,220 --> 00:24:21,240 לא היה שום דבר שיש לי נוצר עד שהתחלנו בכיתה. 497 00:24:21,240 --> 00:24:22,840 >> ויצרתי hello.c. 498 00:24:22,840 --> 00:24:24,544 אז אני הידור זה, וכינה אותו a.out. 499 00:24:24,544 --> 00:24:27,460 ואז ערכתי את זה שוב מעט אחרת וקרא לה שלום. 500 00:24:27,460 --> 00:24:32,830 אז יש לי שלושה קבצים בספריה זו, בתיקייה זו נקראת סביבת העבודה. 501 00:24:32,830 --> 00:24:35,005 עכשיו, אני רואה את זה גם כן אם אני Zoom בפועל. 502 00:24:35,005 --> 00:24:37,530 >> אם אני Zoom לכאן להסתכל כי ימני העליונה 503 00:24:37,530 --> 00:24:39,940 בפינה, כפי שהובטח שמאל יד בצד של המסך 504 00:24:39,940 --> 00:24:42,990 הוא תמיד הולך להראות לך מה בחשבונך, מה 505 00:24:42,990 --> 00:24:44,790 בתוך IDE CS50. 506 00:24:44,790 --> 00:24:46,680 ויש שם שלושה קבצים. 507 00:24:46,680 --> 00:24:49,070 >> אז אני רוצה להיפטר a.out ושלום. 508 00:24:49,070 --> 00:24:51,275 וכפי שאתה יכול לדמיין באופן אינטואיטיבי, אתה 509 00:24:51,275 --> 00:24:53,400 יכול למיין של קליק מלא או לחץ לחיצה ימנית על זה. 510 00:24:53,400 --> 00:24:54,590 והתפריט הקטן הזה צץ. 511 00:24:54,590 --> 00:24:57,170 ניתן להוריד את הקובץ, להפעיל זה, תצוגה מקדימה אותה, לרענן, לשנות, 512 00:24:57,170 --> 00:24:57,700 או מה לא. 513 00:24:57,700 --> 00:25:00,260 >> ואני יכול פשוט למחוק, וזה ייעלם. 514 00:25:00,260 --> 00:25:05,260 אבל בואו נעשה דברים עם פקודה קו לעת עתה, כדי להרגיש בנוח 515 00:25:05,260 --> 00:25:07,010 עם זה, לבצע את הפעולות הבאות. 516 00:25:07,010 --> 00:25:12,345 אני הולך להמשיך ולהסיר a.out ידי הקלדת ממש rma.out. 517 00:25:12,345 --> 00:25:14,890 מתברר, את הפקודה עבור הסרה או מחיקה של משהו, 518 00:25:14,890 --> 00:25:16,280 הוא לא להסיר או למחוק. 519 00:25:16,280 --> 00:25:21,260 >> זה יותר בתמציתיות RM, רק כדי לחסוך לך כמה קשה, וקש Enter. 520 00:25:21,260 --> 00:25:24,707 עכשיו אנחנו הולכים להיות מעט בלי לפרש להסיר a.out קובץ רגיל. 521 00:25:24,707 --> 00:25:27,040 אני באמת לא יודע מה קובץ לא סדיר יהיה עדיין. 522 00:25:27,040 --> 00:25:28,660 אבל אני רוצה להסיר אותו. 523 00:25:28,660 --> 00:25:30,150 >> אז אני הולך להקליד y עבור yes. 524 00:25:30,150 --> 00:25:31,940 או שאני יכול להקליד את זה, וקש Enter. 525 00:25:31,940 --> 00:25:33,440 וגם, שוב, שום דבר לא נראה לקרות. 526 00:25:33,440 --> 00:25:35,840 אבל זה, באופן כללי, דבר טוב. 527 00:25:35,840 --> 00:25:40,490 >> אם אני אדפיס LS הפעם, מה אני אמור לראות? 528 00:25:40,490 --> 00:25:44,930 יש לקוות, רק שלום hello.c. 529 00:25:44,930 --> 00:25:47,286 עכשיו, במאמר מוסגר, תקבל לב כוכבים זה, כוכבי, 530 00:25:47,286 --> 00:25:48,660 זה בסוף התוכניות שלי. 531 00:25:48,660 --> 00:25:50,201 והם גם להופיע בירוק. 532 00:25:50,201 --> 00:25:53,970 זה פשוט דרכו של CS50 IDE של cluing אותך לתוך העובדה 533 00:25:53,970 --> 00:25:55,280 כי זה לא קוד המקור. 534 00:25:55,280 --> 00:25:58,880 זהו קובץ הפעלה, runnable תוכנית שאתה באמת יכול לרוץ 535 00:25:58,880 --> 00:26:01,020 על ידי עושה לוכסן נקודה, ואז זה שם. 536 00:26:01,020 --> 00:26:05,860 >> עכשיו, תן לי להמשיך ולהסיר זה, rm שלום, זן, להסיר קבוע 537 00:26:05,860 --> 00:26:08,010 להגיש שלום, כן. 538 00:26:08,010 --> 00:26:11,180 ועכשיו אם אני מקליד LS, חזרנו לנקודת hello.c. 539 00:26:11,180 --> 00:26:13,917 נסו לא למחוק שלך קוד מקור ממשי. 540 00:26:13,917 --> 00:26:16,250 למרות שישנם תכונות מובנה בתוך IDE CS50 שם 541 00:26:16,250 --> 00:26:19,870 אתה יכול לעבור היסטוריית הגרסאות אחורה בזמן אם בטעות 542 00:26:19,870 --> 00:26:23,660 למחוק משהו, לעשות להיות זהיר לפי הבקשות האלה כן או לא, 543 00:26:23,660 --> 00:26:25,381 של מה שאתה באמת רוצה לעשות. 544 00:26:25,381 --> 00:26:27,380 ואם אני הולך עד לקצה בפינה שמאלית יד כאן, 545 00:26:27,380 --> 00:26:30,696 כל מה שנשאר זה hello.c. 546 00:26:30,696 --> 00:26:32,570 אז יש אשכולות פקודות אחרות שאתה 547 00:26:32,570 --> 00:26:37,550 יכול לבצע בעולם של לינוקס, אחד מהם הוא, שוב, הפוך. 548 00:26:37,550 --> 00:26:40,180 ואנחנו הולכים לעשות התוכנית שלי עכשיו כדלקמן. 549 00:26:40,180 --> 00:26:43,270 >> במקום לעשות צלצול, במקום לעשות צלצול-o, 550 00:26:43,270 --> 00:26:45,860 אני הולך פשוט הקלד פשוטו כמשמעו, להפוך שלום. 551 00:26:45,860 --> 00:26:49,630 ועכשיו לב, אני לא הקליד לעשות hello.c. 552 00:26:49,630 --> 00:26:50,910 אני מקליד לעשות שלום. 553 00:26:50,910 --> 00:26:54,840 >> תוכנית זו תעשה את זה מגיע עם IDE CS50, ועוד 554 00:26:54,840 --> 00:26:57,090 בדרך כלל עם לינוקס, היא תוכנית זה 555 00:26:57,090 --> 00:26:59,120 הולך לעשות תוכנית בשם שלום. 556 00:26:59,120 --> 00:27:03,680 וזה הולך להניח, לפי האמנה, שאם תוכנית זו יכולה להתבצע, 557 00:27:03,680 --> 00:27:09,030 זה הולך להתבצע ממקור קובץ קוד המסתיים ג נקודה, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> אז אם אני מכה זן חברה, הודעה כי הפקודה שמקבל להורג 559 00:27:12,210 --> 00:27:14,340 הוא בעצם אף יותר לפני יותר מבעבר. 560 00:27:14,340 --> 00:27:16,670 וזה כי יש לנו IDE CS50 מוגדר מראש שיהיה 561 00:27:16,670 --> 00:27:19,878 כמה תכונות נוספות שנבנו כי אנחנו לא צריכים עדיין, אבל בקרוב. 562 00:27:19,878 --> 00:27:23,470 אבל הדבר העיקרי שיש לממש כרגע היא יש לי תוכנית שלום. 563 00:27:23,470 --> 00:27:27,080 >> אם אני אדפיס LS שוב, אני יש תוכנית שלום. 564 00:27:27,080 --> 00:27:32,070 ואני יכול להפעיל אותו עם נקודה סלאש a.out, לא, 565 00:27:32,070 --> 00:27:35,590 כי כל העניין של זה התרגיל היה שלום לוכסן נקודה. 566 00:27:35,590 --> 00:27:38,089 ועכשיו יש לי תכנית שלום העולם שלי. 567 00:27:38,089 --> 00:27:39,880 אז לנוע קדימה, אנחנו כמעט תמיד רק 568 00:27:39,880 --> 00:27:42,088 הולך לקמפל התוכניות שלנו באמצעות ביצוע הפקודה. 569 00:27:42,088 --> 00:27:45,300 ואז אנחנו הולכים להפעיל אותם על ידי נקודה סלאש, ואת שמו של התוכנית. 570 00:27:45,300 --> 00:27:49,610 אבל מבין מה לעשות הוא עושה עבור אתה, זה הוא עצמו לא מהדר. 571 00:27:49,610 --> 00:27:53,310 זה פשוט תוכנית נוחות שיודע להפעיל מהדר 572 00:27:53,310 --> 00:27:56,470 כך לרוץ כי אתה עצמך יכול להשתמש בו. 573 00:27:56,470 --> 00:28:00,220 >> מה פקודות אחרות להתקיים לינוקס, ו בתורו את IDE CS50? 574 00:28:00,220 --> 00:28:03,107 אנו בקרוב לראות שיש CD פקודה, שנת מדריך. 575 00:28:03,107 --> 00:28:05,190 זה מאפשר לך בתוך ממשק שורת הפקודה שלך 576 00:28:05,190 --> 00:28:07,610 כדי להתקדם, ובחזרה, ולפתוח תיקיות שונות 577 00:28:07,610 --> 00:28:08,860 ללא שימוש בעכבר. 578 00:28:08,860 --> 00:28:12,470 >> LS ראינו, אשר מייצג רשימה את הקבצים בספרייה הנוכחית. 579 00:28:12,470 --> 00:28:14,650 הפוך דיר, אתה יכול כנראה מתחיל להסיק 580 00:28:14,650 --> 00:28:18,150 מה אלה אומרים now-- לעשות בספרייה, אם אתה רוצה ליצור תיקייה. 581 00:28:18,150 --> 00:28:21,270 RM עבור הסרת RM דיר עבור להסיר directory-- ואלה, 582 00:28:21,270 --> 00:28:24,160 שוב, הם שורת הפקודה ושווי של מה שאתה 583 00:28:24,160 --> 00:28:26,945 יכול לעשות CS50 IDE עם העכבר. 584 00:28:26,945 --> 00:28:28,820 אבל בקרוב תוכל למצוא כי לפעמים זה פשוט 585 00:28:28,820 --> 00:28:30,610 הרבה יותר מהר לעשות דברים עם מקלדת, 586 00:28:30,610 --> 00:28:33,690 ובסופו של דבר הרבה יותר חזק. 587 00:28:33,690 --> 00:28:36,440 >> אבל קשה לטעון כי דבר שעשינו עד כה 588 00:28:36,440 --> 00:28:39,990 כל זה עוצמה, כאשר כל אנחנו כבר אומרים הוא, hello world. 589 00:28:39,990 --> 00:28:43,740 ואכן, אני hardcoded מילים hello world לתוכנית שלי. 590 00:28:43,740 --> 00:28:45,530 אין דינמי עדיין. 591 00:28:45,530 --> 00:28:49,320 Scratch היה בסדר גודל יותר מעניין בשבוע שעבר. 592 00:28:49,320 --> 00:28:51,220 >> וכך בוא להגיע לשם. 593 00:28:51,220 --> 00:28:55,310 בואו ניקח צעד לקראת שעד הדרך של חלק מהפעולות הללו. 594 00:28:55,310 --> 00:28:59,470 אז לא רק C לבוא עם printf, וזרי פונקציות אחרות 595 00:28:59,470 --> 00:29:01,850 שחלקם נראים לאורך זמן, זה לא 596 00:29:01,850 --> 00:29:05,760 לעשות את זה כל כך קל היישר השער לקבל קלט משתמש. 597 00:29:05,760 --> 00:29:08,140 >> למעשה, אחת החולשות של שפות כמו C, 598 00:29:08,140 --> 00:29:10,140 ואפילו Java ובכל זאת אחרים, הוא שזה לא 599 00:29:10,140 --> 00:29:15,860 לעשות את זה קל פשוט לקבל דברים כמו מספרים שלמים ממשתמשים, או מחרוזות, מילים, 600 00:29:15,860 --> 00:29:19,970 וביטויים, קל וחומר דברים כמו צוף ערכי צבע, או מספרים ממשיים 601 00:29:19,970 --> 00:29:23,240 עם נקודות עשרוניות, ובאמת מספרים ארוכים, כפי שאנו בקרוב לראות. 602 00:29:23,240 --> 00:29:27,000 אז רשימה זו של פונקציות כאן, אלה הם כמו חלקי פאזל Scratch אחרים 603 00:29:27,000 --> 00:29:31,090 כי יש לנו מותקן מראש ב CS50 IDE כי נשתמש במשך כמה שבועות 604 00:29:31,090 --> 00:29:34,010 כמו גלגלי עזר של מיני, ועל בסופו של דבר לקחת אותם, ולחפש 605 00:29:34,010 --> 00:29:37,210 מתחת למכסה המנוע, אולי, איך הדברים האלה מיושמים. 606 00:29:37,210 --> 00:29:40,460 >> אבל כדי לעשות זאת, בואו למעשה לכתוב תוכנית. 607 00:29:40,460 --> 00:29:41,770 תן לי ללכת קדימה עכשיו. 608 00:29:41,770 --> 00:29:44,750 ואני הולך ליצור חדש קובץ על ידי לחיצה בתוספת הקטנה הזה, 609 00:29:44,750 --> 00:29:45,970 ולחיצת קובץ חדש. 610 00:29:45,970 --> 00:29:49,250 >> אני הולך לחסוך הבא אחד כמו, נניח, string.c, 611 00:29:49,250 --> 00:29:50,750 כי אני רוצה לשחק עם מחרוזות. 612 00:29:50,750 --> 00:29:53,990 ומחרוזת ב- C היא רק רצף של תווים. 613 00:29:53,990 --> 00:29:56,090 אז עכשיו בואו נלך קדימה ובצע את הפעולות הבאות. 614 00:29:56,090 --> 00:30:01,204 >> כלול תקן IO.h-- ו מתברר תקן IO, 615 00:30:01,204 --> 00:30:03,360 IO רק אומר קלט ופלט. 616 00:30:03,360 --> 00:30:05,920 אז מתברר כי הקו הזה כאן הוא מה 617 00:30:05,920 --> 00:30:08,140 היש השכנות לנו להשתמש printf. 618 00:30:08,140 --> 00:30:10,410 Printf, כמובן, מפיקה פלט. 619 00:30:10,410 --> 00:30:15,000 אז כדי להשתמש printf, מסתבר מתוך אתה צריך שיהיה לך את שורת הקוד 620 00:30:15,000 --> 00:30:16,040 בחלק העליון של הקובץ שלך. 621 00:30:16,040 --> 00:30:18,456 >> ואנחנו נחזור למה זה באמת אומר לפני זמן רב. 622 00:30:18,456 --> 00:30:20,400 מתברר כי ב כל תוכנית C אני כותב, 623 00:30:20,400 --> 00:30:23,640 אני מוכרח להתחיל אותו עם קוד זה נראה ככה. 624 00:30:23,640 --> 00:30:26,860 ותבחין CS50 IDE, וכן פיתוח משולב אחרים 625 00:30:26,860 --> 00:30:30,050 סביבות כמו זה, הולכים לנסות כמיטב 626 00:30:30,050 --> 00:30:31,780 הם יכולים לסיים המחשבה שלך. 627 00:30:31,780 --> 00:30:35,930 למעשה, רגע לפני אם אני לבטל מה בדיוק עשיתי, אני מכה על Enter. 628 00:30:35,930 --> 00:30:39,160 >> אז אני מכה מתולתל פתוח וכתפיות, על Enter שוב. 629 00:30:39,160 --> 00:30:40,430 וזה סיים את המחשבה שלי. 630 00:30:40,430 --> 00:30:45,140 זה נתן לי קו חדש, מסוכסך לא פחות מסיבות סגנונית נחמדות נראים. 631 00:30:45,140 --> 00:30:48,559 ואז זה אוטומטית נתן לי סד מתולתל לסיים המחשבה שלי. 632 00:30:48,559 --> 00:30:50,600 עכשיו, זה לא תמיד נחשו מה שאתה רוצה לעשות. 633 00:30:50,600 --> 00:30:53,620 אבל במידה רבה, זה עושה לחסוך לכם קצת הקשות. 634 00:30:53,620 --> 00:30:59,560 אז לפני רגע, רצנו program-- זה שלום, עולם, ולאחר מכן הידור זה, 635 00:30:59,560 --> 00:31:00,460 ואחר כך העביר אותה. 636 00:31:00,460 --> 00:31:01,867 אבל אין הדינמיות כאן. 637 00:31:01,867 --> 00:31:03,700 מה אם אנחנו רוצים לעשות משהו שונה? 638 00:31:03,700 --> 00:31:07,630 ובכן, מה אם אני רוצה באמת לקבל מחרוזת מהמשתמש? 639 00:31:07,630 --> 00:31:11,250 אני הולך להשתמש פיסת הפאזל קרא בדיוק ש-- לקבל מחרוזת. 640 00:31:11,250 --> 00:31:15,860 >> מסתבר ב- C שכאשר אתה לא רוצה כדי לספק קלט חתיכת פאזל, 641 00:31:15,860 --> 00:31:19,360 או יותר כראוי לפונקציה, אתה פשוטו כמשמעו פשוט לעשות סוגריים פתוחים, 642 00:31:19,360 --> 00:31:20,430 בסוגריים קרובים. 643 00:31:20,430 --> 00:31:25,540 אז זה כאילו יש אין קופסה לבנה להקליד. 644 00:31:25,540 --> 00:31:27,720 הבלוק תניח לפני הייתה קופסא לבנה קטנה. 645 00:31:27,720 --> 00:31:29,660 אין לנו כי קופסה לבנה עכשיו. 646 00:31:29,660 --> 00:31:33,310 >> אבל כאשר אני קורא מחרוזת מקבל, אני רוצה לשים את התוצאה איפשהו. 647 00:31:33,310 --> 00:31:37,680 אז פרדיגמה נפוצה מאוד ב- C היא לקרוא לפונקציה, כמו מחרוזת להגיע לכאן, 648 00:31:37,680 --> 00:31:41,070 ולאחר מכן לאחסן ערך החזרה שלה. 649 00:31:41,070 --> 00:31:44,450 זוהי התוצאה של שלו מאמץ במשהו. 650 00:31:44,450 --> 00:31:47,630 >> ומהי לבנות בתכנות, 651 00:31:47,630 --> 00:31:53,450 בין אם גירוד או חברת C, כי אנחנו יכול להשתמש בו כדי לאחסן משהו באמת? 652 00:31:53,450 --> 00:31:55,990 קרא לזה משתנה, נכון? 653 00:31:55,990 --> 00:32:00,320 ובכל Scratch, שאנחנו לא באמת אכפת מה קורה במשתנים. 654 00:32:00,320 --> 00:32:02,170 >> אבל במקרה הזה, אנחנו באמת עושים. 655 00:32:02,170 --> 00:32:03,719 אני הולך לומר מחרוזת. 656 00:32:03,719 --> 00:32:05,510 ואז יכולתי לקרוא זה כל מה שאני רוצה. 657 00:32:05,510 --> 00:32:08,340 אני הולך לקרוא לזה שם, מקבל מקבל מחרוזת. 658 00:32:08,340 --> 00:32:10,250 >> ועכשיו גם אם אתה חדש קטן זה, 659 00:32:10,250 --> 00:32:11,984 שם לב שאני חסר איזה פרט. 660 00:32:11,984 --> 00:32:13,150 אני שוכח בנקודה פסיק. 661 00:32:13,150 --> 00:32:14,400 אני צריך לסיים את המחשבה הזאת. 662 00:32:14,400 --> 00:32:17,480 אז אני הולך להזיז את הסמן שלי, והכה-פסיק שם. 663 00:32:17,480 --> 00:32:19,130 ומה יש לי רק לעשות? 664 00:32:19,130 --> 00:32:21,440 בקו הזה של קוד, מספר 5 כרגע, 665 00:32:21,440 --> 00:32:23,799 אני מתקשר מחרוזת גט ללא תשומות. 666 00:32:23,799 --> 00:32:26,090 אז אין שום מעט לבן תיבה בדומה לאזור השמור יש. 667 00:32:26,090 --> 00:32:28,590 >> אני רק אומר, היי, מחשב, להשיג לי מחרוזת. 668 00:32:28,590 --> 00:32:31,390 סימן השוויון הוא לא באמת סימן שוויון, כשלעצמה. 669 00:32:31,390 --> 00:32:33,790 זה המשימה מפעיל, כלומר, 670 00:32:33,790 --> 00:32:37,860 היי, מחשב, הזז את הערך מימין למעלה משמאל. 671 00:32:37,860 --> 00:32:40,480 וגם משמאל, יש לי את הדברים הבאים. 672 00:32:40,480 --> 00:32:43,580 >> היי, המחשב, תן לי string-- רצף של תווים. 673 00:32:43,580 --> 00:32:45,637 ולקרוא כי שם מחרוזת. 674 00:32:45,637 --> 00:32:47,220 ואני אפילו לא צריך לקרוא לזה שם. 675 00:32:47,220 --> 00:32:49,970 >> יכולתי לקרוא לזה, כמקובל, משהו כמו S, 676 00:32:49,970 --> 00:32:52,900 בדומה השתמשנו ט קוראים המשתנים i. 677 00:32:52,900 --> 00:32:54,829 אבל עכשיו אני צריך לעשות עם זה משהו. 678 00:32:54,829 --> 00:32:57,370 זה יהיה די טיפשי לנסות להרכיב את הקוד הזה, ריצה 679 00:32:57,370 --> 00:32:59,410 תוכנית זו, למרות אני מקבל מחרוזת, 680 00:32:59,410 --> 00:33:01,580 כי זה עדיין רק מתכוון לומר לי שלום העולם. 681 00:33:01,580 --> 00:33:06,140 >> אבל מה אם אני רוצה לשנות את זה. 682 00:33:06,140 --> 00:33:07,940 למה אני לא עושה את זה? 683 00:33:07,940 --> 00:33:11,632 ים אחוז, פסיק הים. 684 00:33:11,632 --> 00:33:13,090 וזה לא ברור מספיק עדיין. 685 00:33:13,090 --> 00:33:15,560 >> אז תן לי לעשות המשתנים שלי יותר ברורים. 686 00:33:15,560 --> 00:33:17,510 תן לי שם שם משתנה זה. 687 00:33:17,510 --> 00:33:20,230 ובואו נראה אם ​​אנחנו לא יכולים להקניט מלבד מה שקורה כאן. 688 00:33:20,230 --> 00:33:22,770 >> אז על קו חמש, אני מקבל מחרוזת. 689 00:33:22,770 --> 00:33:25,620 ואני לאחסון מחרוזת, מה שהמשתמש הקליד 690 00:33:25,620 --> 00:33:28,430 על המקלדת שלו או שלה, במשתנה שנקרא שם. 691 00:33:28,430 --> 00:33:30,590 ומתברר כי printf לא רק 692 00:33:30,590 --> 00:33:34,220 לקחת טיעון אחד כפול ציטוטים, קלט אחד במרכאות כפולות. 693 00:33:34,220 --> 00:33:39,100 >> זה יכול לקחת שניים או שלושה, או יותר, כגון כי השני, או שלישי, או רביעי, 694 00:33:39,100 --> 00:33:42,320 הם כל השמות משתנים, או ערכי במיוחד, 695 00:33:42,320 --> 00:33:48,610 כי אתה רוצה לחבר אל, באופן דינמי, מחרוזת במרכאות. 696 00:33:48,610 --> 00:33:52,110 במילים אחרות, מה יהיה בסדר עם זה? 697 00:33:52,110 --> 00:33:57,920 אם אני רק אמרתי שלום שם, קו נטוי הפוך n, הציל את התיק שלי, הידור הקוד שלי, 698 00:33:57,920 --> 00:34:01,660 ורץ זו, מה יקרה? 699 00:34:01,660 --> 00:34:05,139 >> זה פשוט הולך להגיד, שלום שם, פשוטו כמשמעו N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 וזה די טיפשי כי זה לא שונה מהעולם. 701 00:34:07,900 --> 00:34:10,400 אז דבר במרכאות הוא מה ממש יודפס. 702 00:34:10,400 --> 00:34:12,520 אז אם אני רוצה שיהיה לי מציין מיקום שם, 703 00:34:12,520 --> 00:34:14,422 אני באמת צריך להשתמש כמה תחביר מיוחד. 704 00:34:14,422 --> 00:34:17,380 ומתברר אם אתה קורא את בתיעוד של הפונקציה printf, 705 00:34:17,380 --> 00:34:21,320 זה יגיד לך את זה אם אתה משתמש s אחוזים, 706 00:34:21,320 --> 00:34:23,920 תוכל להחליף ערך כדלקמן. 707 00:34:23,920 --> 00:34:27,190 >> לאחר פסיק אחרי זה מרכאות כפולות, אתה פשוט 708 00:34:27,190 --> 00:34:29,179 לכתוב את השם של המשתנה שאתה רוצה 709 00:34:29,179 --> 00:34:33,790 לחבר לתוך התבנית קוד, או מציינים בפורמט, 710 00:34:33,790 --> 00:34:35,469 s אחוזים עבור מחרוזות. 711 00:34:35,469 --> 00:34:39,190 ועכשיו אם שמרתי את התיק שלי, אני חוזר אל המסוף שלי. 712 00:34:39,190 --> 00:34:42,870 ואני להקליד הפוך המיתרים, כי, שוב, בשם זה 713 00:34:42,870 --> 00:34:45,510 קובץ שבחרתי לפני הוא string.c. 714 00:34:45,510 --> 00:34:48,510 >> אז אני הולך להגיד הפוך מחרוזת, זן. 715 00:34:48,510 --> 00:34:51,550 אלוהים אדירים, מסתכל על כל הטעויות שעשינו כבר. 716 00:34:51,550 --> 00:34:55,540 וזה אז-- מה, זה באמת כמו תוכנית קו שש, שבע? 717 00:34:55,540 --> 00:34:57,790 אז זה המקום שבו זה יכול מאוד מהר לקבל מכריע. 718 00:34:57,790 --> 00:35:00,890 >> חלון מסוף זה יש עכשיו רק שחזרה בה 719 00:35:00,890 --> 00:35:03,230 מספר עצום של הודעות שגיאה. 720 00:35:03,230 --> 00:35:07,560 אין ספק, אין לי שגיאה יותר יש הודעות ממה שאני שורות קוד. 721 00:35:07,560 --> 00:35:08,680 אז מה קורה פה? 722 00:35:08,680 --> 00:35:10,920 >> ובכן, האסטרטגיה הטובה ביותר כדי לעשות זאת בכל עת לך 723 00:35:10,920 --> 00:35:13,710 אל נתקלים המכריע רשימה של טעויות כאלה, 724 00:35:13,710 --> 00:35:16,690 הוא לגלול אחורה, לחפש את הפקודה אתה פשוט רץ, שבמקרה שלי 725 00:35:16,690 --> 00:35:18,020 הוא להפוך מחרוזת. 726 00:35:18,020 --> 00:35:21,630 תראה מה עושה עשה, וזהו פקודה ארוכה קלאנג, לא ביג דיל שם. 727 00:35:21,630 --> 00:35:22,950 >> אבל אדום זה רע. 728 00:35:22,950 --> 00:35:24,750 גרין מנסה להיות עדין ומועיל. 729 00:35:24,750 --> 00:35:26,140 אבל זה עדיין רע, במקרה זה. 730 00:35:26,140 --> 00:35:27,510 אבל איפה זה רע? 731 00:35:27,510 --> 00:35:31,450 >> String.c, קו חמש, אופי חמש. 732 00:35:31,450 --> 00:35:32,930 אז זה רק כנס משותף. 733 00:35:32,930 --> 00:35:36,060 משהו נקודות משהו אומר מספר הקו ומספר הדמות. 734 00:35:36,060 --> 00:35:41,080 שגיאה, שימוש לא מוצהר מחרוזת מזהה. 735 00:35:41,080 --> 00:35:42,900 האם התכוונת סטנדרטי? 736 00:35:42,900 --> 00:35:45,530 >> לכן, למרבה הצער, קלאנג מנסה להיות מועיל. 737 00:35:45,530 --> 00:35:46,850 אבל זה לא נכון, במקרה הזה. 738 00:35:46,850 --> 00:35:49,350 לא, קלאנג, לא התכוונתי תקן IO. 739 00:35:49,350 --> 00:35:51,070 התכוונתי כי בשורה אחת, כן. 740 00:35:51,070 --> 00:35:53,420 >> אבל קו חמש הוא אחד זה כאן. 741 00:35:53,420 --> 00:35:57,040 ו קלאנג לא להבין S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 זהו מזהה מוצהר, מילה זה פשוט מעולם לא ראה לפני כן. 743 00:36:01,490 --> 00:36:05,730 וזה משום C, השפה אנחנו כותבים קוד ב עכשיו, 744 00:36:05,730 --> 00:36:08,070 אין משתנה בשם בחוטים. 745 00:36:08,070 --> 00:36:11,380 >> זה לא, כברירת מחדל, תמיכה משהו שנקרא מחרוזת. 746 00:36:11,380 --> 00:36:16,750 זה חתיכת CS50 של בז'רגון, אבל מאוד קונבנציונאלי. 747 00:36:16,750 --> 00:36:18,600 אבל אני יכול לתקן את זה כדלקמן. 748 00:36:18,600 --> 00:36:22,090 >> אם אני מוסיף שורה אחת של קוד לחלק העליון של תכנית זו, 749 00:36:22,090 --> 00:36:27,890 כולל CS50.h, שהוא קובץ אחר איפשהו בתוך CS50 IDE, איפשהו 750 00:36:27,890 --> 00:36:30,820 על הכונן הקשיח, אם אפשר לומר כך, של מערכת ההפעלה אובונטו 751 00:36:30,820 --> 00:36:33,590 כי אני רצתי, כי הקובץ הוא זה 752 00:36:33,590 --> 00:36:38,740 הולך ללמד את ההפעלה מערכה מה מחרוזת הוא, רק 753 00:36:38,740 --> 00:36:41,930 כמו io.h הסטנדרטי הוא הקובץ במערכת ההפעלה זה 754 00:36:41,930 --> 00:36:44,430 הולך ללמד אותו מה הוא printf. 755 00:36:44,430 --> 00:36:46,810 >> ואכן, היינו התבגרתי הודעה דומה מאוד 756 00:36:46,810 --> 00:36:50,600 אם IO הודה תקן IO.h וניסה להשתמש printf. 757 00:36:50,600 --> 00:36:53,632 אז אני הולך קדימה ופשוט להשתלט L כדי לנקות את המסך שלי. 758 00:36:53,632 --> 00:36:56,340 או שאתה יכול להקליד ברור וזה יהיה רק לנקות את חלון המסוף. 759 00:36:56,340 --> 00:36:58,020 אבל אתה עדיין יכול לגלול אחורה בזמן. 760 00:36:58,020 --> 00:37:01,100 >> ואני הולך להפעיל מחדש הפוך מחרוזת. 761 00:37:01,100 --> 00:37:03,660 תחזיק אצבעות שלי הפעם, Enter. 762 00:37:03,660 --> 00:37:05,380 אוי אלוהים, זה עבד. 763 00:37:05,380 --> 00:37:09,280 זה מראה לי פקודה ארוכה נסתרה זה מה להרוויח שנוצר באמצעות קלאנג, 764 00:37:09,280 --> 00:37:10,460 אבל אין הודעות שגיאה. 765 00:37:10,460 --> 00:37:12,460 אז להבין, למרות אתה עלול לקבל לחלוטין 766 00:37:12,460 --> 00:37:14,480 מוצף מספר הודעות שגיאה, 767 00:37:14,480 --> 00:37:17,540 זה רק יכול להיות מדורג מעצבן זה אפקט, שבו קלאנג לא מבין 768 00:37:17,540 --> 00:37:19,620 דבר אחד, מה שאומר שזה אז לא מבין את המילה הבאה, 769 00:37:19,620 --> 00:37:20,560 או לשורה הבאה. 770 00:37:20,560 --> 00:37:22,850 וכך זה פשוט חונק על הקוד שלך. 771 00:37:22,850 --> 00:37:24,440 אבל התיקון עשוי להיות פשוט. 772 00:37:24,440 --> 00:37:27,822 וכך תמיד להתמקד השורה הראשונה של פלט. 773 00:37:27,822 --> 00:37:29,530 ואם לא תעשה זאת להבין את זה, רק להסתכל 774 00:37:29,530 --> 00:37:32,480 עבור מילות מפתח שעשוי להיות רמזים, ואת מספר השורה, 775 00:37:32,480 --> 00:37:34,650 ואת האופי, שם טעות זה יכול להיות. 776 00:37:34,650 --> 00:37:40,328 >> עכשיו תן לי ללכת קדימה להקליד נקודת סלאש, מחרוזת, זן. 777 00:37:40,328 --> 00:37:44,340 Hm, זה לא אומר שלום כלום. 778 00:37:44,340 --> 00:37:46,210 למה? 779 00:37:46,210 --> 00:37:48,170 ובכן, זוכר איפה הוא פועל? 780 00:37:48,170 --> 00:37:53,730 >> זה כנראה תקוע כרגע בתוך לולאה, אם תרצו, על קו שש, 781 00:37:53,730 --> 00:37:56,950 כי קבל מחרוזת ידי עיצוב, נכתב על ידי צוות CS50, 782 00:37:56,950 --> 00:38:00,350 נועד ממש פשוט לשבת שם מחכה, ומחכה, 783 00:38:00,350 --> 00:38:01,850 ומחכה מחרוזת. 784 00:38:01,850 --> 00:38:03,792 כל מה שאנחנו מתכוונים מחרוזת הוא קלט אנושי. 785 00:38:03,792 --> 00:38:04,500 אז אתה יודע מה? 786 00:38:04,500 --> 00:38:05,166 תן לי ללכת קדימה. 787 00:38:05,166 --> 00:38:08,704 ובדיוק על גחמה, תן לי הקלד את השם שלי, דוד, הזן. 788 00:38:08,704 --> 00:38:10,120 עכשיו יש לי תוכנית דינמית יותר. 789 00:38:10,120 --> 00:38:11,240 היה כתוב שם, שלום דוד. 790 00:38:11,240 --> 00:38:16,280 >> אם אני הולך קדימה ולרוץ זה שוב, תן לי לנסות להגיד את שם Zamila, זן. 791 00:38:16,280 --> 00:38:17,940 ועכשיו יש לנו תוכנית דינמית. 792 00:38:17,940 --> 00:38:19,380 אני לא מקודד קשה בעולם. 793 00:38:19,380 --> 00:38:21,760 אני לא מקודד קשה שם, או דוד, או Zamila. 794 00:38:21,760 --> 00:38:25,350 >> עכשיו זה הרבה יותר כמו התוכניות אנחנו יודעים, שאם זה לקחת קלט, 795 00:38:25,350 --> 00:38:27,870 היא מייצרת פלט שונה במקצת. 796 00:38:27,870 --> 00:38:31,020 עכשיו, זה לא הכי טוב חוויית המשתמש, או UX. 797 00:38:31,020 --> 00:38:33,000 אני מנהל את התוכנית. 798 00:38:33,000 --> 00:38:35,830 >> אני לא יודע מה אני אמור לעשות, אלא אם כן אני ממש מסתכל 799 00:38:35,830 --> 00:38:37,290 או לזכור את קוד המקור. 800 00:38:37,290 --> 00:38:39,640 אז בואו נעשה את המשתמש לחוות קצת יותר טוב 801 00:38:39,640 --> 00:38:41,240 עם את הדברים הפשוטים ביותר. 802 00:38:41,240 --> 00:38:44,782 תן לי לחזור לתוך זה התוכנית, ופשוט לומר printf. 803 00:38:44,782 --> 00:38:48,870 >> ותן לי באים ואומרים שם, מעי גס, וכן שטח ולאחר מכן נקודת פסיק. 804 00:38:48,870 --> 00:38:51,170 ובדיוק בשביל כיף, לא n החריף. 805 00:38:51,170 --> 00:38:52,980 וזה מכוון, כי אני לא רוצה 806 00:38:52,980 --> 00:38:54,590 הבשורה לעבור לשורה הבאה. 807 00:38:54,590 --> 00:38:58,800 >> אני רוצה, במקום, לעשות את זה, לעשות מחרוזת להדר מחדש את הקוד שלי לתוך מכונה חדש 808 00:38:58,800 --> 00:39:00,980 קוד נקודה סלאש מחרוזת. 809 00:39:00,980 --> 00:39:02,460 אה, זה הרבה יותר יפה. 810 00:39:02,460 --> 00:39:05,780 עכשיו אני באמת יודע מה המחשב רוצה שתעשה, נותן לו שם. 811 00:39:05,780 --> 00:39:10,020 >> אז אני הולך קדימה, הקלד ב רוב, הזן, ואת שלום, רוב. 812 00:39:10,020 --> 00:39:13,640 אז, להבין, זה עדיין, בסוף היום, תוכנית קו תשע בלבד. 813 00:39:13,640 --> 00:39:15,090 אבל ביצענו את הפעולות אלה התינוק. 814 00:39:15,090 --> 00:39:18,380 >> כתבנו שורה אחת שבה אנו מוכר, printf היו, hello world. 815 00:39:18,380 --> 00:39:19,980 אז אנחנו התרנו קצת זה. 816 00:39:19,980 --> 00:39:21,560 ואנחנו נעשינו שימוש בפועל מחרוזת גט. 817 00:39:21,560 --> 00:39:23,362 ואנחנו השלכנו ערך במשתנה. 818 00:39:23,362 --> 00:39:26,070 ואז הלכנו קדימה ומשופר זה עוד יותר עם שורה שלישית. 819 00:39:26,070 --> 00:39:29,220 וזה תהליך חוזר ונשנה זה של כתיבת תוכנה היא באמת מפתח. 820 00:39:29,220 --> 00:39:33,420 ב CS50, ובחיים בכלל, לא כדאי בדרך כלל לשבת, 821 00:39:33,420 --> 00:39:36,800 יש תוכנית בראש, ולנסות בכתב הדבר הארור בבת אחת. 822 00:39:36,800 --> 00:39:40,810 >> זה יהיה, בהכרח, לגרום בדרך יותר טעויות ממה שאנחנו עצמנו ראו כאן. 823 00:39:40,810 --> 00:39:44,070 אפילו אני, עד עצם היום הזה, כל זמן עושה טעויות טיפשיות אחרות, 824 00:39:44,070 --> 00:39:47,480 הם אכן שגיאות יותר כי קשה יותר להבין. 825 00:39:47,480 --> 00:39:52,095 אבל אתה תעשה יותר טעויות יותר שורות קוד שאתה כותב בבת אחת. 826 00:39:52,095 --> 00:39:54,220 וכך נוהג זה של, לכתוב קצת קוד קטן 827 00:39:54,220 --> 00:39:57,930 כי אתה מרגיש בנוח עם, לקמפל זה, להפעיל אותו, לבדוק את זה באופן כללי יותר, 828 00:39:57,930 --> 00:40:01,370 ואז לעבור on-- כל כך פשוט כמו ששמרנו שכבות ו שכבות בשבוע שעבר, 829 00:40:01,370 --> 00:40:04,190 בניית ממשהו מאוד פשוט משהו יותר מורכב, 830 00:40:04,190 --> 00:40:05,200 לעשות את אותו הדבר כאן. 831 00:40:05,200 --> 00:40:08,500 לא לשבת, ולנסות לכתוב הבעיה כולה. 832 00:40:08,500 --> 00:40:10,780 למעשה לנקוט צעדים אלה התינוק. 833 00:40:10,780 --> 00:40:15,100 >> עכשיו, מחרוזות אינן כל כי שימושי בפני עצמה. 834 00:40:15,100 --> 00:40:18,210 היינו למעשה, באופן אידיאלי, כמו כדי יש משהו אחר ערכת הכלים שלנו. 835 00:40:18,210 --> 00:40:20,990 אז בואו באמת לעשות בדיוק את זה. 836 00:40:20,990 --> 00:40:24,900 >> תן לי ללכת קדימה עכשיו להלהיב תוכנית שונה במקצת. 837 00:40:24,900 --> 00:40:28,320 ואנחנו נתקשר int.c זה, עבור מספר שלם. 838 00:40:28,320 --> 00:40:30,870 אני הולך, באופן דומה, כולל CS550.h. 839 00:40:30,870 --> 00:40:33,060 אני הולך לכלול תקן IO. 840 00:40:33,060 --> 00:40:36,630 וזה הולך להיות די נפוץ בימים הראשונים האלה של המעמד. 841 00:40:36,630 --> 00:40:39,050 >> ואני הולך מוכן עצמי עם פונקציה עיקרית. 842 00:40:39,050 --> 00:40:43,370 ועכשיו במקום לקבל מחרוזת, בואו נלך קדימה ולקבל int. 843 00:40:43,370 --> 00:40:49,285 בואו לקרוא את זה אני, וקוראים לזה לקבל int, סימני סגור סוגריים, פסיק. 844 00:40:49,285 --> 00:40:51,410 ועכשיו בואו נעשה עם זה משהו, printf. 845 00:40:51,410 --> 00:40:56,190 >> נניח משהו כמו שלום, מהלך סרק n, פסיק i. 846 00:40:56,190 --> 00:41:00,010 אז אני פחות או יותר מחקתי מה שעשיתי עד לפני רגע. 847 00:41:00,010 --> 00:41:01,660 יש לי מציין מיקום כאן. 848 00:41:01,660 --> 00:41:05,150 יש לי פסיק אני כאן, כי אני רוצה כדי לסתום לי לתוך מציין מיקום. 849 00:41:05,150 --> 00:41:07,250 >> אז בואו להמשיך ולנסות קומפילציה תוכנית זו. 850 00:41:07,250 --> 00:41:10,060 הקובץ נקרא int.c. 851 00:41:10,060 --> 00:41:12,920 אז אני הולך להגיד, לעשות int, זן. 852 00:41:12,920 --> 00:41:16,420 אוי אלוהים, אבל לא ביג דיל, נכון? 853 00:41:16,420 --> 00:41:17,230 יש טעות. 854 00:41:17,230 --> 00:41:19,810 >> יש טעות תחבירית כאן הוא כזה, התכנית לא יכולה 855 00:41:19,810 --> 00:41:25,460 הידור בתוך int.c, קו שבע, אופי 27, בפורמט שגיאה 856 00:41:25,460 --> 00:41:28,400 מציין סוג char לככב, מה שזה לא יהיה. 857 00:41:28,400 --> 00:41:30,020 אבל את סוג הטיעון הוא int. 858 00:41:30,020 --> 00:41:33,110 >> אז הנה, גם אנחנו לא הולכים עם-- למרות שכיום הוא הרבה חומר, 859 00:41:33,110 --> 00:41:35,710 אנחנו הולכים להציף אותך עם בהחלט כל תכונה של C, 860 00:41:35,710 --> 00:41:38,070 תכנות באופן כללי יותר, רק בשבועות הראשונים האלה. 861 00:41:38,070 --> 00:41:40,400 לכן לעתים קרובות יש הולך להיות בז'רגון שבה אתה לא מכיר. 862 00:41:40,400 --> 00:41:43,350 ואכן, כוכב char הוא משהו אנחנו הולכים לחזור 863 00:41:43,350 --> 00:41:44,830 בעוד שבוע או זמן של השני. 864 00:41:44,830 --> 00:41:47,530 >> אבל לעת עתה, בואו נראה אם ​​אנחנו יכולים לנתח מילים שאינן מוכרות. 865 00:41:47,530 --> 00:41:50,750 Formats-- כך שמענו בפורמט מציין, קוד בפורמט לפני. 866 00:41:50,750 --> 00:41:51,840 זה מוכר. 867 00:41:51,840 --> 00:41:53,840 Type-- אבל הטיעון יש int סוג. 868 00:41:53,840 --> 00:41:55,980 חכה רגע, אני הוא int. 869 00:41:55,980 --> 00:41:59,230 >> אולי s אחוזים למעשה יש משמעות מוגדרת. 870 00:41:59,230 --> 00:42:00,230 ואכן, היא עושה. 871 00:42:00,230 --> 00:42:03,101 מספר שלם, אם אתה רוצה printf כדי להחליף אותו, 872 00:42:03,101 --> 00:42:05,350 אתה באמת צריך להשתמש מציין בפורמט שונה. 873 00:42:05,350 --> 00:42:06,890 ואתה לא היית יודע את זה אלא אם מישהו היה אומר לך, 874 00:42:06,890 --> 00:42:07,973 או שאתה עשית את זה קודם. 875 00:42:07,973 --> 00:42:10,490 אבל אני אחוז מה ניתן נפוץ 876 00:42:10,490 --> 00:42:12,240 ב printf עבור חיבור שלם. 877 00:42:12,240 --> 00:42:14,920 אתה יכול גם להשתמש אחוזים ד עבור מספר שלם עשרוני. 878 00:42:14,920 --> 00:42:16,490 אבל אני הוא נחמד ופשוט כאן. 879 00:42:16,490 --> 00:42:17,590 אז אנחנו נלך עם זה. 880 00:42:17,590 --> 00:42:21,160 >> עכשיו תן לי ללכת קדימה שידור חוזר לעשות int, Enter. 881 00:42:21,160 --> 00:42:23,328 זה טוב, ללא שגיאות. 882 00:42:23,328 --> 00:42:27,260 Dot סלאש אישור int--, חוויית המשתמש רע, כי לא אמרתי לעצמי 883 00:42:27,260 --> 00:42:27,760 מה לעשות. 884 00:42:27,760 --> 00:42:28,426 אבל זה בסדר. 885 00:42:28,426 --> 00:42:29,480 אני תופס מהר. 886 00:42:29,480 --> 00:42:36,260 >> ועכשיו תן לי ללכת קדימה להקליד דוד, בסדר, Zamila, רוב. 887 00:42:36,260 --> 00:42:37,820 אוקיי, אז זה דבר טוב. 888 00:42:37,820 --> 00:42:41,710 הפעם, אני משתמש פונקציה, חתיכת פאזל, שנקראת int גט. 889 00:42:41,710 --> 00:42:44,230 וזה הופך out-- ואנו בהמשך זה term-- 890 00:42:44,230 --> 00:42:47,730 צוות CS50 יישם לקבל מחרוזת בצורה כזאת 891 00:42:47,730 --> 00:42:50,350 כי זה יהיה רק ​​פיזי לקבל מחרוזת בשבילך. 892 00:42:50,350 --> 00:42:54,340 >> זה יישם גט int ב באופן כזה זה יהיה רק 893 00:42:54,340 --> 00:42:55,590 לקבל מספר שלם בשבילך. 894 00:42:55,590 --> 00:42:57,830 ואם אתה, האדם, לא לשתף פעולה, זה 895 00:42:57,830 --> 00:43:00,590 פשוטו כמשמעו פשוט הולך לומר שוב, שוב, שוב, 896 00:43:00,590 --> 00:43:05,200 יושב שם ממש looping, עד אתה חסד עם כמה מספר קסום, 897 00:43:05,200 --> 00:43:07,670 כמו 50, וברכת שלום 50. 898 00:43:07,670 --> 00:43:11,440 >> או אם נריץ את זה שוב וסוג ב -42, שלום 42. 899 00:43:11,440 --> 00:43:15,750 וכך הפונקציה int הגט בתוך כי פיסת הפאזל 900 00:43:15,750 --> 00:43:19,050 היגיון מספיק, מספיק מחשבה, כדי להבין, מה היא מילה? 901 00:43:19,050 --> 00:43:20,330 ומה הוא מספר? 902 00:43:20,330 --> 00:43:23,165 רק לקבל, בסופו של דבר, מספרים. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> אז מתברר כי זו לא כל הוא כי הבעה. 905 00:43:30,230 --> 00:43:30,910 עד כה. 906 00:43:30,910 --> 00:43:33,690 אז, יש! הפעם האחרונה שאנחנו הלכתי די מהר 907 00:43:33,690 --> 00:43:38,320 לתוך משחקים ליישום, ואנימציה, ויצירות אמנותיות Scratch. 908 00:43:38,320 --> 00:43:42,260 והנה, אנחנו להיות תוכן עם שלום העולם, שלום 50. 909 00:43:42,260 --> 00:43:43,696 >> זה לא כל כך מעורר השראה. 910 00:43:43,696 --> 00:43:46,070 ואכן, תחילה אלה כמה דוגמאות תיקחנה קצת זמן 911 00:43:46,070 --> 00:43:47,510 יעלה בהתרגשות. 912 00:43:47,510 --> 00:43:49,854 אבל יש לנו כל כך הרבה יותר לשלוט עכשיו, למעשה. 913 00:43:49,854 --> 00:43:51,770 ואנחנו הולכים מאוד להתחיל במהירות שכבות 914 00:43:51,770 --> 00:43:53,870 על גבי הפרימיטיבים בסיסיים אלה. 915 00:43:53,870 --> 00:43:56,370 >> אבל קודם, בואו להבין מה הן המגבלות. 916 00:43:56,370 --> 00:43:58,620 למעשה, אחד הדברים גרד לא בקלות 917 00:43:58,620 --> 00:44:00,990 תנו לנו לעשות הוא באמת נראה מתחת למכסה המנוע, 918 00:44:00,990 --> 00:44:03,740 ולהבין איזה מחשב הוא, מה הוא יכול לעשות, 919 00:44:03,740 --> 00:44:05,250 ומה מגבלותיו הם. 920 00:44:05,250 --> 00:44:08,580 ואכן, כי חוסר הבנה, באופן פוטנציאלי, לטווח ארוך 921 00:44:08,580 --> 00:44:12,520 יכול להוביל לכתיבה mistakes-- משלנו באגים, כתיבת תוכנה מאובטחת 922 00:44:12,520 --> 00:44:13,880 נפרץ בדרך כלשהי. 923 00:44:13,880 --> 00:44:17,130 >> אז בואו לקחת כמה צעדים לכיוון הבנה טובה יותר קצת זה על ידי 924 00:44:17,130 --> 00:44:19,710 דרך, אומר, בדוגמא הבאה. 925 00:44:19,710 --> 00:44:23,550 אני הולך קדימה וליישם ממש מהר תוכנית בשם Adder. 926 00:44:23,550 --> 00:44:25,134 כאילו, בואו להוסיף קצת מספרים יחד. 927 00:44:25,134 --> 00:44:27,800 ואני הולך לקודד כמה פינות כאן, ופשוט להעתיק ולהדביק 928 00:44:27,800 --> 00:44:30,270 איפה הייתי לפני, רק כדי שנוכל להתחיל מוקדם יותר. 929 00:44:30,270 --> 00:44:33,090 אז עכשיו יש לי את ראשיתו הבסיסית של תוכנית בשם Adder. 930 00:44:33,090 --> 00:44:34,670 >> ובואו אתם מוזמנים לעשות זאת. 931 00:44:34,670 --> 00:44:38,680 אני הולך קדימה, נניח, intx מקבל לקבל int. 932 00:44:38,680 --> 00:44:39,430 ואתם יודעים מה? 933 00:44:39,430 --> 00:44:40,990 בואו נעשה את חווית משתמש טובה יותר. 934 00:44:40,990 --> 00:44:45,740 >> אז בוא נגיד x הוא, וביעילות מהמשתמש לתת לנו x. 935 00:44:45,740 --> 00:44:50,600 ואז הם נתנו לי באים ואומרים, printf מה דעתך על y הוא, הפעם מצפה 936 00:44:50,600 --> 00:44:53,140 שני ערכים מהמשתמש. 937 00:44:53,140 --> 00:44:59,759 ואז בואו פשוט להמשיך נניח, printf, סכום של x ו- y הוא. 938 00:44:59,759 --> 00:45:01,300 ועכשיו אני לא רוצה לעשות s אחוזים. 939 00:45:01,300 --> 00:45:09,080 אני רוצה לעשות אני אחוזים, מהלך סרק n, ולאחר מכן חבר בשווי סכום. 940 00:45:09,080 --> 00:45:10,620 >> אז איך אני יכול ללכת על עושה את זה? 941 00:45:10,620 --> 00:45:11,270 אתה יודע מה? 942 00:45:11,270 --> 00:45:12,840 אני יודע איך להשתמש משתנה. 943 00:45:12,840 --> 00:45:15,140 תן לי רק להכריז על אחד חדש, int z. 944 00:45:15,140 --> 00:45:16,770 >> ואני הולך לקחת ניחוש כאן. 945 00:45:16,770 --> 00:45:21,470 אם ישנם סימנים שווים זה השפה, אולי אני פשוט יכול לעשות X ועוד Y, 946 00:45:21,470 --> 00:45:23,660 כל עוד אני מסיים שלי חשבתי עם פסיק? 947 00:45:23,660 --> 00:45:28,170 עכשיו אני יכול לחזור לכאן, תקע z, לסיים את המחשבה הזאת עם-פסיק. 948 00:45:28,170 --> 00:45:33,160 ובואו לראות עכשיו, אם אלה רצפים של x lines-- הוא לקבל int. 949 00:45:33,160 --> 00:45:34,770 Y הוא לקבל int. 950 00:45:34,770 --> 00:45:37,980 >> להוסיף x ו- y, לאחסן את הערך z-- כך, שוב, זוכר את סימן השוויון 951 00:45:37,980 --> 00:45:38,560 הוא לא שווה. 952 00:45:38,560 --> 00:45:41,100 זה משימה מימין לשמאל. 953 00:45:41,100 --> 00:45:45,180 ובואו להדפיס שהסכום של x ו- y הוא לא ממש z, 954 00:45:45,180 --> 00:45:46,830 אבל מה יש בפנים של z. 955 00:45:46,830 --> 00:45:50,090 אז בואו נעשה את Adder - טעויות נחמדות, לא הפעם. 956 00:45:50,090 --> 00:45:53,030 Dot סלאש Adder, הזן, x הולך להיות 1. 957 00:45:53,030 --> 00:45:55,380 >> Y הולך להיות 2. 958 00:45:55,380 --> 00:45:58,964 ואת הסכום של x ו- y הוא 3. 959 00:45:58,964 --> 00:46:00,130 אז זה הכל טוב ויפה. 960 00:46:00,130 --> 00:46:03,260 >> אז היית לדמיין במתמטיקה כי צריך לעבוד תוכנית כזאת. 961 00:46:03,260 --> 00:46:04,040 אבל אתה יודע מה? 962 00:46:04,040 --> 00:46:06,904 האם משתנה זה, קו 12, אפילו הכרחי? 963 00:46:06,904 --> 00:46:09,820 אתה לא צריך לקבל את הרגל רק לאחסון דברים משתנים 964 00:46:09,820 --> 00:46:10,980 רק בגלל שאתה יכול. 965 00:46:10,980 --> 00:46:13,550 ואכן, זה בדרך כלל עיצוב רע שקולה 966 00:46:13,550 --> 00:46:18,100 אם אתה יוצר משתנה, נקרא z במקרה זה, אחסון משהו בתוכו, 967 00:46:18,100 --> 00:46:21,390 ומיד השימוש בו, אבל לעולם לא עוד. 968 00:46:21,390 --> 00:46:24,700 למה לתת משהו שם כמו z אם אתה ממש 969 00:46:24,700 --> 00:46:26,770 הולך להשתמש כי דבר רק פעם אחת, ולכן 970 00:46:26,770 --> 00:46:29,380 הפרוקסימלי שבו יצרת זה מלכתחילה, 971 00:46:29,380 --> 00:46:31,052 כל כך קרוב במונחים של שורות קוד? 972 00:46:31,052 --> 00:46:31,760 אז אתה יודע מה? 973 00:46:31,760 --> 00:46:34,480 מתברר כי C הוא די גמיש. 974 00:46:34,480 --> 00:46:36,586 אם אני באמת רוצה תוספת ערכים כאן, 975 00:46:36,586 --> 00:46:38,210 אני לא צריך להכריז על משתנה חדש. 976 00:46:38,210 --> 00:46:41,680 יכולתי רק תוספת X ועוד y, כי C מבין 977 00:46:41,680 --> 00:46:43,390 אריתמטיקה, ומפעיל מתמטי. 978 00:46:43,390 --> 00:46:47,140 >> אז אני יכול לומר פשוט, לעשות את המתמטיקה הזאת, X ועוד Y, מה הערכים האלה, 979 00:46:47,140 --> 00:46:50,780 תקע שהתקבל שלם לתוך אותה מחרוזת. 980 00:46:50,780 --> 00:46:53,730 אז זה יכול להיות, אם כי רק שורה אחת קצרה, 981 00:46:53,730 --> 00:46:58,480 עיצוב טוב יותר, תוכנית טובה יותר, משום שיש להם פחות קוד, ולכן 982 00:46:58,480 --> 00:46:59,921 פחות בשבילי להבין. 983 00:46:59,921 --> 00:47:01,920 וזה גם רק מנקה, ככל שאנחנו לא 984 00:47:01,920 --> 00:47:04,620 החדרת מילים חדשות, סמלים חדשים, כמו z, 985 00:47:04,620 --> 00:47:07,510 למרות שהם לא ממש לשרת הרבה של מטרה. 986 00:47:07,510 --> 00:47:12,890 >> למרבה הצער, מתמטיקה היא לא כל שלפעמים אמין. 987 00:47:12,890 --> 00:47:15,270 בואו נלך קדימה ולעשות את זה. 988 00:47:15,270 --> 00:47:18,200 אני הולך קדימה עכשיו לבצע את הפעולות הבאות. 989 00:47:18,200 --> 00:47:27,650 >> בואו לעשות printf, אני אחוז, בתוספת אחוז אני, אהיה לי אחוזים, מהלך הסרק n. 990 00:47:27,650 --> 00:47:32,240 ואני הולך לעשות זה- XYX בתוספת y. 991 00:47:32,240 --> 00:47:34,821 אז אני פשוט הולך לשכתב זה מעט שונה כאן. 992 00:47:34,821 --> 00:47:36,320 תן לי רק לבצע בדיקה בסיסית מהירה. 993 00:47:36,320 --> 00:47:37,986 שוב, הבה לא נקדים את המאוחר. 994 00:47:37,986 --> 00:47:41,420 הפוך אפעה, אפעה לוכסן נקודה. 995 00:47:41,420 --> 00:47:44,950 x הוא 1, y הוא 2, 1 ו -2 הוא 3. 996 00:47:44,950 --> 00:47:45,870 אז זה טוב. 997 00:47:45,870 --> 00:47:49,060 אבל בואו לסבך את זה עכשיו קצת, וליצור קובץ חדש. 998 00:47:49,060 --> 00:47:53,350 >> אני הולך לקרוא את זה, אומר, ints, רב עבור מספרים שלמים. 999 00:47:53,350 --> 00:47:55,980 הרשו לי להתחיל איפה הייתי לפני רגע. 1000 00:47:55,980 --> 00:47:57,770 אבל עכשיו בוא נעשה כמה קווים אחרים. 1001 00:47:57,770 --> 00:48:03,430 תן לי ללכת ולעשות את הדברים הבאים, printf, אני אחוז, מינוס אחוז אני, 1002 00:48:03,430 --> 00:48:08,959 אני אחוז הוא, פסיק x, y מינוס פסיק yx. 1003 00:48:08,959 --> 00:48:10,750 אז אני עושה מעט מתמטיקה שונה שם. 1004 00:48:10,750 --> 00:48:11,624 בוא נעשה עוד אחד. 1005 00:48:11,624 --> 00:48:16,610 אז אחוז i פעמים אחוזים אני הוא אני אחוזים, מהלך סרק n. 1006 00:48:16,610 --> 00:48:21,430 בואו תוספת x, ו- y, ופעמי x y. 1007 00:48:21,430 --> 00:48:24,530 אנו נשתמש הכוכבית על המחשב לזמנים שלך. 1008 00:48:24,530 --> 00:48:26,390 >> אינך משתמש x. x הוא שם משתנה כאן. 1009 00:48:26,390 --> 00:48:28,270 אתה משתמש הכוכב לכפל. 1010 00:48:28,270 --> 00:48:29,020 בוא נעשה עוד אחד. 1011 00:48:29,020 --> 00:48:34,580 אני אחוז printf, מחולק על ידי i אחוזים, הוא אחוז אני, 1012 00:48:34,580 --> 00:48:40,460 n לוכסן אחורי. XY מחולק y-- לכן אתה השתמשת נטוי C 1013 00:48:40,460 --> 00:48:41,502 לעשות חלוקה. 1014 00:48:41,502 --> 00:48:42,460 ובואו לעשות אחד אחר. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 שארית i אחוזים, מחולק על ידי i אחוזים, הוא i אחוזים. 1017 00:48:55,240 --> 00:48:59,550 xy-- ועכשיו שארית הוא על מה שנשאר. 1018 00:48:59,550 --> 00:49:02,980 כאשר אתה מנסה חלוקה המכנה לתוך מונה, 1019 00:49:02,980 --> 00:49:05,570 כמה שנשאר כי אתה לא יכול לחלק את? 1020 00:49:05,570 --> 00:49:07,910 >> אז אין ממש, בהכרח, סמל 1021 00:49:07,910 --> 00:49:09,470 השתמשנו בבית הספר היסודי לכך. 1022 00:49:09,470 --> 00:49:13,830 אבל יש ב C. אתה יכול אומרים x מודולו y, שם 1023 00:49:13,830 --> 00:49:18,000 זה סימן אחוזים context-- זה מבלבל כשאתה בפנים 1024 00:49:18,000 --> 00:49:20,170 של במרכאות כפולות, בתוך printf, אחוזים 1025 00:49:20,170 --> 00:49:21,830 משמש מציין הפורמט. 1026 00:49:21,830 --> 00:49:25,420 >> כאשר אתה משתמש אחוזים מחוץ כי ביטוי מתמטי, 1027 00:49:25,420 --> 00:49:29,910 זה מפעיל מודולו עבור מודולרי arithmetic-- לענייננו 1028 00:49:29,910 --> 00:49:33,650 כאן, רק אומר, מה הוא שארית x מחולקת y? 1029 00:49:33,650 --> 00:49:36,130 אז x מחולק y היא y לוכסן x. 1030 00:49:36,130 --> 00:49:38,220 מה את שארית x מחולק y? 1031 00:49:38,220 --> 00:49:41,780 זה x mod y, כמתכנת הייתה אומרת. 1032 00:49:41,780 --> 00:49:48,300 >> אז אם לא עשיתי שום טעויות פה, תן לי ints להמשיך ולעשות, בלשון רב, נחמד, 1033 00:49:48,300 --> 00:49:50,010 ו ints לוכסן נקודה. 1034 00:49:50,010 --> 00:49:55,270 ועכשיו בואו נלך קדימה לעשות, נניח, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 בסדר, 1 בתוספת 10 הוא 11, הצ'ק. 1036 00:49:58,390 --> 00:50:01,240 1 מינוס 10 הם 9 שליליים, לבדוק. 1037 00:50:01,240 --> 00:50:03,420 >> 1 פעמים 10 הן 10, צק. 1038 00:50:03,420 --> 00:50:07,090 1 חלק 10 הוא-- בסדר, אנחנו לדלג כי אחד. 1039 00:50:07,090 --> 00:50:09,480 שארית 1 חלק 10 היא 1. 1040 00:50:09,480 --> 00:50:10,680 זה נכון. 1041 00:50:10,680 --> 00:50:12,630 אבל יש באג כאן. 1042 00:50:12,630 --> 00:50:15,390 >> אז אחד שמתי שלי למסור, אינו נכון. 1043 00:50:15,390 --> 00:50:16,670 אני מתכוון, זה קרוב ל -0. 1044 00:50:16,670 --> 00:50:20,670 1 חלק 10, אתה יודע, אם אנחנו חיתוך פינות, בטוח, זה אפס. 1045 00:50:20,670 --> 00:50:28,050 אבל זה באמת צריך להיות 1/10, 0.1, או 0.10, 0.1000, או הלאה. 1046 00:50:28,050 --> 00:50:30,600 >> זה לא באמת צריך להיות אפס. 1047 00:50:30,600 --> 00:50:35,990 ובכן, מתברר כי המחשב הוא עושה ממש מה שאמרנו זה לעשות. 1048 00:50:35,990 --> 00:50:39,460 אנחנו עושים מתמטיקה כמו x מחולק y. 1049 00:50:39,460 --> 00:50:44,680 ושניהם x ו- y, לכל הקווים קוד קודם לכן, הם מספרים שלמים. 1050 00:50:44,680 --> 00:50:50,440 >> יתר על כן, על קו 15, אנחנו לספר printf, היי, printf תוספת 1051 00:50:50,440 --> 00:50:54,230 שלם an, תוספת שלמה, תוספת בתוך integer-- במיוחד 1052 00:50:54,230 --> 00:50:57,580 x, ואז y ולאחר מכן x מחולק y. x ו- y הם ints. 1053 00:50:57,580 --> 00:50:59,060 אנחנו טובים שם. 1054 00:50:59,060 --> 00:51:01,250 >> אבל מה x מחולק x? 1055 00:51:01,250 --> 00:51:06,790 x מחולק y צריך להיות, באופן מתמטי, 1/10, או 0.1, 1056 00:51:06,790 --> 00:51:11,600 אשר הוא מספר ממשי, מספר ממשי שיש, באופן פוטנציאלי, נקודה עשרונית. 1057 00:51:11,600 --> 00:51:13,230 זה לא שלם. 1058 00:51:13,230 --> 00:51:18,290 >> אבל מה הוא הדבר הקרוב ביותר שלם כדי 1/10, או 0.1? 1059 00:51:18,290 --> 00:51:21,114 כן, זה סוג של הוא אפס. 1060 00:51:21,114 --> 00:51:22,030 0.1 הוא כמו כל כך הרבה. 1061 00:51:22,030 --> 00:51:22,890 ו 1 הוא הרבה זה. 1062 00:51:22,890 --> 00:51:25,870 אז 1/10 הוא קרוב יותר 0 מאשר אחד. 1063 00:51:25,870 --> 00:51:30,800 >> אז מה C עושה עבור us-- סוג של כי אמרנו שזה עם-- 1064 00:51:30,800 --> 00:51:32,600 הוא מקצץ שלם זה. 1065 00:51:32,600 --> 00:51:40,540 זה לוקח בערך, אשר שוב הוא אמור להיות משהו כמו 0.1000, 1066 00:51:40,540 --> 00:51:41,800 0 וכן הלאה. 1067 00:51:41,800 --> 00:51:45,320 וזה מקצץ הכל לאחר הנקודה העשרונית 1068 00:51:45,320 --> 00:51:47,510 כך שכל זה דברים, כי זה לא 1069 00:51:47,510 --> 00:51:51,910 להשתלב ברעיון של מספר שלם, אשר רק הוא מספר כמו 1 שלילי, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 למעלה ולמטה, זה זורק הכל לאחר הנקודה העשרונית, כי אתה 1071 00:51:55,830 --> 00:51:59,020 לא יכול להתאים נקודה עשרונית ב שלם מעצם הגדרתו. 1072 00:51:59,020 --> 00:52:01,290 >> אז התשובה כאן היא אפס. 1073 00:52:01,290 --> 00:52:02,600 אז איך אנחנו לתקן את זה? 1074 00:52:02,600 --> 00:52:04,400 אנחנו צריכים פתרון אחר הכל ביחד. 1075 00:52:04,400 --> 00:52:06,880 ואנחנו יכולים לעשות את זה, כדלקמן. 1076 00:52:06,880 --> 00:52:12,820 >> תן לי ללכת קדימה וליצור חדש קובץ, זה אחד בשם floats.c. 1077 00:52:12,820 --> 00:52:16,500 ולשמור אותו כאן באותה ספרייה, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 ותן לי להמשיך ולהעתיק חלק זה קוד קודם לכן. 1080 00:52:23,260 --> 00:52:27,690 >> אבל במקום לקבל int, בוא נעשה את זה. 1081 00:52:27,690 --> 00:52:31,037 תן לי ערךנקודהצפה בשם x. שם נקודה צפה 1082 00:52:31,037 --> 00:52:33,370 הערך הוא רק באופן מילולי משהו עם נקודה צפה. 1083 00:52:33,370 --> 00:52:34,410 זה יכול לנוע שמאלה, ימינה. 1084 00:52:34,410 --> 00:52:35,530 זהו מספר אמיתי. 1085 00:52:35,530 --> 00:52:38,050 >> ותנו לי לקרוא לא לקבל int, אבל לקבל לצוף, 1086 00:52:38,050 --> 00:52:41,420 גם שהיה בין התפריט אופציות בספריית C250. 1087 00:52:41,420 --> 00:52:43,220 בוא נשנה y ל float. 1088 00:52:43,220 --> 00:52:45,000 אז זה הופך לקבל לצוף. 1089 00:52:45,000 --> 00:52:47,620 >> ועכשיו, אנחנו לא רוצים לחבר ints. 1090 00:52:47,620 --> 00:52:53,130 מתברר שאנחנו צריכים להשתמש אחוזים f עבור לצוף, אחוז f עבור לצוף, 1091 00:52:53,130 --> 00:52:54,560 ועכשיו לשמור אותו. 1092 00:52:54,560 --> 00:53:01,220 ועכשיו, אני מחזיק אצבעות, לעשות צוף, נחמד, צוף לוכסן נקודה. 1093 00:53:01,220 --> 00:53:04,280 x הולך להיות אחד 1. y הולך להיות 10 שוב. 1094 00:53:04,280 --> 00:53:08,240 >> וגם, נחמד, בסדר בנוסף שלי נכון. 1095 00:53:08,240 --> 00:53:10,240 קיוויתי ליותר, אבל שכחתי לכתוב את זה. 1096 00:53:10,240 --> 00:53:13,250 אז בואו נלך ולתקן זה טעות לוגית. 1097 00:53:13,250 --> 00:53:16,280 >> בואו נלך קדימה לתפוס את הבאה. 1098 00:53:16,280 --> 00:53:18,080 אנחנו פשוט נעשה העתיקו והדביקו מעט. 1099 00:53:18,080 --> 00:53:20,080 ואני הולך להגיד מינוס. 1100 00:53:20,080 --> 00:53:21,890 >> ואני הולך לומר פעמים. 1101 00:53:21,890 --> 00:53:24,060 ואני הולך אומר מפולג. 1102 00:53:24,060 --> 00:53:28,240 ואני לא מתכוון לעשות מודולו, וזה לא רלוונטי כמו כאן, 1103 00:53:28,240 --> 00:53:33,690 מחולק f, ופעמים plus-- בסדר, בוא נעשה את זה שוב. 1104 00:53:33,690 --> 00:53:44,210 >> צף הפוך, צף לוכסן נקודה, ו 1, 10, ו-- נחמד, לא, בסדר. 1105 00:53:44,210 --> 00:53:45,250 אז אני אידיוט. 1106 00:53:45,250 --> 00:53:47,000 אז זה נפוץ מאוד במדעי המחשב 1107 00:53:47,000 --> 00:53:49,780 לעשות טעויות טיפשיות כמו זו. 1108 00:53:49,780 --> 00:53:53,100 >> למטרות פדגוגיות, מה שאני באמת רוצה לעשות 1109 00:53:53,100 --> 00:53:57,410 היה לשנות את המדע כאן לפלוס, מינוס, לזמנים, 1110 00:53:57,410 --> 00:54:01,140 ולחלק, כמו שאתה מקווה לב במהלך התרגיל הזה. 1111 00:54:01,140 --> 00:54:04,700 אז עכשיו בואו לקמפל מחדש זו התוכנית, לעשות צף לוכסן נקודה. 1112 00:54:04,700 --> 00:54:07,950 >> ובפעם השלישית, בואו לראות אם היא עונה על הציפיות שלי. 1113 00:54:07,950 --> 00:54:21,480 1, 10, זן, כן, בסדר, 1.000, מחולק 10.000, הוא 0.100000. 1114 00:54:21,480 --> 00:54:24,952 ומתברר אנחנו יכולים לשלוט כמה מספרים אחרי אלה נקודות עשרוניות. 1115 00:54:24,952 --> 00:54:25,660 אנחנו בעצם. 1116 00:54:25,660 --> 00:54:26,790 נחזור לזה. 1117 00:54:26,790 --> 00:54:28,440 >> אבל עכשיו, למעשה, את המתמטיקה נכונה. 1118 00:54:28,440 --> 00:54:30,090 אז, שוב, מה takeaway כאן? 1119 00:54:30,090 --> 00:54:33,050 מתברר כי ב C, ישנם לא רק: המיתרים, ולמעשה, 1120 00:54:33,050 --> 00:54:36,120 ישנם לא ממש, כי אנחנו להוסיף את אלה עם ספריית CS50. 1121 00:54:36,120 --> 00:54:37,710 אבל יש לא רק ints. 1122 00:54:37,710 --> 00:54:38,990 >> ישנם גם צף. 1123 00:54:38,990 --> 00:54:42,810 ומתברר חבורה של נתונים אחרים סוגים מדי, כי נשתמש לפני זמן רב. 1124 00:54:42,810 --> 00:54:46,270 מסתבר שאם אתה רוצה אחת אופי, לא מחרוזת של תווים, 1125 00:54:46,270 --> 00:54:47,610 אתה יכול להשתמש רק char. 1126 00:54:47,610 --> 00:54:52,350 >> מסתבר שאם אתה רוצה bool, ערך בוליאני, רק אמת או שקר, 1127 00:54:52,350 --> 00:54:56,840 בזכות הספרייה CS50, יש לנו הוסיף ל- C סוג הנתונים bool גם כן. 1128 00:54:56,840 --> 00:54:59,180 אבל זה גם להציג בשפות רבות אחרות גם כן. 1129 00:54:59,180 --> 00:55:04,130 ומתברר שלפעמים אתה צריך מספרים גדולים ואז לבוא כברירת מחדל 1130 00:55:04,130 --> 00:55:05,210 עם ints וצפים. 1131 00:55:05,210 --> 00:55:10,590 >> ואכן, כפול הוא מספר המשתמשת לא 32 סיביות, אך 64 סיביות. 1132 00:55:10,590 --> 00:55:14,990 וגם ארוך ארוך הוא מספר כי משתמש לא 32, ביטים אך 64 סיביות, 1133 00:55:14,990 --> 00:55:19,190 בהתאמה, עבור נקודה צפה ערכים שלמים, בהתאמה. 1134 00:55:19,190 --> 00:55:22,780 אז בואו למעשה חברה לראות את זה בפעולה. 1135 00:55:22,780 --> 00:55:26,150 >> אני הולך קדימה כאן להלהיב בתוכנית אחת אחרת. 1136 00:55:26,150 --> 00:55:32,020 הנה, אני הולך קדימה ואל כוללים CS50.h. 1137 00:55:32,020 --> 00:55:34,910 ותנו לי ללכת, כולל תקן IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> ותבחין משהו פאנקי שקורה כאן. 1139 00:55:37,320 --> 00:55:40,592 הוא לא בצבע קידוד דברים באותו אופן כפי שהיה לפני. 1140 00:55:40,592 --> 00:55:43,550 ומתברר, כי הסיבה לכך היא שאני לא נתנו הדבר שם קובץ. 1141 00:55:43,550 --> 00:55:47,270 >> אני הולך לקרוא את זה sizeof.c, ופגע שמור. 1142 00:55:47,270 --> 00:55:51,039 ושימו לב מה קורה שלי מאוד קוד לבן נגד זה רקע שחור. 1143 00:55:51,039 --> 00:55:52,830 עכשיו, לפחות יש כמה סגול שם. 1144 00:55:52,830 --> 00:55:54,490 וזה תחביר הדגיש. 1145 00:55:54,490 --> 00:55:57,700 >> הסיבה לכך היא, בפשטות, אין לי אמר IDE איזה סוג של קובץ 1146 00:55:57,700 --> 00:56:01,060 זאת היא על ידי מתן שם, ו במיוחד סיומת קובץ. 1147 00:56:01,060 --> 00:56:03,620 עכשיו, בואו נלך קדימה לעשות זאת. 1148 00:56:03,620 --> 00:56:08,910 אני הולך קדימה, מאוד פשוט להדפיס את bool following-- 1149 00:56:08,910 --> 00:56:11,080 אחוז הוא LU. 1150 00:56:11,080 --> 00:56:12,950 >> אנחנו נחזור כי בעוד רגע. 1151 00:56:12,950 --> 00:56:15,840 ואז אני הולך גודל bool הדפסה. 1152 00:56:15,840 --> 00:56:18,170 ועכשיו, רק כדי לחסוך לעצמי קצת זמן, אני 1153 00:56:18,170 --> 00:56:20,280 הולך לעשות כולה חבורה של אלה בעת ובעונה אחת. 1154 00:56:20,280 --> 00:56:24,620 וגם, באופן ספציפי, אני הולך לשנות זאת על char והשם. 1155 00:56:24,620 --> 00:56:27,760 אחד זה, אני הולך לשנות אל זוגי כפול. 1156 00:56:27,760 --> 00:56:31,440 >> אחד זה, אני הולך לשנות ל float ו לצוף. 1157 00:56:31,440 --> 00:56:35,670 אחד זה, אני הולך לעבור להשתמש int ו int. 1158 00:56:35,670 --> 00:56:38,660 וזה אחד, אני הולך לשנות ארוך ארוך. 1159 00:56:38,660 --> 00:56:40,840 וזה עדיין לוקח זמן רב, רב מאוד. 1160 00:56:40,840 --> 00:56:44,572 >> ואז, לבסוף, נתתי עצמי אחת יותר מדי, מחרוזת. 1161 00:56:44,572 --> 00:56:47,030 מתברר כי ב- C, יש המפעיל המיוחד הנקרא 1162 00:56:47,030 --> 00:56:50,260 גודל זה פשוטו כמשמעו הולך, כאשר לרוץ, 1163 00:56:50,260 --> 00:56:52,099 לספר לנו את הגודל לכל אחד מהמשתנים הללו. 1164 00:56:52,099 --> 00:56:53,890 וזו דרך, עכשיו, אנו יכולים להתחבר בחזרה 1165 00:56:53,890 --> 00:56:57,140 לדיון בשבוע שעבר נתונים וייצוג. 1166 00:56:57,140 --> 00:57:00,330 >> תן לי ללכת קדימה ולעבד לגבי גודל לוכסן נקודה של. 1167 00:57:00,330 --> 00:57:01,210 ובואו לראות. 1168 00:57:01,210 --> 00:57:05,210 מתברר כי ב- C, במיוחד על CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 במיוחד על מערכת ההפעלה אובונטו, 1170 00:57:08,170 --> 00:57:11,100 שהינה 64 סיביות הפעלה המערכת במקרה זה, 1171 00:57:11,100 --> 00:57:14,189 bool הולך להשתמש בייט שטח אחד. 1172 00:57:14,189 --> 00:57:16,480 ככה גודל נמדד, לא בסיביות, אבל בבתים. 1173 00:57:16,480 --> 00:57:18,690 ולהיזכר כי בית אחד הוא שמונה סיביות. 1174 00:57:18,690 --> 00:57:22,030 אז bool, למרות שאתה מבחינה טכנית רק צריך 0 או 1, 1175 00:57:22,030 --> 00:57:24,092 זה קצת בזבזני איך אנחנו יישמנו את זה. 1176 00:57:24,092 --> 00:57:26,800 זה באמת הולך להשתמש כולה byte-- כך כל האפסים, הם אולי 1177 00:57:26,800 --> 00:57:31,050 כל אלה, או משהו כזה, או רק אחד 1 בין שמונה סיביות. 1178 00:57:31,050 --> 00:57:34,962 >> לדמות יש, בינתיים, המשמש דמות כמו תו ASCII בשבוע האחרון, 1179 00:57:34,962 --> 00:57:36,170 הולך להיות תו אחד. 1180 00:57:36,170 --> 00:57:42,340 וזה synchs עם הרעיון שלנו של זה להיות לא יותר מ 256 bits-- למדי, 1181 00:57:42,340 --> 00:57:45,360 synchs עם זה להיות לא יותר 8 סיביות, אשר 1182 00:57:45,360 --> 00:57:47,450 נותן לנו כמה שיותר 256 ערכים. 1183 00:57:47,450 --> 00:57:49,680 דאבל הולך 8 בתים או 64 סיביות להיות. 1184 00:57:49,680 --> 00:57:50,510 >> מצוף הוא 4. 1185 00:57:50,510 --> 00:57:51,690 Int הוא 4. 1186 00:57:51,690 --> 00:57:52,980 ארוך, ארוך הוא 8. 1187 00:57:52,980 --> 00:57:54,716 וגם מחרוזת היא 8. 1188 00:57:54,716 --> 00:57:55,840 אבל אין לך מה לדאוג זה. 1189 00:57:55,840 --> 00:57:57,340 אנחנו הולכים לקלף את השכבה. 1190 00:57:57,340 --> 00:57:59,940 מתברר, מחרוזות יכול עוד מ -8 בתים. 1191 00:57:59,940 --> 00:58:02,310 >> ואכן, כתבנו מחרוזות כבר, hello world, 1192 00:58:02,310 --> 00:58:03,700 למעלה מ -8 בתים. 1193 00:58:03,700 --> 00:58:06,270 אבל נחזור אל כי בעוד רגע. 1194 00:58:06,270 --> 00:58:09,690 אבל לקחת כאן הוא כדלקמן. 1195 00:58:09,690 --> 00:58:15,320 >> יש כל מחשב רק סופי כמות זיכרון ושטח. 1196 00:58:15,320 --> 00:58:17,860 אתה יכול לאחסן רק כל כך הרבה קבצים ב- Mac או במחשב האישי שלך. 1197 00:58:17,860 --> 00:58:23,030 אתה יכול לאחסן כל כך הרבה תוכניות רק RAM פועל בבת אחת, בהכרח, גם 1198 00:58:23,030 --> 00:58:26,360 עם זיכרון וירטואלי, משום יש לך כמות ה- RAM סופית. 1199 00:58:26,360 --> 00:58:28,990 >> וזה רק כדי picture-- אם מעולם שפתחת את מחשב נייד 1200 00:58:28,990 --> 00:58:31,300 או הורה זיכרון נוסף עבור מחשב, אתה 1201 00:58:31,300 --> 00:58:33,670 אולי לא יודע בתוך המחשב 1202 00:58:33,670 --> 00:58:36,590 משהו שנראה קצת כמו זה. 1203 00:58:36,590 --> 00:58:40,540 אז זה רק חברה משותפת בשם חיוני שעושה RAM למחשבים. 1204 00:58:40,540 --> 00:58:43,620 ורם הוא המקום שבו תוכניות לחיות בזמן שהן פועלות. 1205 00:58:43,620 --> 00:58:46,630 >> אז עם כל Mac או PC, בעת לחיצה כפולה לחץ תוכנית, והיא פותחת, 1206 00:58:46,630 --> 00:58:48,921 וזה פותח קצת מסמך Word או משהו כזה, 1207 00:58:48,921 --> 00:58:51,764 הוא מאחסן אותו באופן זמני RAM, כי זיכרון RAM מהיר יותר 1208 00:58:51,764 --> 00:58:53,680 מ הדיסק הקשיח, או דיסק המצב המוצק שלך. 1209 00:58:53,680 --> 00:58:56,600 אז זה בדיוק איפה תוכניות ללכת לחיות כאשר הם רצים, 1210 00:58:56,600 --> 00:58:58,060 או כאשר נמצאים בשימוש קבצים. 1211 00:58:58,060 --> 00:59:00,890 >> אז אתה צריך דברים שנראים כמו בתוך זה של המחשב הנייד שלך, 1212 00:59:00,890 --> 00:59:03,320 או מעט דברים גדולים בתוך שולחן העבודה שלך. 1213 00:59:03,320 --> 00:59:07,440 אבל המפתח הוא רק יש לך מספר סופי של הדברים האלה. 1214 00:59:07,440 --> 00:59:11,230 ויש רק כמות סופית של חומרה יושבת על שולחן זה תקין 1215 00:59:11,230 --> 00:59:11,730 כאן. 1216 00:59:11,730 --> 00:59:15,920 >> אז, בוודאי, אנחנו לא יכולים לאחסן מספרים באורך אינסופי. 1217 00:59:15,920 --> 00:59:19,030 וגם, עדיין, אם אתה חושב בחזרה יכול בית ספר יסודי, כמה ספרות 1218 00:59:19,030 --> 00:59:21,400 יש לך את הזכות של נקודה עשרונית? 1219 00:59:21,400 --> 00:59:24,680 לצורך העניין, כמה ספרות יכול יש לך בצד שמאל של נקודה עשרונית? 1220 00:59:24,680 --> 00:59:26,300 באמת, אינסוף. 1221 00:59:26,300 --> 00:59:30,840 >> עכשיו, אנחנו בני אדם אולי רק יודע איך מבטאים מיליון, 1222 00:59:30,840 --> 00:59:34,990 ו מיליארד, טריליון, ו קוודריליון, ו quintillion. 1223 00:59:34,990 --> 00:59:39,370 ואני דוחף את הגבולות שלי understanding-- או my-- אני מבין 1224 00:59:39,370 --> 00:59:41,110 מספרים, אבל שלי הגייה של מספרים. 1225 00:59:41,110 --> 00:59:44,720 אבל הם יכולים לקבל גדולים לאין שיעור עם ספרות אינסוף שמאלה 1226 00:59:44,720 --> 00:59:47,050 או בצד ימין של נקודה עשרונית. 1227 00:59:47,050 --> 00:59:50,040 >> אבל מחשבים יש רק כמות הזיכרון סופית, 1228 00:59:50,040 --> 00:59:53,510 מספר סופי של טרנזיסטורים, מספר סופי של נורות בפנים. 1229 00:59:53,510 --> 00:59:57,350 אז מה קורה כאשר נגמר לך שטח? 1230 00:59:57,350 --> 00:59:59,620 במילים אחרות, אם אתה נזכר בשבוע שעבר 1231 00:59:59,620 --> 01:00:03,160 כשדיברנו על מספרים עצמם להיות מיוצגים בינארי, 1232 01:00:03,160 --> 01:00:05,480 נניח שיש לנו 8 סיבי ערך זה כאן. 1233 01:00:05,480 --> 01:00:08,290 >> ויש לנו שבע 1 של ואחד 0. 1234 01:00:08,290 --> 01:00:10,827 ונניח שאנחנו רוצים להוסיף 1 לערך זה. 1235 01:00:10,827 --> 01:00:12,410 זהו מספר ממש גדולים עכשיו. 1236 01:00:12,410 --> 01:00:16,610 >> זהו 254, אם אני זוכר את המתמטיקה משבוע תקין האחרונה. 1237 01:00:16,610 --> 01:00:19,480 אבל מה אם אני אשנה כי הימני ביותר 0 עד 1? 1238 01:00:19,480 --> 01:00:22,800 המספר השלם, של כמובן, הופך שמונה 1 של. 1239 01:00:22,800 --> 01:00:24,050 אז אנחנו עדיין טובים. 1240 01:00:24,050 --> 01:00:27,204 >> וזה כנראה מייצג 255, אם כי תלוי בהקשר 1241 01:00:27,204 --> 01:00:29,120 זה באמת יכול לייצג מספר שלילי. 1242 01:00:29,120 --> 01:00:31,240 אבל עוד על כך בפעם אחרת. 1243 01:00:31,240 --> 01:00:34,220 זה מרגיש כאילו הוא קשור גבוה ככל שאני יכול לספור. 1244 01:00:34,220 --> 01:00:35,290 >> עכשיו, זה רק 8 סיבי. 1245 01:00:35,290 --> 01:00:38,170 ו- Mac שלי, בוודאי, יש דרך יותר מ -8 ביטים של זיכרון. 1246 01:00:38,170 --> 01:00:39,170 אבל זה צריך סופית. 1247 01:00:39,170 --> 01:00:43,230 אז אותו הטיעון תקף, גם אם אנחנו יש יותר של אלה אלה במסך. 1248 01:00:43,230 --> 01:00:47,020 >> אבל מה קורה אם אתה לאחסון המספר הזה, 255, 1249 01:00:47,020 --> 01:00:49,290 ואתה רוצה לספור 1 קצת גבוה? 1250 01:00:49,290 --> 01:00:51,600 אתה רוצה ללכת מ 255 ל 256. 1251 01:00:51,600 --> 01:00:55,800 הבעיה, כמובן, היא שאם אתה מתחילים לספור על אפס כמו בשבוע שעבר, 1252 01:00:55,800 --> 01:00:59,670 אתה לא יכול לסמוך גבוה כמו 256, שלא לדבר על 257, 1253 01:00:59,670 --> 01:01:02,584 קל וחומר 258, מ 'מפני מה קורה כאשר אתה מוסיף 1? 1254 01:01:02,584 --> 01:01:05,000 אם אתה עושה את הכיתה בבית הספר היסודי גישה, תש 1 כאן, 1255 01:01:05,000 --> 01:01:08,150 ולאחר מכן 1 פלוס 1 הוא 2, אבל זה באמת אפס, אתם נושאים את 1, 1256 01:01:08,150 --> 01:01:09,695 לשאת את 1, לשאת את 1. 1257 01:01:09,695 --> 01:01:12,620 כל הדברים האלה, אלה 1 של, ללכת אפס. 1258 01:01:12,620 --> 01:01:17,820 ואתה בסופו של דבר, כן, כמי ציין, 1 בצד שמאל. 1259 01:01:17,820 --> 01:01:22,540 אבל כל מה שאתה יכול ממש לראות ולהשתלב לזכרו 1260 01:01:22,540 --> 01:01:27,960 הוא רק שמונה 0 של, כלומר בשלב מסוים אם, מחשב, 1261 01:01:27,960 --> 01:01:32,490 ספירת ניסה גבוה מספיק עד, אתה הולך לעטוף, כך נראה, 1262 01:01:32,490 --> 01:01:35,850 לאפס, או אולי אפילו שלילי מספרים, שהן אפילו נמוך מאפס. 1263 01:01:35,850 --> 01:01:37,260 >> ואנחנו סוג יכול של לראות את זה. 1264 01:01:37,260 --> 01:01:39,900 תן לי להמשיך לכתוב תכנית מהירה אמיתית כאן. 1265 01:01:39,900 --> 01:01:43,690 תן לי להמשיך לכתוב תוכנית בשם גדש את המקום. 1266 01:01:43,690 --> 01:01:49,980 כלול CS50.h, כולל תקן IO.h-- הו, 1267 01:01:49,980 --> 01:01:51,730 כמה שהתגעגעתי הדגשת התחביר שלי. 1268 01:01:51,730 --> 01:01:54,440 אז בואו נשמור את זה כמו overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> ועכשיו int void-- הראשי ולא עבר זמן רב, אנו יהיה 1270 01:01:57,084 --> 01:01:59,500 לחזור כדי להסביר מדוע אנו כותבים כל הזמן void main int. 1271 01:01:59,500 --> 01:02:02,080 אבל לעת עתה, בואו פשוט לעשות זה, לוקח את זה כמובן מאליו. 1272 01:02:02,080 --> 01:02:06,200 בואו לתת את עצמי int, ו לאתחל אותו ל -0. 1273 01:02:06,200 --> 01:02:11,716 >> בואו ואז לעשות עבור int אני מקבל zero-- למעשה, בוא נעשה את ללולאה אינסופית 1274 01:02:11,716 --> 01:02:12,590 ולראות מה קורה. 1275 01:02:12,590 --> 01:02:22,440 בעוד נכון, אז בואו להדפיס n הוא אחוז i, מהלך הסרק n, תוספת n. 1276 01:02:22,440 --> 01:02:27,200 אבל, עכשיו, בוא נעשה n מקבל n פלוס 1. 1277 01:02:27,200 --> 01:02:29,660 >> אז במילים אחרות, על כל איטרציה של לולאה אינסופית זו, 1278 01:02:29,660 --> 01:02:32,550 בואו ניקח הערך של n, ולהוסיף 1 אליו, ולאחר מכן 1279 01:02:32,550 --> 01:02:34,350 לאחסן את התוצאה בחזרה ב n בצד שמאל. 1280 01:02:34,350 --> 01:02:37,150 ואכן, ראינו תחביר מעט ככה, בקצרה. 1281 01:02:37,150 --> 01:02:39,730 טריק מגניב במקום כתיבת כל זה החוצה, 1282 01:02:39,730 --> 01:02:42,770 אתה באמת יכול לומר שיש n בתוספת שווה 1. 1283 01:02:42,770 --> 01:02:47,480 >> לחלופין, אם אתה באמת רוצה להיות מפואר, אתה יכול להגיד n פלוס פלוס-פסיק. 1284 01:02:47,480 --> 01:02:50,130 אבל שני אלה האחרונים הם רק מה שהיינו קוראים סוכר תחבירי 1285 01:02:50,130 --> 01:02:50,790 עבור הדבר הראשון. 1286 01:02:50,790 --> 01:02:53,456 >> הדבר הראשון הוא יותר מפורש, לגמרי בסדר, לגמרי נכון. 1287 01:02:53,456 --> 01:02:55,470 אבל זה נפוץ יותר, אני אגיד. 1288 01:02:55,470 --> 01:02:57,210 אז אנחנו נעשה את זה רק לרגע. 1289 01:02:57,210 --> 01:03:01,685 >> עכשיו בואו לעשות הצפה, שנשמע הצפת קו נטויה מבשרת רעה, נקודה למדי. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 בוא נראה, n הזה נהיה גדול למדי. 1292 01:03:09,852 --> 01:03:11,310 אבל בואו נחשוב, כמה גדול יכול לקבל n? 1293 01:03:11,310 --> 01:03:12,870 >> n הוא מספר שלם. 1294 01:03:12,870 --> 01:03:16,400 ראינו את זה לפני רגע עם הגודל למשל כי int הוא ארבעה בתים. 1295 01:03:16,400 --> 01:03:22,070 אנחנו יודעים משבוע שעבר, ארבעה בתים הם 32 סיביות, כי 8 פעמים 4, זה 32. 1296 01:03:22,070 --> 01:03:23,460 זה הולך להיות 4 מיליארד. 1297 01:03:23,460 --> 01:03:25,802 >> ואנחנו עד 800,000. 1298 01:03:25,802 --> 01:03:28,510 זה הולך לקחת המון זמן לספור גבוה ככל שאני יכול להיות. 1299 01:03:28,510 --> 01:03:30,635 אז אני הולך קדימה, כפי שאתה עלול לא עבר זמן רב, 1300 01:03:30,635 --> 01:03:34,910 והכה בקרה C-- בכנות, בקרה C, הרבה, שבו בקרה C בדרך כלל 1301 01:03:34,910 --> 01:03:36,034 אמצעי לבטל. 1302 01:03:36,034 --> 01:03:38,200 למרבה הצער, בגלל זה פועל בענן, 1303 01:03:38,200 --> 01:03:41,190 לפעמים הענן הוא יורקים כל כך הרבה דברים, 1304 01:03:41,190 --> 01:03:44,180 כל כך הרבה פלט, זה הולך לקחת קצת זמן עבור הקלט שלי 1305 01:03:44,180 --> 01:03:45,630 כדי להגיע אל הענן. 1306 01:03:45,630 --> 01:03:49,240 אז למרות שאני פגעתי בקרת C לפני כמה שניות, 1307 01:03:49,240 --> 01:03:53,110 זה בהחלט בצד השפעה ללולאה אינסופית. 1308 01:03:53,110 --> 01:03:56,070 >> וכך במקרים כאלה, אנחנו הולך לעזוב כי להיות. 1309 01:03:56,070 --> 01:03:59,050 ואנחנו הולכים להוסיף עוד חלון מסוף כאן 1310 01:03:59,050 --> 01:04:03,186 עם פלוס, מה שכמובן לא ככה, שכן הוא עדיין חושב. 1311 01:04:03,186 --> 01:04:05,310 ועכשיו בואו נלך קדימה ולהיות קצת יותר סביר. 1312 01:04:05,310 --> 01:04:07,768 >> אני הולך קדימה, לעשות הפעמים היחידות סופי של זה. 1313 01:04:07,768 --> 01:04:10,047 בואו להשתמש בלולאת for, שעליו רמזתי קודם לכן. 1314 01:04:10,047 --> 01:04:10,630 בוא נעשה את זה. 1315 01:04:10,630 --> 01:04:13,430 תן לי עוד int משתנה i מקבלת 0. 1316 01:04:13,430 --> 01:04:17,430 אני הוא פחות, נניח, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 ועכשיו תן לי ללכת קדימה ולהדפיס מתוך n הוא אחוז i, פסיק n. 1318 01:04:24,010 --> 01:04:27,547 ואז n-- זה עדיין הולך לקחת לנצח. 1319 01:04:27,547 --> 01:04:28,130 בוא נעשה את זה. 1320 01:04:28,130 --> 01:04:30,620 >> n מקבל n פעמים 2. 1321 01:04:30,620 --> 01:04:34,140 או שאנחנו יכולים להיות מפוארים ולעשות פעמים שווה 2. 1322 01:04:34,140 --> 01:04:37,120 אבל בוא נגיד n שווה עצמה, פעמים 2. 1323 01:04:37,120 --> 01:04:39,321 במילים אחרות, זה הגרסה החדשה של התוכנית, 1324 01:04:39,321 --> 01:04:41,820 אני לא רוצה לחכות לנצח מ כמו 800,000 ל -4 מיליארד. 1325 01:04:41,820 --> 01:04:43,070 בואו נגמור עם זה. 1326 01:04:43,070 --> 01:04:44,920 >> בואו למעשה להכפיל n בכל פעם. 1327 01:04:44,920 --> 01:04:47,660 איזה, כזכור, הכפלה היא ההפך שיש, כמובן. 1328 01:04:47,660 --> 01:04:50,035 והואיל בשבוע שעבר יש לנו משהו שוב, ושוב, 1329 01:04:50,035 --> 01:04:52,200 ושוב, סופר מהיר, הכפלה בוודאי 1330 01:04:52,200 --> 01:04:58,080 לקבל אותנו מ -1 עד הגדול ביותר האפשרי ערך שנוכל לספור עד עם int. 1331 01:04:58,080 --> 01:04:59,750 >> אז בוא נעשה את זה בדיוק. 1332 01:04:59,750 --> 01:05:01,720 ואנו חייבים לחזור אליו תוך זמן קצר. 1333 01:05:01,720 --> 01:05:04,180 אבל זה, שוב, בדיוק כמו הבלוק חוזר Scratch. 1334 01:05:04,180 --> 01:05:05,600 ואתה תשתמש בזה לפני זמן רב. 1335 01:05:05,600 --> 01:05:10,170 >> זה רק אומר לספור מאפס עד, אבל לא שווה, ל -64. 1336 01:05:10,170 --> 01:05:14,285 ועל כל איטרציה של זה לולאה, רק להגדיל כל הזמן אני. 1337 01:05:14,285 --> 01:05:18,990 אז i ++ - ואת המבנה הכללי הזה על קו 7 הוא רק דרך סופר משותף 1338 01:05:18,990 --> 01:05:22,290 לחזור על כמה שורות של קוד, כמה וכמה פעמים. 1339 01:05:22,290 --> 01:05:23,362 איזה שורות קוד? 1340 01:05:23,362 --> 01:05:25,570 סוגריים מסולסלים אלה, כפי שאתה ייתכן שלוקטו עכשיו, 1341 01:05:25,570 --> 01:05:26,780 פירושו, לבצע את הפעולות הבאות. 1342 01:05:26,780 --> 01:05:29,510 >> הוא נמצא Scratch כמו, כאשר יש לו את אבני צהוב 1343 01:05:29,510 --> 01:05:32,680 וצבעים אחרים מהסוג הזה לאמץ או לחבק בלוקים אחרים. 1344 01:05:32,680 --> 01:05:34,750 זה מה אלה מתולתלים פלטות עושות כאן. 1345 01:05:34,750 --> 01:05:40,200 אז אם יש לי התחביר שלי כן-- לך יכול לראות את סמל הגזר באמצעי C 1346 01:05:40,200 --> 01:05:42,706 זה כמה פעמים הייתי מנסה לפתור את הבעיה הזו. 1347 01:05:42,706 --> 01:05:45,330 אז בואו להיפטר שאחד לגמרי, לסגור את החלון. 1348 01:05:45,330 --> 01:05:46,520 ואנחנו נשתמש אחד החדש. 1349 01:05:46,520 --> 01:05:51,980 הפוך לוכסן הצפה, נקודה הצפה, זן, בסדר, 1350 01:05:51,980 --> 01:05:53,090 זה נראה רע בהתחלה. 1351 01:05:53,090 --> 01:05:56,200 אבל בואו לגלול אחורה בזמן, כי עשיתי פעמים 64 זה. 1352 01:05:56,200 --> 01:05:58,700 >> ושימו לב לראשונה, n הוא 1. 1353 01:05:58,700 --> 01:06:03,110 בפעם השנייה, n הוא 2, אז 4, אז 8, אז בן 16. 1354 01:06:03,110 --> 01:06:09,450 ונראה כי ברגע אני מקבל בערך 1 מיליארד, 1355 01:06:09,450 --> 01:06:12,800 אם אני להכפיל את זה שוב, כי צריך לתת לי 2 מיליארד דולר. 1356 01:06:12,800 --> 01:06:14,980 אבל מתברר, זה ממש על הסף. 1357 01:06:14,980 --> 01:06:18,930 >> וכך זה באמת עולה על גדותיו מספר שלם מ 1 מיליארד 1358 01:06:18,930 --> 01:06:23,514 בערך שלילי 2 מיליארדים, כי מספר שלם, 1359 01:06:23,514 --> 01:06:25,430 בניגוד אנו מספרים היו בהנחה בשבוע שעבר, 1360 01:06:25,430 --> 01:06:28,397 יכול להיות חיובי ושלילי כאחד במציאות במחשב. 1361 01:06:28,397 --> 01:06:30,730 וכך לפחות אחד מאותם ביטים נגנבו ביעילות. 1362 01:06:30,730 --> 01:06:34,190 אז באמת יש לנו רק 31 סיביות, או 2 מיליארד ערכים אפשריים. 1363 01:06:34,190 --> 01:06:38,220 >> אבל לעת עתה, את ממסעדה די פשוט, כל מה שמספרים אלו 1364 01:06:38,220 --> 01:06:42,280 וכל מה את המתמטיקה היא, משהו רע קורה בסופו של דבר, 1365 01:06:42,280 --> 01:06:46,980 כי בסופו של דבר אתה מנסה permute הביטים פעמים רבות מדי. 1366 01:06:46,980 --> 01:06:51,060 ואתה ביעילות ללכת מכל 1+ כדי להתאים אולי כל 0 של, או אולי 1367 01:06:51,060 --> 01:06:54,260 רק חלק דפוס אחר זה ברור, תלוי בהקשר, 1368 01:06:54,260 --> 01:06:56,342 יכול להתפרש מספר שלילי. 1369 01:06:56,342 --> 01:06:59,300 וכך זה היה נראה לי הגבוה ביותר יכול לספור בתכנית המסוימת הזה 1370 01:06:59,300 --> 01:07:01,210 1 מיליארד הוא רק בערך. 1371 01:07:01,210 --> 01:07:02,760 אבל יש פתרון חלקי כאן. 1372 01:07:02,760 --> 01:07:03,480 אתה יודע מה? 1373 01:07:03,480 --> 01:07:07,600 >> תן לי לשנות מן int כדי ארוך ארוך. 1374 01:07:07,600 --> 01:07:10,633 ותן לי להמשיך כאן ו say-- אני הולך להיות 1375 01:07:10,633 --> 01:07:12,290 כדי לשנות זאת ל ארוך חתום. 1376 01:07:12,290 --> 01:07:16,860 או, בוא נראה, אני לא זוכר את עצמי. 1377 01:07:16,860 --> 01:07:19,920 >> בואו נלך קדימה ולבצע הצפה. 1378 01:07:19,920 --> 01:07:21,860 לא, זה לא זה, LLD, תודה. 1379 01:07:21,860 --> 01:07:23,430 אז לפעמים קלאנג יכול להיות מועיל. 1380 01:07:23,430 --> 01:07:27,550 לא זכרתי מה הפורמט מציין היה במשך תקופה ארוכה ארוכה. 1381 01:07:27,550 --> 01:07:28,950 >> אבל, אכן, קלאנג סיפר לי. 1382 01:07:28,950 --> 01:07:31,570 ירוק הוא סוג כלשהו של טוב, עדיין אומר שטעית. 1383 01:07:31,570 --> 01:07:33,190 זה ניחוש כי התכוונתי LLD. 1384 01:07:33,190 --> 01:07:38,750 >> אז תן לי לקחת את זה עצה, רב מספר עשרוני ארוך, שמור את זה. 1385 01:07:38,750 --> 01:07:43,190 ותנו לי להפעיל מחדש את זה, נקודה סלאש הצפה, Enter. 1386 01:07:43,190 --> 01:07:45,020 ועכשיו מה זה מגניב זה. 1387 01:07:45,020 --> 01:07:49,140 >> אם אני לגלול אחורה בזמן, אנחנו עדיין להתחיל לספור באותו place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 שימו לב, אנחנו מקבלים את כל עד הדרך עד 1 מיליארד דולר. 1390 01:07:54,860 --> 01:07:57,070 אבל אז אנחנו בבטחה להגיע -2 מיליארד שקל. 1391 01:07:57,070 --> 01:08:01,300 >> אז אנחנו מקבלים עד 4 מיליארד דולר, אז 8 מיליארד דולר, 17 מיליארד. 1392 01:08:01,300 --> 01:08:03,340 ואנחנו הולכים גבוהים יותר, גבוה יותר ויותר. 1393 01:08:03,340 --> 01:08:05,740 בסופו של דבר, זה גם הפסקות. 1394 01:08:05,740 --> 01:08:09,350 >> בסופו של דבר, עם זמן רב, שהינו הערך 64 סיביות, לא 1395 01:08:09,350 --> 01:08:13,660 ערך של 32 סיביות, אם סופרים גבוה מדי, אתה לעטוף 0. 1396 01:08:13,660 --> 01:08:16,410 וגם במקרה הזה, אנחנו לקרות בסופו של דבר עם מספר שלילי. 1397 01:08:16,410 --> 01:08:17,550 >> אז מדובר בבעיה. 1398 01:08:17,550 --> 01:08:20,439 ומתברר שזו הבעיה היא לא כל כך מסתורית. 1399 01:08:20,439 --> 01:08:23,060 למרות שאני בכוונה שדחק בו עם הטעויות האלה, 1400 01:08:23,060 --> 01:08:26,149 מתברר שאנחנו רואים את זה סוג של כל סביבנו, או לפחות חלק מאיתנו לעשות. 1401 01:08:26,149 --> 01:08:28,939 >> אז לגו מלחמת הכוכבים, אם יצא לך פעם שיחק את המשחק, 1402 01:08:28,939 --> 01:08:33,830 מתברר שאתה יכול להסתובב פירוק דברים בעולם לגו, 1403 01:08:33,830 --> 01:08:36,640 איסוף מטבעות, בעצם. 1404 01:08:36,640 --> 01:08:39,200 ואם ששיחקת אי פעם יותר מדי זמן דרך המשחק הזה, 1405 01:08:39,200 --> 01:08:42,630 כפרט ללא שם זה כאן עשה, המספר הכולל 1406 01:08:42,630 --> 01:08:46,700 של מטבעות שניתן לגבות עליהם הוא, כך נראה, 4 מיליארד. 1407 01:08:46,700 --> 01:08:48,240 >> עכשיו, עם זה מעוגל למעשה. 1408 01:08:48,240 --> 01:08:50,239 אז לגו ניסה לשמור דברים ידידותיים למשתמש. 1409 01:08:50,239 --> 01:08:53,779 הם לא עושים את זה בדיוק 2 32 הכח, בשבוע שעבר. 1410 01:08:53,779 --> 01:08:55,310 אבל 4 מיליארד סיבה. 1411 01:08:55,310 --> 01:08:58,979 נראה, על סמך מידע זה, לגו כי, לבין החברה 1412 01:08:58,979 --> 01:09:02,624 עשה בפועל באמצעות תוכנה זו, החליט כי המספר המרבי של מטבעות 1413 01:09:02,624 --> 01:09:04,540 המשתמש יכול לצבור הוא, אכן, 4 מיליארד דולר, 1414 01:09:04,540 --> 01:09:12,069 מכיוון שהם בחרו בקוד שלהם לא להשתמש זמן רב עבר, כנראה, 1415 01:09:12,069 --> 01:09:16,140 אבל רק מספר שלם, חתום שלם, רק מספר חיובי, אשר 1416 01:09:16,140 --> 01:09:18,089 ערך המקסימום הוא בערך זה. 1417 01:09:18,089 --> 01:09:19,380 ובכן, הנה עוד אחד מצחיק. 1418 01:09:19,380 --> 01:09:23,500 אז בסופו של Civilization המשחק, אשר חלק מכם עשוי להיות מוכר, עם 1419 01:09:23,500 --> 01:09:26,660 מתברר כי לפני שנים יש היה באג לפיה המשחק הזה 1420 01:09:26,660 --> 01:09:28,750 אם שיחק את התפקיד של גנדי במשחק, 1421 01:09:28,750 --> 01:09:34,020 במקום אותו בתור בחור מאוד פציפיסטי, במקום היה מאוד, מאוד 1422 01:09:34,020 --> 01:09:36,399 אגרסיבי, בנסיבות מסוימות. 1423 01:09:36,399 --> 01:09:40,529 בפרט, את האופן שבו תרבות עבודות היא שאם אתה, השחקן, 1424 01:09:40,529 --> 01:09:44,680 לאמץ דמוקרטיה, שלך ציון תוקפנות מקבל 1425 01:09:44,680 --> 01:09:48,130 decremented ידי השנייה, כך מינוס מינוס, ולאחר מכן מינוס מינוס. 1426 01:09:48,130 --> 01:09:50,569 >> אז מחסר 2 מ ולביקורות שלך בפועל. 1427 01:09:50,569 --> 01:09:56,650 למרבה הצער, אם ולביקורות שלכם הן בתחילה 1, ואתה להחסיר 2 ממנו 1428 01:09:56,650 --> 01:09:59,050 לאחר אימוץ הדמוקרטיה כמו גנדי כאן אולי 1429 01:09:59,050 --> 01:10:02,200 עשה, כי הוא היה מאוד passive-- 1 על הסקאלה של תוקפנות. 1430 01:10:02,200 --> 01:10:04,830 אבל אם הוא מאמץ דמוקרטיה, אז הוא הולך מ 1 כדי 1 שלילי. 1431 01:10:04,830 --> 01:10:11,470 >> למרבה הצער, הם היו באמצעות מספרים שאינם חתומים, 1432 01:10:11,470 --> 01:10:15,400 כלומר הם התייחסו אף שליליים המספרים כאילו היו חיוביים. 1433 01:10:15,400 --> 01:10:19,780 ומתברר כי שווה ערך חיובי של 1 שלילי, 1434 01:10:19,780 --> 01:10:23,480 בתוכנות מחשב טיפוסיות, הוא 255. 1435 01:10:23,480 --> 01:10:27,250 אז אם גנדי מאמצת דמוקרטיה, ולכן יש 1436 01:10:27,250 --> 01:10:32,470 ציון האגרסיביות שלו ירד, זה באמת מתגלגל עד 255 1437 01:10:32,470 --> 01:10:35,470 והופך אותו ביותר אופי אגרסיבי במשחק. 1438 01:10:35,470 --> 01:10:36,930 אז אתם יכולים לגגל על ​​זה. 1439 01:10:36,930 --> 01:10:39,380 וזה היה, אכן, באג תכנות בשוגג, 1440 01:10:39,380 --> 01:10:43,010 אבל זה נכנס די לתורתנו מאז ועד היום. 1441 01:10:43,010 --> 01:10:44,360 >> זה כל הכיף חמוד. 1442 01:10:44,360 --> 01:10:47,760 יותר מפחיד הוא כאשר בפועל התקנים בעולם האמיתי, ולא משחקים, 1443 01:10:47,760 --> 01:10:48,820 יש באגים אותם. 1444 01:10:48,820 --> 01:10:54,500 למעשה, רק לפני שנה מאמר הגיע מתוך על בואינג 787. 1445 01:10:54,500 --> 01:10:56,850 >> והמאמר בהתחלה במבט קורא מסתורי מעט. 1446 01:10:56,850 --> 01:11:01,480 אבל הוא אמר את זה, תוכנה פגיעות בואינג של 1447 01:11:01,480 --> 01:11:04,790 יש חדש 787 דרימליינר סילון הפוטנציאל לגרום טייסים 1448 01:11:04,790 --> 01:11:07,220 לאבד את השליטה המטוס, ואולי 1449 01:11:07,220 --> 01:11:11,750 בעיצומו של מעוף, פקידי FAA חברות תעופה הזהירה לאחרונה. 1450 01:11:11,750 --> 01:11:14,520 זה היה הנחישות כי מודל 787 1451 01:11:14,520 --> 01:11:19,770 המטוס כבר מופעל ברציפות במשך 248 ימים 1452 01:11:19,770 --> 01:11:24,880 יכול להפסיד את כל זרם חשמלי משתנה, AC, חשמל בשל גנרטור 1453 01:11:24,880 --> 01:11:28,892 יחידות בקרה, GCUs, בו זמנית נכנס להיכשל במצב בטוח. 1454 01:11:28,892 --> 01:11:29,850 זהו סוג של לאבד אותי. 1455 01:11:29,850 --> 01:11:35,390 אבל התזכיר כאמור, אוקיי, עכשיו יש לי את זה, התנאי נגרם על ידי תוכנה 1456 01:11:35,390 --> 01:11:38,590 נגד פנימי השליטה גנרטור 1457 01:11:38,590 --> 01:11:44,860 יחידות כי יעלו על גדותיהם לאחר 248 ימים של חשמל רציף. 1458 01:11:44,860 --> 01:11:47,070 אנחנו הנפקה זה לב כדי למנוע אובדן 1459 01:11:47,070 --> 01:11:49,300 של כל AC החשמל כוח, אשר עלול לגרום 1460 01:11:49,300 --> 01:11:50,980 לאובדן השליטה של ​​המטוס. 1461 01:11:50,980 --> 01:11:55,380 >> אז, פשוטו כמשמעו, יש איזה מספר שלם, או איזה סוג מידע דומה, 1462 01:11:55,380 --> 01:11:57,960 בשימוש בתוכנה במטוס בפועל 1463 01:11:57,960 --> 01:12:00,756 כי אם אתה שומר את המטוס שלך מספיק זמן, שככל הנראה 1464 01:12:00,756 --> 01:12:03,880 יכול להיות מקרה אם אתה פשוט רץ אותם כל הזמן ואף פעם לא ניתוק 1465 01:12:03,880 --> 01:12:06,810 המטוס שלך, כך נראה, או ומאפשר הסוללות שלה למות, 1466 01:12:06,810 --> 01:12:09,840 בסופו של דבר יהיה לספור עד ומעלה, ומעלה ומעלה, ומעלה, ומעלה. 1467 01:12:09,840 --> 01:12:12,150 >> וגם, על ידי טבע, כמות הזיכרון סופית 1468 01:12:12,150 --> 01:12:15,880 יעלה על גדותיו, מתגלגל חזרה אפס או כמה ערך שלילי, 1469 01:12:15,880 --> 01:12:19,920 תופעת לוואי של המהווה את מציאות אמיתית להחריד 1470 01:12:19,920 --> 01:12:23,970 כי המטוס עשוי להזדקק להיות rebooted, ביעילות, 1471 01:12:23,970 --> 01:12:27,290 או עלול ליפול, גרוע, כמו זבובים. 1472 01:12:27,290 --> 01:12:29,230 אז בעיות מסוג זה הם עדיין איתנו, 1473 01:12:29,230 --> 01:12:33,130 even-- זה היה מאמר 2015, על אחת כמה וכמה מפחיד 1474 01:12:33,130 --> 01:12:36,100 כאשר אתה עושה לא בהכרח להבין, להעריך, או לצפות 1475 01:12:36,100 --> 01:12:38,640 מיני שגיאות אלה. 1476 01:12:38,640 --> 01:12:42,030 >> אז מתברר שיש אחד אחר דבר רע על ייצוג מידע. 1477 01:12:42,030 --> 01:12:47,080 מתברר שגם צף הם סוג של פגום, משום צף, גם 1478 01:12:47,080 --> 01:12:51,440 הצעתי הם 32 סיביות, או אולי 64 אם אתה משתמש כפול. 1479 01:12:51,440 --> 01:12:53,070 אבל זה עדיין סופי. 1480 01:12:53,070 --> 01:12:57,070 >> וגם לתפוס את זה, אם הדבר אפשרי לשים מספר אינסופי של מספרים 1481 01:12:57,070 --> 01:12:59,460 לאחר הנקודה העשרונית, אין דרך אתה 1482 01:12:59,460 --> 01:13:02,690 יכול לייצג את כל האפשר מספרים כי לימדו אותנו 1483 01:13:02,690 --> 01:13:04,990 ספר בכיתה יכול להתקיים בעולם. 1484 01:13:04,990 --> 01:13:08,870 מחשב, בעצם, צריך לבחור קבוצת משנה של המספרים האלה 1485 01:13:08,870 --> 01:13:10,200 לייצג באופן מדויק. 1486 01:13:10,200 --> 01:13:12,450 >> עכשיו, המחשב יכול סיבוב אולי קצת, 1487 01:13:12,450 --> 01:13:17,900 והוא יכול לאפשר לך בערך חנות כל מספר שאתה יכול לרצות. 1488 01:13:17,900 --> 01:13:20,940 אבל רק באופן אינטואיטיבי, אם אתה יש מספר סופי של ביטים, 1489 01:13:20,940 --> 01:13:24,560 אתה יכול רק permute אותם בכל כך הרבה דרכים סופיות. 1490 01:13:24,560 --> 01:13:26,570 אז אתה לא יכול להשתמש מספר סופי 1491 01:13:26,570 --> 01:13:29,880 של תמורה של ביטים, דפוסים של אפסים ואחדים, 1492 01:13:29,880 --> 01:13:32,940 לייצג אינסופי מספר המספרים, 1493 01:13:32,940 --> 01:13:37,370 אשר טוען כי מחשבים אולי טוב מאוד להיות משקרים לנו לפעמים. 1494 01:13:37,370 --> 01:13:38,770 >> למעשה, בוא נעשה את זה. 1495 01:13:38,770 --> 01:13:41,239 תן לי לחזור לתוך IDE CS50. 1496 01:13:41,239 --> 01:13:43,030 תן לי ללכת קדימה ליצור תוכנה קטנה 1497 01:13:43,030 --> 01:13:47,940 קרא חוסר דיוק, כדי להראות כי מחשבים הם, אכן, לא מדויקים. 1498 01:13:47,940 --> 01:13:51,910 >> ותנו לי להתקדם ולהתחיל עם חלק הקוד מלפני, 1499 01:13:51,910 --> 01:13:53,830 ועכשיו רק לבצע את הפעולות הבאות. 1500 01:13:53,830 --> 01:14:03,640 תן לי ללכת ולעשות printf, אחוזים f, מהלך סרק n, 1 חלק 10. 1501 01:14:03,640 --> 01:14:07,430 במילים אחרות, בואו לצלול עמוק יותר כדי 1/10, כמו 1 ומחולק 10. 1502 01:14:07,430 --> 01:14:09,760 אין ספק, מחשב יכול לייצג 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> אז בואו נלך קדימה ולעשות חוסר דיוק. 1504 01:14:13,620 --> 01:14:14,390 בוא נראה. 1505 01:14:14,390 --> 01:14:16,210 פורמט מציין סוג כפול. 1506 01:14:16,210 --> 01:14:18,160 אבל יש את הטיעון int סוג. 1507 01:14:18,160 --> 01:14:19,040 מה קורה? 1508 01:14:19,040 --> 01:14:21,970 >> אה, מעניין, אז זה כלקח מלפני. 1509 01:14:21,970 --> 01:14:26,050 אני אומר, היי, להראות מחשב לי לצוף עם אחוזים f. 1510 01:14:26,050 --> 01:14:28,200 אבל אני נותן אותו 2 ints. 1511 01:14:28,200 --> 01:14:31,120 אז מתברר, אני יכול לתקן זאת בכמה דרכים. 1512 01:14:31,120 --> 01:14:38,430 >> יכולתי פשוט להפוך אחד אל 1.0, ו 10 לתוך 10.0, אשר היה, אכן, 1513 01:14:38,430 --> 01:14:42,390 יש את ההשפעה של המרה אותם floats-- עדיין מקווה 1514 01:14:42,390 --> 01:14:43,180 מספר זהה. 1515 01:14:43,180 --> 01:14:45,880 או מתברר שיש משהו נראים שוב תוך זמן קצר. 1516 01:14:45,880 --> 01:14:47,170 אתה יכול להטיל את המספרים. 1517 01:14:47,170 --> 01:14:49,880 >> אתה יכול, תוך שימוש בסוגריים זה ביטוי, אתה יכול להגיד, 1518 01:14:49,880 --> 01:14:52,560 היי, מחשב, קח את זה 10, אשר אני יודע הוא int. 1519 01:14:52,560 --> 01:14:54,660 אבל להתייחס אליו, בבקשה, כאילו שזה לצוף. 1520 01:14:54,660 --> 01:14:56,680 אבל זה מרגיש שלא לצורך מורכב. 1521 01:14:56,680 --> 01:14:59,040 >> לענייננו היום, בואו פשוט ממש 1522 01:14:59,040 --> 01:15:02,700 להפוך אותם צפים ערכי צבע עם נקודה עשרונית, ככה. 1523 01:15:02,700 --> 01:15:07,060 תן לי להמשיך בשידור חוזר, לעשות חוסר דיוק, טוב, לוכסן נקודה 1524 01:15:07,060 --> 01:15:08,870 חוסר דיוק, זן. 1525 01:15:08,870 --> 01:15:10,990 בסדר, אנחנו מחפשים טובים. 1526 01:15:10,990 --> 01:15:18,194 >> 1 חלק 10, על פי שלי Mac כאן, הוא, אכן, 0.100000. 1527 01:15:18,194 --> 01:15:21,360 עכשיו, אותי לימדו בבית הספר היסודי שם צריך להיות מספר אינסופי של ספרות 0. 1528 01:15:21,360 --> 01:15:23,151 אז בואו לפחות לנסות לראות כמה מאלה. 1529 01:15:23,151 --> 01:15:26,770 מתברר כי printf הוא קצת להשתכלל עדיין ממה שאנחנו כבר משתמשים. 1530 01:15:26,770 --> 01:15:30,890 מתברר שאתה לא צריך לציין רק אחוז f, או סתם אני אחוזים. 1531 01:15:30,890 --> 01:15:33,830 למעשה אתה יכול לציין כמה אפשרויות שליטה כאן. 1532 01:15:33,830 --> 01:15:36,470 >> באופן ספציפי, אני הולך לומר, היי, printf, 1533 01:15:36,470 --> 01:15:39,660 למעשה להראות לי 10 נקודות עשרוניות. 1534 01:15:39,660 --> 01:15:40,820 אז זה נראה לי קצת מוזר. 1535 01:15:40,820 --> 01:15:42,845 אבל אתה אומר אחוזים, מספרי נקודה, כמה 1536 01:15:42,845 --> 01:15:44,970 אתה רוצה לראות אחרי נקודה עשרונית, ולאחר מכן f 1537 01:15:44,970 --> 01:15:48,340 עבור שטוח, רק בגלל זה מה בתיעוד אומר. 1538 01:15:48,340 --> 01:15:50,080 תן לי ללכת קדימה ולשמור את זה. 1539 01:15:50,080 --> 01:15:52,460 >> ושימו לב גם, אני מקבל נמאס להקליד מחדש דברים. 1540 01:15:52,460 --> 01:15:55,900 אז אני רק קביעה מעלה חץ למטה על המפתחות שלי כאן. 1541 01:15:55,900 --> 01:15:58,710 ואם אני ממשיך להכות, אתה יכול לראות את כל הפקודות 1542 01:15:58,710 --> 01:16:01,090 כי עשיתי, או שגוי עשיתי. 1543 01:16:01,090 --> 01:16:04,630 >> ואני הולך קדימה עכשיו לא ממש להשתמש בזה, כנראה. 1544 01:16:04,630 --> 01:16:11,416 הפוך חוסר דיוק, נקודה סלאש imprecision-- כך 1545 01:16:11,416 --> 01:16:13,290 מה שלימדו אותי בבית הספר יסודי בודק. 1546 01:16:13,290 --> 01:16:19,010 גם אם אני להדפיס אותו עד 10 עשרוני מציב אותה, אכן, הוא 0.10000. 1547 01:16:19,010 --> 01:16:19,840 אבל אתה יודע מה? 1548 01:16:19,840 --> 01:16:21,150 >> בואו לקבל קצת חמדן. 1549 01:16:21,150 --> 01:16:23,990 נניח, כמו, הראה לי 55 מצביע אחרי הנקודה העשרונית. 1550 01:16:23,990 --> 01:16:26,160 בואו באמת לקחת את זה לתכנת לסיבוב. 1551 01:16:26,160 --> 01:16:31,170 תן לי לסדר את זה עם איפור חוסר דיוק, לוכסן נקודה, אי-דיוק. 1552 01:16:31,170 --> 01:16:32,390 >> והנה אנחנו הולכים. 1553 01:16:32,390 --> 01:16:34,420 הילדות שלך הייתה שקר. 1554 01:16:34,420 --> 01:16:48,410 ככל הנראה, 1 חלק 10 הוא אכן 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> מה קורה? 1556 01:16:49,740 --> 01:16:53,360 ובכן, מתברר, אם אתה סוג של להסתכל רחוק מספיק בחוץ הבסיסי 1557 01:16:53,360 --> 01:16:55,950 ייצוג זה מספר, זה באמת 1558 01:16:55,950 --> 01:17:00,400 הוא לא בדיוק 1/10, או 0.1 ו מספר אינסופי של אפסים. 1559 01:17:00,400 --> 01:17:01,630 עכשיו, מדוע זה כך? 1560 01:17:01,630 --> 01:17:06,250 >> ובכן, למרות שזה פשוט מספר לנו, בני אדם, 1 חלק 10, 1561 01:17:06,250 --> 01:17:10,910 זה עדיין אחד אינסוף מספרים שנוכל להמציא. 1562 01:17:10,910 --> 01:17:14,490 אבל מחשב יכול לייצג רק סופי של מספרים כך. 1563 01:17:14,490 --> 01:17:18,710 וכך, באופן יעיל, מה המחשב מראה לנו הוא הקרוב ביותר שלה 1564 01:17:18,710 --> 01:17:22,940 קירוב למספר אנחנו רוצים להאמין הוא 1/10, 1565 01:17:22,940 --> 01:17:27,760 או באמת אינסוף 0.10000. 1566 01:17:27,760 --> 01:17:30,425 >> במקום זאת, אם כי, זה קרוב ככל שהיא יכולה לקבל. 1567 01:17:30,425 --> 01:17:32,300 ואכן, אם אתה מסתכל מתחת למכסה המנוע, 1568 01:17:32,300 --> 01:17:37,050 כמו שאנחנו כאן מלהסתכל 55 ספרות אחרי הנקודה העשרונית, 1569 01:17:37,050 --> 01:17:39,990 שאנחנו רואים בפועל מציאות. 1570 01:17:39,990 --> 01:17:42,610 עכשיו במאמר מוסגר, אם יש לך שמעולם לא ראה את movie-- 1571 01:17:42,610 --> 01:17:45,780 רובכם כנראה haven't-- אבל סופרמן 3 לפני כמה שנים, 1572 01:17:45,780 --> 01:17:49,500 ריצ'רד פריור בעצם ממנף את זה המציאות בחברתו לגנוב הרבה 1573 01:17:49,500 --> 01:17:53,500 של שברים שברים של פרוטות, משום company-- ככל הזכור לי, 1574 01:17:53,500 --> 01:17:57,210 זה היה while-- היה בעיקרו זורק משהו שלא התאים 1575 01:17:57,210 --> 01:17:58,790 אל הרעיון של סנט. 1576 01:17:58,790 --> 01:18:01,480 >> אבל אם אתה מוסיף את כל אלה מספרים קטנטנים, זעירים שוב, 1577 01:18:01,480 --> 01:18:04,960 ושוב, ושוב, אתה יכול, כמו במקרה שלו, להפוך סכום כסף טוב. 1578 01:18:04,960 --> 01:18:08,010 >> רעיון באותו נתלש ידי עדכן יותר, אבל עדיין כבר מבוגר 1579 01:18:08,010 --> 01:18:10,500 הסרט, שנקרא שטחי משרדים, איפה החבר'ה בסרט ההוא, 1580 01:18:10,500 --> 01:18:13,501 עשה את אותו הדבר, דפקת את לחלוטין, בסופו של דבר עם הרבה יותר מדי 1581 01:18:13,501 --> 01:18:14,666 כסף בחשבון הבנק שלהם. 1582 01:18:14,666 --> 01:18:15,800 הכל היה מאוד חשוד. 1583 01:18:15,800 --> 01:18:19,290 אבל בסוף היום, חוסר דיוק הוא סביבנו. 1584 01:18:19,290 --> 01:18:22,240 >> וזה גם יכול להיות להחריד במקרה. 1585 01:18:22,240 --> 01:18:25,590 מתברר כי סופרמן 3 ו- Office Space הצידה, שם 1586 01:18:25,590 --> 01:18:28,460 יכול להיות קצת מאוד אמיתי השלכות בעולם 1587 01:18:28,460 --> 01:18:32,290 של המציאות של מדויק ייצוג של נתונים 1588 01:18:32,290 --> 01:18:34,770 שגם אנחנו בני אדם היום הזה לא בהכרח 1589 01:18:34,770 --> 01:18:38,230 להבין גם כמו שצריך, או לזכור לעתים קרובות ככל שאנחנו צריכים. 1590 01:18:38,230 --> 01:18:42,950 ואכן, הקליפ הבא הוא מתוך מבט על כמה עולם מאוד אמיתי 1591 01:18:42,950 --> 01:18:47,730 ההשלכות של מה קורה אם אתה לא מעריך את חוסר הדיוק כי 1592 01:18:47,730 --> 01:18:50,065 יכול לקרות בייצוג מספרים. 1593 01:18:50,065 --> 01:18:51,300 >> [הפעלת סרטון] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, כל שהתרגלנו לקבל הבעיות המתסכלות לעתים קרובות כי 1595 01:18:55,620 --> 01:19:00,310 ללכת עם them-- באגים, וירוסים, ותקלות תוכנה, 1596 01:19:00,310 --> 01:19:03,130 עבור מחירים קטנים לשלם לנוחיות. 1597 01:19:03,130 --> 01:19:07,800 אבל בהיי-טק ומהירות גבוהה יישומים צבאיים תוכנית החלל, 1598 01:19:07,800 --> 01:19:12,800 הבעיה הכי קטנה יכולה להיות מוגדל לאסון. 1599 01:19:12,800 --> 01:19:18,900 >> ב -4 ביוני 1996, מדענים מוכנים להשיק טיל בלתי מאויש Ariane 5. 1600 01:19:18,900 --> 01:19:21,220 הוא נשא מדעי לוויינים תוכנן 1601 01:19:21,220 --> 01:19:24,600 להקים במדויק את מידת הסטייה אינטראקציה השדה המגנטי של כדור הארץ 1602 01:19:24,600 --> 01:19:27,410 עם רוחות שמש. 1603 01:19:27,410 --> 01:19:30,800 הרקטה נבנתה עבור סוכנות החלל האירופית, 1604 01:19:30,800 --> 01:19:34,370 והמריא מהמתקן שלה בחוף של גיאנה הצרפתית. 1605 01:19:34,370 --> 01:19:37,540 >> בטיילת כ -37 שניות לתוך הטיסה, הם ראשונים 1606 01:19:37,540 --> 01:19:39,270 משהו שם לב היה משתבש. 1607 01:19:39,270 --> 01:19:42,250 הדיזות היו מסתובבות ב בדרך הם באמת לא צריכים. 1608 01:19:42,250 --> 01:19:46,580 כ -40 שניות לאחר ההמראה, בבירור, הרכב היה בצרות. 1609 01:19:46,580 --> 01:19:48,850 >> וזה כשעשה החלטה להרוס אותו. 1610 01:19:48,850 --> 01:19:52,780 קצין בטיחות המגוון, עם אומץ אדיר, לחץ על הכפתור, 1611 01:19:52,780 --> 01:19:58,150 פוצץ את הרקטות, לפני שהיא יכולה הפך למפגע בשלומו של הציבור. 1612 01:19:58,150 --> 01:20:01,060 >> -זהו היתה העלמה המסע של אריאן 5. 1613 01:20:01,060 --> 01:20:03,960 והריסתה לקחה למקם בגלל פגם 1614 01:20:03,960 --> 01:20:05,822 מוטבע התוכנה של הרקטה. 1615 01:20:05,822 --> 01:20:08,280 -The בעיה על אריאן היה כי החוליה מנתה מספר כי 1616 01:20:08,280 --> 01:20:10,600 נדרש 64 סיביות להביע. 1617 01:20:10,600 --> 01:20:13,590 והם רצו להמיר אותו מספר של 16 סיביות. 1618 01:20:13,590 --> 01:20:15,610 הם הניחו כי מספר לא הולך 1619 01:20:15,610 --> 01:20:20,980 להיות גדול מאוד, כי רוב אלה ספרות מספר 64 סיבי היו אפסים. 1620 01:20:20,980 --> 01:20:22,440 הם טעו. 1621 01:20:22,440 --> 01:20:25,060 >> -The חוסר יכולת של אחד תוכנה לקבל 1622 01:20:25,060 --> 01:20:29,510 סוג של מספר שנוצר על ידי אחר היה בשורש של הכישלון. 1623 01:20:29,510 --> 01:20:34,350 פיתוח תוכנה הפך מאוד יקר חלק טכנולוגיה חדשה. 1624 01:20:34,350 --> 01:20:38,140 רקטת Ariane הייתה מאוד מוצלח, כל כך הרבה של התוכנה 1625 01:20:38,140 --> 01:20:41,550 נוצר מפני שהיה בהם גם המשמש Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -The הבעיה הבסיסית הייתה כי אריאן 5 היה מהיר יותר, האצה מהירה יותר. 1627 01:20:47,940 --> 01:20:51,450 ואת התוכנה לא הייתה אחריות לכך. 1628 01:20:51,450 --> 01:20:55,060 >> -The חורבן הרקטה היה אסון כלכלי עצום, 1629 01:20:55,060 --> 01:20:58,790 הכל בגלל שגיאת תוכנה דקה. 1630 01:20:58,790 --> 01:21:01,210 אבל זה לא היה ראשון בעיות המרת נתוני זמן 1631 01:21:01,210 --> 01:21:04,820 שמטריד טכנולוגיות טילים מודרניות. 1632 01:21:04,820 --> 01:21:08,050 >> -in 1991, עם תחילת מלחמת המפרץ הראשונה, 1633 01:21:08,050 --> 01:21:10,570 הטיל הפטריוט חווה סוג דומה 1634 01:21:10,570 --> 01:21:12,800 של בעיה המר מספר. 1635 01:21:12,800 --> 01:21:16,090 כתוצאה מכך, 28 אנשים, 28 חיילים אמריקאים, 1636 01:21:16,090 --> 01:21:19,080 נהרגו, וכ 100 נפצעו, 1637 01:21:19,080 --> 01:21:22,780 כאשר פטריוט, שאמור היה על מנת להגן מפני הסקאדים נכנסים, 1638 01:21:22,780 --> 01:21:25,830 נכשל לירות טיל. 1639 01:21:25,830 --> 01:21:31,670 >> -כאשר עיראק פלשה לכווית, ובאמריקה השיק סופה במדבר בתחילת שנת 1991, 1640 01:21:31,670 --> 01:21:35,780 סוללות טילי פטריוט נפרסו כדי להגן על ערב הסעודית וישראל 1641 01:21:35,780 --> 01:21:39,230 מפני התקפות טילי סקאד עיראקיים. 1642 01:21:39,230 --> 01:21:43,810 הפטריוט הוא מגוון-בינוני בארה"ב משטח למערכת אוויר, מיוצר 1643 01:21:43,810 --> 01:21:45,770 על ידי חברת Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -The גודל של המיירט הפטריוט עצמו הוא על בערך באורך 20 מטרים. 1645 01:21:52,340 --> 01:21:55,230 והוא שוקל כ -2,000 ק"ג. 1646 01:21:55,230 --> 01:21:59,320 והיא נושאת ראש נפץ של כ, אני חושב שזה בערך 150 ק"ג. 1647 01:21:59,320 --> 01:22:03,930 ואת ראש הנפץ עוצמה הוא חומר נפץ מסוכן, אשר 1648 01:22:03,930 --> 01:22:07,330 רסיסים סביבו. 1649 01:22:07,330 --> 01:22:11,680 המעטפת של הראש הקרבי היא מיועד לפעול כמו כדור עופרת. 1650 01:22:11,680 --> 01:22:14,110 >> טילי -The מתבצעים ארבע למכולה, 1651 01:22:14,110 --> 01:22:17,130 ו מועברים על ידי קרוואן למחצה. 1652 01:22:17,130 --> 01:22:24,930 >> -The מערכה אנטי טילים פטריוטים חוזר לפחות עכשיו 20 שנים. 1653 01:22:24,930 --> 01:22:28,420 זה היה במקור תוכנן כמו טיל הגנה אווירית 1654 01:22:28,420 --> 01:22:30,720 כדי להפיל את מטוסי האויב. 1655 01:22:30,720 --> 01:22:34,500 במלחמת המפרץ הראשונה, כשהמלחמה כי הגיעה יחד, 1656 01:22:34,500 --> 01:22:39,745 הצבא רצה להשתמש בו כדי להפיל הסקאדים, לא מטוסים. 1657 01:22:39,745 --> 01:22:43,620 >> חיל האוויר העיראקי היה לא כל כך בעיה גדולה. 1658 01:22:43,620 --> 01:22:46,670 אבל הצבא היה מודאג לגבי הסקאדים. 1659 01:22:46,670 --> 01:22:50,170 וכך הם ניסו לשדרג את הפטריוט. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting אויב טיל נוסעים מאך 5 1661 01:22:52,800 --> 01:22:55,830 הולך להיות מאתגר מספיק. 1662 01:22:55,830 --> 01:22:58,490 אבל כאשר הפטריוט הובהל לשירות, 1663 01:22:58,490 --> 01:23:02,860 הצבא לא היה מודע של שינוי העיראקי שגרם 1664 01:23:02,860 --> 01:23:05,930 הסקאדים שלהם כמעט בלתי אפשרי להכות. 1665 01:23:05,930 --> 01:23:10,740 >> -מה קרה הוא הסקאדים כי היו נכנסים היו יציבים. 1666 01:23:10,740 --> 01:23:11,692 הם כשלו. 1667 01:23:11,692 --> 01:23:14,910 הסיבה לכך היתה העיראקים, כדי 1668 01:23:14,910 --> 01:23:18,280 כדי לקבל 600 ק"מ מתוך 300 קילומטר 1669 01:23:18,280 --> 01:23:21,700 טיל טווח, הרים את משקלה מתוך הראש הקרבי הקדמי. 1670 01:23:21,700 --> 01:23:23,390 הם עשו את ראש הנפץ קל. 1671 01:23:23,390 --> 01:23:27,330 >> אז עכשיו את הפטריוט הוא מנסה לבוא על סקאד. 1672 01:23:27,330 --> 01:23:30,230 ורוב הזמן, רוב מכריע של הזמן, 1673 01:23:30,230 --> 01:23:32,940 זה פשוט יטוס על ידי סקאד. 1674 01:23:32,940 --> 01:23:37,260 לאחר מפעילי מערכת הפטריוט הפטריוט הבין יחטיא את מטרתו, 1675 01:23:37,260 --> 01:23:41,690 הם פוצצו את הראש הקרבי של הפטריוט כדי להימנע מפגיעה אפשרית אם זה 1676 01:23:41,690 --> 01:23:44,570 הורשה ליפול אל הקרקע. 1677 01:23:44,570 --> 01:23:48,790 >> ההיא." היה מה שרוב האנשים ראו, אלה כדורי אש גדולים בשמים, 1678 01:23:48,790 --> 01:23:54,550 ולא מובן כפי מיירט של ראשי נפץ סקאד. 1679 01:23:54,550 --> 01:23:56,630 >> אמנם, בלילה שמיים, הפטריוטס הופיע 1680 01:23:56,630 --> 01:24:00,370 להיות בהצלחה להרוס הסקאדים, ב Dhahran, 1681 01:24:00,370 --> 01:24:03,360 לא יכולה להיות טעות בנוגע לביצועים שלה. 1682 01:24:03,360 --> 01:24:07,970 יש, מערכת המכ"ם של הפטריוט אבד את התחושה של בטיל סקאד, 1683 01:24:07,970 --> 01:24:10,721 ולעולם השיק בשל כדי פגם בתוכנה. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 זה היה הישראלים שגילו ראשון כי הייתה המערכת כבר על, 1686 01:24:18,940 --> 01:24:22,690 פער הזמן יותר הפך, עקב שעון משובץ 1687 01:24:22,690 --> 01:24:24,810 במחשב של המערכת. 1688 01:24:24,810 --> 01:24:28,210 >> -About שבועות לפני הטרגדיה Dhahran, 1689 01:24:28,210 --> 01:24:30,770 הישראלים דיווחו משרד ההגנה 1690 01:24:30,770 --> 01:24:32,590 שמערכת מאבד מזמנו. 1691 01:24:32,590 --> 01:24:35,360 אחרי כשמונה שעות או ריצה, הם הבחינו כי המערכת 1692 01:24:35,360 --> 01:24:37,720 נעשה באופן ניכר פחות מדויק. 1693 01:24:37,720 --> 01:24:41,900 משרד ההגנה הגיב לספר את כל הסוללות הפטריוטיות 1694 01:24:41,900 --> 01:24:44,950 לא לעזוב את המערכות במשך זמן רב. 1695 01:24:44,950 --> 01:24:49,160 הם לא אמרו מה זמן רב was-- שמונה שעות, 10 שעות, 1,000 שעות. 1696 01:24:49,160 --> 01:24:51,360 אף אחד לא ידע. 1697 01:24:51,360 --> 01:24:53,380 >> -The סוללה הפטריוטית מוצבי הצריפים 1698 01:24:53,380 --> 01:24:58,350 ב Dhahran והפנימי שלה הפגום השעון היה על מעל 100 שעות 1699 01:24:58,350 --> 01:25:01,670 בליל ה -25 בפברואר. 1700 01:25:01,670 --> 01:25:05,917 >> -זה במעקב הזמן ברמת דיוק של כעשירית שנייה. 1701 01:25:05,917 --> 01:25:08,000 עכשיו, עשירית שנייה הוא מספר מעניין, 1702 01:25:08,000 --> 01:25:11,920 כי זה לא יכול לבוא לידי ביטוי ב בינארי בדיוק, אשר 1703 01:25:11,920 --> 01:25:16,820 שאומר שהוא לא יכול לבוא לידי ביטוי בדיוק בכל מחשב דיגיטלי מודרני. 1704 01:25:16,820 --> 01:25:18,540 קשה להאמין. 1705 01:25:18,540 --> 01:25:21,210 >> אבל להשתמש בהם כדוגמה. 1706 01:25:21,210 --> 01:25:23,540 בואו ניקח את השלישי מספר אחד. 1707 01:25:23,540 --> 01:25:27,350 שליש לא יכול להיות ביטוי עשרוני בדיוק. 1708 01:25:27,350 --> 01:25:32,080 שליש הוא 0.333 נמשך לאינסוף. 1709 01:25:32,080 --> 01:25:36,480 >> אין דרך לעשות את זה עם דיוק מוחלט עשרוני. 1710 01:25:36,480 --> 01:25:39,560 זה בדיוק סוג של בעיה שקר הפטריוט. 1711 01:25:39,560 --> 01:25:44,100 ככל מערכת רץ, גרוע שגיאת הזמן הפכה. 1712 01:25:44,100 --> 01:25:48,890 >> -אחרי 100 שעות של המבצע, שגיאת בזמן הייתה רק כשליש 1713 01:25:48,890 --> 01:25:50,600 של שנייה. 1714 01:25:50,600 --> 01:25:54,210 אבל מבחינת מיקוד טיל נוסעים מאך 5, 1715 01:25:54,210 --> 01:25:58,710 זה הביא מעקב שגיאה של למעלה מ -600 מטרים. 1716 01:25:58,710 --> 01:26:02,120 זו תהיה שגיאה חמורה עבור החיילים על מה 1717 01:26:02,120 --> 01:26:08,940 קרה הוא השקת סקאד היה זוהה על ידי לוויני אזהרה מוקדמים 1718 01:26:08,940 --> 01:26:12,860 והם ידעו כי סקאד היה מתקדם לכיוון הכללי שלהם. 1719 01:26:12,860 --> 01:26:15,320 הם לא ידעו מאיפה זה בא. 1720 01:26:15,320 --> 01:26:18,250 >> -זה היה עכשיו עד לרדאר רכיב של מערכת הפטריוט 1721 01:26:18,250 --> 01:26:23,190 בהגנה Dhahran לאתר ולשמור מסלול של טיל האויב הנכנס. 1722 01:26:23,190 --> 01:26:24,609 >> -The המכ"ם היה מאוד חכם. 1723 01:26:24,609 --> 01:26:26,650 זה היה למעשה לעקוב אחר עמדת סקאד, 1724 01:26:26,650 --> 01:26:30,350 ואז לחזות היכן זה כנראה יהיה בפעם הבאה לרדאר שלח 1725 01:26:30,350 --> 01:26:31,420 דופק החוצה. 1726 01:26:31,420 --> 01:26:33,110 זה נקרא שער טווח. 1727 01:26:33,110 --> 01:26:37,660 >> -Then, פעם הפטריוטית מחליט מספיק זמן יש 1728 01:26:37,660 --> 01:26:42,450 עברו לחזור ולבדוק את הבא מיקום אובייקט מזוהה זה, 1729 01:26:42,450 --> 01:26:43,600 זה הולך אחורה. 1730 01:26:43,600 --> 01:26:48,650 אז כשזה חזר אל הלא נכון במקום, לאחר מכן הוא רואה שום חפץ. 1731 01:26:48,650 --> 01:26:52,160 והוא מחליט כי אין אובייקט, זה היה גילוי שווא, 1732 01:26:52,160 --> 01:26:53,930 וטיפות את המסלול. 1733 01:26:53,930 --> 01:26:57,030 >> -The בטיל סקאד נעלם ממסך המכ"ם. 1734 01:26:57,030 --> 01:27:00,260 ושניות לאחר מכן, זה טרק לצריפים. 1735 01:27:00,260 --> 01:27:06,150 הסקאד נהרג 28, והיה האחרון אחד ירה במלחמת המפרץ הראשונה. 1736 01:27:06,150 --> 01:27:11,960 >> באופן טרגי, התוכנה המעודכנת הגיע Dhahran למחרת. 1737 01:27:11,960 --> 01:27:14,930 היה התוכנה פגם קבוע כבר, סגירה 1738 01:27:14,930 --> 01:27:19,806 פרק אחד המוטרד ההיסטוריה של הטילים הפטריוטים. 1739 01:27:19,806 --> 01:27:20,729 >> [הפעלת סרטון] 1740 01:27:20,729 --> 01:27:23,520 דוד י מלאן: אז זהו הכל אומר כי בעיות אלה של הצפה 1741 01:27:23,520 --> 01:27:25,860 ואי-דיוק הם למאוד מציאותי. 1742 01:27:25,860 --> 01:27:26,920 אז איך הגענו לכאן? 1743 01:27:26,920 --> 01:27:28,895 התחלנו עם מדברת רק על printf. 1744 01:27:28,895 --> 01:27:31,270 שוב, פונקציה זו כי מדפיס משהו למסך, 1745 01:27:31,270 --> 01:27:33,450 ואנחנו הצגנו ואילך כמה פונקציות אחרות 1746 01:27:33,450 --> 01:27:34,945 מהספרייה שנקראה CS50. 1747 01:27:34,945 --> 01:27:36,910 ואנחנו נמשיך לראות אותם בבוא הזמן. 1748 01:27:36,910 --> 01:27:40,760 ואנחנו, במיוחד, המשמשים מחרוזת גט, ולקבל int, ועכשיו גם לקבל לצוף, 1749 01:27:40,760 --> 01:27:44,410 ובכל זאת אחרים עדיין אנו נתקלים ולהשתמש עצמנו תוך זמן קצר. 1750 01:27:44,410 --> 01:27:47,220 >> אבל מדי פעם, יש כבר ראינו צורך 1751 01:27:47,220 --> 01:27:50,520 לאחסן פונקציות אלה היד מה בחזרה? 1752 01:27:50,520 --> 01:27:52,920 הם מחלקים אותנו בחזרה מחרוזת, או int, או לצוף. 1753 01:27:52,920 --> 01:27:56,070 ולפעמים אנחנו צריכים לשים את זה שרוכים או int, או לצוף, איפשהו. 1754 01:27:56,070 --> 01:28:00,100 >> וכדי לאחסן דברים אלה, זוכר רק כמו גרד, יש לנו משתנה. 1755 01:28:00,100 --> 01:28:03,260 אבל שלא כמו שריטה, יש בדו לנו סוגים בפועל 1756 01:28:03,260 --> 01:28:05,530 נתוני variables-- סוגים, יותר generally-- 1757 01:28:05,530 --> 01:28:08,640 ביניהם, מקבלת מחרוזת, int, לצוף, ואחרים אלה עדיין. 1758 01:28:08,640 --> 01:28:12,321 >> וכך כאשר אנו להצהיר על משתנים ב C, נצטרך להכריז סוגי הנתונים שלנו. 1759 01:28:12,321 --> 01:28:14,820 זה לא משהו יהיה לנו צריך לעשות בהמשך הסמסטר 1760 01:28:14,820 --> 01:28:16,810 כפי שאנו המעבר לשפות אחרות. 1761 01:28:16,810 --> 01:28:19,610 אבל לעת עתה, אנחנו צריכים כדי אפריורי מראש, 1762 01:28:19,610 --> 01:28:24,370 להסביר למחשב איזה סוג של משתנה ואנחנו רוצים את זה כדי לתת לנו. 1763 01:28:24,370 --> 01:28:27,290 >> עכשיו, לעומת זאת, להדפיס אלו סוגים של סוגי נתונים, 1764 01:28:27,290 --> 01:28:29,570 יש לנו לספר printf למה לצפות. 1765 01:28:29,570 --> 01:28:32,450 וראינו s אחוזים עבור מחרוזות, ואחוזי i עבור מספרים שלמים, 1766 01:28:32,450 --> 01:28:33,790 ועוד כמה אנשים כבר. 1767 01:28:33,790 --> 01:28:37,237 ואלה הם פשוט דרישות עבור מצגת ויזואלית 1768 01:28:37,237 --> 01:28:38,070 של מידע זה. 1769 01:28:38,070 --> 01:28:42,080 >> וכל אחד מהם יכול להיות באמת parametrized או צבט בדרך כלשהי, 1770 01:28:42,080 --> 01:28:45,370 אם אתה רוצה שליטה רבה יותר על לסוג הפלט שאתה מקבל. 1771 01:28:45,370 --> 01:28:49,604 ואכן, מתברר כי לא רק הוא מהלך סרק יש n עבור קו חדש. 1772 01:28:49,604 --> 01:28:52,520 יש משהו שנקרא אחר מהלך סרק r עבור מעבר לשורה, אשר 1773 01:28:52,520 --> 01:28:54,360 משול יותר כדי מכונת כתיבת ספר ישנה, 1774 01:28:54,360 --> 01:28:57,690 וגם Windows בשימוש במשך שנים רבות. 1775 01:28:57,690 --> 01:28:59,690 >> יש t הנטוי ההפוך עבור כרטיסיות. 1776 01:28:59,690 --> 01:29:03,170 מסתבר, כי אם אתה רוצה מרכאות כפולות בתוך מחרוזת, 1777 01:29:03,170 --> 01:29:05,000 נזכיר כי השתמשנו כפול מרכאות כפולות 1778 01:29:05,000 --> 01:29:07,900 ציטוט על השמאל והימין מסתיים של המחרוזות שלנו עד כה. 1779 01:29:07,900 --> 01:29:09,420 זה היה נראה לבלבל דברים. 1780 01:29:09,420 --> 01:29:12,503 >> אם אתה רוצה לשים מרכאות כפולות ב באמצע string--, ואכן, 1781 01:29:12,503 --> 01:29:13,670 זה מבלבל לראות. 1782 01:29:13,670 --> 01:29:17,120 וכך אתה צריך לברוח, אם אפשר לדבר, מרכאות כפולות עם משהו 1783 01:29:17,120 --> 01:29:18,860 כמו, פשוטו כמשמעו, מהלך סרק מרכאות כפולות. 1784 01:29:18,860 --> 01:29:20,230 ויש כמה אחרים עדיין. 1785 01:29:20,230 --> 01:29:24,540 ואנחנו נראה יותר מאלה משתמשים בו בפועל לפני זמן רב. 1786 01:29:24,540 --> 01:29:27,930 >> אז בואו עכשיו מעבר מן נתונים, וייצוג, 1787 01:29:27,930 --> 01:29:30,820 ו אופרטורים אריתמטיים, כל מהם נתן לנו איזה בניין 1788 01:29:30,820 --> 01:29:32,070 בלוקים שבה לשחק. 1789 01:29:32,070 --> 01:29:34,481 אבל עכשיו בואו למעשה לתת לנו שאר אוצר המילים 1790 01:29:34,481 --> 01:29:36,230 כי כבר היו לנו בשבוע שעבר עם שריטה 1791 01:29:36,230 --> 01:29:39,350 על ידי לקיחת מבט על כמה אחרים בונה ב C-- לא כולם. 1792 01:29:39,350 --> 01:29:41,680 אבל הרעיונות שאנחנו על מנת לראות באמת רק 1793 01:29:41,680 --> 01:29:45,610 כדי להדגיש את התרגום שפה אחת, שריטה, למשנהו, ג 1794 01:29:45,610 --> 01:29:48,470 >> פעם אחר פעם, נבוא לאסוף כלים נוספים עבור ערכת הכלים שלנו, 1795 01:29:48,470 --> 01:29:49,820 כביכול, מבחינה תחבירית. 1796 01:29:49,820 --> 01:29:54,190 ואכן, תראה שהרעיונות עכשיו הם די מוכרים משבוע שעבר. 1797 01:29:54,190 --> 01:29:55,200 אז בוא נעשה את זה. 1798 01:29:55,200 --> 01:29:58,870 >> בואו נלך קדימה להלהיב תכנית כי בעצם משתמש כמה ביטויים, 1799 01:29:58,870 --> 01:30:00,720 ביטוי בוליאני. 1800 01:30:00,720 --> 01:30:02,810 תן לי ללכת קדימה כאן וליצור קובץ חדש. 1801 01:30:02,810 --> 01:30:06,090 אני אתקשר condition.c זה. 1802 01:30:06,090 --> 01:30:09,350 >> תן לי ללכת קדימה לכלול את ספריית CS50. 1803 01:30:09,350 --> 01:30:12,640 ותן לי להמשיך ולכלול תקן IO.h לפונקציות שלנו, 1804 01:30:12,640 --> 01:30:14,690 ו printf ועוד בהתאמה. 1805 01:30:14,690 --> 01:30:18,900 תן לי לתת לעצמי מוכן מראש של void main int, שהסברה תהיה לנו 1806 01:30:18,900 --> 01:30:20,360 לחזור בעתיד. 1807 01:30:20,360 --> 01:30:23,820 >> עכשיו תנו לי להמשיך ולתת לעצמי int באמצעות int הגט. 1808 01:30:23,820 --> 01:30:25,970 אז הרשה לי להמשיך לעשות את זה. 1809 01:30:25,970 --> 01:30:30,150 אני רוצה לומר אם i הוא less-- בואו להבחין בין חיובי, שלילי, 1810 01:30:30,150 --> 01:30:31,260 או ערכי אפס. 1811 01:30:31,260 --> 01:30:36,630 >> אז אם אני הוא פחות מאפס, תן לי רק צריך תוכנית זו פשוט לומר, 1812 01:30:36,630 --> 01:30:42,370 n שלילי, מהלך סרק, אחר אם i הוא גדול מאפס. 1813 01:30:42,370 --> 01:30:47,030 עכשיו אני, כמובן, הולך להגיד printf חיובית, קו נטוי הפוך n. 1814 01:30:47,030 --> 01:30:50,690 ואז אחר שאם-- יכולתי לעשות זאת. 1815 01:30:50,690 --> 01:30:53,410 >> יכולתי לעשות אם אני שווה 0. 1816 01:30:53,410 --> 01:30:55,840 אבל בעולם שהייתי עושה בבית כבר לפחות טעות אחת. 1817 01:30:55,840 --> 01:30:59,480 נזכיר כי סימן השוויון הוא לא שווה, כפי שאנו בני האדם יודעים את זה. 1818 01:30:59,480 --> 01:31:01,010 >> אבל זה אופרטור ההשמה. 1819 01:31:01,010 --> 01:31:05,640 ואנחנו לא רוצים לקחת על 0 ימין לשים אותו אני בצד שמאל. 1820 01:31:05,640 --> 01:31:11,810 אז כדי למנוע בלבול זה, או אולי ניצול לרעה של סימן השוויון, 1821 01:31:11,810 --> 01:31:14,740 בני האדם החליטו לפני כמה שנים כי בשפות תכנות רבות 1822 01:31:14,740 --> 01:31:18,000 כאשר אתה רוצה לבדוק לשוויון בין השמאל והימין, 1823 01:31:18,000 --> 01:31:19,635 אתה בעצם משתמש שווה בין שווים. 1824 01:31:19,635 --> 01:31:21,010 אז אתה מכה את סימן השווה פעמיים. 1825 01:31:21,010 --> 01:31:25,600 כאשר אתה רוצה להקצות מימין לשמאל, אתה משתמש כניסה יחידה שווה. 1826 01:31:25,600 --> 01:31:29,360 אז נוכל לעשות זה- אחר אם אני שווה שווה אפס. 1827 01:31:29,360 --> 01:31:31,710 >> יכולתי אז ללכת לפתוח סוגריים מסולסלים שלי, 1828 01:31:31,710 --> 01:31:36,087 ולומר, printf 0, קו נטוי הפוך n, נעשה. 1829 01:31:36,087 --> 01:31:38,170 אבל זוכר איך אלה מזלגות בכביש יכול לעבוד. 1830 01:31:38,170 --> 01:31:39,836 וגם, באמת, רק לחשוב על ההיגיון. 1831 01:31:39,836 --> 01:31:41,510 אני הוא מספר. 1832 01:31:41,510 --> 01:31:43,320 זה מספר שלם, באופן ספציפי. 1833 01:31:43,320 --> 01:31:48,600 וזה אומר שזה הולך להיות פחות מ 0, או גדול מ -0, או 0. 1834 01:31:48,600 --> 01:31:51,600 אז יש סוג של זה במקרה מחדל מרומז. 1835 01:31:51,600 --> 01:31:54,920 >> וכך יכולנו, בדיוק כמו Scratch, לוותר על אחר אם, 1836 01:31:54,920 --> 01:31:55,747 ופשוט לומר אחר. 1837 01:31:55,747 --> 01:31:57,830 מבחינה הגיונית, אם לי את מתכנת יודע שיש רק 1838 01:31:57,830 --> 01:32:01,635 שלושה דליים שלתוכו תרחיש יכול fall-- הראשון, 1839 01:32:01,635 --> 01:32:03,510 השני, או השלישי ב זה case-- לא 1840 01:32:03,510 --> 01:32:07,100 לטרוח להוסיף דיוק הנוסף ואת לוגיקה נוספת שם. 1841 01:32:07,100 --> 01:32:09,690 רק קדימה עם במקרה ברירת המחדל כאן של אחר. 1842 01:32:09,690 --> 01:32:11,950 >> עכשיו, בואו נלך קדימה לאחר השמירה הזה, לעשות 1843 01:32:11,950 --> 01:32:15,760 תנאי dot סלאש conditions-- לא ממשק משתמש מעולה, 1844 01:32:15,760 --> 01:32:18,914 כי אני לא להציג הודעה משתמשים, כפי שציינתי קודם לכן. 1845 01:32:18,914 --> 01:32:19,580 אבל זה בסדר. 1846 01:32:19,580 --> 01:32:20,454 אנחנו נשמור את זה פשוט. 1847 01:32:20,454 --> 01:32:21,890 בואו ננסה את המספר 42. 1848 01:32:21,890 --> 01:32:23,240 וזה חיובי. 1849 01:32:23,240 --> 01:32:26,120 בואו ננסה את המספר 42 שלילי, שלילי. 1850 01:32:26,120 --> 01:32:28,244 >> בואו ננסה את הערך 0. 1851 01:32:28,244 --> 01:32:29,160 ואכן, זה עובד. 1852 01:32:29,160 --> 01:32:33,900 עכשיו, תראה עם בעיות לפני שלוש פעמים ארוכות, דברי בדיקות, 1853 01:32:33,900 --> 01:32:34,980 כנראה לא מספיק. 1854 01:32:34,980 --> 01:32:37,438 אתה בטח רוצה לבדוק כמה מספרים גדולים, כמה קטן 1855 01:32:37,438 --> 01:32:40,520 מספרים, ובמקרים מסוימים בפינה, כמו נבוא כדי לתאר אותם. 1856 01:32:40,520 --> 01:32:42,500 >> אבל לעת עתה, זה הוא תוכנית פשוטה למדי. 1857 01:32:42,500 --> 01:32:45,160 ואני די בטוח, באופן הגיוני, כי זה נופל לתוך שלושה מקרים. 1858 01:32:45,160 --> 01:32:49,360 ואכן, למרות שאנחנו רק התמקד השלילי שלהם 1859 01:32:49,360 --> 01:32:53,480 של חוסר דיוק ואת ההצפה, ב מציאות שבה רבה של הבעיות של CS50, 1860 01:32:53,480 --> 01:32:56,000 אנחנו לא הולכים לדאוג על, כל הזמן, 1861 01:32:56,000 --> 01:32:59,050 אלה בעיות של הצפה חוסר דיוק, כי, למעשה, ב- C, 1862 01:32:59,050 --> 01:33:01,889 זה בעצם לא כל כך קל להימנע הדברים האלה. 1863 01:33:01,889 --> 01:33:04,180 אם אתה רוצה לספור עד וגדל, וגדל, וגדל, 1864 01:33:04,180 --> 01:33:07,510 מתברר ישנן טכניקות לך יכול להשתמש, לעתים קרובות מעורבים דברים בשם 1865 01:33:07,510 --> 01:33:11,240 ספריות, אוספים של קוד, כי אנשים אחרים כתבו, כי אתה יכול להשתמש, 1866 01:33:11,240 --> 01:33:13,910 ושפות אחרות כמו Java ואחרים, למעשה 1867 01:33:13,910 --> 01:33:15,800 לעשות את זה הרבה יותר קל לספור אף יותר. 1868 01:33:15,800 --> 01:33:19,810 אז זה באמת חלק הסכנות הללו פונקציה של השפה שאתה משתמש בה. 1869 01:33:19,810 --> 01:33:22,710 במהלך השבועות הקרובים, נציג לראות עד כמה מסוכן C באמת 1870 01:33:22,710 --> 01:33:24,950 יכול להיות אם אתה לא משתמש בו כראוי. 1871 01:33:24,950 --> 01:33:27,610 אבל משם, ועם Python, ו- JavaScript, יהיה 1872 01:33:27,610 --> 01:33:32,620 אנחנו שכבנו על כמה גינות נוספות, ולהפעיל פחות סיכונים אלה. 1873 01:33:32,620 --> 01:33:35,820 >> אז בוא נעשה קצת יותר היגיון מעניין בתכנית שלנו. 1874 01:33:35,820 --> 01:33:39,110 אז תנו לי להמשיך וליצור תוכנית בשם לוגי 1875 01:33:39,110 --> 01:33:43,804 רק אז אני יכול לשחק עם כמה ההיגיון בפועל, logical.c. 1876 01:33:43,804 --> 01:33:46,870 אני פשוט להעתיק ולהדביק כמה קוד מוקדם יותר, כך שאחזור 1877 01:33:46,870 --> 01:33:49,950 לנקודת התחלה זה נחמד. 1878 01:33:49,950 --> 01:33:53,980 >> תן לי הפעם לעשות ג char אני הולך לתת לו שם של C 1879 01:33:53,980 --> 01:33:58,510 רק בגלל שזה קונבנציונלי, לקבל תו מהמשתמש. 1880 01:33:58,510 --> 01:34:00,730 ובואו פנים כאילו אני ביישום חלק 1881 01:34:00,730 --> 01:34:04,130 של אותה תוכנית Rm, הסר התוכנית לפני שהניעה המשתמש 1882 01:34:04,130 --> 01:34:05,400 כדי להסיר קובץ. 1883 01:34:05,400 --> 01:34:06,750 איך נוכל לעשות את זה? 1884 01:34:06,750 --> 01:34:11,090 >> אני רוצה לומר, אם C שווה שווה, ציטוט כביכול הזאת, 1885 01:34:11,090 --> 01:34:16,304 y, אז אני הולך להניח כי שהמשתמש בוחר כן. 1886 01:34:16,304 --> 01:34:17,470 אני רק הולך להדפיס כן. 1887 01:34:17,470 --> 01:34:19,440 אם הוא היה בעצם כתיבה התכנית להסרה, 1888 01:34:19,440 --> 01:34:21,420 נוכל להסיר את הקובץ עם יותר שורות קוד. 1889 01:34:21,420 --> 01:34:22,461 אבל נשמור את זה פשוט. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> אחר אם ג שווה שווה n-- ועכשיו כאן, אני הולך להגיד, 1892 01:34:31,250 --> 01:34:32,980 המשתמש בוודאי לא התכוון. 1893 01:34:32,980 --> 01:34:34,360 ואז אחר, אתה יודע מה? 1894 01:34:34,360 --> 01:34:36,200 אני לא יודע מה עוד המשתמש הוא הולך להקליד. 1895 01:34:36,200 --> 01:34:38,533 אז אני רק הולך להגיד כי הוא שגיאה, מה 1896 01:34:38,533 --> 01:34:40,070 הוא או היא בעצם מוקלד. 1897 01:34:40,070 --> 01:34:41,180 >> אז מה קורה פה? 1898 01:34:41,180 --> 01:34:44,530 יש הבדל מהותי לעומת מה שעשיתי בעבר. 1899 01:34:44,530 --> 01:34:49,300 במרכאות כפולות, במרכאות כפולות, כפול ציטוטים, ו, עדיין, בגרשיים בודדים, 1900 01:34:49,300 --> 01:34:50,170 בגרשיים בודדים. 1901 01:34:50,170 --> 01:34:52,860 מתברר ב- C, שכאשר אתה רוצה לכתוב מחרוזת, 1902 01:34:52,860 --> 01:34:56,680 תעשה שימוש במרכאות כפולות, בדיוק כפי שאנחנו כבר כבר משתמש כל הזמן הזה עם printf. 1903 01:34:56,680 --> 01:35:02,030 >> אבל אם אתה רוצה להתמודד עם רק תו בודד, לדמות יש מה שנקרא, 1904 01:35:02,030 --> 01:35:03,780 אז אתה בעצם להשתמש בגרשיים בודדים. 1905 01:35:03,780 --> 01:35:05,450 לאלו מכם אשר כבר מתוכנים לפני, אתה לא יכול להיות 1906 01:35:05,450 --> 01:35:07,850 היה לדאוג בקשר לזה הבחנה בשפות מסוימות. 1907 01:35:07,850 --> 01:35:09,450 ב C, זה כן משנה. 1908 01:35:09,450 --> 01:35:12,560 וכך כאשר אני מקבל char ואני רוצה להשוות char ששימוש שווה 1909 01:35:12,560 --> 01:35:18,350 שווה איזה מכתב כמו y או n, אני עושה, אכן, צריך לעבור את בגרשיים הבודדים. 1910 01:35:18,350 --> 01:35:19,770 >> עכשיו, בואו נלך קדימה לעשות זאת. 1911 01:35:19,770 --> 01:35:26,180 בואו נלך קדימה עושים נקודה הגיונית סלאש הגיוני. 1912 01:35:26,180 --> 01:35:27,305 ועכשיו אני בקשת אישור. 1913 01:35:27,305 --> 01:35:30,638 אז, ככל הנראה, חווית משתמש טובה יותר למעשה היה אומר לי מה לעשות כאן. 1914 01:35:30,638 --> 01:35:33,030 אבל אני הולך רק בעיוורון אומרים y עבור yes, בסדר, נחמד. 1915 01:35:33,030 --> 01:35:35,780 >> בואו להפעיל אותו שוב, n ללא, נחמד. 1916 01:35:35,780 --> 01:35:39,610 נניח כמו אנשים מסוימים שאני מכיר, הכמוסות שלי נעילת מקשים על כל לעתים קרובות מדי. 1917 01:35:39,610 --> 01:35:43,740 אז אני עושה הון Y, זן, שגיאה. 1918 01:35:43,740 --> 01:35:46,130 בסדר, זה לא בדיוק מה שאני מצפה. 1919 01:35:46,130 --> 01:35:48,170 ואכן, המחשב עושה ממש מה 1920 01:35:48,170 --> 01:35:51,794 אמרתי את זה לבצע-- לבדוק n y והקטן קטן. 1921 01:35:51,794 --> 01:35:53,960 זה לא מרגיש כמו טוב חוויית המשתמש, אם כי. 1922 01:35:53,960 --> 01:35:59,010 הרשו לי לבקש ולקבל מקרה נמוך או אותיות גדולות. 1923 01:35:59,010 --> 01:36:02,090 אז מתברר, ייתכן שתרצה לומר משהו כמו שריטה, 1924 01:36:02,090 --> 01:36:08,150 כמו פשוטו כמשמעו או C שווה שווה y היחיד צטט הון. 1925 01:36:08,150 --> 01:36:11,400 מסתבר, C אין או מילת המפתח המילולי הזה. 1926 01:36:11,400 --> 01:36:12,880 >> אבל אכן יש שני קווים אנכיים. 1927 01:36:12,880 --> 01:36:15,463 אתה צריך להחזיק Shift בדרך כלל, אם אתה משתמש במקלדת בארה"ב, 1928 01:36:15,463 --> 01:36:18,910 במשקוף האנכי מפתח לעיל מפתח ההחזר. 1929 01:36:18,910 --> 01:36:22,410 אבל קו אנכי זה קו אנכי אומר או. 1930 01:36:22,410 --> 01:36:26,220 >> אם, לעומת זאת, רצינו לומר, כמו שריטה, 1931 01:36:26,220 --> 01:36:28,180 יכולנו לעשות אמפרסנד אמפרסנד. 1932 01:36:28,180 --> 01:36:31,330 זה לא הגיוני הגיוני כאן, כי אדם לא ייתכן 1933 01:36:31,330 --> 01:36:37,110 הקלדה היא y ו- y הקטנה וההון Y כמו אותה הדמות. 1934 01:36:37,110 --> 01:36:39,470 אז או מה שאנחנו מתכוונים כאן. 1935 01:36:39,470 --> 01:36:46,280 >> אז אם אני עושה את זה בשני המקומות, או ג שווה שווה הון N, עכשיו בשידור חוזר, 1936 01:36:46,280 --> 01:36:49,390 להפוך לוגי, בשידור חוזר הגיוני. 1937 01:36:49,390 --> 01:36:51,200 עכשיו, אני יכול להקליד y. 1938 01:36:51,200 --> 01:36:53,920 ואני יכול לעשות את זה שוב עם הון Y, או נ ההון 1939 01:36:53,920 --> 01:36:56,630 ואני יכול להוסיף נוסף שילובים עדיין. 1940 01:36:56,630 --> 01:36:58,810 >> אז זהו לוגי תכנית ככל עכשיו 1941 01:36:58,810 --> 01:37:01,940 אני בודק באופן לוגי עבור ערך זה או ערך זה. 1942 01:37:01,940 --> 01:37:06,420 ואני לא צריך, בהכרח, לבוא עם שני IFS יותר או אחר IFS. 1943 01:37:06,420 --> 01:37:09,960 אני ממש יכול לשלב כמה מן הקשורים היגיון יחד בדרך זו. 1944 01:37:09,960 --> 01:37:11,950 אז זה יהיה טוב יותר תוכנן מסתם 1945 01:37:11,950 --> 01:37:17,490 אומר, אם C שווה y הגדולה וקטנה, להדפיס כן, אחר אם ג שווה הון Y, 1946 01:37:17,490 --> 01:37:20,074 להדפיס כן, אחר אם ג שווה lower-- במילים אחרות, 1947 01:37:20,074 --> 01:37:21,990 אתה לא צריך שיהיה לך ענפים יותר ויותר. 1948 01:37:21,990 --> 01:37:28,840 ניתן לשלב כמה שווה סניפים לוגיים, כמו בדרך זו. 1949 01:37:28,840 --> 01:37:34,150 >> אז בואו נסתכל רק אחד המרכיב האחרון, מבנה אחד אחרון, 1950 01:37:34,150 --> 01:37:34,847 כי C מאפשר. 1951 01:37:34,847 --> 01:37:36,930 ונבוא שוב בעתיד לאחרים עדיין. 1952 01:37:36,930 --> 01:37:41,400 ואז נצטרך להסיק מלהסתכל בבית לא לנכונות code-- 1953 01:37:41,400 --> 01:37:46,070 מקבל קוד work-- אבל העיצוב קוד, לזרוע זרעים אלה בשלב מוקדם. 1954 01:37:46,070 --> 01:37:51,337 >> אז תן לי ללכת קדימה לפתוח קובץ חדש כאן. 1955 01:37:51,337 --> 01:37:51,920 אתה יודע מה? 1956 01:37:51,920 --> 01:37:54,450 אני הולך מחדש ליישם תוכנית דומה, 1957 01:37:54,450 --> 01:37:55,940 אבל באמצעות תבנית אחרת. 1958 01:37:55,940 --> 01:38:00,110 >> אז תנו לי מהר לתת את עצמי גישה לכלול CS50.h 1959 01:38:00,110 --> 01:38:04,150 עבור ספריית CS50, Io.h תקן printf. 1960 01:38:04,150 --> 01:38:06,510 תן לי void main int שלי. 1961 01:38:06,510 --> 01:38:09,310 ואז לכאן, בואו לי להמשיך לעשות את זה. 1962 01:38:09,310 --> 01:38:12,010 >> ג תו מקבל לקבל char, בדיוק כמו לפני. 1963 01:38:12,010 --> 01:38:16,770 ואני הולך להשתמש מבנה חדש now-- לעבור, על אופי מה? 1964 01:38:16,770 --> 01:38:19,820 אז בורר הוא כמו סוג של מיתוג מסלולי רכבת. 1965 01:38:19,820 --> 01:38:22,070 או, באמת, זה סוג של אם אחר, אם אחר אם, 1966 01:38:22,070 --> 01:38:23,980 אבל כתוב קצת אחרת. 1967 01:38:23,980 --> 01:38:25,490 >> מתג נראה כך. 1968 01:38:25,490 --> 01:38:29,060 יש לך מתג, ואז מה תו או מספר אתה רוצה להסתכל, 1969 01:38:29,060 --> 01:38:32,000 אז כמה סוגריים מסולסלים אוהבים גרד, רק אומר לעשות את הדברים האלה. 1970 01:38:32,000 --> 01:38:33,480 ואז יש לך מקרים שונים. 1971 01:38:33,480 --> 01:38:34,830 >> אינך משתמש אם אחר. 1972 01:38:34,830 --> 01:38:37,050 אתה ממש להשתמש במקרה המילה. 1973 01:38:37,050 --> 01:38:38,790 ואתה אומר משהו כזה. 1974 01:38:38,790 --> 01:38:43,820 >> אז במקרה של y קטנה, או במקרה של הון Y, 1975 01:38:43,820 --> 01:38:47,350 אתם מוזמנים להדפיס כן. 1976 01:38:47,350 --> 01:38:49,020 ואז לפרוץ את המתג. 1977 01:38:49,020 --> 01:38:49,580 זהו זה. 1978 01:38:49,580 --> 01:38:50,880 אנחנו סיימנו. 1979 01:38:50,880 --> 01:38:57,270 >> אם אחר, אם אפשר לומר כך, במקרה n נמוך, או הון N, 1980 01:38:57,270 --> 01:39:02,560 אז קדימה הדפסה מתוך שלא, ואז לשבור. 1981 01:39:02,560 --> 01:39:08,022 Else-- ו מסוג זה הוא של במקרה מחדל indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 ו רק למען הסדר הטוב, אם כי הגיוני הפסקה זה לא הכרחי 1983 01:39:10,980 --> 01:39:12,896 בגלל שאנחנו בסוף של הבורר בכל מקרה, 1984 01:39:12,896 --> 01:39:14,520 אני עכשיו לשבור את המתג. 1985 01:39:14,520 --> 01:39:16,280 אז זה נראה קצת אחר. 1986 01:39:16,280 --> 01:39:18,272 >> מן ההיגיון, זה למעשה שווה ערך. 1987 01:39:18,272 --> 01:39:19,980 ולמה אתה משתמש אחד על פני השני? 1988 01:39:19,980 --> 01:39:23,220 לפעמים, פשוט העדפה אישית, לפעמים האסתטיקה, 1989 01:39:23,220 --> 01:39:25,420 אם אני מציץ זה עכשיו, יש משהו 1990 01:39:25,420 --> 01:39:27,510 להיאמר עבור קריאות של הקוד הזה. 1991 01:39:27,510 --> 01:39:30,690 אני מתכוון, שלא לדבר על העובדה שמדובר קוד חדש לרבים מאיתנו בחדר. 1992 01:39:30,690 --> 01:39:33,515 >> אבל זה פשוט סוג של די. 1993 01:39:33,515 --> 01:39:37,760 אתה רואה וקטן y, הון Y, באותיות קטנות n, ברירת המחדל ההון N, 1994 01:39:37,760 --> 01:39:40,150 זה פשוט סוג של קפיצות החוצה אליך בצורה 1995 01:39:40,150 --> 01:39:42,200 כי, ללא ספק, אולי בדוגמה הקודמת 1996 01:39:42,200 --> 01:39:45,780 עם IFS, ואת הקווים האנכיים, ואת IFS האחר, לא יכול להיות. 1997 01:39:45,780 --> 01:39:51,600 אז זה באמת עניין של אישיות בחירה של ממש, או קריאות, 1998 01:39:51,600 --> 01:39:52,360 של הקוד. 1999 01:39:52,360 --> 01:39:58,230 >> אבל מבחינה פונקציונלית, תן לי להמשיך ולעשות קו נטוי מתג, נקודה 2000 01:39:58,230 --> 01:40:05,830 מתג, ועכשיו להקליד y הקטנה, הון Y, N הקטנה, בירת N, 2001 01:40:05,830 --> 01:40:09,250 דוד, שוב כי זה לא תו בודד. 2002 01:40:09,250 --> 01:40:12,050 בוא נעשה x, שגיאה, כצפוי. 2003 01:40:12,050 --> 01:40:15,640 וגם, logically-- וזה משהו הייתי ממליץ ב general-- אפילו 2004 01:40:15,640 --> 01:40:17,790 אם אנחנו רק מגרדים את פני השטח של חלק מהתכונות הללו. 2005 01:40:17,790 --> 01:40:20,560 >> וזה לא יכול להיות ברור כשאתה עצמך לשבת ליד המקלדת, 2006 01:40:20,560 --> 01:40:21,370 איך זה עובד? 2007 01:40:21,370 --> 01:40:22,240 מה זה יעשה? 2008 01:40:22,240 --> 01:40:25,630 מה שיפה שיש מחשב נייד או מחשב שולחני, או גישה 2009 01:40:25,630 --> 01:40:29,290 למחשב עם מהדר, ועם עורך קוד כזה, 2010 01:40:29,290 --> 01:40:32,990 הוא כמעט תמיד אתה יכול לענות אלה שאלות בעצמך רק על ידי מנסה. 2011 01:40:32,990 --> 01:40:36,570 >> לדוגמה, אם רטורית השאלה שעל הפרק היו, 2012 01:40:36,570 --> 01:40:39,540 מה קורה אם אתה שוכח דוחות ההפסקה שלך? 2013 01:40:39,540 --> 01:40:41,400 שהוא למעשה נפוץ מאוד הדבר הנכון לעשות, 2014 01:40:41,400 --> 01:40:43,540 כי זה לא נראה כמו שאתה באמת צריך אותם. 2015 01:40:43,540 --> 01:40:46,790 הם לא באמת להשלים שלך חשבתי כמו סוגריים או מתולתל 2016 01:40:46,790 --> 01:40:47,714 סד עושה. 2017 01:40:47,714 --> 01:40:49,630 בואו נלך קדימה להדר מחדש את הקוד ולראות. 2018 01:40:49,630 --> 01:40:53,690 אז להפוך מתג, מתג לוכסן נקודה. 2019 01:40:53,690 --> 01:40:56,435 בואו להקליד אותיות קטנות y, במקרה העליון, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 אז הקלדתי y. 2022 01:41:00,700 --> 01:41:04,420 >> התכנית אמרה כן, לא, טעות, כאילו זה היה שינוי דעתה. 2023 01:41:04,420 --> 01:41:09,280 אבל זה סוג של היה, כי מה שקורה עם בורר במקרה הראשון 2024 01:41:09,280 --> 01:41:13,899 משחק בעצם אומר, היי מחשב, לבצע את כל הקוד שמתחתיה. 2025 01:41:13,899 --> 01:41:16,690 ואם אתה לא אומר להפסיק לפעול או לא אומר להפסיק לפעול או לא אומר הפסקה, 2026 01:41:16,690 --> 01:41:19,540 המחשב עומד להתפוצץ באמצעות כל אלה קווים 2027 01:41:19,540 --> 01:41:22,779 ולבצע כולם עד שהוא מגיע במחוך מתולתל. 2028 01:41:22,779 --> 01:41:24,320 אז הבלמים הם, אכן, צורך. 2029 01:41:24,320 --> 01:41:27,120 אבל משהו ממסעדה כאן היא, כאשר במקרה של ספק, לנסות משהו. 2030 01:41:27,120 --> 01:41:29,510 אולי להציל את הקוד שלך ראשונה, או לשמור אותו בקובץ נוסף 2031 01:41:29,510 --> 01:41:32,930 אם אתה באמת מודאג לקלקל ויש להם להתאושש 2032 01:41:32,930 --> 01:41:34,430 העבודה שאתה יודע שהוא עובד. 2033 01:41:34,430 --> 01:41:35,410 >> אבל לנסות דברים. 2034 01:41:35,410 --> 01:41:38,074 ואל תפחד כמו, אולי, של מה שהמחשב יכול לעשות, 2035 01:41:38,074 --> 01:41:39,490 או כי אתה עלול לשבור משהו. 2036 01:41:39,490 --> 01:41:42,790 אתה תמיד יכול לחזור לכמה גרסה קודמת. 2037 01:41:42,790 --> 01:41:45,640 >> אז בואו לסיים מלהסתכל על העיצוב של קוד. 2038 01:41:45,640 --> 01:41:49,020 יש לנו את היכולת הזו עכשיו לכתוב תנאים, ולולאות כתיבה, 2039 01:41:49,020 --> 01:41:50,850 ומשתנה, ופונקציות שיחה. 2040 01:41:50,850 --> 01:41:54,590 אז, בכנות, אנחנו סוג של חזרה איפה היינו לפני שבוע עם שריטה, 2041 01:41:54,590 --> 01:42:00,120 אמנם עם טקסטואלי פחות משכנע לסביבה מאשר Scratch מאפשרת. 2042 01:42:00,120 --> 01:42:03,990 >> אבל שימו לב כמה מהר שצברנו אוצר המילים כי, גם אם זה 2043 01:42:03,990 --> 01:42:07,570 הולך לקחת קצת זמן לשקוע, כך אנו יכולים כעת להשתמש באוצר המילים הזה 2044 01:42:07,570 --> 01:42:10,320 כדי לכתוב תוכניות מעניינות יותר. 2045 01:42:10,320 --> 01:42:12,940 ובואו לקחת צעד תינוק כלפי זה, כדלקמן. 2046 01:42:12,940 --> 01:42:14,890 תן לי ללכת קדימה ליצור קובץ חדש כאן. 2047 01:42:14,890 --> 01:42:17,750 >> אני הולך לקרוא את זה prototype.c, ולהציג 2048 01:42:17,750 --> 01:42:20,954 בפעם הראשונה, את היכולת כדי להפוך פונקציות משלך. 2049 01:42:20,954 --> 01:42:22,870 חלק מכם אולי יש עשה זאת עם שריטה, 2050 01:42:22,870 --> 01:42:25,430 לפיה ניתן ליצור שלך בלוקי מנהג עצמו Scratch, 2051 01:42:25,430 --> 01:42:27,892 ולאחר מכן לגרור אותם לתוך מקום איפה שאתה רוצה ב C. 2052 01:42:27,892 --> 01:42:30,100 וברוב תכנות שפות, אתה יכול לעשות בדיוק 2053 01:42:30,100 --> 01:42:33,580 ש-- להפוך פונקציות משלך, אם הם לא קיימים כבר. 2054 01:42:33,580 --> 01:42:38,660 >> כך, למשל, תן לי ללכת קדימה וכולל CS50.h, וכולל 2055 01:42:38,660 --> 01:42:43,110 תקן IO.h, void main int. 2056 01:42:43,110 --> 01:42:46,020 ועכשיו יש לנו מציין מיקום מוכן ללכת. 2057 01:42:46,020 --> 01:42:48,550 אני שומר את דברי הדפסה כמו היום של שמות אנשים. 2058 01:42:48,550 --> 01:42:51,910 וזה מרגיש כמו-- לא יהיה נחמד אם יש 2059 01:42:51,910 --> 01:42:53,936 היו פונקציה שנקראת שם להדפיס? 2060 01:42:53,936 --> 01:42:55,060 אני לא צריך להשתמש printf. 2061 01:42:55,060 --> 01:42:56,976 אני לא צריך לזכור כל הקודים בפורמט. 2062 01:42:56,976 --> 01:43:00,050 למה לא אני, או מדוע לא עשה מישהו לפניי, 2063 01:43:00,050 --> 01:43:02,980 ליצור הדפסת פונקציה שנקראת שם, כי ניתן לו איזה שם, 2064 01:43:02,980 --> 01:43:03,980 מדפיס את זה פשוט? 2065 01:43:03,980 --> 01:43:08,700 >> במילים אחרות, אם אני אומר, היי, מחשב, תן לי מחרוזת 2066 01:43:08,700 --> 01:43:11,870 על ידי לשאול את המשתמש עבור כאלה, באמצעות פונקציית מחרוזת הגט של CS50. 2067 01:43:11,870 --> 01:43:15,090 היי, המחשב, לשים אותה מחרוזת ב המשתנה בצד שמאל, 2068 01:43:15,090 --> 01:43:16,150 וקוראים לזה זה. 2069 01:43:16,150 --> 01:43:22,150 ואז, היי מחשב, קדימה ולהדפיס כי שמו של האדם, נעשה. 2070 01:43:22,150 --> 01:43:26,240 >> עכשיו, זה יהיה נחמד, כי תוכנית זו, בשם הקולע, 2071 01:43:26,240 --> 01:43:29,170 אומר לי את מה שהיא אמורה לעשות בדרך של אלה של שמות הפונקציה. 2072 01:43:29,170 --> 01:43:32,930 תן לי ללכת ולעשות אבטיפוס, Enter. 2073 01:43:32,930 --> 01:43:34,930 ולמרבה הצער, זה לא הולך לעוף. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, קו 7, אופי 5, שגיאה, הצהרה סמויה 2075 01:43:39,430 --> 01:43:42,960 שם הדפסת פונקציה אינו תקף C99, C99 2076 01:43:42,960 --> 01:43:45,130 כלומר גרסה של C שיצא ב -1999. 2077 01:43:45,130 --> 01:43:45,730 זה הכל. 2078 01:43:45,730 --> 01:43:48,780 >> אז אני לא יודע מה כל זה אומר עדיין. 2079 01:43:48,780 --> 01:43:50,810 אבל אני כן מכיר שגיאה באדום. 2080 01:43:50,810 --> 01:43:51,770 זה די ברור. 2081 01:43:51,770 --> 01:43:53,769 >> ונראה כי עם הדמות הירוקה כאן, 2082 01:43:53,769 --> 01:43:57,520 הבעיה היא עם שם הדפסה, פתוחה ים סוגריים, סגור סוגריים, פסיק. 2083 01:43:57,520 --> 01:44:01,800 אבל הכרזה מרומזת פונקציה שעשינו לראות בקצרה קודם לכן. 2084 01:44:01,800 --> 01:44:04,880 משמעות הדבר היא, פשוט, כי קלאנג לא יודע למה אני מתכוון. 2085 01:44:04,880 --> 01:44:09,000 >> השתמשתי מילת אוצר מילים שזה מעולם לא ראה או שלמד לפני. 2086 01:44:09,000 --> 01:44:11,950 ובשביל זה אני צריך ללמד אותו מה פונקציה זה אומר. 2087 01:44:11,950 --> 01:44:13,590 אז אני הולך קדימה, לעשות את זה. 2088 01:44:13,590 --> 01:44:17,970 >> אני הולך קדימה וליישם פונקציה משלי שנקראת שם הדפסה. 2089 01:44:17,970 --> 01:44:24,720 ואני הולך להגיד, כדלקמן, כי הוא עושה זאת, printf, שלום, אחוזים 2090 01:44:24,720 --> 01:44:27,760 ים, קו נטוי הפוך n, שם, פסיק. 2091 01:44:27,760 --> 01:44:29,250 אז מה אני פשוט עושה? 2092 01:44:29,250 --> 01:44:31,325 >> אז מתברר, כדי ליישם פונקציה משלך, 2093 01:44:31,325 --> 01:44:33,845 אנחנו סוג של ללוות חלק באותו המבנה כמו ראשי 2094 01:44:33,845 --> 01:44:35,720 כי אנחנו פשוט כבר מובן מאליו, ואני 2095 01:44:35,720 --> 01:44:37,730 יודע רק העתקה הדבקה פחות או יותר מה 2096 01:44:37,730 --> 01:44:39,170 אני כבר כותב בעבר. 2097 01:44:39,170 --> 01:44:40,570 אבל מבחין כאן דפוס. 2098 01:44:40,570 --> 01:44:43,750 Int, ראשי, Void, נצטרך ניסה להפריד לפני זמן מה שבעצם אומר. 2099 01:44:43,750 --> 01:44:46,160 >> אבל היום, רק לב ההקבלה. 2100 01:44:46,160 --> 01:44:48,210 Void, שם הדפסה, שם המחרוזת, כך שאין 2101 01:44:48,210 --> 01:44:50,310 מילת מפתח סגולה, אשר אנחנו הולכים להתחיל 2102 01:44:50,310 --> 01:44:54,067 קורא טיפוס החזרה, בשם הפונקציה, ולאחר מכן קלט. 2103 01:44:54,067 --> 01:44:56,400 אז, למעשה, אנחנו יכולים לזקק סוג זה של שבוע שעבר כמו 2104 01:44:56,400 --> 01:44:59,030 כמו, זהו השם או האלגוריתם של קוד אנחנו 2105 01:44:59,030 --> 01:45:00,761 הולך write-- האלגוריתם שבבסיס 2106 01:45:00,761 --> 01:45:02,010 את הקוד אנחנו הולכים לכתוב. 2107 01:45:02,010 --> 01:45:03,180 >> זהו הקלט שלה. 2108 01:45:03,180 --> 01:45:04,670 זהו הפלט שלה. 2109 01:45:04,670 --> 01:45:08,730 פונקציה זו, שם הדפסה, היא שנועד לקחת מחרוזת קראה בשמה, 2110 01:45:08,730 --> 01:45:11,350 או מה שלא יהיה, כקלט, ולאחר מכן ומבוטל. 2111 01:45:11,350 --> 01:45:13,904 זה לא מחזיר שום דבר, כמו לקבל מחרוזת או לקבל int עושה. 2112 01:45:13,904 --> 01:45:15,570 אז זה הולך לתת לי משהו בחזרה. 2113 01:45:15,570 --> 01:45:17,960 זה פשוט הולך להיות תופעת לוואי, אם אפשר לומר כך, 2114 01:45:17,960 --> 01:45:19,570 של הדפסת שמו של אדם. 2115 01:45:19,570 --> 01:45:22,260 אז שם לב, קו 7, אני אפשר לקרוא שם הדפסה. 2116 01:45:22,260 --> 01:45:25,920 קו 10, אני יכול להגדיר או ליישם שם הדפסה. 2117 01:45:25,920 --> 01:45:28,450 אבל, למרבה הצער, זה לא מספיק. 2118 01:45:28,450 --> 01:45:31,230 >> תן לי ללכת קדימה הידור זה לאחר השמירה. 2119 01:45:31,230 --> 01:45:33,910 וואו, עכשיו, אני כבר עשיתי את זה יותר גרוע, זה היה נראה. 2120 01:45:33,910 --> 01:45:37,027 אז ההצהרה המרומזת של שם פונקצית הדפסה אינו חוקי. 2121 01:45:37,027 --> 01:45:38,360 וגם, שוב, יש עוד שגיאות. 2122 01:45:38,360 --> 01:45:41,430 אבל כמו שאני הזהרתי קודם לכן, גם אם אתה מקבל מום עם, 2123 01:45:41,430 --> 01:45:44,850 או קצת עצוב לראות כל כך הרבה שגיאות, להתמקד רק על הראשון 2124 01:45:44,850 --> 01:45:47,500 בתחילה, משום שבאותה השפיעו באופן מדורג. 2125 01:45:47,500 --> 01:45:51,970 אז C, או קלאנג ליתר דיוק, עדיין לא מכיר את שם הדפסה. 2126 01:45:51,970 --> 01:45:54,580 >> וזה בגלל קלאנג, על ידי עיצוב, הוא סוג של טיפש. 2127 01:45:54,580 --> 01:45:56,280 זה רק עושה את מה שאתה אומר את זה לעשות. 2128 01:45:56,280 --> 01:46:00,950 וזה רק עושה זאת לפי הסדר שבה אתה אומר את זה כדי לעשות. 2129 01:46:00,950 --> 01:46:05,270 >> אז הגדיר עיקרי על קו ארבעה, כמו שעשינו לעתים קרובות למדי. 2130 01:46:05,270 --> 01:46:07,980 שהגדרתי שם הדפסה על קו 10. 2131 01:46:07,980 --> 01:46:11,793 אבל אני מנסה להשתמש שם הדפסה על קו שבע. 2132 01:46:11,793 --> 01:46:13,670 >> זה מוקדם מדי, לא קיים עדיין. 2133 01:46:13,670 --> 01:46:19,150 אז אני יכול להיות חכם, ולהיות כמו, אוקיי, אז בואו פשוט לשחק יחד, 2134 01:46:19,150 --> 01:46:23,680 ולעבור שם המודפס פונה כלפי מעלה כאן, לקמפל מחדש. 2135 01:46:23,680 --> 01:46:24,550 אלוהים אדירים. 2136 01:46:24,550 --> 01:46:25,260 זה עבד. 2137 01:46:25,260 --> 01:46:26,670 זה היה פשוט עד כדי כך. 2138 01:46:26,670 --> 01:46:28,120 >> אבל ההיגיון הוא בדיוק זה. 2139 01:46:28,120 --> 01:46:30,870 אתה צריך ללמד קלאנג מה זה הוא על ידי הגדרת התפקיד הראשון. 2140 01:46:30,870 --> 01:46:31,920 אז אתה יכול להשתמש בו. 2141 01:46:31,920 --> 01:46:33,940 אבל, בכנות, זה מרגיש כמו מדרון חלקלק. 2142 01:46:33,940 --> 01:46:35,773 >> אז בכל פעם שאני מפעיל לתוך בעיה, אני פשוט 2143 01:46:35,773 --> 01:46:39,450 הולך לסמן ולהעתיק את הקוד כתבתי, לחתוך אותו ולהדביק אותו כאן. 2144 01:46:39,450 --> 01:46:41,370 וגם, מן הסתם לא היה לנו להמציא כמה תרחישים 2145 01:46:41,370 --> 01:46:43,286 שם תפקיד אחד אולי צריך לקרוא עוד. 2146 01:46:43,286 --> 01:46:46,030 ואתה פשוט לא יכול לשים כל פונקציה מעל כל האחרים. 2147 01:46:46,030 --> 01:46:47,930 >> אז מתברר של שם פתרון טוב יותר. 2148 01:46:47,930 --> 01:46:50,100 אנחנו יכולים להשאיר את זה להיות. 2149 01:46:50,100 --> 01:46:53,677 ולמען אמת, זה בדרך כלל נחמד, ונוח, ועיצוב טוב 2150 01:46:53,677 --> 01:46:56,760 לשים ראשי ראשון, כי, שוב, ראשי בדיוק כמו כאשר הדגל ירוק לוחץ, 2151 01:46:56,760 --> 01:46:59,027 כי הוא הפונקציה מקבל להורג כברירת מחדל. 2152 01:46:59,027 --> 01:47:01,110 אז באותה מידה אתה יכול לשים אותו בחלק העליון של הקובץ 2153 01:47:01,110 --> 01:47:03,560 כך שכאשר אתה או כל אדם אחר מביט הקובץ 2154 01:47:03,560 --> 01:47:06,360 אתה יודע מה קורה רק על ידי הקריאה הראשונה ראשי. 2155 01:47:06,360 --> 01:47:15,360 אז מתברר, אנחנו יכולים לספר קלאנג יזום, היי, קלאנג, על קו ארבע, 2156 01:47:15,360 --> 01:47:17,940 אני מבטיח ליישם הדפס פונקציה שנקראת 2157 01:47:17,940 --> 01:47:22,600 שם שלוקח שם מחרוזת בשם כקלט, וחוזר דבר, בטל. 2158 01:47:22,600 --> 01:47:24,770 ואני אגיע יישום זה מאוחר יותר. 2159 01:47:24,770 --> 01:47:25,680 >> הנה מגיע ראשי. 2160 01:47:25,680 --> 01:47:29,130 עכשיו ראשים על קו 9 יכולים להשתמש שם הדפסה משום קלאנג 2161 01:47:29,130 --> 01:47:32,600 הוא הסתמכות על כך, בסופו של דבר, זה יהיה מפגש ההגדרה 2162 01:47:32,600 --> 01:47:34,880 היישום שם הדפסה. 2163 01:47:34,880 --> 01:47:37,390 אז לאחר שמירת הקובץ שלי, תן לי להמשיך ולעשות אבטיפוס, 2164 01:47:37,390 --> 01:47:38,498 נראה טוב הפעם. 2165 01:47:38,498 --> 01:47:43,470 Dot סלאש, אב טיפוס, תן לי אתם מוזמנים להקליד שם. 2166 01:47:43,470 --> 01:47:48,440 דוד, שלום דוד, Zamila, שלום Zamila, ואכן, עכשיו זה עובד. 2167 01:47:48,440 --> 01:47:52,200 >> אז המרכיב כאן הוא כי יש לנו עשה פונקציה מותאמת אישית, כמו מנהג 2168 01:47:52,200 --> 01:47:54,219 Scratch בלוק אנחנו קוראים לזה. 2169 01:47:54,219 --> 01:47:57,010 אבל בניגוד Scratch שבו אתה יכול רק ליצור אותו ולהתחיל להשתמש בו, 2170 01:47:57,010 --> 01:47:59,330 עכשיו אנחנו צריכים להיות קצת יותר קפדן, 2171 01:47:59,330 --> 01:48:03,410 ולמעשה להכשיר קלאנג כדי להשתמש, או כדי לצפות בו. 2172 01:48:03,410 --> 01:48:09,140 עכשיו, במאמר מוסגר, למה כל הזמן הזה יש היינו רק באופן עיוור על אמונה כוללת 2173 01:48:09,140 --> 01:48:12,170 CS50.h, וכולל IO.h רגיל? 2174 01:48:12,170 --> 01:48:15,190 >> ובכן, מתברר, בין כמה דברים אחרים, 2175 01:48:15,190 --> 01:48:18,550 כל זה באותם הנקודה h קבצים, אשר במקרה קבצים. 2176 01:48:18,550 --> 01:48:20,460 הם קובצים, אם אפשר לומר כך. 2177 01:48:20,460 --> 01:48:23,270 הם עדיין הכתובים בשפת C. אבל הוא סוג של קבצים שונה. 2178 01:48:23,270 --> 01:48:28,690 >> לעת עתה, אתה יכול פחות או יותר להניח שכל מה נמצא בתוך CS50.h 2179 01:48:28,690 --> 01:48:33,360 הוא אחד ספינות כמה כזה, לא עבור פונקציות נקראות שם הדפסה, 2180 01:48:33,360 --> 01:48:36,840 אבל עבור קבל מחרוזת, קבל Float, ועוד כמה אנשים. 2181 01:48:36,840 --> 01:48:41,510 ויש טיפוס דומה, אחד ספינות, בתוך IO.h תקן 2182 01:48:41,510 --> 01:48:46,241 עבור printf, הנמצא כעת פונקציה שם הדפסה משלי. 2183 01:48:46,241 --> 01:48:49,490 אז במילים אחרות, זה כל הזמן יש לנו עתה העתיק בעיוורון והדבקה 2184 01:48:49,490 --> 01:48:51,780 תכונה זו כולל, כוללת כי, מה קורה? 2185 01:48:51,780 --> 01:48:55,310 אלה הם רק סוג של רמזים להרעיש כמו לפונקציות מה 2186 01:48:55,310 --> 01:49:00,170 הם, אכן, מיושמים, רק במקומות אחרים קבצים שונים 2187 01:49:00,170 --> 01:49:02,440 במקום אחר במערכת. 2188 01:49:02,440 --> 01:49:05,160 >> אז אנחנו יישמנו שם הדפסה. 2189 01:49:05,160 --> 01:49:07,910 אך עדיין יש תופעת לוואי זו של הדפסת משהו על המסך. 2190 01:49:07,910 --> 01:49:10,170 אבל זה לא באמת למסור לי משהו בחזרה. 2191 01:49:10,170 --> 01:49:12,200 איך אפשר ללכת על יישום תוכנית 2192 01:49:12,200 --> 01:49:14,510 אין למסור לי משהו בחזרה? 2193 01:49:14,510 --> 01:49:15,580 >> ובכן, בואו ננסה את זה. 2194 01:49:15,580 --> 01:49:21,360 תן לי ללכת קדימה וליישם return.c קובץ בשם 2195 01:49:21,360 --> 01:49:24,530 כדי שנוכל להדגים כיצד משהו כמו קבל מחרוזת, או קבל Int, 2196 01:49:24,530 --> 01:49:27,340 הוא למעשה חוזר משהו בחזרה למשתמש. 2197 01:49:27,340 --> 01:49:29,840 בואו נלך קדימה ולהגדיר void main int. 2198 01:49:29,840 --> 01:49:33,230 >> וגם, שוב, בעתיד, אנחנו נעלה להסביר מה int כי וכי חלל 2199 01:49:33,230 --> 01:49:34,090 בעצם הוא עושה. 2200 01:49:34,090 --> 01:49:35,840 אבל היום, יהיה לנו לקחת את זה כמובן מאליו. 2201 01:49:35,840 --> 01:49:39,970 אני הולך קדימה, printf, עבור חוויית משתמש טובה, הוא x. 2202 01:49:39,970 --> 01:49:44,360 ואז אני הולך לחכות משתמש לתת לי x עם int הגט. 2203 01:49:44,360 --> 01:49:48,459 >> ואז אני הולך קדימה ולהדפיס x לכיכר. 2204 01:49:48,459 --> 01:49:50,500 לכן, כאשר יש לך רק מקלדת, אנשים בדרך כלל 2205 01:49:50,500 --> 01:49:52,600 להשתמש גזר קטן סמל במקלדת 2206 01:49:52,600 --> 01:49:55,330 לייצג את הכח של, או המעריך של. 2207 01:49:55,330 --> 01:49:58,960 אז x בריבוע קיים i. 2208 01:49:58,960 --> 01:50:00,660 >> ועכשיו אני הולך לעשות את זה. 2209 01:50:00,660 --> 01:50:03,940 יכולתי רק לבצע-- מה x בריבוע? x בריבוע הוא x פעמים x. 2210 01:50:03,940 --> 01:50:06,690 >> ועשינו את זה כמה לפני זמן מה כבר היום. 2211 01:50:06,690 --> 01:50:08,730 זה לא מרגיש כמו כל התקדמות רבה. 2212 01:50:08,730 --> 01:50:09,570 אתה יודע מה? 2213 01:50:09,570 --> 01:50:13,100 בואו למנף חלק כי הרעיון מהפעם הקודמת של הפשטה. 2214 01:50:13,100 --> 01:50:16,080 >> האם לא יהיה זה נחמד אם יש פונקציה שנקראת 2215 01:50:16,080 --> 01:50:18,460 מרובע שעושה בדיוק את זה? 2216 01:50:18,460 --> 01:50:20,640 זה עדיין, בסוף של יום, עושה את אותו הדבר במתמטיקה. 2217 01:50:20,640 --> 01:50:22,410 אבל בואו מופשטים משם את הרעיון של לקיחת 2218 01:50:22,410 --> 01:50:25,280 אחד מספר כפול אחר, ופשוט לתת לו שם, 2219 01:50:25,280 --> 01:50:27,360 כמו כיכר ערך זה. 2220 01:50:27,360 --> 01:50:29,560 >> וגם, או במילים אחרות, ב C, בואו ליצור פונקציה 2221 01:50:29,560 --> 01:50:32,660 כיכר בשם שעושה בדיוק את זה. 2222 01:50:32,660 --> 01:50:34,600 זה הולך להיקרא רבוע. 2223 01:50:34,600 --> 01:50:35,790 זה הולך לקחת int. 2224 01:50:35,790 --> 01:50:37,820 ואנו יהיו רק קוראים לזה n, כברירת מחדל. 2225 01:50:37,820 --> 01:50:39,403 >> אבל אנו יכולים לקרוא לזה כל מה שאנחנו רוצים. 2226 01:50:39,403 --> 01:50:42,900 וכל מה שהוא הולך לעשות, פשוטו כמשמעו, הוא החזרה 2227 01:50:42,900 --> 01:50:45,810 התוצאה של n פעמי n. 2228 01:50:45,810 --> 01:50:48,980 אבל בגלל זה הוא חוזר משהו, אשר 2229 01:50:48,980 --> 01:50:53,690 מילת המפתח היא בסגול יש לנו מעולם לא ראיתי לפני, אני, על קו 11, 2230 01:50:53,690 --> 01:50:55,410 אי אפשר פשוט לומר חלל הפעם. 2231 01:50:55,410 --> 01:51:01,320 >> Void, בדוגמה שראינו הרגע דווקא שם הדפסה, רק אומר, 2232 01:51:01,320 --> 01:51:02,190 עשה משהו. 2233 01:51:02,190 --> 01:51:04,170 אבל אל תיתן לי משהו בחזרה. 2234 01:51:04,170 --> 01:51:06,790 במקרה זה, אני רוצה לחזור n פעמים n, 2235 01:51:06,790 --> 01:51:08,460 או מה שזה לא יהיה, את המספר הזה. 2236 01:51:08,460 --> 01:51:12,460 >> אז אני לא יכול להגיד, היי, מחשב, אני חוזר שום דבר, בטל. 2237 01:51:12,460 --> 01:51:16,166 זה הולך לחזור, מטבעו, int. 2238 01:51:16,166 --> 01:51:17,790 וכך זה כל מה קורה כאן. 2239 01:51:17,790 --> 01:51:20,070 >> הקלט לרבע הולך להיות מספר שלם. 2240 01:51:20,070 --> 01:51:24,760 וכך שנוכל להשתמש בו, זה חייב יש שם, נ זה הולך פלט 2241 01:51:24,760 --> 01:51:26,240 מספר שלם שאינו צריך שם. 2242 01:51:26,240 --> 01:51:29,590 אנחנו יכולים להשאיר את זה ראשי, או מי הוא באמצעות לי לזכור את הערך הזה אם אנחנו 2243 01:51:29,590 --> 01:51:31,120 רוצה עם משתנה משלה. 2244 01:51:31,120 --> 01:51:33,230 >> וגם, שוב, חדש רק מילת המפתח כאן היא השיבה. 2245 01:51:33,230 --> 01:51:34,480 ואני פשוט עושה קצת מתמטיקה. 2246 01:51:34,480 --> 01:51:41,825 אם אני באמת רוצה להיות מיותר, יכולתי לומר מוצר int מקבל n פעמים n. 2247 01:51:41,825 --> 01:51:44,170 >> ואז אני יכול לומר, להחזיר את המוצר. 2248 01:51:44,170 --> 01:51:47,360 אבל, שוב, למה שרציתי להגיד קודם של רק לא להיות זה design-- טוב 2249 01:51:47,360 --> 01:51:50,060 כמו, למה להכניס שם, סמל, כמו מוצר, 2250 01:51:50,060 --> 01:51:51,570 רק כדי להחזיר אותו מיד? 2251 01:51:51,570 --> 01:51:53,670 זה מנקה קצת, קצת חזק יותר, כך 2252 01:51:53,670 --> 01:51:59,380 לדבר, רק כדי להגיד פעמים n בתמורה n, להיפטר של קו זה לגמרי. 2253 01:51:59,380 --> 01:52:02,860 >> וזה פשוט פחות קוד לקרוא, הזדמנות פחות טעויות. 2254 01:52:02,860 --> 01:52:05,180 ובואו לראות אם זה למעשה פועל כעת. 2255 01:52:05,180 --> 01:52:09,380 עכשיו, אני הולך ללכת קדימה ולעשות בתמורה. 2256 01:52:09,380 --> 01:52:11,460 >> אוי לא, הצהרת מרומזת של פונקציה. 2257 01:52:11,460 --> 01:52:14,080 עשיתי את הטעות הזאת לפני, לא ביג דיל. 2258 01:52:14,080 --> 01:52:18,950 תן לי רק להקליד, או להדגיש להעתיק, אב טיפוס הפונקציה בדיוק, 2259 01:52:18,950 --> 01:52:21,342 או חתימה, של פעולת הרמה כאן. 2260 01:52:21,342 --> 01:52:22,800 או שאני יכול להעביר את הפונקציה כולו. 2261 01:52:22,800 --> 01:52:23,841 >> אבל זה קצת עצלן. 2262 01:52:23,841 --> 01:52:24,870 אז אנחנו לא נעשה את זה. 2263 01:52:24,870 --> 01:52:27,960 עכשיו, הרשו לי להכניס בחזרה שוב, נקודה בתמורה נטויה. 2264 01:52:27,960 --> 01:52:32,790 >> x הוא 2. x בריבוע הוא 4. x הוא 3. x בריבוע הוא 9. 2265 01:52:32,790 --> 01:52:35,300 ואת הפונקציה נראית עכשיו שזה עובד. 2266 01:52:35,300 --> 01:52:36,550 אז מה ההבדל כאן? 2267 01:52:36,550 --> 01:52:42,520 יש לי פונקציה נקראת מרובע, במקרה זה, אשר שמתי קלט. 2268 01:52:42,520 --> 01:52:43,830 ואני לחזור פלט. 2269 01:52:43,830 --> 01:52:46,210 ובכל זאת, בעבר, אם אני פותח את הדוגמא השנייה 2270 01:52:46,210 --> 01:52:51,640 מוקדם יותר, אשר היה נקרא prototype.c, 2271 01:52:51,640 --> 01:52:54,770 היה לי שם הדפסה, אשר חזר חלל, אם אפשר לומר כך, 2272 01:52:54,770 --> 01:52:58,730 או שזה חזר כלום, היה פשוט תופעת לוואי. 2273 01:52:58,730 --> 01:53:00,230 >> אז מה קורה פה? 2274 01:53:00,230 --> 01:53:03,520 ובכן, כדאי לשקול את הפונקציה לקבל מחרוזת רק לרגע. 2275 01:53:03,520 --> 01:53:06,570 אנחנו כבר באמצעות הפונקציה לקבל מחרוזת באופן הבא. 2276 01:53:06,570 --> 01:53:10,464 >> היו לנו פונקציה לקבל מחרוזת, כמו כולל CS50.h, 2277 01:53:10,464 --> 01:53:16,624 כולל, עיקרי, חלל IO.h, int רגיל. 2278 01:53:16,624 --> 01:53:18,790 ואז כל פעם שאני קרא מחרוזת גט עד כה, 2279 01:53:18,790 --> 01:53:23,260 שאמרתי משהו כמו, מחרוזת s מקבל מקבל מחרוזת, כי גט string-- 2280 01:53:23,260 --> 01:53:27,880 בואו נקראים מחרוזת גט get.c-- זה עוצמה מחזירה מחרוזת כי אז אני יכול 2281 01:53:27,880 --> 01:53:32,050 להשתמש, ולומר, הלו, פסיק, ים אחוזים, מהלך סרק n, s. 2282 01:53:32,050 --> 01:53:35,660 >> אז זה אותו הדבר למשל, באמת, כי אנחנו קודם לכן. 2283 01:53:35,660 --> 01:53:37,920 אז לקבל מחרוזת ומחזירה ערך. 2284 01:53:37,920 --> 01:53:41,260 אבל לפני רגע, מחרוזת הדפסה אינו מחזיר ערך. 2285 01:53:41,260 --> 01:53:42,721 זה פשוט יש תופעת לוואי. 2286 01:53:42,721 --> 01:53:44,220 אז זהו הבדל מהותי. 2287 01:53:44,220 --> 01:53:46,710 ראינו שונה סוגים של פונקציות החברה, 2288 01:53:46,710 --> 01:53:49,490 שחלקם חזר ערכים, שחלקם לא. 2289 01:53:49,490 --> 01:53:51,890 אז אולי זה שרוכים או int, או לצוף. 2290 01:53:51,890 --> 01:53:53,480 או אולי זה רק חלל. 2291 01:53:53,480 --> 01:53:55,710 >> וההבדל הוא כי פונקציות אלה כי 2292 01:53:55,710 --> 01:53:59,940 לקבל נתונים להחזיר ערך הם למעשה להביא משהו בחזרה אל השולחן, 2293 01:53:59,940 --> 01:54:01,110 כביכול. 2294 01:54:01,110 --> 01:54:03,710 אז בואו נלך קדימה להסתכל קבוצה אחת סופית 2295 01:54:03,710 --> 01:54:09,129 דוגמאות שנותנות תחושה, עכשיו, של כיצד נוכל, אכן, מופשט יותר, 2296 01:54:09,129 --> 01:54:11,670 וטוב יותר, וטוב יותר, או יותר, ועוד, ועוד, על מנת 2297 01:54:11,670 --> 01:54:13,810 כדי לכתוב, בסופו של דבר, קוד טוב יותר. 2298 01:54:13,810 --> 01:54:16,860 בואו נלך קדימה, וברוח של גרד, לבצע את הפעולות הבאות. 2299 01:54:16,860 --> 01:54:21,700 >> תן לי ללכת קדימה ולכלול CS50.h ורמת IO.h. 2300 01:54:21,700 --> 01:54:24,010 תן לי להמשיך ולתת עצמי int, עיקרי, חלל. 2301 01:54:24,010 --> 01:54:27,380 ותן לי ללכת קדימה, קורא cough.c זה. 2302 01:54:27,380 --> 01:54:35,510 >> ותן לי ללכת קדימה ופשוט כמו גרד, להדפיס שיעול / n. 2303 01:54:35,510 --> 01:54:37,170 ואני רוצה לעשות זאת שלוש פעמים. 2304 01:54:37,170 --> 01:54:39,670 אז אני, כמובן, רק הולך להעתיק ולהדביק שלוש פעמים. 2305 01:54:39,670 --> 01:54:46,440 עכשיו אני הולך לעשות להשתעל שיעול לוכסן נקודה. 2306 01:54:46,440 --> 01:54:50,120 בואו לתת את עצמי בחדר קטן יותר כאן, זן, שיעול, שיעול, שיעול. 2307 01:54:50,120 --> 01:54:53,970 >> יש, מן הסתם, כבר הזדמנות לשיפור. 2308 01:54:53,970 --> 01:54:55,679 אני כבר להעתיק ולהדביק כמה פעמים היום. 2309 01:54:55,679 --> 01:54:58,261 אבל זה היה רק ​​אז אני לא יש להקליד תווים רבים. 2310 01:54:58,261 --> 01:55:00,250 אני עדיין שונה מה שורות קוד אלו. 2311 01:55:00,250 --> 01:55:04,240 >> שלוש שורות אלה זהות, אשר מרגיש עצלן אכן הוא, 2312 01:55:04,240 --> 01:55:07,110 והוא כנראה לא הגישה הנכונה. 2313 01:55:07,110 --> 01:55:11,029 אז עם מה המרכיב נוכל לשפר את הקוד הזה? 2314 01:55:11,029 --> 01:55:12,570 אנחנו לא צריכים להעתיק ולהדביק קוד. 2315 01:55:12,570 --> 01:55:15,070 >> ואכן, כל פעם שאתה מרגיש עצמך העתקה והדבקה, 2316 01:55:15,070 --> 01:55:17,700 ואפילו לא שינוי קוד, רוב הסיכויים הם שיש דרך טובה יותר. 2317 01:55:17,700 --> 01:55:19,470 ואכן, יש. 2318 01:55:19,470 --> 01:55:22,510 תן לי ללכת ולעשות עבור לולאה, למרות התחביר אולי לא 2319 01:55:22,510 --> 01:55:24,570 בא בטבעיות עדיין. 2320 01:55:24,570 --> 01:55:29,494 >> האם זה שלוש פעמים, פשוט על-ידי ביצוע following-- 2321 01:55:29,494 --> 01:55:31,160 ואני יודע במקרה הזה מהפרקטיקה. 2322 01:55:31,160 --> 01:55:32,810 אבל יש לנו מספר דוגמאות עכשיו. 2323 01:55:32,810 --> 01:55:34,950 ואתה תראה באינטרנט יותר אזכור עדיין. 2324 01:55:34,950 --> 01:55:37,790 >> זהו תחביר על קו 6, כי בדומה Scratch שחוזר 2325 01:55:37,790 --> 01:55:40,090 בלוק, לחזור על שלוש הפעמים הבאות. 2326 01:55:40,090 --> 01:55:41,340 זהו קסום מעט לעת עתה. 2327 01:55:41,340 --> 01:55:43,050 אבל זה תקבלו יותר, ומוכר יותר. 2328 01:55:43,050 --> 01:55:45,050 >> וזה הולך לחזור קו שמונה שלוש פעמים, 2329 01:55:45,050 --> 01:55:52,390 כך שאם אני לקמפל מחדש שיעול לעשות, נקודת סלאש שיעול, שיעול, שיעול, שיעול. 2330 01:55:52,390 --> 01:55:54,030 זה עדיין עובד באותה צורה. 2331 01:55:54,030 --> 01:55:55,550 אז זה הכל טוב ויפה. 2332 01:55:55,550 --> 01:55:58,200 אבל זה לא מאוד מפוזר. 2333 01:55:58,200 --> 01:55:59,371 >> זה בהחלט נכון. 2334 01:55:59,371 --> 01:56:01,370 אבל זה מרגיש כאילו יש יכול להיות הזדמנות, 2335 01:56:01,370 --> 01:56:03,750 כמו בעולם של Scratch, לסוג של התחלה 2336 01:56:03,750 --> 01:56:07,530 כדי להוסיף קצת סמנטיקה כאן כך אני לא רק צריך קצת עבור לולאה, 2337 01:56:07,530 --> 01:56:09,867 ופונקציה שאומרת להשתעל, או שמא להשתעל. 2338 01:56:09,867 --> 01:56:10,450 אתה יודע מה? 2339 01:56:10,450 --> 01:56:12,620 תן לי לנסות להיות קריר מעט מזה, 2340 01:56:12,620 --> 01:56:16,090 ולמעשה לכתוב פונקציה יש כמה תופעות לוואי, קוראים לזה להשתעל. 2341 01:56:16,090 --> 01:56:20,830 >> וזה לוקח לא קלט, לא מחזיר ערך כפלט. 2342 01:56:20,830 --> 01:56:22,680 אבל אתה יודע מה זה עושה? 2343 01:56:22,680 --> 01:56:29,370 זה עושה זה- printf, ציטוט סוף ציטוט, להשתעל. 2344 01:56:29,370 --> 01:56:32,380 >> ועכשיו עד כאן, אני הולך ללכת קדימה עבור int, 2345 01:56:32,380 --> 01:56:36,070 אני מקבל אפס, אני פחות מ -3, אני פלוס פלוס. 2346 01:56:36,070 --> 01:56:39,770 אני הולך לא לעשות printf, שהוא ניתן לטעון כי יישום ברמה נמוכה 2347 01:56:39,770 --> 01:56:40,270 פרט. 2348 01:56:40,270 --> 01:56:41,353 לא אכפת לי איך להשתעל. 2349 01:56:41,353 --> 01:56:43,240 אני רק רוצה להשתמש בפונקצית השיעול. 2350 01:56:43,240 --> 01:56:44,840 ואני רק הולך להתקשר שיעול. 2351 01:56:44,840 --> 01:56:46,204 >> עכשיו, שימו לב לדיכוטומיה. 2352 01:56:46,204 --> 01:56:49,370 כשאתה מתקשר פונקציה, אם לא רוצה לתת תשומות, לגמרי בסדר. 2353 01:56:49,370 --> 01:56:51,780 פשוט תעשה פתח סוגריים, קרוב סוגריים, וסיימת. 2354 01:56:51,780 --> 01:56:56,271 >> כאשר אתה מגדיר פונקציה, או להכריז על אב הטיפוס של פונקציה, 2355 01:56:56,271 --> 01:56:58,770 אם אתה יודע מראש שזה לא הולך לקחת שום ויכוחים, 2356 01:56:58,770 --> 01:57:01,170 אומר ריק בסוגריים אלה שם. 2357 01:57:01,170 --> 01:57:05,660 וזה עושה בטוח שאתה לא ינצל לרעה את זה בטעות. 2358 01:57:05,660 --> 01:57:07,020 תן לי ללכת קדימה ולעשות שיעול. 2359 01:57:07,020 --> 01:57:08,540 וגם, כמובן, עשיתי טעות. 2360 01:57:08,540 --> 01:57:10,410 >> לכל הרוחות, יש כי הצהרת מרומזת. 2361 01:57:10,410 --> 01:57:11,325 אבל זה בסדר. 2362 01:57:11,325 --> 01:57:12,590 זהו תיקון קל. 2363 01:57:12,590 --> 01:57:18,240 אני רק צריך את אב הטיפוס במעלה בקובץ שלי מאשר אני בעצם השימוש בו. 2364 01:57:18,240 --> 01:57:20,070 >> אז עכשיו תן לי לעשות שיעול שוב, נחמד. 2365 01:57:20,070 --> 01:57:20,790 עכשיו, זה עובד. 2366 01:57:20,790 --> 01:57:22,930 הפוך שיעול, שיעול, שיעול, שיעול. 2367 01:57:22,930 --> 01:57:25,930 אז אתה יכול לחשוב שאנחנו באמת קצת יותר מ הנדסת בעיה זו. 2368 01:57:25,930 --> 01:57:26,763 ואכן, אנחנו. 2369 01:57:26,763 --> 01:57:28,870 זה לא טוב המועמד של תוכנית 2370 01:57:28,870 --> 01:57:31,930 כרגע עבור בנייה מחדש, ועושה מה 2371 01:57:31,930 --> 01:57:35,645 קרא פירוק היררכי, איפה אתה לוקח קצת קוד, ולאחר מכן 2372 01:57:35,645 --> 01:57:38,790 סוג של גורם לך דברים החוצה, כדי לייחס יותר סמנטיקה להם, 2373 01:57:38,790 --> 01:57:40,930 ושימוש חוזר בו בסופו של דבר בטווח ארוך. 2374 01:57:40,930 --> 01:57:43,490 אבל זה אבן בניין כלפי יותר תוכניות מתוחכמות 2375 01:57:43,490 --> 01:57:45,600 נתחיל כתיבה לפני הרבה זמן 2376 01:57:45,600 --> 01:57:50,090 מאפשר לנו יש את אוצר המילים עם אשר לכתוב קוד טוב יותר. 2377 01:57:50,090 --> 01:57:52,920 ואכן, בוא נראה אם ​​אנחנו לא יכול להכליל את זה עוד יותר. 2378 01:57:52,920 --> 01:57:57,984 >> נראה קצת צולע שאני, עיקרי, צריך לדאוג לתקן את זה לולאה, 2379 01:57:57,984 --> 01:57:59,400 וקורא שיעול שוב ושוב. 2380 01:57:59,400 --> 01:58:03,050 למה אני לא יכול פשוט להגיד שיעול, אנא להשתעל שלוש פעמים? 2381 01:58:03,050 --> 01:58:08,170 במילים אחרות, למה אני לא יכול פשוט לתת קלט להשתעל ולעשות את זה? 2382 01:58:08,170 --> 01:58:11,270 >> למה אני לא יכול פשוט לומר, שיעול עיקרי שלוש פעמים. 2383 01:58:11,270 --> 01:58:13,150 ועכשיו, זה סוג של כישוף. 2384 01:58:13,150 --> 01:58:14,540 זה מאוד איטרטיבי כאן. 2385 01:58:14,540 --> 01:58:15,940 וזה, אכן, צעד תינוק. 2386 01:58:15,940 --> 01:58:19,250 >> אבל רק את היכולת לומר על קו שמונה, שיעול שלוש פעמים, 2387 01:58:19,250 --> 01:58:20,730 זה פשוט כל כך הרבה יותר קריא. 2388 01:58:20,730 --> 01:58:24,210 וגם, פלוס, אני לא צריך לדעת או אכפת איך הוא מיושם שיעול. 2389 01:58:24,210 --> 01:58:26,460 ואכן, בהמשך טווח עבור פרויקטי גמר, 2390 01:58:26,460 --> 01:58:29,150 אם לכם להתמודד עם פרויקט עם חבר לכיתה או שתיים לכיתה, 2391 01:58:29,150 --> 01:58:32,370 תבין כי אתה הולך צריך, או רוצה, מחלק את העבודה. 2392 01:58:32,370 --> 01:58:34,650 >> ואתה הולך רוצה להחליט מראש, מי הולך לעשות מה, 2393 01:58:34,650 --> 01:58:35,483 ושבהם חתיכות? 2394 01:58:35,483 --> 01:58:37,520 והאם לא יהיה נחמד אם אתה, למשל, 2395 01:58:37,520 --> 01:58:40,100 לקחת אחריות על עיקרי בכתב, לעשות. 2396 01:58:40,100 --> 01:58:43,470 ולשותפה שלך, או שלך שותף כללי יותר, 2397 01:58:43,470 --> 01:58:45,230 דואג ליישום שיעול. 2398 01:58:45,230 --> 01:58:49,540 >> והפיצול הזה, אלה קירות של הפשטה, 2399 01:58:49,540 --> 01:58:52,310 או שכבות של הפשטה אם תוכל, הם סופר חזקים, 2400 01:58:52,310 --> 01:58:55,480 כי במיוחד עבור גדול, יותר תוכניות ומערכות מורכבות, 2401 01:58:55,480 --> 01:59:00,070 זה מאפשר לאנשים רבים לבנות דברים ביחד, ובסופו של דבר 2402 01:59:00,070 --> 01:59:02,680 לתפור את עבודתם יחד בדרך זו. 2403 01:59:02,680 --> 01:59:05,332 אבל, כמובן, אנו צריך לתקן שיעול עכשיו. 2404 01:59:05,332 --> 01:59:07,290 אנחנו צריכים לספר שיעול כי, היי, אתה יודע מה? 2405 01:59:07,290 --> 01:59:11,230 אתה הולך צריך לקחת input-- כך לא חלל, אבל int ועכשיו. 2406 01:59:11,230 --> 01:59:15,170 בואו נלך קדימה והכנסנו להשתעל int. אני מקבל אפס. 2407 01:59:15,170 --> 01:59:16,890 >> אני הוא פחות מ כמה פעמים. 2408 01:59:16,890 --> 01:59:18,550 אמרתי שלושה לפני. 2409 01:59:18,550 --> 01:59:20,420 אבל זה לא מה שאני רוצה. 2410 01:59:20,420 --> 01:59:25,520 אני רוצה להשתעל כדי להכליל את תומך באף מספר החזרות. 2411 01:59:25,520 --> 01:59:28,800 >> אז, אכן, זה n כי אני רוצה, מה שהמשתמש אומר לי. 2412 01:59:28,800 --> 01:59:31,620 עכשיו, אני יכול להמשיך ולומר שיעול הדפסה. 2413 01:59:31,620 --> 01:59:34,750 ולא משנה מה מספר המשתמש עובר, 2414 01:59:34,750 --> 01:59:36,890 אני אחזור פעמים כי רבות. 2415 01:59:36,890 --> 01:59:39,160 >> אז בסוף היום, התכנית היא זהה. 2416 01:59:39,160 --> 01:59:42,820 אבל שם לב את כל הדברים האלה אפילו יכול להיות בקובץ אחר. 2417 01:59:42,820 --> 01:59:45,620 אכן, אני לא יודע על רגע איך printf מיושם. 2418 01:59:45,620 --> 01:59:47,980 >> אני לא יודע כרגע כיצד לקבל שרוכים או לקבל int, או לקבל לצוף 2419 01:59:47,980 --> 01:59:48,646 מיושמים. 2420 01:59:48,646 --> 01:59:50,930 ואני לא רוצה לראות אותם על המסך שלי. 2421 01:59:50,930 --> 01:59:55,320 כמו כן, הוא, אני מתחיל להתמקד התוכנית שלי, לא פונקציות אלה. 2422 01:59:55,320 --> 01:59:59,070 >> וכך, אכן, ברגע שאתה להתחיל הפקטורינג קוד כזה החוצה, 2423 01:59:59,070 --> 02:00:01,397 אפילו שאנחנו יכולים לעבור שיעול לקובץ נפרד? 2424 02:00:01,397 --> 02:00:02,730 מישהו אחר יכול ליישם את זה. 2425 02:00:02,730 --> 02:00:06,810 ואתה והתכנית הופכים מאוד יפה, מאוד קריא, 2426 02:00:06,810 --> 02:00:10,830 ניתן לטעון, באמת ארבע קו תכנית ממש שם. 2427 02:00:10,830 --> 02:00:13,510 >> אז בואו נלך קדימה עם חברה ולעשות עוד שינוי אחד. 2428 02:00:13,510 --> 02:00:16,180 שימו לב כי אב הטיפוס שלי יש לשנות למעלה. 2429 02:00:16,180 --> 02:00:18,390 אז תנו לי לתקן את זה כל כך אני לא לקבל צעק. 2430 02:00:18,390 --> 02:00:22,580 >> הפוך שיעול, תן לי לרוץ שיעול פעם יותר, עדיין עושה את אותו הדבר. 2431 02:00:22,580 --> 02:00:26,010 אבל עכשיו, שימו לב שיש לנו מרכיב עבור גרסה סופית אחד. 2432 02:00:26,010 --> 02:00:26,940 אתה יודע מה? 2433 02:00:26,940 --> 02:00:29,040 אני לא רוצה רק להשתעל, בהכרח. 2434 02:00:29,040 --> 02:00:30,802 אני רוצה שיהיה לי משהו יותר כללי. 2435 02:00:30,802 --> 02:00:31,510 אז אתה יודע מה? 2436 02:00:31,510 --> 02:00:32,450 אני רוצה לעשות את זה. 2437 02:00:32,450 --> 02:00:37,140 אני רוצה שיהיה לי, ממש כמו שריטה עושה, בלוק למשל, אבל לא רק 2438 02:00:37,140 --> 02:00:38,680 לומר משהו קצת מספר פעמים. 2439 02:00:38,680 --> 02:00:41,510 אני רוצה להגיד את זה מחרוזת מאוד ספציפית. 2440 02:00:41,510 --> 02:00:43,850 ולכן, אני לא רוצה את זה רק כדי להגיד שיעול. 2441 02:00:43,850 --> 02:00:47,660 אני רוצה להגיד את זה מה מחרוזת מועברת. 2442 02:00:47,660 --> 02:00:49,960 >> אז שם לב, אני כבר להכליל זה כך שכעת 2443 02:00:49,960 --> 02:00:53,110 נניח מרגיש כמו שם טוב לכך, כמו שריטה, 2444 02:00:53,110 --> 02:00:55,530 לוקח שתי טענות, בניגוד Scratch. 2445 02:00:55,530 --> 02:00:56,570 אחת היא מחרוזת. 2446 02:00:56,570 --> 02:00:57,300 האחד הוא int. 2447 02:00:57,300 --> 02:00:58,130 >> ואני יכול לעבור אותם. 2448 02:00:58,130 --> 02:01:00,713 אני פשוט סוג של אוהב את הרעיון של לומר את המחרוזת הראשונה, ולאחר מכן 2449 02:01:00,713 --> 02:01:01,940 כמה פעמים לאחר מכן. 2450 02:01:01,940 --> 02:01:03,970 Void אומר שזה עדיין לא מחזיר שום דבר. 2451 02:01:03,970 --> 02:01:06,428 אלה הם רק צד חזותי תופעות, כמו עם [? ירדן,?] 2452 02:01:06,428 --> 02:01:08,240 תופעת לוואי מילולית של צעקות. 2453 02:01:08,240 --> 02:01:12,630 זה עדיין עושה פעמים משהו n, 0 עד, אבל לא שווה n. 2454 02:01:12,630 --> 02:01:14,540 משמעות הדבר היא פעמים בסך הכל n. 2455 02:01:14,540 --> 02:01:16,540 ואז פשוט להדפיס את מה שזה מחרוזת הוא. 2456 02:01:16,540 --> 02:01:19,060 אז אני כבר באמת כללי שורת הקוד הזה. 2457 02:01:19,060 --> 02:01:22,460 אז עכשיו, איך אני מיישם פונקצית השיעול? 2458 02:01:22,460 --> 02:01:25,520 >> אני יכול לעשות שיעול ומבוטל. 2459 02:01:25,520 --> 02:01:28,501 ואני עדיין יכול לקחת כמה הרבה פעמים אתה רוצה להשתעל. 2460 02:01:28,501 --> 02:01:29,250 אבל אתה יודע מה? 2461 02:01:29,250 --> 02:01:31,240 עכשיו אני יכול לומר דוגית. 2462 02:01:31,240 --> 02:01:36,540 >> אני יכול להתקשר להגיד עם שיעול מילה, עובר n. 2463 02:01:36,540 --> 02:01:40,410 ואם אני רוצה גם ליישם, סתם בשביל הכיף, פונקציה עיטוש, 2464 02:01:40,410 --> 02:01:42,290 אני יכול להתעטש כמה וכמה פעמים. 2465 02:01:42,290 --> 02:01:47,300 ואני יכול להשאיר שימוש חוזר n, כי להבחין כי מ 'בהקשר או היקף זה 2466 02:01:47,300 --> 02:01:49,470 קיים רק בתוך הפונקציה הזאת. 2467 02:01:49,470 --> 02:01:52,767 >> ו- N בהקשר זה רק קיים בתוך פונקציה זו כאן. 2468 02:01:52,767 --> 02:01:54,600 אז אנחנו נחזור סוגיות אלה של היקף. 2469 02:01:54,600 --> 02:02:01,160 והנה, אני רק הולך להגיד, באצ'ו, ולאחר מכן n פעמים, פסיק. 2470 02:02:01,160 --> 02:02:04,340 >> ועכשיו, אני רק צריך לשאול פונקציה אלה חתימות עד כאן. 2471 02:02:04,340 --> 02:02:06,290 אז השיעול נכון. 2472 02:02:06,290 --> 02:02:10,090 עיטוש Void נכון עכשיו. 2473 02:02:10,090 --> 02:02:12,390 >> ואני עדיין רק צריך לומר. 2474 02:02:12,390 --> 02:02:18,990 אז אני הולך להגיד, אגיד מחרוזת s, int n, פסיק. 2475 02:02:18,990 --> 02:02:22,010 אז אני כבר יתר מהונדס לעזאזל מחוץ תוכנית זו. 2476 02:02:22,010 --> 02:02:23,760 >> וזה לא בהכרח זה 2477 02:02:23,760 --> 02:02:26,343 מה שאתה צריך לעשות בעת כתיבת אפילו הפשוט ביותר של תוכניות. 2478 02:02:26,343 --> 02:02:29,280 קח משהו שהוא ללא ספק ממש פשוט, ממש קצר, 2479 02:02:29,280 --> 02:02:31,800 מחדש ליישם אותו באמצעות דרך קוד מדי. 2480 02:02:31,800 --> 02:02:34,560 אבל אתה בעצם תראה, וב הזמן להסתכל אחורה על דוגמאות אלה, 2481 02:02:34,560 --> 02:02:38,610 ולהבין, הו, אלה הם הצעדים לקחנו להכליל למעשה, 2482 02:02:38,610 --> 02:02:40,797 גורם משהו, עד בסוף היום 2483 02:02:40,797 --> 02:02:42,380 הקוד שלי הוא בעצם די סביר. 2484 02:02:42,380 --> 02:02:45,960 כי אם אני רוצה להשתעל שלוש פעמים ואחרות מתעטשות שלוש פעמים, 2485 02:02:45,960 --> 02:02:50,420 אני פשוט הולך להפעיל מחדש זו, התוכנית להפוך שיעול, ולהפעיל שיעול. 2486 02:02:50,420 --> 02:02:53,620 ויש לי שלושה שיעולים ושלוש מתעטש. 2487 02:02:53,620 --> 02:02:55,990 >> וכך זה הוא בסיסי הפרדיגמה, אם תרצו, 2488 02:02:55,990 --> 02:03:00,110 עבור כיצד נוכל ללכת על למעשה ביישום תוכנית. 2489 02:03:00,110 --> 02:03:03,220 אבל בואו רק לראות עכשיו מה הוא אנחנו כבר עושים כל הזמן הזה, 2490 02:03:03,220 --> 02:03:06,940 ומה כמה חתיכות הסופיות עומד מאחורי פקודה פשוטה זו. 2491 02:03:06,940 --> 02:03:09,620 בסוף היום, יש לנו כבר משתמש קלאנג כמו המהדר שלנו. 2492 02:03:09,620 --> 02:03:11,494 אנחנו כבר כותבים מקור קוד, המרתו 2493 02:03:11,494 --> 02:03:12,820 באמצעות קלאנג לקוד מכונה. 2494 02:03:12,820 --> 02:03:15,540 >> ואנחנו כבר משתמש הפוך רק כדי להקל הקשות שלנו כל כך 2495 02:03:15,540 --> 02:03:20,740 כי אין לנו לזכור אלה לחשים של קלאנג עצמה. 2496 02:03:20,740 --> 02:03:22,640 אבל מה היא תעשה בעצם עושה? 2497 02:03:22,640 --> 02:03:24,750 וזה, בתורו, מה הוא קלאנג בעצם עושה? 2498 02:03:24,750 --> 02:03:28,790 >> מתברר, כי יש לנו פשוט הדיון היום באומרו, 2499 02:03:28,790 --> 02:03:33,090 אתה לוקח את קוד המקור, להעביר את זה כמו קלט מהדר, אשר נותן לך 2500 02:03:33,090 --> 02:03:35,750 פלט של מכונית קוד, מתברר של שם 2501 02:03:35,750 --> 02:03:37,420 כמה צעדים שונים בפנים. 2502 02:03:37,420 --> 02:03:41,940 קומפילציה קורית להיות המטרייה טווח עבור חבורה של צעדים שלמה. 2503 02:03:41,940 --> 02:03:43,970 אבל בואו רק להקניט זה החוצה ממש מהר. 2504 02:03:43,970 --> 02:03:48,070 >> מתברר כי אנחנו כבר עושים דברים יותר בכל פעם שאני מפעיל תוכנית, 2505 02:03:48,070 --> 02:03:50,990 או בכל פעם שאני לקמפל תוכנית היום. 2506 02:03:50,990 --> 02:03:55,020 אז עיבוד מקדים מתייחס זה- דבר בתוכנית C, 2507 02:03:55,020 --> 02:03:58,720 כפי שנראים שוב ושוב, שמתחיל עם סמל חשיש זה, 2508 02:03:58,720 --> 02:04:03,320 או סמל hashtag כאן, אומר זה הנחיה preprocessor. 2509 02:04:03,320 --> 02:04:07,330 כלומר, במקרה זה, היי מחשב, לעשות משהו עם הקובץ הזה 2510 02:04:07,330 --> 02:04:09,430 לפני שאתה בעצם לקמפל קוד משלי. 2511 02:04:09,430 --> 02:04:15,220 >> במקרה זה, חשיש לכלול הוא, למעשה, הדרך של C לומר, 2512 02:04:15,220 --> 02:04:19,325 היי מחשב, ללכת לקבל את התוכן של CS50.h ולהדביק אותם כאן. 2513 02:04:19,325 --> 02:04:22,170 היי מחשב, לך לקבל את תוכן IO.h הסטנדרטי, 2514 02:04:22,170 --> 02:04:24,690 איפה זה על כונן קשיח, ולהדביק אותו כאן. 2515 02:04:24,690 --> 02:04:27,390 אז הדברים האלה לקרות לראשונה במהלך מקדים. 2516 02:04:27,390 --> 02:04:28,880 >> ו קלאנג עושה את כל זה בשבילנו. 2517 02:04:28,880 --> 02:04:30,510 והיא עושה את זה כל כך לעזאזל מהר, אתה אפילו לא 2518 02:04:30,510 --> 02:04:32,000 לראות ארבעה דברים ברורים קורים. 2519 02:04:32,000 --> 02:04:34,100 אבל זה הצעד הראשון מסוג זה. 2520 02:04:34,100 --> 02:04:35,560 >> מה בעצם קורה עכשיו? 2521 02:04:35,560 --> 02:04:38,320 ובכן, הפקיד הבא הצעד הוא קומפילציה. 2522 02:04:38,320 --> 02:04:40,385 ומתברר כי קומפילציה תוכנית 2523 02:04:40,385 --> 02:04:44,060 טכני אומר הולך מ קוד המקור, את החומר יש לנו 2524 02:04:44,060 --> 02:04:47,890 כותב היום, למשהו בשם קוד הרכבה, משהו 2525 02:04:47,890 --> 02:04:49,260 זה נראה קצת שונה. 2526 02:04:49,260 --> 02:04:51,050 >> ואכן, אנו יכולים לראות את זה ממש מהר. 2527 02:04:51,050 --> 02:04:53,890 תן לי בעצם להיכנס IDE שלי. 2528 02:04:53,890 --> 02:04:58,050 תן לי ללכת קדימה hello.c הפתוח, אשר היא התוכנית הראשונה מאוד שבה אנו 2529 02:04:58,050 --> 02:04:59,120 החל היום. 2530 02:04:59,120 --> 02:05:04,130 ותן לי להמשיך ולהפעיל קלאנג קצת אחרת, קלאנג-ים, hello.c, 2531 02:05:04,130 --> 02:05:07,720 אשר למעשה הוא הולך תן לי hello.s קובץ אחר. 2532 02:05:07,720 --> 02:05:10,330 >> ואנחנו כנראה לעולם שוב רואה את זה סוג של קוד. 2533 02:05:10,330 --> 02:05:13,030 אם אתה לוקח לרמה נמוכה יותר בכיתת מערכות כמו CS61, 2534 02:05:13,030 --> 02:05:14,920 אתה תראה הרבה יותר מסוג זה של הקוד. 2535 02:05:14,920 --> 02:05:17,020 אבל זה בשפת אסמבלי. 2536 02:05:17,020 --> 02:05:22,050 זוהי שפת אסמבלי X86 כי המעבד כי הוא שבבסיס 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE בעצם מבין. 2538 02:05:24,460 --> 02:05:27,060 >> וגם נסתר כפי שהיא עושה תראה, זה משהו 2539 02:05:27,060 --> 02:05:29,180 המחשב מבין די טוב. 2540 02:05:29,180 --> 02:05:30,790 q Sub, מדובר לחסר. 2541 02:05:30,790 --> 02:05:31,660 יש תנועות. 2542 02:05:31,660 --> 02:05:35,730 >> יש מתקשר של פונקציות כאן, x אורינג, תנועה, תוספת, פופ, 2543 02:05:35,730 --> 02:05:36,430 תשואה. 2544 02:05:36,430 --> 02:05:38,850 אז יש כמה מאוד הוראות ברמה נמוכה 2545 02:05:38,850 --> 02:05:41,280 כי מעבדים להבין כי רמזתי קודם לכן. 2546 02:05:41,280 --> 02:05:43,100 זה מה Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> ישנם דפוסי אפסים ואחדים כי 2548 02:05:45,030 --> 02:05:51,800 ממופים מנוסחים arcanely אלה, אבל במקצת בשם היטב, הוראות, 2549 02:05:51,800 --> 02:05:52,780 כביכול. 2550 02:05:52,780 --> 02:05:54,780 זה מה שקורה כאשר אתה לקמפל קוד שלך. 2551 02:05:54,780 --> 02:05:58,560 אתה מקבל הרכבה שפה ממנה, אשר 2552 02:05:58,560 --> 02:06:04,680 פירושו השלב השלישי הוא להרכיב לתוך קוד הרכבה, בסופו של דבר, 2553 02:06:04,680 --> 02:06:09,080 אפסים ואחדות מכונת code--, לא טקסט שראינו הרגע לפני רגע. 2554 02:06:09,080 --> 02:06:13,370 >> אז מראש עיבוד האם זה למצוא ולהחליף, ועוד כמה דברים אחרים. 2555 02:06:13,370 --> 02:06:16,430 הידור לוקח המקור שלך קוד מ C, קוד המקור 2556 02:06:16,430 --> 02:06:18,980 שכתבנו, כדי הרכבה קוד שאנחנו רק הציץ. 2557 02:06:18,980 --> 02:06:22,170 רכבת לוקחת כי הרכבה קוד אפסים ואחדות 2558 02:06:22,170 --> 02:06:24,680 כי המעבד באמת יהיה להבין בסוף היום. 2559 02:06:24,680 --> 02:06:27,630 וקישור הוא הצעד האחרון זה יקרה עבור us-- שוב, 2560 02:06:27,630 --> 02:06:29,830 כל כך מהר שאנחנו אפילו לא notice-- שאומר, 2561 02:06:29,830 --> 02:06:32,460 היי המחשב, לקחת את כל אפסים ואת אלה 2562 02:06:32,460 --> 02:06:36,750 נבע קומפילצית הקוד של הדוד, ו הפונקציה העיקרית שלו במקרה זה. 2563 02:06:36,750 --> 02:06:39,160 >> היי המחשב, לך לקבל כל אפסים ואחדות 2564 02:06:39,160 --> 02:06:42,180 כי הצוות CS50 כתב בתוך הספרייה CS50. 2565 02:06:42,180 --> 02:06:43,440 מערבבים אלה עם דוד של. 2566 02:06:43,440 --> 02:06:46,648 היי מחשב, ללכת לקבל את כל האפסים ואת אלה שמישהו אחר כתב שנים 2567 02:06:46,648 --> 02:06:47,470 לפני עבור printf. 2568 02:06:47,470 --> 02:06:49,880 ולהוסיף אותם לתוך העניין, כך יש לנו 2569 02:06:49,880 --> 02:06:52,870 יש אפסים ואחדות שלי, אפסים ואחדות של הצוות CS50, 2570 02:06:52,870 --> 02:06:55,370 אפסים ואחדות printf, וכל דבר אחר שאנחנו משתמשים. 2571 02:06:55,370 --> 02:07:00,410 >> כולם מקבלים בשילוב יחד לתוך אחד תוכנית בשם, במקרה זה, שלום. 2572 02:07:00,410 --> 02:07:03,141 אז להלן, נעשה זאת רק להשתמש קומפילצית המילה. 2573 02:07:03,141 --> 02:07:06,390 ואנו לוקחים כמובן מאליו שכאשר אנחנו אומרים, לקמפל את התוכנית, זה אומר, 2574 02:07:06,390 --> 02:07:08,849 היי לעשות עיבוד מראש, רכבת, וקישור. 2575 02:07:08,849 --> 02:07:11,890 אבל יש באמת כמה דברים עסיסיים קורה שם מתחת למכסה המנוע. 2576 02:07:11,890 --> 02:07:13,723 ובמיוחד אם אתם לקבל זמן מה סקרנים, 2577 02:07:13,723 --> 02:07:15,900 אתה יכול להתחיל תוקע סביב ברמה נמוכה יותר זו. 2578 02:07:15,900 --> 02:07:19,660 אבל לעת עתה, מבין בין המזנונים להיום 2579 02:07:19,660 --> 02:07:23,420 הם פשוט תחילתו של תהליך, 2580 02:07:23,420 --> 02:07:26,700 להרגיש נוח עם משהו כמו שלום עולם. 2581 02:07:26,700 --> 02:07:29,575 ואכן, רוב מה שעשינו היום בהחלט לא לשקוע סופר מהיר. 2582 02:07:29,575 --> 02:07:31,491 וזה ייקח קצת זמן, וכמה בפועל. 2583 02:07:31,491 --> 02:07:33,864 ואת רוב הסיכויים הם, תוכל למיין של רוצה להכות במקלדת 2584 02:07:33,864 --> 02:07:34,780 או לצעוק על המסך. 2585 02:07:34,780 --> 02:07:35,880 וכל זה בסדר. 2586 02:07:35,880 --> 02:07:38,320 למרות, ואולי מנסה לא לעשות אותו בספריה כל כך הרבה. 2587 02:07:38,320 --> 02:07:40,820 >> ובסופו של דבר, תקבל אם להיות מסוגל, כדי להתחיל 2588 02:07:40,820 --> 02:07:44,580 רואה דפוסים, הוא קוד טוב שכתבת וגם טעויות 2589 02:07:44,580 --> 02:07:45,370 שביצעת. 2590 02:07:45,370 --> 02:07:48,965 ועוד הרבה כמו תהליך של להפוך TF או CA הוא כמו, 2591 02:07:48,965 --> 02:07:51,590 תתחיל להשתפר טוב למראה דפוסים אלה, 2592 02:07:51,590 --> 02:07:53,774 ופשוט לפתרון שלך בסופו של דבר בעיות משלו. 2593 02:07:53,774 --> 02:07:56,940 בינתיים, יהיה הרבה מאיתנו להלוות תמיכה אותך, לקחת אותך 2594 02:07:56,940 --> 02:07:57,481 דרך זה. 2595 02:07:57,481 --> 02:07:59,450 ובסופו של הדו"חות עבור כל הבעיות 2596 02:07:59,450 --> 02:08:01,366 המתוכנן מודרך דרך כל הפקודות 2597 02:08:01,366 --> 02:08:05,330 כי אני בהחלט יודע מ הרבה תרגול על ידי חברה, 2598 02:08:05,330 --> 02:08:07,380 אבל ייתכן ועופפתי מעל ראשו של אחד לעת עתה. 2599 02:08:07,380 --> 02:08:08,580 וזה לגמרי בסדר. 2600 02:08:08,580 --> 02:08:11,230 >> אבל, בסופו של דבר, אתה הולך כדי להתחיל לראות דפוסים. 2601 02:08:11,230 --> 02:08:14,260 וברגע שאתה מצליח לעבור את כל פרטים טפשים, כמו סוגריים, 2602 02:08:14,260 --> 02:08:16,710 ו סוגריים מסולסלים, חצי נקודות, ואת הדברים, ולמען האמת, 2603 02:08:16,710 --> 02:08:19,360 כי הוא בכלל לא מעניין מבחינה אינטלקטואלית. 2604 02:08:19,360 --> 02:08:22,690 וזה לא המטרה של נקיטה כל כיתת מבוא. 2605 02:08:22,690 --> 02:08:24,410 זהו רעיונות כי הם הולכים משנה. 2606 02:08:24,410 --> 02:08:26,659 >> זה לולאות, ואת תנאים, ואת הפונקציות, 2607 02:08:26,659 --> 02:08:30,552 ועוד בעוצמה ההפשטה, ואת הפקטורינג של קוד, 2608 02:08:30,552 --> 02:08:33,510 ואת העיצוב הטוב, וטוב סגנון, ובסופו של דבר את הנכונות 2609 02:08:33,510 --> 02:08:37,330 של הקוד שלך, זה בסופו של דבר הולך החשוב ביותר. 2610 02:08:37,330 --> 02:08:40,925 אז בשבוע הבא, אנו ננקוט אלה רעיונות שראינו הראשון Scratch 2611 02:08:40,925 --> 02:08:42,800 עכשיו תרגם ל C. ונתחיל 2612 02:08:42,800 --> 02:08:45,740 כדי להציג את הראשון של תחומים בעולם האמיתי של הקורס. 2613 02:08:45,740 --> 02:08:50,140 >> נתמקד בעולם של ביטחון, ועוד קריפטוגרפיה במיוחד, 2614 02:08:50,140 --> 02:08:51,980 האמנות של ערבול מידע. 2615 02:08:51,980 --> 02:08:54,000 ובקרב הראשון בעיות שאתה עצמך 2616 02:08:54,000 --> 02:08:56,840 יקבל לכתוב מעבר לשחק עם כמה התחביר 2617 02:08:56,840 --> 02:08:59,880 ופתרון כמה הגיוני בעיות, בסופו של דבר עבר זמן רב, 2618 02:08:59,880 --> 02:09:03,960 הוא ממש לטרוף, או להצפין, ובסופו של דבר לפענח מידע. 2619 02:09:03,960 --> 02:09:06,470 וזה מה שעשינו היום, יהיה נמוך למדי 2620 02:09:06,470 --> 02:09:09,190 רמה, רק הולכת לאפשר לנו לקחת אחד, ואחד, 2621 02:09:09,190 --> 02:09:13,550 ועוד אחד צעד מעל כלפי כתיבת הקוד המעניין ביותר עד כה. 2622 02:09:13,550 --> 02:09:15,050 >> אז עוד על כך בשבוע הבא. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [הפעלת סרטון] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -מה אתה יכול לספר לי על הפעם האחרונה שראית אותו? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 מה אני יכול להגיד, באמת? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 זאת אומרת, זה היה כמו כל האחרים חזרות טרום ייצור, 2631 02:09:35,340 --> 02:09:40,510 מלבד שיש משהו שהוא אמר בסוף מאוד כי תקוע איתי. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -זהו היה CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> ההיא." זהו כולם לחתוך, עבודה נהדרת על חזרות. 2636 02:09:52,190 --> 02:09:53,070 >> הצהריים של ההיא."? 2637 02:09:53,070 --> 02:09:54,986 >> 'כן, אתה ואני יכול לתפוס כריך קצת. 2638 02:09:54,986 --> 02:09:58,380 תן לי רק לתחקר עם דוד ממש מהר. 2639 02:09:58,380 --> 02:09:59,160 דוד? 2640 02:09:59,160 --> 02:10:01,260 דוד? 2641 02:10:01,260 --> 02:10:03,110 >> [סוף PLAYBACK]