1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] הדוד י Malan: בסדר. 2 00:00:08,160 --> 00:00:11,170 זה CS50, וזה סוף השבוע השני. 3 00:00:11,170 --> 00:00:14,650 אם אתה מצפה שיהיה רעב בזמן הזה מחר, יודע שאנחנו הולכים 4 00:00:14,650 --> 00:00:18,920 לכנס כקבוצה קטנה מחר, יום חמישי, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 יש URL זה כאן אם אתה רוצה לאשר השתתפות. 6 00:00:21,460 --> 00:00:25,270 מספר המקומות מוגבל, אז אנא סלח אם הטופס מתמלא בזמן שאתה 7 00:00:25,270 --> 00:00:26,680 מלא את הפרטים. 8 00:00:26,680 --> 00:00:29,400 אתר אחר למרות שהיה בו עניין זה. 9 00:00:29,400 --> 00:00:32,409 >> אז רק על הזמן של חודש, כמובן הולך להיות זמין 10 00:00:32,409 --> 00:00:36,090 כל באופן רחב יותר באמצעות edx, דרך שאנשים באינטרנט יהיו 11 00:00:36,090 --> 00:00:39,580 תוכל לבצע יחד, לעסוק באופן פעיל למדי כמובן, למעשה. 12 00:00:39,580 --> 00:00:43,070 הם ישתמשו CS50 Appliance וCS50 לדון ורוב 13 00:00:43,070 --> 00:00:45,840 כלי תוכנה שונים שאנו כבר משתמשים בסמסטר הזה. 14 00:00:45,840 --> 00:00:49,030 ואחת מהיוזמות שהיינו רוצה לקחת עליו כניסוי בשנה זו 15 00:00:49,030 --> 00:00:53,120 הוא לראות עד כמה תוכן שאנו יכולים לתרגם אחרים דברנו ו 16 00:00:53,120 --> 00:00:54,110 שפות כתובות. 17 00:00:54,110 --> 00:00:58,000 אז אם אתה יכול להיות עניין בהשתתפות בפרויקט זה, לפיו 18 00:00:58,000 --> 00:01:02,090 אנו נספק תמלילים וכתוביות באנגלית לקורס של 19 00:01:02,090 --> 00:01:05,190 הרצאות וסמינרים ומכנסיים קצרים וחתכים וכדומה - 20 00:01:05,190 --> 00:01:08,700 אם אתה מדבר באופן שוטף או לכתוב ברהיטות שפה אחרת, הייתי עושה זאת 21 00:01:08,700 --> 00:01:12,240 אוהב לשתף אותך בפרויקט זה, לפיו אתה לוקח על אחד או יותר מ 22 00:01:12,240 --> 00:01:15,340 קטעי וידאו, ולתרגם אותם לשפה שאתה יודע היטב. 23 00:01:15,340 --> 00:01:19,050 כדי לתת לך תחושה של הממשק, יש ממשק משתמש מבוסס אינטרנט זה 24 00:01:19,050 --> 00:01:22,330 כי יהיה לנו באמצעות שייצור ממשק משתמש כזה במהות. 25 00:01:22,330 --> 00:01:24,520 זה היה לי מלמד איזה ליל כל קדושים לפני. 26 00:01:24,520 --> 00:01:27,710 ובצד הימני יש בשחור ליד חותמות זמן אלו, 27 00:01:27,710 --> 00:01:31,300 אתה תראה את הדברים השונים שיצאו מהפה שלי באותו היום. 28 00:01:31,300 --> 00:01:34,660 ואז, מתחתיה, תוכל לתרגם לשפה קצת אחרת. 29 00:01:34,660 --> 00:01:37,840 בדיוק מה הוא המיפוי בין, במקרה זה, באנגלית 30 00:01:37,840 --> 00:01:38,660 ו, אומרים, ספרדית. 31 00:01:38,660 --> 00:01:40,480 אז זה בעצם כלי מאוד ידידותי למשתמש. 32 00:01:40,480 --> 00:01:43,690 אתה יכול להריץ אחורה וקדימה במהירות מאוד בקלות עם קיצורי מקלדת. 33 00:01:43,690 --> 00:01:46,710 אז אם אתם רוצים לקחת חלק בניסוי זה ויש לך מילים 34 00:01:46,710 --> 00:01:50,730 ראה וקראו על פוטנציאל אלף של אנשים בחוץ, אל תרגיש 35 00:01:50,730 --> 00:01:51,960 חופשי להשתתף. 36 00:01:51,960 --> 00:01:56,940 >> עכשיו מילה אחת על החתלתול מיום השנייה, שמא יש לנו נשלחנו מדי 37 00:01:56,940 --> 00:01:58,120 הודעה מפחידה. 38 00:01:58,120 --> 00:02:02,130 האם מבין שכשעתי משרד מציעות וישמשו כחלקים מציעים, 39 00:02:02,130 --> 00:02:05,110 העיצוב של הקורס הוא מאוד לתלמידים ומשתפים פעולה 40 00:02:05,110 --> 00:02:09,250 מדבר לעבוד דרך סטים בעייתיים ובעיות יחד. 41 00:02:09,250 --> 00:02:13,630 ובאמת קו פשוט מסתכם, שוב, את העבודה שאתה סופו של דבר 42 00:02:13,630 --> 00:02:16,420 צריך להגיש צריכה להיות שלך. 43 00:02:16,420 --> 00:02:19,080 ואז זה, די ביושר - בשעתי עבודה, זה לגמרי נורמלי - 44 00:02:19,080 --> 00:02:21,560 זה לגמרי צפוי, אפילו - שמשוחח עם חלק 45 00:02:21,560 --> 00:02:22,370 חברים הקרובים אליך. 46 00:02:22,370 --> 00:02:25,240 אם הוא או היא מתמודדת עם נושא מסוים, ואתה, כאילו, אה, ובכן תן 47 00:02:25,240 --> 00:02:27,750 לנותני לכם צצה לכמה משורת הקוד שכתבתי. 48 00:02:27,750 --> 00:02:28,290 זה בסדר גמור. 49 00:02:28,290 --> 00:02:28,700 זה קורה. 50 00:02:28,700 --> 00:02:31,580 וזה מאוד מעודד, אני חושב, בתהליך של למידה. 51 00:02:31,580 --> 00:02:35,270 איפה הקו, שוב, מקבל חצה הוא כאשר הראש מוטה הוא סוג של מעל 52 00:02:35,270 --> 00:02:38,800 כאן לשניות או דקות רבות מדי לכי באמת יש רק 53 00:02:38,800 --> 00:02:41,250 היה הזדמנות לביטול חסימה של החבר שלך. 54 00:02:41,250 --> 00:02:43,870 ובוודאי, כאשר דברים מקבלים החליפו באמצעות דוא"ל וDropbox ו 55 00:02:43,870 --> 00:02:45,350 כמו, גם שם הוא הקו. 56 00:02:45,350 --> 00:02:48,940 אז בכל האמצעים, להרגיש בנוח ותרגיש עודד כדי לשוחח עם חברים 57 00:02:48,940 --> 00:02:51,270 וחבריו לכיתה על psets ועוד. 58 00:02:51,270 --> 00:02:54,680 ובדיוק את מה שאתה מבין שסופו של דבר להגיש באמת צריך להיות 59 00:02:54,680 --> 00:02:57,780 תוצר של יצירה ולא שלך למישהו אחר. 60 00:02:57,780 --> 00:03:01,010 >> אז באותה הרוח של יצורי cuddly, אתה עלול 61 00:03:01,010 --> 00:03:02,820 מכיר את הבחור הזה כאן. 62 00:03:02,820 --> 00:03:06,180 אז זה סרט איום זול משנים הקודמות. 63 00:03:06,180 --> 00:03:08,680 מישהו כאן ראה Spaceballs? 64 00:03:08,680 --> 00:03:09,120 בסדר. 65 00:03:09,120 --> 00:03:10,220 אז מספר טוב כאן. 66 00:03:10,220 --> 00:03:13,840 אז זו הדרך נפלאה האקדמית שלנו בסופו של החדרה היום 67 00:03:13,840 --> 00:03:15,130 הרעיון של הצפנה. 68 00:03:15,130 --> 00:03:19,010 וכך, אחת הבעיות הספציפיות לתחום pset 2, שיבוא 69 00:03:19,010 --> 00:03:22,770 מחר בשעת הלילה מאוחר, הוא לצלול לתוך העולם של הצפנה, אשר 70 00:03:22,770 --> 00:03:26,380 היא האמנות של הצפנה או ערבול מידע. 71 00:03:26,380 --> 00:03:30,160 וזה סופו של דבר מתייחס לעולם של ביטחון. 72 00:03:30,160 --> 00:03:34,440 >> עכשיו אבטחה עבור רובנו מגיע בצורה של מנגנונים די שיגרתי. 73 00:03:34,440 --> 00:03:36,920 לכולנו יש שמות משתמש וסיסמות. 74 00:03:36,920 --> 00:03:41,350 ולכולנו יש שמות משתמש וסיסמות רעים מאוד, סביר להניח. 75 00:03:41,350 --> 00:03:45,250 אם הסיסמה שלך היא זהה במספר אתרי אינטרנט, זה כנראה לא 76 00:03:45,250 --> 00:03:47,920 הרעיון הטוב ביותר, כפי שנדונו לקראת סופו של הסמסטר. 77 00:03:47,920 --> 00:03:51,680 אם הסיסמה שלך כתובה על פתק דביק - לא בדיחה - עליך 78 00:03:51,680 --> 00:03:55,130 צג, שגם היא לא בהכרח הכי הטוב, אבל העיצוב די נפוץ 79 00:03:55,130 --> 00:03:56,140 תופעה. 80 00:03:56,140 --> 00:04:00,420 ואם אתה לא משתמש בהצפנה כדי להצפין את הסיסמות שלך, הם 81 00:04:00,420 --> 00:04:01,610 פגיע במיוחד. 82 00:04:01,610 --> 00:04:04,670 אז אם אתה חושב שאתה סופר חכם על ידי בעל Word נסתר 83 00:04:04,670 --> 00:04:07,740 לתעד את המקום על הכונן הקשיח שלך, כי יש את כל הסיסמות שלך, אבל 84 00:04:07,740 --> 00:04:10,550 שהוא בתיקייה שאף אחד לא הולך להיראות ב, שגם היא לא מאוד 85 00:04:10,550 --> 00:04:11,540 מנגנון מאובטח. 86 00:04:11,540 --> 00:04:15,100 ואז מה יהיה להכניס 2 pset הוא זו אמנות של קריפטוגרפיה 87 00:04:15,100 --> 00:04:18,300 ערבול מידע, כך שדברים כמו סיסמות 88 00:04:18,300 --> 00:04:19,500 כל מאובטח יותר. 89 00:04:19,500 --> 00:04:24,500 כדי להניע את הבעיה האמיתית בעולם הזה עם לא בעולם אמיתי מאוד 90 00:04:24,500 --> 00:04:28,740 תרחיש, הרשה לי להציג אותך לאחד הקטעים האהובים עלינו כאן מזה 91 00:04:28,740 --> 00:04:29,895 סרט, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [השמעת וידאו] 93 00:04:30,565 --> 00:04:32,995 קסדה, אתה מכור, מה קורה? 94 00:04:32,995 --> 00:04:34,730 מה אתה עושה לבת שלי? 95 00:04:34,730 --> 00:04:38,960 -הרשה לי להציג את המנתח המבריק, הצעיר הפלסטי, ד"ר פיליפ 96 00:04:38,960 --> 00:04:43,290 Schlotkin, איש עבודת האף הכי הגדול בכל רחבי 97 00:04:43,290 --> 00:04:45,526 היקום ובוורלי הילס. 98 00:04:45,526 --> 00:04:46,450 -הוד המעלה. 99 00:04:46,450 --> 00:04:47,380 'אף עבודה? 100 00:04:47,380 --> 00:04:48,035 אני לא מבין. 101 00:04:48,035 --> 00:04:49,480 היא כבר היה ניתוח אף. 102 00:04:49,480 --> 00:04:51,490 זה היה 16 הווה מתוק. 103 00:04:51,490 --> 00:04:53,090 לא, זה לא מה שאתה חושב. 104 00:04:53,090 --> 00:04:55,150 זה הרבה, הרבה יותר גרוע. 105 00:04:55,150 --> 00:04:59,860 אם אתה לא נותן לי את שילוב למגן האוויר, ד"ר Schlotkin יהיה 106 00:04:59,860 --> 00:05:04,135 לתת לבת שלך בחזרה אפה הישן. 107 00:05:04,135 --> 00:05:05,385 -לא! 108 00:05:08,202 --> 00:05:10,186 מאיפה הבאת את זה? 109 00:05:10,186 --> 00:05:11,178 -בסדר. 110 00:05:11,178 --> 00:05:11,674 אני אגיד. 111 00:05:11,674 --> 00:05:12,666 אני אגיד. 112 00:05:12,666 --> 00:05:14,154 לא, אבא, לא. 113 00:05:14,154 --> 00:05:15,150 אתה לא חייב. 114 00:05:15,150 --> 00:05:16,460 -אתה צודק, יקירתי. 115 00:05:16,460 --> 00:05:18,450 אני אתגעגע אל האף החדש שלך. 116 00:05:18,450 --> 00:05:21,550 אבל אני לא אומר להם את השילוב לא משנה מה. 117 00:05:21,550 --> 00:05:23,100 -טוב מאוד. 118 00:05:23,100 --> 00:05:25,510 ד"ר Schlotkin, יעשה הגרוע ביותר שלך. 119 00:05:25,510 --> 00:05:26,760 -הנאה. 120 00:05:30,560 --> 00:05:31,180 -לא! 121 00:05:31,180 --> 00:05:33,450 חכה, חכה. 122 00:05:33,450 --> 00:05:34,770 אני אגיד. 123 00:05:34,770 --> 00:05:36,400 אני אגיד. 124 00:05:36,400 --> 00:05:38,630 -ידעתי שזה יעבוד. 125 00:05:38,630 --> 00:05:42,040 בסדר, תן לי את זה. 126 00:05:42,040 --> 00:05:46,890 -שילוב הוא אחד. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 ושתיים. 130 00:05:48,950 --> 00:05:49,370 ושתיים. 131 00:05:49,370 --> 00:05:50,450 ושתיים. 132 00:05:50,450 --> 00:05:50,715 ושלוש 133 00:05:50,715 --> 00:05:51,380 ושלוש. 134 00:05:51,380 --> 00:05:52,390 ושלוש. 135 00:05:52,390 --> 00:05:53,200 וארבעה. 136 00:05:53,200 --> 00:05:53,720 וארבעה. 137 00:05:53,720 --> 00:05:55,830 וארבעה. 138 00:05:55,830 --> 00:05:56,580 וחמש 139 00:05:56,580 --> 00:05:57,120 וחמש. 140 00:05:57,120 --> 00:05:58,560 וחמש. 141 00:05:58,560 --> 00:06:03,770 -אז שילוב הוא אחד, שתיים, שלוש, ארבעה, חמש. 142 00:06:03,770 --> 00:06:06,745 זה השילוב הכי המטומטם ששמעתי בחיים שלי. 143 00:06:06,745 --> 00:06:09,290 זה מסוג הדברים שאידיוט היה על המטען שלו. 144 00:06:09,290 --> 00:06:11,540 -תודה לך, הוד מעלתך. 145 00:06:11,540 --> 00:06:12,940 -מה עשה? 146 00:06:12,940 --> 00:06:14,230 -כיביתי את הקיר. 147 00:06:14,230 --> 00:06:14,630 לא, אתה לא. 148 00:06:14,630 --> 00:06:15,430 אתה כיבית את הסרט כולו. 149 00:06:15,430 --> 00:06:16,722 -כנראה לחצתי על הכפתור הלא הנכון. 150 00:06:16,722 --> 00:06:18,078 -ובכן, לשים אותו שוב. 151 00:06:18,078 --> 00:06:18,805 שים את הסרט שוב. 152 00:06:18,805 --> 00:06:19,080 -כן, אדונים. 153 00:06:19,080 --> 00:06:19,270 כן, אדונים. 154 00:06:19,270 --> 00:06:19,830 -בואו נלך, ארנה. 155 00:06:19,830 --> 00:06:20,270 בואו, גרטשן. 156 00:06:20,270 --> 00:06:22,850 כמובן שאתה יודע שאני עדיין אצטרך לחייב אותך על זה. 157 00:06:27,400 --> 00:06:28,325 -ובכן, זה עבד? 158 00:06:28,325 --> 00:06:29,550 איפה השער? 159 00:06:29,550 --> 00:06:29,910 -זה עבד, אדונים. 160 00:06:29,910 --> 00:06:30,770 יש לנו את שילוב. 161 00:06:30,770 --> 00:06:31,390 Great-. 162 00:06:31,390 --> 00:06:35,630 עכשיו אנחנו יכולים לקחת כל נשימה אחרונה של אוויר צח מהכוכב Druidia. 163 00:06:35,630 --> 00:06:36,550 מה שילוב? 164 00:06:36,550 --> 00:06:38,805 -אחת, שתיים, שלוש, ארבעה, חמש. 165 00:06:38,805 --> 00:06:40,610 -אחת, שתיים, שלוש, ארבעה, חמש? 166 00:06:40,610 --> 00:06:41,070 -כן. 167 00:06:41,070 --> 00:06:41,760 -זה מדהים. 168 00:06:41,760 --> 00:06:45,200 יש לי את אותו שילוב במטען שלי. 169 00:06:45,200 --> 00:06:47,800 הכן 1 spaceball ליציאה מיידית. 170 00:06:47,800 --> 00:06:48,536 -כן, אדונים. 171 00:06:48,536 --> 00:06:52,350 -ולשנות את שילוב במטען שלי. 172 00:06:52,350 --> 00:06:53,250 -אווה! 173 00:06:53,250 --> 00:06:55,020 [וידאו השמעת END] 174 00:06:55,020 --> 00:06:57,470 >> הדוד י Malan: סרט מדהים שעכשיו כולם צריך לראות. 175 00:07:00,600 --> 00:07:06,540 אז ההקשר כאן הוא שעם נתונים מאובטחים מגיעה הזדמנות 176 00:07:06,540 --> 00:07:07,790 להצפין אותו וכדי לטרוף אותו. 177 00:07:07,790 --> 00:07:11,060 וכך זה, למשל, הוא דוגמה להודעה מוצפנת. 178 00:07:11,060 --> 00:07:12,980 זה בעצם אומר משהו באנגלית. 179 00:07:12,980 --> 00:07:14,750 אבל ברור שזה לא לגמרי ברור. 180 00:07:14,750 --> 00:07:17,360 ואנחנו סגרנו מעגל היום להקניט בנפרד מה זה סוד 181 00:07:17,360 --> 00:07:18,380 מסר כאן הוא. 182 00:07:18,380 --> 00:07:22,370 אבל בעולם האמיתי של מחשבים, דברים אפילו לא נראים כמו שהם עשויים 183 00:07:22,370 --> 00:07:23,440 להיות משפטים באנגלית. 184 00:07:23,440 --> 00:07:27,500 לדוגמה, זה מה שאפשר למצוא על תקן לינוקס או מק או 185 00:07:27,500 --> 00:07:32,080 מחשב יוניקס בקובץ שהיה פעם שם קובץ הסיסמות. 186 00:07:32,080 --> 00:07:34,170 כיום, זה כבר עבר למקומות אחרים. 187 00:07:34,170 --> 00:07:38,660 אבל אם אתה מסתכל במקום הנכון במערכת, תוכל לראות לא רק שלך 188 00:07:38,660 --> 00:07:41,430 שם משתמש או של אנשים אחרים במערכת, אבל תראה 189 00:07:41,430 --> 00:07:43,410 גרסה מוצפנת של הסיסמה שלהם. 190 00:07:43,410 --> 00:07:47,800 ואכן, המילה קריפטה יש טוענת כי הדברים שלהלן הם מוצפנים. 191 00:07:47,800 --> 00:07:52,030 וזו סדרה של אותיות אקראיות לכאורה ותווים ומספרים ו 192 00:07:52,030 --> 00:07:56,370 כן הלאה יכול להיות מפוענח רק על ידי ידיעת סוד כלשהו בדרך כלל - 193 00:07:56,370 --> 00:07:58,600 מילה סודית, מספר סודי. 194 00:07:58,600 --> 00:08:02,760 וכך אכן, האמנות של הצפנה בסופו של דבר מסתכם במורד לאמונם של כמה 195 00:08:02,760 --> 00:08:05,700 מיון ולדעת משהו שמישהו אחר לא. 196 00:08:05,700 --> 00:08:10,010 נחקור את זה בפירוט קצת יותר היום ובpset לבוא. 197 00:08:10,010 --> 00:08:11,860 >> ועכשיו מילה על עובר / נכשל. 198 00:08:11,860 --> 00:08:15,250 אז במיוחד, כפי שחלקכם צלל לתוך 1 pset, המכשיר, ו 199 00:08:15,250 --> 00:08:18,390 עולם חדש מאוד בעצמך, והבין שתסכולים 200 00:08:18,390 --> 00:08:21,340 בלבול וקשיים טכניים פשוט יש לצפות. 201 00:08:21,340 --> 00:08:24,410 במיוחד עם pset הראשון, שבו יש פשוט כל כך הרבה דברים חדשים, רק מתחיל 202 00:08:24,410 --> 00:08:28,830 מכיר את LS וcd וכל הפקודות המסתוריות אלה בסביבה חדשה. 203 00:08:28,830 --> 00:08:32,679 וזה נפרד מהחומר בפועל ותכנות עצמו. 204 00:08:32,679 --> 00:08:35,960 אז הבין גם שיש בהחלט שעתי עבודה שבנמצא 205 00:08:35,960 --> 00:08:36,770 מבנה התמיכה. 206 00:08:36,770 --> 00:08:38,620 סעיפים מתחילים ביום ראשון הקרוב. 207 00:08:38,620 --> 00:08:41,990 אבל הכי חשוב, אם אתם מרגישים שזה לא 208 00:08:41,990 --> 00:08:44,420 העולם בשבילך, להבין שזה באמת פשוט ייקח זמן. 209 00:08:44,420 --> 00:08:47,520 ואם לא היה ההזדמנות הזאת לפני שנים בשבילי לקחת כיתה 210 00:08:47,520 --> 00:08:50,840 עובר / נכשל, בכנות, לא הייתי אפילו כף רגלם בכיתה. 211 00:08:50,840 --> 00:08:53,520 ואתה יכול לשנות את זה עד, יניח, יום שני 5 של הקורס. 212 00:08:53,520 --> 00:08:57,110 אז אם אתה בקצה עכשיו, מבין שלא בראש לחלק שני 213 00:08:57,110 --> 00:09:01,000 מים בכלל, אין ספק שרואים שינוי רק לעוברים / נכשל. 214 00:09:01,000 --> 00:09:03,750 שוב, אין באמת זו תרבות כאן ברווארד של לקיחת דברים 215 00:09:03,750 --> 00:09:08,080 עובר / נכשל מאחר שכולם באמת רוצה להשיג או overachieve. 216 00:09:08,080 --> 00:09:11,470 אבל בכנות, זו היא דרך נפלאה של ניסה משהו שאולי לא 217 00:09:11,470 --> 00:09:13,110 להיות מוכר לך. 218 00:09:13,110 --> 00:09:17,090 ותקבל בסופו של דבר עושה ברוב המקרים די בסדר, אולי 219 00:09:17,090 --> 00:09:18,040 להפתעתו הרבה שלך. 220 00:09:18,040 --> 00:09:20,850 ובמונחים קונקרטיים יותר, מה שאני חושב עובר / נכשלתי בדרך כלל עושה, 221 00:09:20,850 --> 00:09:23,350 במיוחד כפי שאולי חווה עם pset 0, אם שמת 222 00:09:23,350 --> 00:09:27,200 ב 10 שעות, 15 שעות, 25 שעות לתוך pset חלק - ואתה פשוט דופקים 223 00:09:27,200 --> 00:09:28,180 הראש שלך בקיר, 224 00:09:28,180 --> 00:09:29,850 וזה מתחיל להיות סופר מאוחר בלילה, 225 00:09:29,850 --> 00:09:31,880 אבל אתה כבר לקחת pset כמו 90% מהדרך, 226 00:09:31,880 --> 00:09:33,780 אתה יודע שאתה פשוט לא יכול להבין דבר אחד - 227 00:09:33,780 --> 00:09:36,830 עובר / נכשל באמת לוקח את עוקצו של מעמד כזה, שבו אתה יכול למיין 228 00:09:36,830 --> 00:09:39,150 של שמחה אומרים בסדר, אני יודע שזה לא מושלם. 229 00:09:39,150 --> 00:09:40,470 אבל עבדתי לי את התחת על זה. 230 00:09:40,470 --> 00:09:42,410 אני די מרוצה מזה שבו בסופו. 231 00:09:42,410 --> 00:09:44,780 ושיעמוד בציפיות לעוברים / נכשל. 232 00:09:44,780 --> 00:09:46,850 אז אל תשמור את זה בחשבון. 233 00:09:46,850 --> 00:09:47,140 >> בסדר. 234 00:09:47,140 --> 00:09:50,980 אז אלו מכם שנאבקו להשתמש אוניברסיטת הרווארד Wi-Fi יודעים 235 00:09:50,980 --> 00:09:54,780 שיש SSID CS50, חיבור Wi-Fi מרחפת שאתה 236 00:09:54,780 --> 00:09:56,520 אולי יהיה לך מזל טוב ל. 237 00:09:56,520 --> 00:09:59,430 זה קצת אירוני שהסיסמה לזה - אם אתה רוצה לנסות 238 00:09:59,430 --> 00:10:03,080 התחברות לזו למהירויות טובות יותר ולהודיע ​​לנו אם זה לא יותר טוב - 239 00:10:03,080 --> 00:10:09,240 אחת, שתיים, שלוש, ארבעה, חמש, כל הדרך עד לשמונה, כי שמונה הם 240 00:10:09,240 --> 00:10:10,270 מאובטח יותר מחמישה. 241 00:10:10,270 --> 00:10:15,520 אז אם אתה צריך את הסיסמה לאינטרנט האלחוטי, חיבור לCS50 אלחוטי כאן. 242 00:10:15,520 --> 00:10:16,950 אחת, שתיים, שלוש, ארבעה, חמש, שישה, שבע, שמונה. 243 00:10:16,950 --> 00:10:20,440 והודעה על CS50 דיון אם עדיין יש לך בעיות קישוריות לסירוגין, 244 00:10:20,440 --> 00:10:24,880 ואנחנו ניידע את הכוחות שיהיה מכירים למרחב הזה. 245 00:10:24,880 --> 00:10:25,180 >> בסדר. 246 00:10:25,180 --> 00:10:30,350 אז טיזר מהיר, במיוחד עבור אלה מכם שהם בנים או בנות מאוורר 247 00:10:30,350 --> 00:10:31,900 מכל הדברים של אפל. 248 00:10:31,900 --> 00:10:37,566 מה שחפרתי מלפני כמה שנים היה זה קובץ כאן, ilock.c, רק כדי 249 00:10:37,566 --> 00:10:40,930 סוג של להפוך למוחשי יותר ויותר מורכב חלק מC הבסיסי יותר 250 00:10:40,930 --> 00:10:42,350 תוכניות שעסקנו בכתיבה. 251 00:10:42,350 --> 00:10:44,360 אז פתחתי את הקובץ הזה, ilock.c. 252 00:10:44,360 --> 00:10:46,830 זה זמין בדף ההרצאות להיום. 253 00:10:46,830 --> 00:10:49,470 בצד השמאלי, אתם תראו רשימה ארוכה של פונקציות. 254 00:10:49,470 --> 00:10:51,860 אז הבחור שכתב את הטקסט הזה כתב למעלה הרבה פונקציות, 255 00:10:51,860 --> 00:10:53,290 יותר מסתם ראשי. 256 00:10:53,290 --> 00:10:55,490 הוא השתמש בכל חבורה של ספריות כאן. 257 00:10:55,490 --> 00:11:00,450 ואם אנחנו מתחילים לרפרף, מה שזה באמת הוא מאוד 258 00:11:00,450 --> 00:11:04,670 הראשון, אני מאמין, לפיצוח ה-iPhone המקורי. 259 00:11:04,670 --> 00:11:08,000 כאשר אתה רוצה jailbreak iPhone המקורי, מה שאומר untether 260 00:11:08,000 --> 00:11:11,800 זה מ-AT & T ובאמת להתקין תוכנה מיוחדת על זה ולעשות דברים 261 00:11:11,800 --> 00:11:13,510 Apple לא רוצה שאנשים יעשו - 262 00:11:13,510 --> 00:11:17,020 כן, מישהו לקח את הזמן כדי להבין בדיוק איך הם יכולים לנצל 263 00:11:17,020 --> 00:11:20,880 פגמי תוכנה, טעויות, באגים בתוכנה של אפל. 264 00:11:20,880 --> 00:11:22,650 וכך נולד ilock.c. 265 00:11:22,650 --> 00:11:26,670 שאם חברת אותו במחשב והתקנת אותו על האייפון כי 266 00:11:26,670 --> 00:11:29,810 הייתה מחובר למחשב באמצעות, למשל, כבל USB, זה היה נותן לך 267 00:11:29,810 --> 00:11:33,360 הרשאות ניהול או שורש ב-iPhone שלך ​​וייתן לך לעשות פחות או יותר 268 00:11:33,360 --> 00:11:34,170 מה שאתה רוצה. 269 00:11:34,170 --> 00:11:36,740 >> ואז היה חתול זה מרתק ומשחק עכבר בין אפל ו 270 00:11:36,740 --> 00:11:39,920 שאר העולם בפרט כפי שהם, כמו חברות רבות, נסה לנעול 271 00:11:39,920 --> 00:11:43,220 החומר לתוכם, כך שאתה יכול לעשות רק עם זה מה שהם מתכוונים. 272 00:11:43,220 --> 00:11:46,620 אבל הודות לאנשים כמו זה וההבנה שלהם ברמה נמוכה 273 00:11:46,620 --> 00:11:50,580 פרטים ו, ​​במקרה זה, תכנות C והרבה המבנים המוכרים 274 00:11:50,580 --> 00:11:54,630 שאנחנו כבר התחלנו לשחק איתו, אתה יכול באמת למנף 275 00:11:54,630 --> 00:11:59,050 חומרה באופן שאתה רואה לנכון ולא בהכרח חלק התאגיד. 276 00:11:59,050 --> 00:12:01,360 כך למשל, אין לי מושג מה כל זה עושה. 277 00:12:01,360 --> 00:12:03,220 אבל GetVersion נשמע די פשוט. 278 00:12:03,220 --> 00:12:05,480 וזה נראה כאילו זה הוא פונקציה שהאדם הזה כתב. 279 00:12:05,480 --> 00:12:09,240 קח איזה שלם כויכוח, לא מחזיר שום דבר, אבל 280 00:12:09,240 --> 00:12:13,080 נראה לולאה עם לולאה לכאן ואם מצב, אם מצב, 281 00:12:13,080 --> 00:12:15,620 לשבור, ואיכשהו מתייחס למספרי גרסות. 282 00:12:15,620 --> 00:12:16,700 אם אנחנו לגלול למטה - 283 00:12:16,700 --> 00:12:19,570 למרות שהרבה מילות מפתח אלו הולכים להיות חדשים, ויש 284 00:12:19,570 --> 00:12:22,590 המון פונקציות בכאן שמעולם לא ראינו ואי אפשר שלא יראה על 285 00:12:22,590 --> 00:12:23,830 במהלך הסמסטר - 286 00:12:23,830 --> 00:12:27,150 בסופו של היום, זה כפוף לאותם חוקים והיגיון שאנחנו כבר 287 00:12:27,150 --> 00:12:28,760 לשחק עם עד כה. 288 00:12:28,760 --> 00:12:34,220 אז זה זקן מכדי לפצח -3 iPhone 4s או או מייד 5s, בימים אלה, 289 00:12:34,220 --> 00:12:37,320 אבל יודע שזה נובע במידה רבה מכל העולם הזה שיש לנו 290 00:12:37,320 --> 00:12:38,430 צלל לתוכו. 291 00:12:38,430 --> 00:12:41,900 >> אז בואו נסתכל על דוגמה קטנה ופשוטה יותר. 292 00:12:41,900 --> 00:12:46,100 זה אחד, רק כדי להתחמם קצת עם תחביר וגם כמה נתונים אחרים 293 00:12:46,100 --> 00:12:49,240 סוג שדברנו עליו אבל לא באמת ראיתי ב C. אז זה 294 00:12:49,240 --> 00:12:51,680 קובץ שנקרא positive1.c. 295 00:12:51,680 --> 00:12:55,120 ולפי דבריו בראש, זה רק דורש שמשתמש מספק 296 00:12:55,120 --> 00:12:55,960 מספר חיובי. 297 00:12:55,960 --> 00:12:59,530 אז זה דוגמה לעשה תוך לולאה, וזה נחמד למשתמש אינטרקטיווי 298 00:12:59,530 --> 00:13:01,980 תוכניות שבו אתה צריך להגיד למשתמש לעשות משהו. 299 00:13:01,980 --> 00:13:05,190 ואם הם לא ישתפו פעולה, אתה צועק עליהם או לדחות את הקלט שלהם. 300 00:13:05,190 --> 00:13:11,610 מקרה לדוגמה, אני הולך לעשות את הקווים 19 עד 24, כל עוד יש למשתמש 301 00:13:11,610 --> 00:13:14,310 לא נתן לי מספר חיובי. 302 00:13:14,310 --> 00:13:20,400 עכשיו פרט זה כאן בקו 18, למה אני מצהיר n מעל כל זה 303 00:13:20,400 --> 00:13:24,490 מבנה לולאה בניגוד לימין ליד קו 22 שבו אני 304 00:13:24,490 --> 00:13:26,880 ממש אכפת לקבל n? 305 00:13:26,880 --> 00:13:27,330 כן? 306 00:13:27,330 --> 00:13:27,780 [לא ברור] 307 00:13:27,780 --> 00:13:29,040 >> הדוד י Malan: כן, אז זה עניין של היקף. 308 00:13:29,040 --> 00:13:30,850 ובטווח של הדיוט, מה ההיקף מתייחס? 309 00:13:34,690 --> 00:13:36,610 כן? 310 00:13:36,610 --> 00:13:37,860 [לא ברור] 311 00:13:40,040 --> 00:13:41,105 הדוד י Malan: האם אתה יכול לדבר קצת יותר חזק? 312 00:13:41,105 --> 00:13:43,450 רמקולים 1: איפה אתה יכול לגשת למשתנה מסוימת. 313 00:13:43,450 --> 00:13:45,170 הדוד י Malan: מושלם. 314 00:13:45,170 --> 00:13:47,360 איפה אתה יכול לגשת למשתנה מסוימת. 315 00:13:47,360 --> 00:13:50,400 ובאופן כללי, כלל האצבע עד כה היה כי ההיקף כלשהו 316 00:13:50,400 --> 00:13:55,860 משתנה שהוגדר על ידי הסוגריים המסולסלים האחרונים שראיתם. 317 00:13:55,860 --> 00:14:02,010 ולכן במקרה זה, אם אני עשיתי את הטעות של הכרזת n ב 22 לקו, 318 00:14:02,010 --> 00:14:03,010 קו זה יעבוד. 319 00:14:03,010 --> 00:14:10,990 הייתי מקבל int, ואני היה מנסח את זה n משתנה בקו 22. 320 00:14:10,990 --> 00:14:16,900 אבל ששורת הקוד שכרגע אין לי מושג על מה אני מדבר? 321 00:14:16,900 --> 00:14:22,650 אז 25, ומתברר 24, וכן, כי במקרה זה, הוא נופל מחוץ 322 00:14:22,650 --> 00:14:23,610 בסוגריים המסולסלים. 323 00:14:23,610 --> 00:14:27,280 אז פשוט קצת מפריע, אבל פתר בקלות פשוט על ידי הכרזה 324 00:14:27,280 --> 00:14:30,140 מחוץ המשתנה של הפונקציה עצם. 325 00:14:30,140 --> 00:14:32,600 >> עכשיו נראה מאוחר יותר היום, אתה יכול ללכת צעד אחד קדימה. 326 00:14:32,600 --> 00:14:34,860 וגם אתה יכול לקבל קצת עצלן - 327 00:14:34,860 --> 00:14:37,320 וזה לא כדי להיות מומלץ, באופן כללי - 328 00:14:37,320 --> 00:14:42,260 אבל אתה יכול גם לעצלנים ולשים משתנה ברחבי העולם, אם אפשר לומר כך, לא 329 00:14:42,260 --> 00:14:46,670 בתוך פונקציה, לא בתוך לולאה, אבל בקובץ עצמו, מחוץ 330 00:14:46,670 --> 00:14:49,600 של כל הפונקציות שכתבת, כפי שעשיתי כאן ב 15 לקו. 331 00:14:49,600 --> 00:14:51,160 אבל זה כלל בעין יפה. 332 00:14:51,160 --> 00:14:55,680 אבל מבין שזה פתרון לפעמים לבעיות אחרות, שכן אנו 333 00:14:55,680 --> 00:14:56,620 סופו של דבר לראות. 334 00:14:56,620 --> 00:14:58,130 אז לעת עתה, תשאיר את זה ככה. 335 00:14:58,130 --> 00:15:01,030 אבל בואו נראה אם ​​אנחנו יכולים לכתוב את זה מחדש, רק כדי להתחיל לבטא את עצמנו 336 00:15:01,030 --> 00:15:01,990 קצת אחר. 337 00:15:01,990 --> 00:15:05,330 >> אז התכנית הזאת, רק שיהיה ברור, היא positive1. 338 00:15:05,330 --> 00:15:11,810 תן לי ללכת קדימה כאן ובחלון מסופי לעשות positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 הידור, בסדר. 340 00:15:12,740 --> 00:15:14,910 אני הולך לרוץ positive1, על Enter. 341 00:15:14,910 --> 00:15:16,820 אני דורש ממך לתת לי מספר חיובי. 342 00:15:16,820 --> 00:15:18,260 אני אגיד -1. 343 00:15:18,260 --> 00:15:18,910 זה לא עבד. 344 00:15:18,910 --> 00:15:22,150 0, 99, שנראה שזה עובד. 345 00:15:22,150 --> 00:15:23,570 אולי לא במבחן הקפדני ביותר. 346 00:15:23,570 --> 00:15:26,480 אבל לפחות זה צק של שפיות נחמדה שאנחנו על המסלול הנכון. 347 00:15:26,480 --> 00:15:29,240 אז עכשיו תן לי ללכת קדימה ולפתוח את הגרסה 2 של זה. 348 00:15:29,240 --> 00:15:32,500 ומה הוא כבר שונה? 349 00:15:32,500 --> 00:15:35,140 היא מיישמת את אותו דבר. 350 00:15:35,140 --> 00:15:40,660 אבל מה שקופץ החוצה ברגע בבירור שונים הפעם? 351 00:15:40,660 --> 00:15:42,560 כן, אז זה bool בירוק. 352 00:15:42,560 --> 00:15:45,980 Gedit הדגיש בירוק מילת מפתח זו המכונית bool, 353 00:15:45,980 --> 00:15:47,000 שהוא סוג נתונים. 354 00:15:47,000 --> 00:15:51,080 זה לא באו מובנה לכל הגרסות של ג אתה צריך לכלול 355 00:15:51,080 --> 00:15:52,010 ספרייה ספציפית. 356 00:15:52,010 --> 00:15:54,770 במקרה שלנו, אני כלל CS50 ספרייה כדי ש 357 00:15:54,770 --> 00:15:56,460 יש גישה לbool. 358 00:15:56,460 --> 00:15:59,810 אבל בקו 18, שנראה שיש ערך בוליאני כאן נקרא אסיר תודה. 359 00:15:59,810 --> 00:16:01,040 אז יכולתי לקרוא לכל הדבר הזה. 360 00:16:01,040 --> 00:16:04,500 אבל אני קורא לזה אסירי תודה רק כדי להעביר כמה סוג של משמעות סמנטית. 361 00:16:04,500 --> 00:16:07,930 אז בהתחלה בקו 18, אני כנראה לא מודה כי 362 00:16:07,930 --> 00:16:12,150 הערך מודה וליאני מאותחל לכוזב בקו 18. 363 00:16:12,150 --> 00:16:16,890 ואז זה נראה מה שעשיתי כאן בקווים 21 עד 23 היא שאני פשוט 364 00:16:16,890 --> 00:16:18,610 סוג של שוכתב ההיגיון שלי. 365 00:16:18,610 --> 00:16:21,020 אז לא פונקציונלי שונה. 366 00:16:21,020 --> 00:16:26,940 אבל בקו 22 כיום, אני בודק אם int המשתמש ספק גדול מ 367 00:16:26,940 --> 00:16:31,120 0, אז אני פשוט לשנות את ערכו של אסיר תודה לאמיתית. 368 00:16:31,120 --> 00:16:32,290 ולמה אני עושה את זה? 369 00:16:32,290 --> 00:16:35,600 כי בקו 25, ככל הנראה, אני הולך לבדוק את מצבו. 370 00:16:35,600 --> 00:16:39,380 האם זה לולאה בזמן אסירי תודה הם שקרי. 371 00:16:39,380 --> 00:16:43,610 >> אז אני מציע זאת כאלטרנטיבה לגרסה אחת, כי זה לפחות 372 00:16:43,610 --> 00:16:45,130 קצת יותר אינטואיטיבי, אולי. 373 00:16:45,130 --> 00:16:46,900 זה קצת יותר מעוגן באנגלית. 374 00:16:46,900 --> 00:16:51,710 אז בצע את הפעולות הבאות בזמן שאתה לא מודה או בעת אסירי תודה הוא שקרי. 375 00:16:51,710 --> 00:16:55,890 וגם הפעם, כנראה שאני לא רוצה לזכור את מה שמשתמש הקליד 376 00:16:55,890 --> 00:16:57,730 בהודעה כי אין n משתנה. 377 00:16:57,730 --> 00:16:58,650 כך שלמעשה, אני - 378 00:16:58,650 --> 00:17:00,080 שקר לבן קטן שם. 379 00:17:00,080 --> 00:17:02,770 מבחינה פונקציונלית, התכנית היא קצת שונה הרגע שנגיע לתחתית 380 00:17:02,770 --> 00:17:04,819 זה כי אני לא זוכר מה הוא n. 381 00:17:04,819 --> 00:17:09,579 אבל רציתי להדגים גם כאן שלמרות שאנחנו ראינו וGetInt 382 00:17:09,579 --> 00:17:13,920 GetString בשימוש בצד הימני של סימן שוויון עד כה, כך ש 383 00:17:13,920 --> 00:17:17,160 אנו זוכרים את הערך, מבחינה הטכנית, זה לא הכרחי. 384 00:17:17,160 --> 00:17:20,950 אם מסיבה כלשהי אתם פשוט לא אכפת לך לשמור את הערך, אתה רק רוצה 385 00:17:20,950 --> 00:17:25,710 כדי לבדוק את הערך, שים לב שאנחנו יכולים פשוט לכתוב את זה כGetInt פתוח 386 00:17:25,710 --> 00:17:27,000 סוגר, סוגר קרוב. 387 00:17:27,000 --> 00:17:30,460 פונקציה שהוא הולך להחזיר ערך, כפי שאנו טוענים. 388 00:17:30,460 --> 00:17:32,010 זה הולך לתת לך בחזרה int. 389 00:17:32,010 --> 00:17:36,450 ולכן אם אתם חושבים נפשיים שזה יקרה, כשאני מקליד ב99, GetInt 390 00:17:36,450 --> 00:17:38,160 מחזיר את המספר 99. 391 00:17:38,160 --> 00:17:41,330 וכך מושגית, זה כאילו הקוד שלי היה למעשה זה. 392 00:17:41,330 --> 00:17:45,880 אז אם 99 הן אכן גדול מ 0, אז תודה שתתגשם. 393 00:17:45,880 --> 00:17:50,420 ואז קו 25 מבין אווה, סיים כי אני עכשיו אגיד תודה. 394 00:17:50,420 --> 00:17:54,590 ובקו 26, פשוט אומרים אנחנו מודים למספר החיובי, מה שזה 395 00:17:54,590 --> 00:17:55,710 במקרה. 396 00:17:55,710 --> 00:17:58,900 >> עכשיו בואו נעשה סוכר תחבירי קל כאן, כביכול. 397 00:17:58,900 --> 00:18:02,990 בואו נראה אם ​​אנחנו יכולים לנקות את קו 25 זה עם שונות שלישיות ואחרונות זה 398 00:18:02,990 --> 00:18:04,640 בpositive3. 399 00:18:04,640 --> 00:18:08,250 אז תבחין בהבדל היחיד כרגע הוא מה שורת הקוד? 400 00:18:11,930 --> 00:18:13,260 כן, אז 25. 401 00:18:13,260 --> 00:18:15,520 ואנחנו כבר לא ממש ראינו את הטריק הזה עדיין. 402 00:18:15,520 --> 00:18:19,510 אבל אנחנו לא רואים את סימן הקריאה ביום שני, אשר מציין מה? 403 00:18:19,510 --> 00:18:20,970 אז לא, או שלילה. 404 00:18:20,970 --> 00:18:23,460 אז קח את הערך בוליאני ולהעיף את הערך שלו. 405 00:18:23,460 --> 00:18:24,390 האמת הופכת להיות שקר. 406 00:18:24,390 --> 00:18:25,500 השקר הופך לאמיתי. 407 00:18:25,500 --> 00:18:28,910 אז כך, אני הייתי מציע, הוא אפילו קצת יותר אינטואיטיבית של דרך 408 00:18:28,910 --> 00:18:32,200 כתיבת הקוד, כי אני עדיין לאתחל מודה לכוזב. 409 00:18:32,200 --> 00:18:33,530 אני עדיין עושה את הדברים הבאים. 410 00:18:33,530 --> 00:18:35,700 אני מודה לנכון לקבוע בבוא העת. 411 00:18:35,700 --> 00:18:40,690 אבל עכשיו אתה יכול באמת רק לתרגם את הקוד הזה השאיר מילולי לימין, 412 00:18:40,690 --> 00:18:42,550 ואילו לא אסיר תודה. 413 00:18:42,550 --> 00:18:46,170 בגלל מפץ, או סימן קריא, מציין את הרעיון של לא, אז בזמן 414 00:18:46,170 --> 00:18:47,010 לא תודה. 415 00:18:47,010 --> 00:18:49,740 >> אז שוב, אנו לא הצגנו כל מושגים חדשים כשלעצמה. 416 00:18:49,740 --> 00:18:53,230 דברנו על Booleans אחורי כששחקנו עם גרד. 417 00:18:53,230 --> 00:18:55,690 אבל עכשיו אני מבין שאנחנו פשוט יכולים להתחיל לכתוב את הקוד שלנו ב 418 00:18:55,690 --> 00:18:56,550 דרכים רבות ושונות. 419 00:18:56,550 --> 00:19:00,010 אז במיוחד בpset1, אם אתה סוג של נאבק כדי למצוא את הדרך ל 420 00:19:00,010 --> 00:19:03,400 לכתוב איזה תכנית, סיכויים יש לך מזל, כי עומדים להיות כל 421 00:19:03,400 --> 00:19:05,780 מספר הפתרונים שיכולים לקרות בעת. 422 00:19:05,780 --> 00:19:09,850 לדוגמה, זה רק 3 לאפילו הפשוט ביותר של תוכניות. 423 00:19:09,850 --> 00:19:10,180 בסדר. 424 00:19:10,180 --> 00:19:13,860 ועכשיו נזכר ביום שני, שיצאנו בפתק הזה עם ערכים לחזור. 425 00:19:13,860 --> 00:19:18,280 אז בפעם הראשונה, שכתבנו תכנית שלא רק צריכה ראשי, 426 00:19:18,280 --> 00:19:22,240 יש לו גם פונקציה מותאמת אישית משלה שכתבתי כאן. 427 00:19:22,240 --> 00:19:26,640 אז בקו 31 דרך 34, שהתקנתי את פונקצית קובייה. 428 00:19:26,640 --> 00:19:27,800 זה לא מורכב. 429 00:19:27,800 --> 00:19:29,830 זה רק פעמים בפעמים, במקרה זה. 430 00:19:29,830 --> 00:19:34,920 אבל מה חשוב בזה הוא שאני לוקח את הקלט בצורה ו 431 00:19:34,920 --> 00:19:38,910 אני מחזיר פלט בצורה של פי פי א. 432 00:19:38,910 --> 00:19:43,940 >> אז עכשיו יש לי את היכולת, הרבה כמו שהייתי עם printf לבד, לקרוא 433 00:19:43,940 --> 00:19:47,120 פונקציה זו על ידי קריאה לפונקצית הקובייה. 434 00:19:47,120 --> 00:19:49,470 ופונקצית הקובייה לוקחת קצת קלט. 435 00:19:49,470 --> 00:19:52,030 ופונקצית הקובייה מחזירה חלק פלט. 436 00:19:52,030 --> 00:19:56,660 וכך לעומת זאת, printf פשוט עשה משהו. 437 00:19:56,660 --> 00:19:59,490 זה לא החזיר דבר שחשובים ל-- אף כי, כפי 438 00:19:59,490 --> 00:20:00,820 בצד, זה עושה להחזיר ערך. 439 00:20:00,820 --> 00:20:02,650 אתה פשוט בדרך כלל מתעלם ממנו. 440 00:20:02,650 --> 00:20:04,000 Printf פשוט עשה משהו. 441 00:20:04,000 --> 00:20:06,220 זה היה תופעת לוואי של הדפסה על גבי המסך. 442 00:20:06,220 --> 00:20:09,480 לעומת זאת כאן, יש לנו את פונקצית הקובייה, אשר 443 00:20:09,480 --> 00:20:11,400 למעשה מחזיר משהו. 444 00:20:11,400 --> 00:20:12,960 >> אז זה בדרך כלל - 445 00:20:12,960 --> 00:20:15,260 עבור מי שמכיר את זה, שזה רעיון פשוט למדי. 446 00:20:15,260 --> 00:20:18,460 אבל עבור אלה פחות מכירים את הרעיון הזה של העברה בתשומות ומקבלים 447 00:20:18,460 --> 00:20:21,700 יציאות אחוריות, בואו ננסה פשוט פשוט סופר משהו. 448 00:20:21,700 --> 00:20:25,180 האם מישהו בנוח לבוא לבמה לזמן קצר? 449 00:20:25,180 --> 00:20:27,460 אתה צריך להיות נוח עם מצלמה עליך, גם כן. 450 00:20:27,460 --> 00:20:27,640 כן. 451 00:20:27,640 --> 00:20:28,610 אוקיי, מה השם שלך? 452 00:20:28,610 --> 00:20:29,020 KEN: קן. 453 00:20:29,020 --> 00:20:29,420 הדוד י Malan: קן. 454 00:20:29,420 --> 00:20:29,810 הטוב, קן. 455 00:20:29,810 --> 00:20:31,060 בואו נעלה. 456 00:20:31,060 --> 00:20:34,660 אז קן הולך להיות פונקציה של מיני סוגים. 457 00:20:34,660 --> 00:20:35,760 ובואו נלך ותעשה את זה. 458 00:20:35,760 --> 00:20:38,790 בואו תחביב קטן. 459 00:20:38,790 --> 00:20:39,770 נע מאוד. 460 00:20:39,770 --> 00:20:41,010 ברוכים באים למרכז במה. 461 00:20:41,010 --> 00:20:41,980 בסדר. 462 00:20:41,980 --> 00:20:45,590 בואו נכנסתי ללחצן זה כאן. 463 00:20:45,590 --> 00:20:46,420 בסדר. 464 00:20:46,420 --> 00:20:49,490 אז הנה יש לך לוח מודרני. 465 00:20:49,490 --> 00:20:53,050 ומה שאני הוא הפונקציה העיקרית, למשל. 466 00:20:53,050 --> 00:20:55,990 ואין לי אייפד ביד שלי. 467 00:20:55,990 --> 00:20:59,000 אני לא ממש זוכר איך - טוב, למעשה, לא יכול להגיד את זה. 468 00:20:59,000 --> 00:21:02,200 אני לא באמת צריך את כתב יד טוב. 469 00:21:02,200 --> 00:21:05,260 וכך אפוא, אני רוצה שלהדפיס משהו על המסך שלי. 470 00:21:05,260 --> 00:21:07,470 >> אז אני מתנהג בתכנית הראשית. 471 00:21:07,470 --> 00:21:15,060 ואני הולך יש לך להגיד את זה על ידי כתיבתו בשריטה שלי והעוף 472 00:21:15,060 --> 00:21:16,600 אז עובר לך קלט. 473 00:21:16,600 --> 00:21:20,000 אז כאווילי ככל שהתרגיל הזה הוא, הרעיון של פונקציות וקוראים 474 00:21:20,000 --> 00:21:22,260 פונקציה וחזרה למטה פונקציה באמת מסתכם לזה. 475 00:21:22,260 --> 00:21:23,120 אני ראשי. 476 00:21:23,120 --> 00:21:26,270 יש לי רק בכתב printf ("משהו") על המסך. 477 00:21:26,270 --> 00:21:27,470 אני מפעיל תכנית זו. 478 00:21:27,470 --> 00:21:30,900 וברגע שמקבל בשם printf, זה לוקח טיעון אחד - או פרמטר אחד, 479 00:21:30,900 --> 00:21:31,660 לפעמים - 480 00:21:31,660 --> 00:21:32,780 בין מרכאות כפולות. 481 00:21:32,780 --> 00:21:33,960 הנה הטיעון הזה. 482 00:21:33,960 --> 00:21:35,740 אני מעביר אותו לקן. 483 00:21:35,740 --> 00:21:39,390 כעת הוא קופסה שחורה כתבה חלק לפני מספר שנים, שכנראה 484 00:21:39,390 --> 00:21:41,070 רק יודע כיצד להדפיס דברים על המסך. 485 00:21:41,070 --> 00:21:42,320 >> אז, לבצע. 486 00:21:48,842 --> 00:21:49,900 זה לא רע. 487 00:21:49,900 --> 00:21:50,890 לכן, טוב מאוד. 488 00:21:50,890 --> 00:21:52,900 אז עכשיו קן נעשה ביצוע. 489 00:21:52,900 --> 00:21:55,810 האם הוא צריך למסור לי משהו בחזרה? 490 00:21:55,810 --> 00:21:57,240 אז לא שאנחנו ראינו עד כה. 491 00:21:57,240 --> 00:21:59,230 שוב, printf אין בעצם להחזיר מספר. 492 00:21:59,230 --> 00:22:01,640 אבל אנחנו הולכים להתעלם כי לעת עתה, כי אנחנו אף פעם לא השתמשנו בו. 493 00:22:01,640 --> 00:22:03,400 אז זהו זה לקן. 494 00:22:03,400 --> 00:22:06,650 ואז עכשיו עיקרי חוזר לביצוע - 495 00:22:06,650 --> 00:22:09,630 ראשי לוקח על שליטה בתכנית שוב משום ששורת הקוד, 496 00:22:09,630 --> 00:22:11,010 printf, נעשה ביצוע. 497 00:22:11,010 --> 00:22:13,890 ואנחנו הולכים על הדרך שלנו ביצוע כל קווים אחרים נמצאים שם. 498 00:22:13,890 --> 00:22:14,130 >> בסדר. 499 00:22:14,130 --> 00:22:17,080 אז עכשיו בואו ננסה דוגמה קצת שונה. 500 00:22:17,080 --> 00:22:22,430 והפעם כאן, בואו לנקות את המסך הראשון כאן. 501 00:22:22,430 --> 00:22:24,670 והפעם, אנחנו נעשה את הפונקציה עקוב. 502 00:22:24,670 --> 00:22:27,350 אבל הפעם, אני מצפה ערך תפוקה. 503 00:22:27,350 --> 00:22:28,630 אז בואו נלך ותעשה את זה. 504 00:22:28,630 --> 00:22:35,680 אז עכשיו יש לי שורת הקוד שאומרת x = קובייה (x). 505 00:22:35,680 --> 00:22:36,930 אז בעצם - בואי 506 00:22:41,450 --> 00:22:43,940 שורת הקוד, כזכור, נראית כך. 507 00:22:43,940 --> 00:22:45,960 x = הקובייה (x). 508 00:22:45,960 --> 00:22:48,100 אז איך זה הולך לעבוד? 509 00:22:48,100 --> 00:22:50,820 אז בואו נלך קדימה ולתת לך מסך לבן שוב. 510 00:22:50,820 --> 00:22:55,000 ואני הולך לכתוב עכשיו את הערך של x, אשר ברגע זה ב 511 00:22:55,000 --> 00:23:01,080 זמן קורה להיות, יניח, 2, כדי לשמור את זה פשוט. 512 00:23:01,080 --> 00:23:04,890 אז כתבתי על פיסת נייר ערך 2 513 00:23:04,890 --> 00:23:06,100 אשר הוא x הערך שלי. 514 00:23:06,100 --> 00:23:08,250 אני מעביר אותו לקן. 515 00:23:08,250 --> 00:23:09,200 KEN: ואני רק כותב את התשובה? 516 00:23:09,200 --> 00:23:12,660 הדוד י Malan: כן, בואו פשוט נכתוב את התשובה. 517 00:23:12,660 --> 00:23:13,030 אוקיי. 518 00:23:13,030 --> 00:23:16,280 ועכשיו הוא צריך להחזיר לי משהו. 519 00:23:16,280 --> 00:23:17,560 אז - 520 00:23:17,560 --> 00:23:18,170 מושלם. 521 00:23:18,170 --> 00:23:18,840 נחמד רצף. 522 00:23:18,840 --> 00:23:21,970 >> אז עכשיו הוא מחזיר לי את הערך של 8, במקרה זה. 523 00:23:21,970 --> 00:23:23,220 ומה עליי לעשות עם זה? 524 00:23:23,220 --> 00:23:26,130 טוב, בעצם, בואו נראים. 525 00:23:26,130 --> 00:23:26,640 קבל את הזכות הזו. 526 00:23:26,640 --> 00:23:27,880 מה אני הולך לעשות עם זה? 527 00:23:27,880 --> 00:23:31,900 עכשיו אני הולך לקחת את הערך הזה ובעצם לאחסן אותו באלה 528 00:23:31,900 --> 00:23:33,400 אותם ביטים בזיכרון. 529 00:23:33,400 --> 00:23:35,030 אבל שים לב, אני די נאבק כאן. 530 00:23:35,030 --> 00:23:38,280 אני קצת מבולבל כי לאן אני בעצם לכתוב את הערך של x? 531 00:23:38,280 --> 00:23:41,840 כי מה בדיוק עשיתי הוא יד פיזית קן פיסת נייר 532 00:23:41,840 --> 00:23:44,400 שהיה לו הערך 2, שהיה x. 533 00:23:44,400 --> 00:23:46,300 ואכן, זה בדיוק מה שקורה. 534 00:23:46,300 --> 00:23:50,100 אז מתברר שכשאתה קורא לפונקציה, ואתה עובר בויכוח 535 00:23:50,100 --> 00:23:54,130 אוהבים "שלום עולם", או שאתה עובר בטיעון כמו 2, בדרך כלל, אתה 536 00:23:54,130 --> 00:23:56,720 עובר בעותק של ויכוח. 537 00:23:56,720 --> 00:24:01,020 וכך בדיוק כפי שכתבתי את המספר 2 כאן ומסרתי אותו לקן; שחייב 538 00:24:01,020 --> 00:24:04,760 אומר שעדיין יש לי עותק של 2 ערך כלשהו. 539 00:24:04,760 --> 00:24:08,140 כי אכן, עכשיו אחרי שקבלתי בחזרה את הערך 8, אני צריך לחזור ב 540 00:24:08,140 --> 00:24:12,010 זכרון RAM ובעצם לכתוב ירידה של 8 שבו היה לי פעם המספר 2. 541 00:24:12,010 --> 00:24:15,720 >> אז חזותי זוכר את הרעיון הזה של העברה באופן מילולי 542 00:24:15,720 --> 00:24:16,730 עותק של הערך. 543 00:24:16,730 --> 00:24:19,570 קן עושה את הדבר שלו, מחזיר לי משהו - במקרה זה, 544 00:24:19,570 --> 00:24:20,820 ערך כמו 8. 545 00:24:20,820 --> 00:24:22,660 ואז אני חייב לעשות משהו עם זה ערך אם 546 00:24:22,660 --> 00:24:24,880 רוצה לשמור על הסביבה. 547 00:24:24,880 --> 00:24:29,470 אז כל זה יהיה מוכר מדי לפני זמן רב. 548 00:24:29,470 --> 00:24:33,082 תודה רבה לך על זה הדגמה כאן, קן. 549 00:24:33,082 --> 00:24:34,820 בסדר. 550 00:24:34,820 --> 00:24:36,720 עשה טוב מאוד. 551 00:24:36,720 --> 00:24:40,610 אז בואו לראות איך שסופו של דבר מתייחס לחלק מהפונקציה 552 00:24:40,610 --> 00:24:42,270 קורא שאנחנו עושים כאן. 553 00:24:42,270 --> 00:24:47,610 אז תן לי ללכת קדימה ולהחזיר אותנו לדוגמא עקוב כאן. 554 00:24:47,610 --> 00:24:53,080 ושים לב שאם אנחנו רוצים באמת להתחיל לקחת את זה עוד יותר, אנחנו הולכים 555 00:24:53,080 --> 00:24:57,050 יש להיות מודע לעובדה שהמספר x המועבר ב 556 00:24:57,050 --> 00:25:01,390 כאן הוא שונה ממה באמת מועבר לפונקציה. 557 00:25:01,390 --> 00:25:03,940 אז שוב, זה חלף עותק הולך להיות די 558 00:25:03,940 --> 00:25:05,620 מקורן ברגע. 559 00:25:05,620 --> 00:25:09,320 >> אז בואו נסתכל על משהו שלא ממש עובד נכון עדיין. 560 00:25:09,320 --> 00:25:11,790 אני הולך קדימה, לפתוח למשל מרכבה 3, אשר 561 00:25:11,790 --> 00:25:13,560 פגום על ידי הטבע. 562 00:25:13,560 --> 00:25:18,070 וזה נקרא buggy3, והיא מיישמת את פונקצית החלפה. 563 00:25:18,070 --> 00:25:23,500 אז הנה יש לנו פונקציה עיקרית שx ו-y מאותחל באופן שרירותי 564 00:25:23,500 --> 00:25:24,720 1 ו 2, בהתאמה. 565 00:25:24,720 --> 00:25:27,590 אנחנו יכולים להשתמש בGetInt, אבל אנחנו פשוט צריכים תרגיל פשוט. 566 00:25:27,590 --> 00:25:29,680 אז זה קידוד קשיח כמו 1 ו 2. 567 00:25:29,680 --> 00:25:35,330 בקווי 21 ו 22, אנחנו כנראה להדפיס את X ו-Y, אחד בכל שורה. 568 00:25:35,330 --> 00:25:39,620 ואז, בקו 23, אני טוען שאני מחליף את הערכים הללו, נקודה, נקודה, נקודה. 569 00:25:39,620 --> 00:25:43,030 כנראה שאני קורא לפונקציה בקו 24 בשם החלפה 570 00:25:43,030 --> 00:25:44,000 שלוקח את שני טיעונים. 571 00:25:44,000 --> 00:25:46,430 זה לגמרי לגיטימי לפונקציות לקחת שני טיעונים. 572 00:25:46,430 --> 00:25:48,220 ראינו printf לעשות את זה כבר. 573 00:25:48,220 --> 00:25:50,370 אז ההחלפה כנראה לוקחת x ו-y. 574 00:25:50,370 --> 00:25:53,010 וכפי שהשם מרמז, אני מקווה שזה הולך 575 00:25:53,010 --> 00:25:54,320 להחליף שני ערכים אלה. 576 00:25:54,320 --> 00:25:57,560 אז אני טוען ביום 25 בקו, החליף. 577 00:25:57,560 --> 00:26:01,570 ואני להדפיס מחדש את X ו-Y תחת ההנחה כי 578 00:26:01,570 --> 00:26:02,830 הם אכן כבר החליפו. 579 00:26:02,830 --> 00:26:04,370 אבל אם אני באמת להפעיל תכנית זו - 580 00:26:04,370 --> 00:26:06,060 תן לי לפתוח את חלון מסוף. 581 00:26:06,060 --> 00:26:07,750 תן לי לעשות buggy3. 582 00:26:07,750 --> 00:26:09,970 כפי שהשם מרמז, זה לא הולך להסתיים בטוב. 583 00:26:09,970 --> 00:26:14,690 כי כשאני על Enter, תבחין כי x הוא 1. 584 00:26:14,690 --> 00:26:15,720 y הוא 2. 585 00:26:15,720 --> 00:26:19,160 ובכל זאת, בסוף התכנית, הם עדיין, למעשה, את אותו הדבר. 586 00:26:19,160 --> 00:26:22,760 >> זאת בהתבסס על ההפגנה רק עכשיו עם קן, מה בעצם קורה? 587 00:26:22,760 --> 00:26:24,660 ובכן, בואו לצלול לתוך פונקצית עסקה זו. 588 00:26:24,660 --> 00:26:25,800 זה סופר קצר. 589 00:26:25,800 --> 00:26:28,020 זה רק כמה שורות של קוד ארוך. 590 00:26:28,020 --> 00:26:32,810 אבל מה הבעיה הבסיסית המבוססת על הסיפור פשוט ספרה 591 00:26:32,810 --> 00:26:34,270 עד כאן עם קן? 592 00:26:34,270 --> 00:26:36,115 למה החלפה שבורה? 593 00:26:36,115 --> 00:26:37,365 [לא ברור] 594 00:26:39,840 --> 00:26:40,460 בדיוק. 595 00:26:40,460 --> 00:26:43,610 אז אנחנו אחסון להעתקה, לא משתנים עצמו. 596 00:26:43,610 --> 00:26:46,810 במילים אחרות, העסקה כנראה לוקחת שני ארגומנטים, int. 597 00:26:46,810 --> 00:26:49,370 וקוראים לזה באופן שרירותי וb. 598 00:26:49,370 --> 00:26:54,430 וכאן למעלה, אני כבר עברתי בX ו-Y, שהם בהתאמה 1 ו 2. 599 00:26:54,430 --> 00:26:56,580 אבל אני לא ממש עובר בx. 600 00:26:56,580 --> 00:26:58,410 אני לא ממש אני עובר בy. 601 00:26:58,410 --> 00:27:01,230 אני מעביר עותק של x ו עותק של Y. 602 00:27:01,230 --> 00:27:05,180 זה כמו כמעט כאילו אתה להעתיק ולהדביק לתוך להחליף את הערכים ש 603 00:27:05,180 --> 00:27:07,440 אתה רוצה שזה בעצם מניפולציה. 604 00:27:07,440 --> 00:27:11,970 אז אם זה מצב, כש, התכנית, תתחיל להוציא להורג 605 00:27:11,970 --> 00:27:14,140 קו 35, אז 36 - 606 00:27:14,140 --> 00:27:17,740 כשאני מגיע לקו 37, בנקודה זו בסיפור, מהו הערך של a? 607 00:27:20,740 --> 00:27:24,850 בנקודה זו בסיפור, קו 37, מהו הערך של בנקודה זו? 608 00:27:24,850 --> 00:27:25,980 אז זה פשוט צריך להיות 1. 609 00:27:25,980 --> 00:27:26,170 נכון? 610 00:27:26,170 --> 00:27:29,100 בגלל x היה מועבר כטענה הראשונה. 611 00:27:29,100 --> 00:27:33,150 ופונקציה זו רק באופן שרירותי קוראה הטיעון הראשון שלה,. 612 00:27:33,150 --> 00:27:35,130 כמו כן הוא y, הארגומנט השני. 613 00:27:35,130 --> 00:27:37,930 וזה רק באופן שרירותי לקרוא ב הטענה השנייה. 614 00:27:37,930 --> 00:27:40,510 >> עכשיו דיכוטומיה זו היא למעשה די פשוט הסבירה. 615 00:27:40,510 --> 00:27:40,880 תחשוב על זה. 616 00:27:40,880 --> 00:27:42,980 אף אחד מאתנו לא פגש האדם שכתב printf. 617 00:27:42,980 --> 00:27:49,880 אז בוודאי, שהוא או שאין לה מושג מה משתנינו 30 שנים מאוחר יותר הולכים 618 00:27:49,880 --> 00:27:50,710 שייקרא. 619 00:27:50,710 --> 00:27:55,110 אז צריך להיות הבחנה בין מה שאתם קוראים במשתנים 620 00:27:55,110 --> 00:27:59,960 פונקציות אתה כותב ומה שאתה קורא משתנים בפונקציות שאתה 621 00:27:59,960 --> 00:28:01,770 התקשרות או שימוש. 622 00:28:01,770 --> 00:28:05,120 אז במילים אחרות, שכתבתי משתנים שלי בתור X ו-Y. 623 00:28:05,120 --> 00:28:08,060 אבל אם מישהו אחר כתב את פונקצית ההחלפה, הוא או היא בהחלט 624 00:28:08,060 --> 00:28:10,480 לא היה יודע מה המשתנים שלי הולכים להיות בשם. 625 00:28:10,480 --> 00:28:13,850 אז מבין שזו הסיבה שיש לך דואליות זו של שמות. 626 00:28:13,850 --> 00:28:16,800 מבחינה טכנית, אני יכול לעשות את זה במקרה. 627 00:28:16,800 --> 00:28:19,750 אבל הם עדיין יהיו מועברים כהעתקים. 628 00:28:19,750 --> 00:28:22,940 זו תהיה סתם צירוף מקרים טהור מבחינה אסתטית, אם כי מי שכתב 629 00:28:22,940 --> 00:28:25,590 החלפה השתמשה באותם שמות. 630 00:28:25,590 --> 00:28:25,930 >> בסדר. 631 00:28:25,930 --> 00:28:29,010 לכן בשלב זה בסיפור, קו 37, הוא 1. 632 00:28:29,010 --> 00:28:30,410 b הוא 2. 633 00:28:30,410 --> 00:28:32,040 ועכשיו אני ממשיך להחליף אותם. 634 00:28:32,040 --> 00:28:34,730 ובכן, קודם כל, תן לי לעשות את זה דווקא הרבה יותר פשוט. 635 00:28:34,730 --> 00:28:36,500 אני לא יודע מה שלוש השורות האלה של קוד עושות. 636 00:28:36,500 --> 00:28:37,370 תן לי רק לעשות את זה. 637 00:28:37,370 --> 00:28:38,850 ב מקבל. 638 00:28:38,850 --> 00:28:40,170 מקבל ב. 639 00:28:40,170 --> 00:28:41,450 עשה. 640 00:28:41,450 --> 00:28:43,540 למה זה שבור, באופן הגיוני? 641 00:28:46,980 --> 00:28:48,590 זה סוג של דבר אינטואיטיבי, נכון? 642 00:28:48,590 --> 00:28:50,640 אז הופך ב. 643 00:28:50,640 --> 00:28:52,450 והופך ב. 644 00:28:52,450 --> 00:28:55,410 אבל הבעיה היא שברגע שמבצע קו 37, מה 645 00:28:55,410 --> 00:28:58,170 ערך של A ו-B? 646 00:28:58,170 --> 00:28:59,070 אותו הדבר, 1. 647 00:28:59,070 --> 00:29:03,460 בגלל שיש לך דפוק, אם אפשר לומר כך, ששינית ב שווה. 648 00:29:03,460 --> 00:29:06,000 אז ברגע קו 37 הוא להורג, זה נהדר. 649 00:29:06,000 --> 00:29:09,940 כעת יש לך שני עותקים של חלק הפנימי מספר 1 של פונקציה זו. 650 00:29:09,940 --> 00:29:14,720 אז כשאתה אומר בקו 38, מקבל ב, ובכן, אתה סוג של נדפק. 651 00:29:14,720 --> 00:29:17,370 מכיוון שאתה רק הקצאת 1 על 1. 652 00:29:17,370 --> 00:29:20,400 סוג שלך אבד את הערך שאכפת לך. 653 00:29:20,400 --> 00:29:22,910 >> אז בגרסה המקורית של זה, שים לב למה שעשיתי. 654 00:29:22,910 --> 00:29:26,620 במקום זאת נאלצה שורה שלישית של קוד שנראית כמו זה. 655 00:29:26,620 --> 00:29:29,910 אני מצהיר משתנה זמני - tmp הוא שם נפוץ מאוד 656 00:29:29,910 --> 00:29:31,240 למשתנה זמנית. 657 00:29:31,240 --> 00:29:34,280 זה int כי יש לו להשתוות למה שאני רוצה לעשות עותק של. 658 00:29:34,280 --> 00:29:39,720 אני לאחסן עותק של חלק פנימי של tmp. אז ברגע קו 37 בצע, 659 00:29:39,720 --> 00:29:41,390 הערך שלו - 660 00:29:41,390 --> 00:29:42,970 שפיות מהירה לבדוק - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 הערך של b הוא 2. 663 00:29:45,780 --> 00:29:48,470 והערך של tmp הוא גם 1. 664 00:29:48,470 --> 00:29:51,470 אז עכשיו אני מבצע את הקו 38. 665 00:29:51,470 --> 00:29:57,180 אז ברגע קו 38 מבצע, מקבל את הערך של b. 666 00:29:57,180 --> 00:29:58,510 והייתה ב 2. 667 00:29:58,510 --> 00:30:00,500 אז עכשיו הוא 2. 668 00:30:00,500 --> 00:30:03,110 לכן בשלב זה בסיפור, הם 2, b הוא 2, 669 00:30:03,110 --> 00:30:05,130 וtmp הוא 1. 670 00:30:05,130 --> 00:30:09,330 אז עכשיו מבחינה לוגית, אנחנו יכולים רק הערך של tmp פלופ לב. 671 00:30:09,330 --> 00:30:10,690 ואנחנו נעשינו. 672 00:30:10,690 --> 00:30:12,170 >> אז ככה פתר את הבעיה. 673 00:30:12,170 --> 00:30:16,040 למרבה הצער, כאשר אני מפעיל את התכנית בצורה זו, זה לא ממש להחליף 674 00:30:16,040 --> 00:30:17,700 כל ערכים. 675 00:30:17,700 --> 00:30:18,950 אבל שיהיו ברור, למה? 676 00:30:23,420 --> 00:30:26,310 אני תקנתי את הבעיה הלוגית מרק לפני רגע. 677 00:30:26,310 --> 00:30:31,150 אבל שוב, אם אני מפעיל תכנית זו, x ו-y יישארו ללא שינוי עד סוף 678 00:30:31,150 --> 00:30:33,834 הביצוע של התכנית. 679 00:30:33,834 --> 00:30:34,760 [לא ברור] 680 00:30:34,760 --> 00:30:36,030 הדוד י Malan: אז לא חזרתי שום דבר. 681 00:30:36,030 --> 00:30:36,960 אז זה נכון. 682 00:30:36,960 --> 00:30:39,880 אבל מתברר שיש קצת בעיה כאן כי עד כה, 683 00:30:39,880 --> 00:30:42,460 דבר היחיד שהצלחנו לחזור זה דבר אחד. 684 00:30:42,460 --> 00:30:46,540 וזו היא הגבלה של ג תוכל לחזור באמת ערך אחד בלבד, 685 00:30:46,540 --> 00:30:48,970 ובמקרה זה, אני די תקוע כאן 686 00:30:48,970 --> 00:30:51,805 כי אני יכול להחזיר את הערך החדש של X או שאני יכול לחזור 687 00:30:51,805 --> 00:30:53,160 ערך חדש של Y. 688 00:30:53,160 --> 00:30:54,330 אבל אני רוצה גם לחזור. 689 00:30:54,330 --> 00:30:58,010 אז חזר לא פתרון פשוט כאן. 690 00:30:58,010 --> 00:30:59,770 אבל הבעיה מהותית היא למה? 691 00:30:59,770 --> 00:31:03,270 מה אנחנו בעצם להתחלף? 692 00:31:03,270 --> 00:31:04,010 ב. 693 00:31:04,010 --> 00:31:07,670 אבל וb הם עותקים של X ו-Y, מה שאומר שאנחנו פשוט עשינו את כל זה 694 00:31:07,670 --> 00:31:10,080 עובדים - אנחנו פשוט בילינו כשלוש דקות לדבר על ההחלפה 695 00:31:10,080 --> 00:31:11,680 פונקציה וכל שלושת המשתנים הללו. 696 00:31:11,680 --> 00:31:15,090 וזה נהדר, נכון לגמרי בבידוד. 697 00:31:15,090 --> 00:31:20,230 אבל ההיקף של b ורק בשורות אלה כאן. 698 00:31:20,230 --> 00:31:24,130 אז בדיוק כמו ללולאה, אם תכריז שלמה אני בפנים ל 699 00:31:24,130 --> 00:31:27,400 לולאה - באופן דומה, אם אתה מצהיר וb בתוך פונקציה ש 700 00:31:27,400 --> 00:31:30,550 אתה כתבת, שהם בתוך תקפים רק שבפונקציה. 701 00:31:30,550 --> 00:31:35,020 כלומר ברגע שההחלפה נעשית ביצוע ואנחנו הולכים מקו 24 עד 702 00:31:35,020 --> 00:31:38,380 הקו 25, x ו-y לא השתנו בכלל. 703 00:31:38,380 --> 00:31:42,580 אתה פשוט בזבזת המון זמן בחילופי עותקים של משתנים. 704 00:31:42,580 --> 00:31:46,490 >> אז מתברר שהפתרון לזה הוא למעשה אינו ברור. 705 00:31:46,490 --> 00:31:49,210 זה לא ממש מספיק כדי להחזיר ערכים משום שאנו יכולים 706 00:31:49,210 --> 00:31:50,320 להחזיר ערך אחד בלבד. 707 00:31:50,320 --> 00:31:53,370 ואני באמת רוצה להחליף גם x ו-y באותו הזמן. 708 00:31:53,370 --> 00:31:55,020 אז אנחנו הולכים לחזור לזה. 709 00:31:55,020 --> 00:31:58,770 אבל לעת עתה, מבין שהבעיה יסודית נובעת מהעובדה 710 00:31:58,770 --> 00:32:00,660 ושb הם עותקים. 711 00:32:00,660 --> 00:32:03,450 והם בהיקפם. 712 00:32:03,450 --> 00:32:04,980 ובכן, בואו ננסה לפתור את זה בדרך כלשהי. 713 00:32:04,980 --> 00:32:09,200 תן לי לחזור לכאן בעצם לגלול ולפתוח, יניח, גרסה 4 714 00:32:09,200 --> 00:32:11,170 זאת, buggy4. 715 00:32:11,170 --> 00:32:13,230 ומה לגבי זה? 716 00:32:13,230 --> 00:32:16,690 זו בעיה דומה אך פשוטה יותר להסתכל לפני שאנחנו לוקחים בדקירה 717 00:32:16,690 --> 00:32:17,530 לפתור אותה. 718 00:32:17,530 --> 00:32:19,440 תכנית זו נקראת תוספת. 719 00:32:19,440 --> 00:32:24,320 וזה כנראה מאתחל שלם x עד 1 בקו 18. 720 00:32:24,320 --> 00:32:25,950 אז אני טוען x הוא 1. 721 00:32:25,950 --> 00:32:28,020 אז אני טוען הגדלה, נקודה, נקודה, נקודה. 722 00:32:28,020 --> 00:32:29,460 אז אני קורא לתוספת. 723 00:32:29,460 --> 00:32:33,480 אבל אז בקווי 22 ו 23, אני טוען את זה כבר בהפרש קבוע. 724 00:32:33,480 --> 00:32:37,780 אני טוען x הוא עכשיו מה שזה לא, 2 מן הסתם. 725 00:32:37,780 --> 00:32:39,770 >> אבל תכנית זו היא כרכרה. 726 00:32:39,770 --> 00:32:41,020 מה הבעיה? 727 00:32:43,450 --> 00:32:44,418 כן? 728 00:32:44,418 --> 00:32:45,668 [לא ברור] 729 00:32:49,260 --> 00:32:49,850 הדוד י Malan: בדיוק. 730 00:32:49,850 --> 00:32:52,430 אז x הוכרז כמובן בקו 18. 731 00:32:52,430 --> 00:32:54,410 כלומר בתוך סוגריים המסולסלים של העיקרית. 732 00:32:54,410 --> 00:32:58,470 אז התשובה הפשוטה היא ש, טוב, x קיים כאן. 733 00:32:58,470 --> 00:33:01,510 זה לא קיים בקו 32. 734 00:33:01,510 --> 00:33:03,710 אז התכנית הזאת בעצם אפילו לא לקמפל. 735 00:33:03,710 --> 00:33:07,910 המהדר, כשאני מנסה להרכיב את הקוד הזה, הוא הולך לצעוק עליי 736 00:33:07,910 --> 00:33:13,190 על איזה מזהה או משהו דומה לזה לא מוצהר. 737 00:33:13,190 --> 00:33:13,870 למעשה, בואו ננסה. 738 00:33:13,870 --> 00:33:15,235 זה עושה buggy4. 739 00:33:17,780 --> 00:33:18,190 זה מה שיש. 740 00:33:18,190 --> 00:33:22,030 השתמש של x מזהים המוצהר בקו 32. 741 00:33:22,030 --> 00:33:25,700 ובעצם, בואו אהיה יותר מפורש כאן היום כדי שזה מועיל ב 742 00:33:25,700 --> 00:33:27,140 שעתי עבודה ובבית. 743 00:33:27,140 --> 00:33:29,000 שים לב שזה קצת כתוב ולא פרש. 744 00:33:29,000 --> 00:33:31,560 אבל העובדה שיש קלאנג צעקה עלינו ואומר 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, הוא באמת שימושי. 746 00:33:36,970 --> 00:33:41,970 זה אומר שהטעות היא בקו 32 בעמדת הדמות חמש. 747 00:33:41,970 --> 00:33:44,670 אז אחת, שתיים, שלוש, ארבעה, חמש. 748 00:33:44,670 --> 00:33:46,640 זה, למעשה, שבו הבעיה היא. 749 00:33:46,640 --> 00:33:49,710 וגם לזכור בשעתי עבודה ובבית, יש לי מזל כאן. 750 00:33:49,710 --> 00:33:50,740 יש לי טעות אחת. 751 00:33:50,740 --> 00:33:52,660 זה הולך להיות קל יחסית לתיקון. 752 00:33:52,660 --> 00:33:56,220 אבל אם אתה מקבל את כל מסך מלא בהודעות שגיאה מכריעות, שוב, 753 00:33:56,220 --> 00:33:59,240 להבין שאחד התחתון יכול להיות רק סימפטום של 754 00:33:59,240 --> 00:34:00,320 אלה עליונים. 755 00:34:00,320 --> 00:34:03,560 אז תמיד לרדוף אחריך באגים מלמטה למעלה. 756 00:34:03,560 --> 00:34:06,720 מכיוון שיש יכול להיות רק השפעת דייזי שרשרת שמציעה לך 757 00:34:06,720 --> 00:34:09,030 יש דרך לבעיות יותר מאשר אתה באמת כן. 758 00:34:09,030 --> 00:34:14,989 >> אז איך אפשר לתקן את זה אם המטרה שלי היא להגדיל x? 759 00:34:14,989 --> 00:34:15,370 מה זה? 760 00:34:15,370 --> 00:34:15,620 אוקיי. 761 00:34:15,620 --> 00:34:16,679 אז אנחנו יכולים לעשות את x הגלובלי. 762 00:34:16,679 --> 00:34:18,860 בואו ניקח את קיצור הדרך שהזהרתי עליו קודם לכן. 763 00:34:18,860 --> 00:34:20,550 אבל לעזאזל, אנחנו רק צריכים פתרון מהיר. 764 00:34:20,550 --> 00:34:23,949 אז בואו רק תגיד x int עד כאן. 765 00:34:23,949 --> 00:34:25,600 זה הופך את x הגלובלי. 766 00:34:25,600 --> 00:34:28,460 אז עכשיו ראשי יש גישה אליו. 767 00:34:28,460 --> 00:34:31,780 ותוספת יש גישה אליו. 768 00:34:31,780 --> 00:34:33,860 ואז תן לי להמשיך ולעבד את זה עכשיו. 769 00:34:33,860 --> 00:34:36,330 הפוך buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 נראה לקמפל עכשיו. 771 00:34:37,440 --> 00:34:40,949 בואו לרוץ buggy4, ונראה ממש לעבוד. 772 00:34:40,949 --> 00:34:42,780 עכשיו זה אחד מהדברים האלה - 773 00:34:42,780 --> 00:34:45,870 תעשה מה שאני אומר, לא כמוני, כמו שאני עשיתי רק כאן. 774 00:34:45,870 --> 00:34:49,239 כי באופן כללי, התוכניות שלנו הולכות לקבל הרבה יותר מעניין ו 775 00:34:49,239 --> 00:34:50,440 הרבה יותר מזה. 776 00:34:50,440 --> 00:34:53,199 ואם הפתרון שלך לבעיות החיים הוא פשוט אה, לשים את כל 777 00:34:53,199 --> 00:34:57,550 משתנה בחלק העליון של הקובץ שלך, לעשות מהר מאוד תוכניות להגיע 778 00:34:57,550 --> 00:34:59,700 בעתה קשה לניהול. 779 00:34:59,700 --> 00:35:02,050 זה נהיה קשה יותר לחשוב על שמות משתנים חדשים. 780 00:35:02,050 --> 00:35:05,240 זה נהיה קשה יותר להבין מה משתנה עושה מה. 781 00:35:05,240 --> 00:35:08,250 >> וכך באופן כללי, זה לא פתרון טוב. 782 00:35:08,250 --> 00:35:09,780 אז בואו נעשה את זה טוב יותר. 783 00:35:09,780 --> 00:35:11,920 אנחנו לא רוצים להשתמש במשתנה גלובלית כאן. 784 00:35:11,920 --> 00:35:14,050 אני רוצה להגדיל x. 785 00:35:14,050 --> 00:35:16,050 אז ברור שאני יכול - 786 00:35:16,050 --> 00:35:18,450 בסופו של היום, זה סוג של סיפור טיפשי כי אנחנו פשוט עושים את זה. 787 00:35:18,450 --> 00:35:22,050 אבל אם אני לא ידעתי על שהמפעיל, או שאני לא נתתי לי 788 00:35:22,050 --> 00:35:27,700 לשנות אותו בראשי עצמו, איך עוד יכולתי ליישם קן לכאן, זה 789 00:35:27,700 --> 00:35:31,450 זמן לא קובייה אבל כדי להגדיל? 790 00:35:31,450 --> 00:35:32,700 איך אני משנה את זה כאן? 791 00:35:32,700 --> 00:35:33,025 כן. 792 00:35:33,025 --> 00:35:34,275 [לא ברור] 793 00:35:37,430 --> 00:35:38,000 הדוד י Malan: אוקיי, טוב. 794 00:35:38,000 --> 00:35:40,490 אז למה שאני לא אעבור בx? 795 00:35:40,490 --> 00:35:44,390 ואז, במקום להחזיר אותו, למה לא פשוט לעשות תשואת x + 1? 796 00:35:44,390 --> 00:35:46,370 עכשיו, עוד כמה דברים צריכים להשתנות פה. 797 00:35:46,370 --> 00:35:47,530 אני על המסלול הנכון. 798 00:35:47,530 --> 00:35:48,910 מה עוד אני צריך לצבוט? 799 00:35:48,910 --> 00:35:49,470 מישהו אחר. 800 00:35:49,470 --> 00:35:49,882 כן? 801 00:35:49,882 --> 00:35:51,530 [לא ברור] 802 00:35:51,530 --> 00:35:53,520 הדוד י Malan: אני צריך לשנות את סוג ההחזרה של תוספת 803 00:35:53,520 --> 00:35:54,590 כי זה לא לבטל. 804 00:35:54,590 --> 00:35:56,650 חלל פירוש דבר לא הוחזר. 805 00:35:56,650 --> 00:35:57,600 אבל ברור, עכשיו זה. 806 00:35:57,600 --> 00:36:01,280 אז זה צריך לשנות לint להיות עקבי עם מה 807 00:36:01,280 --> 00:36:02,580 בעצם אני חוזר. 808 00:36:02,580 --> 00:36:04,580 >> עכשיו משהו אחר עדיין כרכרה כאן. 809 00:36:04,580 --> 00:36:04,982 כן? 810 00:36:04,982 --> 00:36:06,590 [לא ברור] 811 00:36:06,590 --> 00:36:07,630 הדוד י Malan: אז אני צריך להגדיל x? 812 00:36:07,630 --> 00:36:10,336 [לא ברור] 813 00:36:10,336 --> 00:36:11,880 הדוד י Malan: אה, אז אני צריך לעבור x. 814 00:36:11,880 --> 00:36:13,300 אז אני צריך לעשות את זה כאן. 815 00:36:17,590 --> 00:36:19,690 אז אב הטיפוס, אני צריך לשנות את זה כאן. 816 00:36:19,690 --> 00:36:21,290 אז זה צריך להיות int. 817 00:36:21,290 --> 00:36:22,820 זה צריך להיות - 818 00:36:22,820 --> 00:36:23,670 הממ. 819 00:36:23,670 --> 00:36:24,710 למעשה יש לי באג כאן למטה. 820 00:36:24,710 --> 00:36:25,780 בואו לתקן את זה ראשון. 821 00:36:25,780 --> 00:36:27,990 מה זה צריך להיות למעשה? 822 00:36:27,990 --> 00:36:29,330 אז זה חייב להיות משהו int. 823 00:36:29,330 --> 00:36:30,340 זה יכול להיות x. 824 00:36:30,340 --> 00:36:33,120 אבל בכנות, אם אתה מתחיל לקרוא את כל המשתנים x שלך, זה הולך להגיע 825 00:36:33,120 --> 00:36:35,250 פחות ופחות ברור מי הוא מי. 826 00:36:35,250 --> 00:36:38,210 אז בואו רק באופן שרירותי לבחור יום אמנה שונה עבורי 827 00:36:38,210 --> 00:36:40,220 פונקציות עזר, פונקציות שאני כותב. 828 00:36:40,220 --> 00:36:41,100 אנחנו קוראים לזה. 829 00:36:41,100 --> 00:36:44,500 או שאנחנו יכולים לקרוא לו - בואו נקראים לזה even_number להיות אפילו יותר מפורש. 830 00:36:44,500 --> 00:36:47,610 אז יש לי לחזור מה הוא המספר 1 ועוד. 831 00:36:47,610 --> 00:36:49,720 ועכשיו אני צריך לשנות את דבר אחד כאן ואחד 832 00:36:49,720 --> 00:36:50,700 דבר השני כאן. 833 00:36:50,700 --> 00:36:54,150 מה יש לי לשינוי בקו 21 בפעם הראשונה? 834 00:36:54,150 --> 00:36:55,390 אני צריך להקצות אותו x. 835 00:36:55,390 --> 00:36:57,480 אז אני לא יכול פשוט לקרוא x תוספת. 836 00:36:57,480 --> 00:37:01,000 אני צריך לזכור את התשובה על ידי שינוי הערך של x על 837 00:37:01,000 --> 00:37:02,020 בצד השמאל. 838 00:37:02,020 --> 00:37:04,930 ואף על פי x הוא עכשיו על ימין ועל שמאל, זה בסדר גמור, כי 839 00:37:04,930 --> 00:37:08,370 בצד ימין מקבל להורג ראשון ואז מקבל צנח לשמאל 840 00:37:08,370 --> 00:37:10,240 דבר יד, x במקרה זה. 841 00:37:10,240 --> 00:37:11,900 ואז לבסוף, זה קל לתקן עכשיו. 842 00:37:11,900 --> 00:37:15,080 זה פשוט צריך להתאים את מה שנמצא שם למטה. 843 00:37:15,080 --> 00:37:17,120 מספר int. 844 00:37:17,120 --> 00:37:17,320 >> בסדר. 845 00:37:17,320 --> 00:37:20,290 אז כל חבורה של שינויים לתפקוד ממש טיפשי. 846 00:37:20,290 --> 00:37:24,250 אבל נציג שלנו יותר ויותר דברים שאתה רוצה לעשות. 847 00:37:24,250 --> 00:37:25,490 אז להפוך buggy4. 848 00:37:25,490 --> 00:37:26,485 כבר פשלתי איפשהו. 849 00:37:26,485 --> 00:37:27,520 אוי, אלוהים. 850 00:37:27,520 --> 00:37:29,660 חמש טעויות ב, כמו, תכנית בת שש שורות. 851 00:37:29,660 --> 00:37:36,500 אז מה רע בקו 18, דמות 5? 852 00:37:36,500 --> 00:37:36,970 בסדר. 853 00:37:36,970 --> 00:37:39,330 אז אני צריך להצהיר על זה int. 854 00:37:39,330 --> 00:37:39,630 בסדר. 855 00:37:39,630 --> 00:37:41,790 אז בואו נראה, חבורה שלמה של טעויות אחרות. 856 00:37:41,790 --> 00:37:42,230 אוי אלוהים. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 אבל שוב, בואו פשוט לנקות את המסך - 859 00:37:46,020 --> 00:37:48,660 L בקרה כאן - וקלאנג מחדש ריצה. 860 00:37:48,660 --> 00:37:51,340 אז חמש בעיות שהן למעשה רק אחת. 861 00:37:51,340 --> 00:37:53,500 אז עכשיו בואו תרוצו buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 ואווה. 863 00:37:54,150 --> 00:37:57,434 x כבר מוגדל בצורה נכונה. 864 00:37:57,434 --> 00:37:58,420 >> בסדר. 865 00:37:58,420 --> 00:38:01,700 כל שאלות על איך להגדיל מספרים? 866 00:38:01,700 --> 00:38:02,896 כן? 867 00:38:02,896 --> 00:38:06,864 רמקולים 2: איך זה שאתה פשוט יכול לשנות את x למספר במשתנה 868 00:38:06,864 --> 00:38:08,860 שם ותדע למה אתה מתכוון? 869 00:38:08,860 --> 00:38:09,600 הדוד י Malan: שאלה טובה. 870 00:38:09,600 --> 00:38:13,130 איך זה שאני יכול פשוט לשנות את x למספר ואת התכנית יודעת 871 00:38:13,130 --> 00:38:13,990 מייד? 872 00:38:13,990 --> 00:38:16,120 אז שוב, תחשוב על זה כעל הפשטה זו. 873 00:38:16,120 --> 00:38:20,110 אז אם אני ראשי וקן הוא הדרגתי, בכנות, לא אכפת לי 874 00:38:20,110 --> 00:38:21,540 מה קן קורא iPad שלו. 875 00:38:21,540 --> 00:38:25,350 לא אכפת לי מה שהוא מכנה כל דבר שיש לעשות עם יישומו 876 00:38:25,350 --> 00:38:26,550 בפונקציונליות זו. 877 00:38:26,550 --> 00:38:32,130 אז זה פירוט יישום ש, עיקרי, לא 878 00:38:32,130 --> 00:38:33,010 צריך שיהיה אכפת. 879 00:38:33,010 --> 00:38:37,440 וכך פשוט לשנות אותו בעקביות פנימית של הפונקציה, מספר כאן 880 00:38:37,440 --> 00:38:41,340 ומספר כאן, הוא כל מה שנדרש כל כך הרבה זמן כמו שההידור מחדש. 881 00:38:41,340 --> 00:38:43,820 זה קצת כמו שאם אתה חושב על - רבים מאיתנו, אלה מכם עם הנהג של 882 00:38:43,820 --> 00:38:46,590 רישיונות שכבר מונעים, או אפילו אם אתה כבר עם מכונית - 883 00:38:46,590 --> 00:38:50,710 רובנו אין לי מושג איך עובדת מכונית מתחת למכסת המנוע. 884 00:38:50,710 --> 00:38:54,710 ופשוטו כמשמעו, אם אתה פותח את מכסה מנוע, רובנו - כולל אותי - 885 00:38:54,710 --> 00:38:56,580 לא הולך באמת יודע מה אנחנו מסתכלים. 886 00:38:56,580 --> 00:38:58,850 כמו סוג של אתה עלול להרגיש דברים כאלה עם זה עכשיו. 887 00:38:58,850 --> 00:39:01,380 אבל אנחנו לא באמת צריכים לדאוג איך המכונית עובדת. 888 00:39:01,380 --> 00:39:05,000 אין לנו לשים לב למה כל המוטות ובוכנות והכבלים בתוך של 889 00:39:05,000 --> 00:39:07,700 המכונית עושה למעשה. 890 00:39:07,700 --> 00:39:11,360 >> אז משהו כמו מה שאתם קוראים את הבוכנה לא משנה 891 00:39:11,360 --> 00:39:11,920 כאן במקרה זה. 892 00:39:11,920 --> 00:39:12,490 אותו הרעיון. 893 00:39:12,490 --> 00:39:12,670 כן? 894 00:39:12,670 --> 00:39:13,920 [לא ברור] 895 00:39:25,250 --> 00:39:29,530 הדוד י Malan: אם היו יותר שימושים של רגע xa משתנה לפני, 896 00:39:29,530 --> 00:39:32,220 אתה, המתכנת, הייתי צריכה לשנות אותם בכל מקום. 897 00:39:32,220 --> 00:39:35,230 או שאתה ממש יכול לעשות את הקובץ, תפריט ולאחר מכן חיפוש / החלפה, 898 00:39:35,230 --> 00:39:36,270 משהו כזה. 899 00:39:36,270 --> 00:39:40,110 אבל אתה תצטרך לבצע שינויים אלה בעצמך. 900 00:39:40,110 --> 00:39:41,200 אתה צריך להיות עקבי. 901 00:39:41,200 --> 00:39:42,450 [לא ברור] 902 00:39:47,200 --> 00:39:48,960 הדוד י Malan: סדר מסוים כמו כאן? 903 00:39:48,960 --> 00:39:52,660 אם זה היה int מספר אחר? 904 00:39:52,660 --> 00:39:52,940 כן. 905 00:39:52,940 --> 00:39:56,430 אז על מנת שחשוב כאשר אתה קורא את הפונקציה. 906 00:39:56,430 --> 00:40:00,350 אז אם אני היה קורא תוספת כאן עם משהו פסיק משהו, 907 00:40:00,350 --> 00:40:01,400 יש מיפוי ישיר. 908 00:40:01,400 --> 00:40:04,490 המשתנה הראשון, איך שלא קוראים, הוא עשה עותק של המהדורה הראשונה 909 00:40:04,490 --> 00:40:05,480 ויכוח כאן. 910 00:40:05,480 --> 00:40:07,280 מצטער, זה לא צריך להיות מוסגר. 911 00:40:07,280 --> 00:40:09,300 בשורות השניות הטיעון עם עד השנייה אחת. 912 00:40:09,300 --> 00:40:11,220 >> אז בסדר, כן, עניינים. 913 00:40:11,220 --> 00:40:11,490 בסדר. 914 00:40:11,490 --> 00:40:13,360 מצטער שלקחתי את הדרך ארוכה כדי להגיע לשם. 915 00:40:13,360 --> 00:40:14,610 שאלות אחרות? 916 00:40:16,460 --> 00:40:16,850 בסדר. 917 00:40:16,850 --> 00:40:20,300 אז בואו נראה אם ​​אנחנו לא יכולים לצייר תמונה של מה שקורה בפועל על 918 00:40:20,300 --> 00:40:22,160 כאן מתחת למכסת המנוע, אם אפשר לומר כך. 919 00:40:22,160 --> 00:40:26,310 אז זה הוא מלבן שעשוי לייצג את הזיכרון של המחשב. 920 00:40:26,310 --> 00:40:31,240 אז גם אם אין לך מושג איך עובד זיכרון או איך עובד הזיכרון RAM, לפחות 921 00:40:31,240 --> 00:40:33,590 תניח שיש לך צרורות שלו בימים אלה. 922 00:40:33,590 --> 00:40:34,740 יש לך מגה בייט שלו. 923 00:40:34,740 --> 00:40:35,760 יש לך ג'יגה בייט שלו. 924 00:40:35,760 --> 00:40:40,690 ואנחנו יודעים מאפס שבוע שבתים הם רק מה? 925 00:40:40,690 --> 00:40:41,280 8 סיביים. 926 00:40:41,280 --> 00:40:42,730 בסדר, אז 8 אפסים ואחדים. 927 00:40:42,730 --> 00:40:46,300 אז אם המחשב שלך יש חלטורה של RAM, שתי הופעות של זכרון RAM בימים אלה, יש לך 928 00:40:46,300 --> 00:40:54,450 מליארד או 2 מליארד בתים של זיכרון, או בערך 8000000000 או 16000000000 929 00:40:54,450 --> 00:40:56,560 ביטים, בתוך המחשב שלך. 930 00:40:56,560 --> 00:40:59,710 עכשיו בניגוד לדוגמא וילי הצמרית הקטנה, זה לא חלקיקים מגנטיים 931 00:40:59,710 --> 00:41:00,560 בדרך כלל יותר. 932 00:41:00,560 --> 00:41:04,470 יותר ויותר, במחשבים ניידים בכל המקום, זה כונני מצב מוצק, כונני SSD, כי 933 00:41:04,470 --> 00:41:05,560 פשוט אין לי חלקים נעים. 934 00:41:05,560 --> 00:41:06,710 הכל האלקטרוני. 935 00:41:06,710 --> 00:41:08,070 הכל החשמל המבוסס. 936 00:41:08,070 --> 00:41:12,360 כן, למרות שחושב, של מלבן זה כפשוט מייצג את אחד או שניים 937 00:41:12,360 --> 00:41:13,930 ג'יגה בייט של זיכרון שיש לך. 938 00:41:13,930 --> 00:41:15,500 >> אז זה נתח של זיכרון. 939 00:41:15,500 --> 00:41:20,460 עכשיו העולם של מדעי מחשב יש סוג של גושים של מחיצה כדי 940 00:41:20,460 --> 00:41:22,570 זיכרון כדי לעשות דברים שונים. 941 00:41:22,570 --> 00:41:25,930 כך למשל, אם מדובר בזכרון RAM של המחשב שלך - כפי שהוצע על ידי 942 00:41:25,930 --> 00:41:30,400 מלבן שם - מתברר כי למוסכמות, בחלק העליון של זכרון RAM שלך, ולכן 943 00:41:30,400 --> 00:41:33,170 לדבר, הוא בדרך כלל מה שנקרא קטע טקסט. 944 00:41:33,170 --> 00:41:35,910 אלה הם אפסים והאחדים שיש לך ערך. 945 00:41:35,910 --> 00:41:39,040 לכן, כאשר אנחנו בדקנו מתחת למכסת המנוע במה a.out הוא, כל 946 00:41:39,040 --> 00:41:40,360 את האפסים והאחדים - 947 00:41:40,360 --> 00:41:44,000 כשאתה מפעיל את תכנית, האפסים והאחדים הללו נטענים משלך קשה 948 00:41:44,000 --> 00:41:46,290 כונן למשהו שנקרא הזיכרון RAM. 949 00:41:46,290 --> 00:41:48,950 ובזכרון RAM, הם שמו בראש. 950 00:41:48,950 --> 00:41:50,330 עכשיו בינתיים, יש לך דברים אחרים. 951 00:41:50,330 --> 00:41:53,060 נתונים אותחלו, נתונים שלא אותחל. 952 00:41:53,060 --> 00:41:56,440 אלה שתי אגודות של זיכרון מתייחסות למשתנים הגלובליים, אשר 953 00:41:56,440 --> 00:41:57,530 אתה לא משתמש לעתים קרובות. 954 00:41:57,530 --> 00:42:00,630 אבל לפעמים אם אתה עושה, הם בסוף לשם גם כן. 955 00:42:00,630 --> 00:42:01,620 אז יש כמה דברים אחרים. 956 00:42:01,620 --> 00:42:04,130 משתני סביבה, שאנחנו לא מבלים הרבה זמן על. 957 00:42:04,130 --> 00:42:06,120 אבל אז שני דברים חשובים שיחזרו בכל זה 958 00:42:06,120 --> 00:42:08,130 סמסטר, מחסנית וערימה. 959 00:42:08,130 --> 00:42:12,280 >> אז רוב זכרון המחשב שלך שמורה בעת הפעלת תכנית עבור 960 00:42:12,280 --> 00:42:14,880 משהו שנקרא המחסנית ומשהו שנקרא ערימה. 961 00:42:14,880 --> 00:42:16,940 ואנחנו לא מתכוונים לדבר על הערימה היום, אבל אנחנו 962 00:42:16,940 --> 00:42:18,180 לדבר על הערימה. 963 00:42:18,180 --> 00:42:22,910 והמחסנית נועדה להעלות באוב החזותי של כמו חדר האוכל 964 00:42:22,910 --> 00:42:26,120 מגשי ארוחה בבית מאת'ר, או בכל המקום אתה במקרה, שבו 965 00:42:26,120 --> 00:42:27,810 חדר אוכל צוות לנקות אותם כל יום. 966 00:42:27,810 --> 00:42:30,180 הם עורמים אותם מהקומה למעלה. 967 00:42:30,180 --> 00:42:33,800 וכך גם בזיכרון, אין זה רעיון של לשים משהו על 968 00:42:33,800 --> 00:42:36,740 לערום, לשים משהו במחסנית, לשים משהו במחסנית. 969 00:42:36,740 --> 00:42:38,000 ומה אנחנו מתכוונים בזה? 970 00:42:38,000 --> 00:42:41,430 ובכן, בואו פשוט להתמקד על החצי התחתון של התמונה הזאת, המחשב שלך 971 00:42:41,430 --> 00:42:43,990 זכרון RAM, להציע את הפעולות הבאות. 972 00:42:43,990 --> 00:42:48,300 מתברר כי בעת הפעלת תכנית כמו a.out או שלום, מה 973 00:42:48,300 --> 00:42:49,920 התכנית היא שאתה כתבת, 974 00:42:49,920 --> 00:42:53,030 שוב, האפסים והאחדים הללו נטענים מהכונן הקשיח שלך - שהוא 975 00:42:53,030 --> 00:42:56,190 אחסון ארוך טווח, נשאר שם גם כשאתה מושך את התקע - 976 00:42:56,190 --> 00:42:57,220 נטען לזכרון RAM. 977 00:42:57,220 --> 00:42:59,020 זכרון RAM הוא מהיר יותר מכוננים קשיחים. 978 00:42:59,020 --> 00:43:00,700 הוא קטן יותר מכוננים קשיחים. 979 00:43:00,700 --> 00:43:03,490 אבל זה מקום שבו תוכניות לחיות בזמן שאתה מפעיל אותם. 980 00:43:03,490 --> 00:43:06,380 >> אז תלחץ פעמים על תכנית במקינטוש או PC - שהוא מתמלא מ 981 00:43:06,380 --> 00:43:07,750 כונן קשיח לזכרון RAM. 982 00:43:07,750 --> 00:43:11,760 ברגע שזה טעון לזכרון RAM, את האפסים והאחדים ללכת בראש הדרך, 983 00:43:11,760 --> 00:43:13,130 מה שנקרא קטע טקסט. 984 00:43:13,130 --> 00:43:17,040 אבל אז ברגע שהתכנית שלך בעצם מתחילה לרוץ, העיקרי 985 00:43:17,040 --> 00:43:18,140 פונקציה נקראת. 986 00:43:18,140 --> 00:43:21,070 ועיקרי, כפי שראינו, לעתים קרובות יש משתנים מקומיים. 987 00:43:21,070 --> 00:43:24,560 ויש לה ints ומחרוזות ותווים וכדומה. 988 00:43:24,560 --> 00:43:28,300 אז אם התכנית שלך שאתה כתבת או של התכנית שיש לך 989 00:43:28,300 --> 00:43:33,680 כפול לחץ השתמש כמה משתנים בתוך ראשי, הם בסוף ב 990 00:43:33,680 --> 00:43:37,020 תחתית הערימה של זיכרון שלך, אם אפשר לומר כך. 991 00:43:37,020 --> 00:43:39,160 כעת מוחשי יותר, מה זה בעצם אומר? 992 00:43:39,160 --> 00:43:44,080 זה רק אומר שאם אנחנו הולכים למספר הדברים - 993 00:43:44,080 --> 00:43:49,380 אם אנחנו הולכים למספר הבתים בזיכרון RAM במחשב שלך, תבחין כי 994 00:43:49,380 --> 00:43:51,650 זה יכול להיות מספר אפס בתים. 995 00:43:51,650 --> 00:43:56,130 זה יכול להיות מספר ייט אחד, שתיים, שלוש, ארבעה, חמש, שישה, כל 996 00:43:56,130 --> 00:43:57,290 הדרך עד ירצה - 997 00:43:57,290 --> 00:44:01,520 2000000000 יהיו כל הדרך עד לשם בראש. 998 00:44:01,520 --> 00:44:05,960 אז במילים אחרות, כאשר אנו מדברים על זכרון RAM או זיכרון במונחים של בתים, זה 999 00:44:05,960 --> 00:44:09,680 רק אומר שמישהו החליט מה למספר כל אחד 1000 00:44:09,680 --> 00:44:11,110 הגושים האלה של זיכרון. 1001 00:44:11,110 --> 00:44:16,950 >> לכן, כאשר אתה צריך 32 ביטים לint, או שאתה צריך 8 ביטים לchar, שבי 1002 00:44:16,950 --> 00:44:18,320 הם בסופו של זיכרון? 1003 00:44:18,320 --> 00:44:20,650 ובכן מושגית, הם רק בסוף בתחתית זה 1004 00:44:20,650 --> 00:44:21,780 דבר הזה שנקרא מחסנית. 1005 00:44:21,780 --> 00:44:25,670 אבל מה שמעניין עכשיו הוא כאשר עיקרי קורא לפונקציה. 1006 00:44:25,670 --> 00:44:28,830 תניח שפונקציה בשם foo, רק שם שרירותי. 1007 00:44:28,830 --> 00:44:32,480 מה שקורה הוא עיקרי הוא בתחתית ערימה זו של זיכרון. 1008 00:44:32,480 --> 00:44:35,630 Foo עכשיו הוא לשים על גבי עיקרי בזיכרון. 1009 00:44:35,630 --> 00:44:40,020 אז כל משתנים מקומיים שהפך בסופו של foo סוג של מושגית לעיל 1010 00:44:40,020 --> 00:44:40,770 אלה עיקריים. 1011 00:44:40,770 --> 00:44:46,920 אם foo קורא פונקציה אחרת בשם בר, המשתנים האלה הגיעו לכאן. 1012 00:44:46,920 --> 00:44:49,790 אם בר קורא משהו אחר, כאן, כאן, כאן. 1013 00:44:49,790 --> 00:44:53,900 אז מה שמעניין בהפעלת תכנית הוא שככל שאתה קורא פונקציות, 1014 00:44:53,900 --> 00:44:57,720 כפונקציות אלה לקרוא לפונקציות, והפונקציות האלה לקרוא לפונקציות ו, 1015 00:44:57,720 --> 00:45:00,980 אתה בונה את ערימה זו של פונקציות בזיכרון. 1016 00:45:00,980 --> 00:45:06,740 ורק פעם בתשואות פונקציה אתה מתחיל לקבל זיכרון שיחזור. 1017 00:45:06,740 --> 00:45:11,190 לכן אחת הדרכים הקלות ביותר להפעלה מתוך זיכרון בתכנית מחשב הוא 1018 00:45:11,190 --> 00:45:14,170 לכתוב פונקציות שלא לחזור לעולם. 1019 00:45:14,170 --> 00:45:16,650 >> כך למשל, בואו להפגין באותה המידה עם 1020 00:45:16,650 --> 00:45:18,460 תכנית מכוונת כרכרה. 1021 00:45:18,460 --> 00:45:24,690 תן לי ללכת קדימה ואל # כוללים , int main (void). 1022 00:45:24,690 --> 00:45:31,270 ואני הולך לעשות בזמן (2> 1), שכנראה לא יהיה אי פעם 1023 00:45:31,270 --> 00:45:33,370 שינוי עלינו. 1024 00:45:33,370 --> 00:45:37,720 ותן לי ללכת קדימה עכשיו ולעשות printf. 1025 00:45:37,720 --> 00:45:39,950 למעשה, זה הולך להיות פחות מעניין מבחינה ויזואלית. 1026 00:45:39,950 --> 00:45:40,460 בואו נעשה את זה. 1027 00:45:40,460 --> 00:45:44,840 לint (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 בואו נעשה את הטעות הזאת, אני + +. 1029 00:45:49,740 --> 00:45:51,150 ובואו לא printf כאן. 1030 00:45:51,150 --> 00:45:52,550 בואו להתאמן על מה שאני מטיף. 1031 00:45:52,550 --> 00:45:54,090 בואו שיטה כאן. 1032 00:45:54,090 --> 00:46:00,860 מקהלת החלל, ואנחנו נגיד אני int. 1033 00:46:00,860 --> 00:46:02,295 ואז אני הולך להגיד, printf - 1034 00:46:04,871 --> 00:46:06,790 הו, בואו נעשינו את זה יותר מעניין. 1035 00:46:06,790 --> 00:46:08,350 בואו ממש לא להדפיס כל דבר. 1036 00:46:08,350 --> 00:46:10,530 בואו פשוט נעשה את זה. 1037 00:46:10,530 --> 00:46:11,780 פזמון (אני). 1038 00:46:16,630 --> 00:46:17,000 >> בסדר. 1039 00:46:17,000 --> 00:46:20,040 אז זה עגלה כי למה? 1040 00:46:20,040 --> 00:46:22,850 אני עושה את זה כמו שאני הולך, כי התכנית לא תעשה דבר של ממש 1041 00:46:22,850 --> 00:46:23,420 של עניין. 1042 00:46:23,420 --> 00:46:24,670 אבל זה לא המטרה. 1043 00:46:24,670 --> 00:46:30,440 המטרה היא לכתוב תכנית שתפקידה העיקרי עושה מה, כנראה? 1044 00:46:30,440 --> 00:46:31,370 שיחה עוצמה. 1045 00:46:31,370 --> 00:46:32,600 ובעצם, אנחנו לא צריכים את הלולאה. 1046 00:46:32,600 --> 00:46:36,070 בואו אפילו לפשט זאת רק כדי לא לאבד את הראייה של ממש 1047 00:46:36,070 --> 00:46:37,310 באג בסיסי. 1048 00:46:37,310 --> 00:46:39,200 שיחות עיקריות מקהלה תשיר מקהלה. 1049 00:46:39,200 --> 00:46:41,760 ואז עשיתי משהו טיפשי, והיה לי שיחת מקהלת מקהלה משום שהנחתי 1050 00:46:41,760 --> 00:46:43,550 מישהו אחר היה הולך ליישם אותו אולי. 1051 00:46:43,550 --> 00:46:45,960 ועכשיו זה לא הולך לקמפל עדיין. 1052 00:46:45,960 --> 00:46:48,340 אני צריך לעשות את מה? 1053 00:46:48,340 --> 00:46:49,700 אני צריך את אב טיפוס, לזכור. 1054 00:46:49,700 --> 00:46:55,520 אז אני צריך להיות כאן מקהלת הריק (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> אז עכשיו, אם אני יורד כאן - 1056 00:46:57,470 --> 00:46:59,030 בעצם, בואו להשתמש בחלון הגדול יותר. 1057 00:46:59,030 --> 00:47:01,670 בואו נלך קדימה ולהפוך את המקהלה. 1058 00:47:01,670 --> 00:47:06,000 בואו נלך קדימה ולהפוך את המקהלה. 1059 00:47:06,000 --> 00:47:08,302 שימוש בכרוז לא מזוהה אני. 1060 00:47:08,302 --> 00:47:09,860 אה, זה היה טיפשי. 1061 00:47:09,860 --> 00:47:11,020 אנחנו לא צריכים את הוויכוח. 1062 00:47:11,020 --> 00:47:13,680 בואו פשוט נעשה את זה. 1063 00:47:13,680 --> 00:47:14,550 חבל שלא התחיל בדרך זו. 1064 00:47:14,550 --> 00:47:16,160 זה היה יכול להיות תכנית הרבה יותר קלה לכתוב. 1065 00:47:16,160 --> 00:47:20,100 אז יש. 1066 00:47:20,100 --> 00:47:23,870 עכשיו בואו ניגשנו לחלון מסופי, קלאנג מחדש ריצה. 1067 00:47:23,870 --> 00:47:26,900 והנה זה בא. 1068 00:47:26,900 --> 00:47:28,020 זה היה ממש מהר. 1069 00:47:28,020 --> 00:47:30,690 מה בעצם פשוט אבל קרה? 1070 00:47:30,690 --> 00:47:33,430 ובכן, עכשיו אני אוסיף את קו ההדפסה, כך שאנו יכולים לראות. 1071 00:47:33,430 --> 00:47:41,330 אז הרשה לי לומר printf, תניח, אני כאן. 1072 00:47:41,330 --> 00:47:43,470 אוקיי, לא משתנה, אנחנו נשאיר את זה ככה. 1073 00:47:43,470 --> 00:47:44,860 תן לי להפעיל מחדש לעשות. 1074 00:47:44,860 --> 00:47:47,940 תן לי פזמון חוזר ריצה. 1075 00:47:47,940 --> 00:47:51,235 ותבואו. 1076 00:47:53,880 --> 00:47:55,130 תמשיך. 1077 00:47:57,630 --> 00:47:59,750 במאמר מוסגר, מדוע הוא עדיין לא התרסק? 1078 00:47:59,750 --> 00:48:02,050 אשמת הפילוח קרתה לפני סופר מהיר. 1079 00:48:02,050 --> 00:48:04,250 [לא ברור] 1080 00:48:04,250 --> 00:48:04,830 הדוד י Malan: בדיוק. 1081 00:48:04,830 --> 00:48:06,350 אז זה לוקח זמן כדי להדפיס. 1082 00:48:06,350 --> 00:48:08,370 זה פשוט לוקח יותר עבודה על החלק של המחשב. 1083 00:48:08,370 --> 00:48:09,550 וזה מה שיש. 1084 00:48:09,550 --> 00:48:10,620 אשמת פילוח. 1085 00:48:10,620 --> 00:48:12,140 >> אז שם לב עד כמה תוכניות לרוץ מהר. 1086 00:48:12,140 --> 00:48:14,110 אם אתם לא מדפיסים כל דבר, סופר מהיר. 1087 00:48:14,110 --> 00:48:18,100 אבל יש לנו עדיין אשמת פילוח זה בגלל מה שקורה? 1088 00:48:18,100 --> 00:48:21,310 ובכן, אם אתה חושב על איך הזיכרון של המחשב שלך הוא לפריסתו, זה 1089 00:48:21,310 --> 00:48:22,890 קורה להיות ראשי. 1090 00:48:22,890 --> 00:48:23,800 אבל כאן - 1091 00:48:23,800 --> 00:48:28,670 בואו פשוט נקרא הפזמון הזה, ובואו נקראים לפזמון הזה. 1092 00:48:28,670 --> 00:48:33,420 ועכשיו אם אני עושה את האסתטיקה שלי נכון, זה היה רק ​​זה שאומר מקהלה, 1093 00:48:33,420 --> 00:48:38,060 מקהלה, מקהלה, מקהלה, מקהלה, מקהלה, מקהלת, עד זרא. 1094 00:48:38,060 --> 00:48:39,920 וסופו של דבר, מה יקרה? 1095 00:48:39,920 --> 00:48:46,690 אם התמונה הגדולה, פשוטו כמשמעו, היא זו, מה בדיוק קורית רעיוני? 1096 00:48:46,690 --> 00:48:48,320 את צפות ערימת הערימה. 1097 00:48:48,320 --> 00:48:52,400 או גרוע מכך, אתה פשוט מוצף הכל, כולל קטע הטקסט, שהוא 1098 00:48:52,400 --> 00:48:54,530 את האפסים והאחדים שמייצגים את התכנית שלך. 1099 00:48:54,530 --> 00:48:56,690 בקיצור, זה פשוט סופר, סופר רע. 1100 00:48:56,690 --> 00:48:56,860 נכון? 1101 00:48:56,860 --> 00:48:58,620 התכנית שלך יצאה מכלל שליטה. 1102 00:48:58,620 --> 00:49:02,840 אתה משתמש בדרך יותר זיכרון ממה שהתכוונת והכל בגלל טיפשה 1103 00:49:02,840 --> 00:49:03,920 טעות, במקרה זה. 1104 00:49:03,920 --> 00:49:08,160 או במקרה הזה, פונקציה מאוד נעשה במכוון מכנה עצמו. 1105 00:49:08,160 --> 00:49:09,210 עכשיו זה לא כל כך נורא. 1106 00:49:09,210 --> 00:49:12,540 פונקציות קוראות לעצמם דווקא יש לו כוח גדול 1107 00:49:12,540 --> 00:49:13,700 כשאתה משתמש בו בצורה נכונה. 1108 00:49:13,700 --> 00:49:15,650 אני לא השתמשתי בו בצורה נכונה כאן. 1109 00:49:15,650 --> 00:49:16,940 >> אז זה לא כל כך נורא. 1110 00:49:16,940 --> 00:49:20,620 אבל העובדה שאני לא באמת אפסיק לקרוא לעצמי היא יסוד 1111 00:49:20,620 --> 00:49:23,050 חולשה כאן של תכנית זו. 1112 00:49:23,050 --> 00:49:25,090 אז לאן אנחנו הולכים עם כל זה? 1113 00:49:25,090 --> 00:49:26,230 ובכן, מה באמת קורה? 1114 00:49:26,230 --> 00:49:30,010 כשאני קורא את פונקצית תוספת, כמו שאנחנו עושים בדוגמות הללו, 1115 00:49:30,010 --> 00:49:33,290 יש לי ערך כמו 1 שאני עובר פנימה 1116 00:49:33,290 --> 00:49:35,820 אני עובר בעותק של מספר אחד. 1117 00:49:35,820 --> 00:49:37,080 אז הבא שקורה. 1118 00:49:37,080 --> 00:49:40,390 אז בואו נלך לדוגמא תוספת. 1119 00:49:40,390 --> 00:49:44,230 והבחור הזה, ממש כאן. 1120 00:49:44,230 --> 00:49:46,800 אז הנה מה שבאמת קורה. 1121 00:49:46,800 --> 00:49:50,770 כשהתקשרתי תוספת, ואני עובר בx, ציורי מה 1122 00:49:50,770 --> 00:49:53,660 קורה כאן הוא זה - 1123 00:49:53,660 --> 00:50:00,240 אם יש לי ערך של 1 נשמר כאן, ואני באמת קורא לתוספת, אשר 1124 00:50:00,240 --> 00:50:02,680 עכשיו נקרא מקהלה - 1125 00:50:02,680 --> 00:50:04,010 כן, זה זורק אותי מכאן. 1126 00:50:04,010 --> 00:50:06,750 אז בואו נקראים לתוספת זו. 1127 00:50:06,750 --> 00:50:09,420 ואנחנו לא יודעים מה הפונקציה הבאה זה הולך להיות. 1128 00:50:09,420 --> 00:50:14,270 אז מה בעצם קורה כאן הוא אי שם בעיקרי, יש לי נתח של 1129 00:50:14,270 --> 00:50:16,670 זיכרון, שאחסון המספר 1. 1130 00:50:16,670 --> 00:50:19,730 כאשר אני קורא את תוספת, אני משתמש בנתח נוסף של זיכרון, אבל עכשיו אני 1131 00:50:19,730 --> 00:50:20,840 יש עותק של 1. 1132 00:50:20,840 --> 00:50:25,480 כשאני להגדיל את הערך, זה הופך להיות 2 - כתוב בצורה איומה 1133 00:50:25,480 --> 00:50:26,420 מסך כאן. 1134 00:50:26,420 --> 00:50:30,550 אבל אז, מה יקרה ברגע שחוזר תוספת? 1135 00:50:30,550 --> 00:50:34,610 זיכרון זה פשוט מקבל להחזיר למערכת ההפעלה, מה שאומר שכל 1136 00:50:34,610 --> 00:50:37,470 עשית שום דבר מועיל. 1137 00:50:37,470 --> 00:50:43,460 האחד שהיה כלול במקור בשינה העיקרית הוא עדיין שם באמת. 1138 00:50:43,460 --> 00:50:44,650 >> אז לאן אנחנו הולכים עם זה? 1139 00:50:44,650 --> 00:50:49,400 ובכן, מתברר כי בזיכרון יש לך את זה, כדי לגבות רצף 1140 00:50:49,400 --> 00:50:50,940 בתים שאתה יכול לשים דברים פנימה 1141 00:50:50,940 --> 00:50:53,760 ומתברר שכבר ראו משהו שכרוך בהצבה 1142 00:50:53,760 --> 00:50:55,100 דברי גב אל גב אל הגב אל גב. 1143 00:50:55,100 --> 00:51:00,170 מה היא מחרוזת, המבוססת על שבוע אחד ועכשיו שבועות? 1144 00:51:00,170 --> 00:51:01,840 אז זה רק אוסף של תווים. 1145 00:51:01,840 --> 00:51:05,290 כך מתברר, בדיוק כפי שאתה יכול לשים את המספרים בזיכרון, באופן דומה אתה יכול 1146 00:51:05,290 --> 00:51:06,900 לשים את התווים בזיכרון. 1147 00:51:06,900 --> 00:51:09,810 וברגע שאנחנו מתחילים לשים תווים בזכרון גב אל גב אל גב אל 1148 00:51:09,810 --> 00:51:12,800 חזרה, מתברר ששימוש הפשוט ביותר של דברים כמו ללולאה או 1149 00:51:12,800 --> 00:51:14,510 לולאה בזמן, אנחנו יכולים לחזר - 1150 00:51:14,510 --> 00:51:17,130 משמאל לימין על התווים במחרוזת - 1151 00:51:17,130 --> 00:51:20,720 ולהתחיל לעסות אותם לדמויות שונות לגמרי. 1152 00:51:20,720 --> 00:51:25,550 יכול להיות ב-B יכול להיות C. אז שסופו של דבר, אנחנו יכולים לקחת 1153 00:51:25,550 --> 00:51:28,830 המשפט באנגלית שממש הגיונית ולהמיר כל אחד מאלה 1154 00:51:28,830 --> 00:51:32,440 מכתבים אחד בכל פעם על ידי הליכה דרך הזיכרון של המחשב שלנו נותרו 1155 00:51:32,440 --> 00:51:34,300 זכות למעשה להצפין. 1156 00:51:34,300 --> 00:51:36,590 >> אז בואו לקחת ההפסקה של חמש הדקות שלנו כאן, וכשנחזור, אהיה 1157 00:51:36,590 --> 00:51:39,060 להתחיל את התהליך הזה של ערבול מידע. 1158 00:51:41,640 --> 00:51:43,180 >> בסדר. 1159 00:51:43,180 --> 00:51:48,440 אז לפני שאנחנו צוללים לחלק האנוסים והדברים האלה נקראים מערכים, תן לי 1160 00:51:48,440 --> 00:51:51,610 להשהות לשאלות כי אני מרגיש שאני באמת סוג של מבולבל חלק 1161 00:51:51,610 --> 00:51:52,230 לנושאים אלו. 1162 00:51:52,230 --> 00:51:53,940 אז בואו נתקן עכשיו אם אנחנו יכולים. 1163 00:51:53,940 --> 00:51:56,480 אז אנחנו פשוט דברנו על ערכים לחזור. 1164 00:51:56,480 --> 00:51:58,630 דברנו על טיעונים. 1165 00:51:58,630 --> 00:52:02,330 ודברנו על הרעיון הזה, שאנחנו נחזור לשבועות 1166 00:52:02,330 --> 00:52:07,140 לבוא, של צפייה בזיכרון כחבורה שלמה של מוערם אלה 1167 00:52:07,140 --> 00:52:08,540 מגשים, אם אפשר לומר כך. 1168 00:52:08,540 --> 00:52:13,460 מלמטה למעלה, כך שכל מגש שמקבל לשים על הערימה מייצג 1169 00:52:13,460 --> 00:52:15,160 פונקציה הנקראת כיום. 1170 00:52:17,970 --> 00:52:20,300 יש שאלות? 1171 00:52:20,300 --> 00:52:22,890 אז מה דעתך - תן לי לנסות לשאול את השאלה. 1172 00:52:22,890 --> 00:52:25,520 אני שומר מקלקל את זה, אבל עכשיו - זהו כאלה כבר ראה את כל פניו של הילד. 1173 00:52:25,520 --> 00:52:27,020 אז אנחנו נחזור לזה. 1174 00:52:27,020 --> 00:52:29,700 >> אז הרשה לי לשאול שאלה כאן. 1175 00:52:29,700 --> 00:52:34,810 בואו תפשטו אותי בחזרה זה למה שהוא היה לפני כמה ש הקודם שלנו & A. 1176 00:52:34,810 --> 00:52:41,730 והעובדה שיש תוספת סוגריים פתוחים, מספר int, נסגרה 1177 00:52:41,730 --> 00:52:42,260 סוגריים. 1178 00:52:42,260 --> 00:52:46,370 מה מספר int מייצג? 1179 00:52:46,370 --> 00:52:47,250 [לא ברור] 1180 00:52:47,250 --> 00:52:47,870 הדוד י Malan: ויכוח. 1181 00:52:47,870 --> 00:52:50,732 אוקיי, אבל מה ויכוח? 1182 00:52:50,732 --> 00:52:51,620 [לא ברור] 1183 00:52:51,620 --> 00:52:52,500 הדוד י Malan: הסליחה, מה זה? 1184 00:52:52,500 --> 00:52:53,150 רמקולים 3: משהו שאתה עובר פנימה 1185 00:52:53,150 --> 00:52:53,570 הדוד י Malan: אוקיי. 1186 00:52:53,570 --> 00:52:54,780 אז משהו שאתה עובר פנימה 1187 00:52:54,780 --> 00:52:56,560 ואופן כללי יותר, זה רק הקלט. 1188 00:52:56,560 --> 00:52:59,860 אם אתה כותב את פונקציה ומטרה של אותו לתפקד בחיים הוא לעשות 1189 00:52:59,860 --> 00:53:03,290 משהו קצת שונה בכל פעם שאתה משתמש בו, אז הדרך היחידה עבור 1190 00:53:03,290 --> 00:53:07,710 כדי שזה יקרה באמת היה נראה לספק לו הזנה, כך שהוא 1191 00:53:07,710 --> 00:53:10,180 יכול לעשות משהו אחר עם שקלט בכל פעם. 1192 00:53:10,180 --> 00:53:13,590 >> אז אתה צריך לציין שני דברים כאשר הפונקציה לוקחת תשומות. 1193 00:53:13,590 --> 00:53:17,240 אתה צריך לציין את השם שאתה רוצה לתת לזה קלט, רק לשם 1194 00:53:17,240 --> 00:53:20,790 הנוחות שלך, כך שאתה יכול להתייחס אליו בפונקציה ש 1195 00:53:20,790 --> 00:53:23,610 את עצמך כותב, כפי שעשיתי כאן בקו 32. 1196 00:53:23,610 --> 00:53:27,840 אבל אתה גם צריך לציין את הסוג שלו, כי C היא שפת תכנות 1197 00:53:27,840 --> 00:53:28,840 זה פשוט דורש 1198 00:53:28,840 --> 00:53:31,810 שאם אתה רוצה משתנה, יש לך לומר למחשב מה 1199 00:53:31,810 --> 00:53:32,790 הקלידו נתונים זה, 1200 00:53:32,790 --> 00:53:35,540 בחלק גדול, כך שהוא יודע כמה ביטים ל 1201 00:53:35,540 --> 00:53:37,230 להקצות לאותו משתנה. 1202 00:53:37,230 --> 00:53:38,600 כי זה יכול להיות 6 - 1203 00:53:38,600 --> 00:53:39,990 מצטער, זה לא יהיה שש. 1204 00:53:39,990 --> 00:53:41,050 זה יכול להיות 16. 1205 00:53:41,050 --> 00:53:41,630 זה יכול להיות 8. 1206 00:53:41,630 --> 00:53:44,410 זה יכול להיות 32, אפילו 64. 1207 00:53:44,410 --> 00:53:45,820 אבל המחשב צריך לדעת. 1208 00:53:45,820 --> 00:53:49,110 עכשיו int בצד השמאלי מייצג את מה, לעומת זאת? 1209 00:53:52,825 --> 00:53:53,780 [לא ברור] 1210 00:53:53,780 --> 00:53:54,570 הדוד י Malan: מה זה? 1211 00:53:54,570 --> 00:53:55,390 [לא ברור] 1212 00:53:55,390 --> 00:53:57,920 דוד י Malan: הסוג של הפונקציה, ולייתר דיוק, 1213 00:53:57,920 --> 00:53:59,755 סוג הפלט שלה. 1214 00:53:59,755 --> 00:54:00,220 נכון. 1215 00:54:00,220 --> 00:54:04,220 אז אילו דבר בסוגריים מייצג את הקלט שלה, אם בכלל, 1216 00:54:04,220 --> 00:54:06,640 דבר לשמאל מייצג את התפוקה שלה. 1217 00:54:06,640 --> 00:54:10,560 ובמקרה הזה, כנראה תוספת מחזירה int. 1218 00:54:10,560 --> 00:54:14,590 וכך int הוא סוג ההחזרה של פונקציה זו. 1219 00:54:14,590 --> 00:54:16,090 >> מה זה אומר לחזור? 1220 00:54:16,090 --> 00:54:19,810 פשוטו כמשמעו, אתה משתמש במילת מפתח שיבה. 1221 00:54:19,810 --> 00:54:24,640 ואז, אם מה שאתה חוזר לימין של מילת המפתח הוא 1222 00:54:24,640 --> 00:54:28,340 מספר שלם, אז זה אכן עולה בקנה אחד עם מה שהבטחנו. 1223 00:54:28,340 --> 00:54:31,110 אתה לא יכול לעשות משהו כזה - 1224 00:54:31,110 --> 00:54:32,280 שלום, עולם - 1225 00:54:32,280 --> 00:54:33,500 כי זה מחרוזת. 1226 00:54:33,500 --> 00:54:35,440 ברור שזה אינו מספר שלם. 1227 00:54:35,440 --> 00:54:40,450 אז בקיצור, הניטל הוא באמת עלינו, המתכנת, להיות ספציפית כמו 1228 00:54:40,450 --> 00:54:44,730 למה שאנחנו חוזרים ואז באמת ללכת על החזרתו. 1229 00:54:44,730 --> 00:54:49,030 ולאחר מכן לעשות קצת יותר ברור ההקשר - 1230 00:54:49,030 --> 00:54:50,080 הנה הוא שוב. 1231 00:54:50,080 --> 00:54:51,060 ההקשר - 1232 00:54:51,060 --> 00:54:52,830 הפתעה גדולה מגיעה ברגע. 1233 00:54:52,830 --> 00:54:57,720 ההקשר כאן עכשיו הוא שהזיכרון של המחשב שלך הוא, שוב, 1234 00:54:57,720 --> 00:54:59,070 ג'יגה, 2 ג'יגה, לא משנה מה. 1235 00:54:59,070 --> 00:54:59,630 אולי זה יותר. 1236 00:54:59,630 --> 00:55:00,540 אולי זה פחות. 1237 00:55:00,540 --> 00:55:03,750 אבל מחשב רואה אותו כבעל מקטעים שונים. 1238 00:55:03,750 --> 00:55:04,860 משהו הולך שם למטה. 1239 00:55:04,860 --> 00:55:06,020 משהו אחר הולך שם למעלה. 1240 00:55:06,020 --> 00:55:07,540 חומר אחר הולך באמצע. 1241 00:55:07,540 --> 00:55:09,300 והיום, אנחנו רק מתחילים לספר את הסיפור הזה. 1242 00:55:09,300 --> 00:55:11,130 >> אבל אנחנו נחזור לזמן על זה. 1243 00:55:11,130 --> 00:55:15,000 לעת עתה, פיסת הזיכרון היחידה שבאמת אכפת לי היא קטע הטקסט 1244 00:55:15,000 --> 00:55:17,160 משום שרק מייצג את האפסים והאחדים 1245 00:55:17,160 --> 00:55:18,460 שיש outputted קלאנג. 1246 00:55:18,460 --> 00:55:21,570 אז כשאתה מפעיל את פקודה במקלדת כמו a.out, או שכפול 1247 00:55:21,570 --> 00:55:25,350 לחץ על סמל ב-Mac OS או Windows, התכנית שלך היא טעונה משלך קשה 1248 00:55:25,350 --> 00:55:26,930 נוסע לזכרון RAM. 1249 00:55:26,930 --> 00:55:30,850 ומטיל אותה בחלק העליון של זכרון RAM של המחשב שלך, אם אפשר לומר כך. 1250 00:55:30,850 --> 00:55:35,470 עכשיו בינתיים, כפי שהתכנית שלך מתחילה לרוץ ועיקרי מקבל נקרא ב 1251 00:55:35,470 --> 00:55:39,240 תכנית שכתבת או התכנית של Microsoft או Apple כתב, כולה 1252 00:55:39,240 --> 00:55:42,930 משתנים מקומיים בסופו שם למטה בחלק התחתון של זכרון המחשב שלך. 1253 00:55:42,930 --> 00:55:46,490 אבל אם קורא עיקרי פונקציה אחרת שעצמו יש משתנים או 1254 00:55:46,490 --> 00:55:48,340 טענות, הם בסופו מעליו. 1255 00:55:48,340 --> 00:55:50,670 ואם הפונקציה שקוראה משהו, הם בסופו מעליו, 1256 00:55:50,670 --> 00:55:51,840 מעליו, מעליו. 1257 00:55:51,840 --> 00:55:56,100 ורק פעם אחת פונקציה נעשתה ביצוע עושה את ערימת המגשים, כך 1258 00:55:56,100 --> 00:55:58,320 לדבר, תתחיל להיות נמוך יותר ויותר. 1259 00:55:58,320 --> 00:56:03,370 וזה מה שאז, בקליפת האגוז, מסביר, מדוע כאשר אתה קורא קובייה - 1260 00:56:03,370 --> 00:56:04,660 או שאתה קורא לתוספת - 1261 00:56:04,660 --> 00:56:06,490 אתה עובר בעותק של הערך. 1262 00:56:06,490 --> 00:56:09,840 ומה זה אומר ציורי הוא שאתה ממש אתה כותב 1263 00:56:09,840 --> 00:56:14,540 מספר 1 בחלק אחר של זיכרון, שינוי כי 1 ל 2, במקרה של 1264 00:56:14,540 --> 00:56:15,360 תוספת - 1265 00:56:15,360 --> 00:56:17,450 או 8, במקרה של קובייה - 1266 00:56:17,450 --> 00:56:21,450 ואז לזרוק את זיכרון זה בהקדם תוספת או הקובייה 1267 00:56:21,450 --> 00:56:23,410 חוזר פונקציות. 1268 00:56:23,410 --> 00:56:24,267 >> שאלה. 1269 00:56:24,267 --> 00:56:25,517 [לא ברור] 1270 00:56:28,090 --> 00:56:29,970 הדוד י Malan: איפה - משתנים הגלובליים מאוחסנים במה 1271 00:56:29,970 --> 00:56:32,960 קרא כרגע את הנתונים אותחלו או נתונים מאותחלים. 1272 00:56:32,960 --> 00:56:35,900 ההבדל הוא, אם יש לך משתנה גלובלי, ואתה מקצה אותו 1273 00:56:35,900 --> 00:56:39,530 מייד ערך עם סימן השוויון, זה בסופו בראש שם. 1274 00:56:39,530 --> 00:56:43,390 ואם אתה רק אומר x פסיק int ללא ערך, זה בסופו מעט 1275 00:56:43,390 --> 00:56:46,670 נמוך יותר בזכרון RAM, פשוט על ידי ועידה. 1276 00:56:46,670 --> 00:56:49,308 שאלות אחרות. 1277 00:56:49,308 --> 00:56:49,750 בסדר. 1278 00:56:49,750 --> 00:56:53,040 >> אז התמונה הזאת תחזור כפי שאנו מקבלים יותר חזקים ממה שאנחנו יכולים לעשות 1279 00:56:53,040 --> 00:56:53,830 עם המחשב. 1280 00:56:53,830 --> 00:56:58,790 אבל לעת עתה, בואו יש מבוא קצר לקריפטוגרפיה, סוג מסוים של 1281 00:56:58,790 --> 00:57:01,910 הצפנה שאינה פותר את כל בעיות העולם, אבל אין לפתור 1282 00:57:01,910 --> 00:57:02,480 כמה מהם. 1283 00:57:02,480 --> 00:57:06,090 במקרה זה לכאן, יש לנו משהו שנקרא הצפנה במפתח סודית. 1284 00:57:06,090 --> 00:57:10,430 והצפנה במפתח סודי, כפי שהשם מרמז, נובעת ביטחונה 1285 00:57:10,430 --> 00:57:11,330 מסוד. 1286 00:57:11,330 --> 00:57:14,720 כך למשל, אם אתה בחזרה בבית הספר יסודי ואתה עובר 1287 00:57:14,720 --> 00:57:18,040 מכתב קטן סוד אהבה לילד או הילדה את מוחץ על - אם אתה 1288 00:57:18,040 --> 00:57:20,820 רציתי להעביר את זה דרך הקהל, סביר להניח שלא היית כותב 1289 00:57:20,820 --> 00:57:24,120 שטר כזה באנגלית או כל השפה האם שלך הוא, אלא אתם 1290 00:57:24,120 --> 00:57:25,800 אולי להצפין אותו. 1291 00:57:25,800 --> 00:57:27,820 או שאולי פשוט לשלוח להם הודעת טקסט בימים אלה. 1292 00:57:27,820 --> 00:57:30,310 אבל אולי בעצם אתה מעביר להם פתק בכל הכיתה. 1293 00:57:30,310 --> 00:57:33,820 וכדי לעשות זאת היטב, באופן כזה שהחברים שלך והמורה 1294 00:57:33,820 --> 00:57:36,820 לא יודע מה שאתה כותב, אתה יכול לבוא עם פשוט למדי 1295 00:57:36,820 --> 00:57:37,800 אלגוריתם - 1296 00:57:37,800 --> 00:57:39,290 צעיר למרות שאתה יכול להיות - 1297 00:57:39,290 --> 00:57:40,780 רק כדי לטרוף את המילים. 1298 00:57:40,780 --> 00:57:44,390 אז במקום לכתוב, אתה יכול לכתוב ב 'במקום B, אתה יכול לכתוב 1299 00:57:44,390 --> 00:57:46,670 ג במקום C, שאפשר לכתוב D, וכן הלאה. 1300 00:57:46,670 --> 00:57:50,020 או שאתה יכול לבוא עם תרגום מתוחכם יותר של אותיות 1301 00:57:50,020 --> 00:57:51,300 לאותיות שונות. 1302 00:57:51,300 --> 00:57:55,440 אבל המלכוד הוא ילד או ילדה למי אתה שולח את המכתב הזה צריך 1303 00:57:55,440 --> 00:57:56,850 יודע משהו. 1304 00:57:56,850 --> 00:57:59,620 וזה מה ש, ברור? 1305 00:57:59,620 --> 00:58:01,400 כאילו, מה הסוד שלך. 1306 00:58:01,400 --> 00:58:04,620 כאילו, על מה הוא מיפוי שבין וכארוחת בוקר וCs וDs? 1307 00:58:04,620 --> 00:58:08,780 האם זה רק מוסיף אחד, כביכול, לכל אחד מהמכתבים ללכת מ 1308 00:58:08,780 --> 00:58:09,730 A ל-B, B ל-C? 1309 00:58:09,730 --> 00:58:11,350 האם זה מורכב יותר מזה? 1310 00:58:11,350 --> 00:58:16,450 אז אתה ומושא אהבתך צריך להיות מידע הסודי הזה. 1311 00:58:16,450 --> 00:58:18,170 אבל יש סוג של מלכוד-22 כאן. 1312 00:58:18,170 --> 00:58:20,760 אם זו הפעם הראשונה שאתה שולח מכתב אהבה זו דרך 1313 00:58:20,760 --> 00:58:25,590 כיתה, איך נער או הנערה שהולך לדעת מה הסוד גם הוא? 1314 00:58:25,590 --> 00:58:28,450 אז סוד מפתח אנוסים לא פותרים את כל בעיות העולם. 1315 00:58:28,450 --> 00:58:30,490 ויש בעצם מערכת יחסים שאנחנו נחזור לכיוון 1316 00:58:30,490 --> 00:58:31,370 סופו של הסמסטר. 1317 00:58:31,370 --> 00:58:35,970 >> בדומה לכך, אף אחד מאתנו יש כנראה אי פעם שלח - 1318 00:58:35,970 --> 00:58:39,453 באופן דומה, רובנו לא מכירים מישהו שעובד, למשל, ב 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 ובכל זאת, רבים מאיתנו כנראה קנו את הדברים ב-Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 ולמד אותנו להניח כי אלה מסחר אלקטרוני 1322 00:58:45,670 --> 00:58:47,060 עסקות מאובטחות. 1323 00:58:47,060 --> 00:58:47,210 נכון? 1324 00:58:47,210 --> 00:58:49,310 כתובת האתר כנראה אומרת https. 1325 00:58:49,310 --> 00:58:51,590 יש אולי סמל של מנעול קטן וטיפשי במקום. 1326 00:58:51,590 --> 00:58:54,680 יש סוג כלשהו של הצפנת אבטחת פרטי כרטיס האשראי שלך 1327 00:58:54,680 --> 00:58:56,980 בינך וAmazon.com. 1328 00:58:56,980 --> 00:59:00,410 ועדיין, אם קריפטוגרפיה כרוכה לדעת איזה סוד, ובכל זאת אני לא 1329 00:59:00,410 --> 00:59:03,330 מכיר מישהו באמזון, ואני בהחלט לא סדרתי כל סוג של 1330 00:59:03,330 --> 00:59:07,350 סוד עם מישהו באמזון, איך המחשב שלי או הדפדפן שלי עושה את זה? 1331 00:59:07,350 --> 00:59:10,100 ובכן, מסתבר שיש סוגים אחרים של הצפנה לגמרי כי לפתור 1332 00:59:10,100 --> 00:59:10,740 שהבעיה. 1333 00:59:10,740 --> 00:59:13,610 אבל להיום, אנו נתמקד באחד פשוט, שבו אתה יכול לארגן ב 1334 00:59:13,610 --> 00:59:18,480 להתקדם ליודע איזה סוד, כמו 1 פלוס או מיפוי בין וכארוחת בוקר. 1335 00:59:18,480 --> 00:59:20,710 >> והתהליך של הצפנה בדרך כלל כרוך זה. 1336 00:59:20,710 --> 00:59:23,550 יש לך קצת טקסט רגיל, מתואר כאן בצד שמאל. 1337 00:59:23,550 --> 00:59:26,260 אתה מפעיל את זה דרך איזה אלגוריתם או הליך 1338 00:59:26,260 --> 00:59:27,670 להצפנתו. 1339 00:59:27,670 --> 00:59:31,390 אולי זה רק הופך B, B יהפוך ג ואז אתה בסופו של דבר עם 1340 00:59:31,390 --> 00:59:32,260 צופן טקסט. 1341 00:59:32,260 --> 00:59:36,450 בינתיים, לאחר שהמושא אהבתך מקבל את הפתק הסודי, הוא או היא צריכה אז 1342 00:59:36,450 --> 00:59:39,950 לפענח אותו על ידי ההיפוך בדרך כלל אלגוריתם שכדי לקבל 1343 00:59:39,950 --> 00:59:41,640 לגבות טקסט הרגיל. 1344 00:59:41,640 --> 00:59:43,860 עכשיו יש גלגולים פיסיים של זה. 1345 00:59:43,860 --> 00:59:46,720 לדוגמה, זה טבעת מפענח סוד קטנה. 1346 00:59:46,720 --> 00:59:50,060 וזו היא טבעת במובן זה שיש כאן שתי חוגות. 1347 00:59:50,060 --> 00:59:53,630 בפריפריה מחוץ לדבר הזה, יש אותיות A עד Z, 1348 00:59:53,630 --> 00:59:55,110 על אף שהן בסדר אקראיות. 1349 00:59:55,110 --> 00:59:58,410 ומבפנים, יש בעצם כמה מספרים, כך שעם זה 1350 00:59:58,410 --> 01:00:02,940 טבעת, אתה יכול להפוך את הסוג שלו מבחוץ, אבל לא מבפנים כדי ליישר קו 1351 01:00:02,940 --> 01:00:04,110 מספרים עם אותיות. 1352 01:00:04,110 --> 01:00:08,290 ובסרטון שאתה עומד לראות - שחלקם אולי ראה 24/7 1353 01:00:08,290 --> 01:00:11,120 סביב עונת חג המולד מסרט שנקרא סיפור חג המולד. 1354 01:00:11,120 --> 01:00:16,050 אתה תראה שראלפי הקטן היה כל כך להוט להבין מה יתומה קטנה 1355 01:00:16,050 --> 01:00:19,810 המסר הסודי של אנני היה לו שהיה מתקשר, אני חושב, ב 1356 01:00:19,810 --> 01:00:22,810 צורה של הודעות מספריות בתיבת סדרתי. 1357 01:00:22,810 --> 01:00:26,760 והיה לך לצבור את כל הקלפים הקטנים שהגיעו 1358 01:00:26,760 --> 01:00:27,480 בקופסא דגני הבוקר. 1359 01:00:27,480 --> 01:00:28,320 הייתה לך לשלוח אותם פנימה 1360 01:00:28,320 --> 01:00:31,060 היה לך כדי לקבל בחזרה את טבעת מפענח הסוד, כך שאתה יכול סוף סוף להבין 1361 01:00:31,060 --> 01:00:34,190 מה הוא המיפוי בין אותיות ומספרים, 1362 01:00:34,190 --> 01:00:35,420 או אותיות וספרות. 1363 01:00:35,420 --> 01:00:39,790 אז אני נותן לכם קליפ קצר זה מסיפור חג המולד להניע pset 2 ו 1364 01:00:39,790 --> 01:00:42,340 הדיון שלנו, ברגע של מערכים. 1365 01:00:42,340 --> 01:00:43,773 אז הנה יש לנו ראלפי. 1366 01:00:43,773 --> 01:00:44,126 >> [השמעת וידאו] 1367 01:00:44,126 --> 01:00:47,470 -זה היה ידוע לכל ומשונים שראלף פרקר מתמנה בזאת 1368 01:00:47,470 --> 01:00:50,690 חבר בחוג היתומה הקטן אנני הסוד והוא זכאי לכל 1369 01:00:50,690 --> 01:00:53,500 את הכיבודים והטבות המתרחשים אליהם. 1370 01:00:53,500 --> 01:00:56,040 בחתימה, יתומה הקטנה אנני. 1371 01:00:56,040 --> 01:00:58,730 תשובה, הפיר אנדרה! 1372 01:00:58,730 --> 01:01:00,150 בדיו! 1373 01:01:00,150 --> 01:01:02,910 כיבודים והטבות, שכבר בגיל תשע. 1374 01:01:09,970 --> 01:01:10,730 יאללה, בואו נגמור עם זה. 1375 01:01:10,730 --> 01:01:15,000 אני לא צריך את כל הג'אז שעל מבריחים ופירטים. 1376 01:01:15,000 --> 01:01:17,624 תקשיב, מחר בערב להרפתקה המסכמת של השחור 1377 01:01:17,624 --> 01:01:19,710 ספינת פירטים. 1378 01:01:19,710 --> 01:01:23,380 עכשיו זה זמן למסר הסודי של אנני לחבריך 1379 01:01:23,380 --> 01:01:25,670 של המעגל הסודי. 1380 01:01:25,670 --> 01:01:30,260 זכרו, ילדים, רק חברי המעגל הסודי של אנני יכולים לפענח 1381 01:01:30,260 --> 01:01:31,660 המסר הסודי של אנני. 1382 01:01:31,660 --> 01:01:36,230 זכור, אנני היא תלויה בך. 1383 01:01:36,230 --> 01:01:38,720 הגדר את הפינים לB2. 1384 01:01:38,720 --> 01:01:41,040 כאן הוא המסר. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -אני בפגישה החשאית הראשונה שלי. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 הפיר היה בקול גדול הלילה. 1389 01:01:51,700 --> 01:01:54,890 אני יכול לומר שההודעה של הערב הייתה באמת חשובה. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 זה מסר מאנני את עוצמה. 1392 01:01:58,590 --> 01:01:59,840 זכור, לא לספר לאף אחד. 1393 01:02:04,570 --> 01:02:08,750 כעבור -90 שניות, אני בחדר היחיד בבית שבו ילד בן תשע 1394 01:02:08,750 --> 01:02:12,980 יכל לשבת בפרטיות ולפענח. 1395 01:02:12,980 --> 01:02:17,130 אהה, הלכתי ב 'הבא. 1396 01:02:17,130 --> 01:02:20,330 א 'המילה הראשונה היא להיות. 1397 01:02:20,330 --> 01:02:22,670 ס 'זה היה בא יותר בקלות עכשיו. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -נו, באמת, ראלפי. 1400 01:02:26,510 --> 01:02:28,430 אני חייב ללכת. 1401 01:02:28,430 --> 01:02:30,350 -אני אהיה ישר, MA. 1402 01:02:30,350 --> 01:02:33,720 גי-גאון. 1403 01:02:33,720 --> 01:02:38,270 -T, O. מקפיד. 1404 01:02:38,270 --> 01:02:40,000 הקפד מה? 1405 01:02:40,000 --> 01:02:42,105 מה הייתה יתומה הקטנה אנני מנסה לומר? 1406 01:02:42,105 --> 01:02:43,095 הקפד מה? 1407 01:02:43,095 --> 01:02:43,590 -ראלפי! 1408 01:02:43,590 --> 01:02:44,580 רנדי חייב ללכת. 1409 01:02:44,580 --> 01:02:45,570 אתה מוכן בבקשה לצאת? 1410 01:02:45,570 --> 01:02:46,560 -בסדר, אמא. 1411 01:02:46,560 --> 01:02:48,540 אני מייד החוצה. 1412 01:02:48,540 --> 01:02:50,580 -שאני מתקרב עכשיו. 1413 01:02:50,580 --> 01:02:52,550 המתח היה נורא. 1414 01:02:52,550 --> 01:02:53,355 מה זה היה? 1415 01:02:53,355 --> 01:02:56,315 גורלו של כדור הארץ עשוי להיות תלוי ועומד. 1416 01:02:56,315 --> 01:02:56,790 -ראלפי! 1417 01:02:56,790 --> 01:02:59,165 רנדי צריך ללכת. 1418 01:02:59,165 --> 01:03:02,310 -אני אהיה ישר, לכל הרוחות. 1419 01:03:02,310 --> 01:03:04,000 -וואו, כבר כמעט שם. 1420 01:03:04,000 --> 01:03:05,180 האצבעות שלי עפו. 1421 01:03:05,180 --> 01:03:07,150 המוח שלי היה מלכודת פלדה. 1422 01:03:07,150 --> 01:03:08,790 כל נקבובי רטט. 1423 01:03:08,790 --> 01:03:10,040 זה היה כמעט ברור. 1424 01:03:10,040 --> 01:03:13,400 כן, כן, כן, כן. 1425 01:03:13,400 --> 01:03:18,960 -הקפד לשתות השוקו שלך. 1426 01:03:18,960 --> 01:03:20,210 שוקו? 1427 01:03:24,010 --> 01:03:25,260 מסחרי עלוב? 1428 01:03:28,200 --> 01:03:29,640 בן זונה. 1429 01:03:29,640 --> 01:03:33,340 [וידאו השמעת END] 1430 01:03:33,340 --> 01:03:36,040 >> הדוד י Malan: אז יש לנו את הצפנה. 1431 01:03:36,040 --> 01:03:39,670 אז איך במחשב שאנחנו יכולים ללכת על יישום או 1432 01:03:39,670 --> 01:03:40,950 מייצג דברים כאלה? 1433 01:03:40,950 --> 01:03:44,430 ובכן, אנחנו צריכים דרך להביע את עצם קצת יותר גמישים מאשר 1434 01:03:44,430 --> 01:03:46,420 המשתנים שלנו עד כה מותרים. 1435 01:03:46,420 --> 01:03:47,370 היו לנו ints. 1436 01:03:47,370 --> 01:03:48,380 היו לנו תווים. 1437 01:03:48,380 --> 01:03:50,790 היו לנו צפתי וזוגות ועוד כמה. 1438 01:03:50,790 --> 01:03:55,050 אבל אלה הם פיסות בודדות של זיכרון שלא באמת מאפשרות לנו 1439 01:03:55,050 --> 01:03:58,010 לבטא את דברים כמו מילים ומשפטים וביטויים. 1440 01:03:58,010 --> 01:04:00,200 ואכן, יש לנו בשם מחרוזות דברים כאלה. 1441 01:04:00,200 --> 01:04:03,650 אבל הבטיח שזה באמת רק בפישוט CS50 1442 01:04:03,650 --> 01:04:07,020 ספרייה שאנחנו מתכוונים לקלף. 1443 01:04:07,020 --> 01:04:08,970 >> ואז הבה תתחיל לעשות את זה כאן. 1444 01:04:08,970 --> 01:04:11,130 תן לי ללכת קדימה, לפתוח את קובץ - 1445 01:04:11,130 --> 01:04:13,770 כל הקבצים הללו זמינים גם באינטרנט רגיל - 1446 01:04:13,770 --> 01:04:19,120 קרא array.c לפתור בעיה שאינם קשורה למייתרים אבל שמצייר 1447 01:04:19,120 --> 01:04:23,040 תמונה כאן של איך אנחנו יכולים להשתמש במשהו שנקראת מערך. 1448 01:04:23,040 --> 01:04:25,530 מערך הוא סוג נתונים. 1449 01:04:25,530 --> 01:04:31,320 זה סוג של משתנה, מסוג כלשהו, ​​שיש סוגי נתונים קטנים יותר מרובים 1450 01:04:31,320 --> 01:04:34,150 בתוכו גב אל גב אל הגב אל גב. 1451 01:04:34,150 --> 01:04:37,700 כך למשל, אם ברצוננו לכתוב תכנית קטנה שינתנו לך שלך 1452 01:04:37,700 --> 01:04:42,110 חידון ממוצע לקורס כמו 50 שיש שני בחנים, אתה יכול מאוד בקלות 1453 01:04:42,110 --> 01:04:45,170 לכתוב תכנית זו - המבוסס גם על חלק מהחומר של השבוע האחרון - 1454 01:04:45,170 --> 01:04:47,770 באמצעות GetInt וזוג של משתנים. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, quiz2 int, וזה די פשוט. 1456 01:04:51,920 --> 01:04:55,930 זה אולי 10, 20 שורות של קוד, מקסימום, כדי ליישם תכנית ששואלת 1457 01:04:55,930 --> 01:05:01,170 משתמש לשני ציוני בחנים ואז מחשב הממוצע שלהם על ידי הוספתם 1458 01:05:01,170 --> 01:05:03,850 יחד, חלוקה ידי שתיים, ואז להדפיס את התוצאות. 1459 01:05:03,850 --> 01:05:06,380 אנחנו ודאי יכולים לעשות את זה די בקלות עכשיו אחרי 1460 01:05:06,380 --> 01:05:07,510 חלק מספר דקות. 1461 01:05:07,510 --> 01:05:11,005 >> אבל הבעיה היא שמניח כי 50 היו שלושה או ארבעה בחנים. 1462 01:05:11,005 --> 01:05:13,510 תניח שאתה רוצה להשתמש באותה התכנית לכיתה שהייתה 1463 01:05:13,510 --> 01:05:14,850 חידונים שבועיים. 1464 01:05:14,850 --> 01:05:16,610 תחשוב על כיתה שיש חידונים שבועיים. 1465 01:05:16,610 --> 01:05:20,610 אם יש כמו 16 או כך שבועות בסמסטר, עכשיו יש לך 16 משתנים - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, quiz4 int. 1467 01:05:24,270 --> 01:05:27,560 ברגע שאתה מתחיל לראות יתירות זה, זה העתקה והדבקה 1468 01:05:27,560 --> 01:05:31,390 של קוד, זה צריך להתחיל לעשות רצונך הייתה דרך טובה יותר. 1469 01:05:31,390 --> 01:05:33,930 ותודה לאל, כי מערכים, שיש. 1470 01:05:33,930 --> 01:05:34,980 אז בואו לעשות את זה. 1471 01:05:34,980 --> 01:05:38,430 ראשית, הרשה לי להציג את דבר פשוט מאוד שאנחנו כבר לא בשימוש עד כה, 1472 01:05:38,430 --> 01:05:40,140 אבל אתה רואה אותו מדי פעם בקוד. 1473 01:05:40,140 --> 01:05:42,360 זה מה שנקרא באופן כללי קבועה. 1474 01:05:42,360 --> 01:05:45,790 אז זה קבוע במובן זה שערך זה לא משנה. 1475 01:05:45,790 --> 01:05:49,210 הכנס האנושי בעת יצירה מתמדת הוא להשתמש בכל ההון 1476 01:05:49,210 --> 01:05:51,940 מכתבים, רק כדי שזה באמת בולט בקוד שלך. 1477 01:05:51,940 --> 01:05:55,960 ומילת מפתח המיוחדת שאתה משתמש ב-C # היא להגדיר. 1478 01:05:55,960 --> 01:06:00,250 אז אם אתה אומר # להגדיר, לאחר מכן רווח, ואז את המילה שברצונך להשתמש עבור 1479 01:06:00,250 --> 01:06:03,260 שמו של הקבוע, ולאחר מכן הערך של הקבוע. 1480 01:06:03,260 --> 01:06:06,180 אז הודעה, זה שונה מהקצאת משהו משתנה. 1481 01:06:06,180 --> 01:06:07,020 אין שום סימן שוויון. 1482 01:06:07,020 --> 01:06:08,240 אין שום פסיק. 1483 01:06:08,240 --> 01:06:11,410 זה מה שידוע בדרך כלל כהוראת preprocessor, אלא יותר על 1484 01:06:11,410 --> 01:06:12,210 בהזדמנות אחרת. 1485 01:06:12,210 --> 01:06:18,540 >> לעת עתה, זה יוצר ערך בלתי משתנה נקרא חידונים שבפועל 1486 01:06:18,540 --> 01:06:19,940 ערך מספרי הוא 2. 1487 01:06:19,940 --> 01:06:24,020 אז בכל מקום שאתה רואה חידונים, שעשועונים, חידונים לאורך קובץ זה, זה 1488 01:06:24,020 --> 01:06:25,410 רק המספר 2. 1489 01:06:25,410 --> 01:06:28,100 עכשיו, אם אני מסתכל עיקרי עכשיו, בואו נראה איך זה עובד. 1490 01:06:28,100 --> 01:06:29,500 בהתחלה, זה נראה קצת תמוה. 1491 01:06:29,500 --> 01:06:31,340 אבל זה כל הדברים משבוע אחד. 1492 01:06:31,340 --> 01:06:32,710 בקש מהמשתמש לכיתות. 1493 01:06:32,710 --> 01:06:33,630 איך עושים את זה? 1494 01:06:33,630 --> 01:06:35,470 ובכן, בקו 22 - 1495 01:06:35,470 --> 01:06:37,210 זה באמת חלק העסיסי - 1496 01:06:37,210 --> 01:06:40,960 אני מצהיר לצוף, אבל לא רק לצוף אחת. 1497 01:06:40,960 --> 01:06:44,620 הריני מצהיר, אלא מערך ערכי נקודה צפו. 1498 01:06:44,620 --> 01:06:49,100 זה משתנה הולך להיקרא ציונים, כפי שנרמז כאן. 1499 01:06:49,100 --> 01:06:53,080 אבל רק לקטע של תחביר חדש אז הם הסוגריים מרובעים האלה, העובדה 1500 01:06:53,080 --> 01:06:59,350 לאחר שאמרתי את ציונים לצוף ואז סוגריים פתוחים ואז מספר. 1501 01:06:59,350 --> 01:07:02,460 שימו לב, אם זה קבוע, זה בדיוק כמו שעשינו את זה. 1502 01:07:02,460 --> 01:07:06,890 פירושו של דבר מחשב, ייתן לי שני מצופים, ובואו ביחד קורא 1503 01:07:06,890 --> 01:07:08,220 ציוניהם. 1504 01:07:08,220 --> 01:07:11,920 זאת בניגוד להרבה יותר משעמם תהליך כזה. 1505 01:07:11,920 --> 01:07:15,850 לצוף grade1, לצוף grade2, וכן הלאה. 1506 01:07:15,850 --> 01:07:20,010 אז מערך מאפשר לנו ליישם את הרעיון הזה, אבל הרבה פחות מבולגן, ב 1507 01:07:20,010 --> 01:07:24,630 כך שאנו יכולים לכתוב שורה אחת של קוד במקום, יניח, 16 ל16 1508 01:07:24,630 --> 01:07:25,740 סמסטר שבוע. 1509 01:07:25,740 --> 01:07:29,950 אז אני לא רוצה קוד קשיח-2 משום שאם אתה חושב על זה עכשיו 1510 01:07:29,950 --> 01:07:34,160 לוגי - תניח בשנה הבאה CS50 שינויי 3 בחנים במקום. 1511 01:07:34,160 --> 01:07:35,510 והיה לי את המספר 2 כאן. 1512 01:07:35,510 --> 01:07:36,600 היה לי מספר 2 כאן. 1513 01:07:36,600 --> 01:07:37,580 היה לי מספר 2 כאן. 1514 01:07:37,580 --> 01:07:38,560 היה לי מספר 2 כאן. 1515 01:07:38,560 --> 01:07:43,180 זה הופך להיות מאוד משעמם וקל מאוד לפשל ולשנות בטעות 1516 01:07:43,180 --> 01:07:47,690 ערך אחד עד 3 ומתגעגעים ערך אחר של 2. 1517 01:07:47,690 --> 01:07:52,460 אז אני הולך לשם במקום מופשט זה ולהשתמש בזה קבוע, כי כשלה 1518 01:07:52,460 --> 01:07:54,120 השם מרמז, לא משתנה לעולם. 1519 01:07:54,120 --> 01:07:57,710 ועכשיו, לא משנה אם יש לנו אחר בחני השנה או הבאה, אני 1520 01:07:57,710 --> 01:08:01,210 רק צריכים לשנות אותו במקום אחד, עד כאן למעלה. 1521 01:08:01,210 --> 01:08:02,720 >> אז זה כל מה שקבוע הוא. 1522 01:08:02,720 --> 01:08:08,680 בינתיים, התכונה הרעיונית החדשה היא זה של מערך. 1523 01:08:08,680 --> 01:08:14,660 אז הסוגריים המרובעים ינתנו לי הרבה זה צף ומאפשר לי באופן קולקטיבי 1524 01:08:14,660 --> 01:08:16,630 קורא להם ציונים כאן. 1525 01:08:16,630 --> 01:08:17,990 אז עכשיו בואו נראה מה אני הולך לעשות. 1526 01:08:17,990 --> 01:08:20,359 כאן, בקו 24 היא תחילתו של ללולאה. 1527 01:08:20,359 --> 01:08:22,260 זה באמת שום דבר מהודר. 1528 01:08:22,260 --> 01:08:25,060 זה פשוט באמצעות חידונים במקום מספר קבוע בקוד. 1529 01:08:25,060 --> 01:08:27,790 אבל אין שום דבר שונה מבחינה אינטלקטואלית לשם בשבוע שעבר. 1530 01:08:27,790 --> 01:08:29,040 זה רק printf. 1531 01:08:29,040 --> 01:08:35,490 אז printf ("מספר% d החידון של% d"), כי אני פשוט רוצה להדפיס לתת לי חידות 1532 01:08:35,490 --> 01:08:38,050 מספר אחד משתיים, ואז שניים משתיים. 1533 01:08:38,050 --> 01:08:39,850 אז זה הוא אך ורק עניין אסתטי. 1534 01:08:39,850 --> 01:08:42,500 אבל חלק המעניין כרגע הוא בקו 27. 1535 01:08:42,500 --> 01:08:48,310 כדי למלא באחת משני המציינים עם נקודה צפה 1536 01:08:48,310 --> 01:08:51,029 ערך, אתה שוב להשתמש בסוגריים מרובעים. 1537 01:08:51,029 --> 01:08:55,620 במקרה זה, אני משתמש בזה בשבילי, כי לולאה החל עם אני שווה 1538 01:08:55,620 --> 01:08:57,560 איזה ערך, כנראה? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> אז באיטרציה הראשונה של לולאה זה, כאילו 1541 01:09:01,350 --> 01:09:02,689 כתב את זה בקוד. 1542 01:09:02,689 --> 01:09:05,580 אבל באיטרציה השנייה של לולאה זה, כאילו 1543 01:09:05,580 --> 01:09:07,750 כתב את זה בקוד שלי. 1544 01:09:07,750 --> 01:09:10,750 אבל העובדה שאני משתמש במשתנה היא מושלמת, כי, כפי שהשם 1545 01:09:10,750 --> 01:09:14,300 מרמז, זה משתנה שוויו בכל איטרציה. 1546 01:09:14,300 --> 01:09:17,370 אז אני ממלא מערך זה נקודה אחת בכל פעם. 1547 01:09:17,370 --> 01:09:18,910 מה מערך זה נראה לך? 1548 01:09:18,910 --> 01:09:21,430 ובכן, הסיבה שאני ציירתי מלבן זה סופר פשוט על המסך כאן 1549 01:09:21,430 --> 01:09:23,350 לפני היה מסיבה זו. 1550 01:09:23,350 --> 01:09:27,279 מערך הוא פשוט גוש של זיכרון ואחריו עוד חתיכה מזיכרון, 1551 01:09:27,279 --> 01:09:30,109 אחריו עוד חתיכה מזיכרון, וכן הלאה. 1552 01:09:30,109 --> 01:09:35,260 אז אם המערך שלי הוא בגודל 2, במקרה הזה כאן, כל מה שאני היה עושה על ידי 1553 01:09:35,260 --> 01:09:37,590 הקלדת ציוני הבחנים שלי, כמו כאן. 1554 01:09:37,590 --> 01:09:39,430 יש לי 100 על זה. 1555 01:09:39,430 --> 01:09:42,020 ואז יש לי 99 על זה. 1556 01:09:42,020 --> 01:09:46,040 אז הזיכרון הזה לא יכול גם לשמש משום שרק בקש 1557 01:09:46,040 --> 01:09:48,689 מחשב למערך בגודל 2. 1558 01:09:48,689 --> 01:09:50,180 הריבועים האלה עדיין נמצאים שם. 1559 01:09:50,180 --> 01:09:50,340 נכון? 1560 01:09:50,340 --> 01:09:52,500 עדיין יש לך שתי ג'יגה בייט של RAM, גם אם אתה רק 1561 01:09:52,500 --> 01:09:53,979 שואל לשני מצופים. 1562 01:09:53,979 --> 01:09:58,710 אז הרעיון מאחורי מערכים הוא שהמחשב פשוט לוקח נתח של זיכרון 1563 01:09:58,710 --> 01:10:03,230 ולאחר מכן מקצה בחתיכות קטנות יותר גב אל גב אל הגב אל גב. 1564 01:10:03,230 --> 01:10:04,740 ואז זה כל מערך הוא. 1565 01:10:04,740 --> 01:10:09,080 זה נתח רציף של זיכרון, אשר לתוך אתה יכול לשים את הדברים. 1566 01:10:09,080 --> 01:10:12,400 >> עכשיו זה קורה אז לעשות בדיוק כמה חישובים משעממים. 1567 01:10:12,400 --> 01:10:16,170 אם אני לגלול למטה כאן, זה מקום שבי אז לחזר על המערך. 1568 01:10:16,170 --> 01:10:19,410 אני בא עם הסיכום של כל הערכים במערך. 1569 01:10:19,410 --> 01:10:22,390 ואז אני משתמש בפונקציית הסיבוב כאן למעשה לעשות 1570 01:10:22,390 --> 01:10:23,940 הסיכום מחולק בחידונים. 1571 01:10:23,940 --> 01:10:27,450 אבל תן לי להניף את היד שלי שבכל סוג של חשבון מספיק לעת עתה. 1572 01:10:27,450 --> 01:10:30,010 אבל כל מה שהוא עושה עבורי בסופו החישוב ממוצע. 1573 01:10:30,010 --> 01:10:33,640 חידון אז קודם תוספת חידון שני, מחולק לפי 2, ולאחר מכן הדפסה 1574 01:10:33,640 --> 01:10:34,700 זה כמו int. 1575 01:10:34,700 --> 01:10:39,030 >> אבל בואו עכשיו מעבר לדוגמה אחרת הנקראת string1, 1576 01:10:39,030 --> 01:10:42,370 אשר מצייר תמונה דומה אבל מייתרי שימוש. 1577 01:10:42,370 --> 01:10:45,550 תן לי ללכת קדימה ולפשט את זה לרגע. 1578 01:10:45,550 --> 01:10:48,340 ותסלח כניסה לעת עתה. 1579 01:10:48,340 --> 01:10:52,280 הודעה בקו 19 של דוגמה זו, אני מקבל מחרוזת מהמשתמש. 1580 01:10:52,280 --> 01:10:55,780 אבל שים לב למה שאני עושה בא בשורות 22 ואילך. 1581 01:10:55,780 --> 01:11:00,260 בעצם אני iterating מעד - וזה טריק חדש - 1582 01:11:00,260 --> 01:11:02,730 strlen, אורך מחרוזת. 1583 01:11:02,730 --> 01:11:07,010 זוהי פונקציה שמגיעה עם C שאם אתה עובר אותו חוט, זה אומר לי 1584 01:11:07,010 --> 01:11:08,950 כמה דמויות הם שבמחרוזת. 1585 01:11:08,950 --> 01:11:09,440 זה הכל. 1586 01:11:09,440 --> 01:11:12,520 העובדה שזה strlen במקום אורך מחרוזת היא רק בגלל שזה 1587 01:11:12,520 --> 01:11:13,040 יותר תמציתי. 1588 01:11:13,040 --> 01:11:17,100 לפני 30 שנים, אנשים שאוהבים לכתוב דברים באופן תמציתי ככל האפשר. 1589 01:11:17,100 --> 01:11:19,080 אז אנחנו כבר המשכנו את כנס זה כאן. 1590 01:11:19,080 --> 01:11:21,730 אני + + רק אומר להגדיל i בכל איטרציה. 1591 01:11:21,730 --> 01:11:24,310 ועכשיו שם לב זה, וזה באמת מעניין. 1592 01:11:24,310 --> 01:11:28,730 אז בקו 24, אני אומר מחשב, תן לי אופי, 8 1593 01:11:28,730 --> 01:11:30,770 ביטים, וקורא לו ג. 1594 01:11:30,770 --> 01:11:35,370 אבל מה זה בצד ימין אומר? 1595 01:11:35,370 --> 01:11:38,150 באנגלית, מה זה מייצג? 1596 01:11:38,150 --> 01:11:40,070 [לא ברור] 1597 01:11:40,070 --> 01:11:40,490 הדוד י Malan: בדיוק. 1598 01:11:40,490 --> 01:11:42,390 תן לי את התו הראשון במערך. 1599 01:11:42,390 --> 01:11:45,400 או באופן כללי יותר, תן לי את דמות i-th במערך. 1600 01:11:45,400 --> 01:11:48,230 ומבין שזה חשוב עכשיו שכמדעני מחשב, אנחנו בעצם 1601 01:11:48,230 --> 01:11:49,330 לספור מ 0. 1602 01:11:49,330 --> 01:11:51,290 אין לך שיקול דעת עכשיו להתחיל לעשות את זה. 1603 01:11:51,290 --> 01:11:54,580 עכשיו אתה צריך להתנהג בהתאם לציפיות של המחשב ו 1604 01:11:54,580 --> 01:11:58,010 לספור מאפס כי [0] הוא הולך להיות ראשון 1605 01:11:58,010 --> 01:11:59,670 תו במחרוזת. 1606 01:11:59,670 --> 01:12:01,320 [1] הוא הולך להיות שני. 1607 01:12:01,320 --> 01:12:03,610 [2] הוא הולך להיות שלישי, וכך הלאה. 1608 01:12:03,610 --> 01:12:08,840 אז התכנית הזאת, אם אני אהדר אותו - זה הוא, שוב, string1. 1609 01:12:08,840 --> 01:12:11,040 >> אז להפוך string1. 1610 01:12:11,040 --> 01:12:16,730 ועכשיו אני רץ string1 בחלון המסוף שלי. 1611 01:12:16,730 --> 01:12:19,180 הוא מחכה לקלט, אז אני הולך להקליד, אומר דוד. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 ועכשיו הוא מדפיס את כל דוד על קווים שונים בגלל 1614 01:12:23,350 --> 01:12:24,430 שים לב למה שאני עושה. 1615 01:12:24,430 --> 01:12:27,510 אני מדפיס תו אחד בכל פעם. 1616 01:12:27,510 --> 01:12:29,100 עכשיו אנחנו לא נכנסנו לפרטים היום על זה. 1617 01:12:29,100 --> 01:12:31,610 אבל אני מחקתי לפני רגע סימון זו כאן. 1618 01:12:31,610 --> 01:12:36,310 מסתבר שאם המשתמש אינו מתנהג כשורה, יריבות, או סתם 1619 01:12:36,310 --> 01:12:41,780 מבולבל, אתה ממש יכול להיכשל לתת מחרוזת באורך מסוים. 1620 01:12:41,780 --> 01:12:43,640 אם אתה מכה על המקש הלא הנכון במקלדת, שאולי תנתנו לי 1621 01:12:43,640 --> 01:12:44,390 אין מחרוזת בכלל. 1622 01:12:44,390 --> 01:12:47,790 או אם אתה זדוני, ייתכן שתנסה להדביק בשווי של ג'יגה של 1623 01:12:47,790 --> 01:12:49,380 מאמר כדי למלא את המחרוזת. 1624 01:12:49,380 --> 01:12:52,060 ואם במחשב פועל מתוך זיכרון, מתברר שאנחנו הולכים 1625 01:12:52,060 --> 01:12:54,310 לחזור הערך המיוחד הזה שנקרא אפס. 1626 01:12:54,310 --> 01:12:57,550 אז לעת עתה, רק יודע שיש הערך המיוחד הזה שנקרא שnull 1627 01:12:57,550 --> 01:13:01,000 יאפשר לנו לבדוק כאשר אנחנו יוצאים מזיכרון, בין השאר. 1628 01:13:01,000 --> 01:13:07,330 >> אבל אם אני פותח עכשיו string2, תבחין בהבדל אחד כאן. 1629 01:13:07,330 --> 01:13:09,760 שים לב הבדל אחד כאן עם string2. 1630 01:13:09,760 --> 01:13:13,260 עם string2, זה ללולאה הוא קצת שונה. 1631 01:13:13,260 --> 01:13:16,350 תן לי למחוק את ערכי null כדי שנוכל לדבר על הדברים האלה בפעם אחרת. 1632 01:13:16,350 --> 01:13:18,460 אבל מה ששונה לגבי ללולאת הזמן הזה? 1633 01:13:21,580 --> 01:13:23,160 ואני יכול לחזור לדוגמה הקודמת. 1634 01:13:23,160 --> 01:13:24,800 אז זה גרסה 2. 1635 01:13:24,800 --> 01:13:27,020 זו גרסה אחת. 1636 01:13:27,020 --> 01:13:31,935 אחת, שתיים, אחת שתיים. 1637 01:13:35,030 --> 01:13:38,240 אז strlen השיחה היא איפה? 1638 01:13:38,240 --> 01:13:40,420 זה בחלקו הראשון של ללולאה. 1639 01:13:40,420 --> 01:13:43,060 כל מחשבות, מדוע אני עושה את זה? 1640 01:13:43,060 --> 01:13:43,690 כן. 1641 01:13:43,690 --> 01:13:46,010 [לא ברור] 1642 01:13:46,010 --> 01:13:47,630 הדוד י Malan: אז אנחנו לא קוראים לפונקציה בכל פעם אחת. 1643 01:13:47,630 --> 01:13:48,040 בדיוק. 1644 01:13:48,040 --> 01:13:50,350 היזכר ללולאות שהם סופר פשוט ברגע שאתה די 1645 01:13:50,350 --> 01:13:52,180 להבין שזה האתחול, 1646 01:13:52,180 --> 01:13:53,330 תנאי והעדכון. 1647 01:13:53,330 --> 01:13:55,430 הבעיה היא שהמצב שקורה בכל 1648 01:13:55,430 --> 01:13:56,600 איטרציה של הלולאה. 1649 01:13:56,600 --> 01:13:59,930 וכך בדוגמה זו כאן, מה רע בכך 1650 01:13:59,930 --> 01:14:03,500 שזה המצב שלי? 1651 01:14:03,500 --> 01:14:05,920 אתה קורא strlen שוב ושוב ושוב. 1652 01:14:05,920 --> 01:14:08,990 אבל ברגע שהקלדתי בדוד, שאורך המחרוזת הוא חמש. 1653 01:14:08,990 --> 01:14:11,560 וזה לא הולך להשתנות בכל איטרציה של הלולאה כי 1654 01:14:11,560 --> 01:14:15,560 מחרוזת היא עדיין D--V-I-D. אז זה רמז למה שהולך להיות 1655 01:14:15,560 --> 01:14:19,650 רעיון חשוב יותר וידוע כהחלטת עיצוב, שם - פשוט לא 1656 01:14:19,650 --> 01:14:21,640 להפוך את המחשב לעשות עבודה מיותרת. 1657 01:14:21,640 --> 01:14:25,630 >> עכשיו, בדיוק כמו צצה מקדימה של pset 2, pset 2 במהדורה הסטנדרטית הוא 1658 01:14:25,630 --> 01:14:28,850 הולך לאתגר אותך למעשה ליישם חלק מספר של צופן, חלק 1659 01:14:28,850 --> 01:14:32,650 מספר אלגוריתמי הצפנה, כך שאתה יכול גם להצפין ולפענח 1660 01:14:32,650 --> 01:14:35,530 מסרים סודיים, בדומה לראלפי אחד יש פוענחו. 1661 01:14:35,530 --> 01:14:38,720 במהדורה של האקר pset 2, אנחנו הולכים להיכנס קצת יותר. 1662 01:14:38,720 --> 01:14:42,010 אנחנו הולכים למסור לך קובץ ממערכת מחשב המכילה בפועל 1663 01:14:42,010 --> 01:14:45,690 חבורה שלמה של שמות משתמש וסיסמות מוצפנות בפועל, והאתגר 1664 01:14:45,690 --> 01:14:49,110 למהדורת ההאקר הולכת להיות לפיצוח הסיסמות והגזרה האלה 1665 01:14:49,110 --> 01:14:53,060 מה קריפטוגרפיה או מה הסוד שמש למעשה 1666 01:14:53,060 --> 01:14:55,080 ליצור הסיסמות האלה. 1667 01:14:55,080 --> 01:14:58,360 ואנחנו הולכים לעשות את זה על ידי שימוש בתכונה חדשה של C כאן שאני אתן לי 1668 01:14:58,360 --> 01:15:02,200 אתה רק הדגמה של, הידוע כטיעוני שורת פקודה. 1669 01:15:02,200 --> 01:15:05,930 >> אז מתברר, כחלק מכם אולי ראה בסעיף או בספרי לימוד, 1670 01:15:05,930 --> 01:15:09,850 עיקרי לא תמיד צריך להיות מבוטל בסוגריים. 1671 01:15:09,850 --> 01:15:14,060 מתברר שראשי יכול גם להיות כתוב ככה, בשני טיעונים, 1672 01:15:14,060 --> 01:15:19,690 argc וargv, שם argc הוא מספר המילים שהקלדת לאחר 1673 01:15:19,690 --> 01:15:21,940 שמה של התכנית בשורת הפקודה שלך. 1674 01:15:21,940 --> 01:15:24,550 וargv הוא את המילים עצמן. 1675 01:15:24,550 --> 01:15:29,470 וכמו הסוגריים המרובעים שם מציעים, argv הוא כנראה מערך. 1676 01:15:29,470 --> 01:15:33,720 זה הולך להיות מחרוזת אחרי מחרוזת אחרי מחרוזת בזיכרון. 1677 01:15:33,720 --> 01:15:36,170 אז מה אנחנו הולכים להיות מסוגלים לעשות, החל מpset 2, 1678 01:15:36,170 --> 01:15:37,310 משהו כזה. 1679 01:15:37,310 --> 01:15:42,450 אם אני עושה argv1, שהוא דוגמה תוכל לחזור אליו ביום שני, ולהפעיל 1680 01:15:42,450 --> 01:15:45,180 זה, שים לב שזה לא מצליח לעשות שום דבר עדיין. 1681 01:15:45,180 --> 01:15:47,050 זה פשוט מדפיס את שמו שלו. 1682 01:15:47,050 --> 01:15:53,220 אבל אם אומר שמעמד פרידה, שימו לב שתכנית זו כנראה סובב 1683 01:15:53,220 --> 01:15:57,030 על כל אחת מהמילים שהוקלדו בשורת הפקודה. 1684 01:15:57,030 --> 01:16:02,050 ואת האמצעי שבעזרתו אנו מקבלים גישה למילים שהמשתמש 1685 01:16:02,050 --> 01:16:06,780 הקליד בשורת הפקודה היא על ידי השינוי העיקרי, החל בסוף השבוע הזה, מint 1686 01:16:06,780 --> 01:16:10,710 ראשי (חלל) לint ראשי (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 וכך יהיה נולד טיעוני שורת פקודה. 1688 01:16:13,700 --> 01:16:17,210 וברגע שאתה מקבל באמת מתוחכם בזה, תוכל לכתוב 1689 01:16:17,210 --> 01:16:21,370 תוכניות ממש Trippy, כגון זה שלפנינו, שהולך מעל ומעבר 1690 01:16:21,370 --> 01:16:25,520 חלק מהפונקציונליות שעשינו עד כה, אבל כולם די חזק. 1691 01:16:25,520 --> 01:16:27,330 >> אז אשאיר את זה עם זה על המסך. 1692 01:16:27,330 --> 01:16:29,160 ואנו רואים אותך ביום שני.