[Powered by Google Translate] [Bölmə 4] [Less Rahat] [Nate Hardison] [Harvard Universiteti] [Bu CS50 edir.] [CS50.TV] Bütün hüquqlar, bölmə geri salamlayıram. Bu həftə bölmədə biz hər şeyi bir neçə etmək olacaq. Biz, ilk recap Problem Set 2 olacaq olan Sezar və Vigenère problem set olan. Və sonra biz Quiz 0 review daxil dalış olacaq və biz danışdı sonra nə recapping vaxt bir az sərf məruzələr, hər bir belə uzaq, biz də bir neçə problemlər edəcəyik əvvəlki ilin sınavlar var. Bu, uşaqlar üçün hazırlamaq üçün yaxşı yol yol. Başlamaq üçün, yaxşı çözümleri bir neçə qədər ayaqqabılı sonra Əvvəlki problem set üçün, Problem bu məkana, 2 seçin. Uşaqlar bütün bu linki basın, əgər və mənim adını basın və ilk təftiş basın əgər Mən də arıyorum dəqiq nə olan caesar.c, görürsünüz. Nin həqiqətən tez bu barədə danışmaq edək. Bu yalnız bir nümunə həll edir. Bu mükəmməl həll mütləq deyil. Bu yazmaq üçün bir çox müxtəlif yolları var amma mən qeyd etmək istəyirdi ki, bir neçə şey var Hesab edirəm ki, mən sınıflandırma kimi gördüm ki, ümumi səhvlər Bu həll user çox yaxşı bir iş yoxdur. Ilk üst başlığı comment bir növ olan edilir. Xətləri 1-7 vasitəsilə siz məlumat Bu proqram dəqiq nə edir. C kodu yazılı etdiyiniz zaman yaxşı bir standart təcrübə proqram bir fayl və ya içində asılı əgər birdən çox faylları üzərində split olsun bir növ olması üst comment orienting. Bu çıxmaq və real dünyada kodu yazmaq insanlar üçün də. Onlar copyright informasiya qoymaq lazımdır bu. Aşağıda # daxildir var. Line 16 Bu # biz yalnız bir bit qayıda bilərsiniz ki, müəyyən var. Və sonra bir funksiyası bir əsas başlayır başlayır Bu proqram bütün bir funksiyası olan çünki olur və bu çox idiomatik və C proqram tipik ki, ilk şey command line edir ki, dərhal yoxlayır ki, arqumentlər-dir arqumenti sayı üçün, argc. Burada biz bu proqramı tam 2 dəlilləri gözləyir görürük. Unutmayın ki, xüsusi biri olduğunu ilk dəlil var ki, həmişə run olunur ki, proqram adı var yürütülebilir fayl adı. Və bu nə bu proqram yayınlanmasını istifadəçi mane olur daha çox və ya daha az dəlilləri ilə. Biz üz sağ kontrol etmək istəyirəm səbəbi çünki biz, həqiqətən, burada etibarlı bu argv array erişemiyorum biz nə qədər böyük görmək işaretlediğinizden qədər. Mən gördüm ümumi səhvlər bir nəfər dərhal getmək idi və grab argv [1]. Onlar həyata sıra əsas arqument grab istədiyiniz və bir i onu yoxlamaq yoxdur və onlar, eləcə də növbəti test kimi argc test etmək istədiyiniz ilk arqument həqiqətən eyni zamanda bir tam idi, və ya və təchiz heç bir arqument var halda çünki iş deyil orada deyil ki, bir arqument qənimətçilik və ya olmadığını bir işğalçı cəhd olacaq. Siz qeyd edək ki, digər böyük şey olduğunu həmişə faydalı hata mesajı bir növ çap etmək istəyirəm Orient onlara istifadəçi. Mən sizə qəflətən bu çöküyor bütün run proqramları var əminəm və pops və deyir ki, bu gülünc az informasiya almaq bəlkə horribly sirli və bir şey bir səhv baş kodu və ya kimi bir şey verir ki, heç bir əhəmiyyət kəsb edir. Siz həqiqətən faydalı bir şey təmin etmək üçün istədiyiniz Bu və onlar run zaman "Oh," üz xurma getmək, belə ki, istifadəçi hədəf. "Mən bunu dəqiq bilirəm. Mən bu düzeltmek üçün necə." Mesaj çap deyilsə, o zaman həqiqətən sona istifadəçi getmək üçün tərk sizin mənbə kodu yoxlamaq səhv getdi nə anlamaq üçün. Müxtəlif hata kodları istifadə lazımdır ki, bir neçə dəfə də var. Burada yalnız bir səhv var idi deyə bir istifadə bir səhv var idi, bir səhv var idi. Böyük proqramları, digər proqramlar tərəfindən deyilir ki, tez-tez proqramları, müxtəlif ssenariləri xüsusi hata kodları bir növ qayıdacaq program ünsiyyət nə başqa cür olardı yalnız üçün gözəl İngilis mesajı istifadə edin. Cool. Biz aşağı iş kimi, biz əsas çıxarmaq bilərsiniz. Biz əsas uyğun görmek üçün test edin. Biz istifadəçi bir mesaj almaq. Biz əhatə edəcək bir şey və loop isə biz bu bunu səbəbi nə bir az bit, lakin o çıxır ki, siz nəzarət D yazın əgər Siz terminal ki GetString tez almaq zaman həqiqətən ki, nə xüsusi bir simvol göndərir ki, proqram. Bu ELF və ya fayl xarakter sonunda deyirlər. Və bu halda, bizim mesaj simli, null olacaq bu biz özü müəyyən problem yoxlanılır bir şey yox idi. Biz getmək kimi, indi biz göstəricilər haqqında danışmaq açılmış etdiyiniz yığın və dinamik yaddaş ayrılması, Əgər güc bir funksiyası var zaman null kontrol bir dəyər siz bunu vərdiş almaq lazımdır ki, bir şey kimi null qaytarın. Bu, ilk növbədə, illüstrasiya üçün burada. Amma gələcəkdə GetString görmək nə zaman, s 4 göstərilməyib Problem, siz mind bu saxlamaq lazımdır. Yenə, bu, hələ əhatə deyil çünki ya 3 göstərilməyib Problem üçün problem deyil. Nəhayət, biz əsas şifreleme loop almaq bu hissəsi almaq və burada şeyi bir neçə var. Birincisi, biz bütün mesaj string özü üzərində təkrarlamaq. Burada biz şəraitində strlen zəng saxlanılır sonra siz bir çox işarə var getmək üçün böyük bir yol deyil. Bu, həm də böyük deyil, bu halda çıxır biz mesajı özü məzmunu değiştirmeyle edirik qismən çünki daxili loop üçün, biz 10 simvol uzun bir mesaj varsa, İlk dəfə biz loop strlen nə qayıdacaqlar ki, başlamaq? 10. Amma sonra mesajı dəyişdirmək əgər, onun 5-ci xarakteri dəyişdirmək demək və biz, 5-ci mövqedə bir \ 0 xarakter atmaq bir sonrakı iteration haqqında strlen (Qur'anı) ​​bunu nə geri deyil biz iterated ilk dəfə, ki null terminator ilə atdı, çünki əvəzinə, 5 qayıdacaq və simli uzunluğu müəyyən edilir ki, \ 0 mövqeyi ilə. Bu halda, bu, yerdə değiştirmeyle edirik, çünki getmək üçün bir yoldur. Amma bu şifrelemek üçün həqiqətən təəccüblü sadə olduğunu qeyd Siz riyaziyyat doğru edə bilərsiniz. Lazım olan bütün baxaraq etdiyiniz və ya məktubu yoxlamaq böyük və ya kiçik edir. Biz yalnız kontrol etmək üçün, və biz kontrol yoxdur səbəbi isə alfa halda çünki bir xarakter böyük və ya əgər bu kiçik var sonra o, mütləq bir əlifba xarakter var biz böyük və kiçik rəqəm yoxdur, çünki. Biz və digər şey bu bir az çətin- biz standart Caesar parol formula redaktə etdiyiniz olunur biz problem set dəqiqləşdirilməsi ilə verdi. Burada fərqli biz çıxılacaq ki, bu böyük işin paytaxtı A, və sonra əsaslı bir əlavə sonunda geri. Mən sizə bir neçə kodunuzu bu işlər bilirik. Siz hər hansı gönderilerinizi bunu mi? Siz bu idi. Əgər bu nə Sahb izah edə bilər? Sağ sonra bir mod idi, çünki onu subtracting görə, Siz mövqeyi [öksürük] ​​almaq ki, yol həyata almaq lazımdır. Və sonra geri əlavə siz istəyirdi ki, artıq keçdikdə. Bəli, dəqiq. Sahb bildirib nə ki, əlavə etmək istədiyiniz zaman bizim mesaj və birlikdə bizim əsas və sonra mod ki, mod ki NUM_LETTERS tərəfindən biz ilk müvafiq 0 25 sıra bizim mesaj miqyaslı yoxsa, sonra biz həqiqətən qəribə nömrəsi əldə son bilər çünki biz mesaj [i] baxdığımızda baxaraq olduğunuz dəyərləri, biz düz-text mesaj İTH xarakter baxdığımızda, dəyəri bu 65 122 intervalında yerdə deyil kiçik z vasitəsilə böyük bir üçün ASCII dəyərlərə əsaslanır. Və biz, 26 və ya NUM_LETTERS tərəfindən Mod zaman ki, ildən # up burada sağ üst müəyyən ki, bizə 0 25 intervalında ki, bir dəyər verir ki, və biz o geri klikləyin üçün bir yol lazımdır və müvafiq ASCII intervalında almaq. Bunu ən asan yolu yalnız hər şey aşağı miqyasında deyil 0 25 sıra daxil, ilə başlamaq və sonra sonunda geri hər şey qədər tutulub. Mən daxil gördüm ki, başqa ümumi səhv ki, həqiqətən, hemen bu scaling etmirəm əgər və demək, siz birlikdə mesaj və əsas əlavə və onlara əlavə ilə bir char dəyişən daxil problemi Mesaj ildən [i] başlamaq üçün nisbətən böyük sayı ilə bir böyük deyil, əgər ən azı 65 var unutmayın xarakter böyük bir düyməsi, demək, 100 kimi bir şey var, əgər və siz bir daşqın almaq olacaq imzalanmış char daxil birlikdə o 2 əlavə edin. Siz 127-dən çox deyil ki, bir dəyər almaq olacaq bir char dəyişən saxlamaq olar ki, ən böyük dəyərdir. Siz başlamaq şey ki, sort etmək istəyirəm niyə Yenə ki. Bəzi insanlar bir halda başqa etdiyini və test ki, hal ətrafında var bu daşqın ki, əgər bunu əvvəl görmək, lakin bu yolu ətrafında olur. Və sonra bu həll biz çox sonunda bütün cərgə çap. Digər insanların bir zaman bir xarakteri çap. Hər iki zəhmli edir. Bu nöqtədə, uşaqlar hər hansı bir sualınız bu barədə hər hansı bir şərh edirsiniz? Istədiyiniz şeyi istədiyiniz olmayan şeylər? Mən bir sual idi. Bəlkə sizin izahat zamanı buraxılmış, lakin bu proqram necə mətnin uzunluğu əsas birləşdirən üçün boşluq keçmək? Bu yalnız Sezar parol edir. >> Oh, sorry, evet. Bəli, biz görəcəksiniz. Olan Sezar parol biz ki, ətrafında var, çünki biz yalnız simvol Çevrilmiş. Onlar böyük və ya kiçik olsaydı Biz yalnız onlara qayıdacaqdır. Siz uşaqlar bu barədə çox yaxşı hiss? Bu ev surəti çekinmeyin, onu uşaqlar yazırdı nə müqayisə. Əlbəttə da haqqında sual göndərmək üçün çekinmeyin. Və yenə sizin problem ilə burada məqsəd qoyur ki, həyata uşaqlar üçün problem dəstləri üçün mükəmməl kodu yazmaq üçün deyil. Bu öyrənmə təcrübəsi var. Bəli. Geri do üçün loop, bu bərabərdir əgər null isə, belə null yalnız heç bir şey deməkdir, yalnız daxil edib? Null xüsusi göstərici dəyəri biz demək istəyirəm zaman və biz null istifadə biz heç bir şey işarə edən bir pointer dəyişən var. Və adətən o deməkdir ki, bu dəyişən, bu mesajı dəyişən biz CS50 xüsusi string növü kullanıyorsanız, çünki boş və burada, bu CS50 string növü nədir? Siz David mühazirə başlıq geri çəkilmək zaman nə deyirsiniz? Bu funky-bu bir göstərici deyil, sağ? OK, yeah. >> Bu char * var. Və həqiqətən biz bu əvəz edə bilər Burada char * mesajı ilə, və belə GetString funksiyası uğurla istifadəçi bir string almaq deyilsə, bir string analiz edə bilməz, və bir halda ki, bir string analiz bilməz olan istifadəçi fayl xarakteri, nəzarət D, sonunda əgər siz adətən nə bir şey deyil, lakin olur ki, əgər sonra funksiyası deyərək bir yolu kimi bu null dəyəri qayıdacaq "Hey, mən bir string almaq olmadı." Biz mesaj = null qoymaq yoxsa nə olur biz hələ bunu hələ ki, bir şey olan? Niyə ki, burada bir problem ola bilər? Mən biz yaddaş sızıntıları haqqında mühazirə bir az söhbət bilirik ki, çünki. Bəli, bunu edək və nə görmək edək. Basil sualına biz, həqiqətən, yoxsa nə baş idi Bu mesajı = null test? Üst diyirləyin edək. Siz uşaqlar bunu şərh edə bilər. Əslində, mən bir versiya ilə saxlamaq lazımdır. Bu Revision 3 olacaq. Nə bu proqram run etmək lazımdır, siz burada bu Ötürücü icon basın lazımdır ki, və bunu bir arqument əlavə etmək lazımdır. Biz bir command line arqument keçmək istəyirəm bəri Siz əsas arqument vermək lazımdır. Burada bu sayı 3 vermək gedirəm. I 3 istəyirəm. İndi geri həyata zoom proqram çalışır. Bu bina, tərtib, çalışan oldu. Burada getmək. Bu istenir gözləyir edir. Mən salam-Ü kimi bir şey yazın ki, əgər getmək idi? Oh, mənim proqram çalıştırmak üçün çox uzun çəkdi. Mən çox uzun jawing edilib. Burada gedir. İndi salam yazın. Biz müvafiq şifreleyerek görürük. Biz null qayıtmaq tez GetString əgər İndi nə olacaq? Unutmayın, biz etdi bildirib ki, eyni zamanda nəzarət D basaraq. Burada diyirləyin olacaq. Biz daha run lazımdır. Binanın. Orada gedir. İndi nəzarət D hit zaman Mən opt/sandbox50/bin/run.sh deyir ki, bu xətt, Segmentasyon günah var. Uşaqlar əvvəl gördünmü? [Tələbə] Neden heç >> Bağışlayın var? [Tələbə] Nə üçün bu halda heç bir core dump var? The core dump edir-sual niyə burada heç bir core dump edir? Sual ola bilər ki, ancaq core dump bir fayl ki, sabit saxlanılır olur. Bu halda biz əsas zibilliklərin aradan etdik run server ki, biz insanların faulting seg yoxdur və əsas zibilliklərin ton tikinti. Amma bir almaq bilər. Core zibilliklərin, siz tez-tez aradan bilər ki, bir şey sıralama var və bəzən siz. Seqmentləşdirilməsi, günah sizin suala cavab, Basil, biz bir pointer daxil olmaq üçün cəhd deyib ki, bir şey qeyd etmək müəyyən deyil. Binky çalıştığında video Binky saxla bir işarə deyil ki, bir göstərici əldə getmək? Bu halda mən texniki göstərici bir şey işarə edir danışarlar. Bu texniki 0 olan null, işarə edir lakin əlçatan deyil ki, bir seqment müəyyən edilir proqram ilə, belə ki, bir seqmentasiya günah almaq yaddaş daxil deyilik ki, cari bir seqment var yığın seqmenti və ya yığını seqment və ya data seqment kimi. Cool. Sezar haqqında daha çox suallar? Üzrə hərəkət edək. Həqiqətən tez Revision 2 baxaq. Bu Vigenère var. Burada Vigenère ilə biz yenidən, çünki olduqca tez bu biri ilə gəzmək lazımdır Vigenère və Sezar çox oxşardır. Mövzu comment əvvəl, Bu sehrli ədəd istifadə qarşısını almaq üçün əvvəl # müəyyən edir. Gözəl şey biz hərəkət etmək istədi deyə edilir kimi fərqli bir əlifba və ya bir şey. Əksinə bütün 26 ən kodu dəyişdirmək əl getmək üçün olan daha biz 27 dəyişdirə və ya açılan bilər biz müxtəlif əlifbalar, müxtəlif dillərdə istifadə edin. Yenə biz mübahisə sayı bu çek var və həqiqətən, demək olar ki, bir şablon kimi bu edə bilərsiniz. Yazmaq olduqca çox hər proqramı-olmalıdır xətləri bu command line sürsə arqumentlər-bir ardıcıllıqla ki, əvvəldən bu kimi oxuyur. Bu, istədiyiniz ilk ağlı başında olma testlər biri. Burada biz əmin olduğunu edildi nə söz etibarlı idi ki, biz ki, ikinci çek idi. Biz argc və 2-dən bu ayrı bir daha bildirək. Bu halda biz ki, bir şey əvəzinə Qeyd edək ki, i istifadə edərək biz, bütün simli doğrulamak üçün istədi və qaydada həqiqətən xarakteri ilə xarakter getmək bunu simli üzərində. Bu barədə bir şey zəng etmək üçün heç bir yaxşı yolu yoxdur hətta, məsələn, bir i 0 qayıtmaq çünki bir tam analiz mümkün olmadıqda, hətta iş deyil ki. Yenə dəqiq istifadəçi izah gözəl mesaj nə. Sonra burada yenə biz də işin idarə yerləşir nəzarət D təsadüfi xarakter istifadəçi növləri. Və sonra Charlotte biz boşluq keçmək üçün idarə necə haqqında bir sual daha əvvəl idi Burada simli edir. Bu, Myspace proqramı ilə nə oxşar cür idi biz bölməsində etdi və bu şəkildə işləmişdir ki, biz görmədiyim ki, məktubların sayı izlenen ki. Biz xarakteri ilə karakter gəzmiş kimi biz, mesaj string gəzmiş biz loop üçün hissəsi kimi index izlenir, sonra biz də izlenir məktubları sayı, belə qeyri-xüsusi simvollar, qeyri-rəqəm, qeyri-ağ kosmik Biz ayrı-ayrı dəyişən görmədiyim ki. Və sonra bu həll əsas dəyişiklik faktiki əsas tam almaq və fly ki, nə üçün, sonra faktiki mesaj xarakteri şifrelemek gedir sağ əvvəl. Çox mükəmməl böyük idi ki, bəzi həllər var əsas-nin etibarlılıq üçün test zaman əsas qədər dəyişə bilər. Arxayın əlavə ki, xarakteri və söz alfabetik karakter bu da bir tam çevrildi 0 25 intervalında sonra loop üçün bu ki, sonra nə olan keçmək üçün. Yenə, bu, həqiqətən, tam olaraq eyni kodu burada biz bu nöqtədə Caesar istifadə edir. Siz eyni şey yapýyorsun, real oyun həyata figuring belə bir tamsayı daxil söz açmaq üçün necə. Bir şey biz burada ki bir az sıx olduğunu biz bu söz təkrar, mən, siz zəng edə tapmaq Xətləri 58, 59, və 61-də 3 ayrı dəfə. Kimsə məhz bu söz nə izah edə bilər? Siz dediyiniz kimi, bir simvol daxil edir. Bəli, bu söz ilə [işitilemez] bir xarakter var yalnız birlikdə hərəkət edirik, çünki belə Göründüyü məktubları sıra Siz məktubu gördüm bir söz, belə səmərəli boşluq və bu kimi məhsulları keçmək olacaq ki,. Bəli, dəqiq. Əgər ətrafında geri hərəkət belə Və sonra bir dəfə Siz yalnız mod söz boş gördüm. Exactly. Bu mükəmməl izah edir. Nə Kevin dedi biz söz daxil index istəyirəm ki. Siz ki, Biz də num_letters_seen xarakter almaq istəyirəm lakin num_letters_seen söz müddəti artıq olduqda, biz müvafiq sıra geri almaq yolunda biz mod operator istifadə səmərəli ətrafında kesmek üçün. Məsələn, qısa olduğu kimi, bizim söz, donuz edir və 5 məktublar uzun. Amma bu nöqtədə bizim düz metin 6 məktubları gördüm və 6 şifrəli. Biz num_letters_seen daxil sona çatacaq olan söz mod uzunluğu, 5, 6 və biz nə edəcəyik biz rəftar belə 1 almaq və olacaq o nöqtədə bizim söz ilk xarakter içərisində olmaq. Bütün hüquqlar, Vigenère dair suallarınız biz hərəkət əvvəl? Siz uşaqlar bu barədə çox yaxşı hiss? Böyük, sərin. Mən sizə uşaqlar kodu görmək imkanı əldə əmin etmək istəyirəm biz yaxşı görünür edirəm və öyrənmək imkanı var. Bu, hazırda boşluq istifadə edəcəyik son olacaq və indi keçid olacaq və mən cs50.net/lectures getmək üçün gedirəm biz viktorina baxış bir az edə bilərsiniz. Mən viktorina baxış edir başlamaq üçün hesab edirəm ki, ən yaxşı yolu Bu mühazirələr səhifə gəlmək deyil, cs50.net/lectures, və həftə mal hər altından, mən, Həftə 0 burada baxmaq əgər Mən biz Həftə 0 əhatə edən mövzuların siyahısı var olduğunu görürük. Bu mövzular hər hansı sizə tanış olmayan görünürsə siz mütləq mühazirə qeydləri və bəlkə geri təmizləmək lazımdır əgər siz hətta mühazirələr vasitəsilə üzsüz, yenə onlara baxmaq bu mövzu hər nə üçün bir fikir almaq üçün. I əlavə biz var sərin ehtiyatları bu il bir deyəcəklər biz yaratdıq ki, bu şort və siz Həftə 0 baxsaq, biz əhatə mövzular bütün deyil, lakin biz onlardan bir neçə var bu trickier isə bəzi belə yenə bu şort seyr sürətli siz almaq üçün yaxşı bir yoldur. Xüsusilə, mən o idi-ci ildən, altındakı 3 bir plug qoymaq gedirəm. Amma ikili mübarizə edirsinizsə, bit, hex, məhsullarının belə, binar başlamaq üçün böyük bir yerdir. ASCII çox Təfərrüatlar üçün yaxşı ki, başqa biridir. Mən sizə çox yavaş gedirəm əgər hətta 1.5x sürəti mənə baxa bilərsiniz. Bu nəzərdən ildən, bunu çekinmeyin. Yalnız həqiqətən tez başlamaq üçün, biz bu viktorina problemləri bir neçə ilə getmək olacaq yalnız tez bu yolu nehrə üçün. Məsələn, mən şurası sağ qədər burada var ki, problem 16 baxaq. Biz, ikili, bu aşağıdakı hesablanması var və biz hər hansı bir iş göstərmək istəyirəm. Okay, bu bir shot vermək gedirəm. Siz uşaqlar, kağız ilə birlikdə olmalıdır və biz, həqiqətən, tez bu edəcəyik. Biz ikili aşağıdakı hesablanması çıxış etmək istəyirəm. Mən 00110010 var. Mən bu 00110010 əlavə etmək üçün gedirəm. Riyaziyyat üçün, evdə birlikdə aşağıdakı dahi Bu səmərəli 2 vurulması olunur. Nin başlamaq edək. Biz ki, həmin əlavə alqoritm izləmək olacaq biz birlikdə decimal nömrələrin əlavə zaman. Həqiqətən, burada yalnız fərq biz loop geri ətrafında bir dəfə biz 1 + 1 əvəzinə bir dəfə biz 10 almaq var. Biz həqiqətən tez sağdan başlamaq varsa, nə ilk rəqəmli var? [Tələbə] 0. >> [Nate H.] 0. Böyük, ikinci rəqəmli? [Tələbə] 1. [Nate H.] bir 1 mı? 1 + 1? [Tələbə] 10. [Nate H.] Məhz, mən birlikdə əlavə 2 olanları altında sağ yazmaq ki rəqəmli belə nədir? [Tələbə] 1, 0, və ya 0, sonra 1 daşıyır. [Nate H.] 0 və dəqiq, 1 daşıyır. Sonrakı bir qədər, Basil, siz istəyirik. Üçüncü nədir? >> [Basil] 1. [Nate H.] 1, mükəmməl. Kevin? [Kevin] 0. >> [Nate H.] 0, Charlotte? [Charlotte] 0. >> [Nate H.] Bəli, mən nə etməliyəm? [Tələbə] 1-. [Nate H.] Mən nə etməliyəm? Və sonra mən 1 daşıyır. Mükəmməl, Sahb? >> [Sahb] İndi siz 1 var. [Nate H.] Mən burada bir şey var? [Sahb] Sonra siz 1 keçirilmişdir çünki 1 mövcut növbəti bir. [Nate H.] Böyük, belə ki, burada biz onu bitirmək bilər. Cool. [Tələbə] 0 + 0 = 0 varmı? 0 + 0 = 0. 1 + 1, siz bildirib kimi, 0, 10 və ya 1 deyil. 10 mənə 10 sayı 10 deməkdir, çünki bir yanlış ad deyil, və biz bunu yazılı etdiyiniz zaman biz onu təmsil etdiyiniz necə qəribəlik var. Biz, 1, 0 sayı 2 təmsil, və 10 saylı az fərqli. Binar haqqında gözəl cür nə həqiqətən çox deyil ki, Əgər öyrənmək lazımdır hallarda. 0 + 0 = 0, 0 + 1 = 1 var 1 + 1 0, sonra, bir 1 aparmaq və sonra sağ üçüncü sütununda burada görə bilərsiniz biz bu 1, 1, 1 idi. Və 1 + 1 + 1, 1 və başqa 1 daşıyır. Siz ikili əlavə edirik zaman, olduqca sadə. Mən ağlı başında olma özünüzü yoxlamaq üçün bu bir neçə daha çox istədiyiniz Bu, çünki getmək əvvəl Yəqin ki, biz viktorina görmək lazımdır ki, bir şey. İndi, bu növbəti bir nə edək. Problem 17 nə edək. Biz decimal aşağıdakı binar sayı çevirmək olacaq. Mən 10100111001 var. Etdim ki, ikili video saxla Mən nümunələri bir neçə ilə getdi və mən necə göstərdi siz decimal bu yapýyorsun zaman hər şey işləyir. Siz decimal təmsil çalışırıq zaman ki, biz olduğunuzu düşünürəm bu bizim həyatımızda bu nöqtədə belə səlis ki, onu həqiqətən işləri necə mexanika üzərində parıltı olduqca asandır. Mən sayı 137 varsa Lakin, tez recap etmək bu həqiqətən deməkdir və yenidən bu decimal edir təmsil- decimal ilə sayı 137 I 1 x 100 + 3 x 10 + 7 x 1 malikdirlər. Bu, bütün ekran qalan deyil. Və sonra, burada bu rəqəmlər baxsaq 100, 10 və 1, onlar həqiqətən 10 bütün səlahiyyətləri olduğunu görürük. Mən sıfır 10 ², 10 saylı, 10 var. Biz ikili şey oxşar növ var başqa bizim baza, biz zəng kimi, 10 2 əvəzinə dir. Mən altındakı burada yazmışdır ki, bu 10s, bu 10 ², 10 saylı, sıfır, 10, 10 bizim bazası və eksponent, 0, 1 və ya 2, biz yazmaq ki sayı rəqəmli mövqeyi ilə nəzərdə tutulub. Biz buna baxsaq 1, bu 1 2-ci mövqedədir. 3 1-ci mövqe, və 7-0th vəziyyətdədir. Bu, bizim əsasları üçün aşağıdakı müxtəlif eksponatlarla almaq nasıl. Bu we'll-əslində bütün sonra, siz nə bilirik? Biz mənim geri düyməsinə do-Ü getdi olacaq? Orada gedir. Mən bu şey geri sevirəm. Bundan sonra mən ən azı mənim üçün hesab edirəm ki, bir ikili sayı konvertasiya başlamaq üçün en asan yol əsasında 16 olduğu və ya hexadecimal sayı və 10 və ya 2 irəli getmək və yazmaq üçün üst mənim ikili sıra nömrələri bütün əsasları və eksponent. Biz yenə sol başlamaq varsa, counterintuitive növü, olan Burada qara geri dəyişdirmək lazımdır, biz 0th mövqeyi 2 mövcut və sonra 2 saylı var, 2 ², və sonra 2-3-5-2-4, 2, 6, 7, 8, 9, 10. Mən yazdıq Bu nömrələr bütün eksponatlarının var. Mən yalnız alan ilk 3 burada əsasları yazdı. Bu nöqtədə davam gedirəm və mən həqiqətən silmək gedirəm ki, OK əgər biz decimal etdi ki, stuff. Siz bütün var. Mən əminəm online izləmək sizin istədiyiniz əgər mənə geri olacaq. Qələm geri edin. İndi, nə biz nə-if uşaqlar 2 sizin səlahiyyətləri haqqında sürətləndirmək üçün tamamilə qədər deyil, ki, tamamilə sərin var. Bu olur. Mən başa düşürəm. Mən 2 bütün səlahiyyətləri bilməlidir verib harada bir iş müsahibə idi up vasitəsilə 2 30. Mən var bir iş deyildi. , Hər halda, uşaqlar davam edə bilər və burada riyaziyyat etmək lakin binar ilə həqiqətən mənada etmir və nə də, ya decimal ya hexadecimal ilə mənada edir siz adet sıfır olduğu həyata riyaziyyat etmək. Mən burada, buraya, burada burada burada, burada 0 0 0 0 0 0 mövcut bilərsiniz. Nə üçün faktiki math etmək mənada bilər ki, mövqe üçün 2 müvafiq güc hesablamaq üçün? Charlotte bildirib kimi Məhz, bu 0 olacaq. 2 səlahiyyətləri hesablanması üçün güclü kostyum deyilsə, həmçinin özünüz vaxt saxlaya bilər. Bu halda biz yalnız 0 2 üçün hesablamaq lazımdır-? [Tələbə] 1. [Nate H.] 1, 2, 3 olan-? [Tələbə] 8. >> [Nate H.] 8. 2, 4? [Tələbə] 2. I, sorry 1 edirəm. [Nate H.] 2 4 tam, 16-dir. 2 5, Kevin? >> 32. [Nate H.] 32, 2, 8? [Tələbə] 32 x 8, 256. [Nate H.] mükəmməldir. Və 2 10? [Tələbə] 1024. [Nate H.] Bəli, 1024. Sonra biz onları yekunlaşdırmaq olar bu rəqəmlər var. Və bu şeyi bir neçə etmək həqiqətən vacib yerdir. Bir yavaş getmək və iş kontrol edilir. Siz bu sayı sonunda 1 var deyə bilərəm ki, Mən mütləq mənim nəticəsində tək sayda almaq lazımdır bütün digər olanları belə nömrələri olacaq, çünki bir ikili sayı ki verilir. Siz test bu nöqtəyə almaq əgər bunu başqa bir şey və bu günə qədər həyata yazdıq və vaxt həyata çalıştırıyorsanız bu problem lazımdır ki, xal sayı baxırıq. Bu problem görmək-əgər kimi mən, həqiqətən, mənim laptop geri flip tez- bu problem 2 bal lazımdır, belə ki, bu əlavə və sort deyil həqiqətən, vaxt darda əgər siz keçir edilməlidir. Amma iPad geri keçmək lazımdır və biz, həqiqətən, tez keçmək lazımdır. Mən ilk kiçik nömrələri bunu istəyirəm Mən ki, asan tapmaq üçün. Onlar olduqca asan birlikdə getmək, çünki mən 32 və 8 istəyirəm, və biz 50 almaq. 16 və 1 17 olur. , Biz, 57 almaq və sonra biz bu istirahət etmək, belə ki, biz, 156 57 edə bilər. Hadi. Man, yaxşı nin görək. Biz 57, 256 və 1024 olmuşdur. Bu nöqtədə, mən deyil, yalnız keçmək istiyorum. I ipucu yoxdur. Mən aydın bu qədər oxumaq lazımdır. 7, 6, 4, siz 17 almaq. 1, 5, 5, 2, 13. Sonra 3 almaq və sonra 1 almaq. 1337. Pasxa yumurta, heç? Kimse bu sayı tanımaq? Chris sayı tanıyır. Bu, Chris nə deməkdir? [Chris] Leet. Bu baxsaq Leet ki, bu leet kimi görünür. Hacker stuff. Də orta və ya viktorina deyil, haqqında stuff ki cür üçün Watch out. Siz məhsullarının bu cür görmək və merak istəyirsinizsə "Huh" ki, həqiqətən bir şey demək bilər. Bilmirəm. Davud da qoyaraq bəyənir Bu ağlı başında olma kontrol üçün yaxşı bir yoldur. Tamam kimi, mən nə edə bilərsiniz. Bu həftə 0/Week 1 məhsulları var. İndi bizim laptop geri keçmək varsa, zoom və digər şeyi bir neçə. Biz problem dəstləri ilə bir çox bunu etdiyiniz, ASCII var. Kapital A. Bu anlayış həqiqətən nədir? Bu decimal tam deyil biləndir. 65, bu ASCII cədvəldə eşlenen nə edir və, kompüter o yazır necə buna görə də var və biz, həqiqətən, yazı ilə üz əldə etdik necə xarakteri kapital A və xarakteri bir kiçik siz bunu etdik ki, bu həllər və problem dəstləri bəzi. Digər bir cüt. Biz hesabatları, boolean ifadələr, şərtlər, loops, dəyişənlərin və mövzuları var. Bu bütün hissəsi mənada görünür? Bu terminologiya bəzi vaxtlarda bir az funky edir. Mən nöqtəli vergül ilə başa çatır ki, çox hissəsi bir şey kimi bir bəyanat hesab etmək istəyirəm. Belə x kimi Hesabatları = 7, dəyişən müəyyən edən, güman x = 7 çağırıb. Ehtimal x, həmçinin 7 saylı saxlaya bilərsiniz ki, bir növü belə ki, bir int və ya bəlkə bir float və ya qısa bir və ya bir char var kimi bir şey. A boolean ifadə bərabər bu ikili istifadə və bang, daha az, bərabər və ya bərabər deyil daha az və ya məhsullarının bütün növ bərabər. Conditions sonra əgər başqa hesabatları. Mən sizə bir müvafiq olmayan başqa ola bilməz unutmayın bilər. Eyni zamanda, əgər bir müvafiq olmayan başqa ola bilməz. Loops, sizə daxil hammering olduğunuz loops, 3 növ geri bölmələr və problem dəstləri, son bir neçə. Istifadəçi girişi əldə etdiyiniz zaman isə nə istifadə edərək, xüsusi şərt qədər loops doğru isə istifadə edərək, Əgər ehtiyac varsa və sonra loops üçün bu istifadə Siz hazırda olduğunuz loop hansı iteration bilirəm mən bu barədə düşünmək necə. Yoxsa mən bir şey etmək istəyirəm bir string-də hər bir xarakter üçün edirik, əgər Hesab edirəm ki, element üçün bir şey etmək istəyirəm bir sıra hər bir element üçün. Threads və hadisələr. Bu biz, C belə aydın əhatə deyil lakin Not bu xatırlayıram. Bu, müxtəlif scripts malik anlayışdır. Bu da bir hadisə yayımı bu anlayışdır. Bəzi insanlar, əvvəlcə öz layihələrində yayım istifadə etməyib ki, tamamilə sərin lakin bu, concurrency adlanan bu böyük məsələ user 2 müxtəlif yolları olan necə proqramları icra etmək üçün almaq nə edir və ya zahirən eyni zamanda icra? Digər vəzifələri də çalışan isə müxtəlif vəzifələri çalışır. Bu əməliyyat sistemi iş görünür necə. Bu, misal üçün, nə olsa belə deyil Mən browser çalışan var, mən də Spotify yandırmaq və bir mahnı oynaya bilər. Başa düşürük ki, konseptual şey daha var. Mən qısa mövzuları nəzər ki, Bu barədə daha ətraflı məlumat istəyirsinizsə. Bakalým, mən orada ola inanıram bu bir bu barədə bir problem. Yenə mövzuları və hadisələri biz C əhatə edəcək bir şey deyil hesab o dərəcədə Not daha çətindir yalnız çünki. Siz orada narahat, lakin mütləq anlayışlar anlamaq lazım deyil neler başa düşürük. Biz hərəkət əvvəl, həftə haqqında suallarınız 0 material? Hamı çox yaxşı hiss? Anlaşma dəyişənlərin və nə dəyişən deyil? Hərəkət. 1 Hafta. Xüsusilə əhatə deyil ki, burada bir cüt viktorina baxış mütləq, həm də düşünmək daha konseptual şeylər. Ilk mənbə kodu, derleyiciler və obyekt kodu nə bu anlayışdır. Kimse Yok Mu? Basil. Olunur obyekt kodu-I mənbə kodunu cingilti istismara nə demək, və obyekt kodu nə cingilti kompüter proqramı oxuya bilərsiniz ki, həyata qoyur edir. Exactly. Source kodu həqiqətən qədər yazın ki, C kodu. Obyekt kodu siz cingilti çıxmaq edir. Bu ikili formatda 0s və 1s var. Əgər obyekt faylları bir qom zaman sonra nə olur ki, Bir layihə və ya bir neçə mənbə kodu faylları istifadə edir ki, bir proqram tərtib edirik demək olan konvensiya tərəfindən. c fayl uzantısı verilir. Biz caesar.c, vigenère.c var görə. Java proqramları yazıyoruz Əgər onlara məsləhət verir. Java. Python proqramları məsləhət var. Py tez-tez. Bir neçə. C faylları, onları tərtib edir. Zınqıltı bu ikili junk bütün spits. Yalnız 1 proqram istəyirəm Sonra çünki Bu obyekt bütün birlikdə faylları Linker link var 1 faylı daxil. Bu CS50 kitabxana istifadə edərkən nə Məsələn, olur da. Bu CS50 kitabxana ki, həm də. H header fayl oxumaq ki, # includecs50.h ki. Və sonra da xüsusi bir ikili kitabxana fayl var ki, 0s və 1s ki, tərtib edilmişdir və-l bayrağı, belə ki, biz məkanı geri və əgər biz həqiqətən tez baxmaq biz cingilti komanda baxdığımızda burada neler da, nə var bu Burada bizim mənbə kodu fayl deyil. Bu compiler bayraqları bir dəstə var. Və sonra çox sonunda bu-l bayraqları keçid Bu 2 kitabxanalar üçün faktiki ikili faylları, CS50 kitabxana və sonra math kitabxana. Faylları 'məqsəd hər bir növü Anlaşma tərtibi prosesində etmək istədiyiniz bilərsiniz bir şeydir ən azı bir yüksək səviyyəli xülasə verir. Obyekt kodu çıxır daxil Source kodu gəlir. Obyekt kodu faylları birlikdə keçid, bir gözəl, yürütülebilir fayl almaq. Cool. Bir neçə bal səhvlər əldə edə bilərsiniz Bu da tərtibi prosesi. Bu hallarda, misal üçün, bu keçid bayrağı almaq əgər ki, Siz kodu yayınlıyorsanız zaman CS50 bayrağı və siz məkanı onu buraxmaq və ya Siz keçid mərhələsində bir səhv almaq lazımdır bu və Linker Hey, bir funksiyası GetString adlı "deyəcəklər ki CS50 kitabxana var. " "Siz bu CS50 kitabxana idi mənə, mən bunun üçün kod tapa bilməz." Siz bu link var ki, və ayrı-ayrı deyil bir compiler səhv olan compiler sintaksis və məhsullarının bu cür baxırıq, çünki. Bu zaman nə bilmək yaxşı. Digər şeylər haqqında bilmək. Mən sizə mütləq Jordan tərəfindən həyata typecasting haqqında qısa nəzər istəyirəm deyərdim ints başlıq altında nə anlamaq üçün, başlıq altında nə chars var. Biz ASCII haqqında danışmaq və biz, həqiqətən, ASCII masa baxdığımızda, edir ki, nə başlıq göz altında bizə verir kompüter faktiki kapital təmsil necə A və rəqəmli 7 və bir vergül və bir sual işarəsi. Kompüter də təmsil etmək üçün xüsusi yollar var bir tam kimi sayı 7. O, üzən sayı sayı 7 təmsil etmək üçün xüsusi bir yol var və bu çox fərqlidir. Typecasting bilgisayarı "Hey, mən sizi çevirmək istəyirik demək necə bir nümayəndəlik başqa nümayəndəliyinə ". Niyə biz nəzər deyil. Mən də kitabxanaları haqqında qısa və derleyiciler haqqında qısa nəzər olardı. Tərtibi prosesi haqqında Həmin müzakirəsi, nə bir kitabxana, və xahiş almaq bilər ki, bu suallara bəzi üzərində gedin. Həftə 1 material haqqında suallar? Siz əhatə istədiyiniz zor görünür ki, burada hər hansı bir mövzu var? Biz əldə edə bilərsiniz, belə ki, bu əvvəllər mövzular ən vasitəsilə zərbə çalışıram göstəricilərinə və recursion do bir az. Düşüncələr? Əhatə şey? Bəlkə bir şokolad üçün vaxt? Siz uşaqlar vasitəsilə işləyir. Mən qəhvə haqqında yudumlayan saxlamaq üçün gedirəm. Həftə 2. Yaxşı zəng, yaxşı deyirik. Həftə 2 biz funksiyaları haqqında bir az daha etdi. Ilk bir neçə problem dəstləri, biz, həqiqətən, hər hansı funksiyaları yazmadım fəaliyyət göstərən başqa? Dəqiq [Tələbə] Ana. >> Ana. Və biz əsas bırakır ki, müxtəlif geyim gördük. Bu arqumentləri heç verdiyi biri var və biz yalnız mötərizə arasında boşluq demək və sonra, biz command line arguments etmək istəyirsiniz Ü biri var siz int argc və simli argv array var və biz gördüyümüz kimi, ki ya indi biz həqiqətən ki, char * olmaq string məruz etdiyiniz biz char * argv və sonra mötərizədə kimi yazmağa başlayın olacaq. Problem Set 3, uşaqlar, funksiyaları bir dəstə gördüm və funksiyaları bir dəstə həyata çəkmək, scramble axtarmaq. Bu prototipləri bütün üçün yazılmışdır. Mən, həqiqətən, tez funksiyaları ilə burada danışmaq istədiyini bir funksiyası yazmaq zaman 3 hissədən onlara var ki. Siz funksiyası qaytarılması növü müəyyən etmək lazımdır. Siz funksiyası üçün bir ad daxil etmək, və sonra müəyyən etmək arqument siyahısı və ya parametr siyahısı. Məsələn, əgər mən integers bir dəstə yekunlaşdırmaq üçün bir funksiyası yazmaq idi və sonra mənə geri növü nə məbləği qayıtmaq Mən integers yekunlaşdırmaq və sonra məbləği geri qaytarmaq istəyirdi? əgər Sonra funksiyanın adı. Mən irəli getmək və yaşıl yazmaq varsa, bu hissəsinin qaytarılması növüdür. Bu hissə adıdır. Və sonra mötərizədə arasında Mən dəlilləri vermək yerləşir ki, tez-tez bəzən parametrlərinin Parametreler adlı args kimi qısaca. Bir varsa, yalnız bir daxil. Bir neçə varsa bir vergül ilə hər bir ayrı-ayrı. Və hər bir arqument üçün siz 2 şeyi verən var-Kevin? [Kevin] Siz növü və sonra adını vermək lazımdır. Və sonra adı və adı istifadə etmək olacaq ki, adı cəmi funksiyası çərçivəsində arqument müraciət, Hal-hazırda yazılı olduğunuz funksiyası daxilində. Siz, mən yekunlaşdırmaq gedirəm, əgər nümunə üçün yoxdur integers-we'll bir sıra int dizi etmək demək, və özüm bir qıvrım aşırma verəcəyik var- Mən məbləğ funksiyası bir sıra keçmək sonra zaman Mən dəlil siyahı ilk mövqe onu keçir. Amma mən qəbul ki, serialın adı Varış var deyil. Varış Mən funksiyasının bədən daxilində dəlil baxın necə olacaq. Nəzərə almaq lazımdır ki, başqa şey, və bu funksiyaları bir qədər fərqlidir, amma, bir mühüm məqam hesab C mən bu kimi bir funksiyası yazıyoruz zaman ki, necə bu sıra necə bir çox elementləri bilirik? Bu oyun sual qədər deyil. Biz ötən həftə bölməsində bu barədə bir az söhbət etdik. Necə C bir sıra daxili elementlərin sayı bilirsiniz? Bir yolu var mı? Bu bilmək üçün heç bir yol var ki, çevrilir. Siz ayrı-ayrılıqda bu keçməlidirlər. Siz edə bilərsiniz ki, bir oyun var Siz array elan olunub ki, eyni funksiyası, etdiyiniz əgər və bir yığın array çalışırıq. Eyni funksiyası istəyirsinizsə Lakin, yalnız çalışır. Bir başqa funksiyası bir sıra keçmək və ya bir sıra elan olsanız və siz yığın ki array qoymaq, siz malloc istifadə etdiyiniz  və stuff ki cür, sonra bütün bahisler off edir. Sonra həqiqətən ətrafında keçməlidirlər xüsusi dəlil və ya başqa bir parametr serialın nə qədər böyük belirten. Bu halda, Üzr, bu ekran off gedir virgülle Ben istifadə etmək istəyirəm burada və başqa dəlil qəbul istədiyiniz  və uzunluğu üçün int len ​​çağırırıq. Viktorina üzrə gəlmək bilər ki, bir şey bir şey adlı xüsusi funksiyası yazmaq və ya həyata isteyen edilir. Sizə prototip vermək deyilsə, belə ki, burada bu bütün şey, Bu bütün mess, funksiyası bəyannamə və ya funksiyası prototip adlanır Bu verilmiş deyil əgər aşağı dırnaq lazımdır ki, ilk şey biri hemen viktorina sizə. Mən öyrəndim digər oyun ki, biz bir funksiya üçün prototip vermək nə demək, biz, demək "Hey, siz yazmaq var." Siz viktorina olan qıvrım aşırma Inside sizə bir dönüş növü olduğunu qeyd və siz qeyd ki qaytarılması növü funksiyası bir şey geri deyil o deməkdir ki, etibarsız, başqa bir şey deyil, sonra siz mütləq etmək istəyirəm bir şey yazmaq deyil funksiyası çox sonunda geri bəyanat bir növ. Biz boş doldurmaq istəyirəm, çünki qayıt, və bu halda, biz boş qoymaq lazımdır. Amma bu necə mən bu problem yanaşmaq gedirəm haqqında düzgün düşüncə olur? Və bir dəyər qayıtmaq üçün olacaq sizə xatırladır funksiyası ilə zəng etmək. Bəli. >> [Tələbə] biz viktorina kodu yazılı etdiyiniz zaman stil müraciət edirmi? Indentation və məhsullarının bu cür kimi? >> [Tələbə] Bəli. Xeyr, kimi çox. Mən, bu bir çox biz günü viktorina aydınlaşdırmaq lazımdır bir şey hesab lakin adətən narahat # daxildir və məhsullarının o cür ki, kənarda növü var. [Tələbə] sizin əlyazma kodu Şərh etməliyəmmi? Sizin əlyazma kodu Şərh etməliyəmmi? Siz qismən kredit narahat edirsinizsə şərh həmişə yaxşı və ya sinif şagirdi üçün niyyət ünsiyyət istəyirəm. Amma yenə, viktorina özü və viktorina gün aydınlıq edəcək amma heç bir şərh yazmaq üçün lazım olacaq ki, inanmıram. Adətən, lakin mütləq şey sort deyil yerləşir istədiyiniz, sizin niyyət informasiya "Mən ilə gedirəm yerləşir Hey, bu." Və bəzən qismən kredit ilə kömək edə bilər. Cool. Basil. [Basil] int lang demək, elan arasında fərq nədir funksiyası ərzində bir dəyişən elan qarşı arqumentləri və ya parametrləri? Wow, kahve nəfəs borusu düşüb. [Basil] biz arqumentlər qoymaq istədiyiniz şeylər kimi. Bəli, böyük bir sual var. Necə dəlilləri qoymaq istədiyiniz şeyi seçerim nə funksiyası daxilində etməlidir şeyə qarşı? Bu halda biz arqumentlər kimi bu həm daxil onlar məbləği funksiyasından istifadə edir kim ki, bir şey istəyirik, çünki o şeyi müəyyən etmək lazımdır. Edib funksiyası, biz danışdıq kimi, bilmədən heç bir yol var onun zəng və ya kim-dən əldə necə böyük array olan məbləğ funksiyası istifadə olunur. Bu array necə böyük bilmədən heç bir yol var. Biz bir arqument kimi burada bu uzunluğu keçmək səbəbi ki, biz əsasən bu funksiyası zəng izah edirik ki, bir şey var, çünki cəmi funksiyasından istifadə edir kim, "Hey, bizə bir sıra vermək var yalnız ints, siz də necə böyük siz bizə təqdim etdik ki, array bizə lazımdır. " [Basil] Bu həm command line arguments olacaq? Xeyr, bu sizin funksiyası keçir ki, faktiki dəlilləri var. Mənə burada yeni bir səhifə edək. [Basil] adı kimi keçə-ki [Nate H.] Mən int əsas varsa (void) və mən altındakı burada qaytarılması 0 yazmaq gedirəm Mən məbləğ funksiyası zəng etmək istəyirsiniz. Mən demək istəyirəm int x = sum (); Cəmi funksiyasından istifadə etmək üçün mən yekunlaşdırmaq istəyirəm ki, həm sıra keçməlidirlər və serialın uzunluğu, bu harada Mən ints bir sıra var idi hərfinin mən demək int numbaz [] = 1, 2, 3, orada sintaksis qədər girildi ki, istifadə növü, sonra nə edəcəyini məbləğində Mən keçmək istəyirəm numbaz və sayı 3 həm "OK, burada siz yekunlaşdırmaq istəyirəm array var". məbləği funksiyası demək "Burada onun ölçüsü var." Bu mənada edirmi? Ki, sual cavab verirmi? Bir çox hallarda biz əsas ilə işle paralel edir biz command line arguments zaman. Caesar parol kimi bir proqram, misal üçün ki, ehtiyac command line arguments bir şey edə bilməz. Siz nə əsas istifadə etmək demək deyildi, əgər şifrelemek üçün necə bilmirəm ki, və ya siz şifrelemek istədiyini string demək etmədikdə. Biz 2 müxtəlif mexanizmlər var Ü giriş üçün isteyen, bu istifadəçi məlumat almaq üçün, istifadəçi daxil ayırdığınız üçün. Problem 1 göstərilməyib üçün biz bu GetInt, GetString, GetFloat yol gördüm giriş üçün isteyen, və standart giriş stream istifadə edərək deyirlər. Bu qədər fərqli. Bu fərqli olaraq siz bir dəfə edə bilər ki, bir şey deyil proqram çalışan başlattığınızda proqram, ibadət edir. Proqram çalışan başlattığınızda command line arguments bütün müəyyən edilir. Biz bu iki qarışdırmaqla etdik. Biz bir funksiyası arqumentləri istifadə, o, çox əsas üçün command line arguments kimi. Siz demək lazımdır funksiyası ibadət zaman var onun vəzifələri yerinə yetirmək üçün lazımdır dəqiq nə. , At və baxmaq üçün sizə boş vaxt bu baxaq bilərsiniz yaxşı bir şey və əhatə edilmişdir çərçivəsində bu anlayış viktorina idi və qlobal dəyişənlər qarşı yerli dəyişənlərin. Ki, diqqət edin. Biz, bu digər məhsulları üçün əldə etdiyiniz İndi Həftə 3 biz axtarış və çeşidlənməsi söhbət başladı. Ən azı CS50 olaraq, axtarışı və çeşidlənməsi çox kompüter daha nəzəri hissələri bəzi giriş. Axtarış problemi, çeşidlənməsi problemi böyük, kanonik problemlər var. Necə integers milyardlarla bir sıra xüsusi bir sıra tapa bilərəm? Necə bir telefon kitab daxilində müəyyən bir ad tapa bilərəm Sizin laptop saxlanılan var? Və biz asimptotik run dəfə bu anlayışı tətbiq həqiqətən necə uzun, bu problem necə çətindir hesablamaq, necə uzun onlar həll edirlər. 2011-nin viktorina, inanıram, mən mahiyyəti edirəm ki, bir problem yoxdur Bu, problem 12 olan, çox tez əhatə edir. Heç bir O ki, Omega var. Burada ən sürətli mümkün run zaman söhbət edirik xüsusi alqoritm və sonra yavaş mümkün run vaxt. Bu Omega və O, həqiqətən, yalnız qısa yolları vardır. Onlar deyərək üçün notational qısa edirik necə sürətli mümkün olan ən yaxşı halda bizim alqoritm run, və necə pis mümkün halda yavaş bizim alqoritm davam edəcək? Bu bir neçə nə edək, bu da əhatə etmişdir Mən tövsiyə edən asimptotik notation haqqında qısa. Jackson həqiqətən yaxşı iş etdi. Binar axtarış ilə biz, bir alqoritmi kimi ikili axtarış haqqında danışmaq və biz adətən böyük O. baxımından bu barədə danışmaq Böyük O nədir? Binar axtarış yavaş mümkün run zaman nədir? [Tələbə] N ²? Yaxın, mən ki, oxşar danışarlar. Bu çox daha sürətli daha var. [Tələbə] Binary? >> Bəli, ikili axtarış. [Tələbə] Bu günlük n var. Daxil n demək nə belə, n Giriş? Bu hər iteration yarıya indirir. Məhz, belə yavaş mümkün halda, Bir sıralanır array varsa demək bir milyon integers və sayı aradığınız ya sıra serialın və ya son element çox ilk elementidir. Unutmayın, ikili axtarış alqoritm, orta element baxaraq işləyir ki, aradığınız ki, matç varsa görüb. O, böyük varsa, siz onu tapdı. Mümkün olan ən yaxşı halda, necə sürətli ikili axtarış run edir? [Tələbələr] 1. 1, o, 1 böyük O daimi zamanı. Bəli. [Tələbə] Mən bir sual var. Siz n daxil dedikdə, sağ, baza 2 ilə bağlı demək? Bəli, belə ki, digər şey. Biz log n demək, mən orta məktəbdə idi hərhalda Mən həmişə log bazası 10 olduğunu güman. Bəli, bəli, belə ki, baza 2 adətən biz istifadə nə daxil olun. Ya aradığınız əgər Yenə, ikili axtarış geri gedir çox sonunda element və ya çox əvvəlində element, siz ortasında başlamaq və çünki sonra imtina hansı yarım aradığınız ki, meyarlara uyğun deyil, və növbəti yarım və növbəti yarım və növbəti yarım gedin. Mən milyon tam sıra iri element üçün axtarış alıram edin Mən 1 milyon dəfə ən log onu yarı bölmək gedirəm Mən nəhayət test və element I arıyorum ki əvvəl , ən böyük və serialın ən yüksək göstərici olduğunu və 1 milyon dəfə daxil n log olacaq. Bubble sort. Uşaqlar bubble sırala alqoritm yadınızdadırmı? Kevin, siz məni bubble sırala alqoritm nə sürətli bir recap verə bilər? [Kevin] Əsasən bu siyahıda hər şey keçir. Bu ilk iki baxır. Birinci, ikinci bir o svopları onlara daha böyük olur. Sonra ikinci və üçüncü, eyni şey, svopları, müqayisə üçüncü və dördüncü, bütün yol aşağı. Böyük ədəd sonuna qədər təqib edəcəyik. Və lakin çox loops sonra tamamlayın. Məhz, belə nə Kevin dedi biz böyük nömrələri izləmək lazımdır ki, serialın sonuna bubble up. Bu array əgər Məsələn, bu nümunə vasitəsilə bizə gəzinti ağla edirsiniz? [Kevin] Sən 2 almaq və 3 bilərsiniz. 3 2 böyükdür, belə ki, onları dəyişdirmək. [Nate H.] sağ, belə ki, biz bu dəyişdirmək, və biz, 3, 4 6 2 almaq və 9. [Kevin] Sonra siz 3 və 6 müqayisə. , 3 6 kiçikdir, belə ki, onları tərk 4 6 kiçik olduğu və 6, 4, onları dəyişdirmək istədiyiniz. [Nate H.] sağ, mən 2, 3, 4, 6, 9 almaq. [Kevin] Və 9 6 böyükdür, belə ki, onu tərk. Və yenə onun vasitəsilə geri getmək istiyorum. Mən bu nöqtədə [Nate H.] görülən Am? >> [Kevin] saylı Və niyə bu nöqtədə həyata deyiləm? Mənim array çeşidlənir kimi görünür, çünki. Mən ona arıyorum. [Kevin] daha keçir və daha svopları var əmin olun tam dayandırmaq bilər. Məhz, belə vasitəsilə davam və svopları olduğunu əmin etmək lazımdır Bu nöqtədə edə bilər. Siz dediyiniz kimi, biz başa ki, həqiqətən xoşbəxt idi yalnız vasitəsilə 1 keçid etmək olan və biz sıralanır edirik. Amma ümumi halda bunu biz, həqiqətən, yenidən üzərində bunu lazımdır. Və əslində, bu, mümkün olan ən yaxşı halda bir nümunə oldu kimi biz problem gördü. Biz ən yaxşı halda n ki gördüm. Biz array 1 dəfə vasitəsilə getdi. Bu alqoritm üçün ən pis mümkün halda nədir? [Kevin] N ². Və göz nə kimi deyil? Nə bir sıra göz kimi n ² vaxt olacaq ki? [Kevin] [işitilemez] sıralanır. Mən array 9, 7, 6, 5, 2, idi Məhz, əgər ilk 9 qədər bubble bütün yol olacaq. 1 iteration sonra 7, 6, 5, 2, 9 istiyorum. Sonra 7 qədər bubble, 6, 5, 2, 7, 9, və s və s edərdim. Biz bütün array n dəfə keçmək istiyorum və həqiqətən bu biraz daha dəqiq əldə edə bilərsiniz bir dəfə biz ötən mümkün mövqe qədər 9-bütün yol taşıdıktan çünki biz daha element qarşı müqayisə etmək heç vaxt bilirik. Sonra biz 7-up burda başlamaq biz 7 hüququ 9 əvvəl bir dəfə biz dayandırmaq bilir biz artıq buna 9 müqayisədə etdik ildən. Bir ağıllı şəkildə bu halda o, hərhalda, həqiqətən ki, çox vaxt deyil. Siz bütün mümkün [işitilemez] birləşməsi müqayisə etmək fikrində deyilik hər zaman hər iteration keçir. Amma yenə də, biz bu üst bound haqqında danışmaq zaman demək ki, siz n baxaraq ² müqayisələr bütün yolu. Biz bir az qısa almaq başlayan etdiyiniz ildən geri getmək edək və Mən mütləq bu masa qalan vasitəsilə getməlidir deyərdim bütün doldurun. Misal düşünün. Konkret misal düşünün. Bunu həqiqətən lazımlı və faydalıdır. Onu Draw. Bu masa cür ki, siz kompüter vasitəsilə getmək kimi Əgər həqiqətən bu ilə ürək bilmək başlamaq lazımdır. Bunlar müsahibə almaq sual növləri var. Bu, bilmək yaxşı ki şeyi növ var və həqiqətən düşünmək necə həyata figuring bu kənar halları barədə düşünmək bubble üçün ən pis mümkün array sort bilərək ilə düzmək üçün sırayla ki biridir. Pointers. Nin göstəricilərinə haqqında bir az danışmaq edək. Son bir neçə dəqiqə biz burada Mən bu I / O ki, daha yeni fayl birlikdə bir şey bilirik. Biz göstəricilər haqqında biz göstəricilər haqqında danışmaq istəyirəm səbəbi danışmaq zaman biz C çalışırıq zaman bir, çünki biz ən müasir proqramlaşdırma dilləri ilə müqayisədə olduqca aşağı səviyyədə həqiqətən. Biz, həqiqətən, yaddaş dəyişənlərin manipulyasiya edirik onlar həqiqətən bizim RAM yerləşir olduğunuz anlamaq. Sonra sizə görəcəksiniz əməliyyat sistemi dərsləri almaq üçün getdi sonra ki, yenə bir abstraksiya növü var. Yəni əslində hal deyil. Biz həmin detalları gizli ki, virtual yaddaş var. Bir proqram zaman Amma indi siz güman edə bilər misal üçün, başlamaq zaman Sezar parol proqram çalışan Mən, həqiqətən, tez-mənim iPad geri keçmək lazımdır Siz əgər əvvəldən sizin proqramı, demək ki, Sizin laptop RAM 4 gigabayt, Bu yığın kənara almaq və biz bu RAM zəng edəcəyik. Və biz 0 zəng olacaq bir yerdə başlayır və biz 4 gigabayt zəng lazımdır ki, bir yerdə bitir. Mən, həqiqətən, yaza bilməz. Man ki, girildi olunur. Proqram həyata zaman əməliyyat sistemi, RAM up carves və bu da yaşamaq üçün proqram müxtəlif müxtəlif seqmentləri müəyyən Burada Down bu sahədə heç bir insan torpaq növüdür. Siz uzaq burada bir az qalxmaq zaman həqiqətən yer var olduğu proqram həyatını kodu. Yəni faktiki ikili kod ki, yürütülebilir fayl həqiqətən yaddaş instantly olur bir proqram run, və kodu seqmentində yaşayan zaman. Proqram icra kimi işlemci bu kodu seqment baxır anlamaq üçün növbəti təlimatı nədir? Mən icra lazımdır kodu növbəti line nə deməkdir? Bir data seqment də var və bu, həmin simli sabitləri edir Əgər istifadə etdiyiniz saxlanılır almaq. Və sonra uzaq qədər yığın adlanan bu yer var. Biz malloc istifadə edərək orada yaddaş daxil və sonra proqram çox yuxarı doğru yığını var biz əvvəlində ən çox oynayan olduğunuz yerləşir və var. Bu miqyaslı və ya bir şey deyil. Bu bir çox, çox maşın asılıdır sistem asılı fəaliyyət göstərən, lakin bu şeyi öbekli almaq nisbətən necə. Bir proqram run və adlı x-bir dəyişən elan edərkən Mən aşağı aşağıda başqa qutusu çəkmək gedirəm, və bu həmçinin RAM olacaq. Mən baxmaq gedirəm. Biz bu yalnız RAM kiçik bir bölüm göstərir kələ-kötür xətləri çəkmək lazımdır və bütün biz üst çəkmək kimi. Mən x adlı tam dəyişən, soruşsan sonra nə həqiqətən əldə mapping edir mənim proqram rəmzi masa saxlanılır ki, ki, tərtib etdik ki, yaddaş bu bölgəyə adı x birləşdirir Burada şaquli bar arasında. Mən x = 7 deyir ki, proqram kodu bir line varsa işlemci bilir "Oh, tamam, mən bilirəm ki, yaddaş bu yerdə x yaşayır." "Mən irəli getmək və orada 7 yazmaq üçün gedirəm." Necə ki, bu yaddaş nə yeri bilir? Yaxşı, bütün tərtibi zamanı həyata. Dəyişənlərin hər getmək niyyətində olduğu compiler bölüşdürülməsi qayğı və xüsusi mapping yaratmaq və ya daha çox nöqtələr birləşdirən simvolu və gedir, burada bir dəyişən adı arasında və yaddaş yaşamaq olacaq yerləşir. Amma biz, həqiqətən, həmçinin bizim proqramları gedə bilər ki çıxır. Biz data strukturlarının bəzi söhbət başlamaq Bu, mühüm olur olan biz sonradan tanış olacaq ki, bir anlayışdır. Amma indi, nə bilirik ki, bu yeri x bir pointer yaratmaq bilər. Məsələn, mən bir pointer dəyişən yarada bilərsiniz. Biz bir pointer dəyişən yaratmaq zaman biz ulduz notation istifadə edin. Bu halda, bu bir int bir pointer yaratmaq gedirəm deyir. Bu, yalnız hər hansı digər kimi bir növü var. Biz, bu, y kimi bir dəyişən vermək və sonra bir ünvan üçün ünvan üçün bərabər seçin. Bu halda, biz x qeyd etmək y bilərsiniz bu işareti ilə biz hansı x ünvanı alaraq, və sonra biz onu qeyd etmək y seçin. Biz RAM baxsaq bu mahiyyətcə nədir deyil Bu ayrı-ayrı dəyişən yaradır. O, bu y zəng olacaq və kodu bu xətti həyata zaman əslində, biz adətən ox kimi cəlb edən bir az göstərici yaratmaq olacaq və x qeyd etmək y edir. Bəli. X artıq bir göstərici Əgər [Tələbə], yalnız edəcəyini int * y = x əvəzinə işareti olan? Bəli. X artıq bir göstəricisidir, onda birinə bərabər 2 göstəricilərinə bilərsiniz bu halda y, x qeyd deyil lakin buna işarə edir nə x qeyd olardı. Təəssüf ki, biz vaxt həyata edirik. Mən bu baxımdan demək nə, biz bu xətdə haqqında danışmaq olar amma bu problem vasitəsilə 14 saylı iş başlamaq demək olardı. Sizin üçün doldurulmuş bir az burada artıq var edə bilərsiniz. Biz 2 göstəricilərinə bəyan zaman görürəm ki, int * x və * y, və dəyişən yanındakı * işarə Qeyd ötən il həyata keçirilmişdir ki, bir şey idi. Bu biz bu il işle benzer çıxır. Siz göstərici elan etdiyiniz zaman * yazmaq yerləşir fərqi yoxdur. Amma növü yanındakı * yazılı çox aydın bir göstərici dəyişən elan edirik ki, edir ki, çünki. Siz 2 göstəricilərinə elan Bookmark 2 qutu verir ki, görə bilərsiniz. Burada malloc bərabər x müəyyən zaman nə deyib yığın yaddaş kənara müəyyən edilir. Burada Bu kiçik box, bu dairə, yığın yerləşir. X bu işarə edir. Y hələ bir şey işarə deyil unutmayın. Almaq üçün yaddaş x daxil sayı 42-saxlamaq biz nə notation istifadə edir? [Tələbə] * x = 42. Məhz, * x = 42. Bu arrow edin və orada 42 atmaq deməkdir. Burada y və x müəyyən biz y x işarə etmişdir. Yenə, bu, yalnız biz x üçün y bərabər müəyyən yerləşir Kevin nə kimi. Y x işarə deyil. Əksinə, o, x, eləcə də işarə nə işarə edir. Və sonra nəhayət bu son qutusuna biz bilər ki, 2 mümkün şey var. Bir biz * x = 13 demək bilər. Başqa şey deyə-Alex, biz burada nə bilirik bilər? Siz demək olar * x = 13 və ya- [Tələbə] Siz int nə deyə bilər. [Nate H.] Bu int dəyişən kimi istinad Əgər biz bunu edə bilər. Biz həmçinin * y = 13 onlar eyni yerə işarə edirik, çünki demək olar biz orada almaq üçün ya dəyişkən istifadə edə bilər. Bəli. >> [Tələbə] Biz yalnız int x 13 demək əgər kimi nə görünür? Bu iş deyil ki, x adlı yeni dəyişən, elan olunacaq. Biz x burada bir göstərici ola elan Çünki bir toqquşma var ediyorum. [Tələbə] Biz yalnız özü tərəfindən bəyanat olsaydı bu dairə baxımından kimi nə görünür? Biz x olsaydı = 13 sonra bir qutu var, və daha bir arrow olan daha ediyorum qutusu çıxan biz yalnız 13 kimi çəkmək istiyorum. Kutuya [Tələbə]. Okay. Izləmək üçün təşəkkür edirik və Quiz 0 haqqında uğurlar. [CS50.TV]