1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> เดวิดเจลัน: นี่คือ CS50 และ นี้คือจุดเริ่มต้นของสัปดาห์ที่สี่ 3 00:00:14,050 --> 00:00:18,630 และเด็กที่อยู่ในโฟล์คสวาเกน เพราะทุกปัญหาของซอฟต์แวร์ 4 00:00:18,630 --> 00:00:20,264 ขอให้เรามาดู 5 00:00:20,264 --> 00:00:20,930 [วิดีโอเล่นภาพ] 6 00:00:20,930 --> 00:00:25,560 -Cars ตัวละครที่ฉลาด ในภาพยนตร์ Fast and Furious 7 00:00:25,560 --> 00:00:29,100 สัปดาห์นี้ automaker เยอรมัน โฟล์คสวาเกนพบว่าตัวเอง 8 00:00:29,100 --> 00:00:32,490 ในช่วงกลางของเรื่องอื้อฉาวของที่ สัดส่วนความผิดทางอาญาที่อาจเกิดขึ้น 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen จะสดชื่นสำหรับพันล้าน ในการปรับค่าใช้จ่ายทางอาญาที่เป็นไปได้ 10 00:00:36,060 --> 00:00:38,560 สำหรับผู้บริหารที่เป็น บริษัท ขอโทษ 11 00:00:38,560 --> 00:00:41,840 สำหรับเสื้อผ้า 11 ล้านรถ มันช่วยให้ชนะการทดสอบการปล่อยมลพิษ 12 00:00:41,840 --> 00:00:44,950 >> รุ่นดีเซลเป็น -Certain การออกแบบที่มีซอฟต์แวร์ที่ซับซ้อน 13 00:00:44,950 --> 00:00:48,440 ว่าข้อมูลที่ใช้รวมทั้ง ตำแหน่งของพวงมาลัยและยานพาหนะ 14 00:00:48,440 --> 00:00:51,870 เพิ่มความเร็วในการตรวจสอบรถเป็น ระหว่างการทดสอบการปล่อยก๊าซเรือนกระจก 15 00:00:51,870 --> 00:00:55,650 ภายใต้สถานการณ์ที่เครื่องยนต์ จะช่วยลดการปล่อยก๊าซที่เป็นพิษ 16 00:00:55,650 --> 00:00:59,070 แต่รถที่ถูกขึงเพื่อบายพาส ว่าเมื่อมันถูกขับเคลื่อน 17 00:00:59,070 --> 00:01:03,320 ปล่อยก๊าซเรือนกระจกที่เพิ่มขึ้น 10-40 ครั้งสูงกว่าระดับที่ยอมรับได้ของ EPA 18 00:01:03,320 --> 00:01:04,280 >> [จบเล่นภาพ] 19 00:01:04,280 --> 00:01:05,220 >> เดวิดเจลัน: ดังนั้นขอ ดูที่นี้ 20 00:01:05,220 --> 00:01:07,250 และดูว่าวิธีการนี​​้ อาจจะมีการดำเนินการ 21 00:01:07,250 --> 00:01:09,680 และวิธีการนี​​้อาจส่งผลกระทบ รถยนต์จำนวนมากเช่นนี้ 22 00:01:09,680 --> 00:01:12,840 ดังนั้นในมือของฉันที่นี่กด ที่ถูกปล่อยออกโดย EPA-- 23 00:01:12,840 --> 00:01:14,620 สิ่งแวดล้อม ซึ่งหน่วยงานคุ้มครอง 24 00:01:14,620 --> 00:01:18,032 เป็นหน่วยงานกำกับดูแลของสหรัฐว่า จัดการปัญหาสิ่งแวดล้อม 25 00:01:18,032 --> 00:01:19,740 แล้วที่เกิดขึ้นจริง แจ้งให้ทราบทางกฎหมายที่เป็น 26 00:01:19,740 --> 00:01:22,420 ส่งให้กับโฟล์คสวาเกนเพียงไม่กี่วันที่ผ่านมา 27 00:01:22,420 --> 00:01:26,530 >> ดังนั้น EPA เขียนและเปิดเผยในขณะนี้ สาธารณชนเป็นซอฟต์แวร์ที่ซับซ้อน 28 00:01:26,530 --> 00:01:29,390 อัลกอริทึมในบางอย่าง รถโฟล์คสวาเกนที่ตรวจพบ 29 00:01:29,390 --> 00:01:32,630 เมื่อรถอยู่ระหว่างการ ปล่อยก๊าซเรือนกระจกอย่างเป็นทางการของการทดสอบ 30 00:01:32,630 --> 00:01:36,505 และเปลี่ยนการปล่อยเต็มรูปแบบ ควบคุมเฉพาะในระหว่างการทดสอบ 31 00:01:36,505 --> 00:01:38,380 ประสิทธิผลของ เหล่านี้มลพิษยานพาหนะ 32 00:01:38,380 --> 00:01:43,260 อุปกรณ์ควบคุมการปล่อยก๊าซเรือนกระจกเป็นอย่างมาก ลดลงในช่วงการขับรถปกติ 33 00:01:43,260 --> 00:01:44,320 สถานการณ์ 34 00:01:44,320 --> 00:01:48,190 ส่งผลให้รถยนต์ที่ตอบสนองความ มาตรฐานในห้องปฏิบัติการหรือการทดสอบ 35 00:01:48,190 --> 00:01:52,790 สถานี แต่ในระหว่างการดำเนินงานปกติ ปล่อย oxides-- ไนโตรเจนหรือ NOx-- 36 00:01:52,790 --> 00:01:54,950 ที่สูงถึง 40 เท่ามาตรฐาน 37 00:01:54,950 --> 00:01:58,220 ซอฟแวร์ที่ผลิตโดยโฟล์คสวาเกน ได้นำมาอ้างเป็นใบเสนอราคาอุปกรณ์ความพ่ายแพ้ 38 00:01:58,220 --> 00:02:00,650 ตามที่กำหนดโดยการทำความสะอาด พระราชบัญญัติอากาศในสหรัฐอเมริกา 39 00:02:00,650 --> 00:02:03,410 >> พวกเขาไปในการที่จะบอกว่า ของ EPA และหน่วยงานอื่น 40 00:02:03,410 --> 00:02:07,020 เปิดอุปกรณ์ความพ่ายแพ้ ซอฟแวร์หลังจากการวิเคราะห์ที่เป็นอิสระ 41 00:02:07,020 --> 00:02:09,660 โดยนักวิจัยที่เวสต์ มหาวิทยาลัยเวอร์จิเนีย 42 00:02:09,660 --> 00:02:14,160 มลพิษ NOx ก่อให้เกิดการ ก๊าซไนโตรเจนไดออกไซด์, ระดับพื้นดินโอโซน 43 00:02:14,160 --> 00:02:15,700 และฝุ่นละอองได้ดี 44 00:02:15,700 --> 00:02:18,090 การได้รับสารเหล่านี้ มลพิษได้รับการเชื่อมโยง 45 00:02:18,090 --> 00:02:20,870 ที่มีความหลากหลายของ ผลกระทบต่อสุขภาพอย่างรุนแรง 46 00:02:20,870 --> 00:02:23,637 รวมทั้งโรคหอบหืดเพิ่มขึ้น การโจมตีและระบบทางเดินหายใจอื่น ๆ 47 00:02:23,637 --> 00:02:26,470 การเจ็บป่วยที่สามารถร้ายแรงพอ จะส่งคนไปที่โรงพยาบาล 48 00:02:26,470 --> 00:02:28,660 การสัมผัสกับโอโซนและ อนุภาคยังมี 49 00:02:28,660 --> 00:02:31,960 ที่เกี่ยวข้องกับการคลอดก่อนกำหนด เสียชีวิตเนื่องจากระบบทางเดินหายใจที่เกี่ยวข้อง 50 00:02:31,960 --> 00:02:35,690 หรือผลกระทบที่เกี่ยวข้องกับโรคหัวใจและหลอดเลือด 51 00:02:35,690 --> 00:02:38,940 เด็กผู้สูงอายุคนที่มี โรคทางเดินหายใจมาก่อน 52 00:02:38,940 --> 00:02:42,840 โดยเฉพาะอย่างยิ่งที่มีความเสี่ยง ผลกระทบต่อสุขภาพของสารมลพิษเหล่านี้ 53 00:02:42,840 --> 00:02:45,056 >> พอเพียงคือการพูดก็ค่อนข้างรุนแรง 54 00:02:45,056 --> 00:02:46,930 และให้ไปอ่าน เพียงหนึ่งในข้อความที่ตัดตอนมามากขึ้น 55 00:02:46,930 --> 00:02:49,370 และจากนั้นเราจะดูที่ ความหมายพื้นฐาน 56 00:02:49,370 --> 00:02:50,920 นี้ในบริบทของรถ 57 00:02:50,920 --> 00:02:53,730 โดยเฉพาะอย่างโฟล์คสวาเกน ผลิตและติดตั้ง 58 00:02:53,730 --> 00:02:56,210 ซอฟแวร์ในสิ่งที่เรียกว่า ควบคุมอิเล็กทรอนิกส์ 59 00:02:56,210 --> 00:02:59,320 module-- หรือ ECM-- ของ ยานพาหนะเหล่านี้รู้สึกว่า 60 00:02:59,320 --> 00:03:03,580 เมื่อรถกำลังถูกทดสอบสำหรับ การปฏิบัติตามมาตรฐานการปล่อย EPA 61 00:03:03,580 --> 00:03:07,510 ขึ้นอยู่กับปัจจัยการผลิตต่าง ๆ รวมทั้ง ตำแหน่งของพวงมาลัยรถ 62 00:03:07,510 --> 00:03:11,280 ความเร็วของเครื่องยนต์ในช่วงระยะเวลาของ การดำเนินงานและความกดดันของบรรยากาศ, 63 00:03:11,280 --> 00:03:13,720 ปัจจัยการผลิตเหล่านี้ได้อย่างแม่นยำ ติดตามพารามิเตอร์ 64 00:03:13,720 --> 00:03:17,600 ในขั้นตอนการทดสอบของรัฐบาลกลางที่ใช้ในการ การทดสอบการปล่อยก๊าซเรือนกระจกสำหรับการรับรอง EPA 65 00:03:17,600 --> 00:03:18,400 วัตถุประสงค์ 66 00:03:18,400 --> 00:03:21,850 >> ในระหว่างการทดสอบการปล่อยของ EPA, ยานพาหนะซอฟต์แวร์ ECM 67 00:03:21,850 --> 00:03:25,060 วิ่งซอฟต์แวร์ที่ผลิต ผลการปล่อยก๊าซเรือนกระจกตาม 68 00:03:25,060 --> 00:03:28,340 ทุกครั้งอื่น ๆ รถซอฟต์แวร์ ECM 69 00:03:28,340 --> 00:03:31,090 วิ่งถนนที่แยกจากกัน การสอบเทียบที่ลดลง 70 00:03:31,090 --> 00:03:34,360 ประสิทธิภาพของ ระบบการควบคุมการปล่อยก๊าซโดยรวม 71 00:03:34,360 --> 00:03:37,864 โดยเฉพาะการเร่งปฏิกิริยาเลือก การลดลงของการผลิตแบบลี NOx trap-- 72 00:03:37,864 --> 00:03:39,280 ซึ่งเราจะเห็นเกี่ยวกับในช่วงเวลาที่ 73 00:03:39,280 --> 00:03:43,040 เป็นผลให้การปล่อย NOx เพิ่มขึ้นโดยปัจจัยที่ 10-40 ครั้ง 74 00:03:43,040 --> 00:03:47,450 ดังกล่าวข้างต้นในระดับที่สอดคล้องกับ EPA ขึ้นอยู่กับชนิดของวงจรไดรฟ์ 75 00:03:47,450 --> 00:03:50,800 >> ดังนั้นสิ่งนี้จริงๆหมายถึงและ รหัสแหล่งที่มาการทำงานซอฟต์แวร์ 76 00:03:50,800 --> 00:03:53,190 ในโฟล์คสวาเกนไม่ได้ ยังได้รับการเปิดเผยต่อสาธารณชน 77 00:03:53,190 --> 00:03:56,460 คือการที่มีประสิทธิภาพนี้ เทียบเท่าคือบางแห่งมีอยู่ภายใน 78 00:03:56,460 --> 00:03:57,830 รหัสโฟล์คสวาเกน 79 00:03:57,830 --> 00:04:02,200 หากคุณกำลังมีการทดสอบและถ้ารถ ตรวจพบปัจจัยแวดล้อมบางอย่าง 80 00:04:02,200 --> 00:04:04,330 เช่นพวงมาลัย ตำแหน่งหรือการเคลื่อนไหว 81 00:04:04,330 --> 00:04:06,710 หรือขาดมันของรถหรือ ใด ๆ จำนวนของปัจจัยอื่น ๆ 82 00:04:06,710 --> 00:04:09,940 ที่มีการตั้งสมมติฐานในปัจจุบัน เป็นส่วนหนึ่งของสูตรนี้ 83 00:04:09,940 --> 00:04:12,370 พวกเขาเพียงแค่บนเปิด การปล่อยการควบคุมเต็มรูปแบบ 84 00:04:12,370 --> 00:04:15,670 ในคำอื่น ๆ พวกเขาเริ่มต้น เปล่งน้อยมลพิษ 85 00:04:15,670 --> 00:04:18,769 >> อื่น ๆ ในทุกสถานการณ์อื่น ๆ เมื่อมันไม่ได้ตรวจพบว่าเป็น 86 00:04:18,769 --> 00:04:20,790 ในห้องปฏิบัติการที่พวกเขาทำไม่ได้ 87 00:04:20,790 --> 00:04:24,320 และเพื่อให้คุณสามารถลดความซับซ้อนนี้ลงมากขึ้น pseudocode คอนกรีตที่มีบางสิ่งบางอย่าง 88 00:04:24,320 --> 00:04:24,820 อย่างนี้. 89 00:04:24,820 --> 00:04:27,810 ถ้าล้อจะเปลี่ยน แต่ พวงมาลัยไม่ได้ชี้นำ 90 00:04:27,810 --> 00:04:30,060 ว่ารถที่อยู่ในบางส่วน ชนิดของการสูบหมุน 91 00:04:30,060 --> 00:04:32,550 แต่ในบางชนิด คลังสินค้าถูกทดสอบ 92 00:04:32,550 --> 00:04:36,070 แล้วทำตัวเป็น EPA ต้องการให้คุณ 93 00:04:36,070 --> 00:04:37,960 มิฉะนั้นจะไม่ 94 00:04:37,960 --> 00:04:40,420 ดังนั้นลองมาดู วิดีโอสั้น ๆ ว่า 95 00:04:40,420 --> 00:04:45,391 จะดูในสิ่งที่เป็นผลกระทบ มีกลไกนี้จริง 96 00:04:45,391 --> 00:04:48,620 >> [วิดีโอเล่นภาพ] 97 00:04:48,620 --> 00:04:52,800 >> -Last ศุกร์ EPA ประกาศว่าบาง ออดี้โฟล์คสวาเกนคันระหว่าง 2009 98 00:04:52,800 --> 00:04:55,840 และในปีนี้ได้ใช้ อุปกรณ์ความพ่ายแพ้ที่เรียกว่า 99 00:04:55,840 --> 00:04:59,060 จะได้รับรอบกฎหมายการปล่อยก๊าซ ที่ออกแบบมาเพื่อรักษาความสะอาดอากาศ 100 00:04:59,060 --> 00:05:01,700 แต่สิ่งที่หมายความว่าว่า? 101 00:05:01,700 --> 00:05:04,666 >> ดีรถยนต์สมัยใหม่มีหลายสิบ ของเครื่องคอมพิวเตอร์ในพวกเขา 102 00:05:04,666 --> 00:05:07,040 และบางส่วนของคอมพิวเตอร์เหล่านั้น ช่วยประสานการทำงาน 103 00:05:07,040 --> 00:05:09,590 ของเครื่องยนต์ที่ดีที่สุดสำหรับ ผลการดำเนินงานในขณะที่การทำให้แน่ใจว่า 104 00:05:09,590 --> 00:05:12,340 ว่าจะไม่มีขยะมากเกินไป ออกมาจากท่อไอเสีย 105 00:05:12,340 --> 00:05:15,170 พวกเขาได้รับจริงการทำงาน วิธีนี้เป็นเวลาหลายทศวรรษที่ผ่านมาในขณะนี้ 106 00:05:15,170 --> 00:05:17,380 โดยทั่วไปทุกส่วน ของเครื่องยนต์รถที่ทันสมัย 107 00:05:17,380 --> 00:05:20,080 มีเซ็นเซอร์หรือตัวควบคุม ในนั้นและคอมพิวเตอร์เหล่านี้ 108 00:05:20,080 --> 00:05:23,460 กำลังอ่านข้อมูลในพันของ ครั้งต่อการปรับเปลี่ยนการทำสอง 109 00:05:23,460 --> 00:05:26,220 เช่นอัตราส่วนของน้ำมันเชื้อเพลิงกับอากาศ ที่จะเข้าสู่กระบอกสูบ 110 00:05:26,220 --> 00:05:28,730 >> เหล่านี้โกงโฟล์คสวาเกน และรูปแบบของออดี้เป็นดีเซล 111 00:05:28,730 --> 00:05:30,890 และดีเซลมีมากขึ้น คอมพิวเตอร์ที่สำคัญจริงๆ 112 00:05:30,890 --> 00:05:34,030 พารามิเตอร์ควบคุมซึ่งเป็น ปริมาณของน้ำมันเชื้อเพลิงที่เผาไหม้ไป 113 00:05:34,030 --> 00:05:35,200 เข้าไปในไอเสีย 114 00:05:35,200 --> 00:05:36,310 ตอนนี้เสียงที่ไม่ดี 115 00:05:36,310 --> 00:05:39,642 ไม่ได้เสียงเหมือนที่คุณต้องการ เผาไหม้น้ำมันเชื้อเพลิงที่จะเข้าสู่ไอเสีย 116 00:05:39,642 --> 00:05:41,600 แต่ในกรณีของที่ ดีเซลคุณมีสิ่งที่ 117 00:05:41,600 --> 00:05:46,110 เรียกว่ากับดัก NOx ซึ่งเป็นอุปกรณ์ที่ ดูดซับและกับดักสำหรับไนโตรเจนออกไซด์ 118 00:05:46,110 --> 00:05:48,880 ที่มีสารมลพิษที่จะ เป็นอย่างอื่นไปสู่​​ชั้นบรรยากาศ 119 00:05:48,880 --> 00:05:53,040 และผลของกับดัก NOx ที่ จะเพิ่มขึ้นด้วยน้ำมันเชื้อเพลิงที่เผาไหม้ 120 00:05:53,040 --> 00:05:56,650 ดังนั้นอุปกรณ์ความพ่ายแพ้เป็นโปรแกรมพิเศษ ภายในเครื่องคอมพิวเตอร์เหล่านี้ที่สามารถทำให้มัน 121 00:05:56,650 --> 00:05:59,527 มีลักษณะเหมือนรถที่เป็นไปตามการปล่อยก๊าซ มาตรฐานแม้ในขณะที่มันไม่ได้ 122 00:05:59,527 --> 00:06:01,110 โฟล์คสวาเกนมีปัญหาในมือของ 123 00:06:01,110 --> 00:06:04,050 เครื่องยนต์ดีเซลของมันเป็นที่รู้จัก สำหรับการประหยัดน้ำมันเชื้อเพลิงที่ดี 124 00:06:04,050 --> 00:06:07,510 แต่กับดัก NOx การทำงานเพียงอย่างดี เชื้อเพลิงมากขึ้นเมื่อมีการใช้ 125 00:06:07,510 --> 00:06:10,460 ดังนั้นรถที่จะตรวจสอบ โดยใช้อุปกรณ์ความพ่ายแพ้นี้ 126 00:06:10,460 --> 00:06:13,870 เมื่อมันได้รับการปล่อย การทดสอบก็จะใช้น้ำมันเชื้อเพลิงมากขึ้น 127 00:06:13,870 --> 00:06:16,830 ทำให้การทำงานกับดัก NOx ดี การปล่อยก๊าซจะปรับ 128 00:06:16,830 --> 00:06:21,130 แต่แล้วคุณจะได้รับบนถนนที่อุปกรณ์ จะปิดที่คุณกำลังเผาไหม้น้ำมันเชื้อเพลิงน้อยลง 129 00:06:21,130 --> 00:06:24,256 แต่คุณใส่มากถึง 40 ครั้ง มลพิษมากขึ้นสู่ชั้นบรรยากาศ 130 00:06:24,256 --> 00:06:26,130 แต่วิธีการทำห่า รถรู้ว่ามันเป็น 131 00:06:26,130 --> 00:06:27,720 การทดสอบการปฏิบัติตามการปล่อย? 132 00:06:27,720 --> 00:06:30,590 ของ EPA บอกว่ามันเป็นที่มีความซับซ้อน ระบบการตรวจสอบว่าสิ่งที่ 133 00:06:30,590 --> 00:06:34,090 เช่นตำแหน่งที่พวงมาลัย ความเร็วนานแค่ไหนเครื่องยนต์บน 134 00:06:34,090 --> 00:06:35,507 และแม้กระทั่งความดันบรรยากาศ 135 00:06:35,507 --> 00:06:37,673 ในคำอื่น ๆ ที่มี ไม่มีวิธีนี้เป็นอุบัติเหตุ 136 00:06:37,673 --> 00:06:40,260 เนื่องจากซอฟต์แวร์เป็น ได้รับการออกแบบอย่างระมัดระวังในการตรวจสอบ 137 00:06:40,260 --> 00:06:41,630 การทดสอบการปล่อยอย่างเป็นทางการ 138 00:06:41,630 --> 00:06:43,588 นั่นเป็นบางอย่างสวย การหลอกลวงและที่ 139 00:06:43,588 --> 00:06:45,420 ทำไมโฟล์คสวาเก้นใน เช่นปัญหาร้ายแรง 140 00:06:45,420 --> 00:06:48,600 ในความเป็นจริงพวกเขาซีอีโอมาร์ติน Winterkorn เพียงก้าวลง 141 00:06:48,600 --> 00:06:49,820 >> ดังนั้นสิ่งที่เกิดขึ้นต่อไป? 142 00:06:49,820 --> 00:06:53,900 ดีถ้าคุณเป็นหนึ่งในช่วงครึ่งล้าน Jettas ดีเซลบีทเทิล, โรงแรมพร้อมสนามกอล์ฟ, Passats, 143 00:06:53,900 --> 00:06:56,220 หรือออดี้ A3s ผลกระทบ, ข่าวดีก็คือเป็น 144 00:06:56,220 --> 00:06:57,886 ที่รถของคุณยังคงมีความปลอดภัยในการขับรถ 145 00:06:57,886 --> 00:07:00,510 คุณไม่จำเป็นต้องที่จะนำมันออกไป จนกว่าปัญหาโฟล์คสวาเกนเรียกคืน 146 00:07:00,510 --> 00:07:02,509 แต่ในบางจุดที่พวกเขากำลัง อาจจะมี 147 00:07:02,509 --> 00:07:04,230 การปรับปรุงซอฟแวร์ที่อยู่ภายในรถของคุณ 148 00:07:04,230 --> 00:07:06,927 ที่เกิดขึ้นเมื่อคุณอาจ ได้รับไมล์น้อยต่อถัง 149 00:07:06,927 --> 00:07:09,260 ทนายความที่มีอยู่แล้วใส่เกียร์ สำหรับคดีการเรียน 150 00:07:09,260 --> 00:07:12,500 เจ้าของนั้นอาจได้รับการชดเชย ที่จุดในอนาคตบาง 151 00:07:12,500 --> 00:07:15,832 แต่ที่ไม่ได้ไป เกิดขึ้นในเร็ว ๆ นี้ 152 00:07:15,832 --> 00:07:16,711 >> [จบเล่นภาพ] 153 00:07:16,711 --> 00:07:19,960 เดวิดเจลัน: ดังนั้นนี้จริงยก คำถามที่น่าสนใจภาพใหญ่ 154 00:07:19,960 --> 00:07:20,660 ขณะที่ให้ความไว้วางใจ 155 00:07:20,660 --> 00:07:21,160 ใช่มั้ย? 156 00:07:21,160 --> 00:07:24,300 เราทุกคนมี iPhones หรือหุ่นยนต์หรือ สิ่งที่อยู่ในกระเป๋าของเราส่วนใหญ่มีแนวโน้ม 157 00:07:24,300 --> 00:07:26,500 วันนี้หรือแล็ปท็อป บนตักของเราที่มี 158 00:07:26,500 --> 00:07:28,510 ซอฟต์แวร์ที่ทำงานทำ โดยแอปเปิ้ลและไมโครซอฟ 159 00:07:28,510 --> 00:07:30,710 และอัดแน่นของ บริษัท อื่น ๆ 160 00:07:30,710 --> 00:07:34,240 แต่วิธีการที่เราจะรู้ว่าสิ่งที่ ผลิตภัณฑ์ซอฟต์แวร์เหล่านี้จะทำ 161 00:07:34,240 --> 00:07:37,680 เป็นจริงสิ่งเหล่านี้ บริษัท กล่าวว่าพวกเขากำลังทำอะไร? 162 00:07:37,680 --> 00:07:39,610 >> ยกตัวอย่างเช่นผู้ที่จะ พูดได้ว่าทุกครั้งที่คุณ 163 00:07:39,610 --> 00:07:42,200 โทรบน iPhone ของคุณ หรือโทรศัพท์ Android หรือเหมือน 164 00:07:42,200 --> 00:07:45,650 หมายเลขโทรศัพท์ที่ยังไม่ได้ ถูกอัพโหลดไปยังเซิร์ฟเวอร์ของ บริษัท บางส่วน 165 00:07:45,650 --> 00:07:48,399 เพราะโปรแกรมบางอย่างที่คุณได้ เขียนไม่ว่าจะเป็นการดำเนินงาน 166 00:07:48,399 --> 00:07:51,070 ระบบตัวเองเช่น iOS หรือ Android, หรือเพราะคุณได้ดาวน์โหลด 167 00:07:51,070 --> 00:07:53,880 บางแอพพลิเคของบุคคลที่สาม ที่ใดจะฟัง 168 00:07:53,880 --> 00:07:57,120 ทุกสิ่งที่คุณกำลังพิมพ์หรือ ทุกสิ่งที่คุณกำลังจริงว่า 169 00:07:57,120 --> 00:07:59,500 คุณจะรู้ว่าเมื่อ พวกคุณกำลังทำงานเสียงดังกราว 170 00:07:59,500 --> 00:08:02,590 หรือทำให้การรวบรวมของคุณ ซอฟต์แวร์ของตัวเองใน CS50 วิธี 171 00:08:02,590 --> 00:08:06,080 คุณทำพนักงานของตัวเองที่ CS50, โดยวิธีการของห้องสมุด CS50, 172 00:08:06,080 --> 00:08:08,690 ยังไม่ได้เข้าสู่ระบบทุก สตริงที่คุณเคยเคย 173 00:08:08,690 --> 00:08:10,276 หรือทุกนิ้วคุณเคยเคย? 174 00:08:10,276 --> 00:08:12,900 ดีที่คุณสามารถมองอย่างแน่นอน รหัสที่มาสำหรับบางสิ่งบางอย่าง 175 00:08:12,900 --> 00:08:15,233 เช่นห้องสมุด CS50 คุณ สามารถดูรหัสแหล่งที่มา 176 00:08:15,233 --> 00:08:18,170 สำหรับระบบปฏิบัติการลินุกซ์ ที่ทำงานบน CS50 IDE 177 00:08:18,170 --> 00:08:23,090 แต่ที่น่าตื่นตาตื่นใจนำเสนอ ที่ได้รับกลับมาในปี 1984 178 00:08:23,090 --> 00:08:26,730 ในการรับของรางวัลทัวริงโดย นักวิทยาศาสตร์คอมพิวเตอร์ที่มีชื่อเสียงมากเป็นที่รู้จักกัน 179 00:08:26,730 --> 00:08:29,750 as-- ชื่อเคน ธ อมป์สันที่ ได้รับรางวัลทัวริงซึ่ง 180 00:08:29,750 --> 00:08:33,500 คือการจัดเรียงของวิทยาการคอมพิวเตอร์ รางวัลโนเบล, ถ้าคุณจะ 181 00:08:33,500 --> 00:08:35,309 สำหรับการทำงานของเขาใน ระบบปฏิบัติการที่เรียกว่า 182 00:08:35,309 --> 00:08:39,039 Unix ซึ่งเป็นคล้ายกันมากใน จิตวิญญาณกับสิ่งที่เราใช้ซึ่งเป็นลินุกซ์ 183 00:08:39,039 --> 00:08:41,960 และคำถามที่เขาถามเขา คำพูดที่ได้รับการยอมรับเป็นหลัก 184 00:08:41,960 --> 00:08:44,910 วางกรอบการทำงานสำหรับ ปีและปีของการสนทนา 185 00:08:44,910 --> 00:08:46,970 เกี่ยวกับความไว้วางใจและการรักษาความปลอดภัยเป็นอย่างนี้ 186 00:08:46,970 --> 00:08:50,410 สิ่งที่ขอบเขตควรไว้วางใจหนึ่ง คำสั่งที่ program-- ชิ้น 187 00:08:50,410 --> 00:08:53,010 ของ software-- ฟรีม้าโทรจัน? 188 00:08:53,010 --> 00:08:56,500 บางทีมันอาจจะเป็นสิ่งสำคัญมากที่จะไว้วางใจ คนที่เขียนซอฟแวร์ 189 00:08:56,500 --> 00:08:58,650 >> และในความเป็นจริงเราได้เชื่อมโยง ที่จะพูดว่าเขา 190 00:08:58,650 --> 00:09:02,400 ให้เมื่อรับรางวัลนี้ ในยุค 80 ในเว็บไซต์ของ CS50 191 00:09:02,400 --> 00:09:04,030 ภายใต้หน้าบรรยายสำหรับวันนี้ 192 00:09:04,030 --> 00:09:06,071 เพราะสิ่งที่คุณจะเห็น คือว่าเขาจริงให้ 193 00:09:06,071 --> 00:09:09,430 เป็นตัวอย่างที่ค่อนข้างง่ายของวิธีการที่แม้แต่ คอมไพเลอร์เช่นเสียงดังกราวหรืออะไรก็ตาม 194 00:09:09,430 --> 00:09:13,950 คอมไพเลอร์คนอื​​่น ๆ ได้ใช้ในอดีตที่ผ่านมา สิ่งที่ถ้าคอมไพเลอร์ที่ฝังอยู่ในพวกเรา 195 00:09:13,950 --> 00:09:18,190 ตัวเองกำลังใช้เป็นเพียงเล็กน้อยถ้า สภาพที่เป็นหลักกล่าวว่า 196 00:09:18,190 --> 00:09:22,360 ถ้าคุณสังเกตเห็นว่ารหัสนี้จะใช้ ฟังก์ชั่น GetString หรือ GetInt 197 00:09:22,360 --> 00:09:26,600 ฟังก์ชั่นไปข้างหน้าและใส่ ประตูหลังหรือม้าโทรจัน 198 00:09:26,600 --> 00:09:29,340 ดังกล่าวว่าโปรแกรมที่ ขณะนี้มีบางศูนย์ 199 00:09:29,340 --> 00:09:30,930 และคนที่ทำอะไรบางอย่างที่เป็นอันตราย 200 00:09:30,930 --> 00:09:33,080 เข้าสู่ระบบทั้งหมดของคุณ การกดแป้นพิมพ์ข้อมูลที่อัปโหลด 201 00:09:33,080 --> 00:09:35,100 ไปยังเซิร์ฟเวอร์บางอย่างหรืออะไรจริงๆ 202 00:09:35,100 --> 00:09:37,290 >> และสิ่งที่เคน ธ อมป์สัน ไปในการที่จะทำในการพูดคุยของเขา 203 00:09:37,290 --> 00:09:40,580 คือการแสดงให้เห็นว่าแม้ว่า คุณมีการเข้าถึงแหล่งที่มา 204 00:09:40,580 --> 00:09:43,794 รหัสของคอมไพเลอร์ที่ ประสงค์ร้ายอาจจะทำเช่นนี้ 205 00:09:43,794 --> 00:09:46,210 มันไม่สำคัญเพราะ มีไก่และไข่ 206 00:09:46,210 --> 00:09:49,500 ความเป็นจริงในหลาย ๆ ที่ผ่านมา ปีโดยคอมไ​​พเลอร์ 207 00:09:49,500 --> 00:09:51,960 ที่ใช้ในการรวบรวมตัวเอง 208 00:09:51,960 --> 00:09:55,440 ในคำอื่น ๆ ทางด้านหลังเมื่อมีคน ได้มีการเขียนคอมไพเลอร์เป็นครั้งแรก 209 00:09:55,440 --> 00:09:59,060 และหลังจากนั้นเวลาที่พวกเขาได้ปรับปรุง คอมไพเลอร์โดยการเปลี่ยนรหัสแหล่งที่มาของมัน 210 00:09:59,060 --> 00:10:02,020 เพิ่มคุณสมบัติและ recompiling มัน สำหรับคนที่ชอบเราใช้ดี 211 00:10:02,020 --> 00:10:04,270 พวกเขากำลังใช้เก​​่า รุ่นของคอมไพเลอร์ 212 00:10:04,270 --> 00:10:06,370 เพื่อรวบรวมใหม่ รุ่นของคอมไพเลอร์ 213 00:10:06,370 --> 00:10:08,370 และถ้าคุณลองดู ในการพูดคุยที่เขาให้ที่ 214 00:10:08,370 --> 00:10:10,970 คุณจะเห็นว่าเป็นเพราะ ของวัฏจักรที่ 215 00:10:10,970 --> 00:10:14,330 คุณจริงจะมีข้อบกพร่องหรือ ม้าโทรจันที่ฝังอยู่ในซอฟแวร์ 216 00:10:14,330 --> 00:10:14,990 เรากำลังใช้ 217 00:10:14,990 --> 00:10:18,010 และแม้ว่าคุณจะดู รหัสที่มาสำหรับโปรแกรมเหล่านั้น 218 00:10:18,010 --> 00:10:21,550 มันอาจจะไม่ได้เป็นที่เห็นได้ชัด เพราะกลอุบายที่เป็นจริง 219 00:10:21,550 --> 00:10:24,710 ในบางรุ่นเก่าของ คอมไพเลอร์ว่านับตั้งแต่ที่ได้รับ 220 00:10:24,710 --> 00:10:27,340 ภัยคุกคามที่ฉีดเข้าไปในซอฟแวร์ของเรา 221 00:10:27,340 --> 00:10:29,740 >> ซึ่งเป็นเพียงที่จะบอกว่าเรา มันไม่สามารถและไม่ควร 222 00:10:29,740 --> 00:10:32,939 ซอฟแวร์ความไว้วางใจที่ทำงานบนแล็ปท็อปของเรา หรือโทรศัพท์หรือจำนวนของสถ​​านที่ใด ๆ 223 00:10:32,939 --> 00:10:36,230 และในความเป็นจริงต่อไปในภาคการศึกษานี้เมื่อ เราเริ่มพูดคุยเกี่ยวกับการเขียนโปรแกรมเว็บ 224 00:10:36,230 --> 00:10:38,521 และที่จริงเริ่มต้นสร้าง การใช้งานเว็บตัวเอง 225 00:10:38,521 --> 00:10:40,285 เราจะพูดคุยเกี่ยวกับเหล่านี้ ภัยคุกคามและอื่น ๆ 226 00:10:40,285 --> 00:10:43,410 ตอนนี้คุณอาจจะสงสัยและสังเกตเห็น ว่ามีเล็ก ๆ น้อยดาร์ท 227 00:10:43,410 --> 00:10:45,842 เวเดอร์ในคลิปที่ หมิ่นได้แสดงมี 228 00:10:45,842 --> 00:10:47,550 เกี่ยวกับโฟล์คสวาเกน หาก คุณไม่เคยเห็นผม 229 00:10:47,550 --> 00:10:49,190 คิดว่าเราควรจะเบา อารมณ์เพราะนี่คือทั้งหมดที่ 230 00:10:49,190 --> 00:10:50,780 ตกต่ำมากและน่ากลัว 231 00:10:50,780 --> 00:10:52,910 ฉันจะมองย้อนกลับไป ที่ซูเปอร์โบว์ล 2011 232 00:10:52,910 --> 00:10:55,300 เมื่อพาณิชย์ Volkswagen-- นี้ 233 00:10:55,300 --> 00:10:59,620 เกือบจะทำให้พวกเขาน่ารัก again-- ออกอากาศเป็นครั้งแรกในทีวี 234 00:10:59,620 --> 00:11:04,039 มันเป็น 60 คลิปที่สอง ที่ผมคิดว่าคุณจะเพลิดเพลินไปกับ 235 00:11:04,039 --> 00:11:04,705 [วิดีโอเล่นภาพ] 236 00:11:04,705 --> 00:11:08,198 [ดนตรี - จากเรื่อง "STAR WARS"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [สุนัขเปลือก] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [รถเริ่ม] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [จบเล่นภาพ] 243 00:12:05,955 --> 00:12:06,830 เดวิดเจลัน: ใช่ 244 00:12:06,830 --> 00:12:07,663 ฉันเป็นเพียงการตรวจสอบ 245 00:12:07,663 --> 00:12:11,360 รถที่อยู่ในรายชื่อของการละเมิด 246 00:12:11,360 --> 00:12:12,000 ทั้งหมดขวา 247 00:12:12,000 --> 00:12:14,040 ดังนั้นเราดูที่บางส่วน pseudocode ช่วงเวลาที่ผ่านมา 248 00:12:14,040 --> 00:12:15,380 และนี่คือที่ใหญ่กว่า ข้อมูลโค้ด pseudocode 249 00:12:15,380 --> 00:12:16,921 ที่เราได้เห็นไม่กี่ครั้งป่านนี้ 250 00:12:16,921 --> 00:12:19,970 และให้ใช้นี้เป็นโอกาส ในขณะนี้ที่จะแนะนำการเขียนโปรแกรมใหม่ 251 00:12:19,970 --> 00:12:23,776 เทคนิคที่เราทำ ดูอัลกอริทึม 252 00:12:23,776 --> 00:12:25,400 สัปดาห์ที่ผ่านมาเมื่อเรามองไปที่การจัดเรียงผสาน 253 00:12:25,400 --> 00:12:28,270 แต่ขอเป็นระเบียบแบบแผนและดูว่า เราอาจจะใช้มันในรหัสที่เกิดขึ้นจริง 254 00:12:28,270 --> 00:12:30,350 และจากนั้นเราจะใช้วิธีนี้ เทคนิคลงที่ถนนมากที่สุด 255 00:12:30,350 --> 00:12:32,000 มีแนวโน้มที่จะแก้ปัญหาอื่น ๆ 256 00:12:32,000 --> 00:12:35,790 >> ดังนั้นนี่เป็นหนึ่งในโปรแกรมแรกที่เรา เคยเขียนไว้ว่าแม้ว่าในรหัส pseudocode 257 00:12:35,790 --> 00:12:37,790 และสิ่งที่โปรแกรมนี้ ได้รับอนุญาตให้เราทำแน่นอน 258 00:12:37,790 --> 00:12:41,510 คือการหาไมค์สมิ ธ ในสมุดโทรศัพท์ 259 00:12:41,510 --> 00:12:46,216 และแจ้งให้ทราบในสายโดยเฉพาะอย่างยิ่งแปด และ 11 ซึ่งมีนี้ไปที่คำสั่ง 260 00:12:46,216 --> 00:12:48,090 และในความเป็นจริงบางอย่าง ภาษา C ในหมู่พวกเขา 261 00:12:48,090 --> 00:12:50,006 ทำจริงมี คำสั่งที่เป็นตัวอักษร 262 00:12:50,006 --> 00:12:52,710 ไปที่ที่ช่วยให้คุณ ข้ามไปยังสายที่เฉพาะเจาะจง 263 00:12:52,710 --> 00:12:55,470 มันขมวดคิ้วเพราะโดยทั่วไปเมื่อ ก็สามารถทำร้ายได้อย่างง่ายดายมาก 264 00:12:55,470 --> 00:12:58,490 และคุณสามารถเริ่มต้นการกระโดดของคุณ โปรแกรมทั่วทุกสถานที่ตรงข้าม 265 00:12:58,490 --> 00:13:00,690 ที่จะใช้ชนิดของ ตรรกะและการควบคุมการไหล 266 00:13:00,690 --> 00:13:04,000 ที่เราเคยใช้ป่านนี้มีเพียง ลูปและเงื่อนไขและไม่ชอบ 267 00:13:04,000 --> 00:13:08,660 >> แต่เราสามารถลดความซับซ้อนของขั้นตอนวิธีนี้ ในรหัส pseudocode ดังต่อไปนี้ 268 00:13:08,660 --> 00:13:11,250 แทนการนี​​้ซ้ำแล้วซ้ำอีก หรือวิธีการวนลูป 269 00:13:11,250 --> 00:13:14,160 ที่เราให้ไปกลับ กลับมาและกลับไปเข้าแถวที่สาม 270 00:13:14,160 --> 00:13:18,300 ทำไมเราไม่เพียงแค่ชนิดของม้าและอื่น ๆ โดยทั่วไปกล่าวว่าในสายเจ็ดและ 10 271 00:13:18,300 --> 00:13:20,570 เพียงแทนที่ทั้งสอง คู่สายด้วย 272 00:13:20,570 --> 00:13:22,810 อื่นถ้าสมิ ธ เป็นก่อนหน้านี้ ในหนังสือเล่มนี้เราจะ 273 00:13:22,810 --> 00:13:25,110 ค้นหาไมค์ใน ครึ่งซ้ายของหนังสือเล่มนี้ 274 00:13:25,110 --> 00:13:28,560 อื่นถ้าสมิ ธ เป็นในภายหลัง หนังสือค้นหาไมค์ในที่เหมาะสม 275 00:13:28,560 --> 00:13:29,540 ครึ่งหนึ่งของหนังสือเล่มนี้ 276 00:13:29,540 --> 00:13:31,180 และแจ้งให้ทราบล่วงหน้าแล้ววัฏจักร 277 00:13:31,180 --> 00:13:31,680 ใช่มั้ย? 278 00:13:31,680 --> 00:13:34,250 ฉันหาไมค์ใน สมุดโทรศัพท์แล้ว 279 00:13:34,250 --> 00:13:37,090 ฉันในที่สุดอาจจะตี เจ็ดเส้นหรือสายอาจจะ 10 280 00:13:37,090 --> 00:13:41,089 และการสอนของฉันกับตัวเองคือการค้นหา สำหรับไมค์ในช่วงครึ่งปีของสมุดโทรศัพท์ 281 00:13:41,089 --> 00:13:42,380 ด้วยวิธีการที่ฉันจะค้นหาไมค์? 282 00:13:42,380 --> 00:13:44,213 ผมอยู่ในช่วงกลางของ หาไมค์ทำไม 283 00:13:44,213 --> 00:13:45,860 คุณจะเรียงลำดับของการส่งฉันในวงกลม? 284 00:13:45,860 --> 00:13:49,590 แต่ที่ตกลงเพราะสิ่งที่เป็น ที่เกิดขึ้นกับขนาดของปัญหา 285 00:13:49,590 --> 00:13:52,630 ตามที่เขียนไว้ในบรรทัดที่ 7 และ 10? 286 00:13:52,630 --> 00:13:54,989 เราไม่ได้บอกว่าเพียงแค่การค้นหา สำหรับไมค์ไมค์ค้นหา 287 00:13:54,989 --> 00:13:56,280 เรากำลังจะบอกว่าสิ่งที่เฉพาะ? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 ค้นหาสำหรับเขาในช่วงครึ่งทางด้านซ้ายของ ครึ่งขวาซึ่งเป็นได้อย่างมีประสิทธิภาพ 290 00:14:01,610 --> 00:14:03,440 ครึ่งหนึ่งของขนาดของปัญหา 291 00:14:03,440 --> 00:14:07,170 ดังนั้นจึงเป็นที่ตกลงว่าเราชนิดของ มีส่วนร่วมในวัฏจักรนี้ 292 00:14:07,170 --> 00:14:09,180 เรื่องนี้เป็นวงกลม เพราะอย่างน้อยเรา 293 00:14:09,180 --> 00:14:11,090 ทำให้ปัญหาที่มีขนาดเล็กและมีขนาดเล็ก 294 00:14:11,090 --> 00:14:14,220 และในที่สุดเรากำลังจะมาถึง กรณีฐานที่เรียกว่าที่ 295 00:14:14,220 --> 00:14:16,780 เรามีเพียงหนึ่งหน้า left-- เป็นอาสาสมัครของเราสัปดาห์ที่ผ่านมา 296 00:14:16,780 --> 00:14:18,684 did-- เรามีหนึ่งหน้า ซ้ายและแล้วเราทำไม่ได้ 297 00:14:18,684 --> 00:14:21,600 จะต้องเก็บหาไมค์สมิ ธ เพราะเขาเป็นอย่างใดอย่างหนึ่งในหน้านั้น 298 00:14:21,600 --> 00:14:23,080 หรือเขาไม่ได้เป็น 299 00:14:23,080 --> 00:14:27,480 >> ดังนั้นวิธีที่เราสามารถใช้ความคิดนี้นี้ การเรียงลำดับของวัฏจักรในรหัสที่เกิดขึ้นจริง? 300 00:14:27,480 --> 00:14:31,030 ดีที่เราสามารถใช้ประโยชน์จากเทคนิค ที่รู้จักกันโดยทั่วไปเรียกซ้ำ 301 00:14:31,030 --> 00:14:33,960 และเราได้เห็นนี้ใน รหัสจำลองสำหรับการจัดเรียงผสานสัปดาห์ที่ผ่านมา 302 00:14:33,960 --> 00:14:37,190 จำได้ว่านี่คือ รหัสจำลองสำหรับการจัดเรียงผสาน 303 00:14:37,190 --> 00:14:40,560 มันเป็นเนื้อหาได้ง่ายกว่า ฟองหรือการเลือกหรือการจัดเรียงแทรก 304 00:14:40,560 --> 00:14:43,310 เพียง แต่ในแง่ของความเรียบง่าย ที่คุณสามารถแสดงมัน 305 00:14:43,310 --> 00:14:46,750 >> แต่นั่นเป็นเพราะ เราเรียงลำดับของ circularly 306 00:14:46,750 --> 00:14:51,350 ว่าค้นหาบางสิ่งบางอย่าง โดยการค้นหาอีกครั้ง 307 00:14:51,350 --> 00:14:53,960 แต่เรากำลังค้นหาทั้งใน ครึ่งครึ่งทางซ้ายหรือทางขวา 308 00:14:53,960 --> 00:14:56,070 และแล้วในที่สุดเรา การควบรวมกิจการในกรณีนี้ 309 00:14:56,070 --> 00:14:58,520 แต่ที่นี่เกินไปกับ ทั้งสองสายการเรียงลำดับ 310 00:14:58,520 --> 00:15:01,320 เราไม่ได้นี้อีกครั้ง ความคิดของการเรียกซ้ำ 311 00:15:01,320 --> 00:15:05,350 และเป็นรูปธรรมสิ่งนี้หมายความว่า, ในบริบทของอัลกอริทึมที่ 312 00:15:05,350 --> 00:15:10,880 คือว่าอัลกอริทึมเป็น recursive ถ้าจะใช้หรือเรียกตัวเอง 313 00:15:10,880 --> 00:15:14,330 >> หรือในแง่ของ C ฟังก์ชั่นคือ recursive-- ฟังก์ชั่นที่เรียกว่า 314 00:15:14,330 --> 00:15:18,510 foo เป็น recursive ถ้า foo, ที่ไหนสักแห่งในรหัสที่มาของมัน 315 00:15:18,510 --> 00:15:21,250 เรียกฟังก์ชัน foo ตัวเอง 316 00:15:21,250 --> 00:15:25,790 และที่ไม่ดีถ้า foo ทั้งหมดไม่เคย คือเรียกตัวเองอีกครั้งและอีกครั้ง 317 00:15:25,790 --> 00:15:30,600 มันตกลงถ้า foo ในที่สุดก็หยุดเช่นเดียวกับ ผสานเรียงลำดับโดยกล่าวว่ารอสักครู่ 318 00:15:30,600 --> 00:15:32,980 ถ้าปัญหานี้เป็นซุปเปอร์ ขนาดเล็กเช่น 319 00:15:32,980 --> 00:15:35,840 หรือผมพบว่าเขาผู้นั้นที่ฉัน มองหาผลตอบแทนเ​​พียง 320 00:15:35,840 --> 00:15:41,000 อย่าซ้ำไม่ได้ วนอีกครั้งเรียกตัวเองว่า 321 00:15:41,000 --> 00:15:44,200 >> ดังนั้นลองมาดูที่ วิธีนี้จริงอาจจะทำงาน 322 00:15:44,200 --> 00:15:48,430 ดังนั้นฉันจะไปข้างหน้าและเปิด สองตัวอย่างรหัสแหล่งที่มาที่นี่ 323 00:15:48,430 --> 00:15:50,321 หนึ่งซึ่งเรียกว่าซิก 0 324 00:15:50,321 --> 00:15:52,320 และนี่คือไม่ได้ทั้งหมด recursive แต่ลอง 325 00:15:52,320 --> 00:15:53,694 ดูสิ่งที่โปรแกรมนี้ไม่ 326 00:15:53,694 --> 00:15:55,737 ผมเคยถอดออกทั้งหมด ความคิดเห็นจากมัน แต่ทั้งหมด 327 00:15:55,737 --> 00:15:58,070 ของรหัสที่มาใน CS50 ของ เว็บไซต์ที่มีการแสดงความคิดเห็นถ้าคุณ 328 00:15:58,070 --> 00:15:59,570 ต้องการที่จะอ่านผ่านมันอีกครั้งในภายหลัง 329 00:15:59,570 --> 00:16:02,010 และให้ทำคู่ ของการตรวจสอบสตินี่ 330 00:16:02,010 --> 00:16:06,640 >> ดังนั้นที่ด้านบนของรหัสนี้, เรามีรวม CS50.h. 331 00:16:06,640 --> 00:16:07,650 นี้ทำอะไร? 332 00:16:07,650 --> 00:16:08,990 ทำไมมันจึงเป็นที่นี่? 333 00:16:08,990 --> 00:16:11,740 ในแง่คนธรรมดาที่เหมาะสมของ 334 00:16:11,740 --> 00:16:12,424 มันทำอะไร? 335 00:16:12,424 --> 00:16:12,858 ใช่ 336 00:16:12,858 --> 00:16:14,160 >> ผู้ชม: เพ​​ื่อให้การทำงานของฟังก์ชั่น GetInt 337 00:16:14,160 --> 00:16:16,243 >> เดวิดเจลัน: เพื่อให้ GetInt งานฟังก์ชั่น 338 00:16:16,243 --> 00:16:18,115 เพราะภายในนี้ ไฟล์ CS50.h ซึ่ง 339 00:16:18,115 --> 00:16:20,950 เราจะเห็นในอีกไม่นาน แง่ของรหัสที่มาของมัน 340 00:16:20,950 --> 00:16:23,270 มีพวงของฟังก์ชั่น declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 และพวงของ others-- และเว้นแต่ เราจะมีสายรวม, 342 00:16:26,950 --> 00:16:29,320 เสียงดังกราวคอมไพเลอร์ไม่ได้ จะรู้ว่ามันมีอยู่ 343 00:16:29,320 --> 00:16:32,400 และเดียวกันจะไปสำหรับสาย สอง int ที่มีการกำหนด 344 00:16:32,400 --> 00:16:35,101 printf ซึ่งเป็นฟังก์ชั่น เราให้ใช้น้อย 345 00:16:35,101 --> 00:16:37,850 ตอนนี้สายสี่ดูเหมือนว่าขี้ขลาดน้อย เพราะมันเป็นเพียงหนึ่งในสายการบิน 346 00:16:37,850 --> 00:16:41,570 มันมีอัฒภาคไม่หยิก การจัดฟันรหัสภายในของมันไม่มี 347 00:16:41,570 --> 00:16:44,640 แต่สิ่งที่เราเรียกว่าได้ สิ่งนี้ในสัปดาห์ที่ผ่านมา? 348 00:16:44,640 --> 00:16:45,140 ใช่ 349 00:16:45,140 --> 00:16:46,060 ดังนั้นต้นแบบ 350 00:16:46,060 --> 00:16:48,390 และทำไมเรามี ต้นแบบซึ่งดูเหมือนว่า 351 00:16:48,390 --> 00:16:51,050 จะเป็นเล็ก ๆ น้อย ๆ ที่ซ้ำซ้อน เพราะโดยปกติเรามักจะ 352 00:16:51,050 --> 00:16:53,474 ดูฟังก์ชันอีกครั้ง ต่อมาในแฟ้มใช่มั้ย? 353 00:16:53,474 --> 00:16:56,390 ดังนั้นทำไมเรา have-- คุณเพียงแค่ เกาหัวของคุณ แต่ฉันจะเอามัน 354 00:16:56,390 --> 00:16:57,302 ใช่ 355 00:16:57,302 --> 00:17:00,000 >> ผู้ชม: [ไม่ได้ยิน] ฟังก์ชั่นหลังจากที่หลัก 356 00:17:00,000 --> 00:17:01,000 เดวิดเจลัน: แน่นอน 357 00:17:01,000 --> 00:17:04,089 เพื่อให้คอมไพเลอร์รู้ว่าคุณ ในที่สุดก็จะกำหนดหรือดำเนินการ 358 00:17:04,089 --> 00:17:06,579 ฟังก์ชั่นหลักว่าหลังจากที่สันนิษฐานว่า 359 00:17:06,579 --> 00:17:08,462 ดังนั้นเสียงดังกราวและส่วนใหญ่ คอมไพเลอร์เป็นชนิดของใบ้ 360 00:17:08,462 --> 00:17:10,510 และพวกเขาจะรู้ว่า สิ่งที่คุณบอกพวกเขา 361 00:17:10,510 --> 00:17:12,569 และถ้าคุณต้องการที่จะใช้ ฟังก์ชั่นที่เรียกว่าซิก 362 00:17:12,569 --> 00:17:15,710 คุณดีกว่าสอนคอมไพเลอร์ ว่ามันมีอยู่ล่วงหน้า 363 00:17:15,710 --> 00:17:17,970 >> ตอนนี้ตัวเองเป็นหลักแม้ แม้ว่ามันจะเป็นพวงของสาย, 364 00:17:17,970 --> 00:17:19,839 สวยคุ้นเคยหวังว่าตอนนี้ 365 00:17:19,839 --> 00:17:21,942 มันมีสิ่งที่ต้องทำในขณะที่ห่วง ที่มีวัตถุประสงค์ในชีวิต 366 00:17:21,942 --> 00:17:24,400 เห็นได้ชัดว่านี่คือการได้รับ จำนวนเต็มบวกจากผู้ใช้ 367 00:17:24,400 --> 00:17:27,349 และเพียงแค่ให้รบกวนเขา หรือเธอจนกว่าพวกเขาจะให้ความร่วมมือ 368 00:17:27,349 --> 00:17:30,670 จากนั้นในบรรทัดที่ 16 ฉันมี การโทรที่น่าสนใจ 369 00:17:30,670 --> 00:17:31,570 IntAnswer 370 00:17:31,570 --> 00:17:33,710 ซึ่งอยู่ทางด้านซ้ายมือ ด้านให้ฉัน Int 371 00:17:33,710 --> 00:17:36,650 ซึ่งสามารถเรียก Answer-- store-- ซึ่งจะจัดเก็บที่เห็นได้ชัด 372 00:17:36,650 --> 00:17:39,090 มูลค่าการกลับมาของซิก 373 00:17:39,090 --> 00:17:41,840 ซิกดังนั้นเป็นเพียง ชื่อโดยพลการ แต่มีความหมาย 374 00:17:41,840 --> 00:17:44,500 ที่ฉันได้มอบให้กับฟังก์ชั่น ที่มีวัตถุประสงค์ในชีวิต 375 00:17:44,500 --> 00:17:47,680 คือการใช้เวลาหนึ่ง argument-- เราจะเรียกมันว่ายังไม่มีใน case-- นี้ 376 00:17:47,680 --> 00:17:52,280 และก็จะใช้ผลรวมของหมายเลขที่ บวกทุกจำนวนบวกที่ 377 00:17:52,280 --> 00:17:53,200 มันมีขนาดเล็กกว่า 378 00:17:53,200 --> 00:17:58,140 >> ดังนั้นถ้าผมผ่านในจำนวน 2 เพื่อ ซิกผมต้องการที่จะเพิ่ม 2 บวก 1 379 00:17:58,140 --> 00:18:00,240 บวก 0-- ไม่ 0-- เพื่อที่ทำให้ผม 3 380 00:18:00,240 --> 00:18:05,320 ถ้าผมผ่านใน 3 ซิกผมต้องการที่จะ มี 3 บวก 2 บวก 1 ซึ่งจะช่วยให้ฉัน 6 381 00:18:05,320 --> 00:18:05,900 เป็นต้น 382 00:18:05,900 --> 00:18:09,750 ดังนั้นมันก็เพิ่มขึ้นทั้งหมด ตัวเลขที่น้อยกว่าหรือเท่ากับไป 383 00:18:09,750 --> 00:18:12,040 >> ตอนนี้ลงมาที่นี่ฉันแค่ไป เพื่อพิมพ์คำตอบ 384 00:18:12,040 --> 00:18:17,330 ดังนั้นในขณะที่การตรวจสอบสติรวดเร็วขอ ทำให้ซิก 0-- เฉือนจุดซิก 0-- 385 00:18:17,330 --> 00:18:18,690 และแจ้งให้เราพิมพ์ใน 2 386 00:18:18,690 --> 00:18:19,960 และฉันแน่นอนจะได้รับ 3 387 00:18:19,960 --> 00:18:21,240 ผมขอพิมพ์ใน 3 388 00:18:21,240 --> 00:18:22,860 แน่นอนฉันได้รับ 6 389 00:18:22,860 --> 00:18:27,636 และถ้าทุกคนสามารถทำคณิตศาสตร์ได้อย่างรวดเร็ว ถ้าผมทำ 50 สิ่งที่ฉันจะได้รับ? 390 00:18:27,636 --> 00:18:29,839 >> ผู้ชม: [ไม่ได้ยิน] 391 00:18:29,839 --> 00:18:30,880 เดวิดเจลัน: ดีไม่มี 392 00:18:30,880 --> 00:18:33,340 แต่ 1275 ซึ่งเป็นสวยใกล้เคียง 393 00:18:33,340 --> 00:18:38,850 ดังนั้นนี่คือผลของการทำ 50 บวก 49 บวก 48 บวก 47 บวก 46 394 00:18:38,850 --> 00:18:40,349 ทั้งหมดทางลงไป 1 395 00:18:40,349 --> 00:18:41,390 เพื่อให้เป็นซิกทั้งหมดไม่ 396 00:18:41,390 --> 00:18:43,350 แต่เรามาดูวิธีการที่เราได้ ดำเนินการได้ในขณะนี้ 397 00:18:43,350 --> 00:18:45,790 ดังนั้นที่นี่เป็นหน้าที่ของตัวเอง 398 00:18:45,790 --> 00:18:49,000 และนี้ไม่ได้ดูเหมือนจะมี สิ่งที่จะทำอย่างไรกับการเรียกซ้ำยัง 399 00:18:49,000 --> 00:18:51,070 ในความเป็นจริงที่เรากำลังใช้ เทคนิคที่โรงเรียนเก่า 400 00:18:51,070 --> 00:18:56,680 ฉันเริ่มต้นตัวแปรที่เรียกว่าผลรวม ศูนย์แล้วฉันมี foreloop ที่นี่ 401 00:18:56,680 --> 00:19:00,790 และฉันประกาศ Int เรียกว่า ผมตั้งค่าเท่ากับ 1- 402 00:19:00,790 --> 00:19:04,080 แม้ว่าฉันจะตั้งค่าเท่ากับ ศูนย์ แต่ตั้งแต่ที่ฉันทำนอกจากนี้ 403 00:19:04,080 --> 00:19:05,340 ที่ใส่ใจถ้าเป็นศูนย์หรืออย่างใดอย่างหนึ่ง 404 00:19:05,340 --> 00:19:06,660 ก็จะไม่มีผล 405 00:19:06,660 --> 00:19:10,110 >> ดังนั้นฉันทำซ้ำตราบใดที่ฉันเป็น น้อยกว่าหรือเท่ากับเมตรซึ่ง 406 00:19:10,110 --> 00:19:11,671 ข้อโต้แย้งที่ถูกส่งผ่านไปใน 407 00:19:11,671 --> 00:19:13,670 และจากนั้นผมก็ให้ การเพิ่มครั้งที่หนึ่งและความเข้าใจ 408 00:19:13,670 --> 00:19:20,010 ของวงทั้งหมดที่ฉันทำคือการทำผลรวม บวกเท่ากับครั้งที่หนึ่งและที่เจตนา 409 00:19:20,010 --> 00:19:22,326 ฉันไม่ต้องการที่จะทำในเรื่องนี้ กรณีเช่นผลรวมบวกบวก 410 00:19:22,326 --> 00:19:24,790 ฉันต้องการที่จะเพิ่มจริง มูลค่าปัจจุบันของฉัน 411 00:19:24,790 --> 00:19:28,190 ซึ่งช่วยให้ได้รับใหญ่และขนาดใหญ่ และที่ใหญ่กว่าเพื่อนับทำงาน 412 00:19:28,190 --> 00:19:30,210 >> แล้วฉันกลับผลรวม 413 00:19:30,210 --> 00:19:33,850 และเพื่อให้คำตอบที่ได้รับผลรวมค่า 414 00:19:33,850 --> 00:19:35,282 และจากนั้นผมพิมพ์ออกมา 415 00:19:35,282 --> 00:19:37,740 ดังนั้นจึงมีโอกาสที่นี่ แต่ชนิดของการลดความซับซ้อน 416 00:19:37,740 --> 00:19:41,260 รหัสนี้แนวคิด และชนิดของระเบิดเป็นอย่างใดอย่างหนึ่ง 417 00:19:41,260 --> 00:19:43,250 คิดในแง่ของ ความเรียบง่ายแม้ว่ามัน 418 00:19:43,250 --> 00:19:45,700 ใช้เวลาในขณะที่การจัดเรียง การชื่นชมว่าทำไมนี้ 419 00:19:45,700 --> 00:19:47,330 ที่มีประสิทธิภาพในตัวอย่างขนาดเล็กเหล่านี้ 420 00:19:47,330 --> 00:19:50,380 นี่คือซิก one-- ดังนั้น รุ่นที่สองของรหัสนี้ 421 00:19:50,380 --> 00:19:55,290 ทุกอย่างขึ้นด้านบนเหมือนกันดังนั้น ว่าเรื่องเช่นเดียวกับเป็นมาก่อน 422 00:19:55,290 --> 00:19:59,220 แต่ตอนนี้ให้ดูที่ การดำเนินงานของซิกมาซึ่ง 423 00:19:59,220 --> 00:20:05,040 ผมเคยเหลาลงไปเพียงเหล่านี้ lines-- สี่สายรหัสจริงๆ 424 00:20:05,040 --> 00:20:06,980 บวกบางวงเล็บปีกกาและพื้นที่สีขาว 425 00:20:06,980 --> 00:20:07,930 >> แต่สิ่งที่ฉันทำ? 426 00:20:07,930 --> 00:20:11,050 ถ้าม. น้อยกว่าหรือเท่ากับ ศูนย์ฉันต้องการที่จะจัดการกับชนิดของ 427 00:20:11,050 --> 00:20:12,490 กรณีที่ง่ายสุด 428 00:20:12,490 --> 00:20:15,450 และถ้าคุณมือฉันเป็นศูนย์หรืออะไร เชิงลบซึ่งเป็นเพียงแปลก 429 00:20:15,450 --> 00:20:17,909 ฉันแค่ไปโดยพลการ แต่กลับเป็นศูนย์อย่างต่อเนื่อง 430 00:20:17,909 --> 00:20:20,200 ฉันไม่ต้องการสิ่งนี้ ได้รับในบางแปลกที่ไม่มีที่สิ้นสุด 431 00:20:20,200 --> 00:20:21,810 ห่วงเพราะเป็นค่าลบ 432 00:20:21,810 --> 00:20:25,070 ดังนั้นฉันแค่พูดว่าถ้าคุณให้ฉัน ศูนย์หรือน้อยผมกลับมาเป็นศูนย์ 433 00:20:25,070 --> 00:20:28,220 >> แต่นั่นเป็นสิ่งที่ดีเพราะนั่นคือ ที่หน้าเดียวสมุดโทรศัพท์ 434 00:20:28,220 --> 00:20:28,790 ที่เหลือ 435 00:20:28,790 --> 00:20:32,660 ฉันกัดออกเป็นปัญหาที่เฉพาะเจาะจงมาก และไม่ได้เรียกร้องอะไรบางอย่างซ้ำ 436 00:20:32,660 --> 00:20:36,580 แต่ในสายที่ 31 สิ่งที่ ฉันดูเหมือนจะทำ? 437 00:20:36,580 --> 00:20:39,780 วงเล็บเป็นเพียงการรักษา สิ่งที่หวังว่าเล็ก ๆ น้อย ๆ ที่ชัดเจน 438 00:20:39,780 --> 00:20:42,110 แต่ทั้งหมดที่ฉันทำคือฉัน กลับ m-- สิ่งที่ 439 00:20:42,110 --> 00:20:45,790 มือคุณ me-- บวก ค่าของขอโทษ m--, 440 00:20:45,790 --> 00:20:49,052 บวกกับค่าของของซิกลบม. 1 441 00:20:49,052 --> 00:20:50,010 ดังนั้นสิ่งนี้หมายความว่าอย่างไร? 442 00:20:50,010 --> 00:20:53,965 ถ้าคุณให้ฉันหมายเลข 3 เป็น input คำตอบที่ฉันต้องการที่จะได้รับในท้ายที่สุด 443 00:20:53,965 --> 00:20:57,307 คือ 6 เพราะ 3 บวก 2 บวก 1 ให้ฉัน 6 444 00:20:57,307 --> 00:20:59,390 แต่ฉันจะคิดเกี่ยวกับ ว่ารหัสนี้จะทำงานอยู่หรือไม่ 445 00:20:59,390 --> 00:21:03,070 ครั้งแรกที่ผมเรียกซิก และฉันผ่านมูลค่า 3 446 00:21:03,070 --> 00:21:07,960 ที่ชอบพูดว่าเกี่ยวกับชิ้นส่วน กระดาษที่นี่เป็นค่า 3 447 00:21:07,960 --> 00:21:09,920 และฉันได้รับการส่งผ่านนี้เป็นซิก 448 00:21:09,920 --> 00:21:13,090 3 จะเห็นได้ชัดไม่น้อยกว่า 0 ดังนั้น สภาพหากไม่ได้ใช้ 449 00:21:13,090 --> 00:21:14,020 อื่นไม่ 450 00:21:14,020 --> 00:21:14,990 ดังนั้นสิ่งที่ฉันจะทำอย่างไร 451 00:21:14,990 --> 00:21:19,902 ผมต้องการที่จะกลับเมตรซึ่งเป็น 3 บวกของซิกลบ 1 เมตร 452 00:21:19,902 --> 00:21:21,110 เพื่อให้ฉันติดตามนี้ 453 00:21:21,110 --> 00:21:22,710 ฉันจะใส่นี้ ชิ้นส่วนของกระดาษลง 454 00:21:22,710 --> 00:21:24,668 และสิ่งที่มีค่าที่จะ ชัดเจนฉันจะผ่าน 455 00:21:24,668 --> 00:21:26,540 เข้าซิกที่จุดในเรื่องนี้หรือไม่? 456 00:21:26,540 --> 00:21:28,080 จำนวนสิ่งที่? 457 00:21:28,080 --> 00:21:28,610 2 ใช่มั้ย? 458 00:21:28,610 --> 00:21:29,670 3 ลบ 1 คือ 2 459 00:21:29,670 --> 00:21:32,000 ดังนั้นผมก็ต้องเล็ก ๆ น้อย ๆ เศษกระดาษที่นี่ 460 00:21:32,000 --> 00:21:33,931 ดังนั้นตอนนี้ซิกจะได้รับการเรียกอีกครั้ง 461 00:21:33,931 --> 00:21:35,930 และฉันได้ใส่จงใจ ลงนี้เพราะ 462 00:21:35,930 --> 00:21:38,070 ชนิดเช่นการหยุดชั่วคราว รุ่นที่ของเรื่อง 463 00:21:38,070 --> 00:21:40,720 เพราะตอนนี้ผมมุ่งเน้น สัญญาณของม. ลบ 1 464 00:21:40,720 --> 00:21:42,660 ดังนั้นม. 3, ม. ลบ 1 คือ 2 465 00:21:42,660 --> 00:21:45,110 ดังนั้นนี่คือ 2 ที่ฉันได้รับการส่งผ่าน 466 00:21:45,110 --> 00:21:48,510 2 จะเห็นได้ชัดไม่น้อยกว่า 0 ดังนั้นกรณีที่ไม่ได้ใช้ 467 00:21:48,510 --> 00:21:53,445 อื่น ๆ ที่ฉันกลับเมตรซึ่งเป็นนี้ สิ่งที่บวกซิกของสิ่งที่มีค่า? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 ดังนั้นหากซิกของ 1- ม. เพราะเป็น ในขณะนี้ 2 เพื่อลบ 2 1 1 470 00:21:59,650 --> 00:22:01,950 ดังนั้นตอนนี้ฉันจะมีเพียงค่า 1 471 00:22:01,950 --> 00:22:04,810 ฉันเพียงแค่ผ่านหมายเลข 1 ไป sigma-- ฟังก์ชั่น 472 00:22:04,810 --> 00:22:09,120 หรือตัวเองเพื่อให้ here-- 1 จะเห็นได้ชัดไม่ได้ น้อยกว่าศูนย์ยังคงใช้ไม่ได้ 473 00:22:09,120 --> 00:22:12,970 >> ผลตอบแทนอื่น ๆ 1 บวกซ​​ิกของอะไร 474 00:22:12,970 --> 00:22:13,470 0 475 00:22:13,470 --> 00:22:14,678 ดังนั้นให้ฉันเพียงแค่จำไว้ว่า 476 00:22:14,678 --> 00:22:15,920 ฉันจะได้รับกลับไปในภายหลังว่า 477 00:22:15,920 --> 00:22:18,060 ตอนนี้ฉันจะไปข้างหน้าและจด หมายเลข 0 เนื่องจากว่าเป็น 478 00:22:18,060 --> 00:22:19,470 การโต้แย้งหรือพารามิเตอร์ของฉัน 479 00:22:19,470 --> 00:22:22,400 ฉันผ่านหมายเลข 0 และในที่สุดกระบวนการนี​​้ 480 00:22:22,400 --> 00:22:25,760 เพียงแค่ทำซ้ำตัวเองโฆษณา nauseum ไม่หยุดเพราะสิ่งที่ 481 00:22:25,760 --> 00:22:28,820 ฉันจะทำทันทีเมื่อฉันเห็นนี้ 0? 482 00:22:28,820 --> 00:22:29,790 ฉันกลับเป็นศูนย์ 483 00:22:29,790 --> 00:22:31,790 ดังนั้นตอนนี้คุณต้องย้อนกลับเรื่อง 484 00:22:31,790 --> 00:22:34,430 >> ถ้าตอนนี้ผมย้อนกลับไปในเวลาที่ สิ่งที่เป็นสิ่งที่ล่าสุด 485 00:22:34,430 --> 00:22:36,670 ฉันไม่ได้ถ้าคุณอย่างแท้จริง กรอกลับวิดีโอหรือไม่ 486 00:22:36,670 --> 00:22:41,630 ฉันจะไปรับล่าสุด ที่ 1 และที่ทำให้ผม 1 บวก 1 0 487 00:22:41,630 --> 00:22:44,100 ถ้าฉันให้ rewinding เรื่องที่จะให้ฉัน 488 00:22:44,100 --> 00:22:46,880 2 บวกนี้ค่าการทำงานซึ่งเป็น 1 489 00:22:46,880 --> 00:22:47,789 ดังนั้นที่ 3 490 00:22:47,789 --> 00:22:49,330 และแล้วฉันจะให้ rewinding 491 00:22:49,330 --> 00:22:54,220 ครั้งแรกที่ผมใส่ลงจำนวน ดังนั้น 3-- 3 บวก 3 ให้ฉัน 6 492 00:22:54,220 --> 00:22:57,272 >> และตอนนี้ถ้าคุณได้กรอ วิดีโอจนถึงจุดนี้ 493 00:22:57,272 --> 00:22:58,980 ครั้งนี้เป็นอย่างมาก คำถามแรกที่ผมถาม 494 00:22:58,980 --> 00:23:01,450 เมื่อผ่านไป 3 สิ่งที่เป็นซิก 3? 495 00:23:01,450 --> 00:23:04,204 มันเป็นเรื่องจริงที่ 6 ผลรวมของ ชิ้นส่วนทั้งหมดเหล่านี้ที่ทำจากกระดาษ 496 00:23:04,204 --> 00:23:07,120 ดังนั้นหากที่ใช้เวลาเพียงเล็กน้อยในขณะที่จะ มัดใจรอบที่ดี 497 00:23:07,120 --> 00:23:10,700 แต่คิดว่ามันเป็น little-- มัน เป็นเจตนามากที่ผมซ้อนกัน 498 00:23:10,700 --> 00:23:12,990 ตัวเลขเหล่านี้ด้านบนของแต่ละอื่น ๆ 499 00:23:12,990 --> 00:23:17,440 เป็นชนิดของเหมือนมี memory-- บันทึกในเวลาที่ 500 00:23:17,440 --> 00:23:19,940 เช่นเครื่องฟอกในวิดีโอ, แน่นอนว่าผมสามารถย้อนกลับใน 501 00:23:19,940 --> 00:23:24,350 และเรากำลังจะกลับมา อุปมาที่ในเพียงนิด ๆ หน่อย ๆ 502 00:23:24,350 --> 00:23:28,240 >> แต่ก่อนก็จะเปิดออกว่ามี จำนวนมาก geeks และคนที่ตลก 503 00:23:28,240 --> 00:23:29,614 ผมคิดว่าที่ Google 504 00:23:29,614 --> 00:23:31,530 จะเป็นคนที่มาก ดีที่ใจ Googling 505 00:23:31,530 --> 00:23:34,270 ขึ้นมาเพียงสักครู่และ ช่วยฉันค้นหาบางสิ่งบางอย่าง? 506 00:23:34,270 --> 00:23:35,650 มากที่สำคัญที่ต่ำมาก 507 00:23:35,650 --> 00:23:37,870 คนที่ไม่เคย เกิดขึ้นก่อนที่อาจจะ 508 00:23:37,870 --> 00:23:38,370 ตกลง. 509 00:23:38,370 --> 00:23:39,030 ใช่? 510 00:23:39,030 --> 00:23:39,530 เข้ามา. 511 00:23:39,530 --> 00:23:41,410 มาลง 512 00:23:41,410 --> 00:23:42,183 คุณชื่ออะไร? 513 00:23:42,183 --> 00:23:42,870 >> SAM: แซม 514 00:23:42,870 --> 00:23:44,290 >> เดวิดเจลัน: แซมมาลง 515 00:23:44,290 --> 00:23:45,320 นี้เป็นเหมือนกัน 516 00:23:45,320 --> 00:23:46,280 ยินดีที่ได้พบคุณ. 517 00:23:46,280 --> 00:23:46,780 เฮ้ 518 00:23:46,780 --> 00:23:47,580 มามากกว่า. 519 00:23:47,580 --> 00:23:51,290 ดังนั้นสิ่งที่ฉันต้องการให้คุณทำถ้า คุณสามารถแซมนี่คือ Google 520 00:23:51,290 --> 00:23:53,240 คุณสามารถค้นหาคำเรียกซ้ำ? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 ไม่เสีย 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> และตอนนี้ let's-- ใช่ 525 00:24:00,970 --> 00:24:03,380 คลิกที่ตกลง 526 00:24:03,380 --> 00:24:04,315 คลิกที่ดีกว่าที่ 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 อ่าได้รับมัน 529 00:24:08,020 --> 00:24:08,520 ไม่ได้หรือไม่ 530 00:24:08,520 --> 00:24:09,050 ตกลง. 531 00:24:09,050 --> 00:24:10,430 เพื่อขอทำคนอื่น ๆ คู่ 532 00:24:10,430 --> 00:24:12,830 ไม่มากที่เกี่ยวข้อง ด้านวิชาการที่นี่ แต่มีคุณ 533 00:24:12,830 --> 00:24:14,520 เคยค้นหา Google สำหรับแอนนาแกรม? 534 00:24:14,520 --> 00:24:15,280 >> SAM: เลขที่ 535 00:24:15,280 --> 00:24:15,520 >> เดวิดเจลัน: OK 536 00:24:15,520 --> 00:24:17,186 ค้นหาแอนนาแกรมแทนการเรียกซ้ำ 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 วิธีการเกี่ยวกับความไม่ไว้วางใจ 539 00:24:23,790 --> 00:24:25,515 คุณเคยค้นหาไว้วางใจ? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 ตอนนี้คนนี้เป็นเพียงเล็กน้อยยากที่จะ เห็น แต่หวังว่า everything's-- ตกลง 542 00:24:32,692 --> 00:24:34,150 มันเป็นเพียงแค่คุณและฉันเพลิดเพลินกับการนี​​้ 543 00:24:34,150 --> 00:24:34,690 ตกลง. 544 00:24:34,690 --> 00:24:38,950 >> ดังนั้นในที่สุด one's-- นี้ มันเป็นความไว้วางใจน้อย 545 00:24:38,950 --> 00:24:40,810 ตอนนี้ทำม้วนบาร์เรล 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 ที่ยอดเยี่ยม 548 00:24:45,310 --> 00:24:45,910 ทั้งหมดขวา 549 00:24:45,910 --> 00:24:47,110 ขอขอบคุณบิ๊กแซม 550 00:24:47,110 --> 00:24:49,416 นี่คุณไป 551 00:24:49,416 --> 00:24:50,400 ขอบคุณ 552 00:24:50,400 --> 00:24:52,807 >> ดังนั้นสิ่งที่เกิดขึ้นในทุก ตัวอย่างโง่เหล่านี้หรือไม่ 553 00:24:52,807 --> 00:24:55,640 ดังนั้นจริงๆอยู่ภายใต้ฝากระโปรงของ ล้านของ Google บรรทัดของรหัส 554 00:24:55,640 --> 00:24:58,860 เห็นได้ชัดว่าเป็นไม่กี่ถ้าโง่ เงื่อนไขที่เป็นหลัก 555 00:24:58,860 --> 00:25:01,160 ตรวจสอบว่าผู้ใช้มี พิมพ์ในวลีนี้ 556 00:25:01,160 --> 00:25:03,760 ทำสิ่งที่อาจจะเข้ามา เป็นจำนวนเงินขี้ปะติ๋วของเวลา 557 00:25:03,760 --> 00:25:06,080 ในการดำเนินการเพียงเพื่อ เป็นที่น่าขบขันในลักษณะนี้ 558 00:25:06,080 --> 00:25:08,430 แต่นั่นคือทั้งหมดที่มันเดือด ลงไปอยู่ใต้ฝากระโปรง 559 00:25:08,430 --> 00:25:11,570 แต่แน่นอนการเรียกซ้ำ มีมากขึ้นของ geekier 560 00:25:11,570 --> 00:25:13,880 ตัวอย่างเช่นในหมู่เทคนิคพิเศษเหล่านั้น 561 00:25:13,880 --> 00:25:16,880 และแน่นอนมีคนอื่น ๆ ที่ออกมี เช่นเดียวกับที่เราอาจจะมีไม่ได้ 562 00:25:16,880 --> 00:25:18,230 ค้นพบเพียง แต่ 563 00:25:18,230 --> 00:25:22,830 >> ดังนั้นจะดูหรือพิจารณา ตอนนี้โปรแกรมดังต่อไปนี้ 564 00:25:22,830 --> 00:25:24,830 และแน่นอนคว้าใด ๆ เหล่านี้ในแบบของคุณออกมา 565 00:25:24,830 --> 00:25:28,820 ฉันจะไปข้างหน้าและ เปิดโปรแกรมที่เป็น 566 00:25:28,820 --> 00:25:30,920 จะพยายามที่จะสลับสองค่า 567 00:25:30,920 --> 00:25:33,210 แต่ก่อนที่เราจะไปที่นั่นให้ทำนี้ 568 00:25:33,210 --> 00:25:38,500 เราจะได้รับอีกหนึ่ง อาสาสมัครผมคิดว่า? 569 00:25:38,500 --> 00:25:40,480 คุณต้องการที่จะเป็นอาสาสมัคร? 570 00:25:40,480 --> 00:25:40,980 ไม่ได้หรือไม่ 571 00:25:40,980 --> 00:25:41,890 มาขึ้น 572 00:25:41,890 --> 00:25:42,390 มาขึ้น 573 00:25:42,390 --> 00:25:42,890 ทั้งหมดขวา 574 00:25:42,890 --> 00:25:44,136 ดังนั้นชื่อของคุณคืออะไร? 575 00:25:44,136 --> 00:25:44,810 >> LAUREN: ลอเรน 576 00:25:44,810 --> 00:25:45,768 >> เดวิดเจลัน: ลอเรน 577 00:25:45,768 --> 00:25:46,890 มาถึงลอเรน 578 00:25:46,890 --> 00:25:50,140 ดังนั้นลอเรนจะถูก ท้าทายที่นี่ดังต่อไปนี้ 579 00:25:50,140 --> 00:25:52,310 ยินดีที่ได้พบคุณ. 580 00:25:52,310 --> 00:25:55,730 ดังนั้นลอเรนนี่มีอยู่ตรงหน้า ของสองถ้วยที่ว่างเปล่าของเธอ 581 00:25:55,730 --> 00:25:57,570 และเรามีสีส้มบาง น้ำผลไม้และนม 582 00:25:57,570 --> 00:26:00,301 และเรากำลังจะไป ข้างหน้าและทำต่อไปนี้ 583 00:26:00,301 --> 00:26:01,550 เรากำลังจะไปเติมนี้ 584 00:26:01,550 --> 00:26:07,840 ไม่กี่ออนซ์นมมากกว่าที่นี่และขอ เติมน้ำส้มน้อยกว่าที่นี่ 585 00:26:07,840 --> 00:26:11,475 >> และด้านหน้าของทุกคน เหล่าสมาชิกผู้ชม 586 00:26:11,475 --> 00:26:13,550 สลับสองค่าของถ้วยเหล่านี้ 587 00:26:13,550 --> 00:26:16,970 ใส่น้ำผลไม้สีส้มในถ้วยนม และนมในถ้วยน้ำผลไม้สีส้ม 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 วิธีที่คุณจะทำเช่นนี้หากคุณได้ที่ บ้านและมีการเข้าถึงอุปกรณ์อื่น ๆ ? 590 00:26:26,150 --> 00:26:27,400 LAUREN: ใส่ไว้ในถ้วยอื่น 591 00:26:27,400 --> 00:26:28,191 เดวิดเจลัน: OK 592 00:26:28,191 --> 00:26:31,940 ดังนั้นขอได้ชั่วคราว ตัวแปรถ้าเราจะ 593 00:26:31,940 --> 00:26:35,871 และไปข้างหน้าในขณะนี้และดำเนินการ ขั้นตอนการแลกเปลี่ยนเดียวกัน 594 00:26:35,871 --> 00:26:36,370 ดีมาก. 595 00:26:36,370 --> 00:26:41,490 เราได้ใส่ลงไปใน OJ ชั่วคราว ตัวแปรนมลงตัวแปร OJ, 596 00:26:41,490 --> 00:26:44,481 และตอนนี้ตัวแปรชั่วคราว ลงในตัวแปรนม 597 00:26:44,481 --> 00:26:44,980 ตกลง. 598 00:26:44,980 --> 00:26:48,740 ดังนั้นทำได้ดีมากเพื่อให้ห่างไกล 599 00:26:48,740 --> 00:26:50,990 ดังนั้นมันจะเปิด out-- ถือได้ว่า คิดสักครู่ 600 00:26:50,990 --> 00:26:54,479 นี่เพียงแค่ geek มันขึ้นเล็กน้อยนี้ จะเป็นรหัส C ที่สอดคล้องกัน 601 00:26:54,479 --> 00:26:55,520 ว่าเราก็ดำเนินการ 602 00:26:55,520 --> 00:26:58,650 เรามีสองปัจจัยการผลิตและ b ทั้งสอง ซึ่งเราก็จะบอกว่าสำหรับความเรียบง่ายเป็น 603 00:26:58,650 --> 00:26:59,260 int ของ 604 00:26:59,260 --> 00:27:02,780 และแจ้งให้ทราบที่นี่ถ้าผมต้องการที่จะแลกเปลี่ยน ค่าของทั้งสองตัวแปร a และ b ที่ 605 00:27:02,780 --> 00:27:06,890 แน่นอนเราต้องพ่อค้าคนกลางเป็น ตัวแปรชั่วคราวถ้วยชั่วคราว 606 00:27:06,890 --> 00:27:10,830 เป็นที่เทหนึ่งของค่า เพื่อให้เรามีตัวยึดสำหรับมัน 607 00:27:10,830 --> 00:27:13,480 แต่แล้วรหัสคือว่า ขณะที่ลอเรนดำเนินการที่นี่ 608 00:27:13,480 --> 00:27:15,500 >> ตอนนี้เพียงที่จะได้รับ crazier เล็ก ๆ น้อย ๆ จะเปิดออก 609 00:27:15,500 --> 00:27:20,930 ที่คุณสามารถทำได้โดยไม่ต้อง ตัวแปรชั่วคราว 610 00:27:20,930 --> 00:27:24,870 การทำเช่นนี้ได้อย่างถูกต้อง แต่เรากำลังจะ ที่จะมีการโกงกับเคมีบางอย่าง 611 00:27:24,870 --> 00:27:26,380 เรามีถ้วยพิเศษบางอย่างที่นี่ 612 00:27:26,380 --> 00:27:29,600 ดังนั้นสิ่งที่ใกล้เคียงที่มีลักษณะ เช่นนมและ perhaps-- น้ำ 613 00:27:29,600 --> 00:27:34,090 หรือนมและ OJ-- คือเรามีบางส่วน น้ำดังนั้นเราจะเติมนี้ขึ้น 614 00:27:34,090 --> 00:27:36,486 มีไม่กี่ออนซ์ของน้ำใส 615 00:27:36,486 --> 00:27:38,332 ที่อาจมากเกินไป 616 00:27:38,332 --> 00:27:38,832 ใช่ 617 00:27:38,832 --> 00:27:39,934 นั่นคือแน่นอนมากเกินไป 618 00:27:39,934 --> 00:27:40,600 ยึดมั่นในหนึ่งวินาที 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> และตอนนี้เรามีน้ำมันซึ่งเท่าที่ผมจำ จากโรงเรียนระดับเคมีกลาง 621 00:27:48,420 --> 00:27:49,990 หวังว่ามันไม่ได้ผสมกับน้ำ 622 00:27:49,990 --> 00:27:53,650 แต่ชนิดของการจัดเรียงของ ดูเหมือนว่านมและ OJ 623 00:27:53,650 --> 00:27:55,760 ดังนั้นตอนนี้โดยไม่ต้องใช้ ตัวแปรชั่วคราว 624 00:27:55,760 --> 00:27:59,260 คุณสามารถสลับทั้งสองค่า? 625 00:27:59,260 --> 00:28:03,884 ดังนั้นน้ำมันไปลงในถ้วยน้ำ น้ำไปลงในถ้วยน้ำมัน 626 00:28:03,884 --> 00:28:04,800 LAUREN: ไม่มีถ้วยอื่น ๆ 627 00:28:04,800 --> 00:28:05,940 เดวิดเจลัน: ไม่มีถ้วยอื่น ๆ 628 00:28:05,940 --> 00:28:07,860 และฉันไม่จริง การทดสอบนี้มาก่อนในปีนี้ 629 00:28:07,860 --> 00:28:10,110 ดังนั้นผมจึงไม่ทราบว่านี้จะ ทำงานจริงทางเคมี 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 ที่ไม่ควรจะเกิดขึ้น 632 00:28:18,650 --> 00:28:19,761 มันกำลังทำงานอยู่ไหม? 633 00:28:19,761 --> 00:28:20,260 ทั้งหมดขวา 634 00:28:20,260 --> 00:28:20,990 ดังนั้นการแยก? 635 00:28:20,990 --> 00:28:21,490 ดี 636 00:28:21,490 --> 00:28:24,714 ตอนนี้เรามีที่จะได้รับ ลงในถ้วยน้ำอื่น ๆ 637 00:28:24,714 --> 00:28:27,630 ชาญฉลาด concentrators เคมีสามารถทำได้ อาจจะทำแบบนี้ดีกว่าค่ะ 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: น้ำเป็นที่อยู่ด้านล่าง 639 00:28:28,510 --> 00:28:31,910 >> เดวิดเจลัน: water-- นั่นคือ สิ่งที่สำคัญครั้งสุดท้ายที่เราทำอย่างนี้ 640 00:28:31,910 --> 00:28:33,950 คุณต้องทำมันในลำดับที่ถูกต้อง 641 00:28:33,950 --> 00:28:34,450 ใช่ 642 00:28:34,450 --> 00:28:35,270 มันโอเค. 643 00:28:35,270 --> 00:28:37,290 ดังนั้นตอนนี้เรามีสองถ้วยน้ำมัน 644 00:28:37,290 --> 00:28:37,790 ตกลง. 645 00:28:37,790 --> 00:28:38,510 มันโอเค. 646 00:28:38,510 --> 00:28:40,110 แต่สารเคมีที่ว่านี้ทำงานกว่า I-- 647 00:28:40,110 --> 00:28:41,200 >> LAUREN: นี่คือน้ำ 648 00:28:41,200 --> 00:28:41,930 >> เดวิดเจลัน: นั่นเป็นส่วนใหญ่น้ำ 649 00:28:41,930 --> 00:28:42,430 ทั้งหมดขวา 650 00:28:42,430 --> 00:28:44,210 แต่ที่ยังคงถ้วยเช่นเดียวกับก่อน 651 00:28:44,210 --> 00:28:47,570 ดังนั้นเท it-- ลองไปที่นั่น 652 00:28:47,570 --> 00:28:49,300 ตกลง. 653 00:28:49,300 --> 00:28:51,010 นี่คือการใช้ที่ดีของเวลาเรียนในวันนี้ 654 00:28:51,010 --> 00:28:51,510 ตกลง. 655 00:28:51,510 --> 00:28:53,890 ดังนั้นตอนนี้ we-- ดี 656 00:28:53,890 --> 00:28:55,460 เรียงจาก 657 00:28:55,460 --> 00:28:55,960 ทั้งหมดขวา 658 00:28:55,960 --> 00:28:56,690 ดังนั้นสิ่งที่ดีมาก 659 00:28:56,690 --> 00:29:00,006 ขอขอบคุณที่ลอเรน 660 00:29:00,006 --> 00:29:01,950 ทำได้ดีมาก 661 00:29:01,950 --> 00:29:04,570 >> ดังนั้นเพียงแค่ที่จะระเบิดความคิดของคุณ และนี่คือสิ่งที่อาจจะ 662 00:29:04,570 --> 00:29:08,660 ที่จะเล่นกับถ้าคุณต้องการใน ID CS50, คุณสามารถในความเป็นจริงสลับสองตัวแปร 663 00:29:08,660 --> 00:29:11,470 โดยไม่ต้องใช้จำนวนเต็มชั่วคราว 664 00:29:11,470 --> 00:29:13,060 และนี่คือรหัส C ที่สอดคล้องกัน 665 00:29:13,060 --> 00:29:16,110 และถ้าคุณจำได้จากที่ผ่านมา วันพุธที่เราแนะนำถ้าสั้น ๆ 666 00:29:16,110 --> 00:29:19,720 บางประกอบการรายใหม่ในซีและไม่ ทุกคนจำสิ่งแครอทเล็ก ๆ น้อย ๆ 667 00:29:19,720 --> 00:29:23,660 สัญลักษณ์ที่เป็นรูปสามเหลี่ยมเล็ก ๆ น้อย ๆ สัญลักษณ์จากแป้นพิมพ์หมายถึง? 668 00:29:23,660 --> 00:29:26,003 สิ่งที่ผู้ประกอบการระดับบิต? 669 00:29:26,003 --> 00:29:26,770 >> ผู้ชม: EXOR 670 00:29:26,770 --> 00:29:27,645 >> เดวิดเจลัน: EXOR 671 00:29:27,645 --> 00:29:28,560 แต่เพียงผู้เดียวหรือ 672 00:29:28,560 --> 00:29:32,920 ดังนั้นหากคุณต้องการเพียงเพื่อความสนุกสนานที่ บ้านที่จะให้ a และ b สองโดยพลการ 673 00:29:32,920 --> 00:29:36,072 ค่าเหมือน eight-- และฉัน จะเลือกค่าบิตแปด 674 00:29:36,072 --> 00:29:38,530 ถ้าคุณทำเช่นนี้กับ 32 บิต คุณได้อย่างรวดเร็วจะได้รับเบื่อ 675 00:29:38,530 --> 00:29:42,150 เพียง แต่ให้แปดบิต ค่าที่เป็นสิ่งหนึ่งหรือสอง 676 00:29:42,150 --> 00:29:43,790 และให้ขมูลค่าใกล้เคียงกัน 677 00:29:43,790 --> 00:29:46,810 แล้วใช้คำนิยาม ของแฮคเกอร์จากล่าสุดวันพุธ 678 00:29:46,810 --> 00:29:52,560 บิตที่ใช้โดยบิตแต่ละ ผู้แปดบิตในแต่ละ a และ b 679 00:29:52,560 --> 00:29:54,980 แล้วทำมันตรงต่อรหัสนี้ 680 00:29:54,980 --> 00:29:58,170 และมันก็เป็นสิ่งที่ไม่ถูกต้องไม่ได้ คุณดูที่นี่บนหน้าจอ 681 00:29:58,170 --> 00:30:02,100 แน่นอนมันเดือดลง สามการดำเนินงานของแฮคเกอร์ 682 00:30:02,100 --> 00:30:05,910 และอย่างใดอย่างน่าอัศจรรย์และ ขจะแลกเปลี่ยนตำแหน่ง 683 00:30:05,910 --> 00:30:08,010 โดยไม่สูญเสียข้อมูลใด ๆ 684 00:30:08,010 --> 00:30:11,580 >> ดังนั้นเคล็ดลับน้ำมันและน้ำเป็น โลกแห่งความจริงที่ใกล้เคียงที่สุดของชาติ 685 00:30:11,580 --> 00:30:12,980 ฉันจะคิดว่าที่จะเลียนแบบ 686 00:30:12,980 --> 00:30:15,950 แต่มันก็ง่ายที่จะ ใช้ตัวแปรชั่วคราว 687 00:30:15,950 --> 00:30:16,920 เช่นในกรณีนี้ได้ที่นี่ 688 00:30:16,920 --> 00:30:21,190 และนี้ก็เป็นโอกาสที่จะพูดว่า เกินไปชนิดของการเพิ่มประสิทธิภาพไมโครนี้ 689 00:30:21,190 --> 00:30:23,590 เป็นนักวิทยาศาสตร์คอมพิวเตอร์ จะบอกว่าในขณะที่ชนิดของความสนุก 690 00:30:23,590 --> 00:30:27,060 ที่จะคุยโวเกี่ยวกับวิธีการที่คุณทำอย่างนี้ได้โดยไม่ต้อง เช่นการแลกเปลี่ยนกับตัวแปรพิเศษ 691 00:30:27,060 --> 00:30:28,640 มันไม่ได้เป็นสิ่งที่น่าสนใจ 692 00:30:28,640 --> 00:30:31,619 เพราะจะประหยัด 32 บิตเป็น ในกรณีของ int ที่เกิดขึ้นจริง 693 00:30:31,619 --> 00:30:33,410 ไม่ใช่สิ่งที่น่าสนใจ ในระบบที่ 694 00:30:33,410 --> 00:30:36,722 คุณอาจจะใช้หลายสิบเมกะไบต์ หรือแม้กระทั่งหน่วยความจำมากขึ้นเช่นวันนี้ 695 00:30:36,722 --> 00:30:38,680 และในความเป็นจริงเมื่อเราได้รับ ชุดปัญหาในภายหลัง 696 00:30:38,680 --> 00:30:41,010 และคุณใช้คาถา ตรวจสอบและคุณจะ 697 00:30:41,010 --> 00:30:43,550 ได้รับการท้าทายที่จะทำเช่นนั้นด้วย นี้ RAM น้อยและน้อยที่สุดเท่าที่ 698 00:30:43,550 --> 00:30:46,820 เวลาที่เป็นไปได้ใน computer-- คุณยังคง 699 00:30:46,820 --> 00:30:50,160 มีสัปดาห์ในการดำเนินการ it-- คุณจะ have-- คุณจะ 700 00:30:50,160 --> 00:30:51,799 ความท้าทายในการลดทรัพยากรเหล่านั้น 701 00:30:51,799 --> 00:30:53,840 และที่จริงเท่านั้น occasion ภาคการศึกษานี้ 702 00:30:53,840 --> 00:30:57,940 ที่คุณจะได้รับการส่งเสริมการโกน ออกแม้ผลการดำเนินงานที่ดีที่สุด 703 00:30:57,940 --> 00:30:59,340 ค่าใช้จ่ายอย่างอื่น 704 00:30:59,340 --> 00:31:02,200 >> ดังนั้น what-- วิธีที่เราสามารถ เห็นนี้ในรหัสที่เกิดขึ้นจริง? 705 00:31:02,200 --> 00:31:04,530 ผมขอไปข้างหน้าในขณะนี้ และเปิดตัวอย่าง 706 00:31:04,530 --> 00:31:07,700 จงใจที่จะเรียกว่า Swap เพราะมันไม่ได้ไม่มี 707 00:31:07,700 --> 00:31:10,670 ในความเป็นจริงสลับตัวแปร ในขณะที่คุณอาจคาดหวังจริง 708 00:31:10,670 --> 00:31:12,260 ดังนั้นลองมาดู 709 00:31:12,260 --> 00:31:17,050 นี่คือโปรแกรมที่ไม่เคยมีใคร CS50 ครับ ห้องสมุดที่เกิดขึ้นเพียงมาตรฐาน I / O 710 00:31:17,050 --> 00:31:19,560 ตอนนี้เรามีต้นแบบ สำหรับการแลกเปลี่ยนขึ้นด้านบนที่เพิ่ง 711 00:31:19,560 --> 00:31:21,540 หมายความว่ามันมีที่จะกำหนดในภายหลัง 712 00:31:21,540 --> 00:31:22,550 และนี่คือหลัก 713 00:31:22,550 --> 00:31:26,000 >> ผมได้รับมอบหมายให้พล x และ y, ตามลำดับค่าหนึ่งและสอง 714 00:31:26,000 --> 00:31:28,590 เพียงเพราะพวกเขากำลังมีขนาดเล็ก และง่ายต่อการคิดเกี่ยวกับ 715 00:31:28,590 --> 00:31:32,280 แล้วฉันก็มีพวงของ printfs ที่ฉันมีการตรวจสอบสติ x 1 716 00:31:32,280 --> 00:31:35,110 และ y ที่ 2 น่าจะเป็น สิ่งเหล่านั้นจะ printfs พูด 717 00:31:35,110 --> 00:31:36,530 ดังนั้นมายากลไม่มีป่านนี้ 718 00:31:36,530 --> 00:31:40,100 >> แล้วฉันจะไปเรียกร้องกับ พิมพ์ def แลกเปลี่ยน dot dot dot 719 00:31:40,100 --> 00:31:43,730 ฉันจะโทรแลกเปลี่ยน ฟังก์ชั่นผ่านใน x และ y 720 00:31:43,730 --> 00:31:47,350 และสมมติว่าตอนนี้ แลกเปลี่ยนจะดำเนินการว่า 721 00:31:47,350 --> 00:31:49,930 มันเป็นช่วงเวลาที่ผ่านมา กับตัวแปรชั่วคราว 722 00:31:49,930 --> 00:31:52,670 และดังนั้นผมจึงเรียกร้องอย่างกล้าหาญสลับ 723 00:31:52,670 --> 00:31:55,429 x คือตอนนี้และ y ที่อยู่ในขณะนี้ว่า 724 00:31:55,429 --> 00:31:57,220 แต่ไฟล์ของหลักสูตร เรียกว่า Swap ไม่มี 725 00:31:57,220 --> 00:31:58,678 ถ้าอย่างนั้นเราเห็นจริงว่าเกิดอะไรขึ้น 726 00:31:58,678 --> 00:32:04,450 ถ้าผมรวบรวมและแลกเปลี่ยนแล้วไม่มี ทำ ./noswap, x 1, y เป็น 2 727 00:32:04,450 --> 00:32:05,770 การสลับเปลี่ยน 728 00:32:05,770 --> 00:32:07,200 x 1, y เป็น 2 729 00:32:07,200 --> 00:32:11,980 ดังนั้นจริง ๆ แล้วมันน่าจะเป็นข้อบกพร่องแม้กระทั่ง แม้ว่า swap-- ขอเลื่อนลง now-- 730 00:32:11,980 --> 00:32:16,542 ว่าจะดำเนินการต่อ รหัสที่ผมนำเสนอช่วงเวลาที่ผ่านมา 731 00:32:16,542 --> 00:32:19,000 ดังนั้นเราจะไม่ได้รับแฟนซี กับสิ่งที่แฮคเกอร์สำหรับตอนนี้ 732 00:32:19,000 --> 00:32:21,890 ที่นี่เหมือนกันควรจะทำงานเพียง เช่นเดียวกับนมและ OJ, 733 00:32:21,890 --> 00:32:25,820 แต่ก็ไม่ได้ดูเหมือนจะทำงาน 734 00:32:25,820 --> 00:32:27,180 >> ถ้าอย่างนั้นเราทำเช่นนี้อีกครั้ง 735 00:32:27,180 --> 00:32:29,310 บางทีฉันอาจจะเพียงแค่ไม่ได้ทำงานมันขวา 736 00:32:29,310 --> 00:32:32,010 ดังนั้นขอเรียก Swap ไม่มีอีกครั้ง 737 00:32:32,010 --> 00:32:32,900 บางที I-- ไม่มี 738 00:32:32,900 --> 00:32:34,400 ดังนั้นมันจึงเป็นเพียงการไม่ได้ทำงาน 739 00:32:34,400 --> 00:32:36,060 ถ้าอย่างนั้นเราจะตรวจสอบสุขภาพจิตดีเล็ก ๆ น้อย ๆ 740 00:32:36,060 --> 00:32:39,690 ผมขอไปข้างหน้านี่ใน Swap และเพียงแค่เพิ่มรอสักครู่ 741 00:32:39,690 --> 00:32:43,856 เป็น% ผม / n และขอ plug-in มูลค่าของที่ 742 00:32:43,856 --> 00:32:45,730 เพราะผมต้องการ เพื่อดูสิ่งที่เกิดขึ้น 743 00:32:45,730 --> 00:32:47,570 และแน่นอนนี่คือ เทคนิคการแก้จุดบกพร่อง 744 00:32:47,570 --> 00:32:50,028 ที่คุณอาจจะใช้ใน เวลาทำงานหรือที่บ้านอยู่แล้ว 745 00:32:50,028 --> 00:32:53,560 คล้ายกับช่วงครึ่งแรกของแดน วิดีโอ Armendariz ใน PSET3 746 00:32:53,560 --> 00:32:56,870 ประเด็นที่เรานำมาพิมพ์เป็น def เทคนิคที่แนะนำอย่างน้อย 747 00:32:56,870 --> 00:32:58,080 สำหรับกรณีที่เรียบง่าย 748 00:32:58,080 --> 00:33:01,720 ให้ฉันไปข้างหน้าและทำงานให้ ไม่มีการแลกอีกครั้ง ./noswap 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> ที่น่าสนใจ 751 00:33:05,840 --> 00:33:11,670 ดังนั้นสังเกตเห็นสิ่งที่น่าจะเป็นจริง x 1, y คือ 2 แต่เมื่อ 2 ข 1 752 00:33:11,670 --> 00:33:16,790 ดังนั้นทั้งสองอย่างใดได้เปลี่ยน แต่ x และ y จะไม่ได้รับการเปลี่ยน 753 00:33:16,790 --> 00:33:21,090 ดังนั้นเพื่อให้มีความชัดเจนสิ่งที่เกิดขึ้น คือที่นี่ผมมี x และ y 754 00:33:21,090 --> 00:33:25,380 และผู้ที่มีตัวแปรท้องถิ่นใน ขอบเขตของหลักผมผ่านใน x และ y 755 00:33:25,380 --> 00:33:26,170 เพื่อแลกเปลี่ยน 756 00:33:26,170 --> 00:33:29,080 ตอนนี้แลกเปลี่ยนเป็นฟังก์ชั่นที่แยกจากกัน มีอิสระที่จะเรียกอาร์กิวเมนต์ 757 00:33:29,080 --> 00:33:30,590 พารามิเตอร์หรืออะไรที่มันต้องการ 758 00:33:30,590 --> 00:33:33,280 ฟูหรือบาร์หรือ x หรือ y ที่หรือหรือ 759 00:33:33,280 --> 00:33:36,870 เพียงเพื่อให้ชัดเจนว่าพวกเขากำลัง ไม่เหมือนกับ x และ y ต่อ se 760 00:33:36,870 --> 00:33:38,020 ฉันได้กล่าวว่า a และ b 761 00:33:38,020 --> 00:33:40,040 แต่เราจะเรียกพวกเขาสิ่งที่เราต้องการ 762 00:33:40,040 --> 00:33:43,960 >> และดังนั้นจึงดูเหมือนว่า แลกเปลี่ยนจะถูกส่งผ่านไป 763 00:33:43,960 --> 00:33:48,980 x-- AKA a-- และก็ ถูกส่งผ่านข AKA y-- 764 00:33:48,980 --> 00:33:51,900 อย่างใดทั้งสามเส้น การแลกเปลี่ยนค่าเหล่านั้นว่า 765 00:33:51,900 --> 00:33:53,510 ขณะที่ลอเรนทำกับนมและ OJ 766 00:33:53,510 --> 00:33:56,010 แต่เมื่อเราพิมพ์ออกมา ค่า, a และ b 767 00:33:56,010 --> 00:34:01,340 มีแน่นอน แต่สลับ x และ y ที่มีการเปลี่ยนแปลงให้กับพวกเขา 768 00:34:01,340 --> 00:34:03,150 จำได้ว่า x และ y มีขึ้นที่นี่ 769 00:34:03,150 --> 00:34:05,320 >> ดังนั้นเราจึงสามารถมองเห็นได้ผ่านทาง เทคนิคอีกเช่นกัน 770 00:34:05,320 --> 00:34:08,110 และนี่ก็เป็นเทคนิคที่ ที่ฝังอยู่ในปัญหาตั้งสาม 771 00:34:08,110 --> 00:34:10,780 ลองไปข้างหน้าและทำเช่นนี้ใน ID CS50 ถ้าคุณยังไม่ได้ 772 00:34:10,780 --> 00:34:13,730 ที่ด้านข้างขวามือเรา มีแท็บดีบักเกอร์นี้ 773 00:34:13,730 --> 00:34:16,159 และถ้าคุณเปิดนี้ขึ้น มีบางข้อมูลที่เป็นความลับ 774 00:34:16,159 --> 00:34:17,530 ที่โยนไปที่คุณเริ่ม 775 00:34:17,530 --> 00:34:19,310 แต่ขอแซวออกจากกันอย่างรวดเร็วจริงนี้ 776 00:34:19,310 --> 00:34:21,620 >> ดังนั้นหนึ่งคุณจะเห็นตัวแปรท้องถิ่น 777 00:34:21,620 --> 00:34:26,230 ปรากฎว่าสร้างเป็น IDE CS50 และ จำนวนมากของสภาพแวดล้อมการเขียนโปรแกรมเพิ่มเติม 778 00:34:26,230 --> 00:34:28,060 โดยทั่วไปเป็นดีบัก 779 00:34:28,060 --> 00:34:31,340 เครื่องมือที่ช่วยให้คุณมองเห็นเห็น สิ่งที่เกิดขึ้นภายในของโปรแกรมของคุณ 780 00:34:31,340 --> 00:34:34,380 โดยไม่ต้องหันไปเพิ่ม printfs และรวบรวมและทำงาน 781 00:34:34,380 --> 00:34:37,588 และการเพิ่ม printf และรวบรวมและ ทำงานซึ่งมีอยู่แล้วในเวลาทำการ 782 00:34:37,588 --> 00:34:40,070 หรือบ้านน่าจะเป็น ได้รับน่าเบื่อสวย 783 00:34:40,070 --> 00:34:43,090 >> ดังนั้นที่นี่ในเวลาเพียงช่วงเวลาที่เรา จะเห็นในเวลาจริง 784 00:34:43,090 --> 00:34:44,760 ค่าของตัวแปรในท้องถิ่นของเรา 785 00:34:44,760 --> 00:34:47,880 เรายังจะสามารถที่จะตั้ง สิ่งที่เรียกว่าจุดพักที่ 786 00:34:47,880 --> 00:34:52,570 โอกาสในโปรแกรมของฉันที่จะหยุดการทำงานชั่วคราว การดำเนินการที่เฉพาะเจาะจงของสายรหัส 787 00:34:52,570 --> 00:34:53,710 ว่าฉันอยากรู้เกี่ยวกับ 788 00:34:53,710 --> 00:34:54,210 ใช่มั้ย? 789 00:34:54,210 --> 00:34:55,969 โปรแกรมเหล่านี้ทำงานในเสี้ยววินาที 790 00:34:55,969 --> 00:35:00,450 เป็นชนิดที่ดีสำหรับมนุษย์เราช้าลง ที่จะสามารถหยุดใช้เวลาสักครู่ให้ดู 791 00:35:00,450 --> 00:35:02,380 สิ่งที่เกิดขึ้นรอบตัว สายหนึ่งของรหัส 792 00:35:02,380 --> 00:35:05,050 โดยไม่ต้องไถโปรแกรม ผ่านมันและการตกแต่งทั้งหมด 793 00:35:05,050 --> 00:35:08,510 ดังนั้นจุดพักจะช่วยให้เราสามารถ ทำลายและหยุดที่จุดหนึ่ง 794 00:35:08,510 --> 00:35:12,990 >> สแต็คโทรเป็นวิธีที่จินตนาการของ พูดในสิ่งที่ฟังก์ชั่นมีอยู่ในปัจจุบัน 795 00:35:12,990 --> 00:35:14,140 ถูกเรียกในขณะนี้ 796 00:35:14,140 --> 00:35:15,370 หลักที่เรียกว่าก่อนเสมอ 797 00:35:15,370 --> 00:35:17,230 แต่ถ้าหลักเรียกว่า ฟังก์ชั่นที่เรียกว่า Swap, 798 00:35:17,230 --> 00:35:20,470 เราจริงจะเห็นนี้ หอของฟังก์ชั่นที่ได้รับ 799 00:35:20,470 --> 00:35:22,400 เรียกว่าในลำดับย้อนกลับ 800 00:35:22,400 --> 00:35:23,310 ดังนั้นเรามาดูว่า 801 00:35:23,310 --> 00:35:24,327 >> ฉันจะซูมออก 802 00:35:24,327 --> 00:35:25,660 ฉันจะกลับไปที่รหัสของฉัน 803 00:35:25,660 --> 00:35:27,540 และเพียงเพราะฉันต้องการ จะต้องมีความรู้ที่นี่ 804 00:35:27,540 --> 00:35:31,100 ฉันจะไปข้างหน้าและคลิก เพียงด้านซ้ายของบรรทัดห้า 805 00:35:31,100 --> 00:35:32,830 และที่สร้างจุดสีแดง 806 00:35:32,830 --> 00:35:36,200 และแจ้งให้ทราบเกี่ยวกับทางด้านขวามือ ที่ดีบักรู้เดี๋ยวก่อน 807 00:35:36,200 --> 00:35:41,020 เบรกพอยต์ที่ฉันเพิ่งกล่าวว่า สาย noswap.c ห้าโดยเฉพาะ 808 00:35:41,020 --> 00:35:42,480 ที่บรรทัดของรหัสนี้ 809 00:35:42,480 --> 00:35:45,090 ดังนั้นการดีบักเกอร์รู้ดีว่าฉันว่า ได้ขอให้ครั้งต่อไป 810 00:35:45,090 --> 00:35:48,530 ฉันเรียกใช้โปรแกรมมันหยุดของฉัน การดำเนินการที่มีมากกว่าแค่ 811 00:35:48,530 --> 00:35:50,390 ทำงานสิ่งที่ทั้งเร็วสุด 812 00:35:50,390 --> 00:35:53,889 >> ดังนั้นตอนนี้ฉันกำลังจะไปคลิกตรวจแก้จุดบกพร่อง ปุ่มที่ด้านบนสุดของการ IDE 813 00:35:53,889 --> 00:35:55,430 และที่จะทำต่อไปนี้ 814 00:35:55,430 --> 00:36:00,680 มันจะเปิดบ้างในตอนแรก ที่น่ากลัวมองขั้วสอง window-- 815 00:36:00,680 --> 00:36:02,679 การแก้จุดบกพร่องจากระยะไกล เป็นเจ้าภาพดังกล่าวและ such-- 816 00:36:02,679 --> 00:36:04,970 และเราจะกลับมากับสิ่งที่ ทั้งหมดนั่นหมายความว่าอีกไม่นาน 817 00:36:04,970 --> 00:36:09,020 แต่สิ่งที่สำคัญสำหรับตอนนี้ คือว่าที่จุดสีแดงถูกตี 818 00:36:09,020 --> 00:36:11,735 ดีบักมีเจตนา หยุดชั่วคราว execution-- 819 00:36:11,735 --> 00:36:15,560 ไม่ได้อยู่ในบรรทัดต่อ se แต่ในครั้งแรก บรรทัดของรหัสที่เกิดขึ้นจริงในการทำงานว่า 820 00:36:15,560 --> 00:36:18,040 และที่ว่าทำไมสายเจ็ด เน้นในขณะนี้ในสีเหลือง 821 00:36:18,040 --> 00:36:20,550 >> และตอนนี้ลองมาดู ที่ด้านขวามือ 822 00:36:20,550 --> 00:36:27,300 ดูเหมือนว่าตามค่าเริ่มต้น อย่างพอ x มีสิ่งที่มีค่า? 823 00:36:27,300 --> 00:36:27,860 0 824 00:36:27,860 --> 00:36:29,750 และ y ที่มีสิ่งที่มีค่า? 825 00:36:29,750 --> 00:36:30,410 ศูนย์ 826 00:36:30,410 --> 00:36:35,540 และนั่นเป็นที่คาดหวังในความรู้สึก ที่ x และ y-- ที่ line-- สีเหลืองมี 827 00:36:35,540 --> 00:36:36,770 ยังไม่ดำเนินการ 828 00:36:36,770 --> 00:36:38,510 ดังนั้น x ไม่ควรมีค่า 1 829 00:36:38,510 --> 00:36:41,470 มันอาจจะมีค่าอื่น ๆ ค่าขยะที่เรียกว่า 830 00:36:41,470 --> 00:36:44,320 และเรามีโชคดีในการที่จะ เป็นศูนย์ที่จุดนี้เป็นหลัก 831 00:36:44,320 --> 00:36:46,400 >> ดังนั้นตอนนี้มีเพียงไม่กี่ ปุ่มที่เราต้องดูแล 832 00:36:46,400 --> 00:36:48,100 เมื่อการแก้จุดบกพร่องในลักษณะนี้ 833 00:36:48,100 --> 00:36:49,970 ขอให้สังเกตที่นี่เรามีปุ่ม 'เล่น' 834 00:36:49,970 --> 00:36:51,877 และถ้าเราเล่นหรือตี กลับมาว่าเป็นเพียง 835 00:36:51,877 --> 00:36:53,710 จะวิ่งผ่าน ส่วนที่เหลือของโปรแกรม 836 00:36:53,710 --> 00:36:55,300 หรือจนฮิตเบรกพอยต์อีก 837 00:36:55,300 --> 00:36:56,910 แต่ฉันไม่ได้ตั้งค่าอื่น ๆ จุดพักจึงเป็นเพียง 838 00:36:56,910 --> 00:36:58,118 จะวิ่งผ่านจุดสิ้นสุด 839 00:36:58,118 --> 00:37:00,280 ว่าจะเอาชนะ วัตถุประสงค์ของการ poking รอบ 840 00:37:00,280 --> 00:37:03,290 >> ดังนั้นแทนที่จะฉันดูแลเกี่ยวกับ ไอคอนเหล่านี้ไปทางขวา 841 00:37:03,290 --> 00:37:05,360 และถ้าผมเลื่อนไป พวกเขาเป็นคุณควรเกินไป 842 00:37:05,360 --> 00:37:07,450 คุณจะเห็นเคล็ดลับเครื่องมือ tips-- เล็ก ๆ น้อย ๆ 843 00:37:07,450 --> 00:37:09,020 หนึ่งในนี้เป็นขั้นตอนมากกว่า 844 00:37:09,020 --> 00:37:11,290 ตอนนี้ไม่ได้หมายความว่าข้าม บรรทัดต่อไปนี้ของรหัส 845 00:37:11,290 --> 00:37:14,840 นั่นก็หมายความว่าการดำเนินการและ ย้ายไปย้ายไปถัดไป 846 00:37:14,840 --> 00:37:15,580 ย้ายไปต่อไป 847 00:37:15,580 --> 00:37:17,610 ในคำอื่น ๆ ผ่านทาง ปุ่มที่ผมสามารถเดิน 848 00:37:17,610 --> 00:37:20,390 รหัสผ่านของฉันหนึ่งขั้นในเวลา 849 00:37:20,390 --> 00:37:21,914 ทีละบรรทัดตัวอักษร 850 00:37:21,914 --> 00:37:23,830 ตอนนี้ไปทางขวาของ ที่มีอีกคนหนึ่ง 851 00:37:23,830 --> 00:37:25,163 ที่เราจะเห็นในเวลาเพียงสักครู่ 852 00:37:25,163 --> 00:37:27,820 นี่คือสิ่งที่เรียกว่า ขั้นตอนที่เข้าไปในไอคอนที่ 853 00:37:27,820 --> 00:37:30,300 จะช่วยให้ผมดำน้ำ ในการทำงานอีก 854 00:37:30,300 --> 00:37:31,800 แต่ขอดูนี้ในการรอสักครู่ 855 00:37:31,800 --> 00:37:33,280 ดังนั้นฉันจะคลิกก้าวข้าม 856 00:37:33,280 --> 00:37:35,820 และตอนนี้สังเกตที่ผมคลิก ปุ่มนี้ที่ด้านขวาบน 857 00:37:35,820 --> 00:37:41,260 ให้ดวงตาของคุณภายใต้ประมาณท้องถิ่น ตัวแปรและดูสิ่งที่เกิดขึ้นกับ x 858 00:37:41,260 --> 00:37:44,115 x 1 อยู่ในขณะนี้เพราะ เส้นสีเหลืองได้ดำเนินการในขณะนี้ 859 00:37:44,115 --> 00:37:45,840 และเราได้ย้ายไปสาย 8 860 00:37:45,840 --> 00:37:49,840 และในเพียงปีช่วงเวลา หวังว่าควรจะเป็น 2 861 00:37:49,840 --> 00:37:52,330 >> ตอนนี้ไม่มีอะไรที่น่าสนใจ เกิดขึ้นเล็กน้อย 862 00:37:52,330 --> 00:37:53,390 ทั้งหมดนี้เป็น printf 863 00:37:53,390 --> 00:37:58,010 และแจ้งให้ทราบในขั้วที่สองของฉัน หน้าต่างฉันเห็นผลลัพธ์ของความละเอียดการพิมพ์ 864 00:37:58,010 --> 00:38:01,080 และตอนนี้ฉันจะต้องทำ การตัดสินใจเป็นโปรแกรมเมอร์ 865 00:38:01,080 --> 00:38:04,360 ผมสามารถก้าวข้ามเส้นนี้ รหัสรันมัน แต่ไม่ 866 00:38:04,360 --> 00:38:06,220 รับอยากรู้เกี่ยวกับสิ่งที่อยู่ภายใน 867 00:38:06,220 --> 00:38:11,130 หรือที่จริงผมสามารถก้าวเข้าไปในนั้น และไปด้านในของตัวเอง Swap 868 00:38:11,130 --> 00:38:12,340 เพื่อขอทำหลัง 869 00:38:12,340 --> 00:38:15,550 >> ให้ฉันไปข้างหน้าและคลิก ขั้นตอนที่ไม่ได้กว่า แต่ขั้นตอนที่เข้ามาใน 870 00:38:15,550 --> 00:38:17,300 แจ้งให้ทราบล่วงหน้าทั้งหมดในทันที การเปลี่ยนแปลงที่หน้าต่าง 871 00:38:17,300 --> 00:38:19,330 เพื่อเน้นแรก บรรทัดของรหัสใน Swap 872 00:38:19,330 --> 00:38:20,710 นั่นคือสาย 21 873 00:38:20,710 --> 00:38:25,220 และตอนนี้สิ่งที่เป็นชนิดของขี้ขลาดคือว่า ถ้าคุณมากกว่าดูที่นี่เป็นไปตามคาด 874 00:38:25,220 --> 00:38:29,720 ขเครื่องหมายจุลภาคเป็นที่ 1 และ 2 ตามลำดับ 875 00:38:29,720 --> 00:38:33,840 อุณหภูมิ 32,767 เป็นเพราะเหตุใด 876 00:38:33,840 --> 00:38:36,560 ระลึกถึงอุณหภูมิที่เหมือน ถ้วยว่างช่วงเวลาที่ผ่านมา 877 00:38:36,560 --> 00:38:38,980 ที่นี่มีการประกาศในบรรทัดที่ 21 878 00:38:38,980 --> 00:38:43,390 32,000- ทำไมฉันหมายความว่าทำไม มันก็แปลกบางค่า? 879 00:38:43,390 --> 00:38:43,890 ใช่? 880 00:38:43,890 --> 00:38:45,190 >> ผู้ชม: มันไม่ได้เริ่มต้น 881 00:38:45,190 --> 00:38:46,940 >> เดวิดเจลัน: มัน ไม่ได้รับการเริ่มต้น 882 00:38:46,940 --> 00:38:49,370 ดังนั้นเครื่องคอมพิวเตอร์ของเราเสมอ มีหน่วยความจำทางกายภาพ 883 00:38:49,370 --> 00:38:50,544 มันก็จะมี RAM ที่มีอยู่จริง 884 00:38:50,544 --> 00:38:52,710 และมีเสมอเป็นศูนย์ของ และเป็นหนึ่งในนั้นใช่มั้ย? 885 00:38:52,710 --> 00:38:54,626 เพราะเรากำลังใช้ของเรา คอมพิวเตอร์ตลอดทั้งวัน 886 00:38:54,626 --> 00:38:57,210 คุณกำลังใช้ CS50 IDE หรือเซิร์ฟเวอร์ตลอดทั้งวัน 887 00:38:57,210 --> 00:39:01,159 เพื่อให้ RAM ทั้งมีศูนย์หรือบางส่วน ใครบางคนหรือบางศูนย์และคน 888 00:39:01,159 --> 00:39:02,950 ไม่ว่าหรือไม่ ไม่ว่าคุณกำลังใช้พวกเขา 889 00:39:02,950 --> 00:39:05,270 คุณไม่สามารถเพียงแค่มีความว่างเปล่า ช่องว่างที่คุณต้องการบิต 890 00:39:05,270 --> 00:39:06,850 พวกเขาทั้งศูนย์และคน 891 00:39:06,850 --> 00:39:09,610 >> ดังนั้นมันจะเปิดออกชั่วคราวว่าเพราะ เราได้ไม่ได้เริ่มต้นมันยัง 892 00:39:09,610 --> 00:39:14,580 เรามีผู้ที่ 32 บิต แต่พวกเขาไม่ได้ ได้เริ่มต้นไปเป็นค่าใด ๆ 893 00:39:14,580 --> 00:39:18,110 ดังนั้นสิ่งที่พวกเขาส่วนใหญ่ เมื่อเร็ว ๆ นี้ผู้ใช้ for-- 32 bits-- 894 00:39:18,110 --> 00:39:23,000 เราเพียงแค่เห็นสิ่งประดิษฐ์ของบางคน ใช้ก่อนหน้านี้โดยเฉพาะอย่างยิ่งผู้ที่ 32 895 00:39:23,000 --> 00:39:23,500 ชิ้น ๆ 896 00:39:23,500 --> 00:39:27,780 เร็วที่สุดเท่าที่ฉันคลิกขั้นตอนกว่าแม้ว่า ว้าอุณหภูมิจะได้รับค่า 1 897 00:39:27,780 --> 00:39:31,600 และถ้าผมทำมันอีกครั้งเป็น จะได้รับค่า 2 898 00:39:31,600 --> 00:39:33,830 และจากนั้นขเป็นไป จะได้รับค่า 1 899 00:39:33,830 --> 00:39:36,390 >> และเพื่อให้สิ่งที่ดีในขณะนี้ที่ จุดในเรื่องนี้ 900 00:39:36,390 --> 00:39:39,750 คือว่าเป็นบั๊ก แสดงให้ฉันซุปเปอร์ช้า 901 00:39:39,750 --> 00:39:42,640 ที่ก้าวของตัวเองในสิ่งที่ สถานะของ Swap เป็น 902 00:39:42,640 --> 00:39:47,490 แต่สังเกตที่ด้านบนที่นี่แจ้งให้ทราบล่วงหน้า ที่เรียกกองจริง 903 00:39:47,490 --> 00:39:49,180 มีสองชั้นกับมัน 904 00:39:49,180 --> 00:39:53,240 ตอนหนึ่งที่เป็นไฮไลท์ Swap ถ้าฉันคลิกที่หลักแทน 905 00:39:53,240 --> 00:39:57,100 แจ้งให้ทราบว่าตัวแปรท้องถิ่นเปลี่ยน เพราะนักพัฒนาก็สามารถกระโดด 906 00:39:57,100 --> 00:39:59,740 ไปรอบ ๆ และเข้าไปในขอบเขตใด ๆ ที่แตกต่างกัน 907 00:39:59,740 --> 00:40:04,070 ดังนั้นแม้ว่าเรากำลังทำทั้งหมดนี้ ทำงานได้อย่างถูกต้องและการแลกเปลี่ยน a และ b 908 00:40:04,070 --> 00:40:09,080 ถ้าฉันกลับไปมาระหว่าง Swap ที่คือ 2 และขคือ 1 และหลัก 909 00:40:09,080 --> 00:40:11,851 ได้รับผลกระทบหลักที่ทั้งหมดหรือไม่ 910 00:40:11,851 --> 00:40:12,350 เลขที่ 911 00:40:12,350 --> 00:40:13,930 ดังนั้นสิ่งที่ Takeaway ที่นี่? 912 00:40:13,930 --> 00:40:18,200 ดีก็ปรากฎว่าเวลาใด คุณเรียกฟังก์ชั่นเช่น Swap, 913 00:40:18,200 --> 00:40:21,600 และคุณผ่านการขัดแย้งมันสิ่งที่ คุณผ่านไปยังฟังก์ชัน Swap 914 00:40:21,600 --> 00:40:24,730 ในกรณีนี้เป็นสำเนา ข้อโต้แย้งเหล่านั้น 915 00:40:24,730 --> 00:40:28,620 ดังนั้นถ้า x และ y แต่ละตามลำดับ 32 บิตสิ่ง Swap จะได้รับ 916 00:40:28,620 --> 00:40:30,760 สองใหม่ในท้องถิ่น ตัวแปรหรือข้อโต้แย้ง 917 00:40:30,760 --> 00:40:34,380 เรียกว่าและ b-- แต่ผู้ที่มีอำนาจเบ็ดเสร็จ names-- แต่รูปแบบของค่าศูนย์ 918 00:40:34,380 --> 00:40:39,520 และคนที่อยู่ภายในและ b เป็น เรียงรายขึ้นไปจะเหมือนกับ x และ y 919 00:40:39,520 --> 00:40:42,610 แต่พวกเขาไม่ได้เป็น สิ่งเดียวกับ x และ y 920 00:40:42,610 --> 00:40:46,880 >> มันเหมือนกับว่ามีหลักในส่วนของตน กระดาษหมายเลข 1 และ 2 สำหรับ x และ y, 921 00:40:46,880 --> 00:40:49,260 และจากนั้นเมื่อมันมือที่ ชิ้นส่วนของกระดาษที่จะสลับ, 922 00:40:49,260 --> 00:40:51,970 Swap อย่างรวดเร็วได้รับ ปากกาของตัวเองเขียนลง 923 00:40:51,970 --> 00:40:56,240 1 และ 2 บนแผ่นของตัวเองของกระดาษ มือกลับเซ็กซี่เดิมไปยังหน้าหลัก 924 00:40:56,240 --> 00:40:58,790 และจากนั้นไม่เป็นของตัวเอง สิ่งที่มีและ b 925 00:40:58,790 --> 00:41:01,940 และนี่คือตอนนี้สิ่งที่สำคัญสุดเพราะ นี้มีผลกระทบขี้ปะติ๋ว 926 00:41:01,940 --> 00:41:06,260 สำหรับจริงเขียนรหัสที่ถูกต้อง เพราะมันจะดูเหมือนเราไม่สามารถแลกเปลี่ยน 927 00:41:06,260 --> 00:41:07,500 สองตัวแปร 928 00:41:07,500 --> 00:41:09,150 >> ฉันได้เขียนฟังก์ชั่นสลับที่ถูกต้อง 929 00:41:09,150 --> 00:41:12,770 เราได้ดำเนินการกับลอเรนเป็น ฟังก์ชั่นการแลกเปลี่ยนที่ถูกต้องในความเป็นจริง 930 00:41:12,770 --> 00:41:16,700 แต่เห็นได้ชัดว่าไม่มี เรื่องถ้าคุณไม่สามารถจริง 931 00:41:16,700 --> 00:41:19,530 สลับสองค่าอย่างถาวร 932 00:41:19,530 --> 00:41:21,970 ดังนั้นเราจึงต้องมีวิธีอื่น ที่จะได้รับจริงที่นี้ 933 00:41:21,970 --> 00:41:24,472 และเราจะต้องสามารถที่จะ จริงแก้ปัญหานี้ 934 00:41:24,472 --> 00:41:27,180 และมันจะเปิด out-- และเราจะมา กลับไปที่ภาพนี้โดยเฉพาะอย่างยิ่ง 935 00:41:27,180 --> 00:41:30,500 ก่อนที่จะ long-- นี้เป็นหนึ่งในวิธีการที่ คุณอาจวาดหน่วยความจำของคอมพิวเตอร์ของคุณ 936 00:41:30,500 --> 00:41:31,460 มันเป็นเพียงรูปสี่เหลี่ยมผืนผ้า 937 00:41:31,460 --> 00:41:32,960 คุณสามารถวาดมัน ๆ หลายวิธี แต่ก็ 938 00:41:32,960 --> 00:41:35,740 สะดวกในการวาดมันเป็น สี่เหลี่ยมผืนผ้าด้วยเหตุผลดังต่อไปนี้ 939 00:41:35,740 --> 00:41:40,040 >> เรากำลังจะเริ่มต้นในวันนี้และเกิน พูดคุยเกี่ยวกับสแต็คที่เรียกว่า 940 00:41:40,040 --> 00:41:43,870 และสแต็คเป็นเพียงก้อน ของ RAM-- ก้อน memory-- 941 00:41:43,870 --> 00:41:47,100 ฟังก์ชั่นที่มีการเข้าถึง เมื่อพวกเขากำลังเรียก 942 00:41:47,100 --> 00:41:49,800 และดังนั้นจึงปรากฎว่าที่ ด้านล่างสุดของสแต็คนี้ 943 00:41:49,800 --> 00:41:53,590 เป็นที่ที่ทุกตัวแปรท้องถิ่นของหลัก และ org ซีและวี org และทุกสิ่งที่ 944 00:41:53,590 --> 00:41:56,950 จะไปโดยปริยาย และถ้าหลัก เรียกบางฟังก์ชั่นอื่น ๆ เช่น Swap, 945 00:41:56,950 --> 00:42:00,330 ดี Swap เป็นไปได้อีก ชั้นของหน่วยความจำได้ข้างต้นนั้น 946 00:42:00,330 --> 00:42:04,490 >> และเพียงเพื่อที่จะให้คุณได้อย่างรวดเร็วคร่าวๆ ภาพนี้ถ้าผมไปมากกว่า here-- 947 00:42:04,490 --> 00:42:09,450 และแจ้งให้เราสะท้อนนี้ใน ค่าใช้จ่ายเป็น well-- จริงๆสิ่งที่ฉันมี 948 00:42:09,450 --> 00:42:12,100 ถ้าเราจะดูแลเกี่ยวกับ ด้านล่างของภาพนี้สำหรับตอนนี้ 949 00:42:12,100 --> 00:42:15,070 คือเมื่อเรียกใช้โปรแกรม และหลักที่ได้รับการเรียกว่า 950 00:42:15,070 --> 00:42:18,330 หลักจะได้รับก้อนของ RAM ในเครื่องคอมพิวเตอร์ของฉันที่เป็น 951 00:42:18,330 --> 00:42:20,060 ที่ด้านล่างของสแต็คนี้ที่เรียกว่า 952 00:42:20,060 --> 00:42:22,143 และฉันจะวาดมัน จงใจเป็นตาราง 953 00:42:22,143 --> 00:42:24,540 ดังนั้นจึงเป็นเช่น 32 บิตหรือสี่ไบต์ 954 00:42:24,540 --> 00:42:28,790 และถ้าฟังก์ชั่นหลักมี เรียกว่าตัวแปร x มีค่าเป็น 1 955 00:42:28,790 --> 00:42:32,626 และมีตัวแปรที่เรียกว่า y ที่มีค่าของ 2, ที่ 956 00:42:32,626 --> 00:42:35,750 เหมือนการเศษไม้จากหน่วยความจำนี้ว่า หลักที่ได้รับจากการดำเนินงาน 957 00:42:35,750 --> 00:42:38,850 ระบบและการหารขึ้นเพื่อให้ ตัวแปรท้องถิ่นครั้งแรกไปที่นี่ 958 00:42:38,850 --> 00:42:40,930 คนที่สองไปที่นี่และที่มัน 959 00:42:40,930 --> 00:42:45,590 >> เมื่อสายหลัก Swap, Swap ได้รับส่วนแบ่งของตัวเองของหน่วยความจำ 960 00:42:45,590 --> 00:42:48,280 ว่าเราจะวาดเช่นนี้ จากระบบปฏิบัติการ 961 00:42:48,280 --> 00:42:50,820 และก็จะมีของ ตัวแปรท้องถิ่นของตัวเองตาม 962 00:42:50,820 --> 00:42:53,825 ในการดำเนินงานของเราก่อนหน้านี้ กับตัวแปรท้องถิ่น 963 00:42:53,825 --> 00:42:58,010 และ B ที่เริ่ม ได้รับค่าที่ 1 และ 2 964 00:42:58,010 --> 00:43:00,450 แต่แล้วทันทีที่ รหัส Swap รัน, 965 00:43:00,450 --> 00:43:03,760 และลอเรนจริงสัญญาแลกเปลี่ยน OJ และนม, สิ่งที่เกิดขึ้น? 966 00:43:03,760 --> 00:43:09,030 ดี 2 นี้จะกลายเป็น 1 นี้ 1 จะกลายเป็น 2 และโดยวิธีการที่ 967 00:43:09,030 --> 00:43:13,360 มีตัวแปรชั่วคราวที่เป็น ที่นำมาใช้ตลอดเวลาว่าในที่สุด 968 00:43:13,360 --> 00:43:14,470 ออกไป 969 00:43:14,470 --> 00:43:16,720 แต่มันไม่สำคัญ วิธีการทำงานมากที่คุณทำ 970 00:43:16,720 --> 00:43:22,160 ในสายนี้ of-- ในพื้นที่หน่วยความจำนี้ x และ y มีแตะต้องสมบูรณ์ 971 00:43:22,160 --> 00:43:26,320 >> ดังนั้นเราจึงต้องมีวิธีการให้บางส่วน Swap และการทำงานเช่นเดียวกับมัน 972 00:43:26,320 --> 00:43:32,640 การเข้าถึงความลับถ้าคุณจะไป ฟังก์ชั่นหน่วยความจำ like-- เช่น x และ y 973 00:43:32,640 --> 00:43:35,110 ดังนั้นลองมาดูที่ ตัวอย่างที่ช่วยให้ 974 00:43:35,110 --> 00:43:38,220 เราเห็นว่าสิ่งที่ได้รับ ที่เกิดขึ้นตลอดเวลานี้ 975 00:43:38,220 --> 00:43:40,284 ฉันจะไปข้างหน้า และเปิดศูนย์เปรียบเทียบ 976 00:43:40,284 --> 00:43:42,200 และฉันจะปิด บั๊กของเราฉันจะ 977 00:43:42,200 --> 00:43:44,360 เพื่อปิดข้อความนี้มองที่น่ากลัว เพียงแค่กล่าวว่ารอสักครู่ 978 00:43:44,360 --> 00:43:45,800 คุณอยู่ในการแก้จุดบกพร่องตรงกลาง 979 00:43:45,800 --> 00:43:48,383 ฉันจะซ่อนแถบนี้ที่นี่ เพียงเพื่อกลับไปที่ความเรียบง่าย 980 00:43:48,383 --> 00:43:50,160 ดังนั้นไม่ต้องกังวลถ้า GDB ถูกฆ่าตาย 981 00:43:50,160 --> 00:43:53,910 นั่นก็หมายความว่าโปรแกรมที่มี รับเลิกจงใจในกรณีนี้ 982 00:43:53,910 --> 00:43:54,820 โดยฉัน. 983 00:43:54,820 --> 00:43:57,700 >> และตอนนี้เปรียบเทียบศูนย์ไม่นี้ 984 00:43:57,700 --> 00:44:00,110 ฉันใช้ CS50 ห้องสมุดมาตรฐาน I / O 985 00:44:00,110 --> 00:44:04,319 ฉันมีฟังก์ชั่นหลักที่แรก กล่าวว่าพูดอะไรบางอย่างและได้รับสตริง 986 00:44:04,319 --> 00:44:06,110 แล้วบอกว่ามันอีกครั้งและ ได้รับสตริงอื่น 987 00:44:06,110 --> 00:44:09,910 และแจ้งให้ทราบว่าทั้งสองสาย จะเรียกว่าเสื้อและตามลำดับ 988 00:44:09,910 --> 00:44:12,910 และตอนนี้โปรแกรมนี้เปรียบเทียบ ศูนย์จุดประสงค์ของมันในชีวิต 989 00:44:12,910 --> 00:44:15,470 มันควรจะบอกฉัน ผมไม่พิมพ์สิ่งเดียวกัน 990 00:44:15,470 --> 00:44:16,910 และเพื่อที่ฉันจะกลับไปหนึ่งสัปดาห์ 991 00:44:16,910 --> 00:44:19,950 ฉันใช้ประกอบการเท่ากันฉันเท่ากัน ซึ่งเป็นผู้ประกอบการที่มีคุณภาพ 992 00:44:19,950 --> 00:44:22,220 ไม่ดำเนินการกำหนด, ผู้ประกอบการความเท่าเทียมกัน 993 00:44:22,220 --> 00:44:23,890 ฉันแค่เปรียบเทียบและเสื้อ 994 00:44:23,890 --> 00:44:27,470 >> ดังนั้นขอจริงไปข้างหน้าและทำเช่นนี้ 995 00:44:27,470 --> 00:44:32,680 และฉันจะไปข้างหน้า และทำให้เปรียบเทียบศูนย์ 996 00:44:32,680 --> 00:44:35,110 ฉันจะทำ ./comparezero 997 00:44:35,110 --> 00:44:37,150 และฉันจะไป ข้างหน้าและพูดอะไรบางอย่าง 998 00:44:37,150 --> 00:44:43,450 เหมือนขอทำแม่ในตัวพิมพ์เล็ก และวิธีการเกี่ยวกับแม่ของตัวพิมพ์ใหญ่ 999 00:44:43,450 --> 00:44:45,034 และแน่นอนฉันพิมพ์สิ่งที่แตกต่าง 1000 00:44:45,034 --> 00:44:45,533 ทั้งหมดขวา 1001 00:44:45,533 --> 00:44:46,570 ที่เป็นที่คาดหวัง 1002 00:44:46,570 --> 00:44:47,640 >> ลองเรียกใช้อีกครั้ง 1003 00:44:47,640 --> 00:44:49,740 ทั้งสองครั้งทำพิมพ์เล็กพิมพ์เล็ก 1004 00:44:49,740 --> 00:44:51,490 ที่มีลักษณะเหมือนซุปเปอร์มาให้ฉัน 1005 00:44:51,490 --> 00:44:52,930 เข้าสู่ 1006 00:44:52,930 --> 00:44:53,430 ตกลง. 1007 00:44:53,430 --> 00:44:55,804 อาจจะเป็นเพียงเพราะแปลก มันไม่ชอบไวยากรณ์ของฉัน 1008 00:44:55,804 --> 00:44:59,930 เพื่อขอทำทุน MOM, ทุน MOM เหม​​ือนกัน 1009 00:44:59,930 --> 00:45:01,490 สิ่งที่แตกต่าง. 1010 00:45:01,490 --> 00:45:03,907 >> เหตุใดจึงเป็นเช่นนั้น? 1011 00:45:03,907 --> 00:45:06,240 ดีสิ่งที่เกิดขึ้นจริง ในใต้ฝากระโปรงที่นี่? 1012 00:45:06,240 --> 00:45:08,180 ดังนั้นขอไปกลับไป ที่นี่เพื่อรอสักครู่ 1013 00:45:08,180 --> 00:45:10,910 และพิจารณาสิ่งที่ GetString จะทำจริง 1014 00:45:10,910 --> 00:45:13,385 เมื่อคุณเรียก GetString, ที่ฟังก์ชั่นที่เรา 1015 00:45:13,385 --> 00:45:16,510 ตัวเองและเขียนมันอย่างใดได้รับ ลำดับของตัวอักษรจากผู้ใช้ 1016 00:45:16,510 --> 00:45:20,280 และให้คิดว่าเป็นครั้งแรก เวลาที่ผมเรียก GetString ที่ทำให้ผม 1017 00:45:20,280 --> 00:45:21,930 ก้อนของหน่วยความจำที่มีลักษณะเช่นนี้ 1018 00:45:21,930 --> 00:45:26,990 และถ้าผมพิมพ์ลงในพิมพ์เล็กทั้งหมด M-o-m-- และสิ่งที่จะไปหลังจากที่มันได้หรือไม่ 1019 00:45:26,990 --> 00:45:28,840 เพียงแค่การตรวจสอบสติอย่างรวดเร็ว 1020 00:45:28,840 --> 00:45:29,780 >> เครื่องหมายศูนย์ 1021 00:45:29,780 --> 00:45:30,510 เรารู้ว่า. 1022 00:45:30,510 --> 00:45:32,784 และจำได้ว่าเราเล่น รอบที่มีชื่อของ Zamila 1023 00:45:32,784 --> 00:45:34,950 และพวงของชื่ออื่น ๆ เมื่อร็อบได้ที่นี่มอง 1024 00:45:34,950 --> 00:45:36,280 ที่สิ่งที่เกิดขึ้นภายในของหน่วยความจำ 1025 00:45:36,280 --> 00:45:37,780 ดังนั้นเรื่องที่ว่ากัน 1026 00:45:37,780 --> 00:45:40,160 นี่คือสิ่งที่ GetString จะกลับมาให้ฉัน 1027 00:45:40,160 --> 00:45:44,780 ตอนนี้รหัสของฉันสักครู่ที่ผ่านมาเก็บไว้ มูลค่าการกลับมาของ GetString 1028 00:45:44,780 --> 00:45:47,510 ในตัวแปรที่เรียกว่าวินาที 1029 00:45:47,510 --> 00:45:51,390 และจากนั้นก็เป็นครั้งที่สองที่ผมเรียกมันว่า มันเก็บไว้ในตัวแปรที่เรียกว่าที 1030 00:45:51,390 --> 00:45:55,070 >> ดังนั้นถ้าผมไปมากกว่าที่นี่ฉันต้องการ การวาด variable-- ท้องถิ่น 1031 00:45:55,070 --> 00:45:59,610 และฉันโดยทั่วไปจะ วาดสตริงเป็น just-- เราจะ 1032 00:45:59,610 --> 00:46:02,360 เรียกว่า s-- เป็นตารางเล็ก ๆ น้อย ๆ ที่นี่ 1033 00:46:02,360 --> 00:46:09,760 และตอนนี้วิธีการที่ไม่ somehow-- แม่ ไปภายในของตัวแปรนี้? 1034 00:46:09,760 --> 00:46:12,010 ดีที่เราต้องกลับไป หลักการแรกที่นี่ 1035 00:46:12,010 --> 00:46:15,660 GetString คืออะไรจริง ๆ แล้วกลับมา? 1036 00:46:15,660 --> 00:46:19,030 >> ดังนั้นจึงปรากฎว่า M-O-M เครื่องหมายศูนย์และหมายเลขใด 1037 00:46:19,030 --> 00:46:22,364 ของสตริงในหน่วยความจำเช่น Zamila และร็อบหรือแอนดี้หรืออื่น ๆ ใด ๆ 1038 00:46:22,364 --> 00:46:24,280 แน่นอนของเรา RAM ของคอมพิวเตอร์หรือหน่วยความจำ 1039 00:46:24,280 --> 00:46:27,760 และ RAM ของคุณมี like-- คุณมี กิ๊กของแรมสองกิ๊กแรม 1040 00:46:27,760 --> 00:46:30,860 หรือพันล้านหรือสองพันล้านไบต์ หรืออาจจะมากยิ่งขึ้นวันนี้ 1041 00:46:30,860 --> 00:46:34,070 ดังนั้นสมมติว่าสำหรับวัตถุประสงค์ของว​​ันนี้ ว่ามันไม่สำคัญว่าเราจำนวน 1042 00:46:34,070 --> 00:46:36,640 พวกเขา แต่เราจะนับในแต่ละ ของผู้พันล้านบาทหรือสองพันล้าน 1043 00:46:36,640 --> 00:46:37,880 หรือสี่พันล้านไบต์ 1044 00:46:37,880 --> 00:46:42,240 >> และให้เพียงพลกล่าวว่า นี้เป็นครั้งแรกที่กัดกัดที่สอง 1045 00:46:42,240 --> 00:46:43,380 สามสี่ 1046 00:46:43,380 --> 00:46:46,570 ฉันจงใจไม่ได้ใช้เป็นศูนย์สำหรับ วันนี้ แต่เราจะกลับมาที่ 1047 00:46:46,570 --> 00:46:49,570 ดังนั้นในคำอื่น ๆ ที่ว่านี้เป็น ครั้งแรกที่ฉันใช้โปรแกรม 1048 00:46:49,570 --> 00:46:52,715 ฉันแค่ได้รับโชคดีและเป็นครั้งแรก กัดที่สถานที่หนึ่งแล้วสอง 1049 00:46:52,715 --> 00:46:53,590 แล้วสามกว่าสี่ 1050 00:46:53,590 --> 00:46:57,430 และถ้าผมเก็บไว้วาดภาพจำนวนกล่อง สองพันล้านจะเป็นวิธีที่มากกว่าที่นี่ 1051 00:46:57,430 --> 00:47:02,200 >> เพื่อให้คุณทำในสิ่งที่คิดแล้ว GetString จริงผลตอบแทน? 1052 00:47:02,200 --> 00:47:06,010 มันไม่ได้กลับมา M-O-M เครื่องหมาย ศูนย์ต่อเนื่องจากที่ชัดเจน 1053 00:47:06,010 --> 00:47:08,180 จะไม่พอดีในกล่องที่ผมได้วาด 1054 00:47:08,180 --> 00:47:11,210 ดังนั้นอะไรที่อาจ getString จริง กลับมาทุกสัปดาห์เหล่านี้หรือไม่ 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 คำตอบคือใน คณะกรรมการที่นี่ที่ไหนสักแห่ง 1057 00:47:16,820 --> 00:47:20,390 คุณไม่สามารถใส่ M-O-M เครื่องหมายศูนย์ ดังนั้นสิ่งที่อาจทำให้รู้สึกแทน? 1058 00:47:20,390 --> 00:47:23,424 หากคุณมีที่จะฉลาดสุดวาง บนหมวกวิศวกรรมที่เรียกว่า 1059 00:47:23,424 --> 00:47:24,340 สิ่งที่คุณจะกลับมา? 1060 00:47:24,340 --> 00:47:27,340 มีอะไรจำนวนน้อยที่สุดของข้อมูล คุณสามารถที่จะกลับไปยัง 1061 00:47:27,340 --> 00:47:30,610 ช่วยให้คุณสามารถหา M-O-M ในหน่วยความจำ? 1062 00:47:30,610 --> 00:47:31,270 ใช่? 1063 00:47:31,270 --> 00:47:31,950 >> ผู้ชม: หนึ่ง 1064 00:47:31,950 --> 00:47:32,200 >> เดวิดเจลัน: หนึ่ง 1065 00:47:32,200 --> 00:47:33,021 และทำไม? 1066 00:47:33,021 --> 00:47:35,520 ผู้ชม: เพ​​ราะมันจะบอก คุณจะไปที่ไหน [ไม่ได้ยิน] 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 เดวิดเจลัน: แน่นอน 1069 00:47:39,390 --> 00:47:44,300 ฉันเพียงแค่จะกลับมาอยู่ ของสตริงที่ผมได้รับ 1070 00:47:44,300 --> 00:47:46,570 ที่อยู่ในนี้ กรณีที่เป็นสถานที่หนึ่ง 1071 00:47:46,570 --> 00:47:51,280 ดังนั้นสิ่งที่เป็นจริงถูกเก็บไว้ใน s-- และตัวแปรสตริงทุกจึง far-- 1072 00:47:51,280 --> 00:47:53,430 เพิ่งรับ ที่อยู่ของสตริงที่ 1073 00:47:53,430 --> 00:47:57,840 >> ในขณะเดียวกันถ้าผมเรียก getString เป็นครั้งที่สองและผม 1074 00:47:57,840 --> 00:48:03,300 พิมพ์ตัวอักษร thing-- เดียวกัน M-O-M กับ lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 และเครื่องหมายศูนย์อีก และตอนนี้อาจจะเป็นโปรแกรมของฉัน 1076 00:48:06,200 --> 00:48:09,820 รับการทำงานบางครั้งจึงอาจนี้ 10 นี้เป็นสถานที่ที่ 11 นี้คือ 12, 1077 00:48:09,820 --> 00:48:10,700 นี้คือ 13 1078 00:48:10,700 --> 00:48:13,590 โดยใช้เครื่องคอมพิวเตอร์อื่น ๆ หน่วยความจำด้วยเหตุผลใด 1079 00:48:13,590 --> 00:48:18,172 สิ่งที่ตอนนี้ไปในครั้งที่สองของฉัน ตัวแปรในเโปรแกรมของฉัน? 1080 00:48:18,172 --> 00:48:19,390 10 1081 00:48:19,390 --> 00:48:20,050 ที่แน่นอน 1082 00:48:20,050 --> 00:48:23,910 >> ดังนั้นเมื่อเรามองไปที่ รหัสที่มาของโปรแกรมนี้ 1083 00:48:23,910 --> 00:48:26,550 ที่ฉันเพียงแค่พยายาม เพื่อเปรียบเทียบค่าสองค่า 1084 00:48:26,550 --> 00:48:32,180 เป็น s เท่ากับเท่ากับ t อะไร คำตอบที่เห็นได้ชัดของมนุษย์? 1085 00:48:32,180 --> 00:48:34,890 เพียงแค่ไม่ได้เพราะ 1 ไม่เท่ากับ 10 1086 00:48:34,890 --> 00:48:36,861 ดังนั้นในที่นี้อยู่ โอกาสที่เราจริงๆ 1087 00:48:36,861 --> 00:48:39,610 เพียงแค่กลับไปอีกครั้งเป็นครั้งแรก หลักการและคิดเกี่ยวกับการดี 1088 00:48:39,610 --> 00:48:41,110 สิ่งที่เกิดขึ้นภายใต้ประทุน? 1089 00:48:41,110 --> 00:48:43,240 เราได้รับการพูดคุยเกี่ยวกับ บิตและไบต์และหน่วยความจำ 1090 00:48:43,240 --> 00:48:46,820 แต่มันเป็นเรื่องจริงที่มีประโยชน์ในการทำความเข้าใจ เพราะเมื่อคุณเรียก GetString, 1091 00:48:46,820 --> 00:48:50,280 แม้ว่าเราคิดว่ามันเป็น กลับ M-O-M หรือแม่สตริง 1092 00:48:50,280 --> 00:48:53,120 หรือแอนดี้หรือ Zamila หรือ ชอบในทางเทคนิค 1093 00:48:53,120 --> 00:48:55,510 มันเป็นเพียงแค่กลับมาอยู่ ของก้อนของหน่วยความจำที่ 1094 00:48:55,510 --> 00:48:56,910 >> แต่ที่ตกลง 1095 00:48:56,910 --> 00:49:00,570 เพราะฉันจะรู้ ที่สิ้นสุดสตริง? 1096 00:49:00,570 --> 00:49:03,840 ถ้าฉันได้รับเพียงจุดเริ่มต้น? 1097 00:49:03,840 --> 00:49:05,380 ดีเครื่องหมายศูนย์ใช่มั้ย? 1098 00:49:05,380 --> 00:49:08,800 เพียงในเวลาที่ฉันสามารถเชิงเส้น พิมพ์ออกมาพร้อมกับความละเอียดการพิมพ์ M-O-M 1099 00:49:08,800 --> 00:49:11,820 และทันทีที่ผมเห็นเครื่องหมาย ศูนย์ฉันไม่สนใจที่ผมเริ่มต้น 1100 00:49:11,820 --> 00:49:14,950 ผมรู้อยู่แล้วว่าโดยปริยาย ที่ฉันต้องการที่จะจบ 1101 00:49:14,950 --> 00:49:18,700 >> และในวันนี้นับเป็น beginning-- และ ให้ฉันทำเช่นนี้อย่างมากเพราะเรา 1102 00:49:18,700 --> 00:49:21,800 เดินผ่านจำนวนมากของปัญหาไปยัง เหล่านี้ได้รับการฝึกอบรมที่นี่ wheels-- 1103 00:49:21,800 --> 00:49:29,840 ดังนั้นวันนี้ล้อการฝึกอบรมเริ่มต้น ที่จะออกมาและเราแสดงให้เห็นใน least-- 1104 00:49:29,840 --> 00:49:31,373 >> [APPLAUSE] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> นั่นก็คุ้มค่าการเดินทาง เพื่อเป้าหมายในเช้าวันนี้ใช่? 1107 00:49:36,160 --> 00:49:39,600 ดังนั้น now-- มีก็จะเปิด ออกมาไม่มีสิ่งเช่นสตริง 1108 00:49:39,600 --> 00:49:41,140 String ไม่อยู่ 1109 00:49:41,140 --> 00:49:43,760 มันเป็นคำพ้องความหมายที่เราได้มี ภายในห้องสมุดของ CS50 1110 00:49:43,760 --> 00:49:48,660 ต่อ แต่นี้ไปเราจะเริ่มเรียก และเสื้อไม่สาย แต่ดาวถ่าน 1111 00:49:48,660 --> 00:49:51,180 และดาวถ่านที่เราจะ หยอกล้อออกจากกันก่อนที่จะยาว 1112 00:49:51,180 --> 00:49:53,510 แต่นี้คือการพูด แม้ว่าเรายังคง 1113 00:49:53,510 --> 00:49:56,180 ใช้ GetString สำหรับตอนนี้ ในทางเทคนิคผมควร 1114 00:49:56,180 --> 00:49:59,010 จะบอกว่าดาวถ่านและถ่านดาว 1115 00:49:59,010 --> 00:50:01,720 >> และปรากฎว่าสิ่งที่ดาว เป็นไปเพื่อแสดงถึงบางสิ่งบางอย่าง 1116 00:50:01,720 --> 00:50:04,340 เรียกว่าเป็นตัวชี้หรือที่อยู่ 1117 00:50:04,340 --> 00:50:06,110 และในความเป็นจริงทีเซอร์ สำหรับสิ่งที่อยู่ข้างหน้า 1118 00:50:06,110 --> 00:50:09,760 นี่คือ 20 คลิปที่สองจากเรา เพื่อนนิค Parlante ที่ Stanford 1119 00:50:09,760 --> 00:50:12,927 ที่ค่อนข้างบางเวลาที่ผ่านมาการใช้จ่าย เป็นจำนวนเงินที่ไร้สาระของเวลา 1120 00:50:12,927 --> 00:50:15,010 ดีที่สุดเท่าที่ผมสามารถบอกได้ในของเขา ห้องครัวหรือห้องใต้ดินของเขา 1121 00:50:15,010 --> 00:50:17,140 ทำให้ claymation แนะนำไปทั่วโลก 1122 00:50:17,140 --> 00:50:20,010 ตัวละครที่มีชื่อว่า บิงกี้กับผู้ที่เราจะ 1123 00:50:20,010 --> 00:50:22,010 ได้รับการแนะนำในครั้งต่อไปที่จะชี้ 1124 00:50:22,010 --> 00:50:24,588 ดังนั้นนี่คือตัวอย่างของสิ่งที่จะมา 1125 00:50:24,588 --> 00:50:26,370 >> [วิดีโอเล่นภาพ] 1126 00:50:26,370 --> 00:50:27,510 >> -Hey, บิงกี้ 1127 00:50:27,510 --> 00:50:28,260 ตื่น. 1128 00:50:28,260 --> 00:50:30,672 ถึงเวลาที่ตัวชี้เพื่อความสนุกสนาน 1129 00:50:30,672 --> 00:50:31,616 >> -นั่นอะไร? 1130 00:50:31,616 --> 00:50:33,032 เรียนรู้เกี่ยวกับตัวชี้? 1131 00:50:33,032 --> 00:50:34,450 โอ้สิ่งที่ดี 1132 00:50:34,450 --> 00:50:35,431 >> [จบเล่นภาพ] 1133 00:50:35,431 --> 00:50:38,055 เดวิดเจลัน: และเมื่อทราบว่า เราจะเห็นคุณในวันพุธที่ 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 ทั้งหมดขวา 1136 00:50:48,090 --> 00:50:48,740 ใครเต้น? 1137 00:50:48,740 --> 00:50:49,240 เข้ามา. 1138 00:50:49,240 --> 00:50:50,330 ใครเต้น? 1139 00:50:50,330 --> 00:50:51,820 คุณต้องการให้ฉันไปรับมันเริ่มต้น? 1140 00:50:51,820 --> 00:50:53,770 ฉันจะได้รับมันเริ่มต้น 1141 00:50:53,770 --> 00:50:54,270 Woooo! 1142 00:50:54,270 --> 00:51:04,070 1143 00:51:04,070 --> 00:51:07,580 >> LAUREN: โมเสสแฟนซีหวาน