[Powered by Google Translate] Bölmə Problem 2 seçin: Hacker Edition
Rob Bowden, Harvard Universiteti
Bu CS50 edir. CS50.TV
Belə ki, mən Rob edirəm. Mən Kirkland baş deyiləm. Bu CS50 TFing mənim üçüncü ildir.
Bu, biz ənənəvi-mühazirə stil bölümünde dəyişir ki, ilk dəfə
burada uşaqlar sual nə mühazirə baş və sonra nəzərdən biz yalnız növ
indi biz məkanı istifadə harada, bir çox problem əsaslı olan və -
Oh, belə fikir Mən sizə göndərdiyi link getmək və sonra mənim Space olacaq.
Hər bir laptop mövcut deyil? Okay.
Beləliklə, biz bu istifadə olacaq və biz problemlərin məşğul olacaq bölmə yaşayır
və onların müzakirəsi və yanlış nə həyata figuring
və mən sizin kodu bəzi qoparmaq bilər, və mən sizin fikir müzakirə edə bilər.
Belə ki, hər kəs çətinlik var?
Siz tərəfdən sohbet edə bilərsiniz, biz səbəb olacaq əgər mən bilmirəm.
Ki, sinif, əgər İndi, əvvəlki supersection kimi, siz bu barədə nə bilirik.
P dəstləri bütün bu bölmələr olmalıdır olacaq.
P-set 2 Beləliklə, spesifikasiyalar, mən artıq P-set 1 gördüyünü yalan danışarlar.
Amma biz bu gün üzərində gedən olacaq ne üçün P-set 2 baxmaq olar.
Və sual bölüm görəcəksiniz.
Belə ki, bu P-dəstləri bütün olacaq; sual bölməsi var olacaq.
İndiyə qədər biz "Bu təcrübə imkan düşünün.", Deyib sonra
Siz bu proqram təqdim etmək xahiş ediləcək.
Bu fikir bu sizə problem dəsti ilə başlamaq kömək cür ehtimal olunur.
Mən Hacker nəşr tapmaq, onların bir çox yalnız öyrənmək üçün yeni, maraqlı şeylər nəzərdə tutulur.
Onlar problem set birbaşa tətbiq oluna bilər.
Və indi biz onlara təqdim olan, ancaq nəzəri deyilik
sonra problem dəstləri, siz onlara təqdim edə bilər və beləliklə, ya bölmə gələ bilər
və ya cavab almaq üçün bölmə izləmək, və ya sadəcə öz onları əldə edə bilərsiniz
Mənim iştirakı zövq kimi hiss yoxsa.
Belə - Bu ilk biridir.
Oh. Həmçinin, sual bu bölmələr altında biz də sizə şort haqqında sual var.
Mən tapmaq, nəzəriyyəsi, siz, bölmə gəlməzdən əvvəl bu saat ehtimal edirik
Əgər deyilsə, lakin bu gözəl var, biz hər halda onlara gedəcəyəm.
Beləliklə, biz bu başlaya bilərsiniz: "Necə bir müddət loop bir do-isə loop fərqlənir?
Zaman xüsusilə faydalıdır? "
Belə ki, hər hansı bir var -?
[Tələbə] The do-isə loop həmişə ən azı bir dəfə həyata keçiriləcək.
Bəli. Belə ki fərqdir. Bir müddət loop - I'll yalnız burada bunu - loop isə, biz vəziyyət
burada, halbuki bir do-isə biz burada almaq qədər, bir şərt yoxdur.
Və beləcə, proqram icra edir və bu isə loop olur zaman
bu şərt doğru olduqda dərhal yoxlayır.
Bu şərtlə ki, doğru deyil, bu, yalnız tamamilə loop üzərində atlayacak.
Do-isə loop proqram həyata kimi, bu "yoxdur." Olur
Heç bir şey bu anda olur, yalnız həyata davam edir.
Sonra şərt doğru olduqda onu "isə," xit o, loop geri olacaq və yenidən bunu
və təkrar vəziyyəti yalnız vasitəsilə düşür, sonra doğru deyil və qədər.
Belə ki, fərq bu çox start sağ keçmək olar ki, olan.
Bu mütləq bir dəfə həyata və vəziyyəti hələ doğru əgər daha çox dəfə icra edə bilər.
Belə isə loop yalnız bir dəfə bunu, və ya olacaq - isə loop - biz bütün bu nə etmək lazımdır bilər,
vəziyyəti yalan kimi tezliklə biz bunu almaq kimi ildən, biz yalnız üzərində sağ keçmək lazımdır.
Halbuki nə-isə loop, biz mütləq bir dəfə həyata keçiriləcək.
Doğru və ya yalan varsa, sonra biz vəziyyəti almaq zaman, biz yoxlayın.
Doğru, biz yenə bunu edəcəyik, o yalan varsa, biz yalnız davam davam edəcəyik.
Belə ki, zaman xüsusilə faydalıdır?
Mən, 4 il bütövlükdə, 3 il, nə demək olar ki,
Mən proqramlaşdırma etdik ki, mən 10 dəfə altında kimi, bu istifadə.
Biz-isə loops təqdim etdiyiniz zaman yəqin ki, onlardan 5-CS50 var.
Belə ki, loops do-zamanı istifadə zaman?
Zaman deyil - yeah?
[Tələbə] zaman sizi yoxlamaq üçün istədiyiniz istifadəçi giriş, və ya bir şey almaq üçün çalışdığınız -
Bəli. Belə ki, do-isə istifadəçi daxil böyük bir loops.
Niyə ilk bir neçə problem dəstləri ki, sizin kimi, istifadəçi soruşmaq istəyirəm zaman var
Əgər string almaq qədər "Mənə bir string verir," Siz davam edə bilməz.
Və belə ki, mütləq ən azı bir dəfə string üçün müraciət etmək lazımdır.
Lakin onlar pis bir şey cavab əgər, sonra geri loop lazımdır və yenə soruşurlar.
Lakin istifadəçi daxil başqa, mən bir halda qarşılaşa çox nadir var
Mən "ən azı bir dəfə" loop istəyirəm amma bəlkə daha yerləşir.
Suallar və ya - Hər kəs bir do-isə loop başqa yerdə istifadə etmişdirmi?
Okay. Növbəti bir Beləliklə, "Nə identifikatoru bəyan etmir
cingilti ilə outputted əgər adətən göstərir? "
Belə ki, nə cür kodu Mən almaq üçün yazmaq bilər "elan olunmamış identifikatoru?
[Tələbə] Bu x = 2?
Beləliklə, biz burada yalnız bu cəhd edə bilərsiniz, x = 2.
Biz bu run olacaq - oh, mən bunu basın etməyib. Belə ki, burada biz almaq - bütün hüququ.
"Bəyan identifikator x istifadə edin."
Belə ki, bəyan tanıdan bir dəyişən var.
Bu tez-tez dəyişən bir identifikator zəng edəcək.
Belə ki, bu, həqiqətən bir dəyişən olduğunu bilirik bilər, bu nə bilmir.
Belə ki, bir identifikator var.
Belə ki, niyə o bəyan edir? Bəli.
Belə ki, terminologiya, bir dəyişən elan edilməsi haqqında aydın olmaq
siz "int x," və ya "simli y" nə demək zaman.
Dəyişən Bu başlatma və ya dəyişən təyin,
deyə zaman "x = 2" dir.
Belə ki, ayrı-ayrı addımlar bu edə bilərsiniz, int x, x = 2, və qədər - biz burada məhsullarının bir dəstə ola bilər -
Bu xətt olur qədər, lakin x hələ uninitialized, ancaq elan edilmişdir.
Və biz açıq-aydın 1 xətt bunu edə bilərsiniz, indi biz elan və başlatılıyor edir.
Suallar?
Və nəhayət, "Nə Caesar Şifreleme çox təhlükəsiz deyil?"
Belə ki, birinci, hər kəs Caesar Şifreleme nə demək istəyir?
[Tələbə] Caesar Şifreleme yalnız xəritəyə ki, siz hər məktub keçmək
məktubları müəyyən sayda üzərində getmək və artıq geri hərəkət və çox təhlükəsiz deyil, çünki
orada yalnız 26 mümkün variantları və siz onu almaq qədər yalnız o hər 1 cəhd var.
Oh. Belə ki, təkrar edirəm lazımdır?
Bu Caesar Şifreleme, it's - Mən demək, siz ki, siz problemləri ilə məşğul olacaq -
və ya hacker nəşr deyil ki, problem set standart nəşr danışarlar.
Yəni problem set standart nəşr, siz "Salam, dünya", kimi bir mesaj almaq
və siz də 6 kimi bir sıra var, və bu mesajı almaq və hər bir fərdi xarakteri,
Siz əlifba 6 mövqeləri ilə dönüşümlü.
Belə ki, "h" salam-ci h-i-j-k-l-m-n olacaqdır.
Belə ki, ilk məktubu n olacaq. Biz e ilə eyni şey.
Biz varsa, kimi, z və ya bir şey, sonra ətrafında geri paketi 'bir.
Lakin hər bir xarakter əlifbası 6 simvol sonra cycled olur və çox təhlükəsiz deyil
bir məktub kesmek necə çox yollar yalnız 26 imkanlar var-ci ildən.
Belə ki, yalnız uzun kifayət qədər mesaj üçün, güman, hamısı 26 cəhd edə bilərsiniz
bu mümkün 26 şeylər yalnız 1, aydın olacaq
və aydın bir orijinal mesajı olacaq.
Belə ki, bütün bir şey Şifreleme çox yaxşı bir yol deyil.
Bu şort olmayan "bir funksiyası nədir?"
Belə bir funksiyası nədir? Bəli.
[Tələbə] Bu keçir və sonra nə qaytarılması dəyər almaq üçün zəng edə bilərsiniz ki, kodu ayrı bir parça kimi.
Bəli. Də yalnız növbəti bir cavab və ya təkrar - Mən də növbəti cavab cavab olacaq.
Siz daha çox yalnız kodu çıxarmaq ve yapıştırma əvəzinə funksiyaları üzərində istifadə edə bilərsiniz.
Sadəcə, kod almaq bir fuction onu qoymaq və sonra yalnız funksiyası zəng edə
yerdə siz çıxarmaq ve yapıştırma edilmişdir.
Belə funksiyaları faydalıdır.
Belə ki, indi biz aktual problemləri edəcəyik.
İlk. Ilk bir fikir Belə ki, asılı olmayaraq ki simli keçmək və -
və ya bütün kiçik deyir? Bu, bütün kiçik demək deyil.
Belə ki, mesaj bir şey ola bilər - heç bir oh. Bu edir.
"Sadəlik üçün, güman bilər istifadəçi daxil kiçik hərflər və boşluq yalnız olacaq ki,."
Belə ki, yalnız kiçik hərflərlə mesaj ötürmək və sonra biz alternativ
Böyük və kiçik arasında - biz string dəyişən, Böyük və kiçik olması dəyişir.
Belə ki, əvvəl, hətta problem dalış ikinci vermək
biz nə etmək lazımdır ki, ilk şey nədir?
Oh, nə yalnız basın idi? Oh, mən yalnız burada bir e-poçt tıklayan.
Beləliklə, biz nə etmək lazımdır ilk şey - Mən yanlış bir baxaraq edirəm?
Bu bir hissəsi mı?
Xeyr, o da, orada hələ də.
OK, hələ burada.
İndi biz qəbul edə bilər - Bəli. Burada yalnız kiçik və boşluq olduğunu güman edə bilməz.
Belə ki, indi biz məktubları biz onları olmaq istədiyiniz hər hansı ola bilər ki, məşğul olmalıdır.
Və biz istəyirik ilk şey yalnız mesaj əldə edilir.
Biz yalnız tamam, bir string almaq string s = GetString lazımdır.
İndi bu problem, bunu yolları bir neçə var.
Amma biz burada bitwise operatorları istifadə etmək istədiyiniz gedir.
Orada ya supersection da olmayan insanlar,
və ya bir şey, və bitwise operatorları nə bilmirəm?
Yoxsa onlar heç bir şəkildə ASCII aiddir necə?
[Tələbə] Mən supersection deyil, lakin mən bitwise operatoru bilirik.
Okay. Beləliklə, mən onlara əsasları üzərində getmək üçün yoxdur, amma mən izah edəcəyik
Burada istifadə etmək istədiyiniz olacaq nə.
Belə ki, "A": kapital A Binary nümayəndəliyi sayı 65-dir.
Mən sadəcə baxmaq üçün gedirəm - 41 01000001 olacaq.
Belə ki decimal 65 olmalıdır; bu karakter kapital A. ikili təmsil edir
İndi xarakterli ikili təmsil bir "kiçik
demək olar ki, eyni şey olacaq. 6 Bəli, - ki. Bu doğru deyil.
Belə ikili kapital A, ikili kiçik 'a'.
Belə ki, qeyd edən və "bu bir az. Arasındakı fərq
Və bu 32 bit, sayı 32 təmsil bit olur.
A 65 ildən Və mənada edir; 'bir' 97 edir.
Onların arasında fərq 32-dir.
Belə ki, indi biz A alaraq A 'a' dan çevirmək bilirik
və bitwise ilə, ORing - 1 kimi görünür.
Bu 00100000 ilə bitwise OR, və bizə verəcəyik 'a.
Və biz bitwise ANDing ilə A 'a' dan əldə edə bilərsiniz
ki, yer, 11111, 11, 0 ilə.
, Lakin bu fərdi bit həyata ləğv; bu sonra 'bir' idi dəqiq nə bizə
biz 01000001 lazımdır, mən doğru sayılır əgər mən bilmirəm.
Amma bitwise ORing bu texnika, kiçik kapital almaq
və bitwise kiçik kapitalın almaq ANDing A. müstəsna deyil
Məktubları Bütün vs k K, Z vs z,
onların hamısı yalnız bu tək bit ilə fərqlənir edir.
Və hər hansı kapital məktub və əksinə hər hansı bir kiçik məktubu dəyişməyə istifadə edə bilərsiniz.
Okay. Bu əldə Belə bir asan yol - belə əvəzinə olan
nə 1011111 yazmaq - bu sayı təmsil asan bir yoldur və bu bir deyil
ki, mən supersection artıq getdi, lakin tilde (~) başqa bitwise operatorudur.
Nə ~ bu bit təmsil baxır edir.
Nin bir sıra edək.
Bu yalnız bir ikili sayı, və ~ edir nə yalnız bit bütün flips.
Belə ki, bu indi 0, bu, indi 010100 bir 1 0, bir 1 idi.
Belə ki, bütün ~ edir. Ki canini qurtar - Beləliklə, 32 sayı olacaq -
belə 32 sayı 00100000 olacaq, və bu ~ olacaq
Mən bir "ANDed ki, burada bu sayı.
Hər kəs ki varmı? Bu anlamaq üçün istədiyiniz zaman kimi, olduqca ümumi
biz görmek üçün istədiyiniz zaman biz görən bilər sonra şeylər üçün -
və ya biz 1 istisna olmaqla, hər şey, hər bir bit set istəyirəm
biz müəyyən istədiyiniz olmayan bit ~ yoxdur edirlər.
Belə ki, biz 32 bit set istəmirik, biz 32 ~ belə.
Okay. Belə ki, burada o, bütün istifadə edə bilərsiniz.
Bütün hüquqlar, belə ki, siz həyata deyilik, biz yavaş-yavaş, birlikdə üzərində gəzmək edilir Gözəl
və ya belə ki, bu artıq gəzmək - bu yolu. Bu tamamlayın.
Belə ki, biz simli var və biz buna bir şey string hər xarakter üzərində loop istəyirəm və bunu.
Belə ki, necə biz simli üzərində loop nə? Biz nə istifadə etməlidir?
Mən burada bu barədə nə deyiləm. Bəli.
Mən mənim iterator var və o, lakin necə simli nə qədər çox simvol bilirik?
Strlen (s), sonra i + +.
Belə ki, nə mən burada etdik şeyler ən yaxşı yol deyil.
Niyə hər kəs bilir?
Siz simli hər bir vaxt dil kontrol edirik, çünki.
Biz strlen hərəkət etmək istəyirəm edir, belə ki, mən burada demək olar, int uzunluq = strlen (s),
və sonra i <uzunluğu, və əgər siz əvvəl görməmişik ki,
Mən də edə int i = 0, uzunluğu = strlen (s).
Və bu artıq ildən daxilində məhdudlaşdırıla sonra, bir qədər üstünlük
dəyişən uzunluğu əvəzinə loop 'üçün' yalnız bu, əvvəl elan edilməsi
və həmişə var, və pis nə halda tutmaq deyil ki,
və ya niyə orijinal it's, pis idi - loop üçün da başlanır.
Mən vəziyyəti yoxlanılır. I s uzunluğu <mi?
Beləliklə s uzunluğu nin bütün vaxt "salam" ilə iş imkan verir.
S Belə uzunluğu, f-e-l-l-o. Length 5.
Belə ki i = 0, uzunluğu 5, belə ki, i <5 deyil, loop davam elə.
Sonra yenidən gedin. Biz vəziyyəti yoxlamaq. I salam müddəti <mi?
Belə nin salam müddəti yoxlamaq edək. H-e-l-l-o. I <5 deyil, belə ki, biz yenidən davam etdirilməsi; 5 var.
Belə ki, biz, loop hər iteration, biz salam sayılması, hesablanması olunur
həmişə 5 olacaq; belə dəyişə gedən heç düşündüm.
Beləliklə, biz yalnız ön 5 xatırlayıram, indi hər şey yaxşıdır.
Belə ki, bütün simli üzərində iterating.
Biz simli hər bir xarakter üçün nə etmək istəyirsiniz?
[Tələbə danışan anlaşılmaz]
Bəli. Karakter qeyri-əlifba əgər ki, biz yalnız üzərində keçmək istəyirəm.
Biz yalnız əlifbası hərflərinin qayğı Çünki, biz bir sıra kapitallaşdırmaq bilməz.
Belə ki, necə biz bunu edə bilər? Biz bir şey istəyirsinizsə, bizim vəziyyət Belə ki, belə - bu əlifba varsa edin.
Belə ki, necə biz bu kontrol olsun?
[Tələbə] Siz funksiyası istifadə edə bilərsiniz alfa edir.
Bu və ya, və ya daxil olan kimi, char.h və ya bir şey daxildir?
Biz s [i] var, - alfa funksiyası, və aydın istifadə istifadə edək
edən səkkizinci xarakter, simli simvol bir sıra olduğunu unutmayın
s səkkizinci xarakterli belə.
Bir kapital məktub varsa, biz müəyyən bir intervalında olmalıdır bilirik.
Və sıra nədir?
Bəli. Belə ki, əgər s [i] ≥ 65, və s [i] ≤ 90, mən əvəzinə nə etməliyəm?
Bəli. Beləliklə, siz tamamilə hətta heç bir şey ASCII dəyərləri bilmək lazımdır heç vaxt.
Nömrələri 65, 90, 97 və 102, və ya hər hansı ki, hesab etməyin.
Siz ehtiyac yoxdur - 112 - Bütün həmin bilmək lazım deyil. Bu çox yanlış.
Yalnız tək quote simvol bir quote sabitləri istifadə edin. Belə ki, "A" və daha az və 90 'Z.' deyil
Bu əhəmiyyətli dərəcədə daha yaxşı - I Z 90 ki, mənim baş üst off bilmək olmaz.
Mən 'Z' kapitalının Z. ki, mənim baş üst off bilmirəm
Belə ki, uzun bu kapital Z, və ya biz kapital intervalında kimi, kiçik kontrol edə bilərsiniz
Yoxsa intervalında varsa ≥ 'a və ≤ z.
Belə ki, bizim vəziyyət var.
Bu şeylər qoymaq harada stil dəyişir.
Mən bu kimi edəcəyik.
İndi biz nə istəyirik?
Biz bu məktubu bir əlifba xarakterli bir xarakter bilirik.
Belə ki, bu artıq bir böyük hərf və ya bir kiçik məktubu olması arasında alternativ lazımdır.
Necə biz bu istədiyiniz bir takip edirsiniz?
[Tələbə səsləri, anlaşılmaz]
Belə ki, bəli, amma məni yoxlamaq edək.
Modul 0-2 bildirib, atılan bir təklif idi və mən ki, razıyam.
Bildiriş başqa kimi ki, - bu halda? Bəli.
Bu, hər biri, ancaq biz i modul 2 bilməz, və ya ildən i mod 2,
E paytaxtı və 'bir' kiçik olduğunu qeyd? Lakin onların ayıran bir yer var?
Onlar eyni mod 2 olmaq olacaq, lakin onlar müxtəlif hallarda istəyirik.
[Tələbə sual, anlaşılmaz]
Bəli. Belə ki, yalnız bir sayı saxlamaq olacaq.
Biz istəyirdik, biz də burada bunu bilər; bir az yöndəmsiz almaq bilər
loop bəyannamələrin də, mən burada onu qoymaq lazımdır.
Belə ki, int sayı = 0 başlayır.
Və indi, biz etdik neçə əlifba simvol saymaq gedirəm.
Yəni biz istər-istəməz başqa bir əlifba xarakter aşkar + + ildən saymaq olacaq.
Amma, indi əgər sayı mod 2 deyərək edirik.
Yaxşı sayı mod 2 əgər? Oh. Mən indi == 0 edəcəyik.
Biz də artıq getmək lazımdır. Yaxşı, sonra sayı mod 2 == 0 əgər?
[Tələbələr cavab anlaşılmaz]
Beləliklə, biz bu böyük bitirmək istəyirəm.
2 hallarda var böyük və kiçik 2-halları.
Biz kiçik istəyirik Belə ki, biz bu böyük etmək lazımdır.
Bu böyük varsa, biz bir şey etmək lazım deyil.
Ancaq bir yol var - shouldn't Çevrilmiş var -
biz belə böyük və ya kiçik olsun yoxlamaq lazım deyil ki?
Biz həmişə biz həmişə böyük at qədər əmin olun ki, nə edə bilər?
Beləliklə, biz kiçik bir 'üçün nə bildiriş; biz bir böyük bu eyni dəqiq şey nə olur?
Dəyişiklik böyük mu və ya dəyəri dəyişiklik edir?
Bəli. Belə ~ 32 ANDed hər hansı kapital məktub bitwise həmin böyük karakter olacaq
çünki heç bir böyük xarakter üçün 32 bit müəyyən deyil.
Biz s [i], biz kiçik və ya böyük olmaq xarakteri çatdırmaq istəyirəm əgər.
Bu kiçik idi əgər, o, böyük idi, o, hələ də böyük deyil ki, bu, indi böyük deyil.
Mən supersection bu dedi: siz istəyirsinizsə 32 istifadə edə bilərsiniz, amma bir "bunu tercih edirlər - A,
yerine düz 32, çünki hər hansı digər bit ola bilər.
32 bit sonra, bu hər hansı ola bilər, ya da kifayət qədər deyil
simvol bütün təmsil nömrələri.
Siz 32 bit almaq Belə ki, bu 64 bit ola bilər, bu, 128 bit ola bilər.
O bit hər hansı böyük və kiçik arasında fərqləndirir ki, az ola bilər.
Mən bu 32 bit olduğunu bilmək lazımdır deyil.
Mən bu 'bir' istifadə edə bilərsiniz - A arasında fərqli bit almaq
32 ki, sehrli sayı etibar ehtiyac olmadan.
Və indi, başqa tək idi saymaq, və mən nə istəyirəm?
[Tələbə cavab anlaşılmaz]
[Tələbə] Nə olub?
Mən 1 saniyə bunu edəcək.
Belə ki, indi mən istəyirsinizsə - Mən, karakter indi kiçik əmin etmək istəyirəm
və mən və ya 32, 32 mənasını 'a - A.
Lakin əvvəlki kimi eyni əsaslandırıcı tərəfindən bildiriş ki, əgər
Məktubda daha sonra 32-yalnız kiçik saxlayır ORing artıq kiçik idi.
Bu orijinal xarakteri dəyişmədi.
Amma indi ki, kiçik deyil, yalnız bu barədə unutmaq "deyərək qaçmaq yoxdur
bu böyük varsa, o dəyişir. "
Bu çox daha rahat bunu edir.
[Tələbə] 32 deyil, əgər kiçik iş olan böyük subtracting ki, strategiya Kaş?
Bu idi,, 34 və ya bir şey istəyirsiniz?
Belə ki, siz 2 arasında fərq olduğunu bilmək lazımdır - >> 1 bit.
Bu uzun bu mövqeyi aşağıdakı bit eyni kimi, daha 1 bit ola bilər.
26 simvol var, və ya - Beləliklə, biz ən azı 26 simvol lazımdır.
Biz fərq təmsil ən azı 26 ədəd lazımdır -
A və 'bir' ən azı 26 olmalıdır arasında fərq
və ya başqa bütün kapital nömrələri təmsil olmazdı.
Yəni, A, biz 1-də başlayacaq əgər, bu bit bütün istifadə olacaq o deməkdir ki,
Z. vasitəsilə hər şeyi təmsil Bu ilk 5 bit, bütün
Ona görə növbəti bit, və ya bu bit var, növbəti bit A və ayırmaq üçün seçilmiş olan bir bir.
Də ona görə ki, ASCII masa, kiçik məktublar hərflərlə ayıran 5 simvol var.
O rəmzləri, onların arasında fərq olan 32 qədər gətirən əlavə 5 ildən.
[Tələbə] Belə ASCII yol nəzərdə tutulmuşdur, çünki biz bunu edə bilər.
Bəli. Amma ASCII - fərqi də bu bit, həm də ola bilər.
A 10000001 idi və 'bir' 11100001 idi, kimi - Mən nə olursa olsun, unutmayın.
A. - bu halda Lakin, biz hələ bir "istifadə edə bilər
Bu, sadəcə indi A və 'bir' hələ də bu 2 bit arasında fərq var.
Mən bunu 48 yazılı edirəm. 32 + 64 varmı? Mən bunu hesab edirəm?
Hər bir xarakter kimi, Z və z, K və k; hələ 2 bit olacaq
onlar hələ də bu 2 bit dışında eyni dəqiq bit olardı.
Belə ki, uzun biz ASCII və ya digər sistemindən istifadə edirsinizsə ki, asılı olmayaraq, həmişə doğru olaraq,
uzun hər bir xarakter üçün müxtəlif olan bit bir sıra sayı yalnız var kimi,
o gözəl işləyir.
Bu biz bəlkə istifadə edə birinci çünki 32 yaradılmışdır ki, yalnız var. Cool >>.
Mən, blok yalnız bir xətt əgər görməmişik halda, üstünlük meyli
Siz qıvrım aşırma xilas edə bilər; mən bunu üstünlük verirlər.
Ayrıca, biz s [i] + = 1 kimi şeylər necə bilirik?
Siz də edə s [i] bitwise VƏ = 32.
Və bitwise OR = 32.
Həmçinin, mod 2 == 0 saymaq.
Belə ki, unutmayın ki, - mən bunu yazmaq deyil - hər hansı qeyri-sıfır dəyəri doğru və 0 yalan.
Belə ki, "count mod 2 əgər == 0" deyərək eyni "mod 2 sayılmaz əgər".
Yəqin ki, yalnız xətləri bərpa və əgər sayı mod 2 ", deyib ki,
OR 1, başqa VƏ 1 deyil ki, "mən lazım deyildi" nə yoxdur. "
Amma bu kimi yaxşı işləyir.
Mən burada başqa nə edə bilər?
Siz istəyirdi ternary ilə birləşdirmək bilər, lakin sonra yalnız şeyi Messier etmək istədiyiniz
və oxumaq yəqin ki, daha çətin, belə ki, biz bunu deyil.
Hər kəs hər hansı digər təkliflər var?
Bütün problem istədi ki? Bəli Oh.
Belə ki, bu boş xətləri qurtarmaq, indi biz f,% s çap lazımdır strings üçün biri olmaqla,
Biz, s f çap olunacaqdır.
İndi run bildirin. Mən yanlış bir şey mi?
Bu "bir \ var, mən bir n istəyirəm.
Okay. İndi run lazımdır. Bu yəqin ki, mənə fəğan lazımdır.
Strlen string.h edir.
Bu cingilti haqqında gözəl şey deyil Belə ki, bu nə deyir
yerine, deyir ki, GCC-nin "Hey, siz bir şey unuttum, mən nə bilmirəm."
Amma bu mənə ki, "Siz string.h daxil idi."
Mən bir şey təklif etməyib, belə ki, bir şey söyləyərək deyil.
Amma biz onların Məsələn edəcəyik ", 4 əlavə Thanks".
Bu doğru görünür. Yaşasın.
Belə ki, əsas qaytarılması, demək olar ki, bunu heç vaxt.
Bu isteğe var. Və əsas bu isteğe olan yeganə funksiyası var.
Siz əsas bir şey qayıtmaq deyilsə, bu 0 qayıtmaq üçün nəzərdə güman edir.
Suallar?
Okay. Belə ki, indi ikinci problem.
"Keçərək 2 dəyişənlər" dəyərlər dəyişdirmə həftə 2 ikinci mühazirə dən Xatırladaq
bir funksiyası (svop adlanan belə) həmin 2 dəyişənlər dəqiq ən azı olmadan işləmir 'göstəricilərinə ".
Biz onları almaq qədər göstəricilərinə bilməz.
Biz 2 dəyişənlərin dəyişdirmək istəyirik, biz bunu bir funksiyası istifadə edirik.
Biz hələ o deyir kimi əsas bunu olacaq.
Lakin həmin 2 dəyişənlər istifadə etmək üçün, biz bir müvəqqəti dəyişən istifadə etmək istəmirik.
Bunu etmək üçün 2 yol var.
Siz ənənəvi binar operatorların istifadə edə bilər.
Belə ki, hər kəs bunu bir sürətli və çirkli yol bilir?
Bu, faktiki düşüncə bir dəqiqəlik bilər. I varsa -
Onlar xahiş kimi mən problem qurmaq lazımdır. I 2 dəyişənlər varsa, A, olan yalnız bir tam deyil
onlar mənə ver, mən verilən edirəm ki, bir tam olan məbləğ dəyişən B etdi.
Mən bu 2 dəyişənlər varsa, indi mən onları dəyişdirmək istəyirik.
Ənənəvi, sizin müntəzəm ikili operatorları istifadə edərək, demək, + kimi, - ÷.
Ikili hərəkət edən bitwise operatorları deyil.
, +, ÷ və bütün bu - Beləliklə, istifadə edir.
Biz kimi bir şey etməklə dəyişdirmək olar = a + b, b = a - b, a = a - b.
Belə ki, ağlı başında olma kontrol, sonra biz niyə işlər görürsünüz.
Gəlin demək a = 7, b = 3, sonra b 10 olacaq bir +.
Beləliklə, biz indi = 10 müəyyən edirik, sonra biz b = a edirik - b.
Beləliklə, biz edirik b = a - b, 7 olacaq olan və b = a - b yenidən,
və ya a = a - b. 7 3 olan - 10 olacaq edir.
Beləliklə, düzgün, 'bir' b 3, 7 idi və indi b 7 və 'bir' 3.
Belə ki cür mənada edir; 'bir' 2 nömrələri birləşməsidir.
Bu nöqtədə, 'bir' birləşməsi, sonra biz orijinal b həyata subtracting edirik
və biz orijinal idi nə subtracting edirik 'a.
Amma bu bütün nömrələri üçün iş deyil.
Bu görmək üçün bir-bir sistem hesab olsun ki, biz adətən 32 bit kimi integers düşünürəm.
Yalnız 4 bit kimi bir şey haqqında iş edək.
İnşallah mən indi yaxşı bir nümunə ilə gəlib.
Belə ki, mən bilirəm, bu asan olacaq.
Gəlin bizim 2 ədəd 1111 və 1111 deyə, biz indi ikili etdiyiniz belə.
Faktiki ondalık olaraq, bu şəkildə düşünmək istəyirsinizsə, a = 15 və b = 15.
Və biz onları dəyişdirmək sonra biz gözləyirik - onlar hətta eyni nömrələr olmaq yoxdur
ancaq bu şəkildə idi.
Gəlin eyni nömrələr onları etmək. 1111 və 0001 gələni edək.
Belə ki, a = 15 və b = 1.
Biz onları dəyişdirmək sonra, biz bir '1 olmaq və b 15 olmaq gözləyirik.
Belə ki, ilk addım a = a + b.
0001 olan nömrələri yalnız 4 bits geniş, belə bir "1111 olan + b,
10000 olan qədər başa gedir, amma biz yalnız 4 bit var.
Belə ki, indi a = 0.
B - - əslində, hələ də mükəmməl işləyir və indi b = a təyin etmək istəyirik.
a = a - b - bu mükəmməl həyata işləri nin görək.
Beləliklə b = 0 - sonra hələ 15 olacaq, 1 və a = a - b,, 1 olardı.
Bəlkə bu çalışır.
O müntəzəm istifadə işləmir səbəb var kimi hiss edirəm.
OK, belə ki, müntəzəm ikili əməliyyatları ilə iş deyil ki, ehtimal üzrə iş,
və mən baxmaq - Mən doğru olub olmadığını görmek üçün Google olacaq.
Beləliklə, biz bitwise operatorları istifadə edərək bunu istəyirik və burada ipucu XOR edir.
Belə ki, hələ görməmişik əgər XOR (^) tətbiqi.
Bu təkrar deyil, bir bitwise operator o bit, və it's ilə qədər fəaliyyət belə -
Siz bit 0 və 1 varsa, bu 1 olacaq.
Siz bit 1 və 0 varsa, 1 olacaq, bu, 0 olacaq bit 0 0 mövcut
və bit 1 və 1 varsa, bu 0 olacaq.
Belə ki, kimi və ya. Olan bit və ya doğru, bu, 1, lakin ya fərqli olaraq, bu doğru iki bit ola bilməz.
Və ya bu 1 ola bilərdi, XOR bu 0 ola bilər.
Beləliklə, biz burada XOR istifadə etmək istədiyiniz olacaq.
Bir dəqiqə üçün düşünün; Google gedirəm.
Yaxşı, siz oxuya bilməz, mən XOR svop alqoritm səhifə hazırda edirəm.
I can't niyə İnşallah bu izah edəcək -
Bu, məhz biz yalnız ki alqoritmi belədir.
Mən hələ niyə görmürəm - Mən yalnız bir pis nümunə seçilmiş olmalıdır,
ancaq 'bir' indi 'bir' 0 deyil, 5 bit əldə sonra, 0 olmaq nə bu halda,
o adlanır nə "tam daşqın".
Wikipedia görə, "XOR svop fərqli olaraq, bu variasiya bəzi üsullarından istifadə edir ki, tələb
x + y bir tam daşqın səbəb deyil ki, təmin etmək. "
Bu tam daşqın idi, amma səhv etdilər Belə ki, bu problemlər var.
Mən əmin deyiləm. Mən başqa bir ilə gəlmək üçün çalışacağıq.
Orada bir sayı qoymaq üçün çalışdığınız zaman [Tələbə] Bəli, tam daşqın deyil
siz ayrılmışdır bit məbləği daha böyük?
Bəli. Biz 4 bit var. That's - biz 4 bit idi, biz onda 1 əlavə etmək üçün cəhd edin, biz 5 bit ilə son.
Amma beşinci bit yalnız Bəli, kəsilmiş olur.
Bu, faktiki güc -
[Tələbə] ki, bir səhv atmaq və ya nə yoxdur - bir səhv atmaq olar?
No Belə ki heç bir səhv yoxdur. Siz toplaşmaq səviyyəsinə almaq zaman, xüsusi bir bit
haradasa bir daşqın var idi, lakin C sizin cür yalnız ilə məşğul olmayan müəyyən edilir.
Siz C. xüsusi toplaşmaq talimatları istifadə əgər Siz, həqiqətən ilə məşğul ola bilər
Nin XOR svop düşünmək edək.
Mən Vikipediya da ki, ola bilər edirəm -
Belə ki, bu da modul hesab gətirdi, mən modul hesab edir, nəzəriyyəsi, mən tapmaq
1 yenidən 15 - Mən 0 bildirib ki, zaman.
Belə ki, həqiqətən bilər - 1 = 15 - 0 ki, müntəzəm prosessoru.
Biz 0 başa yana, 1 çıxmaq, belə ki, o, yalnız ətrafında 1111 geri wraps.
Beləliklə, bu alqoritm əslində iş, bir + b, bir bilər - b, b - bir; gözəl ola bilər ki.
Amma bunu olmayan bəzi prosessorlar, və buna xüsusi olanları gözəl olmazdı.
XOR svop heç bir prosessor işləyəcək. Okay.
Ideyası baxmayaraq, eyni olması ehtimal var ki.
Harada ki, biz birtəhər dəyişənlərin 1 içinə həm də məlumat almaq XOR istifadə
və sonra fərdi dəyişənlərin məlumat çıxarmaq.
Belə ki, hər kəs fikir / cavab var?
[Tələbə cavab anlaşılmaz]
Belə ki, bu iş, həmçinin, XOR kommutativ edir.
Asılı olan üçün bu 2 ədəd qədər burada olmaq üçün nə
Bu nəticə eyni olacaq.
Belə ^ b b ^ a.
Siz həmçinin bu kimi yazılı görə bilərsiniz bir ^ = b, b ^ = a, bir ^ = b yenidən.
Belə ki, bu hüququ, bu işləri, bit düşünmək niyə görmək.
Bir smallish sayı istifadə edərək, 11001 və 01100 deyək.
Belə ki, bu 'bir', bu b edir.
Belə ^ = b.
Biz bu 2 şeyi XOR üçün 'bir' = yaradılması üçün olacaq.
1 Beləliklə ^ 0 1, 1 ^ 1 0 deyil; 0 ^ 1 1 və 0 ^ 0 0 deyil; 1 ^ 0 1.
Siz decimal sıra baxmaq Belə bir 'o olacaq -
Siz, bir 'çox orijinal' bir 'və yeni arasında münasibətlərin görmək fikrində deyilik
lakin bit baxaraq, 'bir' məlumatların bir mesh kimi indi
orijinal "bir" və orijinal b həm də.
Biz b ^ a, biz orijinal da çıxacağıq ki 'bir. Almaq əgər
Və biz əgər orijinal 'bir' ^ yeni bir ',' biz orijinal b qədər baxın.
Belə ki, (a ^ b) ^ b = orijinal bir.
Və (a ^ b) ^ a = orijinal b.
Var - bu bir şey XOR özü görən başqa bir yol həmişə 0-dir.
1101 Belə ^ 1101, bütün bit eyni olacaq.
Belə ki, 1-0 və digər 1 olduğu halda orada gedən heç oldu.
Belə ki, bu 0000.
Bu eyni. (A ^ b) ^ b kimi bir ^ (b ^ b).
(B ^ b) 0 olacaq; bütün bit 0 çünki bir ^ 0 yalnız 'bir' olacaq.
Belə ki, "bir" ilk 1 olduğu üçün gedir ki, yalnız olanları - olanlar idi.
Burada eyni fikir, mən bunu da kommutativ var olduqca əminəm.
Bəli. Mən bunu kommutativ idi ki, əvvəl demək idi.
Bu ^ 'a' və assosiativ, buna görə indi (b ^ a) ^ a.
Və biz nə edə b ^ (a ^ a).
Və yenə, biz orijinal b almaq.
Belə ki, bir 'artıq birlikdə bir "və b birləşməsidir.
Yeni Combo istifadə 'bir' deyə b = Combo 'bir' ^ orijinal b, biz orijinal olsun 'bir.
İndi bir = Combo 'bir' ^ yeni b, orijinal olan - və ya "A" və ya b nə indi.
Bu halda burada aşağı deyil. Bu = b, köhnə b edir.
Belə ki, indi hər şey değiştirilecek üçün geri edir.
Biz əslində bit baxdı varsa, b = a ^ b, bu 2 XOR gedir
və cavab bu olacaq, sonra = a ^ b bu 2 XORing və cavab bu deyil olunur.
Suallar? Okay. Belə ki, son bir qədər əhəmiyyətli dərəcədə daha çətindir.
[Tələbə] Mən o barədə bir sual var. >> Oh, sorry.
[Tələbə] əslində nə sürətli var? Bu XOR istifadə yeni bir dəyişən elan varsa, bu?
Belə ki, yeni bir dəyişən elan və ya dəyişdirmək üçün XOR istifadə edərək, həqiqətən sürətli nədir?
Cavab, bütün ehtimalı bir müvəqqəti dəyişir.
Belə akt səviyyəsində, - onu tərtib sonra, çünki ki,
yerli dəyişənlərin və ya hər hansı müvəqqəti dəyişənlərin və ya bu məhsulları hər hansı kimi şey var yoxdur.
Onlar yalnız istəyirəm edirik - yaddaş var, və qeydiyyat var.
Şeyi fəal olur yerləşir qeydiyyat var.
Siz yaddaş 2 şeylər əlavə etmir; siz qeydə 2 şeylər əlavə edin.
Və siz, sonra onlara əlavə etmək üçün qeydiyyat daxil yaddaş şey gətirmək
və sonra yaddaş onları geri qoymaq bilər, lakin bütün hərəkət qeydə olur.
Beləliklə, siz müvəqqəti dəyişən yanaşma istifadə etdiyiniz zaman, adətən, nə olar ki,
Bu 2 ədəd qeydiyyat artıq.
Və sonra point onlara değiştirilecek sonra, sonra,
yalnız başqa reyestrindən istifadə edəcəyik.
Siz b istifadə edirdi Yerdə, yalnız artıq saxlanılması ki, reyestrdən istifadə edəcəyik 'a.
Belə ki, həqiqətən mübadilə etmək bir şey etmək lazım deyil. Evet?
[Tələbə] Amma bu da doğru, daha çox yaddaş tutur?
Ki, müvəqqəti dəyişən saxlamaq lazımdır, əgər daha çox yaddaş yalnız olacaq.
Daha sonra bir yerdə yenidən müvəqqəti dəyişən istifadə kimi,
sonra - və ya müvəqqəti dəyişən bir şey tapşırılsın.
Belə ki, zaman temp ildə "a, 'b hər hansı bir anda, əgər fərqli dəyərlər və ya bir şey var
sonra yaddaş fərqli yerlərdə var olacaq, lakin bu həqiqətdir ki,
yalnız qeydə mövcud olan bir çox yerli dəyişənlər var.
Olan halda, yaddaş istismara heç, və yaddaş israf heç edirik.
Okay. Son sual bir az çoxdur.
Belə ki, burada, bu CS50 cihaz, bir lüğət var.
Və bunun səbəbi çünki [? B66] Siz yazılı olacaq bir spell checker edir
hash masalar və ya çalışır və ya bəzi data strukturu istifadə edərək.
Siz spell checker yazı üçün olacaq və siz bunu bu lüğət istifadə olacaq.
Amma bu problem üçün, yalnız bir söz lüğətdə olub olmadığını görmek üçün yuxarı baxmaq edir.
Belə ki, əvəzinə bəzi data structure bütün lüğət saxlanılması
və sonra bir şey yanlış yazılan olub olmadığını görmek üçün bir bütün sənəd üzərində axtarır
biz yalnız 1 söz tapmaq istəyirəm. Beləliklə, biz yalnız bütün lüğət üzərində tarayabilir
biz bütün lüğət söz tapmaq heç vaxt, əgər, o, var idi.
Biz bütün lüğət üzərində tarar və sözü görürsünüz, onda biz yaxşı istəyirik, biz bu tapılmadı.
Bu, biz C fayl-user funksiyası baxaraq başlamaq istəyirəm ki, burada deyir
biz lüğət oxuya ildən
amma siz hesab etməlidir funksiyaları kimi burada ipucu verəcək.
Mən məkanı onları yazmaq lazımdır.
Belə ki, əsas olanları siz, sonra açıq və f, qaçılmaz, f bağlıdır baxmaq lazımdır
olan proqramın sonunda getmək, və f scan f olacaq.
Siz həmçinin f oxumaq istifadə edə bilər, amma yəqin ki, istəmirəm
ki, - ki, siz ehtiyacı başa yoxdur.
F scan f siz lüğət üzərində scan istifadə olacaq nə.
Və yalnız yol cəhd və yalançı kodu istəyirəm, həll qədər kod ehtiyac yoxdur
həll, sonra biz bunu müzakirə edəcəyik.
Mən artıq bu ildən verdi və əslində, heç bir terminal və ya cihaz nin shell getmək əgər
Mən ki, - mən adətən - Siz hələ görməmişik Əgər sinif idi, mən bilmirəm,
lakin insan, belə ki, insan pages, olduqca çox hər hansı bir funksiyası baxaraq üçün olduqca faydalıdır.
Mən, kimi scan f man f edə bilərsiniz.
İndi bu funksiyaları scan f ailə haqqında informasiya edir.
Mən də açıq man f, ola bilər ki, mənə haqqında məlumat verəcəyik.
Siz istifadə və ya kodu oxu ne funksiyası bilirik əgər
və bir funksiyası görmək və kimi istəyirik "Bu nə edir?"
Yalnız insan ki funksiyası adı.
Demək ola bilər Ü qəribə nümunələrindən bir neçə var
kimi. ki funksiyası adı, ya adam 3 funksiyası adı, adam 2
lakin yalnız əgər insan funksiyası adı ilk dəfə iş olmaz ki, var.
[Tələbə] Mən açıq adam səhifə oxu deyiləm, lakin mən hələ də və proqramı istifadə etmək necə səhv edirəm.
Okay. Adam pages bir çox faydalı çox azdır.
Əgər siz artıq onların nə bilirsinizsə Onlar daha faydalı edirik
və sonra dəlilləri və ya bir şey üçün xatırlamaq kifayətdir.
Və ya onlar bir ümumi icmal verə bilər, lakin onların çox böyük var.
F scan f kimi, həmçinin. O, bu funksiyaları bütün məlumat verir
və 1 xətt aşağı burada, demək olar, "F scan f string nöqtə və ya axın olan deyilir."
Lakin f açın. Belə ki, necə biz f açıq istifadə edir?
Fayl etmək ehtiyacı olan bir proqram ideyası I / O ki,
siz ilk siz şeyə istədiyiniz faylı açmaq lazımdır, və qaçılmaz,
ki, faylı şeyi oxumaq və onların məhsulları yoxdur.
F açıq biz faylı açmaq üçün istifadə edir.
Biz açmaq üçün nə fayl istəyirəm ki, biz geri almaq şey, bu, bizə verir -
Burada o, "/ user / share / dict / söz." deyir
Bu açmaq istədiyiniz fayl və biz onu açmaq istəyirəm -
biz aydın şəkildə biz oxumaq və ya açmaq istəyirsinizsə yazmaq üçün açmaq istəyirəm müəyyən etmək lazımdır.
Yoxdur birləşməsi və stuff bir neçə, lakin biz oxumaq üçün bu açmaq istəyirəm.
Biz faylı oxumaq istəyirəm.
Belə ki, bu qayıdışı nə edir? Bu fayl ulduz (*), qaytarır
və yalnız dəyişən f hər şey, belə ki, *, göstərmək lazımdır
yenidən, bu göstərici, lakin biz göstəricilər ilə məşğul istəmirəm.
Siz kimi, f indi fayl təmsil etmək üçün istifadə olacaq dəyişən deyil f hesab edə bilər.
Siz faylı oxumaq istəyirəm, əgər f oxu.
Dosyayı bağlamaq istəyirsinizsə, f bağlayın.
Belə ki, proqramın sonunda biz qaçılmaz faylı bağlamaq üçün istədiyiniz zaman, biz nə etməliyəm?
Biz f bağlamaq istəyirik.
Biz istifadə etmək istədiyiniz olacaq ki, artıq son fayl funksiyası scan f, f scan f edir.
Və nə yoxdur uyğun bir model axtarır fayl üzərində tarar edir.
Burada adam səhifə baxanda biz int f scan f bax, indi geri dəyər bilməz.
Ilk arqument file * sel, biz keçmək istəyirəm olacaq ilk dəlil f belə.
Biz f üzərində skaner edirik.
İkinci arqument bir format string edir.
İndi bir format string verəcək.
Mən ki, 127s \ n, lazımsız olduğunu bir çox demək nə düşünürəm.
Ki, format string nə fikri, siz çap f qarşı kimi scan f hesab bilər.
Belə ki, çap f, biz də format parametri bu növü istifadə çap f,
lakin çap f biz işle edir - nin bir ekvivalent baxaq.
Belə f çap və ilk dəlil f olacaq yerləşir f çap f da həqiqətən var.
Siz f çap zaman, biz bəzi simli keçmək əgər bir şey kimi "çap 127s \ n" deyə bilər
Bu simli və sonra yeni bir xətt çap olacaq.
Nə 127 vasitə, Mən olduqca əminəm, ancaq özümü məhdudlaşdırıla heç etdik
Siz hətta çap f '127 'demək lazım deyil ki,
lakin nə deməkdir ilk 127 simvol çap edir.
Mən halda ki, olduqca əminəm. Siz ki, Google bilərsiniz.
Lakin sonrakı bir mən bu o deməkdir ki, demək olar ki, müsbət deyiləm.
Belə ki, bu yeni xətt izlədi ilk 127 simvol çap edir.
F scan f indi əvəzinə dəyişən baxaraq və çap,
bəzi simli baxmaq və dəyişən daxil model saxlamaq olacaq.
Nin həqiqətən fərqli bir nümunə scan f istifadə edək.
Belə ki, qoy biz bir int idi ki, x = 4,
və biz bir string yaratmaq istəyirdi - simli yaratmaq istəyirdi
bu qədər sonra gələcək, kimi ki, idi
yalnız 4.jpg kimi bir şey.
Belə ki, bu, sizin məbləğ counter olacaq bir proqram ola bilər
i qarşı yekunlaşdırmaq, və images bir dəstə saxlamaq istəyirik.
Beləliklə, siz i öz loop bəzi iteration olduğu i.jpg, saxlamaq istəyirik.
Belə ki, necə ki, JPEG, bu simli edə bilərəm?
Siz 4.jpg çap etmək istədi, biz yalnız çap f% d.jpg, demək olar
və sonra bu JPEG üçün çap olardı.
Biz simli 4.jpg qazanmaq istəyirsinizsə Lakin, biz scan f istifadə edin.
String s Beləliklə - həqiqətən biz can't - xarakteri, char s, 100 gedək.
Mən yalnız 100 simvol bəzi array elan
və biz istər-istəməz ki JPEG daxil saxlanılması olacaq ne var
Beləliklə, biz scan f istifadə etmək niyyətindədir və biz% d.jpg deyərdim necə formatında edirik
4.jpg çap üçün, bu format% d.jpg olacaq.
Belə ki, format% d.jpg, nə biz% d əvəz etmək istəyirəm x edir
və indi biz bir yerdə ki, simli saxlamaq lazımdır.
Və biz bu simli saxlamaq niyyətində olduğunuz array s edir.
Belə ki, kodu, s bu xətt sonra biz dəyişən s f,% s çap əgər,
bu 4.jpg çap olacaq.
Belə f scan f indi bu fayl üzərində axtarır istisna olmaqla, scan f eyni
s saxlamaq üçün nə üçün.
Yəni son arqument olacaq nə.
Funksiyaları tarar və "Scan f ailə aşağıda cəhd kimi həm format görə - Biz saxlamaq istəyirik.
Heç bir yeri bal saxlanılır Əgər dönmək bilər - "
Xeyr, biz yaxşı ola bilər. Mənə bir ikinci hesab edək.
Belə scan f deyil - the heck ki etdiyi funksiyası nədir?
Belə scan f bir tam almaq və dot jpg etmək niyyətində deyil.
Bu [Mumbles] olacaq.
String int C. int dəyişən edin
Bu dəyişən və ya bu funksiya nə adlanır?
Bəli. That's - bəli. Belə ki, nə sizə müəyyən əvvəl, s çap f idi
olan - mən onu çap f kimi daha çox olduğunu söylədi niyə daha çox mənada edir.
Scan f çap f kimi hələ cür, lakin s çap f üzərində scan edir
və dəyişənlərin əvəz və indi bir string onu saxlamaq.
Bunun əvəzinə çap, bir string bu saklar.
Belə ki, tamamilə bilməz. Siz hələ çap f ki kimi formatı belirteci hesab edə bilər.
Biz 4.jpg şey etmək istəyirdi əgər Beləliklə, biz bu x s ​​çap f etmək olar.
Sual olacaq nə oldu - nə scan f edir?
[Tələbə] Mən yalnız biz burada nə çalışdığınız nə qarışıq alıram
ki, JPEG ilə. Əgər 1 dəfə daha izah edə bilər?
Belə ki, bu idi - bu f scan f indi az relevent var; ümid edirəm ki, bu yol bir növ geri bağlamaq olacaq.
Amma nə ilkin göstərmək niyyətində idi - bu, həqiqətən, bu [birbaşa müvafiq? F5]
Siz s çap f istifadə olacaq, biz 100 images olduğu demək
və image 1.jpg, 2.jpg, 3.jpg oxumaq istəyirəm.
Belə ki, nə üçün siz f açıq lazımdır, və sonra siz açmaq istədiyiniz string keçmək lazımdır.
Beləliklə, biz 1.jpg açmaq istəyir; 1.jpg ki string yaratmaq üçün,
% biz s nə çap f d.jpg-biz int i = 0 etmədi.
i <40, i + +.
Beləliklə s çap f% i d.jpg.
Belə ki, bu xətt sonra, indi dəyişən və ya array s 1.jpg gedir.
Və ya, 0.jpg, 1.jpg, 2.jpg. Və biz, öz növbəsində, oxumaq üçün hər image aça bilər.
Belə ki, s f edir çap edir. Siz s f indi bunu çap nə görürsünüz?
[Tələbə] Okay, bunu qəbul edir - bir string yaradır, something.jpg, sonra saklar.
Bəli. Bu yaradır - bu yalnız scan f və çap f kimi, başqa bir format string ki,
burada ikinci dəlil onu edər dəyişənlərin bütün, s kimi i fərqli ola bilər.
Yəqin - I halda ki, deməkdir. Lakin hər hansı arqumentlər sifarişi edir.
Bu format string daxil dəyişənlərin bütün daxil olacaq
və sonra bufer daxil saxlamaq; biz simli saxlanılması olduğunuz bufer, bu ki çağırırıq.
Belə ki, biz düzgün biçimli simli,% d 4 ilə əvəz edilmiş daxili s saxlanılması olunur.
[Tələbə] Biz bunu əgər, yalnız atanır olacaq dəyişən f edir?
Bəli. Belə ki, biz bunu əvvəlki f yaxın olmalıdır.
Amma - bir f burada açmaq yox idi əgər, sonra da, biz demək lazımdır -
Bəli. Amma yüz müxtəlif faylları açmaq olardı.
Tamam - [Tələbə] Lakin biz daxil olmaq və ya ola bilər.
Okay. Belə scan f, f scan f, eyni fikri növü
lakin əvəzinə əvəzinə bir simli daxil saxlanılması, daha indi kimi
ki, simli qarşı uyğun bir sting və model üzərində gedən və dəyişənlərin daxil nəticələri saxlanılması.
Siz 4.jpg kimi bir şey üzərində analiz və məbləğ int x daxil tam 4 saxlamaq üçün scan f istifadə edə bilərsiniz.
Yəni biz scan f istifadə edə bilərsiniz nə.
F scan f command line ki, nə gedir.
Mən, həqiqətən, bu CS50 kitabxana nə olduğunu olduqca əminəm.
Beləliklə, siz deyəndə, "int almaq," bu scan f-ing üzərində var - scan f istifadəçi daxil olmaq yoludur.
F scan f eyni şey gedir amma artıq scan bir fayl istifadə edir.
Odur ki, biz bu fayl üzərində skaner olunur.
Biz uyğun çalışırıq model 127 simvol uzunluğunda olan bir string edir
yeni xətt izlədi
Mən lüğət, çünki ", s uyğun" Biz hətta yalnız demək olar olduqca əminəm
biz nə, heç bir sözü uzun təmin edirik,
və həmçinin f scan f, mən hesab edirəm ki, yeni xətt heç nə duracaq.
Amma matçın yeni xətt daxildir, və lazımdır -
[Tələbə] yeni xətt daxildir olmasaydı, bu söz hissələri tapmaq deyil?
Bu - hər - lüğət baxaraq -
Belə ki, lüğət, bu bizim söz bütün var.
Hər bir yeni xətt edir.
Tarama f bu söz almaq üçün gedir.
Yeni xətt daxil deyil, onda növbəti scan f yalnız yeni xətt oxumaq ki, mümkündür.
Amma yeni, o cümlədən sonra yalnız yeni xətt ignore edəcək.
Biz həmişə bir yeni heç nə qədər oxuyur Lakin biz bir söz hissəsi almaq olmaz.
[Tələbə] Amma nə cissa kimi sözü "cissa" üçün axtarış edin.
Ki, tapmaq və bu, bir matç demək olacaq?
Belə ki, burada biz - bu oxumaq - bu, həqiqətən, yaxşı bir nöqtəsidir.
Biz cari istifadə heç vaxt edirik - biz aradığınız söz ilk command line dəlildir.
Belə ki, simli, söz = argv 1.
Beləliklə, biz aradığınız string argv 1-dir.
Biz scan f bütün bir söz axtarır deyil.
Biz scan f edir ki, lüğət hər söz alır
və sonra bir dəfə biz onları müqayisə etmək strcmp istifadə etmək olacaq ki, söz var.
Biz söz müqayisə olacaq və biz yalnız daxil oxumaq
Belə ki, istər-istəməz, biz scan fs bir dəstə bunu başa olacaq
yalnız belə scan f qaytarır olur qədər -
bu kimi uzun bir yeni söz eşlemeli kimi, bir qayıdacaq
və tezliklə bu söz uyğun uğursuz kimi başqa bir şey qayıdacaqlar.
Biz dəyişən s daxil hər sözü xətti ilə line saxlanılması, bütün lüğət üzərində oxuyur.
Sonra, s ilə söz müqayisə və müqayisə == 0 əgər olunur
strcmp matç yaptıysanız 0 gətirmək olur.
O 0 idi Odur ki, əgər biz uyğunlaşdı, f çap edə bilərsiniz
və ya söz lüğətdə və ya siz f çap etmək istəyirəm nə.
Və sonra - biz f daha artıq yaxın və istəmirəm.
Bu etmək istəyirəm şey cür və biz yalnız lüğət söz axtarır deyil.
Belə ki, əvvəl bildirib kimi, biz onların model, cissa axtarmaq istəyirdi, əgər bunu edə bilər
ki, model axtarmaq istəyirdi, onda bu halda uğursuz olacaq
əslində bir söz deyil, amma lüğət sözləri biri ki, var olur ki. çünki
Belə ki, bu söz uyğun, lakin sözü bu alt bir söz özü deyil.
Lakin biz onu istifadə etdiyiniz deyil, biz hər sözü oxu edirik
və sonra biz sözü ilə var söz müqayisə.
Beləliklə, biz həmişə tam sözləri müqayisə edirik.
Mən sonradan başa həllər həyata göndərə bilərsiniz.
Bu təxminən düzgün cavab növ, mən hesab edirəm.
[Tələbə comment, anlaşılmaz]
Əvvəl Oh, mən xilas etdi? Char s, biz 127 bildirib tapmaq - Mən böyük nə unutmayın.
Biz yalnız 128 edərik; indi uzun kifayətdir.
Biz bir şey çap ehtiyac yoxdur.
Biz fayl yaxın olsun olacaq ki, doğru cavab olmalıdır.
CS50.TV