[MUSIC PLAYING] DAVID J. MALAN: Bu kimi birinci seminar bu gün. OLDU. Həyata Belə ki, çox yağışlı. Bu çərşənbə baş çalışır, lakin bütün daha çox imkan suallar üçün bu gün. Belə ki, həqiqətən başlamaq edək yalnız bir anda film. Amma biz hər zaman olduğu kimi şəstlə başlamaq lazımdır. Bu CS50 və bu Həftə 4 sonu. Əgər seyr etdik əgər Belə ki, TV və ya bir film çıxdığı bəzi kompüter ekspertlər var və polis, və ya FBI, və ya agentliyi bəzi tutmaq üçün çalışır rəqib, yaxşı, siz var yəqin ki, "artırmaq" ifadəsini eşitdim vasitəsi texnik birtəhər magically sonsuz zooms cinayətkarlar görmək üçün uzaq şəxsiyyət və ya plaka nömrəsi Bir güzgü belə parıltılı və ya kiminsə göz glint. Belə ki, həqiqətən, bu nəzər edək Hollywood bir neçə belə səhnələri. [Video playback] -Yaxşı, Indi sizə yaxşı bir nəzər almaq imkan verir. Onu tutun. Geri axır. -Bir dəqiqə gözlə. Doğru getmək. -Var Ki, dondurmaq. -Tam ekran. -Yaxşı Ki, dondurmaq. Siz ki, edəcək -Tighten? Ki,-da Vector geri təkər ilə oğlan. Burada bu yerində olan Zoom. Doğru avadanlıq -Ilə, image genişləndirilmiş və itilənmiş bilər. -Bu nədir? -Bu Bir genişləndirilməsi proqram. Qədər hər hansı bir aydın -Can? Mən bilmirəm. Nin artırmaq edək. Gücləndirilməsi bölmə A6. -Mən Ətraflı inkişaf etmiş, and-- Mən hesab edirəm artırmaq üçün kifayət qədər, Mənim ekran üçün azad. Mən onun göz əks artırmışdır. Bağının bu run video genişləndirilməsi. -Edgar, Bu gücləndirə bilər? On -Hang. Bu əks işləyir -I've. -Biri Nin əks. -Reflection. Insanın üz əks -Var var. -Bu Əks. Bir əks -Var var. Güzgü üzrə Zoom. -Siz Bir əks bilərsiniz. Burada image artırmaq edə bilərəmmi? Burada onu artırmaq edə bilərəmmi? Siz onu artırmaq edə bilərəmmi? Siz onu gücləndirə bilər? Bu artırmaq edə bilərəmmi? Siz onu artırmaq edə bilərəmmi? Bir ikinci tutun, mən artırmaq lazımdır. Qapını da Zoom. 10 keçir. Zoom. Da Move. -Daha. Gözləyin dayandırmaq. Stop. Onu -Pause. Bizə 75 dərəcə qayıt şaquli ətrafında edin. Stop. Hissəsi geri dön yenidən qapı, haqqında. Bitmap bilər bir image Gücləndirici-var? -Hey, Bəlkə biz Pradeep istifadə edə bilərsiniz Sen üsul Windows görmək. -Bu Proqram sənət dövlətdir. -Bu Eigenvalue off edir. Sağ -Ilə alqoritm birləşməsi O nin qəbul aradan qaldırılması Növbəti səviyyəsi alqoritmlər, və mən onları istifadə edə bilərsiniz Bu fotoşəkil artırmaq. On Lock və z-ox genişləndirmək. Gücləndirilməsi. Gücləndirilməsi. Gücləndirilməsi. Freeze və artırmaq. [END playback] DAVID J. MALAN: Bütün sağ, belə ki, o bütün həqiqətən sözləri var. Onlar yalnız bir birlikdə sinirli edirik həqiqətən həssas deyil yol. Bu kimi və, əslində, CS50 və kurslar TV və film bir çox məhv çalışır sizin üçün. O kompüter mütəxəssisləri, çünki şərtləri off şaqqıltılı və söyləyərək kimi xülya şeyi eigenvectors, və z ox, və digər hər hansı bir sayı həqiqətən, çox texniki şərtlər, Onlar, həqiqətən, yalnız stringing edirik sözləri birlikdə bütün çox tez-tez. Bizim ümid biri olduğunu ki, alaraq kursları bir yan təsiri olaraq bu kimi olacaq daha çox insan Dünya həqiqətən çəkin biləcəklər və yalnız heç belə yüngül təsir keyfiyyətli və həmin filmlərin dəqiqliyi? Əslində, əslində bir nəzər salaq. Belə ki, burada heyəti şəkil Mary, bizim tədris yoldaşları biridir. O güman bir şey şübhəli. Və hələ, işığı var onun göz dəlil bəzi parça, və ya onun gözlük əks. Bəli, biz filmlərin tam olaraq əgər biz zoom və "artırmaq" orada, təklif, Bu nə qədər məlumat Mary qarşısında deyil Bir şəkil çəkmək zaman orijinal həlli ilə. Və əslində, bu nöqtələr bilərsiniz. Bu, nə var adlı piksel, P-I-X-E-L-S, olan adətən yalnız bir kvadrat ki, bir şəkil bəstələyir bir dot edir. Və geri gün, və, həqiqətən, hətta Bugünkü LED TV bəzi bu gün və ya LCD TV, siz var, əgər Sizin otaq və ya evdə bir, Siz bu super yaxın getmək, və əgər Bu bir qədər yaşlı TV var, xüsusilə də əgər, Siz yəqin ki, hətta bu nöqtələr bilərsiniz ki, bir şəkil yaratmaq budur. Və heç bir daha çox var Bu daha məlumat. Biz mənada, "artırmaq" bilər üzərində və sort şeyi hamarlanması növ, sort nə inferring rəng Mary göz yanında olmalıdır ki, həqiqətən belə pixelated deyil. Amma yakınlaştırma saxlamaq əgər orada onun göz pis oğlan deyil. Kimi bütün məlumat olduq. Siz yarada bilməz heç bir şey həyata məlumat. Yalnız məhdud var orada bit sayı. Problem Set 4, belə Siz imkanı var Dünyanın bu cür oynamaq. Problem Set 4, siz araşdırmaq lazımdır qrafika, və Suclari dünya, və həqiqətən kodu yazmaq ki, itirilmiş images bərpa. Siz kod yazmaq lazımdır ki, mövcud images manipulates və nəticədə nə anlamaq başlıq altında gedir. Və bu, bu, həqiqətən var, çıxır bütün mürəkkəb deyil. Məsələn, əgər biz istədi bir smiley face burada təmsil bu qara piksel ilə, və ya bu qara nöqtələr, yaxşı, biz sadəcə təmsil edə bilər onlara həqiqətən bitmap. Əgər Əgər ki eşitmiş ifadə bitmap, bəlkə indi bir etmək üçün başlayır az daha mənada bu gün. Biz artıq bir az nə. Bu 0 və ya 1 var. Və bir xəritə yalnız bir şey deyil bir kağız parçası kimi ki, istiqamətləri verir və var bəlkə x və y koordinatları bir grid. Belə ki, burada bir bitmap edir. Bu bit bir xəritə var qovuşdurmağımız 1 yəqin deyil ağ pixel təmsil gedir, və 0 qara pixel təmsil edir. Amma biz, əlbəttə ki, ətrafında flip bilər. Bu həqiqətən belə yoxdur biz ardıcıl etdiyiniz kimi uzun. Və burada daxili ikili, necə kompüter yaddaş, və ya hətta daxili sabit bir fayl drive-- saxlamaq bilər smiley face şəkillər sadə. Amma biz nə var, əlbəttə, Bu şəkil yoxdur? Color, sağ? Bu aydın növbəti addım və ya genişləndirilməsi rəng ilə bu yaxşılaşdırılması üçün. Belə ki, təəssüf ki, yalnız bir ilə bit, 0 və ya 1, biz rəng təmsil edə bilər. Ki, qırmızı və ya mavi, və ya bilər qara, ya ağ və ya yaşıl və ya çəhrayı, ya rəng hər hansı bir cüt. Amma sadəlik naminə alacağıq yalnız qara və ağ daşımır. Belə ki, məntiqi, biz əgər ehtiyac nə biz bir resim rəng həyata keçirmək istəyirsiniz? Biz nə etmək lazımdır? Burada məhdudlaşdıran amil əgər kimi ki, bir bit ilə yalnız bilərsiniz edir iki dövlət, 0 və ya 1, ağ təmsil və ya qara, nə etmək istəyirsiniz? Auditoriya: Daha data. DAVID J. MALAN: Daha bit, Bəli daha çox məlumat, daha çox bit. Və həqiqətən, məhz necə rəngli görünüşlər təmsil olunur. Bir az istifadə daha çox bir 0 və ya hər pixel üçün 1, hər dot, Siz yalnız çox istifadə edin. Bəlkə, bəlkə, daha çox, 8 istifadə Problem Set, həqiqətən 24 istifadə və 4, bir fayl ilə oynayacaq adətən 24 bit istifadə format. Lakin sizin əksəriyyətiniz yəqin ki, JPEGs ilə tanış. Əgər qəbul etdik Əgər Telefonunuzda bir şəkil, və ya daşıyanlar və ya bir şey göründüyü Facebook, və ya Flickr, hər hansı bir sayı foto-based web, siz var yəqin ki, əvvəl bir JPEG image görüldü. Və bu faylı çıxır format biz pset 4 istifadə etmək olacaq vasitəsi siz olacaq images bərpa etmək Mən təsadüfən bir silindi etdik ki, kamera bad yaddaş kartı, Siz əgər. Və bu çıxır ki, baxmayaraq ki, JPEG olduqca sophisticated-- deyil Bu daha çox inkişaf etmiş var qara və ağ nöqtələr çox var, çünki biz bir an əvvəl gördüm həqiqətən xülya alqoritmlər ki belə ki, JPEG kompres üçün istifadə olunur Siz həqiqətən gözəl ola bilər ki, keyfiyyətli şəkil lakin istifadə nisbətən az bit. Və biz geri gəlmək lazımdır uzun əvvəl sıxılma. Bu ilk çıxır ki, bir JPEG image-- üç bytes olursa olsun bir fotoşəkil qəbul etdiyiniz nə of-- dəyərlər 255, 216, 255 var. Başqa sözlə, əgər yalnız bit ki, model görmək, üç burada təmsil bytes, və ya 24 bit, cəmi yüksək ehtimalı ilə ki, nəticə çıxarmaq olar Bu ilk üç onu axtarır bir JPEG bytes. Bu nə məlum var edir bir JPEG imzası kimi. Fayl formatları bir çox başlamaq üçün var edirlər həyata 0s və 1s müəyyən nümunələri ilə, ki, Windows və Mac OS və iOS, belə ki, və Android bilmək fayl nə cür sözdə fayl əlavə var uzadılması faylları bir çox var. Siz .jpg varsa, ki Kompüter üçün başqa bir ipucu. Belə ki, indi bu baxmaq edək daha texniki bir az. Biz decimal bilirik Sistem 9 0. Biz ikili 0 və 1 bilirik. Və pset geri düşünüyorsanız 0, biz, siz güləşmək idi bir az bir şey hexadecimal adlı, 16 rəqəm olduğu, əvəzinə 10 və ya əvəzinə 2. Və o rəqəm, Konvensiya ilə, sonra 9 vasitəsilə 0 var f nə təmsil f vasitəsilə yalnız bir sürətli ağlı başında olma kimi bu sayı, yoxlamaq? Belə ki, 15. Və sadəcə, 10 təmsil etməlidir Mən təqdim etdik sifariş xarakteri. Bu, yalnız bir ixtiyari konvensiya var lakin kifayət qədər standart var. Bu model baxmaq Belə ki üç edək bayt yalnız baxmaq başlayır necə uyğun bir şəkildə ümumiyyətlə kompüter alimləri baxmaq və faylları haqqında düşünürəm. Siz əlbəttə ki, haqqında düşünmək olar 0s faylları, və 1s və decimal, lakin əslində, biz ikili istifadə edirlər və ya daha çox adətən hexadecimal-- geri pset 0. Belə ki, mənə təklif edək ki, 255, 216, və 255 0s və 1s yalnız bu nümunələrindəndir. Və bu yoxlamaq edə bilərsiniz Həftə 0 riyaziyyat etmək istəyirəm. Amma indi üçün, yalnız güman Bu, həqiqətən doğru deyil. Mən yalnız üç decimal yenidən etdik üç ikili dəyərlər nömrələri. İndi mən nə gedirəm edir yalnız bir ağ boşluq əlavə, yalnız okunabilirlik xatirinə. Və bildiriş, mən yalnız gedirəm şeyi ayrı hərəkət etmək. Belə ki, əvvəl, sonra, əvvəl, sonra. Mən digər maraqlı bir şey edirəm yalnız belə şeyi yayılması çox ki, bildiriş səkkiz hər set bit dörd bit iki dəst var. Bu hexadecimal çünki faydalıdır xüsusilə dəbli çünki hər bir hexadecimal rəqəmli 0 vasitəsilə f, və ya daha çox xüsusi 0 vasitəsilə 15, təmsil oluna bilər məhz dörd bit ilə. Başqa sözlə, hexadecimal əgər yalnız 0000, bir 0 təmsil etmək istəyirəm, Dörd adet sıfır. Və 15 təmsil etmək istəyirsinizsə, dörd bit olan 1111 deyil. Və riyaziyyat əgər, Bu isə yer olduğu halda, Bu, 16'lar yer ki, Səninlə vermək olacaq deyil ki, olacaq sorry to--, ikili, 15 vermək olacaq, olanları yeri, ikilər yeri, dörd ayaq və səkkizinci yer. Mənə ki, təklif edək sol, dörd bit set biz f zəng olacaq nə. Bu ən böyük sayı siz Dörd bit ilə təmsil edə bilər. Və biz artıq hexadecimal bilirik, f hexadecimal ən böyük rəqəmdir. Biz orada bir f var iki orada daha çox. Və indi üçün, yalnız iman etmək Mən riyaziyyat hüququ etmiş olduğumuz ki, sol yarım bu bit, 1101, hexadecimal d eyni şeydir. Və sağ, 1000, yalnız 8 var. Və asan ki, bir sağ, görmək üçün? 8 represents-- doğru ki, səkkizinci yerdə altında. Beləliklə, biz səkkizinci sütun bir var və dörd ayaq, ikilər və ya olanları heç bir şey. Belə ki, indi daha çox şərti, insanlar edirlər oxşar hexadecimal rəqəm yazmaq, yalnız onlara birlikdə squish və sonra 0x ilə prefiks. Bu başqa heç bir şey deməkdir bir human-- vizual ipucu Burada hexadecimal dəyər, çünki gəlir başqa aydın ola bilər. Hansı ki, nəticədə, demək deyil adet sıfır və olanları model və ya hexadecimal model rəqəm equivalently sen ki, axtarır başlamaq üçün gedir Problem Set 4 şeylərdir deyil və Problem Set 4 spec gəzmək olacaq daha detail-- bu vasitəsilə lakin oynamasından sort kimi həyata Bu, ilk baxışda ola bilər Bu bir çox görən başlamaq olacaq. Və əslində, hətta gdb, ayıklama biz bazar ertəsi təqdim və Dan pset 3, gedir təqdim tez-tez hexadecimal dəyərləri göstərmək üçün yalnız onlar daha çox olur, çünki bu və ya ikili daha şərti kompüter dünyada. İndi kontekstində bu qoymaq bildirin. Bir çox bu xatırlayıram bilər of nə gəldi ki, burada şəkil? Vista, belə ki, hətta daha əvvəl ki, Windows XP bu debüt etdi. Belə ki, bu bir gözəl mənzərə var. Və əslində, online-- ətrafında soxmaq əgər Mən bir Wikipedia article var ki, orada kimsə çox qəribə çıxdı aşkar dünyada bu yer qurmaq onun kamera dəqiq sağ place-- və bu gün like-- görünür, ancaq Bu eyni qəbulu var. Bu şəkil, baxmayaraq ki, bir fayl var format adlı bitmap, b-m-p. Və biz bir super almaq olacaq o deməkdir ki, nə tez nəzər. Amma bitmap yalnız bir müxtəlif yolu təmsil images hələ piksel istifadə 0s və 1s, nəticədə. Amma tez baxışda, o daha maraqlı imza fayl başında. Bu, yalnız üç deyil bytes, daha var bayt nümunələri bütün dəstə ki, mənası müəyyən edirlər. Məsələn, bir yerdə bir bitmap image ilk bir neçə bayt ölçüsü olacaq image image eni, image hündürlüyü, belə ki, faydalı metadata, siz əgər. Faydalı məlumatlar Photoshop və ya hər hansı qrafik istifadə etdiyiniz proqram həqiqətən qayğı bilər. Bu barədə daha çox Problem 4 Set, lakin bu ki, yalnız Günün sonunda Siz istifadə etdiyiniz bütün fayl formatları il ərzində Microsoft Word faylları, Numbers faylları, Excel faylları, fayl formatları hər hansı bir sayı ki, bir ola bilər məlum fayl uzantısı başlıq altında yalnız 0s və 1s var. Və insanlar qərarına gəldik konvensiyalar nə, nə 0s və 1s nümunələri təmsil Word, Excel fayl qarşı fayl digər fayl formatları bir sıra qarşı. Pset 4 Belə ki, bir lazımdır imkan ilə oynamaq. Amma nə bir struct var demək. Bu indi həqiqətən gözəl segue yalnız bir neçə var daxil C, əlavə xüsusiyyətləri ki, biz hələ baxdı yoxdur. Bu olduqca kiçik dil və biri C gözəl xüsusiyyətləri bir struct edir. Məsələn, əgər edək represent-- istədi Bir dəyişən etmək istəyirdi deyirlər ki, bəzi proqramda bir tələbə təmsil edir. Bəlkə bir kurs yazılı idi qeydiyyat proqram və ya əsas alış-veriş alət, və ya kimi bir şey. Bağlı məlumatların ədəd hansılardır ağla gələn bir tələbə üçün necə? Tələbə kimi dəyərlər nə ilə təmsil? Evet? Siz bir tələbə kimi bir ad var. Tipik tələbə başqa nə var? Auditoriya: [işitilemez] DAVID J. MALAN: Belə ki, sorry. Auditoriya: Age. DAVID J. MALAN: An yaş və ya ad equivalently, yep. Başqa? Auditoriya: ID sayı? DAVID J. MALAN: Bəlkə belə bir şəxsiyyət nömrəsi, telefon nömrəsi, bəlkə bir yurt və ya ev, kollec, və ya kimi bir şey və ya. Məlumatların ədəd hər hansı bir sayı ki, Siz kontaktlar siyahısında ola bilər tələbə müəyyən edə bilər nə. Biz kodu, bu etmək istəyirdi Belə ki, Biz bu kimi sadə bir şey ola bilər. Biz ki, bir proqram ola bilər var, demək int əsas (void) bildirin. Mən bir təmsil etmək istəyirsinizsə, Mən, məsələn, ola bilər, tələbə, ki, tələbə adı adlı simli, ki tələbə üçün yurt adlı simli, bəlkə bir int ki tələbə üçün ID çağırıb. Mən string istifadə edirəm, çünki mən cs50.h. geri getmək və qoymaq lazımdır Bəlkə stdio.h lazımdır gedirəm. Mənə preemptively o bunu bildirin və mən indi bu student.c zəng olacaq bu edin. İndi bir şey edə bilərsiniz bu dəyişənlərin. Və biz yalnız yazmaq olacaq ki, yalançı kodu bir comment kimi, maraqlı deyil, çünki biz indi üçün nə. OK, belə ki, bu bir proqramdır ki, elə bir tələbə saklar. Mən əgər nə istəyirsiniz mən iki şagird saxlamaq istəyirsiniz? Belə ki, mənim ilk instinkt gedir bir dəqiqə gözləyin, bütün sağ olmaq, Mən bir tələbə varsa, niyə mən deyil yalnız simli adı 2 string yurt 2 yoxdur, int id2. Və biz getdi etdik Bu yolun əvvəl aşağı və görünür nə üçün həll nə idi bir hackish surəti pastası cür burada iş? Auditoriya: bir sıra. DAVID J. MALAN: Bəli, biz bir sıra istifadə edə bilər. Right bu çox tez yöndəmsiz olur. Siz özbaşına düzmək lazımdır bu dəyişənlərin bütün adlandırma başlayın. Və insan, saxlamaq lazımdır OK name2 uyğundur izlemek dorm2 ilə id2 ilə uyğundur. Bu, sadəcə bir mess olur. Belə ki, bir çox asandır bir neçə həftə əvvəl geri, yalnız adlı simli adları olan və bəlkə bizə bu üç verir. Və sonra bəlkə biz string yurdda və var o üç və ya daimi ilə, kimlikleri int və həmin üç var. Lakin hətta indi bu hiss bir az sloppy, doğru. Biz hələ tələbə və söhbət edirik Mən, həqiqətən, aşağı səviyyədə yaşayış alıram həyata keçirilməsi ətraflı. tələbə adı və bir yurt və ID edir. Niyə yalnız bir dəyişən elan edə bilməz tələbə adlanır və bu s zəng. Mən bir tələbə istəyirsinizsə, niyə yalnız t demirik. Və ya bütün dəstə istəyirsinizsə tələbə, niyə yalnız deyil Mən bütün sinif var demək tələbələr, və onların üç var. Başqa sözlə, niyə gələ bilər adlı öz data növü ilə qədər Şagirdlər, içərisində olan var bir ad, bir ID bir yurt var, digər sahələrdə hər hansı bir sayı. Və bu çıxır məhz edə bilərsiniz. Belə ki, C struct adlanan bu xüsusiyyət var. Ki, bir dil xüsusiyyət var ki, Bizə məhz bunu etməyə imkan verir. Mən irəli getmək üçün gedirəm və structs.h açmaq biz görmək olacaq harada tələbə anlayışına aşağıdakı. Belə çıxır - və bu bir daha var ID cəlb bir çox sadə bir an əvvəl. Siz ilə gəlmək istəyirsinizsə Sizin ev data type, və int əlavə və char və mövcud və bütün bu başqaları sal Siz sözün bunu edə bilərsiniz typedef struct yazı, sonra bəzi qıvrım aşırma, olan daxilində Istədiyiniz dəyişənlərin siyahısı Bu yeni xüsusi data şərik bir adı və bir yurt kimi yazın, və sonra qıvrım aşırma sonra Yeni data növü bir ad verin. Belə ki, məsələn, tələbə. Və indi bu barədə gözəl ki, biz müvafiq kodu baxsaq, ilk konqres, bütün bu qoymaq üçün bir fayl deyilən bir şey dot saat, biz bir header file, çox özümüzü istifadə edərək başladı. Amma biz başlamaq olacaq İndi bir qədər istifadə. Və biz bu nə edə bilər, nəticədə, kodu bu bir neçə xətləri dəqiq bəyan edir data type, tələbə. İndi onu istifadə edək. İndi getmək üçün gedirəm bir fayl structs1.c çağırıb. Və bir nəzər edək Burada bir neçə xüsusiyyətləri. Belə ki, burada stuff deyil əsasən tanış, və biz lazımdır nə deyil qayıda yalnız bir anda tanış. Əlbəttə, bu mənim öz daxil edir eləcə də yeni header file, pset 3 istisna olmaqla, Xatırladaq ki, biz helpers.h var. Belə ki, # daxildir helpers.h xatırlayıram bilər. Niyə olsa quotes istifadə edirəm əvəzinə bucaqlı mötərizələr? Mən onların arasında seçim edə bilərəm? Demək olar ki, həmişə görünür bucaqlı Mötərizədə istifadə etmək. Və sonra, bir bütün qəflətən line altı Mən ikiqat quotes istifadə edirəm. Nə ola bilər? Evet? Auditoriya: [işitilemez] DAVID J. MALAN: Bu, nə faktiki var? Auditoriya: Ki, IDE var. DAVID J. MALAN: Bəli, ki, mənim faktiki IDE var. Və çünki IDE dayanmaq deyil bildirin ki, yalnız mən istifadə edirəm bir aracıdır. Mənim cari var directory, xüsusi. Belə ki, structs.h öz fayl IDE yüklü deyil, əməliyyat sistemi özü, əksinə mənim cari kataloq var. Belə ki, Konvensiyanın istəyirsinizsə deyil Öz header fayl daxil, Yalnız ikiqat quotes istifadə edin. Biz bu şey zəng nə line 8, ümumiyyətlə? Bu nədir? # müəyyən bir şey. Bu hüquq, sabitləri təmsil? Bir istəyirsinizsə Proqram dəyəri Bir bütün istifadə dəfə dəstə, bu onu amil Konvensiyanın yaxşı hash simvolu ilə, bəyan bütün konvensiya, sonra müəyyən bu deyil, baxmayaraq word-- böyük və ciddi zəruri, lakin insan konvensiya var sabitləri kapitallaşdırmaq onlar sıçramaq ki Siz yer visually-- və sonra istədiyiniz dəyər olmaq ki, daimi adı ekvivalent. No nöqtəli vergül, sadəcə orada model edin. Belə ki, nə bu faktiki kodu edirəm. Belə ki, bir nəzər salaq Burada əsas proqram. Line 12 Çünki structs.h daxil, Mən indi magically mənim silinmə yeni data növü. Mən yalnız int çıxışı yoxdur və char və float, və simli, və mavi və s. İndi etmək imkanı var tələbə data type. Line 12, mən iki birləşən alıram So , bir xüsusi data növü və iki ideas-- bir sıra istifadə edərək. Və bu proqram əgər Mən, həqiqətən, dəstək istəyirəm Üç müxtəlif tələbələr mənim proqram, mən Mənə bir dəyişən vermək demək sadəcə bilər hər biri adlı tələbələr, növü tələbə olan Mənim xüsusi data növüdür. Və, xüsusilə, mənə vermək Mənim array həmin üç. Belə ki, indi biz bu proqramı nə etməliyəm? Burada yalnız bir loop iterating üçün var ki, çünki, 3 0 tələbə dəyəri nə. Mən yalnız istifadəçi isteyen alıram Mənə tələbə adını verir. Və sonra line 17, biz əsasən tanış xətt var. Bizim köhnə dostumuz var Sağ GetString. Sintaksis və nə parça , yəqin yeni Əvvəl C proqramlaşdırılmış heç vaxt varsa, və structs istifadə heç vaxt? Evet? Auditoriya: .Adı. DAVID J. MALAN: .Adı. Amma bu, bir sıçrayış çox deyil İndi tələbələr i bracket, çünki siz i-ci tələbə verir. Və dalış istəyirsinizsə ki, strukturu daxilində, Siz yalnız bir müddət istifadə və sonra daxili dəyişən adı, və ya daxili əmlak Siz əldə etmək istəyirəm. Eynilə sonra, mən sonra təklif, əgər istifadəçi mənə tələbə yurd vermək, Siz eyni ki, bilərsiniz daxili yurt dəyişən string tələbə strukturunun. İndi hər şeyi bir az xülya almaq. Bu baxmaq üçün gedir bəlkə bir çox olduqca tezliklə. Amma pset bu qədər daha çox olacaq 4, belə ki, indi yalnız nəzər edək. Bu xətt 23 vasitəsilə çıxır ki, 38, mən bəlkə edirəm nə düşünürsünüz? Mən şərh xaric etdik Bu gün, lakin versiyası üçün online kod reference bütün yapılan yorumlar. Mən bunu nə görünür? Auditoriya: bütün fayl Saving istifadəçi daxil məlumat. DAVID J. MALAN: Bəli, məhz, bu yeni bir yoldur biz iki gördükdə ki, C başqa bir xüsusiyyət, vasitəsi Mən öz faylları yarada. Bu günə qədər, demək olar ki, hər bir proqram yazdıq Siz vətəndaşlığı olmayan edir. Kimi tezliklə çalışan həyata kimi, ki, var. Heç bir yaddaş və ya onun xatirə var. Xilas heç bir fayl var. Amma istəyirsiniz əgər var daxil saxlamaq Bir oyun və ya bir proqram kimi, baş Bu kimi, biz bunu edə bilərsiniz çıxır. Və bu daha çox lazımdır pset 4 və Bölmə. Amma bu xətt 23 mahiyyətcə students.csv adlı bir fayl yaradır. Və əvvəl bu görmüşəm bilər. Əvvəl CS tədqiq heç etdik, hətta, CSV virgülle ayrılmış dəyişənlər var. Bu, çox yoxsul insanın kimi Excel fayl versiyası bu da açıla bilər o deməkdir ki, Excel və Apple Nömrələr, və satır ve sütun var. Amma bu xüsusi deyil Microsoft və ya Apple kimi format. Bu ayıran yalnız vergülləri var biz bir anda görəcəksiniz dəyərlər. Və yalnız bir tahmin edir. Çox xətti 23-da sonunda, mənim ikinci dəlil adlanan bu yeni funksiya f faylı açmaq üçün açıqdır w edir. W nə işarə ola bilər? Evet? Auditoriya: Bu fayl yazmaq imkan verir? DAVID J. MALAN: Bu imkan verir Siz fayl yazmaq. Belə ki, variantlar bir neçə var ki, biz burada plug bilər. Amma yalnız oxumaq istəyirsinizsə fayl ki, ona baxmaq və yaddaş onu oxumaq yalnız quote dırnağı bağlamaq "r" istifadə edin. Siz yazmaq istəyirsinizsə, fayl, siz "w" dırnağı bağlamaq quote istifadə edin. Orada da əlavə edir və digər şeyi bir neçə mövcud faylları dəyişdirmək istəyirsinizsə. İndi biz bu görən saxlamaq olacaq 24 sıralamaq üçün bir şey, biz geri gəlmək lazımdır. NULL, bu çıxır, var xüsusi dəyər ki, müəyyən funksiyaları ilə geri bilər bir şey wrong-- getdi əgər fayl mövcud deyil, əgər, yaddaş tökülmək olsanız, digər səhvlər və ya bir dəstə. Amma indi üçün, yalnız bu ki, güman edək yalnız şərti səhv yoxlanılması edir. Burada line 26, mən iterating alıram 0-dan bütün tələbələr üzərində 3. Və bu sort cür yeni funksiyası, fprintf, lakin yalnız bir tahmin edir. Printf yalnız çap əgər biçimlendirilmiş string, fprintf yəqin ki, nə deməkdir? Auditoriya: bir fayl yazdırın. DAVID J. MALAN: Print bir fayl biçimlendirilmiş string. Əlavə nə var f deməkdir fayl. Və yeni ilk dəlil olmalıdır fayl təmsil dəyişən. Sonra biz yalnız bir format var yalnız printf kimi string. Və hətta bu olsa syntax bu yalnız yeni, tələbə adı plug deməkdir, tələbə yurt plug-in, sonra fclose ilə, fayl bağlayın. Və sonra bu yeni lastly-- və biz bu geri gəlmək lazımdır Mən azad edirəm long-- əvvəl səbəblərdən tələbə ki, orada yuxarıda baş verib. Amma biz geri gəlmək lazımdır ki, long-- əvvəl çünki GetString nə qədər var həqiqətən başlıq altında çalışır. Belə ki, burada tez nəzər salaq. Mən kataloq ls yazın əgər, Mən bunu ki, qeyd , students.csv adlı bir fayl var yalnız orada yoxdur. Mən indi bu proqram tərtib Belə ki, , structs-1 olun. / Structs-1, Mən irəli getmək və yazın gedirəm Yale Berkeley yaşayır Andi. Biz Rob olacaq olan bu gün Thayer yaşayır. Və burada ilə gəlmək imkan , mən hesab edirəm ki, Maria, Mather edir əgər mən doğru xatırladım. Belə ki, heç bir şey baş görünür. Amma indi ls yazın əgər, students.csv var. Nin irəli və açıq students.csv gedək. Bu yenidən çox deyil yüngül fayl format. Amma sadəcə bir konvensiya qəbul etdik ki, mən burada iki satır ve sütun var. ilk sütun edir insanların adları. İkinci sütun tələbə deyil yurt, və ya kollec, və ya ev və ya etajer. Və indi bu xilas etdik daimi bir fayl. Belə ki, bütün maraqlı deyil. Amma bu yalnız bir step daş indi məlumat davam edə olan daimi. Belə ki, indi nə daha biz görək bu və digər xüsusiyyətləri ilə. Lakin ilk, hər hansı bir sualınız? Ki, bir çox idi ki, sürətli idi. Amma bir çox görəcəksiniz pset 4 daha, həm də. Evet? Auditoriya: bir yol var ki, fayl adları əlavə davam? DAVID J. MALAN: Yaxşı sualdır. Davam etmək üçün bir yolu var mı ki, fayl adları əlavə? Bəli. Və əslində, başa əgər up, faylı açılması Siz quote istifadə edir dırnağı bağlamaq "a" əlavə etmək üçün, olan yalnız yeni xətt əlavə edəcək bir yeni xətt təkrar, dəqiq. Yaxşı sualdır. Digər suallar? Evet? Auditoriya: siz qaçdı varsa proqramı yenidən indi, bu adları əlavə saxlamaq olardı fayl və ya yeni bir fayl açmaq olar? DAVID J. MALAN: Ah, yaxşı sual. Siz yenə sağ proqram qaçdı əgər İndi, bəlkə yeni adlar tipli, Bu fayl əlavə edəcək və ya fayl üzerine? Sonuncu, mən deyiləm, çünki Əlavə rejimi istifadə. Mən yalnız kor-koranə deyiləm, çünki yazmaq üçün faylı açılması, yalnız fayl üzerine olacaq. Beləliklə, mən, həqiqətən, əlavə nə etmək lazımdır ki, Mən, həqiqətən, uzun müddət etmək istəyirsinizsə verilənlər bazası. İndi CSV hətta səmimi, faydalı kimi değilseniz writing-- və biz nəhayət bu görürsünüz sonra zaman dövr digər məqsədlər üçün CSVs istifadə edin. Siz insanların bütün saxlamaq istəyirsinizsə olan bəzi hadisə üçün qeydiyyatdan və ya tələbə üçün imzalanmış qrup, və ya kimi bir şey, bu cür məlumatların saxlanılması format super rahatdır. Sözün Çünki, mən əgər Bu faylı yükləmək üçün idi. Mən double-- bilər və nin əslində bu cəhd edək Mən burada Excel və ya Nömrələr varsa. Mən sağ-klik gedirəm və ya fayl nəzarət basın. Whoops. Sağ basın və ya fayl nəzarət basın. Hadi, mənim siçan əməkdaşlıq deyil. Mən gedirəm DOWNLOAD belə ki, burada bütün faylları yükləmək yalnız mən bu bir qamarlamaq bilər. Bu işləri nin görək students.csv-- ilk dəfə Mən aktiv etdik. İndi onlar mənim əlaqə görmək istəyirik. İndi qeydiyyatdan lazımdır. Bu CSVs istifadə etmək nə qədər asan oldu? Bəli, bu günə qədər saxlamaq. OK, indi biz sinfi üçün hazırıq. Oh, OK, yeni nə var? OK, yaxın. Ki, sehrli idi. OK, indi biz yeniləmə var. Və indi, bu unuttum nə Mən ilk açılan fayl, lakin a-- biz getmək. OK, belə ki, indi biz bir Excel fayl var. Təşəkkür edirəm. OK, mən belə nə asan hissəsi idi. Təbii ki önceden götürmüş ola bilər Excel, və ya Nömrələr, və ya hər hansı proqram. Amma bu, çünki, gözəl indi manipulyasiya edə bilər standart formatda data. Belə ki, indi edək kontekstində biz off sol harada keçmək başlamaq üçün idi son dəfə, təlim təkərlər çıxarmaq. Amma ilk, siz etmədi Bu əvvəllər nahar görmək yenidən Yanğın burada baş və New Haven Cambridge, Sitar buz. ASAP CS50s saytında qeydiyyatdan CS50 tələbə və heyətinə qatmaq üçün. Beləliklə, biz təlim təkərlər etdi bazar ertəsi off Bu aşağıdakı kimi string elan edildi Bir müddət CS50s kitabxana. Bu imkan verir, çünki bu, gözəl Bizə kimi dəyişənlər haqqında danışmaq tam söz və cümlələr və daha çox. Amma bu mövcud deyil simli çıxır. Bu yalnız bir sinonimi və ya ləqəbidir, biz bir şey yaratdıq ki, əslində bir az daha çox texniki * Bir char çağırıb. Həqiqətən, biz nümunə gördüm bazar ertəsi proqramı ki, gözlədiyimiz olduqca kimi davranmaq etməyib. Bu müqayisə-0, fayl idi. Və əgər müqayisə-0 geri Mən Bazar ertəsi proqram derleyeceğiz və run-0 müqayisə və ana yazın daha kiçik kiçik və ana. Proqram I israr fərqli şeylər yazın, hətta ana, bütün baxmayaraq kiçik, vizual eynidir. Belə ki, qısa cavab nə idi kompüter düşünür nə üçün bu iki strings müxtəlif var? Evet? Auditoriya: [işitilemez] DAVID J. MALAN: Sağ. Belə ki, ana, first time Mən olunur, onu yazın mənim kompüter yerdə saxlanılır yaddaş lakin müxtəlif yerdə ikinci dəfə daha mən ana yazın. İndi əlbəttə optimize bilər. kompüter ağıllı ola bilər və , hey, bu iki strings həyata Onlar eyni istəyirik. Mənə redundantly onu saxlamaq edək. Lakin kompüter bunu etməyin optimallaşdırılması onlara demək halda. Belə ki, ismarıcları, onlar yalnız başa gedir yaddaşında iki müxtəlif yerlərdə. Belə ki, daha çox aydın olmaq biz iki strings müqayisə ilk çağırıldı s, ikinci çağırıldı t, xüsusilə mən nə idi line 13-də burada müqayisə? Bəli. Auditoriya: Bu yaddaş yer dəyişən qeyd edəcək. DAVID J. MALAN: Məhz, mən yaddaş yer müqayisə ki, həmin dəyişənlərin işarə etdi. Belə ki, xüsusilə, əgər ana idi byte sayı 1, 2 və 3, və 4-- çünki backslash xatırlayıram 0 sonunda bütün yol olmalıdır. Və ana, m-o-metr digər instansiya, 10, 11, 12, və 13 idi. I 1 müqayisə olunmuşdur ki, ünvan, yaddaş ki, yeri, 10 qarşı olan açıq-aydın deyil, eyni. 1 10 deyil. Belə ki, bu ki, gözəl bu, olduqca sadə. Amma bu kimi insofar problem var biz strings müqayisə üçün görünə bilməz. Belə ki, fundamentally-- və bu aşağı səviyyədə, Siz həyata keçirmək istəyirdi bir proqram müqayisə etmək iki ayrı sözləri istifadəçi keyfiyyəti tipli Onlar üçün char xətti yoxdur yalnız ümumi baxımından char, nə biz, yəqin, nə etmək lazımdır? Bu, sadəcə kifayət qədər deyil bu iki ünvana baxın. Biz nə etmək lazımdır? Evet? Auditoriya: vasitəsilə təkrarlamaq string [işitilemez]. DAVID J. MALAN: Bəli, edək simli vasitəsilə təkrarlamaq. Nin loop, bir müddət loop üçün istifadə edək, və ya Siz ən rahat olduğunuz nə. Və biz bir yerdə iki strings var, əgər yaddaş, bir-birinin baxaq ilk xarakteri, sonra hər ikinci var xarakteri, sonra üçüncü və dördüncü, və beşinci biz hit qədər nə xüsusi sentinel dəyər? Auditoriya: [işitilemez] DAVID J. MALAN: Bəli, backslash sıfır ya simli hansı nöqtədə biz ki, var seçə bilərsiniz. Biz hər bir xarakter eşlemeli var? Əgər, saxta qayıtmaq. Əgər belədirsə, doğru qayıtmaq. Və belə ki, nə bu versiyası dəqiq Proqramın müqayisə-1.c yoxdur. Bu eynidir biz Mən var istisna olmaqla, Bazar ertəsi baxdı baxmayaraq söz string xilas kazanılmış ki, heç bir funksional impact-- var İndi edirəm qaldırır bəzi vizual təlim disklər, lakin aydın görmək s və t ünvanları var. Və nə ulduz var ulduz, təmsil bir ünvan başqa tanınan, daha texniki bir göstərici kimi. Belə ki, mən s bəyan zaman line 9 və char * s demək, mənə bir string vermək demək deyil. Mənə onun bir dəyişən vermək deməkdir həyat məqsədi ünvan saxlamaq üçün. Mən qoymaq haqqında am çünki bu bir simli ünvanı. Həqiqətən, GetString olmaq aydın, bir simli qayıtmaq deyil. Bu ana qayıtmaq deyil backslash sıfır, özlüyündə. Xüsusi nə GetString edir və dəqiq qayıtmaq? Auditoriya: [işitilemez] DAVID J. MALAN: An ünvan, ilk xarakterli ünvanı bəzi simli bu kazanılmış etmişdir. Və indi biz gördükdə daha xüsusi bir söz. Və mən bu əvvəllər üçün alluded. Bu yaxşı konqres olacaq indi təkrar görəcəksiniz ki. Hesab edirəm ki, əmin etmək yoxlanılması alıram s null deyil və t null deyil. Həqiqətən, mənim əsasında Çünki tez qeyd əvvəl, GetString deyil qaytarır əgər demək bilər nə bir ünvan lakin yenə N-U-L-L, bəzi xüsusi dəyər? Auditoriya: Error. DAVID J. MALAN: Bu bir səhv deyil. Bir şey yanlış getdi. Və nə adətən xüsusilə, baş verə bilər strings-- olan ola bilər advance-- naməlum uzunluğu bəlkə kompüter " yaddaş, bəlkə Siz belə bir Yığdığınız Uzun söz və ya cümlə və ya belə böyük bir esse yapışdırılır yalnız kifayət qədər yaddaş var. Və belə GetString geri bilməz bütün şey ünvan, belə ki, yalnız bir şey qaytarır. Və bir səhv baş verib xüsusi NULL dəyəri qaytarılması ilə. Bu, belə danışmaq, sıfır ünvanı var. İndi çıxır C ilə gəlir ki, iteration yoxdur fəaliyyət göstərir. Biz bu həyata yoxdur loop və ya bir müddət loop özümüz üçün. Biz bir funksiyası istifadə edə bilərsiniz, müfəssəl adlı, kimin, comp tərpənmək, və ya simli müqayisə həyat məqsədi məhz bunu edir. Siz bu iki göstəricilərinə, iki ünvanlarını verir, və bu ünvanlara gedəcək və sonra üçün məktub müqayisə keyfiyyəti hərf üçün məktub, doğru nə yalnız dayandırılması? Daxilən comp tərpənmək lazımdır zaman , yalnız aydın iterating olmaq dayandırmaq? Bu bir backslash 0 xit zaman bilərsiniz simli, hansı nöqtədə bu qərar qəbul edə bilər hər şey, eşlemeli və ya bir uyğunsuzluq olmuşdur? Biz indi bu run əgər Belə ki, cəhd Bizim kiçik kapitallaşma oyun belə müqayisə-1, ./compare-1 etmək və kiçik iki dəfə ana yazın. İndi eyni şey. Və mən bir daha bunu əgər kiçik və sonra bəlkə böyük. İndi həqiqətən fərqləndirir yuxarı və kiçik arasında. Belə ki, bütün ağır ya sehrli, lakin indi izah edir nə başlıq altında olacaq. Belə ki, daha biz çıxarış bilər nə Dərsin bu cür? Belə ki, bu nəzər salaq. Mən irəli getmək və bir yazmaq üçün gedirəm sürətli proqram burada surəti 0 çağırıb. İndi irəli və həqiqətən gedək , surəti-0 şeylərdir edək Mən burada var nə bir göz atın. Mən ilk istifadəçi demək, bir şey demək. Sonra mən bir string almaq və mən s saxlanılır. S bərabərdir əgər mən yoxlamaq NULL bərabərdir, yalnız 1 qayıtmaq. Belə ki, bu yalnız standart səhv yoxlanılması edir. Maraqlı bir şey baş verib. Və əslində, biz səhv xilas əgər yoxlanılması, bu həftə 1 kodu kimi görünür bu anda. Amma bir almaq üçün açılmış etdik bu barədə daha az. İndi line 16, bir həftə əvvəl, bəlkə hətta bir neçə gün və ya dəqiqə əvvəl, Siz line 16 deyə bilər adlı dəyişən t yaradılması və çıxarmaq onu s. Və bir mükəmməl var ağlabatan paket. Amma indi daha dəqiq ola bilər. Line 16 nə baş verir? Nə sitemizi olur sağ sol? Evet? Auditoriya: t s ünvanı əldə edilir? DAVID J. MALAN: Məhz, t s ünvanı olur. Mən getmək əgər Belə ki, indi aydın olmaq geri ki, əvvəllər Məsələn və mən çap etdik şey cəlb edir. Mən tipli nə in-- burada, və burada Mən haradasa çap etdik nə yaddaş, mom and sonra backslash Mənim üçün əlavə edib 0. Mən burada saxlanılır, geri Bu, yeri 1, 2, 3, 4 edir bu s hazırda nə. Line 16 Belə ki, mənə vermək demək başqa dəyişən adlı t və mağaza s dəyəri ilə, nə burada saxlanılır olur ana olmayacaq deyil, yalnız 1 nömrəli. Bu proqramda irəli baxmaq Belə ki İndi nə baş verəcək? Belə ki, var ki, qeyd Bu funksiya bilər Sezar üçün bir müddət əvvəl bu istifadə, və ya Vigenere, və ya bəlkə deyil, bütün. Mən deyiləm, mənim printf ilə iddia surəti t kapitallaşdırmaq gedir. Birinci xətt 19, sürətli ağlı başında olma ilə , t strlen yoxlayır uzunluğu edin. Mən istəmirəm, çünki bir kapitallaşdırmaq üçün cəhd edin əgər heç bir string var. Istifadəçi yalnız Enter hit varsa, kapitallaşdırmaq üçün heç bir şey yoxdur. Belə ki, xətt 21 etmək istəmirəm. Belə ki, line 21 hərflə olan yəqin məktub, t? Auditoriya: m? DAVID J. MALAN: görünür kimi çıxarmaq olan biri? Auditoriya: m. DAVID J. MALAN: Uh, m. OK, ilk m ki, Mən xəbəri çünki , toupper üçün keçən hansı Siz onu görməmişəm, əgər bu yalnız bir funksiyası onun giriş kimi kapitallaşdırmaq. t bracket sıfır vermək deməkdir Mənə t sıfır xarakter. Və belə ki, necə bu yoxdur şəkil dəyişikliyi, aydın olmaq? Nə yenidən və ya dəyişdirilə almaq lazımdır s hörmət və t və anası ilə backslash sıfır. Auditoriya: [işitilemez] DAVID J. MALAN: Bəli, bu bir burada sadəcə şeylərdir düzeltmek to-- dəyişdi almaq lazımdır kapital m dəyişib almaq lazımdır. Amma indi, sonra baxmaq proqram, Mən çap əgər Mən burada təmiz kimi və t, nə baxın s və t çap baş verəcək. Belə ki, surəti-0, ./copy-0 edir. Mənə davam və yazın imkan bütün kiçik ana. Qeyd edək, həm də orijinal və surəti kapitallaşdırılır edilmişdir. Niyə? Yaxşı, s və t, həm də işarə olunur, Siz, yaddaş eyni yığın. Və səmimi, bu olur Həqiqətən faktı uninteresting-- Biz burada ünvan sıfır istifadə etdiyiniz. Mən demək, mən, həqiqətən, qayğı yoxdur burada stuff yaddaş var. Bağışlayın mən bir az çox pozulma, qaralama edirəm. Lakin mən, həqiqətən, qayğı yoxdur hər şeyi yaddaşında olduğu. Belə ki, həqiqətən nə proqramçılar haqqında hesab edirlər Siz haqqında danışmaq zaman ki, bir ünvanı və ya bir göstərici, bu yaddaş olduğu kimin umurunda. Bu da var, əgər mən qayğı yoxdur byte bir və ya bir milyard. Mən yalnız bu ki, qayğı dəyişən səmərəli yaddaş ki, yığın işarə. Belə ki, bundan sonra, daha çox söz oyunu ixtiyari yaddaş ünvanları üzərində edək yalnız göstəricilərinə çəkmək başlamaq oxlar kimi göstəricilər kimi. Belə ki, t həqiqətən, nə oldu Bu proqrama əsasən, Mən t yaradılmışdır necə görə yalnız iki ayrı dəyişənlər var yaddaş eyni yığın işarə. Onlar harada və biz qayğı yoxdur. Beləliklə, biz mücərrəd üz ki, ətraflı bilərsiniz. Belə ki, necə bu düzeltmek edirsiniz? Mən surəti bir versiyası yazmaq istəyirsinizsə Proqram əslində nüsxə string və yalnız capitalizes surəti, yalnız daxilən, nə var ki, bir olmaq Bizim həll tərkib? Auditoriya: [işitilemez] DAVID J. MALAN: Biz nə lazımdır? Auditoriya: yaddaş Chunk. DAVID J. MALAN: Biz lazımdır yaddaş bir yığın, sağ? Biz bilmirik necə mütləq hələ bunu. Amma cür belə bu baş lazımdır ki, aşağı halda orijinal ana yaddaş əlavə yığın ildə başa çatır. Və sonra mən surəti dəyişdirmək zaman, mən Burada bu surəti dəyişdirmək istəmirəm. Mən əvəzinə yalnız bu dəyişmək istəyirsinizsə surəti ki, orijinal dəyişməz. Belə ki, biz bunu edə bilər necə edək. Surəti-1, artıq şərh lüt edilmişdir, lakin online şərh olunur. Biz yerinə aşağıdakıları edin bu nə xətləri eyni, mənə bir string almaq və s zəng. Amma indi bizim ən biri baxaq kompleks lakin mürəkkəbliyi son biraz üçün, line 16 məhz bu yoxdur. Ilə rahat, əgər belə şəkil biz yalnız drew-- mənə yaddaş yeni bir yığın vermək onu hər şeyi surəti Biz kodu ki, tərcümə necə edək. Belə ki, line 16, sol tərəfində, char * t burada mənə bu kutuyu verir. Bu nə bütün var. Sağ tərəfində, m alloc və ya malloc, super xülya yaddaş ayrılması deyil, yalnız deyərək bir sirli yol Mənə yaddaş yığın verir. Biz nə qədər yaddaş lazımdır? Bəli, böyük bir ifadə növüdür. Amma burada deyir nə edək. Belə ki, bu, əlbəttə, verir Mənə s simli uzunluğu. Belə ki, ana nə olmalıdır? Belə ki, yalnız üç, sağ? ana üç simvol var. Siz sayılmaz backslash sıfır sizə bu bir simli uzunluğu haqqında danışmaq həqiqətən insan görünən məktublar. Belə ki, ana, belə ki, bu 3 mənə verir. Amma indi 1 əlavə edirəm, bir dəqiqə gözləyin. Niyə həqiqətən istəyirəm 4 bayt və yalnız 3 ayıracaq? Evet? Auditoriya: sentinel dəyər üçün? DAVID J. MALAN: Məhz, ki sentinel dəyər. Backslash sıfır üçün, I 4 bayt cəmi lazımdır. Belə ki, uzunluğu lazımdır simli plus 1. Və sonra yalnız yaxşı measure-- üçün hətta bu sistemi olsa da, Bu həmişə mən deyirəm 1 var olacaq bir char ölçüsü bu çoxaltmaq. Sizeof çıxır C operator ki yalnız sizə deyir var bayt sayı müəyyən bir veri növü üçün tələb olunur. Bu serialların üçün iş deyil, adətən, bəzən bunu edir. Amma ümumi halda, no. Çox bytes necə Amma bu mənə izah edəcək çıxır char, həmişə 1-dir. Belə ki, bu 1-vurulması kimi. Kod Belə ki, super sirli axtarır line. Amma bunu bütün verir Mənə yaddaş yığın. Amma bu çıxarmaq görünür deyil ki, yaddaş daxil bir şey? Hələ yox. Və belə xətt 22-də mən nə, və 23, 24, 25, yaxşı, mən sadəcə bunu. Bu sort edir İndi köhnə məktəb stuff. Bu pset 2, kimi Siz şeyi hərəkət edirik ətrafında yaddaş, daha doğrusu strings. Belə ki, 0-dan iterating alıram string s uzunluğu. Mən i-ci xarakter çıxarmaq alıram t i-ci xarakter s. Və mən, çünki, proqramçı etdi tam olaraq bir çox bayt ayrılması əmin Mən lazım kimi, mükəmməl bir-bir əlaqələr. Və mən ana surəti yeni bir kiçik. Və sonra nəhayət, mən bu xətti yoxdur. Və belə təsiri yalnız Burada bu t kapitallaşdırmaq. Belə ki, bir çox udmaq, lakin Yalnız nəzərə alsaq həqiqətən nə olacaq başlıq altında yalnız bu hərəkət edir bütün ətrafında bayt Bu problem həll etmək üçün tələb olunur yalnız bizə yaddaş bu yığın vermək. İndi riski böyük, mənə göstərmək bildirin demək olar ki, var bir başqa nümunə bu bir istisna olmaqla, eyni kod line. Belə ki, bu hacker versiyası Bu proqram, siz olacaq. Amma yalnız çəkmək imkan Bu neler daxil. Line 24 Bu t olmaq üçün istifadə bracket i s bracket i alır. İndi bu dəyişən alıram daha çox sirli ulduz t plus 1 ulduz s plus 1 bərabərdir. Belə ki, nə və niyə biz bir ulduz xarakter var? Biz əvvəl ulduz gördüm, Bu fərqli burada istifadə olunur. Biz əvvəllər indi görürəm, char * gördüm Bir əvvəlində ulduz, və OK. Biz çıxır, çünki cür yalnız nəticə çıxarmaq olar o ilk prinsipləri neler. Belə ki, yalnız aydın olmaq, s nədir? Ötən həftə, bir string idi. Ki, artıq kifayət deyil. Xüsusi, s nədir? Auditoriya: [işitilemez] DAVID J. MALAN: Bu bir göstərici var. Bu ünvanı var ilk xarakter biz yazılmış. OK, t nədir? Auditoriya: [işitilemez] DAVID J. MALAN: ilk byte ünvanı t, yaddaş ki, yığın yenidən bölüşdürülür. Belə ki, çıxır ki, zaman simli qədər 0 təkrarlamaq uzunluğu ilk növbədə, i çünki 0 off başlayır loop şey üçün bu köhnə məktəb. Belə ki, yalnız sadəlik üçün, edək kodu ilk xətti güman həqiqətən, yalnız bu, doğru deyil. I sıfır əlavə, sıfır olarsa bir şey ehtimalla təsir etmək niyyətində deyil. Belə ki, bu söz nədir? Bu ulduz çıxır ki, bu çərçivədə operator dereference edir yalnız operator, getmək deyərək bir xülya yolu aşağıdakı ünvana. Belə ki, əgər ilk ünvanı yaddaş bu yığın xarakter, * s deməkdir getmək. Və biz tərtib etdik, çünki bu şəkildə şəkil, Siz qəbul edə bilər ruhi model aşağıdakı. Bu s, və * s * s demək olarsa cür oluklar və Nərdivanlar kimi, Siz uşaqlıqdan oyun xatırlayıram, ki arrow edin və getmək kimi ünvana. * T eyni şeydir. Belə ki, burada başlamaq, onun yığın gedin. Mən yalnız cəlb edə bilməz Bu ekran ki, yol. * T burada getmək deməkdir. Və sonra, loop üçün yalnız , burada bu xarakter hərəkət söyləyərək Burada bu xarakter hərəkət, Burada bu xarakter hərəkət. Amma necə ki, incrementation etməliyəm? Mən yalnız silindi nə geri lazımdır. Bu adətən deyirlər nə göstərici hesab olan ünvanları ilə riyaziyyat deməkdir. Əgər, bu loop üçün, Mən incrementing saxlamaq və s bir ünvanı və t bir deyil ünvan, mən yalnız 1 əlavə saxlamaq əgər, yalnız irəli hərəkət saxlamaq deməkdir, və irəli, və yaddaş irəli. Bu Oxford Street kimi, CS bina edir küç. CS binalar 33 Oxford Street edir. Belə ki, əgər 33 etmək idi Oxford Street plus 1, 34 Oxford sizi gətirir Street, sonra 35 Oxford Street, sonra 36 Oxford Street, nə o binalar, həqiqətən, - onlar varsa. Və belə ki, biz yapýyorsun bütün var burada göstərici hesab ilə. Belə ki, bir super gizli yoldur özümüzü ifadə. Lakin bütün baş verən başlıq altında yalnız bu ünvanları izləyir, bir xəritə aşağıdakı kimi Siz, və ya kimi oxlar aşağıdakı biz ekranda tərtib etdik. OK, bir çox həzm. Sintaksis haqqında sual, anlayışlar, göstəricilər, malloc, və ya kimi. Bəli, burada ilk. Auditoriya: Belə ki, burada * t toupper * t bərabərdir deyir kapitallaşdırmaq gedir ki, bütün məktublar və ya izlersin DAVID J. MALAN: Ah, həqiqətən yaxşı sual. Burada bu xətt Belə ki, 31, bu kapitallaşdırmaq gedir ilk məktubu və ya məktublar bütün. Belə ki, gedir ki, cavab verək geri ilk prinsiplərinə. Və burada ilk prinsipləri demək yalnız əsas anlayışlar getmək cəlb nə. Belə ki, toupper bir funksiyası var ki, bir char capitalizes. Bu hamısıdır. * T first-- getmək deməkdir t Ünvan gedin. Belə ki, şəkil, bu yığın əgər yaddaş biz malloc ilə ayrılan, bu t * t burada getmək deməkdir edir. Bu arada, siz keçən edirik ki, dəyəri, kiçik m toupper üçün, geri alırıq kapital M, harada qoyulması olunur? Siz eyni yerdə onu qoyulması edirik. Və həmin o məntiqi ilə Əsas anlayışlar yalnız var ilk məktub hərflə Siz i və ya A təkrarlamaq halda loop və ya bir müddət loop üçün, bu niyyətində deyil Siz xahiş daha çox şey etmək. Yaxşı sualdır. Evet? Auditoriya: Niyə istifadə etmədi metodu daha çox dereference array? DAVID J. MALAN: Ah, yaxşı sual. Niyə dereference istifadə edir əvəzinə array metodu? No xüsusi səbəb vicdanlı olmalıdır. Və əslində, bu Məsələn cür, sağ, Mən yalnız edilməsi mübahisə alıram daha mürəkkəb proqram, daha gözlər üzərində cam olunur insanlar həyata yoxlanılması Bu, super gizli görünür, çünki hətta eyni şey bunu baxmayaraq. Belə ki, səmimi, bu bir lazımsız vizual kompleks həlli problemin. Bu, hələ yaxşı dizayn var Beş dizayn beş həyata, Bu bracket olub notation və ya göstərici notation. Biz almaq zaman, xüsusilə də ancaq sonra kurs pset 5 ki, lüğət həyata zaman ki, Mən dəfə təkrar bir neçə qeyd etdik biz, həqiqətən, qayğı lazımdır aşağı səviyyədə yaddaş ünvanları Biz, həqiqətən, başa düşürük ki, nə baş verir. Amma indi üçün, bu çıxır ki, code burada kvadrat mötərizədə xətti həqiqətən yoxdur. Onlar deyirlər nə var sintaktik şəkər olan deyərək bir weirdly sərin yoldur compiler kvadrat mötərizədə olmaq çevirir ki, riyazi ifadəsidir. Belə ki, bir insan konvensiya var yalnız yazmaq etmək bu çox istifadəçi dostu mötərizədə. Amma nə compiler, cingilti, həqiqətən heç bir zaman edir Siz line qeyd nə yazmaq 24 başlıq altında bu, həqiqətən var Bu konvertasiya. Bu bir insan kimi yalnız daha ləzzətli var oxumaq və line 24 kimi kod yazmaq üçün. Amma nəticədə o təlim təkərlər çox off gəlib öz rahatlıq güclü olur zaman. Bütün hüquqlar, belə ki, bu geri ən böyük problem cür idi biz qaçdı. Və bu bütün səbəb nə göstəricilər haqqında lənətləmək söhbət, və ünvanları, və çıxarmaq şeylər. Biz artıq takıldım çünki bu idi Bu axmaq, axmaq məsələ vasitəsi Mən Lauren ilə logically-- həyata burada demo və portağal şirəsi qədər milk-- bir mükəmməl algorithmically düzgün funksiyası iki dəyişənlərin "dəyişdirmə üçün dəyərlər, lakin lənətləmək şey Hər hansı bir davamlı və ya etməyib mənim kodu daimi, təsiri. Və niyə nə idi? Özetle, niyə bu svop həyata keçirilməsi məntiqi doğru, lakin heç bir təsiri var bu qəbul olunur dəyişənlərin, əsas üçün x və y kimi? Məsələnin mahiyyət nə idi? Evet? Auditoriya: dəyişən etdi, çünki pass dəyişən surətləri funksiyası vasitəsilə. DAVID J. MALAN: Məhz, zaman keçir funksiyası daxil dəyişənlər, və ya dəlilləri funksiyası daxil, onlar surəti, keçdiyi hansı Siz axtarır eyni almaq deməkdir x və y üçün bit model, bir və b burada çağırıb. Və bir şey edə bilərsiniz bu nüsxə ilə istədiyiniz, lakin onlar heç bir olacaq zəng funksiyası təsir. Və əslində, biz çəkdi ekran, geri şəkil Sonuncu dəfə vasitəsi əgər həqiqətən nə haqqında düşünmək əgər hood-- altında gedir bu, kompüter yaddaş və aşağı yığın yaddaş, əsas üçün istifadə olunur Bu yığın yaddaş, svop üçün istifadə olunur və belə olsa əsas var iki dəyişənlərin, x və y, svop eyni axtarır ola bilər 1 və 2 həm olan dəyərləri, lakin onlar tamamilə istəyirik yaddaş müxtəlif chunks. Beləliklə, biz bu həll lazımdır. Və səmimi, indi biz ki, görünür sağ, bu problemin həlli var. Biz indi imkanı varsa URL yolu ilə şeyi manipulyasiya və sort oluklar və Nərdivanlar style, bu okları edin və biz istəyirik hər yerdə getmək yaddaş, biz bilmədi bu problemi həll Əsas keçən dəyişdirmək üçün Biz dəyərlər istəyirik svop, ancaq daxilən biz əvəzinə dəyişdirmək keçə bilər? [SƏSLƏRİ INTERPOSING] DAVID J. MALAN: Niyə biz yalnız deyil sağ ünvanları keçmək? Niyə biz mübadilə a vermir xəzinə xəritə, Siz, ki, ona rəhbərlik edir faktiki dəyərlər x və y. Gəlin svop, həqiqətən dəyişə o orijinal bit deyil, yalnız bit surətlərini keçən. Belə ki, əslində, nə var gedən həll olmalıdır. Bu versiya burada aydın pis və flawed. İndi, ilk baxışdan, bu, yalnız görünür kimi biz təsadüfi ulduz bir dəstə əlavə və barmaqlarını keçdi Bu tərtib ki. Lakin, indi tərtib olardı. Amma bunların mənasını nə edək. Və təəssüf ki, müəlliflər C bir simvolu seçilmiş ola bilər bu bir az etmək təmiz, lakin star operator müxtəlif mənası var iki müxtəlif kontekstlərdə. Və biz də gördüm, amma ayırmaq imkan verir. Orada üst qədər So Mən A və B dəyişib zaman pis int nin olan version ulduz, a və b int, əvvəllər integers idi. İndi bir və b hansılardır yaxşı, yaşıl versiyası? Onlar URL istəyirik. Nə, ünvanları aydın olacaq? Integers ünvanları. Mən ki, belə int ulduz vasitələri söyləyərək bu ünvanı tam, xüsusi. Belə ki, indi kodu xətləri qeyd, başqa bir şey çox dəyişdi. tmp, çünki eyni qalır yalnız müvəqqəti tam var, heç bir yaddaş sehrli. Amma indi bir ulduz lazımdır. Və əslində, hər bir və b digər qeyd bütün var ki, qeyd yaşıl qırmızı dəyişən Mən prefixing edirəm ki, ulduzları ilə o dəyişənlər. Mən və b surəti istəmirəm, çünki. Çünki Mən yalnız bir və b və svop surəti əgər bir və b, mən, həqiqətən nə dəyişdirmə edirəm? Just ünvanları, mən dəyişdirmək istəyirəm nə o ünvanlarda var. Mən orada getmək istəyirəm. Və belə star operator Mənim funksiyası daxilində, Biz parametri siyahı daxilində, bu ünvanlara getmək deməkdir və həqiqətən o dəyərləri dəyişdirmək. Belə ki, nə şəkil yoxdur İndi əvəzinə kimi görünür. Bəli, əvəzinə, mən keçən alıram bir üçün deyil, 1 və b 2-- Mən, həqiqətən, əlavə etmək lazımdır Burada başqa bir müəyyən. Belə ki, bu yığın Güman yaddaş yeri 10 edir. Bu yerdə 11, lakin bu bir sadələşdirilməsi bir az, İndi x iki seçim I keçmək nə var və y və ya onların ünvanları keçmək edirsiniz? Mən onların ünvanlarını keçmək əgər bu kimi mən yalnız indi həyata keçirmək lazımdır Yaşıl kodu başına swap ki, gördüyü zaman belə bir və zaman b, yalnız bir və b surəti deyil görür və süd və portağal şirəsi hərəkət. süd və portağal şirəsi məcaz indi aşağı pozur o, çünki fincan var maye və xəritələr. Biz yerinə getmək lazımdır 10 və biz üçün 11 ünvana getmək lazımdır, və o dəyişdirmə məntiq həyata keçirir. Belə ki, məntiq, eyni, lakin biz bir az fərqli yol lazımdır o dəyişənlər daxil. Və belə sonunda, nə proqram bu kimi baxmaq var. Swap.c sözün sitemizi və yaşıl versiyası yapışdırılır. Amma bir dəyişiklik etmək lazımdır. Bu, sadəcə svop dəyişdirmək üçün kifayət deyil. Nə kodu digər line Mən dəyişmək lazımdır? Evet? Auditoriya: dəlilləri. DAVID J. MALAN: onun mübahisə edir. Beləliklə, mən əsas diyirləyin, mən yalnız x və y keçmək bilməz, və mən son söz yeni sintaksis parça bu gün. Mən x keçmək lazımdır və y lakin x və y ünvanı. Və bu, rəmzi çıxır C müəllifləri seçdi ki, burada bir işareti istifadə əgər deyil, deyil bitwise işareti ilə səhv, Bir işareti istifadə əgər burada və burada bir işareti, Bu, sizin üçün rəqəmlər x ünvanı nə var, bəlkə 10 var, nə var y ünvanı, bəlkə bu 11, əvəzinə həmin keçir. Belə ki, bir çox dəfə bütün udmaq. Amma tez indi görək Qalan dörd dəqiqə burada şeyi əyri getmək bilər. Və bir kənara, həqiqətən Mən bu şəkil aldı, TF bir il və ya iki əvvəl şəkil aldı. Belə ki, bu geri künc edir Eliot Dining Hall. Pointers bəlkə çətin olur biz CS50 əhatə mövzu. Siz sort narahat əgər Belə ki, bəlkə bu kimi yamacında edir bir xokkey ağacı daha bu kimi həyata biz növ zirvəsi olan üzrədir edirik konseptual mürəkkəbliyi şərtləri. Və mən bu gətirmək foto, mən and olsun, çünki Payız 1996-ci ildə Allaha, mən aldı Mənim tədris fellow ilə CS50, Nishat Mehta, o, mənə oturdu nahar üzərində Eliot D. Hall küncündə, və ya nahar, və ya bir şey cəhd Mənə göstəricilərinə anlamaq kömək. Mən həftə sonra olduğu və bu Bu mühazirə zaman təqdim edilib Mən nəhayət göstəricilərinə başa düşülür. Mən bu ümid edirəm ki, qədər tez sizin üçün basın olacaq. Lakin tamamilə arasında həyata daha mürəkkəb mövzular biz baxdı etdik. Amma bu ən güclü arasında var. Siz onu almaq zaman, həqiqətən bütün yalnız nəhayət bir araya gəlib gedir. Belə ki, qalan bu deyil arxayın Bu gün bütün sink lazımdır. Belə ki, burada son proqram Biz baxmaq olacaq. Və biz bir ilə son olacaq claymation tez üç dəqiqə bizim dostumuz, Nick Parlante tərəfindən. Burada bir proqram üst iki ki, var xətləri dəyişən x və y bəyan edir. Həm də olan ünvanları integers, AKA göstəricilər. Biz sonra kifayət qədər vəsait ayıracaq yaddaş int saxlamaq üçün və ünvanı saxlamaq x ki, yaddaş. Belə ki, hətta sadə deyil əvvəl, məsələn daha. Mənə yaddaş dörd bayt verin ki, bir int ölçüsü var, və x ki ünvanını qoydu. Bu xətt burada deməkdir x ünvana getmək və mənasını qoymaq həyat, orada sayı 42. Amma bu xətt məni narahat edir. Y y Ünvan getmək deməkdir ulduz, və orada uğursuz sayı 13 qoydu. Niyə bu nöqtədə, bu təhlükəlidir story-- olsa sürətlə bildirib Bizim çıxması dəqiqə burada niyə pis Mənə demək üçün, y ünvana getmək? Auditoriya: Siz yoxdur [işitilemez]. DAVID J. MALAN: Mən var y şey qoymaq. Belə ki, y dəyəri nə, hekayə bu nöqtədə? Biz heç bir fikrim yoxdur. Bəzi zibil dəyəri var və nə də Binky bilir. Bu qeyd bitirmək bilər. [Video playback] -Hey, Binky, oyanmaq. Bu göstərici əyləncə üçün vaxt var. -Bu nədir? Göstəricilər haqqında məlumat əldə edin? Oh, goody. -Yaxşı, Başlamaq üçün, biz istəyirik tapmaq bir neçə göstəricilərinə lazım olacaq. -OLDU. Bu kodu iki göstəricilərinə ayırır olan integers qeyd edə bilərsiniz. -Yaxşı, Yaxşı görürəm iki göstəricilərinə, lakin onlar bir şey işarə ola görünmür. -Düzdür. Əvvəlcə göstəricilər bir şey qeyd yoxdur. Onlar qeyd şeylər pointees adlanır və onlara yaradılması ayrı addımdır. Sağ, sağ, -Oh. Hesab edirəm ki, bilirdi. pointees ayrıdır. Belə ki, necə bir pointee ayrılması edirsiniz? -Yaxşı, Yaxşı bu kodu ayırıb yeni tam pointee, və bu hissəsi dəstləri x onu qeyd etmək. -Hey, Daha yaxşı görünür. Belə ki, bir şey etmək. -Yaxşı, Mən göstərici x dereference onun pointee daxil sayı 42 saxlamayın. Bu oyun, mən lazımdır mənim dereferencing sehrli wand. Dereferencing -Sizin sehrli wand? Uh ki, böyük deyil. -Bu Code kimi görünür. Mən yalnız sayı qurmaq lazımdır and-- [POP SES] -Hey, Gedir orada baxmaq. Belə ki, x bir dereference bunu belə arrow onun pointee daxil olmaq üçün. Bu halda, orada 42 saxlamaq üçün. Hey, sayı saxlamaq üçün istifadə edin Digər göstərici vasitəsilə 13 y. -OLDU. Mən y burada artıq getmək lazımdır, və sayı 13 set up almaq. Və sonra çubuq almaq dereferencing və yalnız [Buzzer səs] -Oh, Hey ki, iş deyildi. , Binky uh, mən deyil, demək dereferencing edirəm qəbulu, çünki y, yaxşı bir fikirdir pointee qədər ayrı addımdır. Mən biz heç bunu düşünmürəm. -Hmm, Yaxşı bir nöqtəyə. -Bəli, Biz göstərici, y ayrılan amma bir pointee qeyd etmək müəyyən heç vaxt. -Hmm, Çox müşahidəçi. -Hey, Siz orada Binky yaxşı axtarır edirik. Siz ki, bunu düzeltmek y xal x eyni pointee. -Əlbəttə, Mən sehrli wand istifadə pointer təyin. Bir olacaq ki edirmi problem, əvvəl kimi? Xeyr, bu pointees toxunmaq deyil. Bu, sadəcə bir göstərici dəyişikliklər eyni şey qeyd etmək [Yaratma SES] başqa işarəsi. -Oh Görürəm. X eyni yerə İndi y xal. Belə ki, indi y müəyyən edilir, gözləyin. Bu pointee var. Belə ki, çubuq cəhd edə bilərsiniz 13 göndərmək üçün yenidən dereferencing. -Oh, OK, burada gedir. -Hey Ki, oldu. İndi y üzrə işləri dereferencing. Və göstəricilər mübadiləsi, çünki bir pointee ki, onlar həm 13 görürük. -Bəli, Mübadiləsi, uh, nə. Belə ki, biz indi yerlərdə keçid gedir? -Oh, Biz vaxt bitti baxmaq. -But-- Üç pointer qaydaları xatırlamaq -Yalnız. Number 1, əsas struktur bir göstərici var ki, və bir pointee üzərində göstərir. Amma pointer və pointee ayrıdır. Və ümumi səhv bir göstərici qurmaq üçün lakin bir pointee vermək unutmaq. Number 2, pointer dereferencing göstərici başlayır və üzərində arrow aşağıdakı onun pointee daxil olmaq üçün. Biz bütün Bildiyiniz kimi, bu, yalnız orada çalışır cür geri alır bir pointee edir 1 nömrəli idarə etmək. Sayı 3, pointer təyin edir bir pointer və qeyd etmək dəyişir başqa göstərici eyni pointee. Tapşırıq sonra belə, iki göstəricilərinə eyni pointee qeyd edəcək, bəzən mübadiləsi deyirlər. Və həqiqətən, bu var bütün var. Bye-bye indi. [END playback] DAVID J. MALAN: Bu CS50 üçün var. Professor Nick Parlante üçün təşəkkür edirik. Biz gələn həftə görəcəksiniz. [ELECTRONIC MUSIC PLAYING]