>> [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]