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