1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Həftə 4] 2 00:00:03,000 --> 00:00:05,000 [David J. Malan] [Harvard Universiteti] 3 00:00:05,000 --> 00:00:08,000 [Bu CS50 edir.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> , Bütün sağ, bu CS50, bu həftə 4 başlanğıc 5 00:00:12,000 --> 00:00:16,000 və bu yavaş mümkün çeşidlənməsi alqoritmlərin biridir. 6 00:00:16,000 --> 00:00:19,000 Hansı ki, biz orada izlədim ki, idi? 7 00:00:19,000 --> 00:00:24,000 Bu, (n ^ 2) + məbləğin böyük Ey üçün bubble sırala idi 8 00:00:24,000 --> 00:00:28,000 və həqiqətən biz bilirik görünür bu dünyada yeganə deyildir 9 00:00:28,000 --> 00:00:30,000 nə bubble növ və ya öz çalışan zaman. 10 00:00:30,000 --> 00:00:33,000 Həqiqətən, bu Google Eric Schmidt ilə müsahibə idi 11 00:00:33,000 --> 00:00:45,000 və keçmiş senator Barak Obama yalnız bir neçə il əvvəl. 12 00:00:45,000 --> 00:00:48,000 >> İndi, senator Google burada edirik 13 00:00:48,000 --> 00:00:54,000 və mən bir iş müsahibə kimi prezidentliyə düşünmək istəyirəm. 14 00:00:54,000 --> 00:00:58,000 İndi prezident kimi bir iş əldə etmək çətindir və siz indi rigors ilə olacaq. 15 00:00:58,000 --> 00:01:00,000 Google bir iş üçün də çətindir. 16 00:01:00,000 --> 00:01:05,000 Biz sualınız və biz namizədlərin sual 17 00:01:05,000 --> 00:01:10,000 və bu Larry Schwimmer edir. 18 00:01:10,000 --> 00:01:14,000 Siz uşaqlar I söylüyorum deyiləm mi? Bu sağ burada. 19 00:01:14,000 --> 00:01:18,000 Bir milyon 32-bit integers düzmək üçün ən səmərəli yol nədir? 20 00:01:18,000 --> 00:01:21,000 [Gülüş] 21 00:01:21,000 --> 00:01:24,000 Yaxşı 22 00:01:24,000 --> 00:01:26,000 Üzgünüm. >> Heç, heç, heç, No. 23 00:01:26,000 --> 00:01:34,000 Mən bubble sırala getmək üçün səhv yol olardı. 24 00:01:34,000 --> 00:01:39,000 >> Ona izah edən Hadi,? 25 00:01:39,000 --> 00:01:43,000 Ötən həftə biz ən azı bir gün üçün kod bir fasilə etdi geri 26 00:01:43,000 --> 00:01:46,000 və ümumiyyətlə həlli bəzi yüksək səviyyəli fikir və problem diqqət açılmış 27 00:01:46,000 --> 00:01:49,000 axtarış və çeşidlənməsi kontekstində, 28 00:01:49,000 --> 00:01:53,000 və biz ötən həftə bu adı sillə ki, bir şey təqdim 29 00:01:53,000 --> 00:01:56,000 lakin asimptotik notation, Böyük O, Böyük Omega, 30 00:01:56,000 --> 00:02:00,000 və bəzən Böyük Theta notation, bu sadəcə yolları idi 31 00:02:00,000 --> 00:02:02,000 alqoritmlərin çalışan zaman izah, 32 00:02:02,000 --> 00:02:05,000 çalıştırmak üçün bir alqoritmi üçün edir nə qədər vaxt. 33 00:02:05,000 --> 00:02:08,000 >> Və siz ölçüsü baxımından çalışan zaman danışdı Xatırladaq bilər 34 00:02:08,000 --> 00:02:11,000 biz ümumiyyətlə problem ola bilər nə olursa olsun, n adlandırdığımız giriş, və, 35 00:02:11,000 --> 00:02:13,000 Ü n, oda insanların sayı 36 00:02:13,000 --> 00:02:17,000 bir telefon kitab pages sayı, və biz hər şeyi yazmaq başladı 37 00:02:17,000 --> 00:02:21,000 O kimi (n ^ 2) və ya O (n) və ya O (n log n) 38 00:02:21,000 --> 00:02:24,000 və riyaziyyat çox belə mükəmməl iş vermədi hətta 39 00:02:24,000 --> 00:02:28,000 və n idi ² - n / 2 və ya kimi bir şey 40 00:02:28,000 --> 00:02:31,000 biz yerine, aşağı üçün bəzi terimler tullamaq ki, 41 00:02:31,000 --> 00:02:34,000 və motivasiya biz həqiqətən istəyirik ki, var 42 00:02:34,000 --> 00:02:37,000 qiymətləndirilməsi obyektiv şəkildə sort 43 00:02:37,000 --> 00:02:39,000 proqramlarının icrası və ya alqoritmləri icra 44 00:02:39,000 --> 00:02:42,000 gün sonunda, məsələn, heç bir əlaqəsi yoxdur 45 00:02:42,000 --> 00:02:45,000 kompüter sürəti bu gün. 46 00:02:45,000 --> 00:02:47,000 >> Məsələn, bubble sırala həyata əgər, 47 00:02:47,000 --> 00:02:50,000 və ya, bu gün kompüter sort və ya seçim cür birləşməsi həyata 48 00:02:50,000 --> 00:02:53,000 2 GHz kompüter və siz çalıştırın 49 00:02:53,000 --> 00:02:56,000 və bu 3 GHz var gələn il, saniyə, bəzi sıra edir 50 00:02:56,000 --> 00:02:59,000 və ya 4 GHz kompüter, və sonra ki, "Wow, mənim alqoritm iddia bilər 51 00:02:59,000 --> 00:03:03,000 əslində o halda aydın deyil zaman ", iki dəfə sürətli kimi indi. 52 00:03:03,000 --> 00:03:06,000 Bu, yalnız hardware daha sürətli əldə etmişdir, lakin kompüter 53 00:03:06,000 --> 00:03:10,000 , və biz, həqiqətən, kimi şeylər üz atmaq istəyirəm deyil 54 00:03:10,000 --> 00:03:13,000 2 Multiples və ya 3-Multiples xarakterizə gəldiyi zaman 55 00:03:13,000 --> 00:03:17,000 necə sürətli və ya yavaş necə bir alqoritm və həqiqətən yalnız diqqət 56 00:03:17,000 --> 00:03:20,000 n və ya onların bir amil haqqında 57 00:03:20,000 --> 00:03:24,000 bəzi güc onların keçən həftə gələn növ olduğu kimi. 58 00:03:24,000 --> 00:03:27,000 Və birləşmə cür köməyi ilə geri 59 00:03:27,000 --> 00:03:31,000 biz bubble sort və seleksiya sort çox daha yaxşı edə 60 00:03:31,000 --> 00:03:33,000 və hətta durub sort. 61 00:03:33,000 --> 00:03:36,000 >> Biz yenə n log n aşağı olmuş, 62 00:03:36,000 --> 00:03:39,000 log n adətən artır ki, bir şey deməkdir ki, geri 63 00:03:39,000 --> 00:03:43,000 daha yavaş-yavaş sonra n, belə n log n bu günə qədər yaxşı idi 64 00:03:43,000 --> 00:03:45,000 o n ²-dən az idi. 65 00:03:45,000 --> 00:03:47,000 Amma birləşmə sort ilə n nail olmaq n daxil 66 00:03:47,000 --> 00:03:51,000 biz leverage olduğunu bir fikir əsas bakterioloji nə idi 67 00:03:51,000 --> 00:03:54,000 biz də həftə 0 geri leveraged ki? 68 00:03:54,000 --> 00:03:58,000 Necə birləşmə sort ilə ağılla çeşidlənməsi problem həll etdiniz? 69 00:03:58,000 --> 00:04:04,000 Bəlkə, əsas fikir nə idi? 70 00:04:04,000 --> 00:04:07,000 Hər kəs bütün. 71 00:04:07,000 --> 00:04:09,000 OK, geri addım götürək. 72 00:04:09,000 --> 00:04:11,000 Öz sözləri sort daxil tanımlayın. 73 00:04:11,000 --> 00:04:15,000 Necə iş idi? 74 00:04:15,000 --> 00:04:17,000 OK, biz həftə 0 geri Satırı lazımdır. 75 00:04:17,000 --> 00:04:19,000 Okay, evet. 76 00:04:19,000 --> 00:04:22,000 [Işitilemez-tələbə] 77 00:04:22,000 --> 00:04:26,000 Yaxşı, Okay, biz 2 ədəd nömrələri array bölünür. 78 00:04:26,000 --> 00:04:29,000 Biz bu ədəd hər çeşidlənir, sonra biz onlara birləşdi 79 00:04:29,000 --> 00:04:33,000 bu böyük ki, bir problem alaraq əvvəl və biz bu ideya gördüm 80 00:04:33,000 --> 00:04:36,000 və bu böyük və ya bu böyük ki, bir problem onu ​​Doğrama. 81 00:04:36,000 --> 00:04:38,000 >> Telefon kitab Məsələn xatırlayıram. 82 00:04:38,000 --> 00:04:42,000 Əvvəl həftə özünü hesablanması alqoritmi Xatırladaq 83 00:04:42,000 --> 00:04:45,000 belə daxil sort burada bu pseudocode ilə xülasə edilmişdir. 84 00:04:45,000 --> 00:04:48,000 Siz n elementləri verilmiş olduğunuzda, ilk ağlı başında olma kontrol idi. 85 00:04:48,000 --> 00:04:51,000 N <2 sonra bütün bir şey deyilsə 86 00:04:51,000 --> 00:04:55,000 n <2 sonra n açıq-aydın 0 və ya 1 əgər çünki, 87 00:04:55,000 --> 00:04:57,000 bu da varsa və bu 0 və ya 1 düzmək üçün heç bir şey yoxdur. 88 00:04:57,000 --> 00:04:59,000 Siz tamamlayın. 89 00:04:59,000 --> 00:05:01,000 Sizin siyahısı artıq trivially çeşidlənir. 90 00:05:01,000 --> 00:05:04,000 Amma 2 və ya daha çox elementləri var başqa əgər irəli getmək və onları bölmək 91 00:05:04,000 --> 00:05:06,000 2 yarıya indirir daxil, sol və sağ. 92 00:05:06,000 --> 00:05:09,000 O yarıya indirir hər bir sort, sonra sıralanır yarıya indirir daxil. 93 00:05:09,000 --> 00:05:13,000 Amma burada problem biz punting etdiyiniz kimi ilk baxışda bu hiss edir. 94 00:05:13,000 --> 00:05:17,000 Bu n elementləri düzmək üçün siz xahiş etdik, bu ki, bir dairəvi tərifi 95 00:05:17,000 --> 00:05:22,000 və "Bütün hüququ, gözəl, biz o n / 2 və o n / 2 elementlər düzmək lazımdır" mənə izah edirik 96 00:05:22,000 --> 00:05:27,000 sonra növbəti sual olacaq "necə n / 2 elementlər sort yoxdur, Fine?" 97 00:05:27,000 --> 00:05:30,000 >> Amma bu proqramın strukturunun, 98 00:05:30,000 --> 00:05:33,000 Bu baza halda var, çünki, belə ki, danışmaq 99 00:05:33,000 --> 00:05:39,000 n dərhal 2 qaytarılması kimi bəzi əsas dəyər <əgər deyir ki, bu xüsusi halda. 100 00:05:39,000 --> 00:05:42,000 Həmin dairəvi cavab cavab etməyin. 101 00:05:42,000 --> 00:05:46,000 Bu proses bu cyclicity nəhayət başa çatacaq. 102 00:05:46,000 --> 00:05:50,000 Mən "Sort bu n elementləri," xahiş və siz demək Əgər "Fine, bu n / 2 sort" 103 00:05:50,000 --> 00:05:53,000 sonra "Fine, sort bu n / 4, n / 8, n/16" demək 104 00:05:53,000 --> 00:05:56,000 nəticədə bir böyük kifayət sayda bölmək lazımdır 105 00:05:56,000 --> 00:05:59,000 siz deyə bilərsiniz hansı nöqtədə yalnız 1 element sol lazımdır ki, 106 00:05:59,000 --> 00:06:02,000 "Burada, burada bir sıralaması bir element deyil." 107 00:06:02,000 --> 00:06:06,000 Sonra bu alqoritm və parıltı qədər burada fakt əldə etmək 108 00:06:06,000 --> 00:06:09,000 bir bu fərdi sıralanır siyahıları bütün, 109 00:06:09,000 --> 00:06:12,000 yararsız görünür ölçüsü 1, olan bütün 110 00:06:12,000 --> 00:06:15,000 siz onlara birləşdirilməsi və onların birləşmə başlamaq dəfə 111 00:06:15,000 --> 00:06:19,000 Rob video bir nəhayət sıralanır siyahısı kimi nəhayət qurmaq. 112 00:06:19,000 --> 00:06:22,000 >> Amma bu ideya uzaq çeşidlənməsi kənarda uzanır. 113 00:06:22,000 --> 00:06:26,000 Recursion kimi tanınan bu proqram katıştırılmış bu ideya var 114 00:06:26,000 --> 00:06:29,000 Bir proqramı vasitəsi fikir 115 00:06:29,000 --> 00:06:32,000 və özünüz zəng bir problemi həll etmək, 116 00:06:32,000 --> 00:06:36,000 və ya, bir funksiyası var proqramlaşdırma dilləri kontekstində qoymaq 117 00:06:36,000 --> 00:06:39,000 və problem həll etmək üçün, siz özünüz zəng funksiyası 118 00:06:39,000 --> 00:06:42,000 təkrar və yenidən, ancaq funksiyası 119 00:06:42,000 --> 00:06:44,000 özünüzü sonsuz dəfələrlə zəng edə bilməz. 120 00:06:44,000 --> 00:06:47,000 Nəhayət, siz belə danışmaq, alt həyata var 121 00:06:47,000 --> 00:06:49,000 və deyir ki, bəzi ağır kodlu baza vəziyyət 122 00:06:49,000 --> 00:06:53,000 Bu baxımdan belə özünüz zəng dayandırmaq ki, bütün prosesi 123 00:06:53,000 --> 00:06:56,000 nəhayət əslində dayandırmaq deyil. 124 00:06:56,000 --> 00:06:58,000 Bu, həqiqətən recurse üçün nə deməkdir? 125 00:06:58,000 --> 00:07:01,000 >> Biz demək, bir sadə, əhəmiyyətsiz misal edə bilərsiniz, əgər Bakalým 126 00:07:01,000 --> 00:07:03,000 Qədər burada səhnəyə mənə 3 nəfər, kimsə rahat olsun. 127 00:07:03,000 --> 00:07:06,000 Qədər, 2 və 3 1, gəlir. 128 00:07:06,000 --> 00:07:09,000 Siz 3 Burada gəlmək istəyirsinizsə. 129 00:07:09,000 --> 00:07:12,000 Bir line burada mənə doğru növbəti durmaq istəyirsinizsə, güman ki, əl-da problem 130 00:07:12,000 --> 00:07:15,000 çox trivially burada olan insanların sayını olunur. 131 00:07:15,000 --> 00:07:18,000 Amma səmimi, mən bütün bu sayılması nümunələri yorğun edirəm. 132 00:07:18,000 --> 00:07:21,000 Bu, bəzi vaxt, 1, 2, və nöqtə, nöqtə, nöqtə almaq niyyətindədir. 133 00:07:21,000 --> 00:07:23,000 Bu əbədi etmək olacaq. 134 00:07:23,000 --> 00:07:25,000 Mən yalnız köməyi ilə cəmi ayaqla zərbə bu problemin-nə adı var? Deyil had 135 00:07:25,000 --> 00:07:27,000 Sara. >> Sara, bütün hüququ. 136 00:07:27,000 --> 00:07:29,000 Kelly. >> Kelly və? 137 00:07:29,000 --> 00:07:31,000 >> Willy. >> Willy, Sara, Kelly və Willy. 138 00:07:31,000 --> 00:07:34,000 İndi kimsə tərəfindən sual edilmişdir 139 00:07:34,000 --> 00:07:37,000 necə bir çox insanlar bu mərhələ üzrə və mən heç bir fikrim yoxdur. 140 00:07:37,000 --> 00:07:40,000 Bu, həqiqətən uzun siyahısı və s əvəzinə mən bu oyun etmək üçün gedirəm. 141 00:07:40,000 --> 00:07:43,000 Mən iş çox etmək mənə yanındakı adam xahiş gedirəm 142 00:07:43,000 --> 00:07:46,000 və bir o işin ən etdiklərini edilir 143 00:07:46,000 --> 00:07:49,000 Mən mümkün iş ən az miqdarı nə və yalnız 1 əlavə alıram 144 00:07:49,000 --> 00:07:51,000 , belə ki, burada biz getmək nə olursa olsun öz cavab. 145 00:07:51,000 --> 00:07:54,000 I mərhələdə necə bir çox insanlar xahiş etdik. 146 00:07:54,000 --> 00:07:57,000 Necə bir çox insanlar sizin sol mərhələsindədir? 147 00:07:57,000 --> 00:08:00,000 Bu Okay >>? Mənim sol, amma fırıldaqçı deyil. 148 00:08:00,000 --> 00:08:04,000 Doğru ki, yaxşı, amma biz bu məntiq davam etmək istəyirsinizsə, 149 00:08:04,000 --> 00:08:08,000 siz eyni sizin sol ayaqla zərbə bu problem istəyirəm ki, fərz edək, 150 00:08:08,000 --> 00:08:11,000 belə deyil, cavab çox birbaşa irəli getmək və yalnız buck keçir. 151 00:08:11,000 --> 00:08:14,000 Oh, mənim sol neçə nəfər var? 152 00:08:14,000 --> 00:08:16,000 Sol neçə nəfər var? 153 00:08:16,000 --> 00:08:18,000 1. 154 00:08:18,000 --> 00:08:27,000 [Gülüş] 155 00:08:27,000 --> 00:08:30,000 OK, belə ki, 0, belə nə indi Willy görmüşdür 156 00:08:30,000 --> 00:08:33,000 Siz cavab 0 deyərək bu istiqamətdə geri etdik edir. 157 00:08:33,000 --> 00:08:36,000 İndi nə etməliyəm? >> 1. 158 00:08:36,000 --> 00:08:39,000 OK, belə ki, 1-istəyirik, belə demək, "Bütün sağ, 1 əlavə gedirəm 159 00:08:39,000 --> 00:08:41,000 hər hansı Willy-nin sayı idi "belə 1 + 0. 160 00:08:41,000 --> 00:08:43,000 Sağ cavab belə İndi 1 etdiyiniz indi- 161 00:08:43,000 --> 00:08:45,000 1. >> Və mina 2 olardı. 162 00:08:45,000 --> 00:08:48,000 , Belə ki, 1 Əvvəlki cavab Yaxşı qəbul edirik 163 00:08:48,000 --> 00:08:51,000 Siz istədiyiniz iş minimal məbləği əlavə edən +1 edir. 164 00:08:51,000 --> 00:08:55,000 İndi 2, və sonra mənə olan dəyər əl? 165 00:08:55,000 --> 00:08:57,000 3, I, sorry, 2 deməkdir. 166 00:08:57,000 --> 00:08:59,000 Yaxşı. 167 00:08:59,000 --> 00:09:02,000 >> Yaxşı, biz sola 0 idi. 168 00:09:02,000 --> 00:09:05,000 , Sonra biz 1 idi, və sonra 2 əlavə 169 00:09:05,000 --> 00:09:07,000 və indi, mənə sayı 2 təhvil edirik 170 00:09:07,000 --> 00:09:10,000 və mən, 3 +1, tamam dedi alıram. 171 00:09:10,000 --> 00:09:13,000 Bu mərhələdə məni yanında daimi 3 nəfər, həqiqətən var 172 00:09:13,000 --> 00:09:16,000 biz əlbəttə ki, çox xətti bu edə bilərdi 173 00:09:16,000 --> 00:09:19,000 aşkar moda çox, lakin biz həqiqətən nə idi? 174 00:09:19,000 --> 00:09:21,000 Biz ilkin ölçüsü 3 problem etmişdir. 175 00:09:21,000 --> 00:09:24,000 Biz sonra, ölçüsü 2 problem onu ​​yıxdı 176 00:09:24,000 --> 00:09:27,000 sonra ölçüsü 1 problemi, sonra əsas işi nəhayət 177 00:09:27,000 --> 00:09:29,000 həqiqətən, oh, heç bir var 178 00:09:29,000 --> 00:09:33,000 olan nöqtə Willy, ağır kodlu cavab bir neçə dəfə səmərəli geri 179 00:09:33,000 --> 00:09:36,000 və ikinci, sonra qədər bubbled qədər bubbled qədər bubbled edilib 180 00:09:36,000 --> 00:09:39,000 və sonra bu əlavə 1-ci əlavə 181 00:09:39,000 --> 00:09:41,000 biz recursion bu əsas ideya həyata etdik. 182 00:09:41,000 --> 00:09:44,000 >> İndi, bu halda bu, həqiqətən bir problemi həll etməyib 183 00:09:44,000 --> 00:09:46,000 daha səmərəli sonra biz belə uzaq gördüm. 184 00:09:46,000 --> 00:09:48,000 Amma bu günə qədər səhnəyə etdik alqoritmlər haqqında düşünürəm. 185 00:09:48,000 --> 00:09:51,000 Biz, Kara Tahta barədə kağız 8 ədəd olmuşdur 186 00:09:51,000 --> 00:09:55,000 video Sean sayı 7 axtarır və o, həqiqətən nə zaman? 187 00:09:55,000 --> 00:09:58,000 Yaxşı, o bölgü hər cür etmək və fəth etməmişdir. 188 00:09:58,000 --> 00:10:01,000 O recursion hər cür etmədi. 189 00:10:01,000 --> 00:10:03,000 Əksinə o, yalnız bu xətti alqoritm etdi. 190 00:10:03,000 --> 00:10:07,000 Amma biz səhnədə sıralanır nömrələri fikir təqdim ötən həftə yaşamaq 191 00:10:07,000 --> 00:10:09,000 sonra, orta gedərək bu instinkt var 192 00:10:09,000 --> 00:10:13,000 hansı nöqtədə, ölçüsü 4 və ya ölçüsü 4 bir siyahısını kiçik bir siyahısı var idi 193 00:10:13,000 --> 00:10:17,000 və sonra eyni problem var idi, belə ki, biz təkrar, təkrar, təkrar. 194 00:10:17,000 --> 00:10:19,000 Başqa sözlə, biz recursed. 195 00:10:19,000 --> 00:10:24,000 Bizimlə recursion nümayiş etdirmək üçün burada 3 könüllülər üçün çox təşəkkür edirik. 196 00:10:24,000 --> 00:10:28,000 >> İndi bir az daha konkret bu edə bilməz əgər Bakalým, 197 00:10:28,000 --> 00:10:30,000 yenə biz olduqca asan nə ola bilər ki, problem həlli, 198 00:10:30,000 --> 00:10:34,000 amma bu əsas ideya həyata bir gücləndirməklə daş kimi istifadə edəcəyik. 199 00:10:34,000 --> 00:10:37,000 Mən ədəd bir dəstə olan toplama hesablamaq istəyirsinizsə 200 00:10:37,000 --> 00:10:39,000 Məsələn, siz sayı 3 keçmək əgər, 201 00:10:39,000 --> 00:10:42,000 Mən sizə sigma 3 dəyəri vermək istəyirəm 202 00:10:42,000 --> 00:10:46,000 belə 3 məbləğində + 2 + 1 + 0. 203 00:10:46,000 --> 00:10:48,000 Mən cavab 6 geri almaq istəyirəm 204 00:10:48,000 --> 00:10:51,000 biz bu sigma funksiyası, bu toplama funksiyası həyata olacaq 205 00:10:51,000 --> 00:10:54,000 ki, yenidən daxil edir, və sonra toplama qaytarır 206 00:10:54,000 --> 00:10:57,000 aşağı 0 ki sayı bütün yolu. 207 00:10:57,000 --> 00:10:59,000 Biz, olduqca sadəcə bunu edə bilər? 208 00:10:59,000 --> 00:11:01,000 Biz, loop strukturu bir növ bunu edə bilər 209 00:11:01,000 --> 00:11:04,000 Mənə davam və bu başlamaq bildirin. 210 00:11:04,000 --> 00:11:07,000 >> Stdio.h daxildir. 211 00:11:07,000 --> 00:11:09,000 Burada işləmək üçün mənə əsas daxil özüm almaq edək. 212 00:11:09,000 --> 00:11:12,000 Gəlin sigma.c kimi bu edin. 213 00:11:12,000 --> 00:11:14,000 Sonra burada getmək gedirəm, və mən, bir int n bəyan gedirəm 214 00:11:14,000 --> 00:11:18,000 və mən istifadəçi əməkdaşlıq etmir aşağıdakı gedirəm. 215 00:11:18,000 --> 00:11:22,000 Istifadəçi mənə müsbət sayı verilmir baxmayaraq 216 00:11:22,000 --> 00:11:26,000 Mənə davam və n = GetInt üçün onlara təklif edək, 217 00:11:26,000 --> 00:11:28,000 və mənə nə kimi bir təlimat verək 218 00:11:28,000 --> 00:11:33,000 belə printf ("Müsbət tam edin"). 219 00:11:33,000 --> 00:11:39,000 Vaxt biz line 14 hit ki, bu kimi nisbətən sadə yalnız bir şey 220 00:11:39,000 --> 00:11:42,000 indi n ehtimalla bir müsbət tam var. 221 00:11:42,000 --> 00:11:44,000 >> İndi ilə bir şey edək. 222 00:11:44,000 --> 00:11:50,000 Mənə irəli getmək və toplama hesablamaq edək, belə int məbləğ = sigma (n). 223 00:11:50,000 --> 00:11:54,000 Sigma yalnız toplama edir, belə ki, mən yalnız meraklısı şəkildə yazılı edirəm. 224 00:11:54,000 --> 00:11:56,000 Biz yalnız orada sigma zəng edəcəyik. 225 00:11:56,000 --> 00:11:58,000 Bu məbləğ, və indi, nəticə çap gedirəm 226 00:11:58,000 --> 00:12:08,000 printf (məbləğ "edib d, \ n%-dir"). 227 00:12:08,000 --> 00:12:11,000 Və sonra mən yaxşı tədbir üçün 0 qayıtmaq lazımdır. 228 00:12:11,000 --> 00:12:15,000 Biz maraqlı hissəsi istisna olmaqla, bu proqram tələb edir ki, hər şey etdik 229 00:12:15,000 --> 00:12:18,000 hansı faktiki sigma funksiyasını həyata keçirilməsidir. 230 00:12:18,000 --> 00:12:22,000 >> Mənə alt burada enmək və mənə funksiyası sigma bəyan qoy edək. 231 00:12:22,000 --> 00:12:26,000 Bu tipli tam var ki, dəyişən etmək var 232 00:12:26,000 --> 00:12:30,000 və nə data type mən sigma dən ehtimalla qayıtmaq istəyirsiniz? 233 00:12:30,000 --> 00:12:34,000 Int, mən line 15-də mənim gözləntiləri uyğun istəyirəm, çünki. 234 00:12:34,000 --> 00:12:37,000 Burada məni irəli getmək və bu həyata bildirin 235 00:12:37,000 --> 00:12:41,000 olduqca sadə şəkildə. 236 00:12:41,000 --> 00:12:45,000 >> Nin davam və int məbləğ = 0 deyək, 237 00:12:45,000 --> 00:12:47,000 və indi burada loop üçün bir az getmək gedirəm 238 00:12:47,000 --> 00:12:50,000 ki, bu kimi bir şey demək olacaq 239 00:12:50,000 --> 00:13:01,000 edib + = i (; I <= nömrə i + + int i = 0). 240 00:13:01,000 --> 00:13:05,000 Və sonra məbləği geri gedirəm. 241 00:13:05,000 --> 00:13:07,000 Mən yolları istənilən sayda bu həyata bilər. 242 00:13:07,000 --> 00:13:09,000 Mən isə loop istifadə edə bilər. 243 00:13:09,000 --> 00:13:11,000 Mən həqiqətən istəyirdi əgər məbləğ dəyişən istifadə atlanır ola bilər 244 00:13:11,000 --> 00:13:15,000 lakin qısa, biz yalnız mən əgər axmaq məbləğ 0 olduğunu bəyan edir ki, bir funksiyası var. 245 00:13:15,000 --> 00:13:18,000 Sonra, sayı ilə qədər 0-dan iterates 246 00:13:18,000 --> 00:13:23,000 və hər iteration bu məbləği cari dəyər verir və sonra məbləğ qaytarılır. 247 00:13:23,000 --> 00:13:25,000 >> İndi burada bir qədər optimallaşdırma var. 248 00:13:25,000 --> 00:13:29,000 Bu yəqin ki, bir boşa addımdır, amma belə olmalıdır. Indi üçün gözəl edir. 249 00:13:29,000 --> 00:13:32,000 Biz ən azı istəyirik, hərtərəfli olan və üzərində 0 bütün yol gedir. 250 00:13:32,000 --> 00:13:34,000 Çox çətin və olduqca sadə deyil, 251 00:13:34,000 --> 00:13:37,000 ancaq sigma funksiyası ilə eyni imkanı çıxır ki, 252 00:13:37,000 --> 00:13:39,000 biz mərhələdə burada olduğu kimi. 253 00:13:39,000 --> 00:13:42,000 Mərhələdə biz yalnız, mənə gələn nə çox insanlar sayılır 254 00:13:42,000 --> 00:13:47,000 əvəzində biz sayı 3 + 2 + 1 saymaq istəyirdi 255 00:13:47,000 --> 00:13:51,000 aşağı 0 biz bir funksiyası eyni ayaqla zərbə ola bilər 256 00:13:51,000 --> 00:13:55,000 Mən əvəzinə recursive kimi təsvir lazımdır ki,. 257 00:13:55,000 --> 00:13:57,000 Burada tez ağlı başında olma kontrol və mən axmaq etmədi əmin edə bilərəm bildirin. 258 00:13:57,000 --> 00:14:00,000 >> Mən zülm etdi ki, bu proqram ən azı bir şey var bilirəm. 259 00:14:00,000 --> 00:14:04,000 Mən daxil hit zaman mənə böyle hər cür almaq üçün gedirəm? 260 00:14:04,000 --> 00:14:06,000 Mən də yelled üçün nə edəcəyəm? 261 00:14:06,000 --> 00:14:11,000 Bəli, mən prototip unuttum, mən line 15 sigma adlı funksiyasından istifadə edirəm belə 262 00:14:11,000 --> 00:14:16,000 lakin bu xətt 22-dək elan, mən yaxşı fəal burada getmək deyil 263 00:14:16,000 --> 00:14:22,000 və bir prototip elan və mən int sigma (int sayı) demək lazımdır ki, bu. 264 00:14:22,000 --> 00:14:24,000 Bu alt həyata var. 265 00:14:24,000 --> 00:14:27,000 >> Və ya bu həll edə bilər başqa bir yol, 266 00:14:27,000 --> 00:14:30,000 Mən hansı pis deyil, var funksiyası hərəkət edə 267 00:14:30,000 --> 00:14:32,000 lakin ən azı sizin proqramları, açıq, Uzunmüddətli almaq üçün başlattığınızda 268 00:14:32,000 --> 00:14:35,000 Mən həmişə üst əsas olan bəzi dəyəri var hesab 269 00:14:35,000 --> 00:14:38,000 Siz oxucu ilə fayl açmaq və sonra dərhal görə bilərsiniz ki, 270 00:14:38,000 --> 00:14:40,000 Proqram vasitəsilə axtarış olmadan nə 271 00:14:40,000 --> 00:14:42,000 əsas funksiyası axtarır. 272 00:14:42,000 --> 00:14:49,000 Nin burada terminal pəncərə aşağı gedək, sigma sigma etmək edilməsi cəhd 273 00:14:49,000 --> 00:14:51,000 və mən də burada berbat. 274 00:14:51,000 --> 00:14:55,000 Funksiyası GetInt və Örtük bəyannamə nə başqa nə unuttuysanız deməkdir? 275 00:14:55,000 --> 00:14:57,000 [Işitilemez-tələbə] 276 00:14:57,000 --> 00:15:00,000 Yaxşı, belə görünür bir ümumi səhv, belə isə burada bu qədər qoymaq bildirin 277 00:15:00,000 --> 00:15:04,000 cs50.h, indi beni terminal pəncərə geri imkan verir. 278 00:15:04,000 --> 00:15:08,000 >> Mən ekran təmizləmək lazımdır və mən sigma etmək təkrar olacaq. 279 00:15:08,000 --> 00:15:11,000 Bu tərtib görünür. Mənə indi sigma run edək. 280 00:15:11,000 --> 00:15:15,000 Mən sayı 3 yazın lazımdır, mən 6 almaq idi, belə bir ciddi çek 281 00:15:15,000 --> 00:15:18,000 lakin ən azı, ilk baxışdan iş görünür, indi edək ki, bu ayrı rip 282 00:15:18,000 --> 00:15:21,000 və Gəlin həqiqətən, təkrar recursion ideyası Leverage 283 00:15:21,000 --> 00:15:24,000 çox sadə kontekstində ki, bir neçə həftə vaxt 284 00:15:24,000 --> 00:15:27,000 biz seriallarda çox meraklı data strukturlarının kəşfiyyatı başlattığınızda 285 00:15:27,000 --> 00:15:30,000 biz hansı ilə Toolbar bir alət 286 00:15:30,000 --> 00:15:33,000 biz görəcəksiniz həmin data strukturları manipulyasiya. 287 00:15:33,000 --> 00:15:36,000 Bu iterativ yanaşma, loop-based yanaşma. 288 00:15:36,000 --> 00:15:39,000 >> Indi bunu əvəzinə mənə edək. 289 00:15:39,000 --> 00:15:44,000 Əvəzinə demək mənə edək ki sayı toplama 290 00:15:44,000 --> 00:15:48,000 həqiqətən eyni şey 0 aşağı deyil 291 00:15:48,000 --> 00:15:53,000 sayı + sigma (sayı - 1). 292 00:15:53,000 --> 00:15:57,000 Başqa sözlə, yalnız səhnədə kimi mən, mənə gələn insanlar hər punted 293 00:15:57,000 --> 00:16:00,000 və onlar öz növbəsində, biz nəhayət Willy həyata bottomed qədər punting saxlanılır 294 00:16:00,000 --> 00:16:03,000 kim 0 kimi ağır kodlu cavab qaytarmaq idi. 295 00:16:03,000 --> 00:16:07,000 Burada indi biz eyni sigma üçün punting edirik 296 00:16:07,000 --> 00:16:10,000 eyni funksiyası ilk adlanır, ancaq əsas fikir burada edilib 297 00:16:10,000 --> 00:16:12,000 biz eyni sigma zəng deyilik ki. 298 00:16:12,000 --> 00:16:14,000 Biz n keçən deyilik. 299 00:16:14,000 --> 00:16:17,000 Biz aydın sayı keçən edirik - 1, 300 00:16:17,000 --> 00:16:20,000 bir az kiçik problem bir qədər kiçik problem. 301 00:16:20,000 --> 00:16:23,000 >> Təəssüf ki, bu hələ kifayət qədər həll deyil və biz düzeltmek əvvəl 302 00:16:23,000 --> 00:16:26,000 Əgər bəzi Aşkar kimi nə jumping bilər 303 00:16:26,000 --> 00:16:28,000 Mənə davam etmək və təkrar edək. 304 00:16:28,000 --> 00:16:30,000 Tamam tərtib görünür. 305 00:16:30,000 --> 00:16:32,000 Mənə 6 sigma təkrar edək. 306 00:16:32,000 --> 00:16:37,000 Whoops, mənə 6 sigma təkrar edək. 307 00:16:37,000 --> 00:16:42,000 Biz təsadüfən son dəfə də olsa, əvvəl bu gördük. 308 00:16:42,000 --> 00:16:48,000 Niyə bu sirli seqmentasiya günah əldə etdiniz? Bəli. 309 00:16:48,000 --> 00:16:50,000 [Işitilemez-tələbə] 310 00:16:50,000 --> 00:16:53,000 Xüsusilə yoxdur baza halda, ve, nə yəqin oldu? 311 00:16:53,000 --> 00:16:58,000 Bu nə davranış simptom var? 312 00:16:58,000 --> 00:17:00,000 Bir az Qaraçuxurlu deyirəm. 313 00:17:00,000 --> 00:17:02,000 [Işitilemez-tələbə] 314 00:17:02,000 --> 00:17:05,000 Bu səmərəli sonsuz loop və sonsuz loops ilə problem 315 00:17:05,000 --> 00:17:08,000 onlar bu halda recursion cəlb zaman, bir funksiyası, özü zəng 316 00:17:08,000 --> 00:17:10,000 nə bir funksiyası zəng hər zaman olur? 317 00:17:10,000 --> 00:17:13,000 Bəli, biz bir kompüter yaddaş müəyyən necə geri edirəm. 318 00:17:13,000 --> 00:17:16,000 Biz altındakı ki yığını adlı yaddaş bu yığın olduğunu bildirib 319 00:17:16,000 --> 00:17:19,000 və bir az daha çox yaddaş funksiyası zəng hər zaman qoymaq olur 320 00:17:19,000 --> 00:17:24,000 ki funksiyası yerli dəyişənlərin və ya parametrləri olan bu qondarma yığını haqqında 321 00:17:24,000 --> 00:17:27,000 sigma sigma zənglər çağırır əgər sigma sigma çağırır 322 00:17:27,000 --> 00:17:29,000  sigma çağırır bu hekayə sonunda edir? 323 00:17:29,000 --> 00:17:31,000 >> Yaxşı, bu son nəticədə taşmaları ümumi məbləği 324 00:17:31,000 --> 00:17:33,000 bilgisayarınıza var ki, yaddaş. 325 00:17:33,000 --> 00:17:37,000 Siz ərzində qalmaq ehtimal etdiyiniz segment, dağıtmaq 326 00:17:37,000 --> 00:17:40,000 və bu seqmentasiya günah olsun, əsas, tullanır 327 00:17:40,000 --> 00:17:43,000 və taþý nə əsas deməkdir İndi əsas adlı bir fayl var ki 328 00:17:43,000 --> 00:17:46,000 olan adet sıfır və olanları olan fayl 329 00:17:46,000 --> 00:17:49,000 əslində gələcəkdə diagnostically faydalı olacaq. 330 00:17:49,000 --> 00:17:52,000 Sizin səhv olduğu sizə aydın deyilsə 331 00:17:52,000 --> 00:17:54,000 həqiqətən, belə ki, danışmaq, məhkəmə təhlil bir az edə bilərsiniz 332 00:17:54,000 --> 00:17:58,000 bu core dump fayl, o, yenə yalnız adet sıfır və olanları bir bütün dəstə edir 333 00:17:58,000 --> 00:18:02,000 ki, mahiyyətcə yaddaş üçün proqram dövlət təmsil 334 00:18:02,000 --> 00:18:05,000 Hazırda bu şəkildə qəzaya uğrayıb. 335 00:18:05,000 --> 00:18:11,000 >> Burada fix biz yalnız kor-koranə, sigma geri bilər 336 00:18:11,000 --> 00:18:14,000 sayı + bir az kiçik problem sigma. 337 00:18:14,000 --> 00:18:16,000 Biz burada əsas işi bir növ lazımdır 338 00:18:16,000 --> 00:18:19,000 və baza halda yəqin ki, nə olmalıdır? 339 00:18:19,000 --> 00:18:22,000 [Işitilemez-tələbə] 340 00:18:22,000 --> 00:18:25,000 OK, belə uzun sayı müsbət kimi biz, həqiqətən, bu qayıtmalıdırlar 341 00:18:25,000 --> 00:18:29,000 və ya başqa sözlə, sayı, əgər ki, <= 0 342 00:18:29,000 --> 00:18:32,000 siz, mən irəli getmək və 0 qayıtmaq lazımdır nə bilirik 343 00:18:32,000 --> 00:18:36,000 Willy idi çox kimi, başqa, mən davam gedirəm 344 00:18:36,000 --> 00:18:41,000 və bu geri, belə ki, çox qısa deyil 345 00:18:41,000 --> 00:18:44,000 biz ilk loop üçün istifadə edərək, çırpılmış ki iterativ versiyası daha 346 00:18:44,000 --> 00:18:48,000 lakin bu zəriflik bu cür olduğunu görürük. 347 00:18:48,000 --> 00:18:51,000 Bunun əvəzinə bir sıra qaytarılması və bütün bu riyaziyyat həyata 348 00:18:51,000 --> 00:18:54,000 və yerli dəyişənlərin şeyi əlavə 349 00:18:54,000 --> 00:18:57,000 yerine deyərək edirik "OK, bu super asan problem varsa, 350 00:18:57,000 --> 00:19:01,000 sayı <0 kimi, mənə dərhal 0 qayıtmaq bildirin. " 351 00:19:01,000 --> 00:19:03,000 >> Biz dəstək mənfi nömrələri narahat fikrində deyilik 352 00:19:03,000 --> 00:19:05,000 Mən ağır kodu 0 dəyəri gedirəm. 353 00:19:05,000 --> 00:19:08,000 Amma başqa cəmlənməsi bu ideya həyata 354 00:19:08,000 --> 00:19:11,000 Bu rəqəmlərin bütün birlikdə səmərəli kiçik bir bite bilər 355 00:19:11,000 --> 00:19:14,000 Problemin həyata, çox kimi ki, səhnədə burada etdi 356 00:19:14,000 --> 00:19:18,000 sonra ayaqla zərbə növbəti şəxsə problem qalan, 357 00:19:18,000 --> 00:19:20,000 bu halda növbəti şəxs özünüzü edir. 358 00:19:20,000 --> 00:19:22,000 Bu eyni adlı funksiyası var. 359 00:19:22,000 --> 00:19:25,000 Sadəcə, bir kiçik və daha kiçik və daha kiçik problem hər zaman keçmək 360 00:19:25,000 --> 00:19:28,000 və biz burada kodu tamamilə rəsmiləşdirilmiş şeylər olsa da 361 00:19:28,000 --> 00:19:33,000 Bu telefon kitab həftə 0 gedən edilib məhz budur. 362 00:19:33,000 --> 00:19:36,000 Bu Sean ilə ötən həftə də davam dəqiq nə 363 00:19:36,000 --> 00:19:39,000 və nömrələr axtarmaq bizim nümayişlərlə. 364 00:19:39,000 --> 00:19:42,000 Bu problem qəbul və təkrar bu ayırıcı edir. 365 00:19:42,000 --> 00:19:44,000 >> Başqa sözlə, tərcümə indi bir yolu yoxdur 366 00:19:44,000 --> 00:19:47,000 bu real dünyada tikinti, bu yüksək səviyyədə tikinti 367 00:19:47,000 --> 00:19:51,000 bölmək və fəth və təkrar bir şey edir 368 00:19:51,000 --> 00:19:56,000 kodu, bu zaman artıq yenidən görəcəksiniz bir şeydir. 369 00:19:56,000 --> 00:20:00,000 Siz recursion yeni əgər İndi, bir kənara kimi, ən azı indi dərk etməlidir 370 00:20:00,000 --> 00:20:02,000 niyə bu gülməli deyil. 371 00:20:02,000 --> 00:20:05,000 Mən, google.com getmək üçün gedirəm 372 00:20:05,000 --> 00:20:17,000 və mən recursion bəzi Məsləhətləri və fəndləri üçün axtarış gedirəm, daxil edin. 373 00:20:17,000 --> 00:20:21,000 Onlar yalnız indi laughing idi əgər yanındakı adam deyin. 374 00:20:21,000 --> 00:20:23,000 Siz recursion mean? 375 00:20:23,000 --> 00:20:25,000 Siz mi demək-ah, orada getmək. 376 00:20:25,000 --> 00:20:28,000 OK, indi ki, hər kəsin istirahət edir. 377 00:20:28,000 --> 00:20:30,000 Bir az Pasxa yumurta Google haradasa orada əlaqədar. 378 00:20:30,000 --> 00:20:33,000 Bir kənara, biz əlbəttə saytında çıxarılan links biri kimi 379 00:20:33,000 --> 00:20:36,000 bu gün müxtəlif çeşidlənməsi alqoritmlərin bu grid edir 380 00:20:36,000 --> 00:20:39,000 Keçən həftə baxdı, lakin nə bu vizual haqqında gözəl olan bəzi 381 00:20:39,000 --> 00:20:43,000 siz alqoritmləri ilə bağlı müxtəlif şeyi ətrafında sizin fikrinizi kesmek üçün cəhd kimi 382 00:20:43,000 --> 00:20:46,000 siz çox asanlıqla artıq vəsait müxtəlif növləri ilə başlaya bilərsiniz ki, bilirik. 383 00:20:46,000 --> 00:20:50,000 Bu giriş bütün giriş təsadüfi və s, bu vəsait əsasən çeşidlənir, bərpa. 384 00:20:50,000 --> 00:20:53,000 Siz yenə cəhd kimi, fikrinizi bu şeylər ayırmaq 385 00:20:53,000 --> 00:20:57,000 həyata ki mühazirələr səhifə kurs saytında bu URL 386 00:20:57,000 --> 00:21:00,000 o bəzi vasitəsilə səbəb kömək edə bilər. 387 00:21:00,000 --> 00:21:05,000 >> Bu gün biz, nəhayət, geri isə bu problemi həll etmək 388 00:21:05,000 --> 00:21:08,000 ki, bu mübadilə funksiyası yalnız iş deyil idi ki, 389 00:21:08,000 --> 00:21:12,000 və bu funksiya mübadilə ilə əsas problem nə idi 390 00:21:12,000 --> 00:21:15,000 burada və burada bir dəyər mübadiləsi, təkrar idi məqsədi olan 391 00:21:15,000 --> 00:21:17,000 bu olur ki, belə? 392 00:21:17,000 --> 00:21:20,000 Bu, həqiqətən iş yox idi. Niyə? 393 00:21:20,000 --> 00:21:22,000 Bəli. 394 00:21:22,000 --> 00:21:28,000 [Işitilemez-tələbə] 395 00:21:28,000 --> 00:21:31,000 Bu bugginess üçün tam izahat 396 00:21:31,000 --> 00:21:34,000 C funksiyaları zəng çünki sadəcə oldu 397 00:21:34,000 --> 00:21:38,000 və bu funksiyaları, bir və b burada kimi, mübahisə etmək 398 00:21:38,000 --> 00:21:42,000 siz ki, fəaliyyət təmin etdiyiniz nə dəyəri nüsxədə keçir. 399 00:21:42,000 --> 00:21:46,000 Siz orijinal dəyərləri özləri təmin olunmur 400 00:21:46,000 --> 00:21:49,000 biz, buggyc kontekstində bu gördüm 401 00:21:49,000 --> 00:21:52,000 bu kimi bir az bir şey baxdı olan buggy3.c. 402 00:21:52,000 --> 00:21:57,000 >> Biz x və y müvafiq olaraq, 1 və 2-başlatılmış ki Xatırladaq. 403 00:21:57,000 --> 00:21:59,000 Biz onlar nə çap. 404 00:21:59,000 --> 00:22:03,000 Mən o mən x, y svop çağıraraq onlara dəyişdirmə iddia edirdi. 405 00:22:03,000 --> 00:22:06,000 Ancaq problem dəyişdirmə çalışmışdır ki, 406 00:22:06,000 --> 00:22:10,000 yalnız mübadilə çərçivəsində özünü göstərir. 407 00:22:10,000 --> 00:22:13,000 Biz line 40 o değiştirilecek dəyərlər hit kimi 408 00:22:13,000 --> 00:22:16,000 atılmalı idi, və heç bir şey 409 00:22:16,000 --> 00:22:21,000 orijinal funksiyası əsas həqiqətən, bütün dəyişdi 410 00:22:21,000 --> 00:22:26,000 Bu bizim yaddaş baxımından kimi görünür nə kimi sonra geri edirəm əgər 411 00:22:26,000 --> 00:22:29,000 heyəti bu sol tərəfi təmsil-if 412 00:22:29,000 --> 00:22:33,000 və mən görmək hər kəs üçün əlimdən gələni edəcəyik bu-əgər heyəti bu sol tərəfində 413 00:22:33,000 --> 00:22:37,000 təmsil, sizin RAM demək və yığını, bu yolu üzərində inkişaf edir 414 00:22:37,000 --> 00:22:43,000 və biz əsas kimi bir funksiyası zəng və əsas 2 yerli dəyişənlər, x və y var 415 00:22:43,000 --> 00:22:48,000 nin burada x həmin təsvir edək və Gəlin burada y kimi təsvir 416 00:22:48,000 --> 00:22:55,000 və ən dəyərlər 1 və 2 qoymaq edək, burada əsas odur 417 00:22:55,000 --> 00:22:58,000 və əsas mübadilə funksiyası əməliyyat sistemi zənglər zaman 418 00:22:58,000 --> 00:23:02,000 , yığını üzrə svop funksiyası yaddaş öz Tarama verir 419 00:23:02,000 --> 00:23:04,000 yığını öz çərçivəsində, belə danışmaq. 420 00:23:04,000 --> 00:23:08,000 O, həmçinin bu ints üçün 32 bit ayırır. 421 00:23:08,000 --> 00:23:11,000 Onlara bir və b zəng etmək olur, lakin tamamilə əsassız deyil. 422 00:23:11,000 --> 00:23:13,000 Bu istəyir nə onlara deyilən ola bilər, lakin əsas nə olur 423 00:23:13,000 --> 00:23:19,000 zənglər svop, bu 1 alır bir surəti qoyur, bir surəti qoyur edir. 424 00:23:19,000 --> 00:23:23,000 >> Svop 1 digər yerli dəyişən var, baxmayaraq ki, nə deyilir? >> Tmp. 425 00:23:23,000 --> 00:23:27,000 Tmp, belə ki, mənim özüm burada başqa 32 bit verək 426 00:23:27,000 --> 00:23:29,000 və bu funksiyası nə idi? 427 00:23:29,000 --> 00:23:34,000 Mən int tmp a, bir 1 var alır bildirib, belə ki, biz keçən bu misal ilə oynadığı zaman bu idi. 428 00:23:34,000 --> 00:23:39,000 Sonra b olur, belə ki, b 2, belə ki, indi bu 2 olur, 429 00:23:39,000 --> 00:23:42,000 və indi, b temp olur, belə ki, temp 1 430 00:23:42,000 --> 00:23:44,000 İndi b bu olur. 431 00:23:44,000 --> 00:23:46,000 Bu harika. Bu çalışmışdır. 432 00:23:46,000 --> 00:23:49,000 Amma sonra tezliklə funksiyası yekunları kimi 433 00:23:49,000 --> 00:23:52,000 svop xatirəsinə səmərəli təkrar istifadə edilə bilər ki, yox 434 00:23:52,000 --> 00:23:58,000 gələcəkdə bir sıra digər fəaliyyət və əsas açıq-aydın tamamilə dəyişməzdir. 435 00:23:58,000 --> 00:24:00,000 Biz əsaslı bu problem həll yolu lazımdır 436 00:24:00,000 --> 00:24:03,000 və bu gün biz nəhayət elə bunu bir yol olacaq 437 00:24:03,000 --> 00:24:06,000 biz bir pointer deyilən bir şey təqdim edə bilər. 438 00:24:06,000 --> 00:24:09,000 Biz bu problemi həll edə bilər çıxır ki, 439 00:24:09,000 --> 00:24:12,000 x və y surətləri keçən deyil 440 00:24:12,000 --> 00:24:18,000 əvəzində nə keçən edərək, mübadilə funksiyası, düşünürsünüz? 441 00:24:18,000 --> 00:24:20,000 Bəli, ünvanı haqqında nə? 442 00:24:20,000 --> 00:24:22,000 Biz, həqiqətən, çox ətraflı URL danışdı deyil 443 00:24:22,000 --> 00:24:25,000 amma bu yazı taxtası mənim kompüter yaddaş təmsil əgər 444 00:24:25,000 --> 00:24:28,000 əlbəttə mənim RAM ildə bytes sayı başlaya 445 00:24:28,000 --> 00:24:31,000 və bu byte # 1 deyə, bu byte # 3, # 2 byte edir 446 00:24:31,000 --> 00:24:35,000 byte # 4, byte # ... 2 milyard mən RAM 2 gigabaytlık varsa, 447 00:24:35,000 --> 00:24:38,000 biz əlbəttə bəzi ixtiyari nömrələmə sxemi ilə gəlmək bilər 448 00:24:38,000 --> 00:24:41,000 mənim kompüter yaddaş bütün fərdi bytes üçün. 449 00:24:41,000 --> 00:24:43,000 >> Mən svop nə əgər əvəzinə zəng zaman 450 00:24:43,000 --> 00:24:47,000 x və y nüsxədə çox keçid 451 00:24:47,000 --> 00:24:51,000 niyə əvəzinə, burada x ünvanı keçmək yoxdur 452 00:24:51,000 --> 00:24:55,000 burada y ünvanı, mahiyyətcə poçt ünvanı 453 00:24:55,000 --> 00:24:59,000 o məlumat Əgər x və y çünki, sonra dəyişdirmək 454 00:24:59,000 --> 00:25:01,000 x və y yaddaşında ünvanı, 455 00:25:01,000 --> 00:25:04,000 Biz onu bir az təlim əgər, dəyişdirmək 456 00:25:04,000 --> 00:25:07,000 o potensial, belə ki, danışmaq,, bu URL idarə edə bilər 457 00:25:07,000 --> 00:25:11,000 x, və sayı dəyişdirmək, sonra y ünvan üçün sürücü 458 00:25:11,000 --> 00:25:16,000 həqiqətən o dəyərləri özü surətlərini əldə deyil baxmayaraq, orada sayı dəyişdirmək, 459 00:25:16,000 --> 00:25:19,000 biz əsas yaddaşında olan kimi bu barədə söhbət belə olsa 460 00:25:19,000 --> 00:25:23,000 və bu kimi olan svop xatirəsinə güclü və C təhlükəli hissəsi 461 00:25:23,000 --> 00:25:28,000 heç bir funksiyası, yerdə kompüter yaddaş toxunmaq bilər 462 00:25:28,000 --> 00:25:32,000 və bu C. kompüter proqramları ilə çox xülya şeyi edə bilər ki, güclü 463 00:25:32,000 --> 00:25:36,000 Siz də çox asanlıqla qıymaq bilər, çünki bu təhlükəli deyil. 464 00:25:36,000 --> 00:25:39,000 Əslində, proqramları üçün ən ümumi yolları bu gün bir istismar etmək 465 00:25:39,000 --> 00:25:42,000 bir proqramçı həyata üçün hələ də 466 00:25:42,000 --> 00:25:45,000 o bir data icazə verir ki, 467 00:25:45,000 --> 00:25:49,000 nəzərdə deyil ki xatirəsinə yeri yazılır. 468 00:25:49,000 --> 00:25:51,000 >> Məsələn, o, ölçüsü 10 bir sıra bəyan 469 00:25:51,000 --> 00:25:56,000 lakin sonra təsadüfən, yaddaşlı ki massivinə 11 bytes qoymaq çalışır 470 00:25:56,000 --> 00:25:59,000 və artıq qüvvədə olduğu yaddaş hissələri toxunan başlamaq. 471 00:25:59,000 --> 00:26:02,000 Just içeriksel bu, siz bəzi bilirik bilər ki, 472 00:26:02,000 --> 00:26:06,000 proqram tez-tez, serial nömrələri və ya qeydiyyatdan düymələri üçün siz tələb 473 00:26:06,000 --> 00:26:08,000 Photoshop və Word və bu kimi proqramları. 474 00:26:08,000 --> 00:26:12,000 , Bir az proqramı çalıştırabilirsiniz online yerləşir, siz bəzi bildiyiniz kimi, çatlar mövcuddur 475 00:26:12,000 --> 00:26:14,000 və voiture bir serial sayı artıq sorğu. 476 00:26:14,000 --> 00:26:16,000 Necə işləyir? 477 00:26:16,000 --> 00:26:21,000 Bir çox hallarda bu işlər, sadəcə, kompüter tapmaq olunur 478 00:26:21,000 --> 00:26:24,000 kompüter faktiki adet sıfır və olanları mətn seqmentləri 479 00:26:24,000 --> 00:26:28,000 seriya nömrəsi tələb yerləşir ki, funksiyası, harada 480 00:26:28,000 --> 00:26:31,000 proqram çalışırken və bu yer üzerine, və ya 481 00:26:31,000 --> 00:26:33,000 əsas həqiqətən saxlanılır harada həyata rəqəm bilər 482 00:26:33,000 --> 00:26:37,000 bir şey istifadə ayıklama adlanır və proqram ki, yol çat edə bilərsiniz. 483 00:26:37,000 --> 00:26:40,000 Bu gün növbəti bir neçə bu bizim obyektiv olduğunu demək deyil 484 00:26:40,000 --> 00:26:42,000 lakin bu, çox real-dünya ramifications var. 485 00:26:42,000 --> 00:26:45,000 Bir, proqram oğurluq cəlb etmək olur ki, 486 00:26:45,000 --> 00:26:47,000 lakin bütün maşın kompromis də var. 487 00:26:47,000 --> 00:26:50,000 >> Əslində, zaman saytları bu gün istismar olunur 488 00:26:50,000 --> 00:26:53,000 və güzəşt və məlumat sızdırdığı və parol oğurlanmış olunur 489 00:26:53,000 --> 00:26:58,000 Bu tez-tez bir yaddaş zəif idarə aiddir, 490 00:26:58,000 --> 00:27:01,000 və ya, verilənlər bazası halda, uğursuzluq nəzərdə tutur 491 00:27:01,000 --> 00:27:03,000 gələcək həftə ki, belə daha çəkişmə giriş, 492 00:27:03,000 --> 00:27:07,000 indi üçün nə edə bilər ki, zərər növ yalnız bir sneak preview 493 00:27:07,000 --> 00:27:11,000 çox şeyi başlıq altında necə dərk deyil. 494 00:27:11,000 --> 00:27:14,000 Bu sınıq nə anlaşma haqqında gedək 495 00:27:14,000 --> 00:27:17,000 bir alət ilə daha çox faydalı olacaq 496 00:27:17,000 --> 00:27:19,000 proqramlar daha mürəkkəb almaq kimi. 497 00:27:19,000 --> 00:27:21,000 Siz proqram bir səhv etdik Beləliklə uzaq zaman 498 00:27:21,000 --> 00:27:23,000 necə bu hata haqqında getdi? 499 00:27:23,000 --> 00:27:25,000 Sizin texnika sizin TF tərəfindən tədris olub, belə qədər olmuşdur 500 00:27:25,000 --> 00:27:27,000 və ya yalnız özünü öyrətdi? 501 00:27:27,000 --> 00:27:29,000 [Tələbə] Printf. 502 00:27:29,000 --> 00:27:31,000 Siz görmək istəyirsinizsə Printf, belə printf yəqin ki, sizin dost olmuşdur 503 00:27:31,000 --> 00:27:33,000 Proqram daxilində neler 504 00:27:33,000 --> 00:27:36,000 yalnız printf burada printf burada printf burada qoydu. 505 00:27:36,000 --> 00:27:38,000 Sonra siz run, və ekranda heyəti bütün dəstə almaq 506 00:27:38,000 --> 00:27:43,000 Əgər həqiqətən proqram yanlış gedir nə anlamak üçün istifadə edə bilərsiniz. 507 00:27:43,000 --> 00:27:45,000 >> Printf, çox güclü şey olmağa çalışır 508 00:27:45,000 --> 00:27:47,000 lakin bir çox dərslik prosesi var. 509 00:27:47,000 --> 00:27:49,000 Siz printf burada, burada printf qoymaq üçün 510 00:27:49,000 --> 00:27:51,000 və bir loop daxilində qoymaq əgər 100 xətləri almaq bilər 511 00:27:51,000 --> 00:27:53,000 Əgər vasitəsilə elemek ki çıxdı. 512 00:27:53,000 --> 00:27:58,000 Bu hata proqramları üçün çox istifadəçi dostu və ya interaktiv mexanizm deyil 513 00:27:58,000 --> 00:28:00,000 lakin təşəkkürlə alternativlər mövcuddur. 514 00:28:00,000 --> 00:28:03,000 Gdb adlı məsələn bir proqramın, GNU Debugger var 515 00:28:03,000 --> 00:28:06,000 siz onu istifadə necə bir az gizli deyil. 516 00:28:06,000 --> 00:28:08,000 O, səmimi bir az mürəkkəb, lakin 517 00:28:08,000 --> 00:28:11,000 Bu bu həftə qoymaq əgər həmin şeyi bir və növbəti 518 00:28:11,000 --> 00:28:14,000 gdb kimi bir şey anlamaq üçün əlavə saat 519 00:28:14,000 --> 00:28:18,000 ki, uzunmüddətli perspektivdə saat yəqin ki, onlarla xilas edəcək 520 00:28:18,000 --> 00:28:21,000 belə ki, mənə bu şey necə bir iltifat verək. 521 00:28:21,000 --> 00:28:23,000 >> Mən terminal pəncərə edirəm. 522 00:28:23,000 --> 00:28:26,000 Mənə davam və bu proqram, buggy3 tərtib edək. 523 00:28:26,000 --> 00:28:28,000 Bu günə qədər artıq var. 524 00:28:28,000 --> 00:28:31,000 Biz bir müddət geri idi, və həqiqətən, sınıq var kimi mənə run edək. 525 00:28:31,000 --> 00:28:34,000 Amma nə bu? Bəlkə mübadilə funksiyası qıfıllar. 526 00:28:34,000 --> 00:28:37,000 Bəlkə bir və b var. Mən çox düzgün hərəkət deyiləm. 527 00:28:37,000 --> 00:28:39,000 Mənə irəli getmək və bunu edək. 528 00:28:39,000 --> 00:28:43,000 Daha çox yalnız mənə əvəzinə bu proqram gdb run imkan buggy3 run 529 00:28:43,000 --> 00:28:48,000 və mən buggy3 çalıştırmak üçün demək gedirəm 530 00:28:48,000 --> 00:28:52,000 və mən bir command line dəlil-TUI daxil gedirəm 531 00:28:52,000 --> 00:28:55,000 və biz xatırlatmaq spec gələcək problemləri bu qoymaq lazımdır. 532 00:28:55,000 --> 00:28:57,000 İndi bu qara və ağ interface, təkrar qədər atdı 533 00:28:57,000 --> 00:28:59,000 bütün bu var, çünki ilk bir az böyük deyil 534 00:28:59,000 --> 00:29:02,000 burada zəmanət informasiya, lakin ən azı tanış bir şey var. 535 00:29:02,000 --> 00:29:04,000 Pəncərənin üst mənim faktiki kodu edir 536 00:29:04,000 --> 00:29:08,000 və mən burada diyirləyin, əgər mənim fayl çox üst gedin qoy 537 00:29:08,000 --> 00:29:11,000 və həqiqətən, bu pəncərə altında buggy3.c və xəbərdarlıq var 538 00:29:11,000 --> 00:29:13,000 Mən bu gdb tez var. 539 00:29:13,000 --> 00:29:16,000 >> Bu mənim normal John Harvard tez eyni deyil. 540 00:29:16,000 --> 00:29:19,000 Bu mənə gdb nəzarət imkan olacaq ki, tez deyil. 541 00:29:19,000 --> 00:29:21,000 Gdb bir ayıklama edir. 542 00:29:21,000 --> 00:29:24,000 A ayıklama vasitəsilə gəzmək imkan verir ki, bir proqram 543 00:29:24,000 --> 00:29:27,000 xətti ilə line proqram line icrası, 544 00:29:27,000 --> 00:29:30,000 yolu proqram istədiyiniz bir şey etməklə yanaşı, 545 00:29:30,000 --> 00:29:33,000 hətta, daha əhəmiyyətlisi, funksiyaları zəng, və ya axtarır 546 00:29:33,000 --> 00:29:35,000 müxtəlif dəyişən dəyərləri ilə. 547 00:29:35,000 --> 00:29:37,000 Nin irəli getmək və bunu edək. 548 00:29:37,000 --> 00:29:40,000 Mən irəli getmək və gdb nin sətirinə run yazın gedirəm 549 00:29:40,000 --> 00:29:43,000 Mən çap run sonra ekranın sol alt bildiriş 550 00:29:43,000 --> 00:29:45,000 və mən Enter etdik ki, nə idi? 551 00:29:45,000 --> 00:29:50,000 Bu sözün mənim proqram qaçdı, amma həqiqətən çox burada getmək görmədim 552 00:29:50,000 --> 00:29:55,000 Mən, həqiqətən, ayıklama bildirib, çünki 553 00:29:55,000 --> 00:29:57,000 zaman, müəyyən bir anda dayandırmaq. 554 00:29:57,000 --> 00:29:59,000 Just run yazaraq proqramı çalışır. 555 00:29:59,000 --> 00:30:01,000 Mən, həqiqətən, bir şey görmürəm. Mən bunu manipulyasiya bilməz. 556 00:30:01,000 --> 00:30:03,000 >> Bunun əvəzinə mənə bunu bildirin. 557 00:30:03,000 --> 00:30:08,000 Bu gdb tez mənə yerine daxil break yazın edək. 558 00:30:08,000 --> 00:30:10,000 Yəni yazın nəzərdə nə deyil. 559 00:30:10,000 --> 00:30:13,000 Break əsas yazın əvəzinə edək. 560 00:30:13,000 --> 00:30:15,000 Başqa sözlə, mən bir breakpoint deyilən bir şey qurmaq istəyirəm 561 00:30:15,000 --> 00:30:18,000 pozmaq və ya fasilə çünki tutarlı adına olan 562 00:30:18,000 --> 00:30:21,000 xüsusi yer proqram icra. 563 00:30:21,000 --> 00:30:23,000 Əsas mənim funksiyası adı. 564 00:30:23,000 --> 00:30:25,000 Gdb olduqca ağıllı edək ki. 565 00:30:25,000 --> 00:30:28,000 Bu əsas line 18 təxminən başlamaq olur ki, fiqurlu 566 00:30:28,000 --> 00:30:32,000 buggy3.c, və sonra sol üst burada qeyd 567 00:30:32,000 --> 00:30:34,000 b + line 18 sağ yanında. 568 00:30:34,000 --> 00:30:38,000 Mən line 18 bir breakpoint qoymuşuq ki, mənə xatırladan edir. 569 00:30:38,000 --> 00:30:42,000 Bu dəfə run yazın zaman, mən proqram run gedirəm 570 00:30:42,000 --> 00:30:45,000 qədər qədər ki, breakpoint edib 571 00:30:45,000 --> 00:30:48,000 belə proqram line 18 mənim üçün fasilə olacaq. 572 00:30:48,000 --> 00:30:50,000 Burada getmək axır. 573 00:30:50,000 --> 00:30:53,000 Heç bir şey baş görünür, lakin alt sol bildiriş 574 00:30:53,000 --> 00:30:58,000 başlayan proqram, buggy3, buggy3.c line 18 əsas breakpoint 1. 575 00:30:58,000 --> 00:31:00,000 Mən indi nə etməliyəm? 576 00:31:00,000 --> 00:31:03,000 >> Qeyd edək mən, çap kimi şeylər yazmağa başlaya bilərsiniz 577 00:31:03,000 --> 00:31:08,000 deyil printf, çap x, indi ki, qəribə deyil. 578 00:31:08,000 --> 00:31:11,000 Biz görəcəksiniz kimi 1 $, yalnız bir maraq deyil 579 00:31:11,000 --> 00:31:14,000 Əgər bir şey çap hər dəfə yeni bir $ dəyər almaq. 580 00:31:14,000 --> 00:31:18,000 Bu, yalnız halda əvvəlki dəyərlərə geri müraciət edə bilərsiniz ki, var 581 00:31:18,000 --> 00:31:21,000 lakin indi nə çap mənə izah edir ki, hekayə bu nöqtədə x dəyəri 582 00:31:21,000 --> 00:31:26,000 yəqin 134514032 edir. 583 00:31:26,000 --> 00:31:29,000 Nə? Hətta haradan gəldi? 584 00:31:29,000 --> 00:31:31,000 [Işitilemez-tələbə] 585 00:31:31,000 --> 00:31:34,000 Həqiqətən, bu, bir zibil dəyər zəng edəcəyik, nə, biz, hələ bu barədə söhbət etdik deyil 586 00:31:34,000 --> 00:31:37,000 ancaq dəyişənlərin başlamaq səbəbi 587 00:31:37,000 --> 00:31:40,000 açıq-aydın onlar siz onlara olsun ki, bəzi dəyəri var. 588 00:31:40,000 --> 00:31:44,000 Amma tutmaq siz dəyişənlərin elan edə bilər ki, geri olunur 589 00:31:44,000 --> 00:31:46,000 Mən sigma Məsələn bir an əvvəl olduğu kimi 590 00:31:46,000 --> 00:31:48,000 həqiqətən, onlara bir dəyər vermədən. 591 00:31:48,000 --> 00:31:50,000 Mən sigma burada artıq nə xatırlayıram. 592 00:31:50,000 --> 00:31:52,000 Mən n elan, ancaq nə dəyər vermək idi? 593 00:31:52,000 --> 00:31:56,000 Yox, mən bilirdim ki, növbəti bir neçə xətləri 594 00:31:56,000 --> 00:31:59,000 GetInt n daxilində dəyər verilməsi problem qayğı olacaq. 595 00:31:59,000 --> 00:32:02,000 >> Amma line 11 hekayə bu nöqtədə 596 00:32:02,000 --> 00:32:05,000 və line 12 və line 13 və line 14 597 00:32:05,000 --> 00:32:08,000 o bir neçə xətləri boyunca n dəyəri nədir? 598 00:32:08,000 --> 00:32:10,000 C Siz yalnız bilmirəm. 599 00:32:10,000 --> 00:32:14,000 Bu, ümumiyyətlə, bəzi zibil dəyər, bəzi tamamilə təsadüfi sıra 600 00:32:14,000 --> 00:32:17,000 bir əvvəlki funksiya mahiyyətcə qalmış ki, 601 00:32:17,000 --> 00:32:21,000 proqram çalışan kimi, axır edilmiş 602 00:32:21,000 --> 00:32:24,000 funksiyası funksiyası, funksiyası, funksiyası olur ki, xatırlayıram. 603 00:32:24,000 --> 00:32:27,000 Bütün bu çərçivələr, həmin funksiyaları geri yaddaş qoymaq və almaq 604 00:32:27,000 --> 00:32:31,000 və yalnız kimi mən onların yaddaş nəticədə təkrar istifadə edilir pozan ilə təklif edir. 605 00:32:31,000 --> 00:32:37,000 Bəli, yalnız bu proqram ki, bu dəyişən x olur 606 00:32:37,000 --> 00:32:41,000 134514032 kimi zibil dəyər olan görünür 607 00:32:41,000 --> 00:32:44,000 bir əvvəlki funksiya, bir mən yazdı. 608 00:32:44,000 --> 00:32:47,000 Bu əməliyyat sistemi ilə səmərəli gəlir ki, bir şey ola bilər 609 00:32:47,000 --> 00:32:49,000 başlıq altında bəzi fəaliyyət göstərir. 610 00:32:49,000 --> 00:32:52,000 >> Okay ki, gözəl, lakin növbəti line əvvəlcədən indi edək. 611 00:32:52,000 --> 00:32:55,000 Mən gdb sətirinə "next" yazın və əgər mən daxil edib 612 00:32:55,000 --> 00:32:58,000 Qeyd ki, line 19 hamle aşağı işıqlandırılması 613 00:32:58,000 --> 00:33:01,000 ancaq məntiqi dolayısı ki line 18 614 00:33:01,000 --> 00:33:06,000 indi başa çatdı mən yenidən yazın əgər, yerinə "çap x" 615 00:33:06,000 --> 00:33:10,000 İndi 1 bax ki, həqiqətən, mən bunu. 616 00:33:10,000 --> 00:33:14,000 Yenə $ məhsulları gdb siz xatırladan bir yoldur 617 00:33:14,000 --> 00:33:17,000 baskı tarixi siz etdik ki, nə var. 618 00:33:17,000 --> 00:33:21,000 İndi mənə irəli getmək və y çap bildirin, və həqiqətən, y həmçinin bəzi crazy dəyəri 619 00:33:21,000 --> 00:33:24,000 lakin heç bir böyük line 19 ildə biz bu barədə təyin etmək istəyirik, çünki 620 00:33:24,000 --> 00:33:27,000 dəyəri 2, mənə yenə "gələcək" yazın edək. 621 00:33:27,000 --> 00:33:29,000 İndi biz printf line istəyirik. 622 00:33:29,000 --> 00:33:31,000 Mənə çap x edək. 623 00:33:31,000 --> 00:33:34,000 Mənə çap y edək. Açığı, mən bu çap bir az yorğun alıram. 624 00:33:34,000 --> 00:33:38,000 Mənə əvəzinə "ekran x" və "ekran y" yazın edək 625 00:33:38,000 --> 00:33:41,000 və indi hər dəfə mən gələcəkdə bir funksiyanı yazın 626 00:33:41,000 --> 00:33:45,000 Mən nə xatırlatdı olacaq nə x və y, x və y, x və y budur. 627 00:33:45,000 --> 00:33:48,000 >> Mən də, bir kənara, növü kimi "info yerli". 628 00:33:48,000 --> 00:33:50,000 Məlumat xüsusi əmr edir. 629 00:33:50,000 --> 00:33:52,000 Yerli mənə yerli dəyişənlərin göstərir deməkdir. 630 00:33:52,000 --> 00:33:55,000 Mən unutmaq və ya bu crazy, mürəkkəb funksiyası yalnız halda 631 00:33:55,000 --> 00:33:57,000 mən və ya bir başqası info yerli sizə yazdı 632 00:33:57,000 --> 00:34:00,000 Bu yerli funksiyası daxilində bütün yerli dəyişənlər nə 633 00:34:00,000 --> 00:34:03,000 siz ətrafında soxmaq istəyirsinizsə qayğı bilər. 634 00:34:03,000 --> 00:34:07,000 İndi printf Mənə qabaqda və yazın gedək, icra etmək haqqında "Növbəti". 635 00:34:07,000 --> 00:34:10,000 Biz bu mühitdə istəyirik Çünki biz həqiqətən görən deyilik 636 00:34:10,000 --> 00:34:14,000 burada icra, lakin burada bir az mangled əldə bildiriş. 637 00:34:14,000 --> 00:34:17,000 Lakin, orada ekran əsas bildiriş 638 00:34:17,000 --> 00:34:21,000 belə ki, burada bir mükəmməl proqram deyil, lakin mən həmişə ətrafında soxmaq bilər ki, OK 639 00:34:21,000 --> 00:34:23,000 Mən istəyirsinizsə çap istifadə edərək. 640 00:34:23,000 --> 00:34:26,000 >> Məni yenidən yazın edək, indi burada maraqlı hissəsi. 641 00:34:26,000 --> 00:34:29,000 Hekayə Bu nöqtədə, y 2 və x 1 642 00:34:29,000 --> 00:34:32,000 burada təklif və təkrar kimi 643 00:34:32,000 --> 00:34:35,000 Mən komanda istifadə çünki bu avtomatik indi görünür səbəbi 644 00:34:35,000 --> 00:34:40,000 ekran x və ekran y, mən növbəti yazın belə an 645 00:34:40,000 --> 00:34:43,000 nəzəriyyə x və y ilə dəyişdirildikdə olmalıdır. 646 00:34:43,000 --> 00:34:45,000 İndi biz artıq işi olacaq deyil bilirik ki, 647 00:34:45,000 --> 00:34:49,000 lakin biz doğru nə anlamaq üçün dərin dive necə bir anda görəcəksiniz. 648 00:34:49,000 --> 00:34:54,000 Təəssüf ki, Next, və y hələ 2 və x hələ 1 və mən qədər təsdiq edə bilər. 649 00:34:54,000 --> 00:34:56,000 Çap x, çap y. 650 00:34:56,000 --> 00:34:59,000 Həqiqətən, dəyişdirmə heç həqiqətən baş verib, belə ki, bu artıq başlamaq edək. 651 00:34:59,000 --> 00:35:01,000 Aydındır svop pozuldu. 652 00:35:01,000 --> 00:35:04,000 Nin yerinə yenə "run" yazın edək. 653 00:35:04,000 --> 00:35:07,000 Mənə bəli demək ki, mən əvvəldən yenidən başladın istəyirik, daxil edin. 654 00:35:07,000 --> 00:35:09,000 >> İndi geri line 18 oldum. 655 00:35:09,000 --> 00:35:11,000 İndi x və y yenidən zibil dəyərlər bilərsiniz. 656 00:35:11,000 --> 00:35:15,000 , Sonrakı, növbəti gələn. 657 00:35:15,000 --> 00:35:17,000 Mən cansıxıcı almaq, mən də yalnız növbəti n edəbilərsiniz. 658 00:35:17,000 --> 00:35:21,000 Siz simvol qısa ardıcıllıqla onu qısaltmaq bilər. 659 00:35:21,000 --> 00:35:23,000 Swap indi pozuldu. 660 00:35:23,000 --> 00:35:25,000 Yerinə gələn yazaraq belə ki, in dive edək, 661 00:35:25,000 --> 00:35:30,000 Mən bu funksiya daxilində gücləndirməklə edirəm ki, indi addım yazın gedirəm 662 00:35:30,000 --> 00:35:33,000 Mən onun vasitəsilə gəzmək edə bilərsiniz, belə ki, mən addım basın və sonra daxil edin belə. 663 00:35:33,000 --> 00:35:37,000 Qeyd edək line 36 mənim proqramı vurğulayaraq atlamalar aşağı aşağı edir. 664 00:35:37,000 --> 00:35:39,000 İndi yerli dəyişənlər nə var? 665 00:35:39,000 --> 00:35:41,000 Məlumat yerli. 666 00:35:41,000 --> 00:35:43,000 Biz line kazanılmış heç etdik çünki yalnız hələ heç bir şey, 667 00:35:43,000 --> 00:35:47,000 belə-nin irəli getmək və deyək "növbəti". 668 00:35:47,000 --> 00:35:50,000 İndi tmp, çap tmp var görünür. 669 00:35:50,000 --> 00:35:52,000 Zibil dəyəri, sağ? Mən belə hesab edirəm. 670 00:35:52,000 --> 00:35:55,000 Necə haqqında, çap b, 1 və 2 çap? 671 00:35:55,000 --> 00:35:58,000 Bir anda, tezliklə mən növbəti yenidən yazın kimi 672 00:35:58,000 --> 00:36:02,000 tmp, inşallah, 1 dəyəri götürmək niyyətindədir 673 00:36:02,000 --> 00:36:05,000 tmp bir dəyəri təyin edir, çünki. 674 00:36:05,000 --> 00:36:08,000 >> İndi bir, çap b çap edək, 675 00:36:08,000 --> 00:36:11,000 lakin indi tmp çap və bu, həqiqətən 1 var. 676 00:36:11,000 --> 00:36:14,000 Məni nə edək. Məni nə edək. 677 00:36:14,000 --> 00:36:16,000 Mən svop funksiyası başa etdik. 678 00:36:16,000 --> 00:36:19,000 Mən line 40 ildə daxilində hələ edirəm, mənə bir çap edək, 679 00:36:19,000 --> 00:36:22,000 çap b, mən tmp nə qayğı yoxdur. 680 00:36:22,000 --> 00:36:27,000 Bir və b dəyişdirmə gəldikdə svop doğru kimi görünür. 681 00:36:27,000 --> 00:36:31,000 Amma indi növbəti yazın, mən, line 25 geri jump 682 00:36:31,000 --> 00:36:34,000 və əlbəttə, x və çap y I növü əgər 683 00:36:34,000 --> 00:36:38,000 onlar hələ də dəyişməz istəyirik, biz problem müəyyən deyil. 684 00:36:38,000 --> 00:36:41,000 Amma diagnostically indi bəlkə bu gdb proqramı ilə 685 00:36:41,000 --> 00:36:44,000 biz ən azı anlaşma üçün bir addım daha kazanılmış etdik 686 00:36:44,000 --> 00:36:47,000 nə burada bir printf qoyaraq zibil üçün kod olmadan yanlış gedir, 687 00:36:47,000 --> 00:36:50,000 printf burada printf burada və sonra təkrar o çalışan 688 00:36:50,000 --> 00:36:52,000 yanlış nə həyata rəqəm çalışır. 689 00:36:52,000 --> 00:36:55,000 >> Mən çıxmaq ilə birlikdə irəli getmək və bu həyata çıxmaq üçün gedirəm. 690 00:36:55,000 --> 00:36:57,000 O demək olacaq ", hər halda çıxın?" Bəli. 691 00:36:57,000 --> 00:37:00,000 İndi mən normal tez geri oldum və gdb istifadə bitirdim. 692 00:37:00,000 --> 00:37:03,000 Bir kənara kimi, bu-TUI bayraq istifadə etmək lazım deyil. 693 00:37:03,000 --> 00:37:07,000 Siz onu buraxmaq əgər Əslində, mahiyyətcə ekranın alt yarısı almaq. 694 00:37:07,000 --> 00:37:11,000 Mən sonra run sonra fasilə əsas yazın və əgər 695 00:37:11,000 --> 00:37:15,000 Mən hələ mənim proqram run, lakin bunu daha textually ola bilər 696 00:37:15,000 --> 00:37:18,000 yalnız bir zamanda mənə cari line bir göstərir. 697 00:37:18,000 --> 00:37:21,000 The-TUI, tekstoloji istifadəçi interfeysi, 698 00:37:21,000 --> 00:37:25,000 yalnız bir dəfə, yəqin ki, bir az konseptual asan olan proqram daha göstərir. 699 00:37:25,000 --> 00:37:27,000 Lakin, həqiqətən, Mən, sonrakı, növbəti edə bilərsiniz 700 00:37:27,000 --> 00:37:30,000 və mən bir-bir xətt görmək gedirəm, və mən, həqiqətən neler görmək istəyirsinizsə 701 00:37:30,000 --> 00:37:35,000 Mən siyahısını yazın və qonşu xətləri bütün dəstə bilərsiniz. 702 00:37:35,000 --> 00:37:39,000 >> Biz problem 3 qoyur üçün siz baxmaq xahiş etdik ki, bir video var 703 00:37:39,000 --> 00:37:43,000 olan Nate, gdb və intricacies bəzi əhatə edir 704 00:37:43,000 --> 00:37:46,000 və bu, vicdanla, həmin şeyi biridir burada bəzi qeyri-cüzi faiz 705 00:37:46,000 --> 00:37:49,000 gdb toxunmaq heç vaxt ki, pis bir şey olacaq 706 00:37:49,000 --> 00:37:53,000 sanki bu dövr sonra daha çox vaxt sərf başa çünki 707 00:37:53,000 --> 00:37:56,000 hataları aşağı chasing sonra siz ki, yarım saat / saat qoymaq əgər 708 00:37:56,000 --> 00:38:00,000 bu həftə və gələcək təlim gdb rahat almaq üçün. 709 00:38:00,000 --> 00:38:02,000 Printf dost idi. 710 00:38:02,000 --> 00:38:05,000 Gdb İndi dost olmalıdır. 711 00:38:05,000 --> 00:38:08,000 >> Gdb hər hansı suallar? 712 00:38:08,000 --> 00:38:12,000 Və burada ən güclü və faydalı əmrləri bəzi tez siyahısı. 713 00:38:12,000 --> 00:38:15,000 Bəli. >> Bir string çap edə bilərəmmi? 714 00:38:15,000 --> 00:38:17,000 Bir string çap edə bilərəmmi? Tamamilə. 715 00:38:17,000 --> 00:38:19,000 Bu yalnız integers olmaq deyil. 716 00:38:19,000 --> 00:38:22,000 Dəyişən s çap s yazın simli olur. 717 00:38:22,000 --> 00:38:24,000 Bu string dəyişən nə sizə göstərəcək. 718 00:38:24,000 --> 00:38:26,000 [Işitilemez-tələbə] 719 00:38:26,000 --> 00:38:28,000 Bu ünvan və simli özü verəcək. 720 00:38:28,000 --> 00:38:32,000 Bu həm göstərəcək. 721 00:38:32,000 --> 00:38:34,000 Və son bir şey, yalnız bu çox bilmək yaxşıdır, çünki. 722 00:38:34,000 --> 00:38:37,000 Backtrace və çərçivə, mənə bu son bir dəfə daxil dive edək 723 00:38:37,000 --> 00:38:39,000 gdb ilə eyni dəqiq proqramı. 724 00:38:39,000 --> 00:38:44,000 Mənə irəli getmək və mətn user interface versiyası run edək, 725 00:38:44,000 --> 00:38:46,000 əsas pozub. 726 00:38:46,000 --> 00:38:49,000 Mənə davam və yenidən run edək. Burada mən. 727 00:38:49,000 --> 00:38:55,000 İndi mənə, sonrakı, növbəti gələn növbəti gedək, step, daxil edin. 728 00:38:55,000 --> 00:39:00,000 >> İndi qəsdən svop artıq Ben güman, lakin mən kimi Ben "Lanet olsun, x dəyəri nə idi?" 729 00:39:00,000 --> 00:39:02,000 Mən artıq x edə bilməz. 730 00:39:02,000 --> 00:39:05,000 Onlar daxilində deyilik, çünki y edə bilməz. 731 00:39:05,000 --> 00:39:07,000 Onlar kontekstində deyilik, amma heç bir problem. 732 00:39:07,000 --> 00:39:09,000 Mən backtrace edəbilərsiniz. 733 00:39:09,000 --> 00:39:13,000 Ki, mənə vaxt bu nöqtəyə qədər icra edən funksiyaları bütün göstərir. 734 00:39:13,000 --> 00:39:16,000 Qeyd edək ki, əsas ilə əsas altındakı bir, xətləri qədər 735 00:39:16,000 --> 00:39:18,000 Burada şəkil altında olan. 736 00:39:18,000 --> 00:39:22,000 Swap mübadilə burada yaddaş yuxarıda olmaqla onu xətləri yuxarıda olması, 737 00:39:22,000 --> 00:39:26,000 və mən müvəqqəti əsas geri almaq istəyirsinizsə I "çərçivəsində". deyə bilərsiniz 738 00:39:26,000 --> 00:39:30,000 Nə sayı? Ana çərçivəsində # 1-dir. 739 00:39:30,000 --> 00:39:32,000 Mən irəli getmək və demək gedirəm "çərçivəsində 1". 740 00:39:32,000 --> 00:39:36,000 >> İndi əsas geri oldum və x çap edə bilərsiniz, mən, y çap edə bilərsiniz 741 00:39:36,000 --> 00:39:40,000 amma bir və ya b çap bilməz. 742 00:39:40,000 --> 00:39:43,000 Demək Amma əgər mən, "Okay, bir dəqiqə gözləyin. Harada svop idi?" Bilərsiniz 743 00:39:43,000 --> 00:39:46,000 Mənə davam və deyək "çərçivəsində 0". 744 00:39:46,000 --> 00:39:48,000 İndi mən olmaq istədiyiniz geri oldum və bir kənara kimi 745 00:39:48,000 --> 00:39:52,000 həqiqətən cansıxıcı yazaraq növbəti, sonrakı, növbəti gələn alıyorsanız kimi digər əmrləri, çox var 746 00:39:52,000 --> 00:39:56,000 genellikle ", növbəti 10" kimi şeylər demək olar ki, növbəti 10 xətləri vasitəsilə addım olacaq. 747 00:39:56,000 --> 00:39:59,000 Ayrıca, həqiqətən, onun vasitəsilə gücləndirməklə ilə qidalanır almaq zaman "davam" yaza bilərsiniz. 748 00:39:59,000 --> 00:40:05,000 Başqa breakpoint xit qədər davam fasiləsiz proqram davam edəcək 749 00:40:05,000 --> 00:40:07,000 bir loop və ya proqram aşağı aşağı. 750 00:40:07,000 --> 00:40:11,000 >> Bu halda biz sonuna davam və proqram normal çıxış edib. 751 00:40:11,000 --> 00:40:13,000 Bu xülya yolu, aşağı prosesdir. 752 00:40:13,000 --> 00:40:16,000 Sadəcə proqram normal çıxış edib. 753 00:40:16,000 --> 00:40:24,000 Video və gələcək iclaslarında ayıklama ki, daha çox. 754 00:40:24,000 --> 00:40:26,000 Bu çox idi. 755 00:40:26,000 --> 00:40:35,000 Gəlin burada 5 dəqiqə fasilə etmək, və biz structs və faylları ilə qayıtmaq lazımdır. 756 00:40:35,000 --> 00:40:38,000 >> Əgər siz artıq bu həftə pset daxil dived varsa 757 00:40:38,000 --> 00:40:41,000 , sizi bölüşdürülməsi kodu istifadə bilirsiniz 758 00:40:41,000 --> 00:40:45,000 biz bir başlanğıc nöqtəsi, bəzi yeni texnika kimi sizə təmin edən mənbə kodu. 759 00:40:45,000 --> 00:40:50,000 Xüsusilə, biz, strukturu, struct adlanan bu yeni söz təqdim 760 00:40:50,000 --> 00:40:53,000 belə ki, biz növ xüsusi dəyişənlər yaratmaq bilər. 761 00:40:53,000 --> 00:40:57,000 Biz, həmçinin, fayl I / O, fayl giriş və çıxış anlayışı daxil 762 00:40:57,000 --> 00:41:00,000 və bu biz dövlət saxlaya bilərsiniz ki, 763 00:41:00,000 --> 00:41:03,000 Sizin Scramble heyəti disk bir fayl üçün 764 00:41:03,000 --> 00:41:06,000 tədris yoldaşları və mən başa düşə bilər ki, 765 00:41:06,000 --> 00:41:09,000 nə əl oynamaq olmadan proqram daxilində gedən 766 00:41:09,000 --> 00:41:11,000 Scramble oyunları onlarla. 767 00:41:11,000 --> 00:41:13,000 Biz daha automatedly bunu edə bilərsiniz. 768 00:41:13,000 --> 00:41:18,000 >> Bir struct Bu fikir kifayət qədər çekici problem həll edir. 769 00:41:18,000 --> 00:41:21,000 Biz bir proqram həyata keçirmək istədiyiniz düşünək 770 00:41:21,000 --> 00:41:25,000 ki, elə-belə, tələbələr haqqında məlumat tutar 771 00:41:25,000 --> 00:41:28,000 və tələbələri, məsələn, adı ID bilər 772 00:41:28,000 --> 00:41:31,000 və Harvard kimi bir yerdə ev, belə bu məlumatlar 3 ədəd var 773 00:41:31,000 --> 00:41:34,000 biz ətrafında saxlamaq istəyirsinizsə, mənə irəli getmək və burada bir az proqram yazmağa başlayın edək, 774 00:41:34,000 --> 00:41:38,000 stdio.h daxildir. 775 00:41:38,000 --> 00:41:42,000 Mənə cs50.h. daxil edək 776 00:41:42,000 --> 00:41:44,000 Və sonra mənim əsas funksiyası başlamaq. 777 00:41:44,000 --> 00:41:46,000 Mən, heç bir command line dəlilləri ilə narahat deyil 778 00:41:46,000 --> 00:41:49,000 və burada mən bir tələbə olsun, mən demək gedirəm 779 00:41:49,000 --> 00:41:54,000 bir tələbə bir adı var, mən demək gedirəm "string adı." 780 00:41:54,000 --> 00:41:59,000 Sonra, tələbə də, belə int id şəxsiyyət var demək gedirəm 781 00:41:59,000 --> 00:42:03,000 və tələbə bir ev var, mən də demək gedirəm "string evi." 782 00:42:03,000 --> 00:42:06,000 Mən bu kimi daha çox pakizə, bu bir az sifariş lazımdır. 783 00:42:06,000 --> 00:42:11,000 OK, indi mən, "bir tələbə." Olan bir tələbə təmsil 3 dəyişənlər var 784 00:42:11,000 --> 00:42:15,000 >> İndi bu dəyərləri yaşayır istəyirəm, belə ki, mənim kimi bir şey davam və deyək 785 00:42:15,000 --> 00:42:18,000 "Id = 123". 786 00:42:18,000 --> 00:42:21,000 Adı David almaq üçün gedir. 787 00:42:21,000 --> 00:42:24,000 Gəlin evi, Mather olacaq deyə 788 00:42:24,000 --> 00:42:31,000 və sonra I ("% s, özbaşına printf kimi bir şey gedirəm 789 00:42:31,000 --> 00:42:37,000 kimin ID% d% s yaşayır. 790 00:42:37,000 --> 00:42:41,000 İndi mən burada plug-birinin ardınca nə istəyirsiniz? 791 00:42:41,000 --> 00:42:47,000 Ad, id, ev; qaytarılması 0. 792 00:42:47,000 --> 00:42:50,000 OK, əgər mən haradasa burada qıfıllar 793 00:42:50,000 --> 00:42:54,000 Mən bir tələbə saxlayan olduqca yaxşı proqram var. 794 00:42:54,000 --> 00:42:57,000 Əlbəttə ki, bu bütün maraqlı deyil. Mən 2 tələbələri etmək istəyirsinizsə? 795 00:42:57,000 --> 00:42:59,000 Heç böyük var. Mən 2 nəfər dəstəkləyir. 796 00:42:59,000 --> 00:43:03,000 Mənə davam və bu qeyd və burada aşağı gedək, 797 00:43:03,000 --> 00:43:09,000 və mən Kirkland yaşayan Rob kimi kimsə üçün "id = 456" demək olar. 798 00:43:09,000 --> 00:43:12,000 >> Okay, gözləyin, amma bu eyni şey adlandırmaq olmaz 799 00:43:12,000 --> 00:43:15,000 və bu surəti üçün gedirəm kimi görünür, 800 00:43:15,000 --> 00:43:19,000 Mənə bu Davudun dəyişənlərin olacaq ki, qoy, 801 00:43:19,000 --> 00:43:23,000 və mənə Rob bu bəzi surətlərini almaq imkan verir. 802 00:43:23,000 --> 00:43:27,000 Biz bu Rob-nin zəng edəcəyik, lakin bu artıq işləmək niyyətində deyil 803 00:43:27,000 --> 00:43:33,000 I-gözləmək çünki, in name1 və house1, id1 mənə dəyişdirmək imkan verir. 804 00:43:33,000 --> 00:43:35,000 Rob, 2 2 olacaq. 805 00:43:35,000 --> 00:43:42,000 Mən burada, buraya, burada burada burada, burada bu dəyişdirmək üçün var. 806 00:43:42,000 --> 00:43:45,000 Doğrusu, nə Tommy haqqında? Yenə bunu edək. 807 00:43:45,000 --> 00:43:49,000 Siz hələ bu bunu yaxşı yol hesab Aydındır ki, bu, deyil 808 00:43:49,000 --> 00:43:52,000 belə surəti / pis yapışdırıb. 809 00:43:52,000 --> 00:43:55,000 Amma bir həftə əvvəl bu həll. 810 00:43:55,000 --> 00:43:59,000 >> Biz eyni data type çox hallarda etmək istəyirdi zaman bizim həll nə idi? 811 00:43:59,000 --> 00:44:01,000 [Tələbələr] Bir sıra. 812 00:44:01,000 --> 00:44:03,000 Bir dizi, mənə bu qədər təmiz edək. 813 00:44:03,000 --> 00:44:07,000 Mənə üst özüm üçün bir otaq etmək və mənə əvəzinə burada bunu qoy edək. 814 00:44:07,000 --> 00:44:12,000 Biz bu insanların zəng edəcəyik, əvəzinə mən ", int kimlikleri" demək gedirəm 815 00:44:12,000 --> 00:44:14,000 və mən indi üçün bizə 3 dəstək gedirəm. 816 00:44:14,000 --> 00:44:18,000 Mən, "simli adları" demək və bizə 3 dəstək olacaq gedirəm 817 00:44:18,000 --> 00:44:22,000 və sonra mən ", simli ev" demək və bizə 3 dəstək gedirəm gedirəm. 818 00:44:22,000 --> 00:44:26,000 İndi burada əvəzinə David öz yerli dəyişənlərin əldə ildə 819 00:44:26,000 --> 00:44:28,000 biz o xilas edə bilər. 820 00:44:28,000 --> 00:44:30,000 Yəni biz bu təmizlənməsi etdiyiniz yaxşı hiss edir. 821 00:44:30,000 --> 00:44:35,000 Mən David [0] və adlarını [0] olacaq deyə bilərsiniz 822 00:44:35,000 --> 00:44:38,000 və evlərin [0]. 823 00:44:38,000 --> 00:44:41,000 Və sonra biz eynilə bu saxlaya bilərsiniz Rob. 824 00:44:41,000 --> 00:44:46,000 Bu aşağı burada qoyaq, o, özbaşına kimlikleri [1] olacaq. 825 00:44:46,000 --> 00:44:50,000 O, adları olacaq [1] 826 00:44:50,000 --> 00:44:53,000 və sonra nəhayət, evlər [1]. 827 00:44:53,000 --> 00:44:57,000 >> , Hələ bir az yorucu və indi bu rəqəm var 828 00:44:57,000 --> 00:45:03,000 belə deyək "adı [0], id [0], evləri [0] 829 00:45:03,000 --> 00:45:06,000 və bu çoğul bildirin. 830 00:45:06,000 --> 00:45:09,000 Noları, kimlikleri, kimlikleri. 831 00:45:09,000 --> 00:45:12,000 Və yenə, mən bunu edirəm, belə yenə, mən artıq bir daha yapışdırıb / surəti müraciət edirəm 832 00:45:12,000 --> 00:45:14,000 belə odds başqa həll burada var var. 833 00:45:14,000 --> 00:45:18,000 Mən yəqin ki, belə bir loop və ya bir şey ilə bu təmiz bilər 834 00:45:18,000 --> 00:45:21,000 belə qısa, bir az daha yaxşı lakin hələ kimi hiss 835 00:45:21,000 --> 00:45:24,000 , Mən yapışdırıb / surəti müraciət edirəm, lakin bu, hətta mən iddia 836 00:45:24,000 --> 00:45:27,000 həqiqətən əsaslı düzgün həll deyil, çünki 837 00:45:27,000 --> 00:45:29,000 zaman biz qərar, əgər nə bilirik? 838 00:45:29,000 --> 00:45:32,000 Biz, həqiqətən, David və Rob üçün e-poçt ünvanlarını saxlanılması olmalıdır 839 00:45:32,000 --> 00:45:34,000 və bu proqram başqa hər kəs. 840 00:45:34,000 --> 00:45:36,000 Biz həmçinin telefon nömrələri saxlamaq lazımdır. 841 00:45:36,000 --> 00:45:39,000 Biz, həmçinin, təcili əlaqə nömrələri saxlamaq lazımdır. 842 00:45:39,000 --> 00:45:41,000 Biz saxlamaq istədiyiniz məlumatın bütün bu ədəd var 843 00:45:41,000 --> 00:45:43,000 belə necə bunu barədə giderim? 844 00:45:43,000 --> 00:45:46,000 >> Siz üst bir sıra bəyan, sonra özünüz əlavə 845 00:45:46,000 --> 00:45:49,000 e-mail [0], e-mail [1] 846 00:45:49,000 --> 00:45:51,000 David və Rob və s. 847 00:45:51,000 --> 00:45:56,000 Amma bu dizayn əsasını yalnız bir ehtimal həqiqətən var 848 00:45:56,000 --> 00:45:59,000 Mən bilmək şərəfinə sistemi istifadə edirəm ki, 849 00:45:59,000 --> 00:46:03,000 [I] bir neçə serialların hər 850 00:46:03,000 --> 00:46:06,000 yalnız, belə ki, həmin şəxsə aid olur 851 00:46:06,000 --> 00:46:10,000 belə [0] kimlikleri sayı 123-dir 852 00:46:10,000 --> 00:46:13,000 və mən adları güman gedirəm [0] 853 00:46:13,000 --> 00:46:16,000 eyni şəxsin adı və evlərin [0] 854 00:46:16,000 --> 00:46:21,000 Mən yaratmaq ki, müxtəlif seriallarda bütün eyni şəxsin evi və s-dir. 855 00:46:21,000 --> 00:46:24,000 Amma heç bir fundamental əlaqələrin olduğunu qeyd 856 00:46:24,000 --> 00:46:27,000 məlumat, id, adı və evin həmin 3 ədəd arasında, 857 00:46:27,000 --> 00:46:32,000 biz bu proqram model çalışdığınız şəxs seriallarda deyil, baxmayaraq. 858 00:46:32,000 --> 00:46:35,000 Diziler bunu yalnız bu proqram yoludur. 859 00:46:35,000 --> 00:46:38,000 Biz, həqiqətən, bizim proqram simulyasiya etmək istəyirəm nə adam 860 00:46:38,000 --> 00:46:41,000 David, bunun içərisində Rob kimi bir şəxs kimi 861 00:46:41,000 --> 00:46:46,000 və ya encapsulating adı və kodu bir ev. 862 00:46:46,000 --> 00:46:49,000 >> Biz birtəhər encapsulation bu fikir ifadə edə bilər 863 00:46:49,000 --> 00:46:52,000 bir şəxs ID, adı və bir ev var qovuşdurmağımız 864 00:46:52,000 --> 00:46:55,000 və həqiqətən bu hack müraciət deyil elə biz yalnız 865 00:46:55,000 --> 00:46:58,000 ki bracket bir şey etibar 866 00:46:58,000 --> 00:47:02,000 Bu disparate serialların hər eyni insan şəxs deməkdir? 867 00:47:02,000 --> 00:47:04,000 Biz həqiqətən bunu edə bilərsiniz. 868 00:47:04,000 --> 00:47:08,000 Mənə indi üçün yuxarıda əsas getmək və mənə öz data type yaratmaq imkan edək 869 00:47:08,000 --> 00:47:10,000 ilk dəfə həqiqətən üçün. 870 00:47:10,000 --> 00:47:14,000 Biz Scramble bu texnika istifadə 871 00:47:14,000 --> 00:47:17,000 lakin burada, davam və bir veri növü yaratmaq gedirəm 872 00:47:17,000 --> 00:47:19,000 və nə mən, bu, tələbə və ya şəxs zəng etmək üçün gedirəm bilir 873 00:47:19,000 --> 00:47:23,000 və bir növü müəyyən üçün typedef istifadə gedirəm. 874 00:47:23,000 --> 00:47:25,000 Mən bu bir quruluş ki gedirəm 875 00:47:25,000 --> 00:47:29,000 və sonra bu quruluş, növü tələbə olmaq, biz demək lazımdır gedir 876 00:47:29,000 --> 00:47:31,000 bu mənim üçün artıq tarixli bir az belə olsa. 877 00:47:31,000 --> 00:47:33,000 Biz "int id." Demək lazımdır 878 00:47:33,000 --> 00:47:35,000 Biz "string adı." Demək lazımdır 879 00:47:35,000 --> 00:47:37,000 Sonra "simli ev" demək lazımdır 880 00:47:37,000 --> 00:47:40,000 İndi kodu bu neçə satır sonuna 881 00:47:40,000 --> 00:47:45,000 Mən yalnız var ki, cingilti öyrətdin 882 00:47:45,000 --> 00:47:49,000 strings əlavə ints başqa bir veri növü, başqa üzüb gedirdi yanaşı, iki dəfə. 883 00:47:49,000 --> 00:47:54,000 >> Vaxt line 11 Bu an kimi, tələbələr adlı yeni data növü, artıq 884 00:47:54,000 --> 00:47:58,000 və indi yerdə istəyirəm tələbə dəyişən elan edə bilər 885 00:47:58,000 --> 00:48:01,000 Mənə insanlar burada aşağı diyirləyin bildirin. 886 00:48:01,000 --> 00:48:05,000 İndi mən bu xilas edə bilər və mən burada David geri enmək bilər 887 00:48:05,000 --> 00:48:10,000 Davud üçün mən həqiqətən ki, David, demək olar 888 00:48:10,000 --> 00:48:13,000 biz sanki özümü sonra dəyişən olar 889 00:48:13,000 --> 00:48:16,000 növü tələbə olacaq. 890 00:48:16,000 --> 00:48:18,000 Bu bir az qəribə görünə bilər, lakin bu, bütün fərqli deyil 891 00:48:18,000 --> 00:48:22,000 bir int və ya simli və ya bir float kimi bir şey elan edir. 892 00:48:22,000 --> 00:48:24,000 Bu, sadəcə, belə ki, indi tələbə adlandırmaq olur 893 00:48:24,000 --> 00:48:28,000 və bu quruluş içərisində bir şey qoymaq istəyirsinizsə 894 00:48:28,000 --> 00:48:31,000 Indi sintaksis yeni parça istifadə, lakin bu, olduqca sadə var 895 00:48:31,000 --> 00:48:39,000 david.id = 123, kapital D david.name = "David" 896 00:48:39,000 --> 00:48:42,000 və david.house = "Mather" 897 00:48:42,000 --> 00:48:46,000 və indi burada bu məhsulları xilas edə bilər. 898 00:48:46,000 --> 00:48:51,000 Biz həqiqətən çox daha yaxşı bir şəkildə proqram yeniden tasarladık bildiriş 899 00:48:51,000 --> 00:48:54,000 ki, indi bizim proqram real dünya yansımasıdır. 900 00:48:54,000 --> 00:48:57,000 >> Bir şəxs və ya bir şagird bir real-dünya anlayışı var. 901 00:48:57,000 --> 00:49:02,000 Burada artıq bir şəxs və ya daha çox xüsusi bir tələbə C versiyası var. 902 00:49:02,000 --> 00:49:05,000 Həmin şəxsin daxilində müvafiq xüsusiyyətləri var, 903 00:49:05,000 --> 00:49:10,000 ID, adı, ev, belə ki, Rob mahiyyətcə aşağı burada eyni şey olur, 904 00:49:10,000 --> 00:49:14,000 , tələbə rob belə, indi = 456 rob.id 905 00:49:14,000 --> 00:49:17,000 rob.name = "Rob". 906 00:49:17,000 --> 00:49:20,000 Dəyişən Rob adlanır ki, mənasız növ edir. 907 00:49:20,000 --> 00:49:22,000 Biz x və ya y ya z adlı bilərdi. 908 00:49:22,000 --> 00:49:25,000 Biz yalnız, o, semantically ardıcıl olmaq Rob adına 909 00:49:25,000 --> 00:49:28,000 amma həqiqətən adı, bu sahədə özünü daxili 910 00:49:28,000 --> 00:49:30,000 İndi mən bu var. 911 00:49:30,000 --> 00:49:33,000 Bu da mən ağır David kodlu etdik ki, yaxşı dizayn kimi hiss etmir. 912 00:49:33,000 --> 00:49:35,000 Mən ağır Rob kodlu etdik. 913 00:49:35,000 --> 00:49:39,000 Mən hələ də bəzi surəti müraciət edirəm və yeni dəyişənlərin istədiyiniz hər zaman yapışdırıb var. 914 00:49:39,000 --> 00:49:43,000 Bundan başqa, mən, yəqin bu dəyişənlərin hər bir ad vermək 915 00:49:43,000 --> 00:49:46,000 Mən çox deyil, bu dəyişənlər təsvir istədiyiniz baxmayaraq 916 00:49:46,000 --> 00:49:48,000  daha ümumi olaraq kimi tələbələr. 917 00:49:48,000 --> 00:49:52,000 >> İndi bizim üçün yaxşı iş ki, fikir daxil edə bilərsiniz 918 00:49:52,000 --> 00:49:56,000 əvəzinə, Siz mənə bir dəyişən adlandırılan tələbələr vermək nə bilirik ", deyə 919 00:49:56,000 --> 00:50:01,000 və indi bu daha rafine edə bilərsiniz, belə ki, "İT ölçüsü 3 ola var imkan, 920 00:50:01,000 --> 00:50:04,000 , elle elan David canini qurtar 921 00:50:04,000 --> 00:50:08,000 və mən əvəzinə [0] burada tələbə kimi bir şey demək olar. 922 00:50:08,000 --> 00:50:11,000 Mən, [0] burada tələbələr demək olar 923 00:50:11,000 --> 00:50:14,000 tələbələr burada və s [0], və ətrafında bilərsiniz 924 00:50:14,000 --> 00:50:16,000 və Rob ki təmizlənməsi. 925 00:50:16,000 --> 00:50:19,000 Mən də indi bəlkə bir loop etdi getmək bilər 926 00:50:19,000 --> 00:50:23,000 və həqiqətən, istifadəçi bu dəyərlər almaq üçün GetString və GetInt istifadə edərək. 927 00:50:23,000 --> 00:50:27,000 Bu, ümumiyyətlə, pis təcrübə, çünki daimi əlavə edə bilər 928 00:50:27,000 --> 00:50:29,000 Burada 3 kimi ağır kodu bəzi ixtiyari sayı 929 00:50:29,000 --> 00:50:33,000 və sonra yalnız siz artıq 3 tələbələri qoymaq lazımdır ki, unutmayın. 930 00:50:33,000 --> 00:50:36,000 Bu yəqin ki, mənim fayl üst müəyyənləşdirmək # istifadə etmək daha yaxşı olardı 931 00:50:36,000 --> 00:50:40,000 və, belə ki, həqiqətən, mənə irəli getmək və bu ümumiləşdirmək edək ki, amil. 932 00:50:40,000 --> 00:50:43,000 >> Mənə bu gün arasında olan bir misal açmaq edək 933 00:50:43,000 --> 00:50:46,000 əvvəlcədən nümunələri structs1. 934 00:50:46,000 --> 00:50:49,000 Bu # burada müəyyən istifadə edir ki, daha tam proqram 935 00:50:49,000 --> 00:50:51,000 və biz ismarıcları 3 tələbələri malik olacaq deyir. 936 00:50:51,000 --> 00:50:54,000 Burada, şagirdlərin sinif dəyər bəyan edirəm 937 00:50:54,000 --> 00:50:57,000 tələbələr bir sinif belə, indi mən bir loop kullanıyorum 938 00:50:57,000 --> 00:51:00,000 yalnız kodu bir az daha zərif etmək, sinif yaşayır 939 00:51:00,000 --> 00:51:05,000 istifadəçi girişi ilə, belə ki, 3 olan tələbələr, i = 0 üzrə təkrarlamaq. 940 00:51:05,000 --> 00:51:07,000 Və sonra mən bu versiyası istifadəçi təklif 941 00:51:07,000 --> 00:51:10,000  nə tələbə ID var və mən GetInt ilə almaq. 942 00:51:10,000 --> 00:51:13,000 Nə tələbə adı, ve sonra o GetString ilə almaq. 943 00:51:13,000 --> 00:51:15,000 Şagirdin ev nədir? Mən GetString ilə almaq. 944 00:51:15,000 --> 00:51:19,000 Və sonra burada alt Mən dəyişmək qərara 945 00:51:19,000 --> 00:51:22,000 Mən bu həyata çap alıram və həqiqətən bir loop necə istifadə, 946 00:51:22,000 --> 00:51:24,000 və mən kim çap edirəm? 947 00:51:24,000 --> 00:51:27,000 Yorum görə mən Mather hər çap alıram 948 00:51:27,000 --> 00:51:30,000 və Rob və Tommy belə və s-həqiqətən Tommy nin Mather bu var. 949 00:51:30,000 --> 00:51:34,000 Tommy və David bu halda çap olunacaq, lakin bu necə işləyir? 950 00:51:34,000 --> 00:51:40,000 Biz əvvəl bu funksiya görünür, lakin bu nə kimi bir tahmin etmək deyil. 951 00:51:40,000 --> 00:51:42,000 Strings müqayisə edir. 952 00:51:42,000 --> 00:51:45,000 >> Bu çıxır, çünki strings müqayisə necə bir az qeyri-aşkar var 953 00:51:45,000 --> 00:51:49,000 o deməkdir ki 0 qayıtdıqda əgər strings bərabərdir. 954 00:51:49,000 --> 00:51:53,000 Bir -1 döndürürse bir, digər əvvəl əlifba sırası gəlir deməkdir 955 00:51:53,000 --> 00:51:57,000 bu başqa söz deməkdir +1 qaytarır əgər və əlifba sırası ilə gəlir 956 00:51:57,000 --> 00:52:00,000 Digər əvvəl, siz online və ya man səhifə baxa bilərsiniz 957 00:52:00,000 --> 00:52:04,000 məhz hansı yolla olan görmək, lakin indi bunu deyirdik edir 958 00:52:04,000 --> 00:52:09,000 Bu [i]. evi "Mather" bərabər olduqda 959 00:52:09,000 --> 00:52:13,000 sonra irəli getmək və s çap və s Mather edir. 960 00:52:13,000 --> 00:52:16,000 Lakin burada biz əvvəl görməmişik bir şey var və biz bu qayıda bilərsiniz. 961 00:52:16,000 --> 00:52:21,000 Mən heç mənim proqramları hər hansı bunu olan xatırlayıram yoxdur. 962 00:52:21,000 --> 00:52:24,000 Pulsuz yəqin, yaddaş istinad yaddaş azad edilir 963 00:52:24,000 --> 00:52:31,000 amma yəqin bu proqram altında bu loop nə yaddaş azad edirəm? 964 00:52:31,000 --> 00:52:34,000 Mən bir şəxsin adı azad alıram kimi görünür 965 00:52:34,000 --> 00:52:37,000 və bir şəxsin evi, amma niyə ki? 966 00:52:37,000 --> 00:52:41,000 >> Bu GetString istifadə etdik ki, bütün bu həftə çıxır 967 00:52:41,000 --> 00:52:45,000 biz cür proqramları hər biri bir səhv tətbiq etdik. 968 00:52:45,000 --> 00:52:51,000 Bu bir string geri ki, dizayn ayırır yaddaş ilə GetString, 969 00:52:51,000 --> 00:52:55,000 kimi David, ya Rob, və sonra istədiyiniz hər hansı edə bilərsiniz 970 00:52:55,000 --> 00:52:59,000 Biz sizin üçün yaddaş qorunur etdik çünki proqram ki, simli ilə. 971 00:52:59,000 --> 00:53:02,000 Bu problem GetString zəng hər zaman bütün bu vaxt 972 00:53:02,000 --> 00:53:05,000 biz GetString müəllifləri, əməliyyat sistemi tələb olunub 973 00:53:05,000 --> 00:53:07,000 Bu simli üçün bizə RAM bir az vermək. 974 00:53:07,000 --> 00:53:09,000 Bu növbəti simli üçün bizə RAM bir qədər verin. 975 00:53:09,000 --> 00:53:11,000 Bu növbəti simli üçün bir daha RAM verin. 976 00:53:11,000 --> 00:53:13,000 Nə, proqramçı, bunu heç vaxt 977 00:53:13,000 --> 00:53:15,000 , bizə yaddaş geri verir 978 00:53:15,000 --> 00:53:17,000 Belə ki, bu bir neçə həftə proqramları bütün yazdıq 979 00:53:17,000 --> 00:53:20,000 onlar istifadə saxlamaq vasitəsi yaddaş sıçrayış deyirlər nə idi 980 00:53:20,000 --> 00:53:24,000 daha çox yaddaş siz GetString zəng və Gözəl hər zaman. 981 00:53:24,000 --> 00:53:27,000 Ki, maraqlı deyil, çünki Biz qəsdən ilk həftə bunu 982 00:53:27,000 --> 00:53:29,000 simli gələn yerləşir narahat var. 983 00:53:29,000 --> 00:53:34,000 Istədiyiniz bütün söz zaman istifadəçi bu da qayıda Rob deyil 984 00:53:34,000 --> 00:53:38,000 >> Amma irəliləyir biz bu barədə daha mürəkkəb almaq başlamaq üçün. 985 00:53:38,000 --> 00:53:42,000 Biz yaddaş ayırmaq hər zaman daha yaxşı nəticədə geri əl. 986 00:53:42,000 --> 00:53:45,000 Əks halda sizin Mac və ya PC-də real dünyada zaman zaman təcrübəli ola bilər 987 00:53:45,000 --> 00:53:50,000 kompüter nəhayət dayanma nöqtəsinə daşları yerləşir simptomları 988 00:53:50,000 --> 00:53:54,000 və ya axmaq spinning çimərlik top yalnız kompüter işğal edilir 989 00:53:54,000 --> 00:53:56,000 bütün diqqət və şeyi edə bilməz. 990 00:53:56,000 --> 00:54:00,000 Hatalar hər hansı bir sayı izah, lakin bu mümkün bugs arasında edilə bilər 991 00:54:00,000 --> 00:54:03,000 şeyi yaddaş sızıntıları deyilir vasitəsi proqram ki, parça yazan kimsə 992 00:54:03,000 --> 00:54:07,000 pulsuz yaddaş unutmayın etməyib istifadə etdiyiniz 993 00:54:07,000 --> 00:54:10,000 o üçün əməliyyat sistemi xahiş etdi ki, 994 00:54:10,000 --> 00:54:14,000 bir CS50 şey, çünki GetString istifadə edərək, lakin oxşar funksiyaları istifadə 995 00:54:14,000 --> 00:54:16,000 yaddaş üçün əməliyyat sistemi xahiş edir. 996 00:54:16,000 --> 00:54:19,000 Siz və ya onlar qıymaq və əgər həqiqətən ki, yaddaş qayıtmaq heç 997 00:54:19,000 --> 00:54:24,000 bir proqram yavaşlatır və yavaşlatır və aşağı yavaşlatır ki, ola bilər ki, bir simptom 998 00:54:24,000 --> 00:54:26,000 pulsuz zəng unutmayın halda. 999 00:54:26,000 --> 00:54:28,000 >> Zaman niyə pulsuz zəng ki, Biz qayıda bilərsiniz 1000 00:54:28,000 --> 00:54:32,000 amma yalnız yaxşı tədbir üçün irəli getmək və bu proqram çalışan edək. 1001 00:54:32,000 --> 00:54:35,000 Bu structs1 adlanırdı daxil edin. 1002 00:54:35,000 --> 00:54:40,000 David Mather, mənə irəli getmək və structs1 run 123 edək 1003 00:54:40,000 --> 00:54:47,000 456, Rob Kirkland, 789, 1004 00:54:47,000 --> 00:54:50,000 Tommy Mather, biz Mather ildə David görmək, Tommy nin Mather edir. 1005 00:54:50,000 --> 00:54:53,000 Bu proqram iş ki, bir az ağlı başında olma çek edir. 1006 00:54:53,000 --> 00:54:56,000 İndi təəssüf ki, bu proqram ki, bir az sinir bozucu deyil 1007 00:54:56,000 --> 00:55:00,000 Mən 9 müxtəlif strings bütün iş tipli idi, daxil edib 1008 00:55:00,000 --> 00:55:04,000 Mather olmuş bildirib ki, hələ aydın Mən bu tipli çünki artıq Mather olmuş bilirdi edilmişdir. 1009 00:55:04,000 --> 00:55:07,000 Bu proqram daha bir verilənlər bazası kimi, əgər ən azı gözəl olardı 1010 00:55:07,000 --> 00:55:10,000 və həqiqətən mən yazdığınız nə xatırlayır 1011 00:55:10,000 --> 00:55:12,000 Mən yenidən daxil bu tələbə qeydlər heç vaxt. 1012 00:55:12,000 --> 00:55:15,000 Bəlkə bir registrarial sistem kimi. 1013 00:55:15,000 --> 00:55:21,000 >> Biz, fayl I / O, fayl giriş və çıxış kimi tanınan bu texnika istifadə edərək, yapabilirsiniz 1014 00:55:21,000 --> 00:55:24,000 faylları oxumaq və ya faylları yazmaq üçün istənilən vaxt deyərək bir çox ümumi şəkildə 1015 00:55:24,000 --> 00:55:26,000 siz funksiyaları müəyyən bir dəsti ilə bunu edə bilərsiniz. 1016 00:55:26,000 --> 00:55:29,000 Mənə davam və bu misal structs2.c açıq etsin, 1017 00:55:29,000 --> 00:55:33,000 olan demək olar ki, eynidir, lakin indi nə görmək edək. 1018 00:55:33,000 --> 00:55:36,000 Fayl üst Mən tələbə sinif bəyan edir. 1019 00:55:36,000 --> 00:55:38,000 Mən sonra, istifadəçi girişi ilə sinif yaşayır 1020 00:55:38,000 --> 00:55:41,000 belə kodu həmin xətləri dəqiq əvvəl istərdik olunur. 1021 00:55:41,000 --> 00:55:45,000 Mather olan hər kəs özbaşına əvvəl istəyirəm ki, burada aşağı diyirləyin əgər Sonra çap 1022 00:55:45,000 --> 00:55:47,000 lakin bu maraqlı yeni xüsusiyyət. 1023 00:55:47,000 --> 00:55:51,000 Kod Bu xətlər yeni, onlar burada bir şey təqdim 1024 00:55:51,000 --> 00:55:55,000 Resim, bütün caps, və həmçinin burada * malikdir. 1025 00:55:55,000 --> 00:55:58,000 Mənə həm burada, buraya bir * Bu hərəkət edək. 1026 00:55:58,000 --> 00:56:00,000 >> Bu funksiya biz əvvəl görməmişəm, fopen, 1027 00:56:00,000 --> 00:56:03,000 lakin açıq fayl deməkdir, belə ki, bu yolu nin üzsüz edək, 1028 00:56:03,000 --> 00:56:05,000 və bu, gələcəkdə psets ilə qayıtmaq lazımdır şey 1029 00:56:05,000 --> 00:56:10,000 amma burada bu xətt mahiyyətcə, verilənlər bazası adlı fayl açılır 1030 00:56:10,000 --> 00:56:13,000 və xüsusi o nə edə bilər ki, belə bir şəkildə açılır? 1031 00:56:13,000 --> 00:56:15,000 [Işitilemez-tələbə] 1032 00:56:15,000 --> 00:56:19,000 Sağ, belə ki, "w" yalnız əməliyyat sistemi izah edir deməkdir 1033 00:56:19,000 --> 00:56:21,000 Mən bunu yazmaq olar ki, belə bir şəkildə bu faylı açın. 1034 00:56:21,000 --> 00:56:23,000 Mən oxumaq istəmirəm. Mən yalnız baxmaq istəmirəm. 1035 00:56:23,000 --> 00:56:26,000 Bunu dəyişdirmək və potensial stuff əlavə etmək istədiyiniz 1036 00:56:26,000 --> 00:56:28,000 və fayl bazası deyilən olacaq. 1037 00:56:28,000 --> 00:56:30,000 Bu bir şey adlandırmaq olar. 1038 00:56:30,000 --> 00:56:32,000 Bu database.txt ola bilər. Bu. Db ola bilər. 1039 00:56:32,000 --> 00:56:37,000 Bu foo kimi bir söz ola bilər, amma özbaşına fayl bazasında adını seçdi. 1040 00:56:37,000 --> 00:56:42,000 Bu, biz artıq böyük ətraflı qayıda bilərsiniz ki, bir az ağlı başında olma çek edir 1041 00:56:42,000 --> 00:56:47,000 fp, fayl göstərici üçün bərabər NULL deyil ki, əgər bütün yaxşı deməkdir. 1042 00:56:47,000 --> 00:56:51,000 >> Uzun hekayə qısa, fopen kimi funksiyaları bəzən uğursuz. 1043 00:56:51,000 --> 00:56:53,000 Bəlkə fayl mövcud deyil. Bəlkə disk yer bitti. 1044 00:56:53,000 --> 00:56:55,000 Bəlkə, o qovluğa icazə yoxdur 1045 00:56:55,000 --> 00:56:58,000 fopen null bir şey qayıtdıqda əgər pis oldu. 1046 00:56:58,000 --> 00:57:02,000 Fopen null qayıtmaq deyil əgər Əksinə, bütün yaxşı 1047 00:57:02,000 --> 00:57:04,000 və bu fayl yazılı başlaya bilərsiniz. 1048 00:57:04,000 --> 00:57:06,000 Burada yeni oyun var. 1049 00:57:06,000 --> 00:57:08,000 Bu, mənim tələbə hər üzərində iterating olan bir loop üçün deyil 1050 00:57:08,000 --> 00:57:10,000 və bu, biz əvvəl etdiyiniz nə qədər benzer 1051 00:57:10,000 --> 00:57:15,000 lakin bu funksiya, printf printf fayl üçün fprintf adlı bir cousin edir 1052 00:57:15,000 --> 00:57:18,000 və yalnız 2 yolla fərqli görürük. 1053 00:57:18,000 --> 00:57:20,000 Biri, o, yerinə p e ilə başlayır 1054 00:57:20,000 --> 00:57:23,000 lakin sonra ilk mübahisə yəqin nədir? 1055 00:57:23,000 --> 00:57:25,000 [Tələbələr] Faylın. >> Bu fayl var. 1056 00:57:25,000 --> 00:57:30,000 Biz nəhayət bir fayl göstərici nə ayrı tease bilərsiniz fp adlanan bu şey, 1057 00:57:30,000 --> 00:57:35,000 lakin indi fp sadəcə, mən açılmışdır ki, fayl təmsil 1058 00:57:35,000 --> 00:57:41,000 belə fprintf burada, fayl bu istifadəçi ID çap deyil ekran deyib. 1059 00:57:41,000 --> 00:57:44,000 Fayl üçün istifadəçi adı deyil, ekran, çap 1060 00:57:44,000 --> 00:57:47,000 fayl deyil, təbii ki, aşağı burada sonra ekrana və ev 1061 00:57:47,000 --> 00:57:50,000 fayl bağlayın və sonra aşağı burada yaddaş pulsuz. 1062 00:57:50,000 --> 00:57:53,000 >> Bu versiya 2 və version 1 arasında yeganə fərq 1063 00:57:53,000 --> 00:57:58,000 fopen tətbiqi və * Bu fayl 1064 00:57:58,000 --> 00:58:01,000 və fprintf bu anlayış, belə ki, son nəticə nə nın görmək bildirin. 1065 00:58:01,000 --> 00:58:03,000 Mənim terminal pəncərə daxil edək. 1066 00:58:03,000 --> 00:58:06,000 Daxil edin, mənə structs2 run edək. 1067 00:58:06,000 --> 00:58:09,000 Bütün yaxşı kimi görünür. Nin structs2 təkrar edək. 1068 00:58:09,000 --> 00:58:15,000 123, David Mather, 456, Rob Kirkland, 1069 00:58:15,000 --> 00:58:19,000 789, Tommy Mather daxil edin. 1070 00:58:19,000 --> 00:58:23,000 Eyni hərəkət kimi görünür, amma indi ls əgər 1071 00:58:23,000 --> 00:58:28,000 bütün kodu arasında burada nə fayl qeyd, verilənlər bazası, 1072 00:58:28,000 --> 00:58:32,000 belə ki, o, verilənlər bazası gedit, və göz açmağa imkan verir. 1073 00:58:32,000 --> 00:58:34,000 Bu fayl formatları və sexiest deyil. 1074 00:58:34,000 --> 00:58:38,000 Bu, həqiqətən, satır başına satıra data xəttinin bir parça 1075 00:58:38,000 --> 00:58:42,000 lakin Excel və ya CSV faylları istifadə edən sizin, vergül, dəyərlər ayrılmış 1076 00:58:42,000 --> 00:58:47,000 Mən əlbəttə əvəzinə bəlkə bu kimi bir şey fprintf istifadə edə 1077 00:58:47,000 --> 00:58:50,000 Mən, həqiqətən, bir Excel fayl ekvivalent yarada bilər ki, 1078 00:58:50,000 --> 00:58:53,000 vergülləri, yalnız yeni xətləri ilə şeyi ayıraraq. 1079 00:58:53,000 --> 00:58:56,000 >> Bu halda mən əvəzinə vergülləri yerinə yeni xətlər istifadə əgər 1080 00:58:56,000 --> 00:59:01,000 Mən əvəzinə bu kimi baxmaq etdi, mən sözün Excel Bu verilənlər bazası faylı aça bilər. 1081 00:59:01,000 --> 00:59:03,000 Bir sözlə, indi biz faylları yazmaq üçün güc var ki, 1082 00:59:03,000 --> 00:59:07,000 İndi disk haqqında ətrafında saxlanılması, davam data başlaya bilərsiniz 1083 00:59:07,000 --> 00:59:10,000 biz təkrar ətrafında məlumat saxlaya bilərsiniz ki. 1084 00:59:10,000 --> 00:59:14,000 İndi bir az daha çox tanış olan digər şeyi bir neçə edək. 1085 00:59:14,000 --> 00:59:16,000 Bu C fayl üst bir typedef var 1086 00:59:16,000 --> 00:59:21,000 biz bir söz təmsil bir veri növü yaratmaq istəyirdi, çünki 1087 00:59:21,000 --> 00:59:25,000 bu cür söz deyilir ki, və daxilində bu quruluşu 1088 00:59:25,000 --> 00:59:27,000 İndi bir az meraklısı var. 1089 00:59:27,000 --> 00:59:30,000 Niyə söz yəqin bir sıra ibarətdir? 1090 00:59:30,000 --> 00:59:33,000 Yalnız daxilən bir söz nədir? 1091 00:59:33,000 --> 00:59:35,000 >> Bu simvol bir sıra var. 1092 00:59:35,000 --> 00:59:37,000 Bu geri geri geri simvol bir ardıcıllıqla deyil. 1093 00:59:37,000 --> 00:59:41,000 Bütün caps ildə MƏKTUBLARI biz özbaşına demək olur maksimum uzunluğu 1094 00:59:41,000 --> 00:59:44,000 biz dırmaşma üçün istifadə etdiyiniz lüğət hər hansı bir sözü. 1095 00:59:44,000 --> 00:59:46,000 Neden +1 var? 1096 00:59:46,000 --> 00:59:48,000 Bu null character. 1097 00:59:48,000 --> 00:59:51,000 Biz Bananagrams misal idi, biz xüsusi bir dəyər lazım Xatırladaq 1098 00:59:51,000 --> 00:59:55,000 izlemek üçün sözün sonunda üçün 1099 00:59:55,000 --> 00:59:59,000 problem set dəqiqləşdirilməsi deyir sözlər həqiqətən sona çatdı yerləşir, və kimi 1100 00:59:59,000 --> 01:00:03,000 burada biz bir sözü ilə boolean dəyər şərik edirik 1101 01:00:03,000 --> 01:00:05,000 bir bayraq ki, doğru və ya yalan danışmaq. 1102 01:00:05,000 --> 01:00:09,000 Biz həyata çünki siz artıq bu söz gördük 1103 01:00:09,000 --> 01:00:13,000 biz həqiqətən xatırlayaraq yolu lazım deyil yalnız dırmaşma söz nə 1104 01:00:13,000 --> 01:00:15,000 lakin siz və ya, insan, onu aşkar 1105 01:00:15,000 --> 01:00:20,000 tapa əgər sözü "və" yalnız yazın deyil ki, daxil edin,, daxil edin, daxil 1106 01:00:20,000 --> 01:00:23,000 və 3 xal, 3 xal, 3 xal, 3 xal almaq. 1107 01:00:23,000 --> 01:00:26,000 Biz bool yaradılması söz kara etmək istəyirəm 1108 01:00:26,000 --> 01:00:29,000 siz artıq gördük əgər niyə doğru və ki, biz var 1109 01:00:29,000 --> 01:00:31,000 bu quruluş bu encapsulated. 1110 01:00:31,000 --> 01:00:35,000 >> İndi aşağı burada Scramble lüğət adlı digər struct var. 1111 01:00:35,000 --> 01:00:39,000 Burada yoxdur typedef sözü, çünki bu halda 1112 01:00:39,000 --> 01:00:43,000 biz bir lüğət ideyası içine üçün lazım 1113 01:00:43,000 --> 01:00:46,000 və lüğət sözləri bütün dəstə şey 1114 01:00:46,000 --> 01:00:49,000 Bu array nəzərdə tutulmuş və necə bu sözləri çox var? 1115 01:00:49,000 --> 01:00:51,000 Bəli, bu dəyişən adlı ölçüsü deyir nə. 1116 01:00:51,000 --> 01:00:53,000 Amma biz yalnız bir lüğət lazımdır. 1117 01:00:53,000 --> 01:00:55,000 Biz lüğət adlı data type ehtiyac yoxdur. 1118 01:00:55,000 --> 01:00:58,000 Biz yalnız onlardan biri lazımdır, belə ki, C çıxır 1119 01:00:58,000 --> 01:01:03,000 siz typedef demək deyil əgər, yalnız struct deyirlər ki, sonra qıvrım aşırma daxili 1120 01:01:03,000 --> 01:01:05,000 Siz ad qoymaq, sonra dəyişənlər qoydu. 1121 01:01:05,000 --> 01:01:09,000 Bu dəyişən adlı lüğət elan edir 1122 01:01:09,000 --> 01:01:11,000 Bu kimi görünür. 1123 01:01:11,000 --> 01:01:16,000 Əksinə, bu sətirləri söz adlı reusable data strukturu yaradır 1124 01:01:16,000 --> 01:01:19,000 biz yaratdığı kimi, siz birdən çox kopyasını yaratmaq bilər ki, 1125 01:01:19,000 --> 01:01:22,000 tələbələrin çox surətləri. 1126 01:01:22,000 --> 01:01:24,000 >> Bu, son nəticədə bizə nə imkan vermir? 1127 01:01:24,000 --> 01:01:30,000 Mənə asan dəfə isə demək asan Məsələn, qoy geri gedək, 1128 01:01:30,000 --> 01:01:34,000 və compare1.c, deyək, mənə açmaq bildirin. 1129 01:01:34,000 --> 01:01:38,000 Əl Burada problem həqiqətən geri peel edir 1130 01:01:38,000 --> 01:01:41,000 bir simli qat və bu təlim təkərlər off alaraq başlamaq 1131 01:01:41,000 --> 01:01:44,000 bir string bütün bu dəfə çıxır, çünki 1132 01:01:44,000 --> 01:01:47,000 biz həqiqətən həftə 1-ci bir ləqəb söz kimi deyil, 1133 01:01:47,000 --> 01:01:51,000 sinonimi bir az daha sirli görünür ki, bir şey üçün CS50 kitabxana, 1134 01:01:51,000 --> 01:01:53,000 char *, və biz əvvəl bu ulduz gördüm. 1135 01:01:53,000 --> 01:01:55,000 Biz faylları kontekstində o gördüm. 1136 01:01:55,000 --> 01:01:59,000 >> İndi bir müddət bu detal gizlətmək olduğunuz niyə indi bax edək. 1137 01:01:59,000 --> 01:02:02,000 Burada compare1.c adlı fayl edir 1138 01:02:02,000 --> 01:02:07,000 və yəqin, s t, 2 strings üçün istifadəçi soruşur 1139 01:02:07,000 --> 01:02:11,000 sonra, line 26 bərabərlik həmin strings müqayisə etməyə çalışır 1140 01:02:11,000 --> 01:02:14,000 onlar deyir bərabər edirsinizsə və "Siz, eyni şey tipli" 1141 01:02:14,000 --> 01:02:17,000 və onlar bərabər deyilik əgər "Siz müxtəlif şeyləri yazılmış." deyir 1142 01:02:17,000 --> 01:02:19,000 Mənə davam və bu proqram run edək. 1143 01:02:19,000 --> 01:02:23,000 Mənim mənbə qovluğuna girin ki, bir compare1 edir. Tamam tərtib. 1144 01:02:23,000 --> 01:02:25,000 Mənə compare1 run edək. 1145 01:02:25,000 --> 01:02:27,000 Mən zoom daxil olacaq. 1146 01:02:27,000 --> 01:02:29,000 Bir şey söyləyin. HELLO. 1147 01:02:29,000 --> 01:02:32,000 Mən bir şey demək lazımdır. HELLO. 1148 01:02:32,000 --> 01:02:34,000 Mən mütləq fərqli şeylər yazın vermədi. 1149 01:02:34,000 --> 01:02:37,000 >> Sizi bir daha bu cəhd edək. Bye Bye. 1150 01:02:37,000 --> 01:02:40,000 Əlbəttə müxtəlif deyil, burada neler belə? 1151 01:02:40,000 --> 01:02:44,000 Yaxşı, həqiqətən line 26-nə nisbətən olunur? 1152 01:02:44,000 --> 01:02:46,000 [Işitilemez-tələbə] 1153 01:02:46,000 --> 01:02:49,000 Bəli, belə bir simli, data növü, ağ yalan cür olduğunu çıxır. 1154 01:02:49,000 --> 01:02:53,000 Simli a char * deyil, char * nədir? 1155 01:02:53,000 --> 01:02:56,000 A char *, necə deyərlər, bir göstəricisidir 1156 01:02:56,000 --> 01:03:00,000 və bir pointer, səmərəli bir ünvan 1157 01:03:00,000 --> 01:03:05,000 məbləğində yaddaş yeri, və HELLO kimi bir sözlə yazdığınız nə varsa, 1158 01:03:05,000 --> 01:03:08,000 strings keçmiş müzakirələr geri 1159 01:03:08,000 --> 01:03:16,000 bu sözü kimi HELLO edir. 1160 01:03:16,000 --> 01:03:19,000 HELLO kimi bir söz təmsil unutmayın 1161 01:03:19,000 --> 01:03:22,000 bu kimi simvol bir sıra kimi 1162 01:03:22,000 --> 01:03:25,000 və sonra sonunda xüsusi xarakter ilə null xarakter adlı 1163 01:03:25,000 --> 01:03:27,000 olan \ işarə kimi. 1164 01:03:27,000 --> 01:03:29,000 Simli əslində nədir? 1165 01:03:29,000 --> 01:03:32,000 Bu yaddaş çox chunks Qeyd edək ki, 1166 01:03:32,000 --> 01:03:36,000 Siz bütün simli baxmaq dəfə və əslində, bu, sonunda yalnız məlumdur 1167 01:03:36,000 --> 01:03:38,000 xüsusi null xarakter axtarır. 1168 01:03:38,000 --> 01:03:41,000 Amma bu mənim kompüter yaddaş yaddaş yığın olduqda, 1169 01:03:41,000 --> 01:03:44,000 Gəlin özbaşına bu simli yalnız uğurlu var, deyirlər ki, 1170 01:03:44,000 --> 01:03:47,000 və mənim kompüter RAM əvvəldən yerləşdirilmiş olmuşlar. 1171 01:03:47,000 --> 01:03:54,000 Bu byte 0, 1, 2, 3, 4, 5, 6 ... 1172 01:03:54,000 --> 01:04:02,000 >> Mən GetString kimi bir şey demək və mən simli s = GetString nə zaman 1173 01:04:02,000 --> 01:04:04,000 həqiqətən nə geri var? 1174 01:04:04,000 --> 01:04:08,000 Bu son bir neçə həftə üçün nə həqiqətən s saxlanılır alındığını 1175 01:04:08,000 --> 01:04:13,000 özlüyündə bu simli deyil, bu halda nə saxlanılır alındığını edir 1176 01:04:13,000 --> 01:04:18,000 GetString həqiqətən nə çünki sayı 0 1177 01:04:18,000 --> 01:04:20,000 fiziki bir string geri deyil olunur. 1178 01:04:20,000 --> 01:04:22,000 Bu da həqiqətən konseptual mənada etmir. 1179 01:04:22,000 --> 01:04:24,000 O geri bir sayı nə. 1180 01:04:24,000 --> 01:04:28,000 Bu sayı, yaddaş HELLO və ünvanı 1181 01:04:28,000 --> 01:04:32,000 və simli s, sonra biz geri peel bu qat, simli həqiqətən mövcud deyil əgər. 1182 01:04:32,000 --> 01:04:35,000 Yalnız CS50 kitabxana bir sadələşdirmə var. 1183 01:04:35,000 --> 01:04:38,000 >> Bu, həqiqətən, char * adlı bir şeydir. 1184 01:04:38,000 --> 01:04:41,000 Nə HELLO kimi, bir sözlə, çünki Char mənada edir? 1185 01:04:41,000 --> 01:04:44,000 Bəli, bu chars bir sıra simvol bir sıra var. 1186 01:04:44,000 --> 01:04:47,000 Char *, bir xarakterli ünvanı mə'nasını 1187 01:04:47,000 --> 01:04:50,000 belə nə bir string qayıtmaq deməkdir? 1188 01:04:50,000 --> 01:04:53,000 Simli qaytarılması gözəl, sadə yol 1189 01:04:53,000 --> 01:04:57,000 deyil deyil, mən 5 və ya 6 müxtəlif bytes qayıtmaq necə anlamaq üçün cəhd 1190 01:04:57,000 --> 01:05:01,000 mənə olan byte üçün ünvan geri edək? 1191 01:05:01,000 --> 01:05:03,000 İlk. 1192 01:05:03,000 --> 01:05:06,000 Başqa sözlə, mənə xatirəsinə xarakterli ünvan verək. 1193 01:05:06,000 --> 01:05:10,000 Yəni, char * təmsil nə yaddaşında bir xarakterli ünvan var. 1194 01:05:10,000 --> 01:05:12,000 Dəyişən s zəng. 1195 01:05:12,000 --> 01:05:15,000 Mən özbaşına etdiyi xüsusi ünvanı, 0 olduğunu s Store, 1196 01:05:15,000 --> 01:05:19,000 yalnız şeyə sadə saxlamaq üçün, lakin əslində ümumiyyətlə böyük bir sıra. 1197 01:05:19,000 --> 01:05:21,000 >> Bir dəqiqə gözləyin. 1198 01:05:21,000 --> 01:05:23,000 Yalnız mənə ilk xarakterli ünvan verilməsi istəyirsinizsə, necə ünvan nə bilirik 1199 01:05:23,000 --> 01:05:25,000 İkinci xarakteri, üçüncü, dördüncü və beşinci? 1200 01:05:25,000 --> 01:05:27,000 [Işitilemez-tələbə] 1201 01:05:27,000 --> 01:05:31,000 Simli sonunda bu lazımlı oyun yolu ilə olduğu Siz yalnız bilirəm 1202 01:05:31,000 --> 01:05:35,000 siz kimi printf bir şey istifadə edərkən, nə printf sözün, onun dəlil kimi görür 1203 01:05:35,000 --> 01:05:39,000 biz bu% s tutucu istifadə Xatırladaq ki, sonra keçmək 1204 01:05:39,000 --> 01:05:41,000 simli saxlanılması olan dəyişən. 1205 01:05:41,000 --> 01:05:47,000 Ne həqiqətən keçən etdiyiniz simli ilk xarakterli ünvan. 1206 01:05:47,000 --> 01:05:50,000 Printf sonra ki, ünvan aldıqdan sonra loop və ya bir müddət loop üçün istifadə 1207 01:05:50,000 --> 01:05:53,000 Misal üçün, 0, belə ki, mənə indi bunu bildirin 1208 01:05:53,000 --> 01:06:02,000 printf ("% s \ n" s); 1209 01:06:02,000 --> 01:06:07,000 Mən zəng zaman printf ("% s \ n" s); nə mən, həqiqətən, ilə printf təmin alıram 1210 01:06:07,000 --> 01:06:13,000 bu ixtiyari halda H. olan s ilk xarakterli ünvan olduğunu, 1211 01:06:13,000 --> 01:06:16,000 >> Necə printf ekranda göstərmək üçün dəqiq nə bilir? 1212 01:06:16,000 --> 01:06:19,000 Həyata keçirən şəxs printf loop üçün bir müddət loop və ya həyata 1213 01:06:19,000 --> 01:06:23,000 bu xarakterli xüsusi null xarakter bərabər olduğunu deyir? 1214 01:06:23,000 --> 01:06:25,000 Əgər, o, çap. Bu necə biri? 1215 01:06:25,000 --> 01:06:28,000 Çap deyilsə, yazdırın, çap, çap. 1216 01:06:28,000 --> 01:06:32,000 Oh, bu bir xüsusi edir. Çap Stop və istifadəçi qayıt. 1217 01:06:32,000 --> 01:06:35,000 Və ki, sanki başlıq altında baş edilmişdir ki, bütün 1218 01:06:35,000 --> 01:06:38,000 və ki, bir sinif ilk günündə həzm çox çox 1219 01:06:38,000 --> 01:06:43,000 lakin indi həqiqətən anlaşma hər şey binasında blok var 1220 01:06:43,000 --> 01:06:46,000 ki, bizim kompüter yaddaş daxilində davam edir 1221 01:06:46,000 --> 01:06:49,000 və nəhayət bir az köməyi ilə bu ayrı dolaşmaq lazımdır 1222 01:06:49,000 --> 01:06:51,000 Stanford dostlarımızın biri. 1223 01:06:51,000 --> 01:06:56,000 >> Stanford professor Nick Parlante bu gözəl video ardıcıllıqla həyata 1224 01:06:56,000 --> 01:06:58,000 təqdim edən müxtəlif dillərdə bütün növ olan 1225 01:06:58,000 --> 01:07:00,000 Bu kiçik Claymation xarakter Binky. 1226 01:07:00,000 --> 01:07:03,000 Bir neçə ikinci sneak preview ilə eşitmək üzeresiniz Səs 1227 01:07:03,000 --> 01:07:05,000 Stanford professor ki, siz əldə etdiyiniz 1228 01:07:05,000 --> 01:07:07,000 Bu hüquq yalnız 5 və ya 6 seconds indi, 1229 01:07:07,000 --> 01:07:09,000 lakin bu gün biz bağlamaq lazımdır hansı qeyd 1230 01:07:09,000 --> 01:07:11,000 və Çərşənbə günü başlayacaq. 1231 01:07:11,000 --> 01:07:15,000 Mən sizə Binky, önizleme ilə Pointer Fun verir. 1232 01:07:15,000 --> 01:07:18,000 [♪ ♪ Musiqi] [Professor Parlante] Hey, Binky. 1233 01:07:18,000 --> 01:07:21,000 Uyan. Bu göstərici əyləncə üçün vaxt var. 1234 01:07:21,000 --> 01:07:24,000 [Binky] Nə olub? Göstəricilər haqqında məlumat əldə edin? 1235 01:07:24,000 --> 01:07:26,000 Oh, goody! 1236 01:07:26,000 --> 01:07:29,000 >> Biz Çərşənbə günü görəcəksiniz. 1237 01:07:29,000 --> 01:07:32,000 [CS50.TV]