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. 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? 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 -