>> เดวิดเจลัน: นี่คือ CS50 และ นี้คือจุดเริ่มต้นของสัปดาห์ที่สี่
และเด็กที่อยู่ในโฟล์คสวาเกน เพราะทุกปัญหาของซอฟต์แวร์
ขอให้เรามาดู
[วิดีโอเล่นภาพ]
-Cars ตัวละครที่ฉลาด ในภาพยนตร์ Fast and Furious
สัปดาห์นี้ automaker เยอรมัน โฟล์คสวาเกนพบว่าตัวเอง
ในช่วงกลางของเรื่องอื้อฉาวของที่ สัดส่วนความผิดทางอาญาที่อาจเกิดขึ้น
>> -Volkswagen จะสดชื่นสำหรับพันล้าน ในการปรับค่าใช้จ่ายทางอาญาที่เป็นไปได้
สำหรับผู้บริหารที่เป็น บริษัท ขอโทษ
สำหรับเสื้อผ้า 11 ล้านรถ มันช่วยให้ชนะการทดสอบการปล่อยมลพิษ
>> รุ่นดีเซลเป็น -Certain การออกแบบที่มีซอฟต์แวร์ที่ซับซ้อน
ว่าข้อมูลที่ใช้รวมทั้ง ตำแหน่งของพวงมาลัยและยานพาหนะ
เพิ่มความเร็วในการตรวจสอบรถเป็น ระหว่างการทดสอบการปล่อยก๊าซเรือนกระจก
ภายใต้สถานการณ์ที่เครื่องยนต์ จะช่วยลดการปล่อยก๊าซที่เป็นพิษ
แต่รถที่ถูกขึงเพื่อบายพาส ว่าเมื่อมันถูกขับเคลื่อน
ปล่อยก๊าซเรือนกระจกที่เพิ่มขึ้น 10-40 ครั้งสูงกว่าระดับที่ยอมรับได้ของ EPA
>> [จบเล่นภาพ]
>> เดวิดเจลัน: ดังนั้นขอ ดูที่นี้
และดูว่าวิธีการนี​​้ อาจจะมีการดำเนินการ
และวิธีการนี​​้อาจส่งผลกระทบ รถยนต์จำนวนมากเช่นนี้
ดังนั้นในมือของฉันที่นี่กด ที่ถูกปล่อยออกโดย EPA--
สิ่งแวดล้อม ซึ่งหน่วยงานคุ้มครอง
เป็นหน่วยงานกำกับดูแลของสหรัฐว่า จัดการปัญหาสิ่งแวดล้อม
แล้วที่เกิดขึ้นจริง แจ้งให้ทราบทางกฎหมายที่เป็น
ส่งให้กับโฟล์คสวาเกนเพียงไม่กี่วันที่ผ่านมา
>> ดังนั้น EPA เขียนและเปิดเผยในขณะนี้ สาธารณชนเป็นซอฟต์แวร์ที่ซับซ้อน
อัลกอริทึมในบางอย่าง รถโฟล์คสวาเกนที่ตรวจพบ
เมื่อรถอยู่ระหว่างการ ปล่อยก๊าซเรือนกระจกอย่างเป็นทางการของการทดสอบ
และเปลี่ยนการปล่อยเต็มรูปแบบ ควบคุมเฉพาะในระหว่างการทดสอบ
ประสิทธิผลของ เหล่านี้มลพิษยานพาหนะ
อุปกรณ์ควบคุมการปล่อยก๊าซเรือนกระจกเป็นอย่างมาก ลดลงในช่วงการขับรถปกติ
สถานการณ์
ส่งผลให้รถยนต์ที่ตอบสนองความ มาตรฐานในห้องปฏิบัติการหรือการทดสอบ
สถานี แต่ในระหว่างการดำเนินงานปกติ ปล่อย oxides-- ไนโตรเจนหรือ NOx--
ที่สูงถึง 40 เท่ามาตรฐาน
ซอฟแวร์ที่ผลิตโดยโฟล์คสวาเกน ได้นำมาอ้างเป็นใบเสนอราคาอุปกรณ์ความพ่ายแพ้
ตามที่กำหนดโดยการทำความสะอาด พระราชบัญญัติอากาศในสหรัฐอเมริกา
>> พวกเขาไปในการที่จะบอกว่า ของ EPA และหน่วยงานอื่น
เปิดอุปกรณ์ความพ่ายแพ้ ซอฟแวร์หลังจากการวิเคราะห์ที่เป็นอิสระ
โดยนักวิจัยที่เวสต์ มหาวิทยาลัยเวอร์จิเนีย
มลพิษ NOx ก่อให้เกิดการ ก๊าซไนโตรเจนไดออกไซด์, ระดับพื้นดินโอโซน
และฝุ่นละอองได้ดี
การได้รับสารเหล่านี้ มลพิษได้รับการเชื่อมโยง
ที่มีความหลากหลายของ ผลกระทบต่อสุขภาพอย่างรุนแรง
รวมทั้งโรคหอบหืดเพิ่มขึ้น การโจมตีและระบบทางเดินหายใจอื่น ๆ
การเจ็บป่วยที่สามารถร้ายแรงพอ จะส่งคนไปที่โรงพยาบาล
การสัมผัสกับโอโซนและ อนุภาคยังมี
ที่เกี่ยวข้องกับการคลอดก่อนกำหนด เสียชีวิตเนื่องจากระบบทางเดินหายใจที่เกี่ยวข้อง
หรือผลกระทบที่เกี่ยวข้องกับโรคหัวใจและหลอดเลือด
เด็กผู้สูงอายุคนที่มี โรคทางเดินหายใจมาก่อน
โดยเฉพาะอย่างยิ่งที่มีความเสี่ยง ผลกระทบต่อสุขภาพของสารมลพิษเหล่านี้
>> พอเพียงคือการพูดก็ค่อนข้างรุนแรง
และให้ไปอ่าน เพียงหนึ่งในข้อความที่ตัดตอนมามากขึ้น
และจากนั้นเราจะดูที่ ความหมายพื้นฐาน
นี้ในบริบทของรถ
โดยเฉพาะอย่างโฟล์คสวาเกน ผลิตและติดตั้ง
ซอฟแวร์ในสิ่งที่เรียกว่า ควบคุมอิเล็กทรอนิกส์
module-- หรือ ECM-- ของ ยานพาหนะเหล่านี้รู้สึกว่า
เมื่อรถกำลังถูกทดสอบสำหรับ การปฏิบัติตามมาตรฐานการปล่อย EPA
ขึ้นอยู่กับปัจจัยการผลิตต่าง ๆ รวมทั้ง ตำแหน่งของพวงมาลัยรถ
ความเร็วของเครื่องยนต์ในช่วงระยะเวลาของ การดำเนินงานและความกดดันของบรรยากาศ,
ปัจจัยการผลิตเหล่านี้ได้อย่างแม่นยำ ติดตามพารามิเตอร์
ในขั้นตอนการทดสอบของรัฐบาลกลางที่ใช้ในการ การทดสอบการปล่อยก๊าซเรือนกระจกสำหรับการรับรอง EPA
วัตถุประสงค์
>> ในระหว่างการทดสอบการปล่อยของ EPA, ยานพาหนะซอฟต์แวร์ ECM
วิ่งซอฟต์แวร์ที่ผลิต ผลการปล่อยก๊าซเรือนกระจกตาม
ทุกครั้งอื่น ๆ รถซอฟต์แวร์ ECM
วิ่งถนนที่แยกจากกัน การสอบเทียบที่ลดลง
ประสิทธิภาพของ ระบบการควบคุมการปล่อยก๊าซโดยรวม
โดยเฉพาะการเร่งปฏิกิริยาเลือก การลดลงของการผลิตแบบลี NOx trap--
ซึ่งเราจะเห็นเกี่ยวกับในช่วงเวลาที่
เป็นผลให้การปล่อย NOx เพิ่มขึ้นโดยปัจจัยที่ 10-40 ครั้ง
ดังกล่าวข้างต้นในระดับที่สอดคล้องกับ EPA ขึ้นอยู่กับชนิดของวงจรไดรฟ์
>> ดังนั้นสิ่งนี้จริงๆหมายถึงและ รหัสแหล่งที่มาการทำงานซอฟต์แวร์
ในโฟล์คสวาเกนไม่ได้ ยังได้รับการเปิดเผยต่อสาธารณชน
คือการที่มีประสิทธิภาพนี้ เทียบเท่าคือบางแห่งมีอยู่ภายใน
รหัสโฟล์คสวาเกน
หากคุณกำลังมีการทดสอบและถ้ารถ ตรวจพบปัจจัยแวดล้อมบางอย่าง
เช่นพวงมาลัย ตำแหน่งหรือการเคลื่อนไหว
หรือขาดมันของรถหรือ ใด ๆ จำนวนของปัจจัยอื่น ๆ
ที่มีการตั้งสมมติฐานในปัจจุบัน เป็นส่วนหนึ่งของสูตรนี้
พวกเขาเพียงแค่บนเปิด การปล่อยการควบคุมเต็มรูปแบบ
ในคำอื่น ๆ พวกเขาเริ่มต้น เปล่งน้อยมลพิษ
>> อื่น ๆ ในทุกสถานการณ์อื่น ๆ เมื่อมันไม่ได้ตรวจพบว่าเป็น
ในห้องปฏิบัติการที่พวกเขาทำไม่ได้
และเพื่อให้คุณสามารถลดความซับซ้อนนี้ลงมากขึ้น pseudocode คอนกรีตที่มีบางสิ่งบางอย่าง
อย่างนี้.
ถ้าล้อจะเปลี่ยน แต่ พวงมาลัยไม่ได้ชี้นำ
ว่ารถที่อยู่ในบางส่วน ชนิดของการสูบหมุน
แต่ในบางชนิด คลังสินค้าถูกทดสอบ
แล้วทำตัวเป็น EPA ต้องการให้คุณ
มิฉะนั้นจะไม่
ดังนั้นลองมาดู วิดีโอสั้น ๆ ว่า
จะดูในสิ่งที่เป็นผลกระทบ มีกลไกนี้จริง
>> [วิดีโอเล่นภาพ]
>> -Last ศุกร์ EPA ประกาศว่าบาง ออดี้โฟล์คสวาเกนคันระหว่าง 2009
และในปีนี้ได้ใช้ อุปกรณ์ความพ่ายแพ้ที่เรียกว่า
จะได้รับรอบกฎหมายการปล่อยก๊าซ ที่ออกแบบมาเพื่อรักษาความสะอาดอากาศ
แต่สิ่งที่หมายความว่าว่า?
>> ดีรถยนต์สมัยใหม่มีหลายสิบ ของเครื่องคอมพิวเตอร์ในพวกเขา
และบางส่วนของคอมพิวเตอร์เหล่านั้น ช่วยประสานการทำงาน
ของเครื่องยนต์ที่ดีที่สุดสำหรับ ผลการดำเนินงานในขณะที่การทำให้แน่ใจว่า
ว่าจะไม่มีขยะมากเกินไป ออกมาจากท่อไอเสีย
พวกเขาได้รับจริงการทำงาน วิธีนี้เป็นเวลาหลายทศวรรษที่ผ่านมาในขณะนี้
โดยทั่วไปทุกส่วน ของเครื่องยนต์รถที่ทันสมัย
มีเซ็นเซอร์หรือตัวควบคุม ในนั้นและคอมพิวเตอร์เหล่านี้
กำลังอ่านข้อมูลในพันของ ครั้งต่อการปรับเปลี่ยนการทำสอง
เช่นอัตราส่วนของน้ำมันเชื้อเพลิงกับอากาศ ที่จะเข้าสู่กระบอกสูบ
>> เหล่านี้โกงโฟล์คสวาเกน และรูปแบบของออดี้เป็นดีเซล
และดีเซลมีมากขึ้น คอมพิวเตอร์ที่สำคัญจริงๆ
พารามิเตอร์ควบคุมซึ่งเป็น ปริมาณของน้ำมันเชื้อเพลิงที่เผาไหม้ไป
เข้าไปในไอเสีย
ตอนนี้เสียงที่ไม่ดี
ไม่ได้เสียงเหมือนที่คุณต้องการ เผาไหม้น้ำมันเชื้อเพลิงที่จะเข้าสู่ไอเสีย
แต่ในกรณีของที่ ดีเซลคุณมีสิ่งที่
เรียกว่ากับดัก NOx ซึ่งเป็นอุปกรณ์ที่ ดูดซับและกับดักสำหรับไนโตรเจนออกไซด์
ที่มีสารมลพิษที่จะ เป็นอย่างอื่นไปสู่​​ชั้นบรรยากาศ
และผลของกับดัก NOx ที่ จะเพิ่มขึ้นด้วยน้ำมันเชื้อเพลิงที่เผาไหม้
ดังนั้นอุปกรณ์ความพ่ายแพ้เป็นโปรแกรมพิเศษ ภายในเครื่องคอมพิวเตอร์เหล่านี้ที่สามารถทำให้มัน
มีลักษณะเหมือนรถที่เป็นไปตามการปล่อยก๊าซ มาตรฐานแม้ในขณะที่มันไม่ได้
โฟล์คสวาเกนมีปัญหาในมือของ
เครื่องยนต์ดีเซลของมันเป็นที่รู้จัก สำหรับการประหยัดน้ำมันเชื้อเพลิงที่ดี
แต่กับดัก NOx การทำงานเพียงอย่างดี เชื้อเพลิงมากขึ้นเมื่อมีการใช้
ดังนั้นรถที่จะตรวจสอบ โดยใช้อุปกรณ์ความพ่ายแพ้นี้
เมื่อมันได้รับการปล่อย การทดสอบก็จะใช้น้ำมันเชื้อเพลิงมากขึ้น
ทำให้การทำงานกับดัก NOx ดี การปล่อยก๊าซจะปรับ
แต่แล้วคุณจะได้รับบนถนนที่อุปกรณ์ จะปิดที่คุณกำลังเผาไหม้น้ำมันเชื้อเพลิงน้อยลง
แต่คุณใส่มากถึง 40 ครั้ง มลพิษมากขึ้นสู่ชั้นบรรยากาศ
แต่วิธีการทำห่า รถรู้ว่ามันเป็น
การทดสอบการปฏิบัติตามการปล่อย?
ของ EPA บอกว่ามันเป็นที่มีความซับซ้อน ระบบการตรวจสอบว่าสิ่งที่
เช่นตำแหน่งที่พวงมาลัย ความเร็วนานแค่ไหนเครื่องยนต์บน
และแม้กระทั่งความดันบรรยากาศ
ในคำอื่น ๆ ที่มี ไม่มีวิธีนี้เป็นอุบัติเหตุ
เนื่องจากซอฟต์แวร์เป็น ได้รับการออกแบบอย่างระมัดระวังในการตรวจสอบ
การทดสอบการปล่อยอย่างเป็นทางการ
นั่นเป็นบางอย่างสวย การหลอกลวงและที่
ทำไมโฟล์คสวาเก้นใน เช่นปัญหาร้ายแรง
ในความเป็นจริงพวกเขาซีอีโอมาร์ติน Winterkorn เพียงก้าวลง
>> ดังนั้นสิ่งที่เกิดขึ้นต่อไป?
ดีถ้าคุณเป็นหนึ่งในช่วงครึ่งล้าน Jettas ดีเซลบีทเทิล, โรงแรมพร้อมสนามกอล์ฟ, Passats,
หรือออดี้ A3s ผลกระทบ, ข่าวดีก็คือเป็น
ที่รถของคุณยังคงมีความปลอดภัยในการขับรถ
คุณไม่จำเป็นต้องที่จะนำมันออกไป จนกว่าปัญหาโฟล์คสวาเกนเรียกคืน
แต่ในบางจุดที่พวกเขากำลัง อาจจะมี
การปรับปรุงซอฟแวร์ที่อยู่ภายในรถของคุณ
ที่เกิดขึ้นเมื่อคุณอาจ ได้รับไมล์น้อยต่อถัง
ทนายความที่มีอยู่แล้วใส่เกียร์ สำหรับคดีการเรียน
เจ้าของนั้นอาจได้รับการชดเชย ที่จุดในอนาคตบาง
แต่ที่ไม่ได้ไป เกิดขึ้นในเร็ว ๆ นี้
>> [จบเล่นภาพ]
เดวิดเจลัน: ดังนั้นนี้จริงยก คำถามที่น่าสนใจภาพใหญ่
ขณะที่ให้ความไว้วางใจ
ใช่มั้ย?
เราทุกคนมี iPhones หรือหุ่นยนต์หรือ สิ่งที่อยู่ในกระเป๋าของเราส่วนใหญ่มีแนวโน้ม
วันนี้หรือแล็ปท็อป บนตักของเราที่มี
ซอฟต์แวร์ที่ทำงานทำ โดยแอปเปิ้ลและไมโครซอฟ
และอัดแน่นของ บริษัท อื่น ๆ
แต่วิธีการที่เราจะรู้ว่าสิ่งที่ ผลิตภัณฑ์ซอฟต์แวร์เหล่านี้จะทำ
เป็นจริงสิ่งเหล่านี้ บริษัท กล่าวว่าพวกเขากำลังทำอะไร?
>> ยกตัวอย่างเช่นผู้ที่จะ พูดได้ว่าทุกครั้งที่คุณ
โทรบน iPhone ของคุณ หรือโทรศัพท์ Android หรือเหมือน
หมายเลขโทรศัพท์ที่ยังไม่ได้ ถูกอัพโหลดไปยังเซิร์ฟเวอร์ของ บริษัท บางส่วน
เพราะโปรแกรมบางอย่างที่คุณได้ เขียนไม่ว่าจะเป็นการดำเนินงาน
ระบบตัวเองเช่น iOS หรือ Android, หรือเพราะคุณได้ดาวน์โหลด
บางแอพพลิเคของบุคคลที่สาม ที่ใดจะฟัง
ทุกสิ่งที่คุณกำลังพิมพ์หรือ ทุกสิ่งที่คุณกำลังจริงว่า
คุณจะรู้ว่าเมื่อ พวกคุณกำลังทำงานเสียงดังกราว
หรือทำให้การรวบรวมของคุณ ซอฟต์แวร์ของตัวเองใน CS50 วิธี
คุณทำพนักงานของตัวเองที่ CS50, โดยวิธีการของห้องสมุด CS50,
ยังไม่ได้เข้าสู่ระบบทุก สตริงที่คุณเคยเคย
หรือทุกนิ้วคุณเคยเคย?
ดีที่คุณสามารถมองอย่างแน่นอน รหัสที่มาสำหรับบางสิ่งบางอย่าง
เช่นห้องสมุด CS50 คุณ สามารถดูรหัสแหล่งที่มา
สำหรับระบบปฏิบัติการลินุกซ์ ที่ทำงานบน CS50 IDE
แต่ที่น่าตื่นตาตื่นใจนำเสนอ ที่ได้รับกลับมาในปี 1984
ในการรับของรางวัลทัวริงโดย นักวิทยาศาสตร์คอมพิวเตอร์ที่มีชื่อเสียงมากเป็นที่รู้จักกัน
as-- ชื่อเคน ธ อมป์สันที่ ได้รับรางวัลทัวริงซึ่ง
คือการจัดเรียงของวิทยาการคอมพิวเตอร์ รางวัลโนเบล, ถ้าคุณจะ
สำหรับการทำงานของเขาใน ระบบปฏิบัติการที่เรียกว่า
Unix ซึ่งเป็นคล้ายกันมากใน จิตวิญญาณกับสิ่งที่เราใช้ซึ่งเป็นลินุกซ์
และคำถามที่เขาถามเขา คำพูดที่ได้รับการยอมรับเป็นหลัก
วางกรอบการทำงานสำหรับ ปีและปีของการสนทนา
เกี่ยวกับความไว้วางใจและการรักษาความปลอดภัยเป็นอย่างนี้
สิ่งที่ขอบเขตควรไว้วางใจหนึ่ง คำสั่งที่ program-- ชิ้น
ของ software-- ฟรีม้าโทรจัน?
บางทีมันอาจจะเป็นสิ่งสำคัญมากที่จะไว้วางใจ คนที่เขียนซอฟแวร์
>> และในความเป็นจริงเราได้เชื่อมโยง ที่จะพูดว่าเขา
ให้เมื่อรับรางวัลนี้ ในยุค 80 ในเว็บไซต์ของ CS50
ภายใต้หน้าบรรยายสำหรับวันนี้
เพราะสิ่งที่คุณจะเห็น คือว่าเขาจริงให้
เป็นตัวอย่างที่ค่อนข้างง่ายของวิธีการที่แม้แต่ คอมไพเลอร์เช่นเสียงดังกราวหรืออะไรก็ตาม
คอมไพเลอร์คนอื​​่น ๆ ได้ใช้ในอดีตที่ผ่านมา สิ่งที่ถ้าคอมไพเลอร์ที่ฝังอยู่ในพวกเรา
ตัวเองกำลังใช้เป็นเพียงเล็กน้อยถ้า สภาพที่เป็นหลักกล่าวว่า
ถ้าคุณสังเกตเห็นว่ารหัสนี้จะใช้ ฟังก์ชั่น GetString หรือ GetInt
ฟังก์ชั่นไปข้างหน้าและใส่ ประตูหลังหรือม้าโทรจัน
ดังกล่าวว่าโปรแกรมที่ ขณะนี้มีบางศูนย์
และคนที่ทำอะไรบางอย่างที่เป็นอันตราย
เข้าสู่ระบบทั้งหมดของคุณ การกดแป้นพิมพ์ข้อมูลที่อัปโหลด
ไปยังเซิร์ฟเวอร์บางอย่างหรืออะไรจริงๆ
>> และสิ่งที่เคน ธ อมป์สัน ไปในการที่จะทำในการพูดคุยของเขา
คือการแสดงให้เห็นว่าแม้ว่า คุณมีการเข้าถึงแหล่งที่มา
รหัสของคอมไพเลอร์ที่ ประสงค์ร้ายอาจจะทำเช่นนี้
มันไม่สำคัญเพราะ มีไก่และไข่
ความเป็นจริงในหลาย ๆ ที่ผ่านมา ปีโดยคอมไ​​พเลอร์
ที่ใช้ในการรวบรวมตัวเอง
ในคำอื่น ๆ ทางด้านหลังเมื่อมีคน ได้มีการเขียนคอมไพเลอร์เป็นครั้งแรก
และหลังจากนั้นเวลาที่พวกเขาได้ปรับปรุง คอมไพเลอร์โดยการเปลี่ยนรหัสแหล่งที่มาของมัน
เพิ่มคุณสมบัติและ recompiling มัน สำหรับคนที่ชอบเราใช้ดี
พวกเขากำลังใช้เก​​่า รุ่นของคอมไพเลอร์
เพื่อรวบรวมใหม่ รุ่นของคอมไพเลอร์
และถ้าคุณลองดู ในการพูดคุยที่เขาให้ที่
คุณจะเห็นว่าเป็นเพราะ ของวัฏจักรที่
คุณจริงจะมีข้อบกพร่องหรือ ม้าโทรจันที่ฝังอยู่ในซอฟแวร์
เรากำลังใช้
และแม้ว่าคุณจะดู รหัสที่มาสำหรับโปรแกรมเหล่านั้น
มันอาจจะไม่ได้เป็นที่เห็นได้ชัด เพราะกลอุบายที่เป็นจริง
ในบางรุ่นเก่าของ คอมไพเลอร์ว่านับตั้งแต่ที่ได้รับ
ภัยคุกคามที่ฉีดเข้าไปในซอฟแวร์ของเรา
>> ซึ่งเป็นเพียงที่จะบอกว่าเรา มันไม่สามารถและไม่ควร
ซอฟแวร์ความไว้วางใจที่ทำงานบนแล็ปท็อปของเรา หรือโทรศัพท์หรือจำนวนของสถ​​านที่ใด ๆ
และในความเป็นจริงต่อไปในภาคการศึกษานี้เมื่อ เราเริ่มพูดคุยเกี่ยวกับการเขียนโปรแกรมเว็บ
และที่จริงเริ่มต้นสร้าง การใช้งานเว็บตัวเอง
เราจะพูดคุยเกี่ยวกับเหล่านี้ ภัยคุกคามและอื่น ๆ
ตอนนี้คุณอาจจะสงสัยและสังเกตเห็น ว่ามีเล็ก ๆ น้อยดาร์ท
เวเดอร์ในคลิปที่ หมิ่นได้แสดงมี
เกี่ยวกับโฟล์คสวาเกน หาก คุณไม่เคยเห็นผม
คิดว่าเราควรจะเบา อารมณ์เพราะนี่คือทั้งหมดที่
ตกต่ำมากและน่ากลัว
ฉันจะมองย้อนกลับไป ที่ซูเปอร์โบว์ล 2011
เมื่อพาณิชย์ Volkswagen-- นี้
เกือบจะทำให้พวกเขาน่ารัก again-- ออกอากาศเป็นครั้งแรกในทีวี
มันเป็น 60 คลิปที่สอง ที่ผมคิดว่าคุณจะเพลิดเพลินไปกับ
[วิดีโอเล่นภาพ]
[ดนตรี - จากเรื่อง "STAR WARS"]
[สุนัขเปลือก]
[รถเริ่ม]
[จบเล่นภาพ]
เดวิดเจลัน: ใช่
ฉันเป็นเพียงการตรวจสอบ
รถที่อยู่ในรายชื่อของการละเมิด
ทั้งหมดขวา
ดังนั้นเราดูที่บางส่วน pseudocode ช่วงเวลาที่ผ่านมา
และนี่คือที่ใหญ่กว่า ข้อมูลโค้ด pseudocode
ที่เราได้เห็นไม่กี่ครั้งป่านนี้
และให้ใช้นี้เป็นโอกาส ในขณะนี้ที่จะแนะนำการเขียนโปรแกรมใหม่
เทคนิคที่เราทำ ดูอัลกอริทึม
สัปดาห์ที่ผ่านมาเมื่อเรามองไปที่การจัดเรียงผสาน
แต่ขอเป็นระเบียบแบบแผนและดูว่า เราอาจจะใช้มันในรหัสที่เกิดขึ้นจริง
และจากนั้นเราจะใช้วิธีนี้ เทคนิคลงที่ถนนมากที่สุด
มีแนวโน้มที่จะแก้ปัญหาอื่น ๆ
>> ดังนั้นนี่เป็นหนึ่งในโปรแกรมแรกที่เรา เคยเขียนไว้ว่าแม้ว่าในรหัส pseudocode
และสิ่งที่โปรแกรมนี้ ได้รับอนุญาตให้เราทำแน่นอน
คือการหาไมค์สมิ ธ ในสมุดโทรศัพท์
และแจ้งให้ทราบในสายโดยเฉพาะอย่างยิ่งแปด และ 11 ซึ่งมีนี้ไปที่คำสั่ง
และในความเป็นจริงบางอย่าง ภาษา C ในหมู่พวกเขา
ทำจริงมี คำสั่งที่เป็นตัวอักษร
ไปที่ที่ช่วยให้คุณ ข้ามไปยังสายที่เฉพาะเจาะจง
มันขมวดคิ้วเพราะโดยทั่วไปเมื่อ ก็สามารถทำร้ายได้อย่างง่ายดายมาก
และคุณสามารถเริ่มต้นการกระโดดของคุณ โปรแกรมทั่วทุกสถานที่ตรงข้าม
ที่จะใช้ชนิดของ ตรรกะและการควบคุมการไหล
ที่เราเคยใช้ป่านนี้มีเพียง ลูปและเงื่อนไขและไม่ชอบ
>> แต่เราสามารถลดความซับซ้อนของขั้นตอนวิธีนี้ ในรหัส pseudocode ดังต่อไปนี้
แทนการนี​​้ซ้ำแล้วซ้ำอีก หรือวิธีการวนลูป
ที่เราให้ไปกลับ กลับมาและกลับไปเข้าแถวที่สาม
ทำไมเราไม่เพียงแค่ชนิดของม้าและอื่น ๆ โดยทั่วไปกล่าวว่าในสายเจ็ดและ 10
เพียงแทนที่ทั้งสอง คู่สายด้วย
อื่นถ้าสมิ ธ เป็นก่อนหน้านี้ ในหนังสือเล่มนี้เราจะ
ค้นหาไมค์ใน ครึ่งซ้ายของหนังสือเล่มนี้
อื่นถ้าสมิ ธ เป็นในภายหลัง หนังสือค้นหาไมค์ในที่เหมาะสม
ครึ่งหนึ่งของหนังสือเล่มนี้
และแจ้งให้ทราบล่วงหน้าแล้ววัฏจักร
ใช่มั้ย?
ฉันหาไมค์ใน สมุดโทรศัพท์แล้ว
ฉันในที่สุดอาจจะตี เจ็ดเส้นหรือสายอาจจะ 10
และการสอนของฉันกับตัวเองคือการค้นหา สำหรับไมค์ในช่วงครึ่งปีของสมุดโทรศัพท์
ด้วยวิธีการที่ฉันจะค้นหาไมค์?
ผมอยู่ในช่วงกลางของ หาไมค์ทำไม
คุณจะเรียงลำดับของการส่งฉันในวงกลม?
แต่ที่ตกลงเพราะสิ่งที่เป็น ที่เกิดขึ้นกับขนาดของปัญหา
ตามที่เขียนไว้ในบรรทัดที่ 7 และ 10?
เราไม่ได้บอกว่าเพียงแค่การค้นหา สำหรับไมค์ไมค์ค้นหา
เรากำลังจะบอกว่าสิ่งที่เฉพาะ?
ค้นหาสำหรับเขาในช่วงครึ่งทางด้านซ้ายของ ครึ่งขวาซึ่งเป็นได้อย่างมีประสิทธิภาพ
ครึ่งหนึ่งของขนาดของปัญหา
ดังนั้นจึงเป็นที่ตกลงว่าเราชนิดของ มีส่วนร่วมในวัฏจักรนี้
เรื่องนี้เป็นวงกลม เพราะอย่างน้อยเรา
ทำให้ปัญหาที่มีขนาดเล็กและมีขนาดเล็ก
และในที่สุดเรากำลังจะมาถึง กรณีฐานที่เรียกว่าที่
เรามีเพียงหนึ่งหน้า left-- เป็นอาสาสมัครของเราสัปดาห์ที่ผ่านมา
did-- เรามีหนึ่งหน้า ซ้ายและแล้วเราทำไม่ได้
จะต้องเก็บหาไมค์สมิ ธ เพราะเขาเป็นอย่างใดอย่างหนึ่งในหน้านั้น
หรือเขาไม่ได้เป็น
>> ดังนั้นวิธีที่เราสามารถใช้ความคิดนี้นี้ การเรียงลำดับของวัฏจักรในรหัสที่เกิดขึ้นจริง?
ดีที่เราสามารถใช้ประโยชน์จากเทคนิค ที่รู้จักกันโดยทั่วไปเรียกซ้ำ
และเราได้เห็นนี้ใน รหัสจำลองสำหรับการจัดเรียงผสานสัปดาห์ที่ผ่านมา
จำได้ว่านี่คือ รหัสจำลองสำหรับการจัดเรียงผสาน
มันเป็นเนื้อหาได้ง่ายกว่า ฟองหรือการเลือกหรือการจัดเรียงแทรก
เพียง แต่ในแง่ของความเรียบง่าย ที่คุณสามารถแสดงมัน
>> แต่นั่นเป็นเพราะ เราเรียงลำดับของ circularly
ว่าค้นหาบางสิ่งบางอย่าง โดยการค้นหาอีกครั้ง
แต่เรากำลังค้นหาทั้งใน ครึ่งครึ่งทางซ้ายหรือทางขวา
และแล้วในที่สุดเรา การควบรวมกิจการในกรณีนี้
แต่ที่นี่เกินไปกับ ทั้งสองสายการเรียงลำดับ
เราไม่ได้นี้อีกครั้ง ความคิดของการเรียกซ้ำ
และเป็นรูปธรรมสิ่งนี้หมายความว่า, ในบริบทของอัลกอริทึมที่
คือว่าอัลกอริทึมเป็น recursive ถ้าจะใช้หรือเรียกตัวเอง
>> หรือในแง่ของ C ฟังก์ชั่นคือ recursive-- ฟังก์ชั่นที่เรียกว่า
foo เป็น recursive ถ้า foo, ที่ไหนสักแห่งในรหัสที่มาของมัน
เรียกฟังก์ชัน foo ตัวเอง
และที่ไม่ดีถ้า foo ทั้งหมดไม่เคย คือเรียกตัวเองอีกครั้งและอีกครั้ง
มันตกลงถ้า foo ในที่สุดก็หยุดเช่นเดียวกับ ผสานเรียงลำดับโดยกล่าวว่ารอสักครู่
ถ้าปัญหานี้เป็นซุปเปอร์ ขนาดเล็กเช่น
หรือผมพบว่าเขาผู้นั้นที่ฉัน มองหาผลตอบแทนเ​​พียง
อย่าซ้ำไม่ได้ วนอีกครั้งเรียกตัวเองว่า
>> ดังนั้นลองมาดูที่ วิธีนี้จริงอาจจะทำงาน
ดังนั้นฉันจะไปข้างหน้าและเปิด สองตัวอย่างรหัสแหล่งที่มาที่นี่
หนึ่งซึ่งเรียกว่าซิก 0
และนี่คือไม่ได้ทั้งหมด recursive แต่ลอง
ดูสิ่งที่โปรแกรมนี้ไม่
ผมเคยถอดออกทั้งหมด ความคิดเห็นจากมัน แต่ทั้งหมด
ของรหัสที่มาใน CS50 ของ เว็บไซต์ที่มีการแสดงความคิดเห็นถ้าคุณ
ต้องการที่จะอ่านผ่านมันอีกครั้งในภายหลัง
และให้ทำคู่ ของการตรวจสอบสตินี่
>> ดังนั้นที่ด้านบนของรหัสนี้, เรามีรวม CS50.h.
นี้ทำอะไร?
ทำไมมันจึงเป็นที่นี่?
ในแง่คนธรรมดาที่เหมาะสมของ
มันทำอะไร?
ใช่
>> ผู้ชม: เพ​​ื่อให้การทำงานของฟังก์ชั่น GetInt
>> เดวิดเจลัน: เพื่อให้ GetInt งานฟังก์ชั่น
เพราะภายในนี้ ไฟล์ CS50.h ซึ่ง
เราจะเห็นในอีกไม่นาน แง่ของรหัสที่มาของมัน
มีพวงของฟังก์ชั่น declared-- GetInt, GetString,
และพวงของ others-- และเว้นแต่ เราจะมีสายรวม,
เสียงดังกราวคอมไพเลอร์ไม่ได้ จะรู้ว่ามันมีอยู่
และเดียวกันจะไปสำหรับสาย สอง int ที่มีการกำหนด
printf ซึ่งเป็นฟังก์ชั่น เราให้ใช้น้อย
ตอนนี้สายสี่ดูเหมือนว่าขี้ขลาดน้อย เพราะมันเป็นเพียงหนึ่งในสายการบิน
มันมีอัฒภาคไม่หยิก การจัดฟันรหัสภายในของมันไม่มี
แต่สิ่งที่เราเรียกว่าได้ สิ่งนี้ในสัปดาห์ที่ผ่านมา?
ใช่
ดังนั้นต้นแบบ
และทำไมเรามี ต้นแบบซึ่งดูเหมือนว่า
จะเป็นเล็ก ๆ น้อย ๆ ที่ซ้ำซ้อน เพราะโดยปกติเรามักจะ
ดูฟังก์ชันอีกครั้ง ต่อมาในแฟ้มใช่มั้ย?
ดังนั้นทำไมเรา have-- คุณเพียงแค่ เกาหัวของคุณ แต่ฉันจะเอามัน
ใช่
>> ผู้ชม: [ไม่ได้ยิน] ฟังก์ชั่นหลังจากที่หลัก
เดวิดเจลัน: แน่นอน
เพื่อให้คอมไพเลอร์รู้ว่าคุณ ในที่สุดก็จะกำหนดหรือดำเนินการ
ฟังก์ชั่นหลักว่าหลังจากที่สันนิษฐานว่า
ดังนั้นเสียงดังกราวและส่วนใหญ่ คอมไพเลอร์เป็นชนิดของใบ้
และพวกเขาจะรู้ว่า สิ่งที่คุณบอกพวกเขา
และถ้าคุณต้องการที่จะใช้ ฟังก์ชั่นที่เรียกว่าซิก
คุณดีกว่าสอนคอมไพเลอร์ ว่ามันมีอยู่ล่วงหน้า
>> ตอนนี้ตัวเองเป็นหลักแม้ แม้ว่ามันจะเป็นพวงของสาย,
สวยคุ้นเคยหวังว่าตอนนี้
มันมีสิ่งที่ต้องทำในขณะที่ห่วง ที่มีวัตถุประสงค์ในชีวิต
เห็นได้ชัดว่านี่คือการได้รับ จำนวนเต็มบวกจากผู้ใช้
และเพียงแค่ให้รบกวนเขา หรือเธอจนกว่าพวกเขาจะให้ความร่วมมือ
จากนั้นในบรรทัดที่ 16 ฉันมี การโทรที่น่าสนใจ
IntAnswer
ซึ่งอยู่ทางด้านซ้ายมือ ด้านให้ฉัน Int
ซึ่งสามารถเรียก Answer-- store-- ซึ่งจะจัดเก็บที่เห็นได้ชัด
มูลค่าการกลับมาของซิก
ซิกดังนั้นเป็นเพียง ชื่อโดยพลการ แต่มีความหมาย
ที่ฉันได้มอบให้กับฟังก์ชั่น ที่มีวัตถุประสงค์ในชีวิต
คือการใช้เวลาหนึ่ง argument-- เราจะเรียกมันว่ายังไม่มีใน case-- นี้
และก็จะใช้ผลรวมของหมายเลขที่ บวกทุกจำนวนบวกที่
มันมีขนาดเล็กกว่า
>> ดังนั้นถ้าผมผ่านในจำนวน 2 เพื่อ ซิกผมต้องการที่จะเพิ่ม 2 บวก 1
บวก 0-- ไม่ 0-- เพื่อที่ทำให้ผม 3
ถ้าผมผ่านใน 3 ซิกผมต้องการที่จะ มี 3 บวก 2 บวก 1 ซึ่งจะช่วยให้ฉัน 6
เป็นต้น
ดังนั้นมันก็เพิ่มขึ้นทั้งหมด ตัวเลขที่น้อยกว่าหรือเท่ากับไป
>> ตอนนี้ลงมาที่นี่ฉันแค่ไป เพื่อพิมพ์คำตอบ
ดังนั้นในขณะที่การตรวจสอบสติรวดเร็วขอ ทำให้ซิก 0-- เฉือนจุดซิก 0--
และแจ้งให้เราพิมพ์ใน 2
และฉันแน่นอนจะได้รับ 3
ผมขอพิมพ์ใน 3
แน่นอนฉันได้รับ 6
และถ้าทุกคนสามารถทำคณิตศาสตร์ได้อย่างรวดเร็ว ถ้าผมทำ 50 สิ่งที่ฉันจะได้รับ?
>> ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: ดีไม่มี
แต่ 1275 ซึ่งเป็นสวยใกล้เคียง
ดังนั้นนี่คือผลของการทำ 50 บวก 49 บวก 48 บวก 47 บวก 46
ทั้งหมดทางลงไป 1
เพื่อให้เป็นซิกทั้งหมดไม่
แต่เรามาดูวิธีการที่เราได้ ดำเนินการได้ในขณะนี้
ดังนั้นที่นี่เป็นหน้าที่ของตัวเอง
และนี้ไม่ได้ดูเหมือนจะมี สิ่งที่จะทำอย่างไรกับการเรียกซ้ำยัง
ในความเป็นจริงที่เรากำลังใช้ เทคนิคที่โรงเรียนเก่า
ฉันเริ่มต้นตัวแปรที่เรียกว่าผลรวม ศูนย์แล้วฉันมี foreloop ที่นี่
และฉันประกาศ Int เรียกว่า ผมตั้งค่าเท่ากับ 1-
แม้ว่าฉันจะตั้งค่าเท่ากับ ศูนย์ แต่ตั้งแต่ที่ฉันทำนอกจากนี้
ที่ใส่ใจถ้าเป็นศูนย์หรืออย่างใดอย่างหนึ่ง
ก็จะไม่มีผล
>> ดังนั้นฉันทำซ้ำตราบใดที่ฉันเป็น น้อยกว่าหรือเท่ากับเมตรซึ่ง
ข้อโต้แย้งที่ถูกส่งผ่านไปใน
และจากนั้นผมก็ให้ การเพิ่มครั้งที่หนึ่งและความเข้าใจ
ของวงทั้งหมดที่ฉันทำคือการทำผลรวม บวกเท่ากับครั้งที่หนึ่งและที่เจตนา
ฉันไม่ต้องการที่จะทำในเรื่องนี้ กรณีเช่นผลรวมบวกบวก
ฉันต้องการที่จะเพิ่มจริง มูลค่าปัจจุบันของฉัน
ซึ่งช่วยให้ได้รับใหญ่และขนาดใหญ่ และที่ใหญ่กว่าเพื่อนับทำงาน
>> แล้วฉันกลับผลรวม
และเพื่อให้คำตอบที่ได้รับผลรวมค่า
และจากนั้นผมพิมพ์ออกมา
ดังนั้นจึงมีโอกาสที่นี่ แต่ชนิดของการลดความซับซ้อน
รหัสนี้แนวคิด และชนิดของระเบิดเป็นอย่างใดอย่างหนึ่ง
คิดในแง่ของ ความเรียบง่ายแม้ว่ามัน
ใช้เวลาในขณะที่การจัดเรียง การชื่นชมว่าทำไมนี้
ที่มีประสิทธิภาพในตัวอย่างขนาดเล็กเหล่านี้
นี่คือซิก one-- ดังนั้น รุ่นที่สองของรหัสนี้
ทุกอย่างขึ้นด้านบนเหมือนกันดังนั้น ว่าเรื่องเช่นเดียวกับเป็นมาก่อน
แต่ตอนนี้ให้ดูที่ การดำเนินงานของซิกมาซึ่ง
ผมเคยเหลาลงไปเพียงเหล่านี้ lines-- สี่สายรหัสจริงๆ
บวกบางวงเล็บปีกกาและพื้นที่สีขาว
>> แต่สิ่งที่ฉันทำ?
ถ้าม. น้อยกว่าหรือเท่ากับ ศูนย์ฉันต้องการที่จะจัดการกับชนิดของ
กรณีที่ง่ายสุด
และถ้าคุณมือฉันเป็นศูนย์หรืออะไร เชิงลบซึ่งเป็นเพียงแปลก
ฉันแค่ไปโดยพลการ แต่กลับเป็นศูนย์อย่างต่อเนื่อง
ฉันไม่ต้องการสิ่งนี้ ได้รับในบางแปลกที่ไม่มีที่สิ้นสุด
ห่วงเพราะเป็นค่าลบ
ดังนั้นฉันแค่พูดว่าถ้าคุณให้ฉัน ศูนย์หรือน้อยผมกลับมาเป็นศูนย์
>> แต่นั่นเป็นสิ่งที่ดีเพราะนั่นคือ ที่หน้าเดียวสมุดโทรศัพท์
ที่เหลือ
ฉันกัดออกเป็นปัญหาที่เฉพาะเจาะจงมาก และไม่ได้เรียกร้องอะไรบางอย่างซ้ำ
แต่ในสายที่ 31 สิ่งที่ ฉันดูเหมือนจะทำ?
วงเล็บเป็นเพียงการรักษา สิ่งที่หวังว่าเล็ก ๆ น้อย ๆ ที่ชัดเจน
แต่ทั้งหมดที่ฉันทำคือฉัน กลับ m-- สิ่งที่
มือคุณ me-- บวก ค่าของขอโทษ m--,
บวกกับค่าของของซิกลบม. 1
ดังนั้นสิ่งนี้หมายความว่าอย่างไร?
ถ้าคุณให้ฉันหมายเลข 3 เป็น input คำตอบที่ฉันต้องการที่จะได้รับในท้ายที่สุด
คือ 6 เพราะ 3 บวก 2 บวก 1 ให้ฉัน 6
แต่ฉันจะคิดเกี่ยวกับ ว่ารหัสนี้จะทำงานอยู่หรือไม่
ครั้งแรกที่ผมเรียกซิก และฉันผ่านมูลค่า 3
ที่ชอบพูดว่าเกี่ยวกับชิ้นส่วน กระดาษที่นี่เป็นค่า 3
และฉันได้รับการส่งผ่านนี้เป็นซิก
3 จะเห็นได้ชัดไม่น้อยกว่า 0 ดังนั้น สภาพหากไม่ได้ใช้
อื่นไม่
ดังนั้นสิ่งที่ฉันจะทำอย่างไร
ผมต้องการที่จะกลับเมตรซึ่งเป็น 3 บวกของซิกลบ 1 เมตร
เพื่อให้ฉันติดตามนี้
ฉันจะใส่นี้ ชิ้นส่วนของกระดาษลง
และสิ่งที่มีค่าที่จะ ชัดเจนฉันจะผ่าน
เข้าซิกที่จุดในเรื่องนี้หรือไม่?
จำนวนสิ่งที่?
2 ใช่มั้ย?
3 ลบ 1 คือ 2
ดังนั้นผมก็ต้องเล็ก ๆ น้อย ๆ เศษกระดาษที่นี่
ดังนั้นตอนนี้ซิกจะได้รับการเรียกอีกครั้ง
และฉันได้ใส่จงใจ ลงนี้เพราะ
ชนิดเช่นการหยุดชั่วคราว รุ่นที่ของเรื่อง
เพราะตอนนี้ผมมุ่งเน้น สัญญาณของม. ลบ 1
ดังนั้นม. 3, ม. ลบ 1 คือ 2
ดังนั้นนี่คือ 2 ที่ฉันได้รับการส่งผ่าน
2 จะเห็นได้ชัดไม่น้อยกว่า 0 ดังนั้นกรณีที่ไม่ได้ใช้
อื่น ๆ ที่ฉันกลับเมตรซึ่งเป็นนี้ สิ่งที่บวกซิกของสิ่งที่มีค่า?
ดังนั้นหากซิกของ 1- ม. เพราะเป็น ในขณะนี้ 2 เพื่อลบ 2 1 1
ดังนั้นตอนนี้ฉันจะมีเพียงค่า 1
ฉันเพียงแค่ผ่านหมายเลข 1 ไป sigma-- ฟังก์ชั่น
หรือตัวเองเพื่อให้ here-- 1 จะเห็นได้ชัดไม่ได้ น้อยกว่าศูนย์ยังคงใช้ไม่ได้
>> ผลตอบแทนอื่น ๆ 1 บวกซ​​ิกของอะไร
0
ดังนั้นให้ฉันเพียงแค่จำไว้ว่า
ฉันจะได้รับกลับไปในภายหลังว่า
ตอนนี้ฉันจะไปข้างหน้าและจด หมายเลข 0 เนื่องจากว่าเป็น
การโต้แย้งหรือพารามิเตอร์ของฉัน
ฉันผ่านหมายเลข 0 และในที่สุดกระบวนการนี​​้
เพียงแค่ทำซ้ำตัวเองโฆษณา nauseum ไม่หยุดเพราะสิ่งที่
ฉันจะทำทันทีเมื่อฉันเห็นนี้ 0?
ฉันกลับเป็นศูนย์
ดังนั้นตอนนี้คุณต้องย้อนกลับเรื่อง
>> ถ้าตอนนี้ผมย้อนกลับไปในเวลาที่ สิ่งที่เป็นสิ่งที่ล่าสุด
ฉันไม่ได้ถ้าคุณอย่างแท้จริง กรอกลับวิดีโอหรือไม่
ฉันจะไปรับล่าสุด ที่ 1 และที่ทำให้ผม 1 บวก 1 0
ถ้าฉันให้ rewinding เรื่องที่จะให้ฉัน
2 บวกนี้ค่าการทำงานซึ่งเป็น 1
ดังนั้นที่ 3
และแล้วฉันจะให้ rewinding
ครั้งแรกที่ผมใส่ลงจำนวน ดังนั้น 3-- 3 บวก 3 ให้ฉัน 6
>> และตอนนี้ถ้าคุณได้กรอ วิดีโอจนถึงจุดนี้
ครั้งนี้เป็นอย่างมาก คำถามแรกที่ผมถาม
เมื่อผ่านไป 3 สิ่งที่เป็นซิก 3?
มันเป็นเรื่องจริงที่ 6 ผลรวมของ ชิ้นส่วนทั้งหมดเหล่านี้ที่ทำจากกระดาษ
ดังนั้นหากที่ใช้เวลาเพียงเล็กน้อยในขณะที่จะ มัดใจรอบที่ดี
แต่คิดว่ามันเป็น little-- มัน เป็นเจตนามากที่ผมซ้อนกัน
ตัวเลขเหล่านี้ด้านบนของแต่ละอื่น ๆ
เป็นชนิดของเหมือนมี memory-- บันทึกในเวลาที่
เช่นเครื่องฟอกในวิดีโอ, แน่นอนว่าผมสามารถย้อนกลับใน
และเรากำลังจะกลับมา อุปมาที่ในเพียงนิด ๆ หน่อย ๆ
>> แต่ก่อนก็จะเปิดออกว่ามี จำนวนมาก geeks และคนที่ตลก
ผมคิดว่าที่ Google
จะเป็นคนที่มาก ดีที่ใจ Googling
ขึ้นมาเพียงสักครู่และ ช่วยฉันค้นหาบางสิ่งบางอย่าง?
มากที่สำคัญที่ต่ำมาก
คนที่ไม่เคย เกิดขึ้นก่อนที่อาจจะ
ตกลง.
ใช่?
เข้ามา.
มาลง
คุณชื่ออะไร?
>> SAM: แซม
>> เดวิดเจลัน: แซมมาลง
นี้เป็นเหมือนกัน
ยินดีที่ได้พบคุณ.
เฮ้
มามากกว่า.
ดังนั้นสิ่งที่ฉันต้องการให้คุณทำถ้า คุณสามารถแซมนี่คือ Google
คุณสามารถค้นหาคำเรียกซ้ำ?
ไม่เสีย
>> และตอนนี้ let's-- ใช่
คลิกที่ตกลง
คลิกที่ดีกว่าที่
อ่าได้รับมัน
ไม่ได้หรือไม่
ตกลง.
เพื่อขอทำคนอื่น ๆ คู่
ไม่มากที่เกี่ยวข้อง ด้านวิชาการที่นี่ แต่มีคุณ
เคยค้นหา Google สำหรับแอนนาแกรม?
>> SAM: เลขที่
>> เดวิดเจลัน: OK
ค้นหาแอนนาแกรมแทนการเรียกซ้ำ
วิธีการเกี่ยวกับความไม่ไว้วางใจ
คุณเคยค้นหาไว้วางใจ?
ตอนนี้คนนี้เป็นเพียงเล็กน้อยยากที่จะ เห็น แต่หวังว่า everything's-- ตกลง
มันเป็นเพียงแค่คุณและฉันเพลิดเพลินกับการนี​​้
ตกลง.
>> ดังนั้นในที่สุด one's-- นี้ มันเป็นความไว้วางใจน้อย
ตอนนี้ทำม้วนบาร์เรล
ที่ยอดเยี่ยม
ทั้งหมดขวา
ขอขอบคุณบิ๊กแซม
นี่คุณไป
ขอบคุณ
>> ดังนั้นสิ่งที่เกิดขึ้นในทุก ตัวอย่างโง่เหล่านี้หรือไม่
ดังนั้นจริงๆอยู่ภายใต้ฝากระโปรงของ ล้านของ Google บรรทัดของรหัส
เห็นได้ชัดว่าเป็นไม่กี่ถ้าโง่ เงื่อนไขที่เป็นหลัก
ตรวจสอบว่าผู้ใช้มี พิมพ์ในวลีนี้
ทำสิ่งที่อาจจะเข้ามา เป็นจำนวนเงินขี้ปะติ๋วของเวลา
ในการดำเนินการเพียงเพื่อ เป็นที่น่าขบขันในลักษณะนี้
แต่นั่นคือทั้งหมดที่มันเดือด ลงไปอยู่ใต้ฝากระโปรง
แต่แน่นอนการเรียกซ้ำ มีมากขึ้นของ geekier
ตัวอย่างเช่นในหมู่เทคนิคพิเศษเหล่านั้น
และแน่นอนมีคนอื่น ๆ ที่ออกมี เช่นเดียวกับที่เราอาจจะมีไม่ได้
ค้นพบเพียง แต่
>> ดังนั้นจะดูหรือพิจารณา ตอนนี้โปรแกรมดังต่อไปนี้
และแน่นอนคว้าใด ๆ เหล่านี้ในแบบของคุณออกมา
ฉันจะไปข้างหน้าและ เปิดโปรแกรมที่เป็น
จะพยายามที่จะสลับสองค่า
แต่ก่อนที่เราจะไปที่นั่นให้ทำนี้
เราจะได้รับอีกหนึ่ง อาสาสมัครผมคิดว่า?
คุณต้องการที่จะเป็นอาสาสมัคร?
ไม่ได้หรือไม่
มาขึ้น
ทั้งหมดขวา
ดังนั้นชื่อของคุณคืออะไร?
>> LAUREN: ลอเรน
>> เดวิดเจลัน: ลอเรน
มาถึงลอเรน
ดังนั้นลอเรนจะถูก ท้าทายที่นี่ดังต่อไปนี้
ยินดีที่ได้พบคุณ.
ดังนั้นลอเรนนี่มีอยู่ตรงหน้า ของสองถ้วยที่ว่างเปล่าของเธอ
และเรามีสีส้มบาง น้ำผลไม้และนม
และเรากำลังจะไป ข้างหน้าและทำต่อไปนี้
เรากำลังจะไปเติมนี้
ไม่กี่ออนซ์นมมากกว่าที่นี่และขอ เติมน้ำส้มน้อยกว่าที่นี่
>> และด้านหน้าของทุกคน เหล่าสมาชิกผู้ชม
สลับสองค่าของถ้วยเหล่านี้
ใส่น้ำผลไม้สีส้มในถ้วยนม และนมในถ้วยน้ำผลไม้สีส้ม
วิธีที่คุณจะทำเช่นนี้หากคุณได้ที่ บ้านและมีการเข้าถึงอุปกรณ์อื่น ๆ ?
LAUREN: ใส่ไว้ในถ้วยอื่น
เดวิดเจลัน: OK
ดังนั้นขอได้ชั่วคราว ตัวแปรถ้าเราจะ
และไปข้างหน้าในขณะนี้และดำเนินการ ขั้นตอนการแลกเปลี่ยนเดียวกัน
ดีมาก.
เราได้ใส่ลงไปใน OJ ชั่วคราว ตัวแปรนมลงตัวแปร OJ,
และตอนนี้ตัวแปรชั่วคราว ลงในตัวแปรนม
ตกลง.
ดังนั้นทำได้ดีมากเพื่อให้ห่างไกล
ดังนั้นมันจะเปิด out-- ถือได้ว่า คิดสักครู่
นี่เพียงแค่ geek มันขึ้นเล็กน้อยนี้ จะเป็นรหัส C ที่สอดคล้องกัน
ว่าเราก็ดำเนินการ
เรามีสองปัจจัยการผลิตและ b ทั้งสอง ซึ่งเราก็จะบอกว่าสำหรับความเรียบง่ายเป็น
int ของ
และแจ้งให้ทราบที่นี่ถ้าผมต้องการที่จะแลกเปลี่ยน ค่าของทั้งสองตัวแปร a และ b ที่
แน่นอนเราต้องพ่อค้าคนกลางเป็น ตัวแปรชั่วคราวถ้วยชั่วคราว
เป็นที่เทหนึ่งของค่า เพื่อให้เรามีตัวยึดสำหรับมัน
แต่แล้วรหัสคือว่า ขณะที่ลอเรนดำเนินการที่นี่
>> ตอนนี้เพียงที่จะได้รับ crazier เล็ก ๆ น้อย ๆ จะเปิดออก
ที่คุณสามารถทำได้โดยไม่ต้อง ตัวแปรชั่วคราว
การทำเช่นนี้ได้อย่างถูกต้อง แต่เรากำลังจะ ที่จะมีการโกงกับเคมีบางอย่าง
เรามีถ้วยพิเศษบางอย่างที่นี่
ดังนั้นสิ่งที่ใกล้เคียงที่มีลักษณะ เช่นนมและ perhaps-- น้ำ
หรือนมและ OJ-- คือเรามีบางส่วน น้ำดังนั้นเราจะเติมนี้ขึ้น
มีไม่กี่ออนซ์ของน้ำใส
ที่อาจมากเกินไป
ใช่
นั่นคือแน่นอนมากเกินไป
ยึดมั่นในหนึ่งวินาที
>> และตอนนี้เรามีน้ำมันซึ่งเท่าที่ผมจำ จากโรงเรียนระดับเคมีกลาง
หวังว่ามันไม่ได้ผสมกับน้ำ
แต่ชนิดของการจัดเรียงของ ดูเหมือนว่านมและ OJ
ดังนั้นตอนนี้โดยไม่ต้องใช้ ตัวแปรชั่วคราว
คุณสามารถสลับทั้งสองค่า?
ดังนั้นน้ำมันไปลงในถ้วยน้ำ น้ำไปลงในถ้วยน้ำมัน
LAUREN: ไม่มีถ้วยอื่น ๆ
เดวิดเจลัน: ไม่มีถ้วยอื่น ๆ
และฉันไม่จริง การทดสอบนี้มาก่อนในปีนี้
ดังนั้นผมจึงไม่ทราบว่านี้จะ ทำงานจริงทางเคมี
ที่ไม่ควรจะเกิดขึ้น
มันกำลังทำงานอยู่ไหม?
ทั้งหมดขวา
ดังนั้นการแยก?
ดี
ตอนนี้เรามีที่จะได้รับ ลงในถ้วยน้ำอื่น ๆ
ชาญฉลาด concentrators เคมีสามารถทำได้ อาจจะทำแบบนี้ดีกว่าค่ะ
>> LAUREN: น้ำเป็นที่อยู่ด้านล่าง
>> เดวิดเจลัน: water-- นั่นคือ สิ่งที่สำคัญครั้งสุดท้ายที่เราทำอย่างนี้
คุณต้องทำมันในลำดับที่ถูกต้อง
ใช่
มันโอเค.
ดังนั้นตอนนี้เรามีสองถ้วยน้ำมัน
ตกลง.
มันโอเค.
แต่สารเคมีที่ว่านี้ทำงานกว่า I--
>> LAUREN: นี่คือน้ำ
>> เดวิดเจลัน: นั่นเป็นส่วนใหญ่น้ำ
ทั้งหมดขวา
แต่ที่ยังคงถ้วยเช่นเดียวกับก่อน
ดังนั้นเท it-- ลองไปที่นั่น
ตกลง.
นี่คือการใช้ที่ดีของเวลาเรียนในวันนี้
ตกลง.
ดังนั้นตอนนี้ we-- ดี
เรียงจาก
ทั้งหมดขวา
ดังนั้นสิ่งที่ดีมาก
ขอขอบคุณที่ลอเรน
ทำได้ดีมาก
>> ดังนั้นเพียงแค่ที่จะระเบิดความคิดของคุณ และนี่คือสิ่งที่อาจจะ
ที่จะเล่นกับถ้าคุณต้องการใน ID CS50, คุณสามารถในความเป็นจริงสลับสองตัวแปร
โดยไม่ต้องใช้จำนวนเต็มชั่วคราว
และนี่คือรหัส C ที่สอดคล้องกัน
และถ้าคุณจำได้จากที่ผ่านมา วันพุธที่เราแนะนำถ้าสั้น ๆ
บางประกอบการรายใหม่ในซีและไม่ ทุกคนจำสิ่งแครอทเล็ก ๆ น้อย ๆ
สัญลักษณ์ที่เป็นรูปสามเหลี่ยมเล็ก ๆ น้อย ๆ สัญลักษณ์จากแป้นพิมพ์หมายถึง?
สิ่งที่ผู้ประกอบการระดับบิต?
>> ผู้ชม: EXOR
>> เดวิดเจลัน: EXOR
แต่เพียงผู้เดียวหรือ
ดังนั้นหากคุณต้องการเพียงเพื่อความสนุกสนานที่ บ้านที่จะให้ a และ b สองโดยพลการ
ค่าเหมือน eight-- และฉัน จะเลือกค่าบิตแปด
ถ้าคุณทำเช่นนี้กับ 32 บิต คุณได้อย่างรวดเร็วจะได้รับเบื่อ
เพียง แต่ให้แปดบิต ค่าที่เป็นสิ่งหนึ่งหรือสอง
และให้ขมูลค่าใกล้เคียงกัน
แล้วใช้คำนิยาม ของแฮคเกอร์จากล่าสุดวันพุธ
บิตที่ใช้โดยบิตแต่ละ ผู้แปดบิตในแต่ละ a และ b
แล้วทำมันตรงต่อรหัสนี้
และมันก็เป็นสิ่งที่ไม่ถูกต้องไม่ได้ คุณดูที่นี่บนหน้าจอ
แน่นอนมันเดือดลง สามการดำเนินงานของแฮคเกอร์
และอย่างใดอย่างน่าอัศจรรย์และ ขจะแลกเปลี่ยนตำแหน่ง
โดยไม่สูญเสียข้อมูลใด ๆ
>> ดังนั้นเคล็ดลับน้ำมันและน้ำเป็น โลกแห่งความจริงที่ใกล้เคียงที่สุดของชาติ
ฉันจะคิดว่าที่จะเลียนแบบ
แต่มันก็ง่ายที่จะ ใช้ตัวแปรชั่วคราว
เช่นในกรณีนี้ได้ที่นี่
และนี้ก็เป็นโอกาสที่จะพูดว่า เกินไปชนิดของการเพิ่มประสิทธิภาพไมโครนี้
เป็นนักวิทยาศาสตร์คอมพิวเตอร์ จะบอกว่าในขณะที่ชนิดของความสนุก
ที่จะคุยโวเกี่ยวกับวิธีการที่คุณทำอย่างนี้ได้โดยไม่ต้อง เช่นการแลกเปลี่ยนกับตัวแปรพิเศษ
มันไม่ได้เป็นสิ่งที่น่าสนใจ
เพราะจะประหยัด 32 บิตเป็น ในกรณีของ int ที่เกิดขึ้นจริง
ไม่ใช่สิ่งที่น่าสนใจ ในระบบที่
คุณอาจจะใช้หลายสิบเมกะไบต์ หรือแม้กระทั่งหน่วยความจำมากขึ้นเช่นวันนี้
และในความเป็นจริงเมื่อเราได้รับ ชุดปัญหาในภายหลัง
และคุณใช้คาถา ตรวจสอบและคุณจะ
ได้รับการท้าทายที่จะทำเช่นนั้นด้วย นี้ RAM น้อยและน้อยที่สุดเท่าที่
เวลาที่เป็นไปได้ใน computer-- คุณยังคง
มีสัปดาห์ในการดำเนินการ it-- คุณจะ have-- คุณจะ
ความท้าทายในการลดทรัพยากรเหล่านั้น
และที่จริงเท่านั้น occasion ภาคการศึกษานี้
ที่คุณจะได้รับการส่งเสริมการโกน ออกแม้ผลการดำเนินงานที่ดีที่สุด
ค่าใช้จ่ายอย่างอื่น
>> ดังนั้น what-- วิธีที่เราสามารถ เห็นนี้ในรหัสที่เกิดขึ้นจริง?
ผมขอไปข้างหน้าในขณะนี้ และเปิดตัวอย่าง
จงใจที่จะเรียกว่า Swap เพราะมันไม่ได้ไม่มี
ในความเป็นจริงสลับตัวแปร ในขณะที่คุณอาจคาดหวังจริง
ดังนั้นลองมาดู
นี่คือโปรแกรมที่ไม่เคยมีใคร CS50 ครับ ห้องสมุดที่เกิดขึ้นเพียงมาตรฐาน I / O
ตอนนี้เรามีต้นแบบ สำหรับการแลกเปลี่ยนขึ้นด้านบนที่เพิ่ง
หมายความว่ามันมีที่จะกำหนดในภายหลัง
และนี่คือหลัก
>> ผมได้รับมอบหมายให้พล x และ y, ตามลำดับค่าหนึ่งและสอง
เพียงเพราะพวกเขากำลังมีขนาดเล็ก และง่ายต่อการคิดเกี่ยวกับ
แล้วฉันก็มีพวงของ printfs ที่ฉันมีการตรวจสอบสติ x 1
และ y ที่ 2 น่าจะเป็น สิ่งเหล่านั้นจะ printfs พูด
ดังนั้นมายากลไม่มีป่านนี้
>> แล้วฉันจะไปเรียกร้องกับ พิมพ์ def แลกเปลี่ยน dot dot dot
ฉันจะโทรแลกเปลี่ยน ฟังก์ชั่นผ่านใน x และ y
และสมมติว่าตอนนี้ แลกเปลี่ยนจะดำเนินการว่า
มันเป็นช่วงเวลาที่ผ่านมา กับตัวแปรชั่วคราว
และดังนั้นผมจึงเรียกร้องอย่างกล้าหาญสลับ
x คือตอนนี้และ y ที่อยู่ในขณะนี้ว่า
แต่ไฟล์ของหลักสูตร เรียกว่า Swap ไม่มี
ถ้าอย่างนั้นเราเห็นจริงว่าเกิดอะไรขึ้น
ถ้าผมรวบรวมและแลกเปลี่ยนแล้วไม่มี ทำ ./noswap, x 1, y เป็น 2
การสลับเปลี่ยน
x 1, y เป็น 2
ดังนั้นจริง ๆ แล้วมันน่าจะเป็นข้อบกพร่องแม้กระทั่ง แม้ว่า swap-- ขอเลื่อนลง now--
ว่าจะดำเนินการต่อ รหัสที่ผมนำเสนอช่วงเวลาที่ผ่านมา
ดังนั้นเราจะไม่ได้รับแฟนซี กับสิ่งที่แฮคเกอร์สำหรับตอนนี้
ที่นี่เหมือนกันควรจะทำงานเพียง เช่นเดียวกับนมและ OJ,
แต่ก็ไม่ได้ดูเหมือนจะทำงาน
>> ถ้าอย่างนั้นเราทำเช่นนี้อีกครั้ง
บางทีฉันอาจจะเพียงแค่ไม่ได้ทำงานมันขวา
ดังนั้นขอเรียก Swap ไม่มีอีกครั้ง
บางที I-- ไม่มี
ดังนั้นมันจึงเป็นเพียงการไม่ได้ทำงาน
ถ้าอย่างนั้นเราจะตรวจสอบสุขภาพจิตดีเล็ก ๆ น้อย ๆ
ผมขอไปข้างหน้านี่ใน Swap และเพียงแค่เพิ่มรอสักครู่
เป็น% ผม / n และขอ plug-in มูลค่าของที่
เพราะผมต้องการ เพื่อดูสิ่งที่เกิดขึ้น
และแน่นอนนี่คือ เทคนิคการแก้จุดบกพร่อง
ที่คุณอาจจะใช้ใน เวลาทำงานหรือที่บ้านอยู่แล้ว
คล้ายกับช่วงครึ่งแรกของแดน วิดีโอ Armendariz ใน PSET3
ประเด็นที่เรานำมาพิมพ์เป็น def เทคนิคที่แนะนำอย่างน้อย
สำหรับกรณีที่เรียบง่าย
ให้ฉันไปข้างหน้าและทำงานให้ ไม่มีการแลกอีกครั้ง ./noswap
>> ที่น่าสนใจ
ดังนั้นสังเกตเห็นสิ่งที่น่าจะเป็นจริง x 1, y คือ 2 แต่เมื่อ 2 ข 1
ดังนั้นทั้งสองอย่างใดได้เปลี่ยน แต่ x และ y จะไม่ได้รับการเปลี่ยน
ดังนั้นเพื่อให้มีความชัดเจนสิ่งที่เกิดขึ้น คือที่นี่ผมมี x และ y
และผู้ที่มีตัวแปรท้องถิ่นใน ขอบเขตของหลักผมผ่านใน x และ y
เพื่อแลกเปลี่ยน
ตอนนี้แลกเปลี่ยนเป็นฟังก์ชั่นที่แยกจากกัน มีอิสระที่จะเรียกอาร์กิวเมนต์
พารามิเตอร์หรืออะไรที่มันต้องการ
ฟูหรือบาร์หรือ x หรือ y ที่หรือหรือ
เพียงเพื่อให้ชัดเจนว่าพวกเขากำลัง ไม่เหมือนกับ x และ y ต่อ se
ฉันได้กล่าวว่า a และ b
แต่เราจะเรียกพวกเขาสิ่งที่เราต้องการ
>> และดังนั้นจึงดูเหมือนว่า แลกเปลี่ยนจะถูกส่งผ่านไป
x-- AKA a-- และก็ ถูกส่งผ่านข AKA y--
อย่างใดทั้งสามเส้น การแลกเปลี่ยนค่าเหล่านั้นว่า
ขณะที่ลอเรนทำกับนมและ OJ
แต่เมื่อเราพิมพ์ออกมา ค่า, a และ b
มีแน่นอน แต่สลับ x และ y ที่มีการเปลี่ยนแปลงให้กับพวกเขา
จำได้ว่า x และ y มีขึ้นที่นี่
>> ดังนั้นเราจึงสามารถมองเห็นได้ผ่านทาง เทคนิคอีกเช่นกัน
และนี่ก็เป็นเทคนิคที่ ที่ฝังอยู่ในปัญหาตั้งสาม
ลองไปข้างหน้าและทำเช่นนี้ใน ID CS50 ถ้าคุณยังไม่ได้
ที่ด้านข้างขวามือเรา มีแท็บดีบักเกอร์นี้
และถ้าคุณเปิดนี้ขึ้น มีบางข้อมูลที่เป็นความลับ
ที่โยนไปที่คุณเริ่ม
แต่ขอแซวออกจากกันอย่างรวดเร็วจริงนี้
>> ดังนั้นหนึ่งคุณจะเห็นตัวแปรท้องถิ่น
ปรากฎว่าสร้างเป็น IDE CS50 และ จำนวนมากของสภาพแวดล้อมการเขียนโปรแกรมเพิ่มเติม
โดยทั่วไปเป็นดีบัก
เครื่องมือที่ช่วยให้คุณมองเห็นเห็น สิ่งที่เกิดขึ้นภายในของโปรแกรมของคุณ
โดยไม่ต้องหันไปเพิ่ม printfs และรวบรวมและทำงาน
และการเพิ่ม printf และรวบรวมและ ทำงานซึ่งมีอยู่แล้วในเวลาทำการ
หรือบ้านน่าจะเป็น ได้รับน่าเบื่อสวย
>> ดังนั้นที่นี่ในเวลาเพียงช่วงเวลาที่เรา จะเห็นในเวลาจริง
ค่าของตัวแปรในท้องถิ่นของเรา
เรายังจะสามารถที่จะตั้ง สิ่งที่เรียกว่าจุดพักที่
โอกาสในโปรแกรมของฉันที่จะหยุดการทำงานชั่วคราว การดำเนินการที่เฉพาะเจาะจงของสายรหัส
ว่าฉันอยากรู้เกี่ยวกับ
ใช่มั้ย?
โปรแกรมเหล่านี้ทำงานในเสี้ยววินาที
เป็นชนิดที่ดีสำหรับมนุษย์เราช้าลง ที่จะสามารถหยุดใช้เวลาสักครู่ให้ดู
สิ่งที่เกิดขึ้นรอบตัว สายหนึ่งของรหัส
โดยไม่ต้องไถโปรแกรม ผ่านมันและการตกแต่งทั้งหมด
ดังนั้นจุดพักจะช่วยให้เราสามารถ ทำลายและหยุดที่จุดหนึ่ง
>> สแต็คโทรเป็นวิธีที่จินตนาการของ พูดในสิ่งที่ฟังก์ชั่นมีอยู่ในปัจจุบัน
ถูกเรียกในขณะนี้
หลักที่เรียกว่าก่อนเสมอ
แต่ถ้าหลักเรียกว่า ฟังก์ชั่นที่เรียกว่า Swap,
เราจริงจะเห็นนี้ หอของฟังก์ชั่นที่ได้รับ
เรียกว่าในลำดับย้อนกลับ
ดังนั้นเรามาดูว่า
>> ฉันจะซูมออก
ฉันจะกลับไปที่รหัสของฉัน
และเพียงเพราะฉันต้องการ จะต้องมีความรู้ที่นี่
ฉันจะไปข้างหน้าและคลิก เพียงด้านซ้ายของบรรทัดห้า
และที่สร้างจุดสีแดง
และแจ้งให้ทราบเกี่ยวกับทางด้านขวามือ ที่ดีบักรู้เดี๋ยวก่อน
เบรกพอยต์ที่ฉันเพิ่งกล่าวว่า สาย noswap.c ห้าโดยเฉพาะ
ที่บรรทัดของรหัสนี้
ดังนั้นการดีบักเกอร์รู้ดีว่าฉันว่า ได้ขอให้ครั้งต่อไป
ฉันเรียกใช้โปรแกรมมันหยุดของฉัน การดำเนินการที่มีมากกว่าแค่
ทำงานสิ่งที่ทั้งเร็วสุด
>> ดังนั้นตอนนี้ฉันกำลังจะไปคลิกตรวจแก้จุดบกพร่อง ปุ่มที่ด้านบนสุดของการ IDE
และที่จะทำต่อไปนี้
มันจะเปิดบ้างในตอนแรก ที่น่ากลัวมองขั้วสอง window--
การแก้จุดบกพร่องจากระยะไกล เป็นเจ้าภาพดังกล่าวและ such--
และเราจะกลับมากับสิ่งที่ ทั้งหมดนั่นหมายความว่าอีกไม่นาน
แต่สิ่งที่สำคัญสำหรับตอนนี้ คือว่าที่จุดสีแดงถูกตี
ดีบักมีเจตนา หยุดชั่วคราว execution--
ไม่ได้อยู่ในบรรทัดต่อ se แต่ในครั้งแรก บรรทัดของรหัสที่เกิดขึ้นจริงในการทำงานว่า
และที่ว่าทำไมสายเจ็ด เน้นในขณะนี้ในสีเหลือง
>> และตอนนี้ลองมาดู ที่ด้านขวามือ
ดูเหมือนว่าตามค่าเริ่มต้น อย่างพอ x มีสิ่งที่มีค่า?
0
และ y ที่มีสิ่งที่มีค่า?
ศูนย์
และนั่นเป็นที่คาดหวังในความรู้สึก ที่ x และ y-- ที่ line-- สีเหลืองมี
ยังไม่ดำเนินการ
ดังนั้น x ไม่ควรมีค่า 1
มันอาจจะมีค่าอื่น ๆ ค่าขยะที่เรียกว่า
และเรามีโชคดีในการที่จะ เป็นศูนย์ที่จุดนี้เป็นหลัก
>> ดังนั้นตอนนี้มีเพียงไม่กี่ ปุ่มที่เราต้องดูแล
เมื่อการแก้จุดบกพร่องในลักษณะนี้
ขอให้สังเกตที่นี่เรามีปุ่ม 'เล่น'
และถ้าเราเล่นหรือตี กลับมาว่าเป็นเพียง
จะวิ่งผ่าน ส่วนที่เหลือของโปรแกรม
หรือจนฮิตเบรกพอยต์อีก
แต่ฉันไม่ได้ตั้งค่าอื่น ๆ จุดพักจึงเป็นเพียง
จะวิ่งผ่านจุดสิ้นสุด
ว่าจะเอาชนะ วัตถุประสงค์ของการ poking รอบ
>> ดังนั้นแทนที่จะฉันดูแลเกี่ยวกับ ไอคอนเหล่านี้ไปทางขวา
และถ้าผมเลื่อนไป พวกเขาเป็นคุณควรเกินไป
คุณจะเห็นเคล็ดลับเครื่องมือ tips-- เล็ก ๆ น้อย ๆ
หนึ่งในนี้เป็นขั้นตอนมากกว่า
ตอนนี้ไม่ได้หมายความว่าข้าม บรรทัดต่อไปนี้ของรหัส
นั่นก็หมายความว่าการดำเนินการและ ย้ายไปย้ายไปถัดไป
ย้ายไปต่อไป
ในคำอื่น ๆ ผ่านทาง ปุ่มที่ผมสามารถเดิน
รหัสผ่านของฉันหนึ่งขั้นในเวลา
ทีละบรรทัดตัวอักษร
ตอนนี้ไปทางขวาของ ที่มีอีกคนหนึ่ง
ที่เราจะเห็นในเวลาเพียงสักครู่
นี่คือสิ่งที่เรียกว่า ขั้นตอนที่เข้าไปในไอคอนที่
จะช่วยให้ผมดำน้ำ ในการทำงานอีก
แต่ขอดูนี้ในการรอสักครู่
ดังนั้นฉันจะคลิกก้าวข้าม
และตอนนี้สังเกตที่ผมคลิก ปุ่มนี้ที่ด้านขวาบน
ให้ดวงตาของคุณภายใต้ประมาณท้องถิ่น ตัวแปรและดูสิ่งที่เกิดขึ้นกับ x
x 1 อยู่ในขณะนี้เพราะ เส้นสีเหลืองได้ดำเนินการในขณะนี้
และเราได้ย้ายไปสาย 8
และในเพียงปีช่วงเวลา หวังว่าควรจะเป็น 2
>> ตอนนี้ไม่มีอะไรที่น่าสนใจ เกิดขึ้นเล็กน้อย
ทั้งหมดนี้เป็น printf
และแจ้งให้ทราบในขั้วที่สองของฉัน หน้าต่างฉันเห็นผลลัพธ์ของความละเอียดการพิมพ์
และตอนนี้ฉันจะต้องทำ การตัดสินใจเป็นโปรแกรมเมอร์
ผมสามารถก้าวข้ามเส้นนี้ รหัสรันมัน แต่ไม่
รับอยากรู้เกี่ยวกับสิ่งที่อยู่ภายใน
หรือที่จริงผมสามารถก้าวเข้าไปในนั้น และไปด้านในของตัวเอง Swap
เพื่อขอทำหลัง
>> ให้ฉันไปข้างหน้าและคลิก ขั้นตอนที่ไม่ได้กว่า แต่ขั้นตอนที่เข้ามาใน
แจ้งให้ทราบล่วงหน้าทั้งหมดในทันที การเปลี่ยนแปลงที่หน้าต่าง
เพื่อเน้นแรก บรรทัดของรหัสใน Swap
นั่นคือสาย 21
และตอนนี้สิ่งที่เป็นชนิดของขี้ขลาดคือว่า ถ้าคุณมากกว่าดูที่นี่เป็นไปตามคาด
ขเครื่องหมายจุลภาคเป็นที่ 1 และ 2 ตามลำดับ
อุณหภูมิ 32,767 เป็นเพราะเหตุใด
ระลึกถึงอุณหภูมิที่เหมือน ถ้วยว่างช่วงเวลาที่ผ่านมา
ที่นี่มีการประกาศในบรรทัดที่ 21
32,000- ทำไมฉันหมายความว่าทำไม มันก็แปลกบางค่า?
ใช่?
>> ผู้ชม: มันไม่ได้เริ่มต้น
>> เดวิดเจลัน: มัน ไม่ได้รับการเริ่มต้น
ดังนั้นเครื่องคอมพิวเตอร์ของเราเสมอ มีหน่วยความจำทางกายภาพ
มันก็จะมี RAM ที่มีอยู่จริง
และมีเสมอเป็นศูนย์ของ และเป็นหนึ่งในนั้นใช่มั้ย?
เพราะเรากำลังใช้ของเรา คอมพิวเตอร์ตลอดทั้งวัน
คุณกำลังใช้ CS50 IDE หรือเซิร์ฟเวอร์ตลอดทั้งวัน
เพื่อให้ RAM ทั้งมีศูนย์หรือบางส่วน ใครบางคนหรือบางศูนย์และคน
ไม่ว่าหรือไม่ ไม่ว่าคุณกำลังใช้พวกเขา
คุณไม่สามารถเพียงแค่มีความว่างเปล่า ช่องว่างที่คุณต้องการบิต
พวกเขาทั้งศูนย์และคน
>> ดังนั้นมันจะเปิดออกชั่วคราวว่าเพราะ เราได้ไม่ได้เริ่มต้นมันยัง
เรามีผู้ที่ 32 บิต แต่พวกเขาไม่ได้ ได้เริ่มต้นไปเป็นค่าใด ๆ
ดังนั้นสิ่งที่พวกเขาส่วนใหญ่ เมื่อเร็ว ๆ นี้ผู้ใช้ for-- 32 bits--
เราเพียงแค่เห็นสิ่งประดิษฐ์ของบางคน ใช้ก่อนหน้านี้โดยเฉพาะอย่างยิ่งผู้ที่ 32
ชิ้น ๆ
เร็วที่สุดเท่าที่ฉันคลิกขั้นตอนกว่าแม้ว่า ว้าอุณหภูมิจะได้รับค่า 1
และถ้าผมทำมันอีกครั้งเป็น จะได้รับค่า 2
และจากนั้นขเป็นไป จะได้รับค่า 1
>> และเพื่อให้สิ่งที่ดีในขณะนี้ที่ จุดในเรื่องนี้
คือว่าเป็นบั๊ก แสดงให้ฉันซุปเปอร์ช้า
ที่ก้าวของตัวเองในสิ่งที่ สถานะของ Swap เป็น
แต่สังเกตที่ด้านบนที่นี่แจ้งให้ทราบล่วงหน้า ที่เรียกกองจริง
มีสองชั้นกับมัน
ตอนหนึ่งที่เป็นไฮไลท์ Swap ถ้าฉันคลิกที่หลักแทน
แจ้งให้ทราบว่าตัวแปรท้องถิ่นเปลี่ยน เพราะนักพัฒนาก็สามารถกระโดด
ไปรอบ ๆ และเข้าไปในขอบเขตใด ๆ ที่แตกต่างกัน
ดังนั้นแม้ว่าเรากำลังทำทั้งหมดนี้ ทำงานได้อย่างถูกต้องและการแลกเปลี่ยน a และ b
ถ้าฉันกลับไปมาระหว่าง Swap ที่คือ 2 และขคือ 1 และหลัก
ได้รับผลกระทบหลักที่ทั้งหมดหรือไม่
เลขที่
ดังนั้นสิ่งที่ Takeaway ที่นี่?
ดีก็ปรากฎว่าเวลาใด คุณเรียกฟังก์ชั่นเช่น Swap,
และคุณผ่านการขัดแย้งมันสิ่งที่ คุณผ่านไปยังฟังก์ชัน Swap
ในกรณีนี้เป็นสำเนา ข้อโต้แย้งเหล่านั้น
ดังนั้นถ้า x และ y แต่ละตามลำดับ 32 บิตสิ่ง Swap จะได้รับ
สองใหม่ในท้องถิ่น ตัวแปรหรือข้อโต้แย้ง
เรียกว่าและ b-- แต่ผู้ที่มีอำนาจเบ็ดเสร็จ names-- แต่รูปแบบของค่าศูนย์
และคนที่อยู่ภายในและ b เป็น เรียงรายขึ้นไปจะเหมือนกับ x และ y
แต่พวกเขาไม่ได้เป็น สิ่งเดียวกับ x และ y
>> มันเหมือนกับว่ามีหลักในส่วนของตน กระดาษหมายเลข 1 และ 2 สำหรับ x และ y,
และจากนั้นเมื่อมันมือที่ ชิ้นส่วนของกระดาษที่จะสลับ,
Swap อย่างรวดเร็วได้รับ ปากกาของตัวเองเขียนลง
1 และ 2 บนแผ่นของตัวเองของกระดาษ มือกลับเซ็กซี่เดิมไปยังหน้าหลัก
และจากนั้นไม่เป็นของตัวเอง สิ่งที่มีและ b
และนี่คือตอนนี้สิ่งที่สำคัญสุดเพราะ นี้มีผลกระทบขี้ปะติ๋ว
สำหรับจริงเขียนรหัสที่ถูกต้อง เพราะมันจะดูเหมือนเราไม่สามารถแลกเปลี่ยน
สองตัวแปร
>> ฉันได้เขียนฟังก์ชั่นสลับที่ถูกต้อง
เราได้ดำเนินการกับลอเรนเป็น ฟังก์ชั่นการแลกเปลี่ยนที่ถูกต้องในความเป็นจริง
แต่เห็นได้ชัดว่าไม่มี เรื่องถ้าคุณไม่สามารถจริง
สลับสองค่าอย่างถาวร
ดังนั้นเราจึงต้องมีวิธีอื่น ที่จะได้รับจริงที่นี้
และเราจะต้องสามารถที่จะ จริงแก้ปัญหานี้
และมันจะเปิด out-- และเราจะมา กลับไปที่ภาพนี้โดยเฉพาะอย่างยิ่ง
ก่อนที่จะ long-- นี้เป็นหนึ่งในวิธีการที่ คุณอาจวาดหน่วยความจำของคอมพิวเตอร์ของคุณ
มันเป็นเพียงรูปสี่เหลี่ยมผืนผ้า
คุณสามารถวาดมัน ๆ หลายวิธี แต่ก็
สะดวกในการวาดมันเป็น สี่เหลี่ยมผืนผ้าด้วยเหตุผลดังต่อไปนี้
>> เรากำลังจะเริ่มต้นในวันนี้และเกิน พูดคุยเกี่ยวกับสแต็คที่เรียกว่า
และสแต็คเป็นเพียงก้อน ของ RAM-- ก้อน memory--
ฟังก์ชั่นที่มีการเข้าถึง เมื่อพวกเขากำลังเรียก
และดังนั้นจึงปรากฎว่าที่ ด้านล่างสุดของสแต็คนี้
เป็นที่ที่ทุกตัวแปรท้องถิ่นของหลัก และ org ซีและวี org และทุกสิ่งที่
จะไปโดยปริยาย และถ้าหลัก เรียกบางฟังก์ชั่นอื่น ๆ เช่น Swap,
ดี Swap เป็นไปได้อีก ชั้นของหน่วยความจำได้ข้างต้นนั้น
>> และเพียงเพื่อที่จะให้คุณได้อย่างรวดเร็วคร่าวๆ ภาพนี้ถ้าผมไปมากกว่า here--
และแจ้งให้เราสะท้อนนี้ใน ค่าใช้จ่ายเป็น well-- จริงๆสิ่งที่ฉันมี
ถ้าเราจะดูแลเกี่ยวกับ ด้านล่างของภาพนี้สำหรับตอนนี้
คือเมื่อเรียกใช้โปรแกรม และหลักที่ได้รับการเรียกว่า
หลักจะได้รับก้อนของ RAM ในเครื่องคอมพิวเตอร์ของฉันที่เป็น
ที่ด้านล่างของสแต็คนี้ที่เรียกว่า
และฉันจะวาดมัน จงใจเป็นตาราง
ดังนั้นจึงเป็นเช่น 32 บิตหรือสี่ไบต์
และถ้าฟังก์ชั่นหลักมี เรียกว่าตัวแปร x มีค่าเป็น 1
และมีตัวแปรที่เรียกว่า y ที่มีค่าของ 2, ที่
เหมือนการเศษไม้จากหน่วยความจำนี้ว่า หลักที่ได้รับจากการดำเนินงาน
ระบบและการหารขึ้นเพื่อให้ ตัวแปรท้องถิ่นครั้งแรกไปที่นี่
คนที่สองไปที่นี่และที่มัน
>> เมื่อสายหลัก Swap, Swap ได้รับส่วนแบ่งของตัวเองของหน่วยความจำ
ว่าเราจะวาดเช่นนี้ จากระบบปฏิบัติการ
และก็จะมีของ ตัวแปรท้องถิ่นของตัวเองตาม
ในการดำเนินงานของเราก่อนหน้านี้ กับตัวแปรท้องถิ่น
และ B ที่เริ่ม ได้รับค่าที่ 1 และ 2
แต่แล้วทันทีที่ รหัส Swap รัน,
และลอเรนจริงสัญญาแลกเปลี่ยน OJ และนม, สิ่งที่เกิดขึ้น?
ดี 2 นี้จะกลายเป็น 1 นี้ 1 จะกลายเป็น 2 และโดยวิธีการที่
มีตัวแปรชั่วคราวที่เป็น ที่นำมาใช้ตลอดเวลาว่าในที่สุด
ออกไป
แต่มันไม่สำคัญ วิธีการทำงานมากที่คุณทำ
ในสายนี้ of-- ในพื้นที่หน่วยความจำนี้ x และ y มีแตะต้องสมบูรณ์
>> ดังนั้นเราจึงต้องมีวิธีการให้บางส่วน Swap และการทำงานเช่นเดียวกับมัน
การเข้าถึงความลับถ้าคุณจะไป ฟังก์ชั่นหน่วยความจำ like-- เช่น x และ y
ดังนั้นลองมาดูที่ ตัวอย่างที่ช่วยให้
เราเห็นว่าสิ่งที่ได้รับ ที่เกิดขึ้นตลอดเวลานี้
ฉันจะไปข้างหน้า และเปิดศูนย์เปรียบเทียบ
และฉันจะปิด บั๊กของเราฉันจะ
เพื่อปิดข้อความนี้มองที่น่ากลัว เพียงแค่กล่าวว่ารอสักครู่
คุณอยู่ในการแก้จุดบกพร่องตรงกลาง
ฉันจะซ่อนแถบนี้ที่นี่ เพียงเพื่อกลับไปที่ความเรียบง่าย
ดังนั้นไม่ต้องกังวลถ้า GDB ถูกฆ่าตาย
นั่นก็หมายความว่าโปรแกรมที่มี รับเลิกจงใจในกรณีนี้
โดยฉัน.
>> และตอนนี้เปรียบเทียบศูนย์ไม่นี้
ฉันใช้ CS50 ห้องสมุดมาตรฐาน I / O
ฉันมีฟังก์ชั่นหลักที่แรก กล่าวว่าพูดอะไรบางอย่างและได้รับสตริง
แล้วบอกว่ามันอีกครั้งและ ได้รับสตริงอื่น
และแจ้งให้ทราบว่าทั้งสองสาย จะเรียกว่าเสื้อและตามลำดับ
และตอนนี้โปรแกรมนี้เปรียบเทียบ ศูนย์จุดประสงค์ของมันในชีวิต
มันควรจะบอกฉัน ผมไม่พิมพ์สิ่งเดียวกัน
และเพื่อที่ฉันจะกลับไปหนึ่งสัปดาห์
ฉันใช้ประกอบการเท่ากันฉันเท่ากัน ซึ่งเป็นผู้ประกอบการที่มีคุณภาพ
ไม่ดำเนินการกำหนด, ผู้ประกอบการความเท่าเทียมกัน
ฉันแค่เปรียบเทียบและเสื้อ
>> ดังนั้นขอจริงไปข้างหน้าและทำเช่นนี้
และฉันจะไปข้างหน้า และทำให้เปรียบเทียบศูนย์
ฉันจะทำ ./comparezero
และฉันจะไป ข้างหน้าและพูดอะไรบางอย่าง
เหมือนขอทำแม่ในตัวพิมพ์เล็ก และวิธีการเกี่ยวกับแม่ของตัวพิมพ์ใหญ่
และแน่นอนฉันพิมพ์สิ่งที่แตกต่าง
ทั้งหมดขวา
ที่เป็นที่คาดหวัง
>> ลองเรียกใช้อีกครั้ง
ทั้งสองครั้งทำพิมพ์เล็กพิมพ์เล็ก
ที่มีลักษณะเหมือนซุปเปอร์มาให้ฉัน
เข้าสู่
ตกลง.
อาจจะเป็นเพียงเพราะแปลก มันไม่ชอบไวยากรณ์ของฉัน
เพื่อขอทำทุน MOM, ทุน MOM เหม​​ือนกัน
สิ่งที่แตกต่าง.
>> เหตุใดจึงเป็นเช่นนั้น?
ดีสิ่งที่เกิดขึ้นจริง ในใต้ฝากระโปรงที่นี่?
ดังนั้นขอไปกลับไป ที่นี่เพื่อรอสักครู่
และพิจารณาสิ่งที่ GetString จะทำจริง
เมื่อคุณเรียก GetString, ที่ฟังก์ชั่นที่เรา
ตัวเองและเขียนมันอย่างใดได้รับ ลำดับของตัวอักษรจากผู้ใช้
และให้คิดว่าเป็นครั้งแรก เวลาที่ผมเรียก GetString ที่ทำให้ผม
ก้อนของหน่วยความจำที่มีลักษณะเช่นนี้
และถ้าผมพิมพ์ลงในพิมพ์เล็กทั้งหมด M-o-m-- และสิ่งที่จะไปหลังจากที่มันได้หรือไม่
เพียงแค่การตรวจสอบสติอย่างรวดเร็ว
>> เครื่องหมายศูนย์
เรารู้ว่า.
และจำได้ว่าเราเล่น รอบที่มีชื่อของ Zamila
และพวงของชื่ออื่น ๆ เมื่อร็อบได้ที่นี่มอง
ที่สิ่งที่เกิดขึ้นภายในของหน่วยความจำ
ดังนั้นเรื่องที่ว่ากัน
นี่คือสิ่งที่ GetString จะกลับมาให้ฉัน
ตอนนี้รหัสของฉันสักครู่ที่ผ่านมาเก็บไว้ มูลค่าการกลับมาของ GetString
ในตัวแปรที่เรียกว่าวินาที
และจากนั้นก็เป็นครั้งที่สองที่ผมเรียกมันว่า มันเก็บไว้ในตัวแปรที่เรียกว่าที
>> ดังนั้นถ้าผมไปมากกว่าที่นี่ฉันต้องการ การวาด variable-- ท้องถิ่น
และฉันโดยทั่วไปจะ วาดสตริงเป็น just-- เราจะ
เรียกว่า s-- เป็นตารางเล็ก ๆ น้อย ๆ ที่นี่
และตอนนี้วิธีการที่ไม่ somehow-- แม่ ไปภายในของตัวแปรนี้?
ดีที่เราต้องกลับไป หลักการแรกที่นี่
GetString คืออะไรจริง ๆ แล้วกลับมา?
>> ดังนั้นจึงปรากฎว่า M-O-M เครื่องหมายศูนย์และหมายเลขใด
ของสตริงในหน่วยความจำเช่น Zamila และร็อบหรือแอนดี้หรืออื่น ๆ ใด ๆ
แน่นอนของเรา RAM ของคอมพิวเตอร์หรือหน่วยความจำ
และ RAM ของคุณมี like-- คุณมี กิ๊กของแรมสองกิ๊กแรม
หรือพันล้านหรือสองพันล้านไบต์ หรืออาจจะมากยิ่งขึ้นวันนี้
ดังนั้นสมมติว่าสำหรับวัตถุประสงค์ของว​​ันนี้ ว่ามันไม่สำคัญว่าเราจำนวน
พวกเขา แต่เราจะนับในแต่ละ ของผู้พันล้านบาทหรือสองพันล้าน
หรือสี่พันล้านไบต์
>> และให้เพียงพลกล่าวว่า นี้เป็นครั้งแรกที่กัดกัดที่สอง
สามสี่
ฉันจงใจไม่ได้ใช้เป็นศูนย์สำหรับ วันนี้ แต่เราจะกลับมาที่
ดังนั้นในคำอื่น ๆ ที่ว่านี้เป็น ครั้งแรกที่ฉันใช้โปรแกรม
ฉันแค่ได้รับโชคดีและเป็นครั้งแรก กัดที่สถานที่หนึ่งแล้วสอง
แล้วสามกว่าสี่
และถ้าผมเก็บไว้วาดภาพจำนวนกล่อง สองพันล้านจะเป็นวิธีที่มากกว่าที่นี่
>> เพื่อให้คุณทำในสิ่งที่คิดแล้ว GetString จริงผลตอบแทน?
มันไม่ได้กลับมา M-O-M เครื่องหมาย ศูนย์ต่อเนื่องจากที่ชัดเจน
จะไม่พอดีในกล่องที่ผมได้วาด
ดังนั้นอะไรที่อาจ getString จริง กลับมาทุกสัปดาห์เหล่านี้หรือไม่
คำตอบคือใน คณะกรรมการที่นี่ที่ไหนสักแห่ง
คุณไม่สามารถใส่ M-O-M เครื่องหมายศูนย์ ดังนั้นสิ่งที่อาจทำให้รู้สึกแทน?
หากคุณมีที่จะฉลาดสุดวาง บนหมวกวิศวกรรมที่เรียกว่า
สิ่งที่คุณจะกลับมา?
มีอะไรจำนวนน้อยที่สุดของข้อมูล คุณสามารถที่จะกลับไปยัง
ช่วยให้คุณสามารถหา M-O-M ในหน่วยความจำ?
ใช่?
>> ผู้ชม: หนึ่ง
>> เดวิดเจลัน: หนึ่ง
และทำไม?
ผู้ชม: เพ​​ราะมันจะบอก คุณจะไปที่ไหน [ไม่ได้ยิน]
เดวิดเจลัน: แน่นอน
ฉันเพียงแค่จะกลับมาอยู่ ของสตริงที่ผมได้รับ
ที่อยู่ในนี้ กรณีที่เป็นสถานที่หนึ่ง
ดังนั้นสิ่งที่เป็นจริงถูกเก็บไว้ใน s-- และตัวแปรสตริงทุกจึง far--
เพิ่งรับ ที่อยู่ของสตริงที่
>> ในขณะเดียวกันถ้าผมเรียก getString เป็นครั้งที่สองและผม
พิมพ์ตัวอักษร thing-- เดียวกัน M-O-M กับ lowercase-- M-O-M
และเครื่องหมายศูนย์อีก และตอนนี้อาจจะเป็นโปรแกรมของฉัน
รับการทำงานบางครั้งจึงอาจนี้ 10 นี้เป็นสถานที่ที่ 11 นี้คือ 12,
นี้คือ 13
โดยใช้เครื่องคอมพิวเตอร์อื่น ๆ หน่วยความจำด้วยเหตุผลใด
สิ่งที่ตอนนี้ไปในครั้งที่สองของฉัน ตัวแปรในเโปรแกรมของฉัน?
10
ที่แน่นอน
>> ดังนั้นเมื่อเรามองไปที่ รหัสที่มาของโปรแกรมนี้
ที่ฉันเพียงแค่พยายาม เพื่อเปรียบเทียบค่าสองค่า
เป็น s เท่ากับเท่ากับ t อะไร คำตอบที่เห็นได้ชัดของมนุษย์?
เพียงแค่ไม่ได้เพราะ 1 ไม่เท่ากับ 10
ดังนั้นในที่นี้อยู่ โอกาสที่เราจริงๆ
เพียงแค่กลับไปอีกครั้งเป็นครั้งแรก หลักการและคิดเกี่ยวกับการดี
สิ่งที่เกิดขึ้นภายใต้ประทุน?
เราได้รับการพูดคุยเกี่ยวกับ บิตและไบต์และหน่วยความจำ
แต่มันเป็นเรื่องจริงที่มีประโยชน์ในการทำความเข้าใจ เพราะเมื่อคุณเรียก GetString,
แม้ว่าเราคิดว่ามันเป็น กลับ M-O-M หรือแม่สตริง
หรือแอนดี้หรือ Zamila หรือ ชอบในทางเทคนิค
มันเป็นเพียงแค่กลับมาอยู่ ของก้อนของหน่วยความจำที่
>> แต่ที่ตกลง
เพราะฉันจะรู้ ที่สิ้นสุดสตริง?
ถ้าฉันได้รับเพียงจุดเริ่มต้น?
ดีเครื่องหมายศูนย์ใช่มั้ย?
เพียงในเวลาที่ฉันสามารถเชิงเส้น พิมพ์ออกมาพร้อมกับความละเอียดการพิมพ์ M-O-M
และทันทีที่ผมเห็นเครื่องหมาย ศูนย์ฉันไม่สนใจที่ผมเริ่มต้น
ผมรู้อยู่แล้วว่าโดยปริยาย ที่ฉันต้องการที่จะจบ
>> และในวันนี้นับเป็น beginning-- และ ให้ฉันทำเช่นนี้อย่างมากเพราะเรา
เดินผ่านจำนวนมากของปัญหาไปยัง เหล่านี้ได้รับการฝึกอบรมที่นี่ wheels--
ดังนั้นวันนี้ล้อการฝึกอบรมเริ่มต้น ที่จะออกมาและเราแสดงให้เห็นใน least--
>> [APPLAUSE]
>> นั่นก็คุ้มค่าการเดินทาง เพื่อเป้าหมายในเช้าวันนี้ใช่?
ดังนั้น now-- มีก็จะเปิด ออกมาไม่มีสิ่งเช่นสตริง
String ไม่อยู่
มันเป็นคำพ้องความหมายที่เราได้มี ภายในห้องสมุดของ CS50
ต่อ แต่นี้ไปเราจะเริ่มเรียก และเสื้อไม่สาย แต่ดาวถ่าน
และดาวถ่านที่เราจะ หยอกล้อออกจากกันก่อนที่จะยาว
แต่นี้คือการพูด แม้ว่าเรายังคง
ใช้ GetString สำหรับตอนนี้ ในทางเทคนิคผมควร
จะบอกว่าดาวถ่านและถ่านดาว
>> และปรากฎว่าสิ่งที่ดาว เป็นไปเพื่อแสดงถึงบางสิ่งบางอย่าง
เรียกว่าเป็นตัวชี้หรือที่อยู่
และในความเป็นจริงทีเซอร์ สำหรับสิ่งที่อยู่ข้างหน้า
นี่คือ 20 คลิปที่สองจากเรา เพื่อนนิค Parlante ที่ Stanford
ที่ค่อนข้างบางเวลาที่ผ่านมาการใช้จ่าย เป็นจำนวนเงินที่ไร้สาระของเวลา
ดีที่สุดเท่าที่ผมสามารถบอกได้ในของเขา ห้องครัวหรือห้องใต้ดินของเขา
ทำให้ claymation แนะนำไปทั่วโลก
ตัวละครที่มีชื่อว่า บิงกี้กับผู้ที่เราจะ
ได้รับการแนะนำในครั้งต่อไปที่จะชี้
ดังนั้นนี่คือตัวอย่างของสิ่งที่จะมา
>> [วิดีโอเล่นภาพ]
>> -Hey, บิงกี้
ตื่น.
ถึงเวลาที่ตัวชี้เพื่อความสนุกสนาน
>> -นั่นอะไร?
เรียนรู้เกี่ยวกับตัวชี้?
โอ้สิ่งที่ดี
>> [จบเล่นภาพ]
เดวิดเจลัน: และเมื่อทราบว่า เราจะเห็นคุณในวันพุธที่
ทั้งหมดขวา
ใครเต้น?
เข้ามา.
ใครเต้น?
คุณต้องการให้ฉันไปรับมันเริ่มต้น?
ฉันจะได้รับมันเริ่มต้น
Woooo!
>> LAUREN: โมเสสแฟนซีหวาน