>> ZVUČNI 1: U redu.
Dobrodošao natrag.
Ovo je tjedan Dva CS50, a imamo Do sada su pomoću funkcije, ali
uglavnom ih uzimaju zdravo za gotovo.
Koristili smo printf koja ima nuspojava tisak
stvari na ekranu.
Koristili smo dobili-int, float dobili.
>> No, što ako stvarno želite stvoriti svoje vlastite funkcije, kao i neke od
možda već počeli Problem Set učiniti za jedan, ipak
nije strogo potrebno?
Pa, idemo naprijed i da ponovno Problem samo za to traži za
njihovo ime i ispis na nešto screen, ali pokušajte faktor neke
od zajedništva koje smo vidjeti u našem kodu do sada.
Dakle, po tome mislim sljedeće.
>> Ja ću ići naprijed i stvoriti Novi program, samo zovi
to hello.c kao i obično.
Ja ću ići naprijed i dati sebe uključuju standardni io.h na vrhu.
Idem i ja dobiti preventivno CS50 knjižnice, tako da
Ja ne bi vikao na koju prevodilac.
A sada ću ići naprijed i proglasiti int, glavni, prazninu.
>> A onda je ovdje, ovo je mjesto gdje želim za početak da outsource funkcionalnost
neke druge funkcije koje sam i sam ću pisati, ali to ne
Trenutno postoji.
Na primjer, pretpostavimo da sam htjela napisati funkciju koja mi omogućuje da
ispisati hello, zarez, te Tada neke korisničko ime.
Umjesto da nastavlja raditi printf Pozdrav,% s, ne bi li bilo lijepo da
bilo je samo funkcija zove Ne printf, ali print ime?
>> Dakle, drugim riječima, želim biti u mogućnosti napisati program koji radi malo
nešto poput ovoga.
Prvo, ja ću reći svoje printf Naziv, čime pitanja korisniku da
daj mi svoje ime, a onda sam Namjeravam koristiti poznate niz s do
deklarirati niz.
Daj mi varijabla tipa string, zovu s, i pohraniti u tom
rezultat zove se string.
No, sada je u posljednjih nekoliko tjedana, ja bi pomalo dosadnog učinili Pozdrav,% s / n.
>> I u drugim riječima, vidjeli smo to Primjer hrpa vremena, a to je
trivijalni primjer, jer postoji samo jedan linija koda tako da to stvarno nije
velika stvar da bi se ponovno upisivati.
Ali pretpostavimo da je ova linija koda zapravo su postali teret, a
to nije jedna linija koda, ali to je 10 linija koda prije par tjedana od danas,
a vi ste samo dobivanje umoran kopiranja i lijepljenja ili
prekucavanje taj isti kôd.
Zar ne bi bilo lijepo umjesto da radi printf Pozdrav,% s. i tako dalje,
Ne bi li bilo lijepo da su samo Funkcija se zove print ime koje
traje argument -
Drugim riječima, potrebno je ulaz -
, a zatim zarez.
Dakle tu funkciju, ne bi to biti lijepo ako je postojao?
Onda ne bi trebala brinuti o tome printf što je, što je% s, a sve
ove složenosti koji su nije sve što je zanimljivo.
Oni su korisni.
>> Dakle print ime, na žalost, nije bio izumio neki 40 plus godina.
Nitko ne misli da je pisanje.
No, to je ljepota ima programski jezik, baš kao u
Scratch možete definirati prilagođene blokova, tako da u C, a većina bilo kojem jeziku, možete i vi
definirati vlastite funkcionalnosti, mogu možete definirati svoje vlastite funkcije.
Dakle, iako smo dobili Glavni by automatski besplatno, možemo izjaviti
naše vlastite funkcije.
>> Tako ću napraviti malo mjesta ovdje do vrha, a ja ću da objavim
vlastita funkcija koja će izgledati malo čudno u početku, ali vratit ćemo se
natrag na to ne zadugo.
Ja ću reći prazninu, čime ukazuje na ovu funkciju obavlja
nešto, ima nuspojava, ali ne vrati nešto za mene u
isti način na koji se int ili dobili niz sama radi.
I ja ću dati ovu funkciju Naziv ispisa ime, a ja ću
odrediti da taj momak je idući u uzeti string, a ja ću nazvati da
string ime.
Mogao bih to nazvao što želim, ali sam Želite moj broj da se self-dokumentiranje.
Drugim riječima, ako je netko od vas bili su u otvorite ovu datoteku i pročitati, da bi
vrsta zaključiti iz imena da Ulaz koju ulogu je trebao igrati.
>> A sada ispod toga, ja ću otvoriti kovrčava brace i zatvorenog kovrčava brace,
i tako primijetiti da sam slijedio isti Uzorak na linijama četiri do sedam godina, kao
Pratio sam za dobar tjedan plus Sada između, recimo, devet linija i
14 koja čine glavna.
Drugim riječima, ispisali ime je još jedna funkcija.
Sada, prevodilac neće znati Nazivaju to stvar automatski
jer sam doslovno samo ga izmislili, ali to će znati uvijek nazvati glavna
automatski, a zatim, naravno, u linija 13, pozivam svoju funkciju.
I zato sam proglasila da je funkcija gore na liniji četiri prije glavnih,
ovo će naučiti prevodilac ono citat, završen citat, "print Naziv"
znači i što bi trebalo učiniti.
Dakle, ja sam nekako daje joj novu običaj blokirati u kontekstu, recimo, ispočetka.
>> Dakle, ovdje, ja mogu staviti da je vrlo čest ili ponavljajući uzorak koda držim
piše u razredu, printf Pozdrav% s,% s / n ", -
Što želim staviti ovdje?
S?
Dakle, želim mu ime u tom kontekstu.
Dakle, primijetite malo dihotomiji ovdje.
Jer sam izjavljujući svoju funkciju i ja donekle arbitrarno zove
to ispisati ime, i zato sam naveden u zagradi da je to
Funkcija traje jedan argument, vrsti što je string - tako da je riječ
ili izraz ili nešto slično - i Zovem tu tvrdnju ime, da
znači samo varijabla koja je u Opseg, da se tako izrazim, je ime.
>> S postoji samo između onoga što dva vitičastim zagradama, naravno?
Pa stvarno, baš kao i linije od 10 do 14, tako da baš kao u ponedjeljak ne mogu koristiti
S, ali ono što ja mogu učiniti je proći S ispisa u imenu.
Ispis ime samo tako dogodi da ga daju alias, sinonim, nadimak,
nazivajući je ime, a sada to koristi u ovoj liniji.
Pa sad neka mi spasiti ovo, zoom out.
>> Dopustite mi da ići naprijed i učiniti pozdraviti.
Izgleda dobro.
Nije ispljune nikakve pogreške. . / Pozdrav Enter.
Što je moje ime?
David.
I Pozdrav David.
Dakle, nije sve što je uzbudljivo, ali samo misliti sada.
Sada imaju isti sastojak kao što smo učinili u nule do
napraviti svoje funkcije.
>> No, tu je malo izazov.
Pretpostavimo da nisam stvarno mislio to kroz i ja zapravo ne
stvarno razmišljam o tome pisao koji funkcioniraju ovdje.
Osjeća se savršeno razumno.
U nule ne postoji pojam za mjesto u skripti.
Ti bi mogao staviti jedan ovdje, jedan ovdje, jedan je ovdje, a to bi moglo pokrenuti
gledati malo neuredan, ako ne ga nokautirati uredno, ali to ne
obzira gdje se fizički skripte su na zaslonu.
Nažalost, u C - a to je za razliku od jezika kao što su Java i Python
i drugima koji možda ćete biti upoznati s - žalost u C, kako bi se
važno jer gledati ono što je će se dogoditi sada.
>> Zadana funkcija koja će izvršiti je, naravno, glavna.
Glavni će nazvati ispisa ime na linije osam, ali na žalost,
prevodilac neće ni znati da je ime ispisa postoji sve dok se to dobiva na liniji 11,
što nažalost će biti prekasno.
Tako ćemo napraviti da pozdravi.
A sada osuditi, dvije pogreške generiraju.
Pa sad neka mi dođite do vrlo Prvo, kao što smo uvijek biste trebali učiniti, a
primijetiti da viče na mene, "Implicitna izjava o funkciji
ispisivati ​​ime. "
>> Tako smo vidjeli ovu poruku prije, implicitna izjava o funkciji.
Kad smo vidjeli da je kakve pogreške?
Kad nisam uključuju knjižnicu.
Ako sam zaboravio cs50.h i ja bih se vikne za dobiti string ili dobiti int.
No, u ovom slučaju, ova funkcija ispisa ime nije u knjižnici, zar ne?
To je doslovno u ovoj datoteci, kako ono što je stvarno problem?
>> Pa nažalost u C, što vas vodi tako nevjerojatno doslovno da ako
Želite funkciju pod nazivom ispis na ime postoji, bilo morati provesti
koji funkcioniraju na samom vrhu code, tako da je dostupan na niže
funkcionira, ali iskreno, da postane neuredan vrlo brzo.
Osobno, volim stavljajući glavni prva jer tada je vrlo jasno što je ovo
Program radi na prvi pogled.
A plus, možete dobiti u čudnom kutu slučajevi u kojima, ako x želi zvati
y y, ali bi se moglo nazvati x, samo fizički zapravo ne mogu staviti jedan
iznad drugoga.
>> No, ispostavilo se u C, možemo riješiti ovaj vrlo jednostavno.
Ja ću staviti malo prostora ovdje, a ja samo idem
preventivno, doduše ponešto redundantly, ide učiti
Prevodilac da postoji funkcija zove ispisa ime, to traje niz,
i ja ću nazvati to ime zarez.
>> Dakle, to je sada u skladu četiri, koje smo nisu vidjeli prije, je izjava
od imena funkcije ispisa, ali to je samo Obećanje da će se ova funkcija
na kraju se definirati, na kraju biti proveden.
To sada ne mogu ostaviti na miru, jer Sada je to definicija,
Provedba, vrsta posljednjih milju provedbe ove
određenu funkciju.
Pa iskreno to je glupo, to je neugodno, ali ovaj je put C, a to je
jer vam se vrlo doslovno i, kao što računalo treba iskreno,
samo da je točno ono što vam reći da učiniti, i to tako da naručivanje je važno.
>> Dakle, imajte to na umu, a opet početi primijetiti ponavljanje obrazaca.
Tečajevi su da će, ako se ne već, početi susret poruke
kao što je ovaj koji na prvi pogled izgleda potpuno zagonetan, ali ako počnete
tražiti te ključne riječi kao što su "Implicitna deklaracija", spominjanje
Funkcija u ovom slučaju - i iskreno, da ponekad čak i dobiti mali zeleni
mrkva simbol koji vam govori gdje problem je vjerojatno -
možete početi raditi svoj put kroz još neviđenih poruke o pogreškama.
Sva pitanja o pisanju svoje vlastitu funkciju na ovaj način?
>> Učinimo nešto što je malo više uvjerljiv.
Umjesto da samo učiniti nešto što je nuspojava ispis, pusti me
naprijed i spremanje nove datoteke, a mi ćemo nazovite ovaj positive.c, iako je
će biti malo drugačije u odnosu na prošli put.
I ovaj put, želim ponovno provesti Prošli put je positive.C primjer, koji
je natjerati korisnika da daju ja pozitivni cijeli broj.
Ali morao sam se služiti dobili int zadnji put.
Zar ne bi bilo lijepo ako postoji Funkcija se zove dobili pozitivan int
da sam samo mogao outsource ove komad funkcionalnost?
Dakle, razlika je ovdje ćemo provedbu dobili pozitivan int, ali za razliku od
print ime koje je imao nuspojavu - to nisu se vratili nešto mi se
broj ili niz -
dobiti pozitivno int je, naravno, ide na vrate, nadamo se, pozitivno int.
>> Tako ćemo učiniti.
Uključite cs50.h, uključuju standardni io.h.
Int main prazninu.
A sada ovdje, ja ću ići naprijed i recimo int, zovu n, jednak
dobili pozitivan int.
I baš kao što se int već postoji jer je osoblje ga je napisao, idem
pretpostaviti za trenutak da biste dobili Pozitivan int postoji, a sad se idem
ići naprijed i reći: printf, hvala za% i / n ", n.
>> Pa sad, ako sam sastaviti ovaj program, što će se dogoditi u mom terminala
prozor na dnu ekrana?
Ja ću vjerojatno dobiti koji istu grešku kao i prije.
Dakle, pokušajmo to.
Napravite pozitivan.
I opet, implicitno izjava funkcije, dobili pozitivan int.
Dakle, možemo riješiti ovaj u nekoliko načina.
Ja ću držati ga jednostavno i jednostavno stavio moju izjavu ovdje i dobiti
Pozitivan int.
Trebam tzv potpis.
Potpis samo se odnosi na estetiku
prva linija programa.
Dakle, ono što bi trebao dobiti pozitivno int povratak?
>> Dakle int.
Mislim idealno, da bi se vratili nešto kao pozitivan int, ali to
ne postoji.
Nismo vidjeli da je među našim podacima vrste, tako da se moramo nositi s
Činjenica da imamo vrlo malo vrste podataka raditi.
No, možemo se vratiti na int i samo Vjerujem da će biti pozitivan.
To će se zvati dobili pozitivan int.
>> A sada kako o svojim argumentima?
Da li je potrebno bilo koji ulaz?
Zar treba bilo koji ulaz?
Dakle, to ne treba znati unaprijed ništa.
Nabavite string ne, dobili int ne.
Printf ne - to treba imati neke Ulaz prošao u nju - i print ime
potreban neki ulaz, ali se Pozitivan int ne.
Tako ću se izrijekom Vas prazninu prevodilac.
Void je odsutnost bilo što drugo.
Dakle void znači ništa ne ide unutra od onih zagradama, zarez.
>> I sada na dnu moje datoteke - i opet sam samo vrsta analnog
ovdje stavljajući glavni na vrhu, koji je dobra praksa, jer ovaj način,
bilo vi ili netko drugi Otvara datoteku, na
Funkcionalnost je tamo.
Možete roniti u jednom od trga.
Dakle, sada ću na sličan način, dobili pozitivan int prazninu, ali nisam
će pogoditi zarez sada.
Idem otvoriti vitičastim zagradama, i sad moram posuditi
neke ideje od ponedjeljka.
>> Dakle, ako se sjećate, mi nešto učinio željeli učiniti sljedeće dok
nešto što je istina.
I što mi je činiti?
Učinio sam nešto poput daju ja pozitivni cijeli broj,
Malo brz.
Dobro bi bilo riječi koje želim.
A onda sam se što?
Int n jednak dobili int, Nema argumenata za njega.
>> I primijetiti razliku.
Kada zovete funkciju, kada koristite funkcija, ne stavi u praznini.
Vi samo napraviti da kada proglašenja funkcija, učeći prevodilac ono
to bi trebalo očekivati.
Dakle, ne morate staviti poništiti tu sebe.
>> I sad ono što je moje stanje?
I, n nije jednak pozitivan, ali to je samo pseudo-koda.
Pa kako sam izraziti više čisto?
I niži od ili jednak nuli.
Pa opet, primijetit možete učiniti manje od ili jednako.
Iako je dva odvojena simbola, možete to učiniti na
tipkovnica kao takva.
>> No, tu je još uvijek bug koji Zeznuo sam zadnji put previše.
Imam proglasiti -
točno.
Imam proglasiti n izvana od petlje.
Dakle, trebam staviti n ovdje, a ja ne želite ga ponovno jave na ovdje
ne bih ja dobiti novu varijablu.
Ja samo želim da se stavi vrijednost ovdje.
>> I sada nisam posve gotovi ovdje.
Dopustite mi da se ispred sebe i pretvarati se da sam gotov.
Napravite pozitivan, a sada tu je novi pogreške.
Kontrola dosegne kraj non-void funkcija.
Dakle, novi pogrešci, ali ako ste ljubazni od zafrkavati, osim jedni od riječi, njoj
Vjerojatno aludira na ono što je pogrešno.
>> Kontrola.
Kontrola samo znači da redoslijedu operacija u programu.
Računalo je u kontroli i nešto je pošlo po zlu.
Tako da dosegne kraj non-void funkcija.
Što je funkcija je očito koji se odnosi na?
Što je funkcija non-void?
Dakle, dobili pozitivan int, a malo zbunjujuće u tom bunaru,
to je vrsta prazninu.
Ona ima specifikaciju prazninu po svojoj Argumenti, ali njegov izlaz će se
biti tipa n.
Dakle, riječ je o lijevoj tzv. vrsta povrata.
Riječ iznutra ovdje je nula ili više argumenata
da funkcija potrebno.
>> Dakle, što trebam učiniti?
U ovom trenutku u mom kodu, linije 21, gdje treperi brz sada, ja
imati pozitivan int unutar varijable zove n.
Kako ću ga vratiti u glavni izbornik?
Doslovno.
Povratak n-zarez.
>> Dakle, baš kao što Colton vratio komad Rad s odgovorom na mene ispuštanjem
taj komad papira u malom crnom kutija na stolu, to učiniti u
broj, što doslovno samo pisati, vratite n, a to je kao da su Colton
predaje mi nešto fizički natrag.
U ovom slučaju, ono što se događa je dobiti Pozitivan int ide na ruku '
što je vjerojatno pozitivno cijeli kome?
Odakle ta vrijednost završiti?
To završi u ovom varijablu, n, a onda ćemo nastaviti s linije devet.
>> Dakle, drugim riječima, kako je operacija, ovaj program počinje
izvršenja i prevodilac shvaća Oh, želite knjižnicu?
Pusti me zgrabiti što je unutra to.
Oh, želite standardnu ​​IO knjižnice?
Pusti me zgrabiti što je unutra to.
Što prevodilac kažem sebi kada pogodi line četiri?
Oh, što je obećao provesti Funkcija zove se pozitivno, ali
vratit ćemo se kasnije, nešto uz one linije.
>> Int main void samo znači evo hrabrosti mog programa.
Linija je samo sedam kovrčava brace.
Line osam govori na lijevoj strani, daju mene 32 bita za cijeli broj, nazovite ga n.
Na desnoj strani, to je govoreći dobili pozitivan int.
Sada ćemo pauzirati tu priču, jer sada Ne držati se kreće moj pokazivač prema dolje.
Moj kursor sada ide dolje jer Sada se pozitivno int izvršava.
Int n je izjavio.
Učinite sljedeće.
Printf mi daje pozitivan cijeli broj.
>> Dobiti int od korisnika, spremite ga na n, a možda to opet i opet.
Ta petlja znači da se to kod might izvršavanje gore i dolje kao što je ovaj opet
i opet, ali kad je konačno korisnik surađuje i daje mi pozitivno
int, sam pogodio crtu 21, na kojem trenutku broj se vrati, a koji
trebao sam naglasiti sada?
Devet.
Kontrola, da se tako izrazim, vraća da se postroje devet.
To je linija koja je sada zadužen.
>> Dakle, to je ono što se događa svima ovaj put ispod poklopca motora, ali
kad smo koristiti funkcije kao što printf ili čak dobiti niz koji je netko drugi
napisao za vas je kontrola se predao off tuđe broj linija
po redak po redak.
To se jednostavno nismo mogli vidjeti, a mi stvarno ne mogu ga prikazuju u ovom
Program jer je to u nekim drugim file na tvrdom disku
bez znanja nas.
Tako ćemo teka i pokrenuti ovo sada.
>> Napravite pozitivan.
Sastaviti, to je napredak.
. / Pozitivno.
Daj mi pozitivan cijeli broj.
Ajmo biti teško.
Negativan 1.
Zero.
Dajmo mu 50.
Hvala na 50, tako da i kontrole sada se vratio.
Bilo kakva pitanja, a zatim, na to?
Da?
>> [Nečujno].
>> Reci ponovno.
Oh, dobro pitanje.
Dakle, možda ćete primijetiti da je paralelu Nekako sam rezanje kutak na.
U skladu 12, pričam, dobili pozitivan int vraća int, ali da je isto
Logika, to je sada logično je da će se u linije šest, govorim da je glavni vrati
int, ali ono što imamo nije imali u bilo kojem od naših programa?
Nikada nismo imali spomenuti ova ključna riječ povratka.
>> Tako ispada da je u C, najmanje verzija to da smo pomoću
je u 1999, tehnički, to je događa za vas automatski.
Bilo kada možete provesti program, a vi implementirati funkciju zove glavna,
da je funkcija će vratiti nulu Zadana ako ne drugačije,
i nula je samo konvencija.
Svijet vraća nulu time pokazuje da je sve dobro,
učinkovito ostavljajući nas s četiri milijarde moguće stvari koje bi mogle poći
krivo, tako da ako se vratimo jedno, da Možda se pokazalo da je kod to znači da je
što je pošlo po zlu.
Mogli bismo se vratiti dva, što znači ova druga stvar je pošlo po zlu.
Mogli bismo se vratiti četiri milijarde, što Možda je ovo druga stvar je pošlo po zlu.
>> A ako sada razmišljati o svom PC ili Mac, možda podsjetiti da je
Ponekad ste dobili tajnovite poruke o pogrešci od softvera koji ste
korištenju, a ponekad ima ljudsko Opis friendly, ali postoji
Često kod ili broj na zaslonu?
Ako se to ne dolazi u obzir, samo držati oko za to.
To je obično ono što ti kodovi se odnosi.
Oni su uključeni u Microsoft Word i drugim programima, tako da ako podnese
bug Izvješće s tvrtkom, možete im reći, oh, ja dobio broj 45 pogrešci.
A neki programer vratiti na mjestu može tražiti da se u njegov ili njezin
broj i reći, oh, to je zato što sam napravio Ovaj bug, a to je razlog zašto je korisnik
dobio ovu poruku.
>> Ali iskreno, to je samo malo odvlače pažnju i pomalo zamorno
zaključiti da, barem na našoj Prvih nekoliko programa, pa smo
su ga izostaviti.
No sve ovo vrijeme svaki tvoj Glavna funkcija potajno je ovo
linija automatski dodani za vas prevodilac, samo na konvenciji
uštedjeti malo vremena.
>> [Nečujno].
>> Ne treba ga uključiti u glavni.
To je u redu.
Vi ne morate ga uključiti ako su provedbu funkcije kao što je ovaj.
Inače funkciju stana se ne bi išlo.
No, u glavnom, to nije potrebno.
U tjedan ili dva, mi ćemo početi dobivanje u tu naviku jednom želimo početi
označava pogreške.
Stvarno dobro pitanje.
>> Tako brzo verbalni pauza napomenuti da ovaj petak, nećemo se ručao
po sebi, ali mi ćemo se na večeri s Neki od studenata i osoblja.
Ako želite da nam se pridruže, osjećam slobodno ići na cs50.net/rsvp.
18:00 ovog petka.
Prostor je, kao i uvijek, ograničeni, ali ćemo i dalje radi to na gotovo
tjedno osnovi, ako je prostor istekne ovaj tjedan.
>> Tako roman u koji smo stali na Ponedjeljak je bio da se žice može zapravo
se indeksiraju u, što znači da samo ti može dobiti na prvog znaka,
Drugi lik, treći lik i tako dalje, jer možete
učinkovito misliti nizu, kao što je Pozdrav, kao što je u ovom slučaju pet
slova unutar kutija.
A možete dobiti na svakoj od onih kutija s onim što smo učinili sintakse
predstaviti u ponedjeljak?
Ti četvornih nosači na tipkovnici.
To jednostavno znači ići na mjesto nula.
>> Počinjemo brojati od nule, tako da nosač nula označava h, noseći jedan
znači e, i tako dalje.
I tako cijelo vrijeme kad smo bili pomoću žice i upisivanjem u "Hello"
i "svijet" i druge stvari na zaslon, to je bila pohranjena
u kutije kao što je ovaj.
I uzeti pogodak.
Što svaka kutija predstavljaju fizički unutar vašeg računala?
>> [Nečujno].
>> Nažalost?
>> Likovi.
>> Dakle lik, pogotovo u slučaju nizova, a lik je samo
osam bitova ili jednog bajta.
Dakle, vjerojatno ste barem maglovito upoznati s činjenicom da je vaš
Računalo ima memoriju.
Ona ima dvije vrste memorije najmanje.
Jedan je hard disk gdje ste spremili stvari trajno, a to je
obično velik, tako da možete imati filmova i glazba i tako dalje.
>> Tada imate neku drugu vrstu memorije zove RAM, R-M-, Random Access
Memorije, a to je vrsta memorije koji se koristi kada je računalo
prikazivati, ali ako izgubite moć ili vaš baterija umire, bilo da je pohranjen
u RAM-u nestaje ako izgubi vlast uopce jer to nije
uporni.
Vi obično imaju, ovih dana, svirka toga, dva nastupa, možda i više.
I naopako RAM-a je da je to puno puno, puno brže od tvrdih diskova
ili čak solid state diskova ovih dana, ali to je obično skuplji, tako
imate manje od toga.
>> Tako je danas na razgovor stvarno se odnosi RAM se, da je tip memorije koji
postoji samo dok se ima moć se ubacuje u računalo.
Dakle, kada ste upisali u H-E-L-L-O, Enter na tipkovnice, H ide u jednom
bajt RAM-a, E ide u jedan bajt RAM-a, kao što je
Ostatak riječi.
Tako se sjetiti što smo bili u mogućnosti učiniti posljednji put je to bilo.
Dopustite mi da ide naprijed i otvoriti datoteku da smo pozvani string.c, a podsjetimo
da je izgledao pomalo nešto poput ovoga.
Dopustite mi da se zapravo vratiti i promijeniti to je točno kako je to izgledalo,
string duljina s..
>> Pa pogledajte ovdje program.
Mi uključuju CS50 knjižnicu tako da možemo koristiti dobili niz.
Mi uključuju standardni io.h tako da možemo koristiti printf.
Zašto mi uključiti string.h?
Ovo je novi ponedjeljak.
Tako smo htjeli string duljine.
Duzina Str.
Ljudi odlučio godina, hajdemo biti jezgrovit.
Umjesto nazivajući ga "dužina niza," nazovimo ga "str Duzina" i neka
Svijet lik koji se, kao i da je ono što smo dobili pristup s string.h.
>> Ovo je poznato.
Ovo je poznato.
To je nešto novo.
U skladu 22 - a mi ćemo se vratiti na to, ali za sada znamo -
i ti bi samo to znaju iz potrebe pročitajte dokumentaciju ili ako
da je znao već C -
dobili niz ponekad može zeznuti.
Ako korisnik stvarno kontradiktorna ili nekooperativan, a on ili ona jednostavno
ne upisati bilo na tipkovnici ili Kategorije toliko na tipkovnici kako
to je veća od memorije računala, u teoriji, dobili niz mogao vratiti
nešto drugo niz znakova.
To bi mogao vratiti posebnu vrijednost zove NULL u svim kape, N-U-L-L, a to je
Samo tzv Sentinel vrijednost.
To je posebna vrijednost koja označava nešto loše dogodilo u ovom slučaju.
To je odsutnost nizu.
>> Dakle null sam provjeru za jednostavno, tako da, duljimo, str Duzina i
ostale funkcije koje dolaze s C, a ukoliko oni očekuju niz ali ih prođe
Nepostojanje nizu, ako prođe ih NULL, računalo ili program
Samo će se srušiti zauvijek.
To će se objesiti.
To će se baciti neke poruku o pogrešci.
Loše stvari će se dogoditi.
Dakle, iako je to još uvijek Nije dobro definirana -
to će učiniti više smisla u tjedan dana ili dvije - u skladu 22, ovo je samo
Primjer samo obrambeni provjere pogreške samo u slučaju da jedno vrijeme od
milijuna nešto pođe po zlu, na Barem moj program neće srušiti.
>> Dakle, ako je ne iznosi nešto loše, Imam to za petlje, a to je
gdje smo imali da su ostali Novi komad sintakse.
Imam za petlju Ponavljanje iz nula na do duljine s.
I onda ovdje, bio sam ispis iz s. Nosač ja, ali zašto sam koristiti% c sve
Odjednom, umjesto% s čak iako je je string?
To je znak, zar ne?
S niz, ali s nešto nosač, a gdje sam ja nosač je nula
ili jedan ili dva, to je pojedinac znakova u nizu, i tako za
da, printf treba biti obaviješten da to je doista znak za očekivati.
>> A onda se prisjetiti, što je to učinio Program zapravo učiniti?
>> Isprintajte u stupcima.
>> Da, točno.
To samo tiskana riječ da ću upisati stup, jedan znak po liniji.
Tako ćemo to opet vidjeti.
Tako bi string.
Sastavio OK. . / String.
Dopustite mi tip u H-E-L-L-O, Enter, i Doista sam ga dobiti, jedan po retku.
>> Pa neka mi učiniti jednu optimizacija ovdje.
Ako mislite o tome, pogotovo ako je ste programirali prije, postoji
nedvojbeno neučinkovitost u liniji 24.
Drugim riječima, to nije nužno najbolji dizajn.
Jednostavan, barem jednom kad zapamtite ono str Duzina je, ali to je
radiš nešto glupo potencijalno.
Što bi to moglo biti?
>> [Nečujno].
>> Točno.
To je provjera za duljinu s svaki put, iako
H-E-L-L-O uvijek će da se pet znakova.
Svaki put kroz ove petlje, pet se ne mijenja.
Možda ću se ja povećavanjem, ali ono što je duljina s prilikom svakog
iteracija ove petlje?
To je pet, što je pet, što je pet, a Još sam ipak ja to pitam
pitanje opet i opet i opet.
Sad iskreno, računalo je tako prokleto brzo, nitko neće primijetiti
Razlika je u ovom slučaju, ali ove vrste loših dizajnerskih odluka može
početi zbrojiti, ako prevodilac sama ne pokušati popraviti to za vas koji
to obično ne bi, po Barem u aparatu.
>> Dakle, ja ću to učiniti.
Ja ću dodati zarez nakon moja prva varijabla, ja.
Ja ću osobno dati jedan promjenjiva, nazvavši ga n, samo
Konvencija za brojeve, a onda sam će dodijeliti n vrijednost niza
duljina s.
A onda ću se promijeniti Moj uvjet je da se što?
Ja neću promijeniti moje stanje da dok sam je manje od n.
>> Pa sad, koliko puta sam ja provjeru duljinu s.?
Jednom, ali to je u redu da mogu provjeriti protiv n opet i opet, jer sada oni
Vrijednosti nisu zapravo mijenja.
Sada za sada, samo znam da je bilo vama pozvati funkciju, postoji malo
iznad glave, nije dovoljno da vas obeshrabri Stvarno iz ikada pomoću funkcije, ali
osobito kad postoji linija koda kao da je - a linije će dobiti
zanimljivije prije dugo - gdje postoji mogućnost da mislim, ako sam
upišite ovaj kod, koliko je puta će se izvršiti?
Vi ćete početi vidjeti tijekom vremena u Izvedbu programa može
doista promijeniti.
>> U stvari, jedan od problema postavlja mi smo učinili u posljednjih godina uključuje
provedbu, kao što vam je poznato iz Tjedan nuli, alat za provjeru pravopisa, ali
provjeru pravopisa koji je dizajniran za podršku rječnik od 150.000 plus
Riječi koje mi daju vam dečki.
Ti bi trebala pisati kod koji učitava te riječi u RAM, tako da u
kutije kao što smo vidjeli na ekranu trenutak prije, a zatim jednako brzo kao ti
može, morate biti u mogućnosti odgovoriti pitanje oblika, stoji riječ
pogrešno?
Je li ova riječ pogrešno?
>> I u takvom nečem što smo učinili u posljednjih godina je to pretvorio u,
premda na opt-u dodatnoj osnovi, natjecanje vrsta, pri čemu
studenti koji koriste manje RAM-a i manje Vrijeme, manje CPU ciklusi, završiti
mjehurića do vrha malo Čelnik odbora ili rangiranje koje smo stavili na
toku je početna Kao što smo učinjeno u posljednjih nekoliko godina.
Pa opet, potpuno opcionalno, ali to govori o mogućnosti dizajna
koji su ispred kad počnemo izgradnju vrhu neke od tih
osnovni građevni blokovi.
>> Dakle, neka mi se vratiti na ovaj dijagram za Samo trenutak i otkriti nešto
nešto više.
To je doista string, a mi smo uzeti Prednost nekoliko knjižnica,
standardni io.h koja ima -
>> Printf.
>> Printf, između ostalog.
cs50.h, koji je mogao i dobiti niz int i tako dalje, string.h, koji
Duzina je str.
No, ispostavilo se da postoji još jedan.
Iskreno, ima puno i puno napadača datoteke koje se deklariraju funkcije
u knjižnicama, ali to je ctype.h zapravo će biti nešto
prednost jer ću ići naprijed i provesti jedan
drugi program ovdje.
>> Dopustite mi da ići naprijed i otvoriti nešto Napisao sam unaprijed zove
capitalize.c, i neka je uzme Pogledajte kako se to radi.
Obavijest da sam koristeći, u ovoj verziji nje, tri poznate datoteka.
Uočite da je u skladu 18, ja sam uzimajući liniju teksta.
Obavijest u skladu 21, ja tvrdim da je Sljedeći kod će se
kapitalizirati s, što je korisnik upisao u, i kako sam ja to radi?
Pa, ja vodim -
lekciju naučili iz posljednje vrijeme -
Ja sam proglašenja i n i iterating više likova u nizu.
A što je onda ovo blok Kod u skladu 24. do 27.
radi u laik uvjete?
>> Mala pismo natrag.
>> Točno.
Ako je nosač ja - pa ako ja-og karakter s, što je specifična
char u nizu, veći je od ili jednaka u mala i -
podsjetiti da dvostruku ampersand znači i -
i isti lik, i nosač i, je manji od ili jednak mala slova Z,
to znači da je ili b ili c ili točka, točka, točka, ili z, što znači
to je mala.
Što želim učiniti u tom slučaju?
Pa, ja mogu učiniti nešto šifrirano, ali
idemo zafrkavati ove apart.
>> Idem nazvati printf, ispisuje% c jer želim da ispišite ove
lik na ekranu.
I onda ću uzeti e nosača Ja, I-og lik u S, a zatim zašto
ja radim ovaj mali trik ovdje, mala slova na minus kapitala?
Što se to događa dati ja, općenito govoreći?
>> [Nečujno].
>> Točno.
Ja stvarno ne sjećam -
bilo je 65 za glavnog A. Ja stvarno ne sjetiti što je mala slova,
ali bez obzira.
Računalo poznaje.
Tako govoreći, mala slova minus kapitala, što je čudno da se
oduzimanjem CHAR iz druge, ali Koji su znakovi ispod haube?
Oni su samo brojevi.
Dakle, što god ti brojevi su, neka se računalo ga se sjetiti
umjesto mene čovjeka.
>> Tako mala slova minus kapital je će mi dati razliku.
To se događa da se 32, a to bi bilo slučaj za malim slovom B i glavnog grada B
i tako dalje.
To ostaje dosljedan, hvala bogu.
Tako sam u biti govorim, potrajati malih slova, oduzimanje off da
standardni razlika, i da Učinkovito izmjene S nosač i na
mala slova se, dakako, velikim slovima, bez moje stvarno da razmišljati
o ili zapamtite, ono što su oni Brojevi smo govorili o tome kad osam
Volonteri je došao na pozornicu?
Sada međuvremenu, u drugo, ako to nije malo slovo, kao određena
po liniji 24, samo ga ispisati.
Ja samo želim da se dodiruju likovi koji su bili
zapravo izvorno mala slova.
>> Tako ćemo vidjeti.
Provjerite kapitalizirati.
Sastavio, OK.
. / Kapitalizirati.
I neka mi upisati u H-E-L-L-O malim slovima, Enter.
I primjetiti da se pretvaraju u velika slova.
Dopustite mi to ponoviti s različite riječi.
Kako o D-A-V-I-D s prvim D kapitaliziraju kao obično ime je?
Upišite.
Obavijest da je još uvijek točna.
To jednostavno reproduciraju koji je prvi D nepromijenjena preko koje drugo izgradnju.
>> Dakle, imajte na umu, a zatim, Nekoliko stvari ovdje.
Jedan, ako ste ikada željeli provjeriti dva Uvjeti odjednom, možete i njih
zajedno kao što smo predviđali.
Možete usporediti znakove na ovaj način i učinkovito liječiti znakove kao
brojeva, ali iskreno, to je tako prokleto zagonetan Nikad neću zapamtiti
Kako bi došli do ove od nule bez razmišljanja kroz nju već sasvim
malo vremena.
>> Zar ne bi bilo lijepo ako netko vani je napisao funkciju zove se
smanjiti kako bi mogao odgovarati za mene pravi ili netočno, ovaj lik je mala?
Pa hvala bogu, tko god da je napisao ctype.h učinio upravo to.
Pusti me ovdje i dodati ctype za c vrste, a sada pusti me ovdje dolje, a
prepisati taj pravac na sljedeći način.
>> Dakle, ako se to zove niža, ja tvrdim, a Nosač ja, onda ću izbrisati
ove dvije linije uopce.
Dakle, sada netko drugi, ja sam u nadi, pisao Funkcija pozvao je manji, i to
Ispada da je i proglasio je unutar ctype.h.
A sada ću napustiti liniju 27 Samo, ja ću napustiti liniju 31
sami, ali primijetiti koliko sam stegnuo se moj broj.
To je sada čišći.
To je manje teško gledati kroz jer sada funkciju, štoviše,
tako divno to samo po imenu čini ono što kaže.
>> Dakle, sad se idem spremiti ovo.
Idem za smanjivanje.
I baš kao u nule što bi moglo imati Booleani, Boolean vrijednost true ili
netočno, to je upravo ono što je smanjiti učinkovito vraća.
Dopustite mi kompilirati.
Dopustite mi re-run.
I sada neka ga pokušati ponovno, H-E-L-L-O, Enter.
To je prilično dobro.
I ponovno pokušati uvjeriti da nije vijak nešto gore.
To se kapitaliziraju kao dobro.
>> Ali to nije dovoljno dobar, jer Druga stvar koja mi nikada ne idem
sjetite, osim ako ja radim kroz njega stvarno Pažljivo, recimo, papir je
ovaj prokleti linije.
Zar ne bi bilo lijepo kad bi bilo funkcija zove se gornji dio?
Pa ispada postoji u ctype.h kao dobro.
Ja ću ići naprijed i upišite -
neka mi donijeti tu liniju natrag.
Umjesto toga ovdje, neka mi ići naprijed i kažu, zamjena za% c u
Rezultat poziva ovu funkciju Gornji na i-tog karaktera s.
A sada primjetiti to je sve Malo uravnotežena.
Moram pratiti koliko je zagrade sam otvorila i zatvorila.
>> Dakle, sada je još čišći.
Sada je ovaj program je sve bolje i bolje osmišljen vjerojatno zato što je
puno, puno više čitati, ali to nije ni neka ispravi.
Provjerite kapitalizirati.
. / Kapitalizirati.
H-E-L-L-O. Idemo ga ponovno pokrenuti, D-A-V-I-D. U redu, tako da smo još uvijek u
prilično dobrom stanju.
>> Ali sada se gornja.
Predlažem da postoji još jedna profinjenost smo mogli učiniti da bi se
jako lijepo, to stvarno može stegnuti do tog koda i stvarno nam dati pet
od pet za dizajn, za primjer.
Što bi bilo lijepo da riješi?
Pa, pogledaj kako prokleto dugo ovaj blok kod je jednostavno za napraviti nešto jednostavno.
>> Sada su na stranu, kao što ste mogli imati vidi u super dijelu ove protekle
vikenda, ne moraju striktno vitičastim zagradama kada ste baš jedan
linija koda, iako smo predložili držeći ih tako da se čini puno
jasniji, kao u nule je u obliku slova U blokovi, što je unutar podružnice.
No, ne bi li bilo lijepo da se gornja, kada je dao svoj doprinos, pretvorio ga u
velika slova, ako to nije, a što bi biti divan u suprotnom slučaju, ako
to je već veliko?
Samo ga proći kroz i ostavite ga na miru.
>> Dakle, možda to radi.
Mogao sam probati i samo se nadam da ne, ali mi dopustite
uvesti jednu drugu stvar.
Umjesto da koristite ovu ugrađeni u terminal Prozor ovdje dolje, podsjetiti da je
ovaj trg Crna ikona vam daje Veći terminala prozor da mogu s punim
zaslon ako želim?
Tako ispada da su vrsta čudno ime, ali ima te stvari se nazivaju
man stranice, priručnik stranice, čovjek za kratko, i ja mogu pristupiti od strane tih
tipkanje čovjek -
Što želim tip?
Čovjek na gornji.
>> A sada primijetiti ako postoji funkcionirati unutar računala, u
ovaj slučaj aparata, što je samo Linux operativni sustav, to će
da mi nešto zagonetan skup izlaz, ali vidjet ćete da je tijekom vremena
uvijek je formatiran prilično Isto tako što počnete da se naviknete na njega.
Uočava na vrhu na gornji, a očito je ista dokumentacija
za sniziti.
Tko je napisao da je rezao neke uglovi i staviti sve na jednoj stranici.
Te stvari "namjene u život je pretvoriti
Pismo gornji ili mala slova.
>> Obavijest da je pod Sinopsis, str čovjek je mene naučio ono što ja imam sliku
uključiti koristiti ovu stvar.
To mi daje potpise za njih funkcije, obje od njih, čak i
iako smo sada samo brigu o jednom.
Ovdje je sada opis.
Za gornje pretvara pismo c u velika slova, ako je moguće.
>> Ipak nije to poučno, ali neka mi Sada pogledajte pod povratnu vrijednost, stvar
da je vrati.
Tako je vrijednost vratio je da pretvaraju pismo ili c ako
pretvorbe nije bilo moguće.
Što je c?
>> Izvorni karakter.
>> Izvorni karakter i znamo koji je, opet, ide do
sinopsis, a onaj tko je to napisao Funkcija jednostavno odlučili da je ulaz
da se gornja i donja je samo za samovoljno će se zove c.
Mogli su ga zvali većinu ništa oni žele, ali oni ga čuvaju
jednostavan kao c.
Tako sam konzultirao čovjeka stranicu.
Ova rečenica me uvjerava da će, ako to nije malo slovo, to je
ide to samo mi vratiti C, što je savršeni, što znači da mogu dobiti osloboditi od
Moj drugi uvjet.
>> Dakle, neka mi se vratiti u gedit, a Sada neka mi samo to učiniti.
Idem kopiram printf izjavu.
Ja ću ići naprijed i desno unutar petlje za ispis koji se, i dobiti
osloboditi od sada ovu cjelinu, ako konstrukt.
Nije loša ideja, a to je vrlo koliko točni iu skladu s
sve što smo propovijedali, , ali jednostavno nije potrebno.
Čim shvate neke knjižnice Funkcija postoji taj netko drugi
piše, ili možda piše negdje drugdje u datoteku, možete ga koristiti, a stvarno
početi zategnuti kod.
>> A kad kažem stvari poput dobrog stila, Činjenica da je ta osoba zove
funkcionirati na gornji, ili prethodno je manji je čudesno korisna jer
oni su vrlo opisno.
Vi ne želite nazvati svoje funkcije x i y i z, koji imaju
mnogo, mnogo manje značenje.
Sva pitanja o toj seriji poboljšanja?
>> Dakle, dovoljno je reći jedan od Zaključci je još kao svoj vlastiti problema
set - možda Problem set, no Sigurno P postavili dvije i dalje, čak
kada su točne ne mora nužno znači oni su savršeni samo
ili još posebno dobro osmišljen.
To je druga osi početi razmišljati o tome.
Dakle, ovo je string unutar vašeg memorije računala, ali ako imate
cijela hrpa likova kao što su H-E-L-L-O unutar RAM-a, i pretpostavimo
koju je u svojem programu poziva dobili niz više puta, kao da vas
nazovite dobili niz odjednom, onda nazovite dobili niz ponovno.
Pa, što će se dogoditi tijekom vremena?
>> Drugim riječima, ako imate liniju broj, doduše iz konteksta, kao što su
string je dobiva -
napravimo to.
String ime dobili jednak string.
Dakle, pretpostavimo da je linija koda je značilo pitati korisnika za njegov ili njezin naziv.
Ova nova linija koda je značilo pitati Korisnik za njegovu ili njezinu školu, a
ovaj sljedeći red, i tako dalje.
Pretpostavimo da smo stalno postavljaju Korisnik za drugi i
još jedna i druga string.
Oni će ostati u sjećanju u isto vrijeme.
One se neće izmlatiti drugima.
Škole nije prepisati druge.
Ali gdje su svi završiti u sjećanju?
>> Pa, ako ćemo početi crtati na zaslonu, koje možemo koristiti ovu stvar
Ovdje kao školsku ploču, ako je ovaj crni pravokutnik predstavlja moj računalo '
memorije, ja ću početi proizvoljno podijeli se u malo kvadrata,
od kojih svaki predstavlja jedan bajt memorije.
Iskreno, ako imate gigabajt RAM-a ovih dana, imate milijardu bajtova
memorije u računalu, tako da milijardi tih kvadrata.
Dakle, dovoljno je reći, ovo zapravo i nije u mjerilu.
>> Ali mogli smo zadržati crtanje svi ovi očito nije u mjerilu kvadrata, a to
skupno zastupa moje memorije računala.
Sada ćemo to učiniti dot, dot, dot.
Dakle, drugim riječima, kad sam danas zatražiti Korisnik s nizom dobili da mi daju
string, što se događa?
Ako korisnik unese "Hello", koji završava u H-E-L-L-O. Ali pretpostavimo
Korisnik onda upiše -
Zapravo, nisam trebao učiniti Pozdrav, jer tražimo
ih za njihove nazive.
Dakle idemo natrag, ako ja to mogu.
>> Dakle, ako sam tip u D-A-V-I-D za moje ime, prisjetiti da je druga linija
broj je opet dobili niz dobiti svoju školu.
Gdje je tu riječ da korisnik vrste u će ići sljedeći?
Pa, možda će ići u H-A-R-V-A-R-D. Dakle, iako sam
ga povući dva reda, ovo je samo cijela hrpa bajtova u vašoj
računala RAM-a.
Tu je problem sada, jer sada, ako sam pomoću RAM-a na ovaj vrlo razumne
ali vrsta naivne način, što možete Nije očito razlikuju?
Gdje se počinje i gdje jedna završava, zar ne?
Oni su vrsta zamućenje zajedno.
>> Tako ispada računalo ne to učiniti.
Dopustite mi zapravo pomicanje natrag kroz vrijeme u nekoliko znakova, a umjesto Harvarda
ide odmah nakon imena korisnika, korisnik zapravo dobiva, iza
scene, posebnim znakom umetnuti
Računalo za njega ili nju.
/ 0, inače poznat kao lik NSK dosadno naziva N-U-L, a ne
N-U-L-L, ali ga pisati kao / 0.
To je jednostavno sve nula bitova je marker između prve riječi da korisnikov
upisan i drugi.
>> Dakle Harvard zapravo sada završi kao ovaj niz znakova
i još jedan / 0.
Dakle, drugim riječima, tako da to sentinel vrijednosti, osam nula granično
bita, sada možete početi razlikovati jedan lik iz drugog.
Dakle, sve ono što je ovaj put "Hello" je zapravo "halo" s / 0, i
U međuvremenu, tu bi moglo vrlo dobro biti prilično malo više RAM
unutrašnjost računala.
>> Pusti me da napravim još jednu stvar sada.
Ispada da su svi od tih kvadrata mi smo bili crtanja, oni su, da,
žice, ali općenito, ove stvari su nizovi.
Niz je samo komad memorije to je natrag na leđa na leđa uz leđa,
a vi obično koriste niz putem ove uglata zagrada zapisu.
Pa ćemo vidjeti ove vrlo malo tijekom vremena, ali dopustite mi da ide naprijed i
otvaraju, nazovimo ga dobi.
I primijetiti ono što možemo učiniti s ti isti trikovi, malo
malo više sintakse ovdje.
>> Dakle, u skladu 17. ovog programa - Zapravo, dopustite mi da pokrenete program prvi
tako da možemo vidjeti što je to što radi.
Dopustite mi da bi se dobi sastaviti ovaj program.
. / Vijeka.
Koliko je ljudi u sobi?
Nazovite to troje.
Dob u prvom licu?
18, 19, i 20.
A sada nešto smiješno, ja samo su napravili program koji starost te
troje ljudi.
>> Tako da je očito prilika za zabavu aritmetike ovdje.
Srećom, matematika je točna.
18 ode do 19, 19 otišao do 20 i tako dalje.
No, ono što je stvarno značilo da se Ilustrativan ovdje je kako smo skladištenje
Te tri ljudi dobi.
Dopustite mi povećali na ono što je ovdje događa.
>> Tako je prvi, te prvih nekoliko redaka treba biti uzimajući prilično upoznati.
Samo sam pitajući korisnika za broj ljudi u sobi.
Tada sam koristeći se int i učiniti dok se to učiniti opet i opet i opet.
Vidjeli smo da je uzorak prije, ali linije 27 je nov i, zapravo,
korisni, te će postati sve korisne.
Obavijest da je ono što je drugačije u skladu 27 je da sam se da će se proglašenje
int zove dobi, ali pričekajte.
To je ne samo int dobi.
Tu je ove četvornih nosači, unutar kojih je n.
>> Dakle nosač n u tom kontekstu, ne unutar jednog printf izjave ovdje, ali
u tom jedinom liniji 27, to je linija govoreći, daju mi ​​n Ints, od kojih svaki
je tipa int.
Dakle, ovo je kanta, da tako kažemo,, u ovom slučaju, tri cijela broja natrag
natrag na leđa, tako da mogu učinkovito imaju tri varijable.
Alternativa, kako bi se Jasno, bio bi ovaj.
>> Ako sam htjela prvi student-a dob, mogao bih to učiniti.
Ako sam htio drugi učenik age sam mogao to učiniti.
Ako sam želio treći učenik dob, mogao bih to učiniti.
I ne daj Bože trebamo svačije doba u ovoj sobi -
Mislim, ovo je pakao od puno kopija, zalijepite opet i opet i opet.
I plus kad sam sastaviti ovaj program, ako je jedan student tijekom šetnje u out
ta vrata, sada moj broj varijabli je netočna.
>> Dakle, ono što je lijepo o nizom je kao Čim počnete osjećati sami
kopiranje i lijepljenje, izgledi su da je nije najbolji pristup.
Niz je dinamičan potencijalno.
Ne znam unaprijed koliko je ljudi će biti u sobi,
ali ja znam trebam n od njih, a ja ću n shvatiti kad dođe vrijeme.
Ova linija koda sada znači, dajte mi komad memorije koja izgleda ovako
gdje je broj kutija na zaslonu je u potpunosti ovisi o n da
korisnik unese
>> Dakle, sada je ostatak ovog programa je zapravo prilično slično onome što smo
Upravo je s likovima.
Obavijest Imam za petlju s početkom u 30 linije.
Dakle, odmah nakon što sam dobiti niz, sam iteraciju od y jednaka nuli na do n.
Upravo sam to poučno printf Poruka se samo kaže, daj mi dobi
osoba #% ja, tako da broj jedan, broj dva, broj tri.
I zašto sam to učinio?
Iskreno, ljudi vole brojati od jedan na gore, dok računalnih znanstvenika,
nulu na gore.
računalni znanstvenici se ne ide na koristiti ovu vrstu programa, tako da smo
ide to samo početak brojanja na jednoj kao normalni ljudi.
>> I sada u skladu 33, primijetit nešto drugačija komad sintakse.
I-og u toj dobi varijabla tipa Niz će dobiti int.
I sad na kraju, to je samo aritmetički ovdje dolje.
Odlučio sam se u zasebnoj petlje tvrde neko vrijeme prolazi, a sada je u to
odvojene petlje, ove linije izvršavati.
>> Godinu dana od danas, ja ću biti čovjek i godine, ali primijetiti da to nije
ja varijabli.
Ovo je sada% sam za int.
I obavijest kao prvi rezervirano mjesto, sam priključite i plus jedan, tako da možemo računati kao
normalna osoba.
I onda za vrijednost njihove dobi, za ja godina, sam se dobi zagrada
ja - i zašto to radim plus jednu ovdje?
Oni jednostavno dobi.
To mi je glupo izbor programa.
Upravo su u dobi od jedne godine.
Ja mogu upisati bilo koji broj koji Ja zapravo želim tamo.
>> Pa što je zapravo sve relevantnosti ovdje?
Pa, neka mi zapravo pomicanje natrag ovamo i naslikati sliku
onoga što je pred nama.
Ono što ćemo raditi s našim iduće Problem Set Dvije je brbljanje u
svijet kriptografije.
Dakle, ovo je niz znakova, tako da slijed više znakova, a što
to govori?
To nije u online verziji od slajdova.
>> Dakle, ja tvrdim da je to jednako ovo, glupa reklama mnogo godina
Prije koji zapravo može sjetiti jedan od njegovih početaka.
Dakle, ovo je primjer šifriranja ili kriptografije.
Ispada da, ako želite zapravo poslati informacije ili dijeliti
Informacije s nekim sigurno, kao poruke kao što je ovaj, možete
otimati pisma.
Ali obično, riječi su Nije slučajno kodirani.
Oni permuted na neki način ili mijenjati na neki način, tako da - pardon.
To je zabavno spojler za sljedeći put.
>> Tako možete preslikati ono što je očito O B. primijetiti da poravna
Kapitalizacija-mudar.
Navodno r postaje e.
Očito F-H-E-R postaje S-U-R-E. Tako ispada da postoji mapiranje, te u
ovaj slučaj postoji prilično glupo mapiranje, ako bilo tko je to shvatio?
To je nešto što se zove Rot 13, 13 rotirati.
To je najgluplji šifriranje Mehanizmi jer doslovno samo
dodaje 13 za svaku od slova, glupa u smislu da ako samo
imaju malo slobodnog vremena na rukama i olovku, ili ste samo to da
putem u glavi, te mogao probati sve moguće slike - jedan, dva,
tri, točka, točka, točkica, samo 25 rotirati cijelu abecedu, a
na kraju, vi ćete shvatiti ono što je ova poruka.
Dakle, ako ste nešto poput ovoga u osnovnoj školi prolaze poruke za svoje
najbolji prijatelj, ako je vaša osnovna škola Učitelj jednostavno pročitati
Poruka i brutalni prisiljeni rješenje, možda ste stečen
Odgovor na to.
>> Sada, naravno, u stvarnom svijetu, kriptografije je sofisticiranije.
Ovo je isječak iz teksta računalni sustav koji ima ime i
lozinke, kao i gotovo sve naše učiniti, a to je ono što vaša lozinka mogli
izgledati ako pohranjene na tvrdom voziti, ali u kriptiranom obliku.
To nije samo rotacija slova, A je B, a B je C, što se
mnogo više sofisticiran, ali koristi ono što je općenito poznat kao tajni ključ
kriptografiju.
Ova slika govori slijedeće Priča s nekoliko ikona.
>> S lijeve strane, imamo ono što zvat ćemo običan tekst.
U svijetu kriptografije, običnom Tekst je jednostavno izvorna poruka
pisana na engleskom ili francuskom ili bilo kojem jeziku uopće.
Ako ga želite šifrirati, mi ćemo proći je slikovito kroz lokot, tako
Neke od vrsta algoritma, neke funkcije ili program koji je netko napisao
da scrambles slova nadam više komplicirano nego samo dodao 13
za svaki od njih.
>> Ono što se iz tog procesa u Srednji postoji zove cyphertext.
Tako vrsta seksi riječi.
To samo znači da je kodiran Verzija od običnog teksta.
I samo ako imate tu istu tajnu, 13 ili minus 13, jesi li u stanju
dekriptirati poruke kao što je to.
>> Tako je u problemu postavili dva, među stvarima ćete učiniti ako u Hacker
Edition, morat ćete napisati kod kako bi ispucati tih lozinki, figuring out
ono što su i kako su kodiran, iako mi dati malo
smjernice na putu.
U standardnom izdanju, uvodimo par šifri, kodiranje
mehanizama, jedan se zove Cezar, jedan zove Vigenere, koji su još uvijek
rotacijska šifre gdje postaje nešto, B postaje nešto, ali
morate to učiniti programski jer će doista biti tajna
Ključ uključeni koje je obično broj ili ključne riječi da samo
pošiljatelj i primatelj tih Poruke trebali razumjeti.
>> Sada, to je zapravo inkarnacija u stvarnom svijetu.
To, na primjer, je malo siroče Annie tajna dekoder prsten, a vi
zapravo može provedbu tih rotacijska simboli -
Postaje nešto, B postaje nešto - s par kotača,
jedan s vanjske strane, jedan s unutarnje tako da ako okretati kotač ili
prsten, zapravo možete se postroje pisma s različitim slovima,
uzimajući tajni kod.
I tako kao Cliffhanger za danas, ono što sam mislio da ću učiniti je malo
atavizam da ako uključite TV 24. prosinca, možete pogledati
Film ad nauseum za 24 sata u nizu.
Ali za danas, ja ću ga otvoriti ovdje i dati nam samo dvije minute
pedagoški relevantne Božićna priča s čovječuljak po imenu Ralphie.
>> [Video reprodukciju]
>> -Bilo da je poznato da sve i raznovrstan da Ralph Parker imenuje
član Little Orphan Annie tajnosti Krug i ima pravo na sve
počasti i beneficije javljaju na tu ponudu.
>> -Potpis, Little Orphan Annie.
Supotpisali, Pierre Andre mastilom.
Priznanja i koristi već u dobi od devet godina.
>> [Viče na radiju]
>> Hajde, idemo s njim.
Ne treba mi sve te gluposti o Krijumčari i gusari.
>> -Slušaj sutra navečer za sklapanja avantura crno
gusarski brod.
Sada je vrijeme za Annie Secret Poruka za vas članova
tajnog kruga.
Zapamtite, djecu.
Samo članovi Annie Secret Circle može dekodirati Annie tajnu poruku.
Zapamtite, Annie je ovisno o vama.
Postavite svoje igle do B2.
Ovdje je poruka.
12, 11, 2 -
>> -Ja sam u mom prvom tajnom sastanku.
>> -25, 14, 11, 18, 16 -
>> -Pierre bio je u velikoj glasa večeras.
Mogao bih reći da ni večeras poruku bio je jako važno.
>> -3, 25.
To je poruka s Annie sama.
Zapamtite, nemoj nikome reći.
>> -90 Sekundi kasnije, ja sam u sobi samo u kući u kojoj je dječak od devet
mogao sjediti na privatnost i dekodirati.
Aha, B. sam otišao u drugu.
E. prvoj riječi "biti." S. Dolazilo je lakše sada.
U. 25.
To je R.
>> -Hajde, Ralphie.
Moram ići.
>> -Ja ću biti desno dolje, Ma.
Gee čudo.
>> -T. O. Svakako.
Budite sigurni u što?
Ono što je Little Orphan Annie pokušava reći?
Budite sigurni u što?
>> -Ralphie, Randy je dobio to ići.
Hoćete li izaći?
>> -U redu, Ma.
Ja ću izaći.
>> -Bio sam sve bliže sada.
Napetost je grozno.
Što je to bilo?
Sudbina planeta može visi o koncu.
>> -Ralphie, Randy je moram ići.
>> -Odmah se strana za zaboga.
>> -Skoro postoji.
Moji prsti letjeli.
Moj um je bio čelična zamku.
Svaka pora vibrirao.
Bilo je gotovo čista.
Da, da, da, da, da.
>> -Budite sigurni da pijete vašu Ovaltine.
Ovaltine?
Bijedno komercijalne?
Gad jedan.
>> [END video reprodukciju]
>> ZVUČNI 1: Ovo je CS50, te da Problem će biti Set dvije.
Vidimo se sljedeći tjedan.
>> ZVUČNI 2: U iduće CS50, to se događa.
>> ZVUČNI 1: Dakle jedna tema nemamo pogledao do sada je
da funkcijskih pokazivače.
Sada, funkcija pokazivač je samo adresa javnosti
funkcija, ali baš kao i -
sin -