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