>> [Mūzikas atskaņošanai]
DAVID J. Malan: Nu labi.
Tas ir CS50, un šis ir sākums nedēļas divas.
Tāpēc ļaujiet mums sākas šodien ar bug.
Bug, protams, ir kļūda programmā,
un jūs saņemsiet ļoti iepazinušies ar šo koncepciju
Ja jūs nekad neesmu programmēt Pirms. pset0 un tagad pset1.
Bet pieņemsim apsvērt kaut ko mazliet vienkārši sākumā.
Šī programma šeit, ka I iemeta kopā iepriekš,
un man apgalvo, ka tas būtu drukāt 10 zvaigznes uz ekrāna, izmantojot printf,
bet tas acīmredzot buggy kaut kādā veidā.
>> Ņemot vērā, ka specifikācija, kas vajadzētu drukāt 10 zvaigznes,
bet tas acīmredzot nav, ko tu apgalvo ir kļūda?
Yeah?
Tātad, tas ir pie viena kļūda, un ko tu ar to domā?
OK.
Excellent.
Tāpēc mēs esam norādīts sākt vērtību nulli i,
un mēs esam norādījis n vērtība ir 10, bet mēs esam izmantojuši mazāks par vai vienāds ar.
Un iemesls, ka šis ir divi rakstzīmes un ne tikai viens simbols,
tāpat kā matemātikas grāmatā, ir tas, ka jums nav
veids, kā izteikt viena rakstzīme līdzvērtīgs.
>> Tātad tas nozīmē, ka mazāk nekā, bet Ja jūs sākat skaitīšanas nulles līmenī,
bet jūs rēķināties visu ceļu līdz cauri un ir vienāda ar 10,
tu esi protams gatavojas skaits 11 lietas kopā.
Un tā jūs gatavojas drukāt 11 zvaigznēm.
Tātad, kādi varētu būt noteikt par šo?
Yeah?
>> Tik vienkārši pielāgot mazāk nekā vai vienāds ar tikai būt mazāka par
un tur ir, es varu pieprasīt, varbūt cits risinājums, too.
Kas varētu cits jūs darīt?
Yeah?
>> Tātad, sākt pielīdzinot to 1, un atstāj mazāks par vai vienāds ar.
Un, atklāti sakot, es varētu apgalvot ka, par tipisku cilvēku,
tas ir iespējams, vairāk vienkārši.
Sākt skaitīšana pēc 1 un saskaitīt līdz 10.
Būtībā darīt to, ko tu domā.
>> Bet realitāte ir programmēšana, kā mēs esam redzējuši,
datoru zinātnieki un programmētāji parasti sāk skaitīt no nulles.
Un tā tas ir jauki, kad Jūs pierast pie tā.
Jūsu stāvoklis parasti kaut kas līdzīgs mazāk nekā.
Tik vienkārši loģisks kļūda, ka mēs varētu tagad
noteikt un galu galā recompile šo un saņemt tikai 10.
>> Nu, kā par šo kļūdu šeit?
Lūk, atkal, es apgalvot, ka man ir mērķis drukāšanas 10 stars--
pa vienam katrā rindā šoreiz, bet tā nav.
Pirms mēs ierosinām, ko noteikt ir, ko dara
drukāt vizuāli ja man bija, lai apkopotu un palaist šo programmu jūs domājat?
Yeah?
>> Star.
Tātad visas zvaigznes uz pati līnija ir tas, ko es dzirdēju,
un tad jaunā līnija raksturs.
Tāpēc pieņemsim mēģināt to.
Tātad, lai buggy-1, ievadīt, un es redzu, ka šķindēt komandu
ka mēs runājām par pēdējo reizi.
./buggy-1, un patiešām es redzu visas 10 zvaigznes uz vienas līnijas, lai gan FORMULA
Manā specifikācijā tikai komentāru atop kodu, kas man paredzēts darīt vienu per
līnija.
Bet tas izskatās labi.
>> Tagad line 15 tas izskatās, ka es esmu drukāšanas zvaigzne, un tad līniju 16
izskatās, ka es esmu druka jauna līnija raksturs,
un viņi abi izrobota tik Es esmu iekšpusē cilpas skaidri.
Tāpēc nevajadzētu man darīt zvaigzne, jauna līnija, zvaigzne, jaunā līnija, zvaigzne, jaunā līnija?
Jā?
>> Jā, atšķirībā no valodas, piemēram, Python, ja jūs esat iepazinušies,
iespiedums nav nozīmes, ar datoru.
Tas tikai ir nozīmīga cilvēka.
Tātad, tā kā šeit, es esmu izdomāts līnijām 15 un 16-- ka izskatās skaisti,
bet dators nav aprūpi.
Dators nerūp faktiski ir cirtaini bikšturi
ap šīm līnijām kodu.
>> Tāpēc, ka tas ir clear-- tāpat kā Scratch-- ka šīm divām līnijām kodu
būtu jāveic.
Piemēram, viens no tiem dzeltenā Scratch puzzle gabalus atkal un atkal un atkal.
>> Tāpēc tagad, ja es atkal palaist šo program-- ./buggy-2-- Hm.
Man ir kļūda tagad.
Ko es aizmirst to darīt?
Jā, tāpēc man nebija sastādīt to.
Tātad, lai buggy-2.
Nav šādu failu, jo man nebija faktiski sastādīt otro versiju.
Tāpēc tagad interesanti nedeklarētu variable-- nav 2.
Mēs darām 1.
Make buggy-1-- ./buggy-1-- un tagad katra no tām ir uz vienas līnijas.
>> Tagad ir izņēmums šis vajadzēja prasība mans
kas jums ir nepieciešams šos cirtaini lencēm.
Kad tas faktiski OK-- ja esat pamanīju iedaļā vai textbooks--
izlaist cirtaini bikšturi?
Yeah?
>> Tieši tā.
Ja tur ir tikai viens rindā kodu, kas jums
vēlas būt saistīta ar cilpa kā mūsu pirmajā piemērā.
Tā ir pilnīgi likumīga izlaist cirtaini bikšturi
tāpat kā sava veida ērtības no kompilatoru jums.
Yeah?
Labs jautājums.
Vai tas uzskatāms stils kļūda?
Mēs būtu promote-- kā CS50 stila rokasgrāmata, URL, par kuru
ir pset1--, ka vienmēr izmantot cirtaini lencēm.
Protams, ja jūs esat jauns, lai plānošanas.
Realitāte ir tāda, ka mēs neesam gatavojas aizliegt jums
no darot šos ērtības.
Bet, ja jūs tikai iegūt uz swing lietas,
absolūti vienkārši vienmēr izmantot cirtaini breketes, līdz jūs saņemsiet pakārt par to.
Labs jautājums.
>> Viss labi.
Tā, ka tad bija kļūda.
Vismaz kaut ko diezgan vienkārši.
Un tomēr jūs varētu domāt, tas ir diezgan elementāra, labi?
Tas ir veida pirmajā nedēļā skatoties uz valodu
piemēram, redzēt jūsu kļūdas tajā.
Bet realitāte tie ir faktiski pārstāvi
daži diezgan biedējoši problēmām kas var rasties reālajā pasaulē.
>> Tāpēc daži no jums varētu atgādināt ja jums sekot tehnoloģiju jaunumus,
vai varbūt pat noķerti vējš šis februārī
Šī pagājušajā gadā, ka Apple bija izgatavots mazliet kļūdas abos iOS,
operētājsistēma uz savus tālruņus, un arī
Mac OS, operētājsistēma par to galddatoriem un klēpjdatoriem.
Un redzējāt tādus virsrakstus kā šis.
Un pēc tam, Apple solīja noteikt šo kļūdu,
un ļoti ātri izdarīja salabot iOS, bet tad galu galā noteikti to Mac OS
kā labi.
>> Tagad neviens no šiem virsrakstiem vien patiešām atklāt kāda pamata problēma bija,
bet bug galu galā samazināja līdz bug SSL, Secure Sockets Layer.
Un garš stāsts īss, tas ir programmatūra
ka mūsu pārlūkprogrammas un citi programmatūra, ko izmanto, lai darīt?
>> Ja es teicu, ka SSL ir iesaistīts, kad jūs
apmeklēt URL, kas sākas ar https, kas tad varētu SSL būt saistīts?
Šifrēšanu.
Tātad mēs runājam par tas tuvākajās dienās.
Šifrēšana, māksla kodēšanas informāciju.
>> Bet garš stāsts īss, Apple dažkārt pirms bija kļūdījies
to īstenošanā SSL, ka programmatūra, kas galu galā īsteno
URL, piemēram, HTTPS vai maks savienojumi arī tur.
Kura rezultāts ir, ka jūsu savienojumi var potenciāli
pārtvert.
Un jūsu savienojumi bija ne vienmēr ir šifrēts
ja jums bija dažas sliktas puisis starp jūs un galamērķi mājas lapā, kurš
zināja, kā gūt labumu no tā.
>> Tagad Apple galu galā ievietojis noteikt par to beidzot,
un apraksts to fix bija šī.
Droši transporta neizdevās apstiprināt autentiskumu savienojumu.
Jautājums tika risināts atjaunot trūkstošos validācijas soļus.
>> Tāpēc tas ir ļoti roku viļņota skaidrojums lai vienkārši sakot, ka mēs ieskrūvē augšu.
Ir burtiski viens rindā kodu, kas bija bagijs
to īstenošanā SSL, un ja jūs doties tiešsaistē un meklēt to
Jūs faktiski var atrast pirmavots kodu.
Tā, piemēram, tas ir ekrāns shot tikai daļa no diezgan lielu failu,
bet tas ir funkcija acīmredzot sauc SSL pārbaudīt zīme servera atslēgu apmaiņu.
Un tas aizņem ķekars argumenti un ieejas.
Un mēs nebrauksim, lai koncentrētos pārāk daudz par minutia tur,
bet, ja jums koncentrēties uz kodu iekšpusē Minētā augšējais function-- pieņemsim
tuvinātu to.
Jūs, iespējams, jau ir aizdomas kāda kļūda varētu
būt pat tad, ja jums nav ne jausmas galu galā, ko jūs meklējat.
Tur ir sava veida anomālija šeit, kas ir kas?
>> Jā, man nav īsti patīk izskatu divu Goto neizdodas.
Atklāti sakot, man nav tiešām zināt, ko goto neizdoties līdzekļus, bet kam divas no tām
atpakaļ atpakaļ.
Ka tikai veida rubs mani intelektuāli nepareizi,
un, protams, ja mēs iedziļinies tikai šo līniju, tas ir C.
>> Tik daudz Apple koda pats ir rakstīts C,
un tas acīmredzot ir patiešām equivalent--
nevis uz šo diezgan iespiedumiem versija, bet, ja jūs apzināties faktu
ka tur nav cirtaini bikšturi, ko Ābolu tiešām rakstīja bija kods, kas izskatās
kā šis.
Tāpēc es esmu pietuvināto, un es tikko noteica iedobi nozīmē
ka, ja tur nav cirtaini bikšturi, ka otrais Goto neizdoties, kas ir dzeltenā krāsā
gatavojas izpildīt vienalga ko.
Tas nav saistīts ar ja nosacījums virs tā.
>> Tātad, pat tad atkal, ja jums nav gluži saprast, ko tas, iespējams, varētu
būt darot, zina, ka katrs no šiem conditions-- katru no šīm līnijām
ir ļoti svarīgs solis procesā pārbaudot
ja jūsu dati ir faktiski šifrēta.
Tātad izlaižot vienu no šiem soļi, nevis labākā ideja.
>> Bet tāpēc, ka mums ir šī Otrais Goto neizdoties dzeltenā krāsā,
un tāpēc, ka pēc tam, kad mēs veida estētiski
pārvietot pa kreisi, kur to loģiski ir šobrīd, kāda
tas nozīmē līniju koda zem šī otrā Goto
neizdoties jūs domājat?
Tas vienmēr būs jāizlaiž.
Tātad gotos parasti sarauca pieri iemeslu dēļ mēs īsti iedziļināties,
un patiešām CS50 mēs nemēdz mācīt šo paziņojumu goto,
bet jūs varat iedomāties Goto neizdodas, jo nozīmē iet lēkt
ar kādu no otras puses kodu.
>> Citiem vārdiem sakot, lēkt pāri šis pēdējais rindā vispār,
un tā rezultāts ir tas stulbi vienkārši kļūda, kas bija tikai
rezultāts, iespējams, kāds kopēšana un līmēšana vienu too
daudzas reizes bija, ka viss no iOS un Mac OS drošība
bija neaizsargāti pret pārtveršanu ar sliktajiem puišiem uz ilgu laiku.
Līdz Apple beidzot fiksēts šo.
>> Tagad, ja daži no jums ir reāli darbojas vecās versijas iOS un Mac OS,
Jūs varat doties uz gotofail.com kas ir tīmekļa vietne, ka kāds izveidoja
lai būtībā noteiktu programmatiski
ja jūsu dators joprojām ir neaizsargāti.
Un, godīgi sakot, ja tā ir, tas ir iespējams, laba ideja
atjaunināt savu tālruni vai jūsu Mac šajā brīdī.
Bet tur, tikai liecina par to, cik novērtējums šiem zemākā līmenī
informācija un taisnīgi vienkāršas idejas var patiešām
pārvērst lēmumos un problēmas, kas
affected-- šajā case-- miljoniem cilvēku.
>> Tagad vārds par administrāciju.
Nodaļa sāks šo nāk svētdiena.
Jūs saņemsiet e-pastu, nedēļas nogalē par sadaļu, kurā brīdī
resectioning process sāksies, ja esat
sapratu, jums tagad ir daži jauni konflikti.
Tātad tas notiek katru gadu, un mēs uzņems dienās nāk.
>> Biroja hours-- to paturēt acu par šo grafiku šeit.
Maina mazliet šonedēļ, Īpaši sākuma laiks
un atrašanās vietu, tāpēc konsultējieties , ka pirms došanās uz darba laika
kāds no nākamajiem četriem naktis.
Un tagad vārds par novērtējumu, it kā jūs nirt problēmu
nosaka vienu un ārpus tās.
>> Tātad par specifikāciju, tie parasti
asis, gar kuru mēs vērtējam savu darbu.
Joma attiecas uz to, ko mērā jūsu kods traktortehnikas
funkcijas nepieciešams mūsu specifikāciju.
Citiem vārdiem sakot, cik daudz gabals komplekts vai jūs nokost.
Jūs darījāt trešdaļu no tā, puse no tā, 100% no tā.
Pat tad, ja tas nav pareizs, cik daudz jūs mēģināt?
Tātad, kas atspoguļo līmeni centienu un summu
, uz kuru jūs mazliet off problema SET problēmas.
>> Correctness-- šo vienu, lai Cik lielā mērā, ir jūsu kods
saskaņā ar mūsu specifikācijas un bez kļūdām.
Tātad tas darbojas pareizi?
Ja mēs tā kādu ieguldījumu, to dara dod mums produkciju, mēs sagaidām?
Design-- tagad šis ir pirmais par īpaši kvalitatīvi tiem,
vai tie, kas nepieciešama cilvēka spriedumu.
Un tiešām, tas ir iemesls, kāpēc mums ir darbinieki tik daudz mācību stipendiātu un protams
palīgi.
Cik lielā mērā ir Jūsu kods rakstīts labi?
>> Un atkal tas ir ļoti kvalitatīvais novērtējums
kas strādās ar jums bi-virzīti nedēļās nākt.
Lai tad, kad jums nav tikai ciparu rādītāji, bet arī
rakstisks rezultātus vai drukāti atgriezeniskā saite, vai rakstiski atsauksmes angļu vārdiem.
Tas ir tas, ko mēs izmantojam, lai vadīt jūs pret faktiski rakstot labāk kodu.
Un lekciju un sadaļā, mēs cenšamies norādīt out-- tik bieži, cik mēs can--
kas padara programmu, ne tikai pareiza un funkcionāli labi,
bet arī labi izstrādāta.
Visefektīvākais tas varētu būt, vai pat skaistākā tas var būt.
>> Kas noved mūs pie stila.
Stils galu galā ir estētisks spriedums.
Vai jūs izvēlēties labu nosaukumi Jūsu mainīgajiem?
Vai esat atkāpi savu kodu pareizi?
Vai tas izskatās labi, un tāpēc, tas ir viegli, lai otru cilvēku
lasīt savu attiecīgo tā pareizību.
>> Tagad parasti vienu mācību, mēs score šīs lietas uz atzīmi piecu punktu.
Un ļaujiet man āmurs mājas punkts ka ir trīs patiešām labs.
Ļoti ātri darīt folks sākt darīt aritmētika.
Kad viņi saņem no trijām Piecu par pareizību kādu PSET
un viņi domā damn, es gatavojas 60% kas būtībā ir D vai E.
>> Tas nav veids, kā mēs domā par šiem skaitļiem.
Trīs ir patiešām labs, un ko mēs parasti sagaida sākumā
Termina ir tas, ka, ja jūs saņemat ķekars three's-- varbūt pāris
gadatirgu, pāris fours-- vai pāris twos, pāris fours--
kas ir laba vieta, kur sākt.
Un tik ilgi, kamēr mēs redzam augšup trajektorija laika gaitā,
tu esi īpaši labā vietā.
>> Formula mēs izmantojam, lai svars lietas būtībā
šis vienu mācību, kas nozīmē tikai to, ka mēs
pievērst lielāku uzmanību pareizību.
Tāpēc, ka tas ir ļoti bieži pareizība kas aizņem visvairāk laika.
Ticiet man tagad.
Jūs find-- vismaz vienā pset-- ka jums
tērē 90% no sava laika strādā 10% no problēmas.
>> Un viss veida darbi izņemot vienu vai diviem kļūdām,
, un tie ir bugs, ka saglabātu jums up vēlu naktī.
Tie ir tie, kas veida aizbēgt jums.
Bet pēc miega par to, vai apmeklējot biroja stundām
vai uzdodot jautājumus internetā, tiek kad jūs nokļūt uz šo 100% mērķi,
un tas ir iemesls, kāpēc mēs svars pareizību visvairāk.
Dizains nedaudz mazāk, un stils mazliet mazāk nekā.
Bet paturiet mind-- stilā ir iespējams vieglākais
no tiem nokost kā vienu stila rokasgrāmatā.
>> Un tagad, nopietnāku ņemiet par akadēmisko godīgumu.
CS50 ir žēl atšķirība ir lielākais ražotājs Ad valdes
gadījumi, gandrīz katru gadu vēsturiski.
Tas nav tāpēc, ka studenti krāpties CS50 vairāk, nekā jebkuru citu klasi,
bet tāpēc, ka pēc būtības darba, Fakts, ka tā ir elektroniska,
fakts, ka mēs skatāmies uz to, un fakts, mēs esam datoru zinātnieki,
Es varu teikt, ka mēs esam diemžēl ļoti labi atklāt to.
>> Tātad, ko tas nozīmē reālajā izteiksmē?
Tātad tas, par mācību programmas, Kurss filozofija
tiešām vārīties uz leju, lai būtu saprātīgi.
Ir šī robeža starp darot savu darbu, par savu
un kļūst mazliet saprātīgs palīdzību no drauga,
un tieši darot šo darbu, lai jūsu draugs, vai nosūtot viņam vai viņai savu kodu
tāpēc, ka viņš vai viņa var vienkārši ņemt vai aizņemties to ārā tiesības.
Un, kas šķērso robežu ka mēs vērsta klasē.
>> Redzēt, ka mācību programmu galu galā līnijām
ka mēs vēršam kā saprātīgi un nepamatota rīcība,
bet tas tiešām vārīties līdz būtību
par savu darbu nepieciešamības būt jūsu pašu beigās.
Tagad ar to teica, ir heiristisko.
Jo, kā jūs varētu imagine-- no darba laika, un Visuals
un video mēs esam parādīts tādējādi far-- CS50
patiešām ir domāts, lai būtu kā sadarbības un kā kooperatīvs un sociālā
cik vien iespējams.
Kā kopīgai kā tas ir stingra.
>> Bet ar šo teica, heiristisko, kā jūs redzēsiet šajā mācību,
ir tas, ka tad, kad jums ir kāda problēma.
Jums ir kāda kļūda jūsu kodu, kas jums nevar atrisināt, tas ir saprātīgi, lai jums
lai parādītu savu kodu kādam citam.
Draugs pat klasē, draugs sēž blakus jums pie darba laika,
vai personāla loceklis.
Bet viņi nevar parādīt savu kodu, lai jums.
>> Citiem vārdiem sakot, atbildi uz savu question--
Man vajag help-- nav ak, šeit ir mans kods.
Veikt apskatīt šo un secināt no tā, ko jūs.
Tagad, protams, tur ir veids skaidri spēli
šī sistēma, ar kuru es tev parādīšu mans kods, pirms jautājumu.
Parādiet man manu savu kodu , pirms jautājumu.
Bet redz to mācību programmu vēlreiz smalkākas detaļas par to, kur šī līnija ir.
>> Tikai tagad krāsu attēlu un dalīties kā pārredzami, cik vien iespējams
kur mēs esam pēdējo gadu laikā, tas ir skaits, Ad Board gadījumu
ka CS50 ir bijusi vairāk nekā Pēdējo septiņu gadu laikā.
Ar 14 gadījumos šī pēdējā kritumu.
Runājot par iesaistīto studentu, tas bija 20 daži nepāra studenti
pagājušajā rudenī.
Tur bija no 33 pīķa studenti pirms dažiem gadiem.
No kuriem daudzi diemžēl vairs nav šeit pilsētiņā.
>> Studenti iesaistīti kā procentuālā daļa klase jau vēsturiski ir robežās no 0%
līdz 5,3%, kas ir tikai teikt tas ir katru gadu izaicinājums.
Un pret to panāktu, kādi mēs vēlamies darīt, ir nodot vienu
ka mēs dd-- tikko FYI-- salīdzināt at taisnīgums tiem studentiem, kuri
ir pēc līniju atbilstoši.
Mēs darām salīdzināt visu strāvu iesniegumi pret visu bijušo misijās
no pēdējo daudzu gadu laikā.
>> Mēs zinām arī to, kā Google apkārt un atrast kodu reģistriem
online, diskusiju forumi online, darba vietas tiešsaistē.
Ja students var atrast to, mēs varam, protams, atrast to, cik mēs diemžēl darīt.
Tātad, ko jūs redzēsiet šajā mācību lai gan tas ir žēl klauzula.
Es varu, protams, novērtēt, un mēs visi, ir
darbinieku ir darīts, piemēram, kursu Tas, vai šis viens pats laika gaitā,
protams, zinu, kas tas ir, piemēram, kad dzīve izpaužas tādā veidā, ja jums ir
daži vēlu vakarā deadline-- ne tikai šīs grupas,
bet another-- kad tu esi pilnībā iztukšots, akcentēja,
ir pārmērīgi skaits citas lietas, ko darīt.
Jums dos kādā brīdī dzīve, protams, slikti, varbūt par vēlu
nakts lēmums.
>> Tātad vienu mācību, ir šī klauzula,
, kurā, ja 72 stundu laikā izdarīt daži slikts lēmums, jums pieder līdz tam
un panākt, lai mani un Viens no kursa ir galvas
un mums būs saruna.
Mēs rokturis lietas iekšēji cer
no tā kļūst vairāk mācīšana brīdis vai dzīves mācība,
un nav kaut kas ar Īpaši krasas sazarojums
kā jūs varētu redzēt uz šīm kartēm šeit.
>> Tā ka ir ļoti nopietns signāls.
Ļaujiet mums pauzes tikai daži sekundes, lai izjauktu spriedzi.
>> [Mūzikas atskaņošanai]
>> DAVID J. Malan: Labi, tā kā bija, ka par segue?
Mūsdienu primāro tēmām.
Pirmais no tiem ir abstrakcija.
Vēl viens no kuriem būs pārstāvība datu, kas atklāti sakot
ir ļoti sauss veids, kā pateikt to, kā mēs varam iet par problēmu risināšanai un domāšana
par problēmu risināšanai?
Tātad jūs esat redzējuši Scratch, un jūs esat redzējis varbūt jau pset1 ar C
, ka jūs ne tikai var izmantot funkcijas, piemēram, printf,
ka citi cilvēki gadus iepriekš rakstīja par jums.
Jūs varat arī rakstīt savas funkcijas.
>> Un, pat ja jūs varētu nebūt izdarījusi C, un atklāti in pset1
jums nav tiešām ir nepieciešams, lai rakstītu savu pašu funkcija, jo ar problem--
bet varbūt biedējošu Pirmais glance-- jūs redzēsiet
galu galā var atrisināt ar ne visi, ka daudzi koda rindiņas.
Bet ar to teica, runājot rakstot savu funkciju,
saprotu, ka C tas dod jūs to spējas.
>> Es iešu šodienas pirmkodu, kas ir pieejams jau internetā,
un es esmu gatavojas iet uz priekšu un atvērts up programmu, ko sauc funkciju 0.C,
un funkciju nulles mēs redzēsim dažas lietas.
Pirmajos līnijās 18 līdz 23 ir mans galvenais uzdevums.
Un tagad, ka mēs esam sākuši lasīt kods, ka mēs esam ne rakstiski par lidot,
bet es esmu rakstījis iepriekš vai ka jums ir problēma noteikti
varētu saņemt kam tika rakstīts iepriekš.
Labs veids, kā sākt lasot kāds cits kods
ir meklēt galvenā funkcija.
Izdomāt, kur šo ierakstu punktu, lai darbības programmu,
un pēc tam to loģiski no turienes.
>> Tātad šī programma acīmredzot izdrukas Jūsu vārds, kam seko kols.
Pēc tam mēs izmantojam GetString no CS50 bibliotēkas
iegūt virkni, vai vārdu vai frāzi no lietotāja pie klaviatūru.
Un tad tur ir šis lieta here-- PrintName.
>> Tagad PrintName nav funkcija, kas nāk ar C.
Tas nav standarta io.h.
Tas nav CS50.h.
Tas ir diezgan vienā failā.
Ievērojiet, ja es ritiniet uz leju a bit-- līnijas 25 līdz 27--
tas ir tikai skaists veids, komentējot savu kodu, izmantojot zvaigznes un slīpsvītras.
Tas ir multi-line komentēt, un tas ir tikai
mans apraksts zilā krāsā ko šī funkcija dara.
>> Jo līnijās 28 līdz 31, Esmu uzrakstījis super vienkāršu funkciju
kuru vārds ir PrintName.
Tas aizņem cik argumenti jūs teiktu?
Tik viens argument-- jo tur ir viens arguments uzskaitīti iekšpusē iekavās.
Kura tips ir String.
Kas ir teikt PrintName ir kā melnā kaste
vai funkcija, kas notiek kā ieejas virkni.
>> Un vārds šī String ērti būs nosaukums.
Ne S, ne N, bet Vārds.
Tātad, ko tas PrintName darīt?
Tas ir jauki, vienkārši.
Tāpat kā vienu rindiņu koda printf, bet acīmredzot to
izdrukā "Sveiki," tik un tā.
Kur tik un tā nāk no argumenta.
>> Tagad tas nav milzīgs inovāciju šeit.
Tiešām, es esmu pieņēmis programmu, kas varētu ir rakstīts ar vienu rindiņu kodu
liekot to šeit, un maina to uz kaut
kas ietver dažas seši vai septiņi, vai arī tā rindas kods visu ceļu uz leju šeit.
>> Bet tas ir praktizē princips pazīstams kā abstrakcijas.
Veida encapsulating iekšpusē jauna funkcija, kas ir nosaukums, un labāk
tomēr šis nosaukums burtiski saka to, ko tā dara.
Es domāju printf--, ka tas nav Īpaši aprakstošs.
Ja es gribu, lai izveidotu puzzle gabals, vai I
vēlas izveidot funkciju kas drukā kādu vārdu,
skaistums to izdarīt ir tas, ka es varu tiešām
sniegt šo funkciju nosaukumu , kas apraksta to, ko tā dara.
>> Tagad tas notiek kādā ieguldījumu, kas Esmu patvaļīgi sauc vārds,
bet tas arī ir lieliski aprakstošs vietā, kas ir nedaudz vairāk
generic patīk S. and spēkā neesošu, tagad, tikai nozīmē,
ka šī funkcija nav rokas mani atpakaļ neko.
Tas nepatīk GetString ka burtiski rokas mani atpakaļ virkni
tāpat kā mēs to darījām ar papīra gabalu ar saviem klasesbiedriem pagājušajā nedēļā,
bet tas tikai ir blakusparādība.
Tas drukā kaut uz ekrāna.
>> Tātad beigās, dienā, ja es darīsim funkcija-0, ./function-0,
mēs redzam, ka tas prasa, lai manu vārdu.
Es tipa Dāvidu, un tā veidu ārā manu vārdu.
Ja es varu to darīt atkal ar Rob, tas notiek teikt "Hello, Rob."
Tik vienkārša ideja, bet varbūt ekstrapolēt no tā garīgi
ka jūsu programmas iegūtu nedaudz sarežģītāka,
un jūs vēlaties rakstīt rieciens kods un zvanu, ka code-- Atsaukties
ka code-- daži aprakstošs nosaukt piemēram PrintName,
C tas dod mums šo iespēju.
>> Lūk, vēl viens vienkāršs piemērs.
Piemēram, ja es atvērt failu no šodien aicināja return.c,
paziņojums, ko es esmu darījusi šeit.
Lielākā daļa no šī galvenā funkcija ir printf.
Es pirmo reizi patvaļīgi sāktu mainīgo sauc x ar numuru 2.
Tad es izdrukāt "x tagad % I "iet vērtības x.
Tāpēc es tikai saku to, kas tas ir.
>> Tagad es esmu tikai drosmīgi apgalvojot ar printf.
Es esmu cubing šo vērtību x, un es esmu darot zvanot funkciju
sauc kubs passing in x kā argumentu,
un pēc tam saglabājot produkciju ar mainīgo pati, x.
Tāpēc es esmu clobbering vērtību x.
Es esmu sevišķi svarīgi vērtība x ar neatkarīgi
rezultāts zvanot tas kubs funkcija ir.
Un tad es vienkārši izdrukāt dažas pūkains sīkumi šeit sakot, tas, ko es darīju.
>> Tātad, kas tad ir kubs?
Paziņojums, kas ir būtiski atšķirīgs šeit.
Es esmu devis funkciju nosaukums kā iepriekš.
Esmu norādījis nosaukumu argumentu.
Šoreiz tā sauc n nevis vārda, bet es varētu to nosaukt kaut ko es gribu.
Bet tas ir atšķirīgs.
Šī lieta pa kreisi.
Iepriekš tas bija tas, ko atslēgvārds?
Boys.
Tagad tas ir acīmredzami int.
>> Tātad, kas ir iespējams atņemt?
Tā kā spēkā neesošu nozīmē veida nebūtība, un tas bija noticis.
PrintName atgriezās neko.
Tas bija kaut kas, bet tas nav roku mani atpakaļ
kaut kas, ko es varētu likt uz kreisajā pusē vienādības zīmi
piemēram, es esmu darījusi šeit līnijas 22.
>> Tātad, ja es saku par 30 līniju, to, kas ir kas, iespējams, nozīmē,
par to, ko kubs dara man?
Yeah?
Tā atgriež skaitlim.
Tātad tas rokas mani atpakaļ, Piemēram, papīra gabals
, kurā tā ir rakstījis atbildi.
2 kubā vai 3 kubā, vai 4 cubed-- kāds man pagāja,
un kā es varu īstenot šo?
Nu, vienkārši n reizes n reizes n ir veids, kā es varētu kubs vērtību.
Tātad vēlreiz, super vienkārši ideja, bet demonstratīvs
tagad, kā mēs varam rakstīt funkcijas kas faktiski bija mūs
vērtības, kas varētu interesēt.
>> Apskatīsim vienu pēdējo piemēru šeit sauc funkciju vienu.
Šajā piemērā, tas sāk lai iegūtu vairāk pārliecinoša.
Tātad funkcijas vienā, šis program-- paziņojums galu galā
aicina funkciju sauc GetPositiveInt.
GetPositiveInt nav funkcija CS50 bibliotēkā,
bet mēs nolēmām mēs vēlētos, lai pastāvēt.
>> Tātad, ja mēs ritiniet uz leju vēlāk failā, paziņojums, kā man gāja par īstenošanas
saņemt pozitīvu int, un es saka, tas ir vairāk pārliecinoši
jo tas ir pienācīgas līniju skaita kodu.
Tas ir ne tikai muļķīgi maz rotaļlieta programmu.
Tas ir faktiski ieguva dažas kļūdas pārbaudi un darīt kaut ko noderīgu.
>> Tātad, ja jūs esat nav redzējis walkthrough video, kas mums ir iebūvēti pset1,
zinu, ka tas ir veids cilpa C, līdzīga garā
uz lietiskais Scratch veidus var darīt.
Un to saka, ka to izdarītu.
Izdrukāt šo out.
Tad iet uz priekšu un iegūt N- iegūt int, un uzglabāt to n,
un glabāt darīt to atkal un atkal, un atkal tik ilgi, kamēr n ir mazāks par vienu.
>> Tātad n būs mazāks par vienu tikai tad, ja cilvēks ir nesadarbojas.
Ja viņš vai viņa ir rakstīt ar 0 vai -1 vai -50,
šis cilpa gatavojas glabāt izpildot atkal un atkal.
Un galu galā paziņojums, es vienkārši atgriezties vērtību.
Tāpēc tagad mums ir funkcija kas būtu esam bijis jauki
ja CS50 varētu īstenot CS50.h un CS50.c jums,
bet šeit mēs varam tagad īstenot šo sevi.
>> Bet divi komentāri par dažiem galvenajiem detaļas.
One-- kāpēc es apliecinu int n, vai jūs domājat, on line 29
nevis tikai dara šo šeit, kas ir
vairāk atbilst tas, ko mēs izdarījām pagājušajā nedēļā?
Yeah?
Labs doma.
Tātad, ja mēs būtu nodot to šeit, tas ir it kā mēs
glabā atzīstot to atkal un atkal.
Tas jau pats par sevi ir nav problemātiski per se,
jo mums ir nepieciešama tikai vērtība vienreiz un pēc tam
Mēs ejam, lai iegūtu jaunu anyway.
Bet laba doma.
Yeah?
>> Aizvērt.
Tāpēc, ka es esmu deklarēts n gada līnija 29 ārpus cilpas,
tas ir pieejams visā tas visu funkciju.
Nevis citas funkcijas, jo n ir vēl iekšā no šiem cirtaini
breketes šeit.
So-- pārliecināts.
>> Tieši tā.
Tātad, tas vēl vairāk punktu.
Ja mēs tā vietā deklarēta n tepat 32 līniju,
tas ir problemātiska, jo minējums kur vēl man ir nepieciešams, lai piekļūtu to?
On line 34, un vienkāršs noteikums īkšķis ir
ka jūs varat izmantot tikai mainīgais iekšpusē jaunākajiem cirtaini lencēm
, kurā jūs to pasludināja.
>> Diemžēl, līnija 34 ir viena līnija pārāk vēlu,
jo es esmu jau slēgts cirtaini lencēm par 33 tiešsaistē
, kas atbilst cirtaini lencēm uz 30 līnijas.
Un tā tas ir veids, kā pateikt ka šis mainīgais int ir scoped,
tā sakot, tikai iekšā Šo cirtaini lencēm.
Tā vienkārši neeksistē ārpus tām.
>> Tik tiešām, ja es to izdarītu nepareizi, ļaujiet man ietaupīt kodu
jo tas is-- nepareizi rakstīts.
Ļaujiet man iet uz priekšu un darīsim funkcija-1, un notice-- kļūda.
Izmantošana nedeklarētas identifikators n on line 35, kas ir tepat.
Un, ja mēs ritinātu uz augšu turklāt, vēl viens.
Izmantot nedeklarēto identifikators n tiešsaistē 34.
>> Tātad kompilatoru, šķindēt, ir pamanījusi, ka to tikai
nepastāv, pat ja skaidri tas ir tur vizuāli.
Tik vienkārši noteikt to deklarējot to tur.
>> Tagad ļaujiet man atrodiet top faila.
Kas lec ārā pie jums kā ir nedaudz atšķirīgs
No sīkumi mēs paskatījās pagājušajā nedēļā?
Ne tikai man ir vārds, ne tikai to Man ir dažas asas ietilpst līdz top,
Man ir kaut kas es esmu zvana prototipu.
Tagad, izskatās briesmīgi līdzīgi tam, ko mēs tikko redzējām pirms brīža uz līnijas 27.
>> Tātad pieņemsim secināt no dažādu kļūdas ziņojums, kāpēc es esmu darījis.
Ļaujiet man iet uz priekšu un izdzēst šos līnijas tur.
Un tāpēc mēs zinām, neko par prototipu.
Pārtaisīt šo failu.
Padarīt funkciju vienu.
Un tagad, damn, četras kļūdas.
Pieņemsim ritiniet līdz pirmajam.
>> Netiešs deklarācija funkciju saņemt pozitīvu int nav spēkā C99.
C99 nozīmē tikai 1999. versija valodas
C, kas ir tas, ko mēs patiesi izmantot.
Tātad, ko tas nozīmē?
Nu C- precīzāk C compilers-- ir diezgan mēms programmas.
Viņi tikai zina, kas jūs esat stāstīja viņiem, un tas ir
faktiski tematiskā no pagājušajā nedēļā.
>> Problēma ir tā, ka, ja es dodos par īstenošanas vārdu šeit,
un es zvanu funkciju sauc GetPositiveInt šeit on line 20,
ka funkcija tehniski nav pastāvēt līdz kompilators redz līniju 27.
Diemžēl, kompilators ir darot lietas top, uz leju, pa kreisi, pa labi,
tāpēc, ka nav redzējis īstenošana GetPositiveInt,
bet redz jūs mēģināt to izmantot šeit,
tas ir tikai gatavojas bail-- bļaut Jums ar kļūdu message-- varbūt
noslēpumains, un faktiski nav sastādīt failu.
>> Tik tā saukto prototips up šeit ir, protams, lieks.
Burtiski, es devos uz leju šeit un es kopēt un ielīmēt to, un es to šeit.
Void būtu pareizi, tāpēc mēs burtiski kopēt un ielīmēt to šoreiz.
Es burtiski nokopēt un ielīmēt to.
Tiešām tāpat kā, piemēram, maizes izstrādājumiem.
>> Maz pavediens kompilatoru.
Es nezinu, ko tas dara vēl, bet es esmu sola jums
ka tā pastāvēs galā.
Un tas ir iemesls, kāpēc šī LINE in līnija 16-- beidzas ar semikolu.
Tas ir lieks pēc konstrukcijas.
Jā?
>> Ja Jums nav saistīt savu bibliotēku līdz the-- oh, labs jautājums.
Sharp ietver header failu ieslēgumi.
Nepieciešams be-- būtu gandrīz vienmēr ir pašā augšā
no datnē similar-- par tieši tā paša iemesla dēļ, jā.
Jo standarta io.h ir burtiski līnija
kā šis, bet ar vārdu printf, un ar saviem argumentiem un tā atgriešanās veidu.
Un tā darot asas iekļaut līdz šeit, ko jūs darāt burtiski
ir nokopējot un ielīmējot saturu kāds cits rakstīja up top.
Tādējādi cluing savu kodu, lai Tas, ka šīs funkcijas, pastāv.
Yeah?
>> Absolūti.
Tik ļoti gudrs un pareizs risinājums būtu, jūs zināt, ko?
Es nezinu, kas prototips ir, bet es zinu
ja es saprotu, ka C ir tikai mēms un rethinks augšas uz apakšu.
Nu pieņemsim dot to, ko vēlas.
Pieņemsim samazināt šo kodu, ievietojiet to uz augšu top, un tagad push galvenais lejā.
Arī tas varētu atrisināt problēmu.
>> Bet jūs varētu ļoti viegli nākt klajā ar scenārijs, kas ir nepieciešams, lai izsauktu B,
un varbūt B aicina atpakaļ uz A. Šī ir kaut kas ko sauc rekursijas,
un mēs būsim atpakaļ uz to.
Un tas var vai nevar būt labs lieta, bet jūs varat noteikti
lauzt šo risinājumu.
>> Turklāt, es būtu apgalvo stilistiski,
it īpaši, ja jūsu programmas kļūt šo ilgi un šo ilgi,
tas ir vienkārši super ērts likt galveno augšpusē
jo tā ir lieta, visvairāk programmētāji gatavojas rūp.
Un tā tas ir nedaudz tīrāku, varbūt, darīt tā, kā
Es sākotnēji darīja ar prototipu vēl
lai gan tas izskatās mazliet lieks pēc pirmā acu uzmetiena.
Yeah?
Atvainojiet, jūs varat teikt, tas skaļāk?
>> Ja jūs pārslēgties atrašanās vietas īstenošana un prototips?
Tā ka ir labs jautājums.
Ja jūs atkārtoti deklarēt šo leju šeit, pieņemsim redzēt, kas notiek.
Tātad, ja es šo down šeit, jūs sakāt.
Ak, piedodiet.
Skaļāk?
Vēl skaļāk.
Ak, labs jautājums.
Vai tas nederīgu funkciju?
Jūs zināt, pēc visiem šiem gadiem, es nekad likts prototipu tam.
Tātad, pieņemsim do veikt funkciju-1 Pēc darām.
>> [Murminādami]
DAVID J. Malan: Ak, pagaidiet.
Mums joprojām ir likts viss up top.
Tātad, pieņemsim darīt šeit, ja es esmu saprast jūsu jautājumu pareizi.
Es esmu liekot visu, ieskaitot prototips iepriekš galvenais,
bet es esmu liekot prototipu zem īstenošanā.
>> Tātad, ja es veicu vienu, es saņemu atpakaļ error-- neizmantots mainīgais n.
Ak, tur.
Paldies.
Paskatīsimies, mēs atbrīvojamies no šīs.
Tas ir atšķirīgs bug, tāpēc pieņemsim ignorēt.
Pieņemsim tiešām ātri pārtaisīt šo.
>> Labi, tāpēc dati arguments nav pēc formāta String izmanto
N- ak, tas ir tāpēc, Es mainīts uz tiem šeit.
Nu labi, mēs zinām, kas atbilde gatavojas kuri paredzēti, viss labi, šeit mēs iet.
Ah, paldies par pozitīvo.
Nu labi, es būs noteikt šo kodu after-- ignorēt šo konkrēto kļūdu
jo tas was-- tā darbojas, ir atbilde.
>> Tātad tas nav pārrakstīt ko jūs esat tikko veikts.
Man ir aizdomas, kompilators rakstīts tādā veidā
ka tas ir ignorējot jūsu prototipu jo organismā, tā sakot,
no funkcija jau īstenoti augstāk.
Es būtu tiešām konsultēties rokasgrāmatu kompilatoru
saprast, ja tur ir kāds cits Ietekme, bet pēc pirmā acu uzmetiena
vienkārši mēģinot un eksperimentējot, šķiet, ka nekādas ietekmes.
Labs jautājums.
>> Tāpēc pieņemsim veidot uz priekšu tagad, pārvietojas prom no blakusparādībām, kas
Ir funkcijas, kas dara kaut ko līdzīgu vizuāli uz ekrāna ar printf,
bet neatgriežas vērtību.
Un funkcijas, kas ir atgriešanās vērtības, piemēram, mēs tikko redzēju dažas.
Mēs jau redzējām šo jēdzienu jomu, un mēs redzēsim, tas atkal un atkal.
Bet tagad, atkal, izmantot īkšķis
ka mainīgo var izmantot tikai tad, iekšpusē nesen atvēra
un slēgtas cirtaini bikšturi kā mēs redzēja konkrētajā piemērā.
>> Un, kā jūs norādījāt, ir ability--
jūs varētu atrisināt dažas no šīm problēmām liekot mainīgo globāli
pašā augšā faila.
Bet gandrīz visos gadījumos mēs skatiens pēc, ka,
un tiešām nav pat iet vērā, ka risinājums tagad.
Tātad tagad, Takeaway ir tas, ka mainīgie ir šo jēdzienu jomu.
>> Bet tagad aplūkosim vēl sausā veidā faktiski meklē
dažas diezgan interesants īstenošanas detaļas.
Kā mēs varētu pārstāvēt informāciju.
Un mēs jau paskatījās šajā pirmajā nedēļā klases.
Aplūkojot binaries, un atgādinot sev aiz komata.
>> Bet atceros no pagājušajā nedēļā, ka C ir dažādi datu veidi un ķekarus vairāk,
bet ļoti noderīga tiem tagad varētu būt tiem.
Char, vai raksturu, kas notiek ir viens baits, vai astoņi biti kopā.
Un, kas ir teikt, ka izmēram no char ir tikai viens baits.
Baits ir astoņi biti, tāpēc tas nozīmē, ka mēs varam pārstāvēt cik daudz rakstzīmes.
Cik burti vai simboli uz tastatūras
ja mums ir viens baitu vai astoņi biti.
Domāju, ka atpakaļ uz nedēļu nulles.
Ja jums ir astoņi biti, cik kopējās vērtības
jūs varat pārstāvēt ar modeļi nullēm un tiem?
One-- vairāk.
Tātad kopējā 256, ja jums sāk skaitīt no nulles.
Tātad, ja jums ir astoņas bits-- tādēļ, ja mēs bija mūsu bināro spuldzes šeit atkal,
mēs varētu pārvērst šos gaismas spuldzes un off jebkurā no 256 unikālu modeļiem.
>> Tagad tas ir mazliet problemātiska.
Ne tik daudz par angļu un romance valodas, bet, protams,
kad jūs iepazīstināt, lai Piemēram, Āzijas valodas, kas
ir daudz vairāk simbolus nekā, piemēram, 26 alfabēta burti.
Mums tiešām varētu būt vajadzīga vairāk nekā vienu baitu.
Un par laimi in pēdējos gados ir sabiedrības
pieņemtie citi standarti, kas izmanto vairāk nekā vienu baitu katru maksas.
>> Bet tagad ar C, noklusējuma ir tikai viens baits vai astoņi biti.
Skaitlis, tikmēr, ir četri baiti, citādi zināma kā 32 bitiem.
Kas nozīmē to, kas ir iespējams, lielākais numuru, mēs varam pārstāvēt ar int
acīmredzot?
Ar miljardu.
Tātad, tas ir četrus miljardus dot vai ņemt.
2 uz 32th varas, ja mēs uzņemties nekādu negatīvu skaitļus
un tikai izmantot visu pozitīvo skaitļi, tas ir četrus miljardus
dot vai ņemt iespējas.
Peldēt, tikmēr, ir atšķirīgs veids Datu tipa C. Tas ir vēl vairāki,
bet tas ir reāls skaitlis.
Kaut ar komata.
Un izrādās, ka C izmanto arī četri baiti
pārstāvēt peldoša komata vērtības.
>> Diemžēl cik peldošs punkta vērtības ir tur pasaulē?
Cik reāla numuri ir tur?
Tur ir bezgalīgs numurs, un šis jautājums
tur ir bezgalīgi daudz veseli skaitļi.
Tātad mēs esam jau veida rakt sev caurumu šeit.
Kuru acīmredzot computers-- at Vismazāk programmas rakstīts C uz them--
var ieskaitīt tikai kā augsta kā četrus miljardus dot vai ņemt,
un peldošā punkta vērtības var tikai acīmredzot
ir dažas ierobežots daudzums precizitāti.
Tikai tik daudz cipari pēc viņu komatu.
>> Jo, protams, ja jums ir tikai 32 biti,
Es nezinu, kā mēs ejam, lai iet par pārstāv reālu numbers-- iespējams
ar dažāda veida modeļiem.
Bet tur noteikti ierobežots skaits šādu modeļiem,
tāpēc arī šeit, tas ir problemātiski.
>> Tagad mēs varam novērst šo problēmu nedaudz.
Ja jūs neizmantojat peldēt, jūs varētu izmantot dubultā
C, kas dod jums astoņas baiti, kas ir veids, kā vairāk iespējamie modeļi nullēm
un ones.
Bet tas joprojām ir ierobežots, kas notiek būt problemātiska, ja jūs rakstīt programmatūru
grafikai vai iedomātā matemātiskās formulas.
Lai jūs varētu tiešām vēlaties saskaitīt lielāks nekā.
Sen long-- muļķīgi named-- Ir arī astoņas baiti vai 64 biti,
un tas ir divreiz tik ilgi, kamēr int, , un tas ir par ilgu veselam skaitlim.
>> Fun fact-- ja int ir četri baiti, cik ilgi ir garš C tipisku?
Arī četri baiti, bet ilgi ilgi ir astoņi baiti,
un tas ir vēsturisku iemeslu dēļ.
>> Bet takeaway tagad ir tikai, ka dati ir
tiks pārstāvēta computer-- kas ir fiziskā ierīce ar elektrību,
tas parasti braucot šie nullēm un ones--
ar gatavu daudzumu precizitāti.
Tātad, kāda ir problēma, tad?
>> Nu tur ir problēma gada skaitlim pārplūdes.
Ne tikai C, bet datoriem kopumā.
Piemēram, ja tas ir baitu vērts bit--
tādēļ, ja tas ir astoņi bit-- viss no kuriem ir numurs viens.
Kas numurs tas ir pārstāv, ja mēs pieņemam,
tas ir visas pozitīvās vērtības bināro?
>> 255, un tas nav 256, jo nulle ir zemākais skaits.
Tātad 255 ir augstākais viena, bet problēma
ir domāt, ka es gribēju pieauguma šo mainīgo, ka
izmanto astoņi biti kopā ja es gribu pieauguma to.
>> Nu, tiklīdz es pievienot viens visus šos ones,
Jūs varat iespējams iedomāties visually-- tikko piemēram, veicot vienu izmantojot decimals--
kaut kas notiek, lai plūst pa kreisi.
Un tiešām, ja es pievienot numuru viens tas, kas notiek binārā
ir tas, ka pārplūst atpakaļ uz nulli.
>> Tātad, ja jums ir tikai use-- nav int, bet viena baitu skaitīt skaitļu
programmā, ko default-- tiklīdz jums 250, 251, 252, 253, 254,
255-- 0 nāk pēc 255, kas, iespējams, nav ko
lietotājs gatavojas sagaidīt.
>> Tagad tikmēr peldošā komata pasauli, Jums ir arī līdzīga problēma.
Ne tik daudz ar lielāko number-- lai gan tas joprojām ir problēma.
Bet ar summu precizitātes ka jūs varat pārstāvēt.
Tātad, pieņemsim to apskatīt šo piemēru šeit arī no šodienas avota code--
peldēt-0.c.
>> Un paziņojums, tas ir super vienkārša programma, kas
vajadzētu acīmredzot izdrukāt kāda vērtība?
Ko jūs derēt tas notiek, lai drukātu pat ja tur mazliet jaunā sintakse
šeit?
Tik cerams 0.1.
Tātad ekvivalents viena desmitā tāpēc, ka es esmu dara 1 dalīts ar 10.
Es esmu uzglabājot atbildi mainīgajā sauc f.
Ka mainīgais ir tipa pludiņa, kurš ir atslēgvārds es tikko ierosināja pastāvēja.
>> Mēs esam nav redzējis šo pirms, bet Tas ir sava veida veikls veidā printf
precizēt, cik daudz ciparu jūs vēlamies redzēt pēc komata.
Tātad šis apzīmējums nozīmē tikai ka šeit ir vietturis.
Tas ir par peldošo punktu vērtību, un oh, starp citu,
parādīt to ar komata ar viens numurs aiz komata.
Tā, ka numurs Nozīmīgāko cipariem,
tā sakot, ka jūs varētu vēlēties.
>> Tāpēc ļaujiet man iet uz priekšu un darīt padarīt float-0, ./float-0,
un acīmredzot 1 dalīts ar 10, ir 0.0.
Tagad, kāpēc tas ir?
>> Nu atkal, dators ir, ņemot mani burtiski, un es esmu uzrakstījis 1
un es rakstīts 10, un veikt uzminēt, ko ir pieņemts datu tipu šiem diviem
vērtībām?
Int, tas ir tehniski kaut nedaudz atšķiras.
Tas ir parasti garš, bet tas ir galu galā neatņemama vērtība.
Ne peldošā punkta vērtība.
>> Kas ir teikt, ka, ja šī ir int, un tas ir int,
problēma ir tā, ka datoram nav spēja
līdz pat saglabāt šo komata.
Tātad, ja jūs 1 sadalīta līdz 10, izmantojot veselu skaitļu
gan skaitītājā, un saucējs, atbildei būtu jābūt 0,1.
Bet computer-- jo tie ir integers--
nezina, ko darīt ar 0,1.
>> Tātad, kas tas skaidri dara?
Tas ir tikai throwing to prom, un ko es esmu redzēt galu galā
ir 0.0 tikai tāpēc, ka es uzstāja, ka printf parādiet man vienu komata.
Bet problēma ir tā, ka, ja jums sadalīt vesels skaitlis ar skaitlim,
Jums būs get-- pēc definīcijas no C- vesels skaitlis.
Un tas nav gatavojas darīt kaut ko jauku un ērti
tāpat kārta to līdz tuvākā uz augšu vai uz leju.
Tas notiek, lai apcirpt viss aiz komata.
>> Tik vienkārši intuitīvi, to, kas ir iespējams noteikt?
Kas ir vienkāršākais noteikt šeit?
Yeah?
Tieši tā.
Kāpēc ne mēs tikai ārstēt, kā tie peldošā punkta vērtības efektīvi
pārvēršot tos pludiņiem vai dubultspēlē.
Un tagad, ja man darīt pludiņiem-0, vai, ja es sastādīt pludiņus-1,
kas ir identisks , kas bija tikai ierosināts.
Un tagad man pludiņiem-0, tagad man manu 0.1.
>> Tagad tas ir pārsteidzošs.
Bet tagad es esmu gatavojas darīt kaut nedaudz atšķiras.
Es esmu ziņkārīgs, lai redzētu, kas ir patiešām notiek zem motora pārsega,
un es esmu gatavojas izdrukāt šo , lai 28 zīmes aiz komata.
Es gribu, lai tiešām redzētu 0.1000-- infinite--
[Dzirdams] 27 nullēm pēc minētās 0,1.
>> Nu pieņemsim redzēt, ja tas ir ko es tiešām saņem.
Padarīt Pludiņš-0 pašu failu.
./floats-0.
Aplūkosim tuvāk par dramatisko atbildi.
Visu šo laiku, jūs esat bijis domāt 1 dalīts ar 10, ir 10%, vai 0.1.
Tas nav.
Vismaz tiktāl, ciktāl Datora bažas.
>> Tagad why-- Labi, ka ir pilnīgs meli 1 dalīts ar 10 ir 0.1.
Bet why-- kas nav takeaway šodien.
Tātad, kāpēc dators domā, atšķirībā mums visiem telpā,
ka 1 dalīts ar 10 ir reāli, ka traks vērtība?
Kas ir dators dara acīmredzot?
Kas tas ir?
>> Tas nav pārpildīts, per se.
Pārpildes ir parasti, kad jūs wrap ap vērtību.
Tas ir tas jautājums par neprecizitāti peldošā punkta vērtību
kur jums ir tikai 32 vai varbūt pat 64 bit.
Bet, ja tur ir bezgalīgs skaits reālā numbers--
numuri ar cipariem aiz komata un numuri thereafter-- protams
Jūs nevarat pārstāvēt visas no tām.
Tātad dators ir devis mums tuvākais mačs
līdz vērtībai, tas var pārstāvēt izmantojot ka daudz bitu uz vērtību, es tiešām gribu,
, kas ir 0,1.
>> Diemžēl, ja jums sākt darīt matemātiku, vai arī jūs
sākt iesaistot šos peldošs veida punktu vērtības svarīgu programs--
finanšu programmatūru, militārais software-- kaut
kur uztvere ir iespējams, ir diezgan svarīgi.
Un jūs sākat pievienojot numurus, piemēram, tas, un sākums
rādīt šo programmatūru ar ļoti lielām ieejām
vai daudz stundu vai partijas Dienu vai daudz gadu,
šie mazītiņas kļūdas protams, var pievienot līdz pat laika gaitā.
>> Tagad, kā malā, ja jūs esat kādreiz redzējis Supermens 3 vai Office Space
un jūs varētu atgādināt kā šie puiši nozaga
daudz naudas no sava datora izmantojot peldoša komata vērtības
un saskaitot maz pārpalikumiem, cerams, ka filma
Tagad ir lielāka jēga.
Tas ir tas, ko viņi bija atsaucoties uz šo filmu.
Fakts, ka lielākā daļa uzņēmumiem būtu neizskatās
pēc noteiktu skaitu aiz komata,
bet tie ir frakcijas centiem.
Tātad, jūs sākat pievienojot tos, sākat veikt daudz naudas
savā bankas kontā.
Tā ka ir Office Space paskaidroja.
>> Tagad diemžēl tālāk Office Space, tur
ir daži likumīgi nepatīkamas un nozīmīga ietekme
no šiem veidiem pamatā esošie dizains lēmumus,
un patiesi ir viens no iemesliem mēs izmantojam C gaitā
ir tā, ka jums patiešām ir šī zemes līdz izpratne par to, kā datorus darbu,
kā programmatūra darbojas, un nav ņemt kaut ko pašu par sevi saprotamu.
>> Un tiešām, diemžēl, pat ar ka pamata izpratne,
mēs cilvēkiem kļūdīties.
Un tas, ko es domāju, ka man dalīties, ir šī astoņu minūšu video šeit ņemts
no Modern brīnumiem epizode, kas ir izglītības izstāde par to, kā lietas strādā
ka krāsas divas bildes , kad nepareiza lietošana
un izpratne peldošā punkta vērtības
noveda pie daži būtiski žēl rezultāti.
Pieņemsim to apskatīt.
[Video atskaņošana]
-Mēs Tagad atgriežas "Engineering Katastrofas "par Modern Marvels.
Datori.
Mēs visi esam ieradušies akceptēt bieži nomākta problēmas, kas
got ar them-- bugs, vīrusiem, un programmatūra glitches-- mazajiem cenām
maksāt par ērtībām.
Bet augsto tehnoloģiju un lielu ātrumu militārās un kosmosa programmu pieteikumus,
mazākais problēma var tiks palielināts par katastrofu.
>> 4.jūnijā 1996 zinātnieki sagatavoja uzsākt bezpilota Ariane 5 raķeti.
Tas nesa zinātnisko satelīti izstrādātas
lai noteiktu, kā tieši Zemes magnētiskā lauka mijiedarbojas
ar saules vējiem.
Raķete tika uzbūvēta Eiropas Kosmosa aģentūra,
un jāpaceļ no tās objekta krastā Franču Gviānā.
>> -at Aptuveni 37 sekundes ievešanu lidojums, viņi vispirms
pamanīju kaut kas notiek nepareizi.
Ka sprauslas tika šarnīra tādā veidā viņi tiešām nevajadzētu.
Aptuveni 40 sekundes iekļaušanu lidojuma skaidri transportlīdzeklis bija nepatikšanas,
un tas ir tad, kad viņi lēmums to iznīcināt.
Diapazons drošības virsnieks, ar milzīgas iekšām, nospiedis pogu
un uzspridzināja raķeti pirms tā varētu kļūt apdraudēt sabiedrisko drošību.
>> -Šo Bija jaunava reiss no Ariane 5,
un tās iznīcināšana ņēma vietu, jo plaisāt
iestrādāta raķete programmatūras.
-The Problēma par Ariane bija tas, ka tur
bija vairāki, kas vajadzīgs 64 biti izteikt,
un viņi gribēja, lai pārvērstu tā uz 16-bitu skaitu.
Viņi pieņēma, ka skaitu nekad bija būs ļoti liels.
Ka lielākā daļa no šiem cipariem ir 64-bitu skaits bija nulles.
Viņi bija nepareizi.
>> -The Nespēja viena programmatūru pieņemt
veidu skaita, ko radīja vēl bija pie saknes neveiksmi.
Programmatūras izstrāde bija kļuvusi ļoti dārgi daļa no jaunās tehnoloģijas.
Ariane 4 raķete bija bijusi ļoti veiksmīga.
Tik daudz programmatūras izveidots tas tika izmantots arī Ariane 5.
>> -The Pamatproblēma bija tas, ka Ariane 5.
Tika faster-- paātrināta ātrāk, un programmatūra nebija jāatskaitās par to.
>> -The Iznīcināšana raķete bija milzīgs finanšu katastrofa.
Viss dēļ minūšu programmatūras kļūda.
Bet tas nebija pirmais laika datu pārveides problēmas
bija mocīja modernas raķešu tehnoloģijas.
>> -In 1991.gadā ar sākuma pirmā Persijas līča kara,
Patriot raķešu piedzīvoja līdzīga veida
no skaits konversijas problēmu.
Un kā rezultātā 28 people-- 28 Amerikāņu soldiers-- tika nogalināti,
un apmēram simts citi ievainoti.
Kad Patriot, kas bija paredzēts lai aizsargātu pret ienākošo Scuds,
neizdevās šautu raķeti.
>> -Kad Irāka iebruka Kuveitā, un Amerikā uzsāka Desert Storm 1991 gada sākumā,
Patriot raķešu baterijas tika izvietoti aizsargāt Saūda Arābiju un Izraēlu
No Irākas traukties raķešu uzbrukumiem.
Patriot ir ASV vidēja darbības rādiusa zeme-gaiss sistēmas
ražojis Raytheon uzņēmums.
>> -The Lielums Patriot Interceptor itself--
tas ir apmēram apmēram 20 pēdu garš, un tas sver aptuveni 2000 mārciņas.
Un tā veic kaujas galviņu aptuveni, Es domāju, ka tas ir apmēram 150 £.
Un kaujas galviņu pati augstu sprādzienbīstams, kas
ir fragmenti ap viņu.
Tātad korpusu kaujas galviņu ir paredzēts, lai darbotos kā Buckshot.
>> -aizsargāto Raķetes tiek veiktas četri vienu konteineru,
un tiek transportēti ar puspiekabi piekabi.
>> -The Patriot pretraķešu sistēma iet atpakaļ vismaz 20 gadus tagad.
Tā sākotnēji tika izstrādāta kā gaisa aizsardzības raķete
atvašu nosaka ienaidnieka lidmašīnas.
Pirmajā Līča kara ja šis karš nāca,
armija vēlējās izmantot, lai atvašu nosaka Scuds, nevis lidmašīnas.
Irākas Gaisa spēki bija ne tik daudz problēmu,
bet armija bija noraizējies par Scuds.
Un tā viņi mēģināja uzlabot Patriot.
>> -Intercepting Ienaidnieks raķešu brauc Mach 5
bija būs izaicinājums pietiekami.
Bet, kad Patriot steidzās ekspluatācijā,
armija nebija informēta par Irākas modifikācija, kas
izteica savu scuds gandrīz iespējams tā.
>> -Kas Noticis Vai Scuds ka tika nāk bija nestabilas.
Viņi bija nestabils.
Iemesls tam bija arī Iraqis-- lai iegūtu 600 kilometru out
no 300 kilometru attāluma missile-- paņēma svaru no priekšējā kaujas galviņu,
un izgatavoti kaujas galviņu vieglāks.
Tāpēc tagad Patriot ir mēģināt nākt pie Scud, un lielākā daļa no LAIKU_
lielākā daļa LAIKU_ tas vienkārši lidot ar Scud.
>> -Kad Patriot sistēmas operatoru sapratu Patriot sasniegusi savu mērķi,
viņi uzsprāgt Patriot ir kaujas galviņu lai izvairītos no iespējamiem negadījumiem, ja tas
tika atļauts krist uz zemes.
>> -Tas Bija tas, ko lielākā daļa cilvēku redzēja kā lielie fireballs debesīs,
un pārprot kā pārtver no traukties kaujas galviņām.
>> -Although Naktī debesis, patrioti izrādījās veiksmīgi iznīcinot
Scuds pie Dhahran tur varētu būt nav kļūda par savu sniegumu.
Tur Patriot radaru sistēma zaudējis dziesmu par ienākošu Scud
un nekad uzsāka dēļ ar programmatūras plaisāt.
>> Tas bija izraēliešiem, kurš pirmais atklāja ka ilgāk sistēma bija,
lielāks laiks neatbilstība kļuva.
Sakarā ar pulksteni iegulto in sistēmas datorā.
>> -Par Divas nedēļas pirms traģēdija Dhahran,
izraēlieši ziņoja Aizsardzības departaments
ka sistēma zaudēt laiku.
Pēc apmēram astoņas stundas gada darbojas, viņi pamanīja
ka sistēma ir kļuvusi ievērojami mazāk precīza.
Aizsardzības departaments reaģēja, stāsta visi Patriot baterijas
ne atstāt sistēmas uz ilgu laiku.
Viņi nekad nav teicis, ko ilgu laiku bija.
8 stundas, 10 stundas, tūkstoš stundas.
Neviens nezināja.
>> -The Patriot baterijas izvietoti pie kazarmām
pie Dhahran un tās kļūdaina iekšējo pulkstenis bija par vairāk nekā 100 stundas
naktī 25 februārī.
>> -Tas Kāpurķēžu laiku ar precizitāti no aptuveni desmito daļu no sekundes.
Tagad desmitā daļa sekundes ir interesants numurs
jo to nevar izteikta binārā tieši tā, kas
nozīmē, ka tas nevar izteikt tieši jebkurā mūsdienu digitālā datora.
Tas ir grūti noticēt, bet izmantot to kā piemēru.
>> Paņemsim numurs vienu trešdaļu.
Vienu trešdaļu nevar būt izteikta komata precīzi.
Viena trešdaļa ir 0.333 notiek uz bezgalību.
Nav veids, kā to darīt, ka ar absolūtā precizitāte ir aiz komata.
Tas ir tieši veida problēma kas notika Patriot.
Ilgāk sistēma skrēja, sliktāks laiks kļūda kļuva.
>> -Pēc 100 darba stundām, kļūda laikā bija tikai aptuveni viena trešdaļa
par sekundi.
Bet attiecībā uz mērķtiecīgi raķešu brauc Mach 5,
tas izraisīja uzskaites kļūda vairāk nekā 600 metriem.
Tas būtu fatāla kļūda karavīriem pie Dhahran.
>> -Ko Noticis ir Scud Atklāšanas ceremonijā atklāj agrīnā brīdinājuma satelītiem,
un viņi zināja Scud tuvojās savā vispārējā virzienā.
Viņi nezināja, kur tas nāk.
Tagad tas bija līdz radara komponents Patriota sistēmas
aizstāvot Dhahran, lai atrastu un saglabātu līdzi ienākošo ienaidnieka raķešu.
>> -The Radara bija ļoti gudrs.
Tas tiešām izsekot pozīcija Scud
un tad paredzēt, kur tas droši vien būtu
Nākamreiz radara nosūtīja pulss out.
Ka sauca diapazons vārtiem.
>> -Tad Kad Patriot nolemj pietiekami daudz laika ir
nodota atgriezties un pārbaudīt nākamo vieta šajā atklāto objektu
tas iet atpakaļ.
Tad, kad tas devās atpakaļ uz nepareizi vietu, tad tas neredz objektu.
Un nolemj, ka nav objektu.
Ka tur bija viltus atklāšanas un tas pilieni dziesmu.
>> -The Ienākošo Scud pazuda no radara ekrāna,
un sekundes vēlāk, to ietriecās uz kazarmām.
Scud nogalināti 28.
Tas bija pēdējais atlaists pirmajā Persijas līča karā.
Traģiski, atjaunināta programmatūra ieradās rītausmā nākamajā dienā.
Programmatūra plaisāt bija bijis fiksēts, noslēgums
viena nodaļa nemierīgajā vēsture Patriot raķešu.
>> [END VIDEO PLAYBACK]
>> DAVID J. Malan: Tas ir tas CS50.
Mēs redzēsim tevi trešdien.
>> [Mūzikas atskaņošanai]