>> [Muziciranja]
DAVID J. Malan: U redu.
To je CS50, i to je početak tjedan-dva.
Stoga započnimo danas s bug.
Bug, naravno, pogreška u programu,
a vi ćete dobiti vrlo upoznati s ovim konceptom
Ako ste nikada nije programiran prije. pset0 a sada pset1.
Ali razmotrimo nešto Malo jednostavan na prvi.
Ovaj program ovdje da sam Bacio zajedno unaprijed,
a ja tvrdim da to treba ispisati 10 zvjezdica na zaslonu pomoću printf,
ali očito je lud na neki način.
>> S obzirom da je specifikacija koja to bi trebalo ispisati 10 zvijezda,
, ali to ne čini, što bi vi tvrdite je bug?
Da?
Dakle, to je isključiti jednu pogrešku, a što ti misliš?
U redu.
Izvrsno.
Tako smo navedeno početi vrijednost nula za i,
a mi smo naveli n vrijednost od 10, ali smo se koristi manje od ili jednako.
A razlog da je ovo dvoje likovi i ne samo jedan simbol,
kao u matematici knjizi, je u tome što ne morate
način izražavanja jedan ekvivalent znak.
>> Dakle, to znači da je manje od, ali ako počnete računajući na nulu,
ali vi brojati sve kroz te jednak 10,
ti si, naravno, ide na Točka 11 stvari u ukupno.
I tako ti ćeš tiskati 11 zvijezde.
Dakle, ono što bi moglo biti fix za to?
Da?
>> Tako je samo prilagoditi manje od ili jednaka samo biti manje od,
i tu je, tvrdim, možda Drugo rješenje, previše.
Što bi drugo što učiniti?
Da?
>> Dakle, početi ga je ravno do 1, a vratiti manje od ili jednako.
I iskreno bih tvrditi da, za prosječnog čovjeka,
ovo je vjerojatno izravnija.
Počnite računajući na dan 1. i brojati do 10.
U suštini to što misliš.
>> No, stvarnost je u programiranje, kao što smo vidjeli,
računalni znanstvenici i programeri uglavnom ne počnu brojati od nule.
I to je u redu kada ste naviknuti na to.
Vaše stanje će se općenito biti nešto poput manje od.
Tako jednostavno i logično pogreške koje smo danas mogli
popraviti i na kraju kompilirati to i dobiti samo 10.
>> Pa kako o tom bug ovdje?
Evo, opet, tvrdim da imam Cilj tiskanje 10 stars--
jedan po retku ovaj put, ali to ipak nije.
Prije predlažemo što Fix je, što to
ispisati vizualno da sam sastaviti i pokrenuti ovaj program ti misliš?
Da?
>> Star.
Dakle, sve zvijezde na Ista crta je ono što sam čuo,
a onda nova linija karakter.
Tako ćemo pokušati.
Tako bi buggy-1, ući, i vidim Zveket naredbu
da smo razgovarali o posljednjem trenutku.
./buggy-1, i doista ne vidim svih 10 zvijezda na istoj liniji, iako tvrdim
u mojoj specifikaciji samo komentar na vrhu kod koje sam namjeravao učiniti jedan po
linije.
No, to izgleda u pravu.
>> Sada linija 15 izgleda kao da sam ispis zvijezdu, a zatim crta 16
izgleda da sam ispis Nova linija lik,
i oni su oba razvedena tako Ja sam unutar petlje jasno.
Dakle, ne bi li se radi zvijezdu, nova linije, zvijezda, nova linija, zvijezda, nova linija?
Da?
>> Da, za razliku od jezika kao Python, ako ste upoznati,
udubljenje ne obzira na računalo.
To je samo važno da se na čovjeka.
Dakle, dok je ovdje sam izumio linije 15 i 16-- da izgleda lijepo,
ali računalo ne zanima.
Računalo je stalo zapravo imaju vitičastim zagradama
oko tih linija koda.
>> Tako da je clear-- baš kao u Scratch-- da te dvije linije koda
treba izvršiti.
Kao jedan od onih žute Scratch slagalice komada opet i opet i opet.
>> Pa sad, ako sam ponovno pokrenuti taj program-- ./buggy-2-- Hm.
Imam pogrešku sada.
Što sam zaboraviti učiniti?
Da, pa nisam ga sastaviti.
Tako bi buggy-2.
Nema takve datoteke, jer nisam zapravo sastaviti drugu verziju.
Tako sada interesantno neprijavljeni variable-- ne 2.
Radimo 1.
Make-buggy 1-- ./buggy-1-- i sada svaka od njih je na istoj liniji.
>> Sada postoji iznimka ovo trebalo tvrdnja rudnika
koja vam je potrebna ova vitičastim zagradama.
Kad je to zapravo OK-- ako ste Primijetio u sekciji ili textbooks--
izostaviti kovrčavom aparatić?
Da?
>> Točno.
Kada postoji samo jedan linija koda koji vas
žele biti povezane s petlje kao u našem prvom primjeru.
To je posve legitimno izostaviti vitičastim zagradama
baš kao svojevrsno pogodnost iz prevodilac za vas.
Da?
Dobro pitanje.
Bi li se u obzir pogreška stil?
Mi bi promote-- kao u CS50 stil vodič, URL za koje
je u pset1-- koja uvijek koristiti vitičastim zagradama.
Dakako, ako ste novi u programiranju.
Realnost je da nismo će ti zabraniti
od činjenja tih pogodnosti.
Ali, ako ste samo dobivanje u zamahu stvari,
Apsolutno baš uvijek koristiti kovrčava aparatić dok ne dobijete dokučiti ga.
Dobro pitanje.
>> U redu.
Pa da onda je bug.
Barem u nečemu prilično jednostavan.
Pa ipak, možda mislite da je ovo je prilično rudimentarno, zar ne?
To je neka vrsta prvog tjedna gledanja na jeziku
kao, vidjeti svoje greške u njemu.
No stvarnost to su zapravo predstavnik
nekih prilično zastrašujućih problema koje se mogu pojaviti u stvarnom svijetu.
>> Dakle, neki od vas možda podsjetiti ako slijedite tech vijesti,
ili možda čak uhvaćen Vjetar toga u veljači
ove protekle godine da je Apple imao napravili malo pogrešku u oba iOS,
operativni sustav na njihove telefone, ali i
Mac OS, operativni sustav na svojim osobnim računalima i laptopima.
A ti vidio takve naslove kao ovaj.
A nakon toga, Apple obećao da će popraviti ovaj bug,
i vrlo brzo je to popraviti u iOS, ali onda u konačnici to fiksna u Mac OS
te.
>> Sada nitko od tih naslova na miru stvarno otkriti što je temeljni problem bio,
ali bug u konačnici bila smanjena na bug u SSL, Secure Sockets Layer.
I ne duljimo, To je softver
da su naši preglednici i ostale softver koji se koristi za napraviti što?
>> Ako sam rekao da je SSL uključen, kad god vas
posjetite URL koji počinje s https, što je onda moglo biti povezano s SSL?
Šifriranje.
Dakle, mi ćemo govoriti o to u narednim danima.
Šifriranje, umjetnost remećenje informacije.
>> Ali ne duljimo, Apple negdje prije je pogriješio
u njihovoj implementaciji SSL, na softver koji u konačnici provodi
URL-ova kao što su HTTPS ili max veze tamo.
Rezultat kojih je da je vaš veza bi potencijalno
biti prisluškivanja.
A tvoje veze bile ne nužno kodiran
ako je neki negativac između vi i web odredište koje
znao iskoristiti to.
>> Sada Apple je u konačnici objavljena popraviti za to konačno,
i opis njihovog popravka je bio ovaj.
Sigurna promet nije uspio potvrditi autentičnost veze.
Pitanje se obratili vraćanje nestalih korake valjanosti.
>> Dakle, to je vrlo ruka valovita objašnjenje za samo reći da smo zeznuli.
Tu je doslovno samo jednom linija koda koji je bio lud
u njihovoj implementaciji SSL, i Ako idete online i potraga za to
zapravo možete pronaći izvorni izvorni kod.
Na primjer, ovo je slika od Samo dio prilično veliku datoteku,
a to je funkcija očito naziva SSL potvrdili znak servera ključnu razmjenu.
I to traje hrpa argumenti i ulaza.
I nećemo se fokusirati previše na minutia tamo,
ali ako se usredotočite na koda unutar te najviši function-- Idemo
uvećanje na to.
Vi možda već sumnjate ono grešci
biti čak i ako nemate pojma u konačnici ono što gledate.
Postoji vrsta anomalija ovdje, što je ono?
>> Da, ja stvarno ne sviđa Izgled dva goto ne uspije.
Iskreno, ja stvarno ne znam što goto ne znači, ali ima dva od njih
natrag na leđa.
To je nekako me trlja intelektualno pogrešan način,
i doista, ako smo povećali samo one linije, to je C.
>> Dakle, puno Appleov koda je sama napisan u C,
a to očito stvarno equivalent--
Ne bi tu lijepu razvedenosti verzija, ali ako prepoznajete činjenicu
da nema vitičastim zagradama, što Apple je stvarno bio napisao kod koji izgleda
kao što je ovaj.
Tako sam se povećali, a ja samo fiksne uvlačenje u smislu
da, ako nema vitičastim zagradama, to Drugi goto uspjeti da je u žuto
će se izvršiti bez obzira na sve.
To nije povezano s ako je uvjet iznad njega.
>> Pa čak i opet, ne ako to sasvim razumijem što bi to moglo eventualno
se radi, znam da je svaki od tih conditions-- svaki od ovih redaka
je vrlo važan korak u proces provjere
Ako vaši podaci zapravo šifrirana.
Dakle, preskakanje jedan od tih koraka, nije najbolja ideja.
>> Ali zato imamo ovo Drugi goto uspjeti u žuto,
i jer nakon što smo svojevrsni estetski
ga premjestiti na lijevo, gdje ga logično je u ovom trenutku, što
to znači za liniju koda ispod tog drugog goto
ne bi mislite?
To uvijek će biti preskočen.
Dakle gotos uglavnom ne odobravaju iz razloga što stvarno neće ići u,
i doista u CS50 smo skloni ne učiti ovu izjavu Goto,
ali možete misliti goto uspjeti kao smisao go skoka
na nekom drugom dijelu koda.
>> Drugim riječima preskočiti ova zadnja linija uopce,
i tako rezultat ovaj glupi jednostavna pogreška koja je samo
rezultat vjerojatno netko kopiranje i lijepljenje jedan previše
mnogo puta je bio da se cijeli sigurnost iOS i Mac OS
bio ranjiv na presretanja loši dečki za neko vrijeme.
Dok Apple napokon fiksne ovo.
>> Sada, ako neki od vas su zapravo trčanje stare verzije iOS ili Mac OS,
možete ići na gotofail.com koji je web stranica koja je netko postavio
na osnovi utvrditi programatski
Ako je vaše računalo je još uvijek ranjiv.
I iskreno, ako je, to je vjerojatno dobra ideja
ažurirati svoj telefon ili Mac u ovom trenutku.
No, tu, samo dokaz koliko uvažavanje tih nižoj razini
Pojedinosti i pošteno jednostavne ideje mogu stvarno
prevesti u odlukama i problemi koji
affected-- u ovom case-- milijuni ljudi.
>> Sada riječ o administraciji.
Sekcija će početi ovaj dolazak nedjelju.
Vi ćete primiti e-poštu od strane vikenda O dijelu, u kojem trenutku
Proces resekcija počet će, ako ste
shvatio sada imate neke nove sukobe.
Dakle, to se događa svake godine, a mi će primiti u danima koji dolaze.
>> Ured hours-- učiniti zadržati očiju na tom planu ovdje.
Mijenja malo ovaj tjedan, Posebno vrijeme početka
i položaj, tako da se konzultirati da prije odlaska na radno vrijeme
bilo koji od sljedeća četiri dana.
A sada riječ o procjeni, Posebno kao što zaronite u problemu
postavlja jedno i izvan nje.
>> Dakle, po specifikaciji, To su uglavnom
osi duž koje možemo procijeniti svoj rad.
Opseg se odnosi na ono što mjeri svoj kod implementira
značajke potrebna naš specifikaciji.
Drugim riječima, koliko komad set si odgristi.
Jeste li učinili trećinu od toga, pola od toga, 100% od toga.
Čak i ako to nije točno, koliko si ti pokušati?
Dakle, koji bilježi razinu truda i iznosa
na koji si odgrizao Problem je postavljen.
>> Correctness-- ovaj jedan, da koliko je vaš broj
U skladu s našim specifikacije i bez bugova.
Tako se to radi ispravno?
Ako smo dali neki doprinos, zar ne daju nam izlaz koji očekujemo?
Design-- sada je to prvi od one osobito kvalitativne,
ili one koje zahtijevaju ljudsku prosudbu.
I doista, to je razlog zašto imamo osoblje tolikih nastavnih bližnjima i naravno
pomoćnici.
U kojoj mjeri je vaše kod napisan dobro?
>> I opet je to vrlo kvalitativna procjena
koji će raditi s vama na dvosmjerno u tjednima koji dolaze.
Tako da kada se ne samo brojčani rezultat, ali i
pismeni rezultat, ili upisali povratne informacije, ili pisanu povratnu informaciju u engleskim riječima.
To je ono što ćemo iskoristiti da vas odveze ka zapravo pisanje bolje kod.
A u predavanju i dijelu, mi ćemo pokušati ukazati greda-- onoliko često koliko smo can--
ono što čini program ne samo točne i funkcionalno dobro,
ali i dobro osmišljen.
Najučinkovitiji bi to moglo biti, ili čak i najljepše što može biti.
>> Što nas dovodi do stilu.
Stil je u konačnici estetske prosudbe.
Jeste li izabrati dobro imena za svoje varijable?
Jeste li razvedena svoj kod ispravno?
Da li to izgleda dobro, i stoga, da je to lako za drugo ljudsko biće
čitati odgovarajućeg njegove ispravnosti.
>> Sada uglavnom po nastavnom planu, možemo zabiti ove stvari o pet točaka ljestvici.
I neka mi čekić home točka koji je tri je doista dobra.
Vrlo brzo napraviti ljudi početi raditi aritmetiku.
Kad su dobili tri od pet na korektnosti za neke pset
i misle osuditi, ja ću 60% koji je u biti D ili E.
>> To nije način na koji smo razmišljaju o tim brojevima.
Tri je doista dobra, i što smo općenito očekuju na početku
pojma je da ako ste uzimajući hrpa three's-- možda par
sajmova, par fours-- ili par dvojke, par fours--
to je dobro mjesto za početak.
I tako dok smo vidjeli naviše putanja s vremenom,
ti si u posebno dobrom mjestu.
>> Formula možemo koristiti za težina stvari bitno
to po nastavnom planu, što samo znači da smo mi
daju više težine na ispravnost.
Zato što je to vrlo često ispravnost koji oduzima najviše vremena.
Vjeruj mi sada.
Vi ćete find-- najmanje u jednom pset-- da vas
troše 90% svog vremena radi na 10% problema.
>> I sve na neki način radi osim za jednu ili dvije bugova,
a to su greške koje držati vas kasno u noć.
Oni su ti koji vrsta te pobjeći.
No, nakon što spava na njemu, ili pohađaju radno vrijeme
ili postavljanje pitanja na internetu, je kad dođete do tog cilja 100%,
i to je razlog zašto smo težine najviše ispravnosti.
Dizajn malo manje, i stil malo manje od toga.
No, imajte na mind-- stilu je možda najlakše
od tih odgristi kao i po stilu vodiča.
>> A sada, ozbiljniji Napomena o akademskom poštenju.
CS50 ima nesretni razlika kao najveći proizvođač Ad odbora
slučajevi gotovo svake godine kroz povijest.
To nije zato što studenti varaju u CS50 bilo više od bilo koje druge klase,
nego zato što po prirodi posla, Činjenica da je elektronska,
Činjenica da smo u potrazi za njega, a Činjenica da su računalni znanstvenici,
Mogu reći da smo, nažalost, vrlo dobri u otkrivanju ga.
>> Dakle, što to znači realno?
Tako da, po nastavnom planu, Filozofija Tečaj je
Stvarno ne svode se razumni.
Tu je to linija između radi nečijeg rada na svoju ruku
i uzimajući malo razumno pomoć od prijatelja,
i iskreno raditi taj posao za svoje Prijatelj, ili njega ili nju svoj kod slanja
tako da on ili ona može jednostavno uzeti ili posuditi ga pravo.
I to prelazi granicu da smo izvučeni u klasi.
>> Vidi, plan i program u konačnici za linije
da crtamo kao razumna i nerazumno ponašanje,
ali to stvarno ne kuhati do suštine
svog rada trebaju biti svoj na kraju.
Sada s tim, rekao je, Tu je heuristička.
Jer kao što ste mogli imagine-- od radnog vremena i vizualnim
a video mi smo pokazalo tako far-- CS50
je doista značilo da se kao zajednički i kao kooperativni i kao društveni
moguće.
Kao međusobno surađuje, kao što je strog.
>> No, s tim je rekao, heuristička, kao što ćete vidjeti u programu,
je da kada vi imate neki problem.
Imate neki bug u kodu koji vas ne može riješiti, razumno je za vas
pokazati svoj kod na nekoga drugoga.
Prijatelj čak u razredu, prijatelj sjedi pored vas u uredu sati,
ili član osoblja.
Ali oni ne mogu pokazati svoj kod za vas.
>> Drugim riječima, odgovoriti na vaše question--
Trebam help-- ne Oh, ovdje je moj broj.
Bacite pogled na ovo i zaključiti iz toga što hoćete.
Sada, naravno, tu je način jasno za igru
ovaj sustav u kojem ću vam pokazati moj broj prije nego što je pitanje.
Možete pokazati mi moju svoj kod Prije nego što je pitanje.
Ali opet vidjeti nastavni plan i program za sitnije detalje gdje je linija.
>> Upravo sada slikati sliku i podijeliti kao transparentno što je više moguće
gdje smo u posljednjih nekoliko godina, ovo je broj slučajeva oglasa odbora
da je CS50 je imao više U posljednjih sedam godina.
Sa 14 slučajeva ova najnovija jesen.
Što se tiče studenata koji su uključeni, bilo je 20-ak neki studenti
ove protekle jeseni.
Tu je bio vrhunac 33 studenti prije nekoliko godina.
Mnogi od njih su, nažalost, više nije ovdje na kampusu.
>> Studenti koji su uključeni u postotku Klasa je povijesno u rasponu od 0%
na 5,3%, što je samo reći to je godišnje izazov.
I prema tom cilju, što želimo učiniti je prenijeti jednu
da smo dd-- samo FYI-- usporediti na pravičnost za one studente koji
su slijedeći liniju u skladu s tim.
Mi radimo usporediti sve trenutne podnesci protiv svih dosadašnjih misija
od posljednjih mnogo godina.
>> Znamo također kako na Google okolo i pronaći kod spremišta
online, forumima online, online posao sučelja.
Ako student može ga naći, možemo sigurno Smatraju da koliko god smo sa žaljenjem učiniti.
Dakle, ono što ćete vidjeti u programu iako je to žaljenje klauzula.
Ja mogu sigurno cijenim, i svi smo se
osoblja nakon što je učinio tijek kao to, ili ovo samo po sebi tijekom vremena,
Sigurno znate kako je to kad život dobiva na putu kada imate
Neki kasno navečer deadline-- ne samo u ovoj klasi,
ali another-- kada ste potpuno iscrpljen, pod stresom,
ima prekomjeran broj drugih stvari koje treba učiniti.
Vi ćete napraviti u nekom trenutku u Život svakako loša, možda kasno
noć odluka.
>> Dakle, po nastavnom planu, ne postoji ta točka,
tako da ako u roku od 72 sata od donošenja Neki loša odluka, imate do njega
i doprijeti do mene i jedan od šefova tečaja je
, a mi ćemo imati razgovor.
Mi ćemo nositi stvari interno u nadi
o to postaje više Nastava trenutak ili život lekciju,
i nije nešto s osobito drastične posljedice
kao što ste mogli vidjeti na ovim kartama ovdje.
>> Dakle, to je vrlo ozbiljan ton.
Zadržimo se za samo nekoliko sekundi razbiti napetost.
>> [Muziciranja]
>> DAVID J. Malan: U redu, pa kako je to bilo za Segue?
Za današnje osnovne teme.
Prvi od kojih je apstrakcija.
Još jedan od kojih će biti prikaz podataka, koji iskreno
je stvarno suha način da se kaže kako možemo ići oko rješavanja problema i razmišljanja
O rješavanju problema?
Pa vidjeli ste u nule, a vi ste Vidio je možda već u pset1 s C
da ne samo da možete koristiti funkcije, kao što su printf,
da drugi ljudi u posljednjih godina pisao za vas.
Također možete napisati svoje funkcije.
>> A čak i ako ne bi mogli imati to učinio u C, a iskreno u pset1
ti stvarno ne trebaju napisati svoje vlastitu funkciju, jer je problem--
a možda i zastrašujuće u Prvi glance-- vidjet ćete
može u konačnici biti riješen s nije sve što je mnogo linija koda.
Ali s tim, rekao je, u smislu pisanja svoju funkciju,
shvatili da je C ne daju li ta sposobnost.
>> Ja ću otići u današnjem izvornog koda, koji je dostupan već na internetu,
i ja ću ići naprijed i otvoriti se program pod nazivom funkcija 0.C,
au funkciji nula vidjet ćemo nekoliko stvari.
U prvim linijama 18 kroz 23 mi je glavna funkcija.
I sad kad smo počeli čitati kod koji mi ne pišete u letu,
ali umjesto toga sam napisao unaprijed ili da ste u problemu postaviti
moglo primiti što napisano unaprijed.
Dobar način za početak čitajući tuđe kôd
je tražiti glavne funkcije.
Shvatiti gdje da je ulazak Stvar je u tome da se izvodi program,
i zatim ga slijede logično od tamo.
>> Dakle, ovaj programski očito ispisuje Vaše ime slijede dvotočka.
Mi smo tada koristiti GetString iz CS50 knjižnici
dobiti niz, ili riječ ili frazu od korisnika na tipkovnici.
A tu je i ovo stvar ovdje-- PrintName.
>> Sada PrintName nije funkcija koja dolazi s C.
To nije u standardnom io.h.
To nije u CS50.h.
To je već u istoj datoteci.
Uočite da sam se pomaknite prema dolje A bit-- linije 25 do 27--
to je samo lijepa način komentiranja Vaš kod pomoću zvijezde i kose crte.
To je multi-line komentirati, a to je samo
moj opis u plavetnilu ono što je ova funkcija radi.
>> Budući da u redovima 28. do 31., Ja sam napisao super jednostavnu funkciju
čije se ime PrintName.
To traje koliko argumenti bi ti rekao?
Dakle, jedan argument-- jer postoji jedan Argument navedene unutar zagrada.
Tip koji je Gudački.
Koji je reći PrintName je poput ove crne kutije
ili funkcija koja traje kao ulazni niz.
>> I ime tog String povoljno će biti ime.
Ne S, ne N, ali ime.
Dakle, što to PrintName učiniti?
Lijepo je jednostavna.
Baš kao jedan redak koda za printf, ali očito ga
ispisuje "Hello", tako i tako.
Gdje je taj i taj dolazi iz argumenta.
>> Sada to nije velika inovacija ovdje.
Stvarno, ja sam uzeo program koji bi mogao napisane su s jedne linije koda
stavljajući to ovdje, i to promijenio u nešto
koji uključuje neke od šest ili sedam ili tako linija koda skroz ovdje dolje.
>> Ali to je prakticiranje Princip poznat kao apstrakcije.
Vrsta inkapsulacijskim unutar nova funkcija koja ima ime, i bolje
ali to ime je doslovno kaže ono što čini.
Mislim printf-- to nije Posebno opisno.
Ako želim stvoriti zagonetka komad, ili ako sam
želite stvoriti funkciju koji ispisuje nečije ime,
Ljepota to je da mogu zapravo
dati tu funkciju ime koji opisuje ono što čini.
>> Sada je potrebno u ulaz koji Ja sam svojevoljno pozvao ime,
ali i to je predivno opisno umjesto da bude malo više
generički kao S. i nevažeće, za sada, samo znači
da ova funkcija ne ruka me nazad ništa.
To nije kao da GetString Doslovno mi ruke natrag niz
kao što smo učinili s komadićima papira sa svojim kolegama prošlog tjedna,
nego je to samo ima nuspojavu.
Ona ispisuje nešto na zaslonu.
>> Dakle, na kraju dana, ako ne bi funkcija-0, ./function-0,
vidjet ćemo da je pita za moje ime.
I tip Davida, a vrste iz moje ime.
Ako sam to učiniti opet s Robom, to će reći: "Zdravo, Rob."
Tako jednostavna ideja, ali možda ekstrapolirati toga psihički
da kao vaši programi dobiti malo kompliciranije,
i što želite napisati komad broj i poziv da code-- Pozovi
da code-- neki opisno ime kao PrintName,
C ne priuštiti nam tu mogućnost.
>> Evo još jedan jednostavan primjer.
Na primjer, ako sam otvoriti file od danas zove return.c,
primijetiti ono što sam učinio ovdje.
Većina tog glavna funkcija je printf.
Prvi put sam proizvoljno formatirati varijabla zove x na broj 2.
I onda isprintati "x je sada % I "prolazi u vrijednosti od x.
Dakle, ja sam samo rekao ono što je.
>> Sada sam samo hrabro tvrdeći sa printf.
Ja sam rotacije tu vrijednost x, a ja sam Pritom pozivom funkcije
zove kocka donošenje u X kao argument,
a zatim spremite izlaz u samoj varijable, x.
Tako sam clobbering vrijednost x.
Ja sam preskakanja Vrijednost x s god
Rezultat poziva Ova funkcija je kocka.
I onda sam samo isprintati neke pahuljasto stvari ovdje rekao ono što sam učinio.
>> Pa što onda je kocka?
Obavijest ono što je bitno drugačija.
Ja sam s obzirom na funkciju naziv kao i prije.
Ja sam navedeno ime za argument.
Ovaj put to se zove n umjesto imena, ali ja bi se moglo nazvati god hoću.
Ali ovo je drugačije.
Ova stvar na lijevoj strani.
Ranije je to bilo ono što ključne riječi?
Dječaci.
Sada je očito int.
>> Dakle, ono što je možda to oduzeti?
Dok nevažećih označava svojevrsni ništavilo, a to je bio slučaj.
PrintName vratio ništa.
To nije nešto, ali to mi nije ruku natrag
nešto što bih mogla staviti na lijeva strana je znak jednakosti
kao što sam učinio ovdje na liniji 22.
>> Dakle, ako ja kažem u na liniji 30, što je to vjerojatno podrazumijeva
o tome što kocka čini za mene?
Da?
To vraća cijeli broj.
Tako da mi ruke natrag, za instanca, komad papira
na kojoj je napisao odgovor.
2 kubu, ili 3 kubu, ili 4 cubed-- sve što sam prošao u,
i kako sam provesti ovo?
Pa, baš n puta n puta n Tako sam mogao kocke vrijednost.
Pa opet, super jednostavna Ideja, ali demonstrativno
sada kako možemo pisati funkcije koja nas zapravo imali natrag
vrijednosti koje bi mogle biti od interesa.
>> Pogledajmo jedan zadnji primjer ovdje zove funkcija jedan.
U ovom primjeru, ona počinje dobiti više uvjerljiv.
Tako je u funkciji jednom, ovaj program-- obavijest u konačnici
poziva funkcija zove GetPositiveInt.
GetPositiveInt nije funkcija u CS50 knjižnici,
No, mi smo odlučili Željeli to postojati.
>> Dakle, ako smo se pomaknite prema dolje kasnije u spisu, primijetiti kako sam otišao o provedbi
dobili pozitivan int, a ja kažu da je uvjerljiviji
jer ovo je pristojan broj linija koda.
To je ne samo glup mala igračka programa.
To je zapravo dobio neki provjerama i radite nešto više koristan.
>> Dakle, ako ne ste vidjeli prohod Video koji smo ugrađeni u pset1,
Znam da je to vrsta petlja u C, slični u duhu
na vrste stvari ispočetka može učiniti.
I to kaže to učiniti.
Ispis ovo.
Onda ići naprijed i dobiti n- dobiti int i pohraniti ga u N,
i zadržati to opet i opet i opet tako dugo dok n je manje od jedan.
>> Dakle, n će biti manje od jedan samo ako je ljudsko ne surađuje.
Ako on ili ona je tipkati u 0 ili -1 ili -50,
Ova petlja će se zadržati i opet izvršenja.
I na kraju primijetiti, ja jednostavno vratiti vrijednost.
Tako sada imamo funkciju kako bi bilo lijepo
ako bi CS50 implementirati u CS50.h i CS50.c za vas,
ali evo sada možemo provesti ovo sami.
>> No, dva Komentari na nekim ključnim detaljima.
One-- zašto Izjavljujem int n, mislite li da, na liniji 29.
umjesto da samo radi ovo ovdje, što je
više u skladu s što smo radili prošli tjedan?
Da?
Dobra misao.
Dakle, ako bismo ga stavili ovdje, to je kao da smo
zadržati i opet ga progla.
To samo po sebi je nije problem, sami po sebi,
jer mi samo treba nakon i vrijednost
ćemo dobiti novu svejedno.
No, dobra misao.
Da?
>> Zatvori.
Pa zato sam proglasila n o Linija 29 izvan petlje,
to je dostupan u cijelom Cijela ova funkcija.
Ne i druge funkcije, jer n je još uvijek unutar tih kovrčava
aparatić ovdje.
So-- sigurni.
>> Točno.
Dakle, ovo je još do točke.
Ako umjesto proglasila N upravo ovdje na liniji 32,
to je problematično, jer pogodak gdje drugdje moram mu pristupiti?
Na liniji 34, i jednostavno pravilo je
da možete koristiti samo varijabla unutar najnovijim vitičastim zagradama
u kojem ste ga proglasili.
>> Nažalost, linija 34 je jedna linija prekasno,
jer sam već zatvorila kovrčava braće na liniji 33
koji odgovara kovrčava braće na liniji 30.
I tako je to način da se kaže da je ova varijabla int je scoped,
da se tako izrazim, da samo unutar od onih vitičastih zagrada.
To jednostavno ne postoji izvan njih.
>> Pa doista, ako sam to učiniti krivu, dopustite mi da spasi kôd
kao što je to pogrešno je-- napisano.
Dopustite mi ići naprijed i čine Funkcija-1, i notice-- pogreške.
Korištenje neprijavljenog identifikator n na liniji 35, koji je upravo ovdje.
A ako mi se pomicali gore Nadalje, još jedan.
Korištenje neprijavljeni Oznaka N na liniji 34.
>> Dakle, prevodilac, jeka, je primijetio da je to samo
ne postoji čak jasno da je tamo vizualno.
Tako jednostavan škripac je to proglašenje tamo.
>> Sada neka mi dođite do vrhu datoteke.
Ono što skače na vas kao biti malo drugačije
od stvari smo gledali u zadnjih tjedan dana?
Ne samo da imam ime, ne samo da Imam neke oštre uključuje do vrha,
Imam nešto što sam nazivajući prototip.
Sada kada je izgleda jako slično onome što samo smo vidjeli maloprije na liniji 27.
>> Tako ćemo zaključiti iz drugačije Poruka o pogrešci zašto sam to učinio.
Dopustite mi ići naprijed i izbrisati ove linije postoji.
I tako ne znamo ništa o prototipu.
Remake ovu sliku.
Napravite funkciju jednog.
A sada, prokleto, četiri pogreške.
Idemo dođite do prvog.
>> Implicitni izjava o funkciji dobili pozitivan int nije valjan u C99.
C99 samo znači 1999 verzija jeziku
C, što je ono što doista koristite.
Dakle, što to znači?
Pa C-- i točnije C compilers-- su prilično glupi programi.
Oni znaju samo ono što ste Rekao im, a to je
zapravo tematsko od prošlog tjedna.
>> Problem je u tome da ako odem o provedbi ime ovdje,
i ja pozvati funkciju nazvanu GetPositiveInt ovdje na liniji 20,
da je funkcija tehnički ne postojati sve dok prevodilac vidi liniju 27.
Nažalost, prevodilac obavljanja stvari gore, dolje, lijevo, desno,
pa zato što nije vidio Provedba GetPositiveInt,
ali vidi ti pokušavaš ga koristiti ovdje,
to samo ide na bail-- vikati na što s pogreškom message-- možda
grobni, a ne zapravo sastaviti datoteku.
>> Tako tzv prototip gore Ovdje je doduše suvišan.
Doslovno, otišao sam ovdje i ja kopirati i zalijepiti ovo i stavio sam ovdje.
Praznina će biti više pravilno, pa ćemo doslovno kopirati i zalijepiti ovaj put.
Doslovno sam kopirati i zalijepiti.
Stvarno jednako kao mrvica kruha.
>> Malo trag na prevodilac.
Ne znam što se to radi još, ali ja sam obećao da će vas
da će postojati na kraju.
I to je razlog zašto ovaj line-- u Linija 16-- završava zarezom.
To je suvišan po dizajnu.
Da?
>> Ako niste povezati svoju knjižnicu do do- Oh, dobro pitanje.
Sharp uključuje zaglavlje datoteke inkluzije.
Trebate be-- trebalo gotovo uvijek biti na samom vrhu
datoteke za similar-- za isti razlog, da.
Budući da je u standardnom io.h je doslovno linija
kao što je ovaj, ali s riječju printf, a sa svojim argumentima i njegovom tipu povratka.
I tako su radili oštro su se ovdje, ono što ste radili doslovno
je kopirati i zalijepiti sadržaj netko drugi napisao gore na vrh.
Time cluing svoj kod u Činjenica da postoje one funkcije.
Da?
>> Apsolutno.
Dakle, vrlo pametan i ispravan rješenje bi bilo, znate što?
Ne znam što Prototip je, ali znam
ako ja razumijem da je C je samo nijem i ponovno promisi vrha do dna.
Pa ajmo to dati ono što želi.
Idemo smanjiti taj kod, zalijepiti ga vrhu, a sada gurati glavni dolje.
To bi također riješiti problem.
>> No, što bi vrlo lako doći do Scenarij u kojem trebate zvati B,
a možda i B poziva natrag u A. Ovo nešto što se zove rekurzija,
a mi ćemo se vratiti na to.
I to može i ne mora biti dobra stvar, ali definitivno može
razbiti ovo rješenje.
>> A osim toga, ja bih tvrde stilski,
pogotovo kada svoje programe postanu ovako dugo i ovako dugo,
to je samo super povoljno staviti na vrhu glavne
jer to je stvar najviše programeri će stalo.
I tako je malo čišći, nedvojbeno, kako to učiniti na način
Ja izvorno je to učinio s prototip čak
iako to izgleda malo suvišan na prvi pogled.
Da?
Žao nam je, može li se reći glasnije?
>> Ako se prebacite na mjestima Provedba i prototip?
Dakle, to je dobro pitanje.
Ako ponovno proglasi ovaj dolje ovdje, da vidimo što će se dogoditi.
Dakle, ako sam stavio ovaj dolje Ovdje, vi govorite.
Oh, ispričavam se.
Glasnije?
Čak i glasnije.
Ah, dobro pitanje.
Bi li to poništiti funkciju?
Znate, nakon svih ovih godina, ja nikada nisu stavili prototip nakon toga.
Tako ćemo učiniti da funkciju-1 nakon što da radi.
>> [Mrmlja]
DAVID J. Malan: Oh, čekaj.
Mi i dalje morati staviti sve do vrha.
Dakle, učinimo to ovdje, ako sam razumijevanje vaše pitanje ispravno.
Ja sam stavljajući sve, uključujući Prototip je gore glavni,
ali ja sam stavljajući prototip nastavku provedbe.
>> Dakle, ako sam napraviti jednu, ciljam natrag error-- neiskorištena varijabla n.
Oh, tamo.
Hvala vam.
Da vidimo, možemo riješiti ovo.
To je drugačija bug, pa neka je ignorirati.
Idemo jako brzo preurediti to.
>> U redu, tako da su podaci argument nije koristi format string
n- Oh, to je zato što Promijenio sam da to ovdje.
U redu, znamo što je odgovor ide to-- redu, idemo.
Ah, hvala za pozitivni.
U redu, ja ću popraviti ovaj kod after-- ignorirati ovu posebnu bug
jer to was-- to radi je odgovor.
>> Dakle, to ne prepisati ono što ste upravo učinio.
Sumnjam prevodilac je napisan tako
da je ignoriranje svoj prototip jer tijelo, da se tako izrazim,
od funkcija već provedene su viši.
Ja bi se stvarno konzultirati priručnik o prevodilac
razumjeti ako postoji bilo koji drugi Implikacija, ali na prvi pogled
Upravo tako težak i eksperimentiranje, čini se da nema utjecaja.
Dobro pitanje.
>> Tako ćemo se kretati sada, kreće daleko od nuspojava koje
Funkcije koje su učiniti nešto slično vizualno na zaslonu s printf,
ali ne vratiti vrijednost.
I funkcija koje imaju povrat Vrijednosti kao što smo upravo vidjeli nekoliko.
Već smo vidjeli ovaj pojam opsega, pa ćemo vidjeti to opet i opet.
Ali za sada, opet, koristiti pravilo
da varijabla se može koristiti samo Unutrašnjost je nedavno otvorila
i zatvorenih vitičastim zagradama Kao što smo Vidio je u tom primjeru.
>> I kao što je istaknuo, je ability--
mogli riješiti neke od tih problema stavljajući varijablu na globalnoj razini
na samom vrhu datoteke.
No, u gotovo svim slučajevima mi bi namrštiti na to,
i doista ni ići u tu otopinu za sada.
Dakle, za sada, takeaway je da varijable imaju taj pojam opsega.
>> Ali sada pogledajmo još jedan suhi način zapravo u potrazi
na neki prilično zanimljivi Provedbeni detalji.
Kako bismo mogli predstavlja informaciju.
A mi već pogledao ovaj u prvom tjednu nastave.
Gledajući izvršne datoteke, a sebe podsjećajući decimale.
>> Ali sjećam od prošlog tjedna da C ima različite vrste podataka i trsovi više,
No, najviše oni korisni za sada bi moglo biti to.
Char, ili karakter, što se događa da se jedan bajt, ili osam bitova ukupno.
I to je reći da je veličina od pougljenjenih je samo jedan bajt.
Bajt je osam bitova, pa to znači da možemo predstavljati koliko znakova.
Koliko slova ili simboli na tipkovnici
Ako imamo jedan bajt ili osam bitova.
Sjetite se da tjedan nula.
Ako imate osam bitova, Koliko vrijednosti ukupnog
može li predstavlja s obrasci nula i jedinica?
One-- više od toga.
Dakle, 256 ukupno, ako vas početi brojati od nule.
Dakle, ako imate osam bits-- pa ako mi imali naše binarnih lukovice opet ovdje,
možemo okrenuti onima žarulje na i isključiti u bilo kojem od 256 jedinstvenih uzoraka.
>> Sada je to malo problematično.
Ne toliko za engleski i romanski jezici, ali sigurno
kada uvesti, za Primjerice, azijski jezici, koji se
imaju daleko više simbola nego kao 26 slova abecede.
Mi zapravo možda trebati više od jedne riječi.
I srećom u posljednjih godina društvo
Usvojene druge standarde koje koriste više od jedne riječi po punjenju.
>> No, za sada u C, zadana je samo jedan bajt ili osam bitova.
Cijeli broj, u međuvremenu, je četiri bajtova, inače poznat kao 32 bita.
Što znači ono što je najveća moguća broj možemo predstavljati s int
očito?
S milijardu.
Dakle, to je četiri milijarde dati ili uzeti.
2 na 32th moći, ako mi Pretpostavljam nema negativne brojeve
i samo koristiti sve pozitivno brojevi, to je četiri milijarde
dati ili uzeti mogućnosti.
Plutaju, u međuvremenu, je drugačiji tip vrste podataka u C. To je još uvijek broj,
ali to je pravi broj.
Nešto s decimalne točke.
I ispada da C također koristi četiri bajta
za zastupanje s pomičnim zarezom vrijednosti.
>> Nažalost, koliko plutajući point vrijednosti postoje u svijetu?
Koliko je realna brojevi su tu?
Postoji beskonačan broj, a što se toga tiče
postoji beskonačno mnogo prirodnih brojeva.
Dakle, mi smo već vrsta kopanje sebi rupu ovdje.
Čime očito u computers-- na najmanje programi pisani u C na njih--
može računati samo kao visok kao četiri milijarde više ili manje,
i pomičnim zarezom vrijednosti mogu samo naizgled
imaju neku konačnu količinu preciznosti.
Samo toliko znamenki nakon njihov decimalne točke.
>> Budući da je, naravno, ako imate samo 32 bita,
Ne znam kako ćemo ići o predstavlja pravi numbers-- vjerojatno
s različitim vrstama uzoraka.
No, tu je sigurno konačnih Broj takvih uzoraka,
tako i ovdje, također, to je problematično.
>> Sada možemo izbjeći problem malo.
Ako ne koristite plovak, možete koristiti bračni
u C, što vam daje osam bajtova, koji je način više moguće obrasci nula
i one.
No, to je još uvijek konačna, što se događa biti problematično ako pisanje softvera
za grafike ili fantazija matematičke formule.
Dakle, možda zapravo žele brojati do veći od toga.
Dugo long-- glupo named-- Također je osam bajtova ili 64 bita,
a to je dvostruko dulje od int, i to je za dugo cjelobrojna vrijednost.
>> Zabava fact-- ako int četiri bajta, koliko je dugo u C obično?
Također četiri bajta, ali dugo dok je osam bajtova,
a ovo je iz povijesnih razloga.
>> Ali sada takeaway je samo da su podaci
biti predstavljeni u computer-- koji je fizički uređaj sa strujom,
to je općenito vožnje one nule i ones--
s konačnim količinama preciznosti.
Pa u čemu je problem onda?
>> Pa postoji problem od cjelobrojnog preljeva.
Ne samo u C, ali u računala u cjelini.
Na primjer, ako je to je bajt vrijedno bit--
pa ako je to osam bit-- sve od kojih su broj jedan.
Koji je to broj zastupanje ako pretpostavimo
to je sve pozitivne vrijednosti u binarnom?
>> 255, i to ne 256, jer je nula je najmanji broj.
Dakle, 255 je najviša jedan, ali problem
je pretpostaviti da sam htjela prirast ovu varijablu koja
koristi osam bitova ukupno ako želim ga povećavati.
>> Pa čim dodam jedan svim tim one,
što možda može zamisliti visually-- samo kao što nosi jedan pomoću decimals--
nešto će teći u lijevo.
I doista, ako dodam broj jedan je to, što se događa u binarnom
je da nabuja vratiti na nulu.
>> Dakle, ako ste samo use-- ne int, ali jedan bajt računati cijelih brojeva
u programu, koje default-- čim li doći do 250, 251, 252, 253, 254,
255-- 0 dolazi nakon 255, koji vjerojatno nije ono što
Korisnik će očekivati.
>> Sada je u međuvremenu u pomičnim zarezom svijet, također imaju sličan problem.
Ne toliko s najvećim number-- Iako je to još uvijek problem.
No, s iznosom od preciznosti koje mogu predstavljati.
Tako ćemo pogledati na ovom primjeru Ovdje je također iz današnje izvora code--
plutaju-0.c.
>> I primijetiti da je super jednostavan program koji
treba očito isprintati koju vrijednost?
Što se kladiti da će ovo za ispis iako je malo nove sintakse
ovdje?
Dakle, nadam se 0.1.
Dakle ekvivalent jedne desetine jer radim 1 podijeljen s 10.
Ja spremanje odgovor u varijabli zove f.
To je varijabla tipa float, koji je ključna riječ samo sam predložio postojala.
>> Nismo Vidjeli smo to i prije, ali To je vrsta uredan način u printf
navesti koliko znamenaka ste žele vidjeti nakon decimalne točke.
Dakle, to samo znači zapis da ovdje je rezervirano mjesto.
To je za plutajuće točke vrijednost, i oh, usput,
pokazuju ga s decimalnog zareza s jedan broj nakon decimalne točke.
Tako da je broj značajnih znamenki,
da se tako izrazim, da možda želite.
>> Pa neka mi ići naprijed i učiniti da plutaju-0, ./float-0,
i po svemu sudeći 1 podijeljeno s 10 je 0,0.
Sad zašto je to?
>> Pa opet, računalo je uzimanje ja doslovno, a ja sam napisao 1
i ja napisao 10, i pokušajte pogoditi što je preuzeo vrsta podataka za ta dva
Vrijednosti?
Interesi, to je tehnički nešto malo drugačije.
To je obično dugo, ali to je konačnici sastavni vrijednost.
Ne plutajuće vrijednost točka.
>> Što će reći da ako to je int, a to je int,
Problem je u tome što na računalu nema sposobnost
čak i pohraniti tu decimalne točke.
Dakle, kada vam je činiti 1 podijeljene za 10 pomoću brojeva
za i brojnik i nazivnik, odgovor bi trebao biti 0.1.
Ali computer-- jer oni su integers--
ne znam što da radim sa 0,1.
>> Pa što je to očito radi?
To je samo ga baca, i što vidim u konačnici
je 0,0 samo zato što sam inzistirao na tome da printf pokažite mi jednu decimalne točke.
No, problem je u tome, ako vas podijeliti cijeli broj po cijeli broj,
ćete get-- po definiciji od C-- cijeli broj.
A to neće učiniti nešto lijepo i povoljno
kao i cijele ga do Najbliža jedan gore ili dolje.
To će se skratiti sve nakon decimale.
>> Dakle, samo intuitivno, što je vjerojatno popraviti?
Što je najjednostavniji popraviti ovdje?
Da?
Točno.
Zašto ne bismo tretirati ih kao pomičnim zarezom vrijednosti učinkovito
pretvarajući ih u kola ili u parovima.
A sada, ako mi je činiti da pluta-0, ili ako sam sastaviti pluta-1,
koji je identičan ono je samo predložio.
I sad ja pluta-0, sada ću dobiti 0,1.
>> Sada je to nevjerojatna.
Ali sada ću učiniti nešto malo drugačije.
Ja sam znatiželjan vidjeti što je stvarno događa ispod haube,
i ja ću ispisati na 28 decimalna mjesta.
Želim da se stvarno vidi 0.1000-- infinite--
[Nečujan] 27 nule nakon toga 0.1.
>> Pa da vidimo je li to ono što sam doista dobiti.
Napravite lebdi-0 istu sliku.
./floats-0.
Idemo uvećanje na dramatičan odgovor.
Sve to vrijeme, bio si razmišljam 1 podijeljena 10 je 10%, odnosno 0.1.
Nije.
Barem tako daleko Računalo je u pitanju.
>> Sada why-- OK, to je kompletna Laž 1 podijeljeno s 10 je 0,1.
Ali why-- to nije takeaway danas.
Pa zašto ne računalo misle, za razliku od svih nas u sobi,
1 koja je podijeljena 10 zapravo to ludo vrijednost?
Što je računalo radi očito?
Što je to?
>> Nije se prelijevati, sama po sebi.
Overflow je obično kada što zaokrenuti vrijednost.
Bilo je to pitanje nepreciznosti u Krajnja vrijednost
gdje imate samo 32 ili možda čak i 64 bita.
Ali, ako postoji beskonačna broj realnom numbers--
brojeva s decimalnim mjestima i brojevi thereafter-- sigurno
ne može predstavljati sve njih.
Dakle, računalo je dao nama najbliža vrijednost
na vrijednost može predstavljati pomoću koje mnogi bita u vrijednosti sam zapravo želite,
što je 0,1.
>> Nažalost, ako vas početi raditi matematiku, ili ste
start koji uključuje takve plutajuće točka vrijednosti u važnom programs--
financijski software, Vojni software-- ništa
gdje je percepcija Vjerojatno prilično važno.
I početi dodavanjem Brojevi kao što je ovaj, i početi
pokrenut taj softver s jako velikim ulazima
ili za puno sati ili puno dana ili mnogo godina,
ove sitne male pogreške sigurno može zbrojiti s vremenom.
>> Sada kao na stranu, ako ste ikada Vidio Superman 3 ili Office Space
i možda ćete se sjetiti kako su ti dečki ukrali
Mnogo novca iz svojih računala pomoću pomičnim zarezom vrijednosti
i zbrajanju malo zaostaci, nadamo se da je film
Sada ima više smisla.
To je ono što su bili aludirajući na taj film.
Činjenica da je većina poduzeća ne bi izgledalo
Nakon određenog broja decimalnih mjesta,
ali oni su udjeli centi.
Tako ih počnete zbrajanju, počnete napraviti mnogo novca
u svoj bankovni račun.
Dakle, to je objasnio Office Space.
>> Sada, nažalost, izvan Office Space, postoji
neki su opravdano zabrinjavajući i značajni utjecaji
od tih vrsta temeljne odluke o dizajnu,
i doista je jedan od razloga koristimo C u tijeku
je tako da stvarno imati tu zemlju do razumijevanja o tome kako računala rade,
kako softver radi, i ne poduzeti ništa zdravo za gotovo.
>> I doista, nažalost, čak i uz da temeljno razumijevanje,
Mi ljudi čine pogreške.
I ono što sam mislio bih podijeliti je to osam minuta video ovdje uzeti
od modernog čuda epizodi, što je edukativna predstava o tome kako se stvari rade
koji oslikava dvije slike od kada je nepravilnog korištenja
i razumijevanje pomičnim zarezom vrijednosti
dovelo do neke značajne nesretne rezultata.
Idemo pogledati.
[Video reprodukciju]
-Mi Sada vratiti na "inženjerstvo Katastrofe "na modernim čudima.
Računala.
Svi smo došli prihvatiti često frustrirajući problemi koji
dobio s njih-- bugova, virusa, i Softver glitches-- za male cijene
platiti za praktičnost.
No, u visoke tehnologije i velike brzine vojne i svemirske programske aplikacije,
najmanji problem može biti uvećana u katastrofu.
>> Na 4. lipanj 1996, znanstvenici su pripremili lansirati bespilotnu Ariane 5 raketa.
On je nosio znanstveni sateliti dizajnirani
utvrditi točno kako Zemljino magnetsko polje u interakciju
sa solarnim vjetrovima.
Raketa je izgrađen za Europska svemirska agencija,
i odignuti od svog objekta na obali u Francuskoj Gvajani.
>> -Na Oko 37 sekundi u leta, su se prvi put
Primijetio je nešto krenulo naopako.
To su mlaznice su zakretanjem na način da se zapravo ne bi trebao.
Oko 40 sekundi u letu, jasno je vozilo u nevolji,
a to je kad su napravili Odluka da ga uništi.
Sigurnosni časnik raspon, s ogromne hrabrosti, pritisne gumb
i raznio raketu prije nego što je mogao postalo opasnost za javnu sigurnost.
>> -Ovo Je djevojačko Put od Ariane 5,
i njegovo uništenje uzeo stavite zbog mana
ugrađen u raketi softveru.
-The Problem na Ariane je da postoji
je broj koji je potrebno 64 bita izraziti,
i oni su htjeli pretvoriti je na 16-bitni broj.
Pretpostavili su da je broj se nikada ne će biti vrlo velika.
Da je većina od tih brojki u 64-bitni broj bile nule.
Bili su u krivu.
>> -The Nesposobnost jedne softverski program za prihvaćanje
vrsta broja generira drugi je bio u korijenu neuspjeha.
Razvoj softvera postali vrlo skupo dio nove tehnologije.
Ariane 4 raketa imala bio vrlo uspješan.
Toliko od softvera stvorena za Također je bio korišten u Ariane 5.
>> -The Osnovni problem bio je da Ariane 5.
Je faster-- ubrzao brže, a Softver nije činio zbog toga.
>> -The Uništavanje raketa bio veliki financijski katastrofa.
Sve zbog minutu softvera pogreške.
No, to nije bio prvi Vrijeme problemi podaci o pretvorbi
je udario moderne raketne tehnologije.
>> -U 1991 s početka od prvog Zaljevskog rata,
Patriot raketnih doživio sličnu vrstu
problema broj pretvorbe.
I kao rezultat 28 ljudi-- 28 Američki soldiers-- poginulo,
a oko stotinu je ranjeno.
Kad Patriot, koja je trebala kako bi se zaštitili od dolaznih Scuds,
nije uspio ispaliti raketu.
>> Kad je Irak napao Kuvajt i Ameriku pokrenula Pustinjska oluja početkom 1991,
Patriot raketne baterije su razmještene zaštititi Saudijsku Arabiju i Izrael
iz iračkih raketnih napada Scud.
Patriot je američki srednjeg dometa zemlja-zrak sustav
proizveden od strane tvrtke Raytheon.
>> -The Veličina Patriot presretač itself--
to je otprilike oko 20 metara dug, i teži oko 2.000 kilograma.
I to nosi bojnu glavu oko, Mislim da je to otprilike 150 £.
I sama je bojna glava visoki eksploziv, koji je
ima fragmente oko njega.
Dakle, kućište od projektila je zamišljen je kao sačme.
>> -The Rakete provedena četiri po kontejneru,
i prevoze polu prikolice.
>> -The Patriot anti-raketni sustav seže najmanje 20 godina.
To je bio izvorno dizajniran kao obrambene rakete zrak
pucati dolje neprijateljske zrakoplove.
U prvom Zaljevskom ratu kada je taj rat Izašao
Vojska želi ga koristiti za oboriti Scuds, a ne avioni.
Irački ratnog zrakoplovstva bio je Nije toliko problem,
ali vojska je zabrinut oko Scuds.
I tako su pokušali nadograditi Patriot.
>> -Intercepting Neprijatelja projektil putuje na Mach 5
će biti dovoljno izazovan.
Ali kad Patriot je potrčala u službu,
Vojska nije bio svjestan Irački izmjene koje
napravili njihovi scuds gotovo nemoguće.
>> Što se dogodilo je da je Scuds su dolazili u bilo nestabilno.
Bili su nesiguran.
Razlog za to bio je Iraqis-- kako bi dobili 600 km van
od 300-kilometarskog raspon missile-- uzeo težinu iz prednjeg bojne glave,
i napravio bojna glava upaljača.
Tako sada Patriot pokušava doći Na Scud i većina put--
Velika većina put-- to bi samo letjeti po Scud.
>> -Nakon Operatora Patriot sustava shvatio Patriot promašio svoj cilj,
oni detonirao The Patriot-a bojnu glavu kako bi se izbjegle eventualne žrtve ako se
je dopušteno da padne na zemlju.
>> To je bilo ono što većina ljudi vidjeli kao velike vatrene kugle na nebu,
i pogrešno kao presreće od Scud bojevih glava.
>> -Although U noćnim nebom, Patriotsa Činilo se da je uspješno uništavaju
Scuds, u Dhahran bi moglo biti Ne sumnjajte u njegovu učinkovitost.
Postoji The Patriot-a radarski sustav izgubio trag o dolaznom Scud
i nikada nije pokrenut zbog do programskog mana.
>> Bilo je Izraelce koji je prvi otkrio da je više sustav bio uključen,
veće odstupanje vremena postala.
Zbog sat ugrađen u računalo sustava.
>> -Oko Dva tjedna prije Tragedija u Dhahran,
Izraelci su izvijestili da Ministarstvo obrane
da sustav gubi vrijeme.
Nakon što je oko osam sati trčanja, uočili
da sustav postaje osjetno manje točna.
Ministarstvo obrane je reagirala govori sve Patriot baterija
da ne ostavljaju sustave na duže vrijeme.
Oni nikada nije rekao ono što je dugo vremena bio.
8 sati, 10 sati, tisuću sati.
Nitko nije znao.
>> -The Patriot baterija stacioniran u vojarni
u Dhahran i njegova mana interna Sat je bio na više od 100 sati
u noći 25. veljače.
>> -To Pratiti vrijeme na točnost od oko desetine sekunde.
Sada desetinu sekunde je zanimljiv broj
jer se ne može izraziti u binarnom točno, što
znači da se ne može izraziti točno u bilo kojem modernom digitalnom računalu.
Teško je vjerovati, ali koristiti kao primjer.
>> Uzmimo broj trećinu.
Jedna trećina ne može biti izražena u decimale točno.
Jedna trećina je 0.333 događa za beskonačnost.
Nema načina da to učiniti s apsolutna točnost u decimale.
To je točno vrsta problema koja se dogodila u Patriot.
Više sustav ran, gora postala time error.
>> Poslije 100 sati rada, Pogreška je u to vrijeme bio samo oko jedne trećine
sekunde.
No, s obzirom na ciljanje projektil putuje na Mach 5,
što je dovelo do praćenja Pogreška od preko 600 metara.
Bilo bi fatalna pogreška za vojnike u Dhahran.
>> Što se dogodilo je Scud Lansiranje je otkriven satelita za rano upozoravanje,
i znali su Scud dolazi u njihovom smjeru.
Nisu znali gdje je došao.
To je sada na radaru komponenta Patriot sustava
braneći Dhahran locirati i zadržati Staza od dolazne neprijateljskih projektila.
>> -The Radarski bio jako pametan.
To bi zapravo pratiti položaj Scud
a zatim predvidjeti gdje to će vjerojatno biti
Sljedeći put radar poslao puls van.
To se zove raspon vrata.
>> Onda odjednom The Patriot odluči dovoljno vremena ima
prošli se vratiti i provjeriti sljedeći mjesto za ovaj objekt otkriven
to ide natrag.
Dakle, kada se vratio u krivu mjesto, to onda ne vidi objekt.
I to ne odluči da nema objekta.
To je bilo lažno otkrivanje i ona padne na stazu.
>> -The Dolazni Scud nestali sa zaslona radara,
i sekundi kasnije, to udario u vojarnu.
Scud ubio 28.
To je posljednja otkaz tijekom prvog Zaljevskog rata.
Tragično, ažurirani softver stigao je u zoru sljedećeg dana.
Softver mana je imao bila fiksna, zatvaranje
jedno poglavlje u nevolji Povijest Patriot rakete.
>> [END video reprodukciju]
>> DAVID J. Malan: To je to za CS50.
Mi ćemo vas vidjeti u srijedu.
>> [Muziciranja]