[Predvajanja glasbe] DAVID J Malan: V redu, Dobrodošli nazaj CS50. To je začetek dva tedna. Beseda eno od naših prijatelji na kampusu - če ste zainteresirani, lahko bodisi zdaj ali v neki prihodnji mandat še enkrat bolj udobno, poučevanje sredi dijaki malo Nekaj ​​o računalništvu, storiti glavo k temu URL. Ti so še posebej potrebujejo prav zdaj v učitelji, še posebej, če imate imeli nekaj izpostavljenost računalništva. Tako opozarjajo, da je zadnji čas, smo uvedli nekaj vrst podatkov v C, in ste morda začeli, da bi dobili svoje roke umazane s temi doslej V problem določiti enega. In smo imeli znak. Torej, v nekoliko tehničnem smislu, kaj je znak, kot jo poznamo danes? Torej, to je znak, vendar naj so zdaj bolj natančno. Kaj mislimo z značajem ali posameznik zna? Ne-numerični znak - tako ni nujno. Izkazalo se je, da tudi številke, čeprav ločila in črke zastopana s temi podatki tip znan kot znak. Torej ni nujno, da po abecednem redu. Ja? Torej je ASCII znakov. Torej, če mislite, da nazaj na nič tedna, ko smo imeli bajt prostovoljcev pridi gor in bodisi imajo svoje roke ali vsi so predstavljali bitov. Ampak skupaj kot skupina osmih, so predstavljali bajt. In mi je uvedel pojem ASCII V tem predavanju, ki preprosto preslikavo med številkami in črkami. In uporaba ASCII, kot ti ljudje implicitna, osem bitov da predstavljajo značaj. Torej, zato lahko, če osem bitov vsak se na enem od dveh vrednosti - nič ali ena - To pomeni, da sta bili dve možnosti za to osebo - nič ali ena - dve za to osebo, dve za to Oseba, dva za to. Torej skupno dvakrat dvakrat dva krat dva krat dva - tako dve osmi v celoti. Tako da je skupno število znakov 256 možno, da lahko predstavlja z osem bitov. Zdaj, tiste, ki govorijo Asian jeziki, morda vedeli, da obstaja več Znaki na svetu kot le AS in BS in Cs in DS. In res, ASCII ne zadostuje za Veliko jezikov sveta. Ampak več o tem kdaj drugič. Za zdaj vemo, da v C, če želite da predstavlja pismo, kos ločil, ali pa samo nekaj znakov v naravi, ki jih uporabljamo znak. In to je en bajt ali osem bitov. Kaj pa notr? No, int je celo število. Koliko bitov, če se spomnite, je celo število običajno? Kdo odpoklic? Torej, to je ponavadi 32. Dejansko je odvisno od računalnika , ki ga uporabljate. Toda v napravi, in veliko računalniki, to je 32 bitov ali štiri bajta - osemkrat štiri. In ints samo uporabljajo za shranjevanje številke, bodisi negativne, pozitiven ali nič. In če imaš 32 bitov in da ste samo skrbi pozitivnih številkah, lahko kdo Športni teren, koliko je mogoče cela računalnik lahko predstavljajo od nič gor? Zato bi bilo dva do 32, ki je približno štiri milijarde. Torej te pristojnosti dveh se bodo ponavljajoče teme v računalništvu. Kot bomo videli, oni so zelo priročno delati, tudi če to ni čisto enostavno narediti math v enem glavi. Torej bomo približno štiri milijarde povedati. Sedaj dolgo časa - lahko nekako ugibati. To je več kot notr. Koliko bitov? Torej 64 bitov ali osem bajtov. To samo pomeni, da lahko predstavljajo tudi Večje število, večji pozitivni ali Večje negativne številke. In kako približno plavajo? To je s plavajočo vejico vrednost 32 bitov. To je samo realno število, nekaj z decimalno vejico. Ampak, če boste namesto tega morali več mest decimalno vejico ali želite predstavljajo večje število z nekaterimi frakcija po njej, lahko uporabite dvojna, kar je 64 bitov. Vendar pa je zanimivo takeaway tukaj. Torej, če se ints omejena z 32-bitno in celo dolgi podolgovati so omejeni z 64 bitov, da nekako zastavlja vprašanje, Kaj pa, če si dejansko želite prešteti več kot 4 milijarde za notr? No, ste jo pravkar uporabljate dolgo časa. Kaj pa, če želite prešteti višje od dveh do 64., gor ali dol? No, to je ogromno število. Toda sčasoma, boste morda dejansko mar tovrstnih vrednot, še posebej, če uporabljate bazo podatkov in začeli zbirati veliko in veliko in veliko podatkov in dodeljevanje edinstven Številke na vsakem kosu teh podatkov. Tako da smo nekako imate težave. In podobno, s plavajočo vejico vrednote - plovci ali dvojic - če imaš samo končno število bitov, koliko skupne številke si lahko morda pomenijo? No, to je manj jasno, ko vključujejo decimalno vejico. Ampak to je gotovo omejena. Če imate končno število bitov, končno število ljudi, omejenost število žarnic, zagotovo lahko predstavljajo le končno število plavajočo vejico vrednosti. Toda koliko realne številke so njihovi na svetu? Tam je neskončno. Tako, da je neke vrste problem, ker smo nimajo neskončno količino pomnilnika RAM ali znotraj naših računalnikov. Torej nekaj zahtevnih stvari se lahko zgodi. Torej, gremo naprej in poskusite to tu izraziti. Dovolite mi, da gredo naprej in odpreti gedit. Jaz grem naprej in shranite datoteko imenovano "floats0.c" samo, da je v skladu s primerom, ki je na voljo na spletu, če bi želeli. In jaz grem naprej in jo opredeli kot sledi - Jaz grem naprej in rekli, int Glavni nična, saj smo pogosto storiti. In potem v tem programu, bom razglasi sam plovec, tako da 32-bitni spremenljivka se imenuje f samovoljno. In potem bom shranite v njem Ne vem, desetino, tako 0,1. Torej bom izraziti, da kot eden deljeno z 10, ki je popolnoma legitimno C. In potem na drugi liniji, sem preprosto želite natisniti to vrednost. Tako opozarjajo, da lahko uporabimo seznanjeni printf. Mi ne želimo uporabiti% i za notr. Želimo uporabiti% F za likvidna sredstva. In potem bom naredil poševnico nazaj n, zapri citiram, vejica, f, podpičje. Torej, tukaj je moj program. Tukaj je že ena napaka. Ali nekdo, za katerega se ta kliknili že želijo izpostaviti vsaj eno napako sem naredil? Ja? Ja. Pozabil sem "# include" na top, so simptom, ki, če skušam zbere ta se bo, da prevajalnik bo vpij name, pravijo nedefiniran simbol ali nekaj v tem smislu. Da ne razume, kaj printf všeč. Torej bom naredil "# include ", Shranite datoteko. In zdaj je v boljši formi. Ampak jaz sem tudi dogaja s točko ven eno novo podrobnost danes. Poleg navedbe mesto Imetniki kot% F% i% s, lahko včasih vpliva na vedenje te ograde. Na primer, v primeru spremenljivo vrednost točke, če želim, prikazati eno decimalno mesto po obdobje, lahko dejansko narediti 0.1F. Torej, z drugimi besedami, ločevanje in f znak za odstotek s 0,1, samo printf povedal, boste morda celo kup številk po decimalko točko za mene. Ampak želim le, da ena od njih. Torej, jaz grem naprej zdaj in prihranite ta program, pojdi v svoj terminal okno, in jaz grem naprej in tip bi float 0, vnesite. Vidim, da je nekoliko Grobni črto se bodo začeli bolj smiselno, kot smo ga draži narazen ta teden in naslednji. Zdaj bom šel naprej in vodijo float nič. In prekleto. Torej obstaja še en bug Tukaj nekega razloga. Sem prepričan, da je za dobro desetino, ali ena deljeno z 10, ne 0,0. Mogoče sem samo ne iščejo na dovolj številk. Torej, zakaj ne rečem dva 0,2 videti dva namesto da bi samo ena decimalna mesta natančno. Naj se vrnem na mojo terminal okno Tu in zadeti gor nekajkrat glej moje zgodovine. Ali bo spet plavajo nič, in ponovno navzgor. In zdaj začne. In zdaj sem prepričan, da je to narobe. In sem lahko naredil tri in štiri, in sem verjetno bo, da vidim ničle. Torej, kje je napaka? Ena deljeno z 10 mora biti 0,1. Nekdo želi, da bo zabodel v kakšni Temeljno vprašanje je? Ja? Oni oba cela. Pa kaj potem? Torej z eno deljeno z 10, ki je kaj počnem v aritmetiki. In dobim 0.1. Ja. In tako je res, da je vprašanje. Ko boste vzeli celo v računalniku in si ga delimo z drugo celo število, Računalnik privzeto se bo Predvidevam, da hočeš celo. Problem, čeprav je seveda da 0.1 ni celo število. To je realno število. Pa kaj računalnik ne z Privzeto je to samo vrže proč Vse decimalno vejico. To ne zaokrožujejo navzgor ali navzdol po sebi. Samo odvrže vse decimalno vejico. In zdaj je to smiselno. Ker zdaj smo jasno preostane nič. Toda počakaj malo. Jaz ne vidim nič int. Jaz sem pravzaprav videl 0,00. Torej, kako uskladiti zdaj to? Če ena deljeno z 10 je nič, vendar sem videnje 0,00, kjer je pridobivanje pretvori nazaj v realno število? Ja. Točno tako. Torej, tukaj v pete, ko sem dejansko shranjevanje to, kar je 0,1 nato prireže na nič, znotraj float, da je dejansko enaka shranjevanjem ne kot int a, res, kot likvidna sredstva. Poleg tega sem nato z printf v izrecno natisnete to število na dve decimalni mesti, čeprav obstaja Ne bi dejansko obstajajo. Torej ta vrsta zanič, kajne? Očitno ne moreš računati, vsaj na tej stopnji Natančnost, v računalniku. Ampak zagotovo obstaja rešitev. Kaj je najenostavnejši fix smo lahko morda storiti, pa čeprav samo intuitivno tukaj rešiti to? Ja? Obrnite cela v - Ja. Tudi če nisem povsem prepričan, kaj je res se dogaja, če je bistveno je povezano z njimi, tako da ints, no, zakaj ne jaz da to 10.0, ki to 1.0, shranili datoteko. Naj grem nazaj na dno in prevedem. Naj se sedaj ponovi. In tam - Zdaj, jaz imam eno desetino zastopali 0,10. Vse je v redu. Tako da to ni slabo. In naj omenim še en drug način smo lahko to rešili. Dovolite mi, da dejansko roll nazaj v čas da ko smo to imeli kot eno Deseti pred nekaj trenutki. In mi gredo naprej in shranili to datoteko kot drugo ime datoteke, samo da bi imajo malo checkpoint. Tako da je bila ena različica. In zdaj mi gredo naprej in naredite še eno različico. Poklicali bomo to različico dva nič indeksirajo. In bom namesto tega to - veste kaj? Dodal piko nič dela v tem primeru. Recimo nekdo spremenljivka. Naj bi bilo 10 spremenljiva. Z drugimi besedami, domnevam, da nisem mogla le težko koda 0,0 konec tega aritmetično izražanja. No, jaz lahko dejansko nekaj storiti V oklepaju se imenuje litje. Jaz lahko odda, da celo 10 do likvidnih sredstev, in sem lahko vrgel to celo število ena, da plovec, kot tudi. Potem math, da se dogaja, da je treba storiti je dejansko 1,0 deljeno z 10,0, rezultat, ki gre v f kot prej. Torej, če sem prevedem to, kot da lebdi 2, in zdaj plava 2, dobim enaka odgovor, kot tudi. Torej je to precej izmišljene primer, Za rešitev tega problema z uvedbo litje. Ampak na splošno, vlivanje dogaja, da se močna stvar, zlasti Problem nastavite dva v enem tednu, ko želite spremeniti eno vrsto podatkov za drugo, da ob koncu dneva so predstavljene na enak način. Ob koncu dneva, vsak eno stvar, ki smo se pogovarjali o doslej je le ints, ki je pod pokrovom. Ali pa, če je to preveč nizko raven za ti, oni so samo številke Pod pokrovom. Tudi znakov, spet, spomnimo iz tedna nič, so številke Pod pokrovom. Kar pomeni, da lahko pretvorbo med različne vrste številk, če oni so samo bitov. Mi lahko pretvorite med številkami in pisma, če si le bitov, in obratno. Litje in na ta način je mehanizem v programiranju, ki vam omogoča prisilno spremeniti eno vrsto podatkov v drugo. Žal pa to ni tako enostavna, kot sem lahko všeč. Jaz grem nazaj v plovci 1, ki je enostavnejša, enostavno ena z 0,0 dodana vsakemu. In prav tako hitro Osvežitveni, Naj gredo naprej in znova to, da lebdi 2 - Oprostite, to je, da lebdi 1. In zdaj pa teče boje 1. In na dnu, opazili da sem res dobil 0.1. Torej, problem rešen. Ampak še ni. Jaz sem zdaj dogaja, da bi dobili malo radovedni, in jaz grem nazaj v moji printf izjavo in pravijo, veste kaj? Želel bi potrditi, da je to je res ena desetina. In jaz grem rad videl to da, recimo, pet decimalnih mest. To ni problem. I spremeniti dve do pet, Jaz prevedem z znamko. Jaz ponovitev je kot plava 1. Videti precej dobro. Moje sanity pregledi lahko konča tam, ampak Sem že malo bolj pustolovski. Grem spremeniti 0,5-0,10. Želim si, da 10 mest po decimalno mesto. In jaz grem naprej in znova to in ponovitev lebdi 1. Nekako mi je žal, da je to preizkušen več, ker je moja matematika ni tako popraviti več, kot je videti. Toda počakaj malo, morda to je samo krompir. Morda računalnik deluje malo čudno. Dovolite mi, da gredo naprej in to 20 decimalna mesta in sem se prepričati, da vem kako narediti matematiko. Vem, kako program. Naredite plovci 1, prevedem, in prekleto. To je res, res dobili daleč od znamke. Torej, kaj se tukaj dogaja? Intuitivno, ki temelji na naših predpostavkah prej o velikosti podatkovnih tipov kaj je treba tu dogaja pod pokrovom? Ja? Točno tako. Če želite to veliko natančnost in to je pekel od veliko natančnostjo - 20 številke za decimalno vejico. Si ne moremo predstavljati poljubno število, če imate poljubno število bitov. Ampak ne bomo. Za plovcem, imamo le 32 bitov. Torej, če lahko 32 bitov lahko nadomeščena le način - tako kot naše ljudi naprej, oder Roke gor ali dol - v končnem številu načinov, obstaja samo končno število realnih števil lahko predstavlja teh bitov. Tako računalnik sčasoma se bo moral začetek rezanje vogali. Računalnik lahko skrijete tiste podrobnosti pri nas za malo časa. Ampak, če bomo začeli drezati v številu in videti dlje in dlje v vlečni številk v celo število potem smo začeli videti, da je dejansko približevanje Ideja za desetino. In tako se je izkazalo, tragično pa je neskončno število števil ne moremo predstavlja ravno računalnik, vsaj s končno število bitov, končna količina RAM-a. Zdaj na žalost je to včasih ima v realnem svetu posledice. Če ljudje ne povsem cenim to ali nekako samoumevno dejstvo, da bo njihov računalnik samo to, kar jim je povedal, da ne in ne razumeti to osnovno Reprezentančni podrobnosti - ki, odkrito povedano, v nekaterih jezikih so skrita od uporabnika, za razliko od C - nekatere slabe stvari se lahko zgodi. In kaj sem mislil, da bi naredil je korak nazaj. To je približno osem-minutni video. Je na sporedu pred nekaj leti, in daje vpogled v dejansko kaj lahko gredo narobe, če se premalo cenim to vrste informacij v zelo vse preveč realnem svetu. Če bi lahko dim luči za nekaj minut. SPEAKER 1: Zdaj vrniti inženiring nesreče na sodobnih čudeži. Računalniki - smo vsi prišli do sprejema pogosto frustrirajuće težave da gredo z njimi. Hrošči, virusi in programske opreme glitches so majhne cene za plačilo stroškov udobje. Toda v high-tech in visoke hitrosti vojaški in vesoljski program aplikacije, najmanjši problem se lahko poveča v katastrofo. 4. junija 1996, znanstveniki pripravljeni začeti brez posadke Ariane 5 raketa. To je bilo izvajanje znanstvenih satelitov zasnovan tako, da natančno določi, kako vzpostaviti Zemljino magnetno polje interagira s sončnimi vetrovi. Raketa je bila zgrajena za evropsko Vesoljsko agencijo in dvignjen od njenega objekt na obali Francoske Gvajane. JACK GANSSLE: Na približno 37 sekund, v let, so najprej opazili kaj je šlo narobe. Šobe so vrtljiva v Tako da res ne bi smeli. Okoli 40 sekund v letu, jasno Vozilo je v težavah. In to je, ko je Odločitev, da ga uniči. Uradnik za varnost območje, s ogromno poguma, pritisnete na gumb, razneslo raketo, preden se lahko postal nevarnost za javno varnost. SPEAKER 1: To je bilo prvo potovanje od Ariane 5, in njeno uničenje prišlo zaradi razpoke vgrajenih V opremo rakete. JACK GANSSLE: Problem na Ariane je, da je število , ki je potrebna 64 bitov izraziti. In so želeli spremeniti za 16-bitno številko. Domnevali so, da je število nikoli bo zelo velik, da je večina tiste cifre v 64-bitni Številka so ničle. Da je bilo narobe. SPEAKER 1: nesposobnost enega programske opreme Program sprejeti vrsto številka, ki jo druga pa je bila na koren neuspeha. Razvoj programske opreme je postala zelo drago del nove tehnologije. Ariane 4 Raketa je bila zelo uspešen, toliko programske opreme ustvarjena za to je bil tudi uporablja v Ariane 5. PHILIP Coyle: Osnovni problem je bil, da je Ariane 5 hitreje pospešila hitreje. In programska oprema ni imel predstavljali, da. SPEAKER 1: uničenje rakete je bil velik finančni katastrofa, vse zaradi minuto napake programske opreme. To pa ni bila podatki prvič Težave pretvorbe je pestijo moderno raketni tehnologiji. JACK GANSSLE: Leta 1991, z začetkom od prve zalivske vojne, Patriot raketa doživela podobno vrsto problema pretvorbe številko. Posledično je bilo 28 ameriških vojakov ubitih in okoli 100 ranjenih drugi ko Patriot, ki naj za zaščito pred dohodne rakete Scud, ni na ogenj izstrelkov. SPEAKER 1: Ko je Irak napadel Kuvajt in Amerika je začela Desert Storm v v začetku 1991, Patriot raketne baterije so bili razporejeni za zaščito Saudsko Arabijo in Izrael od iraške Scud raketne napade. Patriot je ameriški srednjega dosega Sistem zemlja-zrak, ki ga proizvaja podjetje Raytheon. THEODORE POSTOL: velikost Patriot interceptor sama grobo 20-metrov dolgo. In tehta okoli 2000 kilogramov. In to nosi bojno glavo približno - Mislim, da je približno 150 £. In bojno glavo sama visoko eksplozivne ki ima fragmenti okoli njega. Ohišje konico je namenjen da deluje kot šibre. SPEAKER 1: Rakete se izvajajo štiri na posodo in se prevažajo jo polpriklopnik. PHILIP Coyle: Patriot protiraketni Sistem se vrne na najmanj 20 let. To je bil prvotno zasnovan kot obrambnih raket zrak sestrelili sovražnik letal. V prvi zalivski vojni, ko je ta vojna prišel je vojska želela, da jo uporabljajo sestrelili rakete Scud, ne letal. Iraški zračne sile ni bilo toliko problem. Vendar je vojska skrbi rakete Scud. In tako so skušali nadgraditi Patriot. SPEAKER 1: Prestrezanje sovražnika raket potuje mach petih bilo bodo dovolj zahtevna. Toda, ko je bil Patriot planila služba, vojska ni poznala Iraški sprememba, ki so izrazili svoja Rakete Scud skoraj nemogoče zadeti. THEODORE POSTOL: Kaj se je zgodilo Je rakete Scud, ki so bile prihajajo bila nestabilna. Bili so niha. Razlog za to je bila Iračanov, v Da bi dobili 600 kilometrov od Projektil 300 kilometrov dosega, je teža od prednje bojne konice. Naredili so bojne glave vžigalnik. Torej, zdaj Patriot poskuša da pridejo na Scud. In večino časa, velika Večino časa, bi to samo letenje, ki jih Scud. SPEAKER 1: Ko sistem Patriot Operaterji spoznal Patriot zamudil njen cilj, da eksplodirajo Patriots bojno glavo, da bi se izognili možnosti žrtev, če je bilo dovoljeno da pade na tla. THEODORE POSTOL: To je tisto, kar najbolj ljudje videli kot velike ognjene krogle na nebu in napačno razumljen kot prestreza od Scud bojnih glav. SPEAKER 1: Čeprav je v nočnem nebu Patriots je zdelo, da bo uspešno uničenje rakete Scud na Dhahran tam mogoče ne bo pomote, o svojem uspešnosti. Tam, radarski sistem Patriot izgubila Spremljajte dohodni Scud in nikoli začela zaradi programske pomanjkljivost. To je bil Izraelci, ki je prvi odkril da dlje sistem je o, večja čas neskladje je postal zaradi ure vgrajeni v sistemu računalnika. JACK GANSSLE: Približno dva tedna pred Tragedija v Dhahran, Izraelci poročali, da obrambno ministrstvo da je bil sistem izgublja časa. Po približno osmih urah teče, so opazili, da je sistem postala opazno manj natančna. Obrambno ministrstvo odzvala z povedal vse Patriot baterij da ne pustite sistemov zelo dolgo časa. Niso povedali, kaj je bilo dolgo časa. Osem ur? 10 ur? 1000 ur? Nihče ni vedel. SPEAKER 1: Patriot baterije nameščene V vojašnici na Dhahran in je njegovo neustrezno notranja ura že na več kot 100 ur na noč 25. februar. JACK GANSSLE: To sledil čas Natančnost približno desetinko sekunde. Sedaj desetinko sekunde Zanimivo število, ker ne more biti izražene v binarni natančno, kar pomeni ni mogoče izražena natanko vsak sodoben digitalni računalnik. Težko je verjeti, ampak uporabite to kot primer. Oglejmo Številko eno tretjino. Ena tretjina ne more biti izražena na decimalko natančno. Ena tretjina je 0,333 dogaja o za neskončnosti. Ni šans, da z absolutna natančnost pri decimalko. To je točno isto vrsto problema to se je zgodilo v Patriot. Več sistem tekel, najslabše je postal čas napake. SPEAKER 1: Po 100 urah delovanja, napaka v času je bil le približno eno tretjino sekundo. Ampak v smislu ciljanje raketo potuje mach pet, je povzročilo Napaka sledenje več kot 600 metrov. To bi bila usodna napaka Vojaki na Dhahran. THEODORE POSTOL: Kaj se je zgodilo, Scud začetek je bil odkrit v začetku leta opozorilne sateliti. In so vedeli, da Scud je prihajala v njihov splošni smeri. Sploh ne vem, kje je prišel. SPEAKER 1: Zdaj je bil do radarja sestavni del sistema Patriot brani Dhahran najti in obdržati Spremljajte dohodne sovražnik izstrelkov. JACK GANSSLE: radar je bil zelo pameten. To bi dejansko spremljali položaj Scud in nato predvideti, da Verjetno bi naslednjič radar poslala impulz ven. , Ki je bil imenovan vrata območje. THEODORE POSTOL: Potem ko Patriot se odloči, je minilo dovolj časa, da gredo varnostno in preverite naslednjo lokacijo to zazna objekt, gre nazaj. Torej, ko se je vrnil v napačno mesto, potem ne vidi nobenega predmeta. In sklene, da ni bilo nobenega predmeta, je bilo lažno odkrivanje in kapljice progo. SPEAKER 1: Prihodnje Scud izginil iz radarskega zaslona in sekund kasneje je zaloputnil v vojašnice. Scud je ubil 28 in je bil zadnji odpuščen v času prve zalivske vojne. Tragično je, posodobljena programska oprema prispela ob Dhahran naslednji dan. Programska oprema pomanjkljivost je bila določena, zapiranje eno poglavje v težavah Zgodovina Patriot raket. Patriot je pravzaprav kratica za fazni sledenje Odsek Target. DAVID J Malan: V redu, tako da streznitve primer, da se prepričate. In na srečo, ti nižji ravni hrošči niso nekaj, kar bomo običajno morali ceniti, vsekakor ne z nekaj naših Najzgodnejši programov. Nasprotno, večina hroščev boste Srečanje bo logično v naravi, skladenjske narave, pri čemer koda ne dela prav. In veš, da je zelo hiter. Ampak, še posebej, ko smo prišli do konec semestra, da se bo postali bolj in bolj možnostjo res težko razmišljati o oblikovanju svojih programov in osnovnimi zastopanje Tudi tam podatkov. Na primer, bomo uvesti MySQL, ki je priljubljen baze motor ki jih lahko uporabite pri spletnih strani shranjevanje podatkov na zadnji konec. In boste morali začeti odločati, konec semestra, ne samo tisto, kar tipi podatkov v tej smeri, da uporabljajo ampak koliko bitov za uporabo, ali ne želite shraniti rok kot datumi in časi so čas, in tudi stvari, kot so, kako velik želite posebne identifikatorje, da se za, recimo, uporabnike v zbirki podatkov. V bistvu, če nekateri od vas ste imeli Facebook predstavlja kar nekaj časa, in veste, kako pridobiti dostop s svojim uporabniškim imenom - ki se včasih pojavi v vašem URL profil, razen če ste izbrali vzdevek za URL, ali če ste Rabljeni Facebook je Graph API, javno dostopen API, s katerim ste lahko zaprosi Facebook za neobdelanih podatkov - lahko vidite, kaj je tvoj številčne ID je. In pred nekaj leti, v bistvu Facebook moral spremeniti z uporabo enakovredno ints za uporabo dolge dolgo, ker se sčasoma uporabniki prišli go in ustvarili veliko računov in ponarejene račune, čeprav so zelo enostavno uspelo izčrpati nekaj podobnega 4. milijard možno vrednost kot notr. Torej, več o teh vrstah zadev po cesti, kot tudi. Vse je v redu, tako da je bil litje. Da je nenatančnost. Nekaj ​​hitrih objav. Torej oddelki formalno začelo prihajati Nedelja, ponedeljek, torek. Boste slišali preko elektronske pošte kasneje ta teden glede sekcije nalogo. In boste tudi tukaj na tej točki, kako , da spremenite svoje poglavje, če je vaš Načrt se je zdaj spremenilo, ali si Raven udobja je zdaj spremenilo. Medtem P-set ena in ena je heker ker ta četrtek z možnostjo podaljšanje tega roka na specifikacije do petka na običajen način. Zavedam se, da vključi s problemom set specifikacije so navodila za kako uporabljati CS50 aparata, da bi, kot tudi nekatere CS50 posebna orodja kot stil 50, ki vam lahko zagotovi povratne informacije dinamično na Kakovost vašega kode slogu in prav tako preveriti 50, ki ga lahko zagotovi dinamično povratne informacije glede vašega koda za pravilnost. Oprostite, da smo še vedno likanje ven nekaj Kinks s preverjanjem 50. Nekaj ​​svojih sošolcev, ki niso začeli okoli 04:00 v petek zvečer, ko spec šli so do opazila odtlej nekaj hroščev, ki delamo skozi, in opravičujem za vsakogar, ki je doživela nepotrebnih frustracij. Krivda je moja. Ampak bomo spremljala na CS50 razpravljali, ko se da rešiti. Torej beseda o samih rezultatov. Torej bo to teden ali dva, preden začeli, da bi dobili povratne informacije o problemskih sklopov saj ti še nimajo poučevanje kolega. In tudi potem, bomo začeli oceniti Problem C postavlja preden smo pojdi nazaj in oceniti praske tako da boste dobili bolj pomembne hitreje povratne informacije. Ampak na splošno po predmetniku, CS50 problem kompleti so ocenili skupaj Po štirih osi - Področje, pravilnost, oblikovanje in slog. Področje uporabe se bo število običajno med nič in pet, da ujame koliko kos, ki si odgriznil. Značilno je, da si želim, da je to pet. Si vsaj poskusil. In opazil, da je multiplikativni faktor tako da delaš samo del Problem niz ni najboljša strategija. Medtem, bolj očitno je, Pomen pravilnosti - Samo je vaš program pravilno z upoštevati specifikacije? To se ponderirajo namerno več močno od drugih dveh oseh z faktor tri, saj smo prepoznali ki običajno boste porabili Veliko več časa loviš navzdol nekaj hroščev, dobili kodo za delo, nato pa so ga Feed in izbiro ustrezne spremenljivke imena in kot, ki je na drugem koncu spektra stila. To ne pomeni, da stil ni pomembno in ga bomo pridigajo preko Čas tako na predavanjih in v oddelkih. Slog se nanaša na estetiko vaše kode. Ste se odločili tudi, imenom spremenljivke da so kratki, vendar nekoliko opisna? Je koda zamaknjena, kot ste jih videli v Predavanje in na način, ki je skladen v stilu 50? Končno je pravica iz modela tam v sredini. Design je ena težje postaviti prst, ker je veliko bolj subjektivna. Ampak to je morda najpomembnejši tri osi glede na pedagoško vrednost v času in da bo to učiteljskega kolegi je priložnost, da se vam nudijo kakovostno povratno informacijo. Dejansko je v CS50 čeprav imamo te formule in ocene, na koncu dneva so zelo namerno zelo majhne žlice - točka vrednote med nič in tremi in nič in pet. Ne bomo poskušali pripraviti zelo grobih linij med problematičnih sklopov ali med študentov ampak osredotoči kar smo lahko na kvalitativnih, longhand povratne informacije, bodisi natipkana ali verbalno iz vaša zlasti poučevanje kolegi, boste dobili precej dobro poznam. Vendar pa na splošno, ki so uteži da bodo imeli različne osi. Medtem, preveč, da je vredno vodenje v motilo, da ne bi smeli domnevati, da tri od petih je 60% in torej približno ni. Tri je namenoma mišljeno, da bo nekako sredi ceste dobre. Če ste dobili trojk na začetek semestra, to je zato mišljen kot dobro mesto za začetek. Če ste dobili dvojke, sejmov, tam je definitivno nekaj dela, da plača malo več pozornosti, da izkoristijo oddelkov in uradnih ur. Če ste dobili štiric in petke, super. Ampak res, upamo, da bomo videli trajektorije Med študenti - zelo individualizirano na študenta, ampak začetek semester tukaj v vrsto dva do tri območja, toda konča tu v 4-5 območju. To je tisto, kar smo zares iskali. In nimamo v mislih delta, vam kažejo med tedenskim nič in teden 12, ko delam ocen. Ni važno, za nas absolutno kako ste pošteno na začetku, če je vaš trajektorija je res navzgor in močna. Akademsko poštenost - zato naj povem o mojem resnejše glas za trenutek. Torej, to seveda ima razlikovanje pošiljanje več študentov kot katera koli druga v zgodovini z ad krovu, verjamem. Imamo vrsto izgubljenega štetja na to Točka kako pogosto se to zgodi. In to ne zato, ker študentje v 50 so vse bolj nepošteno kot njihovi sošolci drugod. Ampak zavedati tudi, da smo zelo dobri odkrivanju te stvari. In to prednost, da računalništvo razred je v tem, da smo Lahko mi pa primerjate vse učence Problem določa par-pametno pred vsako drugega, ne samo v letošnjem letu ampak vsa predhodna leta. Imamo sposobnosti, kot so študenti v razred, da Google in najti kodo na mestih, kot so GitHub in forumi. Obstaja absolutno rešitve CS50 je p-postavlja plava okoli tam. Ampak če jih lahko najdete, smo jih lahko našli. Vse to je zelo avtomatiziran in enostavno in žalosten za nas, da bi našli. Vendar želim poudariti tudi, da akademsko poštenost politika tečajnega je zelo mišljeno, da se zelo nasprotje tem duhu. Dejansko letos smo na novo ubesedil stvari v predmetniku, da je to, pika dot dot, pri čemer podrobneje v učni načrt. Ampak Prevladujoča tema v teku Res je, da so smiselne. Zavedamo se, da je tam veliko Znesek pedagoško vrednost sodelujoč, do neke mere s sošolci, s katerim si dva ali pa tri ali pa še več so stoji na tabli whiteboarding, tako da govorijo, svoje ideje - pisanje iz psevdokoda v slikah, diagramov, kaj bi bilo, če Mario ste bili, da ga napišete prvi V psevdokoda. Kaj naj požrešen algoritem - kako naj se obnaša na Problem postavlja eno? In tako se zavedajo, da je vedenje da bomo spodbudili je zelo veliko podobnega. In v predmetniku, boste videli cel kup krogel pod smiselno kategorija in ni smiselno kategorija, ki nam pomaga, pomaga ste zaviti vaš um okoli katerih bomo risati črto. In na splošno, dostojno pravilo je, da če ste se borijo za reševanje nekateri bug in vaš prijatelj ali sošolec sedi zraven tebe, je primerno za vas, da mu pokazati, ali ji kodo in rekel, hej, lahko pomagate sem ugotoviti, kaj je šlo narobe tukaj? Mi običajno ne sprejemajo nasprotne strani. To ni pravilen odgovor za svoje prijatelj ali sošolec tukaj reči, oh, samo poglej rudnika in figure da se iz tega. To je nekako nesmiselno. Vendar ima nekdo drug, še možganov, še en par oči pogledati zaslon ali pogled na kodo in pravijo, ste prepričani, da želite da imajo zanke tukaj? Ali ste prepričani, da želite da podpičjem tukaj? Ali oh, da je sporočilo o napaki pomeni to. Tisti, ki so zelo razumno in spodbujati vedenja. Primeri, v katerih sem bil s takimi prej zavre navzdol, ko so študenti pozno ponoči, da bi slabe sodbe Sklepi in emailing svojo kodo nekdo drug ali pa samo rekel, tu, je v Dropbox ali Googlanjem pozno v noč. In tako bi spodbujali in prosim vas, Če imate tiste neizogibne trenutki stresa, ste zaletavate gor pred iztekom roka, vam ni prepozno dan, saj je že petek ob da točka, email glave predmeta, ali pa sam neposredno. Pravijo, poslušaj, jaz sem na moji prelomni točki tukaj. Pa pogovor in pogruntal. Zatekanje k spleta ali kakšno drugo ne razumno vedenje ni nikoli rešitev, in preveč vašega sošolci niso več tukaj Kampus zaradi tega slabe sodbe. Ampak to je zelo enostaven za krilo, da linijo. In tukaj je malo sliko, da bi razvedril ste se od Reddit tako da zdaj vse bo v redu. Tako hitro Rekapitulacija, potem o, kjer smo končali. Torej prejšnji teden, opozarjajo, da uvajamo pogoji, ki niso v nič vendar v C tokrat. In bilo je nekaj novega, ampak sintaksa res nobene nove ideje na sebi. Imeli smo logičnih izrazov, da smo lahko ali skupaj z dvema navpičnima palice ali skupaj z dvema ampersands, ki pravijo, da sta leva in pravica mora biti res Za to izvesti. Potem smo imeli stikala, ki smo jo pogledal na kratko, ampak jaz predlagam so res samo drugačna sintaksa za doseganje Enaki zadel, če veš, v vnaprej, kakšne so vaše zadeve se bo. Ogledali smo si zank. Zanka se je morda najbolj pogosti, ali vsaj eno, da ljudje običajno doseže za instinktivno. Čeprav izgleda malce skrivnosten, boste videli veliko, veliko primerov je to Pred dolgo, kot ste že konec prejšnjega tedna. Medtem zanke lahko podobno doseči isto stvar. Ampak če hočeš narediti vse stopnjevanja ali posodabljanje Vrednosti spremenljivke, morate narediti več ročno, kot Za zanka pred dovoljuje. In potem je tukaj še do-while zanko, ki nam omogoča, da naredite nekaj za vsaj enkrat med nekaj ostalo je res. To je še posebej dobro programi ali za igre, kjer želite za poziv uporabniku za nekaj vsaj enkrat. In potem, če se on ali ona ne sodeluje, boste morda želeli, da to storite znova in znova. S spremenljivkami, medtem ko smo imeli linije kode, kot je ta, ki bi lahko dve liniji. Lahko razglasi int imenovano števec, podpičje. Ali pa samo prijaviti in definirati, tako rekoč. Da ga vrednost ob istem času. In potem na koncu, smo se pogovarjali o funkcijah. In to je lep primer v občutek, ki ponazarja dve vrsti funkcij. Ena je GetString (), ki je, še enkrat, dobi niz od uporabnika. Ampak GetString () je nekako zanimivo, kolikor smo ga uporabili, ker smo vedno uporabljati nekaj na levi strani enačaj. To se pravi, da GetString () vrne vrednost. Se vrne, seveda, niz. In nato na levi strani, smo preprosto shranjevanje, da niz notranjost spremenljivka imenuje ime. To je drugače, v smislu, od printf ker printf, vsaj v našem Uporaba tukaj, ne vrne ničesar. Kot prahi, počne nekaj vrnem. Mi je vseeno, kaj je. Ampak to je tisto, kar je imenujemo stranski učinek. In kaj je to stranski učinek v vsaki Primer smo videli doslej? Kaj printf storiti? To natisne nekaj na zaslonu, prikaže besedilo ali številke ali kaj na zaslonu. In to je samo šteje stranski učinek saj to ni res predajo pa nazaj k meni. To ni odgovor notranjosti črna skrinjica, da sem lahko potem segajte in zgrabi. To je samo to počne sama, veliko kot Colton je bil vključen v to črna skrinjica prejšnji teden, in je nekako čudežno je risanje na krovu brez mene pravzaprav gre. To bi bilo stranski učinek. Ampak če bi dejansko moral segajo v Tu in rekel, oh, tukaj je niz od uporabnika, da bi biti vrnjeno vrednost. In doslej uporabili smo samo funkcije da so drugi ljudje napisali. Vendar pa lahko dejansko narediti to vrste stvari sami. Torej, jaz grem v CS50 aparat znova. Dovolite mi, da zaprete zavihek, ki smo so odprli pred nekaj trenutki. In mi gredo naprej in ustvariti novo datoteko. In jaz grem naprej in imenujemo to en positive.c. Torej, želim, da narediš nekaj z Pozitivne številke tukaj. Tako da sem šel naprej in to int - žal - # Include. Raje ne bi, da je enako napaka kot prej. Int main (void), odprto kodrasti naramnicami, zaprta kodraste opornico. In zdaj hočem narediti naslednje. Hočem napisati program, ki vztraja, da uporabniku omogoča me je pozitivno celo število. Tako da ni GetPositiveInt funkcija v knjižnici CS50. Obstaja samo GetInt (). Ampak to je v redu, ker imam konstrukti, s katerim sem se lahko nalagajo malo več omejitev za te vrednosti. Jaz bi naredil kaj takega. Torej int n - in če tipkate skupaj, samo zavedaš Jaz grem nazaj in spremeniti nekatere stvari v tem trenutku - tako int n enak GetInt (). In to se dogaja, da dajo int znotraj n. In mi bo bolj opisna. Naj povem nekaj, kot sem zahteval, da mi dal pozitivno celo število. Vse je v redu. Torej samo malo navodila. In zdaj, kaj lahko storim? No, jaz že vem, od moje preprost pogoji ali panoge, tako kot sem imel v nič, lahko rečem nekaj kot če je n manjša ali enaka nič, potem pa sem hotel narediti nekaj kot, da ni pozitivno. In potem sem lahko naredil - OK, ampak želim, da se to int. Torej, jaz bi šel gor in sem lahko nekako izvoda tega in alinee tega. In potem, v redu. Torej, če je n manjša ali enak nič narediti. Zdaj, kaj, če uporabnik ne sodeluje? No, potem bom sposodim tukaj. In potem sem šel noter in tukaj in tukaj. Tako da to očitno ni rešitev, kajne? Ker ni videti konca. Če želim, da zahtevajo, da uporabniku omogoča me je pozitivno celo število, ne morem dejansko dobil int. Lahko pa preverite to notr. Ampak potem bi rad še enkrat preveriti in še enkrat preveriti in ponovno preverite. Torej je očitno, kaj je bolje konstrukt, ki se uporablja tukaj? V redu, torej nekakšna zanka. Torej bom znebiti za skoraj vse to. In želim, da se to int vsaj enkrat. Tako bom rekel ne - in pridem nazaj medtem ko je v samo nekaj trenutkov - Zdaj, ali kaj? Jaz bom naredil int n dobi GetInt (). OK. Torej, to je zelo dobro. In zdaj, kako pogosto Hočem to storiti? Naj povem, da printf notranjosti zanke da bom lahko znova in znova zahtevajo, če je to potrebno. In kaj hočem to medtem ko je pogoj, da naredim? Želim, da ostane ta način pa, kar je res? Ja. N je manjša ali enaka nič. Torej že imamo precej sem očistiti to kodo gor. Mi smo sposodil zelo enostavno sestaviti - do-while zanko. Sem ukradejo le pomembne linije kode, ki sem začel kopiranje in lepljenje, ki ni bilo pametno. In sedaj bom dejansko prilepiti je tukaj in samo enkrat naredi. In zdaj, kaj hočem narediti na Zelo konec tega programa? Jaz bom samo rekel nekaj preprostega všeč, hvala - in Jaz bom% i za notr - Nagibnica n, vejica, nato plug n, podpičje. Vse je v redu. Torej, da vidimo, kaj se bo sedaj zgodilo ko sem zagon tega programa. Jaz grem naprej in ne bo pozitiven. Prekleto. Nekaj ​​napak. Naj se pomaknete nazaj do prvega. Ne delajo preko njih nazaj. Delo prek njih od zgoraj navzdol sicer se kaskade in samo ena stvar, ki je narobe. Implicitno izjavo Funkcija GetInt (). Ja. Torej to ni bilo dovolj. Nekako sem naredil isto napako, vendar Malo tokrat drugače. Moram namreč ne zajemajo le stdio.h vendar tudi cs50.h, ki vključuje tako imenovane izjave o dobili int, ki naučiti aparat, ali uči C, kar GetInt () je. Naj shranili. Bom prezreti drugih napak ker bom upam, da oni nekako povezana z napako Sem že določena. Naj gredo naprej in znova z make pozitiven, Enter. Prekleto. Tri napake, vedno. Dovolite mi, da se pomaknete do prvega. Neizkoriščene spremenljivka n. Nismo videli že prej. In tudi to je malo skrivnosten. To je izhod prevajalnika. In kaj je izpostavila linija tam - positive.c :9:13 - je rekel, da govori na spletu devet od positive.c na 13. značaja 13. stolpec, ste naredili to napako. In zlasti, da govori me neizkoriščena spremenljivka n. Torej, da vidimo - linija devet. Jaz sem z n v smislu, da Jaz sem mu daje vrednost. Ampak kaj prevajalnik ne mara, je da nisem videz, da jo uporabljajo. Toda počakaj malo, jaz sem ga uporabljajo. V vrstico 11, jaz sem jo uporabljajo tukaj. Ampak, če sem se pomaknite naprej ob positive.c :11 - tako da na linijo 11, 12 znakov, prevajalnik mi pravi, uporaba neprijavljeno identifikator n. Torej neprijavljene pomeni, da imam ne pa, kot je določeno spremenljivka z vrsto podatkov. Toda počakaj malo. Sem storil natanko to v skladu devetih. Torej je nekdo res zmeden tukaj. To jaz, ali pa zato, ker prevajalnik v skladu devet, še enkrat, jaz razglasitvi int n, in sem dodeljevanje da vrne vrednost GetInt (). Potem sem s pomočjo te spremenljivke n v skladu 11 in preveri, ali je njegova vrednost manj od ali enaka nič. Toda to očitno je slabo in lomljeni zakaj? Ponovi? Ah, moram prijaviti pred n vstopom v zanko. Ampak zakaj? Mislim, da pravkar predlagala, malo nazaj, da V redu je, da ugotovi, spremenljivke v eni vrstici in nato jim dodeli neko vrednost. Globalna spremenljivka - Vrnimo da te ideje v samo nekaj trenutkov. Zakaj hočeš, da dajo je zunaj zanke? To je. Točno tako. Torej, čeprav nekoliko protislovno, Naj povzamem. Ko izjavi n notranjosti od storite bloka tam - posebej znotraj tiste zavite oklepaje - da je spremenljivka n je tisto, kar je imenovano področje - povezana z našo točkovnega sistema Tečaj - vendar je področje, ki je omejena na tiste zavite oklepaje. Z drugimi besedami, po navadi, če ugotovi, spremenljivka v okviru niza Zaviti oklepaji, da je edina spremenljivka obstaja znotraj teh zavitih oklepajih. Torej, sam tej logiki, čeprav Sem prijavljeni n v skladu devet, je v bistvu izgine iz področja, izgine iz spomina, če se tako izrazim, do takrat, ko sem udaril črto 11. Ker je linija 11, na žalost, je zunaj teh zavitih oklepajih. Torej, jaz žal ne morem popraviti to z grem nazaj v tisto, kar sem storil prej. Morda vam bo sprva to. Ampak kaj si zdaj ne delaš ciklično? Ti si očitno niso dobili int ciklično. Tako bomo lahko pustite GetInt (), in smo naj zapustijo GetInt () znotraj zanke, ker to je tisto, kar želimo nadlegovanja uporabnika za znova in znova. Vendar to ne zadostuje, da bi šel do črte, recimo, šest. Int n, podpičje. Ne ji dati vrednost, vendar zato, ker vam ni treba samo še. Ampak zdaj sem dol, obvestilo - to bi bilo zelo enostavno napaka. Ne želim, da senca moje prejšnje Izjava o n. Želim uporabiti n, ki dejansko obstaja. In tako zdaj v vrstico 10, Jaz dodeliti n vrednosti. Vendar v skladu šest izjavljam, n. In tako sem lahko ali pa ne morem ga uporabljajo v vrstico 12 zdaj? Ne morem, ker med katerimi kodrasti Naramnice se prijavil zdaj? Ena tu gor na pete. Eni tu na liniji 14. Torej, če sem zdaj pomanjšati, shranite to datoteko, pojdite nazaj v napravo in zagnati bo pozitiven, je zbrati ta čas. Tako da je že napredek. Slash. . / Pozitiven, Enter. Zahtevam, da mi daš pozitivno celo število. Negativno 1. Negativno 2. Negativna 3. Nič. Ena. In hvala za enega, je kaj je sedaj natisnjen. Naj poskusim nekaj drugega, iz radovednosti. Jaz pa sem rekel, da vložek celo število. Kaj pa, če sem namesto vnesite jagnje? Torej ste zdaj videli drugačen poziv - poskusite znova. Vendar nikjer v moji kodi sem napisal poskusite znova. Torej, če je verjetno, je to retry poziv prihajajo iz, bi rekel? Ja, iz GetInt () sama. Torej ena od stvari, osebje CS50, samo po sebi za vas, vsaj v teh prvih nekaj tedne, se mi napisal nekaj znesek preverjanja, da se zagotovi, da napake, če pokličete GetInt (), bo vsaj vam nazaj int od uporabnika. Ne boste dobili niz. Ne boste dobili znak. Ne boste dobili nekaj povsem drugega. Boste dobili int. Zdaj, morda ne bo pozitiven. To morda ne bo negativna. Izdelujemo nobenega jamstva okoli tega. Vendar bomo nadlegovanja uporabnika ponoviti, retry, poskusite znova, dokler on ali ona dejansko sodeluje. Podobno je, če delam 1,23, da ni int. Ampak, če mi tip v, recimo, 50 let, ki mi daje vrednost, kar sem hotel. Vse je v redu. Torej ni slabo. Vsa vprašanja o tem, kaj smo pravkar naredil? Tipka takeaway pa, da bo jasno, ne toliko zanko, ki smo videli Pred čeprav imamo v resnici ne uporabi, vendar je vprašanje področja, kjer spremenljivke lahko se lahko uporabljajo le samo v nekaterih določenem obsegu. V redu, naj obravnava predlog ste naredili prej, da od Globalna spremenljivka. Kot prahi, se je izkazalo, da je druga Rešitev tega problema, vendar ponavadi napačna rešitev ali slabo zasnovana rešitev je, da razglasi svojo spremenljivko, kot tisto, kar je imenovana globalna spremenljivka. Zdaj sem nekako kršijo mojo definicijo področja, saj obstaja Ni zavite oklepaje v sam vrh in zelo dno datoteke. Ampak posledice tega je, da je sedaj v skladu štirih, n je globalno spremenljivko. In kot že samo ime pove, da je Samo dostopen povsod. Scratch dejansko ima to. Če ste uporabili spremenljivko, boste morda spomni si moral izbrati, če je to za to sprite ali za vse sprites. No, vse sprites je samo jasno besedami globalna. Ja? Ah, res dobro vprašanje. Tako opozarjajo, da je v prvi različici moje kode, ko sem nepravilno prijavljeno in ki je opredeljeno v skladu devet - Sem prijavljen kot spremenljivka in sem dal to vrednost z Operater naloga - To mi je dal dve napaki. Ena, da n ni bila uporabljena, in dve, ki je v smeri 11 to preprosto ni bil razglašen. Torej prva nisem naslov v tistem času. To ni nujno napaka prijaviti spremenljiv, vendar ga ne uporabljajte. Toda ena od stvari, ki smo jih storili v CS50 aparat, namenoma, pedagoško, je smo Koljenast up Pričakovanja prevajalnik, da bi prepričani, da delaš stvari, ne samo pravilno, ampak res pravilno. Ker če ste razglasitvi spremenljivko kot n in nikoli ga uporablja, ali jo uporabi pravilno, kaj potem to počne tam? To je resnično brezpredmeten. In to je zelo enostavno daljšem časovnem obdobju, če ne nastavite svoj računalnik v na ta način, da samo še kodo, ki je mali ostanki tukaj, ostanki tam. In potem mesecev kasneje pogledaš nazaj in si kot, zakaj je ta linija Koda tam? In če ni dober razlog, da ne vi ali vaši kolegi ne koristi po cesti, da so za spotakne njo takrat. Kot je stran, kjer je ki prihajajo iz? No, opozarjajo, da vsakič, ko bomo prevedite Program, vse te stvari je se natisne. Tako da se bomo vrnili k temu. Ampak še enkrat, da je korist, ki avtomatizira proces priprave, ki jih teče dejansko prevajalnik imenovano Jek. Ta stvar, bomo sčasoma videli, ima storiti z debugging s posebno Program se imenuje iskalnik napak. To je povezano z optimizacijo koda - več o tem v prihodnje. STD = C99 - To samo pomeni, da uporabljate različico 1999 C. C je bilo okoli celo dlje, kot je da, vendar pa so nekateri lepo Spremembe 10 plus let nazaj. In tukaj je ustrezna narave. Pravimo, da vse, kar prej bi bilo opozorilo napaka preprečuje študentu od priprave. In stenske pomeni to za cel kup stvari, ki ne povezan le z spremenljivk. In potem naj se pomaknete na konec te vrstice. In tudi to, da bomo sčasoma pridejo nazaj. To je seveda ime Datoteka sem prevesti. To spominja na ime datoteke Jaz sem prikazovanje kot ime moje loven programa. Ta-lcs50 samo pomeni uporabo CS50 knjižnica in vse ničle in enice, da Osebje je napisal in zbirajo prej letos, vključiti jim v mojem programu. In kdo ve, kaj lm-je? To je matematično knjižnico, ki je samo tam, tudi če ste ne delam nobene matematike. To je samo avtomatično ki nam jih je uspelo. No, naj stori še en drug primer Tukaj jih odpira novo datoteko. In mi rešiti tole kot string.c. Izkazalo se je, kot smo govorili o podatkih Vrste danes, tam je še več dogaja pod pokrovom kot smo videli doslej. Naj hitro narediš kratek program. Vključiti stdio.h. In bom le da. In veste, mi ne bo isto napako znova in znova. Vključujejo cs50.h. In mi daj zdaj in ne int main (void). In zdaj sem preprosto želite narediti program , ki to zmore - razglasi niz imenovana s in dobili niz od uporabnika. In mi naredil malo Navodila tukaj - prosim dajte mi niz - tako uporabnik ve, kaj storiti. In potem sem dol pod to, Rad bi naredil naslednje - za int i dobi nič. Again, računalniški znanstveniki običajno začetek štetja na nič, vendar smo lahko da to eno, če smo res želeli. Zdaj bom naredil jaz, je manj od dolžine niza s. Torej strlen - S-T-R-L-E-N - še enkrat, to je kratko in jedrnato, ker je lažje na vrsto, čeprav je malo skrivnosten. To je funkcija smo ne uporablja Pred ampak dobesedno počne - vrniti se mi številko, ki predstavlja dolžina niza da Vtipkali. Če jih vnesli v zdravo, bi bilo vrniti pet zato, ker je pet Črke v zdravo. Nato na vsaki ponovitvi ta zanka, jaz plus plus. Torej še enkrat, standardni konstrukt, čeprav niste čisto preveč udobno ali seznanjeni s tem še ni. Zdaj pa na vsaki ponovitvi te zanke, opazili, kaj bom naredil. Želim, da gredo naprej in tiskanje se en znak - tako,% c Nagibnica n v novo vrstico. In potem, veste, kaj hočem narediti? Ne glede beseda, da uporabnik vnese leta, kot je zdravo, Želim natisniti H-E-L-L-O, en znak na linijo. Z drugimi besedami, želim, da se na posameznih znakov v nizu, pri čemer do zdaj ima le niz je zaporedje znakov. In izkazalo se je, kar lahko naredim s, nosilec, i, zaklepaj, zaprite oklepaj, podpičje. In mi morali narediti še eno stvar. To je v datoteki z imenom string.h da strlen je razglašena. Torej, če želim uporabljati to funkcijo, Moram povedati prevajalniku, pričakujejo, da jo uporabljajo. Zdaj pa mi gredo naprej in da Program se imenuje niz. Pika, poševnica, niz. Prosim, daj mi niz. Grem naprej in ga vnesite. Pozdravljeni, v vseh kape, Enter. In zdaj sem opazil to natisnjena en znak za drugo. Torej nov podatek v tem, da niz Na koncu dneva, lahko dostopate prek svojega posameznika znaki z uvedbo kvadrat Nosilec zapis. In to zato, ker niz pod Napa je dejansko zaporedje znakov. Toda kaj je čeden o njih je V računalnika RAM - Mac, karkoli že je - oni dobesedno back to back to back - H-E-L-L-O - na posameznika, ki mejijo bajtov v pomnilniku. Torej, če želite, da se ob osmi primer zlog, ki je v to zanko bi Nosilec nič, en nosilec, nosilec dveh, Nosilec tri, štiri nosilec - da se nič indeksirane do pet - da natisniti H-E-L-L-O v svoji vrstici. Zdaj, kot teaser, naj vam pokažem vrste stvari, boste sčasoma razumejo, vsaj z nekaterimi blizu videti. Za eno, tisto, kar smo v današnjem primeri, če želite, je pravzaprav eden od prvih jailbreaks za iPhone. Beg iz zapora pomeni pokanje telefon tako da lahko dejansko uporabljajo na drugačna prevoznik ali namestitev svoje programske opreme. In boste opazili, je to popolnoma zgleda skrivnosten, najverjetneje. Ampak poglej to. IPhone je očitno razpokan z zanka, če pogoj, ostalo pogoj, kup funkcij smo ni videl. In spet, da ne bo na prvi pogled najbrž razumeti, kako se to dela. Ampak vse, kar smo nekako sprejeti za samoumevno v naših sodobnih življenj dejansko kaže, da celo zmanjšali z nekaterimi teh temeljih smo bili gledaš. Dovolite mi, da gredo naprej in odprite eno drug program, holloway.c. Torej, tudi to je nekaj, kar res ne bi smeli vedeti. Tudi nobeden od zaposlenih, ali sem lahko verjetno ugotoviti ta, ki ga gledaš Morda zato, ker je bila ta oznaka nekoga , ki je bil predložen, kar je zgodovinsko znana kot zapleteno kodo C Tekmovanje, kjer si napisati program ki pripravlja in vodi, vendar je tako prekleto skrivnosten človek ne more razumeti, kaj to bo storil, dokler so jo dejansko vodijo. Torej res, če pogledaš na to koda, vidim stikalo. Vidim glavni. Vidim te oklepaje kar pomeni, nekakšen matrike. Ali kdo želel ugibati, kaj ta program dejansko naredi, če sem teči Holloway? Da. OK. Dobro opravljeno. Torej samo osebje in ne morem ugotoviti kaj te stvari narediti. In zdaj nazadnje, naj gredo naprej in odprli še en drug program. Tale - Ponovno bomo lahko izvorno kodo Na voljo na spletu - to je ravno nekako ljubek si. Vse, kar so naredili, je udaril preslednico zelo malo. Ampak to je resnična številka. Torej, če menite, da je lepa, če bomo dejansko vodijo to na poziv sčasoma boste videli, kako bomo Morda stvari, kot je ta. Torej bomo pustil na tej opombi in se vidimo v sredo. [Predvajanja glasbe] ZVOČNIK 2: Na naslednjem CS50, multipleksiranega uprizorila upor. ZVOČNIK 3: Tukaj je. Ujemite ga! [Predvajanja glasbe]