[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]