>> [เล่นเพลง]
DAVID ลัน: สวัสดีทุกคน
นี่คือ supersection CS50 ของ
ส่วนที่ได้รับมอบหมายจะไม่ เริ่มต้นอีกสัปดาห์
ดังนั้นในวันนี้ฉันอยู่ที่นี่ with--
>> มาเรีย: มาเรีย
DAVID ลัน: --to จริง ดูที่ปัญหา
ตั้งหนึ่งของหลักสูตร สัปดาห์แรกของวัสดุ
คุณได้รับการมุ่งเน้นกับ IDE CS50 บิต ลินุกซ์ระบบปฏิบัติการที่
ที่ทำงานบน IDE เช่นเดียวกับ ดูที่บางส่วนของการเปลี่ยนแปลง
จากรอยขีดข่วนที่จะ C ชั้นนำ ถึงปัญหาที่เกิดขึ้นตั้งหนึ่ง
>> โดยไม่ต้องกังวลใจต่อไป ปัญหาในการตั้งค่าหนึ่ง
คุณกำลังจะได้รับ แนะนำให้รู้จักกับ CS50 IDE ซึ่ง
คือการเขียนโปรแกรมบนเว็บนี้ สภาพแวดล้อมที่เราใช้ในการสั่งซื้อ
ในการเขียนโปรแกรม
มันถูกออกแบบให้มีลักษณะมาก เตือนความทรงจำของคอมพิวเตอร์ทั่วไป
ระบบที่ใช้ปฏิบัติการ ระบบที่เรียกว่าลินุกซ์
แต่มันอยู่ในระบบคลาวด์ที่เรียกว่า ซึ่งหมายความว่าทุกคนในชั้นเรียน
จริงจะมีของเขาหรือเธอ บัญชีของตัวเองและใช้งานได้เป็นอย่างดี
>> ดังนั้นส่วนใหญ่ของคุณอาจจะไม่เคยใช้ สภาพแวดล้อมลินุกซ์ก่อนหรืออาจจะ
แม้สภาพแวดล้อมที่บรรทัดคำสั่ง
และบรรทัดคำสั่ง สภาพแวดล้อมที่แตกต่างกัน
มันเป็นเรื่องเกี่ยวกับใจทั้งหมด
มันเป็นคำสั่งแป้นพิมพ์ทั้งหมด
และก็ไม่มีการเลื่อนเมาส์ที่ไอคอนไม่มี ไม่มีหน้าต่างสนทนาไม่มีเมนู
มันเป็นข้อความอย่างหมดจด
ดังนั้นในตอนแรกมันชนิด ของความรู้สึกเหมือนขั้นตอน
ย้อนกลับไปในแง่ของความซับซ้อน
แต่มันสิ้นสุดขึ้นเป็นจำนวนมาก มีประสิทธิภาพมากขึ้นอย่างแน่นอน
สำหรับนักวิทยาศาสตร์คอมพิวเตอร์ในท้ายที่สุด
>> ดังนั้นลองมาดู
นี่ฉันที่ CS50.io ผ่านที่ คุณสามารถเข้าสู่ CS50 IDE
และเหมือนในรอยขีดข่วนมี สามพื้นที่หลักในหน้าจอนี้
ดังนั้นในด้านซ้ายมือเรามี สิ่งที่จะเป็นเบราว์เซอร์ไฟล์
และมีโฟลเดอร์นี้ที่ ด้านบนซึ่งเป็นตอนนี้ว่างเปล่า
ตั้งแต่ผมได้กำจัดทั้งหมดของฉัน ไฟล์ก่อน supersection
และนั่นคือสิ่งที่เราจะ บันทึกไฟล์ซีที่เราเขียน
ที่ด้านบนขวาเรามีสถานที่ที่ ทั้งหมดของรหัสของเราจะได้รับการเขียน
และแน่นอนถ้าฉันคลิกบวกนี้นี้ เป็นไปเพื่อให้ฉันเลือกแฟ้มใหม่
และที่นี่ฉันสามารถเริ่มต้นการเขียนรหัส C หรือ จริงๆจำนวนภาษาอื่น ๆ
>> และจากนั้นที่ด้านล่างที่มัน กล่าวว่า jharvard @ ide50-- และของคุณจะ
พูดอะไรบางอย่างเล็ก ๆ น้อย ๆ different-- สิ่งที่ได้นี้เรียกว่า?
หน้าต่าง terminal
ใช่.
ดังนั้นหน้าต่าง terminal เป็น บรรทัดคำสั่งที่เรียกว่า
อินเตอร์เฟซที่ผ่านที่คุณสามารถโต้ตอบ กับระบบปฏิบัติการที่รองรับ
และสำหรับตอนนี้เรากำลังจะไป ทำให้การใช้งานน้อยมาก this--
เพียงเพื่อรวบรวมไปดูที่ ข้อผิดพลาดที่เราเห็น
และเรียกใช้โปรแกรมของเรา
แต่ในที่สุดเราจะ ที่จะทำมากขึ้นเช่นกัน
และคุณยังสามารถติดตั้งซอฟต์แวร์ และการบริหารจัดการพื้นที่ทำงานของคุณ
ภายใน CS50 IDE เช่นเดียว
แต่เพิ่มเติมว่าบางเวลาอื่น ๆ
>> ถ้าอย่างนั้นเราไปข้างหน้าและเขียน โปรแกรมที่ง่ายมากเพียงแค่
ไปผ่านอุ่นเครื่อง hello.c ซึ่งอาจจะเป็น
โปรแกรมที่ง่ายเราสามารถเขียน
ผมได้เปิดขึ้นแล้วแท็บใหม่
ฉันจะไปข้างหน้าและ รวมถึงการพูด io.h. มาตรฐาน
แล้ว int main (void)
และแล้ว printf ("สวัสดีโลก" n เครื่องหมายคำพูดอย่างใกล้ชิด
วงเล็บใกล้ชิดและอัฒภาค
>> ทั้งหมดขวา
ดังนั้นตอนนี้สังเกตเห็นหน้าต่างของฉันคือไม่ได้ตั้งชื่อ
ดังนั้นฉันไปอย่างรวดเร็ว ที่จะขึ้นไปที่ File, Save
และมันเป็นสิ่งสำคัญที่ ที่ผมเรียกนี้ไม่ได้ "สวัสดี".
ดังนั้นความผิดพลาดที่พบบ่อยมาก โดยเฉพาะอย่างยิ่งปัญหาการตั้งค่าหนึ่ง
คือการตั้งใจเพียงโทรของคุณ โปรแกรม "น้ำ" หรือ "โลภ" หรือ "มาริโอ"
หรือ "เครดิต" หรือชอบ
แต่คุณต้องการจริงที่จะทำให้ แน่ใจว่าคุณมีนามสกุลไฟล์
เพราะนี่เป็นวิธีเดียวที่ คอมไพเลอร์และยังเป็นบรรณาธิการรหัส
รู้ว่าคุณ จริงเขียนรหัส C
เพื่อให้ฉันไปข้างหน้าและคลิกบันทึก
>> และตอนนี้ก็เช่นกันสิ่งที่ CS50 IDE ได้ทำสำหรับเราคือก็ยัง
ไวยากรณ์เน้นทุกอย่าง
ดังนั้นก็ทำทุกอย่างที่มีสีสันมาก
และวัตถุประสงค์ทั้ง ที่ไม่ได้ทำงาน
มันเป็นเพียงแค่การวาดตาของฉันไป แนวคิดชิ้นส่วนต่างๆ
ของโปรแกรมนี้
ถ้าอย่างนั้นเราไปข้างหน้าและรวบรวมนี้
และผมสามารถรวบรวมนี้ ในสองวิธี
และในสัปดาห์ที่หนึ่ง ทางโรงเรียนเก่าที่เราทำ
มันเป็นตัวอักษรที่ คำสั่ง line-- "เสียงดังกราว hello.c."
แล้วฉันกด Enter
และไม่มีอะไรที่น่าจะเกิดขึ้น ในหน้าต่าง terminal
แต่สิ่งที่ไม่เปลี่ยนแปลงใน IDE?
ที่ไหนอีกครั้ง IDE ก็หมายความว่า แบบบูรณาการการพัฒนาสิ่งแวดล้อม
มันเป็นวิธีที่จินตนาการของบอก นี้พัฒนาแบบบูรณา
สภาพแวดล้อมในการพัฒนาซอฟแวร์
ดังนั้นสิ่งที่ไม่เปลี่ยนแปลงใน UI?
สิ่งที่คุณแจ้งให้ทราบล่วงหน้า ที่แตกต่างกันมาเรีย?
>> มาเรีย: สิ่งที่ผมสังเกตเห็น ภายใต้ IDE50 โฟลเดอร์ได้ที่นี่
>> DAVID ลัน: ใช่
ดังนั้นที่นี่ไม่เพียง แต่ เราจะมี "hello.c."
นอกจากนี้เรายังมี "a.out" ซึ่งเป็น ชนิดของชื่อใบ้สำหรับโปรแกรมที่
แต่แน่นอนว่ามันเป็นชื่อเริ่มต้นสำหรับ โปรแกรมเมื่อคุณเพียงแค่รวบรวมรหัสของคุณ
และไม่ได้บอกคอมไพเลอร์ สิ่งที่ไฟล์เพื่อส่งออก
ดังนั้นถ้าผมต้องการที่จะทำงานนี้ผม ต้องบอก compiler--
หรือมากกว่าที่ฉันต้อง บอกพื้นที่ทำงานที่ฉัน
ต้องการที่จะเรียกใช้โปรแกรมที่เรียกว่า "a.out."
เข้าสู่
และมี "สวัสดี โลก. "ตอนนี้" ./ "
เป็นสิ่งที่สำคัญจริง
ถึงแม้ว่าเราจะได้ตามปกติ เขียนชื่อของคำสั่งที่
เมื่อมันเป็นโปรแกรมคุณได้ เขียนคุณไม่ต้องการที่จะพูดว่า "./"
เพราะที่บอกอย่างชัดเจนลินุกซ์ ที่คุณต้องการที่จะเรียกใช้โปรแกรมที่เรียกว่า
"a.out" ที่อยู่ในนี้ที่จุด หมายถึงไดเรกทอรีนี้ว่าผมอยู่ในปัจจุบัน
ในที่เกิดขึ้นจะ พื้นที่ทำงานที่เรียกว่า "a.out
เพราะถ้าฉันเพียงแค่บอกว่า "a.out" ใส่ ฉันจะได้รับ "คำสั่งไม่ a.out
พบ "เพราะ computer-- เพราะผมคิดค้น "a.out"
มันไม่ได้มาพร้อมกับ computer-- ไม่ทราบว่าจะมองหามัน
แม้ว่ามันจะเหมาะสม ภายใต้จมูกของฉันเพื่อที่จะพูด
ตกลง.
ดังนั้นเราจึงอาจมีการเปลี่ยนแปลงนี้ เป็น "เสียงดังกราว -o สวัสดี hello.c."
และถ้าผมตีใส่สิ่งที่โปรแกรม นี้เป็นไปเพื่อการส่งออกสำหรับฉันหรือไม่
ชื่อของไฟล์คืออะไร?
ใช่ในด้านหลัง
ถูกตัอง. "สวัสดี."
ดังนั้น "สวัสดี" เป็นไปได้ ชื่อของโปรแกรม
เพราะเราได้ใช้สิ่งที่เรียกว่า คำสั่งอาร์กิวเมนต์บรรทัดซึ่งเป็นเพียง
วิธีการของการเปลี่ยนแปลงพฤติกรรมของผู้ที่ คอมไพเลอร์เพื่อส่งออกจริง
ชื่อแฟ้มที่เฉพาะเจาะจง
และแน่นอนถ้าผมซูม ออกมาและมองขึ้นไปที่นี่
ตอนนี้ผมยังไม่ได้เท่านั้น "a.out" และ "hello.c" แต่ยัง "สวัสดี" เช่นเดียว
ดังนั้นตอนนี้ฉันสามารถทำได้ "./hello," Enter
และมี "สวัสดีโลก."
แต่ lastly-- นี้ ในขณะนี้จะประชุม
เราใช้ตลอด ภาคการศึกษา typically--
คุณยังสามารถเพียงแค่พูดว่า "ทำให้สวัสดี."
และแน่นอนมันบอกว่ามันขึ้นอยู่ วันที่เพราะมันมีอยู่แล้ว
ให้ฉันไปข้างหน้าและลบด้วย คำสั่ง RM ทั้ง "a.out" -
และพูดว่า "เอา a.out แฟ้มปกติ?"
นั่นก็หมายความว่าเป็นคุณ แน่ใจหรือว่าต้องการที่จะลบมันได้หรือไม่
ฉันจะบอกว่าใช่
และแล้วฉันจะลบ "สวัสดี" แต่ไม่ "hello.c."
ฉันจะพูดว่า "ใช่" อย่างชัดเจน แต่ "Y" ก็เพียงพอแล้วเช่นกัน
>> และตอนนี้ถ้าผมแจ้งให้ทราบล่วงหน้า พิมพ์ ls-- ซึ่งการเรียกคืน
มันหมายความว่า list-- แสดงทั้งหมด ของไฟล์ในโฟลเดอร์ของฉัน
และแน่นอนถ้าผมซูม ออกมาและมองไปที่มุมบนซ้าย
มันยืนยันว่าสิ่งที่ ในโฟลเดอร์นี้แม้
แม้ว่าจะระบุว่าเป็น IDE50 ที่นี่ และพื้นที่ทำงานไม่ได้ก็เพียง "hello.c."
ดังนั้นตอนนี้ลงมาที่นี่ถ้าฉัน ไม่ "ทำให้สวัสดี" Enter,
ตอนนี้ฉันเห็นคำสั่งนาน แต่ คำสั่งที่ซับซ้อนมากขึ้นที่จะ
ที่จะเป็นประโยชน์ในสัปดาห์ที่ผ่านมา
และตอนนี้ฉันสามารถพูดว่า "./hello."
>> ดังนั้นลองมาแนะนำอย่างรวดเร็ว บางคำสั่งลินุกซ์อื่น ๆ
แล้วทำไมเราไม่ใช้ขั้นตอน กลับมาจริงและมองไปที่ C มากขึ้น
โดยทั่วไปการเปลี่ยนจากรอยขีดข่วน ไปที่ C และจากนั้นปิดท้ายด้วยการดู
ที่ปัญหาแรก ตั้งอยู่ในซีทั้งหมดขวา
ดังนั้นฉันจะไปข้างหน้าและเพียงแค่ทำความสะอาด ขึ้นพื้นที่ทำงานของฉันกับการควบคุม-L เพียง
เพื่อให้หน้าจอเรียบร้อย
แต่ที่มีการทำงานไม่มี ผลกระทบเป็นอย่างอื่น
>> จำได้ว่าเราเคยเห็น ไม่กี่คำสั่งในขณะนี้
ดังนั้นเราจึงได้เห็นเสียงดังกราวซึ่งโดยทั่วไปคุณ จะไม่ได้มีการดำเนินการด้วยตนเองอีกต่อไป
เราจะใช้แทนให้
แต่เรายังเห็นคำสั่ง ls ซึ่งแสดงให้เห็น รายชื่อของไฟล์ในไดเรกทอรีของฉัน
และตอนนี้ทำไม there-- มีสอง ไฟล์ตอนนี้ "สวัสดี" และ "hello.c."
ทำไมจึงมีดาวหรือ ดอกจันหลังจาก "สวัสดี"?
อะไรที่มีความหมายตาม ในสิ่งที่เราเห็นในหนึ่งสัปดาห์?
คุณคิดอย่างไร?
ดาวมีความหมายว่าอย่างไร
>> มาเรีย: For-- โปรแกรม "สวัสดี" หรือไม่?
DAVID ลัน: "สวัสดีครับ *"
ใช่.
โอ้ใช่?
โอ้ปฏิบัติการ
ถูกตัอง.
ดังนั้นหมายความว่า "สวัสดี" เป็นที่ปฏิบัติการ
ดังนั้นแน่นอนว่าทำไม ที่ฉันสามารถทำได้ "./hello."
ทั้งหมดขวา
ดังนั้นอะไรที่ฉันสามารถทำได้ในที่นี่?
ดีก็จะเปิดออกที่ฉันสามารถทำได้ นอกจากนี้ยังสร้างไดเรกทอรี
เพื่อให้ฉันไปข้างหน้าและสร้าง ตัวอย่างเช่น "pset1 directory"
และปัญหาที่กำหนดสเปค จะช่วยให้คุณทำตรงนี้
ดังนั้นคุณจึงไม่ต้องจำไว้ในวันนี้
แต่ "mkdir pset1" ดูเหมือนว่า ที่จะมีผลกระทบ
แต่อีกครั้งไม่มีข้อผิดพลาด โดยทั่วไปเป็นสิ่งที่ดี
ดังนั้นถ้าผมพิมพ์ ls "" now-- อาตอนนี้ ฉันมีแฟ้มที่ปฏิบัติการที่เรียกว่า
"สวัสดี" ไฟล์ C ที่เรียกว่า "hello.c."
แล้วเฉือนท้ายเพื่อที่จะ พูดหมายความว่านี้เป็นไดเรกทอรี
>> ดังนั้นแน่นอนตอนนี้ฉันต้องการที่จะเปิดมัน
และฉันไม่ดับเบิลคลิกที่มันเหมือน ใน GUI เป็นสภาพแวดล้อมแบบกราฟิก
ฉันแทนที่จะพูดว่า "ซีดี pset1."
เข้าสู่
ไม่มีอะไรที่น่าสนใจดูเหมือนว่าจะมี ยกเว้นเกิดขึ้นพร้อมรับคำน้อยของฉัน
here-- นี้เป็นวิธีที่ลินุกซ์เตือน ฉันที่ฉันดังนั้นสิ่งที่โฟลเดอร์เปิด
มันเป็นเพียงแค่บอกฉันอย่างชัดเจน เมื่อเทียบกับกราฟิก
และถ้าผมพิมพ์ ls "" ทำไมฉันจะดูอีก แจ้งทันทีที่คุณคิดว่า
เมื่อฉันรายการเนื้อหาของ pset1 หรือไม่
มาเรีย: คุณอาจจะไม่ มีอะไรอยู่ในนั้น
DAVID ลัน: ใช่
ดังนั้นแล้วเราไม่ได้เห็นได้ชัด สร้างสิ่งที่อยู่ในนั้น
เพราะผมเพิ่งสร้างไดเรกทอรี
ตอนนี้ถ้าผมต้องการที่จะสร้าง file-- สำหรับ เช่นผมสามารถสร้างไฟล์ใหม่
แล้วฉันจะไป บันทึกและบันทึกเป็น
เช่น "mario.c" ถ้าคุณกำลังทำ รุ่นมาตรฐานของ pset หนึ่ง
และแล้วเหมือน Mac หรือ PC เพียง เลือกโฟลเดอร์ "pset1 บันทึก
และตอนนี้ไฟล์ที่ว่างเปล่า
แต่ขอซูมเข้าอีกครั้งเป็นครั้งที่สอง
ขอทำคำสั่ง ls ที่นี่
ตอนนี้เราเห็น "mario.c"
>> จึงมีคำสั่งอื่น ๆ บางที่ มีมูลค่าการรักษาในใจมากกว่า time--
ชัดเจนหรือควบคุม-L คือสิ่งที่ฉันได้ รับการตี; mkdir ที่เราเคยเห็น;
RM เราได้เห็นเป็นอย่างดีซึ่งเป็น สำหรับการลบหรือลบไฟล์
ระวังคุณสามารถ also-- และถ้าคุณดู บทเรียนออนไลน์ที่คุณจะ rm -rf
เป็นวิธีที่ใช้กันมากในการพูด ลบโฟลเดอร์ที่มีสิ่งที่อยู่ในนั้น
เพียงแค่เป็นซุปเปอร์ระวังสุด
-rf หมายความซ้ำ ลบสิ่งที่เป็น
คุณกำลังพยายามที่จะลบ และบังคับให้ลบ
ดังนั้นวิธีการเรียกซ้ำถ้าเป็นโฟลเดอร์ที่มี โฟลเดอร์ที่มีโฟลเดอร์ที่มีโฟลเดอร์,
ลบทั้งหมดของพวกเขา
และบังคับให้หมายความว่าทำไม่ได้ ถามฉันใช่หรือไม่, ฉันแน่ใจหรือไม่?
ดังนั้นมันจึงเป็นวิธีที่อันตรายสุดของ การลบจำนวนมากของสิ่งที่ได้อย่างรวดเร็ว
แต่ beware-- บ่อยเกินไปไม่กล้าหาญ นักเรียนตั้งใจลบพูด pset
หนึ่งตัวอย่างเช่น
>> มาเรีย: และถ้าพวกเขาเพียงแค่ ทำ -r พวกเขากำลังจะ
จะถามพวกเขาเกี่ยวกับทุกไฟล์เดียว
>> DAVID ลัน: ซึ่งเป็น ที่น่ารำคาญในระดับปานกลาง
>> มาเรีย: ใช่
>> DAVID ลัน: ดังนั้นที่ว่าทำไม จำนวนมากของเรารวมอยู่ด้วยตนเอง
ฉันอยู่ในนิสัยของการใช้ -rf
แต่มันเป็นเรื่องที่อันตราย
ดังนั้นผู้ซื้อระวัง
และแล้ว mv เป็นชนิดของ การตั้งชื่อที่น่าสนใจ
ดังนั้นนี่คือคำสั่งย้าย ที่รู้สึกแปลก ๆ
แน่นอนเพราะคุณสามารถใช้มันเพื่อ ย้ายไฟล์จากที่หนึ่งไปยังอีก
ตัวอย่างเช่นสมมติว่าผม messed ขึ้น
สมมติว่าผมสร้าง ไฟล์ใหม่สำหรับ pset
และผมบันทึกไว้ว่า "greedy.c."
แต่สมมติว่าฉันตั้งใจบันทึกไว้ ใน IDE50-- ดังนั้นในพื้นที่ทำงานของฉันเอง
และไม่อยู่ใน pset1
>> คุณสามารถมองเห็นได้มากที่ด้านบนซ้าย
มี "greedy.c."
และมีการแก้ปัญหาไม่กี่
ดังนั้นหนึ่งที่ผมสามารถใช้ สุดทางที่ใช้งานง่าย
เพียงลากและวางมัน
และนั่นจะเป็นจริง แก้ไขปัญหานี้
แต่วันนี้เรากำลังพยายามที่จะดู ความลับในวิธีที่มีประสิทธิภาพมากขึ้น แต่
การทำเช่นนี้
เพื่อให้ฉันใช้ ls "" ใน pset1
และผมเห็นเพียง "mario.c."
ให้ฉันไปข้างหน้าและทำ "cd .. "
ดังนั้นซีดีอีกครั้งเป็นไดเรกทอรีการเปลี่ยนแปลง
".. " หมายถึงสิ่งที่ว่า?
ครั้งสุดท้ายที่ผมบอกว่า "ซีดี pset1 "ที่จะเข้าไปใน pset1
ดังนั้นเมื่อผมบอกว่า "cd .. " สิ่งที่ฉันทำ?
ไปข้างหลัง
ใช่.
>> ดังนั้นจึงเป็นไปได้ที่ผู้ปกครองที่เรียกว่า
ขึ้นไประดับหนึ่งเช่น ออกจากโฟลเดอร์
ดังนั้นใส่
และแน่นอนสิ่งที่มีลักษณะที่มันทำ
มันย้ายฉันเพียงแค่เข้าไปในพื้นที่ทำงานแทน การเข้า pset1 ซึ่งอยู่ในพื้นที่ทำงาน
และตอนนี้ถ้าผมพิมพ์ ls "" มีทั้งกลุ่มของสิ่งที่
ในนั้นคือ "greedy.c"
ดังนั้นตอนนี้ให้ฉันใช้ mv ที่แท้จริง ย้าย "greedy.c" ใน pset1
และอื่น ๆ จำนวนมากที่มีคำสั่ง Linux ทำงานตรงเช่นนี้
พวกเขาใช้เวลาการขัดแย้งใดหรือพวกเขาใช้เวลาหนึ่ง การโต้แย้งหรือพวกเขาใช้เวลาสองบรรทัดคำสั่ง
ข้อโต้แย้งและอื่น ๆ
และในกรณีนี้ก็ ทำในสิ่งที่ตัวอักษร
มันบอกว่าแม้ว่า succinctly-- ย้ายเข้า pset1 greedy.c
เข้าสู่
ดูเหมือนว่าไม่มีอะไรที่จะเกิดขึ้น
แต่ถ้าผมทำคำสั่ง ls อีกครั้งโลภจะหายไป
และถ้าผมทำ "ซีดี pset1" ใส่แล้ว คำสั่ง ls อีกครั้งตอนนี้มันอยู่ในสถานที่ที่เหมาะสม
เช่นกันถ้า บาง reason-- โดยเฉพาะอย่างยิ่ง
ถ้าคุณมีความต่อเนื่อง เชื่อมต่อเครือข่าย
หรือคุณกำลังเดินไปรอบ ๆ มหาวิทยาลัยที่มีฝาปิดแล็ปท็อปของคุณ
ปิดแล้วเปิดมันขึ้นมา อีกครั้งและพื้นที่ทำงานของคุณ
ดูเหมือนว่าค่อนข้างออกจากซิงค์ไม่มีเรื่องใหญ่
เพียงแค่โหลดเบราว์เซอร์ของคุณ หน้าต่างและมันควรจะเป็น
resync เพื่อให้ซ้ายมือ เบราเซอร์ไฟล์ดูว่า
เช่นหน้าต่าง terminal
ไม่ต้องกังวล
เมื่อสงสัยโหลดหน้าดังนั้น ตราบใดที่คุณได้บันทึกไฟล์ที่มีอยู่แล้ว
ตกลง.
ดังนั้น mv นอกจากนี้ยังสามารถใช้ในการเปลี่ยนชื่อไฟล์
และให้ดูที่ คำสั่งนี้เป็นครั้งสุดท้ายที่นี่
ดังนั้น suppose-- และนี่คือ ที่พบบ่อยสุดเกินไปในช่วงต้น
นักเรียนบางคนในบางครั้งสร้างไฟล์ เรียกว่าขอ say-- สิ่งที่คนอื่น?
ชอบ "WATER.C."
ดังนั้นฉันจะตะโกนสำหรับ ไม่มีเหตุผลในตัวพิมพ์ใหญ่ทั้งหมด
แต่นี้ไม่ได้เป็น ชื่อที่ถูกต้องสำหรับแฟ้ม
ถ้าเพียงเพราะปัญหาของเราตั้ง สเปคไม่ได้บอกคุณ
เพื่อบัน​​ทึกแฟ้มเป็นตัวพิมพ์ใหญ่ทั้งหมด "WATER.C."
แต่เราคาดหวังว่า "water.c" ตัวพิมพ์เล็ก
และในความเป็นจริงนี้ ปัญหาเพราะ check50,
โปรแกรมที่คุณกำลังจะ เพื่อตอบสนองปัญหา
ตั้งหนึ่งที่ทดสอบโดยอัตโนมัติ ความถูกต้องของรหัสของคุณ
เป็นไปเสียงโห่ร้องที่คุณถ้ามันไม่สามารถ พบ "water.c" ในการพิมพ์เล็กทั้งหมด
>> ดังนั้นผมจึงจำเป็นที่จะต้องแก้ไขปัญหานี้
ดังนั้นวิธีการที่แตกต่างกันไป ทำเช่นนี้เป็นครั้งแรกที่
จะควบคุมคลิกหรือคลิกขวา ชื่อไฟล์และเปลี่ยนเพียงเปลี่ยนชื่อ
ปรับทั้งหมดจะทำอย่างนั้น
แต่อีกครั้งในวันนี้เรามา ทำมันชอบเล่นเล็ก ๆ น้อย ๆ
ลองใช้ mv ที่จะเปลี่ยน "WATER.C" กับ "water.c."
ดังนั้นคุณยังสามารถใช้อาร์กิวเมนต์แรก ที่จะเปลี่ยนชื่อเป็นอาร์กิวเมนต์ที่สอง
ถ้าอาร์กิวเมนต์ที่สองไม่ได้ใน ความเป็นจริงโฟลเดอร์หรือชื่อไดเรกทอรี
>> ทั้งหมดขวา
และสุดท้ายเป็น trick-- เล็ก ๆ น้อย ๆ เพื่อให้ผมอยู่ใน ไดเรกทอรีพื้นที่ทำงานของฉันในขณะนี้
ถ้าผมต้องการที่จะได้รับใน pset หนึ่ง แน่นอนฉันสามารถพิมพ์ "cd pset1."
แต่มันก็น่าเบื่อมากที่จะพิมพ์ "pset1" หรือ อีกต่อไปชื่อไฟล์หรือชื่อไดเรกทอรี
ยังคง
ดังนั้นมากมักจะอยู่ในลินุกซ์สิ่งที่ ที่คุณสามารถทำได้คือการเริ่มต้นพิมพ์ "PSE"
และเพิ่งได้รับเบื่อกด Tab และให้ รูปคอมพิวเตอร์ออกสำหรับคุณ
ประโยชน์ที่จะได้รับสุดยอดเป็นนิสัยที่
จับเพียงอย่างเดียวคือถ้าคุณมี หลายไฟล์หรือโฟลเดอร์เริ่มต้น
ด้วยตัวอักษร "p" หรือ "PS" ที่คุณอาจมี
พิมพ์อีกไม่กี่ก่อน คอมพิวเตอร์รู้ว่าจะทำอย่างไร
>> มาเรีย: เราชอบทางลัด
>> DAVID ลัน: นี้จะ ช่วยให้คุณประหยัดเวลามาก
และยังที่เรากล่าวว่าในการบรรยายคุณ สามารถเลื่อนขึ้นในประวัติศาสตร์ขึ้นและลง
เพื่อหาสิ่งที่ดำเนินการเมื่อเร็ว ๆ นี้ คำสั่งเป็นอย่างดี
ทั้งหมดขวา
ดังนั้นตอนนี้ขอหันความสนใจของเรากลับมา เพื่อเป็นโปรแกรมที่ง่ายสวัสดีโลก
ดังนั้นเราจึงได้รวบรวมนี้ว่า
และตอนนี้ทำไมเราไม่ใช้ ดูที่ชนิดข้อมูล
แล้วเปลี่ยนจากบางส่วน ที่สอดคล้องกันรอยขีดข่วนที่จะบล็อกซี
มาเรีย: น่ากลัว
ดังนั้นขณะนี้ที่คุณได้เริ่มต้น การเขียนโปรแกรมใน C,
เรากำลังจะเริ่มต้นพูดคุย เกี่ยวกับชนิดข้อมูลและตัวแปร
ดังนั้นบางชนิดข้อมูลที่คุณ ต้องการที่จะรู้ว่าเริ่มต้นในขณะนี้
จะเป็นคนที่มี ไฮไลต์ในสีฟ้า
ดังนั้นเราจึงมี int แรก ซึ่งย่อมาจากจำนวนเต็ม
และนั่นถือเป็นจำนวนเต็มเป็นคุณ อาจมี guessed-- ดังนั้น 1, 2, 3,
และเลขอื่น ๆ ที่คุณสามารถคิด
>> DAVID ลัน: และยังเชิงลบ
>> มาเรีย: และยังคนที่เป็นลบครับ
และ 0
แล้วเรามีลอยซึ่ง จะลอยหมายเลขจุด
ดังนั้นนั่นคือทั้งหมดที่ตัวเลขจริง ที่มีจุดทศนิยม
ดังนั้น 5.0, 5.2 และมากยิ่งขึ้น ตัวเลขหลังจุดทศนิยม,
เป็นอย่างดีและยังมีคนที่เป็นลบ
แล้วเรามีถ่านซึ่งเป็นตัวอักษร
ดังนั้นผมจึงคิดว่าเราพูดคุยเกี่ยวกับ นี้ในการบรรยายในวันนี้
แต่เรามีตัวอักษรสำหรับ example-- A, B, C-- ที่สามารถเก็บไว้เป็นถ่าน
แต่เราก็มีสัญลักษณ์มากขึ้น ที่สามารถเก็บไว้เป็นถ่าน
และผู้ที่จะถูกเก็บเป็น ASCII
>> และแล้วเรามีบูล, ซึ่งเป็น Booleans
และผู้ประเมินจริงหรือ ที่เป็นเท็จหรือ 1 คนและ 0 ตามลำดับ
DAVID ลัน: และเรียกคืนว่า บูลมาจากห้องสมุด CS50
ดังนั้นจึงไม่ได้สร้างไว้ C แต่ก็มีประโยชน์สุด
ที่จะมีความคิดของความจริงและเท็จ
และแม้ว่าคุณ อาจ think-- จริงสนุก
บูลเทคนิคมีความต้องการวิธีการหลายบิต อย่างแท้จริงที่จะเป็นตัวแทนที่แท้จริงเมื่อเทียบกับเท็จ?
กี่บิตที่คุณคิดว่า คุณจะต้อง, ที่สุด?
ใช่เพียงหนึ่ง
ดังนั้นจึงปรากฎว่า C ไม่สามารถให้คุณเพียงแค่หนึ่งบิต
หน่วยที่เล็กที่สุดของการวัด คุณจะได้รับแปด
ดังนั้นจึงเป็นที่สิ้นเปลืองน้อยพวกเขาคุณ ใช้ไบต์ทั้งหมดหรือแปดบิต
เพื่อเป็นตัวแทนจริงหรือเท็จ
แต่นั่นเป็นเพียงวิธีที่มันเป็น นำมาใช้ใน C โดยห้องสมุด CS50
มาเรีย: และแล้วคนที่เรา จะไม่พูดคุยเกี่ยวกับการเป็นอย่างกว้างขวาง
สิทธิ now-- คู่ ที่ลอยที่ใหญ่กว่า
ยาวยาวและระยะสั้น นอกจากนี้ยังมีจำนวนเต็ม
DAVID ลัน: แท้จริง
ในรุ่นแฮ็กเกอร์ของ pset หนึ่ง เราจริงใช้นาน
แต่สำหรับรุ่นมาตรฐาน มันไม่ควรจะเป็นสิ่งที่จำเป็น
มาเรีย: เย็น
ตกลง.
ดังนั้น operators-- คุณควรจะ อาจคุ้นเคยกับที่สุดของเหล่านี้
นอกจากนี้ +; ลบ -
สำหรับการคูณเรามี *
ดังนั้นไม่ X ที่เรามักจะใช้
ส่วนที่เรามีเครื่องหมาย
และโมดูโลเป็นผู้ดำเนินการที่ผ่านมาของเราที่ เราจะไปพูดคุยเกี่ยวกับในขณะนี้
มันเป็นผู้ประกอบการที่ช่วยให้เราไปยัง ใช้เวลาที่เหลือของส่วนที่
ดังนั้นถ้าเรามี 4% 2, 4 แบ่ง 2 คือ 2 กับส่วนที่เหลือของ 0
ดังนั้น 4% 2 เป็น 0
4% 3 เป็น 1
4% 5 คือ 4, ในขณะที่คุณอาจจะเดาได้
และจำไว้ว่าเมื่อมีการใช้สิ่งเหล่านี้ ผู้ประกอบการที่จะใช้กฎ PEMDAS
>> DAVID ลัน: ดังนั้นต้องมีความชัดเจนถ้าคุณ ทำ 4% 2 ทำไมที่ 0, ว่า?
>> มาเรีย: เพราะ 4 หารด้วย 2 คือ 2 กับส่วนที่เหลือของ 0
ดังนั้นโมดูโลที่เหลือจะช่วยให้เราเป็นที่ เมื่อเทียบกับผลของการแบ่งที่
DAVID ลัน: และแน่นอน สิ่งที่เราจะพบว่านี้เป็นประโยชน์
สำหรับที่อยู่ในปัญหาบางอย่าง ที่ไม่จำเป็นต้องเป็นหนึ่ง
ถ้าคุณต้องการที่จะมี ผลของการ จำกัด ตัวเอง
ในช่วงของตัวเลข เช่น 0 ถึงบางสิ่งบางอย่าง
คุณสามารถใช้โมดูโลห่อรอบ ก่อนหน้านี้กว่าเช่น 2000000000
หรือมูลค่า 4 พันล้านว่า เราได้พูดคุยเกี่ยวกับในการบรรยาย
>> มาเรีย: ใช่
และแม้แต่ใน "โลภ" เราอาจจะ
DAVID ลัน: ใช่ใน ปัญหาการตั้งค่าอย่างใดอย่างหนึ่งเช่นกัน
มาเรีย: ใช่ดี
DAVID ลัน: คำแนะนำที่ดี
มาเรีย: ขออภัย
บูลีนเพื่อ expressions-- สำหรับผู้ประกอบการบูลีน
เราจะไปพูดคุยเกี่ยวกับทุก ของเหล่านี้ที่คุณดูที่นี่
ดังนั้นตอนนี้เรามีสอง เครื่องหมายเท่ากับที่ระบุไว้สำหรับเท่ากับ
ดังนั้นผู้ที่มีการเปรียบเทียบ
ที่ทำให้เราได้เห็นเพียงหนึ่งเท่ากับการเข้าสู่ระบบ
นั่นคือเมื่อเรากำหนด คุ้มค่าให้กับตัวแปร
ดังนั้นหากเราได้เห็น int n = 5 แล้ว เราได้รับมอบหมายให้ไป 5 n ตัวแปร
แต่ถ้าเราต้องการที่จะใช้สำหรับ == เปรียบเทียบเราสามารถตรวจสอบว่า n == 5
และถ้า n == 5 แล้วว่าเป็นความจริง
>> ดังนั้นผู้ประกอบการบูลีน ช่วยให้เราโดยทั่วไป
การประเมินแบบบูล การแสดงออกที่จะจริงหรือเท็จ
ดังนั้นไม่ equals-- เรามี เครื่องหมายอัศเจรีย์และเท่าเทียมกัน
ดังนั้นเรายังสามารถตรวจสอบว่า n ไม่เท่ากับ 5-- ดังนั้น n! = 5
น้อยกว่าน้อยกว่าหรือเท่ากับ สูงกว่า, มากกว่าหรือเท่ากับ
และแล้วเราก็มีตรรกะ AND และตรรกะหรือ
และผู้ที่ช่วยให้เราสามารถประเมิน การแสดงออกบูลีนต่างๆเข้าด้วยกัน
โดยทั่วไปจะมารวมกันเป็น หนึ่งทั้งนิพจน์บูลีน
ดังนั้นหากเราต้องการที่จะหาตัวเลขบอกว่า ที่มากกว่า 5 แต่น้อยกว่า 15
ในเวลาเดียวกันเราจะใช้ ตรรกะและผู้ประกอบการที่จะดูว่า n คือ
มากกว่า 5 && n น้อยกว่า 15
DAVID ลัน: และที่นี่ เกินไปก็ง่ายจริงๆ
ในช่วงต้นของการตั้งใจ ใช้เพียงเครื่องหมายเดียว
หรือแถบแนวตั้งเดียว
และหวังว่าคอมไพเลอร์จะ เสียงโห่ร้องที่คุณเพราะพวกเขาเป็นจริง
มีความหมายที่แตกต่างกันมาก
สำหรับผู้ที่อยากรู้อยากเห็นพวกเขากำลัง ใช้สำหรับการดำเนินงานค่าที่เหมาะสม
การดำเนินงานในแต่ละบิต
แต่คุณจะต้องการคู่ของพวกเขาที่นี่
และที่สำคัญสุดคือ คนแรกที่เข้าสู่ระบบเท่ากัน
ซึ่งเป็นผู้ประกอบการความเท่าเทียมกันในฐานะ เมื่อเทียบกับผู้ประกอบการที่ได้รับมอบหมาย
>> มาเรีย: และแถบแนวตั้งเป็น ตั้งอยู่ระหว่างลบและผลตอบแทน
DAVID ลัน: ใช่
ในแบบฉบับของแป้นพิมพ์ของสหรัฐอเมริกา
>> มาเรีย: อ๋อ
ดังนั้นขอกระโดดลง งบเงื่อนไข
ในรอยขีดข่วนคุณได้ เห็นแล้วอาจจะ
ถ้างบที่ช่วยให้คุณ ตรวจสอบว่าสิ่งที่เป็นจริงแล้ว
ทำอย่างอื่น
ดังนั้นคุณอาจจะต้องการ เพื่อตรวจสอบว่าเป็นผีของคุณ
สัมผัสบางเทพดาอื่น ๆ หรือเส้นขอบของหน้าจอของคุณ
แล้วคุณอาจจะต้องการที่จะ จบเกมหรือทำอย่างอื่น
ดังนั้นไวยากรณ์สำหรับว่า คือ "ถ้า (เงื่อนไข)."
ดังนั้นถ้าผีของคุณจะสัมผัสบางสิ่งบางอย่าง แล้วทำอยู่ภายในวงเล็บปีกกา
>> แล้วเรามีงบถ้า-อื่น
อื่น ๆ ช่วยให้เราสามารถที่จะทำอะไร ถ้าเงื่อนไขที่เรา
ตรวจสอบในการเริ่มต้นไม่เป็นความจริง
ดังนั้นถ้าผีจะสัมผัส ชายแดนทำเช่นนี้อื่นทำอย่างอื่น
ดังนั้นอย่างอื่นทำอย่างอื่น
แล้วเรามีตัวอย่างสั้น ๆ ของเรื่องนี้
ดังนั้นถ้า (military_time <12) เรา ต้องการที่จะ printf "ตอนเช้าที่ดี!"
อื่นที่เรากำลังจะไป printf "เย็นดี!"
ตัวอย่างพื้นฐาน
>> DAVID ลัน: ดี
>> มาเรีย: เย็น
ดังนั้นตอนนี้เรามีงบสวิทช์
สวิทช์งบในความสามารถทั่วไป ช่วยให้เราสามารถทำมากของสิ่งเดียวกัน
ที่เราก็พูดคุยกัน เกี่ยวกับถ้างบ
ยกตัวอย่างเช่นตอนนี้เรามี รูปแบบทั่วไปของคำสั่งสวิทช์
ที่ช่วยให้เราใช้ ตัวแปรที่เรียกว่า n
และเปรียบเทียบกับจำนวนมาก ค่าที่แตกต่างซึ่งที่นี่เรา
ได้เรียก Constant1, constant2
เราอาจจะมีมากขึ้น
และผู้ที่จะถูกเรียกว่ากรณี
>> ดังนั้นถ้าเรามีสวิทช์ statement-- และผลงานนี้
เฉพาะสำหรับ integers-- เรามี ตัวแปรในกรณีนี้ที่ n
ถ้า n เป็นตัวแปร เท่ากับ Constant1 เรา
จะดำเนินการข้อมูลโค้ดบาง หรือสิ่งที่เราต้องการจะทำ
และจากนั้นเราจะแตก
ดังนั้นการแบ่งหมายความว่า คำสั่งสวิทช์
จะหยุดการดำเนินการในกรณีที่ n เท่ากับ Constant1,
แล้วโปรแกรมของคุณจะยังคง
มันจะออกมาจาก สลับคำสั่งและมันจะ
ยังคงทำอย่างอื่น
>> แต่ถ้า n ไม่เท่ากับ Constant1 แล้วกรณี constant2
จะถูกตรวจสอบ
ดังนั้นถ้า n เท่ากับ constant2 ที่อื่น ๆ ข้อมูลโค้ดจะถูกดำเนินการ
และจากนั้นก็จะทำลาย ถ้าที่เท่ากับมัน
และจากนั้นเราจะได้มี also-- ไม่ จำเป็นต้อง though-- กรณีที่เริ่มต้น
ซึ่งจะเกิดขึ้นถ้า n ไม่เท่ากับ กรณีใดกรณีหนึ่งที่คุณได้ระบุไว้
และในกรณีที่เริ่มต้นเรายัง ไม่จำเป็นต้องจำเ​​ป็นต้องหยุดพัก
เพราะคำสั่งสวิทช์จะได้รู้ว่า ที่ต้องการที่จะจบหลังจากที่เริ่มต้น
กรณีที่หากเป็นกรณีที่
>> DAVID ลัน: แต่มีสไตล์, เรามักจะใส่ไว้ในนั้น
>> มาเรีย: ใช่
>> DAVID ลัน: ใช่
ดังนั้นเฉพาะอย่างยิ่งเมื่อเริ่มออก โดยเฉพาะอย่างยิ่งถ้าในหมู่ผู้น้อย
สะดวกสบายฉันจะส่วนตัว เพียงแค่ขอแนะนำให้ติดกับไอเอฟเอ
และไอเอฟเอ-elses และถ้า-อื่นถ้า-elses และอื่น ๆ ถ้าเพียง
เพราะพวกเขากำลังเล็ก ๆ น้อย ๆ ตรงไปตรงมามากขึ้น
นี้คือการเพิ่มประสิทธิภาพที่ดีหรือ บางครั้งแม้สกอร์มัน
ทำให้โค้ดอ่านได้มากขึ้น
และในความเป็นจริงอาจจะ กลางภาคการศึกษาที่เราจะเห็นปัญหา
การตั้งค่าที่มันก็ดูดีกว่า และง่ายต่อการอ่านสำหรับมนุษย์
โดยใช้คำสั่งสวิทช์
แต่ไม่ต้องกังวลเกี่ยวกับ ยึดมั่นกับเรื่องนี้เร็วเกินไป
>> มาเรีย: ใช่
หากคุณมีมากถ้างบ มันอาจจะไม่สามารถอ่านได้มาก
มันอาจจะไม่ได้อย่างรวดเร็วมาก สำหรับคุณที่จะผ่านมันไป
ดังนั้นงบสามารถสลับ จะมีประโยชน์มากเช่นกัน
และยังไม่ remember-- ไม่ ลืมที่จะใส่พักในที่นั่น
>> DAVID ลัน: อย่าจำนี้
>> มาเรีย: เพราะแล้วคุณอาจตกอยู่ ผ่านจากที่หนึ่งไปยังอีกกรณี
ดังนั้นขอบอกว่ากรณี Constant1 ไม่ได้มีคำสั่งพักอยู่ในนั้น
จากนั้นเราอาจจะตกผ่าน ในกรณี constant2
และเราไม่ต้องการที่จะทำว่าถ้า เราได้มาถึงแล้วกรณี Constant1
และก็เท่ากับ n
>> ดังนั้นสำหรับตัวอย่างเช่นถ้าเรามีตัวแปร n ที่มีจำนวนชั้นเรียน
และเราต้องการที่จะเห็นสิ่งที่ ระดับ is-- ถ้า n มีค่าเท่ากับ 50,
เรากำลังจะพิมพ์ "CS50 คือ รู้เบื้องต้นเกี่ยวกับวิทยาการคอมพิวเตอร์ครั้งที่หนึ่ง "
จากนั้นเรากำลังจะทำลาย
และที่มัน
แต่ถ้า n มีค่าเท่ากับ 51 เราจะ
พิมพ์ "CS51 เป็นบทนำ วิทยาการคอมพิวเตอร์ครั้งที่สอง. "
จากนั้นอีกครั้งที่เรากำลังจะทำลาย
แต่ถ้าเราใส่แล้ว 124, 61, ใด ๆ หมายเลขอื่น ๆ ที่คุณอาจจะคิดว่าของ
หรือโปรแกรมที่ไม่ได้ไป ที่จะยอมรับว่า
ดังนั้นก็จะพูดว่า "ขอโทษผม ไม่คุ้นเคยกับการเรียนที่. "
และก็ไปทำลาย
DAVID ลัน: ดังนั้นคุณสามารถดู ถ้าอื่นถ้าความคิดอื่น ๆ ที่นี่
มันเป็นเพียงแค่ไวยากรณ์ที่แตกต่างกัน การแสดงความคิดเดียวกันแน่นอน
>> มาเรีย: แน่นอน
ตอนนี้เรามีผู้ประกอบการของเราประกอบไปด้วย
ผู้ประกอบการเพื่อให้มีประกอบไปด้วย สาม parts-- เงื่อนไข
สิ่งที่จะทำอย่างไรถ้า สภาพที่เป็นจริง
และแล้วสิ่งที่ต้องทำ ถ้าเงื่อนไขที่เป็นเท็จ
ดังนั้นคุณจะเห็นโดยทั่วไป ไวยากรณ์ของที่นี่
เรามีเครื่องหมายคำถามและ แล้ว the-- สิ่งที่เราเรียกสิ่งนี้?
DAVID ลัน: ลำไส้ใหญ่
มาเรีย: ลำไส้ใหญ่
ขอบคุณ.
ขอโทษ
ดังนั้นเรามาดูตัวอย่างของเราที่จะ ดูว่าเราสามารถทำให้ความรู้สึกของ this--
class_num == 50
ดังนั้นที่นี่เราจะเห็นผู้ประกอบการบูลีนของเรา == ที่เปรียบเทียบ class_num ตัวแปร
ถึง 50
ร้านค้า class_num ดังนั้นจำนวนเต็ม
และถ้าจำนวนเต็มที่ เท่ากับ 50 แล้วเรา
จะเก็บ "เดวิดลัน" ภายในอาจารย์สตริง
ถ้าจำนวนชั้นไม่ได้ เท่ากับ 50, "ดาวิดลัน"
เป็นไปได้ที่อาจารย์
>> DAVID ลัน: ขอบคุณ
และเพื่อให้ดูเหมือนว่าเทียบเท่ากับ สิ่งที่คุณจะพูดได้อย่างรวดเร็วก่อน?
>> มาเรีย: สำหรับผมแล้วมันดูเหมือนว่า เช่นถ้างบ-อื่น
>> DAVID ลัน: ใช่
และในความเป็นจริงนี้เป็นชนิด ของสวยหนึ่งซับ
เพื่อที่จะพูดในการดำเนินการ ว่าตรรกะของถ้า-อื่น
แต่ทำทุกอย่างในขั้นตอนเดียว
>> มาเรีย: แน่นอน
ใช่.
ดังนั้นหาก-อื่นอาจงบ ใช้เวลามากของพื้นที่
พวกเขาอาจจะยาวเกินไปสำหรับ สิ่งที่ง่ายเช่นนี้
ดังนั้นนี่สามารถมาก รวบรัดและดีมาก
ดังนั้นตอนนี้เรากำลังจะเข้าสู่การมองหาที่ การดำเนินการบางสิ่งบางอย่างอีกครั้งและอีกครั้ง
เพื่อตรวจสอบหา สภาพหลายครั้ง
แล้วดำเนินการต่อไปทำอะไรบางอย่าง ในขณะที่สภาพที่เป็นจริง
ดังนั้นนี่จะทำให้เรา อย่างเป็นห่วงในขณะที่
>> ไปทางซ้ายเรามี ในขณะที่วงแรกของเรา
ดังนั้นในขณะที่สิ่งที่เป็นความจริง ทำอะไรบางอย่างอีกครั้งและอีกครั้ง
เพื่อให้แน่ใจว่าจะสังเกตเห็นว่าของเรา สภาพที่นี่คือการตรวจสอบที่ด้านบน
ในขณะที่มี loop-- ที่สองของเราที่เราเรียกว่า ที่ทำในขณะที่ loop-- ที่เราทำบางสิ่งบางอย่าง
แล้วเราตรวจสอบสภาพ
และถ้ามีเงื่อนไขว่า ยังคงเป็นความจริง
เรากลับไปและทำสิ่งนั้นอีกครั้ง
ดังนั้นความแตกต่างที่สำคัญคือ เงื่อนไขที่มีการตรวจสอบสำหรับ
และรหัสไม่อาจจะ ดำเนินการถ้าเงื่อนไขไม่ได้
จริงกับวงในขณะที่
ในขณะที่มีสิ่งที่ต้องทำในขณะที่ วงเรามีรหัส
ที่มีการดำเนินการอยู่เสมออย่างน้อยหนึ่งครั้ง
และแล้วในขณะที่เงื่อนไข ยังคงเป็นความจริง
เราสามารถกลับไปและย้ำอีกครั้งภายใน
ดังนั้นทำไมคุณคิดว่าเราจะใช้ ทำในขณะที่ห่วงมากกว่าห่วงขณะที่?
ขวา.
ดังนั้นถ้าเราต้องการที่จะแจ้งให้ ของผู้ใช้สำหรับการเรียงลำดับของการป้อนข้อมูลบางอย่าง
ถ้าเราต้องการที่จะถามพวกเขา ให้ใส่ชื่อของพวกเขา
เราต้องการที่จะมีอย่างน้อยหนึ่งครั้งขอให้พวกเขา
และถ้าพวกเขาใส่ ชื่อที่เราไม่ได้
จะถามพวกเขาอีกครั้ง เพราะเรารู้อยู่แล้วว่ามัน
แต่ถ้าพวกเขาไม่ได้ใส่ ชื่อของพวกเขาหรือถ้าพวกเขา
ใส่สิ่งที่ เห็นได้ชัดไม่ชื่อ
เรายังคงต้องการที่จะดำเนินการต่อไป ขอให้พวกเขาสำหรับชื่อของพวกเขา
>> DAVID ลัน: และในการบรรยายที่เรามีอย่างใดอย่างหนึ่ง เช่นนี้กับ int ได้รับในเชิงบวก
เช่นที่ไม่มีอะไรที่จะ การตรวจสอบในตอนแรกเพราะคุณจะไม่ได้
อากาศเป็น int
ดังนั้นเราจึงต้องการที่จะทำ this-- ได้รับ int จาก user--
แล้วตรวจสอบว่ามันอาจจะ อีกครั้งและอีกครั้งและอีกครั้ง
>> มาเรีย: แน่นอน
สำหรับการตกลง loops--
สำหรับลูปสามารถช่วยให้เราสามารถทำเกือบ สิ่งเดียวที่แน่นอนเช่นเดียว
เป็นจริงสิ่งเดียวที่แน่นอน
จึงไม่มีอะไรที่ คุณสามารถทำกับวง
ที่คุณจะไม่สามารถ จะทำอย่างไรกับลูปในขณะที่
แต่สำหรับลูปอาจจะดูเล็ก ๆ น้อย ๆ บิตซับซ้อนมากขึ้น syntactically
เพราะพวกเขามี สามส่วนสิ่งที่อยู่ภายใน
ก่อนที่จะเป็นเพียง สภาพที่มีลูปในขณะที่
ดังนั้นส่วนแรกที่คุณน้ำทะเล ซ้ายมากที่สุดเรามี "คนแคระ int = 0"
ดังนั้นนี่เป็นที่ที่เรา เริ่มต้นตัวแปรของเรา
>> แล้วเรามีอัฒภาค และ "คนแคระ <7"
ดังนั้นนี่คือที่ออก สภาพที่เป็นจริง
ดังนั้นเป็นสิ่งที่เราจะต้อง ใส่เพียงในขณะที่ loop--
"ในขณะที่คนแคระ <7"
ที่นี่ที่จะไปใน กลางสำหรับวงของเรา
ดังนั้น "dwaves <7"
และแล้วส่วนสุดท้ายของเราคือ "คนแคระ ++" ซึ่งเป็นที่ที่เราปรับปรุงตัวแปรของเรา
ดังนั้นสิ่งที่สำคัญ ที่จะตระหนักถึงคือที่นี้
จะไปผ่านทางนี้สำหรับวง เจ็ดครั้งและดำเนินการเจ็ดครั้ง
ดังนั้นเราจึงมีเจ็ด คนแคระและพวกเขากำลังทั้งหมด
จะพูดว่า "ฉันอยู่ที่นี่ เพื่อช่วยให้คุณหิมะสีขาว "
เพราะพวกเขามีความพร้อม ที่จะช่วยให้สโนว์ไวท์
>> ด้วยในขณะที่ลูปที่เราจะได้ทำ การเริ่มต้นและการปรับปรุง
ไม่ได้อยู่ในสภาพอีกครั้ง แต่ ก่อนหรือภายในวงในขณะที่
เพื่อให้แน่ใจว่า we-- เพราะ เรามักจะต้องชิ้นส่วนเหล่านั้น
ดังนั้นเพื่อให้แน่ใจว่าเรามี พวกเราจะได้ยังคงเพิ่มพวกเขา
ในเพียงไม่ได้อยู่ในวงเล็บ
>> DAVID ลัน: และดังนั้นจึงมีลักษณะ like-- ในการบรรยายยกตัวอย่างเช่น
ฉันมักจะใช้เช่นเดียวกับฉันและ n และตัวแปรที่น่าเบื่อสวย
ดูเหมือนว่าคุณสามารถใช้มากขึ้น ชาญฉลาดชื่อตัวแปรมากเกินไป
>> มาเรีย: ใช่มันเป็นจริงที่ดีมาก ที่จะใช้ตัวแปรอธิบายเพิ่มเติมนิด
เพราะโดยเฉพาะอย่างยิ่งถ้ามีคนอื่นเป็น อ่าน code-- ของคุณบางทีคุณปราบ
หรือถ้าคุณกำลังทำงานร่วมกัน กับ somebody--
คุณต้องการให้แน่ใจว่าพวกเขา เข้าใจสิ่งที่คุณกำลังทำ
>> ตกลง.
ดังนั้นนี่คือบางสิ่งบางอย่างมาก funky-- สำหรับวงภายในสำหรับวง
ผมไม่ทราบว่าถ้าเราเคยเห็นแบบนี้มาก่อน
อาจจะไม่.
แต่เราจริงจะมี this-- ลูปเพื่อแทนของลูป
ดังนั้นไม่มีใครต้องการที่จะอาจจะเดิน ฉันผ่านสิ่งที่เกิดขึ้นที่นี่?
DAVID ลัน: ฉันจะใช้แทง
มาเรีย: เย็น
DAVID ลัน: OK
ดังนั้น spoiler-- เราต้องการที่จะพิมพ์สิ่งที่ ที่อยู่ในมุมขวาล่าง
ที่นั่น
>> มาเรีย: ขวา
ใช่ใช่
>> DAVID ลัน: ดังนั้นเราได้เพียงแค่ ใส่ที่แสดงผลตัวอย่างมี
ดังนั้นผมจึงสามารถสรุปจาก ห่วงสูงสุดที่คุณ
ทำซ้ำมากกว่าแถว วงสุดเพื่อที่จะพูด
และคุณทำซ้ำมากกว่า คอลัมน์ที่มีวงในสุด
และสังหรณ์ใจนี้ ควรหวังว่าจะทำให้ความรู้สึก
เพราะโดยธรรมชาติของ ทุกโปรแกรมที่เราเคยเห็น
ก่อน printf ซึ่งเป็น ฟังก์ชั่นที่เรากำลังใช้ในที่สุด
มีความสามารถในการพิมพ์สิ่งที่ ออกเป็นหลักทีละบรรทัด
เช่นเดียวกับเมื่อคุณได้ออกมา บรรทัดใหม่มี
ไม่มีการเสแสร้งกลับและการพิมพ์บางสิ่งบางอย่าง ที่สูงขึ้นในหน้าจออย่างน้อย
ไม่ได้ใช้ printf เช่นนี้
>> ดังนั้นในเรื่องที่มันทำให้ ความรู้สึกที่ห่วงสุด
ควรจะหมายถึงแถว เพราะแต่ละแถวให้
คุณจะต้องการที่จะ พิมพ์ออกมา XXXXX แล้ว
ย้ายไปแถวถัดไป, XXXXX
ดังนั้นแถวมาก่อน
และจากนั้นในแต่ละ แถว, คุณพิมพ์คอลัมน์
ถ้าคุณพยายามที่จะทำมัน ตรงข้ามมันจะอาจจะไม่ได้
ออกมาตามที่ต้องการ
>> มาเรีย: ใช่
เราก็ไม่สามารถกลับไปที่ แถวก่อนหน้านี้ด้วย printf
>> DAVID ลัน: และสิ่งที่น่าสนใจ ต่อการสนทนาในวันนี้เกี่ยวกับขอบเขต
ที่จริงก็คือว่าเป็นแถวเป็น int ที่ประกาศในวงสูงสุด
แต่สังเกตเห็นว่ามันยังคงเป็น ภายในเพื่อที่จะพูด
วงเล็บปีกกาที่ ทันทีตาม
แม้ว่าจะไม่ได้ในทางเทคนิค ภายในวงเล็บปีกกาเหล่านั้น
ดังนั้นแถวอยู่ในขอบเขตสำหรับ ความสมบูรณ์ของข้อมูลโค้ด,
ทั้งด้านในของด้านนอกสำหรับวง และภายในของภายในสำหรับวง
แต่ด้วยความคมชัดที่ คอลัมน์อยู่ในขอบเขต?
คอลัมน์ตัวแปร?
ใช่เพียงในวงภายใน
และที่ตกลงเพราะเราไม่สามารถเข้าถึง มันนอกวงเล็บปีกกาของ
ทั้งหมดที่เราทำคือการพิมพ์ออกมาใหม่ สายที่ปลายสุดมี
เพื่อที่ว่าในความเป็นจริงก็โอเค
>> ดังนั้นนี้มีผลกระทบที่มันดูเหมือนว่า การทำแถวที่สามและสี่เสา
>> มาเรีย: ขวา
ดังนั้นก่อนที่เราจะไปผ่านแถวแรกของเรา
และเพียงแค่ในแถวแรกของเราที่เราทำ สี่เสาภายในแถวแรก
ดังนั้นเราจึงพิมพ์สี่เอ็กซ์
และจากนั้นเราสามารถออกจากการห่วงเนื่องจาก เราได้พิมพ์แล้วออกสี่เอ็กซ์
และเราพิมพ์บรรทัดใหม่
และจากนั้นเราไปผ่าน กระบวนการเดียวกันสำหรับสองแถว
ที่จะทำให้การรวมของสาม
>> DAVID ลัน: และมันเป็นมูลค่า noting มัน เพียงสิ่งประดิษฐ์ของตัวอักษรที่ความเป็นจริง
ว่าการส่งออกของกลุ่มตัวอย่าง ดูเหมือนมากสูง
ราวกับว่ามีมากขึ้น แถวกว่าคอลัมน์
แต่มันเป็นเพียงเพราะ X จะสูงกว่าที่เป็นอยู่กว้าง
นั่นคือทั้งหมดที่เกิดขึ้นที่นั่น บวกกับพื้นที่สีขาวระหว่างบรรทัด
>> มาเรีย: ขวา
เย็น.
DAVID ลัน: สิทธิทั้งหมด
ดังนั้นดูอย่างรวดเร็วที่ตั้งปัญหาหนึ่ง ใช้คำถามใด ๆ และจากนั้นเลื่อน?
ทั้งหมดขวา
ดังนั้นในปัญหาตั้งหนึ่งมีสาม ความท้าทายหลักในท้ายที่สุด
แต่ก่อนที่คุณจะได้พบกับ ว่าปัญหาที่กำหนด
สเปคเช่นเดียวกับหลาย ๆ psets ฤดูใบไม้ร่วงนี้จะไปเดินคุณ
ผ่านไม่กี่ออกกำลังกายอบอุ่นขึ้น ชี้ให้คุณออกทรัพยากรไม่กี่
ที่คุณอาจจะหรืออาจ ไม่ได้เห็นแล้ว
ยกตัวอย่างเช่น CS50 มีชุดกางเกงขาสั้น,
ซึ่งเป็นวิดีโอสั้น ไม่แตกต่างจากนี้ แต่ที่
มีหัวข้อ specific-- มาก อาจจะห้านาที
10 นาทีในระยะเวลาในลูปหรือ ในเงื่อนไขหรือขั้นตอนวิธี
หรือเพิ่มเติมในภายหลัง หัวข้อขั้นสูงเช่นเดียวกับ
และเรามักฝัง ที่เป็นปัญหา
ชุดเพื่อให้นักเรียน มีทรัพยากรที่มี
เพื่อตรวจสอบวัสดุที่อาจมี แล้วมาในการบรรยายหรือมาตรา
แต่วิธีนี้ก็มุ่งเน้นมากขึ้น และอื่น ๆ ที่ปลายนิ้วของพวกเขา
>> นอกจากนี้เรายังมีแนวโน้มที่จะฝังในปัญหา กำหนดสิ่งที่เรียกว่าเกมส์
ดังนั้นเกือบทั้งหมดของตัวอย่างที่ฉันทำ ในการบรรยายบนเวทีที่นี่เรายัง
ได้ยิงในกล้องใน ความก้าวหน้ามากขึ้นช้าลง
คำแนะนำแบบใกล้ชิดมากขึ้นโดยฉันใน แล็ปท็อปของฉันของรหัสที่ละบรรทัด
เพื่อที่ว่าในระดับที่เรามักจะ อ่านผ่านอะไรบางอย่างหรือใครบางคน
จะใส่เข้ากับ ตอบคำถาม
แต่มันไม่จำเป็นต้องจม สำหรับทุกคนในในกลุ่มผู้ชม
ดังนั้นคุณจะพบรหัสเกมส์ สำหรับส่วนมากของตัวอย่าง
ที่เราทำที่นี่ในการบรรยายเพื่อให้คุณ สามารถเดินผ่านมันที่ก้าวของคุณเอง
และย้อนกลับหรือเร็วไปข้างหน้าหรือ ข้ามโดยสิ้นเชิงถ้าคุณต้องการ
>> มักจะเป็นเพียงไม่กี่ คำถามที่อบอุ่นขึ้นที่
ขอให้คุณในการจัดเรียงของ เสริมสร้างวัสดุนี้
และให้แน่ใจว่าคุณสะดวกสบายก่อน ที่จะดำเนินการกับส่วนที่เหลือของ pset ที่
และแล้วแน่นอน มี pset ตัวเอง
และหนึ่งในสิ่งที่ เราจงใจมาก
ทำใน CS50 เกือบทุกจืด หรือไม่น่าทึ่งปัญญา
ขั้นตอนกลไกที่ คุณอาจจะต้องทำ
มักจะมีการบันทึกไว้เป็นอย่างดี
ในช่วงระยะเวลาที่เราจะ เริ่มต้นที่จะถามคำถามเชิงโวหารมากขึ้น
เหมือนจำได้ว่าการทำเช่นนี้หรือ?
แต่โดยทั่วไปแล้วคุณจะพบว่า ว่าปัญหาชุดที่คุณได้รับ
ผ่านกลไก บางสิ่งบางอย่างเพื่อให้
น่าสนใจท้าทายทางปัญญา ที่เหลือในที่สุดเพื่อคุณนักเรียน
>> กับที่กล่าวว่า Zamyla เพื่อคนที่เรา เก็บไว้หมายถึงวันนี้ในการบรรยาย
เป็นหนึ่งในพนักงานของเรารู้จักกันมานาน สมาชิกที่ยังถือเกมส์
เกี่ยวกับปัญหาที่เฉพาะเจาะจงเช่น pset มาริโอ และโลภแม้จะไม่ใช่น้ำในปีนี้
และมันอยู่ในคนเหล่านั้น walkthroughs ว่าเธอมักจะ
มีเคล็ดลับและเทคนิคสำหรับ วิธีการดำเนินการที่ไม่เคยบอกคุณ
ว่าสิ่งที่ต้องทำ แต่ rather-- เช่นเงื่อนไข
ถ้าคุณ will-- ให้คุณอย่างน้อย สองความคิดเพื่อที่จะขึ้นอยู่กับคุณ
ท้ายที่สุดในการตัดสินใจ วิธีการที่จะเข้าใกล้พวกเขา
>> มาเรีย: ชอบเรียงจากระดับสูง ความเข้าใจในเหตุผลของสิ่งที่
เราจะขอให้คุณทำ
>> DAVID ลัน: แน่นอน
และในความเป็นจริงของ Zamyla เกมส์ที่มีความหมาย
ที่จะตอบบ่อย ถามคำถามที่
ฉันจะเริ่มต้นโดยเฉพาะอย่างยิ่งเมื่อ ข้อกำหนดเหล่านี้ที่มีความยาว
ที่น่ากลัวเล็ก ๆ น้อย ๆ ที่ได้รับข้อความ และภาพที่พวกเขามีอยู่ในพวกเขา
>> ดังนั้น water.c คุณจะพบ หลังจากที่คุณได้เสร็จมัน
เป็นจริงค่อนข้างตรงไปตรงมา
อย่างเป็นพวง คุณจะปัง
หัวของคุณกับผนังพยายาม ที่จะคิดออกว่าทำไมมันไม่ได้รวบรวม
หรือทำไมมันไม่ทำงานอย่างถูกต้อง
แต่เมื่อคุณทำเสร็จแล้ว กับมันและเมื่อคุณได้
การต่อสู้ใช้เวลากับใด ๆ ข้อผิดพลาดที่คุณอาจมี
คุณจะพบว่ามันเป็น โปรแกรมที่สั้นมาก
ก็สามารถทำได้ในเพียงไม่กี่ บรรทัดของรหัสซึ่งส่วนใหญ่
เราได้เห็นที่นี่ในการบรรยายแล้วถ้า คุณรวบรวมหน่วยการสร้างที่เหมาะสม
>> และในขณะที่เราขอแนะนำ ที่นี่ก็จะถาม
คุณสามารถระบุวิธีการหลายนาที ใครบางคนกำลังอาบน้ำในมหาวิทยาลัย
เราระบุในปัญหาที่เกิดขึ้น ตั้งอัตราการไหลของน้ำ
ในเช่นห้องอาบน้ำฝักบัวไหลต่ำ หัวเหมือนคลิปไฟล์
ที่เราเห็นเมื่อวานนี้หรือ ดังกล่าวตรงข้าม
และแล้วคุณก็ต้อง ที่จะทำบิตของคณิตศาสตร์
really-- ทางคณิตศาสตร์โดยใช้ C ที่จะบอก เราว่าหลาย ๆ ขวดน้ำ
เทียบเท่ากับถ้าเราว่า การอาบน้ำ n นาที
>> ขณะนี้ใน mario.c นี้เป็นไป จะเป็นโปรแกรมอีกเล็กน้อย
ก็ยังคงไม่ได้ไปนานนี้
เพียงไม่กี่บรรทัดนานกว่า water.c
แต่มันจะเป็นโอกาสที่ ที่จะสร้างโรงเรียนมาริโอเก่า
ปิรามิดจากซูเปอร์มาริโอ บราเดอร์หรือตามมา
มันไม่ได้ไปดูสวย หรือที่มีสีสันเป็นที่หนึ่งมี
เราเพียงแค่จะใช้แฮชแท็กเล็ก ๆ น้อย ๆ เช่นเดียวกับเราได้ที่นี่บนหน้าจอ
โดยใช้ข้อความ ASCII
แต่มันจะใกล้เคียงกับความคิดเดียวกัน
และมันจะเป็น การออกกำลังกายที่ได้อย่างรวดเร็วก่อน
ดูเหมือนว่าสวย simple-- เพียง พิมพ์ปิรามิดที่เรียบง่าย
แต่มีลักษณะคู่ ที่นี่ที่น่าสนใจ
ขอให้สังเกตว่าขอบขวาสุดของ พีระมิดจริงมีความกว้างสอง
ดังนั้นจึงมีสองเท่ากัน คอลัมน์สูงซึ่ง
ทำให้จำเป็นต้องมีเล็ก ๆ น้อย ๆ บิตของความคิดที่จะให้
แน่ใจว่าคุณได้ว่าตรงขวาเป็น เมื่อเทียบกับเพียงมุมได้อย่างสมบูรณ์แบบ
สาย
เพื่อให้เป็นบิตของกรณีมุม แต่ตรงกับเกมที่เกิดขึ้นจริง
>> และก็ยังไม่ชัดเจนในตอนแรก ได้อย่างรวดเร็ววิธีการพิมพ์พื้นที่สีขาว
ดังนั้นเมื่อฉันมองไปที่ ตัวอย่างการส่งออก here--
และก็ยังอยู่ใน spec-- มัน ชนิดของดูเหมือนสี่เหลี่ยมผืนผ้า
แต่เส้นทแยงมุมของ สี่เหลี่ยมผืนผ้าที่ได้รับการตัด,
และเป็นเพียงช่องว่างสีขาวเพื่อที่จะพูด
และเพื่อที่ถามบ่อย คำถามที่นี่อยู่เสมอดี
ฉันจะย้าย hashtags # มากกว่าที่จะเหมาะสมหรือไม่
หรือวิธีการที่ฉันจะพิมพ์ช่องว่าง?
และมันก็เป็นจริงได้ง่ายขึ้น กว่านักเรียนส่วนใหญ่คิดว่า
ขวา?
คุณสามารถใกล้เคียงกับสายตาโดยเพียงแค่ กดปุ่มแถบพื้นที่ครั้งหรือสองครั้ง
หรือสามครั้ง
>> และเพื่อให้ได้แม้ว่าจะมี printf เราเกือบ มักจะพิมพ์สตริงหรือเป็น int
หรือคำเช่น "สวัสดีที่ โลก "หรือชุดของคำ
คุณยังสามารถเพียงแค่พิมพ์ อ้างพื้นที่ได้นำมาอ้าง
และที่จริงจะให้ คุณมีพื้นที่สีขาว
ดังนั้นเก็บที่ในใจและ ไม่ overthink นี้
จริงๆคุณต้อง ตัดสินใจแถวโดยแถวโดยแถว
ไม่แตกต่างจากตัวอย่างของคุณ ช่วงเวลาที่ผ่านมาว่าหลายคน
คอลัมน์ควรจะเป็นช่องว่างสีขาวและ จำนวนของพวกเขาควรจะ hashtags
มันจะใช้เวลาบิตของเวลา แต่ก็ ในที่สุดปริศนาตรรกะแปลก ๆ
>> มาเรีย: ใช่
แต่ตรรกะของการไปแถวโดยแถว เป็นไปได้ที่จะมีประโยชน์มากที่นี่
DAVID ลัน: ใช่
ผมคิดว่าตัวอย่างรหัสที่คุณ gave-- แม้กระทั่ง แม้ว่ามันจะไม่ได้เป็นโปรแกรมที่สมบูรณ์
คุณยังคงต้อง int และหลัก และ stdio.h โมฆะและ #include,
จำนวนมากสิ่งที่ได้จากการบรรยาย
แต่การก่อสร้างตึก ดูเหมือนจะมี
และจากนั้นก็เป็นสิ่งสุดท้าย อัลกอริทึมน้อยมาก
ดังนั้นจึงปรากฎว่าเวลาที่คุณใด ๆ ไปลงใน CVS หรือร้านสะดวกซื้อใด ๆ
และคนที่มือคุณที่ ค่าใช้จ่ายแคชเชียร์หรือเหรียญในขณะที่การเปลี่ยนแปลง
มันกลับกลายเป็นว่าพวกเขามนุษย์ หรือไม่พวกเขารู้หรือไม่ว่า
อาจจะใช้สิ่งที่เป็น ที่เรียกว่าอัลกอริทึมโลภ
โดยถ้าคุณกำลังหนี้ที่ค้างชำระ, พูด $ 21 ในการเปลี่ยนแปลงเพราะเหตุผลบางอย่าง
บางสิ่งบางอย่างที่คุณซื้อราคาไม่แพงมาก กับการเรียกเก็บเงินที่ใหญ่มากที่ CVS,
มันจะน่ารำคาญจริงๆถ้า แคชเชียร์ให้คุณ 21 ซิงเกิ้ลหรือแย่ลง
ยังเป็นจำนวนมากทั้งของเหรียญ
แต่สิ่งที่คนที่เหมาะสมคือ อาจจะทำคือพวกเขากำลังจะ
ที่จะคว้า $ 20 แล้ว $ 1 ใบเรียกเก็บเงินและ มือคุณเพียงสองค่าใช้จ่ายในกรณีที่
มาเรีย: ดังนั้นพวกเขากำลังมองหาที่จะลด การเปลี่ยนแปลงที่พวกเขาให้กลับมาให้คุณ
DAVID ลัน: แน่นอน
และการจัดการที่เหมือนกันกับเหรียญเช่นกัน
หากคุณกำลังหนี้ที่ค้างชำระพูด, $ 0.50 หวังว่าคุณไม่ต้องการ 50 เพนนี
คุณต้องการที่สองแทน ไตรมาสเช่น
ตอนนี้ไม่ถือว่า ที่มีแคชเชียร์
เพียงพอของนิกายทุกที่ เขาหรือเธออาจต้องการให้คุณ
แต่เราไม่ช่วยให้คุณที่จะคิด เป็นอย่างมากในปัญหาที่เกิดขึ้น
และเป้าหมายในท้ายที่สุดคือการ ใช้ในรหัส C ขั้นตอนวิธีโลภ
เพื่อให้ผู้ใช้ที่ได้รับอนุญาต พิมพ์เท่าใด
เปลี่ยนเขาหรือเธอเป็นหนี้กับดอลลาร์ และเซนต์ชนิดของจุดลอยบาง
ค่าอาจจะ
และจากนั้นคุณต้องทำคณิตศาสตร์และ คิดออกอัลกอริทึมดี
กี่เหรียญที่ฉันสามารถให้ คุณน้อยที่สุดเพื่อให้คุณ
ว่าจำนวนเงินที่ของการเปลี่ยนแปลง
แต่มีจะเป็น ส่วนหากินไม่กี่ที่นี่ใช่มั้ย?
เหมือนมีทั้ง ปัญหาที่ไม่แน่ชัด
มาเรีย: แน่นอน
ดังนั้นจุดลอย มีค่าไม่แน่ชัด
เราได้พูดคุยเกี่ยวกับเรื่องนี้ในการบรรยายในวันนี้
>> DAVID ลัน: เราได้ ครั้งสุดท้ายในการบรรยาย
เราได้พูดคุยเกี่ยวกับความไม่แน่ชัด
และคุณไม่ต้องการที่จะโกงผู้ใช้ เท่าใดการเปลี่ยนแปลงที่เขาหรือเธอเป็นหนี้
และเพื่อให้คำแนะนำใน ปัญหาที่กำหนดสเปค
ให้ความคิดที่ท้ายที่สุดเท่าที่จะ วิธีที่คุณสามารถลดผู้ที่ไม่แน่ชัด
ข้อผิดพลาดที่อาจเกิดขึ้น
มันเป็นเรื่องที่หลีกเลี่ยงได้อย่างแน่นอนสำหรับ ปัจจัยการผลิตที่เรากำลังพูดถึง
และในความเป็นจริง pennies-- บางทีเราจะเลื่อนไป Zamyla,
ผมคิดว่าสำหรับเทคนิคที่มี
ดังนั้นในท้ายที่สุดคุณจะพบ การลุกลามของปัญหาที่เกิดขึ้นในสัปดาห์นี้
ครั้งแรกของการที่มีขนาดเล็กสวย กลางแล้วนั้นน้อยใหญ่
แต่ทั้งหมดของพวกเขาใช้อาคาร ช่วงตึกจากสัปดาห์ที่ผ่านมานี้
จาก supersection นี้ ปัญหาการตั้งสเปค
ทำให้คุณมีทรัพยากรมากมายนับไม่ถ้วน
แต่ยังคงถ้าทุกดิ้นรน โดยเฉพาะอย่างยิ่งในหมู่ผู้ที่สะดวกสบายน้อย
ไม่มีพื้นหลังก่อน มาถึงเวลาทำงาน
ในวันจันทร์และวันอังคารและ พุธและวันพฤหัสบดี
ไปที่ CS50 พูดคุยผ่านทาง เว็บไซต์แน่นอนของ
ผ่านที่คุณสามารถแช กับเจ้าหน้าที่และเพื่อนร่วมชั้น
>> แต่ในที่สุดผมคิดว่า คำแนะนำที่ดีที่สุดคือเพียงแค่เริ่มต้นในช่วงต้น
มันไม่ได้ชนิดของระดับที่คุณ ควรจะเริ่มต้นในวันพุธที่ psets
คืนหรือเลวคืนวันพฤหัสบดี
>> มาเรีย: แนะนำที่ดีที่สุดของฉันคือ ที่จะได้เริ่มต้นวันจันทร์
DAVID ลันจันทร์
ดังนั้นหากคุณยังไม่ได้เริ่ม already-- ไม่มี
แต่แม้ว่าจะไม่ได้จันทร์อังคารแล้ว
ก่อนหน้านี้ที่ดีกว่า
และนั่นคือเหตุผลที่ แน่นอนมีหลายวันในช่วงปลายเพื่อให้เป็น
เพื่อให้คุณบิตของการเป็น ความดันทางจิตวิทยา
ที่จะเริ่มต้นก่อนหน้านี้ แต่ยังคงให้ สิ่งที่ลื่นเมื่อสิ่งที่ใช้เวลานาน
กว่าที่คุณคาด
>> มาเรีย: และคุณต้องการที่จะทำให้การใช้งาน เวลาทำงานมากเท่าที่คุณสามารถเกินไป
>> DAVID ลัน: คำถามใด?
ทั้งหมดขวา
ดีทำไมเราไม่เลื่อนที่นี่?