[Powered by Google Translate] Sadaļā Problēma Set 2: Hacker Edition
Rob Bowden, Hārvarda Universitāte
Tas ir CS50. CS50.TV
Tātad, es esmu Rob. Es esmu vecākais Kirkland. Šis ir mans trešais gads TFing CS50.
Tā ir pirmā reize, kad mēs esam mainās no tradicionālā lekciju stila sadaļā,
kur mēs tikko veida pārbaudes, kas notika lekciju un tad jūs puiši uzdot jautājumus,
Tagad ir daudz vairāk problēmu bāzes, kur mēs izmantojam Spaces, un -
Ak, tā ideja ir doties uz šo saiti es nosūtīts jums un tad jums būs manā telpā.
Vai kāds nav klēpjdators? Labi.
Tāpēc mēs gribam būt, izmantojot šo, un mēs esam gatavojas darīt problēmas dzīvo sadaļā
un apspriest tos un norādītas, ko es daru nepareizi
un es varētu uzvilkt kādu no jūsu kodu, un es varētu apspriest savas idejas.
Tātad ir kāds bija grūtības?
Jūs varat tērzēt uz pusi, es nezinu, vai mums būs iemesls par to.
Tagad, tāpat kā iepriekšējā supersection, ja jūs šajā klasē, jūs zināt, kas tas ir par.
Par visiem P komplekti tur būs šīs sadaļas.
Tā 2 P-komplekts, specifikāciju, es domāju, jūs redzēju to 1 P-komplektu jau.
Bet mēs varam apskatīt P 2 komplekta par to, ko mēs ejam, lai iet pa šodien.
Un jūs redzēsiet sadaļu jautājumus.
Tātad šī būs visu P komplektu, tur būs sadaļa par jautājumiem.
Līdz šim mēs esam teica: "Uzskatu šo iespēju praktizēt."
Jums netiks lūgts iesniegt šo programmu.
Ideja ir tāda, ka tie ir paredzēts, lai veida palīdzēs jums sākās ar problēmu kopumu.
Es domāju par Hacker izdevumā, daudzi no viņiem ir vajadzētu būt tikai jaunas, interesantas lietas, lai uzzinātu.
Tie nedrīkst būt tieši piemērojami problēmu kopumu.
Un šobrīd mēs neesam kam jūs tos iesniegt, bet teorētiski,
lai vēlāk problēmu kopu, jūs varētu tos iesniegt, un tādējādi jūs varat nākt uz sadaļu
vai skatīties sadaļu, lai saņemtu atbildes, vai arī jūs varat tikai iegūt viņus par savu
ja jums nav justies kā bauda manu klātbūtni.
Tātad - es domāju, ka tas ir pirmais.
Oh. Tāpat saskaņā ar šiem jautājumiem sadaļās mēs arī esam jums uzdot jautājumus par šorti.
Tāpēc es domāju, teorētiski, jūs vajadzēja skatīties šos pirms došanās uz sadaļu,
bet tas ir labi, ja jums nav, mēs iet pār viņiem vienalga.
Lai mēs varētu sākt ar šo: "Kā kamēr cilpa atšķiras no do-kamēr cilpa?
Kad ir pēdējais sevišķi noderīgs? "
Tātad kāds ir jebkurš -?
[Studentu] do-kamēr cilpa būs vienmēr izpildīt vismaz vienu reizi.
Jā. Tāpēc, ka ir atšķirība. Kamēr cilpa - I'll vienkārši darīt to šeit - kamēr cilpa, mums ir stāvoklī
tieši šeit, bet do-kamēr, jums nav nosacījums kamēr mēs noteikti šeit.
Un tā, kad jūsu programma ir izpildes, un tas izpaužas kamēr cilpa,
tas uzreiz pārbauda, ​​vai šis nosacījums ir patiess.
Ja šis nosacījums nav taisnība, tas būs tikai izlaist cilpa pilnībā.
Do-kamēr cilpa, jo programma ir izpildes, tā kļūst par "darīt."
Nekas nenotiek šajā brīdī, tikai turpina izpildes.
Tad, kad tas hits ", bet," ja nosacījums ir patiess, tas būs cilpu atpakaļ un darīt to vēlreiz
un atkal un atkal, līdz stāvoklis nav taisnība, un tad tikai krītas.
Tātad, starpība ir, ka tas var izlaist jau no paša sākuma.
Tas vienmēr izpilda vienreiz un pēc tam var izpildīt vairākas reizes, ja nosacījums joprojām ir taisnība.
Tātad, kamēr cilpa būs tikai darīt to vienu reizi, vai arī - kamēr cilpa - mums nav nepieciešams to darīt visu,
jo tiklīdz mēs uz to, ja nosacījums ir aplams, mēs vienkārši izlaist tiesības pār to.
Tā do-kamēr cilpa, mēs izpildīt to vienu reizi, vienmēr.
Tad, kad mēs ar nosacījumu, mēs pārbaudām, vai tas ir patiess vai nepatiess.
Ja tā ir taisnība, mēs darīsim to vēlreiz, ja tā ir nepatiesa, mēs vienkārši turpināt iet.
Tātad, ja ir pēdējais sevišķi noderīgs?
Tāpēc es varu teikt, ka kopumā par 4 gadiem, 3 gadi, neatkarīgi,
ka es esmu programmēšana, man ir izmantoti šo, piemēram, zem 10 reizes.
Un, iespējams, 5 no tiem ir CS50 kad mēs ieviešot do-kamēr cilpas.
Tātad, ja jūs izmanto do-kamēr cilpas?
Ja ir - jā!
[Studentu] Ja jūs mēģināt iegūt lietotāja ievadi, vai kaut ko vēlaties pārbaudīt -
Yeah. Tā do-kamēr cilpas, lietotājs ievade ir liels vienu.
Tieši tāpēc par pirmajiem pāris problēmu kopas, kad jūs vēlaties, lai jautāt lietotājam, piemēram,
"Dodiet man virkni," jūs nevarat turpināt, līdz jums, ka virkni.
Un tā tu, obligāti, ir nepieciešams lūgt stīgu vismaz vienu reizi.
Bet tad, ja viņi atbildētu kaut ko sliktu, tad jums nepieciešams, lai cilpa atpakaļ un atkal.
Bet, izņemot lietotāja ievadi, tas ir ļoti reti, ka man rodas lietu
kur es gribu cilpa "vismaz vienreiz", bet, iespējams, vairāk.
Jautājumi vai -? Vai kāds izmanto do-kamēr cilpa jebkur citur?
Labi. Tātad nākamais ir, "Ko nedeklarētu identifikators
Parasti norāda, ja izvadīt ar šķindēt? "
Tātad, kāda veida koda es varētu uzrakstīt, lai iegūtu "nedeklarētu identifikators?"
[Studentu], ka x = 2?
Tātad mēs varam tikai mēģināt to šeit, x = 2.
Mēs rādīsim šo - Ak, man nav uz tā. Tātad šeit mēs - visas tiesības.
"Izmantošana nedeklarētu identifikators x."
Tā ka ir nedeklarētu identifikators, mainīga.
Tas bieži zvana mainīgu identifikatoru.
Tātad tas varētu nezināt, tas ir tiešām mainīgs, tas nezina, kas tas ir.
Tātad, tas ir identifikators.
Tātad, kāpēc ir tā nedeklarētu? Yeah.
Tātad, lai būtu skaidrs par terminoloģiju, deklarācija ir mainīgs
ir tad, kad jūs sakāt "int x" vai "stīgu Y," kāds.
Inicializācijas mainīgā, vai mainīgā piešķiršana,
ir, kad tu saki "x = 2."
Tātad, mēs varam izdarīt šos atsevišķos posmos, int x, x = 2, un līdz - mēs varam būt ķekars sīkumi šeit -
bet līdz šī līnija notiek, x ir vēl neinicializēts, bet tas ir pasludināts.
Un tā mēs, protams, var darīt to 1 līnijas, un tagad mēs esam atzīta un inicializēšana.
Jautājumi?
Un visbeidzot, "Kāpēc ir Cēzaru šifra nav ļoti droša?"
Tātad, pirmkārt, vai kāds grib pateikt to, ko Cēzars šifra ir?
[Studentu] Cēzars šifra tieši ir tas, ka jums karte, jūs maiņās katru burtu,
noteiktu skaitu burtu iet pāri, un pārvietot atpakaļ pāri, un tas nav ļoti droša, jo
tur tikai 26 iespējamie varianti, un jums vienkārši ir izmēģināt katru 1 no tiem, līdz jūs saņemsiet.
Oh. Tātad, es atkārtoju?
Caesar Cipher, it's - es domāju, jums būs darīšana ar to uz problēmām, kas jums -
vai es domāju standarta izdevums problēmu kopumu, kas nav par hakeru izdevuma.
Tā par standarta izdevuma uz problēmu kopumu, jūs saņemsiet ziņu, piemēram, "Hello, World"
un jums ir arī vairāki, piemēram, 6, un jūs lietojat šo ziņu, un katra individuālo raksturu,
jūs pagriezt par 6 pozīcijām alfabēta.
Tātad "h", kas sveiki kļūtu h-i-j-k-l-m-N.
Tātad pirmais burts būtu n. Mēs darīt to pašu ar e.
Ja mums ir, piemēram, z vai kaut ko, tad mēs wrap atpakaļ ap "."
Bet katrs raksturs izpaužas iestatīti 6 simboli vēlāk alfabētu, un tas nav ļoti droša
jo tur ir tikai 26 iespējas, cik daudz veidi, jūs varētu pabeigt vienu burtu.
Tātad jūs varat vienkārši izmēģināt visus 26 no tām un, iespējams, pietiekami ilgu ziņu,
tikai 1 no iespējamajiem 26 lietām būs salasāms,
un salasāmiem viens būs sākotnējais ziņojums.
Tāpēc tas nav ļoti labs veids, šifrējot neko.
Saistīti ar šīm šorti, "Kas ir funkcija?"
Tātad, kas ir funkcija? Jā.
[Studentu] Tas ir tāpat kā ar atsevišķu gabals kodu, ka jūs varat zvanīt, lai iet cauri un pēc tam saņemt atgriezto vērtību neatkarīgi.
Yeah. Tāpēc es ņemšu to atbildētu, arī atbildot uz nākamo - vai atkārtot, arī vienkārši atbildot nākamo.
Jūs varat izmantot funkcijas, nevis tikai kopēšanu un ielīmēšanu kodu atkal un atkal.
Just veikt šo kodu, ieliec fuction, un tad jūs varētu tikai izsauktu funkciju
kur jums ir kopējot un ielīmējot.
Tāpēc funkcijas ir noderīgas.
Tāpēc tagad mēs darīsim aktuālās problēmas.
Pirmais. Tāpēc pirmā doma ir, kad iet to stīgu, un neatkarīgi no -
vai tas saka visiem mazajiem? Tas nav teikt, visiem mazajiem.
Tāpēc ziņa var būt jebkas, un - ak nē. Tā dara.
"Vienkāršības, jūs varat pieņemt, ka lietotājs būs tikai ievadi mazos burtus un atstarpes."
Tātad mēs nodot to ziņojumu ar tikai mazajiem burtiem, un tad mēs pārmaiņus
starp kapitālu un mazo - mēs mainām virkne būt kapitāla un mazos, pārmaiņus.
Tātad, pirms mēs jums otrais pat nirt problēmu,
kas ir pirmā lieta, kas mums jādara?
Ak, ko gan es vienkārši noklikšķiniet uz? Ak, es tikai noklikšķinājis uz e-pastu šeit.
Tātad, pirmā lieta, kas mums jādara - es esmu meklē nepareizu vienu?
Vai šī daļa no šo vienu?
Nē, tie joprojām ir tur, lai gan.
Labi, vēl šeit.
Tagad mēs nevaram uzņemties -? Jā. Šeit mēs nevaram pieņemt, ka tas ir tikai mazos un telpas.
Tāpēc tagad mums ir tikt galā ar to, ka vēstules var būt neatkarīgi no mums vēlas tos.
Un tā pirmā lieta, ko mēs vēlamies darīt, ir tikai iegūt ziņu.
Mums ir nepieciešams, lai iegūtu virkni, String s = GetString, labi.
Tagad šī problēma ir pāris veidus, kā darīt to.
Taču mēs vēlamies izmantot Bitu līmeņa operatoriem šeit.
Vai ir cilvēki, kuri vai nu nebija pie supersection,
vai kaut ko, un nezinu, ko Bitu līmeņa operatoriem?
Vai to, kā tie ir saistīti ar ASCII kādā veidā?
[Studentu] man nebija pie supersection, bet es zinu, ko Bitu līmeņa operatoriem.
Labi. Tātad, tad man nav iet pār tiem pamatiem, bet es paskaidrošu
ko mēs esam gatavojas vēlaties izmantot šeit.
Tātad '': Binary pārstāvniecība kapitāla A, skaits ir 65.
Es esmu tikai gatavojas apskatīt - 41 būs 01.000.001.
Lai būtu 65 decimālais, tāpēc šī ir binārs atveidojums no rakstzīmju kapitāla A.
Tagad, bināro pārstāvību rakstura mazo ""
būs tas pats, gandrīz. Ir tā, ka - 6, jā. Tas ir labi.
Tātad binārā kapitāls, binārā mazos "."
Tāpēc ievērosiet, ka atšķirība starp un "" ir tas vienu bitu.
Un tas notiek, ir 32 bitu, mazliet pārstāv numuru 32.
Un tas ir pamatoti, jo ir 65, "" ir 97.
To starpība ir 32.
Tātad tagad mēs zinām, mēs varam pārvērst no A līdz "A", ņemot
un Bitu līmeņa ORing to, ar - kas izskatās kā pēc 1.
Tas ir Bitu līmeņa VAI, ar 00100000, un kas būs dod mums "."
Un mēs varam iegūt no "a" līdz ar Bitu līmeņa anding
ar 11, 0 šajā vietā, 11111.
Tātad tas būs pēc tam sniedz mums tieši to, ko "" bija, bet atcelt šo individuālo mazliet,
tāpēc mums būs 01000001, es nezinu, ja es skaitot labi.
Bet šis Bitu līmeņa ORing paņēmiens, kā iegūt no kapitāla uz mazo
un Bitu līmeņa anding lai saņemtu no mazie kapitālam nav ekskluzīvs A.
Visi burti, K vs K, Z vs Z,
visi no tiem ir tikai gatavojas atšķirties ar šo vienu bitu.
Un lai jūs varētu izmantot, lai mainītu no jebkura mazo burtu uz jebkuru lielo burtu un vice versa.
Labi. Tik vienkāršs veids, kā iegūt no šī - tā vietā, lai
izrakstīt kāds 1011111 ir - viegls veids, kā pārstāvēt šo numuru, un tas nav viens
ka es devos pāri, kas supersection, bet Tilde (~) ir vēl Bitu līmeņa uzņēmējs.
Kas ~ tas ir tas izskatās pēc bitu pārstāvniecībā.
Pieņemsim jebkuru skaitu.
Tas ir tikai daži bināro numuru, un kādi ~ tas ir tas vienkārši flips visiem bitiem.
Tātad šī bija 1, tagad 0, tas ir 0, tagad 1, 010.100.
Tā ka viss ~ dara. Tātad 32 būs skaits - atbrīvoties no tā -
tāpēc 32 būs skaits 00.100.000, un tāpēc ~ šīs būs
šis skaitlis šeit, ka man anded "a" ar.
Vai visi redzētu, ka? Tas ir diezgan bieži, piemēram, kad jūs vēlaties, lai noskaidrotu
lai vēlāk lietas, ko mēs varētu redzēt, ja mēs gribam, lai redzētu, vai -
vai mēs gribam visu, katru bitu komplekts, izņemot 1
jums mēdz darīt ~ no mazliet ka mēs negribam noteikto.
Tāpēc mēs nevēlamies 32 bitu kopu, tāpēc mēs ~ 32.
Labi. Tātad, mēs varam izmantot visus tos šeit.
Labi, tāpēc tas ir labi, ja jūs neesat darīts, mēs lēnām staigāt pa kopā,
vai staigāt pa šo, tāpēc - caur šo. Staigāt pa šo.
Tāpēc mums ir mūsu stīgu, un mēs vēlamies, lai cilpu pār katru rakstzīmi šajā virknē un darīt kaut ko uz to.
Tātad, kā mēs cilpu pār virknes? Ko mums vajadzētu izmantot?
Es neesmu gatavojas darīt to šeit. Yeah.
Tāpēc man ir mana iterator, un viņš teica, bet kā es varu zināt, cik rakstzīmes ir virknē?
Strlen (-iem), tad es + +.
Tātad, ko es esmu darījusi šeit nav labākais veids, kā to lietas.
Vai kāds zina, kāpēc?
Jo jūs pārbaudīt valodu virknes katru reizi.
Tāpēc mēs vēlamies virzīties uz strlen, es varētu teikt šeit, int garums = strlen (-iem),
un tad es varu <garumu, un, ja jūs neesat redzējis to pirms,
Es varētu arī darīt int i = 0, garums = strlen (-iem).
Un tā tas ir nedaudz labāka, jo tagad es esmu sašaurinājuši
no dažāda garuma, lai tikai šo "par" cilpa, nevis deklarējot to pirms
un ka tas vienmēr pastāv, un, ja jums nav nozvejas kāpēc tas ir slikti,
vai kāpēc sākotnējais bija slikti, it's - sākas, lai cilpa.
Piereģistrējos stāvokli. Ir i <garumu s?
Tāpēc garuma, pieņemsim strādāt ar "Hello" visu laiku.
Tātad garums s, h-e-l-l-o. Garums ir 5.
Tāpēc es = 0, garums ir 5, tāpēc man nav <5, tāpēc cilpa turpinās.
Tad mēs ejam atkal. Mēs pārbaudīt stāvokli. Ir i <garumu sveiki?
Tāpēc pieņemsim pārbaudīt garumu sveiki. H-e-l-l-o. Tas ir 5; man nav <5, lai mēs turpinātu atkal.
Tātad mēs aprēķinātu, mēs paļaujamies sveiki, par katru atkārtojuma no cilpas,
pat domāju, ka tas nekad nebūs jāmaina, tas vienmēr būs 5.
Tātad mēs vienkārši atcerēties 5 līdz priekšā, un tagad viss ir labāk.
Tātad atkārtojot visā virknē.
Ko mēs vēlamies darīt par katru rakstzīmi no virknes?
[Studentu runājot, nesaprotami]
Yeah. Tātad, ja raksturs ir ne-burtu, tad mēs vienkārši vēlamies, lai izlaistu pār to.
Jo mēs tikai rūp alfabēta burtiem, mēs nevaram kapitalizēt numuru.
Tātad, kā mēs varam darīt? Tātad mūsu stāvoklī, tāpēc, ja mēs gribam kaut ko - pārbaudīt, vai tā alfabēta.
Tātad, kā mēs to pārbaudītu?
[Studentu] Jūs varat izmantot šo funkciju, ir alfa.
Ir tāds, ka iekļautas kāda no tiem, vai arī, piemēram, char.h vai kaut ko?
Pieņemsim nav izmantot ir alfa funkcija, un izmantojiet nepārprotama - tāpēc mums ir s [i],
ka ir astotais raksturs s, atcerieties, ka virkne ir masīvs rakstzīmju,
tāpēc astotais raksturs s.
Tagad, ja tas ir burts, mēs zinām, tas ir jābūt īpašā diapazonā.
Un kas ir tas diapazons?
Yeah. Tātad, ja ir [i] ir ≥ 65, un s [i] ir ≤ 90, ko man darīt tā vietā?
Yeah. Tātad jums vajadzētu absolūti nekad pat jāzina ASCII vērtības neko jebkad.
Nekad domā par numuriem 65, 90, 97 un 102, vai kāds tas ir.
Jums nav nepieciešams - 112 - Jums nav nepieciešams zināt, kas vispār?. Tas ir nepareizi pārāk.
Izmantot tikai viena citātu rakstzīmes, single quote konstantes. Tāpēc "" un mazāk nekā 90 ir "Z."
Un tas ir ievērojami labāks - es nezinu off augšpusē manu galvu, ka Z ir 90.
Es zinu off augšpusē manu galvu, ka "Z" ir kapitāls Z.
Tik ilgi, kamēr tas ir robežās no kapitāla uz kapitāla Z, vai mēs varam pārbaudīt mazos,
Vai ja tas ir robežās ≥ "" un ≤ z.
Tātad tas ir mūsu nosacījums.
Lai kur likt šīs lietas stils atšķiras.
Es darīšu to, kā šis.
Tagad, ko mēs vēlamies darīt?
Mēs zinām, šī vēstule ir raksturs, alfabēta burtu.
Tāpēc mums ir nepieciešams, lai pārmaiņus vai tas tagad būtu lielais burts vai mazo burtu.
Kā mēs izsekot, no kuriem viens mēs gribam, lai būtu?
[Studentu balsis, nesaprotami]
Tātad, jā, taču ļaujiet man pārbaudīt.
Modulis 0-2 tika minēts, bija ierosinājums izmet ārā, un es piekrītu, ka.
Izņemot paziņojumu, ka, piemēram, - tas gadījums? Yeah.
Tas ir katru otro viens, bet mēs nevaram no I 2 moduli, vai es mod 2, jo
ievērojat, ka E ir kapitāls un "" ir mazie? Bet tur ir telpa atdalot tos?
Tāpēc viņi būs tāda pati mod 2, bet viņi dažādas lietas.
[Studentu jautājums, nesaprotami]
Yeah. Tāpēc mēs esam tikai gatavojas, lai saglabātu skaitu.
Mēs varētu arī darīt, ka šeit, ja mēs vēlējāmies, ka varētu saņemt nedaudz smagnēja
jo, lai cilpa deklarācijām, es nolikšu to šeit.
Tātad int skaits = sākas ar 0.
Un tāpēc tagad, es esmu gatavojas rēķināties, cik daudz alfabēta rakstzīmes mēs esam bija.
Tāpēc mēs neizbēgami gatavojas rēķināties + +, jo mēs atradām citu burtam.
Bet, tāpēc tagad jūs sakāt ja impulsa mod 2.
Tātad, ko tad, ja skaits Mod 2? Oh. Es darīšu == 0 tagad.
Mēs arī iet pa to. Tātad, ja skaits Mod 2 == 0, tad ko?
[Studenti atbilde, nesaprotami]
Tāpēc mēs gribam, lai galu galā lielos.
Ir 2 lietas, lielie un mazie ir 2 lietas.
Tātad, ja mēs esam kā mazie mums ir nepieciešams veikt to lielo burtu.
Ja tas ir lielais mums nav nepieciešams neko darīt.
Bet, vai ir veids, - shouldn't ir Pagriezts -
ka mums nav pat nepieciešams, lai pārbaudītu, vai tas ir lielie vai mazie?
Ko mēs varam darīt, lai vienmēr pārliecinieties, ka mēs vienmēr galu galā pie lielajiem?
Tātad paziņojums, ko mēs izdarījām mazo "A"; ko, ja mēs šo pašu precīzu lieta par lielajiem burtiem?
Vai lielos maiņu, vai arī vērtības pārmaiņas?
Yeah. Tāpēc jebkurš burts Bitu līmeņa anded ar 32 ~ būs tajā pašā lielos burtus
jo par jebkuru lielo raksturu 32. bits nav noteikts.
Tātad, ja mēs gribam, lai raksturu s [i], mēs vēlamies, lai tā kļūtu mazos vai lielos.
Tātad, ja tas bija mazie, tagad ir lielais, ja tas bija lielie, tas joprojām lielos, un tas arī viss.
Es teica tajā supersection: Jūs varat izmantot 32 Ja jūs vēlaties, bet man ir tendence dot priekšroku darot "a" -,
nevis tikai plain 32, jo tas var būt jebkurš cits mazliet.
Pēc 32 bitu, tas var būt jebkurš no šiem, vai mums nebūtu pietiekami
numurus, lai visas rakstzīmes.
Tātad, ja jūs saņemsiet 32 ​​bitu, tas varētu būt 64 bitu, tas varētu būt 128 bitu.
Jebkurš no šiem gabaliņiem varētu būt mazliet ka izšķir lielos un mazos burtus.
Man nav nepieciešams zināt, ka tas ir 32 bitu.
Es varu izmantot šo "a" - lai iegūtu mazliet, kas atšķiras starp diviem
bez nepieciešamības paļauties uz burvju numuru, kas ir 32.
Un tāpēc tagad, cits skaits bija dīvaini, un lai ko es gribu darīt?
[Studentu atbildes, nesaprotami]
[Studentu] Kas tas ir?
Es darīšu to 1 sekundi.
Tāpēc tagad, ja es gribu - es gribu, lai pārliecinātos, raksturs ir tagad mazie,
un tāpēc es varu vai ar 32, un 32 nozīmē "" - A.
Bet paziņojums, ar to pašu argumentāciju kā iepriekšējā, ka, ja
šī vēstule bija jau mazie, tad ORing ar 32 vienkārši tur tā mazie.
Tā nav mainījusies sākotnējo raksturu.
Bet tagad man nav, lai izvairītos sakot, "Ja tas ir mazie, vienkārši aizmirst par to,
ja tas ir lielos, tad to mainīt. "
Tas ir daudz ērtāk to darīt.
[Studentu] Vai, ka atņemot lielos no mazo darbu, ja tas nav 32 stratēģija?
Ja tas bija, piemēram, 34 vai kaut ko?
Tātad, jums ir jāzina, ka starp 2 atšķirība ir -? >> 1 bit.
Tas varētu būt vairāk nekā 1 bitu, kamēr visi zem šīs pozīcijas biti ir vienādi.
Tāpēc mums ir nepieciešams vismaz 26 rakstzīmes - vai, ir 26 rakstzīmes.
Tāpēc mums ir nepieciešams vismaz 26 numuri, lai veido atšķirību -
Atšķirība starp un "" ir jābūt vismaz 26,
vai arī mēs nebūtu pārstāvēti visi kapitāla numurus.
Tas nozīmē, ka, ja mēs sākam ar 1, tas notiek, lai izmantotu visus šos bitiem,
visi šie pirmos 5 bitiem, lai pārstāvētu viss caur Z.
Tieši tāpēc nākamais mazliet, vai tas mazliet, nākamais bits ir viens, ka ir izvēlēta, lai atšķirtu un "."
Tas ir arī iemesls, kāpēc, ASCII tabulā, ir 5 simboli atdala lielos burtus no mazajiem burtiem.
Jo tie ir simboli, papildus 5 kas parādīs ir 32 ir atšķirība starp tiem.
[Studentu] Lai mēs varētu darīt, jo ASCII ir izstrādāta tādā veidā.
Jā. Bet ASCII - atšķirība varētu būt arī abi šie biti.
Piemēram, ja ir 10000001, un "" bija 11100001 - es neaizmirsīšu, neatkarīgi.
Bet ja tā būtu tas, tad mēs joprojām varētu izmantot "A" - A.
Tas ir tikai tagad atšķirība starp un "" joprojām šie 2 biti.
Es domāju, ka tas ir rakstīts 48. Vai tas 32 + 64? Es domāju, ka tas ir?
Tas vēl būtu 2 biti; katru raksturs, piemēram, Z un Z, K un K,
tie joprojām ir tādas pašas precīzu biti, kas, izņemot šīm 2 bitiem.
Tik ilgi, kamēr tas ir vienmēr taisnība, neatkarīgi no tā, ja mēs esam izmantojot ASCII vai kādu citu sistēmu,
kamēr tur ir tikai kopa bitu skaits, kuri atšķiras katram raksturs,
tad kas darbojas naudas sodu.
Tas ir tikai, ka 32 tika izveidota, jo tas ir pirmais, mēs, iespējams, varētu izmantot. >> Cool.
Man ir tendence dot priekšroku, ja jūs neesat redzējuši, ja bloks ir tikai viena rinda,
Jūs varat atbrīvoties no cirtaini lencēm, tāpēc man ir tendence dot priekšroku darot.
Arī jūs zināt, kā mēs varam darīt lietas, piemēram, s [i] + = 1?
Jūs varat arī izdarīt s [i] Bitu līmeņa un = 32.
Un Bitu līmeņa VAI = 32.
Arī saskaitīt mod 2 == 0.
Tāpēc atcerieties, ka - es ne rakstīt - no jebkuras nulles vērtība ir patiesa, un 0 ir nepatiess.
Tāpēc "ja skaits Mod 2 == 0" ir tas pats, kā saka, "ja neskaita mod 2."
Es droši vien būtu tikai pretēja līnijas un teica, "ja skaits mod 2,
do vai 1, cits do UN 1 ", tāpēc, ka man nav nepieciešams" nav. "
Bet tas darbojas tikpat labi.
Un ko vēl es varu darīt šeit?
Jūs varētu apvienot tos ar trīskāršu, ja jūs vēlaties, bet tad ka gribētu vienkārši darīt lietas Messier
un, iespējams, grūtāk lasīt, tāpēc mēs ne darīt.
Kāds ir kādi citi ieteikumi?
Vai tas viss problēma lūdza? Ak jā.
Tāpēc atbrīvoties no šo tukšo līniju, tagad mēs drukāt f,% s ir viens stīgas,
Mēs drukāt F, S.
Tagad palaist to. Es daru kaut ko nepareizi?
Tas ir \ ", es gribu n.
Labi. Tagad mēs to. Tas būs iespējams kliegt uz mani.
Strlen ir string.h.
Tātad šī ir jauka lieta par šķindēt ir tā stāsta jums to, ko tas ir,
instead GCC kas vienkārši saka: "Hei, tu aizmirsi kaut ko, es nezinu, kas tas bija."
Bet tas man pateikt, "Tu, ietver string.h."
Tāpēc es nemudināja par kaut ko, tāpēc tas nav saprotams neko.
Bet mēs darīsim viņu piemēram, "Thanks 4 Pievienot".
Tas izskatās labi. Urā.
Lai atgriežas jūsu galvenais, es gandrīz nekad to darīt.
Tas ir obligāts. Un galvenais ir vienīgā funkcija, par kuru tā ir obligāta.
Ja jums nav atgriezties kaut ko no galvenā, tas ir pieņemts, ka jums nozīmē atgriezties 0.
Jautājumi?
Labi. Tāpēc tagad otra problēma.
"Atsaukt no nedēļa 2 otrā lekcija ka swapping 2 Mainīgo lielumu vērtības, izejot
šīm 2 mainīgie uz funkciju (pat ja tā būtu swap) nav īsti strādāt, vismaz ne bez "šautru."
Un ignorēt norādes kamēr mēs viņiem.
Mēs vēlamies, lai mijmaiņas 2 mainīgos, mēs neesam izmantojot funkciju, lai to izdarītu.
Mēs joprojām esam gatavojas darīt to galvenais kā tas teikts.
Bet izmantot tās 2 mainīgos, mēs negribam, lai izmantotu pagaidu mainīgo.
Ir 2 veidi, kā to izdarīt.
Jūs varat darīt to, izmantojot savu tradicionālo bināro operatoriem.
Lai vai kāds zina ātru un netīrās veids, kā darīt, ka?
Tas tiešām var ņemt minūti domāšanu. Ja man ir -
Es noteikti šo problēmu pat kā viņi lūdz. Tātad, ja man ir 2 mainīgie,, kas ir tikai skaitlis
ka viņi dod man, un summa ar B, kas ir cita skaitlis, ka es esmu dota.
Tātad, ja man ir šos 2 mainīgie, tagad es gribu, lai mijmaiņas tiem.
Tradicionālā, izmantojot savu regulāri binārā uzņēmējus, es domāju, piemēram, +, -, ÷.
Ne Bitu līmeņa operatoriem, kas darbojas uz bināro.
Tātad, izmantojot -, +, ÷, un visiem tiem.
Mēs varētu mijmaiņas darot kaut ko līdzīgu = + b, b = - b, = - b.
Tātad, veselība pārbaudītu, un tad mēs redzēsim, kāpēc tas darbojas.
Pieņemsim, ka = 7, b = 3, tad + b būs 10.
Tātad mēs tagad nosakot = 10, un tad mēs darām, b = - b.
Tāpēc mēs darām b = - b, kas būs 7, un b = - b atkal,
vai = - b. Kura būs 10-7 kas ir 3.
Tāpēc tagad, pareizi, "" bija 7, b bija 3, un tagad b ir 7 un "" ir 3.
Tātad šāda veida jēga, "" ir kombinācija no 2 numuriem.
Šajā brīdī, "" ir kombinācija, un tad mēs atņemot veic sākotnējo b,
un tad mēs atņemot to, kas bija oriģināls "."
Bet tas nav darbs visiem numuriem.
Lai redzētu šo, pieņemsim apsvērt sistēmu, tāpēc mēs parasti domājam par integers kā 32 bitiem.
Pieņemsim strādāt par kaut ko, kas ir tikai, piemēram, 4 bitiem.
Cerams, ka man jānāk klajā ar labu piemēru tiesības tagad.
Tātad, es zinu, tas būs viegli.
Teiksim mūsu 2 numuri ir 1111, 1111 un, tāpēc mēs esam binārā tiesības tagad.
Faktiskās decimāldaļām, ja jūs vēlaties, lai padomātu par to, ka veids, = 15 un b = 15.
Un tā mēs sagaidām, kad mēs mijmaiņas tiem - tie nav pat jābūt paši skaitļi,
bet es tomēr to šādā veidā.
Pieņemsim viņus ne paši numuri. Darīsim 1111 un 0001.
Tāpēc = 15 un b = 1.
Kad mēs mijmaiņas tiem, mēs sagaidām "" būt 1 un B ir 15.
Tātad mūsu pirmais solis ir = + b.
Mūsu numuri ir tikai 4 biti plašs, tāpēc "", kas ir 1111, + B, kas ir 0001,
gatavojas galu galā ir 10000, bet mums ir tikai 4 biti.
Tāpēc tagad = 0.
Un tagad mēs vēlamies noteikt b = - b - patiesībā, tas joprojām darbojas perfekti.
= - b - pieņemsim redzēt, ja tas darbojas perfekti.
Tātad tad b = 0 - 1, kas joprojām būtu 15, un tad = - b, kas būtu 1.
Varbūt tas strādā.
Es jūtos kā tur iemesls, tas nedarbojas, izmantojot regulāri.
Labi, tā strādā uz pieņēmumu, ka tas nedarbojas ar regulāriem bināro operāciju,
un es meklēt - es Google, lai redzētu, vai tā ir taisnība.
Tāpēc mēs vēlamies to darīt, izmantojot Bitu līmeņa operatoriem, un pavediens šeit ir XOR.
Tātad, ieviešot XOR (^), ja neesat to redzējuši vēl.
Tas ir, atkal, Bitu līmeņa uzņēmējs tāpēc tā rīkojas pamazām, un it's -
Ja jums ir bitiem 0 un 1, tad tas būs 1.
Ja jums ir biti 1 un 0, tas būs 1, jums ir bitiem 0 un 0 tas būs 0,
un, ja jums ir biti 1 un 1 tas būs 0.
Tātad tas ir tāpat VAI. Ja kāds no biti ir taisnība, tas ir 1, bet atšķirībā VAI, tas nevar būt abi biti, kas ir taisnība.
VAI būtu tas būs 1, XOR būtu tas ir 0.
Tāpēc mēs esam gatavojas vēlaties izmantot XOR šeit.
Padomā par to minūti, es esmu dodas uz Google.
Nu, jūs nevarat lasīt, ka, es esmu šobrīd par XOR mijmaiņas algoritmu lapā.
Cerams, ka tas izskaidro, kāpēc es cant -
Tas ir tieši algoritms ka mēs tikko izdarījām.
Es joprojām nesaprotu, kāpēc - man ir tikko palielinājies sliktu piemēru,
bet tas gadījums, kad "" notika kļūt 0, pēc tam kļūst par 5 bitu, tāpēc tagad "" ir 0,
tas ir tas, ko sauc par "skaitlim pārpildes."
Saskaņā ar Wikipedia, "Atšķirībā no XOR mijmaiņas, šī variācija paredz, ka tā izmanto dažas metodes
garantēt, ka x + y neizraisa skaitlim pārpildes. "
Tātad tas tiešām ir problēmas, tas bija vesels pārplūdes, bet es tomēr kaut ko nepareizi.
Es neesmu pārliecināts. Es mēģināšu nākt klajā ar vienu citu.
[Studentu] Nu, nav skaitlis pārpildīts, kad jūs mēģināt likt numuru tur
lielāks nekā summa bitu esat piešķirts?
Yeah. Mums ir 4 biti. That - mums bija 4 biti, mēs pēc tam mēģināt pievienot 1 līdz tam, lai mēs galu galā ar 5 bitiem.
Bet piektais mazliet vienkārši kļūst nogriezts, jā.
Tas tiešām -
[Studentu] Vai tas mest jums kļūda, vai tas, ka - tas, ka mest kļūdu?
Nē. Tāpēc nav kļūda. Kad jūs nokļūt uz pulcēšanās līmenī, īpašu mazliet
kaut kur ir noteikts, ka teica, ka bija pārplūdes, bet C jūs veida vienkārši nav galā ar to.
Jūs tiešām nevar tikt galā ar to, ja vien jūs izmantot īpašus montāžas instrukcijas C.
Padomāsim par XOR swap.
Un es domāju, ka Vikipēdijas raksts varētu būt arī saprotams, ka -
Tātad tas arī audzināta modular aritmētika, tāpēc es domāju, man bija, teorētiski, darot modulāru aritmētika
kad es teicu, ka 0 - 1 ir 15 atkal.
Lai varētu faktiski - par regulāru procesoru, kas dara 0-1 = 15.
Jo mēs galu galā ar 0, mēs atņemt 1, tā tad tas tikai wraps atpakaļ ap 1111.
Tāpēc šis algoritms varētu faktiski strādā, tad + B, - b, b -, kas varētu būt labi.
Bet tur ir daži pārstrādātāji, kas nav darīt, ka, un tāpēc nebūtu naudas sodu šajās konkrētajās ones.
XOR mijmaiņas strādās uz jebkura procesoru. Labi.
Ideja ir tāda, ka tas ir vajadzēja būt vienādi, lai gan.
Kur mēs izmantojam XOR lai kaut saņemt informāciju par abus 1 no mainīgajiem,
un izvelciet informāciju par atsevišķu faktoru vēlreiz.
Tātad vai kāds ir idejas / atbilde?
[Studentu atbilde, nesaprotami]
Tāpēc tas ir darbs, un arī, XOR ir commutative.
Neatkarīgi no tā, lai šie 2 skaitļi gadās būt šeit,
šis rezultāts būs tāds pats.
Tātad ^ b ir b ^.
Jūs varētu arī redzēt šo uzrakstu ^ = b, b ^ =, ^ = b vēlreiz.
Tātad tas ir labi, un redzēt, kāpēc tas darbojas, domā par bitiem.
Izmantojot maziņiem numuru, teiksim 11.001, 01.100 un.
Tātad tas ir "", tas ir b.
Tātad ^ = b.
Mēs ejam, lai būtu noteikt "A" = ar XOR no šīm 2 lietām.
Lai 1 ^ 0 1, 1 ^ 1 ir 0; 0 ^ 1 ir 1, un 0 ^ 0 ir 0, 1 ^ 0 1.
Tātad "," ja paskatās decimālskaitlis, tas būs -
Jūs neesat gatavojas redzēt daudz attiecībām starp sākotnējo "A" un jaunais ","
bet meklē biti, "" tagad kā acs informācijas
Gan sākotnējā "A" un sākotnējā b.
Tātad, ja mēs ņemtu b ^, mēs redzam, ka mēs galu galā pie sākotnējā "."
Un, ja mēs ņemtu sākotnējais "" ^ Jaunais "," mēs redzam, mēs galu galā pie sākotnējā b.
Tātad (^ b) ^ b = oriģināls "."
Un (^ b) ^ = oriģināls b.
Ir - cits redzēt tas ir kaut XOR pats ceļš vienmēr ir 0.
Tātad 1101 ^ 1101, visi biti ir būs tāds pats.
Tāpēc tur nekad būs gadījums, kad 1 ir 0 un otrs ir 1.
Tātad tas ir 0000.
Pats ar to. (^ B) ^ b ir līdzīgs ^ (b ^ b).
(B ^ b) būs 0; ^ 0 ir tikai būs "," jo visi biti ir 0.
Tātad vienīgie, kas ir būs, ja "" sākotnēji bija 1 - bija ones.
Un pati ideja šeit, es esmu diezgan pārliecināts, ka tas ir arī commutative.
Yeah. Es to saku, pirms tas bija commutative.
The ^ "," un tas ir asociatīva, tāpēc tagad (b ^) ^.
Un mēs varam darīt b ^ (^).
Un tā atkal, mēs iegūtu sākotnējo b.
Tāpēc "" tagad kombinācija "A" un B kopā.
Izmantojot mūsu jauno Combo "" mēs sakām, b = Combo "" ^ oriģināls b, mēs iegūtu sākotnējo "."
Un tagad = Combo "" ^ jaunais b, kas bija oriģināls - vai kas ir tagad, ko bija "" vai b.
Tas ir tas gadījums noteikti šeit. Tas ir = b, vecā b.
Tāpēc tagad viss ir atpakaļ mijmaina kārtībā.
Ja mēs tiešām paskatījās biti, b = ^ b, gatavojas XOR šos 2,
un atbilde būs, un tad = ^ b tiek XORing šos 2 un atbilde ir šī.
Jautājumi? Labi. Tātad pēdējais ir nedaudz ievērojami grūtāk.
[Studentu] Es domāju, ka viņš ir jautājums par to. >> Ak, piedodiet.
[Studentu] Kas patiesībā ātrāk? Ja jūs izmantot šo XOR, vai tas ir, ja jūs atzīt jaunu mainīgo?
Tātad, kas ir faktiski ātrāk, deklarējot jaunu mainīgo vai izmantojot XOR swap?
Atbilde ir, visticamāk, īslaicīgs mainīgs.
Un tas ir tāpēc, kad tā ir apkopoti uz leju - tāpēc pie montāžas līmenī,
tur nav tādas lietas kā vietējās mainīgie vai jebkuru pagaidu mainīgos vai kādu no šo stuff.
Viņi vienkārši patīk - tur ir atmiņas, un ir reģistri.
Reģistri ir, ja lietas tiek aktīvi notiek.
Jums nav pievienot 2 lietas atmiņā, jums pievienot 2 lietas reģistros.
Un jūs lai lietas no atmiņas stāšanās reģistru tad pievienot tos,
un tad jūs varētu nodot tos atpakaļ atmiņā, bet visas darbības notiek reģistros.
Tātad, ja jūs izmantojat pagaidu mainīgo pieeju, parasti kas notiek, ir
šie 2 numuri jau reģistros.
Un tad no tā brīža, kad esat nomainīju tos,
tas būs tikai sākums izmantojot citu reģistru.
Jebkur jums bija, izmantojot B, tas būs tikai izmantot reģistru, kas bija jau glabāšanu "."
Tāpēc nav nepieciešams neko darīt, lai faktiski darīt swap. Yeah?
[Studentu] Bet tas arī aizņem vairāk atmiņas, vai ne?
Tas tikai vairāk atmiņas, ja tas nepieciešams, lai saglabātu šo pagaidu mainīgo.
Tāpat, ja jūs vēlāk izmantot šo pagaidu mainīgo atkal kaut kur,
tad - vai jūs piešķirat kaut kas šajā pagaidu mainīgo.
Tātad, ja kādā brīdī laiks "," B temp ir atšķirīgas vērtības vai kaut ko,
tad tas notiek, lai ir atšķirīgas vietas atmiņā, bet tā ir taisnība, ka
Ir daudzas vietējās mainīgie, kas eksistē tikai reģistros.
Tādā gadījumā, tas nekad likts atmiņā, un tāpēc jūs nekad izšķērdēt atmiņu.
Labi. Pēdējais jautājums ir mazliet vairāk.
Tātad šeit, šajā CS50 ierīces, ir vārdnīca.
Un iemesls tam ir tāpēc, ka [? B66?] Ir pareizrakstības pārbaudītājs, kur jums tiks rakstiski
izmantojot hash tabulas vai mēģina vai kādu datu struktūra.
Jūs esat būs rakstot pareizrakstības pārbaudītājs, un jūs būs izmantojot šo vārdnīcu, lai to izdarītu.
Bet par šo problēmu, mēs esam tikai gatavojas skatīties, lai redzētu, vai viens vārds ir norādīts vārdnīcā.
Tā vietā, lai uzglabātu visu vārdnīcu kādā datu struktūra
un tad meklē pa visu dokumentu, lai redzētu, ja kaut kas ir nepareizi,
Mēs vienkārši vēlamies, lai atrastu 1 vārdu. Tātad mēs varam vienkārši skenēt visu vārdnīcu
un, ja mēs nekad atrast vārdu visā vārdnīcā, tad tas nav tur.
Ja mēs skenēšanu visā vārdnīcā un redzu vārdu, tad mēs esam labi, mēs atradām.
Tajā teikts, ka mēs vēlamies, lai sāktu meklē C s failu apstrādes funkcija,
jo mēs vēlamies lasīt vārdnīcu,
bet es dos mājienu šeit par to, kuras funkcijas jums vajadzētu domāt par.
Es uzrakstīšu tos Spaces.
Tātad galvenie jūs vēlaties apskatīt ir f atvērti un tad, neizbēgami, f slēgta,
kas iet beigās savu programmu, un f skenēšanas f.
Jūs varētu izmantot arī f lasīt, bet jūs, iespējams, nevēlaties, lai
tāpēc, ka - jums nav galu galā nepieciešams to.
F skenēšanas f ir tas, ko jūs būs izmantojot skenēt pa vārdnīcu.
Un tāpēc jums nav nepieciešams kods up risinājumu, vienkārši izmēģināt un patīk pseido-kodu savu ceļu
risinājums, un tad mēs apspriest to.
Un patiesībā, jo es jau deva jums šo, ja jums iet uz jebkuru terminālī vai jūsu ierīce ir apvalks,
Es - es parasti - ja neesat redzējuši vēl, es nezinu, ja jūs klasē,
bet cilvēks, tāpēc cilvēks lapas, ir diezgan noderīgi meklē diezgan daudz jebkuras funkcijas.
Lai es varētu darīt, piemēram, MAN F, skenēšanas f.
Tas šobrīd ir informācija par skenēšanas f ģimenes funkcijas.
Es varētu arī darīt MAN F, atvērtas, un ka būs man informāciju par to.
Tātad, ja jūs zināt, ko funkcijas jūs izmantojat, vai jūs lasāt kodu
un jūs redzat kādu funkciju un jūs, piemēram, "Ko tas dara?"
Tikai cilvēks, kas funkcijas nosaukums.
Ir dīvaini pāris piemēri, kur jūs varētu teikt
patīk. ka funkcijas nosaukums, vai cilvēks 3, kas funkcijas nosaukums, 2 cilvēks
bet jums ir tikai to darīt, ja cilvēks funkcijas nosaukums nenotiek strādāt pirmo reizi.
[Studentu] Tāpēc es esmu lasījums cilvēks lapu atvērt, bet es esmu joprojām sajaukt par to, kā to izmantot un programma.
Labi. No cilvēks lapas daudz ir mazāk nekā noderīga.
Viņi vairāk noderīgi, ja jūs jau zināt, ko viņi dara
un tad jūs vienkārši nepieciešams atcerēties secību argumentiem vai kaut ko.
Vai tie var sniegt jums vispārīgu pārskatu, taču dažas no tām ir ļoti pārliecinošs.
Tāpat f skenēšanas F, arī. Tas dod jums informāciju par visām šīm funkcijām,
un 1 līnijas noteikti šeit notiek teikt, "F skenēšanas f skan no virknes punkta vai plūsmā."
Bet f atvērt. Tātad, kā būtu mēs izmantojam f atvērti?
Gada programmai, kas ir jādara ar failu doma I / O ir, ka
jums vispirms ir nepieciešams, lai atvērtu failu, kuru vēlaties darīt lietas ar, un neizbēgami,
lasīt lietām no šīs lietas un darīt stuff ar tiem.
F atvērts ir tas, ko mēs izmantojam, lai atvērtu failu.
Lieta mēs saņemam atpakaļ, lai to, ko fails mēs vēlamies atvērt, tas dod mums -
šeit tā saka "/ lietotājs / share / dict / vārdi."
Tas ir fails, ko mēs vēlamies atvērt, un mēs vēlamies, lai to atvērtu -
mums ir skaidri jānorāda, vai mēs vēlamies, lai to atvērtu, lai lasītu vai ja mēs gribam, lai atvērtu to rakstīt.
Tur kombinācijas un sīkumi pāris, bet mēs vēlamies, lai atvērtu šo par lasījumā.
Mēs vēlamies, lai nolasa no faila.
Tātad, ko tas atgriešanās? Tā atgriež failu zvaigznītes (*),
un es ņemšu tikai parādīt visu, kas mainīgā F, lai *,
atkal, tas ir rādītājs, bet mēs negribam, lai risinātu ar norādes.
Jūs varat domāt par F AS, f ir tagad mainīgais jūs gatavojas izmantot, lai pārstāvētu failu.
Tātad, ja jūs vēlaties, lai nolasa no faila, jūs lasīt no f.
Ja jūs vēlaties slēgt lietu, aizverot f.
Tāpēc pie programmas beigām, kad mēs neizbēgami vēlaties slēgt lietu, ko mums vajadzētu darīt?
Mēs vēlamies, lai aizvērtu f.
Tāpēc tagad pēdējā faila funkcija, kas mēs esam gatavojas vēlaties izmantot, ir skenēšanas f, f skenēšanas f.
Un ko tas dara, ir tas skenē pār failu meklē modeli, lai atbilstu.
Aplūkojot cilvēks lapā šeit mēs redzam, int f skenēšanas f, ignorēt atgriešanās vērtību tagad.
Pirmais arguments ir failu * plūsma, tāpēc pirmais arguments mēs spēsim pabraukt garām, ir f.
Mēs esam skenēšanas pār f.
Otrs arguments ir formāta virkne.
Es sniegs jums formāta virknes tiesības tagad.
Es domāju, ka mums gadās teikt, 127S \ n, partijas, kas ir nevajadzīgs.
Par to, kas tas formāta virkne ir ideja, ir varat iedomāties skenēšanas f kā pretstatu drukas f.
Tātad drukas f, drukas f mēs arī izmanto šāda veida formātā parametru,
bet drukas f ko mēs darām, ir - aplūkosim līdzvērtīgu.
Tātad drukāt f, un tur tiešām arī f drukas f, ja pirmais arguments būs f.
Drukājot f, mēs varētu teikt kaut ko līdzīgu, "Drukas 127S \ n", un tad, ja mēs iet tā kādu stīgu,
tas notiek, lai izdrukātu šo stīgu un tad jaunu līniju.
Kas 127 nozīmē, es esmu diezgan pārliecināts, bet es nekad neesmu tikai sevi uz to,
Jūs pat nepieciešams pateikt '127 ", kas drukas f,
bet ko tas nozīmē, drukāt pirmās 127 rakstzīmes.
Tāpēc es esmu diezgan pārliecināts, ka tas gadījums. Jūs varat Google par to.
Bet nākamo es esmu gandrīz pozitīvs tas nozīmē, ka.
Tātad tas ir drukāt pirmās 127 rakstzīmes, kam seko jaunu līniju.
F skenēšanas f tagad, nevis meklē mainīgo un drukāšana,
tas notiek, lai apskatīt kādu stīgu, un uzglabāt modelis vērā mainīgā.
Pieņemsim faktiski izmantot skenēšanas f citā piemērs.
Tāpēc pieņemsim, ka mums bija dažas int x = 4,
un mēs vēlējāmies radīt virkni izgatavots no - vēlējāmies radīt virkni
ka bija, piemēram, tas būs jānāk klajā daudz vēlāk,
kaut kas ir tāpat kā 4.jpg.
Tātad tas varētu būt programma, kur jums būs summa skaitītājs,
Rezumējot cīnītos es, un jūs vēlaties, lai saglabātu ķekars attēlu.
Tātad jūs vēlaties, lai saglabātu i.jpg, kur i ir dažas iterācijas no jūsu cilpa.
Tātad, kā mēs šo virkni par šo JPEG?
Ja jūs vēlētos, lai drukātu 4.jpg, mēs varētu tikai teikt drukas f,% d.jpg,
un tad tas varētu drukāt uz šo JPEG.
Bet, ja mēs gribam saglabāt stīgu 4.jpg, mēs izmantojam skenēšanas f.
Tāpēc virkne s - patiesībā mēs cant - raksturs, palija s, iesim 100.
Tāpēc es tikko paziņoja dažas masīvs 100 rakstzīmes,
un tas, ko mēs neizbēgami būs uzglabājot ka JPEG iekšā
Tāpēc mēs esam gatavojas izmantot skenēšanas f, un formāts, kā mēs teiktu% d.jpg
lai drukātu 4.jpg, ka šis formāts būs% d.jpg.
Tātad formāts ir% d.jpg, ko mēs gribam, lai aizstātu% d ar ir x,
un tagad mums ir saglabāt šo stīgu kaut kur.
Un kur mēs ejam, lai saglabātu šo virkni ir masīvs s.
Tātad pēc šī līnija kodu, s, ja mēs drukāt f,% s mainīgo s,
tas notiek, lai drukātu 4.jpg.
Tik f skenēšanas f ir tāds pats kā skenēšanas f, izņemot tagad tas meklē pār šo failu
par to, ko glabāt s.
Tas ko pēdējais arguments būs.
Mēs vēlamies, lai uzglabātu - "Scan f ģimenes funkciju skenē gan saskaņā ar formātu, kā mēģināja tālāk.
Ja kāds tiek uzglabāti atrašanās vietās jūs varētu atgriezties - "
Nē, mēs varētu būt labs. Ļaujiet man domāt par sekundi.
Tāpēc skenēšanas f nav - kāda heck ir funkcija, kas dara, ka?
Tāpēc skenēšanas f nav gatavojas pieņemt skaitlim un darīt dot JPG.
Tas notiek, lai [Mumbles].
Saglabāt int mainīgo virknes int C.
Kas tas ir mainīgs, vai kāda ir šī funkcija sauc?
Jā. That - jā. Tātad, ko es definējot jums pirms bija s drukas f,
kas - tas padara daudz nozīmē, tāpēc es teicu, tas bija daudz vairāk kā drukas f.
Skenēšanas f ir vēl veids kā drukas f, bet s drukas f gatavojas skenēt to vairāk
un aizstāt mainīgos un tagad uzglabāt to virknē.
Vietā drukāšana, to uzglabā virknē.
Tāpēc ignorēt to, ka pilnībā. Jūs joprojām varat domāt par formāta noteicēju kā, piemēram, ka drukas f.
Tāpēc tagad, ja mēs vēlējāmies darīt 4.jpg lieta, mēs varētu darīt s drukas f, X šis.
Tātad, ko skenēšanas f dara - kāda bija jūsu jautājums būs?
[Studentu] Es esmu tikai sajaukt par to, ko mēs cenšamies darīt tieši šeit
ar šo JPEG. Vai jūs varat paskaidrot, ka 1 vairāk laika?
Tā tas bija - tas ir mazāk relevent līdz f skenēšanas f tagad, cerams, tas būs tie atkal kādu veidā.
Bet ko es sākotnēji bija paredzējusi parādīt bija - tas ir faktiski tieši saistīti ar šiem [? F5]
Jūs esat būs izmantojot s drukas f, kur, teiksim mums ir 100 attēli,
un jūs vēlaties lasīt attēlu 1.jpg, 2.jpg, 3.jpg.
Tāpēc, lai to izdarītu, jums ir nepieciešams f atvērt, un tad jums ir iet virknē, kuru vēlaties atvērt.
Tāpēc mēs vēlamies atvērt 1.jpg, lai radītu virkni, kas ir 1.jpg,
mēs s drukas f no% d.jpg--mums nav jādara, lai int i = 0.
i <40, i + +.
Tāpēc s drukas f% d.jpg no i.
Tātad, pēc šīs līnijas, tagad mainīgā vai masīvs s gatavojas 1.jpg.
Vai, 0.jpg, 1.jpg, 2.jpg. Un tā mēs varam atvērt, savukārt, katru attēlu lasījumā.
Tātad tas ir tas, ko ir drukāt f dara. Vai jūs redzat, ko s drukāt f tagad dara?
[Studentu] Labi, tā tas ir ņemot - tas rada virkni, something.jpg, un tad saglabā to.
Jā. Tas rada - tas ir vēl viens formāta virkne, tāpat kā skenēšanas f un drukas f,
kur tas ieliktņi visi no mainīgajiem, uz otro argumentu, varētu būt s pretstatā i.
Varbūt - es domāju, ka tas gadījums. Bet neatkarīgi no argumentiem pasūtījuma.
Tas notiek, lai ievietotu visus mainīgos lielumus formāta virknes
un pēc tam uzglabāt mūsu bufera, mēs saucam par buferi, tas ir, ja mēs uzglabāšanu virkni.
Tātad mēs uzglabāšanai iekšpusē s pareizi formatēta virkne,% d ir aizstāti ar 4.
[Studentu] Tātad, ja mēs to darījām, ir mainīgs f tikai gatavojas no jauna?
Jā. Tāpēc mums vajadzētu slēgt sākotnējo f pirms to darīt.
Bet - un tad arī, ja tur nebija f atvērt šeit, tad mums būtu nepieciešams teikt -
Yeah. Bet tas pavērtu simts dažādus failus.
[Studentu] Bet mēs nevarētu piekļūt vai - labi.
Labi. Tātad skenēšanas f, f skenēšanas f, ir sava veida pašu ideju,
bet tā vietā, nevis uzglabāt to string, tas ir vairāk kā jūs tagad
iet pa dzelt un modelis saskaņošanas pret šo stīgu un uzglabāšanu rezultātus uz mainīgajiem.
Jūs varat izmantot skenēšanas f parsēt nekā kaut ko līdzīgu 4.jpg, un glabāt veselu 4 savos kopsummas int x.
Tas, ko mēs varam izmantot skenēšanas F.
F skenēšanas f gatavojas to darīt pie komandrindas.
Es esmu tiešām diezgan pārliecināts, ka tas ir tas, ko CS50 bibliotēka dara.
Tātad, ja jūs sakāt, "get int", tas ir skenēšanas f-ing pār - skenēšanas f ir veids, kā jūs saņemsiet lietotāja ievadi.
F skenēšanas f gatavojas darīt to pašu, bet, izmantojot failu skenēšanas pār.
Tātad šeit mēs skenēšanas pār šo failu.
Modelis mēs cenšamies saskaņot, ir daži virkne, kas ir 127 rakstzīmes
seko jaunas līnijas
Tāpēc es esmu diezgan pārliecināts, ka mēs pat varētu vienkārši pateikt "spēles s," jo vārdnīcā
Mums gadās būt, mēs esam garantēta ne vārda nav tik ilgi,
un arī f skenēšanas f, es domāju, apstāsies pie jaunās līnijas vienalga ko.
Bet mēs arī jaunu līniju mača, un -
[Studentu] Ja mēs neietvēra jaunu līniju, nebūtu tas atrast daļas vārdu?
Tas - katram - meklē vārdnīcu -
Tātad vārdnīcā, tie visi ir mūsu vārdiem.
Katra no tām ir par jaunu līniju.
Skenēšanas f gatavojas uzņemt šo vārdu.
Ja mums nav iekļauts jaunu līniju, tad tas ir iespējams, ka nākamais skenēšanas f būs tikai lasīt jaunu līniju.
Bet ieskaitot jaunu līniju, tad būs vienkārši ignorēt jauno līniju.
Bet mēs nekad iegūt daļa no vārda, jo mēs vienmēr lasījumā līdz jaunu līniju, vienalga ko.
[Studentu] Bet ko tad, ja jūs meklēt vārdu "cissa", tāpat cissa.
Vai tā uzskata, ka, un saka, ka tas ir spēles?
Tātad šeit mēs - tas būs lasāms - tas ir faktiski labs punkts.
Mēs nekad, izmantojot pašreizējo - vārdu mēs meklējam ir pirmais komandrindas arguments.
Tātad virkne, vārds = argv 1.
Tāpēc virkne mēs meklējam, ir argv 1.
Mēs nemeklējam vārdu vispār mūsu skenēšanas f.
Ko mēs darām ar skenēšanas f kļūst katru vārdu vārdnīcā,
un tad, kad mums ir, ka vārdu mēs ejam, lai izmantotu strcmp lai salīdzinātu tos.
Mēs ejam, lai salīdzinātu mūsu vārdu un ko mēs tikai lasīt collas
Tātad neizbēgami, mēs ejam, lai galu galā dara ķekars skenēšanas fs
līdz tas vienkārši tā notiek, ka skenēšanas f atgriezīsies -
tā atgriezīsies vienu, kamēr tā ir saskaņota ar jaunu vārdu,
un tas atgriezīsies kaut kas cits, tiklīdz tas ir izdevies saskaņot vārdu.
Mēs lasām visā vārdnīcu, uzglabāšanai pozīcijai katrs vārds vērā mainīgo s.
Tad mēs salīdzinātu vārdu ar s, un ja salīdzinājums == 0,
strcmp notiek, lai 0, ja spēle bija veikts.
Tātad, ja tas bija 0, tad mēs varam izdrukāt f, saskaņota,
vai vārds ir vārdnīcā, vai neatkarīgi vēlaties drukāt f.
Un tad - mēs negribam, lai f slēgt atkal un atkal.
Tas ir tāda veida lieta, mēs vēlamies darīt, un mēs ne tikai meklē vārdu vārdnīcā.
Lai mēs varētu darīt, ja mēs vēlējāmies, lai meklētu savu modeli, cissa, kā jūs teica pirms,
ja mēs vēlējāmies, lai meklētu šo modeli, tad tas varētu neizdoties gadījumā
jo tas nav reāli vārdu, bet viens no šajā vārdnīcā vārdus notiek, ir, ka tā.
Lai tā varētu saskaņot šo vārdu, bet šī vārda apakškopa nav pašu vārdu.
Bet tas nav kā mēs to izmantot, mēs esam lasīt katru vārdu
un tad salīdzinot vārdu mēs ar šo vārdu.
Tātad mēs vienmēr Salīdzinot Full vārdus.
Es varu izsūtīt pabeigti risinājumus vēlāk.
Tas ir sava veida gandrīz pareizo atbildi, es domāju.
[Studentu komentārs, nesaprotami]
Ak, es varu atbrīvoties no ka pirms? Char s, es domāju, mēs teicām 127 - Es aizmirst, ko lielākā ir.
Mēs vienkārši darīt 128 tāpēc tagad s ir pietiekami ilgi.
Mums nav nepieciešams drukāt neko.
Mēs arī gatavojas vēlaties, lai ir tuvu mūsu failu, un tas būtu par pareizo atbildi.
CS50.TV