>> DAVID J Malan: Vse desno, tako da je to CS50.
In to je jasno petek.
In to je konec enega tedna.
Torej si lahko spomnimo, da smo končali, zadnji čas, z Cliffhanger razpoloženje.
Pri čemer smo izpostaviti to laž, da ni glede na to, kaj ste bili učil narašča
navzgor, 1 deljeno z 10 ni v Dejstvo, 0,1 ali 0,100 ali 0,10000.
V bistvu, če bomo prevedite to Program, kot smo to storili včeraj, z,
Znamka nenatančnosti, nato narediti piko, poševnica, nenatančnost,
smo se naučili, da je to tisto, kar je 1 deljeno z 10 dejansko je.
Tako, da to ni res čisto tako.
Toda to počne namig na nekatere Temeljna omejitev računalnikov.
In res, med Stvari bomo storili
danes si oglejte, zakaj je to se je zgodilo, kakšne posledice ima to,
kako je človeštvo uspelo da bi razumela to v nekaterih zelo
resna situations-- rezultat od katerega
je bil precej tragično in expensive-- ter
si oglejte, kako smo lahko dejansko zagovarjajo
pred temi vrstami omejitev.
Torej intuitivno, morda, Zato je 1 deljeno z 10,
po mojem računalniku tukaj, ne samo 1/10, 0,10?
Ja.
Kaj misliš?
>> PUBLIKA članica: radix je drugačen?
>> DAVID J Malan: The kaj je?
Oh, radix je drugačen?
Torej, ne povsem.
To je dejansko bolj temeljnega pomena za strojno opremo.
Druge misli?
Ja.
PUBLIKA DRŽAVA: Oni predstavljajo število drugače?
DAVID J Malan: Torej they-- desno.
Predstavljajo številk drugače.
Napačno, očitno.
Tako da is-- No, drugače od česa?
Ali od koga?
Od nas?
PUBLIKA DRŽAVA: Ja.
Oni ne uporabljajte decimalko sistem [neslišno].
DAVID J Malan: OK.
Torej, na nek način, ki jih ne uporabite decimalni sistem.
Pod pokrovom, Vse je res, binarni,
in to je povezano, v resnici.
Ampak to je še preprostejša razlaga kot to.
Ja.
>> PUBLIKA DRŽAVA: Oni samo toliko bitov.
Prav tako lahko shranite le do določene obsegu, kot z decimalke.
>> DAVID J Malan: Ja.
To je tisto, kar je res že pri tem.
Izkazalo se je, da so računalniki Značilno je, da je vedno le
uporabljajo končno količino podatkov da predstavljajo nekaj.
Prav?
Navsezadnje imamo le fiksni količina prostora na trdem disku.
Imamo le fiksni znesek RAM ali spomin računalnika.
In če imate le fiksni znesek nečesa,
zagotovo ne morete dejansko prešteti do neskončnosti ali katero koli številko, ki jo želite.
Vi, vrsta, moral izbirati, kaj območje
vrednot boš podpiral.
>> In tako na primer, teden ali dva nazaj, ko smo govorili o ASCII,
in smo se pogovarjali okoli 8 bitov, ali bajt, tako rekoč,
največje število smo lahko predstavljajo z 8 bitov je bilo kaj?
255.
In bomo lahko predstavljajo 256 skupnih vrednosti vendar ne, če smo porabili eno od njih
na 0-- No, če pa porabili eno od njih na 0,
takrat največja številka je seveda, 255.
>> Tako se je izkazalo, da je to velja tudi v tem kontekstu.
Začeli smo govoriti, zadnji čas, o številu s plavajočo vejico, ki
se razlikujejo od števil, pri da imajo decimalno vejico
in upam, da nekatere številke po tem, vendar so preveč.
Računalnik je samo običajno dogaja za uporabo 32 bitov, morda 64 bitov
za zastopanje s plavajočo vejico vrednost.
Torej, čeprav smo odraščali učenja matematike in poznavanje
da lahko nujno imeti neskončno število številk
decimalno vejico, ne če imate končno spomin.
Vi, vrsta, moral zaokrožiti, ali pa izberete
številke boš za zastopanje.
In tako si lahko zamislite, v smislu, ker je to računalnik je najbližja
približek vrednosti 1/10, ki je mogoče dobiti, s samo 32 ali tako bitov.
In to ne samo 1/10.
>> Na primer, če spremenim to 1/3, kar mislimo, da je še enostavnejše.
Torej 1 deljeno s 3.
Dovolite mi, da shranite datoteko.
Naj gredo naprej in ga prevedem.
In mi ga ponovno zagnati.
Tudi tu, očitno, 1/3 ni 0.3 in potem neskončno število 3-ih
zatem.
Imate to nenatančnost na koncu.
Torej smo ljudje pravilno, in kaj ste se naučili, v resnici, pravilni,
vendar smo zaletavate up pred nekaterimi omejitvami.
>> In tisto, kar sem mislil, mi bi storili danes, se začne
ga gledaš, odkrito povedano se tragične posledice tega
Včasih, ko je človeštvo ne povsem izvajati
Za to realnost in teh omejitev.
In bomo videli vrsto vinjet od History Channel, ki bo
poglej, kako stvari so šle narobe.
To je približno 8 minut, in se bomo vrnili po tem
in si oglejte točno kaj lahko gre narobe.
Če bi lahko zatemnite lights--
>> [VIDEO PREDVAJANJE]
>> -Computers, Smo vsi prišli do sprejema se pogosto frustrirajuće težave, ki
iti z njimi.
Bugs, virusi in programska oprema glitches so majhne cene
plačati za udobje.
Toda v high-tech in visoke hitrosti vojaški in vesoljski program, aplikacije,
najmanjši problem lahko se poveličuje v katastrofo.
4. junija 1996, pripravili znanstveniki za začetek brez posadke Ariane 5 raketo.
To izvajanje znanstveno bila sateliti zasnovan
natančno, kako oblikovati Združljiva magnetno polje Zemlje
s solarnimi vetrovi.
Raketa je bila zgrajena za Evropska vesoljska agencija
in dvignjen od njegovega objekta na obali Francoske Gvajane.
>> In približno 30 sekund v let, so najprej
Opazil je bilo nekaj narobe.
Da šobe so vrtljiva na tak način, da res ne bi smela.
Okoli 40 sekund v letalu, jasno je bilo vozilo v težavah,
in da je, ko so naredili odločitev, da ga uničiti.
Strelski Varnost z ogromno poguma, pritisnil na gumb,
razneslo raketo, preden se lahko postala nevarnost za javno varnost.
>> -To Je bila devica plovba Ariane 5,
in njeno uničenje je postavite zaradi napako
vgrajenih v programsko opremo, raketa je.
-V Problem na Ariane je bilo, da obstaja
je število, ki zahteva 64 bitov za izražanje,
in želel spremeniti je na 16 bitno številko.
Domnevali so, da je število ni bil nikoli bo zelo velik,
da je večina teh številk v 64 bitna številka je bilo 0 jev.
Da je bilo narobe.
>> -V Nesposobnost ene program za sprejem
vrsta števila ustvari druga pa je bila vzrok neuspeha.
Razvoj programske opreme je postal Zelo drago del nove tehnologije.
Ariane 4 raketa je bila zelo uspešen, tako da večina programja
povzročajo, ker je bila prav uporablja na Ariane 5.
>> -V Osnovni problem je bil, da je Ariane 5 je bil hitrejši, pospešen hitreje.
In programske opreme ni imel predstavljali, da.
>> -V Uničenje rakete je bila velika finančna katastrofa,
vse zaradi napake na minuto programske opreme.
Toda to ni bil prvi Težave pretvorbe podatkov čas
je pestijo sodobno raketno tehnologijo.
>> -in 1991 z začetkom od prve zalivske vojne,
The Patriot projektil doživela podobno vrsto
problem pretvorbe številka.
Kot rezultat, 28 ljudi, 28 ameriških vojakov
je bilo ubitih in okoli 100 drugi ranjen,
ko Patriot, ki naj za zaščito pred dohodne rakete Scud,
ni na ogenj izstrelkov.
>> Kdaj Irak napadel Kuvajt in Ameriko začela Desert Storm v začetku leta 1991,
Patriot raketne baterije so razporejeni zaščititi Savdsko Arabijo in Izrael
od iraških raketnimi napadi Scud.
The Patriot je v ZDA, srednje-range zemlja-zrak sistema
ki jih podjetje Raytheon izdelan.
>> -V Velikost Patriot prestreznik, sam, je približno, približno 20 metrov dolgo.
In tehta približno 2000 kilogramov.
In to nosi bojno glavo z about-- Mislim, da je približno 150 funtov.
In bojno glavo, ki je sam, je visoko eksploziven,
ki ima fragmente okoli njega.
Ohišje bombo je zasnovan tako, da delujejo kot buckshot.
>> -da Rakete so izvajajo, 4 na posodo,
in se prevažajo s polpriklopnikom.
>> -V Patriot anti raketni sistem sega zdaj vsaj 20 let.
To je bila prvotno zasnovana kot obrambni izstrelki zraka
sestrelili sovražnik letal.
V prvi zalivski vojni, ko da je vojna prišla skupaj,
Vojska je želel, da ga uporabi za sestrelili rakete Scud, ne letal.
Iraški Force ni bilo toliko problem,
ampak vojska je skrbelo rakete Scud.
In tako so poskušali nadgraditi Patriot.
>> -Intercepting Sovražnika projektil potujejo na mach pet
je, da bo dovolj zahtevna.
Toda, ko je Patriot je planila v službi,
vojska ni vedela Iraški sprememba, ki je
njihove rakete Scud skoraj nemogoče zadeti.
>> Kaj se je zgodilo, je za rakete Scud da so prihajali v, so nestabilne,
so bili wobbling.
Razlog za to, je Iračanom, da
da bi dobili 600 kilometrov od 300 kilometer razpon projektil,
je masa iz sprednjega bojno glavo in so bojne glave vžigalnik.
Torej sedaj, Patriot poskuša priti na Scud in večino časa,
velika večina izmed čas, bi to samo letenje, ki jih Scud.
>> -Ko Sistemskih operaterjev Patriot realiziran Patriot zgrešil svoj cilj,
so eksplodirala Patriot je bojno glavo, da bi se izognili morebitnim žrtev, če je
pustimo, da pade na tla.
>> -To Je tisto, kar večina ljudi je videlo, tiste velike fireballs na nebu,
in napačno razumljen kot prestreže v Oblaki bojnih glav.
Čeprav je v noči nebo, Patriots pojavil
da bo uspešno uničuje rakete Scud na Dhahran,
ne more biti nobenega napaka o njegovi uspešnosti.
Tam, radarski sistem Patriot izgubila sled dohodni Oblaki,
in nikoli ni začela, zaradi programske razpoke.
To je bil Izraelcem, ki je prvi odkril da je več na sistem,
čim večja je časovna razlika postal zaradi uro vgrajeni
v računalniku sistema.
>> -O 2 tedna pred tragedija v Dhahran,
Izraelci poročali, da Oddelek za obrambo,
da je sistem izgube časa, da se po približno 8 ur delovanja,
so opazili, da je bil sistem postaja opazno manj natančna.
Oddelek za obrambo odzvala z povedal vse Patriot baterij
da ne pustite sistemov na že dalj časa.
Oni nikoli rekel, kaj je bilo dolgo časa.
8 ur?
10 ur?
1000 ur?
Nihče ni vedel.
-V Patriot baterije nameščene na vojašnici
na Dhahran, in njegovo neustrezno notranjo ura, je bil na več kot 100 ur
v noči na 25. februar.
>> -To Gosenicami čas z natančnostjo približno 1/10 sekunde.
Sedaj 1/10 sekunde je Zanimiva številka
ker ne more biti izraženo v binarni, točno.
Kar pomeni, da ne more se je izrazil, točno,
v vsaki sodobni digitalni računalnik.
Težko je verjeti, toda to uporabijo kot primer.
Oglejmo številko, 1/3.
1/3 ne more biti izraženo na decimalko točno.
1/3 je 0,333 dogaja za neskončnost.
Ni šans, da se ne da, z absolutna točnost, na decimalko.
To je točno isto vrsto Problem, ki se je zgodilo v Patriot.
Dlje sistem tekel je slabši čas napaka postala.
>> -Po 100 urah delovanja, napaka V času je bil le približno 1/3 sekunde.
Ampak v smislu ciljanje projektil potujejo na Mach 5,
je povzročilo sledenje Napaka več kot 600 metrov.
To bi bila usodna napaka za vojake na Dhahran.
>> Kaj se je zgodilo, je začetek Scud je bil ki jih za zgodnje opozarjanje satelitov zazna,
in so New da je Scud prihod v njihov splošni smeri.
Niso vedeli, kje je prišel.
>> -To Je zdaj do radarja sestavni del sistema Patriot,
brani Dhahran, najti in obdržati tir dohodnega sovražnika raket.
>> -V Radar je bil zelo pameten.
To bi dejansko skladbo položaj Oblaki
in nato napovedati, kje bi bilo verjetno,
naslednjič, ko se je radar poslal pulz ven.
Da je bila imenovana vrata območje.
>> -Potem, Ko Patriot odloči dovolj časa ima
minilo iti nazaj in preverite Naslednja lokacija za to zaznani predmet,
gre nazaj.
Torej, ko je šel nazaj v napačno mesto, potem ne vidi nobenega predmeta
in se odloči, da ni bilo objekt, je bilo lažno odkrivanje,
in pade na stezo.
Prihodnje Scud izginil iz radarskega zaslona,
in sekund kasneje, je trčil v vojašnice.
Scud ubitih 28 in je bil zadnji ena odpustili med prvo zalivsko vojno.
Tragično je, posodobljeno programsko opremo prispel na Dhahran naslednji dan.
Napaka software imel bil določen, zapiranje
eno poglavje v težavah Zgodovina Patriot raket.
>> [END PREDVAJANJE]
>> DAVID J Malan: Torej bomo si oglejte nekatere podobne omejitve v samo nekaj.
Ampak najprej, kaj je Prehod na nekaj FYI je.
Torej one-- ta vikend, tam bo super odseki,
ki so namenjene izpodrivati Redno redni oddelki, ki
bo začela teden torej.
Oglejte si spletno stran CS50 je Za več informacij o teh.
Jih tudi posneli, in ki bodo predvajale živeti za tiste, ki se ne more udeležiti.
Problem komplet 1, je na Spletno mesto seveda že sedaj,
in bomo si oglejte da samo malo.
In uradnih ur preveč, bo postavljajte od ponedeljka do četrtka.
>> Torej je bil to najbolj kanonično Program smo pogledal zadnjem času.
To je kot najenostavnejši Program lahko pišete v C,
in celo, da je malo drzna trditev.
Prav?
Zato, ker je veliko Navidezna zapletenost tega.
Torej, kaj je na hitro pogledamo na kaj nekatere od teh elementov
bili in nato poskušajo zagotoviti mentalni model, kako
ti najenostavnejši programov delo, nato pa bomo začeli
gledamo na stvari še bolj zapletene.
Torej, ta črta tukaj poudaril zdaj, v rumeni barvi, kar smo rekli, zadnji čas,
da to počne za nas?
Kaj je namen služi?
Vsakdo od dlje nazaj?
Ja.
>> PUBLIKA DRŽAVA: [neslišno]
DAVID J Malan: Dobro.
Torej vam daje dostop na ukaze, ali dovolimo,
funkcije jim pravite, da je nekdo še zapisal, da se je izjavil:
tako rekoč v neki drugi datoteki.
Torej bomo videli točno kaj .h datoteko je v primerjavi z .c datoteko, sčasoma.
Ampak za zdaj, samo vem, da printf, na primer,
je med funkcijami, ki so bile prijavljeni v nekem drugem spisu, nekje
drugje na trdem disku oblaka, ki nam omogoča dostop do printf in jo uporabite
ne da bi morali na novo izumiti da kolo sebe.
Medtem, glavni.
Kakšen je bil analogni glavnem, prejšnji teden?
Ja.
>> PUBLIKA DRŽAVA: Zelena zastava je kliknil.
>> DAVID J Malan: Ja.
Scratch-ih, ko je zelena zastava kliknili.
To je kot puzzle kos da brcne stvari off.
In tako podobno storil svet odločila, pred nekaj leti, da je v C,
in kup drugih jezikov, Če želite napisati program,
vaša prva naloga je se imenuje, glavni.
In to je videti takole.
Vendar se bomo vrnili, en čas, da kaj, int,
in, nična, pomeni v tem kontekstu.
Za zdaj so zaviti oklepaji so prijazni podobnega puzzle piece obliki Scratch je
ki povzema neko število vrstic.
In med na progah tukaj, je to ena tukaj.
printf je funkcija, katere namen v življenje je natisniti formatiran niz.
In formatiran, sem vam pomeni lahko priključite placeholder vrednot,
in lahko določite, koliko decimalko točk, koliko številk za tiskanje
po decimalno vejico in podobno.
In printf, seveda, ima eno ali več argumentov ali parametrov,
sicer znano, bolj preprosto, kot surovine.
>> Torej printf, kot veliko Funkcije, traja vhode.
In so ti vložki v objemu ki sta oklepajih tukaj.
In znotraj teh je en vhod.
To je niz, kot smo jo imenovali, ki je samo zaporedje znakov,
kot besedo ali frazo, ali celote esej celo med dvojne narekovaje.
In to je tisto, kar se dogaja, da vplivajo na Obnašanje printf ker seveda
to je samo generično funkcijo tiskanja.
To se ne dogaja, da vedo, kaj natisniti, razen če ga povem.
In potem, nekateri minutiae.
Kaj smo rekli, je to čudno sekvenca simbolov je?
Ja.
>> PUBLIKA DRŽAVA: Nova linija.
>> DAVID J Malan: Nova linija.
Tako se je izkazalo, ne moreš zadeti, vnesete, ko pišete program.
Na splošno, prevajalnik bo dobil malo zmeden, kaj misliš.
Namesto tega boste morali dobesedno pravijo, daj mi novo linijo tukaj.
In tako / n je tisto, kar smo na splošno pokličite ubežni znak.
Torej n, za novo linijo.
In prevajalnik ve da ko vidi / n,
to naj bi dejansko inducira računalnik, navsezadnje, ali printf, v tem primeru,
natisniti dejansko Novo linije, kot so udarci, vnesite,
tipka na tipkovnici.
In nenazadnje, kaj smo rekli ta kos skladnje je za?
Kaj predstavlja?
Ja.
>> PUBLIKA DRŽAVA: [neslišno]
>> DAVID J Malan: To je samo Konec linije.
To je konec izjave.
In spoznali, da ne bomo jih dal povsod.
Mi zagotovo jih ne dajo na koncu vsake vrstice.
Na primer, obstaja nobena o prva linija, tam je nihče na progi
s, glavno, da je nihče po zavitih oklepajev,
vendar boste začeli videti in dobili seznanjeni s tem, kje je to zahteval.
In to je skoraj vedno po funkciji pokličite ali izjava, nekateri ukrepi
da ste dejansko pokazal.
>> In sedaj vedeli, še posebej, če med tistimi manj udoben,
To so vrste neumnih stvari da boste na koncu po naključju tolkel
tvoja glava proti steni nad.
Ker boste logično prepričani v nekem problemu
ste jih rešili za problem set in prekleto stvar samo
ne bo sestavil ali celo teči.
In tako pogosto, že na začetku, da se bo zato, ker si zgrešil oklepajev,
ali ste zamudili podpičje.
In tako preprosto biti pozoren te vrste stvari,
in poskusite ne priti do razočarane jim zaradi zelo hitro počne
postal star klobuk.
Ampak to je zelo enostavno priti uničen zgodaj, kot rezultat.
>> Torej sedaj, pa si oglejte, kako Ta linija je dejansko deluje
in potem poglej nekoliko bolj zapleten.
Torej imamo tukaj je sposobnost, da pripravi na tem zaslonu.
In kaj je domnevati, da to je moj računalnik zaslon,
ampak pišem, zdravo programa, in nisem izvajal, printf.
Nekdo drug je izvedel, printf.
Kdo bi rad, da trdijo, da bili izvedeni, printf?
Če bomo lahko?
Vse je v redu, kako ti je ime?
>> ŠTUDENTSKO 1: [? Kopal. ?]
>> DAVID J Malan: Copal, pridi gor.
Pridi gor.
V redu.
Torej imamo tukaj, nekaj ime oznake, saj bova malo igra to.
In poklicali vas bomo, printf.
In če želite, da pridejo tja, kaj sem pravkar sestavljen na zaslonu,
to je povsem preprosto, da mi je to.
>> Vse je v redu, tako, Pozdravljeni, moje ime je, printf, če bi rad dal, da na.
V redu.
In če lahko greste stojalo s zaslonu
kot da ste funkcija, ki prišel s tem računalniškim sistemom.
In vaš cilj v življenju je dejansko natisniti nekaj.
Ampak podobno kot program smo Pravkar imel na zaslonu, tukaj,
bomo morali dejansko vam nekaj vhod.
>> In tako, če moj vložek, tukaj je očitno je, da tisto, kar se prenese na printf,
dajmo nekako ga zasmehovali takole.
Bom dobesedno pisati o kos papirja, "Hello, world"
poševnica nazaj N. In da bo jasno, kaj Pravkar sem pripraviti na ta kos papirja,
izgleda takole.
Torej, ko sem teči ta program, in to rumena vrstica kode dobi izvršen,
to je kot da I, program Pozdravljeni, sem deliti nekaj vhod off funkcijo
da je nekdo drug napisal.
>> In če vas, s prstom, lahko dejansko s prstom,
pripravi na zaslonu karkoli je ste bili predani,
učinek, v končni fazi, je natančno vidijo, da se na zaslonu.
In Little primer kotiček tukaj.
In dobro, da ne bi smeli videti , novo linijo, na tej točki.
Bilo bi napačno za vas izrecno sestaviti novo vrstico.
Ampak, če bomo redno pisanje besed na zaslon, bi se na koncu pod njo.
>> Torej, najlepša hvala, ampak držijo tukaj okoli za samo en trenutek.
Zdaj potrebujemo eno drugo prostovoljec, če bi lahko,
da se dogaja, da morajo igrati vlogo of-- To je samo ljudi v orkestru
sedaj.
Kako about-- OK.
Točno tukaj.
Pridi gor.
Kako ti je ime?
>> STUDENT 2: [? Ivay. ?]
DAVID J Malan: Oprostite?
STUDENT 2: [? Ivay. ?]
DAVID J Malan: Ethan, pridi gor.
Ne?
Sem dobil to narobe, celo po tem, ko si rekel dvakrat?
Pridi gor.
Težko je slišati tu gor.
V REDU.
In žal mi je, kako ti je ime?
>> STUDENT 2: [? Ivay. ?]
>> [? DAVID J Malan: Ivay. ?] V REDU.
Za zdaj, če ne Um, ste GetString.
>> STUDENT 2: OK.
Cool.
DAVID J Malan: Torej, če bi želeli tukaj stati samo za trenutek,
dajmo si oglejte na nekoliko bolj zapleten program, ki
ima zdaj tri vrstice kode.
Torej imamo eno, navesti svoje ime s pomočjo printf; dva, poziv k GetString,
sledila uvrstitev v spremenljivka imenovan, niz s, ali imenovana s;
nato pa še poziv, printf, vendar tokrat z dvema vhodoma.
>> Torej smo že storili stanje vaše ime, ali bolje, smo jih
že naredili printf klic.
Torej bom napisal, svoje ime.
In tako, kaj bom pass, printf, vsak trenutek,
je preprosto, to.
Torej, če želite, da gredo naprej in pripraviti to na zaslonu, da je vaš prispevek danes.
V redu.
In pozabi niz, imamo zdaj naša lastna linija kodo tukaj.
Torej, GetString, moramo dejansko klic, GetString.
Torej je vaš cilj v življenju je le sprehod ven v orkestru, če bi lahko,
in dobili ime nekoga.
Ampak kaj je vam dajejo nekaj, da ga na.
Če želite, pojdite naprej in dobili niz,
dobil ime nekoga o tem kos papirja, če bi lahko.
>> V redu.
In bomo videli, v samo nekaj trenutkov, čigar ime smo dobili.
Medtem, kaj bom imajo pripravljen, je prazno kos
iz papirja, v katerem bom za shranjevanje karkoli vrednost je
je, da GetString se vrača k meni, I, pri čemer je niz spremenljivka imenuje, y.
V redu.
Torej, kaj imaš tukaj?
Nik.
V redu.
Torej imamo tu ime Nik je.
Torej, to je tisto, kar dobesedno je bil vrnjen
z mano, tako rekoč s GetString.
>> I, zdaj bom izvršiti levi strani
tega izraza, kjer sem preprosto prepišite, za današnje namene, Nik.
Torej, zdaj, imam spremenljivko pozval, s, shranjevanje ime Nik je.
Sem že prevzel printf, prejšnji argument.
Toda v našem tretji in zadnji vrstici kodo, sem dejansko moral ročno printf
nekaj malo different-- "Pozdravljeni,% s" poševnica nazaj n.
>> In tako se zadnja vrstica grem da send-- zadnje, kar me
dogaja zapisati zdaj, je to.
Torej dve vrstic kode, ali namesto zadnji vrstici kode,
poziva k dvema inputs-- ena je ta, in drugič, to.
Torej, če je naš printf funkcija lahko zdaj ti kot vhod,
Naj počistite zaslon za vas.
No, lahko greš dejansko naprej.
Bomo pusti gor, ker je na istem programu.
Morali bi videti, zdravo, Nik.
V redu.
Torej, to je bilo kar nekaj obroče za skok skozi, samo
pisati, navesti vaš ime, in zdravo, Nik.
Toda ta preprosta ideja pošiljanjem sporočil, vstopnega prehoda in izhodne sprejemanja,
je točno model, da bomo imeli za celo najbolj kompleksnih funkcij.
Torej, hvala ti za vaju.
Imamo lep stres kroglični tukaj za vas.
In hvala, da naši GetString in printf prostovoljci podobni.
Hvala.
V redu.
Hvala za vaju.
>> Tako smo se pogovarjali o doslej, predvsem o strune.
In se izkaže, da je C lahko dejansko razumeti nekaj različnih vrst podatkov.
Dejstvo je, vzemimo poglej v teh tukaj.
Torej, C, in veliko jezikov, razumeti stvari imenovane znakov.
Char je na splošno enojna bajt, ali osem bitov.
In to pomeni enojno značaj, kot črko A ali kapitala
črka A, ali malo črko A, ali klicaj,
ali kateri koli znakov, ki jih lahko vnesete na vaša tipkovnica, včasih celo več.
Prav tako se zgodi, da vidite, plava.
Plovec je, splošno je 32-bitna vrednost, ali štiri bajte
ker spet en bajt je osem bitov.
>> Torej Plovec je plavajoča vrednost točke, nekaj z decimalno vejico.
In res, da je kaj Film je govoril
o tem, kdaj sta govorila o plavajoče vrednosti kažejo nekateri določeno število bitov
ki se uporablja, da predstavlja realno število.
Ampak tam je tudi stvari, ki se imenuje podvoji.
Ti obstajajo v Java, če ste sprejeti APC,
in dvojna, kot že samo ime srečo pove, je dvakrat tako velika kot likvidna sredstva.
To je še vedno realno število, to samo ima več bitov
s katerim bi se še bolj natančno, ali da se shrani tudi večje število.
int je enostavno.
Pogovarjala sva se o tem zadnjem času.
To je samo število.
In to je običajno 32 bitov ali štiri bajte.
>> In tako, če imate, da vidimo zdaj, 32 bits-- in to smo storili v tednu 0,
kdaj tako briefly-- če imate 32 bitov, kar je največja
Številka, ki jo lahko predstavlja kot celo število?
Dati ali vzeti?
To je kot 4 milijarde, in to je samo, če smo
predstavlja samo pozitivne številke.
Če imate 32 bitov, in želite predstavljajo negativne številke, kot tudi,
vaše območje je v bistvu negativna 2 milijardi za pozitiven 2 milijardi.
Ampak na splošno, bomo začetek pri 0 gredo do 4 milijarde.
>> Nimate, da natančno vedo, ampak bomo lahko videli, v bistvu, če sem
odpirajo malo kalkulator, tukaj.
Jaz lahko naredim 2 na 32, in to je točno, kako velik,
koliko vrednosti lahko predstavljajo z 32 bitov.
In to je približno 4 milijarde.
Zato bomo še naprej videli to številko v nekaj različnih krajih.
Ampak, če boste potrebovali več številke, kot je,
Izkazalo se tam nekaj, kar se imenuje dolgo dolgo.
In dolgo dolgo je na splošno 64 bitov, ki
pomeni, da je red velikosti celo večji od notr.
>> Tako da ne morem niti izgovoriti največji Številka, ki jo lahko predstavlja,
vendar je opazno večji.
Zdaj kot prahi, zgodovinsko, če int je 32 bitov,
in dolgo časa je 64 bitov, kako velik je dolg, ni dolgo časa?
Mislili bi, da je to več kot int vendar morda manj dolga kot dolgo dolgo,
vendar je dejansko odvisna.
>> In tako se je izkazalo, eno od frustracij preveč,
s pisno kodo, na določenih sistemih, je, da niso vsi od teh podatkovnih tipov
imajo vnaprej določenih vrednosti.
Včasih je to veliko bitov.
Včasih je to, da je veliko bitov.
Torej si dejansko morali vedeti, včasih, kakšna strojna oprema
delate svojo programsko opremo.
K sreči, drugi jeziki in druge vrste podatkov, ki zdaj obstajajo,
vam omogočajo, da se bolj natančno.
No, bomo videli niz, in videli smo bool, preveč,
vendar se izkaže, tiste pridejo samo s knjižnico CS50.
Torej so tisti, ki niso zgrajene v C namesto Tisti,
pridejo v tej datoteki CS50.h, da bomo na koncu
olupimo nazaj plasti.
Ampak za zdaj, oni so samo dodatne vrste podatkov.
Bool je resničen ali neresničen, in Niz je zaporedje znakov,
kot besede.
Zdaj printf, smo videli, ima ograde,% s je ena.
In boste morda lahko, da se zdaj, sklepamo iz teh drugih primerov, kako
bi lahko imeli ogrado za različne vrste podatkov.
Na primer, si ugibati, če vas želeli natisniti eno samo char uporabo
printf, ograda je verjetno% c.
In če želite natisniti celo z ograde,% i.
% LLD je dolgo dolgo decimalno vrednost, vendar dolgo dolgo, tako da preslika na to.
In potem je% f za plavajoče Vrednost točke ali za dvojno,
tako da včasih oni ponovno uporabiti v različnih kontekstih.
Tako, da bomo videli in uporabili nekateri od tistih, v daljšem časovnem obdobju.
In printf in druge funkcije tudi zasilni izhod sekvence podporo drugim "
in včasih so to potrebno.
Torej poševnica nazaj n je nova linija.
Poševnica nazaj t, pa nikomur želijo, da bi zabodel?
PUBLIKA DRŽAVA: Tab.
DAVID J Malan: Tab.
Torej, če ste dejansko želijo natisniti zavihek, ne
fiksno število mest, ampak dejansko Zavihek znak, da ne hit vaš,
zanka, tipka na tipkovnici, na splošno, vi dejansko ne poševnica nazaj t.
Poševnica nazaj dvojni narekovaj, zakaj bi jaz kdaj želeli, da je?
Prav?
Zakaj ne morem samo vtipkajte dvojni narekovaj na moji tipkovnici?
OBČINSTVO DRŽAVE: Zato, ker v nasprotnem primeru je
dogaja, da mislim, da je konec o radi tiskalno [? besedilo. ?]
>> DAVID J Malan: Točno tako.
Ne pozabite, da z našimi printf primeri, ko smo
so bili kratki, da printf na vhodu, na levi strani tega vhodnega niza
in o pravici do tega vnosa pomlad, seveda, je bil dvojni narekovaj.
Če ima svoj vhod dvojna citat v sredini, da se
računalnik morda potencialno zmedeni, kot da,
Ali to dvojno citat sodijo v sredini?
Ali pripada z levega?
Ali pripada s pravega?
In tako, če želite, da bi bilo super Jasno, vam poševnica nazaj dvojno ponudbo,
tako da to je pobegnil, tako rekoč, in to ni združevali za nekaj drugega.
In tu je še nekaj drugih tukaj, poševnica nazaj r, enoposteljne citati, 0,
da bomo videli v daljšem časovnem obdobju, kot tudi.
In zdaj, kaj o funkcijah?
>> Torej ukrepov, ki jih lahko sprejmejo doslej v tem jeziku, C, dobro, smo videli,
printf, seveda, in vse od drugih na zaslonu,
tukaj, da bomo uporabili za samo Seveda je prvih nekaj tednov,
pridejo, ko knjižnico CS50.
In bi bilo veliko lažje, v C, bi dejansko dobili uporabnik vložek.
Izkazalo se je, da je v C, in odkrito v nekaj jezikih,
to je resnično bolečino v vratu storiti nekaj preprostega, kot je hitro uporabnika
za tipkovnico, na svojem vhodu.
In zato te naloge lažje.
>> In ima tudi napako preverjanje v celotnem,
tako da, če vas odpoklic v sredo, smo
Videl, poskusite znova, opozorilo, ko nisem sodelovala,
in sem tipkal besedo, namesto številke?
Naredili smo dvigovanje težkih zgodaj o zagotoviti uporabnik sodeluje.
Ampak to so samo trening kolesa, da bomo sčasoma,
in hitro, vzlet.
>> Torej, da povzamem, potem, kaj je na hitro pogledamo,
podobno kot smo to storili z nič, na nekateri kanonske konstrukti v C.
To pomeni, da, sortiranje o, je tornado turnejo,
samo zato, da imate sklic in da ste videli stvari na prvi.
Ampak potem bomo pogledali dejansko kodiranje uporabljati nekatere od teh gradnikov.
Toliko kot v nič, ko smo izjave všeč,
reči, ali počakati, v C pa imamo funkcije, kot tudi, kot printf.
>> Če želimo izraziti pogoj v C, je to podobno, v duhu,
s tem puzzle kos, ki Izgledalo je ta v nič.
Toda namesto, smo dobesedno samo napisati, če.
In potem, v oklepaju, postavimo pogoj,
če je ta pogoj, kar bomo klic, spet, boolean izraz.
In spet, to je nekako psevdokoda.
In v resnici je // je komentar.
To je le nekaj angleških besed k sebi.
Toda to je splošno Ustroj, če jih stanju.
Ampak bomo videli beton Primeri v samo trenutek.
>> Če želite imeti dvosmerni odcepu,
podobno kot smo to storili z našim prostovoljcem na Sreda, lahko imate, else if.
In če želite imeti tretja in končno stanje, ali pa privzeto stanje,
imate lahko le za drugega bloka, tam.
In podobno, z matematičnih izrazov, lahko, in jih skupaj.
In smo videli v sredo, da to ni ena ampersand,
to je dva, iz razlogov, na nižji ravni, da bomo sčasoma videli in se igral z.
Ali-ing stvari skupaj je 2 navpične črte.
Na tipkovnici ZDA, ta Na splošno je ključ
s tipko Shift zgoraj vaš tipko Enter ali Return ključ.
>> Potem je tu še te stvari, da bomo uporabili morda enkrat ali dvakrat.
So funkcionalno enakovreden kaj lahko narediš z an, če else if,
else if drugega, gradnjo, ampak oni imenujejo stikalo.
Izgledajo zelo različni, vendar bomo glej v nekaterih naših distribucije kode,
za prihodnji problem niz, najverjetneje, da je včasih samo lepša
način izražanja celoto kup pogojev,
brez veliko zavitimi oklepaji in veliko oklepaji in vdolbine.
Vendar pa nam ni več moči, kot smo že.
In zdaj zank.
In tale, bomo pogledali na malo počasneje.
Potem pa bomo začeli uporabljati teh, še posebej za tiste, ki že poznajo.
To je kanonično način, če neverjetno Skrivnosten način, da napišete zanka v C
>> Sedaj je zanka v Scratch precej preprosta.
Imate, večno, blok.
Imate, ponavljam, blok z samo številko morate vnesti.
In z, za zanko, lahko izvajati oba od teh idej,
vendar je malo bolj tehnično.
Ampak odkrito povedano, je tudi relativno enostavna.
Ko veš vrstni red operacije, ki jih dobesedno
so le, da bo vtič v vrednotah in povedal, računalnik, kaj storiti.
Torej, tukaj je primer.
To je zanka, da je precej preprosto, šteje od eno številko navzgor
skozi drugo.
In samo z pogledoval na to, tudi če imate
brez predhodne izkušnje z ta jezik, kakšna številka
se je verjetno začel meriti na?
OK, 0.
In jaz sem ugibati, da je zato, ker vas videli, da je int in i,
ki je spremenljiva.
To je inicializiran na 0.
>> In kasneje, izgleda smo mimo printf, vrednost.
In v resnici, sem se malo zatipkali tukaj.
Ampak, da enostavno določi.
Naj dodam, sem tukaj.
Zdaj imamo printf počutje opravili to ograde vrednost.
In kaj se dogaja, da računajo skozi?
OBČINSTVO: 50.
50.
49.
DAVID J Malan: 49.
Torej, 50, se na prvi pogled zdi prav.
Ampak, da se je izkazalo, se bo naš pogoj, da bomo sproti preverja.
In bomo enkrat ustaviti i ni več manj kot 50.
Torej, ta zanka, nasprotno, naj bi izvršiti, dokler i je manj kot 50.
Ampak takoj, ko postane 50, ali 51, ali še huje, da bi moral samodejno ustavi.
V redu.
>> Torej, kaj se dejansko dogaja tukaj?
Torej, to je vrstni red operacije za zanko.
Ena, imate ti inicializacijo.
To rumena poudarjeno chunk kode se najprej izvede,
in ima za posledico, da na Sreda, si verjetno predstavljate.
Ustvarja spremenljivka sem poklical in jo trgovin v tej spremenljivki vrednost 0.
Torej, jaz je 0 na tej točki v zgodbi.
>> Naslednja stvar, ki zgodi v tem konstrukta,
je, da postane pogoj preveriti.
Tako sem preveriti takoj, je i manj kot 50?
In seveda, je odgovor Za zdaj je gotovo, da.
Da, ker i je 0, in ki je gotovo manj kot 50.
Potem, kaj se zgodi, da ta vrstica kode dobi usmrčen.
In v resnici, če je multipla vrstic kode v teh zavitih oklepajev,
vsi se izvede ena za drugo.
>> In v smislu tukaj, je očitno, da natisnete
število i, ki se bo biti 0 in 1 in nato 2.
Ampak zakaj?
Zakaj se to poveča?
No, četrta stvar, ki se zgodi, da te skladnje
dobi izvrši, po podpičjem.
i ++ je okrajšava način rekel; vzemite vrednost I, in dodamo 1 do njega;
in potem naslednji čas okrog dodamo 1 nanjo; in naslednjič, ko okoli,
dodamo 1 do njega.
>> Torej, če smo vedno dogaja, kaj se bo zgodilo
naslednji pa je ne bom, da inicializacijo i nikoli več.
Če sem ohranil inicializacijo i 0, ta primer
Nikoli ne bi končala, ker i bi se zatakne na 0.
Toda kaj se bo zgodilo, je da se bo stanje preveri,
vrstica kode bodo dobili izvršen, i se poveča,
Stanje se bo preverjala, koda bo dobil usmrčen.
In to spet vodi kolesarjenje, in znova in znova,
Dokler nisem ++ inducira vrednost 50.
>> Pogoj pa pravi, je 50 manj kot 50?
Odgovor je seveda ne, in tako da je celotna koda ustavi izvršitve.
In če imate več kodo na ekranu spodaj navzdol, da je tisto, kar se bo zgodilo.
To izskoči teh zavitimi oklepaji in še natisniti več po tem.
>> Torej šala zdaj, od foxtrot, da boste morda zdaj razumete.
To je vedno smešno.
To je tako kot smehlja vrsta pronica,
in potem se zavedaš, da ne bi smeli se smejali humor, kot je ta.
Vendar pa obstaja nekaj takeaway tukaj, pedagoško, preveč.
Tako se izkaže, da sem manjkajoči košček sintakse,
ali Foxtrot je manjka kos skladnje tukaj.
Kaj manjka, da smo imeli V vsakem drugem primeru, torej daleč?
Return, je tam, tako to je nekaj drugega,
da se bomo vrnili na že dolgo.
Kaj manjka, čeprav?
Ja.
>> PUBLIKA članica: inicializacija [neslišno].
>> DAVID J Malan: OK.
Torej, ja.
Torej, dejansko, to is-- No, in je število inicializiran
tam zgoraj, ali bolje, prijaviti do zgoraj.
Torej je to še en način za to početje.
Vendar ne v eni liniji, da je veljavna, čeprav.
Kaj pa tukaj?
>> PUBLIKA DRŽAVA: Je to so zaviti oklepaji?
>> DAVID J Malan: Ja.
Torej zaviti oklepaji manjkajo.
Toda ta koda, mislim, da njihove kreditne, je pravzaprav, skladenjsko veljaven.
Izkazalo se je, ne boste Potrebujemo zavite oklepaje
Če imate le eno vrstico kode, ki si želeli izvršiti znotraj zanke.
Zdaj smo vedno, v razredu in v vse naše distribucije kode,
vključujejo zavite oklepaje vseeno, samo zaradi večje preglednosti.
Ampak zavedati, da je v učbenikih in spletne primeri,
lahko zelo dobro videti kodrasti naramnice manjka kdaj.
In to je v redu, če kaj ste so zamaknjeni in so namenjeni
je samo ena vrstica kode, in ne več vrstic kode, potencialno.
V redu.
Torej, povezano z vprašanjem nenatančnost, je vprašanje preliva,
v smislu, da, podobno, ne cela števila imajo omejitve, ki so jim
tako kot plavajočo vejico?
V svetu s plavajočo vejico vrednote, smo lahko tako natančno le,
nakar, včasih slabe stvari se lahko zgodi,
in naši programi so lahko vozičkom in napake.
Zdaj z števil, lahko naletijo na težave.
Sedaj celo nima decimalno vejico ali številke po njej.
To je samo naravno število, običajno.
Torej, kaj bi lahko šlo narobe pri notr?
Če sem z uporabo int k Fortuna kaj bi lahko šlo narobe?
Zdi se veliko preprostejše.
Ja.
>> PUBLIKA DRŽAVA: Če Število dobi [neslišno]
>> DAVID J Malan: Ja.
Kaj pa, če šteješ tako visoko, da vas ne more izraziti, da je res veliko število.
Prav?
Na neki točki, boste presega meje
za 32-bitne vrednosti ali 64-bitna vrednost.
Zdaj pa še enkrat, nisem prepričan, kako izgovoriti 64-bitna vrednost,
vendar vem, da s 32-bitno celo število, največja vrednost, ki jo lahko,
če je edina pozitivna vrednosti, je približno 4 milijarde.
Torej, če sem poskusil, da prešteje do 5 milijard EUR, kaj se bo zgodilo.
Ampak poglejmo, kaj v resnici lahko zgodi.
V svetu celo overflow, kjer ste, v smislu,
overflow zmogljivostjo, celo, kaj se lahko zgodi?
>> Torej, tukaj je binarno število, je Atavizam 0.
To je vse 1 je, in ograd tam, so pooblastila 2,
tako da je to binarno.
To so torej 8, 1 bitov na zaslonu.
In če se spomnimo ali hitro izračunate,
kakšno vrednost, ki je zastopana tukaj s temi osmimi 1 bitov?
255.
In tudi če niste bili povsem prepričani, iz matematike, lahko to storite ven.
Ali si lahko nekako razuma skozi njo,
počakajte malo, če sem kar predstavlja 8 bitno vrednost je,
in imam 256 možnih vrednosti, vendar je prvi od katerih je 0,
Jaz samo vem, da je Največja se bo 255,
in to je tisto, kar bi ta bila.
>> Tako, da sem poskušal dodati 1 do te vrednosti.
Kaj bi vi storili v razredu šola pri dodajanju 1, in
v resnici ne ustreza, ker morate nositi 1?
Kaj je ta številka bo postati, ko boste dodali 1?
To se dogaja, da postanejo 0.
Prav?
Ker če bi imeli bolj bits-- in bom poskusite, vrsta, tip je iz here--
če bi imeli več bitov, kar smo lahko tukaj storiti je dodati 1,
in potem sva to dobili.
Ops.
Radi bi imeli 1 bit vso pot tja.
>> Ampak, če je to končna vrednost, saj je samo 8 bitov,
in da je vnaprej določena z računalnikom,
da 1. je dejansko ni.
Samo nekako pade s pečine.
In tako, če boste dodali 1 do 255, kar vrednosti si očitno dobil?
0.
In tako številk po naključju, in morda nenamerno,
končajo ovije okoli takole.
Torej, kaj so lahko posledice tega?
No, tam je nekaj različnih stvari.
Torej ena, se je na koncu videti kot 0, nenamerno,
vendar lahko nekako videti, tudi v realnem svetu,
za boljše ali slabše, manifestacije te ideje o meji.
Na primer, kdo od vas, ki kdaj igral Lego Star Wars,
Ali kdo slučajno veste največje število kovancev
lahko zberete v Lego Star Wars?
Ugani, ki temelji na današnjih vodilnih vprašanj.
To je večje od 256 ali 255.
To je 4 milijarde.
Tako se izkaže, in tam je nekaj people--
nekaj googling potrdili zadnji night-- gotten 4 milijarde zlatih kovancev,
ali malenkosti, v Lego Star Wars.
Čeprav je očitno, da je način okrasti igro,
tam je bug ali funkcija, ki vam omogoča samo nabirali veliko in veliko točk.
Toda največji možni vrednost, po
na ta zaslon strel od nekoga I najti na spletu, je res, 4 milijarde.
>> Zdaj, zakaj je to?
To je natanko 4 milijarde, verjetno zato, ker je nekdo odločil, da
ki je pisal to igro, da lahko počnejo 4 milijarde,
nekaj, nekaj, nekaj, kot vrednosti sem dal gor
s kalkulatorjem prej, vendar to je samo malo čistilo za ljudi
torej največje število od coins-- ali žeblji,
kot pravijo them-- da vas lahko zbirajo, je 4 milijarde.
In tako, zakaj je to?
Kako je LEGO igra izvajanje števec
da je sledenja število kovancev imate?
Oni uporabljate kaj?
PUBLIKA DRŽAVA: Ustavi Računamo po 4 milijarde.
DAVID J Malan: Ustavi Računamo po 4 milijarde,
ki jo pomeni lahko sklepati, kot programer,
da oni verjetno uporabljate 32-bitno celo število.
Tako kot programer dobesedno le tipkajo, int, v svojem kodeksu,
in da je tip spremenljivke, ki oni uporabljate za shranjevanje kode nekoga.
Tako da je tudi drugi znaki tovrstnih omejitev.
>> Torej nisem igral to game-- in sem bil branju o zgodovini
potrditi kot much-- vendar v Izvirna različica civilizacije, kjer
si očitno interakcijo z vsako druga in lahko vojno ali mir,
Gandhi naj bi bil eden izmed najbolj mirne znaki, kot sem
razumem, v prvi različica civilizacije.
In dejansko na lestvici od 1 do 10, njegova agresivnost je bil samo 1.
Torej, kdaj tako milo agresiven, očitno.
>> Ampak na neki točki, lahko očitno namestite demokracije v geografiji.
In če ste namestili demokracije v svojo različico igre,
potem vaša raven agresivnosti gre dol.
To je dobra stvar.
Ljudje so bolj umirjeno očitno je, da v tej situaciji.
Ampak očitno je nekdo storil nimate, če jih pogoj
V prvotni različici kodeksa.
>> Torej je šel raven agresivnosti Gandhijevo od Pozitiven 1 minus 2, do negativnega 1,
vendar igra ne razumeti negativne številke.
Torej, kaj se je zgodilo Gandhijevo agresija šla raven od 1, 0, da negativna 1,
kar je imelo za posledico zavijanje okoli, da bi
najbolj agresiven značaj v igri, v vrednosti 255,
na lestvici od 1 do 10.
In od takrat, tam je bilo več inkarnacije tej igri,
in oni ga hrani kot nekakšna Easter Egg,
da Gandhi je očitno tako strašno agresiven.
Ampak to je bil rezultat prijateljskega zelo preprosta za programiranje napaka
V tej zgodnji različici igre.
>> Zdaj bolj zaskrbljujoče, več Pred kratkim se je Boeing 787
bila dokumentirana, kot imajo bug, ne pa vrsta naprave
si predvsem želijo, da imajo napako.
In simptomi, da bom prebral tu, iz članka na spletu,
je to, model 787 letalo da je bil neprekinjeno napajanje
za 248 dni, lahko izgubite vse izmenični tok, AC,
električne energije, zaradi kontrolne generatorske enote,
GCUs, hkrati gredo v okvari varnem načinu.
Torej je bilo to opozorilo izdano ko se je ta problem odkril.
Ta pogoj je posledica s števcem opremi
Notranji do GCUs, tako celo število ali spremenljivka,
da bo overflow po 248 dni stalne moči.
Boeing je v procesu razvoj nadgradnjo GCU programske opreme, ki
bodo odpravili nevarne razmere.
>> Toliko kot projektil scenarij, označen
so imeli neke vrste spremenljivke da je štetje in štetje,
in štetje, ampak postopoma prepolno meje svoje sposobnosti,
podobno naredil prekleto letalo imajo spremenljivo prelivno
Po dovolj časa za tek.
In tako pero-v-lice način delovnega okoli tega vprašanja
je resnično, reboot, vaše letalo vsak 247 dni, tako da postane spomin uničena
in spremenljivka gre nazaj na 0.
Toda razumelo, da je to zelo Velik inkarnacija programske opreme,
predvsem pa, kot smo slišali Apple operacijski sistemi gredo v avtomobile,
in self-vožnja avtomobila od Googla, in poljubno število inkarnacij programske opreme
v našem vsakdanjem življenju, televizorje in ure, in še več,
spoznali smo obdani s programsko opremo, vsi, ki ga je napisal nas ljudeh.
>> In kot bomo vsi kmalu odkrili, to je zelo enostavno in zelo značilna
narediti napake pri pisanju programske opreme.
In če jih ne ujamejo, nekaj slabih stvari se lahko zgodi.
Zdaj včasih nekateri smešne stvari se lahko zgodi,
ali vsaj včasih smo vem, da pričakujemo nekaj Zloća.
Torej 0 deljeno z 0, od razreda šola, je na splošno slaba stvar.
To je nedefinirana.
In se izkaže out-- in da vidimo, če moj mic lahko poberem to up--, da je Apple
je imel v zadnjem času nekaj zabave s tem.
Torej imam iPhone tukaj.
Grem se pogovoriti s Siri in jo vprašal da mi odgovor na 0 deljeno z 0.
Kaj je 0 deljeno z 0?
>> SIRI: Predstavljajte si, da imate 0 piškotki, in jih razdeli enakomerno
med 0 prijatelji.
Koliko piškotki ne vsakdo dobil?
Oglejte?
To nima nobenega smisla.
In Cookie Monster je žalostno da ne obstajajo piškotki.
In ste žalostno, da nimate prijateljev.
DAVID J Malan: To je nekako neprijeten.
Torej, to je tisto, kar je bilo tam samo rekel.
To je nedoločena, to ni opredeljen, in res, veliko programskih jezikov
ali, v resnici, bo prevajalniki odkriti, ko je v programu,
poskusite razdeliti 0 z 0.
Bolj zabavno kot to pa je, da je očitno, Cookie Monster
je na Twitterju v teh dneh.
In on je odgovoril, da je to, s tem, ki je absolutno čudovit.
Ampak kaj je na hitro pogledamo na Nekaj ​​drugih konstrukti,
in potem dal malo tega koda za uporabo, v dobrih načinov.
Tako se je izkazalo, poleg za zanke, tam je
nekaj, kar se imenuje while zanko, da izgleda drugače in se izvaja
malo differently-- in bomo sčasoma videli examples--
vendar v nekem smislu, je enostavnejša, ker je
ne omogočajo inicializacijo in posodobi znotraj meja zanke.
Lahko še vedno izvaja.
Zato lahko naredite točno iste stvari z while, kot z zanko,
ampak tvoja sintaksa, ultimately-- saj bomo na koncu
see-- se dogaja, da je drugačen.
Tam je tudi storila, medtem ko zanke, ki je pravzaprav malo drugačna,
v tem ker je za zanko in medtem ko zanke vedno
najprej preverite njihovo stanje, če ste prebrali ta stvar od vrha do dna,
to nekako izgleda, da se dogaja, da preveriti, da je stanje nazadnje zato, ker je
Resnično zadnja vrstica kode.
In res, da se dogaja, da je koristno V nekaterih programih, ki jih pišejo,
Če želite le slepo nekaj storiti in na koncu preverite stanje.
To ni nujno slaba stvar.
Če želimo spremenljivke, ne moremo storiti je v nekaj različnih načinov.
In smo videli v Foxtrot risanka, eden od načinov za to početje,
kjer se razglasi svojo spremenljivko, kot int števec podpičjem,
in potem later-- morda naslednjič linija, morda 10 vrstic later--
ste dejansko inicializacijo.
Torej ti 2 vrstic kode razglasi spremenljivko tipa int
in ga imenujemo števec, tako da daje me dovolj bitov, da imajo int.
In potem na koncu, postavlja vrednost 0 v spremenljivko.
Ureja tudi v A 0 in 1 vzorec, da vemo, od prejšnjega tedna,
predstavlja število poznamo kot 0.
Ali povedano, lahko to stori veliko bolj na kratko, samo všeč.
>> Zdaj smo tudi imeti Sposobnost za klic funkcije.
In v resnici, tukaj je 2 vrstica Program, ali njen odlomek,
ki nam omogoča, da dejansko napisati nekaj kode, ki
dobi niz iz user-- veliko kot naš prostovoljec trenutek ago--
shranjevanja rezultata v spremenljivka imenovan ime,
in then-- podobno kot z našim prostovoljcem z printf-- odtisi od teh vrednosti
s prehodom v dveh argumentov niz, ki mu sledi spremenljivke
imenuje, ime, sama.
Torej, kaj si oglejte, preden smo prišli nazaj v Mario tam,
na nekaj zdaj, primerov.
>> Grem, da gredo naprej in odprt do, recimo, funkcija-0.c.
In kot vedno, je ta koda na voljo na spletni strani predmeta je,
tako da lahko igrajo skupaj na domov in se poglej kasneje.
Ampak tukaj je program, v njem je Bistvo, iz vrstice 17 do 22.
Glavni program je, če Program je vedno tekoč, da začnete.
Ta program, očitno, se dogaja natisniti vaše ime, debelo črevo.
To se potem dogaja, da pokličete GetString, tako kot smo to storili z našimi prostovoljci.
In nato, to je zanimivo, to se dogaja, da pokličete PrintName.
Izkazalo se je, ves ta čas pa Zdi se, da je funkcija imenuje PrintName.
Da natisne ime nekoga.
Mi ni bilo treba uporabiti printf od minulih dni, tam je PrintName.
>> Ampak to je zavajajoče ker PrintName ne
prihajajo z C. Ljudje niso jo izmislil pred približno 40 ali 50 let,
Sem storil, namesto.
In v resnici, če sem se pomaknete dol nadaljnjega, obvestila
kako lahko pišem moja funkcije v C, da bomo sčasoma
pojasniti, zakaj smo vedno rekel, nična, v nekaj mestih,
ampak za danes, kaj je samo poglej imena.
>> Na liniji 24, če želite, da ustvarite svojo funkcijo,
ste dobesedno napisati ime funkcije.
Izbral sem PrintName.
V oklepaju, si Nato določite, katere vrste
vhodov in koliko ste želite to funkcijo sprejeti.
V tem primeru, želim, da bi 1 spremenljivka se imenuje, ime,
in to se dogaja, da so vrsta, niz, tako da se bo
da so nekateri zaporedje znakov.
In potem je to program-- podobno kot v nič,
imate lahko meri sestavljanko pieces-- se dogaja, da imajo to vedenje meri.
To se dogaja, da pokličete printf poteka v, zdravo, ograda,
in potem se dogaja, da priključite v kakršnikoli uporabnik poklical.
>> Torej, to je primer, kaj računalniški znanstvenik bi
klic abstrakcija ali funkcionalno razpada, ki so samo
fancy načine za saying--, je, če vam je všeč ta ideja na visoki ravni,
kot hočem funkcionalnost, ki natisne ime nekoga, popolnoma si
Lahko dobesedno pisati printf in nato prenese na argumente, ki jih želite,
in program bo deloval, saj ima od srede.
Vendar lahko začnete abstraktna stran pojem tiskanje imena.
Lahko bi to ime, kot PrintName, in to
je ta ideja plastenje od tedna 0.
>> Odslej sem in nimate vedeti ali pa zanima, kako se izvaja PrintName.
Ja uporablja printf, morda je ne, kdo ve, kaj se uporablja?
Koga briga?
Zdaj govorim tu, namesto da tu dol.
In res, kot bi dobili naši programi bolj napredne in zapletene,
bomo, da vzamete za samoumevne da obstajajo nižje ravni kosov sestavljanke.
Ker smo jih pisali ali kdo drug naredil, tako
da smo lahko nato zgradi na njih.
Oglejmo pogled na to varianta, eno od funkcij.
>> Torej, ta je malo bolj napreden, vendar se izkaže,
da se v knjižnici CS50 je, tam je samo funkcija GetInt.
Nismo ne mislim, pred leti, da izvajati funkcijo GetPositiveInt.
In to je malo nadležno, ker če vi pišete program čemer
želite, da bi dobili pozitiven celo število od uporabnika,
lahko popolnoma uporabite GetInt.
In lahko popolnoma preverite stanje in morda zanka
če je ta int večja od 0 in kričati na uporabnika
če on ali ona ne daje boste pozitivno število.
Ampak kaj je zgradil gradnik sebe a,
custom Scratch kos, če hočete.
Grem, da imajo program tu, da na koncu, sem
želijo imeti možnost, da pokličete GetPositiveInt, in želim, da bi
lahko natisnete karkoli to int je.
Ampak to odvzete stran zdaj.
To je bilo samo zaradi visoke stopnje Ime, ki pove, kaj počne,
ki je čudovito, ker je zelo intuitiven zdaj brati.
In če delam skrbi, kaj je pod njim napa, naj se pomaknite navzdol.
In to je malo zastrašujoče na eni strani, zlasti
Če je to vaš prvi program, vendar pa si poglej.
>> Jaz ne pravim, nična, ker se je izkazalo funkcije,
podobno kot GetString, lahko vrne vrednost k meni.
Nimajo samo še natisniti na zaslon,
lahko dejansko predajo me nekaj nazaj.
In ker je pred PrintName, Nisem potreboval ničesar nazaj.
Potrebna sem stranski učinek nekaj, kar prikazujejo na zaslonu,
vendar nisem potreboval človeka mi roko nekaj nazaj.
Tukaj, z GetPositiveInt, kot pri GetInt,
Rad bi se predali nekaj nazaj.
Tako da sem rekel ne, nična, na liniji 23, vendar int,
ki pravi, da je ta funkcija da pišem,
imenovano GetPositiveInt se dogaja, da Daj mi nazaj celo, ne nič,
ni nična.
>> Medtem pa se dogaja, da bi ne vhodi, tako da sem, vrsta, jo obrnil.
Jaz ne daje GetPositiveInt nobene vhod, hočem, da mi daj svojo proizvodnjo.
In potem kaj se bo zgodilo zdaj?
Torej, tukaj je, kako lahko razglasi spremenljivko.
To sem storil izven zanke, razlogov, da bomo na koncu videli,
vendar to samo daje mi 32 bitov imenovana, n,
in sem pre-določitev jih shranite celo število.
In tukaj je, da storijo, ko konstrukt, in to je razlog, zakaj je koristno.
Dobesedno to, pri čemer je n manjši od 1.
Torej, da vidimo, kaj se zgodi.
Sem izpisal, prosim daj mi pozitivno int.
Potem dobim int uporabo CS50 je delovanje in shranjeni v n.
>> In potem, kaj vrstica kode verjetno dobi izvrši naslednjo logično?
Kateri številka vrstice?
Ja, 31.
Saj ne bi vedeli, je to, dokler ste so povedali, ali nekako sam izpeljati,
ampak to je res.
Gre od zgoraj navzdol nato pa se ponavlja.
Torej, če sem tipkal v recimo, števila negativna 1, je n manj kot negativna 1?
Ja.
Ker negativna 1 je manjša od 1.
Torej, kaj bi se moralo zgoditi?
Jaz bom to naredil pri čemer je n manj kot 1,
tako da sem šel nazaj na linijo 28.
>> In vsaka time-- in kaj je teči this-- da funkcija 1, da ga pripravijo,
in zdaj dot poševnica funkcijo 1.
Če sem tip negativno 1, je dogaja, da kričiš name
dokler nisem sodelovala, ker vsak mojih vhodov je manj kot 1
in če je pa manj kot 1, Bom vztrajati početje to.
Če sem končno ji dati več kot 50 let, na srečo, pa pravi, hvala za 50.
Zakaj?
Ker takoj, ko je n najmanj 1, neham pridobivanje zaljubljen v to zanko,
in ta nova ključna beseda danes, donosnost, dobesedno počne.
Torej sem pravkar izvaja, je z Občutek, ekvivalent GetString,
kje sem ga odnesete nazaj Kdor me pomočjo, nekaj vrednosti.
To ni nujno, da je niz, to je int.
Torej preprost, hitro Primer, vendar bomo kmalu
videti nekaj bolj prefinjene različice miru.
Dejstvo je, vzemimo si na Številčna eden, ki se imenuje return.c.
In to je dejansko malo enostavnejše.
Torej, namen tega programa v life-- dajmo zbrati in jo vodijo,
zato poskrbite, donos, dot slash, return-- obvestilo
Program preprosto kocke vrednost 2.
To je precej neumno, da je težko koda, da ne bo nobenih vhodov,
vendar to ne dokaže drugega funkcija, ki sem jih sam napisal.
Torej, tukaj sem razglašena za spremenljivka, ki se imenuje x, tipa int,
enako številu 2, popolnoma samovoljno.
To je le nekaj puhasto tiskanje.
Piše x je sedaj tak in na primer, cubing dot dot dot.
In čarovnija je očitno v vrstici 21.
Kličem funkcijo imenovano, kocke, Jaz sem ga izroči list papirja
s številko 2, napisano na njej, in kakšno vrednost, matematično,
ne želim, da bi dobili od njega?
Samo kot preverjanje razumnosti?
8.
Prav?
Hočem 2 kubikov nazaj, od 2 do Moč 3, tako 8 nazaj.
>> Torej, če je kocka izvaja?
No, zaznali že izvaja tukaj.
In tako kot prej, je logično, čeprav sintaksa je verjetno
zelo nov, da mnogi izmed vas, Hočem to funkcijo
me vrniti polo Papir z notr na njej.
Torej imam int, na ime je poljubno,
vendar prikladno imenujemo kocka.
Vhodni nanjo, je n tip celo število, tako, da je
kako sem lahko preide v številu 2 na listu papirja.
In potem se izkaže, podpira C math, tako da ne boste imeli x je za čas,
samo uporabite zvezdico za množenje.
In ta vrne krat n krat n N, pri čemer je le vrednost kubikov.
>> Torej, kam se bomo z vsem tem?
To je vsekakor tornado turnejo, prepričani,
da v super odsekov in problem nastaviti 1,
se boste šli skozi vse to toliko bolj.
In problem je določil 1., bomo prehod iz grafičnega sveta Scratch
za nekaj več ukazno vrstico v C. Ampak bomo navdih
od te tukaj igri iz minulih, označen
uporabo C in standardni izdaji p set boste izvajati Mario piramido.
In v izdaji hacker od p set, če se tako odločijo, da izvolijo,
boste izvajati malo bolj izpodbijanje piramido z dvema vrhovoma.
Boste tudi izvajati algoritem, požrešen algoritem.
Izkazalo se je, tam je nekatera zanimiva logika
zadaj procesu teče postajo blagajna je
in dejansko predajo nekdo nazaj sprememba.
Obstaja algoritem, ki je dokaj enostavna, da boste morda celo
dojeti intuitivno, ko ste prvič prebrali it-- zavedajoč se, da je tisto, kar sem si vedno
storiti kadarkoli sem dati nekomu nekaj Denar back--, ki vam omogoča, da vedno
zmanjšanje števila papirnati bankovci ali kovinski kovanci
da ste predali nazaj uporabniku.
In to, seveda, je prepričljiv ker če greš v CVS ali malenkosti,
ne želite, da se izroči cel kup tistih,
ali pa cel kup penijev.
Hočeš, najmanj kovanci, verjetno je to mogoče.
>> Končno, boste mogoče izpodbijati tudi Praćakati v svetu vode
in dejansko dobili zahvalo za preslikavo med stopnjami pretoka,
izmed všeč, vodo v tuš, Samo koliko vode uporabimo.
In aluzija njem, bo ta posnetek tod
ki bomo na koncu na za le 60 sekund, da
naslika sliko nizko-flow tušev.
>> [VIDEO PREDVAJANJE]
-V redu.
Imam vse, kar je tukaj.
Imam Cyclone serije F, Hydra, Jetflow, Stockholm
Supersteam, kar hočete.
>> In kaj mi priporočate?
>> -Kaj iščeš?
>> Power človek.
Moč.
-Kot Silkwood.
-To Je za sevanje.
-Tako je.
-Zdaj, Kaj je to?
-To Je Commando 450.
Jaz ne prodajajo, da je eden.
>> Ampak to je tisto, kar želimo.
To je komandos 450.
>> -Ne Verjemi.
To se uporablja samo v cirkusu.
To je za slone.
>> -I'll Plačati ničesar.
>> Kaj pa Jerry?
>> -On Ni zmogel, da je.
On je nežen.
Oh ja.
[END PREDVAJANJE]
DAVID J Malan: V redu.
To je, če za CS50.
Se vidimo naslednji teden.
>> SPEAKER 1: [? Scully?] [? Ian,?] kolikor je to outro projekta,
kaj ste vi prišli do?
>> SPEAKER 2: No, smo zaradi je različne misli,
in menimo, da je najboljši način to--
>> SPEAKER 3: maj jaz?
>> SPEAKER 2: Ja.
Z vsemi sredstvi, pravzaprav.
>> SPEAKER 3: Torej, jaz mislim, lahko povzamemo našo idejo
za outros z enim word-- nič.
>> DAVID J Malan: Nič?
SPEAKER 3: Nič.
DAVID J Malan: Kaj to pomeni?
SPEAKER 3: outros prišlo nič.
SPEAKER 2: No, mislim, v filozofiji, Mislim, nič ni vedno nekaj.
SPEAKER 1: Torej what's-- kaj je predpostavka?
SPEAKER 3: Torej, to je kot življenje.
V REDU.
Kaj si danes počel?
>> DAVID J Malan: Vstal sem imel zajtrk, in prišel na delo.
>> SPEAKER 3: To je outro.
SPEAKER 2: Ampak, mislim, ne bi smeli nekaj, kar se zgodi, da mu je na the--
SPEAKER 3: Ne, ne, ne, ne.
Nič se ne zgodi.
>> SPEAKER 1: Torej, zakaj smo gledal?
>> SPEAKER 3: Ker to je outro za CS50.
>> DAVID J Malan: Ne še.