დევიდ ჯ Malan: ეს არის CS50 და ეს არის დაწყების კვირაში ოთხი. და, ბიჭი, არის Volkswagen in პრობლემები ყველა გამო პროგრამული უზრუნველყოფა. მოდით შევხედოთ. [ვიდეო აღწარმოების] -Cars, Smartest გმირები არის სწრაფი და Furious ფილმები. ამ კვირაში გერმანული ავტომწარმოებელი Volkswagen აღმოჩნდა შუა სკანდალი პოტენციურად სისხლის სამართლის პროპორციები. -Volkswagen არის მზადება მილიარდობით ჯარიმები, შესაძლო სისხლის სამართლის პასუხისგებაში მისი აღმასრულებლები, როგორც კომპანია ბოდიშს გაყალბების 11 მილიონი მანქანები დაეხმაროს მას სცემეს ემისიების ტესტები. -Certain დიზელის მოდელები შექმნილია დახვეწილი პროგრამა რომ გამოყენებული ინფორმაცია, მათ შორის პოზიცია საჭე და მანქანა დააჩქაროს, რათა დადგინდეს, მანქანა იყო გადის გამოსხივება ტესტირება. Under გარემოებას, ძრავის შეამცირებს ტოქსიკური გამოყოფა. მაგრამ მანქანა გაყალბდა შემოვლითი რომ როდესაც ის იყო ორიენტირებული. ემისია გაიზარდა 10-დან 40 ჯერ ზემოთ მისაღები EPA დონეზე. [END აღწარმოების] დევიდ ჯ Malan: მოდით შევხედოთ ამ და ვნახოთ, თუ რამდენად ეს შესაძლოა განხორციელდეს და როგორ შეიძლება გავლენა იქონიოს ამდენი მანქანა მოსწონს ეს. ასე რომ, ჩემი მხრივ, აქ არის პრესის ნათქვამია მიერ გაცემული EPA-- გარემოს დაცვის სააგენტოს, რომელიც აშშ-ს მარეგულირებელი საგენტოდან, რომ ამუშავებს გარემოს შეშფოთება, და მერე რეალურ იურიდიული ცნობა, რომ იყო გაუგზავნე Volkswagen რამდენიმე დღის წინ. ასე რომ, EPA წერს და ამხილა ახლა საჯაროდ, დახვეწილი პროგრამული უზრუნველყოფა ალგორითმი გარკვეული Volkswagen მანქანების ცნობს როდესაც მანქანა გადის ოფიციალური გამოსხივება ტესტირება და თურმე სრული ემისიების აკონტროლებს მხოლოდ დროს ტესტი. ეფექტურობა ამ მანქანების დაბინძურების ემისიების კონტროლის მოწყობილობები დიდად შემცირდეს ყველა ნორმალური მამოძრავებელი სიტუაციებში. ეს შედეგები მანქანა, რომელიც აკმაყოფილებს სტანდარტების ლაბორატორია და ტესტირების სადგური, მაგრამ დროს ნორმალურ მუშაობას ასხივებენ აზოტის oxides-- ან NOx-- მდე 40 ჯერ სტანდარტი. პროგრამული უზრუნველყოფა მიერ წარმოებული Volkswagen ციტირებით unquote, დამარცხების მოწყობილობა, მიერ განსაზღვრული სუფთა ჰაერი აქტის აშშ. ისინი წასულიყვნენ ვთქვა, რომ EPA- ს და კიდევ სააგენტო აღმოჩენილი დამარცხების მოწყობილობა პროგრამული უზრუნველყოფის შემდეგ დამოუკიდებელი ანალიზი მკვლევარები West ვირჯინიის უნივერსიტეტის. NOx დაბინძურების ხელს უწყობს აზოტის დიოქსიდი, მიწისპირა ოზონის, და ჯარიმის ნაწილაკების. ექსპოზიციის ამ დამაბინძურებლების უკვე უკავშირდება ერთად ფართო სპექტრი ჯანმრთელობის სერიოზული ეფექტი, მათ შორის ასთმის თავდასხმები და სხვა რესპირატორული დაავადებების, რომ შეიძლება იყოს სერიოზული საკმარისი გააგზავნოთ ადამიანი საავადმყოფოში. ექსპოზიციის ოზონის და ნაწილაკების ასევე უკვე ასოცირდება ნაადრევი გარდაცვალების გამო სუნთქვის დაკავშირებული ან სისხლძარღვთა დაკავშირებული მოვლენები. ბავშვები, მოხუცები, ადამიანებს ადრეული რესპირატორული დაავადება განსაკუთრებით რისკის ქვეშ ჯანმრთელობის ეფექტი ამ ნივთიერებებით. საკმარისია იმის თქმა, რომ ეს საკმაოდ სერიოზული. და მოდით წავიდეთ წაკითხვის კიდევ ერთი ნაწყვეტი და მაშინ ჩვენ შევხედოთ ძირითადი შედეგები მოჰყვეს ამ კონტექსტში მანქანა. კერძოდ, Volkswagen წარმოებული და დაყენებული პროგრამული უზრუნველყოფა ე.წ. ელექტრონული კონტროლი module-- ან ECM-- of ამ მანქანების, რომ იგრძნო, როდესაც მანქანა მიმდინარეობს ტესტირება შესაბამისად EPA გაფრქვევა სტანდარტებს. დაყრდნობით სხვადასხვა საშუალებებით, მათ შორის, პოზიცია საჭე, ავტომობილის სიჩქარე, ხანგრძლივობა ძრავის ოპერაცია, და barometric ზეწოლა, ამ საშუალებებით ზუსტად მუხლუხიანი პარამეტრების ფედერალური ტესტი პროცედურა გამოიყენება ემისიის ტესტირება EPA სერტიფიცირების მიზნით. დროს EPA- ს ემისიის ტესტირება, სატრანსპორტო საშუალებების ECM პროგრამული უზრუნველყოფა გაიქცა პროგრამული უზრუნველყოფა, რომელიც წარმოებული შესაბამისი ემისიის შედეგები. ყველა სხვა ჯერ, მანქანა ECM პროგრამული უზრუნველყოფა გაიქცა ცალკე გზის calibration, რომელიც შემცირდა ეფექტურობის საერთო ემისიის კონტროლის სისტემა, სპეციალურად შერჩევითი კატალიზური შემცირება Lean NOx trap-- რომელიც ჩვენ დავინახავთ, ამ მომენტში. შედეგად, გამონაბოლქვის NOx ზრდის ფაქტორი 10 40 ჯერ ზემოთ EPA შესაბამისი დონის დამოკიდებულია ტიპის დისკის ციკლი. ასე რომ, რა ეს ნამდვილად იმას ნიშნავს, და კოდის პროგრამული გაშვებული საქართველოს Volkswagen ის არ აქვს ჯერ საჯაროდ გამჟღავნება, ის არის, რომ, ფაქტობრივად, ამ ექვივალენტი სადღაც შიგნით Volkswagen- ის კოდი. თუ თქვენ მიმდინარეობს ტესტირება, და თუ მანქანა პოულობს გარკვეული გარემოს ფაქტორების როგორიცაა საჭე თანამდებობა ან მოძრაობა ან არ გააჩნიათ მათი მანქანა ან ნებისმიერი რიგი სხვა ფაქტორები რომელიც ამჟამად ვარაუდობდნენ ნაწილი იყოს ამ ფორმულის, ისინი უბრალოდ ჩართოთ სრული ემისიის კონტროლი. სხვა სიტყვებით, ისინი დაიწყოს ასხივებენ ნაკლები დამაბინძურებლების. სხვაგან, ყველა სხვა სიტუაცია მაშინ, როდესაც ის არ არის აღმოჩენილი, როგორც ლაბორატორიაში, ისინი უბრალოდ არ. ასე რომ, შეგიძლიათ გაამარტივებს ამ შევიდა უფრო კონკრეტული pseudocode რაღაც მოსწონს ეს. იმ შემთხვევაში, თუ დისკები გარდამტეხ მაგრამ საჭე არ არის, დამაფიქრებელი რომ მანქანა არის რამდენიმე სახის მოძრავი ცილინდრიანი მაგრამ გარკვეული სახის საწყობი მიმდინარეობს ტესტირება, მაშინ მოიქცეს, როგორც EPA მინდა. წინააღმდეგ შემთხვევაში, არ. მოდით შევხედოთ ერთი მოკლე ვიდეო, რომელიც იღებს შევხედოთ, თუ რა შედეგები მოჰყვეს არის ეს რეალურად მექანიკურად. [ვიდეო აღწარმოების] გასულ სასწავლო პარასკევი სააგენტომ გამოაცხადა, რომ ზოგიერთი Volkswagen Audi მანქანები გააკეთა შორის 2009 და ამ წელს გამოყენებით ე.წ. დამარცხება მოწყობილობა მისაღებად გარშემო ემისიების კანონები განკუთვნილია შენარჩუნება საჰაერო სუფთა. მაგრამ რას ნიშნავს ზუსტად? ისე, თანამედროვე მანქანა რამდენიმე ათეული კომპიუტერების შიგნით მათ. და ზოგიერთი იმ კომპიუტერები დაეხმაროს კოორდინაციას ფუნქციები ძრავის ოპტიმალური შესრულება, ხოლო მიღების დარწმუნებული ვარ, რომ არ არის ძალიან ბევრი ნაგავი გამოდის გამოსაბოლქვი მილი. ისინი რეალურად მუშაობდა ამ გზით რამდენიმე ათეული წელია. ძირითადად, ყველა ნაწილი თანამედროვე მანქანის ძრავში აქვს სენსორი და კონტროლერი იგი, და ამ კომპიუტერები კითხულობს მონაცემთა ათასობით ჯერ წამში მიღების კორექტირებას როგორც თანაფარდობა საწვავის საჰაერო რომ აპირებს შევიდა ბალონები. ეს ღალატი Volkswagen და Audi მოდელები diesels, და diesels კიდევ ერთი მართლაც მნიშვნელოვანია კომპიუტერული აკონტროლებს პარამეტრების, რომელიც არის თანხის დაუმწვარი საწვავის აპირებს შევიდა გამონაბოლქვი. ახლა რომ ჟღერს ცუდი. არ გავს, თქვენ სურს დაუმწვარი საწვავის შესვლის გამონაბოლქვი. მაგრამ იმ შემთხვევაში, დიზელზე, თქვენ გაქვთ რაიმე ე.წ. NOx ხაფანგში არის მოწყობილობა, რომელიც შთანთქავს და ხაფანგები აზოტის ოქსიდების რომ დამაბინძურებლების, რომ გვინდა სხვაგვარად წავიდეთ ატმოსფეროში. და ეფექტი რომ NOx ხაფანგში გაუმჯობესებულია დაუმწვარი საწვავი. ასე რომ, მარცხი მოწყობილობა სპეციალური პროგრამა შიგნით ამ კომპიუტერებით, რომ შეუძლია ეს ჰგავს მანქანა აკმაყოფილებს გაფრქვევა სტანდარტების მაშინაც კი, როდესაც იგი არ არის. Volkswagen პრობლემა ჰქონდა თავის ხელში. მისი დიზელის ძრავები იყო ცნობილი მიღების დიდი საწვავის ეკონომიკა, მაგრამ NOx ხაფანგში მხოლოდ კარგად მუშაობს როდესაც მეტი საწვავი გამოიყენება. ასე რომ, მანქანა რომ აღმოაჩინოს, გამოყენებით ამ დამარცხების მოწყობილობა, როდესაც მისაღებად გამოყოფა ტესტი, რომ ის გამოიყენებს მეტი საწვავის, რათა NOx ხაფანგში კარგად მუშაობს, ემისია იქნება ჯარიმა. მაგრამ მაშინ თქვენ გზაზე, მოწყობილობა თიშავს, თქვენ იწვის ნაკლები საწვავი მაგრამ თქვენ აყენებს, როგორც 40-ჯერ უფრო დამაბინძურებლების ატმოსფეროში. მაგრამ როგორ heck მანქანა ვიცი, რომ ეს იყო მიმდინარეობს ტესტირება ემისიების შესაბამისად? EPA- ს განცხადებით, ეს იყო დახვეწილი სისტემა, რომელიც შემოწმდება რამ როგორიცაა საჭე პოზიცია, სიჩქარე, როდემდე ძრავა იყო, და კიდევ ატმოსფერული წნევა. სხვა სიტყვებით რომ ვთქვათ, არ იყო არ არსებობს გზა, რომ ეს იყო შემთხვევითი იმის გამო, რომ პროგრამული უზრუნველყოფის იყო შექმნილია ძალიან ფრთხილად, რათა აღმოაჩინოს ოფიციალური გამოყოფა ტესტი. ეს არის საკმაოდ სერიოზული მოტყუებით და ეს რატომ Volkswagen არის ასეთი სერიოზული პრობლემები. ფაქტობრივად, მათი აღმასრულებელი დირექტორი, Martin ვინტერკორნი, უბრალოდ გადადგა. ასე რომ, რა მოხდება შემდეგ? ისე, თუ თქვენ ერთი ნახევარი მილიონი დიზელის Jettas, Beatles, Golfs, Passats, ან Audi A3s განხორციელდა სასიხარულო არის რომ თქვენი მანქანა მაინც უსაფრთხო მანქანა. თქვენ არ გაქვთ, რომ გოლი სანამ Volkswagen გასცემს გაწვევას. მაგრამ რაღაც მომენტში ისინი ალბათ აპირებს განახლება პროგრამული უზრუნველყოფა თქვენს მანქანაში. როცა ეს მოხდება, თქვენ შეიძლება მიიღოს ნაკლები მილი ტანკი. ადვოკატები უკვე ემზადება მდე კლასის სამოქმედო სარჩელი ასე რომ მფლობელები შესაძლოა კომპენსაცია რაღაც მომენტში მომავალში. მაგრამ, რომ არ აპირებს მოხდეს ნებისმიერ დროს მალე. [END აღწარმოების] დევიდ ჯ Malan: ასე რომ, ეს რეალურად ბადებს საინტერესო უფრო დიდი სურათი კითხვა როგორც ენდობა. მარჯვენა? ყველა ჩვენგანს აქვს iPhones და Androids ან რაღაც ჩვენს ჯიბეში სავარაუდოდ ამ დღეებში, ან ლაპტოპები ჩვენს წრე, რომლებიც გაშვებული პროგრამული გააკეთა Apple და Microsoft და მტევნების სხვა კომპანიები. მაგრამ ვიცით, რომ ის, რაც ეს პროგრამული პროდუქტების ვაკეთებთ რეალურად, რაც ამ კომპანიები აცხადებენ, ისინი აკეთებენ? მაგალითად, თუ რომელი ამბობენ, რომ ყველა დროის მიიღოს სატელეფონო ზარი თქვენს iPhone ან Android ტელეფონის ან მოსწონს, , რომ ტელეფონის ნომერი ასევე არ არის იტვირთებოდა ზოგიერთი კომპანიის სერვერზე იმის გამო, რომ რამდენიმე პროგრამა თქვენ წერილობითი, თუ არა ის ოპერაციული სისტემა თავად, როგორც iOS და Android, ან იმიტომ, რომ თქვენ გადმოწერილი მესამე მხარის app რომ როგორმე უსმენს რომ ყველაფერი თქვენ აკრეფით ან ყველაფერი თქვენ რეალურად ამბობდა. როგორ იცით, რომ, როდესაც თქვენ ბიჭები არიან გაშვებული Clang ან ჩადება კომპილაციის თქვენი საკუთარი პროგრამული CS50, თუ როგორ თქვენ რომ CS50 საკუთარი თანამშრომლები, გზით CS50 ბიბლიოთეკა, არ ყოფილა ხე ყოველ სიმებიანი თქვენ ოდესმე მიღებული ან ყოველ inch თქვენ ოდესმე მიღებული? ისე, თქვენ შეიძლება რა თქმა უნდა გამოიყურებოდეს კოდის რაღაც როგორც CS50 ბიბლიოთეკა, შეიძლება შევხედოთ კოდის for Linux ოპერაციული სისტემა გაშვებული CS50 IDE. მაგრამ საოცარი პრეზენტაცია მიეცა უკან 1984 მიღებიდან Turing ჯილდო მიერ ძალიან ცნობილი კომპიუტერის მეცნიერი ცნობილია as-- დაასახელა კენ ტომპსონი, რომელიც მიიღო Turing ჯილდო, არის ერთგვარი კომპიუტერული მეცნიერების ნობელის პრემია, თუ გნებავთ, მისი მუშაობის შესახებ ოპერაციული სისტემა სახელწოდებით Unix, რომელიც ძალიან ჰგავს სული, რაც ჩვენ ვიყენებთ რომელიც Linux. ხოლო კითხვაზე მან სთხოვა თავის მიღების სიტყვის, არსებითად ჩამოყალიბებულია ქვემოთ ჩარჩო წლების განმავლობაში დისკუსია შესახებ ნდობისა და უსაფრთხოების, იყო ეს. რა მოცულობით უნდა ერთი ენდობა განცხადება, რომ პროგრამაში ნაჭერი საქართველოს software-- არის უფასო ტროას ცხენები? ალბათ ეს უფრო მნიშვნელოვანია, რომ ენდობა ხალხი, ვინც წერდა პროგრამული უზრუნველყოფა. და სინამდვილეში, ჩვენ უკავშირდება თოქ-, რომ მისცა, როდესაც მიღების ეს ჯილდო '80s on CS50 ნახვა ქვეშ ლექციები გვერდზე დღეს. იმის გამო, რომ ის, რაც თქვენ დაინახავთ ის არის, რომ რეალურად იძლევა საკმაოდ მარტივი მაგალითია, თუ როგორ კი შემდგენელი მოსწონს Clang ან რასაც შემდგენლები სხვები არ გამოიყენება წარსულში, რა მოხდება, თუ ჩართული შემდგენელი ჩვენ თავს გამოყენებით არის პატარა, თუ პირობით, რომ არსებითად ამბობს, თუ შეამჩნევთ, რომ ეს კოდი გამოყენებით GetString ფუნქცია ან GetInt ფუნქცია, წავიდეთ წინ და ჩადეთ უკან კარი ან ტროას ცხენი ასეთი, რომ პროგრამა ახლა ზოგიერთი zeros და პირობა, რომ რაღაც მუქარის. ხე ყველა თქვენი keystrokes, ატვირთვა, რომ მონაცემები ზოგიერთ სერვერზე, ან მართლაც არაფერი. და რა კენ ტომპსონი გრძელდება გავაკეთოთ მისი განხილვა იმის დემონსტრირება, რომ მაშინაც კი, თუ თქვენ გაქვთ წყარო კოდი შემდგენელი რომ განზრახ შეიძლება ამით, არ აქვს მნიშვნელობა, იმიტომ, რომ არსებობს ამ ქათამი და კვერცხი რეალობა წარსულში ბევრი წლის რომლის დროსაც შემდგენლები გამოიყენება შედგენა თავს. სხვა სიტყვებით, უკანა გზაზე, როდესაც ვინმე მან დაწერა პირველი შემდგენელი. და ამის შემდეგ, ნებისმიერ დროს ისინი მხრიდან შემდგენელი იცვლება მისი კოდის, დასძინა, თვისებები და recompiling ეს ხალხის ჩვენნაირი გამოყენება, ასევე, ისინი იყენებენ ძველი ვერსია შემდგენელი შეადგინონ ახალი ვერსია შემდგენელი. და თუ თქვენ შეხედეთ განთავსებულია განხილვა, რომ მისცა, თქვენ ნახავთ, რომ იმის გამო, რომ რომ circularity, თქვენ შეგიძლიათ რეალურად აქვს შეცდომები ან ტროას ცხენები ჩართული პროგრამული უზრუნველყოფა ჩვენ გამოყენებით. და მაშინაც კი, თუ გადავხედავთ კოდის იმ პროგრამების, ეს შეიძლება არც კი იყოს აშკარა იმის გამო, რომ მოსატყუებლად არის რეალურად ზოგიერთ ძველი ვერსია შემდგენელი რომ მას შემდეგ, რაც უკვე ინექციური საფრთხე ჩვენი პროგრამული უზრუნველყოფა. რომელიც მხოლოდ აღვნიშნავ, რომ ჩვენ ნამდვილად ვერ და არ უნდა ნდობის პროგრამული გაშვებული ჩვენი ლაპტოპები ან ტელეფონის ან ნებისმიერი რაოდენობის ადგილები. და სინამდვილეში, მოგვიანებით ამ სემესტრში, როდესაც ჩვენ ვიწყებთ საუბარს ვებ პროგრამირების და რეალურად შეიქმენით ვებ განაცხადების თავს, ჩვენ ვსაუბრობთ ამ საფრთხეები და სხვები. ახლა, ალბათ, არ აინტერესებს და შენიშნა, რომ იქ იყო პატარა Darth Vader ამ კლიპების, რომ ზღვარზე იყო გვიჩვენებს არსებობს შესახებ Volkswagen. თუ თქვენ არასოდეს მინახავს, ​​მე ეგონა, რომ ჩვენ უნდა lighten განწყობა, რადგან ეს არის ყველა ძალიან სამწუხარო და საშიში. მე ვაპირებ, რომ ვიხსენებთ განთავსებულია Super Bowl 2011 როდესაც კომერციული მიერ Volkswagen-- და ეს თითქმის ხდის მათ სასიამოვნო ერთხელ ეთერში პირველად ტელევიზიით. ეს არის 60 მეორე კლიპი რომ მე ვფიქრობ, თქვენ ისიამოვნებთ. [ვიდეო აღწარმოების] [მუსიკა - თემა "ვარსკვლავური ომები"] [ძაღლი ყეფს] [მანქანა იწყებს] [END აღწარმოების] დევიდ ჯ Malan: ჰო. მე უბრალოდ შემოწმებას. ეს მანქანა არის სიაში დარღვევები. ყველა უფლება. ასე რომ, ჩვენ შევხედოთ ზოგიერთი Pseudocode მომენტში წინ. აქ არის დიდი snippet of pseudocode კოდი რომ ჩვენ ვნახეთ რამდენჯერმე დღემდე. და მოდით გამოვიყენოთ ეს არის შესაძლებლობა, ახლა, რომ წარმოგიდგინოთ ახალი პროგრამირების ტექნიკა, რომელიც ჩვენ გავაკეთეთ იხილეთ ალგორითმულად გასულ კვირას, როდესაც ჩვენ შევხედე შერწყმა დალაგების. მაგრამ მოდით ფორმალიზება და ვნახოთ, როგორ ჩვენ შეიძლება გამოვიყენოთ ეს ფაქტობრივი კოდი, და მაშინ ჩვენ ვაპირებთ, რათა გამოიყენონ ეს ტექნიკა ქვემოთ გზა ყველაზე სავარაუდოა, რომ გადაწყვიტოს გარკვეული სხვა პრობლემები. ასე რომ, ეს იყო ერთ-ერთი პირველი პროგრამები, ოდესმე დაწერა, თუმცა pseudocode კოდი. და რა ამ პროგრამის დასაშვებია ჩვენთვის გავაკეთოთ რა თქმა უნდა, იყო, მაიკ სმიტი სატელეფონო წიგნი. და შენიშნავს, კერძოდ ხაზები რვა და 11 რომელიც ჰქონდა ამ Go To განცხადებაში. და სინამდვილეში, გარკვეული ენებზე, C, მათ შორის, რეალურად არ აქვს განცხადებაში ნათქვამია, რომ ფაქტიურად წასვლა, რომელიც საშუალებას გაძლევთ გადასვლა კონკრეტული ხაზი. ეს ზოგადად frowned საფუძველზე, რადგან ეს შეიძლება ძალიან ადვილად გაუსწორდა და შეგიძლიათ დაიწყოს jumping თქვენი პროგრამა მთელი ადგილი როგორც ეწინააღმდეგებოდა გამოყენებით სახის ლოგიკა და კონტროლის ნაკადის რომ ჩვენ გამოიყენება დღემდე მხოლოდ მარყუჟების და პირობები და მოსწონს. მაგრამ ჩვენ შეგვიძლია გავამარტივოთ ეს ალგორითმი ამ pseudocode კოდი ასეთია. იმის ნაცვლად, რომ ამ იტერაციული ან looping მიდგომა სადაც ჩვენ შევინარჩუნოთ ბრუნდება და უკან და უკან გამოდიან სამი, რატომ არ ჩვენ უბრალოდ სახის punt და მეტი ზოგადად ამბობენ ხაზი შვიდი და 10, მხოლოდ შეცვლის იმ ორი წყვილი ხაზები, სხვაგან თუ სმიტი ადრე წიგნში ჩვენ გამოგიგზავნით ძიება Mike წელს მარცხენა ნახევარში წიგნი. Else თუ სმიტი მოგვიანებით წიგნი, ძიება Mike სწორი ნახევარი წიგნი. და შენიშნავს, უკვე circularity. მარჯვენა? მე ეძებს მაიკ სატელეფონო წიგნი და შემდეგ მე საბოლოოდ მოხვდა, შესაძლოა, ონლაინ შვიდი ან იქნებ line 10 და ჩემი დავალებით თავს საძიებო მაიკ ნახევარი სატელეფონო წიგნი. ისე, როგორ შემიძლია მოძებნოთ Mike? მე შუა ეძებს Mike, რატომ თქვენ ერთგვარი გაგზავნის ჩემთვის წრეში? მაგრამ ეს კარგია, რადგან რა არის ხდება ზომა პრობლემა, როგორც წერია ხაზის 7 და 10? ჩვენ არ ვამბობ, ძიება მაიკ, ძიება მაიკ. ჩვენ კონკრეტულად იმით, თუ რა? ძიება მას მარცხენა ნახევარში მარჯვენა ნახევარში რომელიც ეფექტურად ნახევარი ზომა პრობლემა. ასე რომ, არის ის, რომ ჩვენ სახის ჩართვით ამ circularity, ეს წრიული არგუმენტი, რადგან მაინც ჩვენ მიღების პრობლემა პატარა და პატარა. და საბოლოოდ ჩვენ ვაპირებთ, რათა მივაღწიოთ რომ ე.წ. ბაზის შემთხვევაში, თუ ჩვენ გვაქვს მხოლოდ ერთი გვერდი left-- როგორც ჩვენი მოხალისე გასულ კვირას did-- ჩვენ გვქონდა ერთი გვერდი მარცხენა და მერე ჩვენ არ უნდა შევინარჩუნოთ ეძებს მაიკ სმიტი იმიტომ, რომ ის არც იმ გვერდი ან ის არ არის. მაშ, როგორ შეგვიძლია განვახორციელოთ ეს იდეა, ეს ერთგვარი circularity ფაქტობრივი კოდი? ისე, ჩვენ შეგვიძლია ბერკეტები ტექნიკა რომ საყოველთაოდ ცნობილია, როგორც უკან. და ჩვენ ვნახეთ ამ წელს pseudocode შერწყმა დალაგების გასულ კვირას. შეგახსენებთ, რომ ეს იყო pseudocode შერწყმა დალაგების. ეს, სავარაუდოდ, კიდევ უფრო მარტივია, ვიდრე ბუშტი და შერჩევა ან Insertion დალაგების უბრალოდ თვალსაზრისით სიმარტივის , რომელიც შეგიძლიათ გამოხატოს იგი. მაგრამ ეს იმიტომ, ჩვენ ერთგვარი circularly ამბობდა, ძიება რაღაც ეძებს ის ერთხელ. მაგრამ ჩვენ ძებნას ან მარცხენა ნახევარში და მარჯვენა ნახევარში და მაშინ საბოლოოდ ჩვენ შერწყმის ამ შემთხვევაში. მაგრამ აქ, ძალიან, ამ ორი სახის ხაზები, საერთოდ, ჩვენ კვლავ უნდა ეს იდეა უკან. და კონკრეტულად რას ნიშნავს ეს, კონტექსტში ალგორითმი, ის არის, რომ ალგორითმი არის რეკურსიული იმ შემთხვევაში, თუ იგი იყენებს და მოუწოდებს თავად. ან თვალსაზრისით C, ფუნქცია რეკურსიული ფუნქცია მოუწოდა foo არის რეკურსიული თუ foo, სადღაც მისი კოდის, მოუწოდებს ფუნქცია foo თავად. და ეს ცუდია თუ ყველა foo ოდესმე აკეთებს არის მოვუწოდებთ თავად ისევ და ისევ. ეს OK, თუ foo საბოლოოდ შეწყვეტს, რადგან არ შერწყმა დალაგების, განაცხადა, დაველოდოთ წუთში, თუ ეს პრობლემა არის სუპერ პატარა, მაგალითად, ან მივხვდი, მას რომელთანაც მე ეძებს, დააბრუნებს. არ რეკურსიული, არ ციკლურად მოვუწოდებთ თავს კიდევ ერთხელ. ასე რომ, მოდით შევხედოთ როგორ შეიძლება რეალურად მუშაობს. ამიტომ, მე ვაპირებ წავიდეთ წინ და ღია ორი კოდის მაგალითები აქ. ერთ-ერთი, რომელსაც ეწოდება sigma 0. და ეს არ არის ყველა რეკურსიული, მაგრამ ავიღოთ შეხედეთ რა ამ პროგრამის აკეთებს. მე ჩამოართვა ყველა კომენტარები, მაგრამ ყველა კოდის on CS50 ს საიტი აქვს კომენტარები თუ მინდა წაიკითხონ მეშვეობით იგი მოგვიანებით. და მოდით რამდენიმე საღი აზრის ამოწმებს აქ. ასე რომ, ზედა კოდი, ჩვენ მოიცავს cs50.h. რას გააკეთებს? რატომ არის აქ? გონივრული ერისკაცად წარმოგვიდგება მისი თვალსაზრისით. რას აკეთებთ? ჰო. აუდიტორია: ასე რომ GetInt ფუნქცია. დევიდ ჯ Malan: ასე რომ, GetInt ფუნქცია მუშაობს. იმის გამო, რომ შიგნით ამ ფაილი, CS50.h, რომელიც ჩვენ დავინახავთ, სანამ ხანგრძლივი თვალსაზრისით კოდის, აქვს რამოდენიმე ფუნქცია declared-- GetInt, GetString, და რამოდენიმე others-- და თუ ჩვენ რეალურად უნდა, რომ მოიცავს ხაზი, შემდგენელი Clang არ არის უნდა იცოდეს, რომ ის არსებობს. და იგივე ეხება ონლაინ ორი სადაც int განისაზღვრება printf, რომელიც არის ფუნქცია ჩვენ შევინარჩუნოთ გამოყენებით საკმაოდ მწირი. ახლა, ხაზი ოთხი, როგორც ჩანს ცოტა ხმაურიანი იმიტომ, რომ ეს არის მხოლოდ ერთი ლაინერი. ეს მივიღე მძიმით, არ curly აფრთხილებს, არ კოდი შიგნით მას. მაგრამ, რა გააკეთა, ჩვენ მოვუწოდებთ ეს რამ კვირის წარსულში? ჰო. ასე რომ, პროტოტიპი. და რატომ გვაქვს პროტოტიპი, რომელიც, როგორც ჩანს, იყოს ცოტა გადაჭარბებული როგორც წესი, იმიტომ, რომ ჩვენ, როგორც წესი, ვხედავ ფუნქციის ერთხელ მოგვიანებით, ფაილი, არა? ასე რომ, რატომ ჰქონდეს თქვენ მხოლოდ scratching თქვენი უფროსი, მაგრამ მე მას. ჰო. აუდიტორია: [INAUDIBLE] ფუნქცია მას შემდეგ, რაც მთავარი. დევიდ ჯ Malan: ზუსტად. ასე რომ, შემდგენელი იცის თუ არა საბოლოოდ განსაზღვროს და განახორციელოს რომ ფუნქცია მას შემდეგ, რაც მთავარი, სავარაუდოდ. ასე რომ Clang და ყველაზე შემდგენლები სახის dumb და ისინი მხოლოდ ის ვიცი რა ვუთხრა. თუ გსურთ გამოიყენოთ ფუნქციის მოუწოდა სიგმა, თქვენ უკეთ ასწავლოს შემდგენელი რომ არსებობს წინასწარ. ახლა მთავარ თავად, მაშინაც კი, მიუხედავად იმისა, რომ ეს არის bunch of ხაზები, არის საკმაოდ ნაცნობი იმედია ახლა. ეს მივიღე do ხოლო loop რომლის მიზანი ცხოვრებაში აქ, როგორც ჩანს, არის ის, რომ დადებითი რიცხვი შესახებ. და უბრალოდ შეინახოს pestering მას ან მისი სანამ ისინი თანამშრომლობენ. შემდეგ ხაზი 16 მაქვს საინტერესო ზარი. IntAnswer. რომელი მარცხენა მხარე მაძლევს Int რომელიც შეიძლება store-- მოუწოდა Answer-- რომელიც აპირებს შესანახად, როგორც ჩანს, დაბრუნების ღირებულება sigma. ასე რომ, sigma მხოლოდ თვითნებური მაგრამ აზრიანი სახელი რომ მე მოცემული ფუნქცია რომლის მიზანი ცხოვრებაში არის მიიღოს ერთი არგუმენტი ჩვენ მოვუწოდებთ მას N ამ შემთხვევაში და მხოლოდ მიიღოს თანხა, რომ ნომერი პლუს ყველა დადებითი რიცხვი, რომ პატარა, ვიდრე ეს. ასე რომ, თუ მე კორიდორი ნომერი 2 sigma, მინდა დავამატო, 2 პლუს 1 პლუს 0- არ 0- ისე, რომ მაძლევს 3. თუ მე კორიდორი 3 to sigma, მინდა აქვს 3 + 2 + 1, რაც მაძლევს 6. და სხვ. ასე რომ, ეს მხოლოდ დასძენს მდე ყველა ნომრები ნაკლები ან ტოლია იგი. ახლა ქვევით აქ მე უბრალოდ აპირებს ამობეჭდოთ პასუხი. ასე რომ, როგორც სწრაფი საღი აზრის ქვითარი, მოდით მიიღოს სიგმა 0- dot slash sigma 0- და ნება მომეცით ტიპის 2. და მე ნამდვილად მისაღებად 3. ნება მომეცით აკრიფოთ 3. მე ნამდვილად მისაღებად 6. და თუ ვინმეს შეგიძლიათ გააკეთოთ მათემატიკის სწრაფად, თუ ამის გაკეთება 50 რა ვარ მე აპირებს მიიღოს? აუდიტორია: [INAUDIBLE]. დევიდ ჯ Malan: ისე, არ. მაგრამ 1,275 რომელიც საკმაოდ ახლოს. ასე რომ, ეს არის შედეგი აკეთებს 50 პლუს 49 პლუს 48 პლუს 47 პლუს 46 ყველა გზა ქვემოთ 1. ასე რომ, ყველა sigma აკეთებს. მაგრამ ვნახოთ, თუ როგორ ჩვენ განხორციელებული ეს არის. ასე ქვევით აქ არის ფუნქცია თავად. და ეს არ ჩანს, რომ გვქონდეს არაფერი უკან ამჟამად. ფაქტობრივად, ჩვენ გამოყენებით ძველი სკოლა ტექნიკით. მე ინიციალიზაციისას ცვლადში თანხა ნულოვანი, მაშინ მე მაქვს foreloop აქ, და მე გამოცხადების Int ე.წ. მე, განსაზღვრავს ის ტოლია 1-- მიუხედავად იმისა, რომ მე ვერ ვაყენებთ მას ტოლი ნულოვანი, მაგრამ მას შემდეგ, რაც მე ვაკეთებ გარდა ამისა, ვინ ზრუნავს თუ ის ნულოვანი ან ერთი. ის აპირებს არ მოახდენს. ასე რომ, მე iterating ასე რომ სანამ მე ნაკლები ან ტოლია მ, რომელიც არის არგუმენტი, რომ მიღებულ იქნა. და მერე უბრალოდ შეინახოს დამატება I. და რისთვისაც მარყუჟის ყველა მე ვაკეთებ აკეთებს თანხა პლუს შეადგენს I. და ეს მიზანმიმართული. მე არ მინდა, ამ საქმე, ისევე როგორც თანხის plus plus. მინდა რეალურად რჩეულებში მიმდინარე ღირებულება მე რომელიც ინარჩუნებს მიღების უფრო და უფრო და დიდი გაშვებული tally. და მერე დაბრუნდნენ თანხა. ასე რომ, პასუხი იღებს ღირებულება თანხა. და მერე ამობეჭდოთ. ასე რომ, არსებობს შესაძლებლობა აქ, თუმცა, სახის გაამარტივებს ეს კოდი კონცეპტუალურად და სახის დარტყმა ერთი, იბადება თვალსაზრისით სიმარტივის მიუხედავად იმისა, რომ იღებს, ხოლო დასალაგებლად ვაფასებთ, ამიტომ ეს არის ძლიერი ამ პატარა მაგალითები. აქ არის sigma one-- ასე მეორე ვერსია ეს კოდი. ყველაფერი ზევით იდენტურია ასე რომ იგივე ამბავი ეხება, როგორც ადრე. მაგრამ ახლა მოდით შევხედოთ განხორციელების sigma რომელიც მე whittled ქვემოთ მხოლოდ ამ ხაზები ოთხი ხაზი კოდი, მართლაც, პლუს რამდენიმე Curly braces და თეთრი სივრცე. მაგრამ რა ვარ მე? თუ მ ნაკლებია ან ტოლი ნულოვანი, მე უნდა სახის გაუმკლავდეს რომ სუპერ მარტივი საქმე. და თუ ხელით ნულოვანი ან არაფერი უარყოფითი რომელიც მხოლოდ უცნაური, მე უბრალოდ აპირებს თვითნებურად მაგრამ თანმიმდევრულად დაბრუნების ნულოვანი. მე არ მინდა, ასეთი რამ მოხვდება რაღაც უცნაური უსასრულო loop გამო უარყოფითი მნიშვნელობა. ასე რომ, მე უბრალოდ ვამბობ, თუ მაძლევს ნულოვანი ან ნაკლები, მე დაბრუნების ნულოვანი. მაგრამ ეს კარგია, იმიტომ, რომ ის რომ ერთი გვერდი სატელეფონო წიგნი რომ დარჩა. მე დაკბენის off ძალიან კონკრეტული პრობლემა და არა რაღაცის რეკურსიული. მაგრამ ხაზი 31, რა მე, როგორც ჩანს, აკეთებს? ფრჩხილებში უბრალოდ შენახვა რამ, იმედია, პატარა ნათელი. მაგრამ ყველა ვაკეთებ მე დაბრუნების m-- რასაც თქვენ გადასცემს ჩემთვის პლუს ღირებულება m-- ბოდიში, პლუს ღირებულება sigma of მ მინუს 1. ასე რომ, რას ნიშნავს ეს? თუ მაძლევს ნომერი 3 არგუმენტად, პასუხი მინდა კიდევ საბოლოოდ 6 რადგან 3 + 2 + 1 მაძლევს 6. მაგრამ როგორ უნდა ვიფიქროთ როგორ ეს კოდი არის გაშვებული? პირველად მოვუწოდებ sigma და მე კორიდორი ღირებულება 3, ასეთი ამბობდა ცალი ქაღალდი, აქ არის, ღირებულება 3 და მე უკვე გავიდა, როგორც sigma. 3 აშკარად არ არის ნაკლები ვიდრე 0 ასე თუ მდგომარეობა არ ვრცელდება. სხვაგან აკეთებს. ასე რომ, რა გავაკეთო? მინდა დაბრუნდეს მ, რომელიც 3, პლუს sigma of მ მინუს 1. ნება მომეცით შენარჩუნება სიმღერა ეს. მე ვაპირებ, რომ ამ ნაჭერი ქაღალდი ქვემოთ. და რა ღირებულება, უნდა იყოს ნათელი, ვარ მე გაივლის შევიდა sigma ამ ეტაპზე ამბავი? რა ნომერი? 2, არა? 3 მინუს 1 2. ასე რომ, მე უბრალოდ უნდა პატარა ჯართი ქაღალდი აქ. ასე რომ, ახლა sigma დღითიდღე ერთხელ მოუწოდა. და მე შეგნებულად დააყენა ქვემოთ, რადგან ეს სახის მოსწონს დაპაუზება რომ ვერსიით იმიტომ, რომ ახლა მე ფოკუსირებული სიგნალი მ მინუს 1. ასე რომ, მ იყო 3, მ მინუს 1 2. ასე რომ, აქ არის 2, რომ მე უკვე გავიდა. 2 აშკარად არანაკლებ 0 ისე, რომ საქმე არ ვრცელდება. Else I დაბრუნებას მ, რომელიც ამ რამ, პლუს sigma რა მნიშვნელობა? ასე რომ, თუ sigma of 1-- რადგან მ ახლა 2 ასე რომ 2 მინუს 1 1. ასე რომ, ახლა მე მხოლოდ ღირებულება 1. მე გავლით მხოლოდ ნომერი 1 ფუნქცია sigma-- ან თავს აქ, ასე რომ 1, ცხადია, ნაკლებია, ვიდრე ნულოვანი, ჯერ არ ვრცელდება. Else დაბრუნების 1 + სიგმა რა? 0. ნება მომეცით, უბრალოდ გვახსოვდეს, რომ. მე დაუბრუნდეთ, რომ მოგვიანებით. ახლა მე ვაპირებ წავიდეთ წინ და jot ქვემოთ რიცხვი 0 იმიტომ, რომ ის ჩემი არგუმენტი ან პარამეტრი. მე გაიარა ნომერი 0 და ბოლოს, ეს პროცესი მხოლოდ იმეორებს თავს რეკლამა nauseum არ შეწყვეტს, რადგან რა შემიძლია დაუყოვნებლივ ერთხელ მე ვხედავ ამ 0? მე დაბრუნების ნულოვანი. ასე რომ, ახლა თქვენ უნდა გადახვევა ამბავი. თუ მე ახლა უკან დროში, რა იყო ყველაზე ბოლო რამ მე თუ იყო ფაქტიურად გადახვევა ვიდეო? მე ვაპირებ შეარჩიო ყველაზე ბოლო 1 და რომ მაძლევს 1 + 0 = 1. თუ მე შენარჩუნება გადახვევა ამბავი, რომელიც აპირებს მომეცი 2 plus ამ გაშვებული ღირებულება, რომელიც არის 1. ასე რომ, 3. და მაშინ მე ვაპირებ შენარჩუნება გადახვევა. როდესაც მე პირველად დააყენა ქვემოთ ნომერი 3-- ასე 3 + 3 მაძლევს 6. ახლა კი, თუ თქვენ ახვევს ვიდეო წლამდე ამ ეტაპზე, ეს იყო ძალიან პირველი კითხვა მე ვთხოვე. როდესაც გავიდა 3, რა არის sigma 3? ეს მართლაც 6, თანხა ყველა ამ ცალი ქაღალდის. ასე რომ, თუ იღებს ცოტა ხნით გადაიტანოთ თქვენი აზრით გარშემო, რომ ჯარიმა. მაგრამ მიგვაჩნია, რომ ეს იყო little-- ეს იყო ძალიან მიზანმიმართული, რომ მე stacked ეს ნომრები თავზე ერთმანეთს. ეს არის სახის მსგავსად, რომელსაც აქვს memory-- რეკორდი დროს, როგორიცაა იატაკის ვიდეო, რომ მე შეიძლება მართლაც გადახვევა. და ჩვენ ვაპირებთ დაბრუნებას რომ მეტაფორა მხოლოდ ცოტა. მაგრამ პირველი, გამოდის, რომ იქ ბევრი geeks და სასაცილო ადამიანი, ვფიქრობ, Google. მინდა ვინმე ვინც ძალიან კარგი Googling გონება ახლოვდება რაღაც მომენტში და დამეხმარება მოძებნოთ რამე? ძალიან, ძალიან დაბალი გასაღები. ადამიანი, რომელიც არასდროს ამუშავება ადრე, ალბათ. OK. ჰო? კარგით. კარგით ქვემოთ. რა გქვია? SAM: Sam. დევიდ ჯ Malan: Sam, მოდის ქვემოთ. ეს არის იგივე. კარგია თქვენთან შეხვედრა. Hey. კარგით დასრულდა. ასე რომ, ყველა მე უნდა გავაკეთოთ, თუ თქვენ შეიძლება, სემ, აქ არის Google. შეგიძლიათ მოძიება ტერმინი უკან? არ გააფუჭებს. ახლა let's-- yeah. OK დააჭირეთ რომ. უკეთესი დააჭირეთ რომ. ოხ, მიიღოს იგი. არ არის? OK. ასე რომ, მოდით რამდენიმე სხვები. არა იმდენად დაკავშირებული აკადემიური აქ, მაგრამ თქვენ ოდესმე ჩხრეკა Google for anagram? SAM: No. დევიდ ჯ Malan: OK. ძიება anagram ნაცვლად უკან. როგორ შესახებ askew. ოდესმე ჩხრეკა askew? ახლა, ამ ერთი ცოტა რთულია ვხედავ, მაგრამ იმედია everything's-- OK. ეს მხოლოდ თქვენ და მე სარგებლობენ ეს. OK. ასე რომ, საბოლოოდ, ეს one's-- ეს არის პატარა askew. ახლა ამის გაკეთება ბარელზე როლი. მშვენიერია. ყველა უფლება. დიდი მადლობა, რომ სემ. აქ თქვენ წასვლა. მადლობა. ასე რომ, რა ხდება ყველა ამ სულელური მაგალითები? ასე რომ, რეალურად, ქვეშ hood Google- ის მილიონობით ხაზების კოდი როგორც ჩანს, რამდენიმე სულელური IF პირობები, რომლებიც არსებითად შემოწმების თუ მომხმარებელს აქვს აკრეფილი ეს ფრაზა, რაღაც, რომ ალბათ აიღო nontrivial დროის განახორციელოს მხოლოდ იმიტომ, რომ იყოს სახალისო ამ გზით. მაგრამ ეს ყველაფერი boils ქვემოთ ქვეშ hood. მაგრამ, რა თქმა უნდა, უკან არის მეტი geekier მაგალითად, მათ შორის, სპეციალური ხრიკები. და აუცილებლად იქ სხვები იქ ასევე, რომ ჩვენ, ალბათ, ჯერ კიდევ არ აღმოაჩინეს უბრალოდ არ არის. ასე რომ შევხედოთ, ან განიხილოს ახლა შემდეგ პროგრამა, და რა თქმა უნდა დაიბრუნოს ნებისმიერი ამ თქვენი გამოსავალი. მე ვაპირებ წავიდეთ წინ და გახსენით პროგრამა, რომელიც აპირებს ვცდილობთ, რომ სვოპ ორი ღირებულებებს. მაგრამ სანამ ჩვენ იქ, მოდით გავაკეთოთ ეს. შეგვეძლო კიდევ ერთი მოხალისე, ვფიქრობ? გსურთ მოხალისე? არ არის? კარგით up. კარგით up. ყველა უფლება. ასე რომ, თქვენი სახელი, თუ რა? LAUREN: Lauren. დევიდ ჯ Malan: Lauren. ამოდი, ლორენ. ასე რომ, ლორენ მიმდინარეობს გასაჩივრებული აქ ასეთია. კარგია თქვენთან შეხვედრა. ასე რომ, ლორენ აქ წინ მისი ორი ცარიელი ჭიქა. და ჩვენ გვაქვს ფორთოხალი წვენი და რამდენიმე რძე და ჩვენ ვაპირებთ წავიდეთ წინ და ამის შემდეგ. ჩვენ უბრალოდ უნდა შეავსოთ ეს. რამდენიმე უნცია რძის აქ და მოდით შეავსოთ პატარა ფორთოხლის წვენი მეტი აქ. და თქვენს წინაშე ყველა ამ აუდიტორიის წევრები, სვოპ ორი ფასეულობების ამ თასები. განათავსეთ ფორთოხლის წვენი რძის თასი და რძის ფორთოხლის წვენი თასი. როგორ უნდა გააკეთოთ ეს თუ იყო სახლში და ჰქონდა ხელმისაწვდომობის სხვა წყაროები? LAUREN: ამას კიდევ ერთი თასი. დევიდ ჯ Malan: OK. მოდით აქვს დროებითი ცვლადი, თუ ჩვენ. და წავიდეთ წინ არის და განხორციელება იგივე შევცვალე პროცედურა. ასე რომ, კარგი. ჩვენ დააყენა OJ შევიდა დროებით ცვლადი, რძე შევიდა OJ ცვლადი, და ახლა დროებითი ცვლადი რძე ცვლადი. OK. ასე რომ, ძალიან კარგად გაკეთდეს ჯერჯერობით. გამოდის out-- გამართავს, რომ ეგონა, მხოლოდ ერთი წუთით. აქ, უბრალოდ, geek ეს ცოტა, ამ იქნება შესაბამისი C კოდი რომ ჩვენ უბრალოდ განხორციელდა. ჩვენ გვქონდა ორი საშუალებებით, და ბ, ორივე რომელიც ჩვენ, უბრალოდ, ვამბობთ სიმარტივის არიან int ს. და შენიშნავს, აქ, თუ მე მინდა, რომ სვოპ ღირებულებები ორი ცვლადის, და ბ, ჩვენ მართლაც გვჭირდება შუამავალი, რომელიც დროებითი ცვლადი, დროებითი თასი, რომელშიც დაასხით ერთი ღირებულებების ასე, რომ ჩვენ გვაქვს placeholder იგი. მაგრამ მაშინ კოდი არის ზუსტად ლორენ აქ განხორციელდა. ახლა, მხოლოდ მიიღოს ცოტა სიგიჟე, თურმე რომ თქვენ შეგიძლიათ ამის გაკეთება გარეშე დროებითი ცვლადი. ამისათვის სათანადოდ, თუმცა, ჩვენ ვაპირებთ უნდა მოატყუო რამდენიმე ქიმია. ჩვენ გვაქვს გარკვეული დამატებითი ჭიქა აქ. ასე რომ, უახლოესი რაც გამოიყურება როგორიცაა რძე და წყალი perhaps-- ან რძე და OJ-- არის, რომ ჩვენ გვაქვს წყალი, ასე რომ, ჩვენ შეავსოთ ამ ერთი გოლი რამდენიმე უნცია წმინდა წყლის. ეს, ალბათ, ძალიან ბევრი. ჰო. ეს ნამდვილად ძალიან ბევრი. გამართავს ერთი წ. და ახლა ჩვენ გვაქვს ზეთი, რომელიც, როგორც მახსოვს საშუალო სკოლის ქიმიის კლასი, იმედია ეს არ ავურიოთ წყალი. მაგრამ ეს ერთგვარი სახის ჰგავს რძე და OJ. ასე რომ, ახლა, გამოყენების გარეშე დროებითი ცვლადი, შეგიძლიათ სვოპ ამ ორი ღირებულებები? ასე რომ, ზეთები მიდის წყალში თასი, წყლის გადადის ნავთობის თასი. LAUREN: სხვა ჭიქა? დევიდ ჯ Malan: სხვა თასები. და მე რეალურად არ ტესტირება, ეს ადრე ამ წლის ასე რომ, მე არ ვიცი, თუ ეს იქნება რეალურად მუშაობს ქიმიურად. ეს არ უნდა მოხდეს. არის თუ არა სამუშაო? ყველა უფლება. ასე ჰყოფს? კარგი. ახლა მივიღეთ მისაღებად წყლის სხვა თასი. ჭკვიანია ქიმიის კონცენტრატორები იქნებოდა ალბათ ეს უკეთესია, ვიდრე მე. LAUREN: წყლის ბოლოში. დევიდ ჯ Malan: water-- რომ იყო რა არის მთავარი, რომ ბოლო დროს, როგორც ეს. თქვენ უნდა გავაკეთოთ სწორი მიზნით. ჰო. That's-- OK. ახლა ჩვენ გვაქვს ორი ჭიქა ზეთი. OK. ეს არის ის, OK. მაგრამ ქიმიურად თუ ეს მუშაობდა, ვიდრე არ მე LAUREN: ეს არის წყალი. დევიდ ჯ Malan: ეს არის, ძირითადად, წყალი. ყველა უფლება. მაგრამ ეს ჯერ კიდევ იგივე თასი, როგორც ადრე. ასე რომ, დაასხით it-- ცდილობენ, რომ იქ. OK. ეს არის კარგი გამოყენება კლასის დღეს. OK. ასე რომ, ახლა we-- ლამაზი. დალაგება. ყველა უფლება. ასე რომ, ძალიან კარგი. დიდი მადლობა, რომ Lauren. ძალიან კარგად გაკეთდეს. ასე რომ მხოლოდ აფეთქება თქვენი გონება, და ეს არის ალბათ რაღაც თამაში თუ გსურთ CS50 ID, თქვენ შეგიძლიათ, ფაქტობრივად, მოკლე ორ ცვლადს გამოყენების გარეშე დროებითი რიცხვი. და ეს არის შესაბამისი C კოდი. და თუ გახსოვთ, გასულ ოთხშაბათი, ჩვენ გააცნო, თუ მოკლედ, რამდენიმე ახალი ოპერატორების C. და აკეთებს ვინმეს გავიხსენოთ, თუ რა პატარა სტაფილოს სიმბოლო არის, რომ პატარა სამკუთხა სიმბოლო კლავიატურის წარმოადგენს? რა bitwise ოპერატორს? აუდიტორია: EXOR. დევიდ ჯ Malan: EXOR. ექსკლუზიური ან. ასე რომ, თუ გსურთ, უბრალოდ for fun at სახლში, რათა ბ ორი თვითნებური ღირებულებებს, როგორიცაა ნებისმიერი eight-- და მე რომ აირჩიოს რვა ბიტიანი მნიშვნელობა. თუ ამის გაკეთება, 32 ბიტი, თქვენ ძალიან სწრაფად მოგწყინდება. მაგრამ უბრალოდ მისცეს რვა ცოტა ღირებულება, რომელიც არ უნდა იყოს, ერთი ან ორი, და მისცეს ბ მსგავსი მნიშვნელობა. და მაშინ გამოყენებით განმარტება საქართველოს XOR გასულ ოთხშაბათს, ვრცელდება, რომ ნელ-ნელა, თითოეული იმ რვა ბიტი თითოეული და ბ, და შემდეგ ამის გაკეთება ზუსტად პოსტი კოდი. და ეს არ არის არასწორი, რა თქვენ აქ ეკრანზე. ეს მართლაც boils ქვემოთ სამ XOR ოპერაციების და რატომღაც magically ა და ბ იქნება პოზიციებს გაცვლიან დაკარგვის გარეშე ნებისმიერი ინფორმაცია. ასე რომ, ზეთი და წყალი შეასრულა არის უახლოესი რეალური სამყაროს განსახიერება მე ვფიქრობ, რომ mimic რომ. მაგრამ ეს აუცილებლად უფრო ადვილია გამოვიყენოთ დროებითი ცვლადი, რადგან ამ შემთხვევაში აქ. ესეც არის შესაძლებლობა ვთქვა, ძალიან, ამ სახის მიკრო ოპტიმიზაცია, როგორც კომპიუტერის მეცნიერი ვიტყოდი, ხოლო სახის გართობა brag შესახებ, თუ როგორ გააკეთა ამ გარეშე ისევე როგორც შევცვალე დამატებითი ცვლადი, ეს არ არის ყველა, რომ მყარი. იმის გამო, რომ გადარჩენა 32 ბიტი, რადგან იმ შემთხვევაში, თუ ფაქტობრივი int, არ არის ყველა, რომ მყარი სისტემა, სადაც თქვენ შეიძლება გამოყენებით ათობით მბ ან კიდევ უფრო ასეთი მეხსიერება ამ დღეებში. და სინამდვილეში, როდესაც ჩვენ ვიღებთ მოგვიანებით პრობლემა კომპლექტი და თქვენ განახორციელოს მართლწერის ქვა და თქვენ უნდა დადგა ამის გაკეთება ეს, როგორც პატარა, RAM და როგორც პატარა, დრო მალე კომპიუტერში თქვენ ჯერ კიდევ ერთი კვირის განახორციელოს it-- თქვენ ჰქონდეს თქვენ უნდა გასაჩივრებული მინიმუმამდე იმ რესურსებს. და ეს მართლაც მხოლოდ შემთხვევა ამ სემესტრში სადაც თქვენ უნდა წახალისება shave off კი საუკეთესო შესრულება ღირს სხვაგვარად. ასე რომ, what-- როგორ შეგვიძლია ვხედავ ამ ფაქტობრივი კოდი? ნება მომეცით წავიდეთ წინ ახლა და გახსენით მაგალითად რომ განზრახ ეწოდება არარის Swap რადგან ეს არ არის ფაქტობრივად სვოპ ცვლადები როგორც თქვენ რეალურად შეიძლება ველოდოთ. მოდით შევხედოთ. აი პროგრამა, რომელიც არ CS50 ბიბლიოთეკა მიმდინარეობს, მხოლოდ სტანდარტული I / O. ახლა ჩვენ გვაქვს პროტოტიპი for swap up დაბრუნება, რომელიც მხოლოდ იმას ნიშნავს, რომ რაღაც უნდა იყოს განსაზღვრული მოგვიანებით. აქ არის მთავარი. მე თვითნებურად ენიჭება x და y, შესაბამისად, ფასეულობები ერთი და ორი მხოლოდ იმიტომ, რომ ისინი მცირე და ადვილი ვიფიქროთ. და მერე უბრალოდ აქვს რამოდენიმე printfs სადაც მე მაქვს საღი აზრის ქვითარი. x 1 და Y არის 2, სავარაუდოდ, რა იმ printfs იტყვის. ასე რომ, არ არსებობს ჯადოსნური დღემდე. ამის შემდეგ მე ვაპირებ მოითხოვოს ერთად ბეჭდვა def, შევცვალე dot dot dot. მე ვაპირებ მოვუწოდო swap ფუნქცია, გადადის x და y. და მოდით ვივარაუდოთ, ახლა, რომ swap ხორციელდება ზუსტად როგორც ეს იყო მომენტი წინ დროებითი ცვლადი. ასე რომ, მე კი აცხადებენ, თამამად, გაცვალეს. x არის ეს და y არის, რომ. მაგრამ ფაილი, რა თქმა უნდა, ეწოდება არარის გაცვლა. მოდით რეალურად ვნახოთ, რა მოხდება. თუ მე კომპილაციის არ swap და შემდეგ ამის ./noswap, x 1, y 2. შევცვალე გაცვალეს. x 1, y 2. ასე რომ, ეს, ფაქტობრივად, როგორც ჩანს, ყალბი კი მიუხედავად იმისა, რომ swap-- მოდით გადახვევა ქვემოთ, ახლა ხორციელდება ზუსტად პოსტი კოდი შევთავაზე მომენტში წინ. ასე რომ, ჩვენ არ ვაპირებთ, რომ მიიღოთ ლამაზი ერთად XOR პერსონალის ახლა. ეს, ძალიან, უნდა იმუშაოს მხოლოდ როგორიცაა რძე და OJ, მაგრამ ეს არ ჩანს, სამუშაო. ასე რომ, მოდით ეს კიდევ ერთხელ გავაკეთოთ. იქნებ მე უბრალოდ არ იყო გაშვებული უფლება. მოდით აწარმოებს არარის Swap ერთხელ. იქნებ არ მე არ. ასე რომ, ეს უბრალოდ არ მუშაობს. ასე რომ მოდით ცოტა საღი აზრის ქვითარი. ნება მომეცით წავიდეთ წინ აქ Swap და უბრალოდ დაამატოთ, დაველოდოთ წუთში, ის არის% i / n და მოდით plug-in ღირებულება. იმის გამო, რომ მე ნამდვილად მინდა ვნახოთ, რა ხდება. და მართლაც, ეს არის გამართვის ტექნიკა რომ თქვენ შეიძლება გამოყენებით სამუშაო საათებში ან სახლში, უკვე, akin რომ პირველ ნახევარში Dan Armendariz ს ვიდეო pset3 სადაც ჩვენ გააცნო ბეჭდვითი def, როგორც რეკომენდირებული ტექნიკით, მინიმუმ მარტივი შემთხვევაში. ნება მომეცით წავიდეთ წინ და აწარმოებს არ swap ერთხელ, ./noswap. საინტერესოა. ასე რომ შეამჩნია, რაც, როგორც ჩანს, უნდა იყოს ნამდვილი. x 1, y არის 2, მაგრამ არის 2, როდესაც ბ 1. ასე რომ, ეს ორი რატომღაც გაცვალეს მაგრამ x და y არ მიღების გაცვალეს. ასე რომ იყოს ნათელი, თუ რა ხდება არის, აქ მაქვს x და y და იმ ცვლადები ადგილობრივი წელს ფარგლებს მთავარი, მე გავლით x და y სვოპ. ახლა, მოკლე, როგორც ცალკეული ფუნქცია, არის მოვუწოდებთ მისი არგუმენტები ან მისი პარამეტრები, რაც სურს. Foo ან ბარი ან x ან y ან ან ბ. უბრალოდ ნათელი, რომ ისინი არ არის იდენტური x და y per se, მე უკვე აღვნიშნე, და ბ. მაგრამ ჩვენ შეგვიძლია მოვუწოდებთ მათ არაფერი გვინდა. ასე რომ, ეს ჰგავს swap მიმდინარეობს გავიდა რომ X AKA a-- და ეს მიმდინარეობს გავიდა y-- AKA ბ. რატომღაც ამ სამი ხაზები შევცვალე იმ ღირებულებებს ზუსტად ლორენ გააკეთა რძე და OJ. მაგრამ, როდესაც ჩვენ დაბეჭდვა ღირებულებები, და ბ მართლაც სვოპ მაგრამ x და y არ გვაქვს ცვლილება მათ. შეგახსენებთ, რომ x და y არის აქ. ასე რომ, ჩვენ ვხედავთ ამ გავლით სხვა ტექნიკა, ისევე. ესეც ტექნიკა ჩართული პრობლემა კომპლექტი სამი. მოდით წავიდეთ წინ და ამის გაკეთება CS50 ID, თუ თქვენ არ უკვე. მარჯვენა მხარეს აქვს ამ Debugger tab. და თუ გახსნა up, არსებობს რამდენიმე arcane ინფორმაცია რომ ესროლეს თქვენ თავდაპირველად. მაგრამ მოდით აჯავრებენ ამ გარდა რეალური სწრაფად. ასე რომ, ერთი ხედავთ ადგილობრივი ცვლადები. გამოდის, რომ ავაშენოთ შევიდა CS50 IDE, და ბევრი პროგრამირების გარემოში მეტი ზოგადად, არის debugger. ინსტრუმენტი, რომელიც გაძლევთ საშუალებას ვიზუალურად ვხედავ რა ხდება შიგნით თქვენი პროგრამა გარეშე მიმართო და დასძინა, printfs და შედგენა და გაშვებული და დასძინა, printf და შედგენა და გაშვებული, რომელიც უკვე საათებში ან სახლში, ალბათ, მიღების საკმაოდ tedious. ასე რომ, აქ, რაღაც მომენტში, ჩვენ აპირებს ვხედავ რეალურ დროში ღირებულებები ჩვენი ადგილობრივი ცვლადები. ჩვენ ასევე ვაპირებთ შეძლებს შექმნას რა ეწოდება breakpoints, რომელიც შესაძლებლობები, ჩემი პროგრამა პაუზის აღსრულების კონკრეტული ხაზი კოდი რომ მე ვარ ცნობისმოყვარე. მარჯვენა? ეს პროგრამები აწარმოებს გაყოფილი მეორე. ეს არის სახის ლამაზი ჩვენთვის ნელა ადამიანები შეძლებს პაუზის მიიღოს მომენტში, ვხედავ რა ხდება გარშემო გარკვეული ხაზი კოდი გარეშე პროგრამის ხვნა მეშვეობით და დამთავრებული მთლიანად. ასე რომ, breakpoints აპირებს საშუალებას მოგვცემს შესვენება და პაუზის გარკვეული თვალსაზრისით. Call დასტის არის ლამაზი გზა იმით, თუ რა ფუნქციები გაკეთებული მიმდინარეობს მოუწოდა მომენტში. მთავარი ყოველთვის ე.წ. პირველი. მაგრამ თუ მთავარი უწოდებს ფუნქცია მოუწოდა Swap, ჩვენ რეალურად აპირებს, რომ ეს კოშკი ფუნქციები, რომელიც არ ყოფილა მოუწოდა ქრონოლოგიურად. ასე რომ, ვნახოთ, რომ. მე ვაპირებ დააშორებს. მე ვაპირებ დავუბრუნდე ჩემს კოდი. და მხოლოდ იმიტომ, რომ მე მინდა უნდა იყოს pedantic აქ, მე ვაპირებ წავიდეთ წინ და დააჭირეთ მხოლოდ იმიტომ, რომ მარცხნივ ხაზი ხუთ. და რომელიც ქმნის წითელი dot. და შენიშნავს, მარჯვენა მხარეს რომ debugger იცის, hey, მე უბრალოდ ვთქვი, breakpoint დროს noswap.c ხაზი ხუთ, კონკრეტულად ამ ხაზი კოდი. ასე რომ, debugger იცის, რომ მე მოითხოვა, რომ მომავალი დრო მე მაქვს პროგრამა პაუზის აღსრულების არსებობს, ვიდრე უბრალოდ გაშვებული მთელი რამ სუპერ სწრაფი. ასე რომ, ახლა მე ვაპირებ დააჭირეთ Debug ღილაკს ძალიან ზევით IDE და რომ აპირებს ამის შემდეგ. ის აპირებს გახსნას თავდაპირველად გარკვეულწილად საშინელი ეძებს მეორე ტერმინალის ფანჯარა დისტანციური გამართვის საწყისი ჩაატაროს ასეთი და such-- და ჩვენ დავბრუნდებით, თუ რა ეს ნიშნავს, რომ ხანგრძლივი. მაგრამ, რაც მთავარია, ახლა ის არის, რომ წითელი dot მოხვდა, debugger აქვს შეგნებულად ათვისება execution-- არა, რომ ხაზი თავისთავად მაგრამ პირველი ხაზის ფაქტობრივი კოდი რომ ფუნქცია. ამიტომაც არის, რომ ხაზი შვიდი ახლა მონიშნულია ყვითელი. და ახლა მოდით შევხედოთ ზე მარჯვენა მხარეს. როგორც ჩანს, რომ, ჩვეულებრივ, ლამაზად საკმარისი, x აქვს, თუ რა მნიშვნელობა? 0. და y აქვს, თუ რა მნიშვნელობა? Zero. და ეს უნდა იყოს სავარაუდოდ იმ გაგებით, რომ x და y-- რომ ყვითელი ხაზი აქვს არ შესრულებულა. ასე რომ, x არ უნდა ჰქონდეს მნიშვნელობა 1. ეს შეიძლება რაიმე სხვა მნიშვნელობა, ე.წ. ნაგვის ღირებულება. და მივიღეთ გაუმართლა, რომ ის ნულოვანი, ამ ეტაპზე, არსებითად. ასე რომ, ახლა იქ მხოლოდ რამდენიმე ღილაკები, ჩვენ უნდა ვიზრუნოთ შესახებ, როდესაც გამართვის ამ გზით. გაითვალისწინეთ, აქ, ჩვენ გვაქვს Play ღილაკს. და თუ ჩვენ ითამაშოს ან მოხვდა განაახლონ, რომ მხოლოდ აპირებს მეშვეობით დანარჩენი პროგრამა ან სანამ გაიტანა კიდევ ერთი breakpoint. მაგრამ მე არ რაიმე სხვა breakpoints ისე უბრალოდ აპირებს მეშვეობით ბოლომდე. ასეთი სახის დაამარცხა მიზნით გააღიზიანოს გარშემო. ასე რომ, ნაცვლად, მე აინტერესებს ეს ხატები უფლება. და თუ hover მათ, როგორც თქვენ უნდა ძალიან, დაინახავთ პატარა tips-- ინსტრუმენტი რჩევები. ეს არის გადადგას მეტი. ახლა, არ ნიშნავს იმას, skip შემდეგი ხაზი კოდი. ეს უბრალოდ ნიშნავს, შეასრულოს ეს და გადასვლის შემდეგ, გადაადგილება, რათა მომდევნო, გადასვლის შემდეგ. სხვა სიტყვებით, მეშვეობით ღილაკს, რომ შემიძლია ფეხით ჩემი კოდი ერთი ნაბიჯი დროს. ხაზს, ფაქტიურად. ახლა, მარჯვნივ რომ, არსებობს კიდევ ერთი რომ ჩვენ დავინახავთ, რაღაც მომენტში. ეს არის ე.წ. ნაბიჯი Into ხატი, რომელიც არის აპირებს, ნება მიბოძეთ dive სხვა ფუნქცია. მაგრამ ვნახოთ, ეს მხოლოდ ერთი წუთით. ასე რომ, მე ვაპირებ დააჭირეთ გადადგას მეტი. და ახლა შეამჩნია, რადგან მე დააწკაპუნეთ ამ ღილაკს ზედა მარჯვენა, რომ თქვენი თვალები დაახლოებით ქვეშ ადგილობრივი ცვლადები და ვნახოთ, რა მოხდება x. x არის 1, რადგან ყვითელი ხაზი უკვე შესრულებული და ჩვენ გადავიდა line 8. და რაღაც მომენტში y უნდა იმედია გახდა 2. ახლა, არაფერი რომ საინტერესო ხდება ცოტა. ეს ყველაფერი არის printf. და შენიშნავს, ჩემი საშუალო ტერმინალის ფანჯარა, მე ვხედავ გამომავალი ბეჭდვითი დაცვა. და ახლა მე უნდა მიიღოს გადაწყვეტილება, როგორც პროგრამისტი. შემიძლია გადადგას მეტი ამ ხაზის კოდი, შესრულებაში, მაგრამ არა მიღების აინტერესებს, რა არის შიგნით. ან შემიძლია რეალურად დახევას შევიდა და წასვლა შიგნით Swap თავად. ასე რომ, მოდით ეს უკანასკნელი. ნება მომეცით წავიდეთ წინ და დააჭირეთ არ გადახვიდე, მაგრამ ნაბიჯი Into. განაცხადის, უეცრად ფანჯრის ცვლილებები ხაზი გავუსვა პირველი ხაზი კოდი გაცვლა. სწორედ line 21. და ახლა, რა სახის ხმაურიანი არის, რომ, თუ გადავხედავთ აქ, როგორც მოსალოდნელი იყო, მძიმით b არის 1 და 2, შესაბამისად. რატომ არის temp 32.767? ითვალისწინებენ რა, რომ temp, ჰგავს ცარიელი ჭიქა მომენტში წინ, ცხადდება აქ on line 21. რატომ 32,000- ვგულისხმობ, რატომ არის ეს უბრალოდ რაღაც უცნაური მნიშვნელობა? ჰო? აუდიტორია: ეს არ არის ინიციალიზაცია. დევიდ ჯ Malan: ეს არის არ არის ინიციალიზაცია. ასე რომ, ჩვენი კომპიუტერი ყოველთვის აქვს ფიზიკური მეხსიერება. იგი ყოველთვის ფიზიკური RAM. და იქ ყოველთვის ნულის ს და ერთი იქ, არა? იმის გამო, რომ ჩვენ ვიყენებთ ჩვენი კომპიუტერული მთელი დღის განმავლობაში, თქვენ იყენებთ CS50 IDE ან სერვერების მთელი დღის განმავლობაში. ასე რომ, RAM ან აქვს გარკვეული zeros და ზოგიერთი ერთი ან რამდენიმე zeros და პირობა. არ აქვს მნიშვნელობა, თუ არა თქვენ იყენებთ მათ. თქვენ არ შეგიძლიათ უბრალოდ ცარიელი ფართები, სადაც გსურთ ბიტი. ისინი ან zeros და პირობა. გამოდის, რომ დროებითი, რადგან ჩვენ არ ინიციალიზაცია ამაზე, ჩვენ იმ 32 ბიტი, მაგრამ ისინი არ ინიციალიზაცია ნებისმიერი ცნობილი ღირებულებებს. ასე რომ, რასაც ისინი ყველაზე ბოლო დროს გამოყენებული for-- იმ 32 ბიტი ჩვენ უბრალოდ ხედავს ნიმუშებს ზოგიერთი წინა გამოყენება იმ კონკრეტულ 32 ბიტი. როგორც კი დააჭირეთ გადახვიდე, თუმცა, phew, temp აპირებს მიიღოს ღირებულება 1. და თუ მე ამის გაკეთება კიდევ ერთხელ, არის უნდა მიეცეს ღირებულება 2 და შემდეგ ბ აპირებს მიეცეს ღირებულება 1. ასე რომ, რა ლამაზი ახლა ამ ეტაპზე ამბავი ის არის, რომ debugger არის მაჩვენებდა, სუპერ ნელა ჩემი საკუთარი ტემპით, რა სახელმწიფო Swap არის. მაგრამ შეამჩნია ზედა აქ, ცნობა რომ სტეკი რეალურად აქვს ორი ფენების მას. ახლა ერთი, რომ განიხილება, როგორც გაცვლა, თუ მე დააწკაპუნეთ მთავარი ნაცვლად, შეამჩნევთ, თუ როგორ ადგილობრივი ცვლადები შეცვლა რადგან დეველოპერი შეგიძლიათ უბრალოდ hop გარშემო და წასვლას რაიმე განსხვავებული ფარგლებს. ასე რომ, მიუხედავად იმისა, რომ ჩვენ ვაკეთებთ ყველა ამ მუშაობა და სწორად შევცვალე და ბ, თუ მე დაბრუნდეს და მეოთხე შორის Swap სადაც არის 2 და b არის 1 და მთავარი, აქვს მთავარი იქნა დაზარალებულ ყველა? No. ასე რომ, რა takeaway აქ? ისე, გამოდის, რომ ნებისმიერ დროს თქვენ მოვუწოდებთ ფუნქცია, როგორიცაა Swap, და თქვენ გაივლის ის არგუმენტები, თუ რა თქვენ გავლის Swap ფუნქცია ამ შემთხვევაში ასლი იმ არგუმენტებს. ასე რომ, თუ x და y თითოეულ შესაბამისად 32 ბიტი, რა Swap დღითიდღე ორი ადგილობრივი ცვლადები, ან არგუმენტები, მოუწოდა და ბ, მაგრამ ეს არის თვითნებური names-- მაგრამ ნიმუში zeros და პირობა შიგნით და ბ არის გაფორმებულია იდენტური იყოს x და y მაგრამ ისინი არ არიან იგივე მნიშვნელობა, როგორც x და y. ეს თითქოს მთავარი აქვს თავისი ნაჭერი ქაღალდის ნომერი 1 და 2 x და y, და მაშინ, როდესაც მას ხელში რომ ნაჭერი ქაღალდი სვოპ, Swap ძალიან სწრაფად იღებს საკუთარი კალამი, წერს ქვემოთ 1 და 2 საკუთარი ფურცელზე, ხელები უკან ორიგინალური xy მთავარი და შემდეგ აკეთებს საკუთარი რამ და ბ. და ეს არის სუპერ მნიშვნელოვანია, რადგან ეს nontrivial შედეგებზე რეალურად წერა სწორი კოდი იმიტომ, რომ, როგორც ჩანს, ჩვენ ვერ სვოპ ორი ცვლადი. მე არ გაუკეთებია სწორი Swap ფუნქცია. ჩვენ განხორციელებული ეს Lauren, როგორც სწორი swap ფუნქცია რეალურად, მაგრამ როგორც ჩანს, არც ერთი, რომ საკითხებზე, თუ თქვენ არ შეუძლია რეალურად მოკლე ორ ღირებულებების მუდმივად. ასე რომ, ჩვენ გვჭირდება კიდევ ერთი გზა რეალურად მიიღოთ ამ, და ჩვენ უნდა შეძლებს რეალურად ამ პრობლემის მოგვარებას. და თურმე out-- და ჩვენ მოვალთ უკან ამ კონკრეტულ სურათი ადრე long-- ეს არის ერთი გზა, რომ თქვენ შეიძლება შევაჩერო თქვენი კომპიუტერის მეხსიერებაში. ეს არის უბრალოდ მართკუთხედი. თქვენ შეიძლება შევაჩერო ეს ნებისმიერი რიგი გზები, მაგრამ ეს მოსახერხებელი მიაპყროს, როგორც ოთხკუთხედი შემდეგი მიზეზის გამო. ჩვენ ვაპირებთ, რომ დაიწყოს დღეს და მის ფარგლებს გარეთ ვსაუბრობთ ე.წ. დასტის. და დასტის მხოლოდ ბლოკი საქართველოს RAM-- რომ ბლოკი მეხსიერება რომ ფუნქციები აქვს დაშვება მაშინ, როდესაც ისინი მოუწოდა. ასე რომ, გამოდის, რომ ძალიან ბოლოში ამ დასტის სადაც ყველა ძირითადი ლოკალური ცვლადების და ორგ C და org V და ყველა რომ პერსონალი ვაპირებთ წასვლა იყოს. და თუ მთავარი მოუწოდებს სხვა ფუნქცია, როგორიცაა Swap, ასევე, Swap აპირებს კიდევ ერთი ფენის მეხსიერება up ზემოთ. ასე რომ, მხოლოდ იმიტომ, რომ გადმოგცეთ სწრაფი ზედაპირული სურათი, თუ მე აქ და ნება მომეცით სარკისებური ამ წლის ოვერჰედის well-- რა მაქვს, თუ ჩვენ ვზრუნავთ მხოლოდ შესახებ ბოლოში ამ სურათზე ახლა, ის არის, რომ როდესაც მე აწარმოებს პროგრამა და მთავარი იღებს მოუწოდა, მთავარი ეძლევა ბლოკი RAM ჩემი კომპიუტერი, ბოლოში ამ ე.წ. დასტის. და მე ვაპირებ შევაჩერო ეს შეგნებულად, როგორც მოედანზე. ასე რომ, 32 ბიტი ან ოთხი ბაიტი. და თუ ეს მთავარი ფუნქცია აქვს ცვლადში x ღირებულება 1 და მას აქვს ცვლადში y ღირებულება 2, როგორც აღების ამ კუთხეში მეხსიერება, მთავარი მიეცა მიერ ოპერაციული სისტემა და გამყოფი ეს ისე, რომ პირველი ადგილობრივი ცვლადი მიდის აქ, მეორე მიდის აქ, და ეს არის. როდესაც მთავარი მოუწოდებს swap, Swap იღებს საკუთარი ნაჭერი მეხსიერება ის, რომ ჩვენ მიაპყროს მოსწონს ეს ოპერაციული სისტემა, და ის აპირებს თავისი საკუთარი ადგილობრივი ცვლადები დაფუძნებული ჩვენს განხორციელების ადრე ადგილობრივი ცვლადის და ბ, რომ თავდაპირველად მიიღეთ ღირებულებების 1 და 2. მაგრამ შემდეგ, როგორც კი სვოპ კოდი ახორციელებს, და ლორენ რეალურად სვოპების OJ და რძე, რა ხდება? ისე, ეს 2 ხდება 1, ამ 1 ხდება 2, და, სხვათა შორის, არ არის დროებითი ცვლადი, რომელიც მიმდინარეობს გამოიყენება, რომ მთელი დრო, რომ საბოლოოდ მიდის. მაგრამ ამას მნიშვნელობა არ აქვს რამდენად მუშაობას თქვენ ამ ხაზის of-- ამ მეხსიერების სივრცე, x და y სრულიად ხელშეუხებელი. ასე რომ, ჩვენ გვჭირდება გარკვეული გზა მინიჭების Swap და ფუნქციები, როგორც ეს საიდუმლო ხელმისაწვდომობა, თუ გნებავთ, ფუნქციები მოსწონს, რომ მეხსიერებაში, როგორიც x და y. მოდით შევხედოთ მაგალითად, რომელიც ეხმარება ვნახოთ, თუ ზუსტად რა იყო ხდება ამ მთელი დრო. მე ვაპირებ წავიდეთ წინ და გახსენით შეადარეთ Zero. და მე ვაპირებ დახურვა ჩვენი debugger, მე ვაპირებ დახურვა საშინელი ეძებს გაგზავნა უბრალოდ ამბობს, დაველოდოთ წუთში, თქვენ შუა debugging. მე ვაპირებ დამალვას tab აქ უბრალოდ დაბრუნდეს სიმარტივე. ასე რომ არ ინერვიულოთ თუ GDB მოკლეს. ეს მხოლოდ იმას ნიშნავს, რომ პროგრამა აქვს უკვე დატოვა, შეგნებულად ამ შემთხვევაში, ჩემს მიერ. ახლა შეადარეთ Zero ამას. მე გამოყენებით CS50 ბიბლიოთეკა სტანდარტული I / O. მაქვს ძირითადი ფუნქცია, რომელიც პირველი ამბობს, ამბობენ, რომ რაღაც, და იღებს სიმებიანი. მაშინ ამბობს, რომ ერთხელ და იღებს სხვა სიმებიანი. და შენიშნავს, რომ ამ ორი სიმები უწოდებენ და ტ, შესაბამისად. და ახლა ამ პროგრამის შეადარეთ Zero, მისი მიზანი ცხოვრებაში, ის უნდა მითხრათ, არც მე აკრიფოთ იგივე? ასე რომ, მე ვაპირებ უკან კვირაში ერთი. მე გამოყენებით ჩემი თანაბარი თანაბარი ოპერატორი რომელიც ხარისხის ოპერატორს. არ დავალება ოპერატორი, თანასწორობის ოპერატორს. მე უბრალოდ შედარება და ტ. მოდით რეალურად წავიდეთ წინ და ამის გაკეთება. და მე ვაპირებ წავიდეთ წინ და შეადარეთ Zero. მე ვაპირებ ამის ./comparezero. და მე ვაპირებ წასვლა წინ და ვთქვათ რაღაც მოსწონს, მოდით დედა ამას და რა დედა ზედა. და რა თქმა უნდა მე აკრიფოთ სხვადასხვა რამ. ყველა უფლება. ეს არის ის, რომ უნდა ველოდოთ. მოდით გაუშვით ერთხელ. ორივე შემთხვევაში გააკეთებს ამას, ამას. ეს გამოიყურება სუპერ იდენტური ჩემთვის. შეიტანეთ. OK. იქნებ ეს უბრალოდ უცნაურია, რადგან ეს არ მოსწონს ჩემი გრამატიკა. ასე რომ მოდით კაპიტალის დედა, კაპიტალის დედა, იდენტურია. სხვა რამ. რატომ არის, რომ? ისე, რა რეალურად მიმდინარეობს ქვეშ hood აქ? მოდით დავუბრუნდეთ მეტი აქ მხოლოდ ერთი წუთით და რა GetString არის რეალურად აკეთებს. როცა რეკავთ GetString, ეს ფუნქცია ჩვენ თვითონ დაწერა და ეს რატომღაც იღებს თანმიმდევრობა გმირები შესახებ. და მოდით ვივარაუდოთ, რომ პირველი დროს მე მოვუწოდებ GetString, რომელიც მაძლევს ბლოკი მეხსიერება, რომელიც ასე გამოიყურება. და თუ არა მე აკრეფილი ყველა ამას m-o-m-- და რა მიდის მას შემდეგ? უბრალოდ სწრაფი საღი აზრის ქვითარი. წარმატებული ნულოვანი. ჩვენ ვიცით, რომ. და გავიხსენოთ, რომ ჩვენ ითამაშა გარშემო Zamila სახელი და რამოდენიმე სხვა სახელები როდესაც Rob იყო აქ ეძებს რა ხდება შიგნით მეხსიერება. ასე, რომ ამბავი ზუსტად იგივე. ეს არის ის, რაც GetString უბრუნდება ჩემთვის. ახლა, ჩემი კოდი მომენტში წინ ინახება დაბრუნების ღირებულება GetString ცვლადში s. და მაშინ მეორედ მე მას, ის ინახება ეს ცვლადში ტ. ასე რომ, თუ მე აქ, მე უნდა მიაპყროს ამ ადგილობრივი ცვლადი და მე ზოგადად აპირებს დავხატოთ სიმებიანი just-- ჩვენ გამოგიგზავნით ეძახით s-- როგორც პატარა კვადრატული აქ. და ახლა, რატომღაც როგორ აკეთებს დედა წასვლა შიგნით ამ ცვლადი s? ასევე, ჩვენ უნდა დაბრუნდეს პირველი პრინციპი აქ. რა არის GetString რეალურად დაბრუნების? გამოდის, რომ M-O-M წარმატებული ნულოვანი, და ნებისმიერი რაოდენობის სხვა სიმებისათვის მეხსიერება მოსწონს Zamila და რობ და ენდი ან რაიმე სხვა, რა თქმა უნდა, ჩვენი კომპიუტერული RAM ან მეხსიერების. და თქვენი RAM აქვს მოსწონს თქვენ კონცერტი of RAM, ორი gigs of RAM, ან მილიარდი ან ორ მილიარდ ბაიტი, ან იქნებ კიდევ უფრო ამ დღეებში. მოდით ვივარაუდოთ, დღევანდელი მიზნებისათვის, ის, რომ არ აქვს მნიშვნელობა, თუ რამდენად ჩვენ ნომერზე მათ, მაგრამ ჩვენ შეგვიძლია რაოდენობის თითოეული იმ მილიარდი ან ორი მილიარდი ან ოთხი მილიარდი ბაიტი. და მოდით უბრალოდ თვითნებურად ამბობენ, რომ ეს არის პირველი bite, მეორე bite, მესამე, მეოთხე. მე შეგნებულად არ იყენებს ნულოვანი დღეს, მაგრამ ჩვენ დავბრუნდებით რომ. ასე რომ, სხვა სიტყვებით, თუ ეს არის პირველად მე გამოყენებით პროგრამა, მე უბრალოდ მიღების გაუმართლა და პირველი bite არის ადგილმდებარეობა ერთ შემდეგ ორი შემდეგ სამი, ვიდრე ოთხი. და თუ მე ინახება ხატვის, ყუთის ნომერი ორი მილიარდი იქნება გზა აქ. ასე რომ, რას ფიქრობთ, მაშინ, GetString რეალურად ბრუნდება? ეს არ დაბრუნების M-O-M წარმატებული ნულოვანი თავისთავად იმიტომ, რომ აშკარად არ ჯდება ყუთში, რომელიც მე შედგენილი. ასე რომ, რა შეიძლება GetString რეალურად დაბრუნების ყველა ამ კვირის? პასუხი არის ფორუმში აქ სადღაც. თქვენ არ ჯდება M-O-M წარმატებული ნულოვანი, ასე რომ, რა შეიძლება აზრი ნაცვლად? თუ თქვენ უნდა იყოს სუპერ ჭკვიანი, აყენებს on ე.წ. საინჟინრო ქუდი, რა შეიძლება დაბრუნდნენ? რა არის მაინც ოდენობით ინფორმაცია თქვენ შეიძლება დაბრუნდეს, რომ მაინც ნება თქვენთვის M-O-M მეხსიერებაში? ჰო? აუდიტორია: ერთი. დევიდ ჯ Malan: ერთი. და რატომ? აუდიტორია: იმიტომ, რომ ის გითხრათ, სად უნდა წავიდეს [INAUDIBLE]. დევიდ ჯ Malan: ზუსტად. მე უბრალოდ დაბრუნებას აპირებს მისამართი სიმებიანი რომ მე მიღებული. მისამართი ამ საქმე ის არის, ადგილმდებარეობა ერთი. ასე რომ, რა მიმდინარეობს ინახება s-- და ყოველი სტრიქონი ცვლადი ამით far-- ახლახანს იყო მისამართი რომ სიმებიანი. ამასობაში, თუ მოვუწოდებ GetString მეორედ და მე ჩაწერეთ ფაქტიურად იმავეს M-O-M lowercase-- M-O-M და კიდევ ერთი წარმატებული ნულოვანი, და ახლა იქნებ ჩემი პროგრამა უკვე მიმდინარეობს გარკვეული დროის იქნებ ეს არის 10, ეს არის ადგილმდებარეობა 11, ეს არის 12 ეს არის 13. კომპიუტერები გამოყენებით ზოგიერთი სხვა მეხსიერების სხვადსხვა მიზეზის გამო. რა ახლა მიდის ჩემი მეორე ცვლადი ჩემი პროგრამა უ? 10. ზუსტად. ამიტომ, როდესაც ჩვენ შევხედავთ კოდის ამ პროგრამის სადაც მე უბრალოდ ცდილობს შედარების ორი ღირებულებები, არის ეს თანაბარი ტოლია t, რა არის აშკარა ადამიანის პასუხი? უბრალოდ არ იმიტომ, რომ 1 არ უდრის 10-ს. ასე რომ, შესაბამისად, დევს შესაძლებლობა ჩვენთვის ნამდვილად უბრალოდ დაბრუნდეს, კიდევ ერთხელ, პირველი პრინციპები და ვიფიქროთ, ასევე, რა ხდება ქვეშ hood? ჩვენ ვლაპარაკობდით ბიტი და ბაიტი და მეხსიერება, მაგრამ სინამდვილეში სასარგებლო უნდა გვესმოდეს, რადგან როცა რეკავთ GetString, მიუხედავად იმისა, რომ ჩვენ ვფიქრობთ, რომ ეს არის დაბრუნების M-O-M ან სიმებიანი დედა ან ენდი და Zamila ან მოსწონს, ტექნიკურად ეს მხოლოდ დაბრუნების მისამართი რომ ბლოკი მეხსიერება. მაგრამ ეს OK. იმის გამო, როგორ მე ვიცი, სადაც სიმებიანი მთავრდება? თუ მე მხოლოდ მოცემული დასაწყისში? ისე, წარმატებული ნულოვანი, არა? უბრალოდ ხაზოვანი დროს შემიძლია ბეჭდვა ბეჭდვითი def M-O-M. და როგორც კი ვხედავ წარმატებული ნულოვანი, მე არ მაინტერესებს, სადაც მე დაიწყო, მე უკვე ვიცი, ირიბად სადაც მე უნდა დასრულდეს. ასე რომ, დღეს აღნიშნავს beginning-- და ნება მომეცით ამის მკვეთრად იმიტომ, რომ ჩვენ გაიარა ბევრი უბედურება მიიღეთ ეს აქ ტრეინინგებს wheels-- ასე რომ, დღეს სასწავლო დისკები დაიწყოს მოვა off და ჩვენ გამოავლინოს არანაკლებ [ტაში] ეს იყო კარგად ღირს მოგზაურობა სამიზნე ამ დილით, არა? ასე რომ, ახლა არ არის, თურმე გარეთ, არსებობს ასეთი რამ, როგორც სიმებიანი. სიმებიანი არ არსებობს. ეს არის სინონიმი, რომ ჩვენ გვქონდა შიგნით CS50 ბიბლიოთეკა. ამიერიდან, ჩვენ ვაპირებთ, რომ დაიწყოს მოუწოდებდა და ტ არ სტრიქონები მაგრამ char ვარსკვლავი. და char ვარსკვლავი ჩვენ გამოგიგზავნით აჯავრებენ გარდა ადრე ხანგრძლივი. მაგრამ ეს ნიშნავს იმას, რომ რომ მაშინაც კი, თუ ჩვენ გავაგრძელებთ გამოყენებით GetString ახლა, ტექნიკურად მე უნდა იყოს ამბობდა char ვარსკვლავი და char ვარსკვლავი. და თურმე რა, რომ ვარსკვლავი აპირებს აღინიშნოს არის ის, მოუწოდა მაჩვენებელი ან მისამართზე. და ფაქტობრივად, teaser რა ელის ეს არის 20 მეორე კლიპი ჩვენი მეგობარი ნიკ Parlante სტენფორდის რომელიც, კარგა ხანია, ატარებენ სასაცილოა დროის, როგორც საუკეთესო შემიძლია გითხრათ მისი სამზარეულო და თავის სარდაფში, მიღების claymation შემოღების to მსოფლიოში ხასიათი დაასახელა Binky რომელთანაც ჩვენ დაინერგება მომავალი დრო მითითებას. ასე რომ, აქ არის ესკიზი რა მოვა. [ვიდეო აღწარმოების] -ეი, Binky. გაიღვიძეთ. დროა მაჩვენებელი fun. რა არის ეს? ბუნებაში პოინტერები? ოჰ, გადასარევი. [END აღწარმოების] დევიდ ჯ Malan: და რომ შენიშვნა, ვნახავთ თქვენ ოთხშაბათს. ყველა უფლება. ვინ არის ცეკვა? კარგით. ვინ არის ცეკვა? გსურთ ჩემთვის მისაღებად დაიწყო? მე მისაღებად დაიწყო. Woooo! LAUREN: Sweet ლამაზი მოსეს.