[Powered by Google Translate] Skyrių problema Set 2: Hacker Edition
Rob Bowden, Harvardo universitetas
Tai CS50. CS50.TV
Taigi, aš Rob. Aš esu, Kirkland vyresnysis. Tai mano trečius metus TFing CS50.
Tai yra pirmas kartas, kai mes kinta nuo tradicinio paskaita stiliaus skyriaus,
kur mes tiesiog rūšies peržiūros, kas atsitiko paskaitą ir tada jums, vaikinai, užduoti klausimus,
dabar yra daug daugiau problemų, kur mes Naudokite tarpus, ir -
O, taip, kad idėja yra eiti į šią nuorodą, aš buvau nusiuntęs jus ir tada jūs būsite My Space.
Ar kas nors turite nešiojamąjį kompiuterį? Gerai.
Taigi, mes ketiname naudoti šį, ir mes ketiname daryti problemas gyventi skyriuje
ir aptarti juos ir suprasti, kas yra negerai
ir aš galėtų atsigriebti kai savo kodą, ir aš galėtų aptarti savo idėjas.
Taigi, ar kas nors buvo sunku?
Galite kalbėtis pusėje, aš nežinau, jei mes turime priežasčių, kad.
Dabar, kaip ir ankstesniais supersection, jei buvo tos klasės, jūs žinote, kas tai yra apie.
Apie visus P rinkinių ten bus šie skyriai.
Taigi, P-rinkinys 2, specifikaciją, aš atspėti, kad matėte tai P-1 formos.
Tačiau mes galime pažvelgti P-SET 2 už tai, ką mes ketiname šiandien vyksta per.
Ir pamatysite klausimų skyrių.
Taigi, tai bus visi P rinkinių, ten bus klausimų skyriuje.
Iki šiol mes pasakė: "Apsvarstykite tai galimybė praktiškai".
Jums nebus prašoma pateikti šią programą.
Idėja yra ta, kad jie turėtų padėti jums pradėti su problema rinkinys natūra.
Manau, hacker leidimas, daug jų turėtų būti tik naujų, įdomių dalykų, mokytis.
Jie negali būti tiesiogiai taikomas prie problemos.
Ir dabar mes neturi tu juos pateikti, bet teoriškai,
vėliau probleminių rinkinių, galite juos pateikti, ir todėl jums gali ateiti į skyrių
arba žiūrėti skyrių, gauti atsakymus į visus, arba galite tiesiog gauti juos į savo
jei jūs neturite jaustis kaip mėgautis savo buvimo.
Taigi manau, kad tai yra pirmasis.
Oh. Be to, pagal šių klausimų skyrių, mes taip pat tu užduoti klausimus apie šortai.
Taigi, manau, bent jau teoriškai, jūs turėtų žiūrėti šiuos prieš atvykdami į skyrių,
bet tai gerai, jei jūs neturite, mes pereiti per juos vistiek.
Taigi, mes galime pradėti su jais: "Kaip while cikle skiriasi nuo do-while cikle?
Kai pastarasis ypač naudinga? "
Kad kas nors turite kokių nors?
[Studentų] do-while cikle, visada atlikti bent vieną kartą.
Taip. Taigi, kad yra skirtumas. O linijos - I'll just do it čia - while cikle, mes turime būklę
čia, o do, o jūs neturite sąlygą, kol mes cia atsidure.
Taigi, kai jūsų programa manimi vykdančioji, ir jis gauna iki while cikle,
ji iš karto patikrina, ar ši sąlyga yra teisinga.
Jei ši sąlyga yra ne tiesa, tai bus tiesiog praleisti kilpa visiškai.
Do-while cikle, nes programa vykdo, jis gauna į "padaryti".
Nieko neįvyksta, šiuo metu, tik toliau vykdyti.
Tada, kai ji hitai "while", jei sąlyga yra teisinga, tai bus kilpa atgal ir padaryti jį dar kartą
ir vėl ir vėl, kol būklė nėra tiesa, ir tada tiesiog priklauso per.
Taigi, skirtumas yra tas, kad tai gali iš karto pereiti nuo pat pradžių.
Tai neabejotinai atlieka vieną kartą ir paskui gali vykdyti daugiau kartų, jei sąlyga yra vis dar tiesa.
Taigi, o kilpa padaryti tik vieną kartą, arba - o linijos - mes galime nereikia, tai ne visi,
nes, kaip greitai, kaip mes gauti į jį, jei sąlyga yra klaidinga, mes tiesiog iš karto pereiti per jį.
Kadangi do-while cikle, mes jį vykdyti vieną kartą, nebūtinai.
Tada, kai mes gauti su sąlyga, mes patikrinti, ar tai teisinga, ar klaidinga.
Jei tai tiesa, mes jį dar kartą, jei klaidingai, mes tiesiog tęsti.
Taigi, kai pastaroji yra ypač naudinga?
Taigi, galiu pasakyti, kad 4 metus visas, 3 metai, nepriklausomai nuo
kad aš programavimo, aš naudojo tai, pavyzdžiui, iki 10 kartų.
Ir tikriausiai 5 iš jų yra CS50, kai mes padaryti, o kilpos.
Taigi, kai jūs padaryti, o kilpos?
Kai yra - taip?
[Studentų] Kai jūs bandote gauti vartotojo įvesties, ar kažkas, kurį norite patikrinti
Taip. Taip daryti, o kilpos, naudotojo įvesties yra didelis vienas.
Štai kodėl pirmoji pora probleminių rinkinių, kai norite paprašyti, kad naudotojas, pavyzdžiui,
"Give me eilutę," jūs negalite tol, kol jūs gaunate, kad eilutę.
Ir tokiu būdu jūs, būtinai, reikia prašyti eilutę bent kartą.
Bet tada, jei jie atsakys ką nors bloga, tada jums reikia kilpa atgal ir paklausti dar kartą.
Bet išskyrus naudotojo įvesties, tai labai reta, kad aš susidurti bylą
kur aš noriu bent kartą "kilpą", bet galbūt daugiau.
Klausimų ar -? Ar kas nors naudoti do-while cikle niekur kitur?
Gerai. Taigi kitą: "Ką pasiskelbusios identifikatorius
paprastai rodo, jei išvedamas Apsukite metalinis garsas? "
Taigi, kokios kodo galėčiau rašyti gauti nedeklaruojamą identifikatorių? "
[Studentų], kad x = 2?
Taigi, mes galime tiesiog pabandykite jį čia x = 2.
Mes atliksime tai - oh, aš ne spustelėkite jį. Taigi čia mes gauname - viskas gerai.
"Naudoti nedeklaruotus identifikatoriaus x".
, Kad nedeklaruojamas identifikatorius, kintamasis.
Jis dažnai vadiname kintamojo identifikatorių.
Todėl ji gali žinoti, tai tikrai kintamasis, jis nežino, kas tai yra.
Todėl identifikatorius.
Tad kodėl jis nepasiskelbusių? Taip.
Taigi turi būti aišku, terminologija, kintamojo deklaracija
yra, kai jūs sakote "int x," ar "STRING Y", kokia būtų.
Kintamojo iniciacijos, ar kintamojo priskyrimas,
yra, kai jūs sakote "x = 2".
Taigi, mes galime padaryti, tai atskirais etapais, int x, x = 2, o iki - čia mes galime turėti daiktų krūva -
bet kol ši eilutė atsitinka, x dar niezainicjowanymi, bet jis buvo paskelbtas.
Ir taip mes akivaizdžiai gali daryti į 1 eilutę, o dabar mes deklaruoti ir Inicijuojama.
Turite klausimų?
Ir, pagaliau, "Kodėl yra Cezario šifro nėra labai saugus?"
Taigi, pirma, ar kas nors norite pasakyti, kas Cezario šifro yra?
[Studentų] Cezaris Šifro tiesiog, kad jums suplanuoti, jums pereiti kiekvieną laišką,
raidžių eiti tam tikras skaičius, ir judėti pirmyn per, ir tai nėra labai saugus, nes
yra tik 26 galimos alternatyvos, ir jūs tiesiog išbandyti kiekvieną 1 iš šių, kol gausite ją.
Oh. Taigi, norėčiau pakartoti?
Cezaris Šifro, it's - Aš turiu galvoje, jūs spręsti su juo apie problemas, kurios
arba Manau, problemą, kad ne hacker leidimas standartinis leidimas.
Taigi Standard Edition problemą, gausite pranešimą, kaip "Hello, World"
ir jūs taip pat turite kaip 6, ir pradėdami vartoti šį pranešimą, ir kiekvienas individualus charakteris,
jūs pasukite jį 6 vietų abėcėlės.
Taigi "h" Apie taptų h-i-j-k l m n.
Taigi pirmoji raidė n. Mes darome tą patį el.
Jei mes turime, pavyzdžiui, Z ar kažkas, tada mes wrap atgal aplink ".
Bet kiekvienas personažas gauna kitą įtaisas persijungia vėliau 6 simbolių abėcėlės, o tai nėra labai saugus
nes yra tik 26 galimybes, kaip daug būdų, galite wrap vieną raidę.
Todėl galite tiesiog išbandyti visi. Iš jų 26 ir, matyt, pakankamai ilgą pranešimą,
tik 1 iš šių galimų 26 dalykų, bus įskaitomas,
ir įskaitomas vienas bus pradinis pranešimas.
Taigi, tai nėra labai geras būdas ką nors ne visi šifravimo.
Nesusiję su tų šortai, "Kas yra funkcija?"
Taigi, kas yra funkcija? Taip.
[Studentų] Tai kaip atskira kodo fragmentą, kad galite skambinti pereiti ir gauti grąžos vertę, nepriklausomai nuo jų.
Taip. Taigi aš jį atsakyti, taip pat atsakyti į kitą - ar kartoti tik atsakyti į kitą.
Galite naudoti funkcijas, o ne tik kopijuoti ir įklijuoti kodą, vėl ir vėl.
Tiesiog pasiimti tą kodą, įdėti jį į fuction, ir tada galite tiesiog paskambinti funkcija
ten, kur jums buvo kopijuoti ir įklijuoti.
Taigi funkcijos yra naudinga.
Taigi dabar mes padarysime aktualias problemas.
Pirmasis. Taigi pirmojo idėja, perduoti jį eilutę, ir nepriklausomai nuo
ar ji sako, mažosiomis? Ji nesako mažosiomis raidėmis.
Taigi pranešimas gali būti bet kas, ir - oh no. Ji veikia.
"Kad būtų paprasčiau, galite manyti, kad vartotojas tik įvesti mažosiomis raidėmis ir tarpai.
Taigi, mes pereiname žinutę su tik mažosiomis raidėmis, ir tada mes pakaitomis
tarp mažųjų ir didžiųjų - mes pakeisime eilutė, mažųjų ir didžiųjų, pakaitomis.
Taigi, kol mes jums antrą net pasinerti į problemą,
kas yra pirmas dalykas, kad mes turime padaryti?
O, koks aš tiesiog spustelėkite? O, aš tiesiog paspaudėte laišką čia.
Taigi pirmas dalykas, kurį reikia padaryti, - aš ieškau ne nuo?
Ar tai šį vieną?
Ne, jie yra vis dar ten, nors.
Gerai, vis dar čia.
Dabar mes negalime prisiimti? Taip. Čia mes negalime manyti, kad tai tik mažosiomis raidėmis, o erdvės.
Taigi dabar mes turime spręsti su aplinkybe, jog raidės gali būti, bet mes norime, kad jie.
Ir taip pirmas dalykas, kurį norite padaryti, tai tiesiog gauti pranešimą.
Mes tiesiog reikia gauti eilutę, string s = GetString, gerai.
Dabar ši problema, yra pora būdų, kaip tai daryti.
Bet mes čia, kad nori naudoti Bitinis operatorius.
Ar yra žmonių, kurie arba nebuvo tuo supersection,
ar kažką, o ne žinoti, ką Bitinis operatoriai?
Arba, kaip jie susiję su ASCII bet kokiu būdu?
[Studentų] buvau ne tuo supersection, bet aš žinau, ką Bitinis operatoriai.
Gerai. Taip, tada aš ne eiti per jų pagrindai, bet aš paaiškinti,
tai, ką mes ketiname norite naudoti.
Taigi, 'A': dvejetainis sostinę, skaičius yra 65.
Aš tik ketina pažvelgti - 41 bus 01.000.001.
Taip, kad turėtų būti 65 dešimtainis; todėl tai yra dvejetainis simbolių kapitalo A
Dabar, dvejetainis pobūdžio mažosios raidės "a"
bus tas pats, beveik. Yra tai, kad - 6, yeah. Tai yra teisinga.
Taigi dvejetainis kapitalas, dvejetainis mažosiomis raidėmis. "
Taigi pastebėti, kad skirtumas tarp A ir "a" - tai viena tiek.
Ir tai atsitinka būti 32 bitų, tiek sudaro skaičių 32.
Ir tai suprantama, nes yra 65; "a" yra 97.
Skirtumas tarp jų yra 32.
Taigi dabar mes žinome, mes galime konvertuoti nuo a iki "A", atsižvelgiant
Bitinis Oring, kad atrodo kaip 1.
Tai Bitinis arba, 00100000, ir kad duosiu "."
Ir mes galime gauti nuo "a" iki Bitinis anding
11, 0, toje vietoje, 11.111.
Todėl tai bus tada duoti mums, ką "a", bet atšaukti šią individualią tiek,
todėl mes turime 01000001, aš nežinau, jei aš suskaičiuoti.
Tačiau šis Bitinis Oring techniką gauti iš kapitalo į mažąsias,
ir Bitinis anding gauti iš mažosios į kapitalo ne tik A.
Visas raides, K vs K, Z vs Z
visi jie yra tik ketina skirtis šio vienintelio tiek.
Ir todėl jūs galite pakeisti bet kuriuo mažosiomis bet didžiąja raide, ir atvirkščiai.
Gerai. Taigi paprastas būdas gauti iš to - vietoj to, kad
surašyti kokia 1011111 - paprastas būdas atstovauti šį numerį, ir tai yra ne vienas
, kad aš nuėjau į supersection, bet tildė (~) yra dar vienas Bitinis operatorius.
~ Ar tai žiūri bitų atstovavimas.
Paimkime bet kurį skaičių.
Tai tik kai dvejetainis skaičius, ir kas ~ nėra tai tik salto visi bitai.
Taigi tai buvo 1, 0, tai 0, 1, 010.100.
Taip, kad visi ~. Taigi 32 bus numeris - atsikratyti, kad
taip. 32 bus skaičius 00.100.000, ir taip ~ tai bus
šis skaičius čia, kad aš anded "A".
Ar visi matote, kad? Tai yra gana dažnas, pavyzdžiui, kai norite išsiaiškinti,
vėliau dalykų, kad mes galime būti matyti, kai norime pamatyti, jei
ar mes norime viską, kiekvieną bitų rinkinys, išskyrus 1
jūs linkę daryti ~ tiek, kad mes nenorime, nustatytą.
Taigi, 32 bitų rinkinį mes nenorime, kad mes ~ iš 32.
Gerai. Taigi, mes galime naudoti visi tie čia.
Viskas gerai, tai gerai, jei ne viskas, mes lėtai vaikščioti per kartu,
ar vaikščioti per tai, kad per šį. Walk through.
Taigi, mes turime eilutę, ir mes norime, kilpa ant kiekvieno tos eilutės pobūdžio ir padaryti kažką į jį.
Taigi, kaip mes kilpa per eilutę? Ką turėtume naudoti?
Aš nesiruošia tai padaryti čia. Taip.
Taigi, aš turiu savo Iterator, ir jis sakė, kad tai, tačiau kaip man žinoti, kiek simbolių į eilutę?
Strlen (-ai), tada i + +.
Taigi, ką aš padariau, čia nėra pats geriausias būdas, kaip daryti dalykus.
Ar kas nors žino kodėl?
Todėl, kad jūs patikrinti eilutę, kiekvieną kartą, kalbą.
Todėl mes ketiname norite perkelti strlen, galiu pasakyti, čia, int ilgis = strlen (-ų)
ir tada man <ilgis ir tuo atveju, jei nėra mačiau jį prieš
Aš taip pat galėtų padaryti int i = 0, ilgis = strlen (-ai).
Ir todėl tai yra šiek tiek priimtinesnis, nes dabar aš apribojo taikymo sritį
kintamojo ilgio tik tai "kilpa", užuot paskelbusi jį prieš
ir kad ji visada yra ir tuo atveju, jei neišgirdau kodėl tai blogai,
arba kodėl originalas buvo blogai, input - pradėti už linijos.
Aš patikrinti būklę. Ar i <s ilgis?
Taigi s ilgis, galime dirbti su "labas" visą laiką.
Taigi ilgis, h-e-l-l-o. Ilgis yra 5.
Taigi, i = 0, ilgis 5, todėl aš ne <5, todėl toliau kilpa.
Tada mes einame dar kartą. Mes tikriname sąlygą. Ar i <Apie ilgis?
Todėl galime patikrinti Hello ilgį. H-e-l-l-o. Štai 5; aš ne <5, todėl mes ir toliau vėl.
Taigi, mes apskaičiuoti, mes tikimės Apie kiekvienam kilpa iteracijos
net maniau, kad niekada pakeisti, tai visada bus 5.
Taigi mes tiesiog prisiminti 5 priekyje, ir dabar viskas geriau.
Taigi iteravimu per visą eilutę.
Ką mes norime padaryti už kiekvieną eilutę pobūdžio?
[Studentų sakant, nesuprantamas]
Taip. Taigi, jei simbolis yra ne raidinis, tada mes tiesiog norite praleisti.
Nes mes tik rūpi abėcėlės raidėmis, mes negalime pasinaudoti numerį.
Taigi, kaip mes galime tai padaryti? Taigi mūsų būklę, todėl, jei norime kažką - jei tai abėcėlės tvarka.
Taip, kaip mes tai patikrinti?
[Studentų] Jūs galite tiesiog naudoti šią funkciją yra alfa.
Yra tai, kad nė vieno iš jų, arba bet yra panašių char.h ar kažką?
Tegul ne naudoti, yra alfa funkcija, ir aiškus - todėl mes turime s [i],
, kuri yra aštuntoji s pobūdis, atminkite, kad eilutė yra simbolių masyvas,
todėl aštuntas pobūdis s.
Dabar, jei tai didžioji raidė, mes žinome, ji turi būti tam tikroje juostoje.
Ir kas tai yra diapazonas?
Taip. Taigi, jei s [i] yra ≥ 65 metų amžiaus, ir s [i] yra ≤ 90, ką reikėtų daryti, o ne?
Taip. Taigi, jūs turėtumėte visiškai niekada net reikia žinoti ASCII reikšmes, nieko kada nors.
Niekada galvoti apie skaičių 65, 90, 97 ir 102, ar kokia ji yra.
Jums nereikia 112? Jums nereikia žinoti, ne visi. Kad negerai.
Naudoti tik vieno citata simbolių, viengubas kabutes konstantos. Taigi, "A" ir mažiau kaip 90 "Z."
Ir tai yra žymiai geriau, aš ne žinoti, ne mano galvos viršuje, kad Z yra 90.
Aš žinau, ne mano galvos viršuje, kad "Z" kapitalas Z.
Taip ilgai, kaip tai yra kapitalo diapazone kapitalo Z, ar mes, gali patikrinti, mažosiomis raidėmis,
Arba, jei tai intervale ≥ "a" ir ≤ z.
Taigi, kad mūsų sąlyga.
Stilius, kur dėti šiuos dalykus skiriasi.
Aš tai padaryti, kaip šis.
Dabar, ką mes norime padaryti?
Mes žinome, šis laiškas yra simbolių, abėcėlės raidė.
Taigi mums reikia kaitalioti, ar tai dabar turėtų būti raidė arba mažosiomis raidėmis.
Kaip mes sekti, iš kurių vienas, mes norime, kad ji būtų?
[Studentų balsas, nesuprantami]
Taip taip, bet leiskite man patikrinti.
Modulis 0-2 buvo pasakyta, buvo pasiūlymas išmestas, ir aš su tuo sutinku.
Išskyrus tuos atvejus, pranešimas, kad, kaip tai atveju? Taip.
Tai kas kita, bet mes negalime i 2 modulis, arba i mod 2, nes
pastebėsite, kad E yra sostinė ir "a" yra mažosiomis raidėmis? Bet ten vieta juos atskirti?
Todėl jie bus pačią mod 2, bet jie skirtingi atvejai.
[Studento klausimas, nesuprantamas]
Taip. Taigi mes tik ketina išlaikyti skaičius.
Mes taip pat galėtų padaryti, kad čia, jei norime, kad gali gauti šiek tiek griozdiškas
kilpos deklaracijų; aš įdėti jį čia.
Taigi int count = prasideda 0.
Ir todėl dabar, aš ruošiuosi skaičiuoti, kiek raidiniai simboliai mes jau.
Todėl mes neišvengiamai skaičiuoti + +, nes mes radome dar vieną abėcėlės simbolį.
Bet, kad dabar jūs sakote, jei count mod 2.
Taigi, ką daryti, jei skaičius mod 2? Oh. Aš padarysiu == 0 dabar.
Mes taip pat eiti per tą. Taigi, jei skaičius mod 2 == 0, kas tada?
[Studentai atsakymas, nesuprantami]
Taigi, mes norime, kad ji galų gale didžiosiomis raidėmis.
Yra 2 atvejai; didžiąsias ir mažąsias yra 2 atvejai.
Taigi, jei mes mums reikia, kad jis didžiąsias mažosiomis raidėmis.
, Jei tai didžiosios, mums nereikia nieko daryti.
Bet, yra būdas - shouldn't buvo apversta -
kad mes net nereikia patikrinti, ar jis didžiąsias arba mažąsias?
Ką mes galime padaryti, visada įsitikinkite, kad mes visada galų gale didžiosiomis raidėmis?
Taigi pastebėti, ką mes padarėme mažosiomis raidėmis "A", ką daryti, jei mes padarėme šį tą patį tiksliai dalykas, į didžiąsias?
Ar didžiąsias pakeisti, ar vertės pokyčius?
Taip. Taigi bet didžioji raidė Bitinis anded su ~ 32 bus, kad pats didžiąsias pobūdis
nes visas didžiąsias pobūdžio 32 bitų nėra nustatytas.
Taigi, jei norime pareikšti pobūdį s [i], mes norime, kad ji taptų mažosiomis arba didžiosiomis raidėmis.
Taigi, jei ji buvo mažosiomis raidėmis, tai dabar yra didžiosiomis raidėmis, jei ji buvo didžiąsias, jis vis dar didžiosiomis raidėmis, ir viskas.
Aš pasakiau tai supersection: Jūs galite naudoti 32, jei jūs norite, bet esu linkęs teikti pirmenybę daro "a" -
o ne tik paprasto 32, nes jis gali būti bet koks kitas tiek.
Po to, kai 32 bitų, tai gali būti bet kuris iš šių, ar mes neturi pakankamai
numeriai atstovauti visus simbolius.
Taigi, jei jūs gaunate 32 bitų, tai gali būti 64 bitų, tai gali būti 128 bitų.
Bet iš tų bitų gali būti tiek, kad atskiria didžiąsias ir mažąsias.
Aš ne reikia žinoti, kad jis yra 32 bitų.
Aš galiu naudoti šią "A" - gauti tiek, kad skiriasi tarp dviejų
nereikia remtis Magiškas skaičius yra 32.
Ir iki šiol, dar tikėtis buvo keista, ir tt, ką aš noriu padaryti?
[Studentų atsakymai, neįskaitomai]
[Studentų] Kas tai?
Aš tai padaryti per 1 sekundę.
Taigi dabar, jei noriu - aš noriu padaryti, kad charakteris yra dabar mažosiomis raidėmis,
ir todėl aš gali arba atitinkamai 32 ir 32 dalį "a" - A.
Tačiau pastebėkite, tais pačiais argumentais, kaip ir ankstesnis, kad jei
laiškas jau buvo mažosiomis tada Oring 32 tik išlaiko mažosiomis.
Ji negali keisti savo pradinį tapatumą.
Bet dabar aš neturiu, kad būtų išvengta, sakydamas: "Jei tai yra mažosiomis tiesiog pamiršti apie jį,
jei tai didžiosiomis raidėmis, tada pakeiskite jį. "
Tai daug patogiau tai padaryti.
[Studentų] Ar kad strategija atimant didžiąsias mažosiomis darbo, jei tai buvo ne 32?
Jei jis buvo, pavyzdžiui, 34 ar kažką?
Taigi, jūs turite žinoti, kad skirtumas yra tarp 2 -? >> 1 bitas.
Tai gali būti daugiau nei 1 bitas, kaip ilgai, kaip ir visi žemiau šios pozicijos bitų yra tas pats.
Taigi, mes turime bent 26 simbolių arba yra 26 simboliai.
Taigi, mums reikia mažiausiai 26 numerius atstovauti skirtumą -
Skirtumas tarp A ir "a" turi būti bent 26,
kitaip mes nebūtų reiškę visus kapitalo numerius.
Tai reiškia, kad, jei mes pradėsime nuo 1, tai ketinate naudoti visi šitie bitai,
visų šių pirmų 5 bitai, atstovauja viską per Z.
Štai kodėl kitą bitų, ar šis bitas, kitas bitas yra vienas, kad pasirinkta atskirti ir "."
Tai taip pat, kodėl, ASCII lentelę, yra 5 simboliai, atskirti didžiąsias raides mažosiomis raidėmis.
Nes jie yra simboliai, papildomai 5 kad iškelia 32 yra tarp jų skirtumas.
[Studentų] Taigi, mes galime tai padaryti, nes ASCII sukurta, kad taip.
Taip. Bet ASCII - skirtumas taip pat gali būti tiek iš šių bitų.
Pavyzdžiui, jei buvo 10000001, ir "a" 11100001 - aš pamiršiu, nesvarbu.
Bet jei jis buvo tai, tada mes galime vis dar naudoja "A" - A.
Tai tik dabar skirtumas tarp A ir "" vis dar šių 2 bitai.
Manau, kad tai parašyta 48. Tai yra 32 + 64? Manau, kad tai?
Ji vis tiek būtų 2 bitai, kiekvieną simbolį, pavyzdžiui, Z ir Z, K ir K,
jie vis dar turi tą patį tiksliai bitų nustatytus išskyrus šių 2 bitai.
Taip ilgai, kaip tai visada teisinga, nepriklausomai nuo to, jei mes naudojame ASCII arba kai kita sistema,
taip tol, kol yra tik skaičius bitai, kad yra skirtingos kiekvieno požymio,
tada veikia puikiai.
Tai tiesiog, kad 32 buvo įsteigta, nes tai pirmasis galbūt galėtume naudoti. >> Cool.
Aš linkęs teikti pirmenybę, tuo atveju, jei jūs dar nematėte, jei blokas yra tik viena linija,
galite atsikratyti Garbanotasis petnešos, kad aš linkę nori tai daryti.
Be to, jūs žinote, kaip mes galime padaryti kažką panašaus s [i] + = 1?
Taip pat galite padaryti s [i] Bitinis IR = 32.
Ir Bitinis ŠS = 32.
Taip pat skaičiuoti mod 2 == 0.
Todėl nepamirškite, kad - Aš ne rašyti bet ne nulinė vertė yra teisinga, ir 0, yra klaidinga.
Taigi, "jei skaičius mod 2 == 0" yra kaip sakydamas "jei nesiskaito mod 2."
Aš tikriausiai tiesiog pasikeitė linijos ir pasakė: "Jei skaičius mod 2
arba 1, dar neturi ir 1 ", todėl, kad aš ne reikia", o ne ".
Bet tai veikia lygiai taip pat.
Ir ką dar aš galiu padaryti?
Jūs galite juos sujungti su trinariu, jei norėjo, bet tada aš tiesiog padaryti ką Mesjė
ir tikriausiai sunkiau skaityti, kad mes ne padaryti, kad.
Kiekvienas turi kitų pasiūlymų?
Yra tai, kad visa problema paprašė? Oh yeah.
Taigi atsikratyti šių tuščiomis eilutėmis, dabar mes spausdinti f% s yra vienas styginių orkestrui,
Mes spausdinti f, s.
Dabar galime paleisti jį. Aš nieko blogo?
Kad tai \ ", aš noriu n.
Gerai. Dabar mes jį paleisti. Tai tikriausiai klykauti į mane.
Strlen yra mieste string.h.
Taigi tai yra Apsukite metalinis garsas malonus dalykas, apie tai jums pasakys, ką jis yra,
vietoj Persijos įlankos bendradarbiavimo tarybos, kuri tiesiog sako: "Ei, jūs pamiršote ką nors, aš ne žinoti, ką jis buvo."
Bet tai pasakys man: "Tu, apima string.h".
Todėl aš ne greitai nieko, todėl nieko nesakau.
Bet mes padarysime jų pavyzdžiu ", thanks 4 Pridėti".
Kad atrodo teisinga. Valio.
Taigi, grįžtant prie jūsų pagrindinis, aš beveik niekada daryti.
Tai neprivaloma. Ir pagrindinis yra tik funkcija, kuriame ji yra neprivaloma.
Jei nenorite grįžti nieko iš pagrindinių, tai daroma prielaida, kad jums skirtas grįžti 0.
Turite klausimų?
Gerai. Taigi, dabar antroji problema.
"Prisiminkite, nuo 2 SAVAITĖ antrojo paskaitą, kad Swapping 2 kintamųjų reikšmes, perduodant
tie 2 kintamieji funkcijos (net jei vadinama swap) nėra tiksliai dirbti, bent jau ne be "rodykles". "
Ir nekreipti dėmesio į nurodymus, kol mes gauti į juos.
Mes norime, kad apsikeitimo 2 kintamuosius, mes ne naudojant funkciją tai padaryti.
Mes vis dar ketinate daryti pagrindinis, kaip ji sako.
Bet naudoti tuos 2 kintamuosius, mes nenori naudoti laikiną kintamąjį.
Yra 2 būdai, kaip tai padaryti.
Jūs galite tai padaryti, naudojant Tradicinis dviejų operatorius.
Taigi, ar kas nors žino tai, kad greitas ir purvinas būdas?
Jis iš tiesų gali imtis yra mąstymo minutę. Jeigu aš turiu
Įvesti problemą, kaip jie prašo. Taigi, jei aš turiu 2 kintamuosius, A, kuri yra tik sveikasis skaičius
kad jie suteikia man, ir suma kintamasis B, kuri yra dar vienas sveikasis skaičius, kad aš.
Taigi, jei aš turiu šias 2 kintamuosius, dabar aš noriu apsikeitimo juos.
Tradicinis, naudojant savo įprastą dvejetainius operatorius, aš turiu galvoje, kaip +, -, ÷.
Ne Bitinis ūkio subjektai, kurie veikia dvejetainių.
Taigi, naudojant, -, +, ÷ s, ir visiems tiems,.
Galime perdeti daro kažką panašaus į a = a + b ir b = a - b = a - b.
Taigi, normalumas patikrinti, ir tada mes pamatysime, kodėl tai veikia.
Tarkime, = 7, b = 3, tada a + b bus 10.
Taigi mes dabar nustatyti = 10, ir tada mes darome, b = a - b.
Taigi, ką mes darome, b = a - b, kuris bus 7 ir b = a - b kartą,
arba = a - b. Kuris ketina būti 10 - 7, kuriame yra 3.
Taigi dabar, teisingai, "a", buvo 7, b (3) buvo, o dabar b yra 7 ir "a" yra 3.
Taigi, kad šios rūšies prasminga; "a" yra iš 2 skaičių derinys.
Šiuo metu, "a" derinys, ir tada mes atimant iš originalo b,
ir tada mes atimant, kas buvo originalas "."
Bet tai neveikia visais numeriais.
Norėdami pamatyti tai, aptarkime sistemą, todėl mes paprastai galvojame kaip 32 bitų sveikųjų skaičių.
Kviečiame dirbti kažką, kad tik kaip 4 bitai.
Tikiuosi sugalvoti gerą pavyzdį dabar.
Taigi, aš žinau, tai bus lengva.
Tarkime, mūsų 2 numeriai yra 1111, ir 1111, todėl mes dvejetainiu dabar.
Faktines po kablelio, jei norite, galvoti apie tai, kad taip, kad a = 15, b = 15.
Ir todėl tikimės, kad, kai mes apsikeitimo juos - jie net turi tuos pačius numerius,
bet aš jį šiuo būdu.
Padarykime juos ne tuos pačius numerius. Darom 1111 ir 0001.
Taigi = 15 ir b = 1.
Po apsikeitimo juos, mes tikimės, kad "a" turi būti 1 ir b bus 15.
Taigi, mūsų pirmas žingsnis yra a = a + b.
Mūsų skaičiai yra tik 4 bitų pločio, todėl "", kuris yra 1111, + b, kuris yra 0001,
ketina baigti yra 10.000, bet turime tik 4 bitai.
Taigi dabar = 0.
Ir dabar mes norime nustatyti, b = a - b - iš tikrųjų, tai vis dar veikia, puikiai.
= a - b - galime pamatyti, jei tai veikia, puikiai.
Taip, tada b = 0 - 1, kuri vis tiek būtų 15, ir tada a = a - b, kuris būtų 1.
Gal tai veikia.
Jaučiu, kaip ten priežastis jis neveikia naudojant reguliariai.
Gerai, kad remiantis prielaida, kad jis neturi dirbti su reguliariais dvejetainių operacijų,
ir aš žiūrėti - aš "Google" norėdami pamatyti, jei tai yra tiesa.
Taigi, mes norime tai padaryti naudojant Bitinis operatorius, ir raktas čia yra XOR.
Taigi, įvedant XOR (^), jei jūs dar nematėte, tai dar.
Tai, vėlgi, Bitinis operatorius, todėl ji veikia tiek bitų, ir it's
Jei turite bitai 0 ir 1, tai bus 1.
Jei turite 1 ir 0 bitai, tai bus 1, turite bitai 0 ir 0, tai bus 0,
ir, jei turite 1 ir 1 bitai, tai bus 0.
Taigi, tai, kaip OR. Jei kuri nors iš bitai yra tiesa, tai 1, bet skirtingai ARBA, jis negali būti abu bitai, kad yra teisinga.
Ar tai būtų 1, XOR tai turėtų būti 0.
Taigi, mes ketiname norite naudoti XOR čia.
Pagalvokite apie tai už minutę, aš ruošiuosi į "Google".
Na, jūs negalite skaityti, kad, aš esu šiuo metu XOR apsikeitimo algoritmo puslapyje.
Tikimės, kad tai paaiškinti, kodėl Negaliu -
Tai yra būtent tai algoritmas, kad mes tiesiog padarė.
Aš vis dar suprasti, kodėl - turiu tik nuskintos blogą pavyzdį,
bet šiuo atveju, kai "a" atsitiko taps 0, po to, kai gauti iki 5 bitų, todėl dabar "a" yra 0,
, kad yra tai, kas vadinama "integer overflow".
Pasak Vikipedijos, "Skirtingai nuo XOR apsikeitimo sandorių, šis variantas reikalauja, kad ji naudoja kai kuriuos metodus
užtikrinti, kad x + y nesukelia sveikojo skaičiaus perpildymo. "
Taigi tai tikrai turi problemų, tai buvo integer overflow, bet aš ką nors blogo.
Nesu tikras. Aš pabandysiu sugalvoti kitą.
[Studentų] Na, yra ne sveikasis skaičius perpildymo, kai bandote įdėti ten
didesnis nei suma, kurią skyrė bitų?
Taip. Mes turime 4 bitai. That - mes turėjome 4 bitai, mes tada pabandykite pridėti 1 jai, kad mes galų gale su 5 bitai.
Tačiau penktoji tiek tik gauna nukirto, yeah.
Jis iš tiesų gali
[Studentų] Ar tai mesti klaidą, ar ši - norėčiau, kad mesti klaidą?
Nr Taigi čia ne klaida. Kai jūs gaunate į surinkimo lygio specialus tiek
kažkur yra nustatyta, kad pasakė, kad buvo perkrautas, bet, C rūšies tiesiog nereikia spręsti, kad.
Jūs iš tikrųjų galite ne kovoti su ja, nebent jūs naudojate specialias surinkimo instrukcijas C
Pagalvokime apie XOR apsikeitimo sandorio.
Ir manau, kad Vikipedijos straipsnis gali taip pat buvo suprantama, kad
Todėl ji taip pat išvedė modulinę aritmetiką, todėl aš manau, aš buvau, teoriškai daro modulinę aritmetiką
, kai pasakiau, kad 0 - 1 yra 15 iš naujo.
Kad gali iš tikrųjų - reguliariai procesorius, kuris daro 0 - 1 = 15.
Kadangi mes galų gale 0, atimti 1, tai tada jis tiesiog apsiaustas aplink 1111.
Taigi šis algoritmas iš tiesų gali dirbti, a + b - b, b - a, tai gali būti baudos.
Tačiau yra keletas perdirbėjai, nedaryk to, ir todėl nebūtų baudos tiems konkretiems.
XOR apsikeitimo dirbs bet kuriame procesoriuje. Gerai.
Idėja yra tai, kad tai turėtų būti tas pats, nors.
Kur mes kažkaip gauti informaciją tiek į 1 kintamųjų naudojant XOR,
ir ištraukite informaciją atskirų kintamųjų.
Taigi ar kas nors turite idėjų / atsakymas?
[Studentų atsakymas, nesuprantamas]
Taigi, tai turėtų veikti, taip pat, XOR yra jungiamas.
Nepriklausomai nuo to, kokia tvarka šie 2 skaičiai atsitikti, kad čia,
šis rezultatas bus tas pats.
Taigi ^ b yra b ^.
Jūs taip pat gali tai parašyta, kaip ^ = b, b ^ = a ^ = b vėl.
Taigi tai yra teisinga, ir suprasti, kodėl tai veikia, manau, bitai.
Naudojant smallish skaičių, tarkim, 11.001 ir 01.100.
Taigi tai yra "a", tai yra b.
Taigi ^ = b.
Mes ketiname būti "a" = XOR šių 2 dalykų.
Taigi 1 ^ 0 1 1 ^ 1 yra 0 0 ^ 1 yra 1 ir 0 ^ 0 yra 0; 1 ^ 0 yra 1.
Taip "," jei peržvelgsite dešimtainis skaičius, tai bus
esate nesiruošia pamatyti daug tarp originalo "ir" The New santykių ","
bet žiūri bitai, "a" dabar kaip informacijos akių
pradinei "" ir originalaus b.
Taigi, jei mes b ^, matome, kad mes galų gale originalas "."
Ir jei mes originalus "a" ^ Naujoji "," mes matome, mes galų gale pradinio b.
Taip (^ b) ^ b = originalas "."
Ir (a ^ b) ^ = originalą b.
Yra dar vienas būdas matydamas tai pati nieko XOR visada 0.
Taigi 1101 ^ 1101, visi bitai bus tas pats.
Taigi ten niekada nebus atvejis, kur 1 yra 0, o kita yra 1.
Taigi tai yra 0000.
Tas pats. (A ^ b) ^ b yra tarsi ^ (b ^ b).
(B ^ b) bus 0; ^ 0, tai tiesiog bus "," nes visi bitai yra 0.
Taigi, tik tie, kurie ketinate būti kur "a" iš pradžių buvo 1 - tie.
Ir tą pačią idėją čia, aš esu gana įsitikinęs, jis taip pat jungiamas.
Taip. Aš pasakyti prieš tai jis buvo jungiamas.
^ "," Ir tai asociatyvus, todėl dabar (b ^) ^.
Ir mes galime padaryti b ^ (^).
Ir tokiu būdu vėlgi, mes gauname originalų b.
Taigi, "a" dabar kartu su "A" ir b.
Naudodamiesi mūsų naują Combo "mes sakome, b = Combo" "^ originalus b, gauname originalas". "
Ir dabar = Combo "" ^ naujas b, kuris buvo originalus - ar kuris dabar yra tai, kas buvo "a" arba b.
Kad šiuo atveju čia. Tai metai b = b.
Taigi dabar viskas sugrįžta pavertė tvarka.
Jei mes iš tikrųjų pažvelgė į bitus, b = a ^ b ketina Xor Šie 2,
ir atsakymas bus, tada a = a ^ b XORing Šie 2 ir atsakymas yra toks.
Turite klausimų? Gerai. Taigi, naujausia yra šiek tiek žymiai sunkiau.
[Studentų] Manau, kad jis turi apie tai klausimą. >> O, atsiprašau.
[Studentų] Kas iš tikrųjų greičiau? Jei jūs naudojate šią XOR, ar tai jei paskelbti naują kintamąjį?
Taigi, kas iš tikrųjų yra greičiau, skelbiantis naują kintamąjį arba naudojant XOR apsikeitimo?
Atsakymas yra labai tikėtina, kad laikinas kintamasis.
Ir tai yra, nes kai jis parengė žemyn - taip surinkimo lygiu,
nėra tokio dalyko kaip lokalūs kintamieji arba bet kokių laikinų kintamųjų skaičius arba bet šios medžiagos.
Jie tiesiog patinka - nėra atminties, ir ten yra registrai.
Registrai yra, kur viskas aktyviai vyksta.
Jums nereikia pridėti 2 dalykus atmintyje; norite pridėti 2 dalykų registruose.
Ir jums atnešti daiktus iš atminties į registrus tada įtraukite juos,
ir tada jūs galite įdėti juos atgal į atmintį, bet visi veiksmai vyksta registruose.
Taigi, kai jūs naudojate laikino kintamojo požiūrį, paprastai kas atsitinka,
šie 2 numeriai jau registruose.
Ir tada nuo to momento, kai jūs pavertė juos,
jis bus tiesiog pradėti naudoti kitą registrą.
Visur, kur buvo naudojant b, tai bus tiesiog naudoti registrą, kuris jau buvo Saugojimas "."
Taip, kad nereikia nieko daryti, iš tikrųjų daryti apsikeitimo sandorio. Taip?
[Studentų] Tačiau ji taip pat užima daugiau atminties, tiesa?
Tai užtruks tik daugiau atminties, jei ji reikia laikyti, kad laikiną kintamąjį.
Patinka, jei vėliau vėl naudoti tą laikiną kintamąjį kažkur,
tada - ar jums priskirti kažką šio laikino kintamojo.
Taigi, jei bet laikas "," b temp turi skirtingas vertybes ar kažką,
tada jis ketina turėti skirtingas vietas atminties, bet tai tiesa, kad
Yra daug vietos kintamieji, kurie egzistuoja tik registruose.
Tokiu atveju, jis niekada įdėti į atmintį, ir todėl jūs niekada išsekimo atminties.
Gerai. Paskutinis klausimas yra šiek tiek daugiau.
Todėl čia, šiame CS50 prietaiso, yra žodynas.
Ir dėl šios priežasties yra todėl, kad [? B66] rašybos tikrintuvas, kur jums bus raštu
naudojant maišos lenteles arba bando ar kai duomenų struktūra.
Jūs ketinate rašyti rašybos tikrintuvą, ir jūs ketinate naudoti šį žodyną padaryti, kad.
Tačiau šią problemą, mes tik ketina ieškoti pamatyti, jei vienas žodis yra žodyne.
Taigi vietoj saugoti visą žodyną, tam tikru duomenų struktūros
, o paskui žiūrėdami per visą dokumentą, ar kas manimi su klaidomis,
mes tiesiog norime rasti 1 žodį. Taigi, mes galime tiesiog nuskaityti per visą žodyną
ir jei mes niekada rasti visą žodyną žodį, tada jis buvo ne ten.
Jei mes nuskaityti per visą žodyną ir matau žodį, tada mes geri, mes ją radau.
Čia tik sakoma, kad mes norime pradėti žiūri C failų tvarkymo funkcijos,
nes mes norime skaityti žodyną,
bet duosiu užuominą, kurios funkcijos, jums reikia galvoti apie.
Aš parašiau jiems erdvėse.
Taigi, pagrindiniai iš jų, jūs norėsite pažvelgti į yra f atidarant ir, neišvengiamai, f uždarytas,
kuris vyks jūsų programos pabaigoje, ir f nuskaitymo f.
Taip pat galite naudoti f skaityti, bet jūs tikriausiai nenorite
, nes tai - jūs neturite galų gale, kuriems reikia, kad.
F nuskaitymo f tai, ką jūs ketinate naudoti nuskaityti per žodyną.
Ir tokiu būdu jūs neturite reikia koduoti sprendimą, tiesiog pabandykite ir kaip pseudo-kodas savo kelią
buvo priimtas sprendimas, ir tada mes aptarsime.
Ir iš tiesų, nes aš jau davė jums tai, jei jūs einate į bet kokią terminalo arba savo prietaiso lukštais
Norėčiau aš paprastai, jei jūs dar nematėte dar, aš ne žinoti, jei tu klasėje,
bet vyras, todėl vyras puslapių yra labai naudinga, žiūri beveik bet kokią funkciją.
Taigi aš galiu padaryti, patinka, MAN F, nuskaitymo f.
Šiuo metu tai yra informacija apie nuskaitymo funkcijų f šeima.
Aš taip pat galėtų padaryti MAN F, atviras, ir, kad jums duoti man, kad detales.
Todėl, jei žinote kokią funkciją jūs naudojate, ar jūs skaitote kodą
ir pamatysite tam tikrą funkciją, ir jūs, pavyzdžiui, "Ką tai padaryti?"
Tiesiog žmogus, kuris funkcijos pavadinimas.
Yra keista pavyzdžių pora, kur jums gali tekti pasakyti
patinka. kad funkcija pavadinimas arba 3, kad vyras funkcijos pavadinimas, 2 vyras
, bet jūs tik turite padaryti, kad jei vyras funkcijos pavadinimas neatsitinka dirbti pirmą kartą.
[Studentų] Taigi, aš skaityti puslapį man atidaryti, bet aš vis dar nežino, kaip jį naudoti ir programą.
Gerai. Žinyno puslapių, yra daug mažiau nei naudinga.
Jie yra labiau naudinga, jei jūs jau žinote, ką jie daro
ir tada jums tiesiog reikia prisiminti, argumentų ar kažkas tvarką.
Arba jie gali suteikti jums bendrą apžvalgą, tačiau kai kurie iš jų yra labai didele.
Nuskaityti, pavyzdžiui, f f, taip pat. Jis suteikia jums informaciją apie visas šias funkcijas,
ir 1 tuščia eilutė žemyn čia atsitinka sakyti, "F nuskaitymo f skaito iš styginių ar upelio."
Bet f atidaryti. Taigi, kaip mes naudojame "F" Atidaryti?
Programos idėja, kuri turi padaryti failą I / O, kad
pirmiausia turite atidaryti failą, kurį norite daryti tai, ko ir neišvengiamai
skaityti dalykų iš to failo ir daryti stuff su jais.
F atidaryti yra, ką mes naudojame atidaryti failą.
Dalykas, mes gauname atgal, todėl mes norime, kas tai per failas atidaryti, tai suteikia mums
čia ji sako "/ user / share / dict / žodžiai."
Tai failą, kurį norite atidaryti, ir mes norime, kad jį atidarytumėte
mes turime aiškiai nurodyti, ar mes norime, kad ją atidaryti, skaityti ar, jei norime, kad ją atidaryti rašyti.
Yra kombinacijų ir kita pora, bet mes norime atidaryti šį svarstymą.
Mes norime, kad skaityti iš failo.
Taigi, ką šis sugrįžimas? Ji grąžina failo žvaigždutes (*),
ir aš tiesiog parodyti viską kintamojo f *,
Vėlgi, tai rodyklė, bet mes nenorime kovoti su rodyklės.
Jūs galite galvoti kaip f, f kintamasis, kurį ketinate naudoti atstovauti failą.
Taigi, jei norite skaityti iš failo, jūs perskaitėte iš f.
Jei norite uždaryti failą, jūs uždarote f.
Taigi, programos pabaigoje, kai mes neišvengiamai norite uždaryti failą, ką mes turėtume daryti?
Mes norime uždaryti f.
Taigi dabar paskutinį failą funkcija, kad mes ketiname norite naudoti tai nuskaitymo F, f nuskaitymo f.
Ir kas, kad tai yra jis nuskaito per ieško modelis, kuris atitiktų failo.
Žiūri žinyno puslapyje čia mes matome, LC f nuskaitymo f, ignoruoti sugrįžimo vertę dabar.
Pirmasis argumentas yra failas * srautas, todėl mes ketiname nori perduoti tai pirmasis argumentas yra f.
Mes nuskaitymo per f.
Antrasis argumentas yra format string.
Aš duosiu tau format string dabar.
Manau, kad mes atsitiktų sakyti, 127s \ n, tai nereikalingas daug.
Idėja, ką tai format string, galite galvoti apie nuskaitymo f spausdinimo f priešingybę.
Taigi spausdinimo f, spausdinimo f, mes taip pat naudoti tokio formato parametras,
bet spausdinimo f tai, ką mes darome, yra - pažvelkime ekvivalentas.
Taigi spausdinti f, ir ten iš tikrųjų taip pat F Išspausdinkite f, kur pirmasis argumentas bus f.
Kai spausdinate f, mes galime pasakyti kažką panašaus, "spausdinimo 127s \ n" ir tada, jei praeina tam tikrą eilutę,
ji ketina spausdinti šią eilutę ir tada naują eilutę.
127 reiškia, aš esu gana įsitikinęs,, bet aš niekada susivaldyti jai,
Jums net nereikia sakyti, '127 'spausdinimo f,
bet ką tai reiškia, spausdinti pirmuosius 127 simbolių.
Taigi, aš esu gana įsitikinęs, kad toks atvejis. Galite "Google" už tai.
Bet kito aš beveik teigiamas, tai reiškia, kad.
Taigi tai yra spausdinti pirmuosius 127 simbolių, po to naujoje eilutėje.
F nuskaitymo f dabar, o ne žiūri kintamojo ir spausdinimą,
jis ketina ieškoti tam tikru eilutę, ir laikyti į kintamojo modelis.
Tegul iš tikrųjų naudoti nuskaitymo f kitame pavyzdyje.
Tarkime, mes turėjome šiek tiek int, kai x = 4,
ir mes norėjome sukurti eilutę - norėjo sukurti eilutę
kad buvo, pavyzdžiui, tai bus daug vėliau,
kažkas, kad tiesiog kaip 4.jpg.
Todėl tai gali būti programa, kur jūs turite suma skaitiklis,
Apibendrinant galima atremti i ir norite išsaugoti vaizdų krūva.
Taigi jūs norite išsaugoti i.jpg, kur i yra kai kurie iš jūsų kilpa iteracijos.
Taigi, kaip mes šį tą JPEG eilutę?
Jei norėjo spausdinti 4.jpg, mes galime tik pasakyti, spausdinimo f,% d.jpg,
ir tada jis būtų spausdinti tos JPEG.
Bet, jei norime išsaugoti eilutės 4.jpg, mes naudojame nuskaitymo f.
Taigi, eilutė s - mes iš tikrųjų Negaliu ženklų, char s, geriau patys eikime 100.
Taigi aš tiesiog deklaravo apie 100 simbolių masyvas,
ir tai, ką mes neišvengiamai bus saugoti, kad JPEG.
Taigi, mes ketiname naudoti nuskaitymo f, ir formatas, kaip mes sakytume% d.jpg
siekiant spausdinti 4.jpg, šis formatas bus% d.jpg.
Taigi, formatas yra% d.jpg, ką mes norime pakeisti% d yra x,
ir dabar mes turime kažkur laikyti, kad eilutę.
Ir kur mes einame laikyti šią eilutę masyvo.
Taigi po šio kodo, s linijos, jei mes spausdinti f% s kintamojo s,
ji ketina spausdinti 4.jpg.
Toks f nuskaitymo f, kaip skenavimo f tas pats, išskyrus tuos atvejus, dabar jis ieško per šį failą
už tai, ką laikyti s.
Štai ką paskutinis argumentas bus.
Mes norime parduotuvė - "Scan F šeimos funkcijas nuskaito tiek pagal formatu, kaip bandė žemiau.
Jei saugomi toje vietoje taškų galite grįžti - "
Ne, mes gali būti gera. Leisk pagalvoti per sekundę.
Taigi nuskaitymo f nėra - kas gi yra funkcija, kuri tai daro?
Taigi nuskaitymo f nesiruošia imtis sveikasis skaičius ir daryti dot jpg.
Jis ketina [murma].
Išsaugoti int kintamasis eilutės int C
Kas tai yra kintamasis, arba, kas yra ši funkcija vadinama?
Taip. That - taip. Taigi, kas man buvo apibrėžti Jums anksčiau buvo s Spausdinti f,
kuris - kad daro daug daugiau prasmės, kodėl gi sakiau, kad ji buvo labiau panaši į spausdinimo f.
Skenavimas f rūšies kaip spausdinimo f, bet s Spausdinti f nuskaityti ją
ir pakeisti kintamuosius ir laikyti jį į eilutę.
Vietoj to, spausdinimo, ji saugo į eilutę.
Taigi, ignoruoti, kad visiškai. Jūs vis dar galite galvoti apie tokiu formatu specyfikator, kaip pavyzdžiui, spausdinimo f.
Taigi dabar, jei mes norėjome padaryti 4.jpg dalykas, mes norėtume padaryti s Spausdinti f, x tai.
Taigi, kas nuskaitymo f daro tai, kas buvo jūsų klausimas bus?
[Studentų] Aš tiesiog nežino, ką mes bandome padaryti čia
su tuo JPEG. Ar galite paaiškinti, kad 1 daugiau laiko?
Taigi tai buvo - tai mažiau reikiamą f nuskaitymo f dabar; tikiuosi, jis bus susieti atgal kažkoks būdas.
Tačiau tai, ką aš iš pradžių ketino parodyti - iš tikrųjų tai yra tiesiogiai susiję su šių [? F5]
Jūs ketinate naudoti s Spausdinti f, kur, sako, mes turime 100 vaizdus,
norite skaityti įvaizdį 1.jpg, 2.jpg, 3.jpg.
Taigi, siekiant padaryti, kad, jums reikia "F" Atidaryti ir tada jūs turite pereiti į eilutę, kurią norite atidaryti.
Taigi, mes norime atidaryti 1.jpg; siekiant sukurti eilutę, kuri yra 1.jpg
mes f% s Spausdinti d.jpg--mes ne padaryti int i = 0.
i <40, i + +.
Taigi s spausdinimo f% d.jpg i.
Taigi po šios linijos, dabar kintamasis arba masyvas vyksta 1.jpg.
Arba, 0.jpg 1.jpg, 2.jpg. Ir taip mes galima atidaryti, savo ruožtu, kiekvienas skaityti įvaizdį.
Taigi tai, ką s Spausdinti f nėra. Ar matote, ką s Spausdinti f dabar daro?
[Studentų] Gerai, todėl atsižvelgiant - jis sukuria eilutę, something.jpg ir tada išsaugo jį.
Taip. Jis sukuria - tai dar vienas format string, kaip skenavimo f ir spausdinimo f,
kur ji įterpia visus kintamuosius į antrąjį argumentą, gali būti, o ne i.
Galbūt - Aš turiu galvoje, kad toks atvejis. Tačiau nepriklausomai nuo argumentų, kad yra.
Ji ketina formato eilutę įterpti visus kintamuosius į
ir tada laikyti į mūsų buferio; mes vadiname, kad buferis, tai kur mes eilutę saugoti.
Taigi, mes saugome teisingai suformatuota eilutė, viduje s,% d buvo pakeistas 4.
[Studentų] Taigi, jei mes tai padarė, kintamos f tik ketina būti grąžinta?
Taip. Taigi, mes turime uždaryti pirmąją f prieš tai darote.
Bet - ir tada taip pat, jei ten buvo ne f atverti čia, tada mes būtume reikia pasakyti -
Taip. Bet ji atidaryti šimtą įvairius failus.
[Studentų] Bet mes norėtume ne būtų galima atidaryti ar - gerai.
Gerai. Taigi nuskaitymo f, f nuskaitymo f, tipo tą pačią idėją,
bet vietoj, o ne laikyti jį į eilutę, tai daugiau kaip esate dabar
dilgčiojimą ir modelio atitikimo prieš šią eilutę vyksta per ir saugoti rezultatus į kintamuosius.
Apdoroti per kažką panašaus 4.jpg ir laikyti sveikuoju skaičiumi 4 į sumą int x, galite naudoti nuskaitymo f.
Tai, ką mes galime naudoti nuskaitymo f.
F nuskaitymo f ketinate daryti, kad į komandų eilutę.
Aš iš tikrųjų gana tikras, kad tai ką CS50 biblioteka.
Taigi, kai jūs sakote, "gauti int" tai nuskaitymo f per nuskaitymo f yra būdas jums gauti vartotojo įvesties.
F nuskaitymo f ketinate daryti tą patį, bet naudojant failą, kurį norite nuskaityti per.
Taigi čia, mes nuskaitymo per šį failą.
Modelis, mes stengiamės, kad atitiktų, yra tam tikra seka, kad yra 127 simbolių ilgio
po naują eilutę
Taigi, aš esu gana įsitikinęs, mes galime net tiesiog pasakyti "rungtynės s", nes žodyne
atsitikti, kad, mes garantuojame, ne žodis, kad ilgai,
ir taip pat manau, f f skenavimas, nustos naują eilutę, nesvarbu koks.
Bet mes atsiųsime naują eilutę rungtynių, ir -
[Studentų] Jei mes neįtraukė į naują eilutę, nebūtų jam žodžio dalis?
- Kiekvienas - žiūri į žodyną
Taigi žodyne, tai visų mūsų žodžių.
Kiekvienas iš jų yra iš naujos eilutės.
Nuskaitymo f pasiimti šį žodį.
Jei mes neturime įtraukti naują eilutę, tai, galimas dalykas, kad kitas nuskaitymo f bus tik skaityti naują eilutę.
Bet taip pat naujos linijos tada tiesiog ignoruoti naują eilutę.
Bet mes niekada žodžio dalį, nes mes visada skaityti daugiau į naują eilutę, nesvarbu, ką.
[Studentų] Bet kas, jei ieškote žodžio "cissa", kaip cissa.
Ji rasti, kad ir sako, kad rungtynės?
Taigi čia mes - ji skaityti - iš tikrųjų tai yra gera vieta.
Mes niekada naudojant esamą - žodis, mes ieškome yra pirmasis komandinės eilutės argumentas.
Taigi, eilutė, žodis = argv 1.
Taigi eilutė, mes ieškome argv 1.
Mes ne ieško ne visi mūsų nuskaitymo f žodį.
Ką mes darome su nuskaitymo f gauti kiekvieną žodį žodyne,
ir tada, kai mes turime šį žodį mes ketiname naudoti strcmp juos palyginti.
Mes ketiname palyginkite mūsų žodį ir tai, ką mes tik skaityti.
Todėl neišvengiamai, mes ketiname baigti daryti nuskaitymo fs krūva
tol, kol jis tiesiog taip atsitinka, kad nuskaitymo f grįš -
jis grįš, tol, kol ji atitiko naują žodį,
ir jis grįš ką nors kita, kuo greičiau, nes ji neatitiko žodį.
Mes skaitome per visą žodyną, saugoti kiekvieną eilutę kiekvienas žodis į kintamojo s.
Tada mes palyginti žodį s, ir jei palyginimas == 0
strcmp atsitinka, kad 0, jei rungtynės buvo.
Taigi, jei ji buvo 0, tada mes galime spausdinti f, suderinta,
ar žodis yra žodyne, arba ką norite spausdinti f.
O tada - mes nenori f uždaryti vėl ir vėl.
Tai koks dalykas, mes norime padaryti, ir mes ne tik ieško žodžio žodyne.
Taigi, mes galime padaryti, kad, jei mes norėjome ieškoti savo modelio, cissa, kaip jums sakiau,
jei norime ieškoti to modelio, tada jis žlugs, tuo atveju,
nes tai ne tikrųjų žodis, bet vienas iš žodžių žodyne atsitinka, kad jame.
Taigi būtų suderinti šį žodį, bet šis žodžio poaibis yra ne pats žodis.
Bet tai dar ne tai, kaip mes jį naudoti, mes skaityti kiekvieno žodžio
ir tada lyginant žodis, kurį mes su šio žodžio.
Todėl mes visada lyginant visas žodžius.
Galiu siųsti vėliau galutinai suderintas sprendimus.
Tai tipo beveik teisingą atsakymą, manau.
[Studentų komentaras, neįskaitomai]
Oh, aš atsikratyti, kad anksčiau? Char-ai, aš manau, mes sakėme, 127 - aš pamiršti, ką didžiausias yra.
Mes tiesiog padaryti 128; todėl dabar ai yra pakankamai ilgas.
Mums nereikia nieko spausdinti.
Mes taip pat nori turėti užmerkti failą, ir kad turėtų būti apie teisingą atsakymą.
CS50.TV