[Glazbom] SPEAKER 1: Ovo je CS50 i ovo je početak tjedna dva. Dakle, neka je roniti pravo u nešto da je lud, da tako kažemo. Dakle, ovdje je CS50 IDE i imam zaustavio unaprijed ovo screen-- prokleto to. Spojler alert. U redu. Ja sam se zaustavio ovaj zaslon ovdje, koji ima vrlo jednostavan program. Ako svitak dolje, većina to je samo komentira, ali ovdje u redovima 13 do 17 imamo program. To je sintaktički vrijede, što znači da ako Ja ga sastaviti, to će sastaviti i trčanje, ali je lud. Ovaj program tvrdi u komentarima do vrha da bi trebalo ispisati 10 zvijezda, ali to ne čini. I na temelju svog iskustva, ili će uskoro biti iskustvo s C, može li logično razabrati zašto se to, zapravo, lud? Da? PUBLIKA: To ide od nula do 10. To je 11 iteracija. SPEAKER 1: Da. Dakle, to se događa od nule kroz te jednak 10, što je naravno 11 ponavljanja. Dakle, to će ispisa, doista, 11 zvjezdica. Dakle, informatika konvencije u većini programskih jezika je, doista, samo da početi brojati od nule, ali brojati do, ali ne preko Vrijednost da zapravo stalo. Sada, to je jedna stvar koja Potrebno je malo koristi za dobivanje pa ispočetka, osmišljen kao što je to za ne programere ili ne računalo Znanstvenici i za djecu uglavnom, je dizajniran da ima počnete brojati općenito na jedan. I to je u redu. Vi apsolutno može početi brojati na jednom ako je to udobnije. I brojati do i preko 10, ali shvatit ćete posebno ovaj tjedan i dalje da je samo tako mnoge stvari u programiranju Pretpostavljam da je 0 je prvi znamenkasti s kojom ste strani, da ćeš biti lakše samo da se u ovom naviku paljenja od nule i brojanje do vrijednosti vam je stalo do sada od dobiti ići. Dakle, to je fiksna to. Promijenili smo manje ili jednak samo manje od. Idemo pogledati drugi primjer ovdje. Dakle, ovaj program također tvrdi u svojoj Komentari na vrhu koji bi trebao ispisati deset zvijezde, ali to ne čini. Što je bug ovdje? Dakle, what-- i ispričavam se, budimo jasni. 10 zvjezdica. Jedan po retku, ali to ne čini. Dakle, u stvari, neka mi ići naprijed i sastaviti ovo zato što je nešto manje jasno na temelju tog opisa. Pusti me u naš izvor imenik. Napravite Buggy jednu točku Slash, lud jedan. OK, vidim 11 zvijezde, koje je još uvijek problematično, ali oni su također sve u jednoj liniji. Što je problem ovdje? Da. PUBLIKA: [nečujan]. SPEAKER 1: Da. Dakle, ovo je suptilnost koju svibanj podsjećaju me što ukratko spomenuti. Iako sve izgleda lijepa, i to lijepo je razvedena, i to vrsta izgleda Scratch-poput u toj liniji 16 i 17, Doista, razvedena pod kako za petlju. To je nebitno. Računalo ne znaju ili vide bijeli prostor. Bijeli prostor je samo za nas ljude, stilski. Računalo ne znate kada imate vitičastih zagrada, što bi, doista, riješili ovaj problem. Dakle, ako smo zapravo otišli i izrijekom stavio u tim vitičastih zagrada kako bi riješili ovaj problem što jasno kompilator da sam zapravo žele izvršiti dvije linije koda opet, i opet, i opet. No, ono što je temeljno objašnjenje? Pravo? Mi ne strogo potrebno vitičastih zagrada svih vremena, iako je vjerojatno najbolje praksa da se u tu naviku svejedno iako dodaje dva likovi na kodu. zašto? PUBLIKA: [nečujan]? SPEAKER 1: Da, tako je to drugo rješenje uopce. Pravo? Pogotovo ako se na prvi pogled ne znate stvarno poštovati ono što se događa. Pa, sigurno smo mogli samo učiniti dvije stvari odjednom i samo bi se izbjeglo problem uopce. I to je u redu, ali sada, za današnje potrebe, što je objašnjenje za bug? Zašto su svi ti zvijezde na jednoj liniji? Da? PUBLIKA: Čini se da, ako imate jednu liniju koda, možete to učiniti bez njih. SPEAKER 1: Točno. Ovo je samo ljudska konvencija. Ljudi shvaćaju da je to malo neugodno ili dosadan morati staviti vitičastih zagrada sve vremena, ako sve što želite učiniti je izvršiti jednu liniju koda. Dakle, ljudi odlučili neke Vrijeme prije da je to u redu. Ako želite staviti sve svoje petlje na samo taj jedan redak kao što je ovaj, to je u redu s jednim točka-zarez na kraju. Ali možete učiniti samo jedan takav crta bez vitičastih zagrada. Dakle, kada je CS50 stil vodič kao što će vam ukazati na, vidjet ćete da se općenito to je dobar običaj da se u ovo dok ste vrlo udobna lutanja od tih vrsta konvencija i radiš svoj vlastiti stvar. Tako dugo dok ste sebi dosljedan. A mi ćemo govoriti više o stil malo kasnije danas. Dakle, neka mi se otvori jedan drugi program. Naravno, trebamo popraviti da 10 kao dobro. Dopustite mi ići naprijed i pisati pravi Brzo program koji ću nazvati, recimo, loop točke C. Dakle, petlje dot C. A u petlji dot C ću imati, uključuju standardni I / O točka H int glavni prazninu. I sada neka je samo to, doista, petlja. Dakle, 4 int sam dobiva nula. I je manje od, recimo, 50 godina. I plus, plus. I onda ovdje neka je ići naprijed i učiniti ispis F. A onda želim ispisati I a nova linija, točka i zarez. A to bi trebalo ispisati sve brojevi od nula do 50? Nekoliko glava kima glavom. Nekoliko br. Što je već bug? Što je jednostavna pogreška sam napravio? Da. PUBLIKA: [nečujan]. SPEAKER 1: Da. Dakle, iako izgleda kao što je to ono što ja namjeravam, podsjetiti da je i samo ASCII znakova. Dakle, ako ja kažem, print "I." To doslovno će I. ispis Dakle, ako sam žele plug-in rezervirano mjesto Vrijednost sam zapravo trebate učiniti a zatim plug-u Vrijednost I. dinamički. Inače Samo ću se dobivate 50 I je na zaslonu. Dakle, neka mi ići naprijed i čine ovu petlju, pokrenite ga, i, doista, ćemo imati sve put kroz 49 godina. A ako sam pomicanje natrag u vrijeme vidim broj nula na početku. Pa, što ako ja vrsta zeznuo? Što ako sam to učiniti? Samo zato što ja ne razmišljam. Što je ovaj program. Nakon što ponovno sastaviti i trčanje, učiniti logično? PUBLIKA: Ništa. SPEAKER 1: Ništa. Zašto je to? PUBLIKA: Ja dizajniran za nulu. Dakle, uvjet je lažna. SPEAKER 1: Da, točno. Sve kod je ispravan, sintaktički. To će sastaviti, ovaj kod će raditi, ali to nije učiniti ništa korisno jer ja sam inicijalizirati na nulu. Zatim smo provjeriti je sam veći od 50? Očito, ne, to nije. Tako se petlja nikad ne izvršava na sve. Što ako smo nešto učiniti malo osvrće? Dakle, što ako mi se sviđa int sam dobiva nula. I sada neka mi koristiti dok petlje, što je još jedan uvjet. I dok sam rekao, dok sam je veći od ili jednak nuli, a onda u Ovdje sam ići naprijed i spremiti datoteku, napravite petlju. I ja sam o tome da ga pokrenuti. Što ću vidjeti Vrijeme u while petlji? Da. PUBLIKA: beskonačnu petlju? SPEAKER 1: beskonačnu petlju? Da, i zašto? PUBLIKA: Zato što je to uvijek nula. SPEAKER 1: Da. Dakle, ja se inicijalizira kao nula. Naravno da je uvijek veća od ili jednak 0, kao rezultat. Dakle, ja samo idem vidjeti beskonačno. I sad, ovaj je došao do jednom ili dvaput na glavama tijeku je. Što se događa kada ima beskonačnu petlju? PUBLIKA: Kontrola C SPEAKER 1: Da. Dakle Kontrola C na kraju će odgovoriti. Nažalost, mi smo ispisati milijuni i milijuni nule već pa računalo ima vrsta dobio ispred mene. Dakle, to će ignorirati mi za malo. Ali ako samo pritisnite Upravljačka Ci malo puta na vašem Mac ili PC tipkovnice, na kraju bi trebao, zaista, prekinuti. A ako ne, mi ćemo vam pokazati neke Tehnike Nedugo gdje vas može zapravo prisilno ubiti programe, nalik na Windows i Mac OS, ako je potrebno. No, pokušajmo nešto drugo. Idemo zapravo povećajte I. Je to još uvijek će biti beskonačan? Dopustite mi da to trčanje. A sada možete vrsta vidjeti što se događa. To je, također, beskonačnu petlju. Ali ovo je malo trik pitanje. Hoće li ovo ispisati brojeve zauvijek? PUBLIKA: Ne SPEAKER 1: Ne Zašto? Čuo sam neke br ovamo. Someone-- Da. PUBLIKA: Nemate dovoljno bitovi stvarno zadržati ide. SPEAKER 1: U redu. Dakle, nemam dovoljno bitovi zadržati ide. Dakle, što će se dogoditi? To jednostavno će prestati? PUBLIKA: U nekom trenutku to će zatvoriti the-- SPEAKER 1: To će zatvorena petlje prema dolje, ali zašto? Što će se dogoditi na Vrlo kraj svojih granica? Da? PUBLIKA: To će ciklus natrag na negativne brojeve. SPEAKER 1: negativne brojeve, ili ako smo bili samo liječenje pozitivni, nula najmanje. Tako da, apsolutno. Sjetite se da smo vidjeli posljednji put da ako povećajte vaš bita previše puta, a vi Tu prije overflow kapacitet vašeg int ili što god tip podataka je, ti si će zaokrenuti, vjerojatno, Dva negativnih brojeva. Ili, ako ste naveli da je vaš Raspon bi trebao biti pozitivan samo što možete učiniti, ali nismo vidjeli da ipak, možda ćete završiti barem vratiti na nulu. Iako, zapravo da. U tom slučaju, negativni brojevi, u kojem slučaju petlje će se prekinuti jer ja ne, u stvari, veća od ili jednaka nula ako je negativan. Dakle, na žalost, kako je dugo će mi morati čekati? Sada smo do ono, 2 milijuna-ish? Mi smo kao 2 milijarde, ćemo morati pričekati dok zapravo možemo vidjeti ovaj simptom. Ali možemo ga vidjeti malo brže, maybe-- neka je vidjeti ako mi može prekinuti. Ajde. Čak su i izbornici su se polako pojavljuju. U redu. Dakle, mi ćemo se vratiti na to prije dugo. To je dobra time-- ga osuditi, štenci. To je dobro vrijeme za neke najave. Dakle, ako ste možda željeli da se uključe u YHack, koji je događaj bio sponzoriran od strane naših prijatelja na Yaleu. I doista, neki od kolegija je TFS na Yaleu su uključeni s tim. YHack je međunarodna hack-a-Thon domaćin i održava na Yaleu, okupiti 1.500 kao nepristran hakera i kreativaca svih diljem svijeta. Ako je to od interesa, pogledati ovdje. Ako je ovo previše kratko na zaslon, pogledajte današnje slajdova za URL za yhack.org. Dakle, i nekoliko brzih najave. Dakle, službeno će započeti dijelovi sljedeći tjedan i ovdje iu New Haven. Imajte na umu da ćete biti uzimajući jedan e kasnije ovaj vikend najvjerojatnije. Potrebno je dugo vremena za CS50 Odlomak, s obzirom na sve ljude u klasa i svi kretanje. I svi Nastava Fellows ' rasporedi su uvijek kruto, ali Stay tuned za e-mail i ako je potrebno biti, možete ponovno odjeljak tamo nakon. Study.cs50.net. Dakle, čak i ako ste stalni sudionik na dijelove, shvatiti da su gotovo svi od resursa koristimo u dijelovima javno su dostupni na CS50 Studija na adresi ovdje. Dakle, ako ste ikada željeli ponovo pregled materijal iz sekcije, ili čitati unaprijed, ili ne može učiniti neki tjedan, shvatiti da uzorak slajdova, i problema, i definicije, i još su svi tamo kao dobro. Radno vrijeme nastaviti i danas, i sutra, srijeda, i četvrtak provjerili tečaj je Web stranica za raspored. I također, sada pokreće Danas je CS50 Raspravite. Dakle, ako i kada imate pitanja za međusobno ili za osoblje tijeku je, i općenito rade na neki problem setu, shvatite da to nije nužno moraju okrenuti na čovjeka sljedeći vas. Ako nema nikoga, možete doprijeti do nas i kolege online putem CS50 Raspravite. Dakle, ovo je rasprava odbora za tečaj, i shvatiti da je to je možda najbolji mjesto za početak kada imate Pitanja kada je izvan radnog vremena posebno. Paketi će se pokrenuti ovaj tjedan previše. Na Vatra i led U New Havenu [nečujan]. Bacite pogled na tečaj a web stranice kako bi RSVP. Prvi došao, prvi služiti za to. Ako ne dobijete u ovom tjednu ćemo učiniti te je većina svakog petka tijekom trajanja. U redu, a sada riječ o ocjenjivanju. Osobito što ulazimo problema postavljen jedan, koji je ovaj tjedan, i bez problema postaviti dva i nakon toga. Kako idemo o ocjenjivanju P seta i ocjenjivanje kvalitete istih? Dakle, to je četiri sjekirama koje koristimo u CS50, a oni su to četiri ovdje. Opseg, koji bilježi na numeričkom Osnova koliko je P skup si se borila. To otprilike odgovara se truda, a to je naš način snimanja Jeste li isprobati pola P set, sve skupa P. Ovo je jednostavan jedan dobiti savršen rezultati na ako ništa, dapače, pokušajte svaki aspekt P skupa. Dakle, imajte to na umu. Ispravnost je upravo to. Je li vaš kod rada kao specifikaciji kao i otopine uzorka štabove ' ukazuju na to da je vaš broj treba, u stvari, radi. Provjerite 50, ako niste susreli Još je u P postaviti jednu specifikaciju i općenito će vam dati da / ne odgovore je li tvoj broj je ispravan. Barem tako daleko idemo Da bi se procijenila je na temelju ispitivanja kako smo pokrenuti u tom programu. Dizajn je puno više subjektivna. Ovo je način kako dobro napisan je vaš broj. A to je nešto što ćete dobiti bolje s vremenom, i to je nešto što ćemo pružiti više kvalitativne povratne informacije o. I po dizajnu mogao bih znači prije dugo Možda ćete biti u iskušenju u nekom P postavljen učiniti nešto loopingly, ali da možda tri ili četiri, ili pet ugniježđena Fore petlje ili ugniježđena a petlje. To bi općenito trebalo početi da vas dodvoravanje i općenito će biti smatra lošeg dizajna. A vi ćete početi vidjeti u razredu i iz klase dobrih načina stvari, loše načine obavljanja stvari koje Možda svi biti točne, ali ne i nužno dobro osmišljen. Kao pisanje eseja. Možda ćete biti u mogućnosti staviti riječi na stranica koje su gramatički ispravan, ali esej ili Teza da su u samo potpuno nesuvislo ili unpersuasive. I tako da bi mogli biti analogni u napisano svijet lošeg ili dobrog dizajna. I stil, također, prilično subjektivan. Ali barem očekujemo dosljednost. Ovo je način kako lijepa je tvoj broj. Stvari su lijepo razvedena? Jesu li vaše varijable dobro imenovan / Jesu li svi Vaše zagradi i vitičastih zagrada usklađeni kao što bi trebao biti? Mi nemamo CS50 stil vodič kao problem Skup će vas uputiti na. Oni su udobnije dobrodošli zalutao od onoga tako dugo dok ste sebi dosljedan. I to je, također, je pouka ćemo pojačati u odjeljku. Dakle, ako je sve to bilo malo brzo, shvatite P set i dijelovi će ići u više dubine prije dugo. No, općenito imamo vrlo malo kante za CS50. Rezultati su uglavnom na skali od jedan do tri, ili jedan do pet. Mi smo literally--, a ja ne mogu reći to je dovoljno u prvom tjednu. Tri je dobro. Dakle, iako, da, tri iz pet normalno, matematički, može biti 60 posto ili poput D minus. Tri je, u stvari, dobro. A, u stvari, očekujemo većina učenika u razredu krenuti termin oko dvojke i trojke i četvorke. Vjerojatno ne toliko petice. One ne previše. Ali općenito započeti u kako slatko mjesto u krivulje tako da kako vrijeme napreduje, tu je zapravo prostor za, i mogućnosti za napredovanje. gornji Dakle, nemojte ravnati tri sa 60%. To je mnogo više od toga apstraktno. Formula s kojima smo izračunali razreda se ponderiraju se kako slijedi. Ispravnost vrijedi najviše. Dizajn je vrijedan nešto manje. Stil vrijedi malo manje. A to je općenito bilježi količinu vremena koji ide u dobivanju svake tih osi samo pravo. Stil je super jednostavno, treba biti super brzi, ali to je jednostavno navika dobiti lijen oko. Ispravnost moglo potrajati što većinu vremena. Chasing dolje neki bug moć uzeti da je dodatni sat ili više, i tako, bodovanja konačnici snima to. I tako, sada ozbiljnije riječ. Budući CS50 ima razlika, za bolje ili još gore, da su možda i bolje upoznati s pitanjima akademske iskrenost od većine bilo koje druge naravno. I doista, to je moje znanje koje šaljemo više studenata, na žalost, za disciplinske svrhe svake godine, kao rezultat. Dakle, u interesu pune objavljivanje, neka je kratko razgovarati o tome što se događa u CS50, a ono što vam može učiniti, i što možete biti svjesni. Dakle, ovdje od 2007. godine, kada je Sam naslijedio tečaj, je broj slučajeva oglasa odbora. Oglas Uprava je Harvard stegovni tijelo, odnosno sada sude savjetnik, na koje se odnosi slučajevi kada studenti učiniti nešto da se tečaj je Nastavni plan smatra nerazumnim. Nema realnom obrazac ovdje, rekao bih. To mijenja preko godine, ali općenito to je broj slučajevima koji su navedeni. Broj studenata koji su uključeni? To također varira. Tipično, prošle godine Primjerice, 29 studenata na Harvardu bili oglasa ukrcali, da se tako izrazim. 29 od njih sadašnjih studenata, Dvije od njih prije učenika, koji su u suradnji na neki način nepoželjinih. A onda u smislu postotak, to je obično oko 3% klase koja, na žalost, čini takve odluke. Dakle, prošle godine bilo je 3,5% od CS50 studentskog tijela da je oglas ukrcali, da se tako izrazim. Dakle, što se sve ovo znači? A što mi zapravo radimo? Dakle, za punu objavu, mi apsolutno, kao računalnih znanstvenika, imaju softverskih alata na raspolaganju i to je vrlo lako za nas, u pravednosti, da ostali prijatelji i kolege koji nisu prijelaz ove retke prijeći usporedbu svaki podnesak ove godine protiv svakoga podnošenje za proteklih osam godina. Softver čini. I na kraju je ljudske oči da odluče da li ili ne da se odnosi neki važno za daljnje rješavanje, ali softver svakako pomaže. A to, iskreno, zato što mislim imamo takve velike brojeve u CS50. To nije zato što CS50 studenti ili CS studenti više općenito bilo manje iskreni od svih drugih učenika, to je samo imamo alati i tehnike s kojima bi se ovaj prvi proći. Ali mi pripazi na sve ove stvari kao i, opet, u interesu priznajući posao koji je se stavi u po super većinom klasi. A politika tečaja u o akademskom poštenju, iako je gomila stavaka dugo s hrpom metaka koji su nadamo se vrlo čitljiva, to stvarno ne svode biti razumna. A najbolje pravilo da nudimo unutar nastavnog plana i programa je to, suština svih radova koji vam dostaviti ovaj tečaj moraju biti svoj vlastiti. I doista, u gotovo svim onima slučajevi iz za disciplinski postupak to je zbog nekog studenta kasno jedne Noć obično okrenuo svoju šifru više izravno na kolega, koji je zatim usvojen u cijelosti ili značajno istih. Ali stvarno, to je u redu. I doista, u uredu sati, gaćice od papira ste uručio ako dođe po uredu sati prošlog tjedna potiče koliko. Apsolutno si pozdravio i ohrabrio kako bi razgovarali o problemima seta s kolegama. Pomoći jedni drugima kada je kamen. No, općenito pravilo trebalo biti ovaj, "kada se traži pomoć, možete prikazati svoj kôd drugima, ali ne smijete vidjeti svoje. " Dakle, drugim riječima, ako sam bori sa nekim P set a ja sam sjedio u blagovaonici, ili u knjižnici, ili u učionici pokušavajući pronaći neku grešku, Ja sigurno mogu pokazati moj broj na mom zaslonu za osobu koja sjedi pored za mene, sigurno osoblje, ali i kolega. Ali ako je rješenje koje moj kolega ima je, oh, ovdje samo pogledati ono Ja sam, da prelazi granicu. I ja bih se usudio reći da je općenito razumna stvar za većinu ljudi vrlo lako uočiti liniju. I tako, vidjeti plan i program za više detalja. A sada jedan od više kontroverzne aspekte od CS50 nastavni plan i program koji sam mislio će govoriti u zaključku ovdje je tzv žaljenje klauzula. Dakle, ovdje je sve fine print. No, u cjelini smo vidjeli tijekom posljednjih 8 godina plus da, doista, gotovo sve CS50-a slučajeva akademskog nepoštenja bio rezultat samo loša odlučivanje kasno u noć. Rezultat stresa, rezultat nedostatka prehrane, nedostatak sna, Previše P setovi, previše rokovi, previše obveza. Stres izgradnji u 2:00, 3:00 AM, 04:00, uz rok nazire. Većina učenika u ovim slučajevima Upravo su loše odluke da bi jako dobro požaliti Sljedećeg jutra, ako ne minuta kasnije, ali do prošle godine nije bilo puštanje ventila da su ti učenici mogli zapravo otvaraju se zapravo obraćaju Problem na glavu bez straha od dignut s koledža uopce. I, doista, smo uveli ovo žaljenje klauzula prošle godine, koji kaže da ako u roku 72 sata, tri dana, prelaska neke linije propisane u nastavnom planu što se jave na jedan od kolegija je glava pa ćemo popričati o tome. Još uvijek su se neki ishod, suprotno onome što je je izvijestila da je suprotno. Još uvijek ima ishod koji je djelotvoran je, naravno, uglavnom nula p set ili uzimanje neke druge akcije, ali mi ćemo, doista, nositi ga sami i ne odnose se veći su rezultat bi moglo biti puno teža. I, doista, podijeliti ono što se dogodilo prošle godine, u osam godina, a sada devet godina, poučavanja ovaj tečaj a nakon petljaju s raznim kvržicama, okrećući razne brojčanika tijekom prošlosti nekoliko godina na akademske iskrenosti, i vidim po podacima bez ikakvog utjecaj, čak i govora kao što je ovaj, ovo je ruke dolje najbolje stvari uveli smo pedagoški u osam godina zajedno ove linije u CS50. 19 studenata je došao naprijed na temelju ovog klauzulu prošle godine. Uzeli smo nikakvu akciju za sedam od tih studenata, utvrđivanja da su nepotrebno zabrinuti. Oni ne, u stvari, prešla crtu, ali to Bio je to dobar razgovor da svejedno. Nulu smo 11 od rezultata koje su podnijeli. I u jednom slučaju smo pitao Student napraviti problem postaviti. Ali još uvjerljiviji, iskreno, s tim 19 razgovore, što je daleko više od mene Očekuje se da su, svaki od njih 10 minuta do možda jednom sat vremena, također je donio na vidjelo niz pitanja u vezi obiteljske probleme, prijatelju pitanja, mentalno zdravstvene probleme da smo tada se bavi, s studenta blagoslov, stanovnik dekan, ili prijateljima, ili bilo koji drugi broj potpornih sredstava. Tako da je to daleko jedan od najboljih koristi od našeg vremena i jedan od najboljih intervencija. Sa taj je rekao, to nije imalo ulaz na stopu detekcije akademskog nepoštenja općenito. I usudio bih se reći, ovaj podskup studenata prošle godine bio demografske da smo prethodno nije identificiran prije i nikad nije povezan s prije. I tako, to su bili divne priče o uspjehu iako su donijeli na vidjelo manje od optimalnim uvjetima. Dakle, imajte to na umu kao što bi, možda, neke loše odluke sami kasno noću, da je pribjegavanje tako dugo kao student u toj situaciji Posjedujemo i istupiti, tako da možemo ima tu vrstu razgovora i nositi se s njom na način da je obrazovna, a zatim možemo ga staviti iza nas sljedeći dan. Dakle, bez dodatnih teškoća, uzeti rub od ovog razgovora, razlog štenci su do jest samo probiti led na trenutak. I na žalost, oni su svi spavaju, ali ono što je trebalo da se desi ovdje je svatko trebao do divljenja i vrsta opuštanje nakon toga vrlo teških razgovora. Ali očito sam stavio štenci na spavanje. Ali ako idete na CS50-a web stranice SLASH štenci, možete ih gledati cijeli dan. Posebno možda 02:00, ili 03:00, ili 04:00 po noći vidjeti malo stresno djelovanje tamo. Tako da je slash štenaca. U redu. Nije li to zabavno? U REDU. Dakle, natrag na nekom računalu znanost, ako smijem. Dakle, podsjetiti da je zadnji put smo započeli gleda ne samo na glavni, što je zadana funkcija je kada zelena zastava kliknuli ekvivalent, ali mi smo također započeli ukratko pisanje neke od naših vlastitih funkcija. I do sada nitko od tih funkcija bio osobito velik ili mesnati. Vi ćete dobiti na one veće Funkcije vjerojatno, P postaviti 2, P postaviti 3, definitivno P postaviti 4 i dalje. Upravo sada većinu svojih programa, ako ne i sve od njih, sigurno za P Set 1 može biti učinjeno u cijelosti u glavni. Ako je vaš program je samo pet linija, 10 redaka, čak 20 redova, savršeno razumno napisati sve u glavni i ne pretjerano komplicirati Vaš kod, ali ono što mi radimo danas i dalje pokušava također uvesti neke dobre tehnikama tako da je vaš broj dobiva više komplicirani i kao problema želite riješiti dobiti teže i više zanimljiv imate, vrsta, alati u vašem alatni s kojima dizajn dobra rješenja za njih. Dakle, neka je uzeti brzo pogledati unatrag na Ovaj program iz mog prošlog tjedna, što je funkcija nula točka C A primijetiti da, jednostavno, to izgleda ovako s dva funkcije, glavni i naziv ispisa. I razmišljajući ili možda obrnuti inženjering i danas, što je motivacija za uvođenje funkcija u skladu 28 naziva, Naziv ispisa? Ili što je to primjer u Uvjeti principa ili takeaway, ako bi. Neki mrmljanje. Što? Da tako Funkcionalna raspadanja je vrsta fancy način govoreći, razložiti svoj program na sastavne dijelove a zatim koristiti one dijelove sastaviti cjelinu. Dakle, to je također samo vrsta od zalogaj već, ali to je možda čak i bolji primjer nečega Samo nazvao apstrakcija. Pravo? Apstrakcija će biti jedno od ponavljajućih tema u CS50 i informatika općenito jer je tehnika kojom se mogu riješiti Problemi učinkovitije jer vas može pisati rješenja više intuitivno i na način da vage i razumljivo je od strane drugih ljudi. Što mislim pod tim? Dakle, vjerojatno je puno više čitati pogledati program kao što je ovaj, super kratko iako je. Kada vidite na liniji 22 koji ima funkcija zove, naziv ispisa. To ime sama govori ono što čini. To je funkcija očito traje ulazna između svojih zagrada, i očito se nešto, vjerojatno ispisuje ime. I tako, iako smo apsolutno može imati učiniti ono što smo učinili prije tjedan dana, što je samo uzeti ovaj stvarni liniju koda, dobili osloboditi od toga, i dobiti riješiti sve ovo zajedno, smo nekako sažeto daleko pojam ispis ime. Ne zanima me ako koristite ispis def. Ne zanima me ako imate posto S i N. backslash To su nevjerojatno Arcane detalje. Ono što me je briga kao programer ispisuje naziv. I tako, što bolji način za to nego pozivom funkcije, naziv ispisa? I tako, da je bio jedan od motiva za nešto ovakvo. Izrada kod više čitati, više ponovno koristiti, a također samo opisno. Sada, neka je pogledati u još jednom primjeru, što je funkcija jedan, koje smo imali ovdje. Dakle, ovo je možda čak i više uvjerljiv zato što, u ovom slučaju, Ne želim samo dobiti int. Želim dobiti pozitivan int. I ispada da se pozitivan int što morate učiniti hrpa trčkaranje. Pravo? To nije jednostavna crta pozvati kao naziv ispisa je, što je doduše manje uvjerljiv. Da biste dobili pozitivan int, logically-- neka mi pomaknite natrag sakriti to. Što trebate učiniti? Poput svih alata smo ima u ovom trenutku su stvari kao što su ispis def iz Standarda Knjižnica i od CS50 knjižnici imamo Get Int, i dobiti Float, Nabavite Long Long, Get String, ali samo jedan, zameci, sada je dobiti Int. Dakle, ako je samo alat imate u svom alat okvir je dobiti Int, kako ćemo ići o provedbi da bi dobili pozitivnu int? PUBLIKA: Napravite dnevnik i provjeriti o tome je li ulaz koji su dali bio pozitivan ili ne. SPEAKER 1: Savršeno. Točno. Još jedan alat imamo u našem alatni od prije tjedan dana ili dva samo je petlje konstrukt. I tako, da, ako koristimo vrijeme petlje, ili do while petlja, ili prije Petlja se vjerojatno mogao izvući bilo koji od onih koji u nekom obliku. Možemo provesti pojam GET Pozitivan int korištenjem samo dobiti Int, i onda samo držati ga zvati i opet bi gnjaviti korisnika dok on ili ona zapravo daje nam ono što želimo. I tako sada, to apstrakcija procesa dobivanja pozitivnog int u funkciju pod nazivom Nabavite Pozitivan Int je malo više uvjerljiv jer pogledajte ovo. To su kao 10 plus linija koda koji su uključeni u dobivanje pozitivnog int, a ja stvarno ne zanima me kako to učiniti. Sve što je stalo da vas mogu to učiniti i tako da sam skrivene svi ti detalji iza funkcija zove Get Pozitivan int koji, Doista, ima tu do while petlja. I prošli tjedan za sintaksu tamo, ali to samo izjavljuje N, i ispiše uputu za korisnika. Ona poziva Get Int a onda provjerava opet ovo stanje, i opet, i opet sve dok korisnik ne surađuje. Tako sada, nekoliko razum provjere. Za one koji možda upoznati s nekim programiranje, zašto je N proglašena, zašto sam stvoriti N izvan do while petlja? Zašto je to na liniji 29, a ne na poput 33, na primjer. PUBLIKA: jer kada proglasiti ga van, to neka vrsta veće, veći scope-- SPEAKER 1: Dobro. PUBLIKA: --and ako izjavite je unutar petlje, [nečujan] jer ne zna o tome. SPEAKER 1: Točno. Ako ja mogu simplify-- to je pitanje opsega. I opseg odnosi na kontekst u koja varijabla postoji ili je korisna. A lijepo pravilo je da obično kad proglasiti ili stvoriti varijabla možete ga koristiti samo unutar od najbliže grli vitičastih zagrada. Dakle, što to znači? Ako sam, umjesto toga, poništiti i ići s nešto što se osjeća malo jednostavnije. Pravo? Linija 32 samo izgleda čišće mi sada. Radim obje stvari jednom i onda dodjeljivanje desna ruka na lijevoj ruci. Problem je sada na temelju da definicija opsega da je N može se koristiti u linijama 31 i 32 unutar ove petlje, ali gdje po toj definiciji može se ne može koristiti? U skladu što? Da. PUBLIKA: 35. SPEAKER 1: 35. Definitivno ne 35. I također gdje drugdje? PUBLIKA: 34. SPEAKER 1: Čak 34 problematično jer je izvan vitičastih zagrada. I tako, u stvari, da vidimo što se događa. Pravo? To se može činiti malo intuitivno ili ne može, ali vidjet ćemo što prevodilac ima za reći kada idemo u današnjem izvornog kataloga. Napravite funkciju jedan. O moj Bože. Pa, napokon sam završio da, usput. U redu. A što je problem ovdje? Vrlo arcane pogledati. No, ovdje je ono što sam typed-- napraviti funkciju jedan. Evo što bi izazvana, koji je zapravo pomoću prevodilac zveket s nekim od tih zastava da ćemo ponovno vidjeti prije dugo. I opet, uvijek gledati na prvom pogreškom, jer to može imati kaskadno besmisleno učinak na drugim linijama. Dakle, što to znači da je Problem je u funkciji 1.c. To je na liniji 32. I to je u koloni, ili karaktera, 13. Dakle, kada vaš tekst editor koji može će vam pomoći identificirati gdje je problem. Dakle, ako sam pomicanje gore, što je linija 32? To je uistinu ova koji je već istaknuo Pravo here-- neiskorištena varijabla n. Ali to nije neiskorišten. Ja sam ga koristiti. No, prevodilac je zbunjen, jer je postoji samo unutar tog opsega. I tako ja ne mogu ga koristiti ovdje. Ne mogu ga koristiti ovdje. I prevodilac, dakle, ni ne briga što pokušavam. Čini se da je neiskorišten u okviru svojih stvarnih dosega. Tako možemo proširiti opseg radeći upravo ono što smo započeli with-- int n. I iako to ne izgledaju kao elegantan, možda, a mi smo uzimajući dodatni liniju Ovdje, sada je u okviru posvuda. Tako ćemo pokušati ponovno. Tako bi funkciju jedan. Lijepo. A sada, ako sam, ako sam pokrenuti funkciju jedan, neka je dati negativan 10, negativna 1, 0, 1, i to doista radi. Dakle, postoji drugo rješenje ovdje. Znaš što? Što ako stvarno sam hrvanje s ovim? Ne znam gdje je n je trebao ići. Znaš što? Samo ću ga staviti sve Način na vrhu moje datoteke ovdje. Što bi to učinili, što mislite? Da? PUBLIKA: [nečujan]. SPEAKER 1: Da. Tako sam napravio to globalno, da se tako izrazim. Ako imate varijablu koja je izvan sve svoje funkcije koje je dopušteno, a broj bi trebao sastaviti, i n sada će biti dostupni ne samo u GET Pozitivan int, ali iu kojoj main-- je malo zabrinjavajuće, jer postoji već n u glavnom, tako da više na to u samo moment-- ali to će se smatrati loš dizajn. U redu. Ako morate posegnuti za nešto kao, oh, ja ću samo ga staviti ovdje jer šifra čini se sastaviti općenito nije najbolje prakse. Umjesto da želite odabrati najuži mogući opseg za varijable, što bi značilo ide s našim početnim dizajnom, koji je upravo ovdje. Sada kao stranu, ako imalo identično nazivom varijabla ovdje onako c će nositi this-- iako to neće dogoditi previše often-- je da je to još uvijek savršeno u redu ovdje. Ali ova definicija n u skladu 22 će sjene globalnu jedan. Dakle, to će raditi u Glavni i globalan zapravo će se primjenjuju kada ste u dobili pozitivan int Ali više o tome drugi put, ali jednostavno za one znatiželjan. Dakle ukratko, možemo riješiti ovo ovdje. Sada zafrkavati osim dvije druge dijelove prije nego što izgleda na posljednji redak koda u ovom programu. Dobiti pozitivan int. Na lijevoj strani od njegova riječ je riječ int. Što to znači misliš? Do sada smo uglavnom vidio nevažeće. Da? PUBLIKA: To je vrsta varijabla da pitate o tome. SPEAKER 1: Da to je vrsta, neka me Ne kažem promjenjiva, ali tip vrijednosti da tražim natrag za. I doista, to je intuitivno ovdje, nadam se. Pravo? Ako želite dobiti pozitivno int, što je to što želite function-- poput naših dobrovoljci iz prošlog tjedna da ti ruku natrag komad papira s int o njemu? I tako smo je navedeno da je Takozvani povratak vrsta ove funkcije je dobiti pozitivnu int. Ako to nije htio vratiti ništa, kažeš nevažeće. Ako želite da se vrate niz, kažeš niz. Ako želite da se vrate plovak, kažeš plutaju. Ali jedina koja vrijedi i ovdje logično, jer ja sam koristeći get int, iako sam ga ograničava na pozitivne vrijednosti, jest vratiti int. Dakle obrnuto, što to znači da postoji praznina u zagradi? Što zagrada općenito definirati? Da? PUBLIKA: To znači da je funkcija a zapravo ne uzimajući. SPEAKER 1: To znači da je funkcija a zapravo ne uzimajući ono? PUBLIKA: ulaza. SPEAKER 1: ulaza, god. Dakle, istina, ako zagradu Ovdje možete navesti praznina, to samo znači da ne želim nikakav unos. Ja ću se bave problemom sebe. I doista, ne morate se reci dobiti pozitivnu int ništa. Vi samo reći, dobili pozitivan int, i to Funkcija će otići i raditi svoj stvar. No, tu je bio mali trik imam igrao ovdje cijelo vrijeme kako bi bili sigurni ovaj kod sastavlja. Obavijest da int-- dobili pozitivan int void-- je na liniji 27. No, iz nekog čudnog razloga naizgled to je također ovdje na liniji 16. I samo za dobru mjeru ću ponoviti to tako da je potpuno identični. I sam je rekao prototip s Malo komentar jednog retka. Što se događa ako izbrisali, i Sada ponovno pokrenite bi Funkcija 1, enter. Ups. Čekaj malo. Gdje je moja kartica? Ha? Pričekaj. Napravite funkciju 1. Idemo tamo. U REDU. Nije ga spasio ispravno. Dakle, mislim da je malo bug ovdje gdje ja nisam vidim naziv kartice u ovom trenutku. Dakle, ono što se ovdje događa? Implicitna izjava o funkciji dobili pozitivan int nevažeća u C99. Pa opet zbunjujući. Pa što je ovo indikativno? Pa, ispada da C je prilično glupo. Pa, to je programiranje jezik, odnosno prevodilac je. To zna samo ono što imate ga učio, a to je samo će znati nešto ako ga je učio prije. Drugim riječima, u Glavni u ovom trenutku, ja sam pokušava nazvati funkciju zove dobili pozitivan int. Ali prevodilac ne ide primijetiti da biste dobili pozitivan int postoji sve linije 26. I tako ono što prevodilac ne samo pogreške čim dobije na liniji 17, govoreći implicitnu izjavu od dobiti pozitivnu int, što je samo fancy način govoreći, ja ne znate što dobijete pozitivan int još. Ostali jezici poput Jave i Python i Ruby mogla gledati naprijed. C ne. I tako je način na koji smo riješili ovo je jedan od dva načina. Ili on, ako je problem je da biste dobili Pozitivan int nije vidio prije, dobro, neka mi samo premjestiti na vrh. To bi riješili ovaj problem. Ali općenito, to je smatra bolju tehniku staviti svoj glavnu funkciju na samom vrhu, tako da čovjek čita svoj kod zna što program radi, jer glavna nije sahranjen sve način na dnu ili u sredini. To je na samom vrhu. Tako da se ne osjeća idealno. A zapravo možete dobiti u situacijama gdje ako jedna funkcija poziva drugi, koji poziva drugi, možete dobiti u pitanju, gdje ne može ići iznad drugoga, logično. To jednostavno nije moguće. I tako je način rada okolo ovaj je samo uzeti Funkcija potpis, tako da speak-- prva linija u kojoj je declared-- i samo kopirati, zalijepiti ga na vrh, ali ne s kovrčavom braces-- Samo sa zarezom. To je kao mali savjet onoga što će doći. A u stvari, sve ovo vrijeme, kad smo Vidjeli stvari poput standardnog io.h i cs50.h, Isto tako, u tih točaka h datoteke su tamo ostali prototipovi. I vidjet ćemo da je prije dugo. Dakle ukratko, kada imate program u datoteci s više funkcija osim glavna, gotovo uvijek žele da ih proglasi samo način njihova prva linija, nakon čega slijedi zarez, na samom vrhu datoteke. To je puno odjednom. Ima li pitanja? Ima li pitanja? U redu. Pa krenimo na tada na nešto poput kašlja. Oh. Kako dolikuje. U redu. Kašalj. Dakle, ovdje je c provedba programa smo neki dan u Scratch koji je vrlo jednostavno samo kaže kašalj, kašalj, kašalj. U redu. A netko je rekao neke dana da postoji način čišćenja ovaj kod gore već. U redu? Čim ste kopiranje i lijepljenje vjerojatno lošeg dizajna. Barem jednom smo dobili četiri ili pet ili 20 kašlja, ona se osjeća loše prakse. Mi samo zadržati kopiju, lijepljenje. Što je očito rješenje za čišćenje ovaj program gore? PUBLIKA: Petlja. SPEAKER 1: Da. Dakle, koristite petlju. I možemo koristiti za petlje, neko vrijeme petlje, bilo koji broj pristupa. I doista, to je ono što radimo u verziji ovdje. Ja umjesto da sam ga prepisivati u verziji jednog od cough.c da se samo kašalj unutar za petlje. U redu, ali postoji Prilika sada vrsti početka dizajnirati to malo više kao pouka smo učili prije nekoliko trenutaka, što je this-- pretpostavljam da sam htjela stvoriti funkciju zove kašalj, uzmimo samo na trenutak ono što će izgledati. Dakle, ako želim nešto kašljati, samo mi treba koristiti za ispis f unutar funkcije. I doista sam. A u stvari, sve je to Vrijeme, svaki put kad si ispis nešto zaslon, programer bi to nazvao nuspojava. Nije mi predaje natrag netko vrijednost. To mi je da neke akcije koji bi mogli biti vizualno očite. No, ova funkcija kašalj, to povratak sve se temelji na prvoj liniji? Ne, jer te vrste povratka je praznina, što samo znači to nije mi ništa vraćajući. To bi se moglo raditi nešto vizualno, ali to me ne predaje natrag komad papira kao i prošlog tjedna. Da li je potrebna bilo ulaz? Ne. I tako je ništavan ovdje. Dakle, to je također vrsta nad-inženjering ovaj problem. Pravo? Napravio sam program više složene, više linija koda, Nisam to napravio bilo više funkcionalna, ali to bi biti odskočna daska, možda, za šire kontekst s više komplicirano koda. Ali što je ovo? Što sam upravo done-- pogledavši to bez gledanja na komentar na samom vrhu file-- što imaju Ja temeljno učinio ovdje s mojim kašalj Provedba je to drugačije? Da, u leđima? PUBLIKA: Učinite to tako da možete imaju karakter isključiti. SPEAKER 1: Da. Dakle, to se osjeća vrsta lijepo. Pravo? To je kao dodavanje značajka na vaš Program ili vaša funkcija, u ovom slučaju. Još uvijek se vraća ništa. To bi moglo imati vizualni nuspojava, jer zove ispis f. Ali sada sam parametrizirana funkcija koja znači da ste naveli uzeti ulaz tipa int i nazvati nje, ali ja bi se moglo nazvati nešto što želim. U stvari, to samo može biti puta biti još jasniji. A onda sam samo mogao promijeniti ovo ovdje. No, poanta je da je to kako sam stvoriti funkciju koja uzima ulaz. A ako se sjećate flipping kroz možda online u jednom od walk-provodnike je Četvrti i posljednji kašalj primjer, primijetit ćete ovdje sam generalizirati moj broj further-- vrsta rastresen što dalje. Kao kašalj i kihanje, oba su o kao što je rekao nešto ili stvaranje nekakav zvuk. Spremi će biti odgovara Scratch blok. I tako ono što sam učinio u ovoj verziji, koje možemo samo pogled na, je kašalj je samo kao što je rekao, [Kašalj], kašalj, au međuvremenu, kihanje je kao što je rekao, [ACHOO]. I tako sam generalizirati provedbu tih do sada provedbu to generički funkcija, kažu, što je zanimljivo za današnje potrebe samo zbog toga još nema povratnu tip. No, koliko ulaza ima? PUBLIKA: Dva. SPEAKER 1: Two. I tako, ako želite uzeti u dva argumenta, Samo ih odvojite zarezom. A ako želite onda nazvati tu funkciju, primijetiti da ste upravo zvati recimo, citat, citat, prvi argument, zajedničko nje, za drugi argument. Pa opet, upravo smo sada građevnih blokova, tako da možemo zapravo provesti neke od naših vlastitih funkcija. U redu. Bilo kakva pitanja o njima? Dakle, sada ćemo guliti natrag sloj ako je tako. A cilj, u konačnici, je sljedeći tjedan Problem skup će biti na cryptogrophy-- umjetnost remećenje podatke. A posebno, informacije će vam šifriranje ili dešifriranje će biti tekst. I tako ta vrsta pozivnica Pitanje je danas kao dobro, što se događa ispod haube s tekstom izvan ASCII od tjedan nula, A kako smo zapravo početi manipulirati? Dakle, ovdje je Zamyla ime. A u tekstu, koji bi mogli biti unesene u kao GET niza funkcija. A počevši sada, kada vidite string kao this-- Z-A-M-Y-L-A- početi razmišljati o njemu kao da je svaki od tih likova je u kutiji njegova vlastite. I doista, u tjedan dana ili tako je vrijeme, svaki od tih kutija će predstavljati vrlo konkretno blok memory-- zalogaj memorije. Dakle, svaki od tih pisama, u konačnici, predstavljat će 8 bitova. A mi ćemo zapravo vidjeti što se događa na ispod haube u mom računalu. Ali ne dovoljno samo pogledajte Zamyla kroz ovaj objektiv, pri čemu svaki od ova pisma je u vlastitoj kutiji. A dovoljno je lijepo u C možemo pristup svakom od tih kutija izravno. Dakle, ako želite da biste dobili prvo slovo svog imena, super jednostavno u C. Ako želite dobiti posljednji pismo, super jednostavno i komadom nove sintakse. Tako ću ići naprijed u CS50 IDE i otvoriti string nultu točku C. I u ovom primjeru ovdje, postoje par novih stvari događa. Dakle, prvi u redu 19, mi smo vidi ovo before-- get niz. Dakle, baš kao brzo provjeriti zdravlje, ako bi netko mogao ponuditi verbalno laik objašnjenje što se događa u redu 19. Kao samo prevesti ovo u Engleski da cimerica ne CS50 mogli razumjeti. Da. PUBLIKA: Jeste korisnički unos string i pohraniti ga u promjenjivom s. SPEAKER 1: Dobro. Jeste korisničkog ulaznog niz i pohraniti ga u promjenjivom s. To je odlično. Dakle, na desnog strana, zovemo GET niz. To vraća vrijednost koji nisu dobili dodijeljena iz desne strane na lijevu ruku strana u varijablu zove s koji je dizajniran za pohranu niz. Točno. Tako sada postroje 22, po komentar na liniji 21, Očito ispisuje taj string jedan znak po retku. Ali kako? Dakle, prije svega, što inicijalizirati ja na 0. I onda kako ćemo doći do kraj Zamyla ime? Pa, na kraju Zamyla ime, što sam mogao ručno upisati u posljednjem karakter nekako joj je ime ili broj od toga. Pravo? Ako se vratimo here-- Z-A-M-L-- Y-l-A- tako da sam mogao upisati. Što je indeks Zamyla posljednji pismo? Ako je ovo 0-- govorio poput programmer-- 0, 1, 2, 3, 4, 5, Ja heard-- tako doista, posljednje pismo u Zamyla ime je šesti, ali ako računamo od 0, to će biti broj 5. Pa imajte to na umu ovdje. Ispada postoji funkcija u C zove strlen, i natrag u dan i do danas još uvijek, dosta programera odabrati za sinkronizaciju imena za njihovo Funkcije koje zvuče kao riječi oni pokušavaju reći. Dakle strlen je duljina niza. I tako što bi duljina niza S vratiti kada Zamyla je ulaz? PUBLIKA: Pet. Zvučnik 1: Z-A-M-Y-l. Šest. Pravo? Što je duljina Zamyla ime? Pravo? I samo u stvarnosti, šest slova. Pravo? I tako, što to znači za našu petlju? Idemo ići od 0 do šest, koji će nam dati pet ponavljanja. Što nam je činiti na svakoj iteraciji? Pa, posto C, netko pogađate drugi dan, znači rezervirano mjesto za što? PUBLIKA: Char. SPEAKER 1: Samo char. Dakle, jedan character-- ne više likovi poput niza. I onda ovdje je nova linija da smo dobili ispis. A onda tu je novi sintakse. Ako želite ispisati i-tog znak u nizu S, da tako kažemo, možete jednostavno reći naziv string S, a zatim otvorite uglata zagrada, i zatim zatvorena uglata zagrada, s I sredina. I to je vrsta lijepo u tome To je vrsta izgleda kao kvadrat baš kao i trgova u kojima Zamyla a likovi postoje na toj slici tamo. Dakle, ako sam zapravo pokrenuti ovo Sada, neka je vidjeti što se događa. Napravite string 0 dot crta string 0, a onda sam će upisati Zamyla ime. Nema brz, jer nisam koristiti za ispis f, ali to je u redu. Ja samo znam što da radim. I doista, ona ispisuje Zamyla ime, jedan po retku. Sada ćemo se malo osvrće. Pretpostavimo da nisam znao o strlen i ja shvatio, Sve je u redu, nitko se neće imati ime veći od kao 50 znakova. Idemo naprijed i ponovno ovu i ponovno ga, a zatim upišite u Zamyla ponovo. Logično, što je Program će pokušati ispisati? Z-A-M-Y-L-A kao što su zatim 45 nepoznate bajta memorije. I doista, mi ćemo se vratiti ovoj ideji memorije. Ali samo logično, ako Zamyla ime je to dugo, po slici ovdje, što mi govori se držati tisak, držati ispis, zadržati tisak, držati ispis, držati ispis, sve do 50. karaktera, koji tko zna što će se dogoditi. Tako ćemo zapravo pogledati. Idemo upisati Zamyla. Zanimljivo. Mi se posrećilo. Samo cijela hrpa bijelog prostora. Oh. Postoji jedan funky znak. Izgleda vrsta kao čudan pitanje označiti postoji, ali postoji Zamyla ime. Idemo stvarno ne osvrće. Kako bi bilo da ispis 500 blokovi u nepoznato? Idemo naprijed i čine ovaj kao i onda ponovno pokrenuti. I neka je cijelog zaslona, ​​jer moramo vidjeti više prostora. Zamyla. Posrećilo opet. Dare smo dobili više osvrće? Idemo više ne osvrće. 50.000 znakova. To je većina sigurno nije dobra ideja. U redu. Napravite niz 0. To će biti naš posljednji demo. Zamyla. Uh. Uh. U REDU. Dakle, moja memorija stvarno prazna upravo sada, koja je zapravo vrsta povoljno. Ono što pokušavam dobiti to-- redu. I sada sam samo ću dobiti osvrće. 500.000. Make-- idemo punom zaslonu ga. Unesite. Zamyla. Idemo tamo. Ja nemam pojma što je to je, ali to zvuči loše. U redu. A u stvari, uskoro, ako ste među sretan par u uredovno vrijeme au problemu postaviti jedno, ti može vrlo dobro susresti ovo. Segmentacija krivnja zapravo radi imaju dobro definirano značenje. To znači nekakvu grešku se odnosi na segment memorije. A u laik uvjete, to znači da je dotaknuo memory-- koristili smo RAM-a na računalu da ne bi trebali imati pristup. I to je ono što je i moćan i opasan također o C je da ste zapravo ima neometan pristup na cjelinu programu memorije ili bajtova ili RAM-a, točnije. Dakle, iako Zamyla ime je duga samo šest znakova, Ja još uvijek mogu otići nigdje u spomen želim. I usput, ako ste ikad pročitao neki članak tijekom godina o nekim poslužitelj ili neki program uzimajući napuknut ili sjeckan to uzeti prednost nečemu zove buffer overflow iskoristiti da ćemo zapravo govoriti o nekoliko tjedana, to je uglavnom se odnosi na neki način prevariti računalo u ide dobro izvan granica memorije da bi trebali imati i pronalaženje nešto sočno u tome memory-- lozinku, možda, način od zaobilazi neki serijski broj ček, ili samo općenito mogućnosti izigrati računalo izvršava Kod koji nije bio namijenjen. Ali neka se vratiti stvarnost za samo trenutak gdje je ovaj program bio provodi uz strlen, i uvesti jednu stvar ovdje. Što je novo među tim top tri linije? Dakle niz točkica h. Ispada da postoji ova knjižnica zove Gudački Dot H, ili Gudački knjižnica, čiji je zaglavlje datoteke, takoreći, je niz točkica h da mi daje Pristup ovom strlen funkciju. Ako sam propustio da, prevodilac je će vikati na mene u nekom obliku. Ali znate što? Sada se stvarno nijansiranim. U skladu 22, nešto vrsta od inefficient-- loše osmišljen, arguably-- o ovom liniju koda. Razmislite o tome kako za-petlje provode a što korake dogoditi opet i opet again-- inicijalizacije, stanje, kod koje dobiva izvršiti zatim prirast ili promjena, onda je stanje, zatim kod, zatim promjene, a zatim uvjet, onda je broj, zatim promjene, i tako dalje. Dakle, ono što bi moglo biti malo zabrinjavajuće ili loše učinio ovdje? Da, u plavom. PUBLIKA: Strlen je pozvao mnogo, mnogo puta. SPEAKER 1: Da. Dakle strlen naziva mnogo puta, ali ono što je duljina Zamyla ime na Prvi put se petlja izvršava? PUBLIKA: Šest. SPEAKER 1: Šest. Pa, što je duljina njenog imena drugi put kod izvršava? PUBLIKA: Šest. SPEAKER 1: U redu. To je još šest. Pravo? Zarla ime nema promjene, čak i ako tražim na samo dio slova u njeno ime. I tako je činjenica da sam uspješno pita to pitanje, što je duljina Zamyla, što je duljina od Zamyla, što je duljina Zamyla, šest zasebnih puta, ili sedam čak, samo je glupo, jer to je nepromjenjiv da odgovor. I što sam mogao zapravo to je this-- u nizu jednom Imam marginalno bolju verziju ovdje. There-- whoops-- niz dvije Imam marginalno bolje verziju u kojoj Ja this-- umjesto samo inicijalizacije I na 0, ja zarezom proglasiti drugu varijablu nazvanu n- ja ne moram opet reći int. Ne treba, zapravo. Ali kažem nje. A onda sam inicijalizirati n strlen n, tako da je sada koliko puta se strlen se izvršava u ukupno? Samo jednom. I tako to je ono što mislimo ranije o boljem dizajnu. Zapravo jednom je vaš broj je ispravan, ide natrag i razmišljanja kroz, sam koristeći samo memorije ili kao par sekundi ili milisekundi vremena računalo kao moguće provesti neki problem? A ja ću za pomicanje i upravo spomenuti da je ovo spominjanje od null u ovoj verziji, ali ćemo se vratiti na to prije dugo. Jer za sada, neka je pogledati na kojoj će ovo nas vodi. Dakle, jedan, ispada da sada kada imamo mogućnost gledati na pojedine znakove, možemo iskoristiti nešto iz tjedna 0 da je vrlo kompliciranih i vrsta nezanimljiva u to vrijeme. Ali sada, a pogotovo kad smo doći do Kriptografija u tjedan dana, to će biti prilično snažan. Ispada da s nekim Podaci types-- Ints i pluta i znakova i žice i Drugi things-- neki od njih može se vrlo jednostavno pretvoriti u drugu. Na primjer, kada smo razgovarali o ASCII neko vrijeme ago-- evo velika slova putem M, točka, točka, dot-- rekao mi da postoji mapiranje između tih slova i brojeva. A u stvari, to vrijedi za velika slova, kao dobro. Mala je a 97, kapital je a 65. I tu je broj u ASCII, što je upravo to mapiranje sustav za sve one drugih pisama. Dakle, što to znači? Pa, ja ću ići naprijed i otvoriti se u realnom brzo nešto što se zove ASCII 0, od kojih je većina je komentari. I opet online možete uvijek Pogled kroz komentare. A pogledajte što je to će učiniti. Tako da je dobio glavnu ulogu. Ja sam hard-coded brojeve samo za Sada, jer znam što radim. Znam što želim vidjeti ovdje. I ja sam inicijalizacije do 65. I ja sam brojati do kroz 26 slova ukupno. A što ću ispisati jednu liniju na vrijeme ako može protumačiti istaknute linije? Što dobiva tiskani? Da. PUBLIKA: Hoćete ispisati pismo koje odgovara karti Pismo vrijednost i broj vrijednosti? SPEAKER 1: Točno. Idem ispisali pismo odgovara cjelobrojna vrijednost, i obrnuto, kao što slijedi. Pa ovo je netko rekao ranije, je samo rezervirano mjesto za char. Još uvijek je. To, naravno, je rezervirano mjesto ima li int-- nije nova linija. A sada primijetiti, moj prvi vrijednost koja Ja sam plugging u za to rezervirano mjesto ne samo ja govorim, u zagradama, char ja, koje je usputna char je govori prevodilac, liječiti I ne kao što je to, što je broj. Tretirajte ga kao stvarnog karaktera. Dok druge vrijednosti sam plugging in-- I-- samo treba biti broj. Dakle, ako sam sastaviti ovaj program-- tako da je ovo napraviti ASCII 0, dot Slash ASCII 0-- sam samo dobiti ovo zgodan mali grafikon koji mi pokazuje sve moguće preslikavanja bez da ga misle kroz ili to shvatiti na moj posjedovati. I ja sam također ispis, primijetiti mala slova, jer nekoliko redaka kasnije, sam Također ispisati ovu mapiranje kao i, što je samo kažu da kad jednom shvatiti što se događa ispod napa, možeš automatski pretvoriti natrag i naprijed. A u stvari, ako bilo koji od vas sve je to učinio u osnovnoj školi ili čuo o nekome mitski uzimanje bilješke i to prolazi na njegov ili njezina prijateljica u razredu, ali kodiran pisama poput postaje B, i B postaje c, ili nešto složeniji od toga, dobro, Kako bi vam ići oko provedbenih da kao dijete? Pa, samo vrsta znali Postaje B, B postaje C, ali matematički, Što je to dijete radi? Što ste dodajući da svako slovo? Efektivno, 1. Dakle, kada promijenite A do točke B, to je vrsta kao što su mijenjanje 65 do 66, što matematički znači samo dodajte 1. I tako, ako ste bili na provedbu da je malo varljiv tehnika za svog učitelja u kodu, što može učiniti upravo to upravo dodavanjem jednog slova zajedno. Dakle, prije nego dugo, smo će vidjeti kako ćemo mogu iskoristiti da se zapravo iskreno otimati i dešifrirati Informacije. U međuvremenu, znamo da smo započeli uvesti par drugih knjižnica here-- string jedan danas. I vrlo korisna stranica nadamo se da ćete pronaći naziva reference.cs50.net, koji nastavno osoblje su sastavili, tako da ako želite gledati kako strlen djela, možete početi tipkati Ime funkciju a, kliknite strlen tamo, a zatim manje ugodno objašnjenje će se pojaviti. Ili, ako želite službeni Linux-based objašnjenje, možete kliknuti više udoban u gornjem desnom kutu, i to predstavit će iste informacije, ali u složenijim uvjetima. To je koristan resurs zapravo znam što sve ne. Sljedeći put ćemo pogledajte Ovaltine i više, i predstaviti sebe u svijet kriptografije. Prije toga, vidjet ćemo kasnije ovaj tjedan. I sad, Colton Ogden. Vidimo se u srijedu. [Glazbom] [Glazbom] SPEAKER 1: Što [Bleep] radiš? SPEAKER 1: Ja sam jeo moj desert? Kako ćete ga jesti? Sa svojim rukama? [Glazbom]