DAVID J. MALAN: Bu CS50 edir və Bu həftə dörd başlanğıc. Və oğlan, Volkswagen edir çünki proqram narahatlıq. Bizə nəzər salaq. [Video playback] -Avtomobil, Akıllıca simvol Tez və Furious film. Bu həftə Alman avtomobil Volkswagen özünü aşkar bir qalmaqal ortasında potensial cinayət nisbətdə. -Volkswagen Milyardlarla möhkəmlətmə edilir cərimələr, mümkün cinayət onun Yöneticiler üçün, kimi Şirkət üzr 11 milyon avtomobil takelaj üçün Bu emissiyaları test döymək kömək edir. -Certain Dizel modelləri idi inkişaf etmiş proqram ilə nəzərdə o cümlədən istifadə məlumat sükan və avtomobilin mövqeyi avtomobil idi müəyyən etmək üçün sürətli emissiyaları test keçir. Ki halda, mühərrik zəhərli emissiyaları azaldacaq. Amma avtomobil bypass üçün saxta edildi ki, idarə olunur zaman. Emissiyaları 40 10 artdı məqbul EPA səviyyədə yuxarıda dəfə. [END playback] DAVID J. MALAN: Belə edək bu nəzər və dəqiq necə görürük həyata keçirilə bilər və bu təsir edə bilər necə bu kimi bir çox tapılmışdır. Belə ki, mənim tərəfdən burada mətbuat ki EPA-- tərəfindən verilmişdir azad Environmental Protection Agency hansı ABŞ tənzimləyici agentliyidir ki, ətraf mühitlə bağlı emal, və sonra faktiki idi Künye Yalnız bir neçə gün əvvəl Volkswagen göndərin. Belə ki, EPA yazır və indi açıqlayır açıq, inkişaf etmiş bir proqram Müəyyən on alqoritm Volkswagen vasitələri algılar zaman avtomobil keçir rəsmi emissiyaları test və tam emissiyaları çevrilir yalnız test zamanı nəzarət edir. səmərəliliyi Bu vasitələrin çirklənmə emissiyaları nəzarət cihazları böyük var bütün normal sürücülük ərzində azalıb hallar. Bu cavab Avtomobillərin nəticələrini laboratoriya və ya test standartları stansiyası, lakin normal istismarı zamanı azot oxides-- ya NOx-- buraxmaq qədər 40 dəfə standart. Volkswagen tərəfindən istehsal software bir quote dırnağı bağlamaq, məğlub cihaz, Clean tərəfindən müəyyən edilmiş ABŞ-da hava Aktı. Onlar ki, getmək EPA və başqa agentliyi məğlub cihaz aşkar müstəqil təhlil edildikdən sonra proqram Qərb tədqiqatçıları tərəfindən Virginia Universiteti. NOx çirklənmə qatqı təmin azot dioksid, yer səviyyəsində ozon, və gözəl hissəciklər. Bu məruz çirkləndiricilər bağlı olmuşdur geniş ilə ciddi sağlamlıq təsirləri, artıb astma, o cümlədən hücumları və digər tənəffüs kifayət qədər ciddi ola bilər xəstəliklər xəstəxanaya insanlara göndərmək üçün. Ozon məruz və hissəciklər də var vaxtından əvvəl ilə bağlı olmuşdur əlaqədar tənəffüs səbəbiylə ölüm və ya ürək-damar təsiri ilə bağlı. Uşaq, yaşlı, insanlar preexisting tənəffüs xəstəlikləri xüsusilə risk var bu çirkləndirici sağlamlıq təsirləri. Kifayətdir kifayət qədər ciddi, demək deyil. Və oxumaq üçün getmək imkan yalnız bir daha pasaj və sonra bir nəzər lazımdır əsas təsiri bir avtomobil kontekstində bu. Xüsusilə, Volkswagen istehsal və quraşdırılmış qondarma proqram təminatı elektron nəzarət module-- ya ECM-- of hiss bu vasitələr vasitə üçün test edilmişdir zaman EPA emissiya standartlarına uyğunluq. O cümlədən müxtəlif giriş əsasında sükan mövqeyini, avtomobil sürət, motor-nin müddəti əməliyyat və atmosfer təzyiqi, Bu giriş dəqiq parametrləri izlenen üçün istifadə federal test proseduru EPA sertifikatlaşdırma üçün emissiyası test məqsədləri. EPA emissiya sınağı zamanı, nəqliyyat vasitələri ECM proqram istehsal proqram qaçdı uyğun emissiyaları nəticələri. Bütün digər vaxtlarda, vasitə ECM proqram ayrı yol qaçdı aşağı kalibrləmə səmərəliliyi ümumi emissiya nəzarət sistemi, xüsusi selektiv katalitik Lean NOx azaldılması trap-- Hansı bir anda haqqında görəcəksiniz. NOx nəticəsində, emissiyaları 10 40 dəfə artmışdır EPA uyğun səviyyədə yuxarıda drive dövrü növündən asılı olaraq. Bu, həqiqətən deməkdir və belə nə proqram çalışan mənbə kodu Volkswagen-nin deyil hələ açıq açıqlanmır ki, səmərəli, bu ekvivalent daxilində bir yerdə var Volkswagen kodu. Əgər test, və edilir avtomobilin əgər Müəyyən ekoloji amillər algılar sükan kimi mövqe və ya hərəkət və ya olmaması avtomobil və ya onların digər amillər hər hansı bir sayı ki, hazırda öne olunur Bu formula bir hissəsi olmaq üçün, onlar sadəcə yandırmaq tam emissiyaları nəzarət. Başqa sözlə, onlar başlamaq çirkləndiricilərin az emitting. Else, hər vəziyyətdə Bu kimi aşkar deyil zaman Laboratoriyada, onlar yalnız deyil. Və belə ki, daha bu sadələşdirmək bilər bir şey ilə konkret pseudocode bunun kimi. Disklər dönüş ancaq varsa sükan, nalayiq deyil avtomobil bəzi edir ki, fırlanan silindr cür lakin bir növ anbar sınaqdan keçirilir, sonra kimi davranmaq EPA sizə istəyirəm. Əks halda deyil. Belə ki, bir nəzər salaq qısa video ki, nə təsiri bir göz edir həqiqətən mexaniki bu var. [Video playback] Cümə -Son EPA açıqladı bəzi Volkswagen Audi avtomobil 2009 arasında edilən və bu il istifadə qondarma məğlub cihaz emissiyaları qanunları ətrafında almaq üçün təmiz hava saxlamaq üçün nəzərdə tutulmuşdur. Amma bu dəqiq nə deməkdir? Yaxşı, müasir maşın onlarla onların içərisində kompüter. Və bu kompüter bəzi funksiyaları koordinasiya kömək optimal üçün mühərrik performance əmin edərkən çox zibil yoxdur ki, işlənmiş boru həyata gəlir. Onlar, həqiqətən, iş etdik Artıq bir neçə onilliklər üçün bu yol. Ümumiyyətlə, hər bir hissəsi müasir avtomobilin mühərrik sensor və ya nəzarətçi var bu və bu kompüter məlumatların minlərlə oxu İkinci edilməsi düzəlişlər başına dəfə hava yanacaq nisbəti kimi ki, silindrlər daxil olacaq. Bu xəyanət Volkswagen və Audi modelləri dizel var və dizel daha bir var həqiqətən əhəmiyyətli kompüter var nəzarət parametrləri, gedən yanmamış yanacaq məbləği işlənmiş daxil. İndi pis səslənir. Siz istədiyiniz kimi səs deyil işlənmiş gedən yanmamış yanacaq. Amma halda dizel, siz bir şey var bir cihaz bir NOx tələ adlı udur və azot oksidləri üçün tələlərin çirkləndiricilər ki, ki, var ki, başqa atmosferə getmək. Və NOx tələ təsiri yanmamış yanacaq ilə genişləndirilir. Belə ki, bir məğlubiyyət cihaz xüsusi proqram Bu kompüter daxilində ki, bunu edə bilərsiniz avtomobil emissiya cavab kimi baxmaq standartları bu deyil belə. Volkswagen onun əlində bir problem var idi. Onun dizel mühərrikləri məlum idi böyük yanacaq iqtisadiyyatı almaq üçün, lakin NOx tələ yalnız yaxşı işləyir daha çox yanacaq istifadə edildikdə. Belə ki, avtomobil, aşkar olardı Bu məğlubiyyət cihaz istifadə edərək, bu emissiyaları əldə zaman test, bu daha çox yanacaq istifadə edir, yaxşı NOx tələ iş, emissiyaları gözəl olardı. Amma sonra, yolda cihaz almaq sönür, daha az yanacaq yanan etdiyiniz lakin kimi çox 40 dəfə qoyulması edirik atmosferə daha çirkləndirici. Lakin heck necə avtomobil olduğunu bilirik emissiyaları uyğun üçün test olunur? EPA bir mürəkkəb olub şeyi yoxlanılır sistemi sükan mövqeyi kimi, sürət, mühərrik idi necə uzun, və hətta atmosfer təzyiqi. Başqa sözlə, var idi heç bir yol, bu təsadüfi idi proqram idi, çünki aşkar etmək üçün çox diqqətlə nəzərdə tutulmuşdur rəsmi emissiyaları test. Ki, bəzi olduqca ciddi var aldatma və ki niyə Volkswagen edir belə ciddi narahatlıq. Əslində, onların CEO, Martin Winterkorn, yalnız aşağı basdı. Belə ki, nə gələn olur? Yaxşı yarım milyon biri istəyirik, əgər dizel Jettas, Beatles, Golfs, Passats, və ya Audi A3s, həyata yaxşı xəbər deyil ki, Sizin avtomobil sürücü hələ təhlükəsizdir. Siz üz qoymaq yoxdur Volkswagen geri məsələləri qədər. Amma bir anda onlar yəqin ki, gedir Sizin avtomobil daxili proqram yeniləmə. Ki, baş zaman bilər tank başına az mil almaq. Lawyers artıq gearing olunur sinfi fəaliyyət iddia üçün belə sahibləri kompensasiya almaq bilər gələcəkdə müəyyən məqamda. Amma ki, etmək niyyətində deyil tezliklə istənilən vaxt baş verir. [END playback] DAVID J. MALAN: Belə ki, bu, həqiqətən qaldırır maraqlı böyük şəkil sual kimi etibar. Sağ? Hamımız iPhone və ya Androids və ya cibimizdə bir şey çox güman ki, bu gün, ya noutbuk bizim ətəklərinin edilən çalışan proqram Apple və Microsoft tərəfindən digər şirkətlərin və dəstələri. Amma biz bilirik ki, nə Bu proqram məhsulları edirik nə bu əslində şirkətləri etdiklərini demək? Məsələn, kim var deyirlər ki, hər zaman Sizin iPhone haqqında zəng etmək və ya Android telefon və ya kimi, ki, telefon nömrəsini də deyil ki, bir şirkətin server daşıyanlar olunur bəzi Proqramının etdik, çünki Bu əməliyyat olub, yazılı iOS və ya Android kimi sistem özü, və ya nazil etdik, çünki bir üçüncü tərəf app elə dinləmək ki, hər şey Siz yazaraq etdiyiniz və ya hər şey, həqiqətən, deyərək edirik. Siz ki, bilmirəm necə, nə zaman Sizlərin cingilti çalışan və ya tərtib etmək olun CS50, necə öz proqram ki, CS50 öz heyəti etmək, CS50 kitabxana yolu ilə, hər giriş olmamışdır Əgər kazanılmış string və ya hər Əgər kazanılmış inch? Bəli, əlbəttə ki, baxmaq bilər bir şey üçün mənbə kodu ilə CS50 kitabxana kimi, mənbə kodu baxmaq bilər Linux əməliyyat sistemi üçün CS50 IDE çalışan. Amma inanılmaz təqdimat 1984-cü ildə geri verildi bir tərəfindən Turing mükafatı alınması tanınmış çox məşhur kompüter alim adlı Ken Thompson as-- edən Turing mükafatı aldığı informatika nin sort Nobel mükafatı, Siz, bir onun iş üçün əməliyyat sistemi deyilən Çox oxşardır Unix, Biz istifadə nə ruh Linux edir. Və sual o xahiş onun mahiyyətcə qəbul çıxışında, çərçivəsini aşağı salınması il müzakirə il inam və təhlükəsizlik haqqında, bu idi. Nə dərəcədə olmalıdır bir inam A bir parça program-- ki, bəyanat bir software-- Trojan atlar pulsuz? Yəqin ki, etibar üçün daha vacibdir proqram yazıb insanlar. Və əslində, biz bağlı etdik müzakirəsi o bu mükafatı qəbul edərkən verdi CS50 saytında 80-ci Bu gün üçün mühazirələr səhifə altında. Görürsünüz nə çünki o, həqiqətən verir ki, necə hətta kifayət qədər sadə misal cingilti və ya hər hansı bir compiler digər keçmişdə istifadə derleyiciler, compiler biz əlaqədar nə varsa özümüzü bir az istifadə olunur mahiyyətcə deyir vəziyyəti, Bu kodu istifadə edir ki, qeyd əgər GetString funksiyası və ya GetInt funksiyası, irəli getmək və daxil geri qapı və ya bir Truva atı Belə ki, proqram indi bəzi adet sıfır var və zərərli bir şey olanları. Bütün Logging sizin ki, məlumat yüklemek tuş vuruşlarını, bir server və ya həqiqətən bir şey. Və nə Ken Thompson söhbətində nə gedir hətta olduğunu nümayiş edir Siz mənbə etmək imkanı var bir compiler kodu ki, pis, bunu ola bilər çünki etməz Bu toyuq və yumurta var Ötən çox reallıq il vasitəsi derleyiciler özlərini tərtib etmək üçün istifadə olunur. Başqa sözlə, yol geri zaman kimsə ilk compiler yazılı idi. Və sonra, istənilən vaxt onlar yenilənir etdik mənbə kodu dəyişən bir compiler, funksiyalar əlavə və recompiling bizim kimi insanlar istifadə etmək üçün, yaxşı, onlar köhnə istifadə etdiyiniz compiler versiyası yeni tərtib etmək compiler versiyası. Və siz bir nəzər əgər verdi talk, Siz, çünki ki, görürsünüz ki circularity, Siz, həqiqətən, hataları ola bilər və ya Truva atı proqram daxil biz istifadə edirik. Və baxmaq, hətta həmin proqramların üçün mənbə kodu, hətta aydın ola bilər fırıldaqçılıq, həqiqətən, çünki bir bəzi köhnə versiyası beri olmuşdur compiler Bizim proqram təhlükə inyeksiya. Olan yalnız biz, demək həqiqətən bilməz və olmamalıdır inam proqram noutbuk çalışan telefonlar və ya yerlərdə hər hansı bir sayı və ya. Və əslində, daha sonra bu dövr biz web proqramlaşdırma haqqında danışmağa başlayın və həqiqətən bina başlamaq web applications özümüzü, biz bu barədə danışmaq lazımdır təhdid və s. İndi, merak və qeyd ola bilər kiçik bir az Darth var idi ki, Klipler Vader ki Verge var göstərirdi Volkswagen haqqında. Əgər Siz görməmişəm mən biz işıqlandırmaq lazımdır düşündüm əhval bu, çünki çox əzici və qorxulu. Mən geri baxmaq gedirəm Super Bowl 2011 zaman bir ticarət Volkswagen-- və bu demək olar ki, again-- onlara likable edir TV ilk dəfə havalandırdı. Bu 60 ikinci clip var Mən sizə zövq olacaq edirəm ki. [Video playback] [MUSIC - "Star Wars" mövzusunda] [It barks] [CAR BAŞLAYIB] [END playback] DAVID J. MALAN: Bəli. Mən yalnız yoxlanılması edilib. Ki, avtomobil pozuntuları siyahısındadır. Oldu. Beləliklə, biz bəzi baxmaq bir an əvvəl pseudocode. Və burada böyük var pseudocode kodu parçasını ki, biz indiyə qədər bir neçə dəfə gördüm. Və bu bir fürsətdir istifadə edək indi yeni bir proqramlaşdırma təqdim etmək etdik texnika algorithmically görmək Keçən həftə birləşməsi sort baxdı zaman. Amma bunu rəsmiləşdirmək və necə edək Biz faktiki kodu istifadə edə bilər və sonra biz bu istifadə etmək olacaq yol aşağı texnika ən müəyyən digər problemləri həll etmək üçün çox. Beləliklə, bu ilk proqramları biri idi biz Heç pseudocode kodu olsa da, yazdı. Və nə bu proqram Dərs etmək icazə bir telefon kitab Mike Smith tapmaq idi. Və xüsusilə xətləri səkkiz qeyd bu Go To bəyanat idi 11. Və əslində, müəyyən dil, onların arasında C, əslində bir var sözün bəyanat ki, sizə imkan verir getmək müəyyən bir xətt jump. Bu, ümumiyyətlə, çünki sonra Əbəsə edir bu, çox asanlıqla sui-istifadə edilə bilər və jumping başlamaq bilərsiniz fərqli olaraq bütün yer üzərində proqram cür istifadə etmək məntiq və nəzarət axını biz yalnız ilə bu günə qədər istifadə etdiyiniz loops və şərtləri və kimi. Amma biz bu alqoritm sadələşdirmək bilər pseudocode kodu kimi edir. Əvəzində bu iterativ of və ya yanaşma loop biz geri davam və geri və geri üç sıralamaq üçün, niyə biz yalnız növ ayaqla zərbə və daha çox yoxdur ümumiyyətlə, xətti yeddi və 10 demək yalnız bu iki əvəz ilə xətləri cüt, Smith əvvəllər başqa əgər Kitabda alacağıq Mike üçün axtarış Kitabın sol yarısı. Smith sonra başqa əgər kitab, sağ Mike üçün axtarış yarım kitab. Və artıq circularity bildiriş. Sağ? Mən Mike üçün axtarış alıram telefon kitab və sonra Mən nəhayət, bəlkə edib line yeddi və ya bəlkə line 10 və özüm mənim təlimat axtarış telefon kitab yarısında Mike üçün. Yaxşı, necə Mike üçün axtarış edirsiniz? Mən ortasında deyiləm Mike, nə üçün axtarış Siz sort bir dairə mənə göndərir? Amma ki, nə, çünki OK problemin ölçüsü baş, xətti 7 və 10 yazılı kimi? Biz yalnız axtarış deyərək deyilik Mike üçün, Mike üçün axtarış. Biz xüsusi nə dedi edirik? Sol yarısında ona axtar səmərəli sağ yarım problemin yarısı ölçüsü. Belə ki, biz növ olduğunu OK bu circularity məşğul, Bu dairəvi arqument ən azı biz istəyirik, çünki problem kiçik və kiçik edilməsi. Və nəticədə biz nail olacaq ki, qondarma əsas işi harada biz yalnız bir səhifə əgər sol Bizim könüllü keçən həftə did-- biz bir səhifə idi sonra sol və biz deyil Mike Smith üçün axtarış saxlamaq lazımdır o səhifədə bilərsiniz, çünki və ya o deyil. Beləliklə, biz bu fikri, bu həyata necə faktiki kodu circularity sort? Bəli, biz bir texnika leverage ki, ümumiyyətlə, recursion kimi tanınan oldu. Və biz bu gördüm birləşməsi sort üçün pseudocode ötən həftə. Bu idi Xatırladaq ki, birləşməsi sort üçün pseudocode. Bu arguably daha asan var bubble və ya seçim və ya durub sırala yalnız sadəlik baxımından olan siz ifadə edə bilərlər. Amma ki, çünki var biz sort circularly istəyirik bir şey üçün axtarış söyləyərək daha üçün axtarış. Amma biz ya aradığınız sol yarısı və ya sağ yarım və sonra nəhayət biz istəyirik Bu halda birləşmə. Amma burada da ilə bu iki sort xətləri, biz yenə bu var idi recursion ideyası. Və konkret bu nə deməkdir, bir alqoritm kontekstində, bir alqoritm recursive olduğunu Bu istifadə edir və ya özünü çağırır əgər. Və ya C baxımından bir funksiyası adlı funksiyası recursive foo, foo əgər recursive deyil haradasa öz mənbə kodu, funksiyası foo özü çağırır. Və bütün foo heç əgər pis təkrar özü zəng edir. Foo nəticədə vermir kimi ki, OK deyərək, sort daxil bir dəqiqə gözləyin, Bu problem super əgər Kiçik, məsələn, ya mən deyiləm kimə onu aşkar axtarır, yalnız qayıtmaq. Recursively deyil, bunu etməyin cyclically yenidən özüm zəng. Və belə bir nəzər salaq Bu, həqiqətən, iş ola bilər necə. Beləliklə, mən irəli və açıq getmək üçün gedirəm burada iki mənbə kodu nümunələri up. Biri sigma 0 adlanır. Bu bütün deyil recursive amma götürək bir bu proqram nə baxmaq. Mən bütün lüt etdik ancaq bütün şərhlər CS50 üzrə mənbə kodu veb əgər şərh var daha sonra vasitəsilə oxumaq istəyirəm. Və bir neçə nə edək ağlı başında olma burada yoxlayır. Bu Məcəllənin üst So biz cs50.h. daxil var Bu nə edir? Niyə burada? Ağlabatan layman nin baxımından. O nə edir? Bəli. Auditoriya: GetInt funksiyası işləyir ki. DAVID J. MALAN: Belə ki, GetInt funksiyası işləyir. Bu daxili Çünki fayl, CS50.h olan biz uzun əvvəl görürsünüz mənbə kodu şərtləri, funksiyaları bir dəstə var declared-- GetInt, GetString, others-- və halda bir dəstə və biz, həqiqətən, ki, xətt daxil var compiler cingilti deyil ki, mövcud biləcəklər. Və eyni xətt gedir int müəyyən edilir iki bir funksiyası var printf, biz kifayət qədər bir az istifadə edin. İndi line dörd bir az Funky görünür Bu yalnız bir liner, çünki. Bu, heç bir curly, nöqtəli vergül var aşırma, onun daxilində kodu. Lakin biz zəng etdi həftə keçmişdə bu şey? Bəli. Belə ki, bir prototip. Və niyə biz bir var görünür prototip bir az lazımsız olmaq adətən adətən Çünki biz yenidən funksiyası görmək sonra fayl, sağ? Belə ki, niyə biz yalnız istəyirik yaxşıdır yoxdur sizin baş kazıma, lakin mən onu almaq lazımdır. Bəli. Auditoriya: [işitilemez] Əsas sonra funksiyası. DAVID J. MALAN: Exactly. Compiler sizə bilir ki, nəticədə müəyyən və ya həyata keçirəcək ehtimalla əsas sonra funksiyası. Belə ki, cingilti və ən derleyiciler cür lallardır və onlar yalnız bilirsiniz nə onlara. Və istifadə etmək istəyirsinizsə, sigma adlı funksiyası, daha yaxşı compiler öyrətmək ki, əvvəlcədən mövcuddur. İndi əsas özü, hətta Bu xətləri bir dəstə var, baxmayaraq ki, İndi ümid olduqca tanış edir. Bu do loop isə var həyat kimin məqsədi Burada yəqin almaq üçün istifadəçi müsbət tam. Və yalnız ona pestering saxlamaq və ya onun əməkdaşlığa qədər. Sonra xətti 16 Mən maraqlı zəng. IntAnswer. Sol tərəfdən hansı yan Mənə bir int verir Answer-- adlı store-- bilər ki, saxlamaq üçün gedir ki, yəqin, sigma qaytarılması dəyəri. Belə ki, sigma yalnız bir deyil ixtiyari, lakin mənalı adı Mən bir funksiyası təqdim etdik ki, həyat kimin məqsədi bir dəlil almaq üçün biz Bu halda N zəng edəcəyik və yalnız ki sayı cəmi etmək plus hər müsbət sayı ki bu daha kiçik. Mən 2 saylı keçmək əgər Belə ki, sigma, Mən əlavə etmək istəyirəm 2 plus 1 plus 0 idi ki, mənə 3 verir 0-. Mən sigma 3 keçmək əgər, Mən istəyirəm 3 plus 2 plus 1 var, olan mənə 6 verir. Və s. Belə ki, yalnız qədər əlavə bütün ədəd ona daha az və ya bərabər. İndi aşağı burada mən yalnız gedirəm cavab çap. Belə ki, tez ağlı başında olma çek kimi, edək sigma 0- dot çizgi sigma etmək 0- və mənə 2 yazın edək. Mən, həqiqətən, 3 almaq. Mənə 3 yazın edək. Mən, həqiqətən, 6 almaq. Və hər kəs tez riyaziyyat edə bilər, əgər, Mən almaq gedirəm nə 50, nə olur? Auditoriya: [işitilemez]. DAVID J. MALAN: Bəli, no. Lakin 1275 olduqca yaxın olan. Belə ki, bu 50 bunu nəticəsidir plus 49 plus 48 plus 47 plus 46 1 bütün yol aşağı. Ki belə ki, bütün sigma yoxdur. Amma biz necə edək İndi həyata keçirilir. Belə ki, aşağı burada funksiyası özü edir. Və bu var görünmür bir şey hələ recursion ilə. Əslində, biz bir istifadə etdiyiniz köhnə məktəb texnika. Mən bir dəyişən adlı məbləği başlatılıyor alıram sıfır, sonra burada bir foreloop var, və mən adlı Int elan edirəm Mən 1 var bərabər qəbulu Mən bərabər müəyyən edə bilər, baxmayaraq ki, sıfır, amma əlavə edirəm ildən, sıfır və ya bir, əgər kimin umurunda. Bu, heç bir təsir olacaq. Beləliklə, mən belə uzun mən kimi iterating alıram daha az və ya m, bərabər olan keçildi dəlildir. Və sonra mən yalnız saxlamaq I. Və fikir incrementing loop Mən məbləğ edir edirəm plus I. bərabərdir ki, qəsdən var. Bu, nə istəmirəm halda, məbləğ plus plus kimi. Mən, həqiqətən, əlavə etmək istəyirəm I cari dəyəri olan böyük və daha böyük əldə saxlayır və çalışan tally üçün böyük. Və sonra məbləği geri. Və belə cavab dəyəri məbləğ olur. Və sonra mən onu çap. Belə ki, imkanı var burada, baxmayaraq ki, mehriban asanlaşdırmaq üçün Bu kodu konseptual və zərbə cür biri baxımından ağla sadəlik hətta baxmayaraq düzmək üçün bir müddət alır niyə bu qiymətləndirirəm bu kiçik nümunələri güclü deyil. Burada belə one-- sigma deyil Bu kodu ikinci versiyası. Üst qədər hər şey belə eynidir Həmin hekayə əvvəl tətbiq edilir. Amma indi baxaq sigma həyata keçirilməsi hansı Mən yalnız bu aşağı whittled etdik xətləri kodu dörd xətləri, həqiqətən, üstəlik bəzi qıvrım aşırma və ağ kosmik. Amma mən nə edirəm? M daha az və ya bərabər olduqda sıfır, I növ idarə etmək lazımdır ki, super sadə halda. Və mənə sıfır və ya bir şey əl əgər yalnız qəribə olan mənfi Mən yalnız özbaşına gedirəm lakin ardıcıl sıfır qayıtmaq. Mən bu şey istəmirəm bəzi qəribə Infinite daxil çünki bir mənfi dəyər loop. Mənə vermək əgər mən yalnız, deyirəm sıfır və ya daha az, mən sıfır qaytarılması alıram. Ki, çünki Amma ki, yaxşı telefon kitab ki, bir səhifə ki, sol. Mən çox xüsusi bir problem off yeme alıram və recursively bir şey zəng deyil. Amma line 31 nə Mən bunu etmək görünür? parantez yalnız saxlanılır şeylər, ümid edirəm ki, bir az aydın. Amma edirəm mən deyiləm m-- qaytarılması nə Siz me-- plus əl m-- sorry dəyəri, plus m minus 1 sigma dəyəri. Belə ki, bu nə deməkdir? Siz giriş kimi mənə sayı 3 versələr, Cavab Mən nəticədə almaq istəyirəm 3 plus 2 plus 1 mənə 6 verir, çünki 6. Amma mən necə düşünürsünüz Bu kodu nə çalışan? Mən sigma zəng ilk dəfə və mən dəyər 3 keçmək ki, bir parça deyən kimi kağız, burada dəyəri 3 var və mən Sigma kimi qəbul etdik. 3 açıq-aydın belə az olmayan 0 IF şərt tətbiq edilmir. Başqa yoxdur. Beləliklə, mən nə etməliyəm? Mən olan m qayıtmaq istəyirəm M minus 1 3 plus sigma. Mənə bu takip imkan verir. Mən bu qoymaq gedirəm kağız aşağı parça. Və nə dəyəri, olmaq aydın, Mən keçmək üçün gedirəm hekayə bu nöqtədə sigma daxil? Nə sayı? 2, sağ? 3 minus 1 2. Mən yalnız bir az lazımdır Burada kağız qırıntıları. Belə ki, indi sigma yenidən adlanan olur. Mən qəsdən gətirdik Bu aşağı, çünki cür duraklatarak kimi hekayə ki version indi diqqət deyiləm, çünki m minus 1 siqnal. Belə ki, m 3, m idi minus 1 2. Belə ki, burada qəbul etdik 2. 2 açıq-aydın az deyil 0 belə ki, hal tətbiq edilmir. Başqa mən bu olan m qayıtmaq nə dəyər şey, üstəgəl sigma? Belə ki, sigma bir 1 var m çünki İndi 2 SO 2 minus 1 1. Belə ki, indi mən yalnız dəyəri 1 var. Mən yalnız sayı keçən alıram Funksiyası sigma-- 1 və ya özümü burada belə 1 açıq-aydın deyil sıfırdan aşağı olmayan, hələ də tətbiq edilmir. Else qaytarılması 1 plus nə sigma? 0. Mənə yalnız unutmayın ki, bildirin. Mən sonra geri almaq lazımdır. İndi irəli və jot getmək üçün gedirəm sayı 0 aşağı ki, çünki Mənim dəlil və ya parametri. Mən sayı 0 keçdi alıram və nəhayət bu proses yalnız özümü reklam təkrar nauseum nə çünki dayandırmaq deyil Bu 0 görmək bir dəfə mən dərhal etməliyəm? Mən sıfır qayıtmaq. Belə ki, indi hekayə geri lazımdır. İndi vaxt geri getmək varsa, Ən son şey nə idi Sözün olsaydı mən video rewinding? Mən ən son almaq üçün gedirəm 1 və mənə 1 verir plus 0 1. Mən rewinding saxlamaq hekayə, mənə vermək olacaq 1 2 plus bu çalışan dəyəri. Belə ki, 3 var. Və sonra mən rewinding saxlamaq üçün gedirəm. Mən ilk sayı aşağı qoymaq zaman 3 edəcəyik ki, 3 plus 3 6 mənə verir. İndi, siz rewound olsanız Bu nöqtəyə qədər video up, Bu çox idi İlk sual soruşdum. 3 keçərkən, 3 sigma nədir? Bu, həqiqətən, 6, məbləği var kağız bütün bu ədəd. Ki, bir az edir, əgər belə isə ki, gözəl, sizin fikrinizi ətrafında kesmek. Amma bu çox az idi hesab Mən dizilir ki, çox qəsdən idi bir-birinə üst bu nömrələri. Bu olan kimi növ var vaxt rekord, yaddaş, bir video bir skrubber kimi, Mən, həqiqətən, ən geri bilər. Və biz geri gəlmək olacaq yalnız bir az ki, məcaz. Lakin ilk, o var ki, çıxır Geeks və funny bir çox insanlar, Google da danışarlar. Kaş çox var kimsə Googling ağıl yaxşı yalnız bir an üçün gələn və Mənə bir şey üçün axtarış kömək edir? Çox, çox aşağı düyməsini basın. Heç kimsə bəlkə də, əvvəl gəlib. OLDU. Evet? Hadi. Aşağı gəlir. Sənin adın nədir? SAM: Sam. DAVID J. MALAN: Sam, aşağı gəlir. Bu eyni. Görüşmək Nice. Hey. Üzərində gəlib. Belə ki, bütün Mən sizə, əgər nə etmək lazımdır Siz Sam, burada Google var bilər. Siz müddəti recursion üçün axtarış edə bilərsiniz? Korlamaq deyil. İndi Bəli Let. OK ki, basın. Better ki, basın. Ahh, onu almaq. Yox? OLDU. Belə ki, bir neçə başqaları edək. Əlaqədar çox deyil akademik burada, ancaq var Heç anagram Google axtarış? SAM: Xeyr DAVID J. MALAN: OK. Anagram yerinə recursion axtar. Necə əyri haqqında. Əgər əyri üçün axtarış? İndi, bu bir az çətindir görmək, lakin ümid OK everything's--. Bu yalnız və mənə bu zövq deyil. OLDU. Belə ki, nəhayət, bu one's-- bir az əyri var. İndi barrel roll etmək. Wonderful. Oldu. Big Sam təşəkkür edirəm. Buyurunuz. Thanks. Belə ki, nə bütün olur bu silly nümunələri? Belə ki, həqiqətən, başlıq altında Kodu xətləri Google milyonlarla yəqin bir neçə silly mahiyyətcə şərtləri istifadəçi var, əgər yoxlanılması bu söz Yığdığınız, yəqin ki, bir şey etdi bir zaman nontrivial məbləği yalnız həyata keçirmək üçün bu şəkildə əyləncəli ola bilər. Lakin bu sonunda bütün başlıq altında aşağı. Lakin, əlbəttə, recursion geekier daha çox xüsusi tövsiyələr arasında nümunəsidir. Şübhəsiz ki, orada başqaları orada var həm də bəlkə var ki, hətta yalnız hələ aşkar. Belə ki, bir nəzər, və ya hesab indi aşağıdakı proqram, və əlbəttə ki, hər hansı bir işğalçı Yol həyata bu. Mən irəli getmək üçün gedirəm və bir proqram açmaq iki dəyərlər dəyişdirmək üçün cəhd edir. Biz orada getmək əvvəl Lakin, bunu edək. Biz bir daha əldə edə bilər könüllü, mən hesab edirəm? Siz könüllü istəyirsiniz? Yox? Qədər gəlib. Qədər gəlib. Oldu. Belə ki, adı nədir? LAUREN: Lauren. DAVID J. MALAN: Lauren. Qədər Lauren gəlib. Belə ki, Lauren olunur İşdə meydan oxudu. Görüşmək Nice. Belə ki, Lauren burada qarşısında var onun iki boş fincan. Və biz bir portağal var suyu və bəzi süd və biz getmək olacaq irəli və aşağıdakı. Biz yalnız bu doldurmaq olacaq. Burada süd bir neçə ounces və edək burada bir az portağal şirəsi doldurun. Və bütün qarşısında Bu tamaşaçı üzvləri, bu fincan iki dəyərlər dəyişdirmək. Süd fincan portağal suyu qoyun və portağal şirəsi fincan süd. Siz əgər siz bunu necə ev və digər təchizat çıxışı var? LAUREN: bir fincan qoyun. DAVID J. MALAN: OK. Belə ki, müvəqqəti edək dəyişən, biz əgər. İndi irəli getmək və həyata keçirilməsi eyni dəyişdirmə qaydası. Çox yaxşı. Biz müvəqqəti daxil OJ gətirdik dəyişən, OJ dəyişən süd, və indi müvəqqəti dəyişən süd dəyişən. OLDU. Belə ki, çox yaxşı bu günə qədər. Belə ki, keçirilməsi çıxır Yalnız bir an düşündüm. Burada yalnız bir az onu turk, bu müvafiq C kodu olardı biz yalnız həyata ki. Biz iki giriş, A və B həm idi olan biz yalnız var sadəlik üçün demək lazımdır int var. Mən dəyişdirmək istəyirsinizsə, burada qeyd iki dəyişənlərin, A və B dəyərləri, Biz həqiqətən bir komisyoncu lazımdır, bir müvəqqəti dəyişən müvəqqəti fincan, hansı the dəyərlərindən biri tökmək ki, biz bunun üçün tutucu var. Amma sonra code dəqiq deyil Lauren burada həyata keçirilir. İndi, yalnız bir almaq üçün az crazier, çıxır Siz olmadan bunu edə bilərsiniz ki, müvəqqəti dəyişən. Baxmayaraq ki, biz gedirik düzgün Bunu etmək üçün bir kimya ilə istifadə etmək üçün. Biz burada bəzi əlavə fincan var. Belə ki, ən yaxın bir şeydir ki, görünür süd və su, bəlkə kimi və ya süd və OJ-- biz bəzi var su, belə ki, biz bu doldurmaq lazımdır təmiz su bir neçə unsiya ilə. Bu çox yəqin ki, var. Bəli. Bu çox mütləq var. Bir Saniyə tutun. İndi biz Mən xatırlayıram kimi, neft var orta məktəb kimya sinif, Ümid edirəm ki, su ilə qarışdırılır deyil. Amma bu cür sort süd və OJ kimi görünür. Indi, istifadə etmədən müvəqqəti dəyişən, bu iki dəyərlər dəyişdirmək olar? Su fincan gider yağları So su neft fincan gider. LAUREN: No digər fincan? DAVID J. MALAN: No digər fincan. Mən həqiqətən var Bu ilin əvvəl bu test bu iradə, əgər mən bilmirəm həqiqətən kimyəvi çalışır. Bu baş ehtimal deyil. Bu iş? Oldu. Belə ki, ayıran? Yaxşı. İndi biz almaq üçün var digər fincan su. Smarter kimya soğutucular bilər yəqin ki, məndən daha yaxşı bunu. LAUREN: Su altındakı var. DAVID J. MALAN: idi water-- biz bunu son dəfə əsas var. Siz sağ üçün bunu etmək lazımdır. Bəli. Hər şey yaxşıdır. Belə ki, indi biz neft iki fincan var. OLDU. Hər şey yaxşıdır. Amma bu istisna olmaqla, mən çox işləyib kimyəvi əgər LAUREN: Bu su. DAVID J. MALAN: Bu əsasən su var. Oldu. Lakin hələ də əvvəlki kimi eyni kubokda var. Belə ki, pseudocode orada cəhd tökülür. OLDU. Bu sinif zaman yaxşı istifadə bu gün. OLDU. Belə ki, indi gözəl we--. Sort. Oldu. Belə ki, çox yaxşı. Lauren təşəkkür edirəm. Çox yaxşı. Belə ki, yalnız sizin şüurunda zərbə və bu, bəlkə bir şey deyil Siz CS50 ID kimi, əgər ilə oynamaq, Siz, əslində, iki dəyişənlərin dəyişdirmək olar müvəqqəti tam istifadə etmədən. Bu müvafiq C kodu. Və son geri əgər Çərşənbə, biz, əgər qısa təqdim C. Və nə bəzi yeni operatorları Hər kəs nə az kök geri simvolu az üçbucaq var klaviatura rəmzi təmsil? Nə bitwise operator? Auditoriya: EXOR. DAVID J. MALAN: EXOR. Exclusive ya. Yalnız əyləncə üçün, istəyirəm əgər ev, bir və b iki ixtiyari vermək Hər hansı bir eight-- və mən kimi dəyərləri səkkiz bit dəyər seçsin. 32 bit bunu əgər, çox tez cansıxıcı almaq lazımdır. Amma yalnız bir səkkiz az vermək bir və ya iki hər hansı dəyəri, və oxşar dəyəri b verir. Və sonra müəyyən istifadə son Çərşənbə XOR ki, , bit hər ki, bit müraciət bir və b hər olanlar səkkiz bit, və sonra bu kodu başına dəqiq bunu. Və bu səhv deyil nə Siz ekranda burada bax. Bu, həqiqətən sonunda aşağı üç XOR əməliyyatları və elə magically bir və b mövqelərini mübadiləsi edəcək hər hansı bir məlumat itirmədən. Belə ki, neft və su oyun deyil yaxın real dünya təcəssüm Hesab edirəm ki, taklit üçün hesab edə bilər. Amma bu mütləq asandır müvəqqəti dəyişən istifadə, burada bu halda kimi. Və bu da bir fürsət, demək ki, də mikro optimallaşdırılması bu cür, kompüter alim kimi demək olardı isə əyləncə növü Siz olmadan bu necə haqqında lovğalanmaq üçün əlavə dəyişən dəyişdirmə kimi, Bu bütün çekici deyil. 32 bit, kimi saxlamaq üçün, çünki faktiki int halda, bütün çekici deyil sistemi harada Siz megabayt onlarla istifadə edilə bilər və ya daha çox yaddaş bu gün. Və əslində, biz zaman almaq daha sonra problem dəsti və yazım həyata checker və lazımdır belə ilə etiraz Bu az RAM və az mümkün vaxt hələ kompüter üçün həyata keçirilməsi üçün bir həftə var Siz olacaq yaxşıdır lazımdır pseudocode bu resursları minimuma endirmək üçün etiraz. Və həqiqətən, yalnız var Bu dövr münasibətilə Siz qırxmaq üçün təşviq lazımdır hətta ən yaxşı performans off başqa edir. Belə ki, biz necə edə bilər what-- Bu faktiki kodu görmək? Mənə indi davam edək və nümunə açmaq ki, qəsdən adlanır No Swap bu deyil, çünki Əslində dəyişənlərin dəyişdirmək Siz, həqiqətən, gözləyə bilər. Belə ki, bir nəzər salaq. Burada heç bir CS50 var bir proqram kitabxana, yalnız standart I / O gedir. İndi biz bir prototip var üst qədər svop üçün olan yalnız sonra müəyyən var deməkdir. Və burada əsas var. Mən özbaşına x və y təyin, müvafiq olaraq, dəyərlər bir və iki yalnız onlar kiçik istəyirik, çünki və asan düşünmək. Və sonra mən yalnız printfs bir dəstə var Mən ağlı başında olma çek olduğu. x 1 və y 2 ehtimalla edir o printfs demək nə. Belə ki, heç bir sehrli indiyə qədər. Sonra mən iddia gedirəm dot dot dot dəyişdirmə, def çap. Mən mübadilə zəng etmək üçün gedirəm funksiyası, x və y keçən. Və indi ki, güman edək swap dəqiq həyata keçirilir bir an əvvəl olduğu kimi müvəqqəti dəyişən. Və mən cəsarətlə iddia dəyişdirildikdə. x bu və y indi ki indi. Amma fayl, əlbəttə, No Swap adlanır. Belə ki, həqiqətən nə görmək edək. Mən heç bir mübadilə və tərtib əgər ./noswap etmək, x 1, y 2-dir. Dəyişdirildikdə dəyişdirmə. x y 2, 1. Belə ki, həqiqətən, hətta qüsurlu görünür svop baxmayaraq, indi aşağı diyirləyin edək başına dəqiq həyata keçirilir code Mən bir an əvvəl təklif edib. Beləliklə, biz xülya almaq fikrində deyilik İndi XOR məhsulları ilə. Bu da yalnız işləməlidir süd və OJ ilə kimi, lakin bu iş görünmür. Belə ki, bir daha bunu edək. Bəlkə yalnız sağ çalışan deyil. Belə ki, yenidən No Swap run edək. Bəlkə istisna olmaqla, mən yox. Belə ki, yalnız iş deyil. Belə ki, bir az ağlı başında olma çek bunu bildirin. Mənə Swap burada davam edək və yalnız əlavə bir dəqiqə gözləyin, bir% i / n və edək plug-in bir dəyəri. Mən, həqiqətən, istəyirəm, çünki neler görmək. Həqiqətən, bu bir ayıklama texnika Siz istifadə edilə bilər ki, ofis saat və ya artıq evdə, Dan ilk yarısında yaxın Pset3 da Armendariz video biz çap təqdim çıxdığı kimi def ən azı bir tövsiyə texnika sadə hallarda. Mənə davam və etmək run edək daha heç bir svop, ./noswap. Maraqlı. Belə ki, doğru olmaq görünür nə görürsünüz. x 1, y 2, lakin b 1 bir 2-dir. Belə ki, bu iki birtəhər dəyişdirildikdə oldu lakin x və y dəyişdirildikdə əldə deyil. Belə ki, nə baş, aydın olmaq qədər burada x və y edir və həmin yerli dəyişənlər var Əsas daxilində, mən x və y keçən alıram dəyişdirmək üçün. İndi, svop, ayrı-ayrı funksiyası kimi, onun dəlilləri zəng etmək pulsuzdur və ya onun parametrləri bir şey istəyir. Foo x və ya y və ya bir və ya b və ya bar və ya. Məhz onlar olduğunu aydın etmək x eyni deyil və y özlüyündə, Mən A və B bildirib etdik. Amma biz onlara biz istədiyiniz bir şey zəng edə bilər. Və belə kimi görünür swap qəbul olunur x-- AKA a-- və bu y-- AKA b qəbul olunur. Elə bu üç xətləri var məhz bu dəyərləri dəyişdirmə Lauren süd və OJ ilə etdi. Amma biz çap zaman dəyərlər, bir və b dəyişdirmək həqiqətən, lakin x və y onlara heç bir dəyişiklik yoxdur. Ki, x və y burada qədər xatırlayıram. Beləliklə, biz vasitəsilə bu edə bilərsiniz eləcə də digər texnika. Və bu da bir texnikadır problemi ilə əlaqədar üç seçin. Nin irəli gedək və bunu CS50 ID Əgər siz artıq yoxdur, əgər. Sağ tərəfdən biz bu Debugger nişanı var. Və bu qədər açmaq əgər, bəzi gizli məlumat yoxdur ki, ilkin sizə atılan oldu. Amma real sürətli bu ayrı tease bildirin. Belə ki, bir, yerli dəyişənlərin görmək. CS50 IDE qurmaq çıxır ki, və proqramlaşdırma mühit daha çox ümumiyyətlə, bir ayıklama edir. Vizual görmək üçün imkan verir bir vasitədir nə proqramı daxilində gedən əlavə müraciət etmədən printfs və tərtib və çalışan və printf nin əlavə və tərtib və ofis saat olan artıq çalışan və ya ev, yəqin ki, olduqca yorucu olur. Belə ki, burada, yalnız bir an, biz istəyirik real vaxt görmək üçün gedir Bizim yerli dəyişənlərin dəyərləri. Biz də müəyyən edə olacaq breakpoints adlanır nə olan imkanlar fasilə mənim proqram var kod xüsusi xəttində icra Mən maraqlı deyiləm ki. Sağ? Bu proqramlar bir split ikinci axır. Bu, bizim yavaş insanlar üçün cür gözəl , fasilə bir an etmək imkanına malik olmaq üçün, bax ətrafında nə olub kodu müəyyən line proqram şum olmadan vasitəsilə və tamamilə başa. Belə ki, bir breakpoints bizə imkan gedir qırmaq və müəyyən bir nöqtədə fasilə. Call yığını bir xülya yoldur funksiyaları hazırda nə söyləyərək hazırda adlanan. Main həmişə birinci adlanır. Amma Main çağırır əgər Swap adlı funksiyası, biz, həqiqətən, bu görmək olacaq olmuşdur funksiyaları qala əks xronoloji qaydada çağırıb. Belə ki, görək. Mən kiçiltmək gedirəm. Mən mənim kodu geri getmək üçün gedirəm. Və yalnız mən istəyirəm, çünki burada xırdaçı olmaq, Mən irəli getmək və basın gedirəm yalnız xəttinin beş sol. Və bir qırmızı dot yaradır. Və sağ tərəfində qeyd ayıklama hey, bilir ki, Mən yalnız bildirib ki, bir breakpoint da noswap.c line beş, xüsusi kodu bu xətt. Belə ki, ayıklama ki, mən bilir növbəti dəfə ki, tələb Mən proqram fasilə run orada deyil, yalnız icra super sürətli bütün şey çalışır. Belə ki, indi debug basın gedirəm IDE çox üst düyməsini və aşağıdakı etmək olacaq. Bu ilkin qədər bir açıq olacaq qorxudan axtarır ikinci terminal pəncərə Uzaqdan ayıklama Belə keçiriləcək və such-- və biz geri gəlmək lazımdır nə bütün uzun əvvəl deməkdir. Amma indi üçün vacibdir nə qırmızı dot çarpdı ki, ayıklama qəsdən var execution-- durdurulmuş Biz se başına ki, line, lakin ilk ki, funksiyası faktiki kodu line. Line yeddi ki, var İndi sarı qeyd. Və indi bir nəzər salaq sağ tərəfində. Bu default kimi görünür, gözəl kifayət qədər x nə dəyəri var? 0. Və y nə dəyəri var? Zero. Və mənada gözlənilən deyil ki, x və sarı xətt var ki, y-- hələ icra. Belə ki, x dəyəri 1 olmamalıdır. Hər hansı digər dəyəri ola bilər, bir qondarma zibil dəyəri. Və biz bu ki, uğurlu var mahiyyətcə bu nöqtədə sıfır. Belə ki, indi yalnız bir neçə var düymələri biz qayğı lazımdır bu şəkildə ayıklama zaman haqqında. Burada qeyd, bir Play düyməsinə var. Və biz oynamaq və ya hit ki, yalnız var, davam axır gedir Proqramın qalan və ya başqa bir breakpoint xit qədər. Amma hər hansı digər müəyyən etdik breakpoints belə ki, yalnız var sonuna axır gedir. Məğlubiyyət belə ətrafında poking məqsədi. Belə ki, əvəzinə, mən qayğı sağ bu nişanlar. Mən artıq hover əgər Onlara kimi, çox olmalıdır Siz az tips-- alət məsləhətlər görəcəksiniz. Bu artıq addımdır. İndi skip demək deyil aşağıdakı kod line. Bu yalnız onu icra deməkdir və növbəti hərəkət növbəti hərəkət, növbəti hərəkət. Başqa sözlə, via düyməsini, mən gəzmək olar bir zamanda mənim kodu bir addım vasitəsilə. Sözün xətti ilə line. İndi sağ üçün başqa bir var ki, biz yalnız bir anda görəcəksiniz ki. Bu qondarma deyil Icon Into Step Mənə dive imkan gedir başqa funksiyası daxil. Amma yalnız bir anda bu görək. Belə ki, artıq addım basın gedirəm. Mən basın kimi İndi, qeyd sağ üst bu düyməni, Yerli altında təxminən gözlerini saxlamaq Dəyişənlər və x nə görmək. x indi 1 sarı xətt indi edam etdi və biz line 8 köçürülüb etdik. Və yalnız bir an y inşallah 2 olmalıdır. İndi heç bir şey maraqlı ki, bir az olur. Bütün bu printf edir. Və orta terminal qeyd pəncərə, mən çap def çıxış oldu. İndi bir etmək lazımdır proqramçı kimi qərar. Mən bu xətti üzərində addım bilər indeksi, onu həyata deyil daxili ne merak alıram. Yoxsa mən həqiqətən onu addım bilər və Swap özü daxilində gedin. Belə ki, sonuncu nə edək. Mənə davam və basın edək Biz gəl amma addım. Notice, qəflətən pəncərə dəyişikliklər ilk vurğulamaq üçün Swap kod line. Ki, xətt 21 var. İndi, funky cür ki, nə var, Burada üzərində baxmaq əgər, gözlənildiyi kimi bir vergül b müvafiq olaraq 1 və 2, edir. Niyə temp 32.767 edir? Çox kimi ki, temp xatırladaraq bir an əvvəl boş fincan, line 21 burada elan edilir. Mən demək Niyə 32,000-, nə Bu yalnız bir qəribə dəyəri? Evet? Auditoriya: Bu başlatılmış deyil. DAVID J. MALAN: Bu başlatılmadı deyil. Belə ki, bizim kompüter həmişə fiziki yaddaş var. O, həmişə fiziki RAM var. Və həmişə var sıfır və bir doğru var var? Biz istifadə edirik, çünki bizim uzun bütün gün kompüter, Siz CS50 IDE istifadə etdiyiniz və ya server bütün gün uzun. Ki, RAM bəzi adet sıfır var, belə ki, ya bəzi və ya bir adet sıfır və olanları. Olursa olsun və ya Əgər siz onları istifadə etdiyiniz deyil. Siz yalnız boş ola bilməz fəzalarında harada bit istəyirəm. Onlar adet sıfır və olanları bilərsiniz istəyirik. Belə ki, çünki temp çıxır biz hələ başlatılmış etdik biz bu 32 bit var, lakin onlar var hər hansı tanınmış dəyərləri başlatılmış edilmişdir. Belə ki, onlar nə ən Bu yaxınlarda o 32 bits-- baxan mýsýn istifadə biz yalnız bəzi əsərlər gördükdə xüsusilə 32 əvvəlki istifadə bit. Kimi tezliklə Mən də gəl basın kimi, phew, temp, dəyəri 1 almaq üçün gedir. Mən bir daha bunu əgər, bir var dəyəri 2 veriləcək gedərək və sonra b gedir dəyəri 1 veriləcək. Və nə indi gözəl hekayə bu nöqtədə ayıklama ki, super yavaş-yavaş, mənə göstərən öz sürətlə, nə Swap dövlətdir. Amma burada üst bildiriş qeyd ki, həqiqətən zəng yığın bu iki qat var. Kimi qeyd Indi bir Swap, mən əvəzinə Main basın əgər, yerli dəyişənlərin dəyişdirmək necə görürsünüz geliştirici yalnız hop bilər, çünki ətrafında və hər hansı bir müxtəlif çərçivəsində daxil. Biz bütün bu edirik Belə ki, baxmayaraq ki, iş və düzgün və b dəyişdirmə, Mən Swap arasında geri və irəli getmək əgər 2 və b 1 və əsas olduğu, Main bütün təsir etdi? Yox. Belə ki, paket, burada nə var? Bəli, bu hər hansı bir zamanda çıxır ki, Siz Swap kimi bir funksiyası zəng və bunu dəlilləri keçmək nə Siz Swap funksiyası keçən edirik Bu halda bir surəti həmin dəlilləri. Belə ki, x və y müvafiq olaraq hər bir, əgər 32 bit, nə Swap olur iki yeni yerli Dəyişənlər, və ya dəlilləri, adlı və b-- lakin o ixtiyari var names-- lakin adet sıfır model və daxilində və b olanlardır up astarlı x və y eyni olmaq lakin onlar deyil x və y kimi eyni şey. Main onun parça var sanki bu kağız 1 və x və y 2, və bu əlləri sonra zaman kağız parçası Swap, Swap çox tez olur öz qələm, yazır 1 və kağız öz hesabatında 2, əlləri Əsas orijinal XY geri və sonra öz yoxdur A və B ilə bir şey. Bu indi super vacibdir Bu nontrivial təsir göstərir həqiqətən doğru kodu yazmaq üçün Bu, görünür, çünki biz dəyişdirmək bilməz iki dəyişənlərin. Mən düzgün Swap funksiyası yazıblar. Biz Lauren ilə həyata etdik əslində düzgün svop funksiyası, lakin yəqin heç məsələləri əgər həqiqətən bilməz daimi iki dəyərlər dəyişdirmək. Beləliklə, biz bir yol lazımdır həqiqətən bu almaq üçün, və biz lazımdır həqiqətən bu problem həll edir. Və çıxır və biz gəlmək lazımdır geri bu şəkil long-- əvvəl bu bir yoldur ki, Siz kompüter yaddaş cəlb edə bilər. Bu, sadəcə bir düzbucaqlı var. Siz hər hansı bir onu cəlb edə bilər yollarla, lakin bu sayı bir kimi çəkmək üçün rahat Aşağıdakı səbəbə görə düzbucaqlı. Biz kənarda gün başlamaq və olacaq sözdə yığını haqqında söhbət. Və yığını yalnız bir yığın edir bir yaddaş yığın RAM-- funksiyaları imkanı var ki onlar adlı edirik zaman. Və belə ki, çıxır Bu yığını çox aşağı Əsas yerli dəyişənlərin bütün harada org C və org V və bütün stuff və ismarıcları getmək üçün gedir. Və əsas əgər , Swap kimi bəzi digər funksiyası çağırır yaxşı, Swap başqa almaq üçün gedir yuxarıda yaddaş up qat. Və belə ki, yalnız bir sürətli ötəri vermək Bu şəkil, mən artıq getmək əgər burada və mənə bu güzgü imkan yerüstü kimi, həqiqətən, Mən nə well--, biz yalnız qayğı əgər indi bu şəkil alt, ki, bir proqram çalıştırdığınızda və əsas adlı olur Main bir yığın verilir Mənim kompüter RAM bu qondarma yığını altında. Mən onu cəlb gedirəm qəsdən bir kvadrat kimi. Belə ki, 32 bit və ya dörd bayt kimi. Bu əsas funksiyası var, əgər bir 1 dəyəri ilə dəyişən adlı x və adlı dəyişən var 2 dəyəri y, ki yaddaş bu qəlpə alaraq kimi ki, Main əməliyyat tərəfindən verilmişdir sistemi və onu qədər bölünməsi ilk yerli dəyişən, burada gedir ikinci burada gedir, və bu. Main Swap, Swap çağırır zaman yaddaş öz dilim alır Biz bu kimi çəkmək lazımdır ki, əməliyyat sistemi, və var olacaq onun öz yerli dəyişənlərin əsasında bizim həyata keçirilməsi üzrə əvvəllər yerli dəyişənlərin ilə ilkin və b ki, dəyərləri 1 və 2 almaq. Amma sonra, qısa müddətdə Swap indeksi, icra və Lauren həqiqətən svopları OJ və süd, nələr olur? Bəli, bu 2 1, bu çevrilir 1, yolu ilə, 2 çevrilir və olan olan bir temp dəyişən var ki, nəhayət ki, bütün vaxt istifadə üz gedir. Amma etməz nə qədər iş nə bu xətt Bu yaddaş məkanda of-- da, x və y tamamilə bakir var. Beləliklə, biz verilməsi bir yol lazımdır Bu kimi Swap və funksiyaları gizli giriş, Siz, üçün funksiyaları x və y kimi xatirəsini like--. Belə ki, bir nəzər salaq kömək nümunə Bizə oldu dəqiq nə Bu bütün zaman olur. Mən irəli getmək üçün gedirəm və açmaq Zero müqayisə. Mən yaxın gedirəm Bizim ayıklama, mən gedirəm Bu qorxudan axtarır mesajı bağlamaq üçün yalnız bir dəqiqə gözləyin deyir, Siz orta ayıklama istəyirik. Mən burada bu nişanı gizlətmək gedirəm yalnız geri sadəlik getmək üçün. GDB həlak Belə ki, narahat olmayın. Yalnız Proqram o deməkdir ki, qəsdən bu halda, çıxın edilmişdir, Mənim tərəfimdən. İndi Zero bu yoxdur karşılaştırın. Mən CS50 istifadə edirəm standart I / O kitabxana. Mən ilk əsas funksiyası var deyir, bir şey demək, və simli olur. Sonra deyir başqa simli olur. Və bu iki strings qeyd müvafiq olaraq, s və t deyilir. İndi bu proqram, müqayisə Zero, həyat onun məqsədi, Bu mənə ehtimal, Mən eyni şey yazın idi? Və mən həftə bir geri gedirəm. Mən bərabər bərabər operator istifadə edirəm olan keyfiyyətli operatorudur. Not tapşırıq operator, bərabərlik operator. Mən yalnız s və t müqayisə edirəm. Belə ki, faktiki olaraq irəli getmək və bunu bildirin. Mən irəli getmək üçün gedirəm və sıfır müqayisə etmək. Mən ./comparezero gedirəm. Mən getmək üçün gedirəm irəli və bir şey demək kimi, bu kiçik ana edək və necə Böyük Harf ilə ana haqqında. Və əlbəttə ki, müxtəlif şeylər yazın. Oldu. Ki gözlənilən deyil. Yenidən run edək. Iki dəfə, kiçik kiçik etmək. Ki, mənə super eyni görünür. Daxil edin. OLDU. Bəlkə çünki yalnız qəribə mənim qrammatika simpatiya deyil. Belə ki, kapital MOM edək, kapital MOM, eyni. Müxtəlif şeylər. Belə ki, niyə ki? Yaxşı, həqiqətən nə olacaq burada başlıq altında? Belə ki, üzərində geri gedək Burada yalnız bir an üçün və nə hesab GetString həqiqətən edir. Siz GetString zəng zaman, ki, bir funksiyası biz var özümüz yazıb və elə bir olur istifadəçi simvol ardıcıllığı. Və ilk ki, güman edək dəfə GetString zəng ki, mənə verir yaddaş yığın ki, bu kimi görünür. Mən bütün kiçik çap əgər m-o-m-- və nə ondan sonra gedir? Just tez ağlı başında olma çek. Backslash sıfır. Biz bilirik. Və biz oynayıb geri ətrafında Zamila adı ilə və digər adları bir dəstə zaman Rob burada axtarır yaddaş daxilində neler edir. Belə ki, hekayə eyni deyil. Bu nədir GetString Mənə qayıdır. İndi mənim kodu bir an əvvəl saxlanılır GetString qaytarılması dəyəri bir dəyişən s çağırıb. Və sonra ikinci dəfə çağırıb, bir dəyişən adlı t onu saxlanılır. Mən burada artıq getmək əgər Belə ki, mən lazım bu yerli dəyişən çəkmək üçün Mən ümumiyyətlə gedirəm izlersin alacağıq kimi bir simli çəkmək burada bir az kvadrat kimi s-- zəng. Ana nə necə və indi birtəhər bu dəyişən s daxili getmək? Yaxşı, biz geri getmək lazımdır Burada ilk prinsiplərinə. GetString həqiqətən nə qayıdır? Belə ki, M-O-M çıxır backslash sıfır və hər hansı bir sayı kimi yaddaşında digər strings Zamila və Rob və ya Andy və ya hər hansı digər əlbəttə var bizim kompüter RAM və ya yaddaş. Və RAM var like-- var RAM konsert, RAM iki gigs, və ya bir milyard və ya iki milyard bytes, və ya bəlkə daha çox bu gün. Belə ki, bu gün məqsədlər üçün, güman edək, biz sayı necə etməz ki, onlara, lakin biz hər saya bilər o milyard iki milyard və ya dörd milyard bytes. Və yalnız özbaşına ki, bildirin Bu ilk bite, ikinci bite, üçüncü, dördüncü. Mən qəsdən üçün sıfır istifadə deyiləm Bu gün amma geri gəlmək lazımdır. Belə ki, başqa sözlə, bu, əgər ilk dəfə, proqram istifadə edirəm Mən yalnız xoşbəxt və ilk alıram bite sonra yer birində iki sonra üç dörd. Mən rəsm saxlanılır əgər, qutusu sayı iki milyard yol üzərində burada olacaq. Belə ki, sonra nə düşünürsünüz, GetString həqiqətən qaytarır? Bu M-O-M backslash qaytarılması deyil sıfır özlüyündə aydın, çünki Mən tərtib etdik qutusuna uyğun deyil. Belə ki, həqiqətən, başqa nə GetString bilər Bütün bu həftə qaytarılması? Cavab deyil board burada haradasa. Siz M-O-M backslash sıfır uyğun bilməz belə nə əvəzinə mənada edə bilər? Siz qoyaraq, super ağıllı olmaq olsaydı qondarma mühəndis papaq, Siz nə qayıtmaq bilər? Nə informasiya ən az məbləği Siz hələ ki ki, qayıtmaq bilər Siz yaddaş M-O-M tapmaq imkan? Evet? Auditoriya: biri. DAVID J. MALAN: biri. Və niyə bir? Auditoriya: demək istəyirəm, çünki siz [işitilemez] getmək üçün. DAVID J. MALAN: Exactly. Mən yalnız ünvan qayıtmaq üçün gedirəm Mən kazanılmış simli. Bu ünvan hal yeri biridir. Beləliklə, nə həqiqətən s-- saxlanılır olunur və hər string dəyişən beləliklə far-- yalnız olmuşdur ki, simli ünvanı. Eyni zamanda, mən zəng əgər Ikinci dəfə və mən GetString sanki eyni şey yazın Lowercase-- M-O-M M-O-M və başqa backslash sıfır, və indi bəlkə mənim proqramın bir müddət belə ki, bəlkə bu çalışan edilmişdir 10, bu, bu 12, yer 11 Bu 13. bəzi digər istifadə kompüter hər hansı səbəbdən yaddaş. İndi mənim ikinci gedir mənim proqram t dəyişən? 10. Məhz. Və belə ki, biz baxdığımız zaman Bu proqramın mənbə kodu Mən sadəcə çalışıram iki dəyərlər müqayisə etmək, t bərabər bərabər deyil, nə Aşkar insan cavab? 1 10 bərabər deyil, yalnız heç bir çünki. Və belə Burada bir yalan bizim üçün fürsət həqiqətən yalnız ilk yenidən getmək prinsipləri və düşünmək, nə başlıq altında olur? Biz söhbət etdik bit və bytes və yaddaş, lakin bu, anlamaq üçün həqiqətən faydalı Siz GetString zəng çünki, biz hesab baxmayaraq ki, bu M-O-M və ya string ana qaytarılması və ya Andy və ya Zamila və ya kimi, texniki yalnız ünvan qaytarılması yaddaş ki, yığın. Amma ki, OK. Mən necə bilmirəm, çünki string harada bitir? Mən yalnız başlanğıcı verilmiş alıram? Yaxşı, backslash sıfır, sağ? Just mən xətti vaxt print def M-O-M çap. Və tezliklə mən backslash bax Mən başladı sıfır, mən qayğı yoxdur Mən artıq dolayısı bilirəm Mən son lazımdır. Və bu gün əvvəlinə qeyd və Mənə Çünki biz dramatik bunu bildirin narahatlıq bir çox yolu ilə getdi bu burada wheels-- təlim almaq bu gün təlim təkərlər başlamaq off gəlmək və biz aşkar lüğətdə [Alqış] Ki, səfər dəyər yaxşı idi Bəli, bu səhər Hədəf? Belə ki, indi var, bu çevrilir həyata, simli kimi bir şey. String yoxdur. Biz etdik bir sinonim var CS50 kitabxana daxilində. Bundan sonra da zəng başlamaq olacaq s və t deyil strings lakin char ulduz. Char ulduz və biz lazımdır uzun əvvəl ayrı tease. Amma bu demək deyil, davam, hətta ki, İndi GetString istifadə edərək, texniki I olmalıdır char ulduz və char ulduz deyərək olun. Və nə ulduz çıxır işarə gedir bir şey deyil bir göstərici və ya bir ünvan çağırıb. Və əslində, bir iltifat üçün irəli yalan nə Bu 20 ikinci clip edir bizim Stanford dost Nick Parlante kim çox bir müddət əvvəl sərf vaxt bir gülünc məbləği, yaxşı kimi mən deyə bilərəm onun mətbəx və ya onun zirzəmi, claymation edilməsi dünyaya tanıdan adlı bir xarakter Binky kimə biz göstəricilərinə növbəti dəfə təqdim olunacaq. Belə ki, burada gəlib nə bir önizleme var. [Video playback] -Hey, Binky. Uyan. Bu göstərici əyləncə üçün vaxt var. -Bu nədir? Göstəricilər haqqında məlumat əldə edin? Oh, goody. [END playback] DAVID J. MALAN: Və qeyd, biz Çərşənbə günü görəcəksiniz. Oldu. Dancing kim? Hadi. Dancing kim? Siz mənə başlamaq istəyirsiniz? Mən başlamaq lazımdır. Woooo! LAUREN: Sweet xülya Moses.