[Glazba svira] DAVID J Malan: U redu, dobrodošli natrag u CS50. Ovo je početak drugog tjedna. Riječ od jednog od naših prijatelji na kampusu - Ako ste zainteresirani, eventualno, bilo sada ili u nekom budućem razdoblju još, još jednom ugodno, nastava srednje škole malo nešto o računalnoj znanosti, napraviti glavu na taj URL. Oni su u određenoj potrebi sada od učitelji, osobito ako imate imali neke izloženost računalne znanosti. Dakle podsjetiti da je posljednji put, uveli smo nekoliko tipova podataka u C, i možda su počeli da se vaš ruke prljave s tim do sada u problemu postaviti jednu. I imali smo char. Dakle, u ponešto tehničkih uvjeta, što je znak kao što ga danas poznajemo? Dakle, to je lik, ali budimo Točnije sada. Što to znači za karaktera ili pojedinac znak? Non-numerička znaka - pa ne nužno. Ispada da je čak i brojeve, pa čak i interpunkcije i slova su zastupljeni s ovim podacima upišite poznat kao znak. Pa to nije nužno po abecedi. Da? Tako da je ASCII znakova. Dakle, ako mislite vratiti na nulu tjedna, kada je imali smo bajt volontera smisliti i bilo držati ruke gore ili ne sve, one su bitova. Ali zajedno kao grupa od osam, oni predstavljali bajt. I mi uveo pojam ASCII na tom predavanju, što jednostavno mapiranje između brojeva i slova. ASCII i koristi, što ti ljudi implicirana, osam bitova da predstavljaju karakter. Dakle, u skladu s tim, ako je osam bitova može jedni se na jednoj od dvije vrijednosti - nula ili jedan - To znači da su dvije mogućnosti za tu osobu - nula ili jedan - dva za ove osobe, dva za to osoba, dvije za ovaj jedan. Dakle, ukupno je dva puta dva puta dva puta dva puta dva - pa dva osma ukupno. Dakle, postoji ukupan broj znakova 256 moguće da možete predstavlja s osam bitova. Sada, oni od vas koji govori Azijski jezici mogao znati da postoji više likovi u svijetu nego samo Kao i BS i CS i DS. I doista, ASCII nije dostatna za Puno jezicima svijeta. No, više o tome drugi put. Za sada znamo da je u C, ako želite za zastupanje pismo, komad interpunkcije, ili samo nešto znakova u prirodi, mi koristimo znak. I to je jedan bajt ili osam bitova. Kako o int? Pa, int je cijeli broj. Koliko bita, ako se sjećaš, bio cijeli broj obično? Svatko opoziv? Dakle, to je obično 32. To zapravo ovisi o računalu koji koristite. No, u aparat, a puno računala, što je 32 bita ili četiri bajt - osam puta četiri. I Ints jednostavno se koriste za pohranjivanje brojeva, bilo negativne, pozitivan ili nula. A ako imaš 32 bita, a vi samo briga o pozitivnim brojevima, može tko približan koliko je to moguće integeri računalo može predstavljati na nulu na gore? Dakle, to će biti dva do 32, koji je otprilike četiri milijarde. Tako su ove dvije sile će biti povezana pitanja u računalnoj znanosti. Kao što ćemo vidjeti, oni su prilično zgodan raditi, čak i ako to nije sasvim lako učiniti math u svojoj glavi. Dakle, mi ćemo reći oko četiri milijarde. Sada, dugo dugo - možete vrsta pogodak. To je duži od int. Koliko bita? Dakle, 64 bita ili osam bajtova. To jednostavno znači da možete predstavljati čak veći brojevi, veći pozitivni ili veći negativni brojevi. I o tome kako plutaju? To je pomičnim zarezom vrijednost od 32 bita. Ovo je samo realan broj, nešto s decimalne točke. Ali ako umjesto toga potrebno više mjesta nakon decimalne točke ili želite predstavljaju veći broj s nekim frakcija nakon toga, možete koristiti dvostruko, što je 64 bita. No, tu je zanimljiva takeaway ovdje. Dakle, ako Ints su ograničena i 32 bita čak i duge žudi ograničene su 64. bita, koja vrsta moli pitanje, što ako stvarno želite brojati viša od 4 milijarde eura za cijeli broj? Pa, ti samo koristiti dugo dugo. No što ako želite brojati veća od dvije do 64., dati ili uzeti? Sada, to je ogroman broj. Ali na kraju, možda je zapravo brigu o takvim vrijednostima, pogotovo ako koristite bazu podataka i počinju prikupljati puno i puno i puno podataka i dodjeljivanje jedinstvene Brojevi na svaki komad tih podataka. Tako smo vrsta imati problema. A isto tako, s pomičnim zarezom Vrijednosti - pluta ili u parovima - ako imaš samo ograničen broj bita, koliko je ukupna količina mogla da možda predstavljaju? Pa, to je manje jasno kada uključivati ​​decimalne točke. No, to je sigurno konačna. Ako imate ograničen broj bitova, konačan broj ljudi, konačnih broj žarulja, sigurno možete predstavlja samo ograničen broj s pomičnim zarezom vrijednosti. No, koliko je realni brojevi Jesu li njihove u svijetu? Tu je beskonačan. Dakle, to je vrsta problema, jer smo nemaju beskonačnu količinu memorije ili RAM-a unutar našeg računala. Dakle, neke stvari mogu dogoditi izazovan. Tako ćemo ići naprijed i pokušajte izraziti ovo ovdje. Dopustite mi da ići naprijed i otvoriti gedit. Ja ću ići naprijed i spremite datoteku pod nazivom "floats0.c" samo da bi se skladu s primjerom koji je dostupni online, ako želite. I ja ću ići naprijed i definirati na sljedeći način - Ja ću ići naprijed i reći, int Glavni nevažeće, kao što smo često. A onda u tom programu, idem izjavljujem sebi plutaju, tako da 32-bitni varijabla zove f, proizvoljno. A onda ću pohraniti u njoj Ne znam, desetine, pa 0.1. Pa ću izraziti da kao jedan podijeljeno 10, što je sasvim legitimna u C. A onda u drugom redu, ja jednostavno želite ispisati tu vrijednost. Dakle podsjetiti da možemo koristiti printf upoznati. Mi ne želimo koristiti% sam za int. Želimo koristiti% f za plovak. A onda ću to učiniti obrnute kose n, blizu citat, zarez, f, zarez. Dakle ovdje je moj program. Već postoji jedan bug. Da li je netko za koga to kliknuo Već žele ukazati najmanje jedan bug sam napravio? Da? Da. Zaboravio sam "# include", na vrhu, oni simptom koji, ako sam pokušati sastaviti ovo će biti da Prevodilac će vikati na mene, govoreći nedefiniranu simbol ili nešto u tom smislu. To ne razumijem nešto printf sviđa. Tako ću učiniti "# uključiti ", Spremite datoteku. I sada je u boljoj formi. Ali ja ću istaknuti od jedan novi detalj danas. Osim što određuje mjesto nositelji kao% f% i% s, možete ponekad utječu na ponašanje tog rezervirano mjesto. Na primjer, u slučaju floating Vrijednost boda, ako želim prikazati jednu decimalu nakon Razdoblje, ja zapravo može učiniti 0,1 f. Dakle, drugim riječima, sam odvojiti f i znak postotka s 0,1, jednostavno printf reći, možda ste cijelo hrpa brojeva nakon decimale točka za mene. Ali ja samo želim vidjeti jednu od njih. Dakle, ja ću ići naprijed sada i uštedite ovaj program, idu u moj terminala prozor, a ja ću ići naprijed i tip bi float 0, upišite. Vidim da je pomalo zagonetan liniju koja će početi više smisla kao i mi ga zafrkavati, osim ovaj tjedan i sljedeći. Sada ću ići naprijed i pokrenuti float nulu. I, prokleto. Dakle, postoji još jedan bug Ovdje iz nekog razloga. Ja sam prilično siguran da je jedna desetina, ili jedan je podijeljeno 10, nije 0.0. Možda mi se ne gleda na dovoljno znamenki. Pa zašto ne kažem dva 0,2 vidjeti dvije decimalna mjesta umjesto samo jednog. Pusti me natrag u moj prozor terminala ovdje i udario se nekoliko puta na pogledajte moju povijest. Da bi plutaju nuli opet, a onda se opet. I sada ući. I sada sam prilično siguran da je to pogrešno. I sam napraviti tri i četiri, a ja sam Vjerojatno će se i dalje pojavljuje nule. Dakle, gdje je bug? Jedan podijeljeno 10 bi trebao biti 0.1. Netko želi uzeti ubod nožem u što temeljno je pitanje? Da? Obojica su cijeli brojevi. Pa što? Dakle, s jedne podijeljeno 10, koji je što mi je činiti u aritmetici. I sam se 0.1. Da. I tako je doista to pitanje. Kada se cijeli broj u računalu a vi ga podijelite sa drugim cijelim brojem, računalo po defaultu će se Pretpostavljam da želiš cijeli broj. Problem, iako, naravno, da 0,1 nije cijeli broj. To je realan broj. I tako što računalo ne po Zadana je to samo baca sve nakon decimalne točke. To ne zaokružiti dolje ili gore po sebi. To jednostavno odbaci sve nakon decimalne točke. I sad to ima smisla. Jer sad smo jasno otišao s nula. Ali čekaj malo. Ne vidim int nulu. Ja zapravo vidim 0,00. Pa kako sam pomiriti sada? Ako netko podijeljeno 10 je nula, ali ja sam vidim 0,00, gdje je to sve pretvoriti natrag na pravi broj? Da. Točno. Tako se ovdje u skladu pet, kada sam zapravo pohraniti da 0.1, koji se potom odrezan na nulu, unutar plovak, to je jednako učinkovito pohranjivanja ne kao int, ali, Doista, kao float. Osim toga, i onda sam se koriste printf izrijekom ispisati taj broj dva decimalna mjesta, iako postoji zapravo ne može biti bilo. Dakle, ova vrsta sranje, zar ne? Očito ne zna matematiku, barem na ovoj razini precizni, u računalu. No, sigurno postoji rješenje. Koji je najjednostavniji fix smo mogli možda i učiniti, čak i samo intuitivno ovdje riješiti ovo? Da? Uključite se cijeli brojevi u - Da. Čak i ako nisam sasvim siguran što je Stvarno se ovdje događa, ako je to temeljno ima veze s tim kako što Ints, dobro, zašto ne bih bi da je 10,0, što je ovo 1.0, ponovo spremiti datoteku. Pusti me natrag na Dno i rekompiliranje. Dopustite mi sada reprizu. A tamo - Sada, ja sam dobio moj desetine predstavljeni kao 0.10. U redu. Dakle, to nije loše. I neka mi istaknuti i jednu drugu stranu mogli smo riješiti to. Dopustite mi da se zapravo vratiti u vrijeme kada smo imali to kao jedan Deseti trenutak prije. I neka mi ići naprijed i ponovo spremiti ovu datoteku kao drugi naziv datoteke, samo na imati malo kontrolnu točku. Znači, to je jedna verzija. I sad neka mi ići naprijed i napraviti još jednu verziju. Zvat ćemo ovu verziju dvije nule indeksiranih. I ja ću to učiniti umjesto ovo - znate što? Dodavanje točku nula radi u ovom slučaju. Ali pretpostavimo da se jedna bila promjenjiva. Trebala su 10 varijabla. Drugim riječima, pretpostavimo da nisam mogao samo teško-code 0,0 na kraju ove aritmetički izraz. Pa, ja zapravo može učiniti nešto u zagradama se zove casting. Ja mogu baciti taj cijeli broj 10 na plovak, i ja mogu baciti taj prirodni broj jedan plutaju, kao što je dobro. Tada matematike koja će biti učinjeno stvarno je 1,0 podijeljeno 10,0, rezultat koji ide u f kao i prije. Dakle, ako sam kompilirati to kao da pliva 2, a sada lebdi dva, ja se isto odgovor, kao što je dobro. Dakle, ovo je prilično neprirodan primjer, kako riješiti ovaj problem uvođenjem casting. No, u cjelini, casting će biti moćna stvar, pogotovo za Problem postavljena dva u tjedan dana, kada je želite pretvoriti jednu vrstu podataka još da je na kraju dana su predstavljeni na isti način. Na kraju dana, svaki što smo razgovarali o do sada je samo Ints ispod haube. Ili ako je preniska razina za da, oni su samo brojevi ispod poklopca motora. Čak i likovi, opet, prisjetimo Iz tjedna nule, su brojevi ispod poklopca motora. Koji je reći, možemo pretvoriti između različite vrste brojeva ako oni su samo dijelovi. Mi može pretvoriti između brojeva slova i ako su oni samo bita, i obrnuto. A lijevanja na ovaj način je mehanizam u programiranju koji vam omogućuje prisilno promijeniti jednu vrstu podataka u drugu. Nažalost, to nije tako jednostavno kao što sam možda svidjela. Ja ću se vratiti u plovcima 1, što je jednostavnije, jednostavno jedna s 0,0 dodana jedni. I baš kao brzi pijanka, neka mi ići naprijed i kompilirati to, da pliva 2 - Nažalost, to bi pliva 1. A sada pokrenuti pliva 1. I u dnu, primijetit da sam doista dobili 0,1. Dakle, problem riješen. Ali ne još. Ja sad idem da se malo znatiželjni, i ja ću se vratiti u moj printf izjava i recimo, znate što? Ja bih potvrditi da je ovaj stvarno jedna desetina. I ja ću htjeti vidjeti da, recimo, pet decimalnih mjesta. To nije problem. Mijenjam dvije do pet godina, Ja kompilirati s make. I repriza je kao lebdi jedan. Gledajući prilično dobro. Moje provjere Razum može završiti postoji, ali Idem malo više avanturistički. Ja neću promijeniti 0,5-0,10. Želim vidjeti 10 znamenki nakon decimalno mjesto. I ja ću ići naprijed i kompilirati to i repriza lebdi jedan. Nekako sam žaljenje što je ovaj test dalje, jer mi matematika nije tako ispraviti više, čini se. Ali čekaj malo, možda to je samo slučajnost. Možda računalo djeluje malo čudno. Dopustite mi da ići naprijed i do 20 decimalne točke i ja uvjeriti da znam Kako to učiniti math. Znam kako programirati. Provjerite pliva 1, kompilirati i prokletstvo. To je stvarno, stvarno dobivanje daleko od oznake. Dakle, ono što se ovdje događa? Intuitivno, na temelju naših pretpostavki ranije o veličini vrste podataka, što mora biti ovdje događa ispod haube? Da? Točno. Ako želite ovu veliku preciznost, te to je pakao od puno preciznosti - 20 brojeva nakon decimalne točke. Vi nikako ne može predstavljati brojki, osim ako imate proizvoljna broj bitova. No, mi ne. Za plovak, imamo samo 32 bita. Tako da ako 32 bitova može se permuted u način - baš kao i naše ljude na, pozornici Ruke gore ili dolje - u konačnim brojem načina, postoji samo konačan broj realnih brojeva što može predstavljati s tim bitova. I tako na kraju računalo će se morati početi rezanje uglova. Računalo može sakriti one detalje od nas za malo vremena. Ali ako počnemo njuška po broju i gleda sve dalje i dalje, na prateći brojeve u cijelom broju, onda ćemo početi vidjeti da je zapravo približavanju Ideja za desetinu. I tako ispada, tragično, postoji beskonačan broj brojeva ne mogu predstavljati upravo u računalo, barem s konačnim broj bitova, konačni količina RAM-a. Sada, nažalost, to ponekad ima stvarne posljedice. Ako ljudi ne sasvim cijeniti to ili vrsta uzeti zdravo za gotovo činjenicu da je njihov računalo samo će učiniti ono što oni to reci da to i ne razumijem to temeljni zastupanje Detalji - koji, iskreno, u nekim jezicima skriven od korisnika, za razliku od C - neke loše stvari mogu dogoditi. A što sam mislio da ćemo to učiniti je uzeti jedan korak natrag. A to je oko osam minuta videa. To emitiran prije nekoliko godina, i to daje uvid u ono što se zapravo može ići krivu kada pod-Cijenim to vrste pojedinosti u vrlo isuviše stvarni svijet. Ako smo mogli dim svjetla za nekoliko minuta. ZVUČNI 1: Sada se vratiti u strojarnicu nepogode na Moderna čuda. Računala - svi smo došli prihvatiti Često problemi frustrirajuće da idu s njima. Bugs, virusa i softver propuste su mala cijena za plaćanje praktičnost. No, u high-tech i high-speed vojne i svemirski program aplikacije, najmanji problem s mogu povećavati u propast. 4. lipnja 1996, znanstvenici su spremni lansirati raketu Ariane 5 bespilotnu. To je prevozio znanstvenih satelita s ciljem određivanja točno kako Zemljino magnetsko polje u interakciji sa solarnim vjetrovima. Raketa je izgrađen za Europsko Svemirske agencije i odignuti od svojih objekt na obali od Francuskoj Gvajani. JACK GANSSLE: U oko 37 sekundi u leta, oni su prvi primijetili nešto je pošlo krivo. Mlaznice su zakretanjem u način oni stvarno ne treba. Oko 40 sekundi u letu, jasno je vozilo u nevolji. I to kad su se Odluka da ga uništi. Časnik rasponu sigurnosti, s ogromne hrabrosti, pritisnuo gumb, raznijeli raketu prije nego što je mogao postati opasnost za javnu sigurnost. ZVUČNI 1: Ovo je prvo putovanje od Ariane 5, i njegovo uništenje održana zbog nedostatka ugrađen u raketnom o softveru. JACK GANSSLE: Problem na Ariane je da je broj , koja je zahtijevala 64 bita izraziti. I oni su htjeli pretvoriti na 16-bitni broj. Pretpostavili su da je broj bio nikad će biti jako velika, da je većina one znamenke u 64-bitnoj Broj su nule. Oni su bili u krivu. ZVUČNI 1: nesposobnost jedne softvera Program prihvatiti kakav Broj generira jedan je u korijenu neuspjeha. Razvoj softvera postao vrlo skupi dio nove tehnologije. Ariane 4 raketna je bio vrlo uspješna, toliko o softveru stvoren za to je također koristi u Ariane 5. PHILIP Coyle: Osnovni problem je da Ariane 5 je brži, ubrzan brži. A software je ne činili su to. ZVUČNI 1: uništavanje raketa bio ogroman financijski katastrofa, sve zbog jedne minute softvera pogreške. No, to nije bio prvi put da su podaci Problemi pretvorbe je udario moderni raketna tehnologija. JACK GANSSLE: Godine 1991, s početkom od prvog Zaljevskog rata, Patriot Projektil doživjeli slične vrste je problem broj pretvorbe. Kao rezultat toga, 28 Američki vojnici su poginuo je, a oko 100 ranjeno kad je Patriot, koja je trebala kako bi zaštitili protiv dolazni Scuds, nije uspio ispaliti raketu. ZVUČNI 1: Kad Irak napao Kuvajt i America pokrenula Pustinjska oluja Početkom 1991, Patriot raketne baterije bili su raspoređeni kako bi zaštitili Saudijsku Arabiju i Izrael iz iračkog Scud raketnih napada. Patriot je američki srednjeg dometa zemlja-zračni sustav proizveden od Tvrtka Raytheon. Theodore POSTOL: veličina Patriot presretač sama je otprilike 20-stopa. I to teži oko 2000 kilograma. I ona nosi bojevu glavu od oko - Mislim da je oko 150 £. I sama je bojna glava high eksploziva koji ima Fragmenti oko njega. Kućište bojnom glavom je dizajniran djelovati kao sačme. ZVUČNI 1: Projektili su provedena četiri po kontejneru i prevoze po polu prikolica. PHILIP Coyle: Patriot proturaketni Sustav seže najmanje 20 godina. To je bio izvorno dizajniran kao rakete za protuzračnu obranu pucati dolje neprijateljske zrakoplove. U prvom Zaljevskom ratu, kada je taj rat došle, vojska htjela ga koristiti pucati dolje Scuds, a ne zrakoplovima. Irački zrakoplovstvo nije bilo toliko problema. No, vojska je zabrinut Scuds. I tako su pokušali nadograditi Patriot. ZVUČNI 1: prisluškivanje neprijateljski projektil putuju na mošt pet je će biti dovoljno izazovan. No, kada je potrčala u Patriot Usluga, vojska nije bila svjesna Irački modifikacija koje im je izradio Scuds gotovo nemoguće pogoditi. Theodore POSTOL: Što se dogodilo je Scuds koje su dolaze u bilo nestabilno. Oni su ljuljanje. Razlog za to je Iračana, u Kako bi dobili 600 km od 300-kilometarska raspon projektila, uzeo težina od prednjeg bojne glave. Oni su bojne glave upaljač. Tako sada Patriot Pokušava doći na Scud. I većinu vremena, neodoljiv Većina vremena, to bi samo letjeti u kliziti. ZVUČNI 1: Nakon Patriot sustav operateri shvatili Patriot propustili njegov cilj, oni detonirao Patriotsa bojna glava kako bi se izbjegle moguće žrtava ako je dozvoljeno da padne na tlo. Theodore POSTOL: To je ono što većina ljudi vidjeli kao velike vatrene kugle na nebu i pogrešno kao presreće od Scud bojevih glava. ZVUČNI 1: Iako je u noćnom nebu Patriotsi čini se da je uspješno uništavanje Scuds, na Dhahran tamo može biti pogreška o njegovoj performansi. Tu, The Patriot-a radarski sustav izgubio pratili svaki put Scud i nikad pokrenut zbog softvera mana. To je Izraelci koji je prvi otkrio da je više sustav bio na, veći raskorak vrijeme dospio na sat ugraditi u sustav računalu. JACK GANSSLE: Oko dva tjedna prije Tragedija u Dhahran, Izraelci izvijestio da Ministarstvo obrane da je sustav gubila vrijeme. Nakon što je oko osam sati rada, su primijetili da je sustav postaje osjetno manje točna. Ministarstvo obrane je reagirao govori sve Patriot da ne ostavite sustave na dulje vrijeme. Oni nikada nije rekao ono što je dugo vremena bio. Osam sati? 10 sata? 1000 sati? Nitko nije znao. ZVUČNI 1: Patriot baterija stacionirani U vojarni u Dhahran i njegov manjkav unutarnji sat bio Na više od 100 sati u noći 25. veljače. JACK GANSSLE: Ona prati vrijeme Točnost oko desetine sekunde. Sada, desetinu sekunde Zanimljivo broj, jer ne može biti izražena u binarnom točno, što znači ne može se izraziti na posve bilo moderno digitalno računalo. Teško je vjerovati, ali koristiti kao primjer. Idemo uzeti broj trećinu. Jedna trećina ne može izraziti u decimale točno. Trećina 0,333 ide na za beskonačnost. Nema načina da to učiniti s apsolutna točnost u decimale. To je točno ista vrsta problema koja se dogodila u Patriot. Sustav nije trčao, najgora pogreška postala. ZVUČNI 1: Nakon 100 sati rada, Pogreška je u to vrijeme bio samo oko trećinu sekunde. No, u pogledu cilja projektil putuju na mošt pet, što je rezultiralo Praćenje pogreška od preko 600 metara. Bilo bi fatalna pogreška za Vojnici u Dhahran. Theodore POSTOL: Što se dogodilo Scud lansiranje je otkriven rano upozorenja sateliti. I oni su znali da dolazi Scud u smjeru. Nisu znali gdje je dolazio. ZVUČNI 1: To je sada do radara komponenta Patriot sustava braneći DHAHRAN pronaći i zadržati pratili od dolazni neprijateljskih projektila. JACK GANSSLE: radar bio je jako pametan. To bi zapravo praćenje položaja Scud, a zatim predvidjeti gdje je Vjerojatno će biti sljedeći put Radar šalje impuls out. To je bio pozvan u rasponu vrata. Theodore POSTOL: Onda odjednom Patriot odluči dovoljno vremena prošlo da ide natrag i provjerite sljedeći položaj za ovaj objekt otkriven, to ide natrag. Dakle, kada je otišao natrag u krivu mjesto, to onda ne vidi objekt. I to ne odluči da nema objekta, to je lažna otkrivanje i kapi trag. ZVUČNI 1: dolazni Scud nestali na radaru, a sekundi kasnije je udario u vojarnu. Scud je ubio 28, a bila je posljednja otkaz tijekom prvog Zaljevskog rata. Tragično, ažurirani softver stigao , na Dhahran sljedeći dan. Softver mana bila fiksna, zatvara jedno poglavlje u nevolji Povijest rakete Patriot. Patriot je zapravo skraćenica za etapne Array praćenja Presresti ciljnih. DAVID J Malan: U redu, tako da trijezan primjer, kako bi bili sigurni. I na sreću, to niža razina bugovi nisu nešto što ćemo obično moraju poštovati, svakako Ne s nekim od naših Najraniji programa. Umjesto toga, većina bugova vi ćete Susret će biti logično u prirodi, sintaktička u prirodi pri čemu Kod jednostavno ne radi dobro. I znaš da je to prilično brzo. No, osobito kada dođemo u na kraju semestra, to će postaju sve više i više mogućnosti u Stvarno mislim teško o dizajnu svoje programe i temeljne prikaz postoje, također, od podataka. Na primjer, mi ćemo uvesti MySQL, što je popularna baza podataka motor koje možete koristiti s web stranice kako bi spremanje podataka na stražnjem kraju. I vi ćete morati početi odlučiti na kraj nastave ne samo ono što vrste podataka u skladu s tim se koriste , ali točno koliko bita za korištenje, da li ili ne želite pohraniti datume kao datume i vremena kao vremena, ali i stvari kao što su koliko je velika želite jedinstveni ID koji želite biti za, recimo, Korisnici u bazi podataka. U stvari, ako su neki od vas imali Facebook račune za neko vrijeme, a vi znate kako da biste dobili pristup na svoj korisnički ID - koji ponekad pokazuje u svoj profila za URL, osim ako ste se odlučili nadimak za URL, ili ako ste se koriste Facebook Graf API, javno dostupne API kojim ste Možete postaviti Facebook za sirovih podataka - možete vidjeti što vaš numerički ID je. I prije nekoliko godina, Facebook suštini morali promijeniti u korištenju Ekvivalent Ints korištenja dugo dugo, jer tijekom vremena kao korisnici dolaze i otići i stvoriti puno računa i lažni računi, čak i oni vrlo lako su mogli iscrpiti nešto poput 4 milijardi moguća vrijednost kao int. Dakle, više o tim vrstama pitanja niz cestu, kao dobro. U redu, tako da je casting. To je nepreciznost. Nekoliko brzih najave. Dakle sekcije službeno počinje ovaj dolazak Nedjelja, ponedjeljak, utorak. Vi ćete čuti putem e-maila kasnije ovaj tjedan kako bi svoj dio zadatka. A vi ćete se također ovdje u tom trenutku kako promijeniti svoj odjeljku ako Raspored je sada promijenio ili vaš udobnost na razini je sada promijenila. U međuvremenu P-set jedan i jedan su hakerski zbog ovog četvrtka s opcijom produljiti taj rok po Specifikacije do petka u tipičnom način. Shvatite da je uključen s problemom set podaci su upute o kako koristiti CS50 aparat, da, kao i neke specifične alate CS50 kao i stilu 50, koje mogu pružiti Vam povratne informacije o dinamički Kvaliteta vašeg koda stila i check 50, koji može vam pružiti dinamična povratne informacije kako bi vaše kodeksa korektnosti. Oprosti da smo još uvijek daska iz nekoliko Kinks s čekom 50. Nekoliko svojih kolega koji su na mrtvoj točki oko 04:00 u petak navečer kada je spec. porasli su primijetili od tada nekoliko bugova koji se bavimo putem, i isprike za svakoga tko doživjela nepotrebne frustracije. Krivnja je moja. No, mi ćemo pratiti na CS50 razgovarati kad se to riješi. Dakle riječ o ocjenama samih. Dakle, to će biti tjedan ili dva prije nego što vas početi da biste dobili povratnu informaciju o problemima setovima zato što još uvijek nemaju demonstrator. Pa čak i tada, počet ćemo procijeniti C Problem postavlja prije nego što je vratiti i procijeniti ispočetka tako da ste dobili više relevantnih povratne informacije brže. Ali općenito po nastavnom planu, CS50 Problem setovi su ocijenili zajedno nakon četiri osi - Opseg, korektnost, dizajn i stil. Područje će biti broj obično između nule i pet koji bilježi koliko komad koji ste malo off. Obično, želite da to bude pet. Vi barem pokušao sve. I primijetiti da je multiplikativni faktor tako da radi samo dio Problem set nije najbolja strategija. U međuvremenu, više očito je Važnost ispravnosti - Samo je vaš program ispravan s poštovati u specifikacijama? Ovo je vagan namjerno više jako od druge dvije osi po čimbenik tri, jer smo prepoznali koji obično idete potrošiti Mnogo više vremena jurnjava dolje neke bugove, uzimajući svoj kod na posao, onda su ga uvlačenje i odabirom odgovarajuća imena varijablama i kao što su, koji se nalazi na drugom kraju spektra stilu. To ne znači da stil nije važne, a mi ćemo ga propovijeda tijekom Vrijeme i na predavanjima iu dijelovima. Ime odnosi na estetiku vašeg koda. Jeste li dobro odabrao-ime varijable da su kratke, ali nešto opisno? Je li vaš broj razvedena kao što ste vidjeli u Predavanje i na način sukladan sa stilom 50? Na kraju je dizajn pravu ovdje u sredini. Dizajn je jedan teže staviti prst na jer to je mnogo više subjektivno. No, to je možda i najvažnije od su tri sjekire u smislu pedagoške vrijednost tijekom vremena i da će to biti nastavnog kolegama je prilika da Vam pružiti kvalitativnu poruci. Doista, u CS50 iako imamo ove formule i rezultati, na kraju dana su vrlo promišljeno vrlo male kante - točke vrijednosti između nula i tri i nula i pet. Mi ne pokušati izvući vrlo grubo linije između problematičnih skupova ili između studenata, a već se usredotočite koliko možemo o kvalitativnim, običan rukopis feedback, bilo upisali ili usmeno na vašem demonstrator, ćete se dobro znate. Ali općenito, to su utezi da se razne sjekire će imati. U međuvremenu, također, to je vrijedno imajući u pamet da se ne bi trebao pretpostaviti da tri od pet je 60%, a dakle otprilike nedostatku. Tri namjerno značilo da se vrsta nasred ceste dobre. Ako ste uzimajući u trojke početku semestra, koja je doduše znači biti dobar mjesto za početak. Ako ste uzimajući dvojke, sajmove, postoji definitivno neki posao platiti malo više pozornosti, iskoristiti sekcija i uredovnog vremena. Ako ste dobivanje četvorke i Fives, super. Ali stvarno, nadamo se da ćemo vidjeti putanje među učenicima - vrlo individualizirani po učeniku, ali polazeći semestar ovdje u svojevrsno dva do tri raspona, ali završava Ovdje se u četiri-pet raspona. To je ono što mi tražimo. A mi imajte na umu da deltu pokazuju da između nule i tjedan tjedan 12 kad radim ocjene. Nije bitno za nas apsolutno kako da sajam na početku ako vaš Putanja je doista prema gore i jaka. Akademska čestitost - pa neka me staviti na moj ozbiljniji glas za samo trenutak. Dakle, ovaj tečaj ima razlike slanje više studenata nego bilo koji drugi u povijesti na oglasnoj ploči, vjerujem. Imamo neku vrstu izgubio računati na to točka koliko često se to dogodi. I to ne zato što učenici u 50 su više od njihove nepošteno kolege drugdje. Ali shvatite, također, da smo vrlo dobri na otkrivanje takve stvari. I to je prednost da informatike klasa ima u tome što smo mogu, a mi ne usporediti sve studente Problem postavlja par-mudar protiv svakog drugima, ne samo u ovoj godini ali sve prethodne godine. Mi imamo sposobnost, kao i studenata u klase, na Google i naći kod na stranicama poput GitHub i foruma za diskusiju. Postoji apsolutno rješenja za CS50-a p-postavlja pluta oko tamo. No, ako ih možete pronaći, možemo ih naći. A sve to je jako puno automatiziran i jednostavno i tužno za nas pronaći. No, želim naglasiti, također, da Naravno akademski poštenje politika jako puno značilo da se jako puno Nasuprot tom duhu. Doista, ove godine smo preformulirati stvari u nastavni plan i program kako bi se to, dot dot dot, s više detalja u programu. Ali Zajednička tema u tijeku Stvarno je biti razumna. Prepoznajemo da postoji značajna Iznos pedagoške Vrijednost je suradnjom, u određenoj mjeri, s kolegama, pri čemu se dvije ili tri ili više su stoji na bijelom brodu Alatom Whiteboarding, da se tako Govorimo, svoje ideje - pisanje pseudocode na slikama, dijagrame onoga što bi trebao biti Mario, ako da napiše to prva u pseudocode. Što bi pohlepni algoritam - Kako bi se ponašaju po Problem postavlja jedan? I tako shvatiti da je ponašanje da potičemo vrlo koliko uz one linije. I u nastavnom planu, vidjet ćete cijela hrpa metaka u razumne kategorija i nije razumno kategorija koja nam pomaže pomoći napatanja svoj um oko gdje smo crtam tu liniju. I općenito, pristojan pravilo je da, ako vam se bori za rješavanje neki bug i vaš prijatelj ili kolega sjedi pored vas, to je razumno za vas da mu pokazati ili nju vaš broj i reći, hej, možete li mi pomoći mene shvatiti što se događa ovdje nije u redu? Mi obično ne prihvate Suprotna strana. To nije točan odgovor za svoje prijatelj ili kolega ovdje reći, oh, samo pogled na moj lik i je iz toga. To je vrsta nerazumno. Ali što je netko drugi, mozga, drugi par očiju, pogledajte zaslon ili pogled na kodu i reći, jeste li sigurni da želite imati petlju ovdje? Ili jeste li sigurni da želite da zarez ovdje? Ili Oh, da je to poruka o pogrešci znači. Oni su vrlo razumne i ohrabrivala ponašanja. Slučajevi na koje sam aludirao na ranije svode se kada su učenici kasno u noć, što loše prosudbe Odluke i slanje e svoj kod kako bi netko drugi ili jednostavno govoreći, Ovdje, to je u Dropbox ili Googling kasno u noć. I tako ja bi potaknuti i preklinjem vas, Ako imate one neizbježno trenuci stresa, ti si odbacujući ga protiv roka, nemate kasno Dan pošto je već u petak u koji točka, e-tečaja u glavu ili osobno izravno. Recimo, slušaj, ja sam na mom nego bit ovdje. Idemo razgovarati i to shvatiti. Posezanja za web ili neki drugi ne razumno ponašanje nikada ne rješenje, a previše od vašeg kolege nisu više ovdje na kampus zbog tog lošeg presude. No, to je vrlo lako zaobići tu liniju. I ovdje je mala slika navijati što se iz Reddit, tako da sada sve će biti u redu. Tako brzo rekapitulacija, a zatim, gdje smo stali. Tako je prošlog tjedna, podsjetiti da uvodimo uvjetima, a ne u nule ali u C ovaj put. A tu je neki novi sintakse, ali stvarno nema novih ideja po sebi. Imali smo Boolean izraza koji smo mogli ili zajedno s dvije vertikalne barovi ili i zajedno s dvojicom znakove za, rekavši da su i lijeva i pravo mora biti istina za to izvršiti. Tada smo imali sklopke, koje smo gledali , na kratko, ali ja predlažem su stvarno samo drugačije sintaksa za postizanje Ista vrsta ekipu ako znate u unaprijed što vaši slučajevi će biti. Mi smo gledali na petlji. For petlje je možda i najčešći, ili barem jedan da ljudi obično posežu za instinktivno. Iako to izgleda pomalo zagonetan, vidjet ćete mnogo, mnogo primjera ove prije dugo, kao što imate Već krajem prošlog tjedna. Dok petlje može na sličan postigla istu stvar. No, ako želite učiniti bilo incrementation ili ažuriranje varijable vrijednosti, morate to učiniti više nego ručno za petlje prije nego što dopušta. A tu je i do-while petlje, što nam omogućuje da učinite nešto po barem jednom, dok nešto ostalo je istina. A ovo je posebno dobro za programi ili za igre gdje želite za brz korisnik za nešto barem jednom. A onda, ako on ili ona ne surađuje, možda želite to učiniti opet i opet. S varijablama, u međuvremenu, imali smo linije koda kao što je ovaj, što bi moglo se dvije linije. Ti bi mogao izjaviti int zove suprotnom, zarez. Ili ste jednostavno mogu utvrditi i to definirati, da se tako izrazim. Dajte mu vrijednost u isto vrijeme. I onda na kraju, razgovarali smo o funkcijama. I ovo je lijep primjer u Osjećaj da ilustrira dvije vrste funkcija. Jedan je GetString (), što, opet, dobiva se niz od korisnika. Ali GetString () je vrsta zanimljiva, tako daleko smo ga koristili, jer smo uvijek ga koristiti s nešto na lijevoj strani znak jednakosti. To će reći da GetString () vraća vrijednost. Ona se vraća, naravno, niz. I onda na lijevoj strani, mi smo jednostavno štedi taj string unutar varijabla zove ime. Ovo je drugačija, u smislu, od printf jer printf, barem u našoj Poveznice ovdje, ne vrati ništa. Kao na stranu, to ne vraća nešto. Mi jednostavno ne zanima što je to. No, ona ima ono što je zove nuspojava. A što je to nuspojava u svakoj Slučaj smo vidjeli do sada? Što printf čini? Ona ispisuje nešto na ekranu, Prikazuje tekst ili brojeve ili nešto na zaslonu. A to je samo smatra nuspojava jer to nije stvarno hendikep ga natrag k meni. To nije odgovor unutar crna kutija koju sam tada može doći u i iskoristite. To samo to radi na vlastitu, mnogo kao što Colton bio uključen u to crna kutija prošlog tjedna, a on nekako magično je crtanje na ploči bez mene stvarno uključen. To bi bilo nuspojava. Ali, ako sam zapravo morao doći natrag u ovdje i reći, oh, ovdje je string od korisnika, kako bi se se vrijednost povratak. I do sada smo samo sam se funkcije da su drugi ljudi napisali. No, mi zapravo može učiniti te vrste stvari sebe. Dakle, ja ću ići u CS50 aparata ponovno. Dopustite mi zatvorili karticu da mi je otvaranje maloprije. I neka mi ići naprijed i stvoriti novu datoteku. I ja ću ići naprijed i nazovite ovo jedan positive.c. Dakle, želim napraviti nešto s pozitivni brojevi. Dakle, ja ću ići naprijed i učiniti int - žao - # Uključiti. Nemojmo da je ista grešku kao i prije. Int main (void), otvoren kovrčava Brace, zatvorena kovrčavu braće. A sada želim učiniti sljedeće. Želim napisati program koji inzistira da korisnik daje ja pozitivni cijeli broj. Dakle, ne postoji funkcija GetPositiveInt u CS50 knjižnici. Postoji samo GetInt (). Ali to je u redu jer imam konstrukti s kojima sam može izreći malo ograničenje na toj vrijednosti. Ja mogao učiniti ovako nešto. Dakle, int n - a ako ste tipkao, samo shvatiti Ja ću se vratiti i promijeniti neke stvari u ovom trenutku - tako da int n jednak GetInt (). I to će staviti int unutar n. I neka mi se više opisno. Dopustite mi reći nešto poput zahtijevam da Možete li mi dati pozitivan cijeli broj. U redu. Dakle, samo malo upute. I sad, što da radim? Pa, ja već znam iz moje jednostavne uvjetima ili grane, baš kao što sam imali u nule, što sam mogao reći nešto kao i ako je n manji ili jednak nuli, onda želim učiniti nešto kao što su, da nije pozitivno. A onda sam mogao učiniti - U redu, ali ja stvarno želim da se taj int. Tako sam mogao ići i do ovdje i što sam mogao vrsta kopije to i ove alineje. A onda, u redu. Dakle, ako je n manji ili jednaka nuli to učinili. Sada, što ako korisnik ne surađuje? Pa, onda ću se posuditi ovo ovdje. A onda idem ovdje i ovdje i ovdje. Dakle, jasno je kako je rješenje, zar ne? Budući da nema kraja na vidiku. Ako želim da zahtijevaju da korisnik daje ja pozitivni cijeli broj, ja mogu zapravo dobiti int. I onda možete provjeriti za taj int. Ali onda želim ga ponovno provjeriti i ga ponovno provjeriti i ponovno provjeriti. Tako je očito, što je bolje tvorevinu da se pomoću ovdje? U redu, neka vrsta petlje. Tako ću se riješiti gotovo sve ovo. I želim da se ovo int barem jednom. Pa ću reći ne - i ja ću se vratiti dok je u samo nekoliko trenutaka - sad, da li što? Ja ću učiniti int n dobiva GetInt (). OK. Dakle, to je prilično dobro. I sad kako to često čine Želim to učiniti? Dopustite mi da stavi printf unutar petlje tako da mogu zahtijevati ponovno i ponovno, ako treba. A što ja želim ovo dok je uvjet činiti? Želim zadržati to dok ono što je slučaj? Da. N je manja od ili jednaka nuli. Tako je već, mi smo značajno očistiti ovaj kod gore. Mi smo posudili vrlo jednostavan tvorevina - do-while petlje. Ja sam samo ukrao važne linije koda koji sam počeo kopirati i lijepljenje, što nije bilo pametno. I sad ću zapravo zalijepite to ovdje i samo to učiniti jednom. I sad ono što želim učiniti, na samom kraju ovog programa? Samo ću reći nešto jednostavno sviđa, hvala - i Učinit ću% i za int - backslash n, zarez, a zatim priključite n, točka i zarez. U redu. Tako ćemo vidjeti što će se sada dogoditi kad sam pokrenuti ovaj program. Ja ću ići naprijed i ne bi pozitivno. K vragu. Nekoliko pogrešaka. Pa neka mi pomicanje natrag do prvog. Nemojte raditi kroz njih unatrag. Rad kroz njih odozgo prema dolje neka ti ne prelijevaju i jedini jedna stvar biti u krivu. Implicitni izjava o Funkcija GetInt (). Da. Dakle, to nije bilo dovoljno. Nekako sam napravio istu grešku, ali Malo drugačije ovaj put. Moram se ne uključuju samo stdio.h, ali Također cs50.h, koji uključuje takozvane izjave dobili int, koji naučiti aparata, ili uči C što GetInt () je. Pa neka mi snimiti. Ja ću ignorirati druge pogreške jer ću se nadati da su oni nekako se odnose na pogreške Već sam fiksni. Zato mi dopustite da ići naprijed i kompilirati s napraviti pozitivne, Enter. K vragu. Tri pogreške, uvijek. Dopustite mi dođite do prvog. Neiskorišteni varijabla n. Nismo to vidjeli. A to je, također, malo zagonetan. Ovo je izlaz iz prevodilac. A što je to istaknuo linije postoji - positive.c :9:13 - je rekao, to je govoreći na liniji od devet positive.c, na 13. karaktera, 13. stup, što je napravio tu pogrešku. I osobito, što govori ja neiskorišteni varijabla n. Tako ćemo vidjeti - linije devet. Ja sam pomoću n u smislu da Dajem mu vrijednost. No, ono što prevodilac ne sviđa je da nisam naizgled ga koristite. Ali čekaj malo, ja sam ga koristite. U skladu 11, ja sam koristeći ga ovdje. Ali, ako sam se pomaknite prema dolje i dalje na positive.c :11 - tako da, na liniju 11, 12 znakova, kompajler mi govori, korištenje neprijavljeni identifikator n. Dakle neprijavljenu znači da sam Nije navedeno je kao promjenljiva s tip podataka. Ali čekaj malo. I nije točno da je u skladu devet. Tako je netko stvarno zbunjen ovdje. To je bilo meni ili prevodilac, jer u skladu devet, opet, ja sam proglašenja int n, i ja sam to dodjeljivanje vrati vrijednost GetInt (). Tada sam koristim tu varijablu n na liniji 11 i provjere ako je njegova vrijednost manja od ili jednak nuli. No, to očito je loše i slomljena zašto? Reci ponovno? Ah, moram objaviti prije n ulaska u petlju. Ali zašto? Mislim, samo smo predložili da se malo prije to je u redu da se proglasi varijabli u jednu liniju, a zatim dodijeliti im neku vrijednost. Globalna varijabla - vratimo na tu ideju u samo trenutak. Zašto želiš staviti je izvan petlje? To je. Točno. Dakle, doduše, pomalo izmiču, dopustite mi da sažeti. Kada definirate n unutar DO-blok tamo - posebno unutar ti kovrčava aparatić - da varijabla n ima ono što je pod nazivom Opseg - nevezano za naš sustav bodovanja u Tečaj - ali ima doseg koji je ograničena na one vitičastim zagradama. Drugim riječima, obično ako proglasi varijabla unutar skupa vitičastim zagradama, da je varijabla postoji samo unutar tih vitičastim zagradama. Dakle, po toj logici sama, iako Ja sam proglasio n u skladu devet, što u biti nestaje iz djelokruga, nestaje iz sjećanja, da se tako izrazim, U vrijeme kada sam pogodio crtu 11. Jer linije 11, nažalost, izvan tih vitičastim zagradama. Dakle, ja nažalost ne mogu to ispravili ide natrag na ono što sam to učinio prije. Možda na prvi pogled učiniti. No, ono što se sada ne radi ciklički? Vi ste očito ne uzimajući int ciklički. Tako možemo napustiti GetInt (), a mi trebao napustiti GetInt () unutar petlje, jer to je ono što želimo dosađivati ​​korisniku za ponovno i ponovno. No, to ipak dovoljno da ide do linije, recimo, šest. Int n, zarez. Ne daju mu vrijednost, jer još uvijek ne trebate se samo još. Ali sada ovdje dolje, obavijest - to bi se vrlo lako pogrešno. Ne želim da moja sjena prethodna Izjava o n. Želim koristiti n da zapravo postoji. I tako sada na liniji 10, Ja dodijeliti n vrijednost. No, u skladu šest, izjavljujem n. I tako mogu li ili ne mogu ga koristiti u skladu 12 sada? Ja mogu, jer između kojih kovrčava aparatić je n proglasio sada? Jedan ovdje na liniji pet. Za jedan ovdje na liniji 14. Dakle, ako ja sada smanjili, spremiti ovu datoteku, idite natrag u i pokrenuti napraviti pozitivne, to sastavio ovaj put. Dakle, to je već napredak. Slash. . / Pozitivno, Enter. Zahtijevam da mi daš pozitivni cijeli broj. Negativan 1. Negativan 2. Negativan 3. Zero. Jedan. I hvala za jednu je ono što je sada tiskana. Dopustite mi da pokušam nešto drugo, iz znatiželje. Ja sam rekao da se ulaz cijeli broj. No, što ako sam umjesto upisati janje? Tako da sada vidim drugačije upit - ponovnog pokušaja. No, nigdje u mom kodu A pišem ponovno. Dakle, gdje se, navodno, je li to ponovno zatražiti dolaze iz, biste rekli? Da, na GetInt () sama. Dakle, jedna od stvari CS50 je osoblje radi za vas, barem u tih prvih nekoliko tjedana, je da su napisali neki iznos pogreške provjere kako bi se osiguralo da ako nazovete GetInt (), što će barem vratiti int od korisnika. Nećete dobiti string. Nećete dobiti znak. Nećete dobiti nešto drugdje uopce. Vi ćete dobiti int. Sada, to možda neće biti pozitivan. To ne može biti negativna. Ne jamčimo oko toga. No, mi ćemo dosađivati ​​korisniku da ponovi postupak, ponovni pokušaj, ponovno sve dok on ili ona zapravo surađuje. Isto tako, ako to učinim 1,23, to nije int. Ali ako trebam upisati, recimo, 50 godina, da je mi daje vrijednost koju sam htjela. U redu. Dakle, nije loše. Sva pitanja o tome što smo upravo učinili? Ključ takeaway se, da bude jasno, ne toliko petlje, koje smo vidjeli Prije iako imamo stvarno ne ga koristiti, ali pitanje opsega, gdje je varijable mogu se mogu se koristiti samo u nekom određenom opsegu. U redu, neka mi se obratiti prijedlog načinjene, onom Globalna varijabla. Kao na stranu, ispada da jedan Rješenje za ovaj problem, ali obično netočni ili rješenje loše dizajnirane rješenje, jest deklarirati svoju varijablu kao što je zove globalna varijabla. Sada sam vrsta krši moja definicija opsega, jer postoji Nema kovrčava aparatić na samom vrhu , a na samom dnu datoteke. No, implikacija da je je da je sada u redu četiri, n je globalna varijabla. I kao što naziv implicira, to je Samo dostupni posvuda. Scratch je zapravo to. Ako ste koristili varijablu, možda podsjetiti li morao birati, ako je to za Sprite ili za sve duhovi. Pa, svi duhovi je samo jasniji način govoreći globalno. Da? Ah, stvarno dobro pitanje. Dakle Podsjećamo da je u prvoj verziji mog koda, kad sam pogrešno deklarirane i definirana n u skladu devet - Ja ga proglasiti varijabla i dao sam mu vrijednost s operator pridruživanja - ovo mi je dao dvije pogreške. Jedan, činjenica da n nije bio korišten, i dva, da je u redu 11 to jednostavno nije proglašen. Dakle, prvo mi se nije Adresa u to vrijeme. To nije strogo pogreške proglasiti varijabla nije, ali ga koristiti. No, jedna od stvari koje smo učinili u CS50 aparata, namjerno, pedagoški, je da smo savijene prema gore Očekivanja da bi prevodilac sigurni da radite stvari ne samo ispravno, ali stvarno točno. Jer ako ste deklariranje varijable kao što su n i nikad ga koristi, ili ga koristite točno, što onda se to radi tamo? To doista ne služi svrsi. I to je vrlo lako s vremenom, ako nemojte konfigurirati svoje računalo u Na taj način, samo da imaju kod koji ima mali ostaci ovdje, ostatke tamo. I onda mjeseci kasnije se osvrnuti i ti si kao, zašto je ova linija Kod postoji? A ako ne postoji dobar razlog, da ne koristi vama ili vašim kolegama cestom do mora spotaknuti to onda. Kao na stranu, gdje je koji dolaze iz? Pa, sjećam se da svaki put sastavimo Program, sve ove stvari je se ispisuje. Dakle, vratit ćemo se na to. Ali opet, da je alat koji automatizira proces sastavljanja strane prikazivati ​​stvarni prevodilac naziva jeka. Ova stvar, mi na kraju ćete vidjeti, ima učiniti s ispravljanje pogrešaka s posebnim Program pod nazivom ispravljanje pogrešaka. To ima veze s optimizacijom code - više o tome u budućnosti. Stand = c99 - to samo znači koristiti 1999 verziju C. C je tu čak i duže od da, ali su se neki lijep Promjene plus 10 godina. I ovdje su relevantni. Mi smo rekavši da bi išta prije bi bilo upozorenje Pogreška spriječava studenta od sastavljanja. I zid znači to da je za cijela hrpa stvari, ne Samo se odnose na varijablama. I onda neka mi dođite do kraj ove linije. A to je, na kraju ćemo vratiti. To je očito naziv file sam sastavljanje. To podsjeća na naziv datoteke Ja sam izlaza kao ime mog runnable programa. To samo znači-lcs50 koristiti CS50 knjižnica, a sve nule i one koje Osoblje je napisao i sastavio ranije ove godine, integrirati ih u mom programu. I tko zna što-lm je? To je matematika knjižnica, koja je samo tamo, čak i ako ste Ne radite bilo matematike. To je samo automatski pod uvjetom nam se. Pa, neka mi to jedan drugi primjer ovdje otvara novu datoteku. I neka mi spasiti ovu jednu kao string.c. Ispada da je riječ o podacima vrste danas, postoji još događa ispod poklopca motora nego što smo vidjeli do sada. Zato mi dopustite da se brzo napraviti brzu programa. Uključi stdio.h. I ja ću spasiti da. I znaš, neka mi ne bi istu pogrešku opet i opet. Uključi cs50.h. I neka mi sada ići naprijed i učiniti int main (void). I sada sam jednostavno želite napraviti program da je to - proglasiti string pozvao je i dobiti niz od korisnika. I neka mi to malo upute ovdje - molim vas dajte mi string - tako Korisnik ne zna što učiniti. I onda ovdje ispod ove, Želim učiniti sljedeće - za int i dobiva nulu. Opet, računalni znanstvenici obično početi brojati od nule, ali smo mogli napraviti taj jedan, ako smo stvarno željeli. Sada ću napraviti i manji od niza duljine s.. Dakle strlen - S-T-R-L-E-N - opet, to je sažeto jer je jednostavnije upisati, iako je malo zagonetan. To je funkcija nismo ste koristili Prije nego doslovno znači da je - vratite mi broj koji predstavlja duljina niza da je korisnik upisao. Ako se upisali u bok, što bi se vratiti pet, jer ima pet Slova u Hello. Zatim, na svakoj iteracije Ta petlja, i plus plus. Pa opet, standardni izgradnju, čak i ako niste sasvim previše ugodno ili upoznati s njom još. No, sada se na svakoj iteraciji ove petlje, primjetiti ono što ću učiniti. Želim ići naprijed i ispis od jednog znaka - tako% c backslash n u novi redak. I onda, znate što želim učiniti? Bez obzira Riječ je da korisnik upiše u, kao što je zdravo, želim ispisati H-E-L-L-O, jedan znak po liniji. Drugim riječima, želim doći na pojedini likovi u nizu, pri čemu se do sada ima samo string je niz znakova. I ispada da mogu napraviti s, nosača, ja, u neposrednoj blizini zagrada, zatvorite zagradu, zarez. I ja moram napraviti još jednu stvar. To je u datoteci pod nazivom string.h strlen da je proglašena. Dakle, ako želim koristiti tu funkciju, Moram reći prevodilac, očekivati ​​da će ga koristiti. Sada ću ići naprijed i učiniti Program pod nazivom string. Dot, slash, string. Molim Vas, dajte mi string. Ja ću ići naprijed i upišite ga. Pozdrav, u svim kape, Enter. I sad sam primjetiti tiskana ove jedan znak za drugim. Dakle, novi detalj je da string, na kraju dana, može biti pristupiti putem svojih pojedinca likovi uvođenjem trgom Nosač zapis. I to je zato string ispod napa je doista slijed likovi. No, ono što je o njima je uredan u vašem računalu RAM - Mac, PC, što god da je - oni su doslovno natrag na natrag na leđa - H-E-L-L-O - na pojedinačne, u susjedstvu bajtova u memoriji. Dakle, ako želite dobiti na osmo, kao Bajt, koja je u ovoj petlji bi se Nosač nula, jedan nosač, nosač dva, Nosač tri, četiri nosača - da nulta je indeksirana do pet - da će se ispisati H-E-L-L-O na svojoj liniji. Sada, kao teaser, dopustite mi da vam pokazati koješta na kraju ćete biti u mogli razumjeti, barem s nekim blizak gleda. Za jednu, ono što smo bile uključene u današnji primjeri, ako želite, je zapravo jedan od prvih jailbreaks za iPhone. Jailbreaking znaci pucanja telefon tako da možete ga koristiti na različite nosilac ili instalirati svoj vlastiti softver. A vi ćete primijetiti izgleda potpuno grobni, najvjerojatnije. Ali pogledajte ovo. IPhone navodno je pukla s za petlju, ako je uvjet, ostalo stanje, hrpa funkcija nismo vidjeli. I opet, ne će se na Vjerojatno prvi pogled razumjeti kako se to radi. No, sve što smo vrsta potrajati zdravo za gotovo u našim modernim životima zapravo ima tendenciju da se smanji i za neke od tih osnova smo bili gleda. Dopustite mi da ići naprijed i otvoriti jednu drugi program, holloway.c. Dakle, ovo je, također, nešto što stvarno ne bi trebao znati. Još nitko od osoblja ili sam mogao Vjerojatno ovaj lik iz gledajući Zato što je to nečiji broj koji je podnesen na ono što je povijesno poznat kao obfuscated C Natjecanje, u kojem pišete program koji prikuplja i radi, ali je tako prokleto zagonetan nema čovjeka može shvatiti što to će činiti sve do oni zapravo ga pokrenuti. Dakle, doista, ako pogledate ovu broj, vidim prekidač. Vidim glavna. Vidim ti uglatim zagradama podrazumijeva nekakav niz. Da li itko pogoditi što ovaj program zapravo znači, ako sam pokrenuti Holloway? Da. OK. Dobro urađeno. Dakle, samo osoblje, a ja ne mogu shvatiti što ti se stvari. I sad na kraju, dopustite mi da ide naprijed i otvoriti jedan drugi program. Ovo je jedan - opet, mi ćemo učiniti izvorni kod Dostupno online - ovo je samo vrsta lijepa za pogledati. Sve što su učinili je pogodio razmaknicu vrlo malo. No, ovo je pravi broj. Dakle, ako mislite da je lijepa, ako mi zapravo pokrenuti ovu, na upit, na kraju ćete vidjeti kako smo mogli učiniti stvari kao što je ovaj. Dakle, mi ćemo vas ostaviti na toj bilješci i vidimo se u srijedu. [Glazba svira] ZVUČNI 2: Na sljedećem CS50, su TFS organizirati pobunu. ZVUČNI 3: Ovdje je. Ga dobiti! [Glazba svira]