ศาสตราจารย์: ดังนั้นวาระการ สัปดาห์นี้ไม่ได้หมายความว่าสิ่งที่มาก แต่หวังว่ามากที่เป็นประโยชน์มาก และที่เกี่ยวข้องกับพวกคุณในสัปดาห์นี้ แต่เรากำลังจะใช้จ่ายอาจจะ 15 20 นาทีเพียงแค่การพูดคุยได้อย่างรวดเร็ว เกี่ยวกับรายการการเชื่อมโยง รายการการเชื่อมโยงจะไป ได้รับการคุ้มครองในการตอบคำถาม ดังนั้นบางทีมันอาจจะเป็นประโยชน์มาก ที่จะเรียนรู้เกี่ยวกับสิ่งที่บิตที่เป็น เรากำลังจะไปใช้จ่ายมากมาย ส่วนใหญ่ของวันนี้ จะไปตอบคำถามที่ศูนย์ปัญหาการปฏิบัติ และจากนั้นเราจะประหยัดอาจจะ 20, 30 นาที ในตอนท้ายสำหรับคำถามที่เอ้อระเหยใด ๆ ใครมี แล้วสุดท้าย ห้านาทีฉันจะ เพื่อให้เครื่องสูบน้ำขึ้นมาสำหรับการพูดแบบทดสอบ พวกคุณทุกคนต้องการที่จะอยู่ที่นี่ว่า เพราะมันจะเป็นช่วงเวลาที่ดี สิ่งที่ถูกต้องดังนั้นบาง วัสดุที่อยู่ในรายชื่อการเชื่อมโยง วิธีที่พวกเขากำลังมีโครงสร้างโดยทั่วไปคือ คุณมีสิ่งที่เรียกว่าโหนดใช่มั้ย? คุณมีสิ่งเหล่านี้เรียกว่า โหนดซึ่งเป็น structs ฉันจะไปกว่าวิธีการสร้าง โหนดในภาพนิ่งถัดไป แต่เป็นหลักทั้งหมดที่เชื่อมโยง รายการเป็นข้อมูลที่ ได้รับเครียดกันผ่านตัวชี้ และเพื่อให้ได้เปรียบที่เรามี ของการใช้รายการที่เชื่อมโยงไป บางทีอาจจะเป็นเช่นเดียวกับอาร์เรย์คือ ความจริงที่ว่าในอาร์เรย์ คุณจำเป็นต้องใช้บล็อกติดกันของ หน่วยความจำในสถานที่เดียวกันอย่างใดอย่างหนึ่ง หลังจากที่อื่นเพื่อให้สามารถที่จะมี ในขณะที่รายการที่เชื่อมโยงที่คุณสามารถทำได้ มีบิตน้อยสุ่มของหน่วยความจำ ทั่วทุกมุมคอมพิวเตอร์ของคุณ เครียดกันโดยชี้ และด้วยวิธีนี้คุณ สามารถเข้าถึงข้อมูล ที่มาหนึ่งหลังจากที่ อื่น ๆ หลังจากที่อื่น ๆ โดยไม่จำเป็นต้องเป็นเพียงก้อนใหญ่ของ หน่วยความจำในคอมพิวเตอร์ของคุณบาง ดังนั้นนี้เป็นหนึ่งในที่สำคัญ เหตุผลที่ว่าทำไมเราใช้รายการการเชื่อมโยง ประการที่สองมันเป็นเรื่องง่ายมากที่จะแบบไดนามิก ปรับขนาดรายการที่ลิงค์เพราะในอาร์เรย์ เมื่อคุณประกาศอาร์เรย์ คุณมีค่าบางชุด สมมติว่าผมต้องการที่จะสร้าง อาร์เรย์ของจำนวนเต็ม 10 ฉันสร้างอาร์เรย์ของ 10 จำนวนเต็มและที่มัน มันเป็น 10 ผมไม่ทราบว่าสิ่งที่ต้องทำหลังจากนั้น ถ้าผมอยากจะทำให้มัน 11 ไม่สามารถทำมันได้ ถ้าผมต้องการให้มัน 9 ไม่สามารถทำมันได้ ในขณะที่อยู่ในรายชื่อการเชื่อมโยงที่คุณสามารถเพิ่มและ ลบและใส่ทุกที่ที่คุณต้องการ คุณสามารถปรับขนาดแบบไดนามิกของคุณ โครงสร้างที่นี่โครงสร้างข้อมูลของคุณ และที่ให้เรามาก เพิ่มความยืดหยุ่นมากขึ้น ที่เราทำไม่ปกติ มีกับอาร์เรย์ ทุกคนสับสนในขั้นพื้นฐาน โครงสร้างของวิธีการเชื่อมโยงรายชื่อเป็น หรือทำไมเราจะต้องใช้มากกว่าหนึ่งอาร์เรย์? ใช่เราจะไปกว่าในรายละเอียด วิธีการสร้างจริง แต่นี้เป็นเพียงชนิดของ ความรู้สึกทั่วไปในขณะนี้ เย็น. และเพื่อให้อาร์เรย์จะเครียดกัน สิ่งเล็ก ๆ น้อย ๆ เหล่านี้น่ารัก เรียกว่าโหนด ทุกโหนดคือเป็นประเภทสมาชิกของโครงสร้าง โปรดจำไว้ว่า struct คือถ้าคุณต้องการ ที่จะสร้างบางประเภทของตัวแปร ใน C ที่ไม่ได้อยู่แล้ว อยู่ที่คุณเป็นโปรแกรมเมอร์ จริงสามารถสร้างตัวเองว่า และเพื่อให้ข้อมูลประเภทนี้ โครงสร้างที่เรียกว่าโหนด ได้รับการสร้างขึ้นจริงโดยเราว่า ไม่ได้อยู่ใน C ตัวของมันเอง และวิธีการที่คุณ สร้างหนึ่งคือคุณมี ส่วนหัวของ struct typedef ที่ คอมไพเลอร์ที่บอกฉัน เกี่ยวกับการสร้างโครงสร้าง เรากำลังจะชื่อมันว่า "โหนด." และภายในที่เรากำลังจะ การประกาศตัวแปรใน ซึ่งจะเก็บค่า แล้วเรายังจะ มีตัวชี้ที่เรียกว่า "ถัดไป" ที่ชี้ไปข้างหน้า โหนดในรายการการเชื่อมโยง และจากนั้นคุณเสร็จสิ้นการที่ออก โดยเพียงแค่การทำซ้ำอีกครั้งเพื่อโหนด คอมไพเลอร์จะรู้ตกลง นั่นคือจุดสิ้นสุดของ struct ของฉัน และอื่น ๆ ในลักษณะนี้เราชนิด ของการสร้างอาร์เรย์ที่น้อยน่ารัก ชนิดของสิ่งที่มี คุณค่าและมีตัวชี้ และคุณสามารถเชื่อมโยงพวกเขาทั้งหมด พร้อมกับคำแนะนำเหล่านั้น เพื่อให้พวกเขาสามารถเป็นทุกชนิด เครียดกันในห่วงโซ่ เย็น. คุณสามารถได้ยินเสียงที่ดีขึ้นเล็กน้อยหรือไม่? ผู้ชม: ใช่ ศาสตราจารย์: สิทธิทั้งหมด ดังนั้นวิธีการที่เป็นคนที่คุณสามารถดูที่ รายการที่เชื่อมโยงโดยทั่วไปมีโครงสร้าง คือคุณมีหัว คุณมีค่าหัวซึ่งไม่ได้เป็น ถูกชี้โดยตัวชี้อื่น ๆ แต่มันจะชี้ไปที่ หรือการอ้างอิงโหนดอื่น โหนดหลังเป็นไปอ้างอิง โหนดหลังจากนั้นและอื่น ๆ และอื่น ๆ จนในที่สุดคุณตี ปลายของรายการลิงค์ของคุณ และคุณก็จะไม่ได้มีตัวชี้มี ดังนั้นคิดว่าเหมือนในห่วงโซ่หรือแม้กระทั่ง ถ้าใด ๆ ของพวกคุณทำให้ผมไม่ทราบว่า เช่นเดียวกับลูปผลไม้ เมื่อคุณเป็นเล็ก ๆ น้อย ๆ คุณจะสตริงพวกเขาร่วมกัน และพวกเขาสวมใส่รอบคอของคุณ คิดว่ามันเป็นสิ่งเดียวที่แน่นอน คุณมีสิ่งเล็ก ๆ น้อย ๆ เหล่านี้ที่คุณ สตริงสามารถร่วมกันจุดหนึ่งที่ หลังจากที่มันให้เป็นหนึ่งหลังจากที่ มันและอื่น ๆ และอื่น ๆ จนกว่าคุณจะมีห่วงโซ่ ของโครงสร้างข้อมูล ที่คุณสามารถใช้ แต่คุณต้องการ ดังนั้นวิธีการที่ว่านี้เราจะ มักจะแทรกหรือลบ โหนดใด ๆ จากการเชื่อมโยง รายชื่อแตกต่างกันมาก ขึ้นอยู่กับที่โหนดที่ ดังนั้นสำหรับตัวอย่างเช่นเพราะ คำแนะนำอยู่เสมอ ชี้ไปที่ค่าที่เฉพาะเจาะจง เมื่อคุณลบหรือแทรกโหนด คุณต้องการที่จะให้แน่ใจว่าตัวชี้ ทั้งหมดชี้ไปที่สิ่งที่ถูกต้อง ดังนั้นหากคุณต้องการที่จะแทรกที่อาจเกิดขึ้น โหนดใหม่ที่มีค่าหนึ่ง ภายในการเชื่อมโยงที่เรียงลำดับ รายการเราทุกคนรู้ที่นี่ จากภาพที่ไป ไปในระหว่างหัวและสองใช่มั้ย? เพราะเหมาะกับที่นั่น แต่วิธีการที่เราจะทำอย่างนั้น เป็นครั้งแรกโดย dereferencing ชี้ จากหัวและส่งมาที่หนึ่ง แต่เราเข้ามาของปัญหาที่นี่ ทุกคนสามารถเห็นสิ่งที่เป็นปัญหา คือถ้าเราจะ dereference แรก ตัวชี้จากหัวถึงหนึ่งหรือไม่ ปัญหาสิ่งที่เราอาจจะเป็นถ้าเราพยายาม เพื่อเพิ่มนี้ไปยังด้านหน้าของอาเรย์ของเราหรือไม่ ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์: แน่นอน ดังนั้นที่นี่เรามีตัวชี้ว่าเป็น ที่ครั้งหนึ่งเคยชี้จากหัวถึงสอง แต่ถ้าคุณได้รับการกำจัดที่ ตัวชี้คุณชี้ไปยังหนึ่ง ตอนนี้เรามีความคิด ว่าจะไปหาสอง เพราะที่ผมกล่าวว่าก่อนที่คุณมี ก้อนยักษ์ของหน่วยความจำในเครื่องคอมพิวเตอร์ของคุณ โหนดทั้งหมดเหล่านี้สามารถทำได้ จะสลับแบบสุ่ม ในสถานที่ในคอมพิวเตอร์ของคุณ และคุณไม่ทราบวิธีการ ที่จะไปเกี่ยวกับการหาที่ และเพื่อให้คุณจะต้องมีตัวชี้ ที่ชี้ไปยังโหนดทั้งหมดในตอนท้าย หรืออื่น ๆ ถ้าคุณตั้งใจ dereference หนึ่ง โดยไม่กำหนดครั้งแรก ค่าแรก, คุณ เพียงแค่จะสูญเสีย หลังจากนั้นทุกอย่าง ดังนั้นสิ่งที่เรากำลังจะไป ทำคือคุณจะเป็นครั้งแรก ต้องการที่จะสร้างตัวชี้บน โหนดที่คุณต้องการแทรก ชี้ไปที่คุณ ต้องการที่จะใส่ไป แล้วหลังจากนั้นคุณ สามารถชี้หัวกลับไปที่หนึ่ง ไม่ว่าทำให้ความรู้สึกที่ทุกคนที่นี่? ที่ดี คิดว่ามันเป็นเหมือนโซ่ ถ้าคุณเพิ่มโซ่ มันเป็นชนิดของที่ใช้งานง่าย วิธีการที่คุณจะไปเกี่ยวกับการใสที่ ตกลงดังนั้นที่เป็นจริงมาก สั้นกว่าที่ฉันคิดว่ามันจะเป็น พูดชักชวนห้านาทีในรายการการเชื่อมโยง เพียงเพื่อให้พวกคุณมี ความคิดพื้นฐานของสิ่งที่เป็น ที่นี่เรามีวาระการศูนย์ทดสอบ อย่าปล่อยให้เรื่องนี้ข่มขู่คุณ ฉันรู้ว่ามันเป็นข้อมูลจำนวนมาก มันดูน่ากลัวมาก นอกจากนี้ยังมีจำนวนมากของผม คิดว่า CSC ชนิดของคำ สิ่งที่ต้องการสตริงเลขฐานสิบหก ตัวชี้แบบไดนามิกจัดสรรหน่วยความจำ ทำให้เกิดเสียงเป็นคำที่น่ากลัวมาก แต่เรากำลังจะทำลายพวกเขา ลงทำบางปัญหาการปฏิบัติ เพื่อให้พวกคุณทุกคน มีความพร้อมสำหรับการทดสอบนี้ มีกี่คนที่พวกคุณมี เริ่มต้นแล้วการศึกษา? ตกลงพวกคุณอาจต้องการ ที่จะเริ่มต้นในการเริ่มต้น ว่าเพราะแบบทดสอบวันพรุ่งนี้ หรือพฤหัสบดีสำหรับบางท่าน ใช่ดังนั้นเรากำลังจะไป มากกว่าปัญหาการปฏิบัติบาง ถ้าพวกคุณทุกคนต้องการที่จะใช้ ออกแผ่นกระดาษ, ดินสอ เรากำลังจะไปเพียงแค่ใช้จ่าย ส่วนใหญ่ของส่วนของวันนี้ จะไปบางส่วนของที่ทำให้พวกคุณมี ความคิดของสิ่งที่คาดหวังในการตอบคำถามที่ ตกลง. คู่ของจิสติกส์ รายละเอียดเป็นอย่างดีสำหรับทุกคน ที่ไม่ได้รับการเชื่อมโยงที่มีถ้า คุณจะไป cs50.yale.edu, ด้านหน้า หน้านี้มีการเชื่อมโยง ที่บอกว่า "เกี่ยวกับแบบทดสอบศูนย์." การเชื่อมโยงที่จะนำคุณมี หากคุณยังไม่ได้อ่านมันโปรดอ่านมัน เพราะมันจะบอกคุณสิ่งที่สำคัญจริงๆ ข้อมูลเกี่ยวกับการตอบคำถาม ฉันจะดึงออกจาก ว่าเพียงเพราะร่างกาย ถ้าพวกคุณไม่ทราบว่า ที่จะไปเราจะมีปัญหา และดังนั้นหากครั้งสุดท้ายของคุณในแง่ด้วย จะยังไม่มีให้ไปที่หอประชุมโรงเรียนกฎหมาย และถ้าจะเริ่มต้นที่ผ่านมาของคุณด้วย P ถึง Z ไปที่หอประชุมเดวีส์ และนี่จะใช้สำหรับ คนที่อยู่ในส่วนพุธ หากคุณกำลังการตอบคำถามเกี่ยวกับ วันพฤหัสบดีที่คุณไป SSS 114 ที่การบรรยายของคุณมักจะเป็น ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์โอ้ถึง Z คุณจะ ไปที่หอประชุมเดวีส์ ฉันจะเปลี่ยนที่ใช่มั้ย? เออใช่คุณก็ล้มเหลวโดยอัตโนมัติ โอ้ใช่ว่าคุณคริส ใช่ไม่ดีของฉัน อ๋อโอถึง Z คุณจะ เพื่อไปที่เดวีส์ Auditorim ฉันจะแก้ไขปัญหานี้เมื่อฉันอัพโหลด ใช่. และจากนั้นยังเป็นสิ่ง สิ่งสำคัญที่ใจ เป็นวันพุธว่าถ้าคุณเป็นอย่างเป็นทางการ ลงทะเบียนเรียนในส่วนของวันพุธ คุณจะต้องตอบคำถามของคุณในวันพุธที่ และถ้าคุณลงทะเบียนเรียนในวันพฤหัสบดีที่ คุณจะต้องตอบคำถามของคุณพฤหัสบดี และมันก็เป็นช่วงเวลาเรียน ที่ผมคิดว่ามันก็เหมือน 1:00 02:15 ในวันพุธและ 2:30-03:45 ในวันพฤหัสบดี หากคุณมีความขัดแย้งกันไม่ได้, ข้อแก้ตัวของคณบดีเป็นสิ่งเท่านั้น โชคไม่ดีที่เราสามารถใช้ เพราะเรามี ส่วนใหญ่ของการร้องขอ เพื่อสลับไปตั้งแต่วันพุธถึงวันพฤหัสบดี ที่เราไม่สามารถให้เกียรติเว้นแต่ เรามีการร้องขอของคณบดี ตกลง. ดังนั้นก่อนที่เราจะเริ่มต้นในการ คู่ของปัญหาการปฏิบัติ ฉันแค่จะไปกว่า เคล็ดลับที่เป็นประโยชน์ของแอนดี้สำหรับความสำเร็จ พวกคุณเมื่อคุณศึกษาคุณจริงๆ ต้องการฝึกการเขียนรหัสด้วยมือ ครั้งแรกที่ผมเคย เอาแบบทดสอบ CS, ผมไม่ได้ การปฏิบัติที่เขียนรหัสด้วยมือ ก่อนและมันก็เป็นอย่างมาก ที่น่าตกใจที่ว่ามันเป็นเรื่องยาก เมื่อพวกคุณไม่ได้รับใน นิสัยของการพิมพ์ออกมาทุกอย่าง มันมาอย่างเป็นธรรมชาติเป็น สามารถที่จะได้ autocompleted วงเล็บและเครื่องหมายอัฒภาคมี เมื่อคุณเขียนมันออกมา ด้วยมือบางครั้งก็ มากง่ายมากที่จะลืมอัฒภาค หรือลืมปิดวงเล็บ หรือลืมปิดลำไส้ใหญ่ หรือสิ่งที่ต้องการ ดังนั้นเมื่อคุณเขียนโค้ดด้วยมือ มันเป็นความรู้สึกที่แตกต่างกันมาก ดังนั้นพวกคุณเมื่อคุณกำลังทำงาน ผ่านบางส่วนของปัญหาการปฏิบัติ มันจะดีในการปฏิบัติจริงในวันนี้ หรือวันพรุ่งนี้ผมคิดว่าถ้าคุณอยู่ การตอบคำถามในวันพฤหัสบดีที่ ประการที่สองเรามีที่ผ่านมาเช่น มูลค่าแปดปีของการปฏิบัติ แบบทดสอบออนไลน์ ตอบคำถามในปีนี้อาจจะเป็น มากคล้ายกับทั้งหมดของพวกเขา พวกเขากำลังทั้งหมดที่คล้ายกันมาก ชนิดของคุณได้รับใน รูปแบบของประเภทของคำถาม ที่เราถามประเภทของ ฟังก์ชั่นที่เราจะเขียนมันใน และอื่น ๆ ฯลฯ ดังนั้นจะใช้แบบทดสอบทางปฏิบัติ โดยเฉพาะอย่างยิ่งภายใต้ข้อ จำกัด ด้านเวลา 75 นาทีในการทำแบบทดสอบคือ ไม่มากของจำนวนเงินของเวลา มันมากนานมาก และเพื่อให้พวกคุณต้องการ เพื่อให้แน่ใจว่าพวกคุณ ในนิสัยของการเขียน รหัสด้วยมือได้อย่างรวดเร็ว เพราะคุณไม่ต้องการที่แรก เวลาที่จะเห็นการตอบคำถามของความยาวที่ จะอยู่ในการตอบคำถามของคุณ พวกคุณอยากจะให้แน่ใจว่า ที่คุณปฏิบัติก่อน ประการที่สี่คุณต้องการที่จะตรวจสอบ การบรรยายและภาพนิ่งส่วน คุณไม่จำเป็นต้องที่จะจดจำสิ่งที่ ที่จริงแล้วทุกคนจะได้รับอนุญาตให้ หนึ่งแผ่นบันทึกกระดาษสีขาว หน้าและหลัง. พวกคุณสามารถพิมพ์หรือเขียน หากคุณพบว่าตัวเองต้องจดจำ อะไรวางมันลงบนแผ่นที่ ฉันรับประกันคุณคุณไม่ต้องการที่จะ จะติดอยู่ในช่วงกลางของการตอบคำถามว่า เป็นเหมือนโอ้ใช่สิ่งที่ รันไทม์ของการจัดเรียงเมื่อเทียบกับการจัดเรียงที่ว่านี้ เพียงแค่ใส่มันลงและคัดลอก ตรงจากแผ่นบันทึกย่อของคุณ จากนั้นคุณสามารถจริงเพียงแค่ใช้ของคุณ สมองจะคิดเกี่ยวกับปัญหาที่เกิดขึ้น แทนที่จะต้องจำข้อเท็จจริง และเพื่อใช้ประโยชน์จริงๆ รายละเอียดช่องใด ที่คุณคิดว่าคุณจะต้องจดจำ ป๋อมมันลงบนแผ่นตรวจสอบ ตกลงคำถามใด ๆ logistically เกี่ยวกับการตอบคำถาม ก่อนที่เราจะเริ่มต้นบางอย่าง ปัญหาแบบทดสอบปฏิบัติ? ใช่? ผู้ชม: ฉันไม่ได้มีโอกาส จะมองไปที่การตอบคำถาม [ไม่ได้ยิน] แต่มันก็เป็นไปได้ แอพลิเคชันส่วนใหญ่ หรือมีก็ไปได้ เช่นคำถามความรู้? ศาสตราจารย์: มันมาก ดังนั้นวิธีการที่ฉัน จะอธิบายแบบทดสอบ is-- ฉันใส่กัน ปัญหาการปฏิบัติ ที่ผมดึงออกมาจากแบบทดสอบทั้งหมด แต่คุณจะเห็นว่ามีสองหลัก ประเภทคำถามที่เราจะขอให้คุณ หนึ่งคือรายละเอียดในระดับที่ต่ำมากของสิ่งที่ เราจะให้เป็นก้อนเล็ก ๆ ของรหัส และกล่าวว่าจะมีข้อผิดพลาดที่นี่? สิ่งที่จะได้รับการพิมพ์ออกจากที่นี่? สิ่งที่จะผลิตรหัสนี้และอื่น ๆ ดังนั้นในระดับที่ต่ำมากรายละเอียดข้อมูล และเมื่อพลิกด้านที่เราจะมีมาก คำถามความรู้ตามระดับสูง คุณสามารถอธิบายสิ่งที่เป็น ความแตกต่างระหว่างการค้นหาแบบไบนารี และการค้นหาเชิงเส้นคืออะไร? ทำไมเราจะต้องการ ใช้หนึ่งในช่วงอื่น ๆ ? บางทีอาจจะเป็นสิ่งที่เป็น GDB? ทำไมเราต้องการที่จะใช้ GDB? ระดับที่สูงขึ้นพื้นฐาน คำถามเข้าใจ ดังนั้นคุณจะเห็นส่วนผสมของ ทั้งสองของพวกเขาในการตอบคำถามของคุณ สิ่งอื่นก่อนที่เราจะ มุ่งหน้าตรงเข้าไปในมันได้หรือไม่ ตกลง. ผู้ชม: อีกหนึ่ง ศาสตราจารย์: โอ้อีกหนึ่ง ขอโทษ ผู้ชม: ใช่มันเป็นไร ดังนั้นคุณกำลังจะบอกว่า 75 นาที สั้นเกินไปเช่นเป็นไปได้ยาก ว่าเราจะจบ? หรือเหมือน 75 นาที ตรงตามเวลามาก ในขณะที่เราจะต้องถ้าเรา เตรียมเหมาะสม? ศาสตราจารย์: OK ดังนั้น การตอบคำถามเป็นสิ่งที่ท้าทาย มันเป็นความท้าทายอย่างแน่นอน คุณจะพบว่าตัวเองในเวลาสั้น คุณอาจจะตีเช่น 10 15 นาทีที่จะไปและเป็นเหมือนอึ ฉันไม่เคยมีใครมากที่ต้องทำ และที่ดีทั้งหมด ทุกคนจะรู้สึกแบบเดียวกัน เพียงแค่จะตระหนักถึงมาก วิธีการมากเวลาที่คุณมี และนั่นเป็นเหตุผลที่ผมบอกคุณ พวกคุณทำแบบทดสอบการปฏิบัติ เพราะมันจริงๆให้ความรู้สึกที่ดี ของสิ่งที่ตอบคำถามเป็นไปได้เช่น ดังนั้นถ้าคุณพบว่าตัวเองเป็น สามารถที่จะดำเนินการเสร็จสิ้นการปฏิบัติ แบบทดสอบในปริมาณที่ดีของ เวลาที่คุณสามารถก้าวตัวเองดี แล้วคุณจะไม่ได้มีปัญหา ในวันพุธหรือพฤหัสบดี เย็น. ดังนั้นหากทุกคนที่ผมคิดว่า wants-- คนส่วนใหญ่มีแผ่นกระดาษ ออกมาแล้ว ฉันจะหลักเพียง ให้คุณตัวอย่างคำถาม ให้พวกคุณเหมือนเป็น ไม่กี่นาทีที่จะทำพวกเขา และเราจะไปกว่าเป็นชั้น สิ่งที่คำตอบของพวกเขา ดังนั้นนี่เป็นปกติมาก คำถามต้นเราจะ ขอให้คุณแปลง ตัวเลขระหว่างฐานที่แตกต่างกัน Binary เป็นพวกคุณสามารถ การเรียกคืนเป็นฐานสอง สิบเป็นฐาน 10 หรือสิ่งที่เรา เป็นมนุษย์มักจะตีความ เลขฐานสิบหกเป็นฐาน 16 ซึ่งเป็นศูนย์ ถึงเก้ารวมทั้งผ่านเอฟ ดังนั้นจึงมีตัวเลขสี่ตัวฉัน ขอให้พวกคุณในการแปลงที่นี่ ฉันจะให้คุณต้องการสามถึง สี่นาทีที่จะคิดว่าผ่าน เราจะไปเกี่ยวกับการแก้ปัญหานี้ ผู้ชม: เราได้รับอนุญาตให้เครื่องคิดเลข? ศาสตราจารย์: คุณจะไม่ ต้องคิดเลขใช่ ผมคิดว่านอกจากพื้นฐานผมคิดว่าเป็น ทั้งหมดที่พวกคุณจะถูกขอให้ทำ เพียงเพื่อให้ชนิดของฉันมีความรู้สึก เมื่อทุกคนจะทำมองขึ้น คลื่นผมไม่ทราบว่ายิ้ม ดูมีความสุขถ้าคุณกำลังทำ ใช่. บางทีไม่กี่นาที ตกลงให้นำมาไว้ใน ฉันมีจุดมุ่งหมายที่จะไป ให้พวกคุณใช้เวลาน้อยลง กว่าที่คุณอาจจะต้อง ทำบางส่วนของปัญหาเหล​​่านี้ เพียงเพราะผมต้องการที่จะให้แน่ใจว่า เราได้รับผ่านพวงของปัญหาที่เกิดขึ้น ดังนั้นไม่ต้องกังวลถ้าคุณไม่ได้ มีโอกาสที่จะจบ ทั้งหมดตกลงตราบใดที่คุณมี ความคิดของวิธีการที่จะไปเกี่ยวกับเรื่องนี้ ถ้าอย่างนั้นเราไปข้างหน้าและทำครั้งแรกหนึ่ง ดังนั้นก่อนไม่มีใครต้องการที่จะบอกฉัน ในไบนารีสิ่งที่ทำในแต่ละตัวเลขเหล่านี้ เป็นตัวแทนในแง่ของค่าของพวกเขา? ใช่? ผู้ชม: สองไป พลังงานเป็นศูนย์ 2-1 ศาสตราจารย์: แน่นอน ดังนั้น. ขวาดังนั้นโดยทั่วไป เมื่อเราอยู่ในฐาน 10 ทั้งหมดเหล่านี้เป็นตัวแทนที่ชอบ 10 ถึงฐานของศูนย์ใช่มั้ย? นั่นเป็นหนึ่งในสถานที่ของคุณ ทุกสถานที่ที่ 10 ของคุณจะเป็น 10 ถึงพลังของหนึ่ง คุณสถานที่ 100 คือ 10 มีอำนาจของทั้งสอง สิ่งที่ฐานคุณอยู่ในที่เกิด จะทำอย่างไรกับสิ่งเดียวที่แน่นอน, เพียงแค่มีฐานที่แตกต่างกัน ไบนารีดังนั้นสิ่งที่มีอยู่เป็นฐานสอง คุณกำลังจะแปลงทั้งหมด ตัวเลขเป็นสองสิ่งที่มีอำนาจ ของหลักที่ ดังนั้นในแง่นี้เรา สามารถมีวิธีที่ง่าย ความสามารถในการเพิ่มขึ้นหรือ สรุปตัวเลขทั้งหมดในการสั่งซื้อ แปลงเป็นฐาน 10 ดังนั้นไม่มีใครต้องการที่จะบอกฉันว่า คำตอบคนแรกที่อยู่ในฐานสิบ? ผู้ชม: สอง [ไม่ได้ยิน] ศาสตราจารย์: ใช่ ผู้ชม: 42 ศาสตราจารย์: 42, มีคุณไป ดังนั้นวิธีการที่เราได้คำตอบนี้โดย ทำสองครั้งแรกซึ่งเป็นสอง บวกสองที่สามซึ่งเป็นแปด พลัสสองถึงห้าซึ่ง เป็นสิ่งที่เหลือ คุณรวมพวกเขาและมันเป็น 42 ใครสับสนเกี่ยวกับวิธีการที่เราได้ที่? นอกจากพื้นฐานดังนั้นเช่น ผมบอกว่าคุณควรจะตกลง ถ้าไม่ดีเราสามารถฝึกที่มากเกินไป แต่นั่นคือทั้งหมดที่ด้านขวา เย็น. ไม่มีใครต้องการที่จะให้ฉัน ตอบคนที่สองได้เป็นอย่างดี? 50? ดี. ทุกคนเกิดความสับสนเกี่ยวกับวิธีการ เราได้ที่ใด? เย็นฉันจะมี คำตอบเกี่ยวกับภาพนิ่งถัดไป ดังนั้นไม่ต้องกังวลถ้าคุณ ต้องคัดลอกมันลง ตกลงดังนั้นเลขฐานสิบหกเป็นบิต trickier แต่ฉันจะแสดงให้พวกคุณ ทางลัดสำหรับวิธีการที่จะทำมัน ดังนั้นเลขฐานสิบหกเป็นคุณ จำไว้ว่าทั้งหมดมันเป็น 16 และเนื่องจากเราเป็นมนุษย์ไม่จริง มีหมายเลข 16 ที่จะเป็นตัวแทนที่ ที่เราจะไปจากศูนย์ถึงเก้าซึ่งเป็นครั้งแรกของเรา 10 ค่าและจากนั้นเราจะทำผ่าน F, ซึ่งเป็นอีกหกค่า ดังนั้นวิธีที่ง่ายที่สุดที่จะไปจาก ใด ๆ เลขฐานสองเลขฐานสิบหก คือการแบ่งออกเป็นส่วน และอื่น ๆ เลขฐานสองเราจะให้ คุณอาจจะมีตัวเลขแปดหลัก คุณก็สามารถทำลาย พวกเขาขึ้นอยู่ตรงกลาง ดังนั้นก่อน one-- หนึ่งหนึ่ง หนึ่งหนึ่งหนึ่งหนึ่งหนึ่งหนึ่ง ชนิดของการคิดว่ามันขึ้นอยู่ที่คุณรู้ว่าวาด เฉือนหรือจุลภาคในระหว่างพวกเขา และคุณก็สามารถแปลง สิ่งที่ได้โดยตรง นี้คือการแรก จำนวนเลขฐานสิบหก และสิ่งที่นี่คือการ ที่สองของเลขฐานสิบหก ดังนั้นจำจากสัญกรณ์ที่พบบ่อย ทำในสิ่งที่มีค่าเลขฐานสิบหกเริ่มต้นด้วย? ผู้ชม: ศูนย์ ศาสตราจารย์: 0X ดังนั้นเราจึงรู้ว่าทุกครั้งที่เราขอให้คุณ การแปลงจำนวนใด ๆ ที่เลขฐานสิบหก หรือเวลาใด ๆ ที่คุณเห็นใด ๆ จำนวนที่เริ่มต้นด้วย 0X, คุณรู้ไหมว่ามันเป็นค่าฐานสิบหก และจากนั้นคุณจะถูกขอให้ ตรวจสอบสิ่งเหล่านี้เป็นตัวเลขสองหลัก และวิธีที่คุณทำเช่นนั้นได้รับทราบถึง ว่าครึ่งหนึ่งและรับทราบถึงครึ่งหนึ่ง ดังนั้นในตัวอย่างนี้สิ่งที่ จะหนึ่งหนึ่งหนึ่งหนึ่งจะเป็นอย่างไร ค่าอะไรที่จะเป็น? ที่ต้องการจะ F ใช่มั้ย? ที่ต้องการจะ 15 ดังนั้นนี้จะเป็นเอฟหนึ่ง หนึ่งหนึ่งหนึ่งที่นี่ยังเป็น เอฟดังนั้นหนึ่งหนึ่งหนึ่งหนึ่งหนึ่งหนึ่งหนึ่ง หนึ่งในเลขฐานสิบหกทั้งหมดมันเป็นเป็น 0xFF เพราะครึ่งหนึ่งเป็นตัวแทนนี้ F มูลค่า 15 และอีกครึ่งหนึ่งนี้เป็นตัวแทนของ F มูลค่า 15 เพราะจำได้ว่าเรา นับจากศูนย์ถึงเก้า เป็นเช่น 10, B เป็นเช่น 11, F คือ 15 ที่ทำให้รู้สึกกับทุกคนว่า ที่เราได้จากไบนารีเลขฐานสิบหก? ผู้ชม: ดังนั้นวิธีการที่เราได้รับ 15 จากหนึ่งหนึ่งหนึ่งหนึ่ง? ศาสตราจารย์: ใช่นี้เป็นไบนารีใช่มั้ย? ลองนึกภาพนี้เป็นเพียงเลขฐานสอง เพื่อให้คุณมีสองถึง ข้อที่ศูนย์ซึ่งเป็นหนึ่งใน ผู้ชม: โอ้, OK ดังนั้นคุณก็รวมมันออกมา ศาสตราจารย์: ใช่แล้ว คุณเพียงแค่รวมที่ออกมา นั่นคือทั้งหมดที่มันเป็น ผู้ชม: ตกลง ศาสตราจารย์: OK ผู้ชม: ดังนั้นคุณไปจากไบนารี ทศนิยมเลขฐานสิบหก? ศาสตราจารย์: นั่นคือ วิธีที่ง่ายที่สุดที่จะทำเช่นนั้นใช่ คุณไม่ได้ไปเพราะทศนิยม ทศนิยมมีเพียงศูนย์ถึงเก้า เราเพียงแค่ชนิดของ แยกนี้ออกเป็นสอง ผู้ชม: [ไม่ได้ยิน] ใช้ทศนิยมที่จะหา สิ่งที่มันตรงกับขึ้นไปในเลขฐานสิบหก ศาสตราจารย์: ผมหมายถึงคุณ รับทราบการใช้พื้นฐานทางคณิตศาสตร์ ผู้ชม: ใช่ ศาสตราจารย์: ใช่สวยมาก มันเป็นบิตสับสน เพียง แต่รู้ว่าคุณ สามารถแบ่งสิ่งที่ ค่านี้จะเป็นเพียงครึ่งหนึ่ง ดูสิ่งที่อยู่ในไบนารี? จำนวนสิ่งที่? มันเป็นไปได้ บางสิ่งบางอย่างจากศูนย์ถึงเอฟ ที่นี่ยังเป็นไปได้ บางสิ่งบางอย่างจากศูนย์ถึงเอฟ และจากนั้นคุณก็สามารถใส่ ทั้งสองมีสิทธิ ผู้ชม: ตกลง ศาสตราจารย์: อ๋อ ตกลง. ดังนั้นพวกคุณต้องการ ลองต่อไปแล้ว? ศูนย์หนึ่งศูนย์หนึ่ง หนึ่งศูนย์หนึ่งศูนย์ ฉันจะให้พวกคุณเช่น 30 วินาที ตั้งแต่ที่คุณอาจไม่ทราบ เคล็ดลับวิธีการทำเช่นนี้ก่อนหน้านี้ ตกลงทุกคนต้องการที่จะได้รับนี้คนหนึ่งถูกยิงหรือไม่? 0X5A ศาสตราจารย์: 0X5A 5a ดี. ดังนั้นที่นี่จะ be-- คุณต้องการ ที่จะบอกเราว่าคุณมีที่? ครั้งแรกไม่ว่าคุณจะได้รับห้า? ผู้ชม: เพ​​ราะเป็นศูนย์ หนึ่งศูนย์หนึ่งห้า ศาสตราจารย์: ทุกคนไม่เข้าใจ ทำไมศูนย์หนึ่งศูนย์หนึ่งห้า? คุณได้ที่นี่ คุณไม่มีอะไรในสองถึงแรก ในสองถึงสองคุณ มีหนึ่งซึ่งเป็นสี่ ดังนั้นคุณเพิ่มสี่บวก หนึ่งคุณมีห้า ทุกคนดีหรือไม่? ตกลง. และแล้วสิ่งนี้จะเป็นและทำไม? จำนวนสิ่งที่ไม่สอดคล้องกับ? ผู้ชม: 10 ศาสตราจารย์: และสิ่งนี้ในสองฐาน? ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์: แน่นอน ดังนั้นค่าที่สองที่นี่จะเป็น 0X5A ทุกคนที่ดีในการแปลง? มันมากง่ายกว่าที่คุณคิดว่ามันเป็น ผมแค่อยากจะให้แน่ใจว่า คุณรู้แนะนำที่เป็นประโยชน์ และเทคนิคสำหรับวิธีการทำที่ ผู้ชม: ทำไมคุณก็สามารถแยก มันอยู่ตรงกลางเช่นนั้นหรือไม่ เพียงแค่เป็นเหมือน, OK, ฉันก็แค่จะไป เกี่ยวกับการดูแลเหล่านี้ก่อน [ไม่ได้ยิน] ศาสตราจารย์: เนื่องจากว่าเป็นจริง วิธีค่าเลขฐานสิบหกเป็นตัวแทน 0X ที่จริงหมายถึง อะไรนอกเหนือจากบอกคุณ ว่ามันเป็นเลขฐานสิบหก และสิ่งนี้แสดงให้เห็นถึงเสมอ สี่หลักแรก และสิ่งนี้แสดงให้เห็นถึงเสมอ สี่หลักสุดท้าย และอื่น ๆ เหล่านี้เป็นเพียงตัวเลขสองหลัก สอดคล้องกับบิตที่แตกต่างกัน ผู้ชม: ดังนั้นเราจะ always-- ศาสตราจารย์: คุณเสมอ จะได้รับค่าบิตแปด ผู้ชม: นั่นคือเช่นเดียวกับสิ่งที่ นี่หรือสิ่งที่ทั่วหรือไม่? ศาสตราจารย์: นั่นเป็นเพียง สิ่งที่อยู่ในคอมพิวเตอร์ครับ ผู้ชม: ตกลง ที่น่ากลัว ศาสตราจารย์: นอกจากนี้ดังนั้นในตัวอย่างนี้ เราเปลี่ยนจากไบนารีทศนิยม, และจากไบนารีเลขฐานสิบหก พวกคุณต้องการให้แน่ใจว่าคุณยัง ปฏิบัติไปวิธีอื่น ๆ ดังนั้นถ้าฉันให้คุณ 0xFF คุณสามารถทำได้ ที่วาดออกมาในไบนารีใช่มั้ย? คุณแปลง F เข้าไปไบนารี ซึ่งเป็นหนึ่งหนึ่งหนึ่งหนึ่ง แปลง F ถึงไบนารีซึ่ง เป็นหนึ่งหนึ่งหนึ่งหนึ่ง ดังนั้นเราอาจจะขอให้คุณทำ วิธีอื่น ๆ ดังนั้นทศนิยมเพื่อไบนารีหรือ เลขฐานสิบหกที่จะไบนารี ดังนั้นคุณจึงต้องการที่จะทำให้ แน่ใจว่าคุณรู้ทั้งสองวิธี เราอาจจะขอให้คุณ การรวมกันของทั้งสอง ใช่คุณมีคำถามหรือไม่? ฉันสามารถ see-- คุณดีหรือไม่? ผู้ชม: ใช่ ศาสตราจารย์: OK I Am ที่ดีในการลบนี้หรือไม่? ที่ดี สิทธิทั้งหมดเพื่อให้คำตอบอยู่ที่นี่ถ้าใคร อยากรู้อยากเห็นในภายหลังและได้รับสับสน ตกลง. ผู้ชม: ไม่สำคัญว่าถ้าเราใส่ จดหมายของเราในหน่วยงานของรัฐหรือตัวพิมพ์เล็ก? ศาสตราจารย์: มันไม่เพราะ ในเลขฐานสิบหกโดยการประชุม ตัวละครทุกตัวจะเป็นตัวพิมพ์ใหญ่ ดังนั้น A ถึง F มี จะเป็นตัวพิมพ์ใหญ่ หากคุณใส่ตัวพิมพ์เล็กผมไม่ทราบ ถ้าเราจำเป็นต้องจะเป็นเครื่องหมายผิด แต่ในทางทฤษฎี ที่ไม่ได้ในทางเทคนิค วิธีที่คุณควรจะมีมัน ดังนั้นพวกเขาควรจะเป็นตัวพิมพ์ใหญ่ ใช่คำถามที่ดี ตกลง. คำถามที่สอง พิจารณาโปรแกรมนี้น่ารักที่นี่ ฉันจะถามคำถาม ฉันจะกลับมานี้ ดังนั้นประการแรกสิ่งที่อยู่ภายในมาตรฐาน io.h ที่เป็นที่สนใจของโปรแกรมได้หรือไม่ ประการที่สองสิ่งที่ไม่เป็นโมฆะ มีความหมายในสายสาม? และสามสิ่งที่ไม่กลับมาจากศูนย์ หลักหกสายโดยทั่วไปมีความหมาย? ถ้าพวกคุณต้องการที่จะเขียนเหล่านั้น ลงตั้งแต่ผมต้องเปลี่ยนกลับ การสไลด์เพียงเพื่อให้คุณสามารถดูรหัส นี่คือตัวอย่างของเช่นอาจจะหนึ่ง คำถามระดับที่สูงกว่าที่เราขอให้คุณ สิ่งที่หมายถึงในโปรแกรม ทุกคนที่ดีสำหรับผมที่จะ กลับไปที่ภาพนิ่ง? ตกลงเย็น ดังนั้นฉันจะให้พวกคุณเช่นอาจจะสาม นาทีที่จะดูที่นี้จริงอย่างรวดเร็ว ตกลงดังนั้นของคนเช่นนี้ ค่อนข้างง่ายแนวคิด ไม่มีใครต้องการที่จะบอกฉันว่า ครั้งแรกภ​​ายในโดยรวมทั้งกัญชา io.h มาตรฐานของไฟล์ไลบรารี? ทำไมเราต้องห้องสมุดที่ รวมสำหรับโปรแกรมนี้? อะไรที่นี่เราต้องทำเพื่อ? ใช่? ผู้ชม: คือว่าเมื่อ คุณใส่ printf ที่? ศาสตราจารย์: แน่นอน printf ดังนั้นเวลาที่คุณใด ๆ ใช้ข้อมูลจากผู้ใช้ และสิ่งที่พิมพ์ ไปยังหน้าจอที่ เข้ามาตรฐานห้องสมุดเอาท์พุท คิดว่ามันที่ way-- นำเข้าส่งออก ฉันต้องออก? ใช่ฉันทำ. ดังนั้นผมจึงรู้ว่าฉันเสมอไป จำเป็นต้องมีมาตรฐานห้องสมุด i.o printf ดังนั้นฟังก์ชั่น โดยที่เราต้องเข้าถึง และ hashtag รวม ห้องสมุด i.o มาตรฐาน ตกลง. ประการที่สองก็สิ่งที่ไม่เป็นโมฆะมีความหมาย? เรามี int main (void) สิ่งที่ไม่ ที่นี่ถือเป็นโมฆะหมายถึงที่นี่ในบรรทัดที่สาม? ใช่ในด้านหลัง ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์: แน่นอน ดังนั้นจำเราได้เรียนรู้ เริ่มต้นด้วย pset ของเรา ที่คุณสามารถจริง ระบุบรรทัดคำสั่ง ข้อโต้แย้งที่โปรแกรมของคุณที่คุณ ฟังก์ชั่นหลักที่จะใช้เวลากับคุณผู้ใช้ เรียกมันว่า ถ้าเรามีช่องว่างที่หมายความว่าคุณ ก็สามารถเรียกใช้โปรแกรมได้โดยตรง โดยไม่ขัดแย้งบรรทัดคำสั่งใด ๆ ทุกคนที่ชัดเจนเกี่ยวกับที่? ตกลง. และสุดท้ายทำไมเราทำรำคาญ การกลับมาศูนย์นี้สิ่งที่นี่? ทำไมเราแม้จะมี int หลัก? ทำไมถึงไม่สามารถเราก็ต้องเป็นโมฆะหลักโมฆะ? ใช่? ผู้ชม: เพ​​ียงเพื่อให้เราสามารถ ให้แน่ใจว่าโปรแกรมที่เป็น ออกจากที่ประสบความสำเร็จเป็น เมื่อเทียบกับถ้ามันเป็นเลข และเราจะได้รู้ว่าที่ ชนิดที่แตกต่างของความผิดพลาด ศาสตราจารย์: ใช่ว่า นี่เป็นเพียงมาก สิ่งธรรมดาที่เราทำ คือเพียงแค่ในตอนท้ายของ โปรแกรมของคุณเพียงเพื่อให้แน่ใจ ที่ฟังก์ชั่นหลักของคุณ กำลังทำงานอย่างถูกต้อง เรามักจะต้องการที่จะทำผลตอบแทนที่เป็นศูนย์ ถึงแม้ว่าเราอาจจำเป็นต้อง ไม่เห็นว่าพิมพ์ได้ทุกที่ เพราะเป็นโปรแกรมเมอร์คุณรู้ว่าถ้า คุณมีสายที่แตกต่างของรหัส และคุณไม่ทราบว่า เหล่านี้จะไม่ถูกต้อง และหากมีข้อผิดพลาดเกิดขึ้นคุณต้องการ ตรวจสอบให้แน่ใจว่าคุณได้รับข้อผิดพลาดที่ และอื่น ๆ โดยทั่วไปถ้าอะไร ที่ไม่ถูกต้องเราจะมีการกลับมาของหนึ่งเพียง เพื่อให้แน่ใจว่าเรารู้ว่ามันเป็น ดังนั้นหากคุณเห็นผลตอบแทน ศูนย์ที่มักจะ หมายความว่าโปรแกรมของคุณ ประสบความสำเร็จในการดำเนินการ ดี? เย็น. ตกลงโปรแกรมที่สองที่นี่ พิจารณาว่า และถ้าพวกคุณเห็น ลอยพวกคุณอาจจะสามารถ มีความคิดที่ดีในสิ่งที่ ฉันจะขอให้คุณ ดังนั้นเมื่อโปรแกรมนี้ ดำเนินการตามที่คุณสามารถดู ฉันกำลังประกาศลอย ภายในฟังก์ชั่นหลักของฉัน ผมตั้งชื่อมันว่า "คำตอบ" และฉันตั้ง ที่เท่ากับหนึ่งหารด้วย 10 ผมพิมพ์ออกให้เป็นหนึ่ง ทศนิยมตำแหน่งลอยที่ และจากนั้นฉันกลับมาเป็นศูนย์ ดังนั้นเมื่อรันโปรแกรม คิดว่ากลับไปโลภตอนนี้ โปรแกรมนี้พิมพ์ 0.0 ในฐานะที่เราทุกคนรู้ว่าเราทุกคนหวังว่า รู้หนึ่งหารด้วย 10 ไม่ได้เป็น 0.00, มันเป็น 0.1 แต่อธิบายว่าทำไมโปรแกรมนี้คิดว่า ที่ 1 โดยแบ่งออกเป็น 10 พิมพ์ 0.1 อื่น ๆ กว่า 0.1? ฉันจะให้พวกคุณอาจจะเหมือน 30 วินาทีที่จะได้อย่างรวดเร็วเพียงแค่คิดเกี่ยวกับว่า และฉันจะกลับไปที่โปรแกรม ตกลง. ทุกคนต้องการที่จะให้มันยิงหรือไม่? ในสามประโยคหรือน้อยกว่า เพราะโดยปกติเรา จะ จำกัด คำตอบทั้งหมด ถึงสามประโยคหรือน้อยกว่า เพื่อให้คุณไม่เพียงแค่ไหลกลับ สิ่งสุ่มไปยังตอบคำถามของคุณ ใช่จะยิง ผู้ชม: ดังนั้นผมจึงคิดว่ามีนี้ สิ่งที่เรียกว่าเหมือน [ไม่ได้ยิน] ดังนั้นอาจจะมีเช่น อาจจะมีเช่น 0.09, ว่าที่คุณพิมพ์ครั้งแรก หลักก็จะเป็น 0.0? ศาสตราจารย์: ปิดไม่มาก Christabell? ผู้ชม: คุณกำลังหารหนึ่ง 10 และพวกเขากำลังจำนวนเต็มทั้ง ดังนั้นวิธีการที่มันจะ เก็บไว้เป็นจำนวนเต็ม และเพื่อให้จำนวนเต็มใกล้เคียงที่สุดที่จะเป็น 0.0 และเพื่อให้เป็น 0.1 ศาสตราจารย์: ใช่ว่าดีจริงๆ นั่นคือคำตอบที่เหมาะสม ดังนั้นนี่คือความสับสนมาก แนวคิดสำหรับจำนวนมากของเด็ก และผมต้องการที่จะให้แน่ใจว่า นี้จะเสริมในหัวของทุกคน ดังนั้นสิ่งที่เราเรียกว่าลอย ไม่แน่ชัดจุด ซึ่งเหตุผลที่มาก โปรแกรมของคุณในโลภ ไม่ได้ทำงานครั้งแรกเป็นเพราะ คุณลืมที่จะโยนตัวแปรของคุณ ดังนั้นสิ่งที่ Christabell กล่าวว่า ก็ถูกต้องทั้งหมด ลอยเป็นคลุมเครือโดยเนื้อแท้ เพราะในเครื่องคอมพิวเตอร์ที่เหมาะสมเรามี จำนวน จำกัด ของบิตของหน่วยความจำ เราสามารถใช้เพื่อแสดงตัวเลข ดังนั้นสำหรับตัวอย่างเช่น ID CS50 นี้ is-- ฉันคิดว่ามันเป็นคอมพิวเตอร์ 64 บิต ลอยเท่านั้นที่สามารถเป็นตัวแทนของ ตามจำนวนเงินที่ จำกัด ของบิตเหล่านั้น และอื่น ๆ 0.1 ด้วยศูนย์ไม่มีที่สิ้นสุด ที่เป็น 0.1 เป็นใช่มั้ย? แต่เราจะไม่ได้จัดเก็บ ว่าตัวเลขที่อยู่ในคอมพิวเตอร์ของเรา เราก็ไม่ได้มี หน่วยความจำมากพอที่จะทำเช่นนั้น และเพื่อให้การประมาณที่ใกล้ที่สุดของ สิ่งที่เก็บไว้ในหน่วยความจำที่เป็นจริง สิ่งที่ต้องการ 0.000 บางสิ่งบางอย่าง บางสิ่งบางอย่างบางสิ่งบางอย่างบางสิ่งบางอย่าง ซึ่งเมื่อคุณตัดทอน มันเดินลงไปที่ 0.0 และเพื่อให้ตัวอย่างนี้เป็นเพียงหนึ่ง ที่แสดงให้เห็นจำนวนมากของปัญหา เมื่อใดก็ตามที่เรามีเรา พยายามที่จะไม่ถูกต้องทำคณิตศาสตร์ โดยไม่ต้องหล่อเป็นจำนวนเต็มที่แตกต่างกัน ดังนั้นเพียงแค่ต้องระวังที่เกิดขึ้นนี้ ในแบบทดสอบถ้าเราให้คุณ บล็อกของรหัสและที่มันต้องการ สิ่งที่พิมพ์ออกที่สิ้นสุดหรือไม่ และถ้ามันบางค่าสุ่มคุณ ผู้ชายควรรู้ว่าทำไมที่เกิดขึ้น ใช่? ผู้ชม: ตัดถูกกำจัด ทุกอย่างหลังจากที่จุดหนึ่ง? [ไม่ได้ยิน] ศาสตราจารย์: ใช่ดังนั้นจริง นี้เป็นตัวอย่างที่ไม่ดีจริงๆ เพราะสิ่งที่ 0.100 จริง จะตัดทอนลงไป 0.1 แต่ถ้าคุณมีการเรียกใช้ it-- ฉันทำไม่ได้ จำได้เพราะปีที่ผ่านมาพวกเขา วิ่งได้ในโปรแกรมที่แตกต่างกัน พวกเขาวิ่งในบางสิ่งบางอย่างที่เรียกว่า CS50 เครื่องใช้ไฟฟ้าที่ จะแตกต่างจากประชาชน นั่นคือระบบ 32 บิตผมคิดว่า และเพื่อให้มีตัวเลขที่แตกต่าง แต่เป็นหลักเพียงรู้ว่า แนวคิดทั้งการตัด และวิธีที่จะตัดเพียงสิ่งปิด และดังนั้นถ้ามัน rounds-- ผู้ชม: โดยไม่ต้องปัดเศษ ศาสตราจารย์: แน่นอน ใช่. เย็น. สวัสดีในด้านหลัง เรากำลังจะไปบางส่วน คำถามทบทวนการตอบคำถาม ทั้งหมดขวา เพื่อพิจารณาโปรแกรมที่แตกต่างกันที่นี่ ฉันจะให้คุณผู้ชาย สองสามนาทีในการอ่านมากกว่านี้ นี่คือสิ่งที่เป็นมาก เมื่อเร็ว ๆ นี้ที่ฉันคิดว่าพัดจำนวนมากของคุณ จิตใจของคน แต่เรากำลังจะไปพูดคุย ผ่านทางนี้อีกครั้ง เพื่อให้แน่ใจว่า เข้าใจมันอย่างสมบูรณ์ ตกลง. ตกลง. ทุกคนต้องใช้เวลามากขึ้นในการ อ่านรห​​ัสนี้หรือไม่? ตกลง. ดังนั้นจึงดูเหมือนว่าฉันว่า ในโปรแกรมนี้ฉัน สร้างสองสายโดยใช้ GetString หนึ่งที่เรียกว่าและหนึ่งที่เรียกว่าที และถ้าพวกเขากำลังเท่ากัน เท่ากับกันและกัน มันควรจะพิมพ์ "คุณ พิมพ์สิ่งเดียวกัน. " แต่ elsewise ก็จะพิมพ์ "คุณ พิมพ์สิ่งที่แตกต่างกัน "ใช่มั้ย? ดูเหมือนว่ามากง่ายมาก แต่อย่างไรก็ตามถ้าจริงผม พยายามที่จะเขียนโปรแกรมนี้ ดูเหมือนว่าแม้ในขณะที่ฉัน การป้อนข้อมูลสายเดียวกันแน่นอน ก็ยังพิมพ์ออก "คุณ พิมพ์สิ่งที่แตกต่างกัน! " ไม่มีใครต้องการที่จะใช้ ยิงที่ว่าทำไมโปรแกรมนี้เสมอ ตอบว​​่าปัจจัยการผลิต จะแตกต่างกันแม้กระทั่ง เมื่อคำว่าตัวเองเป็นเหมือนกันหรือไม่ ดังนั้นถ้าผมจะ input-- เดวิดรัก ที่จะใช้ตัวอย่างเหมือนแม่ใช่มั้ย? ตัวพิมพ์เล็ก M-O-M สำหรับ S, T เท่ากับตัวพิมพ์เล็ก M-O-M ถ้าฉันวิ่งผ่านทางนี้ รหัสที่มันจะทำไม พิมพ์ออกมา "คุณพิมพ์สิ่งที่แตกต่าง?" ไม่มีใครต้องการมากขึ้น เวลาที่จะคิดเกี่ยวกับเรื่องนี้? ตกลงผมคิดว่าเรากำลังดี ใช่? ผู้ชม: ตกลงดังนั้นมันเป็นสิ่งที่เกี่ยวกับ ที่มันถูกเก็บไว้ในหน่วยความจำใช่มั้ย? ศาสตราจารย์: อ๋อ ผู้ชม: อยู่ที่ไหนมันก็เหมือนถ้านี้ สตริง s จะถูกเก็บไว้ในหน่วยความจำ spot-- ฉันประดิษฐ์ this-- เป็นศูนย์ ศาสตราจารย์: Sure ผู้ชม: เสื้อและสตริง จะถูกเก็บไว้ที่จุดหน่วยความจำ เช่น 167 แล้ว ศูนย์ไม่เท่ากับ 167 ศาสตราจารย์: แน่นอน ตกลงดังนั้นจำที่น่าทึ่งนี้ เปิดเผยเราอธิบายให้พวกคุณ สัปดาห์ที่ผ่านมาว่า สายไม่ได้จริงๆอยู่? เมื่อเราสร้างสิ่งที่เรียกว่า สตริงเราในความเป็นจริง การสร้างสิ่งที่เรียกว่าดาวถ่าน ซึ่งทั้งหมดมันเป็นเป็นตัวชี้ไป สตริงหรืออาร์เรย์ของตัวอักษร ดังนั้นในตัวอย่างนี้ถ้าฉัน จะป้อนข้อมูล M-O-M ทาง ว่าคอมพิวเตอร์ของฉันจะเก็บไว้เป็น หน่วยความจำภายในเครื่องหมายศูนย์ใช่มั้ย? บรรดาสี่ตัวอักษรตัวอักษร, จะถูกเก็บไว้ที่อื่น และแล้วทั้งสี่ ตัวอักษรทับขวาศูนย์ จะถูกเก็บไว้ที่อื่นใช่มั้ย? ผมมีความคิดที่ไม่มีที่อยู่ ที่พวกเขากำลังอยู่ที่ไหนสักแห่งในคอมพิวเตอร์ของฉัน แต่ผมไม่ทราบว่าพวกเขาอยู่ที่ไหน เมื่อฉันสร้างสตริง s ทุกที่จริงๆ เป็นตัวชี้ไปยัง เริ่มต้นของสายนี้ และเมื่อฉันสร้างมูลค่าเสื้อนี้ ทุกสิ่งที่เป็นตัวชี้ไปที่นี่ ดังนั้นเมื่อคุณกำลังพยายาม จะถือเอาและตรวจสอบ เพื่อดูว่าคือเท่ากับ เท่ากับ t คอมพิวเตอร์ เป็นจริงเพียงกลับไป ที่อยู่ของมนี้ และที่อยู่ของม. ว่า และเนื่องจากพวกเขากำลังสอง แยกชิ้นส่วนของข้อมูล ที่เก็บไว้ในสองที่แตกต่างกัน ที่อยู่ในเครื่องคอมพิวเตอร์ของคุณ คอมพิวเตอร์ของคุณไม่เคยไป รู้จักพวกเขาเป็นเหมือนกัน ไม่มีใครต้องการ ให้ยิงในสิ่งที่เรา จะต้องทำอย่างไรถ้าเราต้องการที่จะแก้ไขให้ถูกต้อง นี้และมีโปรแกรมที่กำลังทำงานถูกต้อง แทน? คิดเกี่ยวกับว่าสำหรับสองสามวินาที เราจะทำอะไรต้องเปลี่ยนไป รับทำงานโปรแกรมนี้ วิธีที่เราอยากให้มันทำงาน? ใช่ต้องการที่จะใช้แทงที่มันได้หรือไม่ ผู้ชม: เราสามารถพยายามที่จะ dereference ตัวชี้และตรวจสอบผ่านแถวหรือไม่ ศาสตราจารย์: นั่นเป็นวิธีหนึ่งที่จะทำมัน ดังนั้นสิ่งที่เป็นชื่อของคุณอีกครั้งหรือไม่ ฉันขอโทษเตือนฉัน Zee: Zee ศาสตราจารย์: ใช่ดังนั้นสิ่งที่นาซี ชี้ให้เห็นอย่างจะทำงาน ขวา? เราสามารถ dereference ตัวชี้ และจริงไปและการเข้าถึง ข้อมูลทางกายภาพภายในของที่นี่ และเราก็สามารถเปรียบเทียบ ทั้งหน้าจอ เราสามารถพูดได้, OK, ตัวชี้ ให้ฉันสิ่งที่อยู่ภายในที่นี่ มันจะกลับเมตร และผมจะบอกว่าตัวชี้ ให้ฉันสิ่งที่อยู่ภายในที่นี่ กลับเมตร ทำการแข่งขันเหล่านั้นหรือไม่ ใช่. จากนั้นเราก็เดินหน้าต่อไป เราให้การตรวจสอบทั้งสอง สตริงตลอดทางขึ้นจนกว่าจะเสร็จสิ้น และดูว่าผู้ที่มีค่าเท่ากัน ถ้าค่าทั้งหมดมีค่าเท่ากัน และถ้าค่าทั้งหมดมีค่าเท่ากัน แล้วเรารู้ว่าสายนี้เป็นจริง แน่นอนว่าเป็นวิธีที่เราจะทำมันได้หรือไม่ ไม่มีใครสับสนใด ๆ นี้หรือไม่? แนวคิดทั้งวิธีสตริง จริงๆเป็นเพียงตัวชี้ และวิธีการที่พวกเขาไม่ได้จริงๆอยู่? และเหตุผลที่เราได้รับข้อผิดพลาด ชอบวิธีการที่เราได้รับมันได้หรือไม่ เพราะผมรับประกันพวกคุณชี้ และการจัดสรรสตริงและหน่วยความจำ กำลังจะเกิดขึ้น ใช่? ผู้ชม: [ไม่ได้ยิน] dereference คุณก็ใส่ดาว [ไม่ได้ยิน] ศาสตราจารย์: ขวา ดังนั้นเพื่อ derererence หมายถึงตัวชี้ เพื่อไปยังที่อยู่ของตัวชี้ และได้รับข้อมูลที่มีค่า และวิธีที่จะทำอย่างนั้นเป็นตัวชี้ดาว อย่าสับสนว่า ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์: ใช่ ผู้ชม: ดังนั้นคุณก็สามารถเขียน ถ้าดาว s เท่ากับเท่ากับเสื้อดาว ศาสตราจารย์: ดีไม่มี เลขที่ ผู้ชม: ที่ไม่ดีพอใช่มั้ย? ศาสตราจารย์: มันไม่ได้เพราะคุณ เพียง แต่การตรวจสอบตัวอักษรตัวแรก คุณอาจจะ ต้องเรียงลำดับของห่วงบางอย่างที่ iterates ผ่านทุกเดียว ตัวละครในสายทั้งสอง ใช่. ดังนั้นหากคุณต้องการที่จะเพียงแค่ตรวจสอบเพื่อดู ถ้าพวกเขาเริ่มต้นด้วยสิ่งเดียวกัน คุณสามารถทำได้ถ้าดาว คือเท่ากับดาราเสื้อ แล้วคุณจะรู้ว่าอย่างน้อยพวกเขา เริ่มต้นด้วยตัวอักษรเดียวกัน ใช่? ผู้ชม: ดังนั้นวิธีการที่ คุณไม่ว่าจะเป็นอย่างไร เหมือนที่ฝังตัวสำหรับวงหรือตัวชี้? ศาสตราจารย์: ใช่ สวยมากเพียงสำหรับวง โปรดจำไว้ว่าเดวิดกล่าวถึงในชั้นเรียน น้ำตาลประโยคได้ฟรีหรือไม่ และเขาก็มีอย่างนี้ สิ่งที่ทำให้เกิดความสับสนของเสื้อดาว บวกหนึ่งที่จะบูรณาการ และผ่านการเลื่อนตัวชี้? วิธีที่ง่ายในการทำ นี้เป็นเพียงเสื้อของฉัน ดังนั้นมันจึงเป็นเพียงอาร์เรย์ วิธีการที่คุณจะต้องสำหรับ วงที่วิ่งจากศูนย์ถึงฉันที่ ฉันคือความยาวของ สตริงที่คุณสามารถเพียงแค่ เขียนว่าแทนที่จะทำ ตัวชี้ทั้งสิ่งอ้างอิง ดังนั้นสิ่งเหล่านี้ว่า เทียบเท่าในเครื่องคอมพิวเตอร์ของคุณ พวกคุณอาจจะไม่ จำเป็นที่จะต้องรู้ว่า แต่มันเป็นเรื่องที่ดีที่จะเพียงแค่ชนิดของ กลับมีในใจของคุณ เพิ่งรู้ว่าคอมพิวเตอร์ ตระหนักถึงบล็อกที่แตกต่างของรหัส เป็นสิ่งเดียวกัน เพราะนี่เป็นเพียงผู้ใช้มากขึ้น ที่เหมาะสำหรับเราที่จะนำเสนอเช่นนั้น อาร์เรย์ มันเป็นเรื่องง่ายขึ้น ผู้ชม: ดังนั้นการใช้ strlen เพื่อต้องการ get-- ศาสตราจารย์: ใช่ ผู้ชม: ตกลง ศาสตราจารย์: คุณสามารถ ใช้ strlen หรือหากคุณ ไม่ได้มี strlen คุณก็สามารถทำขึ้น จนกว่าคุณจะตีเครื่องหมายศูนย์สำหรับทั้งสอง ไม่ว่าจะทำงาน ใช่. ผู้ชม: ดังนั้นจึงเป็นไป dereference ทุก ตัวเดียวถ้าเราเป็นจริง เขียนรหัสนี้เรา ก็สามารถทำวงเล็บทีฉัน ต้องการกับดาวในด้านหน้าของมันได้หรือไม่ ศาสตราจารย์: ใช่เท่ากับ s เท่ากับ วงเล็บฉันแล้วให้ย้ายฉัน ลงได้จนกว่าคุณจะตีท้ายที่สุด ใช่ว่าเป็นสิ่งที่คุณจะทำอย่างไร และที่จริงผมจะมีต่อไป ตัวอย่างเช่นเมื่อเราจริง เขียน strlen เพื่อให้พวกคุณจะชนิด การได้เล่นรอบกับมันสักหน่อย ดังนั้นทุกคนที่ชัดเจนเกี่ยวกับหน่วยความจำเพียง สตริงตัวชี้ที่อยู่ที่มีคุณภาพ? บางแนวคิดระดับที่สูงกว่าที่คุณ จะแน่ใจว่าสำหรับความต้องการที่จะรู้ว่าในการตอบคำถาม วันพรุ่งนี้ ทั้งหมดขวา ดี. อือ ตกลงดังนั้นสิ่งหนึ่งที่เรายังจะขอให้ คุณที่เราทำทุกปีในแบบทดสอบคือ สมมติว่าคุณลืม (ซึ่ง เราดูเหมือนจะลืมที่จะทำทุกปี) ที่ strlen ไฟล์ส่วนหัวมีการประกาศ และเพื่อให้เรามีที่จะเขียนมันเอง นี่คือรายการของแนวทางคือ ที่เราสามารถนำเสนอคุณ คนที่คุณได้รับจะคิดว่า s สตริงจะไม่เป็นโมฆะ คุณสามารถคิดว่าจะเป็น s สิ้นสุดลงด้วยเครื่องหมายศูนย์ เพื่อให้คุณรู้ว่าเป็นสิ่งที่ มันจะจบลงด้วยการ และเช่นว่า ความยาวของสวัสดีจะห้า ดังนั้นคุณจึงสามารถสรุปได้ว่าสวัสดี จะห้า, H-E-L-L-O คุณจะได้ไม่ต้องคิดว่า หลังบัญชีศูนย์สำหรับความยาว นี้สิ่งสุดท้ายที่นี่ไม่ได้ กังวลเกี่ยวกับการล้นจำนวนเต็ม ไม่มีใครจำได้ สิ่งที่ล้นจำนวนเต็มคืออะไร? ผู้ชม: ไปเกิน ความยาวของ [ไม่ได้ยิน] ศาสตราจารย์: ใช่คุณสามารถอธิบาย บิตสิ่งที่หมายความว่า? ผู้ชม: ดังนั้นผมคิดว่ามันกลับไป ตัวอย่างตัดทอนก่อนหน้านี้ แต่ถ้าคุณมีเพียงตัวเลขจำนวนมาก ที่นอกเหนือไปจากจำนวนบิต จริงที่คุณสามารถกำหนด ว่ามันจะเพียงแค่ชนิดของตัดออก ศาสตราจารย์: ใช่อื่น ๆ ทั่วไป คอมพิวเตอร์กี่บิตเราไม่ได้? ผู้ชม: 32? ศาสตราจารย์: ใช่, 32, ด้านขวา และเพื่อให้เป็นสิ่งที่สี่ พันสองพันล้าน? สี่พันถึงสี่พันล้าน จำนวนเต็มบวกใช่มั้ย? สองพันลบ สองพันล้านบวก ขึ้นอยู่กับว่าคุณต้องการที่จะทำมัน และดังนั้นโดยทั่วไปเราสามารถมี จำนวนเต็มพอที่จะสามารถไปถึง ไปสองถึงวันที่ 31 ลบ 1 ใช่มั้ย? เพราะเมื่อเราตีสอง การ 32 ที่เราทำไม่ได้ ที่มีหน่วยความจำมากในคอมพิวเตอร์ของเรา ดังนั้นในทางทฤษฎีผม สามารถขึ้นมาเป็นจำนวนมาก ที่เป็นเหมือนสองถึง 46 มันเป็นจำนวนมากตูด แต่ ในทางทฤษฎีคุณสามารถ และล้นจำนวนเต็มดังนั้นถ้าคุณพยายามที่จะ สร้างจำนวนเต็มที่นอกเหนือไปจากสิ่งที่เป็น คอมพิวเตอร์ของคุณมีความสามารถในการจัดเก็บ และเพื่อให้พวกคุณ ตัวอย่างนี้ไม่ได้มี ที่จะต้องกังวลเกี่ยวกับเราให้คุณยักษ์ สตริงที่สองถึง 32 ตัวอักษร ยาว. ที่จะจริงๆหมายถึง สิทธิทั้งหมดดังนั้นฉันแค่จะให้ พวกคุณโครงสร้างฐานนี้ คุณกำลังจะสร้าง ฟังก์ชั่นที่เรียกว่า int strlen ที่ ผ่านการในดาวถ่านหรือสตริง ตัวชี้ไปยังสตริงเรียกว่าฯ สิทธิทั้งหมดทุกคนที่คัดลอกลง เย็น. Oops-- วิธีการอื่น ๆ ดังนั้นนี่คือชนิดเช่น ชิ้นส่วนที่ยากของปัญหา ดังนั้นฉันจะให้พวกคุณอาจจะห้าถึง หกนาทีกับชนิดของการระดมสมอง และเขียนฟังก์ชั่นนี้ ผู้ชม: เราไม่ การบัญชีสำหรับ [ไม่ได้ยิน] เราไม่ได้มีการใช้จำนวนเต็ม? ศาสตราจารย์: ไม่คุณทำไม่ได้ ฉันจะให้พวกคุณคำใบ้ ห่วงในขณะที่อาจจะมีประโยชน์มากที่นี่ ใช่. นี่คือ ลูกอม ลูกอมยังจะสามารถใช้ได้ สำหรับการตอบคำถามที่ฉันคิดว่า ดังนั้นพวกคุณจะได้รับทั้งหมด sugared ขึ้นในวันพรุ่งนี้ สามารถ I-- คุณได้รับมัน ผู้ชม: ตกลง ศาสตราจารย์: ใช่ บางที 30 วินาทีหรือมากกว่านั้น ขวาทั้งหมดถ้าคุณ ไม่ได้ทำไม่ต้องกังวล เราจะย้ายผ่านนี้ร่วมกัน ตกลง. ดังนั้นฉันจะเป็นเพียงรูปแบบที่ โครงสร้างพื้นฐานสำหรับการทำงานที่นี่ int strlen ครั้งแรกที่ไม่มีใครต้องการที่จะบอก ฉันว่า int หมาย? เราจำเป็นต้องมีฟังก์ชั่นนี้ ผู้ชม: strlen [ไม่ได้ยิน] ศาสตราจารย์: แน่นอน ดังนั้นสิ่งที่เกิดขึ้นในที่นี่ เราจำเป็นต้องกลับจำนวนเต็ม และตามที่ระบุไว้ใน สเป็คเราต้องการที่จะ return-- ไปสำหรับพวกมันเพียงแค่เก็บไป มันเป็นเรื่องดีทั้งหมด. กินมันทั้งหมดเพื่อให้ฉันไม่ได้มี จะเอามันกลับจริง int ตัวเพียงหมายความว่าคุณ จะได้กลับมาเป็นจำนวนเต็ม เป็นดาวของถ่านนี้คืออะไร นั่นหมายความว่าอย่างไร? ผู้ชม: เช่นเดียวกับสิ่งที่เป็นอยู่ในการป้อนข้อมูล ศาสตราจารย์: แน่นอน และสิ่งที่เกือบจะเป็น สิ่งเดียวกับดาวถ่าน? ผู้ชม: String? ศาสตราจารย์: แน่นอน ดังนั้นสิ่งที่เรากำลังทำคือการให้ นี้ชี้ไปยังสตริง ตกลง. เย็น. นอกจากนี้อย่าลืมถ้าเราลืม เพื่อให้คุณวงเล็บเหล่านี้ ไม่ลืมที่จะเขียนให้ตัวเอง เพราะในทางทฤษฎีรหัสของคุณ ไม่ถูกต้องถ้าคุณลืมที่จะเขียนพวกเขา เพียงแค่เสมอให้ความสนใจ เช่นเดียวกับสิ่งเล็ก ๆ น้อย ๆ ที่คุณไม่ได้สังเกตเห็น เมื่อคุณกำลังเขียนโปรแกรมบนแล็ปท็อปของคุณ เพราะแล็ปท็อปของคุณไม่ได้สำหรับคุณ อย่าลืมเมื่อ คุณเขียนด้วยมือ ใช่? ผู้ชม: ไม่ถูกต้อง แต่วิธีการที่? เช่นเดียวกับเราจะได้รับปัญหาทั้งหมดที่ไม่ถูกต้อง ศาสตราจารย์: ไม่มี ไม่ต้องกังวล มันเป็นเรื่องที่เป็นไปได้ในทางทฤษฎีจริง สำหรับคุณที่จะได้รับคะแนนเต็มในคำถาม แม้ว่ารหัสของคุณจะ ไม่เคยทำงานในชีวิตจริง ผมขอแนะนำให้คุณไม่ได้พยายาม ที่จะทำให้มันเกิดขึ้น ยกตัวอย่างเช่นถ้าทุกอย่าง ที่นี่เป็นที่ที่ถูกต้อง แต่คุณลืมลำไส้ใหญ่หรือวงเล็บ รหัสของคุณจะไม่ทำงานจริง แต่เราอาจจะมีความเมตตา ใช่? ผู้ชม: คุณต้อง แสดงความคิดเห็นในการเขียนด้วยลายมือของเราหรือไม่ ศาสตราจารย์: ไม่มีไม่มี ความกังวลเกี่ยวกับการที่ ไม่มีการแสดงความคิดเห็น สไตล์ควรจะดี เช่นเดียวกับไม่ smush ทุกอย่างในหนึ่งบรรทัด เราจะไม่ได้มีความสุข กับคุณถ้าคุณทำอย่างนั้น ไม่มีใครต้องการ ให้ฉันบรรทัดแรก? คำแนะนำมันเป็นเรื่องง่ายมาก ใช่? ผู้ชม: Int, n เท่ากับศูนย์ เพียงแค่ตั้งค่าเคาน์เตอร์ ศาสตราจารย์: ดังนั้นเราต้องการบาง การเรียงลำดับของเคาน์เตอร์ใช่มั้ย? ฉันแค่ไปที่จะตั้งชื่อมันว่า "นับ" เพื่อประโยชน์ของการอ่าน เราต้องการอะไรที่จะตั้งเท่ากับ? ผู้ชม: ศูนย์ ศาสตราจารย์: อ๋อ อัฒภาค. นอกจากนี้ยังเป็นที่แปลกมากอัฒภาคการวาดภาพ เพียงแค่ฝึกการทำที่ ดังนั้นเราจึงต้องการที่จะมีครั้งแรก เคาน์เตอร์ชนิด int เพราะเราต้องการที่จะนับขึ้นว่า ตัวละครจำนวนมากหรือตัวอักษร ในสายนี้ใช่มั้ย? ขั้นตอนที่ง่ายมากที่แรก ตกลงอาจจะเป็นบิตที่ซับซ้อนมากขึ้น ตอนนี้วิธีการที่เราจะทำเพื่อ? ไม่มีใครต้องการ ให้ฉันบรรทัดของรหัส ที่อาจจะสามารถช่วยให้วง ผ่านสิ่งนี้คืออะไร? ใช่จิตวิญญาณที่กล้าหาญในด้านหลัง? ผู้ชม: ตกลงดังนั้นในขณะที่จุด ดอกจันที่ใช่, ดาวของ s, ไม่เท่ากับศูนย์แล้วทำอะไรบางอย่าง? ศาสตราจารย์: นั่นจริงๆใกล้ จริงใกล้เคียง ดังนั้นฉันจะอยู่ สองสิ่งที่มี ครั้งแรกของทั้งหมดก็ไม่ได้ว่าเป็นศูนย์ มันคืออะไร? มันเป็นเทอร์มิโมฆะ, ซึ่งเป็นศูนย์เครื่องหมาย ดังนั้นพวกเขาจะแตกต่างกันใน แง่ของวิธีการที่พวกเขากำลังเก็บไว้ เพื่อให้คุณใกล้ชิดจริงๆ และประการที่สองเราไม่ต้องการ เพียงแค่เลื่อนตัวชี้ เราต้องการที่จะเป็นจริง เข้าถึงค่าใช่มั้ย? ดังนั้นทำอย่างไรเราทำเช่นนั้น? ง่ายมาก. ไม่คิดเกี่ยวกับตัวชี้ ไม่คิดเกี่ยวกับความทรงจำ กลับไปที่สัปดาห์ที่สองของหลักสูตรนี้ ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์: ณ จำได้ไหม? อะไรสตริงคืออะไร? พวกเขาจะถูกเก็บไว้ในหน่วยความจำได้อย่างไร ผู้ชม: พวกเขากำลังยก ศาสตราจารย์: พวกเขาจะยก ดังนั้นวิธีการที่เราจะเข้าถึง ตัวละครในแต่ละ? ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์: แน่นอน ดังนั้นสิ่งที่จะไป while-- ภายในที่นี่? S ของ - ผู้ชม: ครั้งที่หนึ่ง ศาสตราจารย์: โอ้ฉันไม่อยู่ไม่ได้หรือไม่ ผู้ชม: โอ้นับ? ศาสตราจารย์: เราก็สามารถ ใช้นับไม่สามารถเรา? ผู้ชม: ขอโทษนะฉันเรียกมันว่าฉัน ศาสตราจารย์: ใช่มันเป็นเรื่องดีทั้งหมด เรามีตัวแปรที่นี่ที่ รับการประกาศให้เป็นเคาน์เตอร์ของเรา ดังนั้นทำไมเราไม่ใช้เพียงว่า ที่จะย้ายผ่านห่วงในขณะที่? ที่ทำให้รู้สึก? ดังนั้นในขณะที่ของ count-- ไม่มีใครต้องการ จะให้ฉันสิ่งที่เกิดขึ้นหลังจากที่นี่? ผู้ชม: มันไม่เท่ากับ ศาสตราจารย์: ไม่ไม่เท่ากันใช่มั้ย? มันเท่ากับปัง, เครื่องหมายอัศเจรีย์เท่ากับ สิ่งที่พวกคุณต้องการ เรียกว่าไม่ equal-- ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์: ใช่ จำคำพูดเดียวสำหรับถ่าน, คำพูดสองสำหรับสตริง โปรดใช้ความระมัดระวังเมื่อใช้พวกเขา ดังนั้นเมื่อเรากำลังมองผ่าน อาร์เรย์ตัวละครที่ผ่านมา เรารู้ว่าเราไม่ต้องการ ว่ามันจะเป็นเครื่องหมายศูนย์ ดังนั้นในขณะที่ เราไม่ได้ในตอนท้ายของสตริง เราต้องการอะไรที่จะทำภายใน? ผู้ชม: เราต้องการที่จะเพิ่ม เคาน์เตอร์จึงนับบวกบวก? ศาสตราจารย์: แน่นอน ดังนั้นที่นี่เรากำลังจะทำ นับนับบวกบวก ที่ขาดหายไปหนึ่งบรรทัดมากขึ้น เราเกือบจะมี สิ่งที่เราลืมที่จะทำอย่างไร ผู้ชม: กลับมาเป็นศูนย์? ศาสตราจารย์: คุณต้องการที่จะกลับเป็นศูนย์? ผู้ชม: ไม่กลับไป strlen รอ. ศาสตราจารย์: ซึ่งถูกเก็บไว้ใน? ผู้ชม: จำนวน นับ. ศาสตราจารย์: แน่นอน ดังนั้นที่นี่เรากำลังจะกลับมานับ เพราะสิ่งที่เรากำลัง ทำอะไรที่นี่ ultimately-- เรามีตัวแปรที่เคาน์เตอร์ จะเพิ่มขึ้นผ่านสตริงของเรา เรากำลังจะเก็บไปให้ ไปรอบ ๆ และรอบ ๆ ในวงนี้ และในขณะที่เราไม่ได้อยู่ในส่วนนี้ สตริงซึ่งเป็นเทอร์มิ null และทุกครั้งที่เราผ่านไป มันเรากำลังเพิ่มไปที่เคาน์เตอร์ของเรา และเรากำลังจะไป พร้อมในอาร์เรย์นี้ และในตอนท้ายเมื่อเรา ตีเทอร์มินัล เรารู้ว่าโอ้ที่เราสามารถทำได้ ทำลายกลับนับ เรามี strlen ของเรา ทุกคนไม่ได้รับว่า นี้ถูกนำมาใช้? ในขณะที่ loops-- ฉันรู้ว่าเราไม่ได้ ทำมากเกินไปกับพวกเขา แต่พวกเขามักจะ มากประโยชน์มากหากคุณ ไม่ทราบว่าสิ่งที่คุณกำลังหยุด เงื่อนไขจำเป็นจะต้องมี คำถาม? ผู้ชม: เราสามารถเขียน null ในสภาพในขณะที่? ศาสตราจารย์: ในขณะที่? ใช่ดังนั้นในปัญหานี้ฉันมีเธอ คนคิดว่าของจะไม่เป็นโมฆะ เพราะจำได้ว่า ในทางทฤษฎีถ้าฉันให้คุณ ตัวชี้ว่ามีขนาดใหญ่เกินไปของหน่วยความจำ มันจะทำให้คุณเป็นโมฆะใช่มั้ย? นั่นคือสิ่งที่ปฏิบัติการ ระบบจะทำ ดังนั้นถ้าฉันไม่ได้บอกคุณที่จะคิด s จะเป็นโมฆะคุณต้องตรวจสอบ ดังนั้นที่นี่คุณจะทำถ้า s เท่ากับเท่ากับ null กลับอย่างใดอย่างหนึ่ง อะไรประมาณนั้น. ผู้ชม: [ไม่ได้ยิน] ศูนย์ ศาสตราจารย์: ตกลงฉันจะบอก คุณว่าทำไมเราไม่สามารถทำเช่นนั้น เพราะจำได้ว่าในหน่วยความจำที่ถูกต้องที่นี่ เราจะไปที่นี่ คุณได้มีบล็อกยักษ์ ของหน่วยความจำทั้งหมดที่มีกริด ที่เก็บค่าที่แตกต่างกันใช่มั้ย? และเพื่อให้ทุกสตริง is-- สำหรับ ตัวอย่างเช่นถ้าหากเราจะป้อนข้อมูลสวัสดี มันจะเป็น H-E-L-L-O เครื่องหมายศูนย์ใช่มั้ย? และแล้วใครจะรู้เหมือนแบบสุ่ม สิ่งที่อยู่ในที่นี่หลังจากที่มัน เราไม่ได้รู้จริงสิ่งที่มี ดังนั้นถ้าคุณจะทำอย่างไร แทนเครื่องหมายศูนย์ โมฆะมันอาจจะไม่เป็นโมฆะ เพราะมันก็อาจหมายถึง บางสิ่งอื่น ๆ สุ่ม ที่ไม่อยู่ในสายของคุณ ดังนั้นวิธีการที่เรามักจะรู้ว่า จบสตริงที่มีเครื่องหมายเป็นศูนย์ และเพื่อให้เป็นวิธีการที่เราเสมอ ตรวจสอบเพื่อดูจุดสิ้นสุดของสตริง Null ทั้งหมดที่หมายถึงคือถ้าคุณมี ชี้ไม่ได้มีอยู่ครั้งแรกของทั้งหมด หรือถ้าหน่วยความจำของคุณเป็นเพียงเพื่อให้มีขนาดใหญ่ คุณจะไม่สามารถกลับมามันแล้วมันจะเป็นโมฆะ ดังนั้นควรระมัดระวังมากเมื่อความแตกต่าง ความแตกต่างระหว่าง null และศูนย์ทับขวา ใช่. ทุกคนตกลงกับเรื่องนี้? ตกลง. ดังนั้นผมจึงมีพวกคุณเขียนออก strlen feasibly เรายังสามารถขอให้คุณเขียน จาก A ถึงฉันจำได้ว่า "Atwoa" หรือสิ่งที่พวกคุณต้องการที่จะเรียกมันได้หรือไม่ ฟังก์ชั่นที่อยู่ใน Vigenere และซีซาร์ที่ แปลงค่า ASCII เป็นจำนวนเต็ม? ที่ยังได้เกิดขึ้นในแบบทดสอบที่ผ่านมา ฟังก์ชั่นที่เราได้ขอให้คุณเขียน สวยมากฟังก์ชั่นใด ๆ ที่คุณใช้และ ง่ายมากที่จะเขียนด้วยตัวคุณเอง เซ็นเซอร์ชอบต่ำ คือส่วนบนเพื่อลดเพื่อบน ฟังก์ชั่นที่จะแปลง สตริงจากตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ เราทุกคนรู้วิธีการที่จะทำอย่างนั้นใช่มั้ย? มันเป็นเรื่องง่ายสวย เพียงแค่ต้องการที่จะให้แน่ใจว่าคุณ can-- มันเป็นกระบวนการคิดที่เหมือนกัน คุณเพียงแค่ย้ำผ่าน และคุณเปิดสิ่ง คุณจะนับหรือเมื่อ คุณเปิดสิ่งที่แตกต่าง ฉันจะ suggest-- ฉัน ไม่ทราบว่าเรากำลังจะ ขอให้คุณจดจำสิ่งที่เงินทุนหรือ ทุน Z หรือตัวพิมพ์เล็กหรือตัวพิมพ์เล็ก ซีอยู่ใน Ascii แต่ผมจะแนะนำ บางทีอาจจะเขียนลงในกรณีที่ พวกเราทำ. เพียงเพื่อให้คุณผู้ชายที่มีการอ้างอิง เช่นเดียวกับพิมพ์ใหญ่เป็นสิ่งที่ 197? และตัวพิมพ์เล็กแล้วเป็นเหมือน 50 บางสิ่งบางอย่าง 65 ใช่มีคุณไป ดังนั้นเพียงแค่สวยมากรู้ ความแตกต่างระหว่างพวกเขาเป็น 32 ที่สำคัญสวย ใช่. ฉันดีกับเรื่องนี้? ตกลง. ผู้ชม: เราจะทำได้ ในทางทฤษฎีเขียนบาง ของเหล่านี้ลงเช่นกันเมื่อ little-- ของเรา ศาสตราจารย์: คุณในทางทฤษฎี ก็สามารถคัดลอกฟังก์ชั่นลง นั่นเป็นความจริง ผู้ชม: ไม่ได้ [ไม่ได้ยิน] ศาสตราจารย์: พวกคุณมีแผ่น พวกคุณมีแผ่นบันทึก คุณสามารถพิมพ์ คุณสามารถเขียนมัน คุณสามารถทำสิ่งที่คุณต้องการด้วย ใช่. ดังนั้นในทางทฤษฎีถ้า คุณต้องการที่จะไปสำหรับ ผู้ชม: [ไม่ได้ยิน] แต่เราทำไม่ได้จริงๆ จำเป็นต้องจำ ค่าที่เราสามารถทำได้เพียงแค่ เพื่อใช้บนหรือ ฟังก์ชั่นที่ต่ำกว่าใช่มั้ย? ศาสตราจารย์: ใช่ แต่ถ้าเราให้คุณคำถาม ที่บอกว่าเขียนไปบน แล้วคุณจะต้องเขียนมัน ดังนั้นพวกคุณสามารถสมมติว่าคุณ คนมีการเข้าถึงฟังก์ชั่นทั้งหมด แต่ถ้าคุณต้องการที่จะใช้บนหรือ ต่ำกว่าสิ่งที่คุณยังต้องทำอย่างไร ผู้ชม: [ไม่ได้ยิน] ใช้ CS50 [ไม่ได้ยิน] ศาสตราจารย์: มันเป็น CS50.h? ระวังมี ดังนั้นเพื่อให้บนเพื่อลด, คือส่วนบนเป็นที่ต่ำกว่า ฟังก์ชั่นที่เกี่ยวข้องกับการ มีการจัดการสตริง ทั้งหมดภายในทั้งแอสกี หรือภายในห้องสมุดคณิตศาสตร์ หรือภายในห้องสมุดสตริง ดังนั้นถ้าพวกคุณใช้เหล่านั้น ฟังก์ชั่นต้องระวังที่จะจำ ที่จะรวมส่วนหัวที่ ดังนั้นบางทีสิ่งที่คุณยัง ต้องการรวมไว้ในแผ่นของคุณ สิ่งที่เป็นส่วนหัวหรือไม่ อะไรคือห้องสมุด คุณได้ใช้? อะไรคือฟังก์ชั่น ภายในห้องสมุดเหล่านั้นหรือไม่ มันสำคัญ. ใช่? ผู้ชม: เราสามารถเพียง ตำรวจออกและทำ hashtag ผ่านอย่างแน่นอน จดหมายทุกครั้งที่เราเคย เห็นชอบในทุกคำถาม? ศาสตราจารย์: คุณสามารถ ผมไม่ทราบว่ามีความสุข เรากำลังจะได้เกรด ตอบคำถามที่ว่าเมื่อทุกชิ้นส่วนของรหัส เป็นสองเท่าตราบใดที่มันจะต้องมี ผมไม่ทราบว่าเราอาจจะ จะปิดจุดสำหรับรูปแบบ แต่ในทางทฤษฎีของคุณ รหัสจะได้รับสิทธิ พวกคุณอาจจะออกมาและตำรวจ เพียงรวมทุกอย่าง ที่ดีเกินไปใช่ ผู้ชม: [ไม่ได้ยิน] ศาสตราจารย์: ใช่ ผมจะแนะนำไม่ได้ทำที่ว่า ใช่. ผู้ชม: เย็น ศาสตราจารย์: เป็นคำถามที่ดี ผู้ชม: ดังนั้นสถานการณ์กรณีที่เลวร้าย ศาสตราจารย์: กรณีที่เลวร้ายที่สุด หากคุณทั้งหมดลืม คุณสามารถทำเช่นนั้นได้ ใช่. อ้างรหัสอยู่ที่นั่น ผมใช้ n แทนนับ แต่คุณ รู้ว่าสิ่งที่ลอยเรือของคุณ ผู้ชม: รอดังนั้นเรา จะได้ไม่ต้อง hashtag รวมเพราะเรา เริ่มต้นที่ int หรือไม่ ศาสตราจารย์: ใช่ผมก็สันนิษฐานว่า เราได้ขอให้เขียนฟังก์ชั่น หากคุณต้องการที่จะปลอดภัยคุณ อาจจะใส่มันมี แต่ผมก็ไม่ได้รำคาญใช่ ฉันไม่ได้รู้ว่าถ้าคุณ ต้องห้องสมุดนี้ เพราะคุณไม่ได้จริงๆการพิมพ์ อะไรหรืออะไรใช่มั้ย? ใช่ครับผมไม่ทราบว่า คุณจะต้องห้องสมุด ตกลง. และนี่ก็เป็นอีกเล็กน้อยพร้อม สายของการจัดการหน่วยความจำ ชนิดของบิตหากินนี้ คิดเกี่ยวกับสิ่งนี้. คุณมีฟังก์ชั่นที่เรียกว่าบำบัด ฉันจะได้ตั้งชื่อมันว่าอะไรก็ตาม แต่ผมเลือกที่จะตั้งชื่อบำบัด ฉันมีมันอยู่เหนือหลักของฉัน จำไว้ว่าคุณต้องการที่จะมี ฟังก์ชั่นหลักของคุณหลังจากที่ คุณต้องการที่จะให้แน่ใจว่าคุณ รวมถึงเป็นต้นแบบของด้านบน แต่ในกรณีนี้มันก็สั้น ที่ผมรู้สึกว่าผมสามารถทำได้เพียงแค่ รวมไว้บนหลัก ผมไม่จำเป็นต้องมีต้นแบบ เพราะเขียนไว้แล้วข้างต้น ดังนั้นสิ่งที่ฉันทำในฟังก์ชั่นหลักของฉัน คือการสร้างจำนวนเต็ม x เท่ากับ 10 ฉันโทรฟังก์ชั่นบำบัดของฉัน แล้วพิมพ์บางสิ่งบางอย่าง และแล้วว่าเป็นจริง สิ่งที่จะทำบำบัด พวกคุณต้องการที่จะคิดผ่านทางนี้ เพราะมันเป็นบิตหากิน มันมากยุ่งยากมากจริง คิดว่าผ่านสิ่งนี้ โปรแกรมจะแสดงผล ฉันจะให้พวกคุณสองนาที การอภิปรายที่ดี? ผู้ชม: ใช่ ศาสตราจารย์: ใช่ สิทธิทั้งหมดดังนั้นนี่คือ หากินด้วยเหตุผล และนี่คือเหตุผลที่ผมต้องการที่จะนำ นี้สนใจของทุกคน ไม่มีใครต้องการที่จะให้ฉัน ข้อเสนอแนะความพยายามที่? สิ่งนี้จะพิมพ์ออกมา? ดีโดยสิ้นเชิงถ้าคุณผิด ใช่? ผู้ชม: ฉันคิดว่ามันเป็น 100 10 ในสองสายแยกต่างหาก ศาสตราจารย์: และ 10? ไม่มีใครคาดเดาได้อื่น ๆ ? ใช่? ผู้ชม: อาจจะแค่ 10 เพราะ บำบัดจะไม่กลับอะไร? ศาสตราจารย์: ตกลงดังนั้นเรา มีการคาดเดาจำนวนหนึ่ง คือจำนวนเดาที่สองคือ เพียงแค่จะพิมพ์ออกมา 10 ไม่มีใครคาดเดาได้อื่น ๆ ? ตกลง. ถ้าอย่างนั้นเราเดินผ่านนี้ใช่มั้ย? เมื่อใดก็ตามที่คุณจะได้รับชิ้นส่วนของรหัส ไม่เพียงแค่มองไปที่มันและเป็นเช่น อาว่าเป็นสิ่งที่มาก! ผมงงไปหมดแล้ว! ชอบความสงบตัวเองลง เพียงแค่รู้ว่าคุณสามารถทำได้เพียงแค่ มองผ่านสายรหัสตามสาย นั่นคือทั้งหมดที่มันเป็น มันก็เหมือนกับการอ่านหนังสือ ดังนั้นด้วยฟังก์ชั่นใด ๆ เรามักจะเริ่มต้นที่หลัก ดังนั้นเรากำลังจะไป เริ่มต้นที่เป็นโมฆะหลัก int, แม้กระทั่งโปรแกรม แล้ววิ่งลงไปใช่มั้ย? เริ่มต้นที่หลักในการเป็นโมฆะ int x เท่ากับ 10 ดังนั้นฉันจะลบนี้ ฉันจะดึงหน่วยความจำเพียงเพื่อให้คุณ ชนิดของคนสามารถมองเห็นสิ่งที่เกิดขึ้น โปรดจำไว้ว่าที่นี่เรามีสแต็คของเราหรือไม่ ที่นี่เรามีของเรา กองที่ไหนสักแห่งที่นี่ สแต็คเติบโตขึ้นใช่มั้ย? และภายในสแต็คที่คุณมี ไฟทำงานเช่นเดียวกับ ทั้งหมดของตัวแปรท้องถิ่นไฟ ดังนั้นที่นี่ int x เท่ากับ 10 ภายในฟังก์ชั่นหลักของเราเรา สร้างตัวแปร x ที่เรียกว่า เรากำลังตั้งค่าที่เท่ากับ 10 ที่นี่คุณจะได้มี x บางและคุณ การตั้งค่าที่เท่ากับ 10 ขวา ภายในหลัก ทุกคนดีหรือไม่? ฟังก์ชั่น ดังนั้นตอนนี้ภายในหลักของเรา ฟังก์ชั่นที่เรากำลังเรียกร้อง ฟังก์ชั่นที่เราได้เขียนข้างต้น ดังนั้นตอนนี้เรากำลังเข้าสู่ฟังก์ชั่นที่สอง เรากำลังจะสร้างอีก int ตัวแปร x เท่ากับ 100 สิ่งที่เกิดขึ้นที่นี่ที่กอง? สิ่งที่เกิดขึ้นเมื่อคุณเรียก ฟังก์ชั่นที่สร้างตัวแปรใหม่ได้หรือไม่ สิ่งที่เกิดขึ้นที่นี่ที่กอง? ผู้ชม: [ไม่ได้ยิน] กองอยู่ด้านบน? ศาสตราจารย์: ใช่ ดังนั้นจึงจะสร้างสำเนา และชนิดของมันกองอยู่ด้านบน คิดว่า stack-- กอง หนังสือสแต็คของอะไร กองอยู่ด้านบนเป็นครั้งแรกในช่วง ออกสุดท้ายในครั้งแรกออกมา ดังนั้นมันจะสร้าง x ที่นี่ ที่จะมี funcs ทุกตัวแปร ที่ดี ดังนั้นตอนนี้เรามีสองที่แตกต่างกันของ x ที่ เป็นตัวแทนของสองสิ่งที่แตกต่างกันมาก จากนั้นเรากำลังจะพิมพ์ ออกจากจำนวนเต็มของ x ดังนั้นขอพิมพ์ 100 ใช่มั้ย? เพราะที่นี่ก็ 100 เพื่อให้เป็นสิ่งแรก ว่ามันจะพิมพ์ออกมา ไม่มีอะไรที่นี้ในฐานะที่เป็นผลตอบแทนที่ฟังก์ชั่น ตอนนี้ที่ทำงานในสายหลักที่ จะทำ ทุกคนที่ดีกับฉันเพื่อให้ห่างไกล? ดังนั้นเราในขณะนี้ผ่านสองออกจาก สามบรรทัดของฟังก์ชั่นหลักของเรา ตอนนี้เรากำลังจะไปบรรทัดที่สาม เรากำลังจะไป printf x ที่อยู่ในหลักนี้คืออะไร? อะไรที่เป็นตัวแทนของ? สิ่งที่มีค่าเป็น x ตอนนี้หรือไม่ ผู้ชม: 100 ศาสตราจารย์: มันเป็น 100? ผู้ชม: ยัง 10 ศาสตราจารย์: ยัง 10 ใช่. เพราะจำภายใน บำบัดของเราเท่ากับ x 100 แต่ถ้าเรากลับมา ฟังก์ชั่นหลักของเรา ตัวแปรที่ถูกเก็บไว้ใน สถานที่ที่แตกต่างกันในกองของเรา ดังนั้นตอนนี้เราต้องกลับไปที่ สแต็คหลักไฟตัวแปรท้องถิ่น และนี่ x เท่ากับ 10 และเพื่อที่เรากำลังจะพิมพ์ออกมา 10 ดังนั้นเธอจึงถูกต้องอย่างแน่นอน เรากำลังจะมี การส่งออกของ 100 และ 10 ใช่? ผู้ชม: เมื่อคุณ malloc มันเป็น กองหรือสแต็คที่เป็น [ไม่ได้ยิน] หรือไม่ ศาสตราจารย์: เมื่อคุณ malloc, คุณกำลังการหน่วยความจำจากกอง และการจัดสรรมัน เพื่อที่คุณจะได้ไม่ต้อง ยุ่งกับการใด ๆ นี้ ดังนั้นผมคิดว่าประเด็นที่ใหญ่กว่า นี่คือสิ่งที่เรียกว่าขอบเขต สำหรับบรรดาของคุณที่อยู่ใน เซสชั่นการตรวจสอบคืนที่ผ่านมา เราได้พูดคุยเกี่ยวกับเรื่องนี้ในเวลาสั้น ๆ ขอบเขตการกำหนดวิธีการและ เมื่อตัวแปรของคุณอยู่ หรือสิ่งที่อยู่ภายในกรอบ ตัวแปรของคุณทำอยู่ สวยมากกฎของหัวแม่มือโดยทั่วไป คือ variables-- ของคุณถ้าคุณสร้างพวกเขา ภายใน braces-- หยิกพวกเขามีอยู่ เฉพาะภายในวงเล็บปีกกาเหล่านั้น ดังนั้นตัวอย่างเช่นในการทำงานของเรา บำบัดคุณจะเห็นทั้งสองการจัดฟัน ถ้าคุณกำลังสร้าง อะไรที่อยู่ภายในของมัน โอกาสเป็นสิ่งที่คุณกำลังทำอยู่ การสร้างสแต็คและจัดเก็บที่มี สิ่งที่เหมือนกันในหลัก ที่เก็บไว้เพียงด้านในของหลัก นอกจากนี้คุณต้องการที่จะเป็น มากระวังให้มากที่นี่ เพราะขอบเขตยังให้ยืม ตัวเองไปตัวอย่างที่แตกต่างกัน ดังนั้นตัวอย่างเช่นสำหรับ ห่วงสำหรับฉัน int เท่ากับ 0 ฉันจะน้อยกว่าผมไม่ทราบว่า 10 ผมบวกบวก และคุณได้มีรหัสภายในของมันใช่มั้ย? ที่ไม่ตัวแปรนี้ ฉันจริงเพียงอยู่? เฉพาะภายในสำหรับวงของคุณ ดังนั้นฉันเดิมพันหลายพวกคุณมี อาจพบข้อผิดพลาดนี้เมื่อ คุณกำลังทำโปรแกรมใน psets ของคุณ มีกี่คนที่พวกคุณได้พยายามที่จะใช้ผม ด้านนอกของห่วงและมีความผิดพลาด? ชอบจำนวนเต็ม unreferenced หรือสิ่งที่ต้องการนั้น เหตุผลที่เกิดขึ้น เป็นเพราะที่นี่คุณ การสร้างสิ่งที่มีเพียง ที่มีอยู่ภายในสำหรับวงของคุณ และถ้าคุณพยายามที่จะใช้มันฉันไม่ได้ มีอยู่จริงนอกของมัน ดังนั้นโดยทั่วไปคอมพิวเตอร์บอกผม ไม่ทราบว่าคุณกำลังพูดถึง ทั้งหมดที่ฉันรู้คือว่าผม ที่นี่ แต่ตอนนี้ไม่ได้ ดังนั้นถ้าผมจะสร้าง สำหรับวงภายในใช่มั้ย? และฉันจะสร้างอีก เช่นเจ int และมีมันทำสิ่งที่ และคุณมีรหัสภายในของ ห่วงว่าเจมีอยู่เพียงที่นี่ แต่ที่ยังมีอยู่ภายในฉัน และเพื่อให้เจมีอยู่เพียง ภายในนี้ห่วง ในขณะที่ผมมีอยู่ในสิ่งที่ทั้ง ทุกคนชัดเจน? สิ่งเดียวกันกับงบเงื่อนไข ถ้าคุณต้องการที่จะสร้างอะไร สิ่งเดียวกันกับลูปในขณะที่ถ้า คุณต้องการที่จะสร้างอะไร นั่นคือสิ่งที่จะเป็น มากระมัดระวังเกี่ยวกับ ดังนั้นนี่เป็นปัญหาที่ดีจริงๆใน รู้สึกว่ามันแสดงให้เห็นถึงสิ่งที่สอง มันแสดงให้เห็นเป็นครั้งแรกขอบเขต มันแสดงให้เห็นและ นอกจากนี้ยังจัดสรรหน่วยความจำ เพราะพวกคุณควรรู้ว่า ฟังก์ชั่นเติบโตขึ้นในกอง และที่ว่าเมื่อคุณเรียก ฟังก์ชั่นที่คุณกำลังสร้าง หลักสแต็คใหม่ของหน่วยความจำ นั่นคือความแตกต่างจาก สิ่งที่หน่วยความจำของคุณเป็นไฟ ใช่. ต๊าย! ทุกคนตกลงในที่? นั่นคือทำให้เกิดความสับสน หัวข้อที่ดีมากที่จะข้ามไป เพราะคุณอาจจะ จะได้รับหากินบาง สิ่งที่ต้องการที่เกี่ยวกับการตอบคำถาม ใช่. เย็น. ฉันจะทำให้คุณได้รับ 100 หนึ่ง สาย 10 แล้วในที่อื่น ๆ ใช่ดีมาก ตกลงตอนนี้พวกคุณจะได้รับ โอกาสที่จะช่วยสอน คุณจะได้รับการตอบทั้งหมดที่น่ารัก อีเมลที่บางครั้งผมได้รับ ดังนั้นเรียนล่ะผมเห็นผมคิดว่าบางสิ่งบางอย่าง ไปอย่างผิดปกติกับคอมไพเลอร์ของฉัน ฉันแน่ใจว่ารหัสของฉันถูกต้อง แต่ฉันได้รับ แต่ความผิดของการแบ่งส่วน ทุกครั้งที่ผมทำงาน เกิดอะไรขึ้น? กรุณาช่วยจำนวนมากของความรัก ถ้าพวกคุณได้สิ่งที่ต้องการ ว่าวิธีการที่คุณจะตอบสนอง? เหล่านี้เป็นจริงที่พบบ่อยมาก คำถามที่เราจะขอให้คุณ คือถ้าเราจะให้คุณ สถานการณ์ที่เราจะให้เรา เดาที่ดีที่สุดของคุณในสิ่งที่เกิดขึ้น ใครมีแทงที่สิ่งที่เกิดขึ้นหรือไม่? ใช่? ผู้ชม: บางที dereferenced null บางอย่างเช่นตัวชี้ ชี้ที่บางสิ่งบาง null ศาสตราจารย์: ใช่ว่าจะเป็น ตัวอย่างของเมื่อที่จะเกิดขึ้น แต่สิ่งที่เป็นภาพขนาดใหญ่ ของสิ่งที่เกิดขึ้นที่นี่? ผู้ชม: มันคุณกำลังพยายาม ในการเข้าถึงหน่วยความจำที่คุณไม่ได้ ควรจะมีการเข้าถึง? ศาสตราจารย์: แน่นอน ดังนั้นคิดว่าเป็นความผิด seg, ปิด ข้อ จำกัด พื้นที่ จำกัด ในหน่วยความจำ ที่คุณไม่ควรสัมผัส สวยมากดังนั้นเมื่อคุณกำลังพยายาม เพื่อ index-- เช่นตัวอย่างเช่น คุณได้ประกาศ อาร์เรย์จากศูนย์ถึงเก้า แต่คุณลองสัมผัสที่ 10 ความคุ้มค่าที่คุณไม่ได้มีการเข้าถึงที่ เพราะคุณไม่ได้ประกาศว่า และเพื่อให้คอมพิวเตอร์ของคุณจะ ที่จะมองว่าเป็นเช่น เอ่อโอ้คุณกำลังพยายามที่จะไป นอกขอบเขตของดัชนี ฉันจะให้คุณ ความผิดพลาดในการแบ่งส่วน คิดว่าเป็นส่วนใช่มั้ย? ส่วนที่พิเศษคือความผิด เมื่อคุณพยายามที่จะทำลายบางสิ่งบางอย่าง และคุณไม่ควรจะมี เป็นความผิดส่วนทุกที่ทุกเวลา คุณพยายามที่จะสัมผัสสิ่ง ที่คุณไม่ควรสัมผัส ดังนั้นตัวอย่างทั่วไปเป็นดัชนี แน่นอนถ้าคุณกำลังพยายาม ให้สัมผัสที่เป็นโมฆะ ที่ยังจะทำงานได้ดี หากตัวชี้ของคุณกำลังพยายามที่จะ สัมผัสสิ่งที่ไม่ควรสัมผัส ที่ยังสามารถทำงานได้ดี ส่วนใหญ่มักจะคุณจะ เห็นนี้ในอาร์เรย์ ทุกคนดีหรือไม่? ผู้ชม: ดังนั้นหากคุณต้องการ ในการเข้าถึงจุดที่ 10 และมีเพียง จำกัด เก้าหรือบางสิ่งบางอย่าง ศาสตราจารย์: ใช่ว่า สวยมาก เย็น. รักแล้วล่ะ ดังนั้นเราจึงได้มียอดเยี่ยมเหล่านี้ สิ่งที่เรียกว่าแปลก ถ้าผสาน sort-- ที่เรา เห็นในตัวอย่างเมื่อ ดาวิดทำทั้ง ในสิ่งที่ class-- ทำไม ถ้ามันมากเร็วกว่า ใด ๆ ของประเภทอื่น ๆ ทำไมเราได้รำคาญรู้ ใด ๆ ของประเภทอื่น ๆ หรือไม่ คำถามนี้เป็นสิ่งที่เป็นจริงขอให้คุณ? มีอะไรในสาม word-- ผู้ชม: อะไรคือการปิดหรือไม่ ศาสตราจารย์: แน่นอน นั่นคือสิ่งที่คำถามที่ถาม อะไรค้าออกระหว่าง ผสานเรียงโองการประเภทอื่น ๆ ? ผู้ชม: ใช้หน่วยความจำใช่มั้ย? ศาสตราจารย์: คุณ อธิบายว่าบิตมากขึ้นหรือไม่? แรกให้อธิบายการจัดเก็บผสาน การเรียงลำดับผสานทำงานอย่างไร ผู้ชม: ดังนั้นจึงทำงานโดย หารทุกอย่างลงในช่วงครึ่งปี แล้ววางไว้ร่วมกัน และจัดสรรในการสั่งซื้อ เช่นเวลาคุณผสานทุกชุด ศาสตราจารย์: สวยมาก ดังนั้นผมจึงสามารถวาดออกมานี้ แต่มันจะ พาฉันห้านาทีที่จะดึงมันออกมา มองย้อนกลับไปยังภาพนิ่งส่วน ที่เราครอบคลุมผสานการเรียงลำดับ ที่แน่นอน ดังนั้นวิธีการที่ผสานการทำงานของการจัดเรียง มันคือสิ่งที่แบ่งออกในช่วงครึ่งปี และแล้วมันก็มีลักษณะที่ ค่าแรกของทั้งหมดของพวกเขา และทุกประเภทเดียวที่ อย่างต่อเนื่องสร้างอาร์เรย์ใหม่และ ทำให้สิ่งที่มากขึ้นในการสั่งซื้อ และดังนั้นในขณะที่จริงๆ ได้อย่างรวดเร็วเพราะ it's-- คุณรู้ว่า การค้นหาแบบไบนารีคือการเข้าสู่ระบบของ n n คุณกำลังสร้างจำนวนมาก อาร์เรย์ที่แตกต่างกันที่คุณ ใช้เป็นจำนวนมากของหน่วยความจำ ดังนั้นในขณะที่มันได้เร็วขึ้นการค้าปิด ที่นี่เป็นที่ที่คุณกำลังใช้หน่วยความจำมากขึ้น และเพื่อให้คำแนะนำทุกประเภทและการค้นหา ถูกปกคลุมมากขึ้นในปีนี้ กว่าที่พวกเขาได้รับในปีที่ผ่านมา พวกคุณจะเห็นว่า สะท้อนให้เห็นตามความเหมาะสมในการตอบคำถาม แน่นอนฉันจะใช้เวลาไป มากกว่าสิ่งที่ทุกประเภทที่แตกต่างกัน มีวิธีการค้นหาแบบไบนารี, วิธีการค้นหาเชิงเส้น วิธีการอาจจะ pseudocode รหัสเหล่านั้นออก อะไรคือเวลาที่ทำงานอยู่หรือไม่ สิ่งที่ต้องการทำงานครั้งเป็นอย่างมาก ง่ายต่อการคัดลอกลงบนแผ่นบันทึก ขวา? เป็นเรื่องยากมากเมื่อคุณอยู่ ในช่วงกลางการทดสอบ และคุณจะต้องคิดออกว่า คัดลอกมันลง ฉันรับประกันคุณคุณ จะต้องรู้ว่า สิ่งที่ไม่ชอบการค้า? กรณีที่เลวร้ายที่สุดสถานการณ์กรณี สำหรับทั้งหมดของพวกเขามากได้รับรู้ ใช่? ผู้ชม: เราจำเป็นที่จะต้อง รู้วิธีการจัดเรียงรหัสผสาน? เช่นเดียวกับที่เราทำต้อง จำ recursive หรือไม่ ศาสตราจารย์: ฉันอย่างสงสัยมันเพียงแค่ เพราะมันก็เหมือนกับการที่ค่อนข้างซับซ้อน แต่มันอาจจะไม่เป็นไปไม่ได้ถ้าเรา ขอให้คุณใช้ pseudocode มันออกมา ใช่. อ๋อตกลงอีกครั้งหนึ่ง เรื่องนี้อาจจะเกิดขึ้นใน คุณชิ้นสุดท้ายในบิต ใช่? ไม่ทุกคนได้ยินว่า? ตกลงดังนั้นสวยมากแรกของ ทุกสิ่งที่ประเภทของโปรแกรม จะให้คุณมีการส่งออกเช่นนี้? จำได้ว่าเราขอให้คุณเรียนรู้เกี่ยวกับ นี้ชนิดใหม่ของเครื่องมือการแก้จุดบกพร่อง? สิ่งที่ชื่อของมันคืออะไร valgrind ขวา มันเป็นโปรแกรมที่ คุณสามารถเรียกที่อาจ ติดตามทุกหน่วยความจำที่คุณ ใช้ในโปรแกรมของคุณและที่เกิดขึ้น ดังนั้นถ้าคุณมีบางสิ่งบางอย่างเช่น หายไปแน่นอน 40 ไบต์ในหนึ่งช่วงตึก คุณอาจไม่ได้ ความทรงจำที่จะเป็นอิสระมัน เพราะถ้าคุณกำลังใช้ไบต์หน่วยความจำ นั่นหมายความว่าคุณได้เข้าถึงที่หน่วยความจำ แต่คุณยังไม่ได้สามารถที่จะเป็นอิสระ ดังนั้นคุณจึงต้องการที่จะทำให้ ตรวจสอบให้แน่ใจว่าคุณยัง ใช้ free-- ที่เป็น function-- ที่จะเป็นอิสระทั้งหมด ของหน่วยความจำจัดสรรโดย malloc เย็น. ดังนั้นสไลด์นี้ฉันจะมีขึ้น มันเป็นทุกที่ในจำนวนมาก การบรรยายในหลายส่วนภาพนิ่ง จริงๆคุณต้องการให้แน่ใจว่า คุณก็รู้ว่าทั้งหมดนี้ ทั้งในแผ่นบันทึกย่อของคุณหรือถ้าคุณ ต้องการที่จะจดจำมันรู้สึกอิสระที่จะ ที่จริงจริงๆสิ่งที่สำคัญจริงๆ ยังเป็นสิ่งที่ดีมาก คำถามที่เราอาจจะถาม เป็นลักษณะการเลือก sort-- ทำไมที่ เลือก sort-- ทั้งหมดของ runtimes มีการยกกำลังสอง n โดยไม่คำนึงถึงวิธีการที่รายการมาถึง คุณเป็นดังนั้นทำไมเลือก sort-- ฉันจะให้พวกคุณ 30 ที่สองคิดเกี่ยวกับเรื่องนี้ เพราะชนิดของความสับสน มันเกี่ยวข้องกับความคิดความคิดบางอย่าง ทำไมวิ่งครั้งจะเหมือนกันใน ทั้งที่เลวร้ายที่สุดและดีที่สุดสถานการณ์กรณี? ใช่? ผู้ชม: เพ​​ราะการเลือกการจัดเรียงในแต่ละ ตำแหน่งหรือพื้นที่ในอาร์เรย์เล็ก ๆ น้อย ๆ นี้ สิ่งหนึ่งหรือสิ่งที่ ดังนั้นแม้จะอยู่ในสถานการณ์กรณีที่ดีที่สุด แม้ว่าจะเรียงได้อย่างสมบูรณ์แบบ ก็ยังจะต้องเป็นเหมือนตกลงหนึ่ง ในสถานที่แรกของฉันฉันมีหนึ่ง และผ่านทั้งหมดของพวกเขา ตกลงหนึ่งที่มีขนาดเล็กที่สุด และจากนั้นก็จะไปอีกครั้ง และเป็นเหมือนตกลงสอง เป็นที่เล็กที่สุดของทุกสิ่ง แต่มันก็ยังคงมีการ ตรวจสอบแต่ละคนและทุกคน ศาสตราจารย์: ใช่ ดังนั้นตัวอย่างเช่นให้เพียงกล่าวว่า เรามีรายชื่อเรียงลำดับแล้ว อาร์เรย์ 04:59 วิธีการที่เลือกประเภทคือว่า มันผ่านไปมันจะตรวจสอบทั้งสอง จากนั้นก็จะตรวจสอบทั้งสอง และจากนั้นก็จะตรวจสอบและตรวจสอบ มันช่วยให้การตรวจสอบทั้งหมดของพวกเขา โดยไม่คำนึงถึงหรือไม่ มันเรียงจริง เพราะเห็นว่าเป็นเพียง วิธีการจัดเรียงการทำงาน ดังนั้นคำถามนี้เป็นชนิดเช่น เป็นคำถามที่ความคิดเราจะขอให้ ที่ไหนแรกให้คุณ รู้ว่าสิ่งที่จัดเรียงการเลือก เป็นสิทธิที่จะสามารถ ที่จะตอบคำถาม คุณจะต้องสามารถที่จะเข้าใจ แนวคิดสิ่งที่เกิดขึ้น และจากนั้นคุณสามารถใช้มันและคิดว่าตกลง ขอเพียงแค่จินตนาการสถานการณ์ที่เลวร้าย พวกเขากำลังทั้งหมดในลำดับถัดลงมา วิธีที่จะส่งผลกระทบต่อมันได้หรือไม่ เกิดอะไรขึ้นถ้ามันขึ้นเพื่อ? ถ้ามันเรียงอยู่แล้ว? วิธีที่จะส่งผลกระทบต่อ runtimes หรือไม่ แล้วเรียงเลือกคุณจะสังเกตเห็น ว่ามันไม่ได้เรื่องจริง เพราะคุณกำลังตรวจสอบทั้งหมด ค่าโดยไม่คำนึงถึงสิ่งที่เกิดขึ้น และสิ่งที่ดีมากที่จะจำ ทำไมบางประเภทมีความแตกต่างจากคนอื่น ๆ และวิธีการที่ดีที่สุดและเลวร้ายที่สุดกรณีสถานการณ์ จะส่งผลกระทบทั้งหมดของพวกเขา ฉันจะตีจริงๆในทุกประเภท เพราะเห็นว่าจะมีการตอบคำถาม ใช่. ตกลง. มีเหลือหกนาทีเป็น ฉันสามารถใช้เวลาสามนาทีคำถาม ฉันยังสามารถป้วนเปี้ยน เช่น 20 นาทีหลังจากที่ส่วน ถ้าคุณต้องการที่จะถามคำถามเช่นกัน ไม่มีใครมีเพียงสั้น ๆ จริงๆ คำถามหรือปัญหาความคิด พวกเขากำลังไม่ชัดเจนเกี่ยวกับตอนนี้? ใช่? ผู้ชม: คุณสามารถพูดคุยเล็ก ๆ น้อย ๆ ผู้ประกอบการเกี่ยวกับบิตบิต? ศาสตราจารย์: ใช่ ผู้ประกอบการเพื่อให้มีค่าที่เหมาะสม บางสิ่งบางอย่างที่คุณอาจ ก็อาจต้องการที่จะวางบนแผ่นของคุณ ดังนั้น quickly-- ฉันไม่ต้องการ ที่จะไปมากเกินไปในเชิงลึก เพราะฮาร์วาร์ในการตรวจสอบของพวกเขา เซสชั่นที่ปกคลุมมันสวยดี ผู้ประกอบการค่าที่เหมาะสมมี ห้าของพวกเขาใช่มั้ย? มีเรื่องนี้ซึ่งเป็น x หรือฟังก์ชั่น มีเครื่องหมายซึ่งเป็นและ ท่อซึ่งเป็นหรือ แล้วคุณมีสอง ชนิดที่แตกต่างของการเปลี่ยนแปลง ถ้าฉันให้คุณสองค่าถ้า ผมให้คุณเช่นหนึ่งและเป็นหนึ่งใน สิ่งที่จะประเมินหรือไม่ ถ้าฉันให้เป็นจริงและความจริงจริงหรือไม่? สิ่งที่เกี่ยวกับจริงหรือเท็จ? ยังคงเป็นจริงใช่มั้ย? เพราะมีหรือ เราส่วนใหญ่มีแนวโน้มจะให้ตัวเลข ดังนั้นจำหนึ่งเท่ากับ จริงเท็จเท่ากับศูนย์ และเราอาจให้สิ่งเหล่านี้ และขอให้คุณที่จะบอกเราว่าเกิดอะไรขึ้น ฮาร์วาร์ครอบคลุมภายในแรก 10 นาทีของเซสชั่นการศึกษา จริงๆดีจริงๆ ดังนั้นพวกคุณต้องการที่จะทำให้ แน่ใจว่าคุณมองย้อนกลับไปว่า ผู้ชม: Is pisa5 ไปได้ในการตอบคำถามหรือไม่ ศาสตราจารย์: เลขที่ ไม่แม้แต่จะมอง pisa5 ในขณะนี้ มันเป็นเรื่องยาก. เพียงแค่ไม่ได้รำคาญมองหาที่ pisa5 แต่เป็นคำแนะนำบางอย่าง และข้อเสนอแนะผม ขอแนะนำให้คุณเริ่มต้น pisa5 เร็วที่สุดเท่าที่ตอบคำถามที่มีมากกว่า นี้จะเป็นที่ยากที่สุด สัปดาห์ แต่แล้วพวกคุณ จะถูกส่งผ่านมันอยู่บนเนินเขา กลิ้งสีเขียวและลูกสุนัข และก็ปรับ ชั้นนี้ได้รับอย่างมีนัยสำคัญ ได้ง่ายขึ้นหลังจากที่ pset ที่ห้า ผู้ชม: เวลาทำการ เป็นวันอาทิตย์วันจันทร์? ศาสตราจารย์: ใช่ดังนั้นเวลาทำงานจะ วันอาทิตย์ถึงวันจันทร์สำหรับ pset เวลาทำการคืนนี้เป็นหลัก จะเป็นเพียงการตรวจสอบสำหรับการตอบคำถาม หากใครต้องการจะเข้ามาและขอให้ มาตรฐานการบัญชีฉบับคำถามที่เราจะมี ฉันจะใช้คำถามที่อาจจะเป็นหนึ่งมากขึ้น ถ้าใครมีคำถาม? ใช่? ผู้ชม: เมื่อคุณอยู่ โหนดกำหนด [ไม่ได้ยิน] ถ้าคุณบอกว่าดาวโหนดและจากนั้นต่อไป ไม่คอมพิวเตอร์โดยอัตโนมัติ เข้าใจว่าคุณ หมายถึงตัวชี้อื่นได้หรือไม่ ศาสตราจารย์: เลขที่ ผู้ชม: คุณต้อง เชื่อมโยงมัน [ไม่ได้ยิน] ศาสตราจารย์: ดังนั้นพื้น โครงสร้างของโหนดจะจำ มันก็เหมือนคุณสร้างโหนดและ แล้วคุณมีตัวชี้ที่เรียกว่าต่อไป สิ่งที่คุณกำลังทำคือการมี โครงสร้างมี คุณจะต้องกำหนด ชี้ว่าที่ใดที่หนึ่ง ดังนั้นเครื่องคอมพิวเตอร์ไม่ได้ รู้ว่าสิ่งที่มันทำยัง คุณต้องกำหนดจริงเมื่อ คุณกำลังสร้างรายการที่เชื่อมโยงของคุณ และนั่นคือสิ่งที่ส่วนใหญ่ pset 5 จะอยู่ใน ดังนั้นไม่ต้องกังวลเกี่ยวกับ สิทธิใด ๆ ที่ตอนนี้ ผู้ชม: ดังนั้นเราจึงไม่จำเป็นต้อง เน้นมากเกินไปในรายการการเชื่อมโยงเพียง ความคิดทั่วไป? ศาสตราจารย์: เพียงแค่กองสวยมาก คิวรายการการเชื่อมโยง, ต้นไม้, ตารางแฮช เพียงแค่มีความสามารถที่จะรู้ว่าสิ่งที่พวกเขามี เราไม่ได้ไปขอ คุณชอบอะไรที่เฉพาะเจาะจง เพราะเรายังไม่ได้ทำจริงๆ pset ที่ครอบคลุมที่ใด ๆ เลย ดังนั้นในช่วงสองนาทีก่อน ผมตั้งคุณฟรีที่จะฆ่าตอบคำถามนี้ สวยมากเช่นคิดเกี่ยวกับวิธี ห่างไกลที่พวกคุณได้มาในชั้นนี้ ผมจำได้ว่าเมื่อสองสัปดาห์ ของชั้นเรียนบางท่านนี้ ใช้เวลาสามชั่วโมงเขียนน้ำ นานแค่ไหนก็จะพาคุณ คนที่จะเขียนน้ำตอนนี้หรือไม่ 30 วินาทีอาจจะ? คิดเกี่ยวกับวิธีการมาก พวกคุณได้เรียนรู้ CS เป็นจริงๆเรื่องยากมาก มีข้อสงสัยว่าการที่ไม่ได้ มันยากที่ว่าทำไมไม่มีใครศึกษามัน มันเป็นเพียงยาก และก็ปรับทั้งหมด และผมภูมิใจที่ ทุกคนได้ทำให้มันไกลขนาดนี้ Psets จะไม่ง่าย พวกเขาใช้เวลามาก พวกคุณผมจะไม่ขอให้คุณเขียน เกมของ 15 หรือ Vigenere ใน pset ไม่จำเป็นต้องออกนอกลู่นอกทางเพียงเกี่ยวกับการที่ ทั้งหมดที่เรากำลังทดสอบที่นี่คือการประเมิน ความรู้เกี่ยวกับแนวความคิดของคุณได้เป็นอย่างดี เป็นบางส่วนของทักษะพื้นฐานของการเขียนโปรแกรมของคุณ การทดสอบที่ถูกออกแบบมาเพื่อ เป็นสิ่งที่ท้าทายจริงๆ เหมือนมันถูกออกแบบมา สำหรับคุณที่จะไม่ได้รับ 100 มันออกแบบมาสำหรับคุณที่จะอาจจะ ไม่สามารถที่จะเสร็จสิ้นใน 75 นาที และที่ดีทั้งหมด ฉันนักเรียนเอง ฉันรู้ว่าฉันเกลียดมันเมื่อฉันเดิน ออกจากการตอบคำถามจะเป็นเหมือนอึ นั่นเป็นเรื่องยากจริงๆ น่าจะเป็นสิ่งที่จะ happen-- และที่ดีโดยสิ้นเชิง ฉันบอกพวกคุณในขณะนี้ หมายถึงในสิ่งเหล่านี้ จะไม่สูงเลย และสำหรับบรรดาของคุณที่ ได้รับเช่น สามในชุดปัญหาของคุณ ไม่ได้หมายความว่าคุณ จะได้รับร้อยละ 60 ในชั้นนี้ ถ้าคุณได้รับ 60% บน ตอบคำถามที่ไม่ได้ หมายความว่าคุณกำลังจะไป ได้รับการพัฒนาในชั้นนี้ เรามาดูกันโดยเฉพาะอย่างยิ่งฉัน, บรรดาของคุณในส่วนของฉัน ผมเห็นวิธีการที่ยากที่พวกคุณทุกคนที่ทำงาน และผมติดตามที่ พวกคุณจะถูกปรับ ไม่มีหน่วยความจำของสถ​​าบันคือ ความสุขในตอนท้ายของภาคการศึกษา เพราะเด็กทุกคนจะบอกฮาร์วาร์ เพื่อนของพวกเขาโอ้คุณจะปรับ ไม่มีใครจะบอกพวกคุณที่นี่ ดังนั้นผมจึงต้องบอกพวกคุณที่นี่ พวกคุณจะถูกปรับ ฉันจึงภูมิใจทั้งหมดของพวกคุณ การทดสอบจะยาก การศึกษาสำหรับมันและหลังจากนั้น เพียงแค่โยนมันออกไป ได้รับการพร้อมที่จะเรียนรู้สิ่งใหม่ ๆ และกินขนม เราได้มีจำนวนมากของขนม รับการนอนหลับคืนที่ดีของ อย่านอนไม่หลับเพราะ ที่ต้องการจะเลวร้ายจริงๆ บริการลูกค้าเป็นจำนวนมากของตรรกะ หากคุณไม่ได้นอนหลับคุณจะไม่สามารถทำงาน และสมองของคุณไม่สามารถทำงานได้ และผมจะอยู่ที่นี่ต่อไปอีก 20 นาทีถ้าใครอยากไปไหนมาไหน พวกคุณจะไปฆ่ามัน โชคดี.