[Powered by Google Translate] [Həftə 3]
[David J. Malan - Harvard Universiteti]
[Bu CS50 edir. - CS50.TV]
Mənə biz sonuncu dəfə off sol harada istiqamətdə bizə idare etsin,
sintaksis haqqında bir az daha düşünməyə başlayan olan
və minutiae bütün haqqında bir az daha az düşünmək üçün çalışırıq
ki semicolons baxımından beləliklə qədər acclimate vaxt bir az edir
və parantez və qıvrım aşırma,
yüksək konseptual səviyyədə şeyi bir az alaraq başlamaq üçün
belə ki, biz artıq növbəti bir neçə həftə ərzində həll başlamaq problemləri
yüksək konseptual problemlərini daha çox cəlb edir
və sizin ayaq almaq kimi sintaktik az bir az yaş
və əllərinizi bu son bir neçə həftə sözdizimini bəzi çirkli.
>> Keçən həftə biz bir sıra bu anlayışı daxil ki, xatırlayıram.
Və İngilis bir sıra nə kimi təsvir edilə bilər? >> [Işitilemez tələbə cavab]
Bağışlayın?
Toplusu? >> [Işitilemez tələbə cavab] >> OK, yaxşı.
Maddələrin A toplusu. Beləliklə, biz Not ildə serialların gördüm.
Siz pset üçün şeyi sürükleyin bilər ki, Scratch siyahısını 0 birindən istifadə etmək oldu
növ bir inventar daxil portağal və banan kimi,
ki, bir sıra nə kimi növ var.
Və daha çox texniki, faktiki kompüter kontekstində,
bir sıra sadəcə yaddaş bitişik yığın edir.
Başqa sözlə, sonra sonra başqa byte, başqa byte, başqa byte, bir byte var
və bir şəkil bu bytes cəlb etmək olsaydı,
onlar geri geri geri geri olacaq. Yəni bitişik tərəfindən anlamları.
>> Belə ki, sonra byte sayı 1, 2, 3 var.
Bu qədər burada qədər burada qədər burada qədər demək deyil.
Bir sıra 0 və ya daha bayt bitişik yığın edir.
Beləliklə, nə onlar üçün faydalı?
Biz bir proqram saxlanılması xalq viktorina siniflər göstərdi Məsələn bu cür idi Xatırladaq
bəzi kurs üçün viktorina orta hesablamaq üçün
və biz dəyişən quiz1 elan proqram yazmağa başlayın ki, xatırlayıram.
Sonra quiz2 adlı bir dəyişən ola bilər.
Lakin, sonra bu sinif sınavlar quiz4 3 varmış.
Və ya bir həftəlik viktorina var idi, bu, quiz7 quiz6 quiz5 olardı.
Belə ki, bu dəyişənlərin bütün əsas daxilində elan olardı
və ya başqa bir yerdə proqramı,
və yanaşma ilə problem, o, yalnız seçin və yapışdırıb asan olsa
yalnız çox tez yöndəmsiz olur.
Allah, həqiqətən, 30 viktorina və ya 50 sınavlar var.
Yüksək məktəb stil gündəlik pop viktorina kimi Əgər
sonra, yalnız dəyişənlərin elan olunan bir ridiculously uzun siyahısı var
və bu, yalnız çox tez nəzarət edir.
Bu çirkin, bu saxlamaq üçün çətindir, bir typo etmək çox asandır
siz əgər 1 ədəd proqram yerə mistyped.
>> Belə ki, əvəzinə bir sıra anlayışı təqdim etdi.
Və biz bu kimi bir az bir şey etməklə bu proqram icra xatırlayıram.
Mənə bu gün Kaynak 3 Bazar ertəsi dizine gedək
və biz sonuncu dəfə gördüm ki, dizi, açmaq.
Və yeni C tövsiyələr bir neçə burada olmasına baxmayaraq,
Onların arasında daimi anlayışı,
biz bu sintaksis istifadə edərək mahiyyətcə çox üzüb gedirdi elan xatırlayıram:
float, sonra dəyişən adı, sonra biz ilk dəfə həqiqətən kvadrat aşırma istifadə
və biz bu kvadrat aşırma daxilində nə səmərəli bir sıra verilib.
Lakin əvəzinə bir sıra qoyaraq, bu hərflərlə söz, sınavlar qoydu.
Və kiçik sınavlar kimi hərflərlə söz qoyulması üçün motivasiya nə idi
və sonra line 17 kələyi istifadə burada həqiqətən ki, bir sıra verməli?
Orada motivasiya nə idi? Bəli.
>> [Işitilemez tələbə cavab] >> Exactly.
Ki, dəyəri 2 dəyişmək istəyirsinizsə, biz yalnız 1 yerdə dəyişdirmək üçün
çünki hesab - Mən hətta bu proqram məhz nə xatırlamıram,
lakin yalnız üzsüz əgər sınavlar, sınavlar görürük.
Siz sınavlar, aşağı burada daha sınavlar görürük.
Biz bu daimi yox idi əgər, kəskin bu istifadə müəyyən
biz gözəl olan, sonra 2, sonra 2, sonra 2, 2 tipli olardı. Bu, sadəcə olaraq düzgün olardı.
Amma biz CS50 3 sınavlar ki, gələn il nəzərdə tutur.
Mən kodu getmək və yeniləmək üçün Beləliklə, mən derleyeceğiz var
mən axmaq bir şey, mən 2 1 qeyd etməmək kimi amma problem deyil,
və 3-plug unutmayın, bütün proqram çox yaxşı qıra bilər.
Beləliklə, biz yalnız narahatlıq üçün xahiş edirik.
>> Belə ki, bir daimi anlayışı, məlumatların bir parça faktorinq haqqında bütün
o, simli və ya char və ya bir float və ya hər hansı olub
və daha çox asanlıqla gələcəkdə dəyişə bilər ki, 1 yer elan.
Və bu, yalnız indi bu hesab çünki oxumaq, səmimi, həm də bir az daha asandır
bu sınavlar var, və ya hətta NUMBER_OF_QUIZZES kimi bir şey adını dəyişmək bilər
daha açıq və ya bir şey.
Kodu yalnız bunu nə üçün bir az daha aydın olur
və 2 saylı demək baş verə bilər nə bir az daha az maraqlıdır.
Diziler ilə əsaslı əlaqəsi olmadığını daimi belə.
Serialın bu kvadrat aşırma yolu ilə təqdim edilmişdir.
>> Belə ki, xətt 23-biz istifadəçi xahiş fark, "sizin viktorina puanları nə idi?"
Sonra biz yəqin onların siniflər üçün istifadəçi soruşur bu loop var. Necə?
Bu 0-dan 2-iterates. Bütün caps ilə sınavlar hazırda 2 çünki I 2 deyirlər.
Belə ki, bu qədər 0-dan 2-iterates sonra yazdıran həyata, # bir şey bir şey İlke
və sonra bu istifadəçi bir dəyər almaq üçün GetFloat istifadə edir.
Belə ki, bu son çərşənbə olan sintaksis yalnız başqa yeni parça bilərsiniz.
Siz ki, array xüsusi yer bir şey saxlamaq istəyirsinizsə
siz yenə kvadrat mötərizə istifadə edin.
>> Belə dichotomy bir az burada var.
Siz kvadrat mötərizə istifadə ilk dəfə
siz serialın olmaq istəyirəm necə böyük müəyyən etmək üçün istifadə edin.
Amma burada bu növbəti kontekstdə biz yenə bu kvadratşəkilli mötərizələri işə yerləşir
ki array, siz bəzi dəyəri qoymaq istəyirəm yerləşir deməkdir?
Burada fərq kontekstində nəticə çıxarmaq olar.
Biz data növü burada edək, sonra biz bir dəyişən adı var
sonra nöqtəli vergül, içərisində bir sıra bizim kvadrat aşırma var. Vəssalam.
Belə ki, bir bəyannamə deyil.
Float grade2; Bu float grade1 kimi bir şey etdiyi kimi, baxmayaraq ki;
lakin yenə də, bu, çox tez yol çox surəti, pastası, daxil devolves
əvəzinə biz yalnız, belə kimi sadələşdirilmiş
hansı bundan sonra biz, bracket 0 saxlanıla bilər ki, bir sinif var deməkdir
biz bracket 1 saxlanıla bilər ki, başqa dərəcəli var
amma nə mən axmaq, əgər, məsələn, mənim loop günə qədər gedir -
Məsələn, mən bu daha az və ya bərabər etmək
olan geri bir əvvəlki səhv mənbəyi idi -
hansı səmərəli loop bəzi üçüncü təsadüfi iteration haqqında o deməkdir ki,
Mən bracket 2 istifadə edin. Səmərəli, nə burada baş verə bilər? Bağışlayın?
[Tələbə] Bu əvəz edəcək. >> Onu əvəz olacaq mı?
Nə əvəz olunacaq?
Bu sözün GetFloat qaytarılması dəyəri yeri 2 nə əvəz deyib.
Ancaq problem hekayə bu nöqtədə serialın nə qədər böyük deyil?
[Işitilemez tələbə cavab] >> Bu array yalnız ölçüsü 2-hələ
biz istifadə əvvəl array, çünki hər hansı bir dəyişən kimi, ilk elan edilib
və çünki mən qoymaq gedirəm ki, 2 notları ki, bu daimi Burada müəyyən.
>> Amma unutmayın, kompüter elm 0 hesablanması başlanır.
Belə ki array ilk yeri bracket 0 deyil.
Növbəti yeri 1-dir. Bu şey yan üzərində çox heç belə az deyil.
Belə ki, başqa sözlə, mən həqiqətən bu array əgər -
və mənə bu, bizim üçün burada əməkdaşlıq necə görək -
Mən bir sıra varsa sadəcə aşağıdakı kimi tərtib etdik ki,
və I 2 elementlər üçün yer ayrılıb sonra, mən yaddaş bu kimi bu çəkmək bilər
Bu böyük ağ kətan edir.
Bu yalnız mənim kompüter var RAM, RAM bir konsert, RAM 2 gigs var nə olursa olsun,
lakin bu 2 qutular artıq fərdi bir float, 32 bit təmsil edir.
Mən 1.0 kimi burada 1 ədəd qoymaq Əgər, sonra 3.2 kimi burada bir sıra qoymaq
lakin sonra mən burada bir şey qoyulması kimi ki bracket 2, bunu.
Şəkil təklif kimi, heç bir şey yoxdur var.
Mən əməliyyat sistemi xahiş deyil, çünki heç bir insan torpaq kimi sort var
Bu üçüncü viktorina vermək.
Hesab edirəm ki, üçüncü viktorina istəyirəm idi, mən tedbir idi olmalıdır
bildirərək bunun üçün əməliyyat sistemi soruşmaq üçün 2 olmaq sınavlar
lakin əvəzinə 3 bərabər.
>> Belə ki, başqa sözlə, biz səmərəli tərəfdən olan şəkil burada bu kimi görünür.
Bu bir daha heç kəs torpaq edir. Biz yaxşı burada dəyərləri yazılı cəhd deyil.
Ancaq yenə də, kompüter alimləri, çünki 0 saymaq
biz serialın bu yer haqqında danışmaq zaman ki, yeri 0 ehtimal edir
Bu yeri 1 ehtimal ki, bu da mövcud deyil
biz yalnız 2 belə yerlər üçün əməliyyat sistemi xahiş çünki.
Digər dillərdə əvvəl proqramlaşdırma təcrübə ilə sizin Belə ki,
Bu zaman istiqamətini adlı seriallarda və ya şeyi belə deyil ki, bilirik bilər.
Əksinə, yalnız, əlavə və əlavə və seriallarda şeyi əlavə edə bilərsiniz
olan, səmimi, biz Not ki, imkanı var idi və hələ biz burada bu qədər verilir görünür
C, çünki siz daha aydın proqramlaşdırma olunur.
Bu anda siz və kompüter yalnız, və kompüter yalnız etməyə gedir
nə etmək demək.
Burada yalnız line 22 yolu ilə 2 üzüb gedirdi vermək demək əgər,
2 yer: ki, əməliyyat sistemi geri almaq olacaq bütün var.
>> Belə ki, getdikcə proqramları arabir serialların ilə bağlı arabası olacaq.
Bu, bizim bütün yanılabilir var qovuşdurmağımız heyvan təbiəti yalnız növ,
və bir nöqtədə sizin serialın sərhəd kənarda çox güman index olacaq.
Və yalnız bracket bir şey girdi deyərək bir xülya yolu
və bir şey bir sıra çox böyük idi. Siz array kənarda getdi.
Ancaq ayaq indi bu.
Bu proqramın istirahət həqiqətən serialların ilə əsaslı əlaqəsi yoxdur.
Bu, yalnız kompüter orta üçün bəzi sadə hesab haqqında bütün var.
Beləliklə, biz ilk burada loop biz 0 başlamaq bir dəyişən adlı məbləği burada bu var.
Sonra yenidən 0-dan 2-təkrarlamaq və biz bu toplama dəyişən əlavə
bu İTH dərəcəli, belə bracket 0 sonra bracket 1.
Və sonra, orta hesablamaq üçün dərəcəli məktəb nə kimi
biz sadəcə məbləğ almaq, sınavlar sayı ilə bölmək
və sonra yaxşı tədbir üçün biz dəyirmi adlı burada bir funksiyası zəng.
>> İndi bir kənara kimi, line 34 Bu ara int ilə məşğul nədir?
Bu bölmədə artıq gəlmişəm bilər, həqiqətən, rəsmi burada danışdı deyil
lakin parens yəqin ki, bunu bu int nədir? >> [Işitilemez tələbə cavab]
Bəli, bu, tökmə və ya typecasting aiddir
1-data type alaraq və başqa bu konvertasiya deməkdir.
Bəzən bir az qəribə ola bilər çünki bütün məlumat növləri ilə bunu edə bilməz.
Lakin bu halda, əgər dəyirmi qaytarılması dəyəri float edir
çünki, 2 kimi bütün sonra, mən bir float alaraq alıram və bir sıra bu ayırıcı
Mən bir float geri almaq üçün gedirəm.
Amma dərəcəli məktəb insanların orta 93.4 olduğunu bilmək həqiqətən sevmirəm
onlar heç idi reallaşdırmaq lazımdır, çünki, belə ki, 95 yuvarlaqlaşdırma nöqtəsinə yaxın.
>> Beləliklə, biz yerinə yaxın int hər turda int istifadə etmək istədiyiniz
sonra heç bir nöqtə ilə 94 olacaq bu halda olan.
Belə ki, yalnız bir az riyazi oyun var.
Bu təsir olacaq, çünki biz, tökmə bu anlayışı qayıda bilərsiniz
Əgər siz artıq aşkar əgər, problem üçün 2 seçin.
Bir sıra sonra Beləliklə, siz hesab edə bilər - bu, mənim bütün gün təbəssüm etmək olacaq.
Siz bir şəkil çəkmək əgər ki, bu kimi görünür
lakin əsas ölçüsü də siz seçilir ki,
işletim sistemi istediğimde.
Sonra suallarınız Diziler haqqında? Bəli.
[Işitilemez tələbə sual]
Ah, yaxşı sualdır.
Söhbət array ildə null 0 ne edir? Bu baxımdan mövcud deyil.
Bu yalnız biz yalnız bir anda gəlib olduğunuz olan ip, kontekstində mövcuddur.
Lakin bir sıra, bu işdə olduğu kimi, siz bütün sizin üçün əməliyyat sistemi xahiş edir.
>> Və bir kənara, bu aydın olacaq deyə, kimi
Mən sizin əməliyyat sistemi xahiş deyərək saxlamaq, əməliyyat sistemi soruşurlar.
Bir əməliyyat sistemi, yəqin ki, bildiyiniz kimi, Mac OS, Windows, Linux.
Siz GetFloat kimi funksiyaları zəng etdiyiniz zaman
və ya siz notları kimi dəyişənlərin elan edir
Günün sonunda siz səmərəli başqası siz yaddaş vermək xahiş olunur
biz proqramçılar can çünki
həqiqətən yaddaş fiziki əldə etmək üçün necə heç bir fikrim yoxdur.
Amma kimsə edir: əməliyyat sistemi.
Belə ki, başqa sevimli nişanlar və menyular və qovluqları bizə təqdim və bu kimi
Bir Mac və ya PC olub, masaüstünüzde bax
əməliyyat sistemləri, həmçinin aşağı səviyyədə dünyəvi stuff etmək
bu gigabyte idarə yüksək texniki heyəti
və ya ki, yaddaş 2 giqabayt, siz ki CPU idarə və s.
Siz kodu yazıyoruz Belə ki,
həqiqətən O mənada sizin əməliyyat sistemi üçün qoşulma edirik.
Hesab edirəm ki, minimuma endirmək üçün gedirəm. Bütün hüquqlar.
>> Diziler haqqında Digər suallar?
No? Okay.
Belə ki, keçid təbii seriallarda bir az tanış olan bir mövzu əslində.
Və biz də bu son anda belə qısa heç baxdı.
Bu çərşənbə bir string nümunəsi idi.
Bu simli Məsələn, olduqca sadə proqram idi
və Mən, həqiqətən, bu gün məqsədlər üçün xətləri bir neçə ilə sadələşdirilmiş etdik.
Bu xətt 19-nə bütün, istifadəçi bir string almaq deyil s adlı dəyişən bu saklar.
Sonra line 22 irəli bu yəqin satıra ki, simli 1 xarakterli çap edir.
Amma necə bu edir?
Biz, 0 bərabər bu qəbulu, dəyişən i elan edirik
və bu indi köhnə vərdiş halına gəlir.
Biz çərşənbə qədər bu görmədiyini, lakin onun adı nəticə çıxarmaq cür bilərsiniz
strlen yalnız s verilərkən nə qaytarır? Simli və uzunluğu.
Mən bunu bir simli, quote-dırnağı bağlamaq DAVID, ötürmək əgər
o ümid mənə çünki DAVID sayı 5 qayıtmaq olacaq.
Belə ki, həyat onun məqsədi ağır siz kodlu olub, bir string almaq edir
və ya bu halda bir arqument kimi, bir dəyişən kimi takıldığından
və bu simli uzunluğu nə tutulur.
>> Belə ki, burada indi əvvəlki viktorina Məsələn bəzi notation borc edirik.
Bu, üzüb gedirdi ilə heç bir əlaqəsi yoxdur sınavlar ilə heç bir əlaqəsi yoxdur,
ancaq kiçik ağ yalan biz həftə 1 ildən izah etdik çıxır ki,
C. bir string həqiqətən mövcud deyil ki,
Günün sonunda string həqiqətən yalnız bir sıra edir.
O geri yalnız 8 bit edir bytes bir sıra, belə byte, byte, byte, byte, var
belə yaddaş yığın, yaddaş yığın, yaddaş yığın, yaddaş yığın.
Və simli həyata vasitələri
burada ilk xarakter qoyulması edir
sonra burada, sonra burada, sonra, burada geri kompüter yaddaşında geri geri.
Siz HELLO kimi bir söz heca ilə oxumaq istəyirdi Belə ki, 1 xarakterli H, qoymaq olardı
sonra E, sonra L sonra L, sonra O - cəmi 5 simvol - bir yerdə kompüter RAM.
Amma burada əsas detal, onlar geri geri geri geri olacaq ki,
bir-birinə doğru gələcək.
Deyə zaman s [i] İngilis, nə mənə verən nədir?
S [i] Bu halda nə təmsil edir? Bəli.
>> [Tələbə] simli olan İTH character. Məhz >>. Simli olan İTH character.
İndi, i, burada loop üçün hər 0 başlamaq niyyətindədir
hər şey 0-dan hesablanmasını başlayır, çünki ki, yaxşı.
S Belə [0] HELLO kimi bir sözlə məktubu H təmsil gedir,
s [1] s HELLO kimi bir sözlə E kimi bir məktub təmsil etmək üçün gedir və.
Və biz bu loop hər iteration haqqında bunu görünür
müvəqqəti bir char olan, c adlı dəyişən ildə İTH xarakteri saxlanılması ki,
və biz c həyata çap edirik
belə ki, bu proqram nə Günün sonunda aşağıdakı kimidir.
Mən mənbə qovluğuna girin və mən string1 və mən irəli getmək və string1 çalıştırıyorsanız
və sonra mən HELLO daxil edin kimi bir söz yazın, bunu bütün bir zamanda bu 1 xarakterli çap edir.
>> Belə ki, zəriflik üçün imkan burada var.
Zəruri deyil, bəlkə bu yolla daha aydın belə olsa mən daha çox iş növü edirəm.
Yəqin ki, ümumiyyətlə, burada kodu line tullamaq olar? Bəli.
Line 24. Line 24 ildə bir dəyişən c elan edirəm.
Mən bu s İTH xarakteri saxlanılması, ancaq sonra burada c kullanıyorum.
Mən c kullanıyorum, mən yalnız 24 üz line atmaq bilməz kimi hiss edirəm.
[Işitilemez tələbə comment] >> Exactly.
Belə ki, zaman, proqramların dizayn söhbət gəlir
kimi oxunaqlı olan kodu bu qədər sadələşdirilməsi, qeyd
ancaq yalnız bir dəyişən olduğunu dərk, onun data növü, bir sıra edir
s belə [i] yalnız anında ki, simli ildə İTH xarakter qayıtmaq üçün gedir.
Siz çap istəyirsinizsə, o gözəl deyil.
Siz yalnız bir string çap deyilik çünki% c istifadə etmək
bir simli bir xarakter çap edirik və bu da İTH xarakter çap təsiri var.
Və printf istifadə edərək ötən həftə həqiqətən yalnız fərq geri
həftə isə biz super sadə bir şey edəcəyini keçmiş ki,
% s tutucu kimi sonra burada bir string adı
indi biz başlıq altında bir az daha dərin dalış etdiyiniz və dedi
simli çap etmir; orada bir xarakter çap.
>> 1 digər var Çünki biz burada müxtəlif bir az bir şey edə bilərsiniz - heç səhv
Bu proqram sağ, çünki, lakin mən axmaq bir şey edirəm
Mən Çərşənbə qısaca qeyd.
Lakin bu proqram dizayn daha da arta bilər necə geri düşünür? Bəli.
[Işitilemez tələbə cavab] >> Oh, yaxşı.
Beləliklə, biz adlı ikinci dəyişən n son dəfə tətbiq Xatırladaq ki,
hansı çünki mənim qol ikinci əvvəl özümüzü zidd görünür
, lazımsız kimi bir dəyişən tullamaq yalnız idi
lakin çərşənbə günü biz, həqiqətən, bu ki xatırlayıram.
I, sonra n = strlen, həqiqətən, burada bir vergül üçün loop üçün dəyişdi
və sonra burada artıq Mən <n, sonra mən əlavələr etdi etdi.
Əsas gəlir mən bu mənim başlatma dəyişdirilməsi ilə nail oldum ki, nədir
və bu artıq mənim vəziyyətdə? >> [Işitilemez tələbə cavab] >> Exactly.
Mən xatırlayıram çünki təkrar yenidən strlen xatırladaraq və deyiləm necə loop işləri üçün.
Onlar daha mürəkkəb görünüşlü almaq üçün başlamaq belə
ilk nöqtəli vergül əvvəl şey bir dəfə baş verən başlatma olduğunu xatırlayıram.
Vəziyyəti, baxmayaraq, ortasında
və bu siz loop keçir ki, hər dəfə yoxlanılır olur.
>> Belə ki, axmaq cür təkrar kompüter eyni sualı üçün var -
HELLO müddəti nədir? HELLO müddəti nədir? HELLO müddəti nədir? -
biz bu gün görəcəksiniz kimi, çünki Çərşənbə, bu, mütləq vaxt gedir
bir simli uzunluğu anlamaq üçün, çünki bu zaman çox yaxşı istifadə deyil
həqiqətən səy bir qədər edir.
Bəzi dillərdə olduğu kimi, ani deyil.
Belə ki, n bu dəyişən, mən ödənilməsi alıram qiyməti nədir?
Biz burada bir ticarət-off görüyorsunuz.
Mən təkrar eyni lənətləmək sual deyil zaman saxlaya bilərsiniz
amma mənə nə olan şey başa olacaq?
>> [Tələbə] Siz yaddaş müəyyən bir itirirlər. Məhz >>. Mənə bir yaddaş dəyəri olacaq.
Belə ki, bu halda mənə nə edir?
Digər 32 bit burada söz int nəzərdə tutulmuş kimi n, yalnız int çünki.
Lakin tamam?
Bu barədə düşünüyorsanız, çünki Açığı, o, yəqin ki, tamam
artıq simli, mən israf etmək gidiyorum çox vaxt
strlen təkrar və yenidən deyilən almaq üçün gedir çünki
loop hər iteration üçün.
Və bu gün mənim Mac RAM 2 gigs, bu gün bəzən RAM 4 gigs var.
Mən, həqiqətən, hər şeyi sürətləndirmək həmin bayt 4 ödəyə bilər.
Amma bu proqramlaşdırma və kompüter həqiqətən ticarət-off və bir mövzu olacaq
həqiqətən pulsuz üçün bir şey almaq heç vaxt edir.
Burada bir şey yaxşılaşdırılması üçün istəyirsinizsə, elə digər tərəfdən onu ödəmək üçün.
Bu halda Space qarşı zaman.
>> Belə ki, bu, bütün bu kimi sirli bir şey doğru qədər aparıcı edilib
ki, siz yəqin ki, indi həyata fiqurlu kimi, həqiqətən deyir?
[Işitilemez tələbə cavab] >> Bəli, belə bu, sizin Ovaltine içmək üçün əmin olun
həqiqətən ROT13 adlı alqoritmi, Rot 1-3, istifadə
olan yalnız məktubları bütün 13 yerləri dönüşümlü deməkdir
olan almaq və sonra 13 əlavə və nöqtə, nöqtə, nöqtə getmək deməkdir
üz 13 məktubu bütün yol, s B və C və D eyni şeyi edir.
Və biz, həqiqətən, 13 yerlərin shift istifadə bura çevirmək əgər,
biz az Ralphie nə geri almaq lazımdır, sizin Ovaltine içmək əmin olun edilib.
Amma indi problem üçün, ən azı standart nəşr, 2 müəyyən
Əgər bu özünüz enciphering nə cür var
və biz elə bu kimi daxil almaq və ya decrypt şifrelemek bu var.
>> Belə ki, bu əsasları növ olan imkan bizə gətirib çıxarır?
Nin burada bu üçüncü Məsələn nəzər salaq.
İlk növbədə, bu, ASCII deyirlər. ASCII geri nə aid deyil?
İnformasiya mübadiləsi üçün Amerika Standart Məcəlləsi,
olan nə deyərək həqiqətən uzun bir yol var? ASCII nədir?
[Işitilemez tələbə cavab] >> ki, nə var? >> [Tələbə] A xarakteri xəritəsi. >> A xarakteri xəritəsi.
Dünya standart var, çünki yalnız məktubları nömrələri eşler
nə nömrələri bizim bütün kompüterlər istifadə edə bilərsiniz ki, nə məktublar təmsil edəcək
və proqramları bütün ekranda şeyi çap gəldikdə yalnız uyğun gəlir.
Belə ki, 65 A təmsil olur Xatırladaq ki, 97 kiçik təmsil olur.
Və burada bu sadə proqram ASCII faktı istifadə edir -
dünya kapital A 65 olduğunu bilir ki, - və yalnız birdən çap edir.
>> Biz bu kodu daxil dalış əvvəl Belə ki, mənə əvəzinə terminal pəncərə açmaq bildirin.
Mənə davam və ASCII etmək, sonra-nin yalnız çıxdı korlamaq üçün bu şey run imkan edək.
Yalnız mənə müxtəlif kodları bütün deyir ki, həqiqətən böyük chart: Və yalnız bu deyil
müxtəlif məktublar bütün.
Super sadə proqram Beləliklə, amma ağır kodu çıxış edənlər 52 xətləri olmamışdır:
26 böyük, 26 kiçik.
Əksinə, mən loops bir neçə program bu idi.
Burada nə etdi bildirək.
Mən 26 məktubları çap etmək istədim, çünki mən 65 + 26 haqqında i 65 edir qədər iterated
İngilis əlifbası, i + + hər iteration, və indi yenidən bu bildiriş.
Bu, bizim dost typecasting təkrarlanmaması var
başqa bir 1 data type çevirmək vasitəsi
Mən nə bu proqram nə istəyirsiniz? çünki
S 65, 66, 67, və - Hesab edirəm ki, çünki mən hesablanması böyüyüb necə sayca saymaq istəyirik -
amma yalnız nömrələri çap istəmirəm.
Mən sayı izlədi məktubu çap etmək istəyirəm.
Sayı, B: Mən A çap etmək istəyirəm sayı, amma eyni dəqiq dəyişən ilə bunu edə bilərsiniz.
Mən, bir xarakter üçün tutucu kimi% c çap
Bir rəqəmli və ya sayı bir tutucu kimi% d.
Sonra Mən o 2 placeholders üçün nə yerləşdirin edirsiniz?
Mən xarakteri ekvivalent ilk plug, və sonra i həyata özü çap.
>> Belə ki, bu da yalnız işləri görürük.
Mən int bir float olan tökmə bilər kimi
bir real sayı bir tam getmək üçün
burada mən bir int bir az qəribə bir char, to -
olduqca real dünya üzərində xəritəyə deyil - lakin kompüter
bir char, başlıq altında yalnız bir nömrə
biz deyərək, kompüter burada heç belə aydın olan edirik
printf, i, 65 kimi çap onun rəqəmli ekvivalent kimi çap.
Mən texniki hətta bu lazım deyil həyata Və çevrilir.
Mən bir an əvvəl bunu nə aydın tökmə edir
Mən getmək və istədiyiniz nə data type ifadə edərək.
Amma artıq bu tutucu% c olduğunu fark
burada və bu, digər% c tutucu.
Bu int deyil baxmayaraq, kompüter, bir char həyata keçirir
yalnız başlıq altında bir int var.
>> Mən, həqiqətən, bu derleyeceğiz və ASCII proqram təkrar Beləliklə, əgər,
kompüter bu yazışma olduğunu dərk çünki hələ yalnız işləri görürük.
İndi ints üçün üzüb gedirdi dünyanın açıq tökmə üçün daha çox vacibdir
var, çünki həqiqətən hesablanmış qərar edirik:
Bu kəsir sonra hər şey tullamaq.
Burada bir xarakter bir sıra çünki tullamaq həqiqətən heç bir şey var
və simli yalnız simvol bir sıra edir.
Belə ki, bəzi şifrləmə və ya parol çözme həyata zaman gəldiyi zaman,
Biz həqiqətən bu cəfəngiyyat kimi bir şey, tərcümə edə bilərsiniz ki, necə
Sizin Ovaltine içmək əmin olun?
Biz indi bilirik - nin ehtimal kimi götürək - əsas,
biz, bu məktublar bütün fırlanan etdiyiniz nömrə sayı 13?
Belə ki, biz, məktub B cümlənin əvvəlində Ey bütün yol getdi
Mən B əgər çünki Ovaltine içmək üçün əmin olun
və sonra C, D, E, F, G, H, I, J, K, L, M, N, O, getmək
məktub B şifreleme O olur səbəbdən
Mən yalnız 13 əlavə çünki.
>> Mən decrypt bu istəyirəm əgər, mən mahiyyətcə O almaq və sonra, 13 çıxmaq lazımdır.
Əlifbası 26 məktublar var çünki Və ya, səmimi, bu, gözəl simmetrik deyil
biz də yalnız 13 əlavə edə bilərsiniz və biz məktub B. geri almaq lazımdır
Amma Sezar bu kimi bir şey həyata necə getmək yoxdur
və ya, həqiqətən, ümumi strings manipulyasiya?
Məktub B nə nömrə varsa?
Məktub B nedir? Belə ki, sağ, 66 var?
A məktubu 65 və məktubu B 66 Beləliklə, əgər,
66 ki, nə üçün bütün bu 13 əlavə və bu mənə 79 verir.
Biz az istifadə etmək hesabatı, O. üzərinə 79 həqiqətən xəritələr getmək əgər
>> Amma bir küncündə işin bir az burada var.
Nədir, məktubu Z demək?
Biz əlifba sonuna bütün yol almaq üçün 66 + 25 Əgər biz 91 istəyirik.
91 + 13 mənə 104 verir, nə tahmin?
104 bir böyük məktub bərabər deyil.
Nin burada bir az istifadə etmək hesabatı geri edək.
Mən cihaz, bildiriş bu proqram təkrar edin ki, 104, mən terminal pəncərə geri əgər,
104 yəqin kiçik h.
Belə ki, biz Z-da start zaman əmin etmək üçün burada bəzi əsas oyun lazımdır
və biz yalnız böyük və daha böyük ədəd qabaqda döymə saxlamaq istəmirəm bu 13 əlavə edin.
Biz həqiqətən nə etmək istəyirsiniz?
Siz ətrafında kesmek istəyirlər.
>> Belə ki, indi bölməsində və ya problem set spec özlüyündə, yəqin ki, gördüm ki, həyata çevirir
da faiz işarəsi olduğunu C bu digər operator var ki,
amma tutucu müəyyən etmək üçün bura% istifadə etdiyiniz halda,
xüsusilə problem set 2 üçün bu kimi bir şey də var ki, bilirik:
int x = y% z.
Mənə yalnız bu çox ümumi forması kimi bu təqdim edək.
Yüzdə bir proqramlaşdırma dili nə deməkdir? >> [Tələbə] modulo.
Qalan deyərək bir xülya yoludur modulo.
Orada müəyyən bir cüzi fərq var baxmayaraq
Bu o deməkdir z tərəfindən y bölmək lakin bölgüsü nəticə qayıtmaq yoxdur;
əvəzinə, qalan qaytarın.
>> Y həqiqətən 3 və z, həqiqətən 2 bölünür 3 2 Beləliklə, əgər 1-qalan 1
belə nə x bu ssenari əslində bərabər edir? 1.
Bu sadə, aşağı səviyyədə fikirdir.
Bu fikir ətrafında bükülmüş almaq üçün bir az zaman alır
hətta qalıqları qayğı idi, çünki yəqin ki, bir müddət oldu, çünki
və həqiqətən, məqsədyönlü bir şey üçün istifadə
lakin bu halda 3 kimi bir çox getmək bilər ki, sadə fakt
sonra 2 və kimi nisbətən kiçik sayda səmərəli ətrafında kesmek
1 kimi kiçik dəyəri qalan istifadə əvəzolunmaz oyun olacaq
biz Sezar kimi bir şey və bu digər şey Vigenere üçün də istifadə edə bilər ki,
problemi 2 müəyyən, lakin bu dövr ərzində bir təkrarlanan oyun olacaq.
Yalnız ümumi qalan alaraq bu sadə, sadə fikir
bizə ətrafında kesmek üçün imkan gedir.
Və biz yaddaş özü ilə daha oynayan başlamaq kimi, seriallarda daha çox oynayan başlamaq kimi,
Bu güclü oyun daha çox olmaq niyyətindədir.
>> Belə ASCII sonra hər hansı bir sualınız və ya seriallarda kimi strings nümayəndəliyinin?
Və biz 1 pillə daha da ala bilərsiniz. Bəli.
[Işitilemez tələbə sual] >> Yaxşı sual.
Dəyişən qarşısında bir ulduz var ne deməkdir?
Mənə təxirə edək hər hansı bir ətraflı ki, cavab,
lakin bir göstərici kimi tanınan bir mövzu aiddir.
Pointers yaddaş ilə, və biz, həqiqətən, bu gün edirik
ki, müzakirə doğru ilk addım alaraq,
lakin indi, mənim ulduz mövcud deyil ki, iddia bildirin
və biz strings strings zəng əvəzinə char * istifadə edərək davam edəcəyik
yəqin ki, əvvəl gördüm və mən bir iltifat kimi yalnız bir anda ekranda qoymaq bilərsiniz.
Beləliklə, biz yəqin ki, istəyirəm siz çox çox yol daha ətraflı ki, geri qayıtmaq lazımdır.
Nəhayət, bu gün. Bəli.
>> [Işitilemez tələbə sual]
Nə kontekstində bir xarakter üçün giriş təmin etmək üçün var? >> [Tələbə] Bəli.
Belə ki, ismarıcları, bir + qoymaq deyil zaman, yalnız müsbət ədəd hesab edilir.
Yalnız 1 nömrəli yazmaq Belə ki, bu müsbət 1 var.
Siz həqiqətən dəyər inkar müəyyən etmək istəyirsinizsə,
Siz sözün klavyenizdeki -1 var.
Amma bu yəqin ki, sizin sual deyil. >> [Işitilemez tələbə cavab]
>> Sual Yaxşı. Okay.
Bu səhv bir növ ilə, mən toplamaq, nə var Beləliklə, siz qaçdı
Əgər bir xarakter üçün tam konvertasiya çünki
lakin elə mənfilik, cəlb
və belə yalnız çıxdı karakter birtəhər munged.
Beləliklə, biz mövzunu bu cür qayıda qədər mənə bir az oversimplify bildirin.
İndi, hər şeyi bu yolla edirəm - bu bir oversimplification edir.
Amma tam dünya, sizin sərəncamında neçə bit var?
Siz 32 bit var.
Və bu günə qədər, sizə buna görə də təmsil edə bilər integers sayı danışıb sonra
siz 32 bit, çünki təxminən 4 milyard ümumi edir,
Belə ki, təxminən 4 milyard var ki, 32-2 var.
Amma biz həqiqətən ədəd bir sıra olmayan bir həftə və ya əvvəl 2 gördüm
qədər 0-dan 4 milyard.
Sıra əvəzinə müsbət təxminən mənfi 2 milyard 2 milyard gedir.
Amma bu sonra mənfi 2 milyard anlayışı necə təmsil yoxdur, sual begs
tək mənfi 1 edək?
İndi, biz oversimplify və yalnız biz leftmost az istifadə olacaq demək olar ki,
bir 1 varsa bu 32 bit, bu, mənfi sıra
bir 0 varsa və bu müsbət sıra.
Mənfi ədədlər ki, sadələşdirilmiş nümayəndəliyi ilə problemi
olduğunu bilə-bilə ağıllı olan və bir sıra bir xarakter olan çevirmək üçün çalışırıq, əgər
və ya əksinə, mənfi xarakter kimi şey yoxdur.
Yalnız 8 bit istifadə edən ASCII, o bit məsələ bütün 8, dünya
və leftmost bit mənfilik ilə heç bir əlaqəsi yoxdur.
Və yalnız, mən leftmost bit deyəndə, aydın olmaq
Xatırladaq ki, ilk həftədə bizim bit bağlı nümunələr idi zaman
biz bu kimi bir şey, 1001101 kimi şeylər çəkdi xatırlayıram.
Mən leftmost bit deyəndə, mən yalnız sözün siz sola bütün yol yazmaq ki, 1 deməkdir.
Belə simvol dünyada mənfilik heç bir anlayış var
ki leftmost bit həqiqətən ASCII, mənfilik ilə heç bir əlaqəsi ilə bir şey var.
>> Belə ki, kimi səslənir - və kontekstində tam cavab çətindir -
amma nədənsə, kodu mənfi dəyər təmsil kimi leftmost bit qarıxdırıcı edilmişdir
həqiqətən bu xarakterli hissəsi idi.
Kompüter həqiqətən bir az meraklısı bir şey çünki Və yenə, mən oversimplifying alıram
yalnız bir 0 qarşı mənfi işarəsi üçün 1 ki leftmost bit dəyişən çox.
Google maraqlı olduğunuz halda Onlar əvəzinə, adətən 2 complement deyilən bir şey istifadə
bir yanaşma bir az daha mürəkkəb deyil
ancaq fikir nəticədə eyni.
>> Belə ki, qısa, bir xarakter, bir sıra masaj olması ilə idi
və ya əksinə ancaq kodu faktı biləndir deyil
o bit 1-rəqəmli dünya əhəmiyyətli idi.
Bu xarakter dünyada işi deyil.
İndi mübahisəli olan halda, müəyyən kimi Lakin səslənir. Digər suallar.
Okay.
Belə ki, uzaq, biz yazdıq proqramları bütün istifadəçi bəlkə daxil etmişlər
GetInt, GetString kimi funksiyaları şəklində
və ya müxtəlif kitablar və ya online istinadlar qabaqda oxu olduğunuz halda,
siz özünüzü səmimi, biz CS50 kitabxana istifadə edən scanf kimi funksiyaları istifadə edə bilər.
Amma bir həftə və ya 2-ci, biz, həqiqətən, CS50 kitabxana həyata necə göstərmək lazımdır
biz ümumilikdə bu təlim təkərlər off bilər ki.
>> Bir istifadəçi daxil almaq üçün başqa yol var həyata Amma çevrilir.
Əslində, biz özümüz command line arguments istifadə edirlər
İndi bir neçə həftə üçün.
Biz cingilti çalıştırmak və ya biz run hər zaman etmək,
biz yalnız cingilti tipli deyil, daxil edin, biz daxil etmək tipli deyil.
Biz adətən bizim terminal Windows sətirinə sözü cingilti sonra nə yazılı var?
[Tələbə] fayl adı. >> Fayl adı, sağ?
Hello.c ya mario.c və ya hər hansı müvafiq fayl adı.
Və həqiqətən, etdiyiniz nə mənada siz cingilti davranış təsir etdik olunur
əlbəttə cingilti yazan insanlar az köhnə heç bir fikir siz idi, çünki
mario.c il sonra adlı proqram yazmaq gedirdi.
Beləliklə, elə ki, proqram davranış təsir idi
və proqram cingilti siz daxil qəbul edə bilər ki, belə bir şəkildə yazılı idi
tezliklə haqqında sözləri əlavə istifadəçi Xit daxil əvvəl.
>> Belə ki, bir müddət biz demək olar ki, bütün proqramları elan olunmuşdur çıxır ki,
bu kimi başlamaq - int əsas (void) - və biz qabaqda getdi sonra
və bizim kodu yazmağa başlamışdır.
Və biz, fayl üst daxildir bəzi kəskin ola bilər
lakin demək olar ki, bütün proqramları bu günə qədər bu başlayıb
Siz kitab, bölmə görülə bilər, hətta, online istinadlar
Bu əslində etibarsız olması deyil.
Bu etmək üçün digər qanuni formada argc int və sonra simli argv [] edir.
Belə ki, indi bu nə eyham edir?
Bu insan konvensiya olduğu argc, çıxır - Bu foo zəng edə bilər,
lakin bu, yalnız oxuculara çox daha az aydın olar -
argc yalnız nə təmsil əsas adlanan funksiya bir dəlil var?
Argc tanış olanlar üçün nə dayana bilər?
>> [Işitilemez tələbə cavab] >> Bəli, dəlillər və ya dəlil sayı sayı.
Bu kimi sadə.
Neçə arqumentlər bu proqram qəbul edilmişdir?
Ki, nə deməkdir?
Zınqıltı - Mən bu kimi bir şey Yayınladığınız komanda line Əgər mario.c -
Mən daxil edin hit zaman argc 2, qədər dolaşıq bir dəyər etmək niyyətindədir.
Belə ki, argc dəlil sayı olduğunu çıxır
amma tarixi səbəblərə görə, proqram özü adı ki sayı daxil edilir.
Belə argc mən cingilti mario.c yazarkən 2-dir.
Argv nə ola bilər?
İlk növbədə, argv bir string kimi görünür, lakin olduqca
çünki son çərşənbə və bütün daha bu gün,
bu kvadratşəkilli mötərizələri nə adlanır? Yəni bir sıra var.
Orada array heç sıra və daxilən mənada etməlidir
cingilti il ​​əvvəl insanlar əlbəttə yox idi, çünki
bizim kimi neçə sözlə insanların Enter'a əvvəl sətirinə yazın olardı.
>> Belə ki, burada bu halda onlar arqumentlər bir sıra alınmaqla funksiyası əsas elan
0 və ya daha dəlilləri.
Onlar orada nə qədər çox əvvəlcədən bilmirəm
belə bu kvadratşəkilli mötərizələri heç sıra daxili qəsdən var.
Lakin kvadrat mötərizə var ki, kompüter danışırsınızsa
bir sıra gözləyirik.
Argv yalnız mübahisə vektor üçün stenoqrafiya notation edir.
A vektor, dizi deyərək bir xülya yolu
və array siyahısı və ya kolleksiya deyərək bir xülya yoldur.
Bu yalnız bu kimi əsas yazmaq əgər o deməkdir ki, Belə ki,
əvəzinə biz həftə keçmiş neçə bunu etdik necə kimi,
proqram indi command line arguments qəbul etmək səlahiyyətinə malikdir
artıq siz Enter sonra mario yazmaq və belə ki,
sonra, siz piramida olmaq istəyirəm neçə blok yüksək bir sıra yazın
sonra Enter düyməsini basın.
Biz hətta bu mövzuda artıq və ya GetInt ya GetFloat GetString istifadə etmək lazım deyil.
Biz yalnız istifadəçi tez özünü o sözləri yazın edə bilərsiniz
zınqıltı müəllifləri bir həqiqətən annoying proqram olardı qərar kimi
ilk tipli cingilti kodunuzu tərtib əgər, Enter
sonra biz istifadəçi dedi, siz tərtib istədiyiniz fayl adını yazın edin
sonra biz mario.c yazın və Enter düyməsini basın.
Amma biz istifadəçilər həftə keçmiş neçə etdiyini olduğunuz məhz budur.
Biz GetString istifadə və proqram giriş üçün onlara təklif çalışan qədər biz gözləyin.
Halda lazımdır artıq.
>> Belə ki, burada bu Məsələn, biz indi, simli argv var
və bu da bir oversimplification edir
təlim təkərlər çox tez off gələcək.
Bu əsas bu alternativ bəyannamə yazılı daha düzgün yoldur
nə biz simli zəng edin həqiqətən bir ulduz var ki, çıxır, çünki
bir onun faktiki müəyyən ulduz, lakin bu yalnız mürəkkəb görünür,
o ilk qarıxdırıcı edir, belə ki, biz yalnız növ sinoniminə yaradılması ilə sadələşdirmək
bu CS50 kitabxana ki, bu daha çox istifadəçi dostu sözü simli xəritələr char *.
>> Belə nin əslində bu sonra edək. Mənə irəli getmək və burada gedit açmaq edək.
Mənə davam və 1 argv açmaq edək.
Bu proqram yəqin dəlilləri yazdıran, lakin ingilis baxımından,
Bu kodu baxaraq, bu daha dəqiq nə edir?
Əmri a.out foo bar I növü, mənim ağ-qara pəncərə nə çap olur varsa?
A.out foo bar daxil edin.
Durmayın. Bəli. >> [Işitilemez tələbə cavab]
Yaxşı. Belə a.out, yeni xətt, foo, yeni xətt, bar, yeni xətti.
Niyə bu? Biz, əlbəttə, yalnız bir anda təsdiq edə bilər.
Bu kodu bir tüklü xətti növüdür.
Bu yalnız ekranda şeyi gözəlləşir etmək üçün yeni görüntüler.
Bu, argc qədər dair 0 iterating olan bir loop edir
və bu hər iteration haqqında incrementing edilir + +.
Beləliklə, bu artıq bu% s nəzərdə tutulan kimi, simli çap deyib.
Argv [i] olduqca çox əvvəlki misal eyni fikirdir.
Biz dəyişən s zəng etmək üçün istifadə; indi bu, özbaşına, argv deyirlər.
Bu, command line ilə çap olunmuşdur ki İTH dəlil çap deməkdir
bu bütün şey həyata sonra, sonra, yalnız yaxşı tədbir üçün yeni bir xətt çap.
>> Belə ki, bu görmək bildirin. Mənə terminal pəncərə açmaq edək.
Mənə 1 argv tərtib və indi mənə daxil edin, 1 argv run imkan edək. Hmm. Okay.
Nin foo bar run edək. Maraqlı. Baz.
Mən bu yazın nə heç merak etdiyiniz halda
Bu yalnız də bir axmaq informatika konvensiya deyil.
Dünya tez-tez söz yalnız şifahi placeholders lazımdır.
Siz, bəzi ümumi string haqqında danışmaq istəyirəm əgər
kompüter elm yalnız bir təsadüfi söz lazım foo demək edirlər
Onlar ikinci təsadüfi söz lazımdır, əgər onlar, bar demək
sonra onlar üçüncü bir söz lazımdır, onlar dördüncü söz lazımdır, onda onlar qux demək baz deyirlər
və sonra qux sonra gəlir nə kimi böyük bir dini müzakirə online var
Siz digər ixtiyari söz olmalıdır nə anlamaq üçün Google bilərsiniz.
Lakin bu heç heç mənası var
baxmayaraq foo bar, yəni var ki, Google, əgər
burada etimologiyası hissəsidir.
>> Belə ki, bütün bu sonra edir satıra bu strings 1 çap olunur.
Mən yerinə əgər, baxmayaraq ki, bir az meraklısı almaq istəyirdi
Mən xətt hər simli çap etmək istəmədiyini güman;
Mən xətt hər simli hər xarakter çap etmək istədi.
Mən əvəzinə necə edə bilər?
Mən hər sözü çap etmək istəyirsinizsə, mən bu proqram haqqında dəyişmək üçün nə lazımdır
amma məktub məktubu hər bir söz məktubu çap etmək istəyirəm
məktub məktubu sonra növbəti sözü məktub?
Biz indiyədək bu fikirləri birləşdirmək edirsiniz? Bəli.
[Tələbə]% c. >> Bütün hüququ. Belə ki, haradasa bir% c lazımdır.
Mən bütün strings çap etmək istəmirəm, çünki mən simvol çap Yaxşı istəyirəm. Nə?
>> [Işitilemez tələbə cavab] >> Maraqlı.
Beləliklə, biz indi burada ikinci ölçüsü cür ehtiyac
çünki bir sıra kimi argv hesab, lakin strings bir sıra var.
Amma kimi, kimi, 15 dəqiqə əvvəl, bir string nədir? Bu simvol bir sıra var.
Belə ki, həqiqətən, argv, simvol bir sıra bir sıra edir
simvol Diziler bir sıra.
Belə ki, biz daha çox kvadrat mötərizə notlari istifadə edə çıxır. Belə ki, bunu edək.
Line 19 Bu loop üst, mən qədər i olan argc üçün təkrarlamaq gedirəm
lakin sonra mən bunu gidiyorum:
üçün - İndi i istifadə edə bilməz.
Mən sözləri üzərində təkrarlamaq istəyirəm, çünki mən digər dəyişən ehtiyac
lakin sonra da sözləri məktubları artıq
Mən növ şaquli ox və üfüqi ox, konseptual növ var.
Belə ki, int j 0 alır, sonra j az kimi j etmək istəyirik - və mən bir az bu qədər təmiz olacaq.
Nasıl bir string hərflər üzərində təkrarlamaq edirsiniz? Biz bir an əvvəl bu idi.
Argv və Strlen [i]. Yaxşı.
Və yenə, mən n və ya hər hansı törətməyən burada bir az təsirsizlik edilməsi alıram
lakin biz qayıda bilərsiniz.
>> Belə ki, indi j + +. İndi mən burada daha indent var.
İndi hər iteration çap üçün nə istəyirsiniz?
[Işitilemez tələbə cavab] >> Beləliklə [i] mənə söz verəcək.
[I] [j], sort bir matrix kimi edir.
Riyaziyyat-y fonları ilə o,
biz, serialların bu matris və ya bu array daxil endekslenmesini növ hətta dərin edirik
bu 2 ölçülü strukturu.
İndi burada nə görmək edək. Mənə böyük terminal pəncərə açmaq edək.
Mənə 1 argv markası təkrar edək.
Mən də bunu unuttum çünki yaxşı bir dərs, burada qıfıllar etdik.
Dolayısı növü 'unsigned ilə C kitabxana funksiyası "strlen" elan -
, Mən hətta o deməkdir ki, nə qalan bilmirəm, amma mən əvvəl bu görmüşəm
dolayısı elan.
Biz bu səhv görmək zaman, bu adətən nə demek deyil?
>> [Işitilemez tələbə cavab] >> mən üst bir kitabxana unuttum. Amma bir dəqiqə gözləyin.
Mən CS50 kitabxana unuttum çünki adətən Mən berbat sonra, lakin var.
Mən standart I / O. unuttuysanız çünki adətən Mən berbat sonra
Və səmimi, mən hətta bu lazım deyil. Biz bu gün GetString istifadə edirik.
Belə ki, nə əskik edirəm?
Indi biz bəzən adlı string.h istifadə etmək lazımdır ki, başqa bir kitabxana var
və bu, yalnız hələ standart I / O. olmayan çox funksiyaları var ki, başqa kitabxana
>> Belə nin mənim böyük terminal pəncərə geri imkan verir.
Okay. İndi Lanet olsun, mən yanlış idi danışarlar. Mən CS50 kitabxana istifadə edilmişdir.
Belə ki, 2 yollarla ya bu düzeltebilirsiniz.
Biz hazırda təlim təkərlər çıxarmaq və yalnız bu edə bilərsiniz
ya yalnız indi üçün sadələşdirilməsi saxlamaq və alaq cür, bu geri yapışdırıb
ki, problem həll və indi terminal pəncərə geri gedin.
Belə ki, CS50 kitabxana, aydın olmaq, yalnız funksiyaları deyil
bunun da səhv oldu səbəb olan söz simli var.
>> Belə ki, burada biz gedin. Mən kitabxana məsələləri də müəyyən. Daxil edin. Yaxşı.
1 Argv, foo bar daxil edin. Əla.
Belə ki, indi biz, line 1 çıxmış hər bir söz, hər bir məktub var
çox maraqlı bir proqram üçün etmək deyil
lakin bildiriş indi biz yalnız söz üzərində iterating deyil qabiliyyəti
həm də bağrı tanış səslənir hansı sözləri fərdi məktublar, üzərində
bu kimi bir simli ilə Scrambling məktublar kimi proqram sadə belə etmək.
Nin irəli getmək və burada bizim 5 dəqiqəlik fasilə edək.
Və biz geri gələndə, biz səmərəliliyinin söhbət başlar
ilə daha yaxşı bu şeyi edə bilərsiniz.
>> Bütün hüquqlar. Biz geri.
Bananagrams bir çox oynayan bizim TFS biri sayəsində,
biz, həqiqətən, bu gün burada bizimlə chars bütün dəstə var
fiziki, bu kiçik plastik parçaları ilə incarnated
və bu boş ağ şifer burada mənim kompüter RAM təmsil mənə təklif qoy -
laptop, masa üstü, nə - və orada bir çox kimi görünür
çünki biz kiçik byte ölçülü parçalara bu RAM up Doğrama başlamaq əgər,
Gəlin özbaşına ölçüsü və bulanık təmsil ki, bir şey demək -
orada getmək və alaq burada bir az kiçiltmək -
həcmindən bir byte təmsil bir şey deyim.
Belə ki, biz, həqiqətən, bu yaddaş daxilində bayt və ya simvol bütün dəstə uyğun
Burada nisbi ölçüsü ilə təklif edir.
>> Belə ki, məqsəd bir string üçün yaddaş ayrılması ki, indi güman edirlər.
Bu həqiqətən işləyir?
Biz yazılı etdiyiniz proqramları, biz, adətən, GetString istifadə etdik
lakin indi, aydın, biz argv istifadəçi giriş əldə edə bilərsiniz vasitəsilə bu başqa kanal var
command line dəlilləri ilə.
Amma nə həqiqətən başlıq altında olub?
Biz zəng əgər çıxır - GetString geri hərəkət edək - funksiyası GetString
bu CS50 kitabxana, istifadəçi, bir string istenirse edir
bir söz istifadəçi növləri - nin HELLO zəng edək.
Biz həftə keçmiş neçə deyərək olduğunuzu GetString qaytarılması dəyər
HELLO sözü kimi, əslində bir simli edir.
>> Amma nə həqiqətən bunu GetString edir?
Daxil edin, HELLO istifadəçi növləri kimi, GetString həyata figuring edir
tamam, bu neçə simvol var? Bu H-E-L-L-O deyil.
Bu halda Linux - Belə ki, ayrılması lazımdır, bu əməliyyat sistemi soruşmaq lazımdır -
ən azı 5 bytes üçün HELLO saxlamaq üçün.
Bu əməliyyat sistemi geri o 5 bytes olur bir dəfə və sonra nə gəlir
geri geri geri HELLO geri salmaq üçün.
Və nə həqiqətən GetString döndü oldu belə görünür ki, məlumatların bir yığın edir.
Bu kimi sadə deyil ki, çevrilir, çünki bu bir az yanlış
yalnız kompüter yaddaşında HELLO saxlanılması kimi
çünki, mən C yazılı alıram ki, proqram sonra GetString çağırır güman
və istifadəçi növləri növbəti sözü bye, bye edir.
Bəli, mən yaddaş haradasa söz bye uyğun lazımdır.
Mən HELLO döymək bilməz.
Məsələn, mən kompüter yalnız bu kimi yadda başlamaq istəmirəm
Mən hələ bir dəyişən HELLO sözü istifadə edilə bilər, çünki orijinal söz
başqa yerdə mənim proqram.
>> Belə ki, B-Y-E başqa bir yerdə yaddaş başa var.
Lakin Konvensiyanın adətən olduğunu ayrılması növbəti string
Yəqin ki, lakin həmişə, növbəti yaddaş yerdə başa gedir.
Mən hər hansı bir yaddaş üçün əməliyyat sistemi xahiş əgər
Mən GetString adlı son vaxtdan, odds sözü Bye var
HELLO yaddaş sözündən sonra sağ sonuna qədər davam edir.
Potensial problem yaranır yerləşir Amma bu nöqtədə bəlkə bilərsiniz.
Çünki yaddaş növbəti chunks, yalnız pulsuz ki, növbəti bytes -
ağ şifer təmiz - kompüter yaddaşında, HELLO hüququ sonrakı idi
Mən birdən artıq dəyişə bilər istədi ilk simli kimi hiss
Mən mahiyyətcə değiştirdik çünki HELLOBYE üçün
əvəzinə elə Bye başlanğıc və HELLO sonunda demarcing.
>> Belə ki, nə həqiqətən başlıq altında gedən çıxır ki,
siz online istinadlar və ya bölmə və ya kitab glimpsed edə biləcək
və ya sadəcə hələ bütün qəsdən demarkasiyası həqiqətən var ki,
kompüter yaddaşında sözlər arasında.
Və əslində, burada, bu halda deyil, yalnız sağ sonrakı HELLO üçün Bye qoymaq
əvəzinə, kompüter xüsusi xarakteri, xüsusi null xarakteri, belə danışmaq, qoyur
olan backslash 0 ilə marker ilə təmsil olunur.
Belə ki, uzun hekayə qısa, simvol ASCII təmsil olunur ki, xatırlayıram.
ASCII, yalnız nömrələri və məktublar arasında bir harita edir
və həmin məktubların çoxu kapital A təxminən 65 başlamaq
əlbəttə bir tam kimi və ya ikili sayı 0 təmsil edə bilər həyata lakin çevrilir
və dünya çoxdan, Uzunmüddətli qərar çıxır "Siz nə?"
Klaviatura hər hansı simvol təmsil deyil "edək ehtiyat sayı 0 -
"Heç məktublar, heç bir nömrə, heç bir durğu. 0 xüsusi edir."
"Bu xüsusi null xarakterli olacaq və biz \ 0 kimi yazmaq olacaq."
Biz yalnız 0, 0 yazdı əgər olan fərq bir karakter.
3, 2, 1, 0 ASCII kodları var Xatırladaq ki,
xarakteri 0 sayı 0-dan fərqli deyil.
Və siz həftə 1-dən geri baxmaq əgər biz ilk ASCII danışıb zaman görə bilərsiniz
9 0 və 1 və 2 və 3 bütün yol öz ASCII kodları idi.
Onlar coincidentally, 9 vasitəsilə 0 deyil. Onlar çox müxtəlif istəyirik.
Belə 0 yalnız "mən xüsusi edirəm" deməkdir və \ 0 vasitələri, sanki, "Mən 0 xarakterli deyiləm."
"Mən bu xüsusi dəyəri, null xarakterli deyiləm."
Mən iki dəfə eyni səhvi edə bilməz ildən Mən, həqiqətən, bu başqa bir lazımdır.
>> Belə ki, söz bye sonra biz də bu null simvol başqa bir ehtiyac olacaq.
Mənə burada mənim qələm işğalçı və mənə tez bir \ 0 çəkmək qoy edək
belə ki, mən 2 strings üçün əməliyyat sistemi xahiş sonra
GetString başqa bir zəng sonra GetString vasitəsilə
Bu yaddaş əslində nə deyil.
Mən bir string geri almaq zaman, həqiqətən, geri ki alıram
və mən növbəti string almaq zaman, həqiqətən, geri alıram.
Belə ki, bu ilk növbədə, strlen, sual begs, nə qayıtmaq lazımdır?
Mən string s strlen zəng və s HELLO istifadəçi yazdığınız söz olanda,
biz açıq-aydın HELLO müddəti bir neçə dəqiqə əvvəl nə demək idi?
Bu doğru, 5 idi? H-E-L-L-O. Və həqiqətən necə strlen işləri var.
Bu normal insan olmaq üçün bir simli uzunluğu beklediğiniz qaytarır.
Amma əslində, salam saxlanılması ki, simvol array necə böyük?
Bu, faktiki olaraq 6 deyil.
Strlen Beləliklə, siz ki, faktı qeyd deyil.
Amma başlıq altında kompüter həqiqətən, 5-məktub söz saxlamaq üçün 6 bytes istifadə
və bu sözü nə qədər uzun olursa olsun doğrudur.
Həmişə simli sonunda xüsusi null xitam xarakter olmalıdır olacaq
onun ümumi uzunluğu demarc üçün.
>> İndi, 30 il əvvəl, strlen 20 həyata keçirən şəxs Beləliklə əgər
siz strlen özü həyata barədə necə getmək yoxdur?
Verilən üçün printf mövcud verilən biz almaq kimi, biz ki, mövcud almaq,
lakin HELLO bu söz əgər
və nə yaddaş var, bu kimi bir şey
siz istəndi çünki reimplement strlen idi əgər
və ya, çünki, səmimi, siz strlen mövcud bilmirdim -
öz Bu bir roll idi - necə strlen həyata bilər
Bu kimi görünür ki, bir şey verilmiş?
İndi biz bir simli bir sıra olduğunu, biz fərdi simvol hər üzərində təkrarlamaq bilər
kimi bir şey istifadə - Let Tez bu etmək üçün cəhd edir.
>> Mənə cihaz daxil edək. Mənə bir yeni fayl, strlen.c yaratmaq edək.
Mənə indi davam və stdio.h biz printf çıxış var ki, daxil olar edək.
Mənə int əsas (void) nə edək. Oh. Mən sadəcə sonra artıq öz Bu edəcəyik. [Chuckles]
Təşəkkür edirik.
Bu yapýyorum nə. Bütün hüquqlar.
Mən ekran açıq Belə ki, əvvəl mən bütün yazılmış.
İndi mən gedirəm nə aşağıdakı kimidir:
printf ("Mənə bir string ver:")
Bu yalnız tüklü təlimat var.
İndi mənə string s = GetString bunu bildirin.
Mən artıq bir dəyişiklik etmək lazımdır.
Mən CS50 kitabxana kullanıyorum birdən Mənə davam və cs50.h. yazın bildirin
-% D, strlen [s]: printf ("The uzunluğu: İndi bunu edək
və mən hələ həyata deyiləm. Nə mən bu proqram əlavə etmək üçün var?
>> [Tələbə] string.h. >> String.h.
Beləliklə, biz strlen istifadə edirsinizsə ki, in ki, burada compiler bilir əmin edək
bir az ağlı başında olma kontrol edin.
Mən line 8 bir string alıram və line 9 I% d onun uzunluğu həyata çap edirəm.
Belə nin irəli getmək və bu qədər açıq olsun.
Biz strlen etmək var - tamam tərtib -
strlen - Mənə zoom imkan - daxil edin, H-E-L-L-O, daxil edin. Uzunluğu 5.
>> OK, belə strlen iş görünür, lakin dünya ki, bilirdi.
Belə ki, indi özümüzü belə strlen həyata bildirin.
Mənə üz kitabxana edək.
Biz artıq mən hətta mövcud bilmirdim çünki string.h girmə imkanı vardır.
Mən strlen özüm həyata bilər, çünki Lakin tamam
var və o, giriş adlı simli almaq
və indi bu simli uzunluğu anlamaq lazımdır.
Belə ki, necə bunu edə bilər?
Mən nə - siz nə istəyirsiniz - bu necə görmək edək?
>> [Işitilemez tələbə cavab] >> OK.
Belə ki, yolları bir dəstə ilə bunu edə bilərsiniz. Bu yanaşma cəhd edək.
Mənə özümü bir int dəyişən i verim, ona i 0 başlayır.
Və mənə bu deyək: giriş isə [i] nə bərabər deyil? \ 0.
Belə ki, bir proqram sanki onlara yazarkən bütün chars ilə işi ilə kimi çıxır
siz tək quotes deyil, ikiqat quotes istifadə etmək lazımdır.
Mən məktubu yazılı idi əgər, mən məktubu b bunu ki, mən bunu istəyirəm.
Bu, əksinə, deyil, fərdi xarakter simli olardı.
>> Mən sözün \ 0 istəyirəm. Mən bu loop etmək istəyirsiniz?
Əslində, mən bir dəyişən lazımdır, belə ki, int uzunluğu 0 alır.
Biz etdi yol açılmış nə əmin deyil bile,
biz bu yol aşağı olacaq indi ki, mən line 9-nə istəyirsiniz?
uzunluğu + + və sonra aşağı burada line 10, geri uzunluğu.
Belə strlen necə həyata keçirilir?
Bu, faktiki olaraq bu kimi yəqin ki, həyata var.
Kim bilir - bəlkə şəxsin loop üçün istifadə loop isə, bəlkə var?
Biz, həqiqətən, faktiki mənbə kodu ilə başlıq altında baxmaq istədiyiniz
bir fayl yəqin string.c çağırıb.
>> Amma burada mən edirəm nə düşünmək bildirin.
Mən 0 bərabər yaradılması, i adlı dəyişən elan edirəm.
Mən 0 bərabər qəbulu, digər dəyişən adlı uzunluğu elan edirəm.
Daxil olan İTH xarakterli xüsusi null xarakteri, \ 0 bərabər deyil isə Sonra dedi alıram
uzunluğu arttırmayı.
Amma tezliklə İTH xarakteri bu xüsusi simvolu kimi, nə loop olur?
Bu qısa sxemlərin. Bu, biz sonra dərhal uzunluğu qayıtmaq deməkdir vermir.
>> Mən mess etməyib Belə ki, in irəli getmək və terminal pəncərə geri imkan verir.
Mənə derleyeceğiz edək. Mən qıymaq idi.
Kitabxana funksiyası strlen və Uyumsuz redeclaration.
Mən burada öz yaxşı üçün çox ağıllı olmaq üçün çalışırdı.
Bu compiler həqiqətən strlen adlı bir funksiyası olduğunu bilir
biz kitabxana daxil deyil baxmayaraq. Bu gözəl deyil. Neyse.
Biz yalnız sonra əməkdaşlıq olacaq. Bu uzunluğu adını edək.
Mənə burada uzunluğu üçün istifadə dəyişdirmək edək və bu cingilti xoşbəxt edəcək.
- Bir kənara, bu funksiyaların bəziləri belə darn ümumi çünki
strlen, prinf - onlar həqiqətən xüsusi status növ var.
Və cingilti yalnız onlar haqqında xüsusi bir az bir şey bilir.
Həmişə ən funksiyaları ilə hal deyil ki, biz yelled oldu niyə ki.
>> Mənə daha cəhd edək. Şükür ki, bu zaman işləyib.
Belə ki, indi mənə öz strlen proqram run imkan verir.
Mənə bir ip verin: H-E-L-L-O, daxil edin. Mən qıfıllar var.
Niyə? >> [Işitilemez tələbə cavab] >> Exactly.
Mən özümü burada çox gözəl görünüşlü sonsuz loop var
Mən hər iteration haqqında uzunluğu incrementing alıram baxmayaraq, çünki
Mən aydın nə deyiləm? Mən incrementing deyiləm. Okay. Easy fix. Bəli?
Okay. Mən mötərizələrin lazım saylı İndi bəzi digər ümumi səhv afoul çalışır.
Və səmimi, bu kodu, çirkin baxmaq başlayır
biz bir anda bu təmizlənməsi bir zərbə almaq lazımdır.
Amma indi uzunluğu i həm incrementing alıram.
Açığı, mən artıq burada yaxşılaşdırılması üçün imkanlar görmək, lakin biz qayıda bilərsiniz.
>> Belə ki, indi-nin yalnız biz irəliləyiş azı etdiyiniz əmin olun bildirin.
Bu bir neçə baş verib, mən əvvəlcədən bu qeyd baxımsız.
Bu kimi bir ssenari müsibət var zaman, necə siz bu düzeltirim
Aracın və ya sizin kompüter yeniden ya pəncərə bağlanması qısa?
Bu, həqiqətən asandır.
Nəzarət C bu kiçik kök simvolu C göndərmək, və yalnız ən proqramları ləğv ki, olacaq.
Siz stuff sonsuz dəfələrlə çap ki, həqiqətən, pis sonsuz loop varsa,
bəzən Control C faktiki eşitmək üçün min dəfə hit ola bilər.
Mən çox asan idi ki, bir şey, çap deyiləm çünki Belə ki, yalnız indi bilirik.
Və texniki dəfə kifayət edər, amma səbirsiz almaq və mən adətən bu ki, bir çox dəfə təşkil edib.
>> Strlen belə. Mənə bir ip verin: HELLO. Bu iş gedir?
Okay. Digər ümumi səhv. Derleyeceğiz var.
Ki, bir qəsdən idi. Bütün hüquqlar.
Strlen Belə ki, H-E-L-L-O, daxil edin. Əla.
Beləliklə, biz indi strlen üçün 5 var.
Beləliklə, biz sözün ki, Həcm reimplemented var.
Belə ki, indi bu məni təsir etmir, çünki bu qədər təmiz bildirin
mənim kod dizayn.
Biz aydın bu təmizlənməsi üçün bu proqram nə aradan qaldırmaq olar?
[Işitilemez tələbə cavab] >> Bəli. , Sanki biz eyni i və uzunluğu müalicə edirik.
Belə ki, niyə biz yalnız smart almaq və uzunluğu isə demək deyil?
Əksinə, yalnız ilə başlamaq üçün uzunluğu zəng 0 onu başlamaq imkan
biz nə anlamaq qədər ismarıcları simli heç uzunluğu çünki.
>> İndi biz bunu, indi bu olduqca zərif proqramdır.
Bir dəyişən. Hesab edirəm ki, təmizlənmiş qədər dartılmış.
İndi beni terminal pəncərə geri imkan verir. Nin irəli getmək və bu run edək.
Strlen olun. Yaxşı görünür. Daxil edin, daha strlen Run.
Mənə bir ip verin: HELLO daxil edin. Və bu 5 iş görünür.
Mən yazılı olmasaydı, indi HELLO 1 simli ilə, məsələn, aydın olmaq
və sonra başqa bye, əlbəttə ki, çox sözlə ola bilər.
Mən, həqiqətən, yazın istədi ifadə HELLO deyil amma, məsələn, əgər
DÜNYA, nə biz olmazdı burada bu vəziyyət olduğunu bildiriş hüququ HELLO?
Yəni 2 strings ki, gəlir ki.
Siz əlbəttə ki, biz, həqiqətən, uzun söz yazdığınız əgər, kosmik bar simvol ola bilər
HELLO WORLD kimi, biz, həqiqətən yaddaş nə var ki,
var kimi bir az bir şey görünür.
>> Bütün hüquqlar. Hər hansı bir sualınız sonra strings burada nümayəndəlik haqqında?
No? Bütün hüquqlar.
Mən yenə strlen zəng və yenidən qəsdən belə ki əvvəllər bildirib
Siz iş bütün çox məşğul olacaq çünki yəqin ki, yaxşı fikir deyil
təkrar və yenidən.
Həqiqətən, nə iş cür görünür, bir simli uzunluğu həyata figuring üçün lazımdır?
Siz başında və sonra baxmaq, bax, bax, bax, baxmaq
nəhayət ki, xüsusi xarakter görməyincə hansı nöqtədə ah, indi uzunluğu bilirik.
Belə ki, əvvəllər biz strlen təkrar və yenidən adlanan zaman,
yenidən ki, string kimi görünür, çünki axmaq cür idi ki, mən təklif səbəb olur.
Bu, bəzi loop vasitəsilə təkrarlamaq hər dəfə dəyişmək niyyətində deyil
belə lazımsız iş edirik.
Eyni zamanda bir kənara kimi, cingilti kimi ki derleyiciler bu gün bilməlidir
çox il ərzində işlənib hazırlanmışdır,
və compiler yazıçılar, proqramçılar, olduqca ağıllı olur.
Və belə cingilti və digər derleyiciler həqiqətən anlamaq olar ki çıxır ki,
tamam, bəli, sizin vəziyyətdə strlen yazdı
olan texniki biz təkrar və yenidən zəng ki, deməkdir.
Amma ağıllı derleyiciler həqiqətən zəif istifadəçi qərarları bu cür optimize edə bilərsiniz
şeyi bərpa etmək üçün kod həyata.
>> Belə ki, yalnız bəzən compiler asan bizdən olduğunu dərk etmirlər
və növ öz səhvləri gizlətmək edəcək.
Amma əlbəttə ki, problem dəstləri və kimi gəldiyi zaman
o əsaslı səhv dizayn qərarları barədə düşünür ola bilərəm
potensial biz yol daha iş olarıq ki, sadə səbəbdən
biz, həqiqətən, var artıq. Amma nə qədər çox iş?
HELLO WORLD halda, bu problem həcmi ümumiləşdirmək başlamaq edək.
Problemin uzunluğu və ya problemin ölçüsü nədir
zaman söz Yığdığınız istifadəçi HELLO edir?
Bu, bəlkə yəqin 5 6 var. Müsbət və ya mənfi 1. Neyse.
Biz yalnız 5 zəng bilərsiniz yaxın.
>> HELLO müddəti həyata rəqəm çalışır Belə ki, problemin ölçüsü burada nə var?
Bu son xarakter üçün bəlkə 1, 2, 3, 4, 5, 6, lakin ümumiləşdirmək edək n kimi.
Belə ki, n, yalnız dəyişən n, kompüter alimləri adətən istifadə edir nə
əl bir problem ölçüsü və problem təsvir etmək üçün HELLO necə uzun?
Strlen nə qədər vaxt lazımdır?
Hər bir addım bir xarakter baxmaq deməkdir harada, n addımlar üçün qalır
bir xarakter baxmaq, bir xarakter oldu.
Və biz bir müddət geri bu müzakirə idi, əməliyyatların sayı bir şey edir.
Kateqoriyasının ilk gün hər kəs yöndəmsiz, durmaq etmişdir
və sonra hər kəs bir-biri ilə off cütləşmə açılmış
üçün həqiqətən otaqda ideal neçə nəfər saymaq.
Və biz də bir şey olmadı elə mən əvəzinə köhnə məktəb yol əgər
yalnız s 1, 2, 3, 4, 5, 6 başlayan və,
çox ki, problemin ölçüsü ölçüsü n idi. Oda n insanlar var idi.
Amma doğru olduğunu sürətləndirmək bilər? Az məktəb stil mən 2s ilə hesablanması başlamaq bilər.
2, 4, 6, 8, 10, 12. Və çox daha sürətli, və həqiqətən ki, hiss edir.
Başqa 400 nəfər bu otağa getdi əgər yenə sözün iki dəfə sürətli kimi, lakin
bir dəfə bütün bu alqoritmlərin başqa 400 və ya bəlkə 200 addımlar olacaq.
>> Biz həqiqətən ağıllı almaq və biz əvəzinə varsa Lakin əksinə, siz bütün sizin saymaq
ki, alqoritm işləmişdir necə xatırlayıram.
Siz bütün ayağa qalxdı. Bu fast-irəli mənə edək.
Siz bütün, siz yarım oturdu, sonra off qoşalaşmış, ayağa qalxaraq
Siz yarım oturdu, siz yarım oturdu
və həftə 0 Bu loop hər iteration də biz tərəfdən problem halved
və sonra n / 8, sonra n / 4, n / 2 getdi.
Və ki, dolayısı ki, başqa 400 nəfər otağı, heç bir böyük daxil gəzmək əgər
bu, bizi 400 daha el deyil, 200 daha tur 1 daha dəyirmi keçiriləcək.
Və biz geri isə bildirib hekayə bu bir az bir şey idi.
Bu qırmızı xətt burada xətti, bu düz deyil, və n kimi etiketli edir
bir problem həcmi artır kimi, çünki
Sizin alqoritm və proqram ilə siz həll edirsinizsə o, n addımlar atır
biz bu problemin böyük ölçüdə daha çox zaman alır bir düz xətt kimi sahəsi bilərsiniz.
Və yalnız bir az daha yaxşı 2 hesablanmasını twosies yanaşma, 4, 6, 8, hələ bir düz xətt.
Bu bir az daha az vaxt tələb edir, sarı xətt nöqtəsi üçün qırmızı xətt baxımdan aşağıda belə.
>> Lakin daha yaxşı biz logarithmic zaman adlandırdığı bu müqəddəs grail idi
Ü yenə biz oda insanların sayı iki dəfə, hətta,
biz sinif ilk gündən ki, telefon kitab həcmini ikiqat
heç bir böyük, 1 daha səhifə gözyaşardıcı edir, 1 daha iclası aşağı edir
iki dəfə böyük olduğunu bir problem həll etmək üçün.
Və söhbət biz İndi malik başlamaq almaq
necə həqiqətən səmərəli problemləri həll yoxdur
biz bu kimi problemlərin sadə hesab? əgər
, Bəzi nömrələri olan arxasında 8 qapı var düşünək
və bu ədəd hər hansı bir şəkildə sıralanır deyil
onlar bu qapılar arxasında yalnız təsadüfi integers edirik
Kim bilir - və biz necə sayı tapmaq yaparsınız sual -
Bu qapılar arxasında 7?
Əgər bir insan, mənə sayı 7 tapmaq üçün nə edərdiniz
yenə bu hər qapı və bir dəyər görmək əgər bir qapı açmaq lazımdır?
Sizin alqoritm bəlkə ola bilər?
>> [Işitilemez tələbə cavab] >> Belə ki, sol ilə başlamaq və bir qapı açmaq, bir qapı açmaq, bir qapı açın.
Və ən pis halda, nə qədər sayı 7 tapmaq bizə etmək üçün gedir?
Və yenə onlar sıralanır deyil, belə ki, kimi asan deyil edirik, yaxşı, mən 7-ci qapı açmaq üçün gedirəm.
Bu, maksimum, 8 addımlar bizi bilər.
Ən pis halda, 7, qapı xəttinin çox sonunda təsadüfi deyil
biz bütün n qapı cəhd ola bilər.
Belə ki, burada, biz xətti alqoritm var görünür.
Əslində, biz bir neçə il yalnız əvvəl bu idi.
Sizin sələfləri biri məhz ilə etiraz edildi
biz bir digital versiyası olmadığı, biz əvəzinə yazı taxtası oldu
bu kağız bəzi parçaları.
Nə mən nə düşündüm, bu getdi necə geri sürətli bir nəzər edir
mərhələdə ən yaxşı və bəlkə də ən yöndəmsiz imkanlardan biri
Burada Sanders bir nümayiş var.
Biz ədəd 2 satır idi.
Biz yalnız bu satır çox üst üçün Sean burada nə baxmaq olacaq.
Halda yenə heç kimsə CS50 könüllüləri,
biz, kamera bu saxlamaq Sean xeyir-dua idi
o yüzlərlə ildir bu seyr edilmişdir ki, bilir.
Amma Sean inanılmaz bir iş idi - və ya o idi - həqiqətən bizə xüsusi sayı tapmaq edir.
>> Belə ki, uzun əvvəl bu söhbət davam edəcəyik ki, o, bu alqoritm necə həll nin görək
necə səmərəli şeyi tapa bilərsiniz.
[Video Malan] Mən, bu qapılar arxasında sayı 7 gizlediniz
ancaq bu qapı bəzi üz tucked, habelə digər qeyri-mənfi nömrələr
və məqsədi yalnız bir sıra kimi nömrələri bu üst sıra hesab edir
və ya onların arxasında ədəd kağız parçaları bir ardıcıllıqla,
və məqsədi yalnız burada üst sıra istifadə edərək,, mənə sayı 7 tapa bilərsiniz.
Və biz o zaman bunu haqqında getmək necə tənqid edir. >> Bütün hüququ.
[Malan] Bookmark sayı 7 tap, xahiş edirik.
[Gülüş]
[Malan] saylı [gülüş]
5, 19, 13, [gülüş]. Bu oyun sual deyil.
1.
[Gülüş]
Bu nöqtədə hesab çox yaxşı deyil, belə ki, siz də davam edə bilər. [Gülüş]
3.
Gedin. Açığı, mən kömək lakin hətta haqqında düşünür istəyirsinizsə görəsən bilməz. [Gülüş]
Yalnız üst sıra, belə ki, 3 sol var. Mənə 7 tapa bilərsiniz.
[Tələbələri murmuring]
[Malan] 17.
[Tələbələri murmuring]
[Malan] 7! [Alqış]
>> Belə ki, çərşənbə günü biz hər şeyi tapmaq üçün bu və daha çox inkişaf etmiş alqoritmlər daxil dalış edəcək.
İndi biz Sean ilə tərk edəcəyik və çərşənbə günü görürsünüz.
[CS50.TV]