JASON Hirschhorn: Welcome A5, hər kəsin. Biz qarşımızda bir maraqlı həftə bir çox yeni var, çünki əsasən Bu otaqda üzləşir. Bu gözəl deyil. Siz bir çox qəza burada, hətta yaxşıdır. Belə ki, inşallah bizə qoşulmaq saxlamaq lazımdır. Bu həftə sərf etmək olacaq hissəsinin toplu viktorina üçün hazırlaşır. Gündemimizde başına Beləliklə, biz danışmaq olacaq sinfi üçün resursları haqqında bir az, həm də viktorina üçün, və sonra, yenə, sinif söhbət hissəsini sərf suallar. Biz cavab tamamlayın Sizin suallar, və ya əgər suallar təbii, bəzi kodlaşdırma bizə gətirib midterms nümunə problemləri var biz bölməsində canlı kod ki, keçmiş birlikdə də bəzi digər yetişdirmək ki, əhatə yaxşı mövzular. Belə ki, ilk, biz vasitəsilə getdi etdiyiniz kimi sizə xatırlatmaq həftə son bir neçə uşaqlar, ehtiyatların bir ton var Bu kurs üçün mövcuddur. Onların bir çoxu olduqca faydalı olacaq sizə davam kimi , viktorina 0 öyrənmək çünki bu çərşənbə axşamı günortadan sonra var. Belə ki, sizin hamınızı olmuşdur bir az oxuyur. Mühazirə qeydləri və mənbə var kodu lazımdır ki, mütləq kontrol. Şort baxın. Study.cs50.net oldu. Və sonra, bir nömrəli, aşağıdakı digər resursların. Yenə viktorina 0 sabah 1 saat. Əgər siz artıq yapmadıysanız varsa, yoxlamaq haqqında haqqında Quiz 0 sənədin anlamaq üçün kurs ana Siz viktorina alaraq olduğunuz. Viktorina 1:10 başlayır və 70 dəqiqə sonra başa çatır. Siz 1:10 sonra göstərmək Belə ki, siz ki, çox az dəqiqə almaq üçün gedir 70 viktorina almaq daha. Belə ki, siz vaxt orada etdiyiniz əmin olun. Siz uzadılması tələbə etdiyiniz və ya varsa digər test mülahizələr, bu 1 saat sabah ola bilər. Ancaq yenə də, haqqında Viktorina 0 yoxlamaq Siz zaman bilmək üçün sənəd Siz viktorina alaraq edirik. Mən burada 75 dəqiqə yazdı. Mən 70, doğru deyil düşünürəm. Bu həftə 0 bütün material əhatə edir Çərşənbə günü keçən həftə mühazirə. Və yenə bu viktorina üçün ki, başına sənəd, bir iki-tərəfli almaq və 8 Siz ki, kağız 11 hesabatı 1/2 viktorina ərzində qeydləri kimi istifadə etmək. Bir çox insanlar, insanların çoxu var əgər aşkar ki, vahid ən faydalı yolu viktorina üçün öyrənmək üçün bir iş hesabatı, bir etmək öz bir-sider. Belə ki, keçmiş olanları baxsaq keçmiş olanları gördük. Görmək üçün dostları üçün çata nə Əgər onlar haqqında qoyulması edirik. Amma hands-aşağı, siz ən yaxşı yoldur təhsil hər şey ilə getmək və nə olmalıdır və ya olmalıdır üçün yavaş-yavaş aşağı ki hesabatında aid deyil kağız, yalnız bir həqiqətən var, çünki Sizi əmin etmək üçün yararlı bir yol Siz hər şey keçir və edirik bu bir tanışlıq var. Çoxu, biz tapmaq baxmayaraq, onlar kağız hesabatı sağ oturan var viktorina onların yanında, müraciət etmir bu, yenə, çox, çünki məlumat keçir prosesi onları öyrənmək kömək etmişdir. Heç bir sualınız varmı viktorina 0 haqqında? Hamı var - Mən əlində bir şou etmək niyyətində deyiləm. Mind heç vaxt. Kim xahiş gedirdi öyrənilməsi başladı. Amma mən sizə etmək istəmirəm bütün əlləri qaldırmaq deyil. Mən belə kimi - bəli, Avi, davam. AVI: Nə faydalı bir şey ola bilər bir çağrı cihazı qoymaq? TƏLƏBƏ: Bu qədər var. JASON Hirschhorn: Siz almaq qərar istifadə etmək. Bir çağrı cihazı qoymaq üçün faydalı şeylər, Siz böyük Ç haqqında səhv əgər axtarışlar müxtəlif növ iş və növ, bir var ki, qoymaq lazımlı modabaz chart. Bu yolla, siz ki, xahiş edirik, əgər viktorina, siz cəhd və rəqəm ehtiyac yoxdur bu və ya uzunluğu vasitəsilə səbəbi. Siz yalnız aşağı kopyalaya bilərsiniz. Siz sınavlar keçmiş, bir çox baxsanız dəfə, vaxt suallara orada çalışan. Belə ki, bir yaxşı nümunə olacağını Sizin bir-çağrı cihazı qoymaq şey. Değilseniz, qoymaq üçün digər yaxşı şeylər bəyan necə haqqında səhv bir funksiyası və ya nə müxtəlif hissələri funksiyası bəyannamə yazmaq var ki, bir ümumi versiyası və sonra bəlkə bir nümunə. Göstəricilər haqqında səhv edirsinizsə, göstəricilərinə iş necə bir diagram yəqin ki, həqiqətən faydalı. Siz recursion, a haqqında səhv edirsinizsə orada recursive funksiyası nümunə də həqiqətən faydalı ola bilər. Ki, bir fikir verir? AVI: Siz anlamaq lazımdır kimi bütün tərtib prosesi, necə bütün işlər ki? JASON Hirschhorn: Hər şey ki, əhatə olunub bilər viktorina göstərilir. Suallar - amma yenə bəzi şeylər olacaq başqaları daha ağırlıqlı. Bəzi şeylər yenidən gəlmişəm və yenidən sinfində ildə mühazirə, və bölmə. Digər şeylər yoxdur ki, tez-tez gəlib. # Daxildir və bir çox söhbət etdik -L bir şey və nə o demək Tərtibi proses. Biz suvaşmaq, gdb haqqında çox söhbət etdik biz istifadə edən müxtəlif bayraqları zaman Biz bir şey tərtib və nə make15, misal üçün, həqiqətən deməkdir və həqiqətən edir. Biz haqqında çox danışmaq deyil hər bir addım Tərtibi proses. Biz hələ bu barədə söhbət etdik. Belə ki, hələ ki, bir şey var ilə tanış olmalıdır. Ancaq yenə də, biz fikrində deyilik - sinif daha tez-tez gəlib ki, hər şeyi daha gəlmək üçün daha çox ehtimal olunur tez-tez və daha çox ola viktorina ağırlıqlı. Cool. Viktorina 0 haqqında hər hansı digər suallar? OK, belə ki, mən bir siyahısını qoymaq board mövzular. Mən proqramı vasitəsilə getdi. Mən nəzərdən bölmə vasitəsilə getdi gəlmək üçün dünən gecə və bu slaydlar mövzular qeyri-tam siyahısı ilə biz CS50 günə qədər əhatə ki, və hər şeyi ki bilər viktorina görünür. Mən keçmək fikrində deyiləm Bu hər bir. Çox daha çox olardı biz indi daha çox vaxt. Amma inşallah JOG burada bu qədər qoymaq şeylər kimi yaddaş ki, may və ya sizinlə tanış ola bilər. Mən hissəsini sərf sevindim haqqında suallara cavab bölmə Bu mövzular, mövzular ki, burada əhatə olunmur. Biz yalançı kodu yaza bilərsiniz. Biz real kodunu yaza bilərsiniz təmin etmək üçün ki, - Mən sizin suala cavab və kömək edə bilər hamı əsaslı anlamaq bir Bu mövzular çox siz hiss edəcəyik gedən daxil hazırlanmış və rahat viktorina sabah. Belə ki, siyahısını oxumaq. Siz inşallah bölməsində gəlmişəm bəzi suallar həmçinin. Siz hazır olduğunuzda, əl qaldırmaq və biz açılmış olacaq. Unutmayın, suallar var, heç bir axmaq suallar var. Biz bir çox ki, eşitdim. Və siz sual, mən istəyən am , bir çox digər insanların, həm də bahis Burada oturan və seyr online həmçinin var. Belə ki, yalnız insanlar kömək edə bilər suallar. Marcus. MARCUS: yığın və arasında yığın, bir pre-ayrılan var kimi müəyyən ki, yaddaş faiz Bu yığını və ya yığın üçün? Və ya necə dəqiq ki, işi yoxdur? JASON Hirschhorn: Böyük sual. Mən bir az iz geri gedirəm. Hamı mu - burada vicdanlı olun. Mən qaldırmaq isteyen alıram bilirik sizin Sizin həmyaşıdları qarşısında əl. Amma hiss edən insanlar var yığını və yığın narahat və ki, artıq getmək istəyirəm və bu nə deməkdir? Əl əgər qaldırmaq - OK. Təşəkkür edirəm. Beləliklə, biz yığını üzərində getmək üçün gedən və edirik yığın həqiqətən tez və sonra Sizin suala cavab hərəkət. Biz təmsil bir qutusu həyata çəkmək əgər bilgisayarınızda yaddaş, bəzi nə Bu qutusuna getmək ki, hər şeyi? Main. A əsas funksiyası. Harada əsas getmək edir? TƏLƏBƏ: [işitilemez]. JASON Hirschhorn: Biz will əsas burada aşağı qoydu. Nə bu qutusuna gedir? TƏLƏBƏ: Siz zəng funksiyaları. JASON Hirschhorn: The funksiyaları biz zəng. Və onlar getmək yoxdur? TƏLƏBƏ: yığını. JASON Hirschhorn: Onlar yığını getmək. Beləliklə, biz bu zəng olacaq aşağı burada şey yığını. Və üst qədər, biz yığın var. Belə ki, yaddaş yalnız bu kimi bir qutusu deyil. Amma bu, həqiqətən olduqca oxşardır. Bu artıq qutuları bir çox olacaq və üzərində asılı olaraq necə böyük sizin kompüter və ya yaddaş nə qədər böyük. Quote-dırnağı bağlamaq "alt" da yığını deyil. Və çox şeylər var ki, yığını getmək. Və bu funksiyaları asılı sizin kodu var. Siz həmişə bir funksiyası var sizin kodu əsas adlı, belə bir həmişə var aşağı burada bölməsində əsas həsr yığın. Yığını Bu bölmələr yığını çərçivəsində deyilir. Başqa bir funksiyası zəng zaman, əsas demək bir ikili axtarış funksiyası çağırır, biz yığını bir çərçivə qoymaq. Daha konkret desək, biz gedir yaddaş yığın bağış bizim ikili axtarış yerli saxlamaq üçün kompüter dəyişənlərin və ikili run search kodu. Belə ki, biz ikili axtarış zəng. Yaddaş bu yığın, biz olacaq onun yerli dəyişənlərin saxlamaq üçün. Biz printf zənglər saxlamaq olacaq. Olur, olsun, ki, funksiyası orada saxlanılır gedir. Binary axtarış icra gedir. Bu icra başa gedir. C söz nədir ki nailliyyətin bir funksiyası olmalıdır ki, onun icrasını başa? TƏLƏBƏ: qayıt. JASON Hirschhorn: qayıt. Belə bir geri bəyanat görmək zaman, funksiyası bitir ki xit zaman. Belə ki, ikili axtarış onun qaytarılması təşkil edəcək. Yaddaş bu hissəsi mahiyyətcə edəcək qədər azad olunacaq. Və əsas geri icrası gedəcək. , Zəng edin idi yerdə Belə ki, əsas fasilə olacaq ikili axtarış, bəzi qaytarılması dəyəri almaq, və icrası davam edir. Bu yığını çərçivəsində getmək olacaq. Biz recursive funksiyası, zəng əgər özü üzərində çağırır ki, bir funksiyası və üzərində, biz əldə edə bilər - biz demək recursively ikili axtarış etdi. Biz ikili axtarış versiyası bir almaq bilər ikili axtarış iki, ikili axtarış üç, ikili axtarış dörd, ikili axtarış beş. Və sonra bu final ikili axtarış beş baza halda, və yığını təşkil edəcək çərçivəsində geri getmək və bağlanması davam edəcək biz əsas geri almaq qədər. Biz bir az recursion üzərində bilərsiniz. Değilseniz Lakin bütün bu, demək bir zamanda birdən çox funksiyaları zəng çox yığını olacaq yığını çərçivəsində. Yığın, digər tərəfdən, up burada funksiyaları üçün deyil, yerli dəyişənlərin üçün. Bu dinamik ayrılmış üçün dəyişənlər. Belə ki, bu ola bilər ki, dəyişənlər var əsas və ya bir ya başlatılmış əsas zənglər fəaliyyət göstərir. Yerdə sizin kodu, onlar başlatılmış bilər. Və dinamik başlamaq üçün ayrılan dəyişən. Biz C funksiyası nə istifadə edirsiniz? TƏLƏBƏ: Malloc. JASON Hirschhorn: Malloc. Siz malloc zəng. Siz yaddaş yer almaq. Və yaddaş ki, kosmik yığın edir. Və yaddaş ki, kosmik qalır siz pulsuz var zəng qədər. Belə ki, dinamik ayrılmış dəyişənlərin ilə yığın sizin kimi uzun üçün mövcud olacaq onlara mövcud istəyirəm, və onlar olacaq açıq-aydın sizin qədər getmək getmək üçün onlara demək. Siz bir funksiyası onları yarada bilərsiniz. Ki, funksiyasının stack çərçivəsində getmək olacaq. Amma dəyişən hələ mövcud olacaq yığın azad olunana qədər, potensial adlı funksiyası ilə ikili axtarış və ya nə. Belə ki, həmin yığın dəyişənlərin orada qalmaq kimi uzun istədiyiniz kimi üçün orada qalmaq. Və onlar burada qoyulur. Və sonra növbəti orada qoymaq olur. Onlar dolun, onlar siz pulsuz zəng qədər orada qalmaq. Və mahiyyətcə, yığın və yığını, , Marcus Sualıma bir-birinə qarşı bitir. Onlar bir-birinə daxil əgər, siz var bütün yaddaş istifadə edin kompüter və proqram çıxmaq edəcək Əgər hər hansı bir daha çox yaddaş yoxdur, çünki istifadə üçün sol. Onların arasında var potensial başqa şeylər. Amma bu əlbəttə daxilində sizin üçün ki, narahat ehtiyac yoxdur. Belə ki, cavab idi sizin suala. Bu barədə narahat olmayın. Amma bu uzun cavab idi. Bildiyiniz üçün lazım olan bütün edir yığın və yığını olacaq - bir alt başlayır. Yığını yoxdur. Yığın up var. Onlar bir-birinə yaxın olacaq. Onlar toxunmaq əgər, bir problem var. Siz yaddaş həyata qaçdım. Lakin, bilmədən əlavə olduğu onlar nə də saxlanılır olunur yığın və yığın. Curtis. CURTIS: onlar toqquşmaq zaman, ki, bir yığın daşqın? JASON Hirschhorn: onlar toqquşmaq zaman, ki, bir yığın daşqın deyil. A yığın daşqın fərqli bir sahədir Əgər istəyirsinizsə biz artıq getmək bilər. OK, biz bir az geri qayıtmaq lazımdır. TƏLƏBƏ: adlı söz nədir Onlar bir-birinə hit zaman, yığın və yığın? JASON Hirschhorn: İndi, haqqında narahat olmayın. Just bilirik - Mən suala cavab olacaq sinif sonra. Onlar bir-birinə daxil etsəniz, siz həyata qaçdım heç bir daha çox var yaddaş, çünki kosmik. TƏLƏBƏ: Bağışlayın, bir seg günah nədir? JASON Hirschhorn: A segment günah üçün adlandırmaq olar - seqmentlərin günahı deyilir niyə bu asılıdır. Bəzən, sizin yığını daşqın, bu will seg səhv kimi günah deyirlər. TƏLƏBƏ: Nə dereferencing haqqında bir null dəyişən? Ki, bir seg günah? JASON Hirschhorn: Dereferencing bir null pointer - OK, belə ki, bir göstərici varsa null bərabər müəyyən göstəricilər, geri, mağaza yaddaş ünvanları onların dəyərləri kimi. Və null göstərici mahiyyətcə 0 saxlanılması, 0-ci dəyişən müraciət. Belə ki 0x, 0, 0, 0, 0, et Cetera. Deyil ki, yaddaş ki, 0-ci ünvanı bizim şəkil ki, up var haradasa, qorunur edir kompüter üçün. Biz bunu toxunmaq icazə deyilik. Belə ki, proqram həyata zaman, əgər bir şey xatirəsinə getmək üçün çalışır ünvanı 0, o bilir ki, ki, bir boş dəyəri. Bu heç bir şey olmalıdır bilir. Belə ki, orada bir şey cəhd və istifadə əgər kimi bir şey var müalicə və ya ki, yeri getmək üçün çalışırıq, siz San günah və ya səhv almaq üçün gedir. Ki, sual cavab verirmi? Və indi biz geri getmək lazımdır daşqın yığın. Sizlərin kimi yığını Things, əvvəl görüldü - bir yaxın çəkmək imkan bir yığın çərçivəsində up. Hamı görmək edə bilərəmmi? Belə ki, biz yığını çərçivəsində var. Biz yerli kimi bir sıra qənaət edirik bu funksiyası dəyişən. Belə ki, bizim array beş ləkələr var deyirlər. O bütün beş saxlanılır ki yığını çərçivəsində. Biz kənarda yazmağa başlayın əgər bu serialın həddi - belə ki, biz daxil yazılı başlamaq əgər, ki 0 deyək. Həmin beş göstəriciləri var bizim serialın. Biz index 5, daxil yazmağa başlayın əgər biz zaman biz yoxdur ölçüsü 5 array, biz daxil yazmağa başlayın index 6, 7, 8, 9, biz Stack əldə edə bilərsiniz Overflow səhv. Ümumiyyətlə bu deyil - yəqin ki, ilişmək edəcək Siz bir-üzərində getmək əgər. Amma ümumiyyətlə, siz daxil olacaq Bir çox üzərində getmək əgər ən narahatlıq və bu günə qədər üzərində yazmaq getmək ki, geri ünvan üzərində burada yerləşən funksiyası, yığını çərçivəsində alt. Sağ, çünki? Siz - ci ildə - sorry. "Sağ çünki." Yığını çərçivəsində, siz var yerli dəyişənlər. Yığını çox alt çərçivəsində qaytarılması ünvanı. Bu funksiyası harada artıq zaman gedir. Və siz geri üzerine əgər ünvanı, sonra bu yığını çərçivəsində zaman, Siz yığını keçir etdiyiniz zaman nizama və hər xətti yerinə, siz Yeni qaytarılması ünvan getmək olacaq ki, əvəzinə orada yazılı faktiki biridir. Və biz gördük necə bəzi təhlükəsizlik pozulması kompüter ilə baş verə bilər. Belə ki, yığın daşqın, qısa olaraq, Siz yığını hissəsi üzerine Siz yerli istifadə üçün nəzərdə edirik dəyişən istifadə ehtimal edirik Xüsusilə siz yadda başlattığınızda kimi əhəmiyyətli şeylər qayıdış ünvanı. Əgər bir səhv almaq lazımdır ki var. Və ya bəlkə siz başlamaq bilər hətta daxil yazılı - ikili axtarış idi sağ əsas yuxarıda. Siz, bir çox yazılmaması varsa əsas daxil yazmaq bilər. Amma ümumiyyətlə, siz əvvəl bir səhv almaq kompüter bilir sonra, çünki Siz bir şey yapýyorsun bunu etmək olmaz. Bəli. TƏLƏBƏ: fərqi nədir bir yığın daşqın arasında və bufer daşqın? JASON Hirschhorn: Buffer overflow daha ümumi növü var Mən yalnız təsvir nə. TƏLƏBƏ: Belə bir yığın daşqın bir edir bir bufer daşqın nümunə. JASON Hirschhorn: Exactly. Bu bir kimi hesab edə bilər bir sıra edir bufer, içəri şey üçün bir məkan Bu bir yığın bufer daşqın. Biz bir yığın bufer daşqın ola bilər. Orada tez-tez bir bufer, var idi, əgər bir sıra yığın və biz o həddi yazılmaması, sonra biz ki, bir yığın bufer daşqın var. Bu əlbəttə çərçivəsindən kənarda, onlar bir az fərqli aşkar edirik. Bu compiler xüsusi var hər aşkar yolları. Amma bir bufer daşqın daha ümumi edir Mən təsvir nə növü, bir yığın bufer daşqın idi. Ki, cavab mi? Sweet. Hər hansı digər suallar əlaqəli var idi yığını və ya yığın? Bəli. TƏLƏBƏ: Mən sizə pulsuz strings bilirik Onlar yığın istəyirik, çünki və siz yaddaş sızma istəmirəm. Amma qlobal dəyişənlər azad var və kimi stuff? Yoxsa onlar avtomatik olaraq azad olunur? JASON Hirschhorn: Yaxşı sualdır. Belə ki, cs50.h, biz bu şey yaratmaq üçün bir simli çağırıb. A string həqiqətən nədir? TƏLƏBƏ: Char star. JASON Hirschhorn: A char star, bir pointer bir xarakter, bir göstərici simvol bir sıra. Bu string nə var. Belə ki, biz, onu azad etmək lazımdır, çünki GetString, biz bir çox istifadə - string adı GetString bərabərdir - ki, bizim üçün bəzi yaddaş mallocs yığın və sonra bir pointer qaytarır ki, ilk xarakter string, bir char ulduz. Belə ki, guya, siz olmuşdur əgər Sizin strings hər hansı bir pulsuz yazı Siz indiyə qədər deyilən etdik ki, siz var bir yaddaş sızan edilmişdir. Təbii ki, biz haqqında söhbət yoxdur Bu, belə ki, heç kəs kazanılmış var bunu üçün narahatlıq. Amma bəli, irəli gedir. Siz GetString zəng zaman, siz yığın bəzi kosmik mallocing. Və ki, sonra pulsuz zəng etməyin string, bir yaddaş sızıntısı var. Ki, sual cavab? Bəli TƏLƏBƏ: Belə ki, nə üçün biz istifadə edirsiniz qaytarılması əvvəl pulsuz sağ? Kimi, daxilində, hərhalda əgər biz çərçivəsində əsas int kimi, demək o ərzində ki, kodu həcmi qıvrım aşırma, əvvəl sağ - Bildiyiniz harada had adətən geri qoymaq. Ki əvvəl pulsuz qoymaq edirsiniz? JASON Hirschhorn: Beləliklə, siz pulsuz qoya bilər siz pulsuz qoymaq istədiyiniz yerdə. Bu dinamik ayrılmış Çünki dəyişənlər, onlar bilər, çünki xüsusi əhatəsi kənarda yaşamaq funksiyası, bir malloc zəng əgər ayrı-ayrı funksiyası, misal üçün, GetString, siz əsas pulsuz zəng edə bilərsiniz. Siz zəng etmək üçün ehtiyac yoxdur xüsusi funksiyası malloc adlı yerləşir. Amma siz zəng etmək lazımdır əsas yekunları əvvəl. Və həqiqətən asılıdır. Bu ki, malloced niyə asılıdır ilk növbədə kosmik. Bəzi insanlar zəng edəcək olduqca tez azad. Bəzi insanlar qədər pulsuz zəng edəcək onların proqram sonu. Onlar vasitəsilə getmək lazımdır və pulsuz hər şey. Bu malloc adlı niyə asılıdır. TƏLƏBƏ: Və nə deyəcəksiniz Siz istifadə GetString adlı əgər? Siz nə pulsuz demək istədiyiniz? JASON Hirschhorn: Belə üçün sintaksis pulsuz sadəcə azad, açıq paren, yaxın paren və göstərici adı. Belə ki, simli adı bərabərdir yazmaq GetString, burada adını qoymaq. Bu göstərici adı var. Və bu yaddaş azad bilir. TƏLƏBƏ: bu yaddaş kurtarır Belə ki, göstərici hələ ki, yer göstərir yaddaşında? Ya da boşaldılmış göstəricisidir Bu göstərir ki, ünvanı. JASON Hirschhorn: Biz çalışmalıyıq. Biz kod lazımdır. Biz almaq zaman geri gəlsin kodlaşdırma, və ki kod bildirin. Və cavab anlamaq istəyirsinizsə ki, siz də kodu ki, bu vaxt. Amma böyük bir sual var. TƏLƏBƏ: Bu mümkün mü Çox tezliklə pulsuz bir şey? Belə ki, hələ sizin proqram üçün lazımdır, və siz yaddaş kosmik azad? JASON Hirschhorn: Bəli. Bu, mümkün əgər pulsuz bir şey və sonra yenidən istifadə, siz Bir səhv daxil. Siz azad çünki Lakin, sizə var sonra bir şey və sonra çağırıb. Belə ki, bir proqramçı-nin səhv idi. Amma bəli. Siz yaza bilər. Bir daha sual - bəli. TƏLƏBƏ: Belə ki, ehtimal olunur, yalnız əvvəl ümumiyyətlə onu azad Proqram əgər deməkdir, bitir proqram başa çatır və o azad deyil, ki, yaddaş hələ ayrılıb? JASON Hirschhorn: proqram başa varsa və sonra bir şey azad unutmaq yaddaş ərzində ayrılıb proqram ömür boyu. Proqram tamamilə bağlayan zaman yaddaş niyyətində deyil əbədi orada qalmaq. Kompüter bilmək kifayət qədər ağıllı deyil ki, proqram bağlanır zaman, yaddaş bütün qurtarmaq lazımdır ki, proqramı ilə bağlı idi. Lakin, çalıştırabilirsiniz alətlər var aşkar etmək üçün bir proqram, əgər zaman proqram unuttum başa bəzi yaddaş azad. Və növbəti problem olduğu müəyyən Siz malloc istifadə və istifadə edə bilərsiniz göstəricilərinə, bu çalışan olunacaq əgər görmek üçün proqramı üzrə proqram, zaman əsas yekunları, bəzi idi unfreed qaldı ki, hər şeyi. Belə ki, onlar malloced qalmaq fikrində deyilik əbədi kompüter. Ki, israfçı olardı, çünki çox tez, kompüter yaddaş tökülmək olardı. Lakin onlar sizin sonuna qədər run əgər proqram və onlar azad və deyilik sizin proqram hələ də bir problem var, çıxışları Bu alət kömək edəcək ki, həll. TƏLƏBƏ: Valgrind ki? JASON Hirschhorn: Bu Valgrind çağırıb. Və siz olacaq - TƏLƏBƏ: Amma biz bilmək yoxdur ki, viktorina üçün, baxmayaraq ki? Mən demək, bu barədə söhbət açıldı mühazirə bir az. JASON Hirschhorn: Belə Valgrind ki, alət adıdır. Nə Biləndir viktorina üçün kifayət qədər. Amma hələ istifadə edə bilmirik sizin biz idi, çünki problem müəyyən bir açıq-aşkar məşğul ki, problem set malloc ilə və ya malloc istifadə. Belə ki, hələ Valgrind istifadə etməmişlər. Amma tez istifadə edəcək çox sonra. TƏLƏBƏ: Siz təkrar edə bilərəmmi nə Valgrind edir? JASON Hirschhorn: Bağışlayın? TƏLƏBƏ: nə təkrar edə bilərəmmi Valgring məqsədi? JASON Hirschhorn: Valgrind adı - gdb proqram debug kömək edir kimi Valgrind siz anlamaq kömək edir şeylər azad olunmayıb Proqram bağlayan zaman. Belə ki, sizin proqram run lazımdır. Və proqram çıxışları, və demək lazımdır Proqram malloc bu çox deyilən Bu çox bytes dəfə, və siz yalnız bu dəfələrlə pulsuz çağırıb. Və belə ki, bu çox bayt sol azad olmadan. Yoxsa hər şeyi azad etdik demək lazımdır. Yaxşı iş. TƏLƏBƏ: OK. Və Valgring deyirlər? JASON Hirschhorn: V-A-L-G-R-I-N-D. TƏLƏBƏ: göstəricilər haqqında bir sual. Belə ki, n ulduz demək x bir şey bərabərdir. Ki, siz qoyulması etdiyiniz nə bərabərdir var, nə daxili qoymaq olunur ki, nə x işarə edir, və ya x pointer? JASON Hirschhorn: Siz Can sual təkrar? Siz demək isə biz onu cəlb edə bilər? TƏLƏBƏ: Viktorina ildə, həqiqətən, Bizə göndərilən bir, bu, char kimi idi star həqiqət sağ, CS50 qayalar bərabərdir? Belə ki, deməkdir ki, CS50 qayalar həqiqət işarə edir nədir? JASON Hirschhorn: Belə ki, söhbət edirik simli bir char ulduz haqqında, necə ki, işləyir? Bəli. OK. Nin burada bu cəlb edək. [SIDE CONVERSATION] JASON Hirschhorn: Belə ki, bu dəyişən növü char ulduz olacaq. Dəyişən necə böyük növü char ulduz? Neçə bytes? TƏLƏBƏLƏR: Four. JASON Hirschhorn: Bu dörd bayt var. Dəyişən Neçə hüquqlar növü int ulduz? TƏLƏBƏLƏR: Four. JASON Hirschhorn: Four bytes. Bir göstərici deyil, onda həmişə dörd bytes, çünki göstəricilərinə, onların dəyəri bir yaddaş ünvanı. Və CS50 yaddaş ünvanları cihaz dörd bytes uzun. Beləliklə, biz GetString, ya biz zəng zaman demək, stringname sonra bərabərdir, və ikiqat quotes bir string qoymaq, biz qoyuruq - yaxşı ki, bir az fərqli. Biz nümunə kimi GetString nə lazımdır. Və ya char ulduz bir şey simli bərabərdir. Bağışlayın, mənə misal vermək Siz oxumaq? TƏLƏBƏ: char ulduz həqiqət bərabərdir Ikiqat quotes "CS50 süxurları". JASON Hirschhorn: Belə ki, bu ulduz, bu biz bu dəyişən x zəng edəcəyik bizim ümumi məqsədləri. Biz x adlı dəyişən yaratdıq. Bu tipli char ulduz var. Bu bir sıra bir göstəricisidir simvol. Belə ki, aşağı burada - Belə ki, bu necə ki edir yaddaş çalışır. Bu yaddaş ünvan saxlamaq olardı. Bu yaddaş ünvan saxlamaq olardı serialın ilk character. Və sonra zaman sonra Bu göstərici, siz ki ilk xarakter almaq. Və kimi bu şey oxu edirsinizsə bir string, kompüter ağıllı bilmək kifayət qədər, bu bütün şey oxumaq bir boşluq 0 olur qədər. Amma siz bir xarakter oxu edirsinizsə bir dəfə, belə vasitəsilə iterating edirik Bu simli, onda siz yalnız bir oxumaq olacaq bir zamanda xarakter almaq qədər backslash 0. Ki, cavab bilər Sizin sual olsa da. TƏLƏBƏ: Bəli, amma siz malloced ki, kosmik hələ ki, göstərici. JASON Hirschhorn: Mən kifayət qədər əmin deyiləm dəqiq nə baxırıq, Mən viktorina etməyib, çünki. Ki, yararlı bir olmaq idi başqa TF-dən resurs. Siz bir simli yaratmaq varsa dəstə və ya yerli dəyişən kimi, will yalnız ittihamlar array daha çox ola işarə ümumiyyətlə char ulduz başqa string. Amma bilmirəm. Yəni başqa bir göstərici ola bilər yığını string həmçinin. Bəli. TƏLƏBƏ: Mən sizə lazımdır ki, bilirik Bu göstərici olduqda yaddaş ayrılması daxilində elan olmaq başqa funksiyasının. Siz əgər eyni şey etmək lazımdır əsas daxilində elan olunur, Siz əsas daxilində istifadə etdiyiniz? JASON Hirschhorn: Belə ki, bəli. Siz hər hansı bir pointer elan edə bilər yaddaş yaddaş ünvanı. Bu yerli yaddaş ünvanı ola bilər dəyişən, oftentimes baxmayaraq, insanlar yaddaş ünvanları elan yoxdur onlar getmək, çünki yerli dəyişənlərin ki, funksiyası qaytarır üz dəfə, olan biz ümumiyyətlə şeyi malloc nə. Amma bəli, bir pointer bəyan edə bilər digər yerli dəyişən. Bu, sadəcə, ümumiyyətlə işlər deyil. Amma nəzər edə bilərsiniz sinif sonra xüsusi bir şey. Bəli. TƏLƏBƏ: Mən bu sort hesab edirəm istənir nə. Bu başlatılıyor üçün qəribə görünür deyil bir kimi bir pointer ünvanı, lakin nə bir dəyər kimi görünür. Bu CS50 içərisində nə kimi görünür şey işarə edilir və deyil, faktiki ünvanı, sağ? JASON Hirschhorn: Belə ki, deyil halda, baxmayaraq. Yəni nə deyil. Bir char ulduz elan zaman, bir yaddaş ünvan var. Pointers bütün yaddaş ünvanları başqa bir şey işarə. Başqa bir şey ola bilər yığını, lakin demək olar ki, həmişə var biz istifadə görəcəksiniz şəkildə yığın. Amma stringname double-quote bərabərdir "GetString" biz bunu görürük və biz vasitəsilə baxmaq və kod bilər. GetString simli saxlanılır edilmir ki, dəyişən, və ya hər hansı string adı ki xilas edir dəyişən, çünki ki necə göstəricilərinə çalışır. Ki, hissi edirmi? TƏLƏBƏ: Bəli. JASON Hirschhorn: OK. İnşallah ki, deyil hər kəs üçün confusing. Bu idi əgər Lakin, biz bir daha baxmaq olar bir az, biz, həqiqətən, olacaq, çünki ümid edirəm olacaq bir şey kod strings ilə işləmək və hiss kömək onlara daha rahat. Bu ilə əlaqədar hər hansı digər suallar mövzular və ya digər mövzular ki, Mən geri qoymaq lazımdır? Və - indi. Bəli, Alden. ALDEN: Belə ki, bu tamamilə olmayan, lakin biz yalnız bilərsiniz həqiqətən tez biz bilmək lazımdır nə bir 32 və arasında fərq haqqında 64-bit maşın? JASON Hirschhorn: Bəli. Belə ki, 32 bit neçə bayt edir? ALDEN: Bu dörd bayt var. JASON Hirschhorn: Bu dörd bayt var. Və 64 bit neçə bayt edir? TƏLƏBƏ: Səkkiz. JASON Hirschhorn: Səkkiz bytes. Belə ki, yenə səkkiz bit bir byte edir. Sizin CS50 cihaz edir 32-bit maşın. Belə ki, yaddaş ünvanları uzun dörd bytes. 2 32 var yaddaş ünvanları. 0 32 minus 1 2. Mən müsbət deyiləm, lakin ki Sizə lazım nə yəqin ki, əhatə dairəsi , 32-bit maşın bilirəm ki, yaddaş ünvanları, yenə dörd bytes uzun ki, maksimum məbləği yaddaş ünvanları. Həmçinin, məlumat növləri - bu kimi bir şey ola bilər yaxşı ki, qeyd dəyər. Bir veri növü ölçüsü asılıdır siz çalışırıq maşın. Belə ki, bir char, bir xarakter, necə bizim CS50 cihaz haqqında çox bytes? Bir byte. Və bu, həqiqətən bir byte kimi var də 64-bit maşın. Və ən data növləri eyni sayda var iki maşın bayt. Lakin bəzi data növləri fərqli olacaq həm maşın. Belə ki, potensial olacaq Bildiyiniz üçün lazım olan yalnız bir şey. Amma belə ki, hesab edirəm ki, hüdudlarından kənarda - Geri baxmaq əgər mən, demək olar ki, müsbət deyiləm köhnə sınavlar, o deyir ki, güman istifadə etdiyiniz problemlər kodlaşdırma 32-bit maşın. Amma ki, ilə birlikdə getmək üçün var maraqlı olduğunuz halda var eyni olan məlumat növləri bütün maşın ölçüsü. Siz kimi bir şey gördüm varsa uint32_t, siz bilər və ya ki, gördük. Ki, bir veri növü var. 32 bit ki olursa olsun, deyə edilir bu nə maşın deyil. Belə ki, insanlar portativ yazılı zaman kodu, onlar yəqin ki, ints istifadə edəcək. Onlar əvəzinə bu digər məlumatları istifadə edəcəyik Onlar bilirlər ki növləri eyni olacaq hər bir maşın ölçüsü. Madhu. Madhu: Mən bir sual var idi Tərtibi proses. Belə ki, istifadə edir ki, proqram yazılı edirsinizsə CS50 və ya bir şey kimi bir kitabxana kimi, mən bilirəm ki, kitabxana , bir nöqtədə, olmalıdır tərtib və daxil bağlıdır Amma nə qədər ki, zamanı baş proqram tərtibi? Ki, kitabxana prosesinin hansı hissəsi Siz etdiyiniz zaman baş verir öz proqram tərtib? JASON Hirschhorn: Belə ki, üzərində gedək Bu prosesin ümumiyyətlə addımlar. Siz. C fayl yazmaq. Sizin. C fayl, siz # daxildir sizin header kitabxana, məsələn, cs50.h. Kəskin daxildir ki, nə edir line proqram üçün nə? Akchar. AKCHAR: Bu prototipləri edir mövzu olan funksiyaları kitabxanalarda faylları. JASON Hirschhorn: Exactly. O funksiyası prototipləri edir Sizin kodu. Sizin kodu tərtib olunur Belə ki, erkən mərhələləri, compiler bilir bu funksiyaları həqiqətən var, və ki, ki, haradasa onlar müəyyən edilmişdir. The. H faylları daxildir yoxdur bu funksiyalar üçün anlayışlar və ya necə həqiqətən çalışır. Cs50.h yalnız deyir ki, bir şey daxildir GetString bir real bir şeydir ki, baş verə bilər. Və standardio.h printf deyir ola bilər ki, bir real şey. Belə ki, bu ilə c dil. Header fayl bəzi çevrilmiş olur maşın-oxunaqlı kodu, axırda ikili çevrilmiş olur kodu, 0 və 1-in. Və bu kodu ki, nəticədə icra edilir. The-l cs50 line - məsələn, cingilti yazılı etdiyiniz zaman - və sonra daxildir-l cs50, Daxil ki, yazın Və görürük. Etmək yazmaq zaman, will up burada line bax. Və biz ikinci ki, görürsünüz zaman biz kod və ya daha sonra zaman biz kod. Amma-l cs50 line bir şey yoxdur bir az fərqli Bu # cs50.h. daxil Ki,-l cs50 line nə edir? Avi? AVI: Mən links demək istəyirəm ki, funksiyası kitabxana Bu. o faylları kimi zəng. JASON Hirschhorn: Belə ki, çox yaxın, spot-on əgər. The-l cs50 ikili fayl edir və Sizin ikili fayl ilə əlaqələnir. Belə ki, cs50.h, dönüş heç bir məqam var hər ikili C dil cs50.h istifadə olunur bir zaman. Ki, silly olardı ki çox vaxt sərf edirəm. Belə ki, artıq tərtib edilmişdir və yürütülebilir çevrildi. Və indi birləşdi olacaq sonunda fayl ilə. Belə ki, həmin 1 və 0-ın gedir Sizin yeniləri ilə birləşməsi və sonunda 0 nin. Belə ki, indi siz həqiqətən faktiki lazımdır 1 və 0-ın necə GetString müəyyən ki, məsələn, çalışır, və ya necə printf məsələn, çalışır. Və daha çox məlumat üçün, var bir Nate verir ki, qısa tərtibçiləri Siz ki, gedir yoxlamaq lazımdır Bu addımlar vasitəsilə. Amma - bəli. TƏLƏBƏ: onlar həmişə o faylları. Onlar kitabxana formada olduğunuzda, kimi - bağlı, birləşdi hazır onlar ikili kod istəyirik? JASON Hirschhorn: OK. Nə - TƏLƏBƏ: Ki həmişə halda kitabxanalar siz onlara keçid zaman? JASON Hirschhorn: Bəli. Belə ki. S olacaq faylları var da olacaq maşın kodu, sizə sirli. Siz bu barədə narahat ehtiyac yoxdur. Amma ümumiyyətlə, yeah, onlar lazımdır o getmək üçün hazır faylları. ola bilər. TƏLƏBƏ: Belə ki, gəmi zaman kitabxana, yalnız gəmi yoxdur Bu. h və. o? Siz. C və ya. S gəmi yoxdur. JASON Hirschhorn: Belə ki, - və bu halda, eləcə də bu qısa edir bu məlumat bir gələn görünür az tez. Amma derleyiciler haqqında qısa bu barədə danışıqlar həmçinin. Bir kitabxana gəmi zaman, əgər gəmi Bu. h, mövzu fayl, o Funksiyası prototipləri və 1 və 0 nin ki, sizə lazım olan bütün var. Siz vermək lazım deyil necə funksiyası. c fayl işləyir. Çünki abstraksiya point, və ya API point, bu SPL da point, Stanford portativ kitabxana, bu siz narahat deyil üçün necə yeni GRect, işləyir, və ya necə işləri hərəkət və ya necə işləri əlavə edin. Bildiyiniz üçün lazım olan bütün ki, əlavə edir Siz ki, bir funksiyası istifadə və bu yoxdur. Beləliklə, siz həqiqətən bilmək ehtiyac yoxdur necə Bu C. Siz yazılı yalnız lazımdır bilirsiniz, burada funksiyaları, nə onlar etmək, və burada 1 və 0 nin Siz, həqiqətən, onlara istifadə etmək istədiyiniz zaman. Cool. Derleyiciler haqqında daha çox suallar və ya board digər mövzular? TƏLƏBƏ: Mən bir sual var recursive funksiyaları həyata keçirir. Recursion haqqında sual. Mən gəlib ki, bir hissi var idi. Belə ki, tez ilə gedək xüsusi ilə recursion Məsələn, bir faktöryel funksiyası. Bu bir nümunəsidir, çünki tez-tez gəlir və ya istifadə olunur recursion göstərmək üçün. Belə ki, "4" 4 Faktorial kimi oxumaq edir. Və 4 faktöryel nə deməkdir? O nə edir? Necə 4 faktöryel hesablamaq edirsiniz? 4 dəfə 3 dəfə 2 dəfə 1. 4 Faktorial yazmaq üçün başqa bir yol Bu yazmaq üçün. 4 dəfə 3 faktöryel. 3 faktöryel Çünki 3 dəfə 2 dəfə 1. Belə ki, 4 dəfə 3 faktöryel 4 dəfə 3 dəfə 2 dəfə 1. Faktöryel böyük niyə bu recursion üçün namizəd, çünki ki, bir şey aydındır ki, bir üzərində və üzərində olur şeyi kiçik sayı qədər Əgər sonunda çatmaq. Siz 1 çatdıqda, 1 faktöryel 1. Siz çox daha getmək bilməz. 0 faktöryel də 1 kimi müəyyən edilir. Siz 1 və ya 0 almaq zaman Belə ki, siz sonunda, və siz geri gedən başlamaq. Biz recursive yazmaq istədim əgər bir faktöryel hesablamaq funksiyası, biz bəzi yazmaq olacaq ki, indi üçün pseudocode. Ki, pseudocode yazmaq əvvəl - Mən sizə uşaqlar bir neçə dəqiqə verəcəyik yalançı kodu yazmaq və ya yalnız düşünmək üçün bu barədə - hər iki şey var recursive funksiyası lazımdır. Bu iki şey nədir? JACK: Bu özü zəng etmək üçün var. JASON Hirschhorn: Noah? Oh, Jack. Durmayın. JACK: Bu özü zəng etmək üçün var. JASON Hirschhorn: Belə bir recursive funksiyası, bir recursive zəng lazımdır özü zəng. Ki, biri. Və digər şey nədir? JACK: A baza halda. JASON Hirschhorn: A baza halda. A baza halda biz dayandırmaq zaman burada edir. Belə ki, funksiyası adlanır olur. Ėsas birinci gəlir. Siz sonunda əgər bilmək istəyirəm. Və siz, sonunda siz değilseniz Sizin recursive zəng etmək. Və yenə bu funksiyası vasitəsilə getmək yenidən sizin baza halda yoxlamaq. Siz son değilseniz, siz etmək başqa recursive zəng, et Cetera, Et Cetera. Ona görə recursive funksiyaları həmişə var o baza hallarda və bu ehtiyac recursive zənglər. Bir recursive zəng yoxdur, bu, bir recursive funksiyası olmaz. Bir baza halda olmasaydı, siz əbədi getmək olardı Heç sona olacaq. Və baza halda həmişə birinci gəlir, həmişə yoxlamaq istəyirəm, çünki ilk sonunda əgər. Biz bəzi pseudocode bunu əvvəl, niyə düşünmək üçün bir dəqiqə etmirlər necə bir recursive faktöryel funksiyası yazılı olardı? Həmçinin, Siz bunu kimi bir çox, yazı bir kağız hesabatında bu deyil siz olacaq nə sabah viktorina etmək. Etmək üçün belə yəqin ki, yaxşı təcrübə Siz yazılı etdiyiniz kodu kağız hesabatında aşağı - və ya bunu edə bilərsiniz. Bu semicolons harada bilirsiniz. Siz sintaksis xatırlayıram. Siz edə deyilik, çünki compiler bir səhv demək. Həmçinin, o xətləri, sabah boyunca zaman Əgər siz, problemlər kodlaşdırma var dəfə qaçdı, və ya çox değilseniz Siz ehtimal etdiyiniz nə kimi səhv c xüsusi şey yazmaq, bu, yalançı kod yazmaq üçün siz behoove olardı və eləcə də şərh yazın. Bir üçün qismən kredit var, çünki viktorina suallar çox. Belə ki, siz qaçdı, və ya ola bilər yalnız qarışıq ola bilər. Şərh və ya yalançı kodu Yazı tez-tez yolları ki, qismən kredit əldə edə bilərsiniz. Belə ki, bir şey tərk etməyin viktorina boş. Üçün heç bir cəza var daxil şeyi qoyulması Əslində, yalançı kodu qoyulması və ya şərh sinif şagirdi kömək edir Siz həqiqətən bilirsinizsə anlamaq nə Siz bəlkə mükafat bəhs edirik ki, bəzi qismən kredit. Həmçinin o xətlər boyunca, aydın yazın. Biz, həqiqətən, siz yazıyoruz bilməz nə varsa, biz sizə zəng etmək fikrində deyilik rəqəm midnight sabah yazırdı nə. Biz yalnız xal çıxarmaq olacaq. Belə ki, biz daha doğrusu eşitmək, və ya aydın yaz, biz yazırdı nə oxuya bilərsiniz. Və bu iki cümlə desə, bir paraqraf yazmaq yoxdur. Təlimatları izləyin. Aydın yazın. Və o şərh yazmaq və ya suallara pseudocode bilər ki, mükafat qismən kredit. OK, faktöryel gedək. Beləliklə, biz bir funksiyası Faktorial var. Mən, həqiqətən, C, bu yazmaq olsaydı, nə adı əvvəl qoymaq lazımdır funksiyası? Qaytarılması növü, bu olan, halda, biz int verəcəyik. Və sonra qıvrım aşırma daxilində deyil, nə üçün qıvrım aşırma daxilində gedir bir funksiyası? TƏLƏBƏLƏR: Argument növü. JASON Hirschhorn: Onun dəlilləri. Belə ki, faktöryel yəqin ki, bir mübahisə edirlər. Bu yəqin ki, yalnız bir arqument almaq lazımdır. Və biz bu almaq lazımdır demək lazımdır tam x çağırıb. Və yenə, prototip yazarkən bir funksiyası və ya funksiyası yazılı siz təyin əvvəl kodu məlumat növü və adını yazmaq yalnız funksiyası üçün dəyişən. Belə ki, bu bəzi sayı keçə bilər funksiyası, x adlandırılacaq olacaq məcburi. Biz faktöryel funksiyası var. Biz iki şeyi, bir baza işi lazımdır və bir recursive zəng. Faktöryel üçün əsas nədir? Onu yazmış və kim olan kimsə hələ danışıq, baza nə faktöryel üçün halda? TƏLƏBƏ: n az olduqda 2-dən, 1 qayıtmaq. JASON Hirschhorn: n varsa 2-dən az, 1 qayıtmaq. Mən istəyirəm ki, çünki 0 və 1 qayğısına qalır. Belə ki, biz, x <2 do 1 qayıtmaq lazımdır. Biz almaq əgər biz, 0 keçdi almaq 1 keçdi, bu funksiya olacaq dərhal 1 qayıtmaq. Biz bir sıra YÜKSƏLİRDİ keçdi almaq dən və ya 2 bərabər, biz olacaq Bizim recursive zəng var. Və necə ki, iş gedir? Can bu işləyən başqası hələ danışıq mənə vermək bu funksiya üçün recursive zəng edin pseudocode? Biz bir sıra x keçdi almaq və 2-dən böyük, nə Biz nə etmək istəyirsiniz? Biz də nümunə haqqında yazılı bir ipucu verə bilər ki, yan. TƏLƏBƏ: x dəfə zəng x minus 1 faktöryel? JASON Hirschhorn: Məhz hüququ. Biz x dəfə geri olacaq x minus 1 faktöryel. Və mən yazdı, baxmayaraq ki, əsasən, nə İngilis deyilir, Bu faktöryel funksiyası yenə adlı olacaq. Bu x minus 1 icra edəcəyik. Bəzi tam ilə qayıtmaq lazımdır və sonra bu iki çoxaltmaq lazımdır birlikdə ki, dəyəri olacaq bu deyilən nə döndü faktöryel funksiyası olan qüdrəti başqa instansiya ola Bu faktöryel funksiyası. Belə ki, bir recursive bir nümunəsidir funksiyası, bir çox sadə recursive funksiyası. Lakin onların əksəriyyəti bu kimi olacaq. Yaxşı bir recursive istəyirsinizsə viktorina üçün etiraz, kodlaşdırma cəhd ikili axtarış recursively. Çünki sizin üçün ikili axtarış əgər problem üç set, siz yəqin ki, bunu iteratively isə loop. Lakin bu da yazılı bilər recursively. Siz öz yazmaq lazım olacaq Bəzi edir ki, ayrı-ayrı funksiyası müxtəlif komanda-line dəlilləri və ya - deyil command-line dəlilləri, bəzi müxtəlif yalnız müntəzəm dəlilləri. Amma ikili axtarış yazmaq bilər recursively həmçinin. TƏLƏBƏ: Beləliklə, siz də yazılı ola bilər, əvəzinə x mənfi 1, siz də x minus yazılı ola bilər minus, və ya ola bilər yazılı minus minus x. Siz yalnız həqiqətən tez izah edə bilər o fərqli şeylər ola bilər, fərq arasında nə kimi x minus minus minus minus x? JASON Hirschhorn: Xeyr, mən deyiləm ki, getmək üçün gedir. Amma sonra bu barədə sizə danışmaq olacaq class. x minus minus, minus minus x 1-x azalma. Lakin onlar bir az fərqli bunu. Amma getmək istəmirəm. Recursion haqqında digər suallar və ya bu funksiya? Ki, həqiqətən belə pseudocode deyil. Bu əsasən də kod Bunun üçün yazmaq olardı C. OK, hər hansı digər suallar burada mövzular up haqqında? Bəli. TƏLƏBƏ: Mən tez rundown var üzən point və dəqiq. JASON Hirschhorn: üzən point və dəqiq. Can kimsə həqiqətən tez Mənə bir rundown vermək üzən point və dəqiq? Siz bütün bu nə idi problem müəyyən, belə ki, bütün istəyirik tanış. Və ya bəlkə deyil bütün sizin. Hər kəs? Mənə bir başladı spot verin. Üzən point və dəqiq. Bu problem nədir? Bəli. Victoria? VANESSA: Vanessa. JASON Hirschhorn: Vanessa. Üzr istəyirik. VANESSA: yalnız məhdud sayda var təmsil oluna bilər ki, nömrələri Bir, də istəyirik, çünki bizim halda, bir 32-bit sistem. Beləliklə, siz cür var bir ədəd təşkil edir. JASON Hirschhorn: Belə ki, doğru. Yalnız müəyyən bir məbləği var təmsil oluna bilər ki ədəd. Iki çox böyük nömrələri çoxaltmaq əgər, Bu məbləğ daşqın bilər fəzalarında siz təmsil etmək tam. Bəzən biz istifadə edirik bir əvəzinə int uzun uzun. Daha boşluq var. Ki, bir daha çox aça bilər. Üzən point dəqiq nə var ki, həm də nə var decimal nömrələri faktı həmişə təmsil deyil. Üzr istəyirik. Görüntülərini geri up qoymaq edək. The decimal sayı 1.0 həmişə deyil sizin kimi təmsil gözləmək olardı, 1,000000000. Bəzən kimi təmsil olunur 1,000000001 və ya 0,999999999. Bu hətta 89 atılan bilər haradasa orada. Belə ki, həmin decimal ədəd deyil dəqiq olduğu kimi təmsil onlara təmsil gözləyirik. Belə ki, problem müəyyən - iki idi? - problem biz məşğul olduğu iki, müəyyən biz istəyirdi zaman üzən point nömrələri, onlara biz nə istədiyini dəqiq təmsil etmək onlara təmsil etmək, sayı pennies, və ya sent sayı, biz 100 onları çoxaltmaq. Biz onları dairəvi. Və sonra biz hər şeyi kəsmək Bu kəsir arxasında. Təmin etmək üçün idi ki, onlar ki, biz nə istədiyini dəqiq həqiqətən bərabər onlara bərabər. Əgər bir şey almaq zaman ki, çünki bir float və bir int çevirmək sağ hər şey kəsmək Bu kəsir. Bəzi üzən point var, çünki qeyri-dəqiqlik, 100.000 ola bilər 99,999999999 kimi təmsil. Və yalnız hər şey kəsmək əgər hemen sağ, siz olacaq yanlış sayı almaq. Bəli. TƏLƏBƏ: Mən bir sual haqqında tökmə. Nə üçün baş verir? Siz float etmək istəyirsinizsə, mötərizədə, 1 bölünür 10, 1, 10 ilə bölünür yoxdur etmir sonra 0.1 almaq, sonra dönüb bir float daxil o? JASON Hirschhorn: Əgər 10 bölünür 1 float - TƏLƏBƏ: Bəli, və sonra bərabərdir - yaxşı, bu zamanki bu bərabər var - Bəli. Siz bir float etmək istəyirsiniz? JASON Hirschhorn: OK, belə ki, biz olacaq həyata figuring segue istifadə Bu suallara cavab kodlaşdırma vasitəsilə. Siz yəqin ki, bir çox lazımdır, çünki bu dəqiqə suallar, və yaxşı bir yol onları həll etmək üçün kodlaşdırma vasitəsilə. Beləliklə, biz, indi bu hüququ kod olacaq sonra biz geri getmək üçün gedən və edirik Siz idi sual kodu. Belə ki, ilk line - Mən bunu yazılı olmamalıdır - nə biz nə etmək istədiyiniz ilk şey biz gedit yeni bir fayl açmaq? TƏLƏBƏ: əlavə edin. JASON Hirschhorn: nə əlavə? TƏLƏBƏ: CS50 kitabxana. JASON Hirschhorn: OK. Biz nə daxil olmalıdır? Biz yalnız nə yoxlamaq olacaq Bir float üçün bir şey tökmə zaman. Amma nə biz əgər daxil etmək lazımdır C proqram yazmaq üçün gedir? TƏLƏBƏ: Standard I / O. JASON Hirschhorn: stdio.h. Biz, həqiqətən, bu, lazım deyil proqram, cs50.h, bu baxmayaraq daxil həmişə faydalı. Amma biz həmişə stdio.h lazımdır. TƏLƏBƏ: C kodlaşdırma zaman? JASON Hirschhorn: C. kodlaşdırma zaman Mən bu. C faylı olaraq qeyd edin. Mən bəzi gözəl sintaksis işıqlandırılması almaq. Mən əsas daxili boşluq yazdı. Void nə deməkdir? TƏLƏBƏ: hansı almaq deyil command-line dəlilləri. JASON Hirschhorn: bu Void vasitələri, halda, əsas hansı etmir command-line dəlilləri. Digər hallarda, bu funksiyası deməkdir komanda-line dəlilləri daşımır. Və ya funksiyası, Mən əgər etibarsız yazmaq əsas (void) ki, əsas var deyərdim bir şey qaytarılması deyil. Belə ki, etibarsız yalnız heç bir şey deməkdir. Mən üçün, əgər mən nə yazmaq olardı command-line dəlilləri almaq? TƏLƏBƏ: int arc c string arc qarşı JASON Hirschhorn: int argc string argv. Doğrudurmu? TƏLƏBƏ: Bu char ulduz argv mötərizədə var. JASON Hirschhorn: Beləliklə, siz yazmaq bilər string argv Mötərizədə və ya char ulduz argv Mötərizədə, ancaq mötərizə lazımdır. Argv bir sıra edir, çünki strings, xatırlayıram. Bu, sadəcə bir string deyil. Belə ki, simli argv, burada edir bir string argv adlanır. String argv Mötərizədə, burada edir strings bir sıra. Belə ki, int argc string argv Mötərizədə bir şey olardı ki, mən yəqin ki, yazmaq olardı. Belə ki, bir tam saxlamaq istəyirdi? TƏLƏBƏ: Bəli, tam. Və ya bir float. JASON Hirschhorn: bir float ildə? Kimi, float x 10 bölünür 1 bərabərdir. JASON Hirschhorn: OK. Mən printf bir float çap edirsiniz? Nə? TƏLƏBƏ:% f. JASON Hirschhorn:% f. Bir tam nə var? d və ya i. Bir string nədir? TƏLƏBƏ: s. JASON Hirschhorn: s. Mən yeni bir xətt alıram? TƏLƏBƏ: backslash n. JASON Hirschhorn: Mən nə qayıtmaq yoxdur əsas çalışır doğru əgər? TƏLƏBƏ: 0. Mən də, bu xətt yazmaq lazımdır? TƏLƏBƏ: No OK, biz sonra, onu yazmaq olmaz. Hamı oxuya bilərsiniz? Bu bir az kiçik görünür. Hamı görmək, və ya olmalıdır bilər Mən bu böyük etmək? Mən kamera üçün, biz edəcəyik edirəm baxmayaraq ki, bir az daha böyük. JASON Hirschhorn: Mən bu çevirmək istəyirsinizsə . Yürütülebilir daxil fayl c, nə Mən yazmaq edirsiniz? TƏLƏBƏ: test olun. JASON Hirschhorn: Bağışlayın? TƏLƏBƏ: test olun. JASON Hirschhorn: test olun. Biz söhbət əvvəllər bu xətt. Cingilti. Cingilti nədir? Compiler adı. Bu xətt nədir? TƏLƏBƏ: gdb istifadə üçün bu qədər edir. JASON Hirschhorn: Sets Bu qədər gdb istifadə üçün. Bu xətt ki, nə var? TƏLƏBƏ: Source kodu. JASON Hirschhorn: Bu var mənbə fayl,. c faylı. Bu iki xətləri nə etməliyəm? Və ya bu iki xəttləri. TƏLƏBƏ: Bu adlar test. JASON Hirschhorn: Belə dash o deyir, fərqli bir şey adını. Və burada test zəng edirik. Mən ki olmasaydı, nə bu ad vermək olardı? TƏLƏBƏ: A.out. JASON Hirschhorn: A.out. Bu nə edir? TƏLƏBƏ: riyaziyyat kitabxana Linklər. JASON Hirschhorn: Bu links riyaziyyat kitabxana. Biz riyaziyyat kitabxana daxildir, lakin etmədi ki, ümumi var-ci ildən, onlar var yazılı markası həmişə daxil riyaziyyat kitabxana. Və beləcə, bu daxildir CS50 kitabxana. Biz siyahısını əgər OK, belə ki, biz indi test adlı bir proqram. Onu icra etmək, mən test yazmaq. Mən üzən point görürük gözlənildiyi kimi, 0 bərabərdir. Ki, yoxdur - belə - TƏLƏBƏ: Sonra qoymaq əgər, indi float kimi float kimi salmaq - JASON Hirschhorn: Yüngül lehimli bir float 1? TƏLƏBƏ: Xeyr, tam şey tökmə - Bəli. Siz yalnız əgər, ki ki, 0.1 etmək? JASON Hirschhorn: OK, belə ki, həqiqətən tez 1 10 bölünür, o integers bölünür olunur. Siz integers bölmək zaman Belə ki, onlar 0, və siz qənaət etdiyiniz 0 ilə çizgi çünki, float yalnız tam bölgüsü. Belə ki, indi biz bir şey dönüş edirik bir float daxil. Nə görmək edək. Biz test etmək lazımdır. Belə ki, indi biz slash olmadığını görmək tam bölgüsü, bu üzən edilib point bölmə. Çünki onun dəlilləri biri bir float tökmə edilmişdir. Belə ki, indi bu müalicə, deyirdi bölmə biz ilə məşğul olduğunuz kimi üzən bal deyil, integers ilə. Və belə ki, biz gözləyirik cavab almaq. Nə görmək edək - oops. Mən daha decimal çap etmək istədi ləkələr, necə ki, bunu edə bilər? TƏLƏBƏ: Point dot f, və ya kimi bir çox Istədiyiniz kimi decimal yerləri. JASON Hirschhorn: Mən çap 10 decimal ləkələr. Və biz indi əldə edirik görürük bəzi qəribə stuff. Və geri suala gedir haqqında point qeyri-dəqiqlik üzən. Burada saxlanılır qəribə stuff var. OK, sizin suala cavab verir? Başqa nə istəyirsiniz tez kod? TƏLƏBƏ: Mən yalnız və ya görmək istəyirdi deyil, bəzi göstərici azad əgər, ki, pointer hələ saxlanan olub bu olmuşdur nə ünvanı əvvəllər işarə. JASON Hirschhorn: OK, belə ki, nə edək. Char star Ptr, bu dəyişən yaradır növü char ulduz Ptr çağırıb. Necə malloc yazmaq edirsiniz? Alden? ALDEN: Just malloc. Lakin o, ölçüsü olmalıdır, və bu halda, sizə istədiyiniz tapmaq char işarə etmək. Belə ki, char olarıq. JASON Hirschhorn: OK, belə ki, daha çox generically, Inside - nin edit imkan verir. Malloc Inside, siz sayı istəyirəm olan yığın bayt. Ümumiyyətlə, nə biz istəyirik ki, gördük bunu biz malloc olacaq edir məsələn strings, və ya integers Diziler. Belə ki, biz 10 integers və ya 10 istəyirsinizsə chars, 10 bizə 10 verəcək. Və sonra chars ölçüsü verəcək bizə chars ölçüsü olan Bu halda 1 byte edir. Biz 10 bayt almaq. Biz int ölçüsü yazmaq olsaydı, bizə 40 bytes verəcək. Belə ki, daha çox ümumi, malloc daxilində istədiyiniz bayt sayı. Bu halda, biz 1 byte əldə edirik. Bir qəribə istifadə kimi görünür Hansı malloc, lakin bizim məqsədləri əhəmiyyət kəsb edir. Belə ki, var. Biz pulsuz zəng etmək olacaq. Biz onu qurtarmaq və biz yenə Ptr istifadə edin. Və yoxlamaq üçün nə istəyirsiniz? TƏLƏBƏ: Mən yalnız olub-olmadığını yoxlamaq istəyirdi və ya bir şey var idi Bunun içərisində. JASON Hirschhorn: Belə olub bir şey işarə? TƏLƏBƏ: Bəli, məhz, olub hələ bir yaddaş ünvan idi. JASON Hirschhorn: Belə ki, istədiyiniz Ptr dəyəri yoxlamaq üçün? TƏLƏBƏ: Bəli, dəqiq. JASON Hirschhorn: Mən burada nə yazmaq Mən dəyəri yoxlamaq istəyirsinizsə point - nə, Jordan dəyəri, dedi? Yoxsa nə Ptr daxilində saxlanılır? TƏLƏBƏ: A yaddaş ünvanı. JASON Hirschhorn: A yaddaş ünvanı. Mən yalnız bu yazmaq Belə ki, bu lazımdır Mənə Ptr dəyər verir. Və necə çap yoxdur yaddaş ünvanı? Bu format string nədir yaddaş ünvan üçün? TƏLƏBƏ:% p. JASON Hirschhorn:% p. % S simli edir. Göstərici% p. Doğrudurmu? Bu doğru deyil. Belə ki, Ptr bərabərdir - Bu hələ də bir şey var. Bu yəqin ki, bir daha maraqlı sual. Ki line nə edir? TƏLƏBƏ: Seg faylar. JASON Hirschhorn: Nə? TƏLƏBƏ: Mən çatışmazlıqlar seg düşünürəm. JASON Hirschhorn: Hm? TƏLƏBƏ: Mən bu seg günah lazımdır düşünürəm. JASON Hirschhorn: Belə ki, bu xətt kodu, ulduz Ptr, nə ulduz deməkdir? TƏLƏBƏ: məzmun. JASON Hirschhorn: Bəli. Məzmununu almaq üçün getmək. Belə ki, bu xatirəsinə getmək üçün gedir orada həll və mənə verir. Mən burada% c istifadə çünki var simvol orada saxlanılır. Belə ki, ünvanı biz getmək olacaq yalnız gördüm - və ya yəqin ki, bir olacaq az fərqli bu Biz proqram run vaxt. Amma biz ki, ünvan gedəcəyəm biz hələ də mövcuddur bilirik olan və var nə görmək. Belə ki, seg günah etməyib. Bu, yalnız bizə bir şey vermədi. Bu, həqiqətən, bizə verilmiş ola bilər bir şey, biz yalnız bunu görmək bilməz. Və geri bu fikrə gedir - və biz daxil çox almaq fikrində deyilik Bu ki, kənarda, çünki Bu kurs daxilində. Biz əgər biz, burada bəhs tərəfindən array kənarda getdi 1, biz çətinliyə ala bilər. Bəzən, yalnız 1-off getmək zaman, Siz səhv etdiyini və edirik sorun almaq bilər. Amma həmişə çətinliyə yoxdur. Bu asılıdır nə qədər pis bir şey siz , sorun almaq olacaq yoxdur. Sloppy olmaq demək deyil Sizin kodu. Lakin bu proqram deyil, demək Əgər haradasa getmək, hətta həmişə çıxmaq Siz getmək ehtimal deyilik. Ki, bir yaxşı nümunə, bir çox onların problem insanların, 3 müəyyən edən 15 yoxlamaq deyildi heyəti həddi. Beləliklə, siz baxdı, sola baxdı sağ, baxdı, üst baxdı alt. Amma kontrol olmasaydı top həqiqətən şurası olacaq. Və etdi insanların bir çox və ki çıxdı, proqram işləyib mükəmməl, harada ki, board idi, çünki Bir getdi əgər, yaddaşında saxlanılır yuxarıda və ya yoxlanılır yaddaş ünvanı, bir şey yox idi ki, xüsusilə dəhşətli, belə ki, sizin proqram deyil sizə fəğan. Amma biz hələ xal off almaq əgər siz ki, yoxlamaq etmədi siz, çünki Siz deyil, bir şey etdiklərini nə etməli, və siz ola bilər çətinliyə kazanılmış. Oran siz yəqin ki, etmədi, baxmayaraq ki, var. Belə ki, bu, bəli, göstərmək üçün biz hələ də bilərsiniz. Və biz əldə deyilik bu halda narahatlıq. Biz oxumaq etməyə çalışdıq Əgər Növbəti 100 simvol, biz had yəqin ki, sorun almaq. Və növbəti 100 oxu kod bilər simvol bəzi etməklə istəyirsinizsə sort loop üçün. Bəli. TƏLƏBƏ: biz təyin edilmişdir ildən ki, space faktiki dəyəri, biz deyil ki həqiqətən bir şey görmək mümkün. Biz qəbulu ilə cəhd etməlidir ki, c və ya bir şey kimi bərabərdir? JASON Hirschhorn: Böyük sual. Necə ki, dəyəri yoxdur - nə kodu xətt I line yazmaq yeddi sizə nə etməli? TƏLƏBƏ: Star Ptr vahid bərabərdir quote bir quote son c. JASON Hirschhorn: Belə ki qoyulması bir xarakter, c, o yeri, çünki daha ki, ulduz orada getmək deməkdir. Və sol tərəfdən istifadə edərkən bir tapşırıq operator ki, bərabərdir imza, biz almaq fikrində deyilik ki, dəyər ki, dəyəri müəyyən qədər. İndi nə görmək edək. Biz orada bir şey qoymaq və orada idi. Biz pulsuz çağırıb. Bəzi məhsulları yəqin ki, baş yığın. Belə ki, artıq yoxdur. Ancaq yenə də, biz əldə deyilik orada gedən problem. Mən göstərmək kodu bu həyata yapýyorum ki, bu bir çox Siz ki, sual, onlar həqiqətən maraqlı çox vaxt cavab verir. Onlar, həqiqətən, yaxşı suallar istəyirik. Və onları anlamaq bilər Öz əgər, misal üçün, biz bölməsində deyilik. Bəli. TƏLƏBƏ: Siz göndərilməsi deyilik Çünki yerdə göstərici, siz lazımdır malloc istifadə? JASON Hirschhorn: Belə ki, bu geri gedir ilkin suala. [? ?] Yalnız bir yerli dəyişən deyil? Burada malloc çekici deyil. Burada malloc istifadə deyil çünki çekici yalnız bir yerli dəyişən. TƏLƏBƏ: Belə ki, char edə bilər star Ptr salam bərabərdir? JASON Hirschhorn: Oh. Beləliklə, biz indi geri almaq olacaq ilkin suala. Mən sizə razı deyildi mənim cavab. OK? Ki, kimi? TƏLƏBƏ: Bəli. Gözləyin. JASON Hirschhorn: Və Siz çap istəyirsiniz? Belə ki, kimi bir string çap lazımdır? TƏLƏBƏ: Maraqlı. JASON Hirschhorn: Belə ki, bu deyir mübahisə xarakteri növü var. Belə ki, bu bir xarakter olmalıdır. TƏLƏBƏ: Just ilk birini tutur. JASON Hirschhorn: Belə ki, bu Mən əvvəl qeyd edir. Like Mən saxlanılması deyil, ifadə dəyişən göstərici içərisində string. Bu saxlanılması oldu - TƏLƏBƏ: ilk dəyəri simli. JASON Hirschhorn: ünvan simli ilk dəyəri. Biz bu çap olsaydı, biz istəyirik göstərici içərisində dəyər əldə. Və biz, həqiqətən, olduğunu görəcəksiniz bir yaddaş ünvanı. Ki, hissi edirmi? Üzr istəyirik. Ki, cavab vermir, gözləyin sual olsa? TƏLƏBƏ: Bəli. JASON Hirschhorn: kodu Bu xətt bir simli və sonra başqa bir yaradılması işarə dəyişən pointer ki, simli ki, array. Bəli. Biz bir yaddaş getdi əgər: STUDENT daha müraciət, biz h almaq olar? Bir string kimi saxlanılır? JASON Hirschhorn: kimi, biz - Bunu üçün qiymətlidir. Bu point arithmetic, siz uşaqlar edir əvvəl görüldü və olmalıdır ilə nisbətən rahat. Bu yazı yaxın edir - biz kodu bu xətt yazmaq idi, əgər biz əvvəl array notation gördüm. Bu, bizə ikinci verməlidir Bu array, h dəyər. Biz bunu, bu da verməlidir us ki serialın ikinci dəyər. Bu yaddaş üçün gedir, çünki ilk şey ünvanı, ancaq artıq şey yaddaş ünvanı. Və sonra star operator dereferences ki, pointer. Və yenə, görək. Biz yenə h almaq. TƏLƏBƏ: nə dəqiq demək dereference? JASON Hirschhorn: dereference getmək üçün bir xülya söz. Ki, getmək və orada nə almaq bir göstərici dereference edir. Bu yalnız bir xülya söz var. Biz çap istəyirdi: STUDENT bütün simli, ola bilər biz işareti göstərici nə? JASON Hirschhorn: OK, biz burada fasilə olacaq. Biz burada son gedir. Ampersand bir ünvanını verir yeri, belə ki, siz işareti etmək dəyişən, siz ünvanı verir ki, dəyişən saxlanılır yerləşir. Ampersand pointer siz verəcək Ptr yaddaşında olduğu Ptr ünvanı. Biz getmək fikrində deyilik Bu nümunə ilə. Bu anlamaq bilər öz şeylər. Amma yenə də, bu, hətta bir verging bilər Sizin üçün bilmək lazımdır nə kənarda bit bu orta müddətli dairəsi - və ya bu viktorina, olduqca. Üzr istəyirik. Mən, çünki hərəkət edir bir kodlaşdırma problem etmək istəyirəm Zaman qədər əvvəl. Və biz nə kod gedir Bu ən çekici nümunələri, atoi. Belə ki, bu bir sual idi iki il əvvəl bir viktorina. Və mən burada board var. İnsanlar viktorina soruşuldu - onlar bir az daha tesxt verildi sual, amma aradan gərəksiz olduğunu mətn çünki indi bizim məqsədləri üçün. Bu, yalnız bir fon idi nə atoi haqqında. Amma bütün bilirik və çox ATOI ilə tanış. Mən sizə bu kod gəlir kağız bir hesabatı. Mən də sizə strategiya istifadə gəlir biz artıq getdi etdik ki, bizim bölməsində bir çox. Birincisi, əmin anlaya nə atoi əməlindəndir. Şəkil çəkmək və ya bir ilə gəlmək Başınıza psixi image. Next, bu pseudocode yazmaq. Viktorina, siz bütün əgər pseudocode, ən azı bir şey yazmaq. Və sonra üzərinə ki, pseudocode xəritəsi C. Siz bir çek varsa sizin pseudocode kimi yoxlamaq əgər bir şey 1, sanki üzərində xəritələr edir s vəziyyəti və. Və nəhayət, C. proqramı kod Belə ki, geri ATOI getmək və beş dəqiqə bir hesabatında bu kod haqqında yəqin olan kağız, Bir almaq olacaq zaman məbləği kodu ATOI viktorina. Beş 15 dəqiqə, beş beş, 12 10 dəqiqə, məbləği haqqında Bu sərf istədiyiniz zaman Viktorinada sual. Belə ki, indi beş dəqiqə xahiş edirik. Və hər hansı bir sualınız varsa, qaldırmaq əl və mən ətrafında gəlmək lazımdır. [SIDE Söhbətlər] JASON Hirschhorn: OK, belə ki, ki, beş dəqiqə idi. Bu məbləğin yəqin idi zaman, bir viktorina ki sərf ediyorum O zaman bəlkə aşağı sonu. Biz bir az Recap lazımdır. Bizə bu kodlaşdırma başlamaq edək. Və biz bütün yolu yoxdur, əgər, bu cavab və bu viktorina sual yenə mövcuddur, Fall 2011 sual zaman viktorina çıxdı. Və səkkiz bal dəyər idi viktorina sonra. Səkkiz xal yüksək sonunda edir bal bir şey məbləği dəyər. Ən suallar intervalında bir altı xal. Belə ki, bu bir daha çətin əmin üçün sual. Mənə heç başlamaq edə bilərəmmi? Ümumiyyətlə, biz gedir Bu etmək istəyirəm məntiqi, ATOI fəaliyyət? Biz nə istəyirik? Beləliklə, biz yazmaq olacaq bəzi pseudocode. TƏLƏBƏ: simvol Convert integers daxil. JASON Hirschhorn: simvol Convert integers daxil. OK. Belə ki, necə çox simvol biz keçmək lazımdır gedir? TƏLƏBƏ: Onların hamısı. TƏLƏBƏ: Bütün simvol simli. JASON Hirschhorn: Hamısı simli simvol. Biz hər vasitəsilə getmək istəyirdi Belə ki, əgər simli xarakter, bir şey nədir C biz imkan verdi ki, gördüm Bizə hər vasitəsilə getmək üçün simli xarakter? TƏLƏBƏLƏR: loop üçün. JASON Hirschhorn: loop üçün. Beləliklə, biz vasitəsilə loop olacaq ə hər character. Sonra biz nə istəyirik gedir biz xüsusi xarakter almaq zaman? Biz 90 qəbul edirik deyirlər. Biz 9 almaq. Bu bir xarakter var. Biz nə ilə nə istəyirsiniz ki, xarakter 9? TƏLƏBƏ: xarakter 0 onu çıxar? TƏLƏBƏ: 0 Add? JASON Hirschhorn: çıxar xarakter 0 onu? TƏLƏBƏ: Bəli. JASON Hirschhorn: Niyə Bunu etmək istəyirsiniz? TƏLƏBƏ: [işitilemez] dəyər. Onun int dəyər. JASON Hirschhorn: OK, belə ki, biz almaq xarakter 9 dən çıxmaq karakter 0 bir almaq üçün faktiki tam 9. Sweet. Və necə ki, karakter bilmirəm 9 0 minus karakter 9? Siz nə chart baxmaq idi? TƏLƏBƏ: doqquz məntiqi var 9 və 0 arasında yerləri. Və ya ASCII masa baxmaq bilər. JASON Hirschhorn: ASCII masa. Amma bəli, siz də doğru danışırsınızsa. Beləliklə, biz 0 çıxmaq. Belə ki, indi biz tam 9 var. Və biz nə ilə nə istəyirsiniz? Biz 90 varsa, ilk tam deyil biz nə istəyirik? TƏLƏBƏ: Mən müvəqqəti tam qoymaq istədiyiniz array, sonra ona riyaziyyat etmək sonra sona daxil etmək üçün. JASON Hirschhorn: OK. TƏLƏBƏ: Siz sonunda başlaya bilərsiniz sonra array və irəli hərəkət ki, irəli hərəkət hər zaman, Siz 10 ilə çoxaltmaq. JASON Hirschhorn: OK. Ki, olduqca kimi səslənir çekici fikir. Biz serialın sonunda başlaya bilərsiniz, və biz strleng istifadə edə bilərsiniz. Biz burada strleng istifadə edə bilərsiniz. Biz simli uzunluğu almaq lazımdır. Biz sonunda başlamaq. Və + birinci, biz yalnız almaq ki, tam, və bəlkə biz kimi yaratmaq yeni tam dəyişən up top yerləşir biz hər şeyi saxlanılması edirik. S hər char vasitəsilə Beləliklə, biz loop geri ön, biz 0 çıxmaq və sonra biz onu, və asılı harada, biz bunu çoxaltmaq 10 bir güc tərəfindən. Çünki birinci, biz nə rightmost xarakter çoxaltmaq? TƏLƏBƏ: The 0 10. JASON Hirschhorn: The 0 10. Biz ikinci nə çoxaltmaq yoxdur rightmost xarakter tərəfindən? TƏLƏBƏ: [işitilemez]. JASON Hirschhorn: Nə? TƏLƏBƏ: 1. 10. JASON Hirschhorn: 1 üçün 10. Üçüncü-rightmost xarakter? TƏLƏBƏ: 2 10. JASON Hirschhorn: 2 10. TƏLƏBƏ: Bağışlayın, mən başa düşmürəm biz burada nə edirik. JASON Hirschhorn: OK, nin, sonra geri gedək. Beləliklə, biz almaq olacaq simli keçdi. Biz ATOI yazılı etdiyiniz çünki. Beləliklə, biz bir simli qəbul almaq. Biz keçdi əldə etdiyiniz demək simli 90. Biz nə olacaq ilk şey müəyyən edilir biz istəyirik ki, yeni tam dəyişən yalnız yaratmaq niyyətindədir yeni tam kimi. Yəni biz olacaq nə sonunda qayıtmaq üçün. Biz hər bir xarakter ilə getmək lazımdır simli biz müəyyən etdik, çünki biz hər bir toxunmaq lazımdır ki, sonra bizim yeni tam əlavə edin. Amma biz yalnız bir sıra əlavə edə bilməz. Biz yalnız 9 və bilməz bizim tam 9 əlavə edin. Bu nə yer asılıdır Bu simli edir. Biz çoxaltmaq lazım olacaq Bu 10 bir güc tərəfindən. Ki, çünki necə bazası 10 işləri. Belə ki, biz faktiki almaq olacaq xarakter, və ya faktiki tam sayı, xarakter 0 çıxarılaraq xarakterli 9 biz olduğu kimi olan xarakter kapital subtracting biz bir idi nə xarakter o problemləri. Belə ki, biz, həqiqətən, 0-dan bir sıra almaq lazımdır 9 real sayı qeyd, və biz will asılı olaraq 10 bir güc ilə çoxaltmaq biz simli olduğu haqqında. Və sonra biz onu geri əlavə olacaq yeni tam dəyişən. Belə ki, nə bu olduğu kimi görünür biz burada çəkmək lazımdır - ola. Biz simli 90 keçdi almaq - TƏLƏBƏ: [işitilemez]. JASON Hirschhorn: Amma atoi bir simli edir. Belə ki, biz vasitəsilə getmək olacaq holdinq. Biz 90-ci ildə qəbul almaq lazımdır. Biz qarşısında geri getmək. Biz 0 almaq. TƏLƏBƏ: Üzgünüm. Bəlkə bu axmaq deyil. Biz simli qəbul olmaq istəyirsinizsə, niyə biz istəyirik nə 90 keçdi mi? 90 tam deyil. JASON Hirschhorn: atoi bir tutur string və tam daxil çevrilir ki, simli nümayəndəliyi. Amma string 90 tam deyil 90 və ya 90. The string 90 iki array, və ya üç simvol, daha doğrusu, 9 xarakteri, 0 xarakteri, və backslash 0 character. Və biz, çünki üçün ATOI yazıyoruz Məsələn, siz əmri almaq zaman line arqument və bu qeyd edir argv, bir string kimi xilas oldu. Amma bir sıra kimi müalicə etmək istəyirsinizsə, Əgər onu çevirmək lazımdır faktiki tam. Hansı biz problem dəstdən birini etdi. Biz bir sıra hansı Bizim problem dəstləri. Bir tam aldı ki, hər kəs bir command line arqument kimi. Belə ki, niyə bizim atoi funksiyası bir simli edir. Belə ki, yenə burada bizim misalda, biz istəyirik son bir almaq üçün gedir. Biz xarakter çıxmaq olacaq Bu 0, çünki simvol 0 xarakteri 0 çıxılacaq verir görə faktiki sayı 0, biz ki, ASCII riyaziyyat. Simvol kimi təmsil olunur onların faktiki fərqli - burada xarakter, məsələn, kiçik bir 97 edir. Bu deyil - oops! Sizin gözləmək olardı nə deyil Məsələn, 0 olacaq. Beləliklə, siz çıxmaq üçün var xarakter 0 almaq. Beləliklə, biz burada nə olacaq faktiki sayı almaq üçün. Və sonra biz onu çoxaltmaq üçün gedir 10 güc yerdə asılı olaraq simli və sonra almaq və yerin sahibi əlavə dəyişən biz ilə gəlmək olar bizim son yeni tam. Ki, hər kəs üçün əhəmiyyət kəsb edir mu? Beləliklə, biz bu kod fikrində deyilik indi, çünki biz istəyirik zaman qısa əldə. Mən müddəti üçün üzr istəyirik. Amma bu nə, ümid edirəm ki, siz ki, edir at - viktorina edə ən azı, bu pseudocode almaq yazılı. Və sonra, biz əgər yazmaq pseudocode, həqiqətən, biz bunu edə bilər olduqca tez. Biz yazırdı şərhlər hər line burada tərcümə C kodu bir line. Yeni bir dəyişən, yazılı elan bir loop, bəzi toplama işlemi, bəzi vurma, və bəzi tapşırıq. Biz yəqin ki, həmçinin istəyirəm bir qaytarılması line yazın. Biz də qoymaq istəyirəm bilər Burada bəzi yoxlayır. Bəli. TƏLƏBƏ: Beləliklə, biz müalicə edə bilər faktiki string kimi s? Mən bilirəm çünki yalnız bir ünvanı var. Kimi, necə uzunluğu almaq olardı simli keçdiyi? JASON Hirschhorn: Belə ki, necə bir simli uzunluğu? Strlen. TƏLƏBƏ: strlen, evet. Amma kimi s qoya bilər ki dəlil? JASON Hirschhorn: Belə strlen bir char ulduz edir. Və bu char ulduz aşağıdakı və o, bir olur qədər hesablanması saxlayır backslash 0. strlen əslində digər proqramları biri kodu gedirdi. Bu kod yaxşı biri. Ki, bir, bir az daha asandır, çünki Bu barədə düşünəcəyik konseptual - Mən yalnız onu yüksək səslə dedi - strlen aşağıdakı bir pointer və saxlayır gedən və hesablanması və qədər track saxlanılması bir backslash 0 çatmaq. TƏLƏBƏ: OK, var. JASON Hirschhorn: belə ki, yaxşı viktorina 0 sabah uğurlar. Əgər hər hansı bir sualınız varsa, mən will Bu sonra xaricində. Mənə e-poçt çekinmeyin. Değilseniz öz TF həyata nail olmaq mənim bölməsində, və ya almaq deyil mənim istədiyiniz əgər e-poçt. Sizə qəribə istəyirəm və yalnız göndərmək mənə bir e-poçt, bir Freakout e-poçt, I will , bir smiley face, kimi, geri göndərmək və ya kimi, bir zarafat və ya bir şey. Belə də bunu çekinmeyin. Uğurlar yenidən və mən will bütün gələn həftə görmək.