[เล่นเพลง] DAVID J ลัน: ขวาทั้งหมด ยินดีต้อนรับกลับไป CS50 นี่คือจุดเริ่มต้นของสัปดาห์ที่สอง คำจากหนึ่งในของเรา เพื่อนในมหาวิทยาลัย - หากคุณสนใจอาจจะเป็นอย่างใดอย่างหนึ่ง ในขณะนี้หรือในอนาคตระยะยาวบางส่วน แม้กระทั่งการเรียนการสอนครั้งที่สะดวกสบายมากขึ้น นักเรียนโรงเรียนมัธยมเล็ก ๆ น้อย ๆ บางสิ่งบางอย่างเกี่ยวกับวิทยาศาสตร์คอมพิวเตอร์, ทำหัว URL ที่ พวกเขาอยู่ในความต้องการโดยเฉพาะอย่างยิ่งในตอนนี้จาก ครูโดยเฉพาะอย่างยิ่งถ้าคุณมี มีการสัมผัสกับวิทยาการคอมพิวเตอร์บาง ดังนั้นจำได้ว่าครั้งสุดท้ายที่เราแนะนำ ชนิดข้อมูลไม่กี่ใน C และ คุณอาจจะเริ่มต้นที่จะได้รับของคุณ มือสกปรกด้วยเหล่านี้ป่านนี้ ในปัญหาตั้งหนึ่ง และเรามีถ่าน ดังนั้นในแง่ทางเทคนิคค่อนข้างสิ่งที่ เป็นถ่านที่คุณรู้ว่ามันวันนี้? ดังนั้นจึงเป็นตัวอักษร แต่ขอ จะแม่นยำมากขึ้นในขณะนี้ เราหมายถึงอะไรโดยตัวอักษร หรือบุคคลถ่าน? อักขระที่ไม่ใช่ตัวเลข - ดังนั้นไม่จำเป็นต้อง มันจะเปิดออกแม้ตัวเลขที่แม้ เครื่องหมายวรรคตอนและตัวอักษรเป็น แทนด้วยข้อมูลนี้ ประเภทที่รู้จักกันเป็นถ่าน ดังนั้นจึงไม่จำเป็นต้องเรียงตามตัวอักษร อ้าง? ดังนั้นจึงเป็นอักขระ ASCII ดังนั้นถ้าคุณคิดว่ากลับไปอยู่ที่ศูนย์สัปดาห์เมื่อ เรามีของเราไบต์ของอาสาสมัคร ขึ้นมาและทั้งจับมือของพวกเขาขึ้น หรือไม่พวกเขาเป็นตัวแทนของบิต แต่รวมเป็นกลุ่มของแปด, พวกเขาเป็นตัวแทนของไบต์ และเรานำความคิดของ ASCII ที่บรรยายนั้นซึ่งก็คือ การทำแผนที่ระหว่างตัวเลขและตัวอักษร และใช้ ASCII มนุษย์เป็นผู้ที่ โดยนัยบิตแปด เพื่อเป็นตัวแทนของตัวละคร ดังนั้นดังนั้นหากแปดบิตสามารถ ใช้เวลาแต่ละที่หนึ่งในสองค่า - ศูนย์หรือหนึ่ง - นั่นหมายความว่าเป็นไปได้สองคน สำหรับสมาชิกผู้นี้ - ศูนย์หรือหนึ่ง - สองคนนี้สองนี้ คนที่สองสำหรับการนี​​้ ดังนั้นรวมเป็นสองครั้งสองครั้ง สองครั้งสองครั้งสอง - ดังนั้นสองแปดในทั้งหมด ดังนั้นจึงมีจำนวนของตัวอักษรของ 256 เป็นไปได้ที่คุณสามารถ เป็นตัวแทนของแปดบิต ตอนนี้บรรดาผู้ที่พูดเอเชีย ภาษาอาจจะรู้ว่ามีมากขึ้น ตัวอักษรในโลกมากกว่าเพียงแค่ เป็นและ B และ Cs และ Ds และแน่นอน ASCII ไม่พอเพียงสำหรับ จำนวนมากของภาษาของโลก แต่เพิ่มเติมว่าเวลาอื่น สำหรับตอนนี้รู้ว่าใน C ถ้าคุณต้องการ เพื่อเป็นตัวแทนของจดหมายฉบับหนึ่งชิ้นส่วนของ เครื่องหมายวรรคตอนหรือเพียงแค่ตัวอักษรบางสิ่งบางอย่าง ในธรรมชาติที่เราใช้ถ่าน และมันก็เป็นหนึ่งไบต์หรือแปดบิต วิธีการเกี่ยวกับ int? ดี int เป็นจำนวนเต็ม บิตหลายวิธีถ้าคุณจำได้ เป็นจำนวนเต็มโดยปกติ? การเรียกคืนทุกคน? ดังนั้นจึงเป็นเรื่องปกติ 32 อันที่จริงมันขึ้นอยู่กับคอมพิวเตอร์ ที่คุณกำลังใช้ แต่ในเครื่องและในจำนวนมาก คอมพิวเตอร์ก็ 32 บิตหรือสี่ ไบต์ - สี่แปดครั้ง และ ints จะใช้เพียงแค่สำหรับการจัดเก็บ ตัวเลขเชิงลบอย่างใดอย่างหนึ่ง บวกหรือศูนย์ และถ้าคุณมี 32 บิตและคุณ ดูแลเกี่ยวกับตัวเลขบวกสามารถ สนามเบสบอลใครหลายวิธีที่เป็นไปได้ จำนวนเต็มคอมพิวเตอร์สามารถเป็นตัวแทนจาก ศูนย์ขึ้น? ดังนั้นมันจะเป็นสองถึง 32 ซึ่ง คือประมาณสี่พันล้าน ดังนั้นอำนาจเหล่านี้ของทั้งสองเป็นไปได้ รูปแบบที่เกิดขึ้นในสาขาวิชาวิทยาการคอมพิวเตอร์ ในฐานะที่เราจะเห็นว่าพวกเขากำลังค่อนข้างสะดวก ที่จะทำงานกับแม้จะไม่มาก ง่ายที่จะทำคณิตศาสตร์ในหัวของคน ดังนั้นเราจะบอกว่าประมาณสี่พันล้าน ตอนนี้ยาวยาว - คุณสามารถชนิดของการคาดเดา มันนานกว่า int บิตหลายวิธี? ดังนั้น 64 บิตหรือแปดไบต์ แค่นี้หมายความว่าคุณสามารถเป็นตัวแทนได้ ตัวเลขขนาดใหญ่ที่มีขนาดใหญ่บวกหรือ ที่ใหญ่กว่าตัวเลขติดลบ และวิธีการเกี่ยวกับลอย? นั่นเป็นจุดลอย ค่าของ 32 บิต นี่เป็นเพียงจำนวนจริงบางสิ่งบางอย่าง มีจุดทศนิยม แต่ถ้าคุณต้องแทนสถานที่มากขึ้น หลังจุดทศนิยมหรือคุณต้องการ เป็นตัวแทนของจำนวนที่ใหญ่กว่ากับบาง เศษหลังจากที่คุณสามารถใช้ สองซึ่งเป็น 64 บิต แต่มีที่น่าสนใจของ Takeaway ที่นี่ ดังนั้นถ้า ints จะถูก จำกัด โดย 32 บิตและ แม้ Longs มีความยาว จำกัด โดย 64 บิตที่จัดเรียงของ begs คำถาม, สิ่งที่ถ้าคุณต้องการจริงที่จะนับ สูงกว่า 4 พันล้านสำหรับ int? ดีคุณเพียงแค่ใช้ยาวยาว แต่สิ่งที่ถ้าคุณต้องการที่จะนับที่สูงขึ้น กว่าสองถึง 64 หรือจะให้? ตอนนี้ที่เป็นจำนวนมาก แต่ในที่สุดคุณอาจจะจริง ดูแลเกี่ยวกับเหล่านี้ชนิดของค่า โดยเฉพาะอย่างยิ่งถ้าคุณกำลังใช้ฐานข้อมูล และเริ่มต้นในการเก็บรวบรวมจำนวนมากและจำนวน และจำนวนมากของข้อมูลและการกำหนดให้ไม่ซ้ำกัน หมายเลขชิ้นส่วนของข้อมูลว่าแต่ละ ดังนั้นเราจึงชนิดของมีปัญหา และในทำนองเดียวกันกับจุดลอย ค่า - ลอยหรือคู่ - ถ้าคุณได้มีเพียงจำนวน จำกัด บิตกี่ตัวเลขทั้งหมดสามารถคุณ อาจจะเป็นตัวแทนของ? ดีก็ชัดเจนน้อยลงเมื่อคุณ เกี่ยวข้องกับจุดทศนิยม แต่มันก็มีขอบเขตแน่นอน หากคุณมีจำนวน จำกัด ของบิต, จำนวน จำกัด ของมนุษย์ จำกัด จำนวนหลอดไฟที่แน่นอนที่คุณสามารถ คิดเฉพาะรายได้ จำกัด จำนวน ค่าจุดลอย แต่วิธีการที่หลายตัวเลขจริง พวกเขาอยู่ในโลก? มีไม่มีที่สิ้นสุดของ เพื่อที่ว่าชนิดของปัญหาเพราะเรา ไม่ได้มีจำนวนอนันต์ของ หน่วยความจำหรือแรมภายในของเครื่องคอมพิวเตอร์ของเรา ดังนั้นบางสิ่งที่ท้าทายความสามารถเกิดขึ้นได้ ดังนั้นขอไปข้างหน้าและลอง ในการแสดงที่นี่ ให้ฉันไปข้างหน้าและเปิด Gedit ฉันจะไปข้างหน้าและบันทึกแฟ้ม ที่เรียกว่า "floats0.c" เพียงเพื่อจะอยู่ สอดคล้องกับตัวอย่างที่เป็น พร้อมให้บริการออนไลน์ถ้าคุณต้องการ และฉันจะไปข้างหน้าและ กำหนดไว้ดังต่อไปนี้ - ฉันจะไปข้างหน้าและพูดว่า int เป็นโมฆะหลักในขณะที่เรามักจะทำ จากนั้นในโปรแกรมนี้ฉันจะไป ประกาศตัวเองลอยดังนั้น 32 บิต ฉเรียกว่าตัวแปรพล แล้วฉันจะเก็บอยู่ในนั้น ผมไม่ทราบว่าหนึ่งในสิบดังนั้น 0.1 ดังนั้นฉันจะแสดงว่ามีเป็นหนึ่ง หารด้วย 10 ซึ่งเป็นอย่างดี ถูกต้องตามกฎหมายใน C. และจากนั้นในบรรทัดที่สองผมก็ ต้องการพิมพ์ออกค่าที่ ดังนั้นจำได้ว่าเราสามารถใช้ คุ้นเคย printf เราไม่ต้องการที่จะใช้สำหรับ i% int เราต้องการใช้% f สำหรับลอย แล้วฉันจะทำเครื่องหมาย n, อ้างใกล้ชิดจุลภาค, F, อัฒภาค ดังนั้นที่นี่โปรแกรมของฉัน แล้วมีข้อผิดพลาดอย่างใดอย่างหนึ่ง คนที่ไม่สำหรับผู้ที่นี้คลิก แล้วต้องการชี้อย่างน้อย หนึ่งในข้อผิดพลาดที่ฉันได้ทำ? อ้าง? ใช่ ฉันลืม "# include" ที่ ด้านบนพวกเขาอาการของซึ่งถ้าผมพยายามที่จะ คอมไพล์นี้จะเป็นไปได้ว่า คอมไพเลอร์จะไปตะโกนใส่ฉัน บอกไม่ได้กำหนดสัญลักษณ์หรือ บางสิ่งบางอย่างที่มีผล มันไม่เข้าใจบางสิ่งบางอย่าง เช่น printf ดังนั้นฉันจะทำ "# include "บันทึกแฟ้ม และตอนนี้ก็อยู่ในรูปร่างที่ดีขึ้น แต่ฉันยังจะชี้ให้ รายละเอียดออกใหม่วันนี้ นอกจากนี้การระบุสถานที่ ผู้ถือเช่น f%%% s i, คุณสามารถ บางครั้งมีอิทธิพลต่อพฤติกรรม ของตัวยึดที่ ยกตัวอย่างเช่นในกรณีของลอย จุดมูลค่าถ้าฉันเพียงต้องการ เพื่อแสดงสถานที่หนึ่งหลังจากที่ทศนิยม ช่วงเวลาที่ผมสามารถทำได้จริง 0.1f ดังนั้นในคำอื่น ๆ ที่ฉันแยก F และ เครื่องหมายเปอร์เซ็นต์ 0.1 เพ​​ียง บอก printf คุณอาจมีทั้ง พวงของตัวเลขหลังจากทศนิยม จุดสำหรับฉัน แต่ผมเพียงต้องการที่จะเห็นหนึ่งของพวกเขา ดังนั้นฉันจะไปข้างหน้าทันทีเพื่อรับส่วนลด โปรแกรมนี้ไปลงในขั้วของฉัน หน้าต่างและฉันจะไปข้างหน้า และชนิดทำให้ 0 ลอยใส่ ผมเห็นว่าสายที่ค่อนข้างคลุมเครือ จะเริ่มต้นที่จะทำให้รู้สึกมากขึ้นในขณะที่เรา แซวมันนอกเหนือสัปดาห์นี้และต่อไป ตอนนี้ฉันจะไปข้างหน้า และเรียกใช้เป็นศูนย์ลอย และคำด่า ดังนั้นจึงมีข้อผิดพลาดของผู้อื่น ที่นี่ด้วยเหตุผลบางอย่าง ฉันลำยองแน่ใจว่าหนึ่งในสิบหรือ หนึ่งหารด้วย 10 ไม่ได้เป็น 0.0 บางทีฉันเพียงแค่ไม่ได้มอง ที่หลักพอ ดังนั้นทำไมฉันจึงไม่พูดสอง 0.2 จะเห็นสอง ตำแหน่งทศนิยมแทนเดียว ให้ฉันกลับไปที่หน้าต่าง terminal ของฉัน ที่นี่และตีขึ้นสองสามครั้งไป ดูประวัติของฉัน อย่าให้ลอยศูนย์อีกครั้ง, แล้วขึ้นมาอีกครั้ง และตอนนี้ป้อน และตอนนี้ฉันลำยองแน่ใจว่านี้เป็นสิ่งที่ผิด และฉันจะทำสามและสี่และฉัน อาจจะให้เห็นเลขศูนย์ เพื่อที่ข้อผิดพลาดคืออะไร? หนึ่งหารด้วย 10 ควรจะเป็น 0.1 ใครบางคนต้องการที่จะใช้แทงที่สิ่ง ปัญหาพื้นฐานคือ? อ้าง? พวกเขาทั้งสองจำนวนเต็ม ดังนั้นสิ่งที่? ให้กับหนึ่งหารด้วย 10 ว่า สิ่งที่ฉันทำในการคำนวณ และฉันได้รับ 0.1 ใช่ และดังนั้นจึงเป็นปัญหาที่แท้จริง เมื่อคุณใช้เวลาจำนวนเต็มในเครื่องคอมพิวเตอร์ และคุณหารด้วยจำนวนเต็มอีก คอมพิวเตอร์โดยค่าเริ่มต้นเป็นไป สมมติว่าคุณต้องการจำนวนเต็ม แม้ว่าปัญหาของหลักสูตรคือ ที่ 0.1 ไม่เป็นจำนวนเต็ม มันเป็นจำนวนจริง และเพื่อให้คอมพิวเตอร์ทำอะไรโดย เริ่มต้นเป็นเพียงโยนออกไป ทุกอย่างหลังจุดทศนิยม มันก็ไม่ได้ปัดขึ้นหรือลงต่อ มันก็ทิ้งทุกอย่าง หลังจุดทศนิยม และตอนนี้ทำให้รู้สึกว่า เพราะตอนนี้เรากำลังอย่างชัดเจน เหลือศูนย์ แต่รอสักครู่ ฉันไม่เห็นศูนย์ int ฉันจริงเห็น 0.00 ดังนั้นฉันจะตกลงกันได้ในตอนนี้? ถ้าหารด้วย 10 เป็นศูนย์ แต่ฉัน เห็น 0.00, มันเป็นที่ที่ได้รับ แปลงกลับไปเป็นจำนวนจริง? ใช่ อย่างแน่นอน ดังนั้นขึ้นที่นี่ในห้าบรรทัดเมื่อฉันจริง เก็บที่ 0.1 ซึ่งเป็นแล้ว ถูกตัดทอนให้เป็นศูนย์ภายในของลอย, ที่มีประสิทธิภาพเทียบเท่ากับ เก็บไว้ไม่เป็น int แต่ แท้จริงเป็นลอย นอกจากผมแล้วใช้ printf ไป อย่างชัดเจนพิมพ์ตัวเลขที่สอง ตำแหน่งทศนิยมแม้ว่าจะมี อาจจะไม่เป็นจริงใด ๆ ดังนั้นชนิดนี้ห่วยใช่มั้ย? เห็นได้ชัดว่าคุณไม่สามารถที่จะทำคณิตศาสตร์ อย่างน้อยในระดับนี้ ความแม่นยำในคอมพิวเตอร์ แต่แน่นอนมีวิธีการแก้ปัญหาของ การแก้ไขที่ง่ายที่สุดที่เราสามารถอาจจะมีอะไร ทำแม้เพียงอย่างสังหรณ์ใจที่นี่เพื่อ แก้ปัญหานี้? อ้าง? เปิดจำนวนเต็มเข้า - ใช่ แม้ว่าฉันไม่ได้ค่อนข้างแน่ใจว่ามีอะไร จริงที่เกิดขึ้นที่นี่ถ้ามัน พื้นฐานที่มีจะทำอย่างไรกับเหล่านี้ทั้งสอง เป็น ints ดีทำไมถึงไม่ได้ ให้ที่ 10.0 ทำให้นี้ 1.0 resave ไฟล์ ปล่อยฉันไปกลับลงไป ด้านล่างและคอมไพล์ ขอให้ข้าพเจ้าวิ่ง และมี - ตอนนี้ฉันมีหนึ่งในสิบของฉัน แสดงเป็น 0.10 ทั้งหมดขวา ดังนั้นที่ไม่ได้เลวร้าย และแจ้งให้เราชี้ให้เห็นวิธีหนึ่งที่อื่น ๆ เราจะได้มีการแก้ไขนี้ ให้ฉันจริงย้อนกลับไปในช่วงเวลา ไปเมื่อเรามีนี้เป็นหนึ่งใน สิบสักครู่ที่ผ่านมา และแจ้งให้เราไปข้างหน้าและบันทึกใหม่ไฟล์นี้ เป็นชื่อไฟล์ที่แตกต่างกันเพียงเพื่อ มีด่านเล็ก ๆ น้อย ๆ ดังนั้นหนึ่งรุ่นคือ และตอนนี้ให้ฉันไปข้างหน้าและ ทำหนึ่งในรุ่นอื่น ๆ เราจะเรียกรุ่นนี้ สองศูนย์การจัดทำดัชนี และฉันกำลังจะไปทำแทน นี้ - คุณรู้ว่าสิ่งที่? การเพิ่มการทำงานของศูนย์จุดในกรณีนี้ แต่คิดว่าคนใดคนหนึ่งตัวแปร ควรมี 10 ตัวแปร ในคำอื่น ๆ คิดว่าผมทำไม่ได้ เพียงแค่รหัสยาก 0.0 ในตอนท้าย ของการแสดงออกทางคณิตศาสตร์นี้ ดีฉันจริงสามารถทำอะไรบางอย่าง ในวงเล็บที่เรียกว่าหล่อ ฉันสามารถโยนที่จำนวนเต็ม 10 ถึงลอย, และฉันสามารถโยนที่หนึ่งจำนวนเต็ม ลอยเช่นกัน แล้วคณิตศาสตร์ที่จะทำได้ เป็นได้อย่างมีประสิทธิภาพ 1.0 หารด้วย 10.0, ผลจากการที่ไป ใน F เป็นมาก่อน ดังนั้นถ้าฉัน recompile นี้ให้ลอย 2 และตอนนี้ลอยอยู่ 2 ฉันได้รับเดียวกัน คำตอบเช่นกัน ดังนั้นนี่คือตัวอย่าง contrived เป็นธรรม เพื่อแก้ปัญหานี้ โดยการแนะนำการคัดเลือกนักแสดง แต่โดยทั่วไปแล้วหล่อเป็นไปได้ เป็นสิ่งที่มีประสิทธิภาพโดยเฉพาะอย่างยิ่งสำหรับ ปัญหาตั้งสองในช่วงเวลาหนึ่งสัปดาห์เมื่อ ที่คุณต้องการแปลงชนิดข้อมูลหนึ่งไป อื่นที่ตอนท้ายของวัน จะแสดงในลักษณะเดียวกัน ในตอนท้ายของวันที่ทุกเดียว สิ่งที่เราได้พูดคุยเกี่ยวกับป่านนี้คือ ints เพียงภายใต้ประทุน หรือถ้าที่เกินไปในระดับต่ำสำหรับ คุณพวกเขากำลังเพียงตัวเลข ภายใต้ฝากระโปรง แม้ตัวละครอีกครั้งจำ จากศูนย์สัปดาห์ตัวเลข ภายใต้ฝากระโปรง ซึ่งก็คือการบอกว่าเราสามารถแปลงระหว่าง ชนิดที่แตกต่างของตัวเลขถ้า พวกเขากำลังเพียงบิต เราสามารถแปลงระหว่างตัวเลข และตัวอักษรถ้าพวกเขากำลังเพียง บิตและโอละพ่อ และการหล่อในลักษณะนี้เป็นกลไก ในการเขียนโปรแกรมที่ช่วยให้คุณบังคับ เปลี่ยนชนิดข้อมูลหนึ่งไปยังอีก แต่นี้ไม่เป็น ตรงไปตรงมาผมอาจจะชอบ ฉันจะกลับไปลอย 1 ซึ่งเป็นที่เรียบง่ายมากขึ้น หนึ่งตรงไปตรงมาด้วย 0.0 เพิ่มเมื่อแต่ละ และเช่นเดียวกับการฟื้นฟูอย่างรวดเร็ว ให้ฉันไปข้างหน้าและ recompile นี้ให้ 2 ลอย - ขออภัยนี้ให้ลอย 1 และตอนนี้ขอทำงานลอย 1 และในด้านล่างแจ้งให้ทราบ แน่นอนว่าฉันได้รับ 0.1 ดังนั้นแก้ปัญหา แต่ยังไม่ได้ ตอนนี้ฉันจะได้รับน้อยขี้สงสัย, และฉันจะกลับไปเป็นของฉัน คำสั่ง printf และ พูดว่าคุณรู้ว่าสิ่งที่? ฉันต้องการที่จะยืนยันว่านี้ เป็นจริงหนึ่งในสิบ และฉันจะต้องการที่จะเห็นนี้ ไปกล่าวห้าตำแหน่งทศนิยม มันไม่ได้มีปัญหา ฉันจะเปลี่ยนสองถึงห้า ผมคอมไพล์ด้วยทำให้ ผมว่ามันเป็นวิ่งลอย 1 การค้นหาที่ดีงาม ตรวจสอบสติฉันอาจสิ้นสุดมี แต่ ฉันได้รับการผจญภัยเล็ก ๆ น้อย ๆ ฉันจะเปลี่ยน 0.5-0.10 ฉันต้องการจะดู 10 หลักหลัง ที่ทศนิยม และฉันจะไปข้างหน้าและ recompile นี้และวิ่งลอย 1 ผมชนิดของความเสียใจที่มีการทดสอบนี้ ต่อไปเพราะคณิตศาสตร์ของฉันไม่เป็นเช่นนั้น แก้ไขอีกต่อไปแล้วดูเหมือนว่า แต่รอสักครู่อาจจะ นั่นเป็นเพียงความบังเอิญ บางทีคอมพิวเตอร์จะทำหน้าที่ นิด ๆ หน่อย ๆ แปลก ๆ ให้ฉันไปข้างหน้าและทำ 20 จุดทศนิยม และสร้างความมั่นใจให้กับตัวเองว่าฉันรู้ว่า วิธีการทำคณิตศาสตร์ ฉันรู้วิธีการเขียนโปรแกรม ทำความ 1 ลอยคอมไ​​พล์และเจ้ากรรมมัน ที่เป็นจริง, จริงๆ ห่างไกลจากเครื่องหมาย ดังนั้นสิ่งที่เกิดขึ้นที่นี่? สัญชาตญาณขึ้นอยู่กับสมมติฐานของเรา ก่อนหน้านี้เกี่ยวกับขนาดของชนิดข้อมูล, สิ่งที่ต้องเกิดขึ้นที่นี่ ภายใต้ฝากระโปรง? อ้าง? อย่างแน่นอน ถ้าคุณต้องการที่นี้มีความแม่นยำมากและ ที่ heck ของมากของความแม่นยำ - 20 ตัวเลขหลังจุดทศนิยม คุณไม่อาจเป็นตัวแทนของ จำนวนข้อยกเว้นในกรณีที่คุณมี จำนวนข้อของบิต แต่เราทำไม่ได้ สำหรับลอย, เรามีเพียง 32 บิต ดังนั้นถ้า 32 บิตเท่านั้นที่สามารถ permuted ใน วิธีการ - เช่นเดียวกับมนุษย์เราบนเวที มือขึ้นหรือลง - ในจำนวน จำกัด ของ วิธีที่มีเพียงจำนวน จำกัด ของจำนวนจริงที่คุณสามารถเป็นตัวแทนของ กับบิตเหล่านั้น และเพื่อให้คอมพิวเตอร์ในที่สุด เป็นไปได้ที่จะ เริ่มต้นตัดมุม คอมพิวเตอร์สามารถซ่อนรายละเอียดเหล่านั้น จากเรานิด ๆ หน่อย ๆ ของเวลา แต่ถ้าเราเริ่ม poking ที่ตัวเลข และกำลังมองหาที่ไกลออกไปและไกลออกไปที่ ที่ต่อท้ายตัวเลขจำนวนเต็ม, จากนั้นเราก็เริ่มเห็นว่ามันเป็น จริงประมาณ ความคิดของหนึ่งในสิบ และมันจะเปิดออกอนาถมี จำนวนอนันต์ของตัวเลข เราไม่สามารถแสดงได้อย่างแม่นยำใน คอมพิวเตอร์อย่างน้อยกับ จำกัด จำนวนบิต, จำกัด จำนวนของ RAM ตอนนี้น่าเสียดายที่บางครั้งนี้ มีผลกระทบที่โลกแห่งความจริง ถ้าคนไม่ได้ค่อนข้างชื่นชมนี้ หรือประเภทของโมเมความเป็นจริง ว่าคอมพิวเตอร์ของพวกเขาก็จะทำในสิ่งที่ พวกเขาบอกให้ทำและทำไม่ได้ เข้าใจพื้นฐานเหล่านี้ รายละเอียดการเป็นตัวแทน - ที่ตรงไปตรงมาในบางภาษามี ซ่อนไว้จากผู้ใช้ซึ่งแตกต่างจากใน C - บางสิ่งที่ไม่ดีสามารถเกิดขึ้นได้ และสิ่งที่ฉันคิดว่าเราควรจะทำ คือการใช้ขั้นตอนกลับ และเรื่องนี้เป็นเรื่องเกี่ยวกับ วิดีโอแปดนาที มันออกอากาศไม่กี่ปีที่ผ่านมาและมันจะช่วยให้ ข้อมูลเชิงลึกจริงสิ่งที่สามารถไป ที่ไม่ถูกต้องเมื่อคุณอยู่ภายใต้การชื่นชมเหล่านี้ ชนิดของรายละเอียดมากทุกเกินไป โลกแห่งความจริง ถ้าเราสามารถไฟสลัว นิดหนึ่ง ลำโพง 1: ตอนนี้เรากลับไปที่ด้านวิศวกรรม ภัยพิบัติเมื่อปัจจุบันมหัศจรรย์ คอมพิวเตอร์ - ที่เราได้มาทั้งหมดที่จะยอมรับ กำจัดปัญหามักจะ ที่ไปกับพวกเขา Bugs ไวรัสและซอฟต์แวร์บกพร่อง ราคาขนาดเล็กที่จะจ่ายสำหรับเป็น ความสะดวกสบาย แต่ในเทคโนโลยีชั้นสูงและความเร็วสูง ทหารและโครงการอวกาศ การประยุกต์ใช้ปัญหาที่เกิดขึ้นมีขนาดเล็กที่สุด สามารถขยายเป็นภัยพิบัติ ที่ 4 มิถุนายน 1996 นักวิทยาศาสตร์เตรียมที่จะ เปิดหมดกำลังใจอาริอาน 5 จรวด มันถือเป็นดาวเทียมทางวิทยาศาสตร์ ออกแบบมาเพื่อสร้างวิธีการที่แม่นยำ สนามแม่เหล็กของโลกมีปฏิสัมพันธ์ กับลมสุริยะ จรวดถูกสร้างขึ้นสำหรับยุโรป องค์การอวกาศและยกออกจากที่ สิ่งอำนวยความสะดวกบนชายฝั่ง ของฝรั่งเศสรนช์เกียนา JACK GANSSLE: ที่ประมาณ 37 วินาทีใน เที่ยวบินแรกที่พวกเขาสังเกตเห็น บางสิ่งบางอย่างที่เกิดขึ้นผิด หัวฉีดถูกหมุนใน วิธีที่พวกเขาจริงๆไม่ควร ประมาณ 40 วินาทีในการบิน, เห็นได้ชัดว่ารถมีปัญหา และที่ว่าเมื่อพวกเขาทำ การตัดสินใจที่จะทำลายมัน เจ้าหน้าที่ความปลอดภัยในช่วงที่มี กล้ามากกดปุ่ม จรวดระเบิดขึ้นมาก่อนที่มันจะ กลายเป็นอันตรายต่อความปลอดภัยของประชาชน ลำโพง 1: นี่คือการเดินทางครั้งแรก จากอาริอาน 5 และทำลาย เกิดขึ้นเนื่องจากข้อบกพร่องที่ฝังตัว ในซอฟแวร์ของจรวด JACK GANSSLE: ปัญหาอาริอาน คือการที่มีจำนวน ที่จำเป็นต้องใช้ 64 บิตที่จะแสดง และพวกเขาต้องการที่จะแปลง ไปเป็นจำนวน 16 บิต พวกเขาคิดว่าจำนวนก็ไม่เคย จะใหญ่มากว่าส่วนใหญ่ของ ตัวเลขผู้ที่อยู่ใน 64-bit จำนวนเป็นเลขศูนย์ พวกเขามีความผิด 1 ลำโพงไร้ความสามารถของซอฟแวร์ โปรแกรมที่จะยอมรับชนิดของ ตัวเลขที่สร้างขึ้นอีกเป็น ที่รากของความล้มเหลว การพัฒนาซอฟต์แวร์ได้กลายเป็นมาก ค่าใช้จ่ายส่วนหนึ่งของเทคโนโลยีใหม่ อาริอาน 4 จรวดที่ได้รับมาก ที่ประสบความสำเร็จมากของซอฟแวร์ สร้างขึ้นสำหรับมันก็เป็น ที่ใช้ในอาริอาน 5 PHILIP คอยล์: ปัญหาพื้นฐานคือ ที่อาริอาน 5 ได้เร็ว, เร่งได้เร็วขึ้น และซอฟต์แวร์ที่ไม่ได้ คิดว่า ลำโพง 1: ทำลายจรวด เป็นภัยพิบัติทางการเงินมาก, ทั้งหมดเนื่องจากข้อผิดพลาดซอฟต์แวร์นาที แต่เรื่องนี้ไม่ได้เป็นข้อมูลครั้งแรก ปัญหาการแปลงได้ plagued ทันสมัย เทคโนโลยีจรวด JACK GANSSLE: ในปี 1991 กับการเริ่มต้น จากสงครามอ่าวครั้งแรกรักชาติ ขีปนาวุธที่มีประสบการณ์ชนิดที่คล้ายกัน จากปัญหาการแปลงจำนวน เป็นผลให้ทหารอเมริกัน 28 คน และเสียชีวิตประมาณ 100 คนอื่น ๆ ได้รับบาดเจ็บ เมื่อรักชาติซึ่งควร เพื่อป้องกัน Scuds เข้ามา ล้มเหลวที่จะยิงขีปนาวุธ 1 SPEAKER: เมื่ออิรักบุกคูเวตและ อเมริกาเปิดตัวพายุทะเลทรายใน ในช่วงต้นปี 1991 แบตเตอรี่ขีปนาวุธต่อต้านการก่อการร้าย ถูกนำไปใช้ในการป้องกันประเทศซาอุดีอาระเบีย และอิสราเอลจากอิรักสกั๊ด ขีปนาวุธโจมตี รักชาติคือสหรัฐช่วงกลาง ระบบพื้นสู่อากาศที่ผลิตโดย บริษัท Raytheon THEODORE POSTOL: ขนาดของความรักชาติ interceptor ตัวเองเป็นประมาณ 20 ฟุตยาว และมันน้ำหนักประมาณ£ 2,000 และจะดำเนินการเกี่ยวกับจรวด - ฉันคิดว่ามันประมาณ£ 150 และจรวดที่ตัวเองเป็น สูงระเบิดซึ่งมี เศษเล็กเศษน้อยรอบ ๆ ปลอกของหัวรบถูกออกแบบมา ที่จะทำหน้าที่เหมือนสามสิบ 1 SPEAKER: ขีปนาวุธจะดำเนินการสี่ ต่อภาชนะบรรจุและถูกลำเลียง โดยกึ่งรถพ่วง PHILIP คอยล์: รักชาติต่อต้านขีปนาวุธ ระบบจะกลับไปที่ ไม่น้อยกว่า 20 ปีขณะนี้ มันถูกออกแบบมาอย่างชาญฉลาด ป้องกันขีปนาวุธอากาศ ยิงลงเครื่องบินศัตรู เป็นครั้งแรกในสงครามอ่าวเมื่อสงครามว่า มาพร้อมกองทัพต้องการที่จะใช้มัน จะยิงลง Scuds ไม่ใช่เครื่องบิน กองทัพอากาศอิรักไม่ได้ ดังนั้นมากของปัญหา แต่กองทัพเป็นห่วงเกี่ยวกับ Scuds ดังนั้นพวกเขาจึงพยายามที่จะอัพเกรด ต่อต้านการก่อการร้าย 1 SPEAKER: Intercepting ขีปนาวุธข้าศึก การเดินทางที่จักรห้าคือ กำลังจะถูกท้าทายพอ แต่เมื่อรักชาติก็รีบวิ่งเข้าไป บริการกองทัพไม่ได้ตระหนักถึง การปรับเปลี่ยนที่ทำให้อิรักของพวกเขา Scuds เกือบเป็นไปไม่ได้ที่จะตี THEODORE POSTOL: เกิดอะไรขึ้น เป็น Scuds ที่อยู่ มาเป็นที่ไม่เสถียร พวกเขาวอกแวก เหตุผลของเรื่องนี้ก็คือชาวอิรักใน เพื่อที่จะได้ 600 กิโลเมตรจาก ขีปนาวุธ 300 กิโลเมตรช่วงเวลา น้ำหนักออกจากจรวดด้านหน้า พวกเขาทำให้จรวดเบา ดังนั้นตอนนี้รักชาติพยายาม ที่จะมาที่สกั๊ด และส่วนใหญ่ของเวลาที่ล้นหลาม ส่วนใหญ่ของเวลาที่มันจะเพียงแค่ บินตามสกั๊ด 1 SPEAKER: เมื่อระบบต่อต้านการก่อการร้าย ผู้ประกอบการตระหนักถึงความรักชาติพลาด เป้าหมายของพวกเขาจุดชนวนรักชาติ จรวดเพื่อหลีกเลี่ยงความเป็นไปได้ การบาดเจ็บล้มตายถ้ามันได้รับอนุญาต ที่จะลดลงไปที่พื้นดิน THEODORE POSTOL: นั่นคือสิ่งที่มากที่สุด คนเห็นว่าเป็นลูกไฟขนาดใหญ่ในท้องฟ้า และเข้าใจผิดว่าเป็นดัก ขีปนาวุธสกั๊ดของ 1 SPEAKER: แม้ว่าในท้องฟ้าคืน ผู้รักชาติที่ดูเหมือนจะประสบความสำเร็จ ทำลาย Scuds ที่ Dhahran มี อาจจะเป็นความผิดพลาดที่ไม่เกี่ยวกับ การปฏิบัติ มีระบบเรดาร์ต่อต้านการก่อการร้ายของการสูญเสีย ติดตามของสกั๊ดที่เข้ามาและไม่เคย เปิดตัวอันเนื่องมาจากข้อบกพร่องซอฟต์แวร์ มันเป็นชาวอิสราเอลคนแรกที่ค้นพบ ที่ระบบอีกต่อไป อยู่บนความแตกต่างมากขึ้นเวลา เนื่องจากกลายเป็นนาฬิกา ที่ฝังอยู่ในเครื่องคอมพิวเตอร์ของระบบ JACK GANSSLE: เกี่ยวกับสองสัปดาห์ก่อน โศกนาฏกรรมใน Dhahran อิสราเอล ไปรายงานตัวที่กระทรวงกลาโหม ว่าระบบที่ได้รับการสูญเสียเวลา หลังจากนั้นประมาณแปดชั่วโมงของการทำงาน, พวกเขาสังเกตเห็นว่าระบบคือ กลายเป็นที่เห็นได้ชัดมีความแม่นยำน้อย กระทรวงกลาโหมตอบสนองด้วย บอกทั้งหมดของแบตเตอรี่รักชาติ ที่จะไม่ออกจากระบบ เมื่อมาเป็นเวลานาน พวกเขาไม่เคยพูดในสิ่งที่เป็นเวลานาน แปดชั่วโมง? 10 ชั่วโมง? 1000 ชั่วโมง? ไม่มีใครรู้ 1 SPEAKER: แบตเตอรี่รักชาติประจำ ที่ค่ายทหารที่ Dhahran และนาฬิกาภายในของข้อบกพร่องที่ได้รับ ในกว่า 100 ชั่วโมงในคืนวันที่ กุมภาพันธ์ 25 JACK GANSSLE: มันถึงเวลาที่จะติดตาม เกี่ยวกับความถูกต้องของหนึ่งในสิบของที่สอง ตอนนี้หนึ่งในสิบของที่สองคือ จำนวนที่น่าสนใจเพราะมันไม่สามารถ แสดงในไบนารีตรงซึ่งหมายความว่า มันไม่สามารถจะแสดงว่าใน คอมพิวเตอร์ดิจิตอลที่ทันสมัย มันยากที่จะเชื่อ แต่ ใช้สิ่งนี้เป็นตัวอย่าง ขอใช้เวลาจำนวนหนึ่งในสาม หนึ่งในสามไม่สามารถแสดง ในทศนิยมว่า หนึ่งในสาม .333 ไป สำหรับอินฟินิตี้ มีวิธีการทำที่มีไม่ได้ ความถูกต้องแน่นอนในทศนิยม นั่นคือชนิดเดียวกันของปัญหา ที่เกิดขึ้นในความรักชาติ อีกต่อไประบบวิ่ง ข้อผิดพลาดเวลาที่เลวร้ายที่สุดกลายเป็น 1 SPEAKER: หลังจาก 100 ชั่วโมงของการดำเนินงาน ข้อผิดพลาดในเวลาที่เป็นเพียง ประมาณหนึ่งในสามของที่สอง แต่ในแง่ของการกำหนดเป้​​าหมายขีปนาวุธ การเดินทางที่จักรห้ามันมีผลในการ ข้อผิดพลาดติดตามกว่า 600 เมตร มันจะเป็นความผิดพลาดร้ายแรงสำหรับ ทหารที่ Dhahran THEODORE POSTOL: สิ่งที่เกิดขึ้นคือ เปิดตัวสกั๊ดถูกตรวจพบโดยเร็ว ดาวเทียมเตือน และพวกเขารู้ว่าสกั๊ดมา ในทิศทางของพวกเขา พวกเขาไม่ได้รู้ว่ามันอยู่ที่ไหนมา 1 SPEAKER: ตอนนี้มันเป็นถึงเรดาร์ ส่วนประกอบของระบบต่อต้านการก่อการร้าย ปกป้อง Dhahran เพื่อค้นหาและรักษา ติดตามขีปนาวุธของศัตรูที่เข้ามา JACK GANSSLE: เรดาร์ เป็นสมาร์ทมาก มันจริงจะติดตามตำแหน่งของ สกั๊ดแล้วทำนายว่ามันอยู่ที่ไหน อาจจะเป็นในครั้งต่อไป เรดาร์ส่งชีพจรออก ที่เรียกว่าประตูช่วง THEODORE POSTOL: จากนั้นเมื่อผู้รักชาติ ตัดสินใจที่จะมีเวลาพอที่ได้ผ่านไป กลับมาและตรวจสอบสถานที่ต่อไปสำหรับ ตรวจพบวัตถุนี้มันจะไปกลับ ดังนั้นเมื่อมันเดินกลับไปที่ที่ไม่ถูกต้อง สถานที่มันก็เห็นวัตถุไม่ และมันก็ตัดสินใจว่ามีวัตถุที่ไม่มี มันเป็นระบบตรวจจับเท็จและ ลดลงติดตาม 1 SPEAKER: สกั๊ดที่เข้ามาหายไป จากหน้าจอเรดาร์และ วินาทีต่อมามันกระแทก เข้าไปในค่ายทหาร สกั๊ดฆ่าตาย 28 และเป็นคนสุดท้ายที่หนึ่ง ยิงในช่วงสงครามอ่าวครั้งแรก อนาถาปรับปรุงซอฟต์แวร์มาถึง ที่ Dhahran วันรุ่งขึ้น ข้อบกพร่องซอฟแวร์ที่ได้รับการแก้ไข, ปิดบทหนึ่งในความสุข ประวัติศาสตร์ของขีปนาวุธต่อต้านการก่อการร้าย ต่อต้านการก่อการร้ายเป็นจริงตัวย่อ สำหรับการติดตามอาร์เรย์จะค่อย ๆ สกัดกั้นของกลุ่มเป้าหมาย DAVID J ลัน: ขวาทั้งหมดดังนั้น ตัวอย่างสติเพื่อให้แน่ใจว่า และโชคดีที่เหล่านี้ในระดับที่ต่ำกว่า โรคจิตไม่ใช่สิ่งที่เราจะ มักจะมีที่จะชื่นชมอย่างแน่นอน ไม่ได้กับบางส่วนของเรา ที่เก่าแก่ที่สุดของโปรแกรม แต่ส่วนใหญ่ของข้อผิดพลาดที่คุณจะ การเผชิญหน้าจะมีตรรกะในธรรมชาติ ประโยคในธรรมชาติด้วยเหตุนี้ รหัสเพียงไม่ทำงานขวา และคุณรู้ว่ามันสวยได้อย่างรวดเร็ว แต่โดยเฉพาะอย่างยิ่งเมื่อเราได้รับไป ในตอนท้ายของภาคการศึกษามันจะ มากขึ้นและมากขึ้นของความเป็นไปได้ จริงๆคิดหนักเกี่ยวกับการออกแบบ ของโปรแกรมและพื้นฐานของคุณ การแสดง มีมากเกินไปของข้อมูล ตัวอย่างเช่นเราจะแนะนำ MySQL, ซึ่งเป็นเครื่องมือฐานข้อมูลที่เป็นที่นิยม ที่คุณสามารถใช้กับเว็บไซต์ที่ เก็บข้อมูลที่ปลายด้านหลัง และคุณจะต้องเริ่มต้นในการตัดสินใจที่ ในตอนท้ายของภาคการศึกษาไม่เพียง แต่สิ่ง ชนิดข้อมูลของตามบรรทัดเหล่านี้จะใช้ แต่ว่ากี่บิตในการใช้งาน หรือไม่ว่าคุณต้องการที่จะเก็บวันที่ เป็นวันที่และเวลาเท่าและยัง สิ่งที่ต้องการวิธีการใหญ่ที่คุณต้องการ รหัสที่ไม่ซ้ำจะเป็นสำหรับการพูด, ผู้ใช้ ในฐานข้อมูลของคุณ ในความเป็นจริงถ้าบางส่วนของคุณมี Facebook บัญชีสำหรับค่อนข้างบางเวลา และคุณรู้วิธีที่จะได้รับการเข้าถึง ไปยังผู้ใช้ ID ของคุณ - ซึ่งบางครั้งจะปรากฏขึ้นในของคุณ URL โปรไฟล์ของเว้นแต่คุณจะได้เลือก ชื่อเล่นสำหรับ URL หรือถ้าคุณได้ ใช้ของ Facebook Graph API, API ที่เปิดเผยต่อสาธารณชนโดยที่คุณ สามารถขอ Facebook สำหรับข้อมูลดิบ - คุณสามารถดูสิ่งตัวเลข ID ของคุณเป็น และหลายปีที่ผ่านมาเป็นหลักโดยใช้ Facebook ต้องเปลี่ยนจากการใช้ เทียบเท่าของ ints ใช้เวลานาน ยาวเพราะเมื่อเวลาผ่านไปเป็นผู้ใช้มา และไปและสร้างจำนวนมากของบัญชีและ บัญชีปลอมแม้พวกเขาได้อย่างง่ายดายมาก ก็สามารถที่จะหมดสิ่งที่ต้องการ 4 พันล้านค่าที่เป็นไปได้เช่น int ดังนั้นข้อมูลเพิ่มเติมเกี่ยวกับชนิดของปัญหาเหล​​่านั้น ลงถนนเช่นกัน ขวาทั้งหมดเพื่อให้ได้รับการคัดเลือก นั่นคือความไม่แน่ชัด คู่ของประกาศรวดเร็ว ดังนั้นในส่วนนี้อย่างเป็นทางการเริ่มต้นมา วันอาทิตย์วันจันทร์วันอังคาร คุณจะได้ยินผ่านทางอีเมลในภายหลังในสัปดาห์นี้ เป็นส่วนที่ได้รับมอบหมายของคุณ และคุณจะยังอยู่ที่นี่ที่จุดนั้นว่า การเปลี่ยนแปลงส่วนของคุณถ้าคุณ ตารางเวลาที่มีการเปลี่ยนแปลงในขณะนี้หรือของคุณ ระดับความสะดวกสบายที่มีการเปลี่ยนแปลงในขณะนี้ ในขณะที่หนึ่ง P-ชุดและแฮกเกอร์หนึ่ง เนื่องจากพฤหัสบดีนี้ที่มีตัวเลือก ขยายเส้นตายต่อว่า ข้อกำหนดถึงวันศุกร์ ในทางปกติ ตระหนักดีว่าปัญหาที่มาพร้อมกับ ข้อกำหนดของชุดเป็นคำแนะนำเกี่ยวกับ วิธีการใช้เครื่องใช้ CS50 ให้, เช่นเดียวกับบาง CS50 เครื่องมือเฉพาะ เหมือนสไตล์ 50 ซึ่งสามารถให้คุณ มีการตอบสนองแบบไดนามิก คุณภาพของรูปแบบรหัสของคุณและยัง ตรวจสอบ 50 ซึ่งสามารถให้คุณมี ข้อเสนอแนะแบบไดนามิกเป็นไปได้ของคุณ ความถูกต้องของรหัส ยกโทษที่เรายังคงรีดผ้า ข้อบกพร่องน้อย ๆ กับ 50 การตรวจสอบ ไม่กี่ของเพื่อนร่วมชั้นที่ไม่เริ่มต้น รอบ 04:00 คืนวันศุกร์เมื่อ สเป็คก็ขึ้นได้สังเกตเห็นตั้งแต่นั้นมา ข้อบกพร่องบางอย่างที่เรากำลังทำงาน ผ่านขอโทษและสำหรับทุกคนที่ มีประสบการณ์ความผิดหวังเกินควร ความผิดเป็นของฉัน แต่เราจะติดตาม CS50 หารือว่าเมื่อได้รับการแก้ไข ดังนั้นคำที่คะแนนตัวเอง ดังนั้นมันจะเป็นอาทิตย์หรือสองอาทิตย์ก่อนที่คุณจะ เริ่มได้รับข้อเสนอแนะในชุดปัญหา เพราะคุณยังไม่ได้ เพื่อนการเรียนการสอน และแม้แล้วเราจะเริ่มต้นในการประเมิน ปัญหา C ชุดก่อนที่เราจะ กลับไปและประเมินผลเพื่อให้รอยขีดข่วน ที่คุณได้รับที่เกี่ยวข้องมากขึ้น ข้อเสนอแนะได้รวดเร็วยิ่งขึ้น แต่โดยทั่วไปต่อหลักสูตร, CS50 ชุดปัญหาได้รับการประเมินตาม ต่อไปนี้สี่แกน - ขอบเขตความถูกต้องในการออกแบบและรูปแบบ ขอบเขตเป็นไปได้เป็นจำนวนมากโดยปกติ ระหว่างศูนย์และห้าที่ จับเท่าใด ชิ้นที่คุณกัดออก โดยปกติแล้วคุณต้องการนี​​้จะห้า อย่างน้อยคุณพยายามทุกอย่าง และสังเกตเห็นว่ามันเป็นปัจจัยคูณ เพื่อให้การทำเพียงส่วนหนึ่งของ ชุดปัญหาไม่ได้เป็นกลยุทธ์ที่ดีที่สุด ในขณะที่เห็นได้ชัดมากขึ้นคือ ความสำคัญของความถูกต้อง - เพียงแค่โปรแกรมของคุณถูกต้องด้วย เคารพข้อกำหนด? นี้จะมีน้ำหนักเพิ่มขึ้นอย่างจงใจ หนักกว่าอีกสองแกนโดย ปัจจัยที่สามเนื่องจากเราตระหนักดี ที่มักจะคุณจะใช้จ่าย เวลามากขึ้นไล่ลงข้อบกพร่องบางอย่าง, รับรหัสของคุณในการทำงานแล้วคุณ จะเยื้องมันและเลือก ชื่อตัวแปรที่เหมาะสมและ ชอบซึ่งเป็นในส่วนอื่น ๆ ของสเปกตรัมของสไตล์ ที่ไม่พูดไม่ได้เป็นรูปแบบ สิ่งที่สำคัญและเราจะสั่งสอนมันไป ทั้งเวลาในการบรรยายและในส่วน สไตล์หมายถึงความงาม ของรหัสของคุณ คุณเลือกที่ดีตั้งชื่อตัวแปร ที่เป็นเวลาสั้น ๆ แต่ค่อนข้าง อธิบาย? เป็นรหัสของคุณเยื้องที่คุณได้เห็นใน และการบรรยายในลักษณะที่สอดคล้อง สไตล์กับ 50? สุดท้ายคือการออกแบบที่เหมาะสม มีที่อยู่ตรงกลาง การออกแบบเป็นหนึ่งยากที่จะใส่ นิ้วบนเพราะมันมากขึ้น อัตนัย แต่มันอาจจะมากที่สุดที่สำคัญของ สามแกนในแง่ของการสอน มูลค่าเมื่อเวลาผ่านไปและที่นี้จะเป็น โอกาสที่เพื่อนการเรียนการสอนที่จะ คุณให้มีการตอบสนองเชิงคุณภาพ แท้จริงใน CS50 ถึงแม้ว่าเราจะมี สูตรเหล่านี้และคะแนนในตอนท้าย ของวันเหล่านี้มีความจงใจ ถังขนาดเล็กมาก - ค่าจุด ระหว่างศูนย์และสาม และศูนย์และห้า เราไม่พยายามที่จะวาดเส้นหยาบมาก ระหว่างชุดปัญหาหรือระหว่าง นักเรียน แต่ค่อนข้างจะเน้นมากที่สุดเท่าที่ เราสามารถที่คุณภาพลายมือ, ข้อเสนอแนะทั้งที่พิมพ์หรือด้วยวาจาจาก เพื่อนของคุณโดยเฉพาะการเรียนการสอน, คุณจะได้รับรู้ว่าค่อนข้างดี แต่โดยทั่วไปแล้วผู้ที่น้ำหนักเป็น ที่แกนต่างๆจะมี ในขณะเดียวกันก็เป็นมูลค่าการรักษาใน ทราบว่าคุณไม่ควรคิดว่า สามจากห้าเป็น 60% และ จึงประมาณความล้มเหลว สามคือความหมายจะเจตนา การเรียงลำดับของกลางถนนดี หากคุณได้รับที่สาม จุดเริ่มต้นของภาคการศึกษาที่ หมายแน่นอนจะดี วางที่จะเริ่มต้น หากคุณได้รับออกร้าน twos มี แน่นอนการทำงานที่จะจ่ายเงินเล็ก ๆ น้อย ๆ บางอย่าง ความสนใจมากขึ้นเพื่อใช้ประโยชน์ ส่วนและเวลาราชการ หากคุณได้รับสี่ ห้าและยิ่งใหญ่ แต่จริงๆเราหวังที่จะเห็นลูกทีม ในหมู่นักเรียน - มาก ออมสินต่อนักเรียน แต่เริ่มต้น ภาคการศึกษาที่นี่ในการจัดเรียงของ สองถึงสามช่วง แต่สิ้นสุด ขึ้นที่นี่ใน 4-5 ช่วง นั่นคือสิ่งที่เรากำลังมองหาจริงๆ และเราก็เก็บไว้ในใจว่าเดลต้า คุณแสดงระหว่างศูนย์สัปดาห์และสัปดาห์ 12 เมื่อฉันทำเกรด มันไม่สำคัญกับเราอย่างแน่นอนว่า คุณยุติธรรมที่จุดเริ่มต้นของคุณถ้า วิถีแน่นอน ปรับตัวสูงขึ้นและแข็งแรง ซื่อสัตย์ในการศึกษา - เพื่อให้ฉันใส่ของฉัน ขึ้นเสียงร้ายแรงรอสักครู่ ดังนั้นหลักสูตรนี้มีความแตกต่างจาก ส่งนักเรียนมากกว่าอื่นใด ในประวัติศาสตร์ที่คณะกรรมการการโฆษณาผมเชื่อว่า เรามีการเรียงลำดับของการนับที่หายไปนี้ จุดของวิธีการที่มักจะเกิดเหตุการณ์นี้ และที่ไม่เพราะนักเรียนใน 50 ใดมีมากขึ้นกว่าไม่น่าไว้วางใจของพวกเขา เพื่อนร่วมชั้นเรียนที่อื่น แต่ตระหนักเช่นกันว่าเราจะดีมาก ที่ตรวจสอบการเรียงลำดับของสิ่งนี้ และที่เป็นข้อได้เปรียบที่ ชั้นเรียนวิทยาศาสตร์คอมพิวเตอร์ในการที่มีเรา สามารถและเราไม่เปรียบเทียบนักเรียนทุกคน ชุดปัญหาที่คู่ที่ชาญฉลาดกับทุก อื่น ๆ ไม่เพียง แต่ในปีนี้ แต่ทุกปีก่อน เรามีความสามารถเช่นเดียวกับนักเรียนใน ชั้นเรียนที่ Google และเพื่อหารหัส ในเว็บไซต์เช่น github และ กระดานสนทนา มีโซลูชั่นอย่างยิ่งที่จะ CS50 มี p-ชุดลอยรอบมี แต่ถ้าคุณสามารถหาพวกเขา เราสามารถพบพวกเขา และทั้งหมดนี้เป็นอย่างมากโดยอัตโนมัติ และง่ายและมีความสุขที่เราจะได้พบกับ แต่ฉันต้องการที่จะเน้นมากเกินไปว่า นโยบายความซื่อสัตย์สุจริตของหลักสูตรวิชาการคือ มีความหมายอย่างมากที่จะเป็นมาก ตรงข้ามของจิตวิญญาณที่ อันที่จริงปีนี้เราได้ซักค้านสิ่งที่ ในหลักสูตรนี้จะเป็นจุด dot dot มีรายละเอียดมากขึ้น ในหลักสูตร แต่รูปแบบที่ครอบคลุมในหลักสูตร จริงๆคือการเป็นที่เหมาะสม เราตระหนักดีว่ามีความสำคัญ จำนวนเงินของการสอน ค่าในความร่วมมือที่พอเหมาะ, กับเพื่อนร่วมชั้น, whereby คุณ สองหรือสามคุณหรือคุณมากขึ้น ยืนอยู่ที่ไวท์บอร์ด whiteboarding เพื่อที่จะ พูดความคิดของคุณ - เขียนออก pseudocode ในภาพ ไดอะแกรมสิ่งมาริโอควรจะเป็นถ้า คุณต้องเขียนมันเป็นครั้งแรก ใน pseudocode สิ่งที่ควรธึม - วิธีการที่ควรประพฤติต่อ ชุดปัญหาที่หนึ่ง? และเพื่อให้ตระหนักถึงพฤติกรรมที่ ที่เราขอแนะนำให้เป็นอย่างมาก มากตามเส้นที่ และในหลักสูตรที่คุณจะเห็น ทั้งกลุ่มกระสุนภายใต้ หมวดหมู่ที่เหมาะสมและไม่เหมาะสม ประเภทที่ช่วยให้เราช่วย คุณมัดใจรอบที่ เราทำวาดเส้นที่ และโดยทั่วไปกฎที่ดีของหัวแม่มือ คือว่าถ้าคุณกำลังดิ้นรนเพื่อแก้ปัญหา ข้อผิดพลาดบางส่วนและเพื่อนหรือเพื่อนร่วมชั้นของคุณ นั่งถัดจากคุณมันเป็น ที่เหมาะสมสำหรับคุณที่จะแสดงให้เขาหรือเธอ รหัสและบอกว่าเดี๋ยวก่อนคุณสามารถช่วยของคุณ ฉันคิดออกสิ่งที่เกิดผิดที่นี่? ทั่วไปเราจะไม่ยอมรับ ฝั่งตรงข้าม มันไม่ได้เป็นคำตอบที่ถูกต้องสำหรับคุณ เพื่อนหรือเพื่อนร่วมชั้นของที่นี่จะพูดว่าโอ้ เพียงแค่มองไปที่เหมืองและรูป มันออกมาจากที่ นั่นก็คือการจัดเรียงของที่ไม่สมเหตุผล แต่มีคนอื่นสมองอีก ดวงตาคู่หนึ่งมองไปที่อื่น หน้าจอหรือดูที่รหัสของคุณ และพูดว่าคุณแน่ใจว่าคุณต้องการ จะมีห่วงที่นี่? หรือคุณแน่ใจว่าคุณต้องการ อัฒภาคที่นี่ที่? หรือโอ้ข้อความข้อผิดพลาดที่หมายถึงนี้ ผู้ที่มีความเหมาะสมและ พฤติกรรมที่ได้รับการสนับสนุน กรณีที่ผมก็ยิ่งทำให้ ก่อนหน้านี้ลงต้มเมื่อนักเรียนมี ในช่วงดึกทำให้การตัดสินใจ การตัดสินใจและส่งอีเมลรหัสของพวกเขาไป คนอื่นหรือเพียงแค่ว่า นี่มันอยู่ใน Dropbox หรือ Googling ในช่วงดึก และดังนั้นฉันจะให้กำลังใจและขอของคุณ ถ้าคุณไม่ได้หลีกเลี่ยงไม่ได้เหล่านั้น ช่วงเวลาแห่งความเครียดที่คุณกำลังกระแทกขึ้น กับกำหนดคุณมีสายไม่มี วันเนื่องจากเป็นวันศุกร์แล้วว่า จุดส่งอีเมลถึงหัวของหลักสูตรหรือ ตัวเองโดยตรง พูดฟังฉันที่ฉัน จุดแตกหักที่นี่ ให้มีการสนทนา และคิดออก resorting ไปยังเว็บอื่น ๆ บางอย่างหรือไม่ พฤติกรรมที่เหมาะสมคือไม่เคย การแก้ปัญหาและมากเกินไปของคุณ เพื่อนร่วมชั้นจะไม่ที่นี่ มหาวิทยาลัยเพราะการตัดสินใจว่า แต่มันง่ายมากที่จะกระโปรงบรรทัดที่ และนี่คือภาพเล็กเพื่อเป็นกำลังใจ คุณเพิ่มขึ้นจาก Reddit เพื่อให้ในขณะนี้ ทุกอย่างจะตกลง ดังนั้นสรุปอย่างรวดเร็วแล้ว จากที่เราซ้ายปิด ดังนั้นสัปดาห์ที่ผ่านมาจำได้ว่าเราแนะนำ เงื่อนไขไม่ได้อยู่ในรอยขีดข่วน แต่ในเวลานี้ C และมีบางไวยากรณ์ใหม่ แต่ จริงๆไม่มีความคิดใหม่ต่อ เรามีสีหน้าบูลีนที่เราสามารถ หรือร่วมกับสองแนวตั้ง หรือบาร์และร่วมกับสอง เครื่องหมายบอกว่าทั้งซ้าย และด้านขวาจะต้องเป็นจริง สำหรับการดำเนินการ จากนั้นเราก็มีสวิทช์ซึ่งเรามอง ที่สั้น ๆ แต่ผมเสนอเป็นจริง เพียงแค่ไวยากรณ์ที่แตกต่างกันเพื่อให้บรรลุ ชนิดเดียวกันเป้าหมายถ้าคุณรู้ว่าใน ล่วงหน้าว่ากรณีของคุณ จะไปเป็น เรามองไปที่ลูป สำหรับวงอาจจะเป็นที่พบมากที่สุด หรืออย่างน้อยหนึ่งที่คน โดยทั่วไปจะมีการเข้าถึงสำหรับสัญชาตญาณ แม้ว่ามันจะดูเล็กน้อยคลุมเครือ คุณจะเห็นหลายตัวอย่างมากจากการนี​​้ ก่อนที่จะนานที่คุณมี แล้วในช่วงปลายสัปดาห์ที่ผ่านมา ในขณะที่ลูปสามารถในทำนองเดียวกัน บรรลุในสิ่งเดียวกัน แต่ถ้าคุณต้องการที่จะทำ incrementation ใด ๆ หรือการปรับปรุง ค่าตัวแปรของคุณจะต้อง ทำมันขึ้นด้วยตนเองมากกว่า สำหรับวงก่อนที่จะช่วยให้ และแล้วเราก็ทำห่วงในขณะที่คน, ซึ่งช่วยให้เราสามารถทำบางสิ่งบางอย่างที่ อย่างน้อยหนึ่งครั้งในขณะที่บางสิ่งบางอย่าง อื่นเป็นความจริง และนี่คือโดยเฉพาะอย่างยิ่งที่ดีสำหรับ โปรแกรมหรือเกมที่คุณต้องการ เพื่อให้ผู้ใช้สำหรับบางสิ่งบางอย่าง อย่างน้อยหนึ่งครั้ง แล้วถ้าเขาหรือเธอไม่ให้ความร่วมมือ คุณอาจต้องการที่จะทำมัน ครั้งแล้วครั้งเล่า กับตัวแปรในขณะเดียวกันเรามีเส้น จากรหัสเช่นนี้ซึ่งอาจ จะมีสองเส้น คุณสามารถประกาศ int เรียกว่า เคาน์เตอร์อัฒภาค หรือคุณเพียงสามารถประกาศและ กำหนดไว้เพื่อที่จะพูด จะให้ค่าในเวลาเดียวกัน และแล้วในที่สุดเราได้พูดคุย เกี่ยวกับฟังก์ชั่น และนี่ก็เป็นตัวอย่างที่ดีใน แง่ที่ว่ามันแสดงให้เห็นถึง ทั้งสองประเภทของฟังก์ชั่น หนึ่งคือ GetString () ซึ่งอีกครั้ง ได้รับสายจากผู้ใช้ แต่ GetString () เป็นชนิดของที่น่าสนใจ เพื่อให้ห่างไกลที่เราได้ใช้มัน เพราะเราใช้เสมอกับ บางสิ่งบางอย่างในด้านซ้ายมือของ เครื่องหมายเท่ากับ กล่าวคือ GetString (นั้น) ส่งกลับค่า มันกลับของหลักสูตรสตริง และจากนั้นในด้านซ้ายมือเราไม่ เพียงประหยัดสตริงที่ด้านในของ ชื่อที่เรียกว่าตัวแปร นี้จะแตกต่างกันในความรู้สึกจาก printf เพราะ printf อย่างน้อยในของเรา การใช้งานที่นี่ไม่กลับอะไร ในฐานะที่เป็นกันก็ไม่มีอะไรตอบแทน เราก็ไม่ได้สนใจว่ามันคืออะไร แต่ก็ไม่ได้มีอะไร เรียกว่าผลข้างเคียง และผลข้างเคียงที่อยู่ในทุกสิ่ง กรณีที่เราเคยเห็นป่านนี้? สิ่งที่ไม่ printf ทำอะไร? มันพิมพ์บางสิ่งบางอย่างไปยังหน้าจอ, แสดงข้อความหรือตัวเลขหรือบางสิ่งบางอย่าง บนหน้าจอ และที่ถือว่าเป็นเพียงผลข้างเคียง เพราะมันไม่ได้จริงๆส่ง มันกลับมาให้ฉัน มันไม่ใช่คำตอบที่ด้านในของ กล่องสีดำที่ฉันสามารถแล้ว เข้าถึงในและคว้า มันแค่ทำมันในตัวเองมาก เช่นเดียวกับการตัดสินใจที่ถูกเสียบนี้ กล่องดำสัปดาห์ที่ผ่านมาและเขาอย่างใด อย่างน่าอัศจรรย์ถูกวาดบนกระดาน ผมไม่เกี่ยวข้องจริง ที่จะเป็นผลข้างเคียง แต่ถ้าจริงผมจะไปให้ถึงกลับมาอยู่ใน ที่นี่และพูดว่าโอ้สตริงที่นี่คือ จากผู้ใช้ที่จะ เป็นค่าตอบแทน และป่านนี้เราได้ใช้เฉพาะฟังก์ชั่น ว่าคนอื่น ๆ ได้เขียน แต่เราสามารถทำได้จริงเหล่านี้ ชนิดของสิ่งที่ตัวเอง ดังนั้นฉันจะไปลง CS50 เครื่องใช้อีกครั้ง ผมขอปิดแท็บที่เรา ได้เปิดสักครู่ที่ผ่านมา และแจ้งให้เราไปข้างหน้าและ สร้างแฟ้มใหม่ และฉันจะไปข้างหน้าและ เรียกสิ่งนี้ว่าหนึ่ง positive.c ดังนั้นผมจึงต้องการที่จะทำบางสิ่งบางอย่างด้วย จำนวนบวกที่นี่ ดังนั้นฉันจะไปข้างหน้าและทำ int - ขออภัย - # include อย่าให้ที่เดียวกัน ความผิดพลาดเป็นมาก่อน int main (void) เปิดหยิก รั้งปิดวงเล็บปีกกา และตอนนี้ฉันต้องการจะทำต่อไปนี้ ผมอยากจะเขียนโปรแกรมที่ ยืนยันว่าผู้ใช้จะช่วยให้ ฉันเป็นจำนวนเต็มบวก ดังนั้นไม่มีฟังก์ชั่น GetPositiveInt คือ ใน CS50 ห้องสมุด มีเพียง GetInt (คน) แต่ที่ตกลงเพราะฉันมี โครงสร้างที่มีที่ฉันสามารถกำหนด ข้อ จำกัด เพิ่มเติมเล็กน้อยเกี่ยวกับค่าที่ ฉันสามารถทำอะไรเช่นนี้ ดังนั้น int n - และถ้าคุณกำลังพิมพ์ไปเพียงตระหนักถึง ฉันจะกลับไปและ เปลี่ยนบางสิ่งบางอย่างในช่วงเวลา - ดังนั้น int n เท่ากับ GetInt () และที่ว่าจะใส่ ภายใน int ของ n และแจ้งให้เราจะอธิบายเพิ่มเติม ให้ฉันพูดอะไรบางอย่างเหมือนที่ผมเรียกร้องให้ คุณจะให้ฉันเป็นจำนวนเต็มบวก ทั้งหมดขวา ดังนั้นเพียงเล็กน้อยของคำแนะนำ และตอนนี้สิ่งที่ฉันจะทำอย่างไร ดีฉันรู้อยู่แล้วว่าจากฉันง่าย เงื่อนไขหรือสาขาเช่นเดียวกับผม มีอยู่ในขั้นตอนแรกฉันจะพูดบางสิ่งบางอย่าง ชอบถ้า n มีค่าน้อยกว่าหรือเท่ากับ ศูนย์แล้วฉันต้องการจะทำบางสิ่งบางอย่าง ชอบที่ไม่ได้เป็นบวก แล้วฉันจะทำ - ตกลง แต่ผมต้องการได้รับ int ที่ ดังนั้นฉันจะไปขึ้นที่นี่และฉันสามารถชนิด จากสิ่งนี้คัดลอกเยื้องนี้ แล้วตกลง ดังนั้นถ้า n น้อยกว่าหรือ เท่ากับศูนย์ทำเช่นนี้ ตอนนี้สิ่งที่ถ้าผู้ใช้ ไม่ให้ความร่วมมือ? ดีแล้วที่ฉันจะไป ยืมนี้ที่นี่ แล้วฉันจะไปที่นี่ และนี่และที่นี่ ดังนั้นนี่คือไม่ชัดเจน การแก้ปัญหาใช่มั้ย? เนื่องจากมีปลายในสายตาไม่ได้ ถ้าผมต้องการที่จะเรียกร้องว่าผู้ใช้จะช่วยให้ ฉันเป็นจำนวนเต็มบวก, ที่ฉันสามารถ ได้รับจริง int จากนั้นผมก็สามารถตรวจสอบว่า int แต่แล้วฉันต้องการตรวจสอบอีกครั้งและ ตรวจสอบอีกครั้งและตรวจสอบอีกครั้ง ดังนั้นเห็นได้ชัดว่าเป็นสิ่งที่ดีกว่า สร้างจะใช้ที่นี่? ขวาทั้งหมดดังนั้นชนิดของห่วงบาง ดังนั้นฉันจะได้รับการกำจัด เกือบทั้งหมดนี้ และผมต้องการที่จะได้รับนี้ int อย่างน้อยหนึ่งครั้ง ดังนั้นฉันจะพูดทำ - และฉันจะกลับมา ในขณะที่ในเวลาเพียงสักครู่ - ตอนนี้ทำในสิ่งที่? ฉันจะทำ GetInt int n ได้รับ () ตกลง เพื่อให้เป็นที่ดีงาม และตอนนี้วิธีการที่มักจะทำ ผมต้องการที่จะทำเช่นนี้? ให้ฉันใส่ภายใน printf ของวง ดังนั้นผมจึงสามารถเรียกร้องอีกครั้งและอีกครั้ง ถ้าจำเป็นต้องเป็น และฉันทำในสิ่งที่ต้องการนี​​้ ในขณะที่สภาพที่จะทำอะไร? ฉันต้องการให้ทำเช่นนี้ ในขณะที่กรณีคืออะไร? ใช่ ยังไม่มีข้อความที่มีค่าน้อยกว่าหรือเท่ากับศูนย์ ดังนั้นแล้วเราได้อย่างมีนัยสำคัญ ทำความสะอาดรหัสนี้ขึ้น เราได้ยืมง่ายมากสร้าง - ทำห่วงในขณะที่ ผมเคยถูกขโมยเพียงสายสำคัญ ของรหัสที่ฉันเริ่มต้นการคัดลอกและ วางซึ่งเป็นไม่ฉลาด และดังนั้นตอนนี้ฉันจะไปจริงวาง มันอยู่ในที่นี่และทำมันอีกครั้ง และตอนนี้สิ่งที่ฉันต้องการจะทำอย่างไรที่ ท้ายสุดของโปรแกรมนี้? ฉันจะบอกสิ่งที่ง่าย ชอบขอบคุณสำหรับ - และ ฉันจะทำ i% สำหรับ int - n เครื่องหมายจุลภาคแล้ว เสียบ n, อัฒภาค ทั้งหมดขวา ดังนั้นเรามาดูสิ่งที่เกิดขึ้นในขณะนี้ เมื่อผมรันโปรแกรมนี้ ฉันจะไปข้างหน้าและ จะทำให้บวก ด่า ข้อผิดพลาดน้อย เพื่อให้ฉันเลื่อนกลับขึ้นไปเป็นครั้งแรก ไม่ทำงานผ่านพวกเขาไปข้างหลัง ทำงานผ่านพวกเขาจากบนลงล่าง เกรงว่าพวกเขาน้ำตกและมีเพียง สิ่งหนึ่งที่เป็นความผิด ประกาศโดยปริยาย GetInt () ฟังก์ชัน ใช่ ดังนั้นมันยังไม่เพียงพอ ชนิดของฉันทำผิดพลาดเหมือนกัน แต่ เล็ก ๆ น้อย ๆ ที่แตกต่างกันในเวลานี้ ฉันจะต้องไม่เพียง แต่รวม stdio.h ยัง cs50.h ซึ่งรวมถึง ประกาศที่เรียกว่าได้รับของ int ซึ่ง เครื่องใช้สอนหรือสอน C GetInt สิ่ง () เป็น เพื่อให้ฉันบันทึกใหม่ ฉันจะละเว้นข้อผิดพลาดอื่น ๆ เพราะฉันจะไปหวังว่าพวกเขากำลัง อย่างใดที่เกี่ยวข้องมีข้อผิดพลาด ฉันคงอยู่แล้ว เพื่อให้ฉันไปข้างหน้าและ recompile ที่มีให้บวกใส่ ด่า สามข้อผิดพลาดยังคง ผมขอเลื่อนขึ้นไปเป็นครั้งแรก ตัวแปร n ที่ไม่ได้ใช้ เราไม่เคยเห็นแบบนี้มาก่อน และนี่ก็เป็นเพียงเล็กน้อยคลุมเครือ นี่คือผลลัพธ์ของคอมไพเลอร์ และสิ่งที่ว่าสายไฮไลท์ มี - positive.c :9:13 - จะพูดก็บอกว่าเก้าเส้นของ positive.c ที่ตัวอักษรที่ 13, คอลัมน์ 13th, คุณทำผิดพลาดนี้ และโดยเฉพาะอย่างยิ่งมันบอก ฉันไม่ได้ใช้ตัวแปร n ดังนั้นเรามาดู - เก้าเส้น ฉันใช้ n ในแง่ที่ว่า ฉันให้ค่าเป็น แต่สิ่งที่คอมไพเลอร์ไม่ชอบคือ ว่าฉันไม่ดูเหมือนจะใช้มัน แต่รอสักครู่, ฉันใช้มัน ในบรรทัดที่ 11 ผมใช้มันที่นี่ แต่ถ้าฉันเลื่อนลงต่อไป ที่ positive.c :11 - เพื่อที่สาย 11, 12 ตัวอักษร คอมไพเลอร์บอกฉันใช้ ไม่ได้ประกาศ n ระบุ หมายถึงไม่ได้ประกาศดังนั้นผมจึงมี ไม่ได้ระบุว่ามันเป็น ตัวแปรที่มีชนิดข้อมูล แต่รอสักครู่ ผมตรงที่อยู่ในสายเก้า ดังนั้นคนที่กำลังสับสนจริงๆที่นี่ ก็ทั้งฉันหรือคอมไพเลอร์เพราะ ในสายเก้าอีกครั้งผมประกาศ int n และฉันกำหนด กลับค่า GetInt () แล้วฉันใช้ที่ n ตัวแปรในสาย 11 และตรวจสอบว่าค่าที่เป็นน้อย มากกว่าหรือเท่ากับศูนย์ แต่เห็นได้ชัดว่านี้คือ ที่ไม่ดีและขาดทำไม? พูดอีกใช่หรือไม่ ah, ฉันต้องประกาศก่อนที่ n เข้ามาในวง แต่ทำไม? ผมหมายความว่าเราเพียงแค่นำเสนอบิตที่ผ่านมาว่า ก็ปรับที่จะประกาศตัวแปร ทั้งหมดในหนึ่งบรรทัดแล้ว กำหนดให้ค่าบางอย่าง ตัวแปรทั่วโลก - ขอกลับมา กับความคิดในเวลาเพียงสักครู่ว่า คุณไม่ต้องการให้ฉันไปใส่ทำไม มันนอกห่วง? มันเป็น อย่างแน่นอน ดังนั้นแม้ว่า counterintuitive บ้าง ให้ฉันสรุป เมื่อคุณประกาศ n ภายใน ของบล็อกทำมี - โดยเฉพาะด้านในของ ที่วงเล็บปีกกา - ว่าตัวแปร n มีอะไร ที่เรียกว่าขอบเขต - ไม่เกี่ยวข้องกับระบบการให้คะแนนของเราใน แน่นอน - แต่มีขอบเขตที่ จำกัด ให้กับผู้ที่วงเล็บปีกกา ในคำอื่น ๆ โดยปกติถ้าคุณประกาศ ตัวแปรภายในชุดของ วงเล็บปีกกา, ตัวแปรที่มีอยู่เพียง ภายในของวงเล็บปีกกาเหล่านั้น ดังนั้นโดยตรรกะคนเดียวที่แม้ว่า ผมเคยประกาศ n ในสายเก้ามัน หลักหายไปจากขอบเขต หายไปจากหน่วยความจำเพื่อที่จะพูด, ตามเวลาที่ฉันกดบรรทัดที่ 11 เพราะสาย 11, โชคร้ายคือ นอกวงเล็บปีกกาเหล่านั้น ดังนั้นผมจึงโชคร้ายไม่สามารถแก้ไขปัญหานี้โดย จะกลับไปที่สิ่งที่ฉันทำมันก่อน ในตอนแรกคุณอาจทำเช่นนี้ แต่สิ่งที่คุณอยู่ตอนนี้ไม่ได้ ทำ cyclically? คุณไม่ได้รับอย่างเห็นได้ชัด int cyclically ดังนั้นเราจึงสามารถออกจาก GetInt () และเรา ควรปล่อยให้ GetInt () ภายใน ห่วงเพราะนั่นคือสิ่งที่เราต้องการ รบกวนผู้ใช้อีกครั้งและอีกครั้ง แต่มันไม่พอเพียงที่จะไป ขึ้นอยู่กับสายการพูด, หก int n, อัฒภาค ไม่ให้ค่าเป็นยังเพราะ คุณไม่จำเป็นต้องเพียง แต่ แต่ตอนนี้ลงที่นี่แจ้งให้ทราบล่วงหน้า - นี้ จะเป็นความผิดพลาดง่ายมาก ฉันไม่ต้องการเงาของฉันหน้าที่แล้ว ประกาศ n ฉันต้องการใช้ n ว่า จริงแล้ว และอื่น ๆ ในขณะนี้สาย 10, ผมกำหนดค่า n แต่ในบรรทัดที่หกฉันประกาศ n และเพื่อให้สามารถหรือฉันไม่สามารถ ใช้ในสาย 12 ตอนนี้ ฉันสามารถเพราะระหว่างที่หยิก การจัดฟันเป็น n ประกาศตอนนี้ หนึ่งขึ้นที่นี่เมื่อห้าเส้น คนหนึ่งที่นี่เมื่อวันที่ 14 เส้น ดังนั้นถ้าตอนนี้ผมซูมออกบันทึกแฟ้มนี้ไป กลับเข้ามาและเรียกให้บวก รวบรวมเวลานี้ ดังนั้นที่มีอยู่แล้วมีความคืบหน้า เฉือน . / บวกใส่ ผมเรียกร้องให้คุณให้ฉัน เป็นจำนวนเต็มบวก เชิงลบ 1 เชิงลบ 2 เชิงลบ 3 เป็นศูนย์ หนึ่ง และขอบคุณสำหรับหนึ่งคือ สิ่งที่พิมพ์ออกมาในขณะนี้ ให้ฉันพยายามอย่างอื่น ออกจากความอยากรู้ ผมได้รับการบอกใส่จำนวนเต็ม แต่สิ่งที่ถ้าฉันแทนพิมพ์แกะ? ดังนั้นขณะนี้ดูแตกต่างกันอย่างรวดเร็ว - พยายามอีก แต่ไม่มีที่ไหนในรหัสของฉัน ผมเขียนลองใหม่อีกครั้ง เพื่อที่สันนิษฐานว่าเป็นนี้ลองใหม่อีกครั้ง แจ้งให้มาจากที่คุณจะพูด? อ้างจาก GetInt () ตัวเอง ดังนั้นหนึ่งในสิ่งที่พนักงานของ CS50 ไม่ สำหรับคุณอย่างน้อยในเหล่านี้ไม่กี่ครั้งแรก สัปดาห์เราคือการได้เขียนบางจำนวน ของข้อผิดพลาดการตรวจสอบเพื่อให้แน่ใจว่าถ้า คุณโทร GetInt () คุณอย่างน้อยจะ กลับ int จากผู้ใช้ คุณจะไม่ได้รับสาย คุณจะไม่ได้รับถ่าน คุณจะไม่ได้รับบางสิ่งบางอย่าง อื่นทั้งหมด คุณจะได้รับ int ตอนนี้มันอาจจะไม่เป็นบวก มันอาจจะไม่ลบ เราจะไม่รับประกันรอบที่ แต่เราจะรบกวนผู้ใช้ที่จะลองใหม่อีกครั้ง, ลองลองใหม่อีกครั้งจนกว่าเขาหรือเธอจริง ให้ความร่วมมือ ในทำนองเดียวกันถ้าฉันจะทำ 1.23, ที่ไม่ได้เป็น int แต่ถ้าฉันพิมพ์ในการพูด, 50, ว่า ทำให้ผมมีค่าที่ฉันต้องการ ทั้งหมดขวา ดังนั้นไม่เลว คำถามใด ๆ เกี่ยวกับสิ่งที่เราได้ทำเพียงแค่? Takeaway สำคัญถูกต้องมีความชัดเจนไม่ได้ ห่วงมากซึ่งเราได้เห็น ก่อนที่จะถึงแม้ว่าเรายังไม่ได้จริงๆ ใช้ แต่ในเรื่องของขอบเขตที่ ตัวแปรจะสามารถใช้ได้เฉพาะ ภายในขอบเขตที่ระบุไว้บางส่วน ขวาทั้งหมดให้ฉันอยู่ที่ข้อเสนอแนะ ที่คุณทำไว้ก่อนหน้าว่าจาก ตัวแปรทั่วโลก เช่นกันก็จะเปิดออกอีกว่า วิธีการแก้ปัญหานี้ แต่ โดยทั่วไปแล้วจะแก้ปัญหาที่ไม่ถูกต้องหรือ โซลูชั่นที่ออกแบบมาไม่ดีคือการ ประกาศตัวแปรของคุณเป็นอะไร ที่เรียกว่าตัวแปรทั่วโลก ตอนนี้ฉันชนิดของการละเมิดคำนิยามของฉัน ขอบเขตเพราะมี ไม่มีวงเล็บปีกกาที่ด้านบนมาก และที่ด้านล่างสุดของไฟล์ แต่ความหมายว่า ว่าขณะนี้อยู่ในสายสี่ n คือตัวแปรทั่วโลก และเป็นชื่อที่แสดงถึงมัน เพียงแค่สามารถเข้าถึงได้ทุกที่ จริงมีรอยขีดข่วนเหล่านี้ ถ้าคุณใช้ตัวแปรคุณอาจจำ คุณต้องเลือกว่าจะเป็นสำหรับ ผีสางนี้หรือสไปรท์ทั้งหมด ดีสไปรท์ทั้งหมดเป็นเพียงที่ชัดเจน วิธีการพูดทั่วโลก อ้าง? ah, คำถามที่ดีจริงๆ ดังนั้นจำได้ว่าในรุ่นแรก ๆ ของรหัสของฉันเมื่อฉันไม่ถูกต้อง n ประกาศและกำหนดไว้ในเก้าเส้น - ผมประกาศว่ามันเป็นตัวแปร และฉันให้มันมีค่ากับ ดำเนินการมอบหมาย - นี้ให้ฉันสองข้อผิดพลาด หนึ่งความจริงที่ว่า n ไม่ได้ใช้, และอีกสองคนที่เส้น 11 มันก็ไม่ได้รับการประกาศ ดังนั้นก่อนที่หนึ่งฉันไม่ได้ ที่อยู่ในช่วงเวลานั้น มันไม่ได้เป็นอย่างเคร่งครัดข้อผิดพลาดในการประกาศ ตัวแปร แต่ไม่ได้ใช้มัน แต่หนึ่งในสิ่งที่เราเคยทำมาแล้วใน CS50 เครื่องใช้จงใจ pedagogically เราคือได้ cranked ขึ้น ความคาดหวังของคอมไพเลอร์ที่จะทำให้ แน่ใจว่าคุณกำลังทำสิ่งที่ไม่เพียง ได้อย่างถูกต้อง แต่จริงๆอย่างถูกต้อง เพราะถ้าคุณกำลังประกาศตัวแปร เช่น n และไม่เคยใช้มันหรือใช้มัน อย่างถูกต้องแล้วสิ่งที่ มันมีการทำ? มันมีจุดมุ่งหมายที่แท้จริงไม่ และมันง่ายมากที่เมื่อเวลาผ่านไปถ้าคุณ ไม่กำหนดค่าคอมพิวเตอร์ของคุณเองใน วิธีนี้จะเพียงแค่มีรหัสที่มี เศษเล็ก ๆ น้อย ๆ ที่นี่ที่เหลือมี แล้วเดือนต่อมาคุณมองย้อนกลับไปและ คุณชอบแนวนี้คือเหตุผลว่าทำไม รหัสมี? และถ้าไม่มีเหตุผลที่ดีก็ ไม่เป็นประโยชน์ต่อคุณหรือเพื่อนร่วมงานของคุณ ลงที่ถนนที่จะมีการ สะดุดแล้ว เช่นกันซึ่งเป็น ที่มาจาก? ดีจำได้ว่าทุกครั้งที่เรารวบรวมทุก โปรแกรมทั้งหมดของสิ่งนี้เป็น ถูกพิมพ์ ดังนั้นเราจะกลับมานี้ แต่อีกครั้งให้เป็นโปรแกรมที่ โดยอัตโนมัติกระบวนการของการรวบรวมโดย การทำงานของคอมไพเลอร์ที่เกิดขึ้นจริง เรียกว่าเสียงดังกราว สิ่งนี้ในที่สุดเราก็จะเห็นมี จะทำอย่างไรกับการแก้จุดบกพร่องที่มีพิเศษ โปรแกรมที่เรียกว่าดีบัก นี้จะทำอย่างไรกับการเพิ่มประสิทธิภาพ รหัส - เพิ่มเติมว่าในอนาคต std = c99 - นี้ก็หมายความว่าใช้ 1999 รุ่นของ C. C ถูกรอบนานกว่า แต่พวกเขาทำดีบาง 10 เปลี่ยนแปลงบวกกับปีที่ผ่านมา และนี่คือคนที่เกี่ยวข้อง เราจะบอกว่าทำอะไรที่ ก่อนหน้านี้จะได้รับการแจ้งเตือน ข้อผิดพลาดของการป้องกันไม่ให้นักเรียน จากการรวบรวม ผนังและวิธีการทำที่สำหรับ ทั้งกลุ่มของสิ่งที่ไม่ได้ ที่เกี่ยวข้องเพียงเพื่อให้ตัวแปร แล้วให้เราเลื่อนไป จุดสิ้นสุดของบรรทัดนี้ และเรื่องนี้ก็เช่นกันเราจะในที่สุด กลับมาที่ เห็นได้ชัดว่านี่คือชื่อของ ไฟล์ที่ผมรวบรวม นี้จำได้ว่าชื่อของไฟล์ ผม outputting เป็นชื่อ ของโปรแกรม runnable ของฉัน นี้-lcs50 เพียงหมายถึงการใช้ CS50 ห้องสมุดและศูนย์ใด ๆ และคนที่ พนักงานเขียนและรวบรวมไว้ก่อนหน้านี้ ในปีนี้รวม พวกเขาเข้าไปในโปรแกรมของฉัน และทุกคนรู้ว่าสิ่งที่ LM-คืออะไร? มันเป็นห้องสมุดคณิตศาสตร์ซึ่งเป็น เพียงแค่มีแม้ว่าคุณ ไม่ได้ทำคณิตศาสตร์ใด ๆ มันเป็นเพียงการให้โดยอัตโนมัติ แจ้งกับเราไว้ให้ ดีให้ฉันทำตัวอย่างหนึ่งที่อื่น ๆ ที่นี่โดยการเปิดขึ้นไฟล์ใหม่ และแจ้งให้เราบันทึกหนึ่งนี้เป็น string.c แต่กลับกลายเป็นว่าในขณะที่เราพูดคุยเกี่ยวกับข้อมูล ประเภทวันนี้มีมากยิ่งขึ้น ที่เกิดขึ้นภายใต้ประทุน กว่าที่เราเคยเห็นป่านนี้ เพื่อให้ฉันได้อย่างรวดเร็วทำโปรแกรมอย่างรวดเร็ว รวม stdio.h และฉันจะบันทึกว่า และคุณรู้ว่าให้ฉันได้ทำให้ พลาดแบบเดียวกันนี้อีกครั้งและอีกครั้ง รวม cs50.h. และแจ้งให้เราไปข้างหน้าในขณะนี้ และหลัก int (void) และตอนนี้ฉันเพียงแค่ต้องการที่จะทำโปรแกรม ที่ไม่นี้ - ประกาศสตริง เรียกและรับสาย จากผู้ใช้ และให้ฉันทำเล็ก ๆ น้อย ๆ คำแนะนำที่นี่ - โปรดให้ฉันสตริง - ดังนั้น ผู้ใช้รู้ว่าจะทำอย่างไร แล้วลงที่นี่ด้านล่างนี้ ฉันต้องการจะทำต่อไปนี้ - สำหรับ int i ได้รับเป็นศูนย์ อีกครั้งที่นักวิทยาศาสตร์คอมพิวเตอร์มักจะ เริ่มนับที่ศูนย์ แต่เราสามารถ ให้ที่หนึ่งถ้าเราต้องการจริงๆ ตอนนี้ฉันกำลังจะไปทำ i น้อย กว่าความยาวสตริงของ s ดังนั้น strlen - S-T-R-L-E-N - อีกครั้งก็รัดกุมเพราะง่าย พิมพ์แม้ว่ามันจะเป็น เล็ก ๆ น้อย ๆ เป็นความลับ ที่มีฟังก์ชั่นที่เราไม่ได้ใช้ มาก่อน แต่แท้จริงไม่ว่า - กลับไปฉันหมายเลขที่แสดงถึง ความยาวของสตริง ที่ผู้ใช้พิมพ์ ถ้าพวกเขาพิมพ์ในสวัสดีมันจะกลับมา ห้าเพราะมีห้า ตัวอักษรในสวัสดี จากนั้นในการทำซ้ำของแต่ละ วงนี้ผมบวกบวก ดังนั้นอีกครั้งสร้างมาตรฐานแม้ว่า คุณไม่ได้ค่อนข้างสะดวกสบายเกินไปหรือ คุ้นเคยกับมันยัง แต่ตอนนี้ซ้ำของวงนี้แต่ละ สังเกตเห็นสิ่งที่ฉันจะทำ ผมต้องการที่จะไปข้างหน้าและพิมพ์ ออกตัวเดียว - ดังนั้น c% n เครื่องหมายทับขวาในบรรทัดใหม่ แล้วคุณจะรู้ว่าสิ่งที่ฉันต้องการจะทำอย่างไร? สิ่งที่เป็นคำที่ว่าผู้ใช้ประเภท ในเช่นสวัสดี, ฉันต้องการพิมพ์ H-E-L-L-O, ตัวละครตัวหนึ่งต่อบรรทัด ในคำอื่น ๆ ฉันต้องการที่จะได้รับ อักขระแต่ละตัวในสตริง, ซึ่งจนถึงขณะนี้สตริงมีเพียง รับลำดับของตัวอักษร และมันจะเปิดออกฉันจะทำของตัวยึด i, วงเล็บปิดปิด วงเล็บอัฒภาค และฉันต้องทำสิ่งหนึ่งที่มากขึ้น มันอยู่ในไฟล์ที่เรียกว่าสตริง strlen ที่มีการประกาศ ดังนั้นถ้าฉันต้องการที่จะใช้ฟังก์ชั่นที่ ผมจำเป็นต้องบอกให้คอมไพเลอร์, คาดว่าจะใช้มัน ตอนนี้ให้ฉันไปข้างหน้าและทำให้ โปรแกรมที่เรียกว่าสตริง Dot, เฉือน, สตริง กรุณาให้ฉันสตริง ฉันจะไปข้างหน้าและพิมพ์ สวัสดีในตัวพิมพ์ใหญ่ทั้งหมดใส่ และตอนนี้ผมได้สังเกตเห็นพิมพ์นี้ ตัวละครตัวหนึ่งหลังจากที่อื่น ๆ ดังนั้นรายละเอียดใหม่ที่นี่คือสตริง, ในตอนท้ายของวันที่สามารถ เข้าถึงได้โดยวิธีการของแต่ละบุคคล โดยการแนะนำตัวอักษรตาราง สัญกรณ์วงเล็บ และที่ว่าเพราะเชือกที่อยู่ภายใต้ เครื่องดูดควันเป็นจริงลำดับของ อักขระ แต่สิ่งที่เป็นระเบียบเกี่ยวกับพวกเขาคือ ในแรมของคอมพิวเตอร์ของคุณ - Mac, PC, สิ่งที่เป็น - พวกเขากำลัง แท้จริงกลับไปกลับไป - H-E-L-L-O - ที่บุคคลที่อยู่ใกล้เคียง ไบต์ในหน่วยความจำ ดังนั้นหากคุณต้องการที่จะได้รับแปดดังกล่าว ไบต์ซึ่งในวงนี้จะเป็น วงเล็บศูนย์วงเล็บหนึ่งวงเล็บสอง วงเล็บสามวงเล็บสี่ - ที่จัดทำดัชนีศูนย์จนถึงห้า - ที่จะพิมพ์ออกมา H-E-L-L-O บนบรรทัดของตนเอง ขณะนี้เป็นทีเซอร์ให้ฉันแสดงคุณ ทุกประเภทของสิ่งที่คุณที่สุดจะเป็น สามารถที่จะเข้าใจอย่างน้อย ใกล้กับบางส่วนที่กำลังมองหา สำหรับหนึ่งในสิ่งที่เรามีอยู่ในวันนี้ ตัวอย่างถ้าคุณต้องการเป็นจริง หนึ่งใน jailbreaks แรก สำหรับ iPhone Jailbreaking หมายถึงการแตกโทรศัพท์ จริงเพื่อให้คุณสามารถใช้งานได้เมื่อ ผู้ให้บริการที่แตกต่างกันหรือการติดตั้ง ซอฟแวร์ของคุณเอง และคุณจะสังเกตเห็นลักษณะนี้อย่างสมบูรณ์ คลุมเครือมากที่สุด แต่มองไปที่นี้ iPhone แตกเห็นได้ชัดด้วย ห่วงสภาพถ้าอื่น สภาพพวงของฟังก์ชั่น เราไม่เคยเห็น และอีกครั้งที่คุณจะไม่ได้อยู่ที่ แวบแรกอาจ เข้าใจวิธีการนี​​้จะทำงาน แต่ทุกอย่างที่เราเรียงลำดับของการใช้ ให้ได้รับในชีวิตสมัยใหม่ของเรา จริงมีแนวโน้มที่จะลดแม้จะบาง จากปัจจัยพื้นฐานเหล่านี้เราได้รับ กำลังมองหาที่ ให้ฉันไปข้างหน้าและเปิดหนึ่ง โปรแกรมอื่น ๆ holloway.c ดังนั้นนี่ก็เป็นสิ่งที่คุณ ไม่ควรที่จะรู้ว่าจริงๆ ไม่มีแม้แต่พนักงานหรือฉันสามารถทำได้ อาจจะคิดนี้ออกโดยดูที่ เพราะนี้คือรหัสของใครบางคน ที่ถูกส่งไปยังสิ่งที่ อดีตเป็นที่รู้จัก obfuscated C การประกวดที่คุณเขียนโปรแกรม ที่รวบรวมและทำงาน แต่เป็นคำด่าดังนั้น ไม่มีมนุษย์คนใดที่คลุมเครือสามารถเข้าใจสิ่งที่ มันจะทำจนกระทั่ง พวกเขาทำงานจริงมัน ดังนั้นแน่นอนถ้าคุณดูที่นี้ รหัสผมเห็นสวิทช์ ผมเห็นหลัก ฉันเห็นเหล่านี้วงเล็บหมายถึง ชนิดของอาร์เรย์บาง ไม่มีใครต้องการที่จะคาดเดาสิ่งที่ โปรแกรมนี้จริง ไม่ถ้าใช้ Holloway? ใช่ ตกลง ทำได้ดีมาก ดังนั้นเฉพาะเจ้าหน้าที่และฉันไม่สามารถคิด สิ่งที่ทำสิ่งเหล่านี้ และตอนสุดท้ายให้ฉันไปข้างหน้า และเปิดโปรแกรมหนึ่ง ๆ นี้หนึ่ง - อีกครั้งเราจะทำให้ซอร์สโค้ด พร้อมใช้งานออนไลน์ - หนึ่งนี้เป็นเพียง ชนิดของสวยไปดูที่ ทั้งหมดที่พวกเขาได้ถูกตี แถบพื้นที่ไม่น้อย แต่นี้เป็นรหัสจริง ดังนั้นถ้าคุณคิดว่าสวยถ้าเรา ทำงานจริงนี้ที่พรอมต์ ในที่สุดคุณจะเห็นวิธีการที่เรา อาจจะทำสิ่งที่ต้องการนี​​้ ดังนั้นเราจะไม่ปล่อยให้คุณเมื่อทราบว่า และดูคุณในวันพุธที่ [เล่นเพลง] 2 SPEAKER: ที่ CS50 ต่อไป, TFs เวทีกบฏ 3 SPEAKER: มีเขาเป็น รับเขา! [เล่นเพลง]