[Powered by Google Translate] [Oddelek 4] [manj udoben]
[Nate Hardison] [Harvard University]
[To je CS50.] [CS50.TV]
>> V redu, dobrodošli nazaj k delu.
V oddelku je ta teden bomo narediti nekaj stvari.
Gremo v prvem nizu povzamem Problem 2,
ki je Cezar in Vigenère problem set.
In potem se bomo potapljali v pregled Quiz 0
in preživite malo časa recapping kaj smo se pogovarjali o
v vsakem od predavanj do sedaj, bomo tudi to nekaj težav
od kvizov preteklega leta.
Tako fantje imajo dober način za pripravo na to.
>> Za začetek, sem škorenj ki gre gor nekaj dobrih rešitev
Za prejšnjega niza problem, problem Set 2, v tem prostoru.
Če vi vsi zadeti to povezavo,
in če kliknete svoje ime in kliknite na moji prvi reviziji
boste videli caesar.c, ki je točno tisto, kar sem iskal na.
Pogovorimo se o tem res hitro.
To je samo vzorec rešitev.
To ni nujno najboljše rešitve.
Obstaja veliko različnih načinov za napisati to,
vendar pa obstaja nekaj stvari, ki sem jih želel izpostaviti
da sem videl, ko sem razvrščanje, pogoste napake, ki mislim, da
Ta rešitev pa zelo dobro delo z njimi.
>> Prvi ima nekakšen komentar na vrhu glave.
Na progah 1 do 7 vidite podrobnosti,
Kaj natančno ta program počne.
Dobro utečena praksa, ko pišete C kodo
glede na to, če je vaš program vsebuje v eni datoteki ali
ali je bilo razdeljeno na več datotek, da so neke vrste
usmerjanje komentar na vrhu.
To je tudi za ljudi, ki gredo ven in pisanje kode v resničnem svetu.
To je, če oni dajo podatke o avtorskih pravicah.
Spodaj # vključuje.
On line 16 pa je to # define, ki jih bomo vrnili v zelo malo.
In potem, ko je funkcija začne, ko se začne glavna,
ker je ta program so vsi zajeti v enem samem delovanju
Prva stvar, ki se zgodi, in to je zelo idiomatičen in tipično za C-
da se v ukazni vrstici argumenti, je, da takoj preveri
>> Za argument število, argc.
Tukaj vidimo, da je ta program pričakuje 2 argumente natančno.
Ne pozabite, to je to prva trditev, da je gradbena 1
To je vedno ime programa, ki se je teči,
ime izvedljive datoteke.
In kaj je to ne preprečuje, da bi uporabnik pri izvajanju programa
z bolj ali manj argumentov.
Zato smo želeli preveriti za to takoj, ker
ne moremo dejansko dostop do te argv paleto tukaj zanesljivo
dokler ne bomo preverili, kako velik je.
>> Ena od pogostih napak sem videl ljudi, ki bi takoj šel v
in zgrabi argv [1].
Ti bi zgrabi osrednjo trditev iz tabele in storite, da preverim na to,
in potem bi ti naredil test za argc, kot tudi naslednji test,
ali je prvi argument je dejansko celo ob istem času,
in da ne deluje, ker v primeru, da ni nobenih argumentov dobavljeno
boš oprijemalne argument, da ni tam ali poskus, da zgrabite tisto, ki je ni bilo.
>> Druga velika stvar, da opazite, da
si vedno želeli natisniti neke vrste koristnih sporočilo o napaki
za uporabnika usmerjati učence.
Prepričan sem, da ste vsi zaganjali programe, kjer naenkrat se sesuje,
in dobiš to smešno malo okno, ki pops gor in reče:
nekaj hudo skrivnosten in morda vam daje kodo napake ali kaj podobnega
da nima smisla.
To je, če si res želite zagotoviti nekaj koristnih
in usmerjena k uporabniku, tako da, ko jo vodijo gredo "Oh," face palm.
"Točno vem, kaj naj storim. Vem, kako to popraviti."
>> Če ne natisniti sporočilo, potem pa na koncu dejansko
pri čemer si iti preveriti izvorno kodo
ugotoviti, kaj je šlo narobe.
Obstaja tudi nekaj časa, da boste uporabljali različne kode napak.
Tukaj smo samo uporabil eno reči, da je bila napaka,
je prišlo do napake, je prišlo do napake.
Večji programi, programi, ki so pogosto imenovane drugih programov,
se bo vrnil neke vrste posebnih kod napak v različnih scenarijih
za programsko sporoči, kaj bi se sicer
šele raba lep angleški sporočilo za.
Kul.
Ker delamo navzdol, lahko vidite, da potegnete ven ključ.
Mi test, da vidim, če je ključ paše.
Smo dobili sporočilo od uporabnika.
Razlog, da to storite v to storijo, ko zanko in to je nekaj, kar bomo zajeli
V malo, vendar se izkaže, da je, če vnesete nadzorno D
ko prideš, da GetString poziv na terminalu
Kaj v resnici pa je poslal poseben značaj
za program.
Imenuje se ELF ali na koncu datoteke značaja.
In v tem primeru, se bo naše sporočilo niz je nična,
tako da to ni nekaj, kar smo preverili v problem sama zastavila.
>> Ampak, ko gremo naprej, zdaj, ko smo začeli govoriti o kazalci
in dinamično dodeljevanje pomnilnika na kup,
preverjanje za nično, ko imate funkcijo, ki bi lahko
vrnitev nično kot vrednost, je nekaj, kar boste želeli priti v navado.
To je tukaj predvsem za ilustracijo.
Toda, ko boš videl GetString v prihodnosti,
tako da iz problema Set 4 naprej, boste želeli obdržati to v mislih.
Še enkrat, to ni vprašanje za Težava Set 3 bodisi ker smo ne zajema še.
Na koncu smo prišli do tega dela, kjer pridemo do glavne zanke šifriranja,
in obstaja nekaj stvari, ki se dogajajo tukaj.
Najprej smo Ponovil skozi celoten niz sporočil sama.
Tukaj smo ohranili strlen klic v stanju,
ki več vas je opozoril, ni odličen način, da gredo.
Izkazalo se je, v tem primeru je to tudi ni veliko,
deloma zato, ker smo spreminjanje vsebine samega sporočila
znotraj zanke for, tako da če imamo sporočilo, ki je 10 znakov,
prvič smo začeli, da bodo za zanko strlen vrne kaj?
10.
>> Ampak, če bomo potem spremeniti sporočilo, da smo spremeniti svoje 5. značaj,
in vržemo v \ 0 značaja v 5. mesto,
na naslednji iteraciji strlen (sporočilo) ne bo vrnil, kar je storil
zelo prvič smo poudarili,
ampak bo namesto tega vrne 5, ker smo metali v tej null terminator,
in je opredeljena v nizu je dolžina
po stališču te \ 0.
V tem primeru je to odličen način, da gredo, ker smo to spremembo na mestu.
Ampak ste opazili, da je to pravzaprav presenetljivo preprosta za šifriranje
če lahko dobite matematika pravilna.
Vse kar je potrebno je, da se preveri, ali je pismo, ki si ogleduje
je velika črka ali male.
>> Razlog, da imamo le preveriti za to in nimamo za preverjanje
je alfa primer zato, ker
Če je znak velike ali male črke, če je to
potem je vsekakor črko,
ker nimamo velikih in malih številk.
Druga stvar, ki jo storite, in to je precej zapleteno,
je smo spremenili standardni Cezarjeva šifra formule
da je v opredelitvi težave set.
Kakšna je razlika v tem, da smo odšteli
V primeru velikimi črkami kapitala, nato pa smo dodali kapitala
nazaj v konec.
>> Vem, da nekateri od vas ste to storili v kodi.
Ali kdo od vas to v svojih stališčih?
Ti si to naredil. Lahko pojasnite, kaj to počne, Sahb?
Z njegovo odšteje ven, ker si mod takoj po njej,
boste morali vzeti ven, tako da način prejemanja [kašelj] položaj.
In potem ga dodate pozneje lahko prenese več kot tista, ki jo je želel.
Ja, točno tako.
Kaj Sahb rekel je, da če želimo dodati
naše sporočilo in naše ključne skupaj
in nato mod, da mod, ki ga NUM_LETTERS,
če ne bomo merilu naše sporočilo v ustrezno 0-25 območju prvič,
potem bomo morda na koncu dobili res čudno številko
ker so vrednote, ki smo si ogleduje ko pogledamo sporočila [i],
ko gledamo na i značaj naše gladke sporočila,
je vrednost nekje na tem območju 65-122
na podlagi ASCII vrednosti za velikimi A do Ž malih črk.
In tako, ko smo ga mod po 26 ali NUM_LETTERS,
saj je bila naša # define v zgornjem desnem kotu tu gor,
da se dogaja, da nam vrednost, ki je v območju 0-25,
in moramo način, da potem obsegu, da nazaj gor
in se je v ustreznem obsegu ASCII.
Najlažji način za to je, da samo lestvici vse navzdol
v razponu 0-25 na začetku,
in nato prestavite vse nazaj gor na koncu.
>> Druga pogosta napaka, da sem videl ljudi, ki vodijo v je, da
če ne dejansko to storiti takoj, luščenje
in dodate sporočilo in ključ skupaj in jih dodate, recimo,
v char spremenljivko, problem s tem
ker je sporočilo [i] je relativno velika številka za začetek-
ne pozabite, da je vsaj 65, če je velika črka znakov
Če imate velik ključ, recimo, nekaj takega kot 100,
in dodate tiste 2 skupaj v podpisali znak, da boste dobili overflow.
Vi boste dobili vrednost, ki je večja od 127,
ki je največja vrednost, ki jo lahko char spremenljivka držite.
Še enkrat, to je, zakaj bi si želeli narediti takšne stvari za začetek.
Nekateri ljudje imajo po tej zadevi s tem, če drugega in testiranje
da vidim, če bi se razlivala pred tem, da
vendar ta način dobi okoli tega.
In potem ta rešitev je natisnjen celoten niz na koncu.
Drugi ljudje izpisal znak naenkrat. Oba sta super.
Na tej točki, vidva imate kakršnakoli vprašanja, pripombe o tem?
Stvari, ki vam je všeč, stvari, ki vam niso všeč?
>> Imel sem vprašanje.
Mogoče sem zamudil med vašo razlago, ampak kako ta program
preskočite prostore za priključitev na tipko za dolžino besedila?
To je samo Cezarjeva šifra. >> Oh, oprostite, ja.
Ja, bomo videli.
V šifra Caesar smo dobili okrog tega, ker
le obrnil znakov.
Mi jih samo zamenjali, če bi bile velike ali male črke.
Ste zelo dober občutek glede tega?
Vas prosimo, da kopirate to domov, ga vzemite,
primerjati s tem, kar vi napisali.
Zagotovo vas prosimo, da pošljete vprašanja o tem preveč.
In spet, zavedati, da cilj tukaj z vašo težavo določa
ne da bi dobili vi napisati popolno kodo za tvoj problem sklopov.
To je učna izkušnja. Ja.
>> Nazaj na storiti, medtem ko zanke, če je enaka nič,
Tako null samo pomeni nič, samo zadeti nastopiti?
Nič posebnega, je kazalec vrednosti,
in jih uporabljamo za nično, če želimo povedati
imamo kazalec spremenljivke, ki kažejo na nič.
In tako običajno pomeni, da je ta spremenljivka, to sporočilo spremenljivka
prazna, in tukaj, ker smo z CS50 posebno vrsto niza,
kaj je CS50 string tip?
Ste videli, kaj je to, ko je David potegnil nazaj pokrov na predavanju?
To je funky, da je kazalec, kajne?
Prav, ja. >> To je znak *.
In tako res smo lahko zamenjate
tukaj s sporočilom char *,
in tako GetString funkcija, če ne uspešno dobili niz od uporabnika,
ne more razčleniti niza in en primer, v katerem se ne more razčleniti niza
je, če uporabnik vnese koncu značaja dokumentacije, nadzor D
ki ni nekaj, kar ponavadi ne, če pa se to zgodi
potem bo ta funkcija vrne ničelno vrednost kot način za povedati
"Hej, nisem dobil niz."
Kaj bi se zgodilo, če ne bomo dati sporočilo = null,
kar je nekaj, kar še niso bili delaš?
Zakaj bi bilo to narobe?
Ker vem, da smo se pogovarjali malo na predavanje o pomnilniških puščanja.
Ja, kaj je storil, in poglejmo, kaj se bo zgodilo.
>> Vprašanje Basil je bilo, kaj se zgodi, če ne bomo dejansko imeli
To sporočilo = null test?
Naj se pomaknite do vrha.
Vi lahko komentira to.
Pravzaprav, bom ga shranite v reviziji.
To bo revizija 3.
Kaj boste morali storiti za zagon tega programa je, da boste morali kliknite to ikono zobnika tu gor,
in boste morali dodati argument za to.
Boste morali dati ključni argument, saj želimo prenesti na argument ukazne vrstice.
Tukaj bom, da ga s številko 3. Všeč mi je 3.
Zdaj povečave nazaj ven, pri izvajanju programa.
To je tekmovanje v teku, prevajanje, oblikovanje.
Pa gremo. Čaka, da se pozove.
Če bi tip v nekaj takega kot zdravo, kam gre?
Oh, moj program je trajalo predolgo, da delujejo. Bil sem jawing predolgo.
Tukaj gre.
Zdaj sem tipa v zdravo.
Vidimo, da šifrira ustrezno.
Zdaj, kaj se zgodi, če ne bomo hitro GetString vrniti nično?
Ne pozabite, da sem rekel, da smo naredili, da s pritiskom na kontrolni D hkrati.
Jaz bom pomikanje gor. Bomo teči znova.
Building. Tu gre.
Zdaj, ko sem zadel kontrolni D
Imam to vrstico, ki pravi, opt/sandbox50/bin/run.sh Segmentacija napak.
Ali vi fantje videli, da se pred?
>> [Študent] Zakaj ni, >> Prosim?
[Študent] Zakaj ni Posmrtni v tem primeru?
Posmrtni je, vprašanje je, zakaj je tam ni Posmrtni tukaj?
Vprašanje pa je, da se lahko zgodi, vendar je Posmrtni je datoteka
, ki se shrani na trdem disku.
V tem primeru smo onemogočeno ključne odlagališč
o stečajnem strežniku, tako da ne bomo ljudje seg izjalovljen
in izgradnjo ton glavnih odlagališč.
Vendar pa lahko dobiš.
Temeljni odlagališč so takšne stvari, ki jih lahko pogosto onemogočiti,
in včasih ti.
Segmentacija kriv, da odgovorim na vaše vprašanje, bazilika,
se pravi, da smo poskušali za dostop do kazalec
, ki ni bila nastavljena, da kaže na karkoli.
Ne pozabite Binky v videu, ko Binky poskuša
iti dostop kazalec, ki je ne kaže na nič?
V tem primeru mislim, tehnično kazalec kaže na nekaj.
To kaže, da nič, kar je tehnično 0,
vendar je ta opredeljen kot v segmentu, ki ni dostopen
po svojem programu, tako da boste dobili Napaka pri razčlenjenosti
ker nisi dostop do pomnilnika, ki je v veljavnem segmentu
kot kup segmentu ali dimnika segmenta ali podatkovnega segmenta.
Kul.
Vse več vprašanj o cesarju?
>> Gremo naprej. Oglejmo si Revizija 2 res hitro.
To je Vigenère.
Tu v Vigenère
bomo sprehodili po tale precej hitro, ker, spet,
Vigenère in Cesar sta precej podobna.
Glava komentar je pred
# Define je pred izogniti z uporabo te čarobne številke.
Za lepo stvar je, da smo želeli, da se premaknete
drugačna abeceda, ali nekaj takega.
Namesto da bi šel ročno spremeniti vse 26 je v kodeksu
Lahko bi to spremenili do 27, ali jo spustite navzdol
če smo z uporabo različnih abeced, različne jezike.
Spet imamo to preverjanje argumentov štetja
in res lahko skoraj vzeti kot predlogo.
Precej vsak program, ki ga morajo imeti napisati-
če je potrebno v ukazni vrstici argumenti, saj so nekateri zaporedje vrstic
, ki se glasi takole na samem začetku.
To je ena od prvih sanity testov, ki jih želite storiti.
>> Tukaj je tisto, kar smo si bomo poskrbeli, da
Ključna beseda je veljaven in da je bil drugi pregled, da smo storili.
Obvestilo še, da smo ločeni od tega argc in 2.
Upoštevajte, da je v tem primeru ena stvar, ki smo morali narediti, je bilo namesto
uporabe na i smo želeli preveriti celoten niz,
in za to, da si dejansko morali iti po znakih
v nizu.
Ni dober način, da neko stvar na njej
ker tudi, na primer, da se bom vrnil 0
če ga ni mogoče razčleniti celo število, tako da sploh ne deluje.
Še enkrat, lepo sporočilo, da si točno to, kar se je zgodilo.
Potem sem spet ukvarjamo s primerom, ko
uporabnik vnese v nadzorni naključnega značaja D.
>> In potem je vprašanje, Charlotte prej o tem, kako nam bo uspelo preskočiti prostore
v našem nizu tukaj.
To je nekako podobno, kar smo naredili s programom Myspace
da smo v oddelku, in način, kako to delal
je, da smo spremljali število črk, ki bi jih videl.
Kot smo stopil sporočila niza, ko sva hodila po lastnostih, ki jih značaja,
smo spremljali indeks kot del naše za zanke, potem pa spremljajo tudi
število črk, zato ni posebnih znakov, ki niso števke, ki niso bele prostor
da bomo videli v ločenem spremenljivke.
In potem je ta rešitev spreminja ključ
da bi dobili celo število dejansko ključno, in to ne da na letenje,
tik preden je potem gre za šifriranje dejanski učinek sporočila.
Tukaj je nekaj rešitev, ki so bile popolnoma veliko preveč
da bi spremenil navzgor pri testiranju za veljavnost Ključ je.
Poleg tega, da se prepričajte, da značaj in ključne besede
je abecedni znak je tudi izkazalo, da v celo število
V 0-25 razponu, da se potem preskočite bi morali storiti, da kasneje v ta zanka.
Še enkrat, si lahko ogledate tukaj je to res točno isto kodo
ki smo ga uporabili pri cesarju na tej točki.
Ti delaš točno isto stvar, tako da je resnično trik je poskušal ugotoviti,
kako spremeniti ključne besede v celo število.
>> Ena stvar, ki smo tukaj, da se malo gosto
je, da smo ponovno ta izraz, mislim, da lahko rečemo,
3 ločeni krat na progah, 58, 59, 61 in.
Mi lahko kdo razloži, kaj točno ta izraz ne?
To je dostop značaja, kot si rekel.
Ja, to je [neslišno] lik ključno besedo,
in zato je število opaženih pisem, ker ste le premika vzdolž
Ključna beseda, ko si videl pismo,
tako da se bo to dejansko preskočite prostore in take stvari.
Ja, točno tako.
In potem, ko ste videli prazno ključnih besed si mod, tako da premakniti nazaj.
Točno tako. To je odlična razlaga.
Kaj je dejal Kevin je, da želimo, da indeks na ključno besedo.
Želimo, da bi dobili num_letters_seen značaj, če hočete,
če pa num_letters_seen presega dolžino ključno besedo
način, kako priti nazaj v ustrezni vrsti se bomo uporabili mod operaterja
učinkovito ovijte okoli.
Na primer, kot je na kratki, naša ključna beseda je slanina,
in to je 5 črk.
Vendar pa smo videli 6 črk v naši navadnega besedila na tej točki
6 in šifrirano.
Na koncu bomo dostop do num_letters_seen,
kar je 6, mod dolžina ključne besede, 5,
in tako bomo dobili 1, in kaj bomo naredili, je, da bomo
Dostop do 1. notranjosti znakov naše ključne besede na tej točki.
>> V redu, vsa vprašanja v zvezi Vigenère
preden gremo naprej?
Ste zelo dober občutek glede tega?
Cool, super.
Želim, da se prepriča, da fantje so dobili priložnost videti kodo
da mislimo, da izgleda dobro in imeli priložnost, da se učijo od njega.
To bo zadnja bomo uporabljali prostore za zdaj,
in da bomo prehod zdaj, in sem šel na cs50.net/lectures
tako da lahko naredimo malo pregleda kviz.
Najboljši način, mislim, da začnete delaš kviz pregled
je prišel na ta predavanja strani cs50.net/lectures,
in pod vsako tedna postavke, tako da če gledam tukaj na 0. teden,
Vidim, da imamo seznam tem, ki jih je potrebno vključiti v tednu 0.
>> Če kateri koli od teh tem se zdi, da vas ne poznajo
boste zagotovo želeli vrniti nazaj in Ribiči skripta in morda
celo posneto skozi predavanja, si jih ogledate še enkrat, če želite,
da bi dobili občutek za to, kaj se dogaja z vsako od teh temah.
Bom rekel še dodatno letos eno kul sredstev, ki smo jih dobili
je te hlače, da smo ustvarili, in če pogledaš na teden 0,
nimamo vseh temah, ki, ampak imamo kar nekaj izmed njih,
nekatere težje tiste, tako gledal te hlače še enkrat
je dober način, da prideš do hitrosti.
Predvsem bom dal v vtič za 3 na dnu, saj sem jih.
Ampak, če ste borila z binarno, hex, bitov, da vrsta stvari,
binarno je odličen kraj za začetek.
ASCII je še eden, ki je dobro tudi ogledati.
Lahko tudi mi paziti na 1.5x hitrosti, če bom prepočasen za vas.
Ker je pregled, vas prosimo, da to storim.
>> Samo začeti zelo hitro, bomo šli skozi nekaj teh težav kviz
Samo hitro churn skozi to.
Na primer si oglejmo problem 16, da imam prav tukaj na forumu.
Imamo to naslednji obračun v binarno,
in želimo pokazati vsako delo.
Ok, bom dal to priložnost.
Vidva bi morala slediti skupaj s papirjem,
in bomo to zelo hitro.
Želimo, da opravlja naslednje izračun v binarno.
Imam 00110010.
In jaz bom dodal, da mu 00110010.
Za matematiki geniji po skupaj doma,
To je dejansko pomnožimo z 2.
Začnimo.
Bomo po isti algoritem dodatek, ki ga opravljamo
ko smo dodali decimalne številke skupaj.
Res je edina razlika v tem, da se zanka okoli nazaj
ko bomo imeli 1 + 1, namesto enkrat pridemo do 10.
>> Če začnemo z desne, res hitro, kaj je prvo mesto?
[Študent] 0. >> [Nate H.] 0.
Super, druga številka?
[1] Študent.
[Nate H.] Je 1? 1 + 1 je?
[Študent] 10.
[Nate H.] Točno, kaj je znak, da sem napisal prav pod 2 tiste, dodanih skupaj?
[Študent] 1, 0, ali 0, nato pa nosijo 1.
[Nate H.] 0 in izvedbo 1, točno.
Naslednja je ena gor, Basil, si.
Kaj je tretja? >> [Basil] 1.
[Nate H.] 1, popolna. Kevin?
[Kevin] 0. >> [Nate H.] 0, Charlotte?
[Charlotte] 0. >> [Nate H.] Ja, in kaj naj storim?
[Študent] 1.
[Nate H.] In kaj naj naredim? In potem sem nositi 1.
Odlično, Sahb? >> [Sahb] Zdaj imate 1.
[Nate H.] In kaj naj storim tukaj?
[Sahb] Nato za naslednjo imate 1, ker ste prenesene 1.
[Nate H.] Super, da sem ga lahko končal.
Kul.
[Študent] Ali 0 + 0 = 0?
0 + 0 = 0.
1 + 1, tako kot si rekel, je 10 ali 1, 0, ne.
10 je napačno ime, saj mi 10 pomeni število 10,
in to je Šala o tem, kako ga bomo zastopa, ko ga bomo pisno.
Predstavljamo številko 2 za 1, 0, število 10 je nekoliko drugačna.
>> Kaj je lepo o vrste binarno je, da res ne, da je veliko
primerov, ki jih morate naučiti.
Tam 0 + 0 = 0, 0 + 1 = 1,
1 + 1 je 0, in potem nadaljujte z 1,
in potem si lahko ogledate tukaj na tretjem stolpcu, ki ga je prav
smo imeli to 1, 1, 1 in.
In 1 + 1 + 1 je 1,
in nosiš še eno 1.
Ko delaš binarno seštevanje, precej preprosta.
Jaz bi naredil nekaj več od tega, da sami preverijo duševno zdravje
Preden vstopite, ker je to
Verjetno nekaj, kar bomo videli na kvizu.
Zdaj pa to storiti naslednjič, kot dobro.
Naredimo problema 17.
Bomo pretvoriti naslednjo številko binarne v desetiško.
Imam 10100111001.
Ne pozabite, v binarni video, ki sem ga opravil
Šel sem skozi nekaj primerov, in sem pokazal, kako
vse deluje, ko boste to počeli v decimalno.
Ko delate v decimalni zastopanja Mislim, da smo
Na tej točki v naših življenjih, da tekoče govori to, da
to je zelo enostavno prikriti mehanike, kako to dejansko deluje.
>> Toda storiti hitro Rekapitulacija, če imam številko 137
To pravzaprav pomeni, in še enkrat, to je v decimalni zastopanja,
Številka 137 v desetiško pomeni, da imam 1 x 100 x 10 + 3 + 7 x 1.
To je vse, da ostane na zaslonu.
In potem, če pogledaš na teh številk tukaj,
100, 10 in 1, boste videli, da oni dejansko vsa pooblastila za 10.
Imam 10 m², 10 in 10 ¹ na nič.
Imamo podobno reč v binarno,
razen, da je naša osnova, kot mu pravimo, je 2 namesto 10.
Ti 10s, da sem napisal tukaj na dnu,
ta 10 m², 10 ¹, 10 do 10, nič je naša osnova,
in eksponent, 0, 1 ali 2,
je razvidna iz položaja številko v številki, ki smo napisali.
1, če gledamo na to, to je 1 na 2. mestu.
The 3 je v 1. mesto in 7 v 0. položaju.
Tako smo dobili različne eksponenti spodaj za naše baze.
>> Po vsem tem bova, pravzaprav, veste kaj?
Naredili bomo, kje so moje undo gumb iti?
Tu gre.
Všeč mi je ta stvar razveljaviti.
Po tem mislim, da mi vsaj
Najlažji način, da začnete pretvorbo binarno število
ali šestnajstiško število, kjer je osnova 16
in ne 10 ali 2 je, da gredo naprej in zapišite
osnove in eksponenti za vse številke v mojem binarno število na vrhu.
Če začnemo z leve na desno še enkrat,
ki je nekako protislovno,
Vrnem spremenite v črno-tukaj imamo 2 na 0. mesto,
in potem imamo 2 ¹, 2 ²,
in potem 2 do 3, 2 do 4, 2 do 5, 6,
7, 8, 9 in 10.
Te številke sem izpisano so vsi eksponenti.
Sem samo napisal osnove tukaj v prvem 3 samo za prostor.
>> Na tej točki se bom, da gredo naprej in sem dejansko dogaja, da zbrišete
Stvari, ki smo v decimalko, če je to v redu.
Vi ste vsi dobili to.
Tisti, ki ste gledali karte Prepričan sem, da bodo lahko, da me nazaj, če želite.
Preklop nazaj na peresnik.
Torej, kaj lahko storimo, če vidva nista povsem do hitrosti na svojih pooblastil 2,
To je povsem v redu.
To se zgodi. Razumem.
Nekoč sem imel razgovor za službo, kjer so mi povedali, kar bi moral vedeti vsa pooblastila za 2
skozi 2 do 30..
To ni delo imam.
Kakorkoli že, lahko greste naprej in to v matematiki tukaj,
vendar z binarno ni res smiselno,
in niti ne smisla z decimalno ali šestnajstiško bodisi
narediti math, kje ste ničel.
Ogledate si lahko imam tukaj 0, 0 je tukaj, tukaj, 0, 0 tukaj, tukaj, 0, 0 tukaj.
Zakaj se ne bi bilo smiselno, da to dejansko math
pri izračunu višine moč 2 za ta položaj?
Točno tako, kot je Charlotte je dejal, bo 0.
Lahko pa tudi prihranite čas, če izračun moči 2 ni tvoja močna točka.
V tem primeru potrebujemo le za izračun za 2 do 0, ki je-?
[1] Študent.
[Nate H.] 1, 2 do 3, ki je-?
[Študent] 8. >> [Nate H.] 8.
2 do 4?
[Študent] 2. Žal mi je, 1.
[Nate H.] 2 do 4, je 16, točno tako.
2 do 5, Kevin? >> 32.
[Nate H.] 32, 2 do 8?
[Študent] 32 x 8, 256.
[Nate H.] Perfect.
In 2 na 10?
[Študent] 1024.
[Nate H.] Ja, 1024.
>> Ko imamo te številke lahko kilometrov jih vse gor.
In to je, če je to res pomembno, da naredite nekaj stvari.
Eden je šel počasi in preverite svoje delo.
Lahko povem, da je 1 na koncu tega števila,
zato sem zagotovo dobili liho število, kot moj rezultat,
ker so vse ostale pa se bodo celo številke
glede na to, da je binarno število.
Druga stvar je, če prideš do te točke na testu
in ste ga napisali tako daleč
in ti zmanjkuje časa
pogled na število točk, da je ta problem treba.
Ta problem, kot lahko vidite, če se obrnete nazaj na moj laptop res hitro-
Ta naloga je vredna 2 točki, tako da to ni vrsta Poleg tega
ti bi moral iti skozi, če ste res v časovni stiski.
Ampak bomo preklopiti nazaj na iPad, in bomo šli skozi to zelo hitro.
>> Všeč mi je delal majhne številke 1.
ker se mi zdi, da je lažje.
Všeč mi je 32 in 8, ker gredo skupaj precej enostavno, in smo dobili 50.
16 in 1 dobi 17.
Tam smo dobili 57,
in potem bomo lahko vse ostalo o tem, da lahko naredimo 57, 156.
Daj no.
Človek, no, pa poglejmo.
Imeli smo 57, 256 in 1024.
Na tej točki, bi raje šel skozi.
Nimam pojma. Jasno sem morala bral o tem.
7, 6, 4, dobiš 17.
1, 5, 5, 2, 13.
Potem smo dobili 3, nato pa smo dobili 1.
1337.
Pirh, kdo?
Ali kdo prepozna to številko?
Chris prepozna številko. Kaj to pomeni, Chris?
[Chris] Leet.
Leet, tako da, če pogledaš na to, da izgleda kot Leet.
Hacker stvari. Pazi, da takih stvari z vmesnim ali kviz, namesto.
Če vidite to vrsto stvari in se sprašujete, "Huh,"
ki bi lahko dejansko nekaj pomeni.
Ne vem. David rad ga dajo noter
To je dober način, da sanity check it.
Kot v redu, vidim, kaj se dogaja.
>> To je teden 0/Week 1 stvari.
Če želimo preklopiti nazaj na naš laptop zdaj,
pomanjšanje, in nekaj drugih stvari.
Tam je ASCII, ki smo počeli veliko težav s nizov.
Ta pojem kapitala A. Kaj je to res?
Vedoč, da je decimalno število.
65 je tisto, kar je razporejena v ASCII tabeli,
in da je torej, kako računalnik ga zapiše,
in to je, kako smo bili Pobegnili z dejansko pisanje
znak kapitala in male črke znak
V nekaterih od teh rešitev in problematičnih sklopov, ki ste ga opravljali.
Nekaj ​​drugih stvari.
Imamo izjave, matematične izraze, pogoje, zank, spremenljivke in niti.
>> Tisti, ki vse zdi smiselno v večjem delu?
Nekatere od teh izrazov je malo funky na trenutke.
Rad mislim, da je izjava, kot za večino del nečesa, kar se konča s podpičjem.
Izjave, kot so x = 7, ki določa spremenljivke,
predvidoma imenovan x = 7.
Verjetno x je tudi vrsta, ki lahko shranite številko 7,
tako da je int ali morda Likvidna sredstva oziroma kratkoročno ali znak,
nekaj takega.
Boolean izraz uporablja te dvojni enaka
in pok enaka ali ne znaša manj kot, večja od
manjša ali enaka, vse to vrsto stvari.
Razmere pa so, če else stavki.
Bi se spomnil, da ne more imeti drugega, ne da bi ustrezno, če.
Prav tako ne morete imeti drugje, če to ne ustreza, če.
Loops, opozoriti na 3 vrste zank smo bili kovanje v vas
za zadnjih nekaj problematičnih delov in sklopov.
Uporaba tega pa, če ste dobili navodilo za vnos,
uporabo, medtem ko zanke do posebnega pogoja, je res,
in nato z uporabo tistih zank, če morate
vedeti, katere ponovitev zanke ste trenutno je, kako mislim o tem.
Ali pa, če delaš za vsak znak v nizu želim, da narediš nekaj,
Za vsak element v matriki želim narediti nekaj, da ta element.
>> Niti in prireditve.
To smo ne pokriva tako izrecno C,
vendar ne pozabite, to iz nič.
To je pojem, ki ima drugačne abecede.
To je tudi ta pojem oddajanje dogodek.
Nekateri ljudje ne uporabljajo oddajati v svojih projektih na začetku,
kar je popolnoma v redu,
vendar so 2 različne načine za rokovanje s to večji problem, imenovane vzporednosti,
ki je kako priti programi za izvajanje
ali navidezno izvede ob istem času?
Različne naloge izvaja druge naloge, hkrati pa so tudi teče.
To je, kako je vaš operacijski sistem zdi, da dela.
Zato je, čeprav, na primer,
Sem dobil moj brskalnik teče, lahko vklopite tudi Spotify in igra pesem.
To je bolj stvar konceptualnega razumevanja.
Jaz bi si na kratko niti
Če želite izvedeti več o tem.
>> Poglejmo, verjamem, da bi lahko bil
Problem pri tem v eni izmed njih.
Še enkrat, mislim, da niti in dogodki niso nekaj, kar bomo zajeli v C
samo zato, ker je to bistveno težje kot v Scratch.
Ne bi smel skrbeti za to, toda zagotovo razumeli koncepte,
razumeti, kaj se dogaja.
Preden gremo naprej, vsa vprašanja na teden 0 gradivo?
Vsi zelo dobro počutim?
Razumevanje spremenljivke in kaj je spremenljivka?
>> Gremo naprej. Teden 1.
Nekaj ​​stvari tukaj, ki niso bili posebej zajeti
V kvizu pregled nujno in tudi bolj konceptualne stvari, da misliti.
Prvi je ta pojem, kar izvorno kodo, prevajalniki in objektno kodo so.
Kdorkoli? Basil.
Je objektno kodo, mislim izvorna koda je tisto, kar si dal v Jek,
in objekt številka je tisto, kar Jek daje ven, tako da lahko računalnik bere program.
Točno tako.
Izvorna koda je koda C, ki ga dejansko tip gor.
Šifra je tisto, kar boste dobili od Jek.
To je 0s in 1s v tej binarni obliki.
Torej, kaj se zgodi, če imate cel kup predmetov datotek,
pravijo, da ste izdelavo projekta ali programa, ki uporablja več datotek izvorne kode,
ki so po dogovoru glede na c datoteko. končnico.
Zato imamo caesar.c, vigenère.c.
Če pišete programe Java jim daš končnico. Java.
Python programov imajo končnico PY pogosto..
>> Ko imate več. Files C, jih prevesti.
Jek izpljune vse to binarno smeti.
Potem pa zato, ker si samo želim 1 programa
imate povezovalnik povezavo vseh teh datotek predmeta skupaj
1 v izvršljiv pila.
To je tudi tisto, kar se zgodi, ko uporabljate CS50 knjižnico, na primer.
Knjižnica CS50 je tako, da. H header datoteko
da ste prebrali, da je # includecs50.h.
In potem je tudi posebno binarno datoteko knjižnice
, ki je bila zbrati, da je 0s in 1s,
in da, sem zastavo, tako da, če se vrnemo v naše prostore in pričakujemo zelo hitro
V kaj se dogaja, ko se ozremo na naše Jek ukaz,
tisto, kar smo dobili, je to naša izvorna koda datoteko tukaj.
To so kup prevajalnikov zastav.
In potem čisto na koncu, te-l oznake povezava v
dejanske dvojiške datoteke za te 2 knjižnicah, CS50 knjižnico in nato math knjižnice.
>> Razumevanje vsako vrsto namena datotek "
V postopku zbiranja je nekaj, kar boste želeli, da bi lahko
da vsaj visoko pregled ravni v.
Izvorna koda pride noter Objektni kod pride ven.
Datoteke koda objekta povezati, in dobiš lep, izvršljivo datoteko.
Kul.
To je tudi, kjer lahko dobite napake na več mestih
V procesu zbiranja podatkov.
To je, če, na primer, če se ta povezuje zastavo,
CS50 zastavo, in ga izpustite iz prostorov ali če delate v svojo kodo,
to je, če boste dobili napako v fazi povezovanja,
in bo povezovalnik rekel: "Hej, imenovano funkcijo GetString
da je v CS50 knjižnici. "
"Rekel si mi, da je v CS50 knjižnico, in ne najdem kode za to."
To je, kjer boste morali povezati v, in to je ločeno
od prevajalnik napako, ker prevajalnik išče skladnje in takih stvari.
To je dobro vedeti, kaj se dogaja, kdaj.
>> Druge stvari, ki jih vem o tem.
Jaz bi rekel, da si zagotovo želeli, da pogled na kratko na typecasting storiti z Jordanijo
razumeti, kaj ints so pod pokrovom,
kaj znakov so pod pokrovom.
Ko govorimo o ASCII in ga dejansko pogled na ASCII tabelo,
kaj počne nam daje pod pokrovom videz
o tem, kako računalnik dejansko predstavlja kapital in številko 7
in vejica in vprašaj.
Računalnik ima tudi posebne načine za zastopanje
Številka 7 je celo število.
To je poseben način, ki zastopa več kot 7 spremenljivo število točk,
in to so zelo različni.
Typecasting je, kako poveste računalnik "Hej, hočem pretvoriti
iz ene predstavitve v drugo predstavitev. "
Zakaj ne bi pogled na to.
>> Prav tako bi si na kratko o knjižnicah in kratko o prevajalniki.
Tisti, ki govori o procesu zbiranja podatkov,
kaj knjižnica in šel čez nekatera od teh vprašanj, da bi se vprašal tebe.
Vprašanja v zvezi tedna 1 material?
Ali obstajajo teme tukaj, da se zdi zastrašujoče, da želite kritje?
Poskušam udarec po večini prejšnjih temah, tako da bomo lahko prišli do
kazalci in naredil malo rekurzije.
Misli?
Karkoli kritje?
Čas je za nekatere morda čokolado?
Vi delate z njim.
Bom obdržati na mojem srkanje kave.
2. teden.
Dobra ideja, dobra odločitev.
V tednu 2 smo se pogovarjali malo več o funkcijah.
>> V prvih nekaj problematičnih skupin nismo zares napisal nobene funkcije sploh
razen kar deluje?
[Študent] >> Main Main., Točno.
In tako smo videli različne kostume, da je glavni nosi.
Tam je tista, v kateri je potrebno nobenih argumentov,
in smo pravkar rekel praznino v med oklepaju,
in potem je tu še druga, če si želimo, da argumente v ukazni vrstici,
in kot smo videli, da je, če imate int argc in argv paleto niz
ali zdaj, ko smo dejansko izpostavljeni niz, da je char *, da je
bomo začeli pisati kot char * argv in nato konzole.
V Set Problem 3, fantje videli kup funkcij,
in ti izvajajo kup funkcij, pripravi, poglej gor, Izokrenuti.
Prototipov so bile vse napisano tam za vas.
>> Kaj sem hotel govoriti o tukaj nalog, ki zelo hitro
je, da so 3 deli zanje, ko ste napisali funkcijo.
Moraš natančno povratno obliko funkcije.
Moraš navesti ime funkcije, nato pa morate navesti
seznam argumentov ali seznam parametrov.
Na primer, če bi bil jaz napisati funkcijo, da povzamem kup celih
in se nato vrne k meni vsoto, kar bi bila moja vrnitev tip
če sem hotel, da bi povzeli cela in se nato vrne vsoto?
Potem pa ime funkcije.
Če grem naprej in pisati v zeleni barvi, ta del je vrnitev tip.
Ta del je ime.
In potem v oklepaju
je, če sem dal argumente,
pogosto skrajšano izbir, včasih imenovanih params za parametre.
In če ga imate, ga samo določi enega.
Če imate več jih ločite z vejico 1.
In za vsak argument mu daš 2 stvari, ki so, Kevin?
[Kevin] Moraš dati na vrsto in nato ime.
In potem ime, in ime je ime, ki ga boš uporabila
da se sklicuje na to trditev v znesku funkcijo,
v funkciji, ki jo trenutno piše.
>> Saj ni treba, na primer, če bom povzamem,
torej množica celih-Bomo naredil int array,
in jaz dam nekaj zavitih oklepajih so-
potem ko sem opraviti array funkcijo SUM
Sem ga prenesti na prvem mestu na seznamu argumentov.
Toda matrika, ki sem poslati v ne imeti ime Arr.
Arr se bo, kako sem se nanašajo na to trditev v telesu funkcije.
Druga stvar, da moramo upoštevati,
in to je nekoliko drugačna od funkcije, ampak mislim, da je pomembno,
je, da je v C, ko pišem funkcijo, kot je ta
Kako naj vem, koliko elementi so v tem polju?
To je neke vrste trik vprašanje.
Pogovarjala sva se o tem malo v oddelku prejšnji teden.
Kako naj vem, število elementov znotraj array v C?
Ali obstaja način?
>> Izkazalo se je, da ne obstaja način, da veš.
Moraš jo prenesti na ločeno.
Obstaja trik, da lahko narediš
če ste v isti funkciji, v kateri je bila razglašena za niz,
in delate z dimnika matrike.
Ampak to deluje samo, če ste v isti funkciji.
Ko boste opravili niz na drugo delovno mesto ali, če ste prijavljeni niz
in si dal to vrsto na kup, ste uporabili malloc
in da je vrsta stvari, so vse stave off.
Potem boste dejansko morali opraviti približno
poseben razlog ali drug parameter,
vam pove, kako velik je matrika.
V tem primeru, bi želeli uporabiti vejico Žal mi je, da se bo z zaslona tu-
in sem se ustavila še v drugi argument
in ga imenujemo int len ​​za dolžino.
>> Ena stvar, ki bi lahko prišel na kvizu
vas prosim, da napišete ali izvajajo določeno funkcijo, imenovano nekaj.
Če ne bomo vam prototip, tako da je vse to tukaj,
ves ta nered, se imenuje funkcija izjavo ali funkcijo prototip,
To je ena od prvih stvari, ki jih boste želeli Zakovati, če je ne glede na
vam takoj na kvizu.
Drugi trik, ki sem se naučil, je, da
rekel mi dal prototip funkcije, in mi rekel: "Hej, moraš napisati."
Znotraj zavite oklepaje, ki jih imate na kvizu
Če opazite, da je donosnost tip in opazite, da se vrnejo v
je nekaj drugega kot praznina, kar pomeni, da funkcija ne vrne ničesar,
nato pa eno stvar, ki jo zagotovo želeli storiti, je napisati
nekakšno izjavo vrnitvi na samem koncu funkcije.
Vrni se, v tem primeru bomo dal prazno, ker želimo, da izpolnite v prazno.
Ampak to pride misliš na pravi način, kako bom se lotiti tega problema?
In to vam pove, da boste morali vrniti vrednost
s pojasnilom o funkciji.
>> Ja. >> [Študent] Ali ime uporablja, ko bomo pisno kodo, na kvizu?
Tako kot zatoka in da je vrsta stvari? >> [Študent] Ja.
Ne, ni tako veliko.
Mislim, da je veliko, to je nekaj, kar bomo pojasniti, na kvizu na dan,
ampak ponavadi skrbi # obsega in vrste stvari, to je nekako zunaj.
[Študent] Ali želite komentirati vaše lastnoročno kodo?
Ali želite komentirati vaše lastnoročno kodo?
Komentiranje je vedno dobro, če ste v skrbeh, delno kredita
ali želite, da sporočijo svojo namero z grader.
Ampak, spet bo pojasniti, na kvizu sam in na dan kviz,
ampak ne verjamem, da boste morali pisati komentarje, ne.
Ponavadi ne, ampak to je zagotovo reč, kjer
lahko sporočijo svoje namere, kot: "Hej, to je, če grem z njo."
In včasih, da lahko pomaga pri delni kredita.
Kul.
>> Basil.
[Bazilika] Kakšna je razlika med razglasitvi, recimo, int Lang
V argumentov ali parametrov v primerjavi razglasitvi spremenljivke v funkciji?
Vau, kava znižala sapnika.
[Bazilika] Kot stvari, ki jih želite dati v argumentih.
Ja, to je veliko vprašanje.
Kako se odločite, kaj stvari, ki jih želite dati v obrazložitvi
v primerjavi Katere stvari morate storiti znotraj funkcije?
V tem primeru smo vključili oboje kot argumente
ker oni so nekaj, kdor se bo uporabil funkcijo vsote
Treba je določiti tiste stvari.
>> Vsota funkcije, kot smo govorili, ni mogoče vedeti,
kako velik niz je dobil od klicatelja ali kdor uporablja funkcijo vsote.
To nikakor ne more vedeti, kako velika je ta matrika.
Razlog peljemo na tej dolžini tukaj kot argument
zato, ker je to nekaj, kar smo v bistvu govori klicatelja funkcijo,
Kdor bo uporabil funkcijo vsote, "Hej, ne samo, da boste morali, da nam niz
od ints, imate tudi, da nam pove, kako velik niz, ki ste nam je. "
[Bazilika] Tisti, ki bodo tako lahko argumenti v ukazni vrstici?
Ne, to so dejanski argumenti, ki bi lahko preide na funkcijo.
>> Naj jaz novo stran tukaj.
Bi [Bazilika] Kot ime pass-
[Nate H.] Če imam int main (void)
in jaz bom dal v moji vrnitvi 0 dol na dnu,
in povedati hočem, da pokličete funkcijo vsote.
Hočem reči, int x = vsota ();
Če želite uporabljati funkcijo vsote moram opraviti tako v polju, da želim, da bi povzeli
in je dolžina niza, tako da to je, če
ob predpostavki, da sem imel vrsto ints,
reči sem imel int numbaz [] = 1, 2, 3,
vrste uporabe, ki je vdrl do sintakso tam,
potem kaj želim storiti, je, skratka bi želel prenesti v
tako numbaz in številka 3
povedati funkcijo vsote "V redu, tukaj je polje Želim si, da bi povzeli."
"Tukaj je njegova velikost."
Ima to smisel? Ali to odgovor na vaše vprašanje?
>> V mnogih pogledih je pa vzporedno, kaj delamo z glavno
ko bomo imeli argumente v ukazni vrstici.
Program kot Cezarjeva šifra, na primer, da je potrebno
argumenti v ukazni vrstici ne bi mogli storiti ničesar.
Ne bi vedel, kako za šifriranje, če nisi povedal, kaj je ključno za uporabo
ali, če tega nisi povedal, kaj si hotel niz za šifriranje.
Pozove za vnos, to je, če imamo 2 različne mehanizme
za sprejemanje vnosa od uporabnika, za sprejemanje informacij od uporabnika.
Za Problem Set 1 smo videli to GetInt, GetString, GetFloat pot
spodbudi za vhod in je pozval, da z uporabo standardnega vhodni tok.
To je nekoliko drugačna.
To je nekaj, kar lahko naredite naenkrat, v nasprotju z
Ko odprete program, ob zagonu program teče.
Argumenti ukazne vrstice so vsi navedeni ob zagonu program teče.
Smo bili z mešanjem dveh od teh.
Ko smo se uporabljati argumente za funkcijo, to je podobno kot argumenti v ukazni vrstici v glavni.
To je, ko ga pokličeš funkcijo morate povedati
kaj točno potrebuje za opravljanje svojih nalog.
Še ena dobra stvar, ki si in bom pustil gledate na to v svojem prostem času,
in je bila zajeta v kvizu, je ta pojem obsega
in lokalne spremenljivke v primerjavi z globalnimi spremenljivkami.
Ali pozorna na to.
>> Zdaj, ko smo dobili na ostalih stvareh,
v tednu 3 smo začeli govoriti o iskanju in razvrščanju.
Iskanje in razvrščanje, vsaj v CS50,
je zelo uvod v nekaj bolj teoretičnih delih računalništva.
Problem iskanja, problem razvrščanja
so velike, kanonske težave.
Kako se vam zdi posebno številko v paleto milijard števil?
Kako se vam zdi posebno ime znotraj imenika
, ki je shranjena na vašem prenosnem računalniku?
In tako smo se uvede ta pojem asimptotičnim vedno vodijo
da bo res količinsko kako dolgo, kako težko je to problem so,
kako dolgo traja, da rešiti.
V Menim, da je kviz 2011 pa je problem, da mislim, da si zasluži
zajema zelo hitro, kar je ta, problem 12.
O ne, to je Omega.
>> Tu govorimo o najhitrejšem možnem času delovanja
za določen algoritem, nato pa najpočasnejši mogoče teči čas.
To Omega in O so res samo bližnjice.
Oni simbolov bližnjice za povedati
kako hitro se v najboljšem možnem primeru bo naš algoritem run,
in kako počasi v najslabšem možnem primeru bo naš algoritem deluje?
Naredimo nekaj teh, te so zajemale tudi
v kratkem na asimptotične zapis, ki sem ga zelo priporočam.
Jackson je naredil res dobro delo.
Z iskanjem binarni, govorimo o binarnem iskanju kot da algoritem,
in smo ponavadi govorimo o tem po svoji veliki O.
Kaj je velik O?
Kaj je najpočasnejša možna čas delovanja binarnega iskanja?
[Študent] N ²?
Zapri, mislim, da je podobno.
To je veliko hitreje kot to.
[Študent] Binary? >> Ja, binarno iskanje.
[Študent] je log n.
Prijavite n, tako da kaj vpisati, n pomeni?
To polovice ga vsako ponovitev.
Točno, tako da v primeru morebitne najpočasnejši,
torej, če imate urejen niz
na milijon števil in števila iščete
je bodisi zelo prvi element v matriki ali zadnjega elementa v matriki.
Ne pozabite, binarno iskanje algoritem deluje tako, da si v srednji element,
vidim, če je to tekma, ki jo iščete.
Če je tako, potem super, da ste ga našli.
>> V najboljšem možnem primeru, kako hitro naredi vožnjo binarno iskanje?
[1] Študenti.
1, je stalna čas, veliki O od 1. Ja.
[Študent] Imam vprašanje. Ko rečeš prijavite n, misliš v zvezi z osnovo 2, kajne?
Ja, to je pa druga stvar.
Pravimo log n, in mislim, da ko sem bil v srednji šoli
Vedno sem domneva, da je bila osnova 10 dnevnik.
Ja, ja, se prijavite baza 2 običajno je tisto, kar bomo uporabili.
Spet vrača v binarno iskanje, če iščete bodisi
element na samem koncu pa element na samem začetku,
ker začneš na sredini in potem zavržejo
kar 1/2 ne izpolnjuje meril, ki jih iščete,
in greš na naslednjo 1/2 in 1/2 naslednji in naslednji pol.
Če sem iskal največji element v matriki celo milijonov
Jaz jo bom prepolovila na najbolj dnevnik 1.000.000 krat
preden sem končno testiranje in videli, da je element iščem
je v največji ali najvišji indeks matrike,
in bo to trajalo dnevnik n, se prijavite v višini 1 milijona časov.
>> Bubble sort.
Se vi spominjate algoritem razvrščanja mehurček?
Kevin, mi lahko daš hitro Rekapitulacija o tem, kaj se je zgodilo v algoritem razvrščanja mehurček?
[Kevin] V bistvu gre skozi vse na seznamu.
Zdi se na prvi dve.
Če je prva večja od druge 1 jim zamenjav.
Potem se primerja drugi in tretji, isto, zamenjav,
tretja in četrta, vse do konca.
Večje število bo spremljala do konca.
In potem, ko pa je več zank ste končali.
Točno, kaj je rekel Kevin, je, da bomo gledal večje število
bubble do konca niza.
Na primer, ali nam lahko sprehod skozi ta primer, če je to naš niz?
[Kevin] Boste lahko 2 in 3.
3 je večje od 2, tako da jih swap.
[Nate H.] Prav tako smo zamenjali ti, in tako smo dobili 2, 3, 6, 4, in 9.
[Kevin] Potem pa primerjajte 3 in 6.
3 je manjši od 6, zato jih pustite,
in 6 in 4, bi jih zamenjali, ker je manjši od 4 6.
[Nate H.] Prav tako sem dobil 2, 3, 4, 6, 9.
[Kevin] in 9 je večji od 6, tako da ga zapusti.
In ti pojdi nazaj skozi to še enkrat.
>> [Nate H.] Sem naredil v tem trenutku? >> [Kevin] No
In zakaj sem nisem naredil v tem trenutku?
Ker izgleda, da je urejen moj polje. Gledam na to.
[Kevin] Pojdi skozi to še enkrat in se prepričajte, da ni več zamenjav
preden boste lahko popolnoma ustavi.
Točno, tako da boste morali voditi skozi in se prepričajte, da ne obstajajo zamenjave
da si lahko na tej točki.
To je bil res samo srečo, kot si rekel, da smo se znašli
Samo da bi jim bilo 1 skozi in smo razvrščeni.
Ampak za to v splošnem primeru bomo dejansko morali to storiti znova in znova.
In v resnici je bil to primer na najboljši možen primeru,
kot smo videli v težave.
Videli smo, da je n najboljši možni primer.
Šli smo skozi polja 1-krat.
Kaj je najslabši možni primer za to algoritem?
[Kevin] N ².
In kaj to izgleda? Kaj bi bi polje videti kot da bi n ² čas?
[Kevin] [neslišno] razvrščeni.
Točno tako, če bi imel paleto 9, 7, 6, 5, 2,
Najprej želi 9 mehurček vso pot navzgor.
Po 1 ponovitvi bi imeli 7, 6, 5, 2, 9.
Potem pa bi se mehurček 7, 6, 5, 2, 7, 9 in tako naprej in tako naprej.
>> Morali bi iti skozi celoten niz n-krat,
in lahko dejansko dobil bolj natančen od tega
ker ko smo premaknili 9 vso pot navzgor v svoji zadnji možni položaj
vemo, da nikoli ne bo treba primerjati z tega elementa ponovno.
Ko smo začeli z vpihavanjem 7 do
vemo, da bomo lahko ustavi, ko je 7 je tik pred 9
saj smo že v primerjavi z 9 nanj.
Če to naredite v pameten način, da to ni res, mislim, da je veliko časa.
Ne boš primerjati vse možne kombinacije [neslišno]
vsakič ko greš skozi vsako ponovitev.
Ampak še vedno, ko govorimo o tem zgornja meja rečemo, da je
iščete na n ² primerjave vso pot skozi.
>> Greva nazaj, in ker smo začeli malo kratko o času
Jaz bi rekel, da je vsekakor treba iti skozi preostanek te tabele
izpolniti vse ven.
Pomislite na primer. Pomislite na konkretnih primerih.
To je zelo priročen in koristen storiti.
Ga potegnili.
To je neke vrste tabelo, kot greš skozi v računalništvu
kar bi bilo res začeli poznati te tako srce.
To so vrste vprašanj, ki jih dobite v intervjujih.
To so vrste stvari, ki jih je dobro vedeti,
in razmišljati o tem roba primerih res poskušal ugotoviti, kako razmišljajo o
vedoč, da za mehurček razvrstite najslabši možni nabor
rešiti s tem je tista, ki je v obratnem vrstnem redu.
>> Kazalci. Pogovorimo se malo o kazalca.
V zadnjih nekaj minutah imamo tukaj
Vem, da je to nekaj, skupaj z datoteko I / O tem je precej nova.
Ko govorimo o namig, zakaj želimo govoriti o kazalci
Kajti, ena, ko delamo v C
smo res na precej nizki ravni, v primerjavi z večino sodobnih programskih jezikih.
Mi smo dejansko sposobni manipulirati spremenljivke v pomnilniku,
ugotoviti, kje se dejansko nahaja v našem RAM.
Ko ste šli na tečaje za operacijski sistem, da boste videli
da je to spet neke vrste abstrakcije.
To dejansko ne drži.
Imamo navidezni pomnilnik, ki je skrival te podatke od nas.
>> Ampak za zdaj lahko domnevamo, da če imate program,
na primer, ko ste začeli prikazovati Cezarjeva šifra za program
Jaz bom preklopil nazaj na moj iPad res hitro-
da je na samem začetku svojega programa, če imate, recimo,
4 GB RAM-a na vaš prenosnik,
boste dobili v prahi ta kos, mi pa bomo to imenujemo RAM.
In začne se na mestu, ki ga bomo klic 0,
in se konča na mestu, da bomo poklicali 4 GB.
Res ne morem pisati. Človek, ki je vdrl.
Ko se vaš program izvaja
operacijski sistem reže do RAM,
in določa različne segmente za različne dele svojega programa, da živijo palcev
Tu spodaj je to področje nekako nikogaršnji zemlji.
Ko greš malo dlje tukaj
ste dejansko dobil mesto, kjer
Koda za vaše programa življenja.
To dejansko binarno kodo, da postane izvršljiva datoteka dejansko naložen v pomnilnik
Ko zaženete program, in živi v segmentu kode.
In kot tvoj program izvaja procesor izgleda v tem segmentu kode
da ugotovimo, kaj je naslednje navodilo?
Kaj je naslednja vrstica kode moram izvesti?
>> Tam je tudi Podatkovni segment, in to je, če ti niz konstante
se shranijo, da ste bili z uporabo.
In potem naprej do tam je ta kraj, imenovan kup.
Imamo dostop do pomnilnika tam z malloc,
in nato v smeri sam vrh svojega programa
tam je kup,
in to je, če smo bili igranje za večino začetku.
To ni v merilu ali kaj podobnega.
Veliko tega je zelo odvisna od stroja,
operacijski sistem odvisen, toda to je relativno, kako se stvari chunked gor.
Ko zaženete program in ga razglasi spremenljivka se imenuje x-
Grem pripraviti novo okno spodaj, in to se bo RAM, kot dobro.
In jaz bom pogledal.
Mi bomo pripraviti nazobčane črte, ki označuje to je le majhen del pomnilnika RAM
in ne vsega, kot smo pripraviti na vrhu.
>> Če Izjavljam celoštevilsko spremenljivko z imenom x,
potem tisto, kar sem dejansko dobil je preslikava
, ki je shranjena v tabeli simbolov mojega programa
ki povezuje ime x na tem območju spomina, ki sem jih sestavijo
Tukaj med navpičnimi vrsticami.
Če imam vrstico kode v mojem programu, ki pravi x = 7
procesor ve, "Oh, v redu, jaz vem, da živi x na tej lokaciji v spomin."
"Jaz bom, da gredo naprej in napisati 7 tam."
Kako veš, kaj je to mesto v spomin?
No, da je vse narejeno v času prevajanja.
Prevajalnik skrbi za dodeljevanje kjer vsaka od spremenljivk so šli
ter ustanovitev posebnega preslikavo oziroma povezovanje pik
med simbolom in kam gre, variabilnega ime
in če se dogaja, da živijo v spominu.
Vendar se je izkazalo, da bomo lahko dejansko dostop v naše programe, kot dobro.
To postane pomembno, ko bomo začeli govoriti o nekaterih podatkovnih struktur,
, ki je pojem, da bomo uvesti kasneje.
>> Ampak za zdaj, kaj lahko vedeli, da lahko ustvarite kazalec na tej lokaciji x.
Na primer, lahko ustvarite kazalec spremenljivke.
Ko smo ustvarili kazalec spremenljivke, ki jih uporabljamo zvezdica zapis.
V tem primeru se to pravi, da grem, da ustvarite kazalec na int.
To je tip, tako kot vsaka druga.
Dajemo ga spremenljivke, kot y,
potem pa jo nastavite enak naslov, na naslov.
V tem primeru lahko postavimo y izpostaviti x
ob naslova X, ki ga opravljamo v ta znak,
nato pa smo postavili y opozoriti na to.
Kaj to v bistvu pa je, če se ozremo na našo RAM
To ustvari ločeno spremenljivko.
To se dogaja, da ga pokličete y,
in ko je ta vrstica kode izvede
to je dejansko dogaja, da ustvarite malo kazalec, ki smo ponavadi oblikuje kot puščica,
in postavlja y opozoriti na x.
Da.
[Študent] Če x že kazalec, bi si naredil
int * y = x namesto ob 'in' znak?
Da.
Če je x že kazalec, potem lahko nastavite 2 napotke enake med seboj,
v tem primeru y ne bi kazale na x,
vendar opozarja, da ne glede x kaže, da.
Žal nam je zmanjkalo časa.
>> Kaj bi rekel v tem trenutku lahko govorimo o tem brez povezave,
ampak jaz bi rekel začeti delati s tem problemom, # 14.
Vidite lahko, da je že malo izpolni za vas tukaj.
Vidite lahko, da ko se ugotovi, 2 kazalca, int * x in y *,
in ugotavljajo, da kaže na * poleg spremenljivke je nekaj, kar se je zgodilo lani.
Izkazalo se je, da je to podobno temu, kar počnemo v tem letu.
Ni važno, če pišete * ko si razglasitvi kazalec.
Vendar smo napisali * poleg vrste
ker je zelo jasno, da ste o razglasitvi kazalec spremenljivke.
Vidite lahko, da prijavlja 2 kazalci nam 2 škatle.
Tukaj ko smo postavili x enak knjižnične funkcije malloc
kaj je rekel je razveljavilo spomin na kup.
Ta mali okno tukaj, ta krog, ki se nahaja na kup.
X kaže na to.
Upoštevajte, da y še vedno ne kaže nič.
Da bi dobili pomnilnika, za shranjevanje številko 42 v x
želimo uporabiti kakšen zapis?
[Študent] * x = 42.
Točno, * x = 42.
To pomeni slediti puščico in vrgel 42 tam.
Tu, kjer smo postavili Y in X smo y kaže na x.
Še enkrat, to je tako kot tisto, kar je povedal Kevin, kjer smo postavili y enaka x.
Y ne kaže x.
Namesto tega se kaže s tem, kar kaže na x, kot dobro.
>> In potem končno v zadnjem polju obstajajo 2 možne stvari, ki jih lahko delamo.
Ena je, da bi lahko rekli * x = 13.
Druga stvar je, lahko bi rekli, Alex, ali veste, kaj bi lahko storili tukaj?
Lahko bi rekli, * x = 13 ali-
[Študent] Lahko bi rekli karkoli int.
[Nate H.] Če bi bila ta označena kot int spremenljivko lahko naredimo to.
Lahko bi tudi rekli * y = 13, ker oni so tako kaže, da na istem mestu,
tako da smo lahko uporabili bodisi spremenljivo do tja.
Ja. >> [Študent] Kaj bi bilo videti, če bi samo rekel int x 13?
To bi lahko razglasi novo spremenljivko z imenom x, ki ne bi deloval.
Morali bi trk, ker smo prijavljeni x, da je kazalec gor.
[Študent] Če bi le imel to izjavo, samo po sebi, kaj bo to videti v obliki kroga?
Če bi imeli x = 13 potem bi imeli polje, namesto puščice
prihajajo iz škatle sva jo pripravi kot le 13 let.
[Študent] V polje. Ok.
>> Hvala za gledanje in srečno na kvizu 0.
[CS50.TV]