>> [เล่นเพลง]
เดวิดเจลัน: ทั้งหมดขวา
นี้เป็น CS50 และนี่ คือจุดเริ่มต้นของสัปดาห์ที่สอง
ดังนั้นขอให้เราเริ่มต้นวันนี้กับข้อผิดพลาด
ข้อผิดพลาดของหลักสูตรเป็น ความผิดพลาดในโปรแกรม
และคุณจะได้รับมาก คุ้นเคยกับแนวคิดนี้
ถ้าคุณไม่เคยตั้งโปรแกรม ก่อนที่จะ pset0 และตอนนี้ PSET1
แต่ขอพิจารณาสิ่งที่ ง่ายๆเพียงเล็กน้อยในครั้งแรก
โปรแกรมนี้ที่นี่ที่ฉัน โยนกันล่วงหน้า
และผมก็อ้างว่านี่ควรพิมพ์ 10 ดาวบนหน้าจอโดยใช้ printf,
แต่ก็เห็นได้ชัดว่าเป็นรถในทางใดทางหนึ่ง
>> กำหนดสเปคที่ว่า มันควรจะพิมพ์ 10 ดาว
แต่มันไม่ได้เห็นได้ชัดว่าสิ่งที่ คุณจะอ้างเป็นข้อผิดพลาดหรือไม่
ใช่?
จึงออกจากข้อผิดพลาดอย่างใดอย่างหนึ่ง, และสิ่งที่คุณหมายถึงโดยที่?
ตกลง
ที่ดีเยี่ยม
ดังนั้นเราจึงได้ระบุไว้ เริ่มต้นค่าเป็นศูนย์สำหรับฉัน
และเราได้กำหนดค่า n 10 แต่เราได้ใช้น้อยกว่าหรือเท่ากับ
และด้วยเหตุผลที่ว่านี้เป็นสอง ตัวอักษรและไม่เพียงสัญลักษณ์
เหมือนในหนังสือคณิตศาสตร์ คือการที่คุณไม่ได้
วิธีการแสดง เทียบเท่าตัวละครตัวหนึ่ง
>> ดังนั้นนั่นหมายความว่าน้อยกว่า แต่ หากคุณเริ่มต้นนับที่ศูนย์
แต่คุณนับทุกทาง ผ่านและเท่ากับ 10,
คุณแน่นอนจะไป นับ 11 สิ่งที่รวม
และเพื่อให้คุณกำลังจะพิมพ์ 11 ดาว
ดังนั้นสิ่งที่อาจจะมีการแก้ไขนี้ได้หรือไม่
ใช่?
>> ดังนั้นเพียงแค่ปรับน้อยกว่า หรือเท่ากับเพียง แต่จะน้อยกว่า
และมีผมเรียกร้องอาจจะ การแก้ปัญหาอีกด้วย
สิ่งที่อาจอื่นคุณจะทำอย่างไร
ใช่?
>> ดังนั้นการเริ่มต้นเท่ากับมันถึง 1 และ ออกน้อยกว่าหรือเท่ากับ
และตรงไปตรงมาผมจะเรียกร้อง ว่าสำหรับมนุษย์ทั่วไป
นี้น่าจะตรงไปตรงมามากขึ้น
เริ่มนับวันที่ 1 และ นับถึง 10
เป็นหลักทำในสิ่งที่คุณหมายถึง
>> แต่ความเป็นจริงที่อยู่ใน การเขียนโปรแกรมที่เราได้เห็น
นักวิทยาศาสตร์คอมพิวเตอร์และการเขียนโปรแกรม โดยทั่วไปจะเริ่มนับที่ศูนย์
และอื่น ๆ ที่ปรับครั้งเดียว คุณได้ใช้มัน
สภาพโดยทั่วไปของคุณจะ เป็นสิ่งที่ต้องการน้อยกว่า
ดังนั้นเพียงแค่ตรรกะ ข้อผิดพลาดที่เราสามารถทำได้ตอนนี้
แก้ไขและในที่สุดคอมไพล์ นี้และได้รับเพียง 10
>> ดีวิธีการเกี่ยวกับปัญหานี้ที่นี่?
ที่นี่อีกครั้งฉันเรียกร้องที่ฉันมี เป้าหมายของการพิมพ์ 10 stars--
ต่อหนึ่งบรรทัดเวลานี้ แต่ก็ไม่ได้
ก่อนที่เราจะนำเสนอสิ่งที่ การแก้ไขเป็นสิ่งที่ไม่นี้
พิมพ์สายตาถ้าผมจะรวบรวม และเรียกใช้โปรแกรมนี้คุณคิดว่า?
ใช่?
>> สตาร์
ดังนั้นดาวทั้งหมดใน บรรทัดเดียวกันคือสิ่งที่ฉันได้ยิน
แล้วตัวอักษรบรรทัดใหม่
ดังนั้นลองที่
เพื่อให้รถ-1, ป้อน และฉันเห็นคำสั่งเสียงดังกราว
ที่เราได้พูดคุยเกี่ยวกับเวลาที่ผ่านมา
./buggy-1, และแน่นอนผมเห็นทั้งหมด 10 ดาว ในบรรทัดเดียวกันแม้ว่าฉันจะเรียกร้อง
ในสเปคของฉันเพียงแค่แสดงความคิดเห็นบน รหัสที่ผมตั้งใจจะทำอย่างใดอย่างหนึ่งต่อ
สาย
แต่นี้มีลักษณะที่เหมาะสม
>> ตอนนี้สาย 15 ดูเหมือนว่าฉัน พิมพ์ดาวและจากนั้นสาย 16
ดูเหมือนว่าฉันพิมพ์ ตัวละครสายใหม่
และพวกเขากำลังทั้งสองเยื้องเพื่อ ฉันอยู่ในวงอย่างชัดเจน
ดังนั้นไม่ควรที่ฉันจะทำดาวใหม่ สาย, ดาว, บรรทัดใหม่, ดาว, สายใหม่ได้หรือไม่
ใช่?
>> ใช่ซึ่งแตกต่างจากภาษาเช่น งูใหญ่ถ้าคุณคุ้นเคย
เยื้องไม่ได้ สำคัญกับคอมพิวเตอร์
มันเป็นเพียงเรื่องที่มนุษย์
ดังนั้นสายในขณะที่ที่นี่ผมได้คิดค้น 15 และ 16-- ที่มีลักษณะสวยงาม
แต่คอมพิวเตอร์ไม่สนใจ
คอมพิวเตอร์ใส่ใจเกี่ยวกับ จริง ๆ แล้วมีวงเล็บปีกกา
รอบเส้นเหล่านี้ของรหัส
>> ดังนั้นว่ามันเป็น clear-- เช่นเดียวกับใน Scratch-- ว่าคนสองบรรทัดของรหัส
ควรจะดำเนินการ
เช่นเดียวกับหนึ่งในบรรดาปริศนา Scratch สีเหลือง ชิ้นอีกครั้งและอีกครั้งและอีกครั้ง
>> ดังนั้นตอนนี้ถ้าผม re-run นี้ program-- ./buggy-2-- Hm
ฉันมีข้อผิดพลาดในขณะนี้
สิ่งที่ฉันไม่ลืมที่จะทำอย่างไร
ใช่ดังนั้นผมจึงไม่ได้รวบรวมไว้
เพื่อให้รถ-2
ไม่มีไฟล์ดังกล่าวเพราะผมไม่ได้ จริงรวบรวมรุ่นที่สอง
ดังนั้นตอนนี้ที่น่าสนใจ variable-- ไม่ได้ประกาศไม่ 2
ที่เรากำลังทำ 1
ทำให้รถ-1-- ./buggy-1-- และตอนนี้ แต่ละของพวกเขาอยู่ในบรรทัดเดียวกัน
>> ขณะนี้มีข้อยกเว้น เรียกร้องนี้ควรของฉัน
ที่คุณต้องวงเล็บปีกกาเหล่านี้
เมื่อมันเป็นจริง OK-- ถ้าคุณได้ สังเกตเห็นในส่วนหรือ textbooks--
จะละเว้นวงเล็บปีกกา?
ใช่?
>> ว่า
เมื่อมีเพียงหนึ่ง บรรทัดของรหัสที่คุณ
ต้องการที่จะเกี่ยวข้องกับ ห่วงเช่นในตัวอย่างแรกของเรา
มันถูกต้องตามกฎหมายอย่างสมบูรณ์แบบ จะละเว้นวงเล็บปีกกา
เช่นเดียวกับการจัดเรียงของความสะดวกสบาย จากคอมไพเลอร์กับคุณ
ใช่?
คำถามที่ดี
มันจะได้รับการพิจารณาความผิดพลาดแบบ?
เราจะ promote-- ใน CS50 คู่มือสไตล์ URL ที่
อยู่ใน pset1-- ที่มัก ใช้วงเล็บปีกกา
แน่นอนถ้าคุณไม่คุ้นเคยกับการเขียนโปรแกรม
ความจริงก็คือเราไม่ได้ จะไปห้ามไม่ให้คุณ
จากการทำสิ่งอำนวยความสะดวกเหล่านี้
แต่ถ้าคุณแค่ ในการแกว่งของสิ่งที่
อย่างเพียงแค่เสมอใช้หยิก วงเล็บจนกว่าคุณจะได้รับการแขวนของมัน
คำถามที่ดี
>> ขวาทั้งหมด
เพื่อที่ว่านั้นเป็นข้อผิดพลาด
อย่างน้อยในบางสิ่งบางอย่างที่ค่อนข้างง่าย
และยังคุณอาจจะคิดว่านี้ เป็นพื้นฐานอย่างเป็นธรรมใช่ไหม?
นี้จะเรียงลำดับของสัปดาห์แรก ในการมองภาษา
เช่นดูข้อบกพร่องของคุณอยู่ในนั้น
แต่ความเป็นจริงเหล่านี้ ตัวแทนจริง
ของปัญหาที่น่ากลัวบางสวย ที่สามารถเกิดขึ้นในโลกแห่งความจริง
>> ดังนั้นบางท่านอาจจะจำ ถ้าคุณทำตามข่าวเทคโนโลยี
หรืออาจจะติดแม้ ลมนี้ในเดือนกุมภาพันธ์
ของปีที่ผ่านมานี้ว่าแอปเปิ้ลมี ทำบิตของความผิดพลาดใน iOS ของคุณทั้งสอง
ระบบปฏิบัติการบน โทรศัพท์ของพวกเขาและยัง
Mac OS, ระบบปฏิบัติการ บนเดสก์ทอปและแล็ปท็อปของพวกเขา
และคุณเห็นพาดหัวเช่นนี้
และหลังจากนั้นแอปเปิ้ล สัญญาว่าจะแก้ไขปัญหานี้
อย่างรวดเร็วและไม่สามารถแก้ไขได้ใน iOS, แต่แล้วคงที่ที่สุดก็ใน Mac OS
ได้เป็นอย่างดี
>> ตอนนี้ไม่มีพาดหัวเหล่านี้เพียงอย่างเดียวจริงๆ เผยให้เห็นสิ่งที่เป็นปัญหาพื้นฐาน
แต่ข้อผิดพลาดลดลงในที่สุด ข้อผิดพลาดใน SSL, ซ็อกเก็ตการรักษาความปลอดภัยชั้น
และเรื่องยาวสั้น นี้เป็นซอฟต์แวร์
เบราว์เซอร์ของเราและอื่น ๆ ซอฟแวร์ที่ใช้ในการทำในสิ่งที่?
>> ถ้าบอกว่าเป็น SSL ที่เกี่ยวข้องเมื่อใดก็ตามที่คุณ
เข้าเยี่ยมชม URL ที่เริ่มต้นด้วย HTTPS, สิ่งนั้นอาจ SSL จะเกี่ยวข้องกับ?
การเข้ารหัสลับ
ดังนั้นเราจะพูดคุยเกี่ยวกับ นี้ในวันที่มา
การเข้ารหัสศิลปะของ ข้อมูล scrambling
>> แต่เรื่องยาวสั้น, แอปเปิ้ล บางครั้งที่ผ่านมาได้ทำผิดพลาด
ในการดำเนินงานของพวกเขา SSL, ซอฟแวร์ที่ในที่สุดนำไปปฏิบัติ
URL ที่เช่น HTTPS หรือสูงสุด การเชื่อมต่อที่นั่นด้วย
ผลจากการที่เป็นที่ของคุณ การเชื่อมต่อได้อาจ
ถูกดัก
และการเชื่อมต่อของคุณเป็น ไม่จำเป็นต้องเข้ารหัส
ถ้าคุณมีบางคนเลวในระหว่าง คุณและเว็บไซต์ปลายทางที่
รู้วิธีที่จะใช้ประโยชน์จากนี้
>> ตอนนี้แอปเปิ้ลโพสต์ในท้ายที่สุด แก้ไขปัญหานี้ในที่สุด
และคำอธิบาย ของการแก้ไขของพวกเขาเป็นแบบนี้
การขนส่งที่มีความปลอดภัยล้มเหลวในการตรวจสอบ ความถูกต้องของการเชื่อมต่อ
ประเด็นสำคัญคือการแก้ไขโดย คืนหายไปขั้นตอนการตรวจสอบ
>> ดังนั้นนี่คือคำอธิบายที่คลื่นมือมาก สำหรับเพียงแค่บอกว่าเราเมาขึ้น
มีตัวอักษรอย่างใดอย่างหนึ่ง บรรทัดของรหัสที่ได้รับรถ
ในการดำเนินการ SSL ของพวกเขาและ ถ้าคุณไปออนไลน์และค้นหานี้
คุณจริงสามารถหา ซอร์สโค้ดเดิม
ตัวอย่างเช่นนี้เป็นภาพหน้าจอของ เพียงแค่ส่วนหนึ่งของไฟล์ขนาดใหญ่อย่างเป็นธรรม,
แต่นี้เป็นฟังก์ชันที่เรียกว่าเห็นได้ชัด SSL ที่สำคัญตรวจสอบเซิร์ฟเวอร์แลกเปลี่ยนสัญญาณ
และจะใช้เวลาพวงของ ข้อโต้แย้งและปัจจัยการผลิต
และเราจะไม่ให้ความสำคัญ มากเกินไปใน minutia ที่นั่น
แต่ถ้าคุณมุ่งเน้นไปที่รหัสภายใน ของฟังก์ชันให้สูงสุดที่
ซูมในที่
แล้วคุณอาจจะสงสัยว่า สิ่งที่ผิดพลาดอาจจะ
ยิ่งถ้าคุณมีความคิด ในที่สุดสิ่งที่คุณกำลังมองหาที่
มีชนิดของความผิดปกติของ ที่นี่ซึ่งเป็นสิ่งที่?
>> ใช่ฉันไม่ชอบจริงๆ รูปลักษณ์ของสองกลับไปล้มเหลว
ตรงไปตรงมาผมไม่ทราบจริงๆสิ่งที่กลับไป ไม่หมายถึง แต่มีสองของพวกเขา
back to back
ที่เป็นเพียงการลูบผม ปัญญาเป็นวิธีที่ผิด
และแน่นอนถ้าเราซูมใน เพียงแค่เส้นเหล่านี้เป็นซี
>> ดังนั้นจำนวนมากของรหัสแอปเปิ้ล ที่ตัวเองเขียนใน C
และเห็นได้ชัด เป็นจริง equivalent--
ไม่ว่าเยื้องสวย รุ่น แต่ถ้าคุณยอมรับความจริง
ว่าไม่มีวงเล็บปีกกาสิ่งที่ แอปเปิ้ลจริงๆเขียนเป็นรหัสที่มีลักษณะ
เช่นนี้
ดังนั้นผมจึงได้ซูมออกและฉันเพียงแค่ คงประทับอยู่ในความรู้สึก
ว่าถ้าไม่มีวงเล็บปีกกาที่ ข้ามไปที่สองล้มเหลวที่อยู่ในสีเหลือง
เป็นไปที่จะดำเนินการไม่ว่าสิ่งที่
มันไม่ได้เกี่ยวข้องกับ ถ้าเงื่อนไขดังกล่าวข้างต้นนั้น
>> ดังนั้นแม้อีกครั้งถ้าคุณทำไม่มาก เข้าใจสิ่งนี้อาจเป็นไปได้
จะทำรู้ว่าแต่ละเหล่านี้ conditions-- แต่ละเส้นเหล่านี้
เป็นขั้นตอนที่สำคัญมาก ในขั้นตอนของการตรวจสอบ
ถ้าข้อมูลของคุณในความเป็นจริงที่มีการเข้ารหัส
ดังนั้นการกระโดดข้ามหนึ่งในจำนวนนี้ ขั้นตอนไม่คิดที่ดีที่สุด
>> แต่เพราะเรามีนี้ ข้ามไปที่สองล้มเหลวในการสีเหลือง
เพราะเมื่อเรา การเรียงลำดับของความสุนทรีย์
ย้ายไปทางซ้ายที่ เหตุผลก็คือในขณะนี้สิ่งที่
นี้หมายความว่าสำหรับสาย ของรหัสด้านล่างที่กลับไปครั้งที่สอง
ล้มเหลวในการที่คุณจะคิดว่า?
มันจะเสมอที่จะถูกข้ามไป
ดังนั้น gotos จะขมวดคิ้วทั่วไปเมื่อ สำหรับเหตุผลที่เราจะไม่ได้จริงๆไปลง
และแน่นอนใน CS50 เรามักไม่ได้ ที่จะสอนให้กลับไปคำสั่งนี้
แต่คุณสามารถคิดไปข้าง ไม่เป็นความหมายที่กระโดดไป
บางส่วนอื่น ๆ ของรหัส
>> ในคำอื่น ๆ กระโดดข้าม บรรทัดสุดท้ายนี้ทั้งหมด
และอื่น ๆ ผลจากการนี​​้โง่ ผิดพลาดง่ายที่เป็นเพียง
ผลมาจากใครบางคนอาจจะ คัดลอกและวางหนึ่งเกินไป
หลายต่อหลายครั้งก็คือการที่ทั้ง การรักษาความปลอดภัยของ iOS และ Mac OS
เป็นความเสี่ยงที่จะสกัดกั้น โดยคนเลวสำหรับค่อนข้างบางเวลา
จนในที่สุดแอปเปิ้ลคงที่นี้
>> ตอนนี้ถ้าบางส่วนของคุณเป็นจริง ใช้รุ่นเก่าของ iOS หรือ Mac OS,
คุณสามารถไปที่ gotofail.com ที่ เป็นเว็บไซต์ที่มีคนตั้งขึ้นมา
เพื่อกำหนดเป็นหลัก โปรแกรม
หากคอมพิวเตอร์ของคุณยังคงเปราะบาง
และตรงไปตรงมาว่ามันคือ มันอาจจะเป็นความคิดที่ดี
เพื่ออัพเดตโทรศัพท์ของคุณหรือ Mac ของคุณที่จุดนี้
แต่มีเพียงเพื่อพิสูจน์เพียงว่า การแข็งค่าของระดับที่ต่ำกว่านี้
รายละเอียดและเป็นธรรม ความคิดที่เรียบง่ายสามารถจริงๆ
แปลเป็​​นตัดสินใจ และปัญหาที่
affected-- ใน case-- นี้ ผู้คนนับล้าน
>> ตอนนี้คำพูดเกี่ยวกับการบริหาร
ส่วนจะเริ่มต้นในวันอาทิตย์นี้มา
คุณจะได้รับอีเมลจาก วันหยุดสุดสัปดาห์กับส่วนจุดที่
กระบวนการ resectioning จะเริ่มต้นถ้าคุณได้
ตระหนักถึงตอนนี้คุณมี บางความขัดแย้งใหม่
ดังนั้นนี้เกิดขึ้นทุกปีและเรา จะรองรับในวันที่จะมา
>> สำนักงาน hours-- ทำให้ ตาในเวลานี้ที่นี่
การเปลี่ยนแปลงเล็กน้อยในสัปดาห์นี้ โดยเฉพาะอย่างยิ่งเวลาเริ่มต้น
และสถานที่จึงไม่ปรึกษา ว่าก่อนที่จะมุ่งหน้าไปยังเวลาทำการ
ใด ๆ ของอีกสี่คืน
และตอนนี้คำว่าการประเมินที่ โดยเฉพาะอย่างยิ่งในขณะที่คุณดำน้ำในปัญหา
ชุดที่หนึ่งและอื่น
>> ดังนั้นต่อสเปค เหล่านี้มักจะ
แกนตามที่ เราประเมินการทำงานของคุณ
ขอบเขตหมายถึงสิ่งที่ ขอบเขตการดำเนินการรหัสของคุณ
คุณสมบัติที่จำเป็น โดยข้อกำหนดของเรา
ในคำอื่น ๆ เท่าใดของ ชุดชิ้นส่วนที่คุณไม่กัดออก
คุณทำหนึ่งในสามของมัน ครึ่งหนึ่งของมัน 100% ของมัน
แม้ว่ามันจะไม่ถูกต้อง เท่าไหร่ที่คุณไม่พยายามที่?
ดังนั้นที่จับระดับ ของความพยายามและจำนวนเงินที่
ที่คุณบิตออก ปัญหาชุดของปัญหา
>> Correctness-- หนึ่งนี้เพื่อ สิ่งที่ขอบเขตเป็นรหัสของคุณ
สอดคล้องกับของเรา ข้อกำหนดและเป็นอิสระจากข้อบกพร่อง
ดังนั้นจึงไม่ทำงานถูกต้องหรือไม่
ถ้าเราจะให้มันใส่บางอย่างไม่ได้ ให้เราเอาท์พุทที่เราคาดหวังหรือไม่
Design-- ตอนนี้เป็นครั้งแรกของ คนที่มีคุณภาพโดยเฉพาะอย่างยิ่ง
หรือคนที่ต้องใช้การตัดสินใจของมนุษย์
และแน่นอนนี่คือเหตุผลที่เรามีพนักงาน ของเพื่อนการเรียนการสอนจำนวนมากและแน่นอน
ผู้ช่วย
สิ่งที่ขอบเขตเป็นของคุณ โค้ดที่เขียนด้วยหรือไม่
>> และอีกครั้งนี้เป็นอย่างมาก การประเมินคุณภาพ
ที่จะทำงานร่วมกับคุณใน สองทิศทางในสัปดาห์ที่ผ่านมา
เพื่อที่ว่าเมื่อคุณได้รับไม่ได้ เพียง แต่คะแนนที่เป็นตัวเลข แต่ยัง
คะแนนเขียนหรือข้อเสนอแนะพิมพ์ หรือเขียนข้อเสนอแนะในคำภาษาอังกฤษ
นั่นคือสิ่งที่เราจะใช้ในการไดรฟ์คุณ ไปจริงการเขียนโค้ดที่ดีกว่า
และในการบรรยายและส่วนที่เราจะพยายาม ที่จะชี้ให้แทนดูได้บ่อยเท่าที่เรา can--
สิ่งที่ทำให้โปรแกรมไม่เพียง แต่ ที่ถูกต้องและดีงาม,
แต่ยังออกแบบมาอย่างดี
มีประสิทธิภาพมากที่สุดก็อาจจะเป็นหรือ แม้กระทั่งสิ่งที่สวยงามที่สุดที่จะสามารถ
>> ซึ่งนำเราไปสู่​​รูปแบบ
รูปแบบที่สุดคือ การตัดสินความงาม
คุณไม่ได้เลือกที่ดี ชื่อตัวแปรของคุณ?
คุณเยื้องรหัสของคุณถูกต้องหรือไม่
มันดูดีและดังนั้น มันเป็นเรื่องง่ายสำหรับมนุษย์อีกคน
การอ่านของคุณตามลำดับ ความถูกต้องของ
>> ตอนนี้โดยทั่วไปต่อหลักสูตรที่เราได้คะแนน สิ่งเหล่านี้ในระดับห้าจุด
และแจ้งให้เราค้อนบ้านจุด ที่สามเป็นสิ่งที่ดีแน่นอน
อย่างรวดเร็วทำคน เริ่มต้นทำเลขคณิต
เมื่อพวกเขาได้รับออกมาสาม ห้าถูกต้องสำหรับ pset บาง
และพวกเขาคิดแช่งผมไปถึง 60% ซึ่งเป็นหลัก D หรืออี
>> นั่นไม่ใช่วิธีที่เรา คิดว่าตัวเลขเหล่านี้
สามเป็นสิ่งที่ดีจริงและสิ่งที่เรา โดยทั่วไปคาดหวังที่จุดเริ่มต้น
ของคำว่าคือว่าถ้าคุณได้รับ พวงของ three's-- บางทีคู่
งานแสดงสินค้าสองสาม fours-- หรือ คู่เจ้าตัวคู่ของ fours--
ที่เป็นสถานที่ที่ดีที่จะเริ่มต้น
และระยะยาวเพื่อที่เราจะเห็น วิถีขึ้นเมื่อเวลาผ่านไป
คุณอยู่ในสถานที่ที่ดีโดยเฉพาะอย่างยิ่ง
>> สูตรที่เราใช้ในการ สิ่งที่น้ำหนักเป็นหลัก
นี้ต่อหลักสูตรที่ ซึ่งก็หมายความว่าเรา
ให้น้ำหนักมากขึ้นเพื่อความถูกต้อง
เพราะมันเป็นมากมักจะถูกต้อง ที่ใช้เวลามากที่สุด
ความน่าเชื่อถือฉันตอนนี้
คุณจะ find-- อย่างน้อย ในหนึ่ง pset-- ที่คุณ
ใช้เวลา 90% ของเวลาของคุณ ที่ทำงานเกี่ยวกับ 10% ของปัญหา
>> และทุกอย่างเรียงลำดับของการทำงาน ยกเว้นสำหรับหนึ่งหรือสองข้อบกพร่อง
และผู้ที่มีข้อบกพร่องที่ ให้คุณได้ในยามดึก
ผู้นั้นเป็นคนที่ การเรียงลำดับของหนีคุณ
แต่หลังจากที่หลับอยู่บนมัน หรือเข้าร่วมเวลาทำการ
หรือถามคำถามออนไลน์เป็น เมื่อคุณได้รับว่าเป้าหมาย 100%
และนั่นเป็นเหตุผลที่เราน้ำหนัก ความถูกต้องมากที่สุด
ออกแบบน้อยและ รูปแบบน้อยกว่าที่
แต่เก็บไว้ในรูปแบบ mind-- อาจจะเป็นวิธีที่ง่ายที่สุด
เหล่านี้จะกัดออก ตามคู่มือสไตล์
>> และตอนนี้รุนแรงมากขึ้น ทราบเกี่ยวกับความซื่อสัตย์ทางวิชาการ
CS50 มีความแตกต่างที่โชคร้ายของ เป็นผู้ผลิตที่ใหญ่ที่สุดของคณะกรรมการโฆษณา
กรณีเกือบทุกปีในอดีต
นี้ไม่ได้เพราะนักเรียนโกงใน CS50 ใด ๆ มากไปกว่าชั้นอื่น ๆ
แต่เป็นเพราะโดยธรรมชาติของการทำงาน ความจริงที่ว่ามันเป็นอิเล็กทรอนิกส์
ความจริงที่ว่าเรามองหามันและ ความจริงที่เราเป็นนักวิทยาศาสตร์คอมพิวเตอร์
ผมสามารถพูดได้ว่าเราเป็นที่น่าเสียดาย ดีมากที่การตรวจสอบมัน
>> ดังนั้นสิ่งนี้หมายความว่าในแง่จริง?
ดังนั้นมันต่อหลักสูตรที่ ปรัชญาของหลักสูตร
จริงๆไม่ต้มลงไปมีเหตุผล
มีเส้นแบ่งระหว่างนี้ การทำงานอย่างใดอย่างหนึ่งของคุณเอง
และได้รับเล็กน้อยของ ความช่วยเหลือที่เหมาะสมจากเพื่อน
และตรงไปตรงมาทำงานที่ของคุณ เพื่อนหรือส่งให้เขาหรือเธอรหัสของคุณ
เพื่อให้เขาหรือเธอสามารถเพียงแค่ ใช้หรือยืมมันออกมาทางด้านขวา
และที่ข้ามเส้น ที่เราวาดในชั้นเรียน
>> ดูหลักสูตร ในท้ายที่สุดสำหรับสาย
ที่เราวาดว่าเป็นที่เหมาะสม และพฤติกรรมที่ไม่มีเหตุผล
แต่จริงๆมันไม่เดือด ลงไปที่สาระสำคัญ
งานของคุณจำเป็นต้อง เป็นของคุณเองในท้ายที่สุด
ตอนนี้กับที่กล่าวว่า มีการแก้ปัญหา
เพราะในขณะที่คุณอาจ imagine-- จากเวลาทำงานและภาพ
และวิดีโอที่เราได้ แสดง far-- จึง CS50
มีความหมายแน่นอนที่จะเป็นความร่วมมือ และในขณะที่สหกรณ์และสังคมเป็น
เท่าที่จะทำได้
ขณะที่การทำงานร่วมกันเป็นอย่างเข้มงวด
>> แต่กับเรื่องนี้กล่าวว่าการแก้ปัญหาที่ ในขณะที่คุณจะเห็นในหลักสูตรที่
ก็คือว่าเมื่อคุณกำลังมีปัญหาบางอย่าง
คุณมีข้อผิดพลาดในรหัสของคุณบางอย่างที่คุณ ไม่สามารถแก้มันก็มีเหตุผลสำหรับคุณ
เพื่อแสดงรหัสของคุณกับคนอื่น
เพื่อนแม้จะอยู่ในระดับเพื่อน นั่งถัดจากคุณที่เวลาทำการ
หรือสมาชิกของทีม
แต่พวกเขาไม่อาจแสดงรหัสของพวกเขาอยู่กับคุณ
>> ในคำอื่น ๆ ตอบคำถามที่คุณ
ฉันจำเป็นต้อง help-- ไม่ได้โอ้นี่คือรหัสของฉัน
ลองดูที่นี้และ ข้อสรุปจากมันสิ่งที่คุณจะ
ตอนนี้แน่นอนมี วิธีที่ชัดเจนที่จะเล่นเกม
ระบบโดยผมจะแสดงให้คุณนี้ รหัสของฉันก่อนที่จะมีคำถาม
คุณแสดงให้ฉันรหัสของคุณของฉัน ก่อนที่จะมีคำถาม
แต่เห็นหลักสูตรอีกครั้งสำหรับ รายละเอียดปลีกย่อยของการที่สายนี้เป็น
>> เพียงแค่ตอนนี้วาดภาพและ ร่วมเป็นโปร่งใสที่สุดเท่าที่ทำได้
ที่เราอยู่ที่ในปีที่ผ่านมา นี้เป็นจำนวนคดีที่คณะกรรมการประกาศ
CS50 ที่ได้มีกว่า ที่ผ่านมาเจ็ดปี
กับ 14 กรณีนี้ฤดูใบไม้ร่วงที่ผ่านมามากที่สุด
ในแง่ของนักเรียนที่เกี่ยวข้องกับ มันเป็น 20 บางคนที่แปลก
ฤดูใบไม้ร่วงที่ผ่านมานี้
มีจุดสูงสุดของ 33 เป็น นักเรียนบางคนปีที่ผ่านมา
หลายคนเป็นที่น่าเสียดาย ที่นี่ไม่ได้อยู่ในมหาวิทยาลัย
>> นักเรียนมีส่วนร่วมเป็นร้อยละของ ชั้นมีอาณาบริเวณในอดีตจาก 0%
5.3% ซึ่งเป็นเพียงที่จะบอกว่า นี้เป็นปีที่ท้าทาย
และต่อท้ายว่าสิ่งที่ เราต้องการที่จะทำคือการสื่อความหมายหนึ่ง
ที่เรา dd-- เพียง FYI-- เปรียบเทียบที่ ความเป็นธรรมให้กับนักเรียนผู้ที่
มีดังต่อไปนี้สายตาม
ที่เราทำในปัจจุบันเปรียบเทียบทั้งหมด ส่งผลต่อการปฏิบัติภารกิจที่ผ่านมาทั้งหมด
จากหลายปีที่ผ่านมา
>> เรารู้ด้วยวิธีการ Google รอบ และหาที่เก็บรหัส
ออนไลน์ฟอรั่มการสนทนา ออนไลน์เว็บไซต์งานออนไลน์
ถ้านักเรียนสามารถค้นหาได้เราสามารถแน่นอน พบว่ามันมากเท่าที่เราเศร้าทำ
ดังนั้นสิ่งที่คุณจะเห็นในหลักสูตร ว่าเป็นข้อเสียใจนี้
ฉันสามารถอย่างแน่นอน ขอขอบคุณและเราทุกคนมี
พนักงานต้องทำแน่นอนเช่น นี้หรือคนนี้ตัวเองเมื่อเวลาผ่านไป
แน่นอนว่าสิ่งที่มันต้องการเมื่อ ชีวิตได้รับในทางเมื่อคุณมี
ดึกบาง deadline-- ไม่เพียง แต่ในชั้นนี้
แต่ another-- เมื่อคุณอยู่ หมดอย่างสมบูรณ์เครียดออก
มีจำนวนมากเกินไป สิ่งอื่น ๆ ที่จะทำ
คุณจะทำในบางจุดใน ชีวิตแน่นอนที่ไม่ดีอาจจะเป็นช่วงปลายเดือน
การตัดสินใจคืน
>> ดังนั้นต่อหลักสูตรที่ มีข้อนี้
เช่นว่าถ้าภายใน 72 ชั่วโมงของการทำ บางคนตัดสินใจไม่ดีคุณเป็นเจ้าของขึ้นไป
และยื่นมือออกไปฉันและ หนึ่งในหัวของหลักสูตร
และเราจะมีการสนทนา
เราจะจัดการกับสิ่งที่ ภายในในความหวัง
มันกลายเป็นของ ขณะที่การเรียนการสอนหรือบทเรียนชีวิต
และไม่ได้สิ่งที่มี เครือข่ายรุนแรงโดยเฉพาะอย่างยิ่ง
ในขณะที่คุณอาจจะเห็นบนชาร์ตเหล่านี้ที่นี่
>> เพื่อให้เป็นน้ำเสียงจริงจังมาก
ขอให้เราหยุดเพียงไม่กี่ วินาทีที่จะทำลายความตึงเครียด
>> [เล่นเพลง]
>> เดวิดเจลัน: ทั้งหมดขวา ดังนั้นวิธีการที่เป็นที่สำหรับทำต่อหรือไม่
กับหัวข้อหลักของวันนี้
คนแรกที่เป็นนามธรรม
อีกประการหนึ่งที่เป็นไปได้ การเป็นตัวแทนของข้อมูลที่ตรงไปตรงมา
เป็นวิธีที่แห้งจริงๆของบอกว่าเราสามารถ ไปเกี่ยวกับการแก้ปัญหาและความคิด
เกี่ยวกับการแก้ปัญหา?
เพื่อให้คุณได้เห็นในรอยขีดข่วนและคุณได้ บางทีอาจจะเห็นแล้วใน PSET1 ด้วย C
ที่คุณไม่สามารถใช้ ฟังก์ชั่นเช่น printf,
ที่คนอื่น ๆ ใน ปีที่ผ่านมาเขียนให้คุณ
นอกจากนี้คุณยังสามารถเขียนฟังก์ชั่นของคุณเอง
>> และแม้ว่าคุณอาจไม่ได้ การกระทำเช่นนี้ใน C และตรงไปตรงมาใน PSET1
คุณไม่ได้จริงๆต้องเขียนของคุณ ฟังก์ชั่นของตัวเองเพราะ problem--
ในขณะที่อาจจะน่ากลัวที่ glance-- แรกคุณจะเห็น
ในท้ายที่สุดสามารถแก้ไขได้ด้วย ไม่ได้ทั้งหมดว่าหลายบรรทัดของรหัส
แต่ด้วยการที่กล่าวว่าในแง่ ของการเขียนฟังก์ชั่นของคุณเอง
ตระหนักดีว่าซีจะให้ ความสามารถนี้
>> ฉันจะไปในรหัสแหล่งที่มาของวันนี้ ซึ่งมีอยู่แล้วออนไลน์
และฉันจะไปข้างหน้าและเปิด ขึ้นโปรแกรมที่เรียกว่า 0.C ฟังก์ชัน
และในการทำงานของศูนย์ เราจะเห็นบางสิ่ง
ในบรรทัดแรก 18 ผ่าน 23 เป็นหน้าที่หลักของฉัน
และตอนนี้ที่เรากำลังเริ่มต้นที่จะอ่าน รหัสที่เราไม่ได้เขียนได้ทันที
แต่ผมเคยเขียนล่วงหน้า หรือว่าคุณอยู่ในปัญหาตั้ง
อาจได้รับมี ถูกเขียนล่วงหน้า
วิธีที่ดีที่จะเริ่มต้น การอ่านรห​​ัสอื่นของใครบางคน
คือการมองหาฟังก์ชั่นหลัก
คิดออกว่ารายการที่ จุดคือการใช้โปรแกรม
แล้วทำตามที่มันมีเหตุผลมาจากที่นั่น
>> ดังนั้นโปรแกรมนี้เห็นได้ชัดพิมพ์ ชื่อของคุณตามด้วยลำไส้ใหญ่
แล้วเราใช้ GetString จากห้องสมุด CS50
ที่จะได้รับสายหรือคำหรือวลี จากผู้ใช้ที่แป้นพิมพ์
แล้วมีนี้ สิ่งตรงนี้ PrintName
>> ตอนนี้ PrintName ไม่ ฟังก์ชั่นที่มาพร้อมกับซี
มันไม่ได้อยู่ใน io.h. มาตรฐาน
มันไม่ได้อยู่ใน CS50.h.
มันค่อนข้างอยู่ในแฟ้มเดียวกัน
ขอให้สังเกตว่าถ้าผมเลื่อนลง สาย bit-- 25 ถึง 27--
มันเป็นเพียงแค่วิธีงามของการแสดงความคิดเห็น รหัสของคุณโดยใช้ดวงดาวและทับ
นี้เป็นหลายสาย แสดงความคิดเห็นและนี้เป็นเพียง
คำอธิบายของฉันในสีฟ้าของ สิ่งที่ฟังก์ชั่นนี้จะ
>> เพราะในสาย 28 ผ่าน 31 ฉันได้เขียนฟังก์ชั่นที่ง่ายสุด
ชื่อที่มีความเป็น PrintName
มันต้องใช้หลายวิธี ข้อโต้แย้งที่คุณจะพูด?
ดังนั้นหนึ่ง argument-- เพราะมีหนึ่ง อาร์กิวเมนต์ที่ระบุไว้ในวงเล็บ
ประเภทของที่เป็นสตริง
ซึ่งก็คือการพูด PrintName ก็เหมือนกล่องสีดำนี้
หรือฟังก์ชั่นที่ใช้เวลา เป็น input สตริง
>> และชื่อของ String ที่ สะดวกจะได้รับชื่อ
ไม่ต, ไม่ได้ไม่มี แต่ชื่อ
ดังนั้นสิ่งที่จะ PrintName ทำอย่างไร
มันง่ายอย่างมีความสุข
เช่นเดียวกับหนึ่งบรรทัดของรหัสสำหรับ printf แต่เห็นได้ชัดว่า
พิมพ์ออก "สวัสดี" ดังนั้นจึง
ที่ดังนั้นจึง มาจากการโต้แย้ง
>> ตอนนี้ไม่ได้เป็นนวัตกรรมมากที่นี่
จริงๆผมได้นำโปรแกรมที่จะทำได้ ได้รับการเขียนกับหนึ่งบรรทัดของรหัส
โดยการใส่นี้ขึ้นที่นี่ และเปลี่ยนไปบางสิ่งบางอย่าง
ที่เกี่ยวข้องกับบางหกหรือเจ็ดหรือเพื่อ บรรทัดของรหัสทุกทางลงที่นี่
>> แต่มันเป็นเรื่องของการฝึกซ้อม หลักการที่รู้จักในฐานะที่เป็นนามธรรม
ชนิดของห่อหุ้มเซลล์แสงอาทิตย์ภายในของใหม่ ฟังก์ชั่นที่มีชื่อและที่ดีกว่า
แต่ชื่อที่แท้จริง กล่าวว่าสิ่งที่มันไม่
ผมหมายถึง printf-- ที่ไม่ บรรยายโดยเฉพาะอย่างยิ่ง
ถ้าผมต้องการที่จะสร้าง ชิ้นส่วนปริศนาหรือถ้าฉัน
ต้องการสร้างฟังก์ชั่น ที่พิมพ์ชื่อของใครบางคน
ความงามของการทำเช่นนี้ คือว่าผมสามารถจริง
ให้ฟังก์ชั่นที่ชื่อ ที่อธิบายถึงสิ่งที่มันไม่
>> ตอนนี้จะใช้เวลาในการป้อนข้อมูลที่ ผมเคยเรียกว่าพลชื่อ
แต่ก็เป็นคำอธิบายที่เยี่ยมยอด แทนที่จะเป็นน้อยมาก
ทั่วไปเช่นเอสและ เป็นโมฆะสำหรับตอนนี้ก็หมายความว่า
ว่าการทำงานนี้ไม่ได้ มือฉันกลับอะไร
มันไม่เหมือน GetString ที่ แท้จริงมือฉันกลับสตริง
เหมือนที่เราทำกับชิ้นส่วนของกระดาษ กับเพื่อนร่วมชั้นของคุณเมื่อสัปดาห์ที่แล้ว
แต่มันก็มีผลข้างเคียง
มันพิมพ์อะไรบางอย่างไปยังหน้าจอ
>> ดังนั้น ณ สิ้นวันถ้าฉัน จะทำให้การทำงานของ-0, ./function-0,
เราจะเห็นว่ามันถามเพื่อนามของเรา
ฉันพิมพ์เดวิดและประเภทออกจากชื่อของฉัน
ถ้าฉันทำมันอีกครั้งกับร็อบ, มันจะบอกว่า "สวัสดีร็อบ".
ดังนั้นความคิดที่เรียบง่าย แต่บางทีอาจจะ คาดการณ์จากนี้จิตใจ
ว่าโปรแกรมของคุณได้รับ เล็ก ๆ น้อย ๆ ที่ซับซ้อนมากขึ้น
และคุณต้องการที่จะเขียนก้อน รหัสและสายที่ code-- วิงวอน
code-- โดยอธิบายว่า ชื่อเหมือน PrintName,
C จะทำให้เราได้ความสามารถนี้
>> นี่เป็นอีกหนึ่งตัวอย่างง่ายๆคือ
ตัวอย่างเช่นถ้าผมเปิดขึ้น ยื่นตั้งแต่วันนี้เรียกว่า return.c,
สังเกตเห็นสิ่งที่ฉันได้ทำที่นี่
ส่วนใหญ่หน้าที่หลักนี้ printf
ครั้งแรกที่ผมเริ่มต้นโดยพล เรียกว่าตัวแปร x จำนวน 2
จากนั้นผมก็พิมพ์ออกมา "x อยู่ในขณะนี้ % i "ผ่านในค่าของ x
ดังนั้นฉันแค่พูดในสิ่งที่มันเป็น
>> ตอนนี้ฉันเพียงอย่างกล้าหาญ อ้างกับ printf
ฉันกำลัง cubing ค่า x ที่และฉัน การทำเช่นนั้นโดยการเรียกฟังก์ชั่น
เรียกว่าผ่านก้อน นิ้ว x เป็นอาร์กิวเมนต์ที่
แล้วบันทึกเอาท์พุท ในตัวแปรตัวเอง x
ดังนั้นฉัน clobbering ค่าของ x
ฉันเอาชนะ ค่าของ x กับสิ่งที่
ผลของการเรียก ฟังก์ชั่นนี้เป็นก้อน
แล้วฉันเพิ่งพิมพ์ออกมาบางส่วน สิ่งปุยที่นี่บอกว่าสิ่งที่ผมทำ
>> ดังนั้นสิ่งที่เป็นก้อนแล้ว?
สังเกตเห็นสิ่งที่เป็นพื้นฐาน ที่แตกต่างกันที่นี่
ฉันได้รับฟังก์ชั่น ชื่อเหมือนก่อน
ผมได้ระบุชื่อสำหรับอาร์กิวเมนต์
เวลานี้ก็เรียกว่า n แทนชื่อ แต่ผมจะเรียกมันว่าอะไรที่ฉันต้องการ
แต่นี้เป็นที่แตกต่างกัน
สิ่งที่อยู่ทางซ้ายมือนี้
ก่อนหน้านี้มันเป็นสิ่งที่คำหลัก
เด็กชาย
ตอนนี้ก็เห็นได้ชัดว่า int
>> ดังนั้นสิ่งที่อาจจะนำมาใช้?
ขณะที่หมายเป็นโมฆะการเรียงลำดับของ ความว่างเปล่าและนั่นก็คือกรณีที่
PrintName กลับไม่มีอะไร
มันทำอะไรบางอย่าง แต่ มันก็ไม่ได้มือฉันกลับ
สิ่งที่ฉันสามารถวางบน ด้านซ้ายมือของเครื่องหมายเท่ากับ
เหมือนที่ผมเคยทำที่นี่ในบรรทัด 22
>> ดังนั้นถ้าผมบอกว่าเป็นสายที่ 30 สิ่งที่อาจหมายถึง
เกี่ยวกับสิ่งที่ก้อนไม่สำหรับฉันหรือไม่
ใช่?
มันกลับจำนวนเต็ม
ดังนั้นมันมือฉันกลับสำหรับ เช่นชิ้นส่วนของกระดาษ
ที่มันได้เขียนคำตอบ
2 คีบหรือคีบ 3 หรือ 4 cubed-- สิ่งที่ฉันผ่านไปใน
และวิธีการที่ฉันไม่ดำเนินการนี​​้?
ดีเพียงครั้ง n n n ครั้ง เป็นวิธีการที่ผมอาจยกกำลังมูลค่า
ดังนั้นอีกครั้งง่ายสุด ความคิด แต่ชี้
ตอนนี้วิธีการที่เราสามารถเขียนฟังก์ชั่น ที่จริงเรากลับมี
ค่าที่อาจเป็นที่สนใจ
>> ลองดูที่ตัวอย่างหนึ่งที่ผ่านมา ที่นี่เรียกว่าฟังก์ชั่นหนึ่ง
ในตัวอย่างนี้ก็จะเริ่ม ที่จะได้รับน่าสนใจมากขึ้น
ดังนั้นในการทำงานอย่างใดอย่างหนึ่งนี้ แจ้งให้ทราบล่วงหน้า program-- ที่สุด
เรียกฟังก์ชันที่เรียกว่า GetPositiveInt
GetPositiveInt ไม่ ฟังก์ชั่นในห้องสมุด CS50,
แต่เราตัดสินใจว่าเรา ต้องการให้มีอยู่
>> ดังนั้นหากเราเลื่อนลงต่อไปในแฟ้ม แจ้งให้ทราบว่าผมไปเกี่ยวกับการใช้
ได้รับ int บวกและฉัน บอกว่ามันน่าสนใจมากขึ้น
เพราะนี่คือที่ดี จำนวนบรรทัดของรหัส
มันไม่ใช่แค่โง่ โปรแกรมของเล่นเล็ก ๆ น้อย ๆ
มันเป็นจริงมีการตรวจสอบข้อผิดพลาดบาง และการทำสิ่งที่มีประโยชน์มากขึ้น
>> ดังนั้นหากคุณไม่เคยเห็นคำแนะนำแบบ วิดีโอที่เราได้ฝังตัวอยู่ใน PSET1,
รู้ว่านี้เป็นชนิดของ วงใน C ที่คล้ายกันในจิตวิญญาณ
กับชนิดของสิ่งที่สามารถทำรอยขีดข่วน
และทำกล่าวว่าทำเช่นนี้
พิมพ์ออกมา
แล้วไปข้างหน้าและได้รับ n-- ได้รับ int และเก็บไว้ใน n,
และให้ทำเช่นนี้อีกครั้งและอีกครั้งและ อีกครั้งตราบใดที่ n คือน้อยกว่าหนึ่ง
>> ดังนั้น n เป็นไปได้น้อยกว่าหนึ่ง แต่ถ้ามนุษย์ไม่ให้ความร่วมมือ
ถ้าเขาหรือเธอจะพิมพ์ ใน 0 หรือ -1 หรือ -50,
วงนี้เป็นไปเพื่อให้ ดำเนินการอีกครั้งและอีกครั้ง
และในที่สุดสังเกตเห็นฉัน เพียงแค่ส่งกลับค่า
ดังนั้นตอนนี้เรามีการทำงาน ที่จะได้รับความสุข
ถ้า CS50 จะใช้ใน CS50.h และ CS50.c สำหรับคุณ
แต่ที่นี่เราสามารถทำได้ตอนนี้ ดำเนินการนี​​้เอง
>> แต่ทั้งสองความคิดเห็นเกี่ยวกับรายละเอียดบางอย่างที่สำคัญ
One-- ทำไมฉันประกาศ int n คุณคิดว่าในบรรทัด 29
แทนที่จะเป็นเพียงแค่การทำ ที่นี่ซึ่งเป็น
สอดคล้องกับ สิ่งที่เราทำเมื่อสัปดาห์ที่แล้ว?
ใช่?
ความคิดที่ดี
ดังนั้นถ้าเราจะใส่มัน ที่นี่ก็เหมือนเรา
ให้ประกาศว่ามันอีกครั้งและอีกครั้ง
ว่าในตัวของมันเองเป็น ไม่ได้มีปัญหาต่อ se
เพราะเราจะต้อง ค่าครั้งเดียวแล้ว
เรากำลังจะได้รับหนึ่งใหม่อยู่แล้ว
แต่เป็นความคิดที่ดี
ใช่?
>> ปิด
เพราะฉันได้ประกาศเมื่อวันที่ n สาย 29 ที่อยู่นอกวง
ก็สามารถเข้าถึงได้ตลอด ฟังก์ชั่นทั้งหมดนี้
ไม่ได้ฟังก์ชั่นอื่น ๆ เพราะ n คือยังด้านในของโค้งเหล่านี้
วงเล็บที่นี่
So-- แน่ใจว่า
>> ว่า
ดังนั้นนี่คือมากยิ่งขึ้นไปยังจุดที่
ถ้าเราแทนการประกาศ n ที่นี่ในสาย 32,
มันเป็นปัญหาเพราะเดา ที่อื่นฉันต้องการที่จะเข้าถึงมันได้หรือไม่
On line 34 และ กฎง่ายๆของหัวแม่มือคือ
ว่าคุณสามารถใช้ตัวแปร ภายในวงเล็บปีกกาล่าสุด
ที่คุณประกาศว่า
>> แต่น่าเสียดายที่สาย 34 เป็นหนึ่งในสายสายเกินไป
เพราะผมเคยปิดไปแล้ว วงเล็บปีกกาในบรรทัด 33
ที่สอดคล้องกับ วงเล็บปีกกาในบรรทัด 30
และดังนั้นนี่คือวิธีที่บอก ที่ int ตัวแปรนี้จะกำหนดขอบเขต,
จึงจะพูดถึงเฉพาะภายใน ของวงเล็บปีกกาที่
มันก็ไม่ได้อยู่ที่ด้านนอกของพวกเขา
>> ดังนั้นแน่นอนถ้าผมทำเช่นนี้ ที่ไม่ถูกต้องให้ฉันบันทึกรหัส
เป็นค่าเท่าใดเขียนไม่ถูกต้อง
ให้ฉันไปข้างหน้าและจะทำให้ ฟังก์ชั่น 1 และข้อผิดพลาด notice--
การใช้ตัวระบุ n ไม่ได้ประกาศ ในบรรทัดที่ 35 ซึ่งเป็นที่นี่
และถ้าเราเลื่อนขึ้น ต่อไปอีกคนหนึ่ง
ใช้ไม่ได้ประกาศ n ตัวระบุในบรรทัด 34
>> ดังนั้นคอมไพเลอร์, เสียงดังกราว, จะสังเกตเห็นว่ามันเป็นเพียงแค่
ไม่ได้อยู่แม้ว่า เห็นได้ชัดว่ามันมีสายตา
ดังนั้นการแก้ไขที่ง่ายคือการประกาศว่ามี
>> ตอนนี้ให้ฉันเลื่อนไป ด้านบนของไฟล์
สิ่งที่กระโดดออกที่คุณเป็น ความแตกต่างกันเพียงเล็กน้อย
จากสิ่งที่เรามองที่เมื่อสัปดาห์ที่แล้ว?
ไม่เพียง แต่ฉันจะมีชื่อไม่เพียง แต่ ฉันมีบางคมชัดรวมถึงการขึ้นด้านบน
ฉันมีสิ่งที่ฉัน โทรต้นแบบ
ตอนนี้ที่มีลักษณะชะมัดคล้ายกับสิ่งที่ เราเพิ่งเห็นช่วงเวลาที่ผ่านมาในบรรทัด 27
>> จึงขอสรุปจากที่แตกต่างกัน เกิดข้อผิดพลาดว่าทำไมฉันได้กระทำนี้
ให้ฉันไปข้างหน้าและ ลบบรรทัดเหล่านี้มี
และเพื่อให้เรารู้อะไรเกี่ยวกับต้นแบบ
remake ไฟล์นี้
ทำให้ฟังก์ชั่นหนึ่ง
และตอนนี้ด่าสี่ข้อผิดพลาด
ให้เลื่อนขึ้นไปเป็นคนแรก
>> ประกาศโดยนัยของการทำงาน ได้รับ int ในเชิงบวกคือไม่ถูกต้องใน C99
C99 ก็หมายความ 1999 รุ่นของภาษา
C ซึ่งเป็นสิ่งที่เรากำลังใช้แน่นอน
ดังนั้นสิ่งนี้หมายความว่าอย่างไร
ดี C-- และอื่น ๆ โดยเฉพาะ C compilers-- เป็นโปรแกรมใบ้สวย
พวกเขารู้ว่าสิ่งที่คุณได้ บอกพวกเขาและที่
ใจจริงจากสัปดาห์ก่อน
>> ปัญหาคือว่าถ้าฉันไป เกี่ยวกับการใช้ชื่อขึ้นที่นี่
และที่ผมเรียกฟังก์ชันที่เรียกว่า GetPositiveInt ที่นี่ในบรรทัด 20
ฟังก์ชันที่ในทางเทคนิคไม่ได้ คอมไพเลอร์ที่มีอยู่จนเห็นเส้น 27
แต่น่าเสียดายที่คอมไพเลอร์เป็น ทำสิ่งที่ด้านบนลงซ้ายขวา
เพราะมันยังไม่เห็น การดำเนินการของ GetPositiveInt,
แต่ก็เห็นคุณพยายาม ที่จะใช้ขึ้นที่นี่
ก็แค่ไป bail-- ตะโกนใส่ คุณมีข้อผิดพลาด message-- บางที
ที่เป็นความลับและไม่จริง คอมไพล์แฟ้ม
>> ดังนั้นจึงเรียกว่าต้นแบบขึ้น ที่นี่เป็นที่ยอมรับซ้ำซ้อน
ตัวอักษรที่ผมไปลงที่นี่และผมคัดลอก และวางนี้และฉันใส่มันขึ้นที่นี่
เป็นโมฆะจะเป็นที่เหมาะสมมากขึ้นเพื่อเราจะ ตัวอักษรคัดลอกและวางในเวลานี้
ตัวอักษรที่ผมคัดลอกและวางมัน
จริงๆเป็นเช่นเดียวกับเศษขนมปัง
>> เบาะแสเพียงเล็กน้อยที่จะคอมไพเลอร์
ผมไม่ทราบว่าสิ่งนี้จะ แต่ผมสัญญากับคุณ
ว่ามันจะมีอยู่ในที่สุด
และที่ว่าทำไมนี้ line-- ใน สาย 16-- จบลงด้วยอัฒภาค
มันเป็นที่ซ้ำซ้อนจากการออกแบบ
ใช่?
>> หากคุณไม่ได้เชื่อมโยงห้องสมุดของคุณ ยกกำลังโอ้คำถามที่ดี
คมชัดรวมถึงการรวมไฟล์ส่วนหัว
ต้อง be-- ควรเกือบ มักจะเป็นที่ส่วนบนสุด
ของไฟล์สำหรับ similar-- สำหรับ ว่าด้วยเหตุผลเดียวกันใช่
เพราะในมาตรฐาน io.h เป็นอักษรเส้น
เช่นนี้ แต่ด้วย printf คำและ มีการขัดแย้งและประเภทผลตอบแทนของมัน
และอื่น ๆ โดยการทำเช่นคมมีขึ้น ที่นี่สิ่งที่คุณกำลังทำอย่างแท้จริง
มีการคัดลอกและวางเนื้อหา ของคนอื่นเขียนขึ้นด้านบน
จึง cluing รหัสของคุณใน ความจริงที่ว่าฟังก์ชั่นที่ทำอยู่
ใช่?
>> อย่างแน่นอน
ดังนั้นอย่างฉลาดและถูกต้อง การแก้ปัญหาจะเป็นคุณรู้อะไรไหม
ผมไม่ทราบว่าสิ่งที่ ต้นแบบเป็น แต่ฉันรู้ว่า
ถ้าผมเข้าใจว่าซีเป็นเพียงแค่ ใบ้และ rethinks บนลงล่าง
ดีขอให้สิ่งที่มันต้องการ
ลองตัดรหัสที่วางมันขึ้นมา ด้านบนและตอนนี้ผลักดันหลักลงมาด้านล่าง
นี้ก็จะแก้ปัญหา
>> แต่คุณได้อย่างง่ายดายมากอาจจะเกิดขึ้นกับ สถานการณ์ที่ต้องเรียก B,
และอาจ B เรียกกลับไป A. นี้ เป็นสิ่งที่เรียกว่าการเรียกซ้ำ
และเราจะกลับมาที่
และมันอาจจะหรืออาจจะไม่ดี สิ่งที่ แต่คุณสามารถแน่นอน
ทำลายการแก้ปัญหานี้
>> และยิ่งกว่านั้นผมจะ อ้าง stylistically,
โดยเฉพาะอย่างยิ่งเมื่อโปรแกรมของคุณ กลายเป็นนี้ยาวและระยะยาวนี้
มันเป็นเพียงสิ่งอำนวยความสะดวกสุด ที่จะนำหลักที่ด้านบน
เพราะมันเป็นสิ่งที่มากที่สุด โปรแกรมเมอร์จะไปเกี่ยวกับการดูแล
และดังนั้นจึงเป็นเรื่องที่ทำความสะอาดน้อย เนื้อหาที่จะทำแบบ
ฉันเดิมไม่ได้ กับต้นแบบได้
แม้ว่ามันจะดูเล็กน้อย ซ้ำซ้อนได้อย่างรวดเร็วก่อน
ใช่?
ขออภัยคุณสามารถพูดได้ดัง?
>> หากคุณสลับตำแหน่งของ การดำเนินงานและต้นแบบ?
เพื่อให้เป็นคำถามที่ดี
ถ้าคุณอีกครั้งลงประกาศนี้ ที่นี่เรามาดูสิ่งที่เกิดขึ้น
ดังนั้นถ้าผมใส่ลงไปนี้ ที่นี่คุณกำลังจะบอกว่า
โอ้ขอโทษ
ดัง?
ยิ่งดัง
โอ้คำถามที่ดี
มันจะทำให้การทำงานหรือไม่
คุณจะรู้ว่าหลังจากที่ทุกปีเหล่านี้ฉัน ไม่เคยนำต้นแบบนั้นไม่นาน
จึงขอให้ทำหน้าที่-1 หลังจากทำที่
>> [บ่น]
เดวิดเจลัน: โอ้รอ
เรายังคงต้องใส่ทุกอย่างขึ้นด้านบน
จึงขอทำเช่นนี้ขึ้นที่นี่ถ้าฉัน การทำความเข้าใจคำถามของคุณได้อย่างถูกต้อง
ฉันวางทุกอย่างรวมถึง ต้นแบบดังกล่าวข้างต้นหลัก
แต่ฉันวางต้นแบบ ดังต่อไปนี้การดำเนินการ
>> ดังนั้นถ้าผมทำให้ใครคนหนึ่ง, ฉันได้รับ กลับ error-- ที่ไม่ได้ใช้ตัวแปร n
โอ้มี
ขอบคุณ
ลองมาดูกันเรากำจัดนี้
นั่นเป็นข้อผิดพลาดที่แตกต่าง จึงขอไม่สนใจว่า
ขออย่างรวดเร็วจริงๆ remake นี้
>> ตกลงจึงไม่โต้แย้งข้อมูล โดยใช้รูปแบบสตริง
n-- โอ้ว่าเป็นเพราะ ฉันเปลี่ยนไปเหล่านี้ที่นี่
สิทธิทั้งหมดที่เรารู้ว่าคำตอบ จะยา่สิทธิทั้งหมดที่นี่เราไป
Ah ขอบคุณสำหรับบวก
สิทธิทั้งหมดฉันจะแก้ไขรหัสนี้ after-- ไม่สนใจปัญหานี้โดยเฉพาะอย่างยิ่ง
ตั้งแต่นี้ was-- การทำงานคือคำตอบ
>> ดังนั้นจึงไม่ได้เขียนทับ สิ่งที่คุณได้ทำเพียงแค่
ฉันสงสัยว่าคอมไพเลอร์ ถูกเขียนในลักษณะ
ว่ามันไม่สนใจต้นแบบของคุณ เพราะร่างกายเพื่อที่จะพูด
ฟังก์ชั่นที่มีอยู่แล้ว การดำเนินการที่สูงขึ้น
ฉันจะต้องไปปรึกษาจริง คู่มือของคอมไพเลอร์
ที่จะเข้าใจว่ามีที่อื่น ๆ ความหมาย แต่อย่างรวดเร็วก่อน
เพียงแค่พยายามและการทดลอง ดูเหมือนว่าจะไม่มีผลกระทบ
คำถามที่ดี
>> ดังนั้นขอให้เคลื่อนไปข้างหน้าตอนนี้ย้าย ห่างจากผลข้างเคียงที่
มีฟังก์ชั่นที่ทำสิ่งที่ชอบ สายตาบนหน้าจอด้วย printf,
แต่ไม่คืนค่า
และฟังก์ชั่นที่มีผลตอบแทน ค่าเหมือนเราเพิ่งเห็นไม่กี่ของ
เราได้เห็นความคิดของขอบเขตนี้ และเราจะเห็นนี้อีกครั้งและอีกครั้ง
แต่ตอนนี้อีกครั้ง ใช้กฎของหัวแม่มือ
ตัวแปรที่สามารถใช้งานได้ ภายในเปิดมากที่สุดเมื่อเร็ว ๆ นี้
และวงเล็บปีกกาปิดในขณะที่เรา เห็นในตัวอย่างนั้น
>> และในขณะที่คุณชี้ให้เห็น มี ability--
คุณสามารถแก้ปัญหาบางส่วนของปัญหาเหล​​่านี้ โดยการใส่ตัวแปรทั่วโลก
ที่ส่วนบนสุดของไฟล์
แต่ในเกือบทุกกรณี เราจะขมวดคิ้วนั้น
และแน่นอนไม่ได้ไป เป็นวิธีแก้ปัญหาสำหรับตอนนี้ที่
ดังนั้นสำหรับตอนนี้ Takeaway คือ ตัวแปรที่มีความเชื่อในเรื่องของขอบเขตนี้
>> แต่ตอนนี้ให้ดูที่อื่น วิธีแห้งของจริงที่กำลังมองหา
ที่บางส่วนที่น่าสนใจสวย รายละเอียดการปฏิบัติ
วิธีการที่เราอาจจะแสดงข้อมูล
และเราดูแล้วที่นี้ ในสัปดาห์แรกของการเรียน
กำลังมองหาที่ไบนารีและ เตือนตัวเองของทศนิยม
>> แต่จำจากสัปดาห์ก่อนที่ซีมี ชนิดข้อมูลที่แตกต่างกันและที่อัดแน่นมากขึ้น
แต่คนที่มีประโยชน์มากที่สุด สำหรับตอนนี้อาจจะมีเหล่านี้
ถ่านหรือตัวละครที่เกิดขึ้น จะเป็นหนึ่งไบต์หรือแปดบิตรวม
และนั่นคือสิ่งที่จะบอกว่าขนาด ของถ่านเป็นเพียงหนึ่งไบต์
ไบต์แปดบิตดังนั้นนี้หมายความว่า เราสามารถเป็นตัวแทนของตัวละครหลายวิธี
วิธีจดหมายจำนวนมากหรือ สัญลักษณ์บนแป้นพิมพ์
ถ้าเรามีหนึ่งไบต์หรือแปดบิต
คิดว่ากลับไปเมื่อสัปดาห์ที่ศูนย์
หากคุณมีแปดบิต กี่ค่าทั้งหมด
คุณสามารถแสดงกับ รูปแบบของศูนย์และคน?
One-- มากกว่านั้น
ดังนั้น 256 ทั้งหมดถ้าคุณ เริ่มนับจากศูนย์
ดังนั้นถ้าคุณมีแปด bits-- ดังนั้นหากเรา มีหลอดไฟไบนารีของเราขึ้นที่นี่อีกครั้ง
เราสามารถเปิดหลอดไฟที่อยู่บน และปิดในใด ๆ ของรูปแบบที่ไม่ซ้ำกัน 256
>> ตอนนี้เป็นบิตที่มีปัญหา
ไม่มากสำหรับภาษาอังกฤษและ ภาษาโรแมนติก แต่แน่นอน
เมื่อคุณแนะนำสำหรับ เช่นภาษาเอเชียที่
มีสัญลักษณ์มากกว่าเช่น 26 ตัวอักษรของตัวอักษร
เราจริงอาจต้อง มากกว่าหนึ่งไบต์
และโชคดีที่ใน ปีที่ผ่านมามีสังคม
มาตรฐานอื่น ๆ ที่นำมาใช้ที่ใช้ มากกว่าหนึ่งไบต์ต่อค่าใช้จ่าย
>> แต่ตอนนี้ใน C เริ่มต้น เป็นเพียงหนึ่งไบต์หรือแปดบิต
จำนวนเต็มขณะที่สี่ ไบต์หรือที่เรียกว่า 32 บิต
ซึ่งหมายความว่าสิ่งที่ใหญ่ที่สุดที่เป็นไปได้ ตัวเลขที่เราสามารถเป็นตัวแทนที่มี int
เห็นได้ชัด?
กับพันล้าน
ดังนั้นจึงเป็นสี่พันล้านให้หรือใช้เวลา
2 ถึงอำนาจ 32 ถ้าเรา ถือว่าไม่มีตัวเลขที่ติดลบ
และเพียงแค่ใช้บวกทั้งหมด ตัวเลขก็สี่พันล้าน
ให้หรือใช้เวลาเพื่อ
ลอยขณะที่เป็นชนิดที่แตกต่างกัน ชนิดข้อมูลในซีก็ยังคงตัวเลข
แต่ก็เป็นจำนวนจริง
สิ่งที่มีจุดทศนิยม
และปรากฎว่า ซียังใช้สี่ไบต์
เพื่อเป็นตัวแทนของลอยค่าจุด
>> แต่น่าเสียดายที่ว่าหลายลอย ค่าจุดที่มีในโลก?
วิธีการหลายตัวเลขที่แท้จริงจะมี?
มีไม่มีที่สิ้นสุด จำนวนและสำหรับเรื่องที่
มีจำนวนอนันต์ของจำนวนเต็ม
ดังนั้นเราจึงอยู่แล้วชนิดของ ขุดหลุมตัวเองที่นี่
โดยเห็นได้ชัดใน computers-- ที่ โปรแกรมน้อยเขียน C ใน them--
สามารถนับสูงที่สุดเท่าที่ สี่พันล้านให้หรือใช้เวลา
และลอยค่าจุด เท่านั้นที่สามารถเห็นได้ชัด
มีบางจำนวน จำกัด ของความแม่นยำ
เพียงตัวเลขจำนวนมากดังนั้นหลังจากที่ จุดทศนิยมของพวกเขา
>> เพราะแน่นอนถ้า คุณมีเพียง 32 บิต
ผมไม่ทราบว่าวิธีการที่เรากำลังจะไปเกี่ยวกับ ที่เป็นตัวแทนของ numbers-- จริงอาจจะ
กับประเภทที่แตกต่างกันของรูปแบบ
แต่มีแน่นอนแน่นอน จำนวนของรูปแบบดังกล่าว
เพื่อให้ที่นี่เช่นนี้เป็นปัญหา
>> ตอนนี้เราสามารถหลีกเลี่ยงปัญหาเล็กน้อย
ถ้าคุณไม่ได้ใช้ลอย, คุณสามารถใช้คู่
ใน C ซึ่งจะช่วยให้คุณแปดไบต์ซึ่ง เป็นรูปแบบที่เป็นไปได้ทางขึ้นของศูนย์
และคนที่
แต่ก็ยังคง จำกัด ซึ่งเป็นไป จะเป็นปัญหาถ้าคุณเขียนซอฟแวร์
สำหรับกราฟิกหรือแฟนซี สูตรทางคณิตศาสตร์
จริงเพื่อให้คุณอาจต้องการ ที่จะนับได้ว่ามีขนาดใหญ่กว่า
ยาว long-- โง่ named-- ยังเป็นแปดไบต์หรือ 64 บิต
และนี่คือสองเท่า int, และจะเป็นค่าจำนวนเต็มยาว
>> fact-- สนุกถ้า int สี่ไบต์ นานแค่ไหนที่เป็นเวลานานใน C มัก?
ยังสี่ไบต์ แต่ นานแปดไบต์
และนี่คือเหตุผลทางประวัติศาสตร์
>> แต่ Takeaway ขณะนี้ เป็นเพียงข้อมูลที่มี
ที่จะเป็นตัวแทนใน computer-- ที่ อุปกรณ์ทางกายภาพที่มีกระแสไฟฟ้า
ก็มักจะขับรถ ศูนย์เหล่านั้นและ ones--
ที่มีจำนวน จำกัด ของความแม่นยำ
ดังนั้นสิ่งที่เป็นปัญหาแล้ว?
>> ดีมีปัญหา ของล้นจำนวนเต็ม
ไม่เพียง แต่ใน C แต่ใน คอมพิวเตอร์โดยทั่วไป
ยกตัวอย่างเช่นว่านี้ เป็นไบต์มูลค่า bit--
ดังนั้นถ้าเป็นแปด bit-- ทั้งหมด ซึ่งเป็นหมายเลขหนึ่ง
จำนวนนี่คืออะไร แทนถ้าเราสมมติ
มันเป็นค่าบวกทั้งหมดในไบนารี?
>> 255, และมันก็ไม่ 256 เพราะ ศูนย์เป็นจำนวนมากที่สุด
ดังนั้น 255 เป็นสูงสุด หนึ่ง แต่ปัญหา
สมมุติว่าผมต้องการที่จะ เพิ่มตัวแปรนี้ว่า
คือการใช้แปดบิตรวม ถ้าผมต้องการที่จะเพิ่มขึ้นนั้น
>> ดีเร็วที่สุดเท่าที่ฉันจะเพิ่ม หนึ่งทั้งหมดของคนเหล่านี้
คุณอาจจะสามารถจินตนาการ visually-- เพียง เช่นการดำเนินการอย่างใดอย่างหนึ่งโดยใช้ decimals--
บางสิ่งบางอย่างที่เกิดขึ้นจะไหลไปทางซ้าย
และแน่นอนถ้าฉันเพิ่มหมายเลข หนึ่งในการนี​​้สิ่งที่เกิดขึ้นในไบนารี
คือมันล้นกลับไปที่ศูนย์
>> ดังนั้นหากคุณเพียง use-- ไม่ int, แต่ byte เดียวที่จะนับเลข
ในโปรแกรมโดย default-- เร็วที่สุดเท่าที่ คุณได้รับ 250, 251, 252, 253, 254,
255-- 0 มาหลังจาก 255, ซึ่งอาจไม่ใช่สิ่งที่
ผู้ใช้จะคาดหวังว่า
>> ตอนนี้ในขณะเดียวกันในโลกลอยจุด คุณยังมีปัญหาที่คล้ายกัน
ไม่มากที่มี number-- ที่ใหญ่ที่สุด ถึงแม้ว่ามันจะยังคงเป็นปัญหา
แต่ด้วยจำนวนของความแม่นยำ ที่คุณสามารถเป็นตัวแทนของ
ดังนั้นลองมาดูที่ตัวอย่างนี้ ที่นี่ก็มาจากวันนี้ code-- แหล่งที่มา
ลอย 0.c
>> และสังเกตเห็นมันสุด โปรแกรมใช้งานง่ายที่
เห็นได้ชัดว่าควรจะพิมพ์ออกมาสิ่งที่มีค่า?
สิ่งที่คุณเดิมพันนี้จะพิมพ์ แม้ว่าจะมีบิตของไวยากรณ์ใหม่
ที่นี่?
เพื่อหวังว่า 0.1
เพื่อให้เทียบเท่ากับหนึ่งในสิบ เพราะฉันทำ 1 หารด้วย 10
ฉันเก็บคำตอบ ในตัวแปรที่เรียกว่าฉ
ตัวแปรที่เป็นประเภทลอยซึ่ง เป็นคำที่ฉันเพิ่งเสนออยู่
>> เราไม่เคยเห็นแบบนี้มาก่อน แต่ นี้เป็นชนิดของวิธีที่ประณีตใน printf
เพื่อระบุตัวเลขจำนวนที่คุณ ต้องการที่จะเห็นหลังจุดทศนิยม
ดังนั้นสัญกรณ์นี้ก็หมายความว่า ที่นี่เป็นตัวยึด
มันสำหรับจุดลอย คุณค่าและโอ้โดยวิธีการที่
แสดงมันมีจุดทศนิยมด้วย จำนวนหนึ่งหลังจุดทศนิยม
เพื่อให้เป็นจำนวน ของตัวเลขที่มีนัยสำคัญ
จึงจะพูดที่คุณอาจต้องการ
>> เพื่อให้ฉันไปข้างหน้าและทำ ทำให้ลอย-0, ./float-0,
และเห็นได้ชัด 1 หารด้วย 10 เป็น 0.0
ตอนนี้ทำไมนี้คืออะไร
>> ดีอีกครั้งคอมพิวเตอร์คือการ ฉันอย่างแท้จริงและผมได้เขียน 1
และฉันเขียน 10 และใช้การคาดเดาสิ่งที่ เป็นชนิดข้อมูลที่สันนิษฐานสำหรับทั้งสอง
ค่า?
int มันเป็นในทางเทคนิค บางสิ่งบางอย่างที่แตกต่างกันเพียงเล็กน้อย
มันมักจะนาน แต่มันก็เป็น ในที่สุดค่าหนึ่ง
ไม่ใช่ค่าจุดลอย
>> ซึ่งก็คือการบอกว่าถ้านี้ เป็น int และนี่คือ int,
ปัญหาคือว่าคอมพิวเตอร์ ไม่ได้มีความสามารถใน
ที่จะได้เก็บจุดทศนิยมว่า
ดังนั้นเมื่อคุณทำ 1 หาร 10 โดยใช้จำนวนเต็ม
ทั้งเศษและ ส่วนคำตอบที่ควรจะเป็น 0.1
แต่ computer-- เพราะ เหล่านี้จะ integers--
ไม่ทราบว่าจะทำอย่างไรกับ 0.1
>> ดังนั้นสิ่งที่มันชัดเจนทำอะไร
มันเป็นเพียงแค่การขว้างปามันออกไป และสิ่งที่ฉันเห็นในที่สุด
เป็น 0.0 เท่านั้นเพราะผมยืนยันว่า printf แสดงให้ฉันจุดทศนิยมหนึ่ง
แต่ปัญหาก็คือว่าถ้าคุณ แบ่งจำนวนเต็มโดยจำนวนเต็ม
คุณจะ get-- ตามคำนิยาม ของ C-- จำนวนเต็ม
และก็จะไม่ทำ สิ่งที่ดีและสะดวกสบาย
เหมือนรอบมันขึ้นไป ที่ใกล้เคียงที่สุดอย่างใดอย่างหนึ่งขึ้นหรือลง
มันจะตัดทอน ทุกอย่างหลังจากทศนิยม
>> ดังนั้นเพียงแค่สัญชาตญาณ สิ่งที่อาจจะแก้ไขได้หรือไม่
สิ่งที่แก้ไขที่ง่ายที่สุดที่นี่?
ใช่?
ว่า
ทำไมเราไม่เพียงแค่รักษาเหล่านี้เป็น ลอยค่าจุดได้อย่างมีประสิทธิภาพ
ทำให้พวกเขากลายลอยหรือคู่ผสม
และตอนนี้ถ้าผมจะทำให้ลอย-0, หรือถ้าผมรวบรวมลอย-1,
ซึ่งเป็นเหมือนกับ สิ่งที่ถูกนำเสนอเพียงแค่
และตอนนี้ฉันไม่ลอย-0, ตอนนี้ฉันได้รับ 0.1 ของฉัน
>> ขณะนี้เป็นที่น่าตื่นตาตื่นใจ
แต่ตอนนี้ผมกำลังจะไปทำ บางสิ่งบางอย่างที่แตกต่างกันเพียงเล็กน้อย
ฉันอยากจะเห็นสิ่งที่เป็นจริง ที่เกิดขึ้นภายใต้กระโปรงหน้ารถ
และฉันจะพิมพ์นี้ ออกไป 28 ตำแหน่งทศนิยม
ผมอยากจะเห็นจริงๆ 0.1000-- infinite--
[ไม่ได้ยิน] 27 ศูนย์หลังจากนั้น 0.1
>> ดีขอดูว่าเป็น สิ่งที่ฉันได้รับแน่นอน
ทำให้ลอย-0 ไฟล์เดียวกัน
./floats-0
ลองซูมในคำตอบที่น่าทึ่ง
ทั้งหมดเวลานี้คุณได้รับความคิด 1 หารด้วย 10 คือ 10% หรือ 0.1
มันไม่ใช่
อย่างน้อยเท่าที่ ของเครื่องคอมพิวเตอร์ที่เกี่ยวข้อง
>> ตอนนี้ why-- ตกลงที่สมบูรณ์ โกหก 1 หารด้วย 10 เป็น 0.1
แต่ why-- ที่ไม่ได้ Takeaway วันนี้
ดังนั้นทำไมไม่ใช้คอมพิวเตอร์คิดว่า ซึ่งแตกต่างจากพวกเราทุกคนในห้อง
ที่ 1 หารด้วย 10 จริงว่าค่าบ้า?
สิ่งที่คอมพิวเตอร์ทำเห็นได้ชัดหรือไม่
มีอะไรที่?
>> มันไม่ได้ล้นต่อ se
มากเกินปกติจะเป็นเมื่อ คุณห่อรอบค่า
มันเป็นเรื่องของความไม่แน่ชัดนี้ มูลค่าจุดลอย
ที่คุณมี 32 เพียง หรืออาจจะได้ 64 บิต
แต่ถ้ามีที่สิ้นสุด จำนวน numbers-- จริง
ตัวเลขที่มีจุดทศนิยม และหมายเลข thereafter-- แน่นอน
คุณไม่สามารถเป็นตัวแทนทั้งหมดของพวกเขา
เพื่อให้คอมพิวเตอร์ได้ให้ เราจับคู่ที่ใกล้เคียงที่สุด
ค่าที่จะสามารถเป็นตัวแทนของการใช้ที่ บิตหลายค่าที่จริงผมต้องการ
ซึ่งเป็น 0.1
>> แต่ถ้าคุณ เริ่มต้นทำคณิตศาสตร์หรือคุณ
เริ่มต้นที่เกี่ยวข้องกับประเภทนี้ลอย ค่าจุดใน programs-- สำคัญ
ซอฟแวร์ทางการเงิน อะไร software-- ทหาร
ที่รับรู้เป็น อาจจะเป็นสิ่งที่สำคัญสวย
และคุณเริ่มต้นการเพิ่ม ตัวเลขเช่นนี้และเริ่มต้น
การใช้ซอฟต์แวร์ที่ ปัจจัยการผลิตที่มีขนาดใหญ่จริงๆ
หรือสำหรับจำนวนมากของเวลาหรือจำนวนมาก วันหรือหลายปีที่ผ่านมา
ความผิดพลาดเล็ก ๆ น้อย ๆ เหล่านี้เล็ก ๆ ก็สามารถเพิ่มขึ้นเมื่อเวลาผ่านไป
>> ตอนนี้เป็นกันถ้าคุณเคย เห็นซูเปอร์แมน 3 หรือพื้นที่สำนักงาน
และคุณอาจจะจำ วิธีที่พวกขโมย
เงินเป็นจำนวนมากจากเครื่องคอมพิวเตอร์ของพวกเขา โดยใช้ค่าจุดลอย
และการเพิ่มขึ้นเล็กน้อย เหลือหวังว่าภาพยนตร์ที่
ตอนนี้ทำให้รู้สึกมากขึ้น
นี่คือสิ่งที่พวกเขา ยิ่งทำให้ในภาพยนตร์ที่
ความจริงที่ว่าส่วนใหญ่ บริษัท จะไม่มอง
หลังจากที่จำนวนหนึ่ง ของทศนิยม
แต่ผู้ที่มีเศษของเซนต์
เพื่อให้คุณเริ่มต้นการเพิ่มพวกเขาขึ้น คุณเริ่มต้นที่จะทำให้เงินเป็นจำนวนมาก
ในบัญชีธนาคารของคุณ
เพื่อให้เป็นพื้นที่สำนักงานอธิบาย
>> แต่น่าเสียดายที่ตอนนี้เกิน พื้นที่สำนักงานมี
มีบางหนักใจถูกต้องตามกฎหมาย และผลกระทบอย่างมีนัยสำคัญ
เหล่านี้ชนิดของ ตัดสินใจในการออกแบบพื้นฐาน
และแน่นอนหนึ่งในเหตุผลที่ เราใช้ C ในหลักสูตร
คือเพื่อให้คุณจริงๆมีพื้นดินนี้ ความเข้าใจของวิธีการทำงานของคอมพิวเตอร์
วิธีการที่ซอฟต์แวร์การทำงานและไม่ได้ เอาอะไรให้ได้รับ
>> และจริง ๆ แล้วน่าเสียดายที่แม้จะมี ความเข้าใจพื้นฐาน
มนุษย์เราทำผิดพลาด
และสิ่งที่ฉันคิดว่าฉันต้องการแบ่งปันเป็น วิดีโอนี้แปดนาทีที่นำมาที่นี่
จากเหตุการณ์ปัจจุบันมหัศจรรย์ซึ่งเป็น การแสดงการศึกษาเกี่ยวกับวิธีการทำงานของสิ่งที่
ที่วาดภาพสองภาพ เมื่อใช้ที่ไม่เหมาะสม
และความเข้าใจใน ลอยค่าจุด
นำไปสู่​​การบางอย่างมีนัยสำคัญ ผลที่โชคร้าย
ลองมาดู
[วิดีโอเล่นภาพ]
ที่เราตอนนี้กลับไปที่ "วิศวกรรม ภัย "ในปัจจุบันมหัศจรรย์
คอมพิวเตอร์
ที่เราได้มาทั้งหมดที่จะยอมรับ ปัญหาที่มักจะทำลายที่
ได้มีข้อบกพร่อง them-- ไวรัสและ glitches-- ซอฟต์แวร์สำหรับราคาขนาดเล็ก
ที่จะจ่ายเงินเพื่อความสะดวก
แต่ในเทคโนโลยีชั้นสูงและความเร็วสูง การใช้งานทางทหารและโครงการอวกาศ,
ปัญหาที่เล็กที่สุดสามารถ จะขยายไปสู่​​ความหายนะ
>> ที่ 4 มิถุนายน 1996 นักวิทยาศาสตร์เตรียม ที่จะเปิดตัวกำลังใจอาริอาน 5 จรวด
มันได้รับการดำเนินการทางวิทยาศาสตร์ ดาวเทียมได้รับการออกแบบ
ที่จะสร้างได้อย่างแม่นยำว่า ปฏิสัมพันธ์สนามแม่เหล็กของโลก
กับลมสุริยะ
จรวดถูกสร้างขึ้นสำหรับ องค์การอวกาศยุโรป
และยกออกจากสิ่งอำนวยความสะดวก บนชายฝั่งของฝรั่งเศสรนช์เกียนา
>> -At ประมาณ 37 วินาทีใน เที่ยวบินที่พวกเขาเป็นครั้งแรก
สังเกตเห็นบางสิ่งบางอย่างที่เกิดขึ้นไม่ถูกต้อง
หัวฉีดที่ได้รับการหมุน ในทางที่พวกเขาจริงๆไม่ควร
ประมาณ 40 วินาทีในการบิน เห็นได้ชัดว่ารถที่อยู่ในปัญหา
และเมื่อพวกเขาทำ การตัดสินใจที่จะทำลายมัน
เจ้าหน้าที่ความปลอดภัยในช่วงที่มี ความกล้าอย่างมากกดปุ่ม
และพัดขึ้นจรวดก่อนที่มันจะทำได้ กลายเป็นอันตรายต่อความปลอดภัยของประชาชน
>> RDLCustoms นี้เป็นครั้งแรก การเดินทางของอาริอาน 5
และการทำลายล้างของมันเอา วางเพราะข้อบกพร่อง
ที่ฝังอยู่ในซอฟแวร์จรวด
ปัญหา -The ที่ อาริอานก็คือการที่มี
เป็นจำนวนที่จำเป็นต้องใช้ 64 บิตที่จะแสดง
และพวกเขาต้องการที่จะแปลง มันเป็นจำนวน 16 บิต
พวกเขาสันนิษฐานว่าจำนวน ก็ไม่เคยจะมีขนาดใหญ่มาก
ว่าส่วนใหญ่ของผู้ที่อยู่ในตัวเลข จำนวน 64 บิตเป็นศูนย์
พวกเขามีความผิด
>> การไร้ความสามารถของหนึ่ง -The โปรแกรมซอฟแวร์ที่จะยอมรับ
ชนิดของตัวเลขที่สร้างขึ้นโดย อีกคนหนึ่งคือที่รากของความล้มเหลว
การพัฒนาซอฟต์แวร์ได้กลายเป็น ส่วนค่าใช้จ่ายสูงมากของเทคโนโลยีใหม่
อาริอาน 4 จรวดได้ ประสบความสำเร็จมาก
มากของซอฟแวร์ที่สร้างขึ้นสำหรับ มันก็ยังใช้ในอาริอาน 5
>> -The ปัญหาพื้นฐาน ก็คือการที่อาริอาน 5
ถูก faster-- เร่งได้เร็วขึ้นและ ซอฟแวร์ไม่ได้คิดว่า
>> การทำลายของจรวด -The เป็นภัยพิบัติทางการเงินมาก
ทั้งหมดเนื่องจากข้อผิดพลาดของซอฟต์แวร์นาที
แต่นี่ไม่ใช่ครั้งแรกที่ เวลาปัญหาการแปลงข้อมูล
ได้รบกวนเทคโนโลยีจรวดที่ทันสมัย
>> 1991 อินกับการเริ่มต้น ของสงครามอ่าวครั้งแรก
ขีปนาวุธต่อต้านการก่อการร้าย ประสบการณ์ชนิดที่คล้ายกัน
ของปัญหาการแปลงจำนวน
และเป็นผลกับคน 28 28 soldiers-- อเมริกันถูกฆ่าตาย
และประมาณหนึ่งร้อยคนอื่นได้รับบาดเจ็บ
เมื่อรักชาติซึ่งควร เพื่อป้องกัน Scuds เข้ามา
ล้มเหลวในการยิงขีปนาวุธ
>> เมื่อมีอิรักบุกคูเวตและอเมริกา เปิดตัวพายุทะเลทรายในช่วงต้นปี 1991
รักชาติแบตเตอรี่ขีปนาวุธถูกนำไปใช้ เพื่อปกป้องซาอุดีอาระเบียและอิสราเอล
จากอิรักแล่นขีปนาวุธโจมตี
รักชาติเป็นสหรัฐอเมริกากลางช่วง พื้นผิวสู่อากาศระบบ
ผลิตโดย บริษัท เรย์ ธ
>> ขนาดของรักชาติ -The ดัก itself--
มันเป็นเรื่องของประมาณ 20 ฟุตยาว และมันน้ำหนักประมาณ£ 2,000
และจะดำเนินการหัวรบประมาณ, ฉันคิดว่ามันเป็นประมาณ£ 150
และหัวรบที่ตัวเองมี ระเบิดสูงซึ่ง
มีชิ้นส่วนที่อยู่รอบตัวเขา
ดังนั้นปลอกของหัวรบเป็น ออกแบบมาเพื่อทำหน้าที่เหมือนสามสิบ
>> ขีปนาวุธ -The จะดำเนิน สี่ต่อภาชนะ
และจะถูกลำเลียงโดยรถพ่วงกึ่ง
>> -The ระบบต่อต้านการก่อการร้ายต่อต้านขีปนาวุธ กลับไปอย่างน้อย 20 ปีขณะนี้
มันถูกออกแบบมา ขณะที่การป้องกันขีปนาวุธอากาศ
ที่จะยิงลงเครื่องบินศัตรู
ในสงครามอ่าวครั้งแรก เมื่อสงครามที่มาใน
กองทัพต้องการที่จะใช้มันเพื่อ ยิงลง Scuds ไม่เครื่องบิน
กองทัพอากาศอิรักเป็น ไม่มากของปัญหา
แต่กองทัพเป็นห่วงเกี่ยวกับ Scuds
ดังนั้นพวกเขาจึงพยายามที่จะ อัพเกรดรักชาติ
>> -Intercepting ศัตรู วิถีการเดินทางที่มัค 5
กำลังจะถูกท้าทายพอ
แต่เมื่อรักชาติ ได้วิ่งเข้าไปในบริการ
กองทัพไม่ได้ตระหนักถึง การปรับเปลี่ยนที่อิรัก
ทำ scuds ของพวกเขาเกือบ เป็นไปไม่ได้มัน
>> อะไรที่เกิดขึ้นเป็น Scuds ที่ มาในที่ไม่แน่นอน
พวกเขาสั่นคลอน
เหตุผลนี้เป็น Iraqis-- เพื่อให้ได้รับ 600 กิโลเมตรออก
ในช่วงที่ missile-- 300 กิโลเมตร เอาน้ำหนักออกจากจรวดหน้า
และทำให้หัวรบที่มีน้ำหนักเบา
ดังนั้นตอนนี้รักชาติพยายามที่จะมา ที่สกั๊ดและส่วนใหญ่ของ time--
ส่วนใหญ่ที่ครอบงำของ time-- มันก็จะบินโดยสกั๊ด
>> ครั้งหนึ่งผู้ประกอบการระบบต่อต้านการก่อการร้าย ตระหนักถึงความรักชาติพลาดเป้าของมัน
พวกเขาระเบิดจรวดต่อต้านการก่อการร้ายของ เพื่อหลีกเลี่ยงการบาดเจ็บล้มตายไปได้ถ้ามัน
ได้รับอนุญาตให้ลงไปกองกับพื้นดิน
>> นั่นคือสิ่งที่คนส่วนใหญ่เห็น เป็นลูกไฟขนาดใหญ่ในท้องฟ้า
และเข้าใจผิดเป็น ดักของขีปนาวุธสกั๊ด
>> ถึงแม้ว่าในท้องฟ้ากลางคืนรักชาติ ดูเหมือนจะประสบความสำเร็จในการทำลาย
Scuds ที่ Dhahran อาจมี ความผิดพลาดที่เกี่ยวกับประสิทธิภาพการทำงานของมัน
มีระบบเรดาร์ต่อต้านการก่อการร้ายของ ติดตามการสูญเสียของสกั๊ดที่เข้ามา
และไม่เคยเปิดตัวเนื่องจาก ข้อบกพร่องซอฟแวร์
>> มันเป็นอิสราเอลที่ค้นพบครั้งแรก ที่ไม่เป็นระบบใน
มากขึ้นความแตกต่างเวลาที่กลายเป็น
เนื่องจากนาฬิกาฝังตัว ในคอมพิวเตอร์ระบบ
>> -About สองสัปดาห์ก่อน โศกนาฏกรรมใน Dhahran,
อิสราเอลรายงานว่า กระทรวงกลาโหม
ว่าระบบที่ได้รับการสูญเสียเวลา
หลังจากนั้นประมาณแปดชั่วโมง ของการทำงานที่พวกเขาสังเกตเห็น
ว่าระบบของการเป็น เห็นได้ชัดที่ถูกต้องน้อยกว่า
กระทรวงกลาโหมตอบสนองด้วย บอกทั้งหมดของแบตเตอรี่รักชาติ
ที่จะได้ออกจากระบบ มาเป็นเวลานาน
พวกเขาไม่เคยกล่าวว่าสิ่งที่เป็นเวลานานเป็น
8 ชั่วโมง, 10 ชั่วโมง, พันชั่วโมง
ไม่มีใครรู้ว่า
>> -The แบตเตอรี่รักชาติ ประจำการอยู่ที่ค่ายทหาร
ที่ Dhahran และสมบูรณ์ภายใน นาฬิกาที่ได้รับในการมานานกว่า 100 ชั่วโมง
ในคืนวันที่ 25 กุมภาพันธ์
>> แต่ก็ถึงเวลาที่จะติดตามความถูกต้อง ประมาณหนึ่งในสิบของที่สอง
ตอนนี้หนึ่งในสิบของที่สอง เป็นตัวเลขที่น่าสนใจ
เพราะมันไม่สามารถแสดง ในไบนารีว่าซึ่ง
หมายความว่ามันไม่สามารถจะแสดงว่า ในคอมพิวเตอร์ดิจิตอลที่ทันสมัย
มันยากที่จะเชื่อ แต่ ใช้นี้เป็นตัวอย่าง
>> ลองมาจำนวนหนึ่งในสาม
หนึ่งในสามไม่สามารถ แสดงในทศนิยมว่า
หนึ่งในสามเป็น 0.333 ไปในอินฟินิตี้
มีวิธีการทำที่มีไม่ได้ ความถูกต้องแน่นอนในทศนิยม
ที่ว่าชนิดของปัญหา ที่เกิดขึ้นในความรักชาติ
อีกต่อไประบบการวิ่ง เลวร้ายกลายเป็นข้อผิดพลาดเวลา
>> หลังจาก 100 ชั่วโมงของการทำงาน ข้อผิดพลาดในเวลาที่เป็นเพียงประมาณหนึ่งในสาม
เป็นครั้งที่สอง
แต่ในแง่ของการกำหนดเป้​​าหมาย วิถีการเดินทางที่มัค 5
มันมีผลในการติดตาม ข้อผิดพลาดกว่า 600 เมตร
มันจะเป็นความผิดพลาดร้ายแรง สำหรับทหารที่ Dhahran
>> อะไรที่เกิดขึ้นมีการเปิดตัวสกั๊ดเป็น ตรวจพบโดยดาวเทียมเตือนภัย
และพวกเขารู้ว่าสกั๊ดมา ในทิศทางทั่วไปของพวกเขา
พวกเขาไม่ทราบว่ามันกำลังจะมา
ตอนนี้มันเป็นได้ถึงเรดาร์ ส่วนประกอบของระบบต่อต้านการก่อการร้าย
ปกป้อง Dhahran การค้นหาและเก็บ ติดตามขีปนาวุธของศัตรูที่เข้ามา
>> เรดาร์ -The เป็นสมาร์ทมาก
มันจริงจะติดตาม ตำแหน่งของสกั๊ด
แล้วทำนายที่ มันอาจจะเป็น
ในครั้งต่อไป เรดาร์ส่งพัลส์ออก
ที่ถูกเรียกว่าประตูช่วง
>> -Then เคยต่อต้านการก่อการร้าย ตัดสินใจที่มีเวลามากพอ
ส่งผ่านไปยังกลับไปตรวจสอบต่อไป สถานที่สำหรับวัตถุที่ตรวจพบนี้
มันจะไปกลับ
ดังนั้นเมื่อมันเดินกลับไปที่ที่ไม่ถูกต้อง สถานที่มันก็เห็นวัตถุไม่มี
และจะตัดสินใจว่ามีวัตถุใด
ว่ามีการตรวจจับที่ผิดพลาด และจะลดลงตาม
>> กรุเข้ามาแล่นหายไป จากหน้าจอเรดาร์
และวินาทีต่อมามัน กระแทกเข้าค่ายทหาร
สกั๊ดถูกฆ่าตาย 28
มันเป็นคนสุดท้ายที่ยิง ในช่วงสงครามอ่าวครั้งแรก
อนาถ, ซอฟแวร์ที่มีการปรับปรุง มาถึงตอนเช้าในวันรุ่งขึ้น
ข้อบกพร่องซอฟต์แวร์ที่มี รับคงปิด
บทหนึ่งในปัญหา ประวัติศาสตร์ของขีปนาวุธต่อต้านการก่อการร้าย
>> [จบการเล่นวิดีโอ]
>> เดวิดเจลัน: นั่นมันสำหรับ CS50
เราจะเห็นคุณในวันพุธที่
>> [เล่นเพลง]