[Powered by Google Translate] [Həftə 4] [David J. Malan] [Harvard Universiteti] [Bu CS50 edir.] [CS50.TV] , Bütün sağ, bu CS50, bu həftə 4 başlanğıc və bu yavaş mümkün çeşidlənməsi alqoritmlərin biridir. Hansı ki, biz orada izlədim ki, idi? Bu, (n ^ 2) + məbləğin böyük Ey üçün bubble sırala idi və həqiqətən biz bilirik görünür bu dünyada yeganə deyildir nə bubble növ və ya öz çalışan zaman. Həqiqətən, bu Google Eric Schmidt ilə müsahibə idi və keçmiş senator Barak Obama yalnız bir neçə il əvvəl. İndi, senator Google burada edirik və mən bir iş müsahibə kimi prezidentliyə düşünmək istəyirəm. İndi prezident kimi bir iş əldə etmək çətindir və siz indi rigors ilə olacaq. Google bir iş üçün də çətindir. Biz sualınız və biz namizədlərin sual və bu Larry Schwimmer edir. Siz uşaqlar I söylüyorum deyiləm mi? Bu sağ burada. Bir milyon 32-bit integers düzmək üçün ən səmərəli yol nədir? [Gülüş] Yaxşı Üzgünüm. >> Heç, heç, heç, No. Mən bubble sırala getmək üçün səhv yol olardı. Ona izah edən Hadi,? Ötən həftə biz ən azı bir gün üçün kod bir fasilə etdi geri və ümumiyyətlə həlli bəzi yüksək səviyyəli fikir və problem diqqət açılmış axtarış və çeşidlənməsi kontekstində, və biz ötən həftə bu adı sillə ki, bir şey təqdim lakin asimptotik notation, Böyük O, Böyük Omega, və bəzən Böyük Theta notation, bu sadəcə yolları idi alqoritmlərin çalışan zaman izah, çalıştırmak üçün bir alqoritmi üçün edir nə qədər vaxt. Və siz ölçüsü baxımından çalışan zaman danışdı Xatırladaq bilər biz ümumiyyətlə problem ola bilər nə olursa olsun, n adlandırdığımız giriş, və, Ü n, oda insanların sayı bir telefon kitab pages sayı, və biz hər şeyi yazmaq başladı O kimi (n ^ 2) və ya O (n) və ya O (n log n) və riyaziyyat çox belə mükəmməl iş vermədi hətta və n idi ² - n / 2 və ya kimi bir şey biz yerine, aşağı üçün bəzi terimler tullamaq ki, və motivasiya biz həqiqətən istəyirik ki, var qiymətləndirilməsi obyektiv şəkildə sort proqramlarının icrası və ya alqoritmləri icra gün sonunda, məsələn, heç bir əlaqəsi yoxdur kompüter sürəti bu gün. Məsələn, bubble sırala həyata əgər, və ya, bu gün kompüter sort və ya seçim cür birləşməsi həyata 2 GHz kompüter və siz çalıştırın və bu 3 GHz var gələn il, saniyə, bəzi sıra edir və ya 4 GHz kompüter, və sonra ki, "Wow, mənim alqoritm iddia bilər əslində o halda aydın deyil zaman ", iki dəfə sürətli kimi indi. Bu, yalnız hardware daha sürətli əldə etmişdir, lakin kompüter , və biz, həqiqətən, kimi şeylər üz atmaq istəyirəm deyil 2 Multiples və ya 3-Multiples xarakterizə gəldiyi zaman necə sürətli və ya yavaş necə bir alqoritm və həqiqətən yalnız diqqət n və ya onların bir amil haqqında bəzi güc onların keçən həftə gələn növ olduğu kimi. Və birləşmə cür köməyi ilə geri biz bubble sort və seleksiya sort çox daha yaxşı edə və hətta durub sort. Biz yenə n log n aşağı olmuş, log n adətən artır ki, bir şey deməkdir ki, geri daha yavaş-yavaş sonra n, belə n log n bu günə qədər yaxşı idi o n ²-dən az idi. Amma birləşmə sort ilə n nail olmaq n daxil biz leverage olduğunu bir fikir əsas bakterioloji nə idi biz də həftə 0 geri leveraged ki? Necə birləşmə sort ilə ağılla çeşidlənməsi problem həll etdiniz? Bəlkə, əsas fikir nə idi? Hər kəs bütün. OK, geri addım götürək. Öz sözləri sort daxil tanımlayın. Necə iş idi? OK, biz həftə 0 geri Satırı lazımdır. Okay, evet. [Işitilemez-tələbə] Yaxşı, Okay, biz 2 ədəd nömrələri array bölünür. Biz bu ədəd hər çeşidlənir, sonra biz onlara birləşdi bu böyük ki, bir problem alaraq əvvəl və biz bu ideya gördüm və bu böyük və ya bu böyük ki, bir problem onu ​​Doğrama. Telefon kitab Məsələn xatırlayıram. Əvvəl həftə özünü hesablanması alqoritmi Xatırladaq belə daxil sort burada bu pseudocode ilə xülasə edilmişdir. Siz n elementləri verilmiş olduğunuzda, ilk ağlı başında olma kontrol idi. N <2 sonra bütün bir şey deyilsə n <2 sonra n açıq-aydın 0 və ya 1 əgər çünki, bu da varsa və bu 0 və ya 1 düzmək üçün heç bir şey yoxdur. Siz tamamlayın. Sizin siyahısı artıq trivially çeşidlənir. Amma 2 və ya daha çox elementləri var başqa əgər irəli getmək və onları bölmək 2 yarıya indirir daxil, sol və sağ. O yarıya indirir hər bir sort, sonra sıralanır yarıya indirir daxil. Amma burada problem biz punting etdiyiniz kimi ilk baxışda bu hiss edir. Bu n elementləri düzmək üçün siz xahiş etdik, bu ki, bir dairəvi tərifi 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 sonra növbəti sual olacaq "necə n / 2 elementlər sort yoxdur, Fine?" Amma bu proqramın strukturunun, Bu baza halda var, çünki, belə ki, danışmaq n dərhal 2 qaytarılması kimi bəzi əsas dəyər <əgər deyir ki, bu xüsusi halda. Həmin dairəvi cavab cavab etməyin. Bu proses bu cyclicity nəhayət başa çatacaq. Mən "Sort bu n elementləri," xahiş və siz demək Əgər "Fine, bu n / 2 sort" sonra "Fine, sort bu n / 4, n / 8, n/16" demək nəticədə bir böyük kifayət sayda bölmək lazımdır siz deyə bilərsiniz hansı nöqtədə yalnız 1 element sol lazımdır ki, "Burada, burada bir sıralaması bir element deyil." Sonra bu alqoritm və parıltı qədər burada fakt əldə etmək bir bu fərdi sıralanır siyahıları bütün, yararsız görünür ölçüsü 1, olan bütün siz onlara birləşdirilməsi və onların birləşmə başlamaq dəfə Rob video bir nəhayət sıralanır siyahısı kimi nəhayət qurmaq. Amma bu ideya uzaq çeşidlənməsi kənarda uzanır. Recursion kimi tanınan bu proqram katıştırılmış bu ideya var Bir proqramı vasitəsi fikir və özünüz zəng bir problemi həll etmək, və ya, bir funksiyası var proqramlaşdırma dilləri kontekstində qoymaq və problem həll etmək üçün, siz özünüz zəng funksiyası təkrar və yenidən, ancaq funksiyası özünüzü sonsuz dəfələrlə zəng edə bilməz. Nəhayət, siz belə danışmaq, alt həyata var və deyir ki, bəzi ağır kodlu baza vəziyyət Bu baxımdan belə özünüz zəng dayandırmaq ki, bütün prosesi nəhayət əslində dayandırmaq deyil. Bu, həqiqətən recurse üçün nə deməkdir? Biz demək, bir sadə, əhəmiyyətsiz misal edə bilərsiniz, əgər Bakalým Qədər burada səhnəyə mənə 3 nəfər, kimsə rahat olsun. Qədər, 2 və 3 1, gəlir. Siz 3 Burada gəlmək istəyirsinizsə. Bir line burada mənə doğru növbəti durmaq istəyirsinizsə, güman ki, əl-da problem çox trivially burada olan insanların sayını olunur. Amma səmimi, mən bütün bu sayılması nümunələri yorğun edirəm. Bu, bəzi vaxt, 1, 2, və nöqtə, nöqtə, nöqtə almaq niyyətindədir. Bu əbədi etmək olacaq. Mən yalnız köməyi ilə cəmi ayaqla zərbə bu problemin-nə adı var? Deyil had Sara. >> Sara, bütün hüququ. Kelly. >> Kelly və? Willy. >> Willy, Sara, Kelly və Willy. İndi kimsə tərəfindən sual edilmişdir necə bir çox insanlar bu mərhələ üzrə və mən heç bir fikrim yoxdur. Bu, həqiqətən uzun siyahısı və s əvəzinə mən bu oyun etmək üçün gedirəm. Mən iş çox etmək mənə yanındakı adam xahiş gedirəm və bir o işin ən etdiklərini edilir Mən mümkün iş ən az miqdarı nə və yalnız 1 əlavə alıram , belə ki, burada biz getmək nə olursa olsun öz cavab. I mərhələdə necə bir çox insanlar xahiş etdik. Necə bir çox insanlar sizin sol mərhələsindədir? Bu Okay >>? Mənim sol, amma fırıldaqçı deyil. Doğru ki, yaxşı, amma biz bu məntiq davam etmək istəyirsinizsə, siz eyni sizin sol ayaqla zərbə bu problem istəyirəm ki, fərz edək, belə deyil, cavab çox birbaşa irəli getmək və yalnız buck keçir. Oh, mənim sol neçə nəfər var? Sol neçə nəfər var? 1. [Gülüş] OK, belə ki, 0, belə nə indi Willy görmüşdür Siz cavab 0 deyərək bu istiqamətdə geri etdik edir. İndi nə etməliyəm? >> 1. OK, belə ki, 1-istəyirik, belə demək, "Bütün sağ, 1 əlavə gedirəm hər hansı Willy-nin sayı idi "belə 1 + 0. Sağ cavab belə İndi 1 etdiyiniz indi- 1. >> Və mina 2 olardı. , Belə ki, 1 Əvvəlki cavab Yaxşı qəbul edirik Siz istədiyiniz iş minimal məbləği əlavə edən +1 edir. İndi 2, və sonra mənə olan dəyər əl? 3, I, sorry, 2 deməkdir. Yaxşı. Yaxşı, biz sola 0 idi. , Sonra biz 1 idi, və sonra 2 əlavə və indi, mənə sayı 2 təhvil edirik və mən, 3 +1, tamam dedi alıram. Bu mərhələdə məni yanında daimi 3 nəfər, həqiqətən var biz əlbəttə ki, çox xətti bu edə bilərdi aşkar moda çox, lakin biz həqiqətən nə idi? Biz ilkin ölçüsü 3 problem etmişdir. Biz sonra, ölçüsü 2 problem onu ​​yıxdı sonra ölçüsü 1 problemi, sonra əsas işi nəhayət həqiqətən, oh, heç bir var olan nöqtə Willy, ağır kodlu cavab bir neçə dəfə səmərəli geri və ikinci, sonra qədər bubbled qədər bubbled qədər bubbled edilib və sonra bu əlavə 1-ci əlavə biz recursion bu əsas ideya həyata etdik. İndi, bu halda bu, həqiqətən bir problemi həll etməyib daha səmərəli sonra biz belə uzaq gördüm. Amma bu günə qədər səhnəyə etdik alqoritmlər haqqında düşünürəm. Biz, Kara Tahta barədə kağız 8 ədəd olmuşdur video Sean sayı 7 axtarır və o, həqiqətən nə zaman? Yaxşı, o bölgü hər cür etmək və fəth etməmişdir. O recursion hər cür etmədi. Əksinə o, yalnız bu xətti alqoritm etdi. Amma biz səhnədə sıralanır nömrələri fikir təqdim ötən həftə yaşamaq sonra, orta gedərək bu instinkt var hansı nöqtədə, ölçüsü 4 və ya ölçüsü 4 bir siyahısını kiçik bir siyahısı var idi və sonra eyni problem var idi, belə ki, biz təkrar, təkrar, təkrar. Başqa sözlə, biz recursed. Bizimlə recursion nümayiş etdirmək üçün burada 3 könüllülər üçün çox təşəkkür edirik. İndi bir az daha konkret bu edə bilməz əgər Bakalým, yenə biz olduqca asan nə ola bilər ki, problem həlli, amma bu əsas ideya həyata bir gücləndirməklə daş kimi istifadə edəcəyik. Mən ədəd bir dəstə olan toplama hesablamaq istəyirsinizsə Məsələn, siz sayı 3 keçmək əgər, Mən sizə sigma 3 dəyəri vermək istəyirəm belə 3 məbləğində + 2 + 1 + 0. Mən cavab 6 geri almaq istəyirəm biz bu sigma funksiyası, bu toplama funksiyası həyata olacaq ki, yenidən daxil edir, və sonra toplama qaytarır aşağı 0 ki sayı bütün yolu. Biz, olduqca sadəcə bunu edə bilər? Biz, loop strukturu bir növ bunu edə bilər Mənə davam və bu başlamaq bildirin. Stdio.h daxildir. Burada işləmək üçün mənə əsas daxil özüm almaq edək. Gəlin sigma.c kimi bu edin. Sonra burada getmək gedirəm, və mən, bir int n bəyan gedirəm və mən istifadəçi əməkdaşlıq etmir aşağıdakı gedirəm. Istifadəçi mənə müsbət sayı verilmir baxmayaraq Mənə davam və n = GetInt üçün onlara təklif edək, və mənə nə kimi bir təlimat verək belə printf ("Müsbət tam edin"). Vaxt biz line 14 hit ki, bu kimi nisbətən sadə yalnız bir şey indi n ehtimalla bir müsbət tam var. İndi ilə bir şey edək. Mənə irəli getmək və toplama hesablamaq edək, belə int məbləğ = sigma (n). Sigma yalnız toplama edir, belə ki, mən yalnız meraklısı şəkildə yazılı edirəm. Biz yalnız orada sigma zəng edəcəyik. Bu məbləğ, və indi, nəticə çap gedirəm printf (məbləğ "edib d, \ n%-dir"). Və sonra mən yaxşı tədbir üçün 0 qayıtmaq lazımdır. Biz maraqlı hissəsi istisna olmaqla, bu proqram tələb edir ki, hər şey etdik hansı faktiki sigma funksiyasını həyata keçirilməsidir. Mənə alt burada enmək və mənə funksiyası sigma bəyan qoy edək. Bu tipli tam var ki, dəyişən etmək var və nə data type mən sigma dən ehtimalla qayıtmaq istəyirsiniz? Int, mən line 15-də mənim gözləntiləri uyğun istəyirəm, çünki. Burada məni irəli getmək və bu həyata bildirin olduqca sadə şəkildə. Nin davam və int məbləğ = 0 deyək, və indi burada loop üçün bir az getmək gedirəm ki, bu kimi bir şey demək olacaq edib + = i (; I <= nömrə i + + int i = 0). Və sonra məbləği geri gedirəm. Mən yolları istənilən sayda bu həyata bilər. Mən isə loop istifadə edə bilər. Mən həqiqətən istəyirdi əgər məbləğ dəyişən istifadə atlanır ola bilər lakin qısa, biz yalnız mən əgər axmaq məbləğ 0 olduğunu bəyan edir ki, bir funksiyası var. Sonra, sayı ilə qədər 0-dan iterates və hər iteration bu məbləği cari dəyər verir və sonra məbləğ qaytarılır. İndi burada bir qədər optimallaşdırma var. Bu yəqin ki, bir boşa addımdır, amma belə olmalıdır. Indi üçün gözəl edir. Biz ən azı istəyirik, hərtərəfli olan və üzərində 0 bütün yol gedir. Çox çətin və olduqca sadə deyil, ancaq sigma funksiyası ilə eyni imkanı çıxır ki, biz mərhələdə burada olduğu kimi. Mərhələdə biz yalnız, mənə gələn nə çox insanlar sayılır əvəzində biz sayı 3 + 2 + 1 saymaq istəyirdi aşağı 0 biz bir funksiyası eyni ayaqla zərbə ola bilər Mən əvəzinə recursive kimi təsvir lazımdır ki,. Burada tez ağlı başında olma kontrol və mən axmaq etmədi əmin edə bilərəm bildirin. Mən zülm etdi ki, bu proqram ən azı bir şey var bilirəm. Mən daxil hit zaman mənə böyle hər cür almaq üçün gedirəm? Mən də yelled üçün nə edəcəyəm? Bəli, mən prototip unuttum, mən line 15 sigma adlı funksiyasından istifadə edirəm belə lakin bu xətt 22-dək elan, mən yaxşı fəal burada getmək deyil və bir prototip elan və mən int sigma (int sayı) demək lazımdır ki, bu. Bu alt həyata var. Və ya bu həll edə bilər başqa bir yol, Mən hansı pis deyil, var funksiyası hərəkət edə lakin ən azı sizin proqramları, açıq, Uzunmüddətli almaq üçün başlattığınızda Mən həmişə üst əsas olan bəzi dəyəri var hesab Siz oxucu ilə fayl açmaq və sonra dərhal görə bilərsiniz ki, Proqram vasitəsilə axtarış olmadan nə əsas funksiyası axtarır. Nin burada terminal pəncərə aşağı gedək, sigma sigma etmək edilməsi cəhd və mən də burada berbat. Funksiyası GetInt və Örtük bəyannamə nə başqa nə unuttuysanız deməkdir? [Işitilemez-tələbə] Yaxşı, belə görünür bir ümumi səhv, belə isə burada bu qədər qoymaq bildirin cs50.h, indi beni terminal pəncərə geri imkan verir. Mən ekran təmizləmək lazımdır və mən sigma etmək təkrar olacaq. Bu tərtib görünür. Mənə indi sigma run edək. Mən sayı 3 yazın lazımdır, mən 6 almaq idi, belə bir ciddi çek lakin ən azı, ilk baxışdan iş görünür, indi edək ki, bu ayrı rip və Gəlin həqiqətən, təkrar recursion ideyası Leverage çox sadə kontekstində ki, bir neçə həftə vaxt biz seriallarda çox meraklı data strukturlarının kəşfiyyatı başlattığınızda biz hansı ilə Toolbar bir alət biz görəcəksiniz həmin data strukturları manipulyasiya. Bu iterativ yanaşma, loop-based yanaşma. Indi bunu əvəzinə mənə edək. Əvəzinə demək mənə edək ki sayı toplama həqiqətən eyni şey 0 aşağı deyil sayı + sigma (sayı - 1). Başqa sözlə, yalnız səhnədə kimi mən, mənə gələn insanlar hər punted və onlar öz növbəsində, biz nəhayət Willy həyata bottomed qədər punting saxlanılır kim 0 kimi ağır kodlu cavab qaytarmaq idi. Burada indi biz eyni sigma üçün punting edirik eyni funksiyası ilk adlanır, ancaq əsas fikir burada edilib biz eyni sigma zəng deyilik ki. Biz n keçən deyilik. Biz aydın sayı keçən edirik - 1, bir az kiçik problem bir qədər kiçik problem. Təəssüf ki, bu hələ kifayət qədər həll deyil və biz düzeltmek əvvəl Əgər bəzi Aşkar kimi nə jumping bilər Mənə davam etmək və təkrar edək. Tamam tərtib görünür. Mənə 6 sigma təkrar edək. Whoops, mənə 6 sigma təkrar edək. Biz təsadüfən son dəfə də olsa, əvvəl bu gördük. Niyə bu sirli seqmentasiya günah əldə etdiniz? Bəli. [Işitilemez-tələbə] Xüsusilə yoxdur baza halda, ve, nə yəqin oldu? Bu nə davranış simptom var? Bir az Qaraçuxurlu deyirəm. [Işitilemez-tələbə] Bu səmərəli sonsuz loop və sonsuz loops ilə problem onlar bu halda recursion cəlb zaman, bir funksiyası, özü zəng nə bir funksiyası zəng hər zaman olur? Bəli, biz bir kompüter yaddaş müəyyən necə geri edirəm. Biz altındakı ki yığını adlı yaddaş bu yığın olduğunu bildirib və bir az daha çox yaddaş funksiyası zəng hər zaman qoymaq olur ki funksiyası yerli dəyişənlərin və ya parametrləri olan bu qondarma yığını haqqında sigma sigma zənglər çağırır əgər sigma sigma çağırır  sigma çağırır bu hekayə sonunda edir? Yaxşı, bu son nəticədə taşmaları ümumi məbləği bilgisayarınıza var ki, yaddaş. Siz ərzində qalmaq ehtimal etdiyiniz segment, dağıtmaq və bu seqmentasiya günah olsun, əsas, tullanır və taþý nə əsas deməkdir İndi əsas adlı bir fayl var ki olan adet sıfır və olanları olan fayl əslində gələcəkdə diagnostically faydalı olacaq. Sizin səhv olduğu sizə aydın deyilsə həqiqətən, belə ki, danışmaq, məhkəmə təhlil bir az edə bilərsiniz bu core dump fayl, o, yenə yalnız adet sıfır və olanları bir bütün dəstə edir ki, mahiyyətcə yaddaş üçün proqram dövlət təmsil Hazırda bu şəkildə qəzaya uğrayıb. Burada fix biz yalnız kor-koranə, sigma geri bilər sayı + bir az kiçik problem sigma. Biz burada əsas işi bir növ lazımdır və baza halda yəqin ki, nə olmalıdır? [Işitilemez-tələbə] OK, belə uzun sayı müsbət kimi biz, həqiqətən, bu qayıtmalıdırlar və ya başqa sözlə, sayı, əgər ki, <= 0 siz, mən irəli getmək və 0 qayıtmaq lazımdır nə bilirik Willy idi çox kimi, başqa, mən davam gedirəm və bu geri, belə ki, çox qısa deyil biz ilk loop üçün istifadə edərək, çırpılmış ki iterativ versiyası daha lakin bu zəriflik bu cür olduğunu görürük. Bunun əvəzinə bir sıra qaytarılması və bütün bu riyaziyyat həyata və yerli dəyişənlərin şeyi əlavə yerine deyərək edirik "OK, bu super asan problem varsa, sayı <0 kimi, mənə dərhal 0 qayıtmaq bildirin. " Biz dəstək mənfi nömrələri narahat fikrində deyilik Mən ağır kodu 0 dəyəri gedirəm. Amma başqa cəmlənməsi bu ideya həyata Bu rəqəmlərin bütün birlikdə səmərəli kiçik bir bite bilər Problemin həyata, çox kimi ki, səhnədə burada etdi sonra ayaqla zərbə növbəti şəxsə problem qalan, bu halda növbəti şəxs özünüzü edir. Bu eyni adlı funksiyası var. Sadəcə, bir kiçik və daha kiçik və daha kiçik problem hər zaman keçmək və biz burada kodu tamamilə rəsmiləşdirilmiş şeylər olsa da Bu telefon kitab həftə 0 gedən edilib məhz budur. Bu Sean ilə ötən həftə də davam dəqiq nə və nömrələr axtarmaq bizim nümayişlərlə. Bu problem qəbul və təkrar bu ayırıcı edir. Başqa sözlə, tərcümə indi bir yolu yoxdur bu real dünyada tikinti, bu yüksək səviyyədə tikinti bölmək və fəth və təkrar bir şey edir kodu, bu zaman artıq yenidən görəcəksiniz bir şeydir. Siz recursion yeni əgər İndi, bir kənara kimi, ən azı indi dərk etməlidir niyə bu gülməli deyil. Mən, google.com getmək üçün gedirəm və mən recursion bəzi Məsləhətləri və fəndləri üçün axtarış gedirəm, daxil edin. Onlar yalnız indi laughing idi əgər yanındakı adam deyin. Siz recursion mean? Siz mi demək-ah, orada getmək. OK, indi ki, hər kəsin istirahət edir. Bir az Pasxa yumurta Google haradasa orada əlaqədar. Bir kənara, biz əlbəttə saytında çıxarılan links biri kimi bu gün müxtəlif çeşidlənməsi alqoritmlərin bu grid edir Keçən həftə baxdı, lakin nə bu vizual haqqında gözəl olan bəzi siz alqoritmləri ilə bağlı müxtəlif şeyi ətrafında sizin fikrinizi kesmek üçün cəhd kimi siz çox asanlıqla artıq vəsait müxtəlif növləri ilə başlaya bilərsiniz ki, bilirik. Bu giriş bütün giriş təsadüfi və s, bu vəsait əsasən çeşidlənir, bərpa. Siz yenə cəhd kimi, fikrinizi bu şeylər ayırmaq həyata ki mühazirələr səhifə kurs saytında bu URL o bəzi vasitəsilə səbəb kömək edə bilər. Bu gün biz, nəhayət, geri isə bu problemi həll etmək ki, bu mübadilə funksiyası yalnız iş deyil idi ki, və bu funksiya mübadilə ilə əsas problem nə idi burada və burada bir dəyər mübadiləsi, təkrar idi məqsədi olan bu olur ki, belə? Bu, həqiqətən iş yox idi. Niyə? Bəli. [Işitilemez-tələbə] Bu bugginess üçün tam izahat C funksiyaları zəng çünki sadəcə oldu və bu funksiyaları, bir və b burada kimi, mübahisə etmək siz ki, fəaliyyət təmin etdiyiniz nə dəyəri nüsxədə keçir. Siz orijinal dəyərləri özləri təmin olunmur biz, buggyc kontekstində bu gördüm bu kimi bir az bir şey baxdı olan buggy3.c. Biz x və y müvafiq olaraq, 1 və 2-başlatılmış ki Xatırladaq. Biz onlar nə çap. Mən o mən x, y svop çağıraraq onlara dəyişdirmə iddia edirdi. Ancaq problem dəyişdirmə çalışmışdır ki, yalnız mübadilə çərçivəsində özünü göstərir. Biz line 40 o değiştirilecek dəyərlər hit kimi atılmalı idi, və heç bir şey orijinal funksiyası əsas həqiqətən, bütün dəyişdi Bu bizim yaddaş baxımından kimi görünür nə kimi sonra geri edirəm əgər heyəti bu sol tərəfi təmsil-if 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ə təmsil, sizin RAM demək və yığını, bu yolu üzərində inkişaf edir və biz əsas kimi bir funksiyası zəng və əsas 2 yerli dəyişənlər, x və y var nin burada x həmin təsvir edək və Gəlin burada y kimi təsvir və ən dəyərlər 1 və 2 qoymaq edək, burada əsas odur və əsas mübadilə funksiyası əməliyyat sistemi zənglər zaman , yığını üzrə svop funksiyası yaddaş öz Tarama verir yığını öz çərçivəsində, belə danışmaq. O, həmçinin bu ints üçün 32 bit ayırır. Onlara bir və b zəng etmək olur, lakin tamamilə əsassız deyil. Bu istəyir nə onlara deyilən ola bilər, lakin əsas nə olur zənglər svop, bu 1 alır bir surəti qoyur, bir surəti qoyur edir. Svop 1 digər yerli dəyişən var, baxmayaraq ki, nə deyilir? >> Tmp. Tmp, belə ki, mənim özüm burada başqa 32 bit verək və bu funksiyası nə idi? Mən int tmp a, bir 1 var alır bildirib, belə ki, biz keçən bu misal ilə oynadığı zaman bu idi. Sonra b olur, belə ki, b 2, belə ki, indi bu 2 olur, və indi, b temp olur, belə ki, temp 1 İndi b bu olur. Bu harika. Bu çalışmışdır. Amma sonra tezliklə funksiyası yekunları kimi svop xatirəsinə səmərəli təkrar istifadə edilə bilər ki, yox gələcəkdə bir sıra digər fəaliyyət və əsas açıq-aydın tamamilə dəyişməzdir. Biz əsaslı bu problem həll yolu lazımdır və bu gün biz nəhayət elə bunu bir yol olacaq biz bir pointer deyilən bir şey təqdim edə bilər. Biz bu problemi həll edə bilər çıxır ki, x və y surətləri keçən deyil əvəzində nə keçən edərək, mübadilə funksiyası, düşünürsünüz? Bəli, ünvanı haqqında nə? Biz, həqiqətən, çox ətraflı URL danışdı deyil amma bu yazı taxtası mənim kompüter yaddaş təmsil əgər əlbəttə mənim RAM ildə bytes sayı başlaya və bu byte # 1 deyə, bu byte # 3, # 2 byte edir byte # 4, byte # ... 2 milyard mən RAM 2 gigabaytlık varsa, biz əlbəttə bəzi ixtiyari nömrələmə sxemi ilə gəlmək bilər mənim kompüter yaddaş bütün fərdi bytes üçün. Mən svop nə əgər əvəzinə zəng zaman x və y nüsxədə çox keçid niyə əvəzinə, burada x ünvanı keçmək yoxdur burada y ünvanı, mahiyyətcə poçt ünvanı o məlumat Əgər x və y çünki, sonra dəyişdirmək x və y yaddaşında ünvanı, Biz onu bir az təlim əgər, dəyişdirmək o potensial, belə ki, danışmaq,, bu URL idarə edə bilər x, və sayı dəyişdirmək, sonra y ünvan üçün sürücü həqiqətən o dəyərləri özü surətlərini əldə deyil baxmayaraq, orada sayı dəyişdirmək, biz əsas yaddaşında olan kimi bu barədə söhbət belə olsa və bu kimi olan svop xatirəsinə güclü və C təhlükəli hissəsi heç bir funksiyası, yerdə kompüter yaddaş toxunmaq bilər və bu C. kompüter proqramları ilə çox xülya şeyi edə bilər ki, güclü Siz də çox asanlıqla qıymaq bilər, çünki bu təhlükəli deyil. Əslində, proqramları üçün ən ümumi yolları bu gün bir istismar etmək bir proqramçı həyata üçün hələ də o bir data icazə verir ki, nəzərdə deyil ki xatirəsinə yeri yazılır. Məsələn, o, ölçüsü 10 bir sıra bəyan lakin sonra təsadüfən, yaddaşlı ki massivinə 11 bytes qoymaq çalışır və artıq qüvvədə olduğu yaddaş hissələri toxunan başlamaq. Just içeriksel bu, siz bəzi bilirik bilər ki, proqram tez-tez, serial nömrələri və ya qeydiyyatdan düymələri üçün siz tələb Photoshop və Word və bu kimi proqramları. , Bir az proqramı çalıştırabilirsiniz online yerləşir, siz bəzi bildiyiniz kimi, çatlar mövcuddur və voiture bir serial sayı artıq sorğu. Necə işləyir? Bir çox hallarda bu işlər, sadəcə, kompüter tapmaq olunur kompüter faktiki adet sıfır və olanları mətn seqmentləri seriya nömrəsi tələb yerləşir ki, funksiyası, harada proqram çalışırken və bu yer üzerine, və ya əsas həqiqətən saxlanılır harada həyata rəqəm bilər bir şey istifadə ayıklama adlanır və proqram ki, yol çat edə bilərsiniz. Bu gün növbəti bir neçə bu bizim obyektiv olduğunu demək deyil lakin bu, çox real-dünya ramifications var. Bir, proqram oğurluq cəlb etmək olur ki, lakin bütün maşın kompromis də var. Əslində, zaman saytları bu gün istismar olunur və güzəşt və məlumat sızdırdığı və parol oğurlanmış olunur Bu tez-tez bir yaddaş zəif idarə aiddir, və ya, verilənlər bazası halda, uğursuzluq nəzərdə tutur gələcək həftə ki, belə daha çəkişmə giriş, indi üçün nə edə bilər ki, zərər növ yalnız bir sneak preview çox şeyi başlıq altında necə dərk deyil. Bu sınıq nə anlaşma haqqında gedək bir alət ilə daha çox faydalı olacaq proqramlar daha mürəkkəb almaq kimi. Siz proqram bir səhv etdik Beləliklə uzaq zaman necə bu hata haqqında getdi? Sizin texnika sizin TF tərəfindən tədris olub, belə qədər olmuşdur və ya yalnız özünü öyrətdi? [Tələbə] Printf. Siz görmək istəyirsinizsə Printf, belə printf yəqin ki, sizin dost olmuşdur Proqram daxilində neler yalnız printf burada printf burada printf burada qoydu. Sonra siz run, və ekranda heyəti bütün dəstə almaq Əgər həqiqətən proqram yanlış gedir nə anlamak üçün istifadə edə bilərsiniz. Printf, çox güclü şey olmağa çalışır lakin bir çox dərslik prosesi var. Siz printf burada, burada printf qoymaq üçün və bir loop daxilində qoymaq əgər 100 xətləri almaq bilər Əgər vasitəsilə elemek ki çıxdı. Bu hata proqramları üçün çox istifadəçi dostu və ya interaktiv mexanizm deyil lakin təşəkkürlə alternativlər mövcuddur. Gdb adlı məsələn bir proqramın, GNU Debugger var siz onu istifadə necə bir az gizli deyil. O, səmimi bir az mürəkkəb, lakin Bu bu həftə qoymaq əgər həmin şeyi bir və növbəti gdb kimi bir şey anlamaq üçün əlavə saat ki, uzunmüddətli perspektivdə saat yəqin ki, onlarla xilas edəcək belə ki, mənə bu şey necə bir iltifat verək. Mən terminal pəncərə edirəm. Mənə davam və bu proqram, buggy3 tərtib edək. Bu günə qədər artıq var. Biz bir müddət geri idi, və həqiqətən, sınıq var kimi mənə run edək. Amma nə bu? Bəlkə mübadilə funksiyası qıfıllar. Bəlkə bir və b var. Mən çox düzgün hərəkət deyiləm. Mənə irəli getmək və bunu edək. Daha çox yalnız mənə əvəzinə bu proqram gdb run imkan buggy3 run və mən buggy3 çalıştırmak üçün demək gedirəm və mən bir command line dəlil-TUI daxil gedirəm və biz xatırlatmaq spec gələcək problemləri bu qoymaq lazımdır. İndi bu qara və ağ interface, təkrar qədər atdı bütün bu var, çünki ilk bir az böyük deyil burada zəmanət informasiya, lakin ən azı tanış bir şey var. Pəncərənin üst mənim faktiki kodu edir və mən burada diyirləyin, əgər mənim fayl çox üst gedin qoy və həqiqətən, bu pəncərə altında buggy3.c və xəbərdarlıq var Mən bu gdb tez var. Bu mənim normal John Harvard tez eyni deyil. Bu mənə gdb nəzarət imkan olacaq ki, tez deyil. Gdb bir ayıklama edir. A ayıklama vasitəsilə gəzmək imkan verir ki, bir proqram xətti ilə line proqram line icrası, yolu proqram istədiyiniz bir şey etməklə yanaşı, hətta, daha əhəmiyyətlisi, funksiyaları zəng, və ya axtarır müxtəlif dəyişən dəyərləri ilə. Nin irəli getmək və bunu edək. Mən irəli getmək və gdb nin sətirinə run yazın gedirəm Mən çap run sonra ekranın sol alt bildiriş və mən Enter etdik ki, nə idi? Bu sözün mənim proqram qaçdı, amma həqiqətən çox burada getmək görmədim Mən, həqiqətən, ayıklama bildirib, çünki zaman, müəyyən bir anda dayandırmaq. Just run yazaraq proqramı çalışır. Mən, həqiqətən, bir şey görmürəm. Mən bunu manipulyasiya bilməz. Bunun əvəzinə mənə bunu bildirin. Bu gdb tez mənə yerine daxil break yazın edək. Yəni yazın nəzərdə nə deyil. Break əsas yazın əvəzinə edək. Başqa sözlə, mən bir breakpoint deyilən bir şey qurmaq istəyirəm pozmaq və ya fasilə çünki tutarlı adına olan xüsusi yer proqram icra. Əsas mənim funksiyası adı. Gdb olduqca ağıllı edək ki. Bu əsas line 18 təxminən başlamaq olur ki, fiqurlu buggy3.c, və sonra sol üst burada qeyd b + line 18 sağ yanında. Mən line 18 bir breakpoint qoymuşuq ki, mənə xatırladan edir. Bu dəfə run yazın zaman, mən proqram run gedirəm qədər qədər ki, breakpoint edib belə proqram line 18 mənim üçün fasilə olacaq. Burada getmək axır. Heç bir şey baş görünür, lakin alt sol bildiriş başlayan proqram, buggy3, buggy3.c line 18 əsas breakpoint 1. Mən indi nə etməliyəm? Qeyd edək mən, çap kimi şeylər yazmağa başlaya bilərsiniz deyil printf, çap x, indi ki, qəribə deyil. Biz görəcəksiniz kimi 1 $, yalnız bir maraq deyil Əgər bir şey çap hər dəfə yeni bir $ dəyər almaq. Bu, yalnız halda əvvəlki dəyərlərə geri müraciət edə bilərsiniz ki, var lakin indi nə çap mənə izah edir ki, hekayə bu nöqtədə x dəyəri yəqin 134514032 edir. Nə? Hətta haradan gəldi? [Işitilemez-tələbə] 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 ancaq dəyişənlərin başlamaq səbəbi açıq-aydın onlar siz onlara olsun ki, bəzi dəyəri var. Amma tutmaq siz dəyişənlərin elan edə bilər ki, geri olunur Mən sigma Məsələn bir an əvvəl olduğu kimi həqiqətən, onlara bir dəyər vermədən. Mən sigma burada artıq nə xatırlayıram. Mən n elan, ancaq nə dəyər vermək idi? Yox, mən bilirdim ki, növbəti bir neçə xətləri GetInt n daxilində dəyər verilməsi problem qayğı olacaq. Amma line 11 hekayə bu nöqtədə və line 12 və line 13 və line 14 o bir neçə xətləri boyunca n dəyəri nədir? C Siz yalnız bilmirəm. Bu, ümumiyyətlə, bəzi zibil dəyər, bəzi tamamilə təsadüfi sıra bir əvvəlki funksiya mahiyyətcə qalmış ki, proqram çalışan kimi, axır edilmiş funksiyası funksiyası, funksiyası, funksiyası olur ki, xatırlayıram. Bütün bu çərçivələr, həmin funksiyaları geri yaddaş qoymaq və almaq və yalnız kimi mən onların yaddaş nəticədə təkrar istifadə edilir pozan ilə təklif edir. Bəli, yalnız bu proqram ki, bu dəyişən x olur 134514032 kimi zibil dəyər olan görünür bir əvvəlki funksiya, bir mən yazdı. Bu əməliyyat sistemi ilə səmərəli gəlir ki, bir şey ola bilər başlıq altında bəzi fəaliyyət göstərir. Okay ki, gözəl, lakin növbəti line əvvəlcədən indi edək. Mən gdb sətirinə "next" yazın və əgər mən daxil edib Qeyd ki, line 19 hamle aşağı işıqlandırılması ancaq məntiqi dolayısı ki line 18 indi başa çatdı mən yenidən yazın əgər, yerinə "çap x" İndi 1 bax ki, həqiqətən, mən bunu. Yenə $ məhsulları gdb siz xatırladan bir yoldur baskı tarixi siz etdik ki, nə var. İ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 lakin heç bir böyük line 19 ildə biz bu barədə təyin etmək istəyirik, çünki dəyəri 2, mənə yenə "gələcək" yazın edək. İndi biz printf line istəyirik. Mənə çap x edək. Mənə çap y edək. Açığı, mən bu çap bir az yorğun alıram. Mənə əvəzinə "ekran x" və "ekran y" yazın edək və indi hər dəfə mən gələcəkdə bir funksiyanı yazın Mən nə xatırlatdı olacaq nə x və y, x və y, x və y budur. Mən də, bir kənara, növü kimi "info yerli". Məlumat xüsusi əmr edir. Yerli mənə yerli dəyişənlərin göstərir deməkdir. Mən unutmaq və ya bu crazy, mürəkkəb funksiyası yalnız halda mən və ya bir başqası info yerli sizə yazdı Bu yerli funksiyası daxilində bütün yerli dəyişənlər nə siz ətrafında soxmaq istəyirsinizsə qayğı bilər. İndi printf Mənə qabaqda və yazın gedək, icra etmək haqqında "Növbəti". Biz bu mühitdə istəyirik Çünki biz həqiqətən görən deyilik burada icra, lakin burada bir az mangled əldə bildiriş. Lakin, orada ekran əsas bildiriş belə ki, burada bir mükəmməl proqram deyil, lakin mən həmişə ətrafında soxmaq bilər ki, OK Mən istəyirsinizsə çap istifadə edərək. Məni yenidən yazın edək, indi burada maraqlı hissəsi. Hekayə Bu nöqtədə, y 2 və x 1 burada təklif və təkrar kimi Mən komanda istifadə çünki bu avtomatik indi görünür səbəbi ekran x və ekran y, mən növbəti yazın belə an nəzəriyyə x və y ilə dəyişdirildikdə olmalıdır. İndi biz artıq işi olacaq deyil bilirik ki, lakin biz doğru nə anlamaq üçün dərin dive necə bir anda görəcəksiniz. 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. Çap x, çap y. Həqiqətən, dəyişdirmə heç həqiqətən baş verib, belə ki, bu artıq başlamaq edək. Aydındır svop pozuldu. Nin yerinə yenə "run" yazın edək. Mənə bəli demək ki, mən əvvəldən yenidən başladın istəyirik, daxil edin. İndi geri line 18 oldum. İndi x və y yenidən zibil dəyərlər bilərsiniz. , Sonrakı, növbəti gələn. Mən cansıxıcı almaq, mən də yalnız növbəti n edəbilərsiniz. Siz simvol qısa ardıcıllıqla onu qısaltmaq bilər. Swap indi pozuldu. Yerinə gələn yazaraq belə ki, in dive edək, Mən bu funksiya daxilində gücləndirməklə edirəm ki, indi addım yazın gedirəm Mən onun vasitəsilə gəzmək edə bilərsiniz, belə ki, mən addım basın və sonra daxil edin belə. Qeyd edək line 36 mənim proqramı vurğulayaraq atlamalar aşağı aşağı edir. İndi yerli dəyişənlər nə var? Məlumat yerli. Biz line kazanılmış heç etdik çünki yalnız hələ heç bir şey, belə-nin irəli getmək və deyək "növbəti". İndi tmp, çap tmp var görünür. Zibil dəyəri, sağ? Mən belə hesab edirəm. Necə haqqında, çap b, 1 və 2 çap? Bir anda, tezliklə mən növbəti yenidən yazın kimi tmp, inşallah, 1 dəyəri götürmək niyyətindədir tmp bir dəyəri təyin edir, çünki. İndi bir, çap b çap edək, lakin indi tmp çap və bu, həqiqətən 1 var. Məni nə edək. Məni nə edək. Mən svop funksiyası başa etdik. Mən line 40 ildə daxilində hələ edirəm, mənə bir çap edək, çap b, mən tmp nə qayğı yoxdur. Bir və b dəyişdirmə gəldikdə svop doğru kimi görünür. Amma indi növbəti yazın, mən, line 25 geri jump və əlbəttə, x və çap y I növü əgər onlar hələ də dəyişməz istəyirik, biz problem müəyyən deyil. Amma diagnostically indi bəlkə bu gdb proqramı ilə biz ən azı anlaşma üçün bir addım daha kazanılmış etdik nə burada bir printf qoyaraq zibil üçün kod olmadan yanlış gedir, printf burada printf burada və sonra təkrar o çalışan yanlış nə həyata rəqəm çalışır. Mən çıxmaq ilə birlikdə irəli getmək və bu həyata çıxmaq üçün gedirəm. O demək olacaq ", hər halda çıxın?" Bəli. İndi mən normal tez geri oldum və gdb istifadə bitirdim. Bir kənara kimi, bu-TUI bayraq istifadə etmək lazım deyil. Siz onu buraxmaq əgər Əslində, mahiyyətcə ekranın alt yarısı almaq. Mən sonra run sonra fasilə əsas yazın və əgər Mən hələ mənim proqram run, lakin bunu daha textually ola bilər yalnız bir zamanda mənə cari line bir göstərir. The-TUI, tekstoloji istifadəçi interfeysi, yalnız bir dəfə, yəqin ki, bir az konseptual asan olan proqram daha göstərir. Lakin, həqiqətən, Mən, sonrakı, növbəti edə bilərsiniz 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ə Mən siyahısını yazın və qonşu xətləri bütün dəstə bilərsiniz. Biz problem 3 qoyur üçün siz baxmaq xahiş etdik ki, bir video var olan Nate, gdb və intricacies bəzi əhatə edir və bu, vicdanla, həmin şeyi biridir burada bəzi qeyri-cüzi faiz gdb toxunmaq heç vaxt ki, pis bir şey olacaq sanki bu dövr sonra daha çox vaxt sərf başa çünki hataları aşağı chasing sonra siz ki, yarım saat / saat qoymaq əgər bu həftə və gələcək təlim gdb rahat almaq üçün. Printf dost idi. Gdb İndi dost olmalıdır. Gdb hər hansı suallar? Və burada ən güclü və faydalı əmrləri bəzi tez siyahısı. Bəli. >> Bir string çap edə bilərəmmi? Bir string çap edə bilərəmmi? Tamamilə. Bu yalnız integers olmaq deyil. Dəyişən s çap s yazın simli olur. Bu string dəyişən nə sizə göstərəcək. [Işitilemez-tələbə] Bu ünvan və simli özü verəcək. Bu həm göstərəcək. Və son bir şey, yalnız bu çox bilmək yaxşıdır, çünki. Backtrace və çərçivə, mənə bu son bir dəfə daxil dive edək gdb ilə eyni dəqiq proqramı. Mənə irəli getmək və mətn user interface versiyası run edək, əsas pozub. Mənə davam və yenidən run edək. Burada mən. İndi mənə, sonrakı, növbəti gələn növbəti gedək, step, daxil edin. İndi qəsdən svop artıq Ben güman, lakin mən kimi Ben "Lanet olsun, x dəyəri nə idi?" Mən artıq x edə bilməz. Onlar daxilində deyilik, çünki y edə bilməz. Onlar kontekstində deyilik, amma heç bir problem. Mən backtrace edəbilərsiniz. Ki, mənə vaxt bu nöqtəyə qədər icra edən funksiyaları bütün göstərir. Qeyd edək ki, əsas ilə əsas altındakı bir, xətləri qədər Burada şəkil altında olan. Swap mübadilə burada yaddaş yuxarıda olmaqla onu xətləri yuxarıda olması, və mən müvəqqəti əsas geri almaq istəyirsinizsə I "çərçivəsində". deyə bilərsiniz Nə sayı? Ana çərçivəsində # 1-dir. Mən irəli getmək və demək gedirəm "çərçivəsində 1". İndi əsas geri oldum və x çap edə bilərsiniz, mən, y çap edə bilərsiniz amma bir və ya b çap bilməz. Demək Amma əgər mən, "Okay, bir dəqiqə gözləyin. Harada svop idi?" Bilərsiniz Mənə davam və deyək "çərçivəsində 0". İndi mən olmaq istədiyiniz geri oldum və bir kənara kimi 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 genellikle ", növbəti 10" kimi şeylər demək olar ki, növbəti 10 xətləri vasitəsilə addım olacaq. Ayrıca, həqiqətən, onun vasitəsilə gücləndirməklə ilə qidalanır almaq zaman "davam" yaza bilərsiniz. Başqa breakpoint xit qədər davam fasiləsiz proqram davam edəcək bir loop və ya proqram aşağı aşağı. Bu halda biz sonuna davam və proqram normal çıxış edib. Bu xülya yolu, aşağı prosesdir. Sadəcə proqram normal çıxış edib. Video və gələcək iclaslarında ayıklama ki, daha çox. Bu çox idi. Gəlin burada 5 dəqiqə fasilə etmək, və biz structs və faylları ilə qayıtmaq lazımdır. Əgər siz artıq bu həftə pset daxil dived varsa , sizi bölüşdürülməsi kodu istifadə bilirsiniz biz bir başlanğıc nöqtəsi, bəzi yeni texnika kimi sizə təmin edən mənbə kodu. Xüsusilə, biz, strukturu, struct adlanan bu yeni söz təqdim belə ki, biz növ xüsusi dəyişənlər yaratmaq bilər. Biz, həmçinin, fayl I / O, fayl giriş və çıxış anlayışı daxil və bu biz dövlət saxlaya bilərsiniz ki, Sizin Scramble heyəti disk bir fayl üçün tədris yoldaşları və mən başa düşə bilər ki, nə əl oynamaq olmadan proqram daxilində gedən Scramble oyunları onlarla. Biz daha automatedly bunu edə bilərsiniz. Bir struct Bu fikir kifayət qədər çekici problem həll edir. Biz bir proqram həyata keçirmək istədiyiniz düşünək ki, elə-belə, tələbələr haqqında məlumat tutar və tələbələri, məsələn, adı ID bilər və Harvard kimi bir yerdə ev, belə bu məlumatlar 3 ədəd var biz ətrafında saxlamaq istəyirsinizsə, mənə irəli getmək və burada bir az proqram yazmağa başlayın edək, stdio.h daxildir. Mənə cs50.h. daxil edək Və sonra mənim əsas funksiyası başlamaq. Mən, heç bir command line dəlilləri ilə narahat deyil və burada mən bir tələbə olsun, mən demək gedirəm bir tələbə bir adı var, mən demək gedirəm "string adı." Sonra, tələbə də, belə int id şəxsiyyət var demək gedirəm və tələbə bir ev var, mən də demək gedirəm "string evi." Mən bu kimi daha çox pakizə, bu bir az sifariş lazımdır. OK, indi mən, "bir tələbə." Olan bir tələbə təmsil 3 dəyişənlər var İndi bu dəyərləri yaşayır istəyirəm, belə ki, mənim kimi bir şey davam və deyək "Id = 123". Adı David almaq üçün gedir. Gəlin evi, Mather olacaq deyə və sonra I ("% s, özbaşına printf kimi bir şey gedirəm kimin ID% d% s yaşayır. İndi mən burada plug-birinin ardınca nə istəyirsiniz? Ad, id, ev; qaytarılması 0. OK, əgər mən haradasa burada qıfıllar Mən bir tələbə saxlayan olduqca yaxşı proqram var. Əlbəttə ki, bu bütün maraqlı deyil. Mən 2 tələbələri etmək istəyirsinizsə? Heç böyük var. Mən 2 nəfər dəstəkləyir. Mənə davam və bu qeyd və burada aşağı gedək, və mən Kirkland yaşayan Rob kimi kimsə üçün "id = 456" demək olar. Okay, gözləyin, amma bu eyni şey adlandırmaq olmaz və bu surəti üçün gedirəm kimi görünür, Mənə bu Davudun dəyişənlərin olacaq ki, qoy, və mənə Rob bu bəzi surətlərini almaq imkan verir. Biz bu Rob-nin zəng edəcəyik, lakin bu artıq işləmək niyyətində deyil I-gözləmək çünki, in name1 və house1, id1 mənə dəyişdirmək imkan verir. Rob, 2 2 olacaq. Mən burada, buraya, burada burada burada, burada bu dəyişdirmək üçün var. Doğrusu, nə Tommy haqqında? Yenə bunu edək. Siz hələ bu bunu yaxşı yol hesab Aydındır ki, bu, deyil belə surəti / pis yapışdırıb. Amma bir həftə əvvəl bu həll. Biz eyni data type çox hallarda etmək istəyirdi zaman bizim həll nə idi? [Tələbələr] Bir sıra. Bir dizi, mənə bu qədər təmiz edək. Mənə üst özüm üçün bir otaq etmək və mənə əvəzinə burada bunu qoy edək. Biz bu insanların zəng edəcəyik, əvəzinə mən ", int kimlikleri" demək gedirəm və mən indi üçün bizə 3 dəstək gedirəm. Mən, "simli adları" demək və bizə 3 dəstək olacaq gedirəm və sonra mən ", simli ev" demək və bizə 3 dəstək gedirəm gedirəm. İndi burada əvəzinə David öz yerli dəyişənlərin əldə ildə biz o xilas edə bilər. Yəni biz bu təmizlənməsi etdiyiniz yaxşı hiss edir. Mən David [0] və adlarını [0] olacaq deyə bilərsiniz və evlərin [0]. Və sonra biz eynilə bu saxlaya bilərsiniz Rob. Bu aşağı burada qoyaq, o, özbaşına kimlikleri [1] olacaq. O, adları olacaq [1] və sonra nəhayət, evlər [1]. , Hələ bir az yorucu və indi bu rəqəm var belə deyək "adı [0], id [0], evləri [0] və bu çoğul bildirin. Noları, kimlikleri, kimlikleri. 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 belə odds başqa həll burada var var. Mən yəqin ki, belə bir loop və ya bir şey ilə bu təmiz bilər belə qısa, bir az daha yaxşı lakin hələ kimi hiss , Mən yapışdırıb / surəti müraciət edirəm, lakin bu, hətta mən iddia həqiqətən əsaslı düzgün həll deyil, çünki zaman biz qərar, əgər nə bilirik? Biz, həqiqətən, David və Rob üçün e-poçt ünvanlarını saxlanılması olmalıdır və bu proqram başqa hər kəs. Biz həmçinin telefon nömrələri saxlamaq lazımdır. Biz, həmçinin, təcili əlaqə nömrələri saxlamaq lazımdır. Biz saxlamaq istədiyiniz məlumatın bütün bu ədəd var belə necə bunu barədə giderim? Siz üst bir sıra bəyan, sonra özünüz əlavə e-mail [0], e-mail [1] David və Rob və s. Amma bu dizayn əsasını yalnız bir ehtimal həqiqətən var Mən bilmək şərəfinə sistemi istifadə edirəm ki, [I] bir neçə serialların hər yalnız, belə ki, həmin şəxsə aid olur belə [0] kimlikleri sayı 123-dir və mən adları güman gedirəm [0] eyni şəxsin adı və evlərin [0] Mən yaratmaq ki, müxtəlif seriallarda bütün eyni şəxsin evi və s-dir. Amma heç bir fundamental əlaqələrin olduğunu qeyd məlumat, id, adı və evin həmin 3 ədəd arasında, biz bu proqram model çalışdığınız şəxs seriallarda deyil, baxmayaraq. Diziler bunu yalnız bu proqram yoludur. Biz, həqiqətən, bizim proqram simulyasiya etmək istəyirəm nə adam David, bunun içərisində Rob kimi bir şəxs kimi və ya encapsulating adı və kodu bir ev. Biz birtəhər encapsulation bu fikir ifadə edə bilər bir şəxs ID, adı və bir ev var qovuşdurmağımız və həqiqətən bu hack müraciət deyil elə biz yalnız ki bracket bir şey etibar Bu disparate serialların hər eyni insan şəxs deməkdir? Biz həqiqətən bunu edə bilərsiniz. Mənə indi üçün yuxarıda əsas getmək və mənə öz data type yaratmaq imkan edək ilk dəfə həqiqətən üçün. Biz Scramble bu texnika istifadə lakin burada, davam və bir veri növü yaratmaq gedirəm və nə mən, bu, tələbə və ya şəxs zəng etmək üçün gedirəm bilir və bir növü müəyyən üçün typedef istifadə gedirəm. Mən bu bir quruluş ki gedirəm və sonra bu quruluş, növü tələbə olmaq, biz demək lazımdır gedir bu mənim üçün artıq tarixli bir az belə olsa. Biz "int id." Demək lazımdır Biz "string adı." Demək lazımdır Sonra "simli ev" demək lazımdır İndi kodu bu neçə satır sonuna Mən yalnız var ki, cingilti öyrətdin strings əlavə ints başqa bir veri növü, başqa üzüb gedirdi yanaşı, iki dəfə. Vaxt line 11 Bu an kimi, tələbələr adlı yeni data növü, artıq və indi yerdə istəyirəm tələbə dəyişən elan edə bilər Mənə insanlar burada aşağı diyirləyin bildirin. İndi mən bu xilas edə bilər və mən burada David geri enmək bilər Davud üçün mən həqiqətən ki, David, demək olar biz sanki özümü sonra dəyişən olar növü tələbə olacaq. Bu bir az qəribə görünə bilər, lakin bu, bütün fərqli deyil bir int və ya simli və ya bir float kimi bir şey elan edir. Bu, sadəcə, belə ki, indi tələbə adlandırmaq olur və bu quruluş içərisində bir şey qoymaq istəyirsinizsə Indi sintaksis yeni parça istifadə, lakin bu, olduqca sadə var david.id = 123, kapital D david.name = "David" və david.house = "Mather" və indi burada bu məhsulları xilas edə bilər. Biz həqiqətən çox daha yaxşı bir şəkildə proqram yeniden tasarladık bildiriş ki, indi bizim proqram real dünya yansımasıdır. Bir şəxs və ya bir şagird bir real-dünya anlayışı var. Burada artıq bir şəxs və ya daha çox xüsusi bir tələbə C versiyası var. Həmin şəxsin daxilində müvafiq xüsusiyyətləri var, ID, adı, ev, belə ki, Rob mahiyyətcə aşağı burada eyni şey olur, , tələbə rob belə, indi = 456 rob.id rob.name = "Rob". Dəyişən Rob adlanır ki, mənasız növ edir. Biz x və ya y ya z adlı bilərdi. Biz yalnız, o, semantically ardıcıl olmaq Rob adına amma həqiqətən adı, bu sahədə özünü daxili İndi mən bu var. Bu da mən ağır David kodlu etdik ki, yaxşı dizayn kimi hiss etmir. Mən ağır Rob kodlu etdik. 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. Bundan başqa, mən, yəqin bu dəyişənlərin hər bir ad vermək Mən çox deyil, bu dəyişənlər təsvir istədiyiniz baxmayaraq  daha ümumi olaraq kimi tələbələr. İndi bizim üçün yaxşı iş ki, fikir daxil edə bilərsiniz əvəzinə, Siz mənə bir dəyişən adlandırılan tələbələr vermək nə bilirik ", deyə və indi bu daha rafine edə bilərsiniz, belə ki, "İT ölçüsü 3 ola var imkan, , elle elan David canini qurtar və mən əvəzinə [0] burada tələbə kimi bir şey demək olar. Mən, [0] burada tələbələr demək olar tələbələr burada və s [0], və ətrafında bilərsiniz və Rob ki təmizlənməsi. Mən də indi bəlkə bir loop etdi getmək bilər və həqiqətən, istifadəçi bu dəyərlər almaq üçün GetString və GetInt istifadə edərək. Bu, ümumiyyətlə, pis təcrübə, çünki daimi əlavə edə bilər Burada 3 kimi ağır kodu bəzi ixtiyari sayı və sonra yalnız siz artıq 3 tələbələri qoymaq lazımdır ki, unutmayın. Bu yəqin ki, mənim fayl üst müəyyənləşdirmək # istifadə etmək daha yaxşı olardı və, belə ki, həqiqətən, mənə irəli getmək və bu ümumiləşdirmək edək ki, amil. Mənə bu gün arasında olan bir misal açmaq edək əvvəlcədən nümunələri structs1. Bu # burada müəyyən istifadə edir ki, daha tam proqram və biz ismarıcları 3 tələbələri malik olacaq deyir. Burada, şagirdlərin sinif dəyər bəyan edirəm tələbələr bir sinif belə, indi mən bir loop kullanıyorum yalnız kodu bir az daha zərif etmək, sinif yaşayır istifadəçi girişi ilə, belə ki, 3 olan tələbələr, i = 0 üzrə təkrarlamaq. Və sonra mən bu versiyası istifadəçi təklif  nə tələbə ID var və mən GetInt ilə almaq. Nə tələbə adı, ve sonra o GetString ilə almaq. Şagirdin ev nədir? Mən GetString ilə almaq. Və sonra burada alt Mən dəyişmək qərara Mən bu həyata çap alıram və həqiqətən bir loop necə istifadə, və mən kim çap edirəm? Yorum görə mən Mather hər çap alıram və Rob və Tommy belə və s-həqiqətən Tommy nin Mather bu var. Tommy və David bu halda çap olunacaq, lakin bu necə işləyir? Biz əvvəl bu funksiya görünür, lakin bu nə kimi bir tahmin etmək deyil. Strings müqayisə edir. Bu çıxır, çünki strings müqayisə necə bir az qeyri-aşkar var o deməkdir ki 0 qayıtdıqda əgər strings bərabərdir. Bir -1 döndürürse bir, digər əvvəl əlifba sırası gəlir deməkdir bu başqa söz deməkdir +1 qaytarır əgər və əlifba sırası ilə gəlir Digər əvvəl, siz online və ya man səhifə baxa bilərsiniz məhz hansı yolla olan görmək, lakin indi bunu deyirdik edir Bu [i]. evi "Mather" bərabər olduqda sonra irəli getmək və s çap və s Mather edir. Lakin burada biz əvvəl görməmişik bir şey var və biz bu qayıda bilərsiniz. Mən heç mənim proqramları hər hansı bunu olan xatırlayıram yoxdur. Pulsuz yəqin, yaddaş istinad yaddaş azad edilir amma yəqin bu proqram altında bu loop nə yaddaş azad edirəm? Mən bir şəxsin adı azad alıram kimi görünür və bir şəxsin evi, amma niyə ki? Bu GetString istifadə etdik ki, bütün bu həftə çıxır biz cür proqramları hər biri bir səhv tətbiq etdik. Bu bir string geri ki, dizayn ayırır yaddaş ilə GetString, kimi David, ya Rob, və sonra istədiyiniz hər hansı edə bilərsiniz Biz sizin üçün yaddaş qorunur etdik çünki proqram ki, simli ilə. Bu problem GetString zəng hər zaman bütün bu vaxt biz GetString müəllifləri, əməliyyat sistemi tələb olunub Bu simli üçün bizə RAM bir az vermək. Bu növbəti simli üçün bizə RAM bir qədər verin. Bu növbəti simli üçün bir daha RAM verin. Nə, proqramçı, bunu heç vaxt , bizə yaddaş geri verir Belə ki, bu bir neçə həftə proqramları bütün yazdıq onlar istifadə saxlamaq vasitəsi yaddaş sıçrayış deyirlər nə idi daha çox yaddaş siz GetString zəng və Gözəl hər zaman. Ki, maraqlı deyil, çünki Biz qəsdən ilk həftə bunu simli gələn yerləşir narahat var. Istədiyiniz bütün söz zaman istifadəçi bu da qayıda Rob deyil Amma irəliləyir biz bu barədə daha mürəkkəb almaq başlamaq üçün. Biz yaddaş ayırmaq hər zaman daha yaxşı nəticədə geri əl. Əks halda sizin Mac və ya PC-də real dünyada zaman zaman təcrübəli ola bilər kompüter nəhayət dayanma nöqtəsinə daşları yerləşir simptomları və ya axmaq spinning çimərlik top yalnız kompüter işğal edilir bütün diqqət və şeyi edə bilməz. Hatalar hər hansı bir sayı izah, lakin bu mümkün bugs arasında edilə bilər şeyi yaddaş sızıntıları deyilir vasitəsi proqram ki, parça yazan kimsə pulsuz yaddaş unutmayın etməyib istifadə etdiyiniz o üçün əməliyyat sistemi xahiş etdi ki, bir CS50 şey, çünki GetString istifadə edərək, lakin oxşar funksiyaları istifadə yaddaş üçün əməliyyat sistemi xahiş edir. Siz və ya onlar qıymaq və əgər həqiqətən ki, yaddaş qayıtmaq heç bir proqram yavaşlatır və yavaşlatır və aşağı yavaşlatır ki, ola bilər ki, bir simptom pulsuz zəng unutmayın halda. Zaman niyə pulsuz zəng ki, Biz qayıda bilərsiniz amma yalnız yaxşı tədbir üçün irəli getmək və bu proqram çalışan edək. Bu structs1 adlanırdı daxil edin. David Mather, mənə irəli getmək və structs1 run 123 edək 456, Rob Kirkland, 789, Tommy Mather, biz Mather ildə David görmək, Tommy nin Mather edir. Bu proqram iş ki, bir az ağlı başında olma çek edir. İndi təəssüf ki, bu proqram ki, bir az sinir bozucu deyil Mən 9 müxtəlif strings bütün iş tipli idi, daxil edib Mather olmuş bildirib ki, hələ aydın Mən bu tipli çünki artıq Mather olmuş bilirdi edilmişdir. Bu proqram daha bir verilənlər bazası kimi, əgər ən azı gözəl olardı və həqiqətən mən yazdığınız nə xatırlayır Mən yenidən daxil bu tələbə qeydlər heç vaxt. Bəlkə bir registrarial sistem kimi. Biz, fayl I / O, fayl giriş və çıxış kimi tanınan bu texnika istifadə edərək, yapabilirsiniz faylları oxumaq və ya faylları yazmaq üçün istənilən vaxt deyərək bir çox ümumi şəkildə siz funksiyaları müəyyən bir dəsti ilə bunu edə bilərsiniz. Mənə davam və bu misal structs2.c açıq etsin, olan demək olar ki, eynidir, lakin indi nə görmək edək. Fayl üst Mən tələbə sinif bəyan edir. Mən sonra, istifadəçi girişi ilə sinif yaşayır belə kodu həmin xətləri dəqiq əvvəl istərdik olunur. Mather olan hər kəs özbaşına əvvəl istəyirəm ki, burada aşağı diyirləyin əgər Sonra çap lakin bu maraqlı yeni xüsusiyyət. Kod Bu xətlər yeni, onlar burada bir şey təqdim Resim, bütün caps, və həmçinin burada * malikdir. Mənə həm burada, buraya bir * Bu hərəkət edək. Bu funksiya biz əvvəl görməmişəm, fopen, lakin açıq fayl deməkdir, belə ki, bu yolu nin üzsüz edək, və bu, gələcəkdə psets ilə qayıtmaq lazımdır şey amma burada bu xətt mahiyyətcə, verilənlər bazası adlı fayl açılır və xüsusi o nə edə bilər ki, belə bir şəkildə açılır? [Işitilemez-tələbə] Sağ, belə ki, "w" yalnız əməliyyat sistemi izah edir deməkdir Mən bunu yazmaq olar ki, belə bir şəkildə bu faylı açın. Mən oxumaq istəmirəm. Mən yalnız baxmaq istəmirəm. Bunu dəyişdirmək və potensial stuff əlavə etmək istədiyiniz və fayl bazası deyilən olacaq. Bu bir şey adlandırmaq olar. Bu database.txt ola bilər. Bu. Db ola bilər. Bu foo kimi bir söz ola bilər, amma özbaşına fayl bazasında adını seçdi. Bu, biz artıq böyük ətraflı qayıda bilərsiniz ki, bir az ağlı başında olma çek edir fp, fayl göstərici üçün bərabər NULL deyil ki, əgər bütün yaxşı deməkdir. Uzun hekayə qısa, fopen kimi funksiyaları bəzən uğursuz. Bəlkə fayl mövcud deyil. Bəlkə disk yer bitti. Bəlkə, o qovluğa icazə yoxdur fopen null bir şey qayıtdıqda əgər pis oldu. Fopen null qayıtmaq deyil əgər Əksinə, bütün yaxşı və bu fayl yazılı başlaya bilərsiniz. Burada yeni oyun var. Bu, mənim tələbə hər üzərində iterating olan bir loop üçün deyil və bu, biz əvvəl etdiyiniz nə qədər benzer lakin bu funksiya, printf printf fayl üçün fprintf adlı bir cousin edir və yalnız 2 yolla fərqli görürük. Biri, o, yerinə p e ilə başlayır lakin sonra ilk mübahisə yəqin nədir? [Tələbələr] Faylın. >> Bu fayl var. Biz nəhayət bir fayl göstərici nə ayrı tease bilərsiniz fp adlanan bu şey, lakin indi fp sadəcə, mən açılmışdır ki, fayl təmsil belə fprintf burada, fayl bu istifadəçi ID çap deyil ekran deyib. Fayl üçün istifadəçi adı deyil, ekran, çap fayl deyil, təbii ki, aşağı burada sonra ekrana və ev fayl bağlayın və sonra aşağı burada yaddaş pulsuz. Bu versiya 2 və version 1 arasında yeganə fərq fopen tətbiqi və * Bu fayl və fprintf bu anlayış, belə ki, son nəticə nə nın görmək bildirin. Mənim terminal pəncərə daxil edək. Daxil edin, mənə structs2 run edək. Bütün yaxşı kimi görünür. Nin structs2 təkrar edək. 123, David Mather, 456, Rob Kirkland, 789, Tommy Mather daxil edin. Eyni hərəkət kimi görünür, amma indi ls əgər bütün kodu arasında burada nə fayl qeyd, verilənlər bazası, belə ki, o, verilənlər bazası gedit, və göz açmağa imkan verir. Bu fayl formatları və sexiest deyil. Bu, həqiqətən, satır başına satıra data xəttinin bir parça lakin Excel və ya CSV faylları istifadə edən sizin, vergül, dəyərlər ayrılmış Mən əlbəttə əvəzinə bəlkə bu kimi bir şey fprintf istifadə edə Mən, həqiqətən, bir Excel fayl ekvivalent yarada bilər ki, vergülləri, yalnız yeni xətləri ilə şeyi ayıraraq. Bu halda mən əvəzinə vergülləri yerinə yeni xətlər istifadə əgər Mən əvəzinə bu kimi baxmaq etdi, mən sözün Excel Bu verilənlər bazası faylı aça bilər. Bir sözlə, indi biz faylları yazmaq üçün güc var ki, İndi disk haqqında ətrafında saxlanılması, davam data başlaya bilərsiniz biz təkrar ətrafında məlumat saxlaya bilərsiniz ki. İndi bir az daha çox tanış olan digər şeyi bir neçə edək. Bu C fayl üst bir typedef var biz bir söz təmsil bir veri növü yaratmaq istəyirdi, çünki bu cür söz deyilir ki, və daxilində bu quruluşu İndi bir az meraklısı var. Niyə söz yəqin bir sıra ibarətdir? Yalnız daxilən bir söz nədir? Bu simvol bir sıra var. Bu geri geri geri simvol bir ardıcıllıqla deyil. Bütün caps ildə MƏKTUBLARI biz özbaşına demək olur maksimum uzunluğu biz dırmaşma üçün istifadə etdiyiniz lüğət hər hansı bir sözü. Neden +1 var? Bu null character. Biz Bananagrams misal idi, biz xüsusi bir dəyər lazım Xatırladaq izlemek üçün sözün sonunda üçün problem set dəqiqləşdirilməsi deyir sözlər həqiqətən sona çatdı yerləşir, və kimi burada biz bir sözü ilə boolean dəyər şərik edirik bir bayraq ki, doğru və ya yalan danışmaq. Biz həyata çünki siz artıq bu söz gördük biz həqiqətən xatırlayaraq yolu lazım deyil yalnız dırmaşma söz nə lakin siz və ya, insan, onu aşkar tapa əgər sözü "və" yalnız yazın deyil ki, daxil edin,, daxil edin, daxil və 3 xal, 3 xal, 3 xal, 3 xal almaq. Biz bool yaradılması söz kara etmək istəyirəm siz artıq gördük əgər niyə doğru və ki, biz var bu quruluş bu encapsulated. İndi aşağı burada Scramble lüğət adlı digər struct var. Burada yoxdur typedef sözü, çünki bu halda biz bir lüğət ideyası içine üçün lazım və lüğət sözləri bütün dəstə şey Bu array nəzərdə tutulmuş və necə bu sözləri çox var? Bəli, bu dəyişən adlı ölçüsü deyir nə. Amma biz yalnız bir lüğət lazımdır. Biz lüğət adlı data type ehtiyac yoxdur. Biz yalnız onlardan biri lazımdır, belə ki, C çıxır siz typedef demək deyil əgər, yalnız struct deyirlər ki, sonra qıvrım aşırma daxili Siz ad qoymaq, sonra dəyişənlər qoydu. Bu dəyişən adlı lüğət elan edir Bu kimi görünür. Əksinə, bu sətirləri söz adlı reusable data strukturu yaradır biz yaratdığı kimi, siz birdən çox kopyasını yaratmaq bilər ki, tələbələrin çox surətləri. Bu, son nəticədə bizə nə imkan vermir? Mənə asan dəfə isə demək asan Məsələn, qoy geri gedək, və compare1.c, deyək, mənə açmaq bildirin. Əl Burada problem həqiqətən geri peel edir bir simli qat və bu təlim təkərlər off alaraq başlamaq bir string bütün bu dəfə çıxır, çünki biz həqiqətən həftə 1-ci bir ləqəb söz kimi deyil, sinonimi bir az daha sirli görünür ki, bir şey üçün CS50 kitabxana, char *, və biz əvvəl bu ulduz gördüm. Biz faylları kontekstində o gördüm. İndi bir müddət bu detal gizlətmək olduğunuz niyə indi bax edək. Burada compare1.c adlı fayl edir və yəqin, s t, 2 strings üçün istifadəçi soruşur sonra, line 26 bərabərlik həmin strings müqayisə etməyə çalışır onlar deyir bərabər edirsinizsə və "Siz, eyni şey tipli" və onlar bərabər deyilik əgər "Siz müxtəlif şeyləri yazılmış." deyir Mənə davam və bu proqram run edək. Mənim mənbə qovluğuna girin ki, bir compare1 edir. Tamam tərtib. Mənə compare1 run edək. Mən zoom daxil olacaq. Bir şey söyləyin. HELLO. Mən bir şey demək lazımdır. HELLO. Mən mütləq fərqli şeylər yazın vermədi. Sizi bir daha bu cəhd edək. Bye Bye. Əlbəttə müxtəlif deyil, burada neler belə? Yaxşı, həqiqətən line 26-nə nisbətən olunur? [Işitilemez-tələbə] Bəli, belə bir simli, data növü, ağ yalan cür olduğunu çıxır. Simli a char * deyil, char * nədir? A char *, necə deyərlər, bir göstəricisidir və bir pointer, səmərəli bir ünvan məbləğində yaddaş yeri, və HELLO kimi bir sözlə yazdığınız nə varsa, strings keçmiş müzakirələr geri bu sözü kimi HELLO edir. HELLO kimi bir söz təmsil unutmayın bu kimi simvol bir sıra kimi və sonra sonunda xüsusi xarakter ilə null xarakter adlı olan \ işarə kimi. Simli əslində nədir? Bu yaddaş çox chunks Qeyd edək ki, Siz bütün simli baxmaq dəfə və əslində, bu, sonunda yalnız məlumdur xüsusi null xarakter axtarır. Amma bu mənim kompüter yaddaş yaddaş yığın olduqda, Gəlin özbaşına bu simli yalnız uğurlu var, deyirlər ki, və mənim kompüter RAM əvvəldən yerləşdirilmiş olmuşlar. Bu byte 0, 1, 2, 3, 4, 5, 6 ... Mən GetString kimi bir şey demək və mən simli s = GetString nə zaman həqiqətən nə geri var? Bu son bir neçə həftə üçün nə həqiqətən s saxlanılır alındığını özlüyündə bu simli deyil, bu halda nə saxlanılır alındığını edir GetString həqiqətən nə çünki sayı 0 fiziki bir string geri deyil olunur. Bu da həqiqətən konseptual mənada etmir. O geri bir sayı nə. Bu sayı, yaddaş HELLO və ünvanı və simli s, sonra biz geri peel bu qat, simli həqiqətən mövcud deyil əgər. Yalnız CS50 kitabxana bir sadələşdirmə var. Bu, həqiqətən, char * adlı bir şeydir. Nə HELLO kimi, bir sözlə, çünki Char mənada edir? Bəli, bu chars bir sıra simvol bir sıra var. Char *, bir xarakterli ünvanı mə'nasını belə nə bir string qayıtmaq deməkdir? Simli qaytarılması gözəl, sadə yol deyil deyil, mən 5 və ya 6 müxtəlif bytes qayıtmaq necə anlamaq üçün cəhd mənə olan byte üçün ünvan geri edək? İlk. Başqa sözlə, mənə xatirəsinə xarakterli ünvan verək. Yəni, char * təmsil nə yaddaşında bir xarakterli ünvan var. Dəyişən s zəng. Mən özbaşına etdiyi xüsusi ünvanı, 0 olduğunu s Store, yalnız şeyə sadə saxlamaq üçün, lakin əslində ümumiyyətlə böyük bir sıra. Bir dəqiqə gözləyin. Yalnız mənə ilk xarakterli ünvan verilməsi istəyirsinizsə, necə ünvan nə bilirik İkinci xarakteri, üçüncü, dördüncü və beşinci? [Işitilemez-tələbə] Simli sonunda bu lazımlı oyun yolu ilə olduğu Siz yalnız bilirəm siz kimi printf bir şey istifadə edərkən, nə printf sözün, onun dəlil kimi görür biz bu% s tutucu istifadə Xatırladaq ki, sonra keçmək simli saxlanılması olan dəyişən. Ne həqiqətən keçən etdiyiniz simli ilk xarakterli ünvan. Printf sonra ki, ünvan aldıqdan sonra loop və ya bir müddət loop üçün istifadə Misal üçün, 0, belə ki, mənə indi bunu bildirin printf ("% s \ n" s); Mən zəng zaman printf ("% s \ n" s); nə mən, həqiqətən, ilə printf təmin alıram bu ixtiyari halda H. olan s ilk xarakterli ünvan olduğunu, Necə printf ekranda göstərmək üçün dəqiq nə bilir? Həyata keçirən şəxs printf loop üçün bir müddət loop və ya həyata bu xarakterli xüsusi null xarakter bərabər olduğunu deyir? Əgər, o, çap. Bu necə biri? Çap deyilsə, yazdırın, çap, çap. Oh, bu bir xüsusi edir. Çap Stop və istifadəçi qayıt. Və ki, sanki başlıq altında baş edilmişdir ki, bütün və ki, bir sinif ilk günündə həzm çox çox lakin indi həqiqətən anlaşma hər şey binasında blok var ki, bizim kompüter yaddaş daxilində davam edir və nəhayət bir az köməyi ilə bu ayrı dolaşmaq lazımdır Stanford dostlarımızın biri. Stanford professor Nick Parlante bu gözəl video ardıcıllıqla həyata təqdim edən müxtəlif dillərdə bütün növ olan Bu kiçik Claymation xarakter Binky. Bir neçə ikinci sneak preview ilə eşitmək üzeresiniz Səs Stanford professor ki, siz əldə etdiyiniz Bu hüquq yalnız 5 və ya 6 seconds indi, lakin bu gün biz bağlamaq lazımdır hansı qeyd və Çərşənbə günü başlayacaq. Mən sizə Binky, önizleme ilə Pointer Fun verir. [♪ ♪ Musiqi] [Professor Parlante] Hey, Binky. Uyan. Bu göstərici əyləncə üçün vaxt var. [Binky] Nə olub? Göstəricilər haqqında məlumat əldə edin? Oh, goody! Biz Çərşənbə günü görəcəksiniz. [CS50.TV]