>> [MUSIC KUCHEZA]
DAVID J. Malan: All wa kulia.
Hii ni CS50, na hii ni mwanzo wa wiki mbili.
Kwa hiyo, acheni kuanza leo na mdudu.
mdudu, bila shaka, ni makosa katika mpango,
na utapata sana ukoo na dhana hii
kama wewe sijawahi iliyowekwa kabla ya. pset0 na sasa pset1.
Lakini hebu fikiria kitu rahisi kidogo kwa mara ya kwanza.
Mpango huu hapa kwamba mimi kurusha pamoja katika mapema,
na mimi kudai kwamba hii lazima magazeti Nyota 10 juu ya screen kutumia printf,
lakini ni inaonekana Buggy katika baadhi ya njia.
>> Kutokana na kwamba vipimo kwamba ni lazima magazeti nyota 10,
lakini haina inaonekana, nini ingekuwa wewe kudai ni mdudu?
Yeah?
Hivyo ni mbali na kosa moja, na je, maana na kwamba?
OK.
Excellent.
Hivyo tumekuwa maalum kuanza thamani ya sifuri kwa i,
na tumekuwa maalum n thamani ya 10, lakini tumekuwa kutumika chini ya au sawa na.
Na sababu kwamba hii ni mbili wahusika na si tu alama moja,
kama katika kitabu math, ni kwamba huna
njia ya kuonyesha tabia moja sawa.
>> Hivyo kwamba maana chini ya, lakini kama wewe kuanza kuhesabu saa sifuri,
lakini wewe kuhesabu njia yote juu kupitia na kuwa sawa na 10,
wewe ni bila shaka kwenda mambo kuhesabu 11 katika jumla.
Na hivyo wewe ni kwenda magazeti nyota 11.
Hivyo kile anaweza kuwa fix kwa hili?
Yeah?
>> Hivyo tu kurekebisha chini ya au sawa na tu kuwa chini ya,
na kuna, mimi kudai, labda ufumbuzi mwingine, pia.
Nini kinaweza kingine unaweza kufanya?
Yeah?
>> Hivyo kuanza ni sawa na ni kwa 1, na kuondoka chini ya au sawa na.
Na kusema ukweli mimi bila kudai kwamba, kwa kawaida ya binadamu,
hii pengine ni zaidi moja kwa moja.
Kuanza kuhesabu katika 1 na kuhesabu up kwa njia ya 10.
Kimsingi kufanya nini.
>> Lakini ukweli ni katika programu, kama tumeona,
wanasayansi wa kompyuta na programmers katika ujumla wake huwa kuanza kuhesabu katika sifuri.
Na hivyo hiyo ni faini mara moja kupata kutumika yake.
Hali yako mapenzi kwa ujumla kuwa kitu kama chini ya.
Hivyo tu mantiki makosa kwamba tunaweza sasa
kurekebisha na hatimaye recompile hii na kupata 10 tu.
>> Vizuri jinsi kuhusu hili mdudu hapa?
Hapa, tena, mimi kudai kwamba nina Lengo la uchapishaji 10 stars--
moja kwa kila mstari wakati huu, lakini haina.
Kabla ya sisi kupendekeza nini fix ni, nini hii
magazeti kuibua kama ningekuwa kukusanya na kukimbia mpango huu unafikiri?
Yeah?
>> Star.
Hivyo nyota wote juu ya mstari huo ni nini nikasikia,
na kisha mpya line tabia.
Basi hebu kujaribu kuwa.
Hivyo kufanya buggy-1, kuingia, na mimi kuona amri Clang
kwamba sisi aliyesema kuhusu wakati wa mwisho.
./buggy-1, na kwa kweli mimi kuona nyota zote 10 juu ya mstari huo hata mimi kudai
katika vipimo yangu tu maoni atop kificho kwamba mimi nia ya kufanya kwa moja
line.
Lakini hii inaonekana haki.
>> Sasa line 15 inaonekana kama mimi nina uchapishaji nyota, na kisha mstari 16
inaonekana kama mimi nina uchapishaji mpya line tabia,
na wao uko wote wawili indented hivyo Mimi nina ndani ya kitanzi wazi.
Hivyo lazima si mimi kufanya nyota, mpya line, nyota, mstari wa mwezi, nyota, line mpya?
Ndiyo?
>> Yeah, tofauti na lugha kama Python, kama wewe ni ukoo,
indentation haina jambo na kompyuta.
Ni tu mambo ya binadamu.
Hivyo mstari wakati hapa nimekuwa zuliwa 15 na 16-- kwamba inaonekana nzuri,
lakini kompyuta haina huduma.
kompyuta wasiwasi kuhusu kweli kuwa braces curly
karibu mistari haya ya code.
>> Hivyo kwamba ni clear-- tu kama katika Scratch-- kwamba wale mistari miwili ya code
lazima ifanyike.
Kama mmoja wa wale njano Scratch puzzle vipande tena na tena na tena.
>> Hivyo sasa kama mimi re-kukimbia hii program-- ./buggy-2-- Hm.
Nina kosa sasa.
Je, mimi kusahau kufanya nini?
Yeah, hivyo sikuweza kukusanya yake.
Hivyo kufanya buggy-2.
Hakuna faili kama kwa sababu sikuwa na si kweli kukusanya toleo la pili.
Hivyo sasa ya kuvutia Undeclared variable-- si 2.
Sisi ni kufanya 1.
Kufanya buggy-1-- ./buggy-1-- na sasa kila mmoja wao ni juu ya mstari huo.
>> Sasa kuna ubaguzi kwa walidhani madai yangu hii
kwamba unahitaji braces haya curly.
Wakati ni kweli OK-- kama wameweza niliona katika sehemu au textbooks--
kwa saza braces curly?
Yeah?
>> Hasa.
Wakati kuna moja tu mstari wa kanuni kwamba wewe
wanataka kuhusishwa na kitanzi kama katika mfano wetu wa kwanza.
Ni kikamilifu halali kwa saza braces curly
tu kama aina ya urahisi kutoka compiler na wewe.
Yeah?
Swali nzuri.
Je, ni kuchukuliwa style kosa?
Tunataka promote-- kama katika CS50 style mwongozo, URL kwa ajili ya ambayo
ni katika pset1-- kwamba daima kutumia braces curly.
Hakika kama wewe ni mpya kwa programu.
Ukweli ni sisi siyo kwenda kuzuia wewe
kutoka kwa kufanya matumizi haya.
Lakini kama wewe ni kupata tu ndani ya swing wa mambo,
kabisa tu daima kutumia curly inakabiliwa na mpaka kupata hutegemea yake.
Swali nzuri.
>> Wote haki.
Hivyo kwamba basi alikuwa mdudu.
Angalau katika kitu haki rahisi.
Na bado unaweza kufikiri hii ni haki rudimentary, haki?
Hii ni aina ya wiki ya kwanza ya kuangalia lugha
kama, angalia mende yako ndani yake.
Lakini ukweli hizi ni kweli mwakilishi
baadhi ya matatizo pretty kutisha ambayo yanaweza kutokea katika ulimwengu wa kweli.
>> Hivyo baadhi yenu wanaweza kukumbuka kama wewe kufuata tech habari,
au labda hata hawakupata upepo wa huu katika Februari
ya mwaka huu siku za nyuma kwamba Apple alikuwa na alifanya kidogo ya makosa katika iOS zote mbili,
mfumo wa uendeshaji kwenye simu zao, na pia
Mac OS, mfumo wa uendeshaji juu ya kopyuta yao na Laptops.
Na wewe aliona vichwa vya habari kama hii.
Na baada ya hapo, Apple aliahidi kurekebisha mdudu hii,
na kwa haraka sana alifanya kurekebisha katika iOS, lakini kisha hatimaye fasta katika Mac OS
kama vizuri.
>> Sasa hakuna hata mmoja wa vichwa haya peke yake kweli yatangaza nini tatizo la msingi ilikuwa,
lakini mdudu alikuwa hatimaye kupunguzwa kwa mdudu katika SSL, soketi salama safu.
Na hadithi muda mfupi, hii ni programu
kwamba browsers wetu na wengine programu kutumika kufanya nini?
>> Kama mimi alisema kuwa SSL ni wanaohusika, wakati wowote
kutembelea URL kwamba huanza na HTTPS, nini basi huenda SSL kuwa kuhusiana na?
Encryption.
Hivyo tutaweza majadiliano juu ya hii katika siku zijazo.
Encryption, sanaa ya scrambling habari.
>> Lakini hadithi muda mfupi, Apple wakati mwingine iliyopita alifanya makosa
katika utekelezaji wake wa SSL, programu ya kwamba hatimaye kutekeleza
URLs kama HTTPS au max uhusiano huko pia.
matokeo ya ambayo ni kuwa wako uhusiano inaweza uwezekano wa
kutekwa.
Na uhusiano wako walikuwa si lazima encrypted
kama alikuwa na baadhi guy mbaya katika kati ya wewe na tovuti marudio ambao
alijua jinsi ya kuchukua faida ya hii.
>> Sasa Apple hatimaye posted a kurekebisha kwa ajili ya hii hatimaye,
na maelezo ya kurekebisha yao ilikuwa hii.
Usafiri salama alishindwa kuthibitisha ukweli wa uhusiano.
Suala hilo kushughulikiwa na kurejesha kukosa hatua uthibitisho.
>> Hivyo hii ni mkono sana WAVY maelezo kwa tu kusema kwamba sisi Star up.
Kuna literally moja mstari wa kanuni kwamba alikuwa Buggy
katika utekelezaji wake wa SSL, na kama wewe kwenda online na kutafuta kwa ajili ya hii
unaweza kweli kupata awali chanzo code.
Kwa mfano, hii ni screen risasi ya tu sehemu ya faili haki kubwa,
lakini hii ni kazi inaonekana kuitwa SSL kuthibitisha ishara server kubadilishana muhimu.
Na inachukua rundo la hoja na pembejeo.
Na sisi ni si kwenda kuzingatia sana juu ya minutia huko,
lakini kama wewe kuzingatia kanuni ndani ya ya kwamba topmost function-- hebu
zoom katika juu ya hilo.
Unaweza mtuhumiwa tayari nini kosa nguvu
kuwa hata kama wewe huna wazo hatimaye nini wewe kuangalia.
Kuna aina ya makosa hapa, ambayo ni nini?
>> Yeah, mimi si kweli kama kuangalia ya mbili goto inashindwa.
Kusema ukweli, mimi si kweli kujua nini goto kushindwa maana yake, lakini baada ya kuwa wawili kati yao
nyuma kwa nyuma.
Hiyo tu aina ya rubs me kielimu njia sahihi,
na kwa kweli kama sisi zoom katika juu ya tu mistari hizo, hii ni C.
>> Hivyo mengi ya code Apple ni yenyewe imeandikwa katika C,
na hii inaonekana ni kweli equivalent--
si kwa kuwa indentation pretty version, lakini kama wewe kutambua ukweli
kwamba hakuna braces curly, nini Apple kweli aliandika mara kificho kwamba inaonekana
kama hii.
Hivyo nimekuwa zoomed nje na mimi tu fasta indentation katika akili
kwamba kama kuna hakuna braces curly, kwamba goto pili kushindwa kwamba katika njano
ni kwenda kutekeleza bila kujali.
Ni si kuhusishwa na kama hali juu yake.
>> Hivyo hata tena, kama huna kabisa kuelewa nini hii inaweza uwezekano wa
kuwa kufanya, kujua kwamba kila moja ya haya conditions-- kila moja ya mistari haya
ni hatua muhimu sana katika mchakato wa kuangalia
ikiwa data yako ni katika ukweli encrypted.
Hivyo kuruka mmoja wa haya hatua, si wazo bora.
>> Lakini kwa sababu tuna hii goto pili kushindwa katika njano,
na kwa sababu mara moja sisi aina ya aesthetically
hoja hiyo kwa upande wa kushoto ambapo mantiki ni kwa wakati huu, nini
hii haina maana kwa line wa kanuni chini kwamba goto pili
kushindwa unafikiri?
Ni daima kwenda kuwa skipped.
Hivyo gotos kwa ujumla juu ya kipaji kwa sababu sisi si kweli kwenda katika,
na kwa kweli katika CS50 sisi huwa si kufundisha hii goto taarifa,
lakini unaweza kufikiria goto kushindwa kama maana go kuruka
kwa baadhi ya sehemu nyingine ya kificho.
>> Kwa maneno mengine kuruka juu ya line hii ya mwisho kabisa,
na hivyo matokeo ya hili kijinga rahisi makosa kwamba mara tu
matokeo ya pengine mtu kuiga na pasting moja pia
mara nyingi ni kwamba nzima usalama wa iOS na Mac OS
mara katika mazingira magumu na kutekwa na wabaya kwa muda kabisa.
Hadi Apple hatimaye fasta huu.
>> Sasa kama baadhi ya wewe ni kweli mbio matoleo ya zamani ya iOS au Mac OS,
unaweza kwenda kwa gotofail.com ambayo ni tovuti ya kwamba mtu kuweka up
kimsingi kuamua programmatically
kama kompyuta yako bado ni katika mazingira magumu.
Na kusema ukweli, kama ni, pengine ni wazo nzuri
update simu yako au Mac yako katika hatua hii.
Lakini kuna, tu ushahidi wa jinsi kuthamini ngazi hizi chini
maelezo na haki mawazo rahisi unaweza kweli
kutafsiri katika maamuzi na matatizo ambayo
affected-- katika case-- hii mamilioni ya watu.
>> Sasa neno juu ya utawala.
Sehemu ya kuanza Jumapili hii ijayo.
Utapokea barua pepe na mwishoni mwa wiki kuhusu sehemu, ambapo kiwango
mchakato resectioning itaanza kama wameweza
barabara sasa una baadhi ya migogoro mpya.
Hivyo hii hufanyika kila mwaka, na sisi mapenzi ya malazi katika siku zijazo.
>> Ofisi ya hours-- kufanya kuweka jicho juu ya ratiba hii hapa.
Mabadiliko kidogo wiki hii, hasa wakati kuanza
na eneo, hivyo kushauriana kwamba kabla ya viongozi wa masaa ya ofisi
yoyote ya pili nne usiku.
Na sasa neno juu ya tathmini, hasa kama wewe kupiga mbizi katika tatizo
seti moja na kwingineko.
>> Hivyo kwa vipimo, haya ni kwa ujumla
shoka pamoja ambayo sisi kutathmini kazi yako.
Wigo inahusu nini kiwango code yako zana
makala required na vipimo yetu.
Kwa maneno mengine, ni kiasi gani cha kipande kuweka alifanya wewe bite mbali.
Je, kufanya theluthi yake, nusu yake, 100% ya hiyo.
Hata kama ni si sahihi, jinsi kiasi gani jaribio la?
Hivyo kwamba Ukamataji ngazi ya juhudi na kiasi
ambayo wewe kidogo off matatizo tatizo kuweka ya.
>> Correctness-- hii moja, kwa kiasi gani, ni code yako
sambamba na yetu specifikationer na bure ya mende.
Hivyo gani kazi kwa usahihi?
Kama sisi kuwapa baadhi ya pembejeo, je, ni kutupa pato kwamba sisi kutarajia?
Design-- sasa hii ni ya kwanza ya ndio hasa ubora,
au ndio ambayo yanahitaji hukumu binadamu.
Na hakika, hii ni kwa nini tuna wafanyakazi ya wenzake wengi kufundisha na bila shaka
wasaidizi.
Ni kwa kiwango gani ni yako code imeandikwa vizuri?
>> Na tena hii ni sana upimaji
kwamba kazi na wewe juu ya bi-directionally katika wiki ijayo.
Hivyo kwamba wakati wewe kupata si tu numeric alama, lakini pia
alama ya maandishi, au typed maoni, au kuandikwa maoni katika maneno ya Kiingereza.
Hiyo ni nini tutaweza kutumia kwa gari wewe kuelekea kweli kuandika code bora.
Na katika hotuba na sehemu, tutaweza kujaribu kwa uhakika out-- kama mara nyingi kama sisi can--
nini inafanya mpango si tu sahihi na functionally nzuri,
lakini pia vizuri iliyoundwa.
ufanisi zaidi inaweza kuwa, au hata nzuri zaidi inaweza kuwa.
>> Ambayo inaongoza sisi style.
Sinema hatimaye ni hukumu aesthetic.
Je, kuchagua mema majina kwa vigezo yako?
Je, indented code yako vizuri?
Je, ni kuangalia vizuri, na kwa hiyo, ni rahisi kwa binadamu mwingine
kusoma husika yako ya usahihi wake.
>> Sasa kwa ujumla kwa mitaala, sisi alama mambo haya juu ya tano kumweka wadogo.
Na napenda nyundo nyumbani uhakika kuwa watatu ni kweli nzuri.
Haraka sana kufanya folks kuanza kufanya hesabu.
Wakati wao kupata tatu nje ya tano juu ya usahihi kwa baadhi pset
na wanadhani damn, mimi kwenda 60% ambayo kimsingi ni D au E.
>> Hiyo si njia ya sisi kufikiri ya namba hizi.
tatu ni kweli nzuri, na kile sisi kwa ujumla kutarajia mwanzoni
ya muda mrefu ni kwamba kama wewe ni kupata rundo la three's-- labda michache
ya maonyesho, wanandoa wa fours-- au wawili-wawili wanandoa, wanandoa wa fours--
hiyo ni nafasi nzuri kuanza.
Na hivyo kwa muda mrefu kama sisi kuona zaidi trajectory baada ya muda,
wewe ni katika mahali hasa nzuri.
>> formula sisi kutumia kwa uzito mambo ni kimsingi
hii kwa mitaala, ambayo tu ina maana kwamba sisi
kutoa uzito zaidi kwa usahihi.
Kwa sababu ni mara nyingi sana usahihi kwamba inachukua muda zaidi.
Matumaini yangu sasa.
Wewe find-- angalau katika pset-- moja kwamba wewe
kutumia 90% ya muda wako kazi ya 10% ya tatizo.
>> Na kila kitu aina ya kazi ila kwa ajili ya mende moja au mbili,
na hao ni mende kwamba kuwalinda hadi mwishoni mwa usiku.
Hao ni wale aina ya kutoroka wewe.
Lakini baada ya kulala juu yake, au kuhudhuria masaa ya ofisi
au kuuliza maswali online, ni wakati kupata kwamba lengo 100%,
na kwamba ni kwa nini sisi uzito usahihi zaidi.
Kubuni kidogo kidogo, na style kidogo kidogo kuliko hivyo.
Lakini kuweka katika style mind-- ni labda rahisi
wa haya bite mbali kama per style mwongozo.
>> Na sasa, mbaya zaidi kumbuka juu ya uaminifu wa kitaaluma.
CS50 ina tofauti bahati mbaya ya kuwa uzalishaji mkubwa wa Ad Bodi
kesi karibu kila mwaka ya kihistoria.
Hii ni kwa sababu si ya wanafunzi kudanganya katika CS50 yoyote zaidi kuliko darasa nyingine yoyote,
lakini kwa sababu na asili ya kazi, ukweli kwamba ni za elektroniki,
ukweli kwamba sisi kuangalia kwa ajili yake, na kweli sisi ni kompyuta wanasayansi,
Naweza kusema sisi ni bahati mbaya nzuri sana katika kuchunguza yake.
>> Hivyo hii ina maana gani katika hali halisi?
Hivyo ni, kwa mitaala, falsafa bila shaka ya
kweli haina kuchemsha kwa kuwa na busara chini.
Kuna mstari huu kati ya kufanya kazi moja ya juu yako mwenyewe
na kupata kidogo ya msaada busara kutoka kwa rafiki,
na rent kufanya hivyo kazi kwa yako rafiki, au kutuma kwake code yako
hivyo kwamba yeye au yeye anaweza tu kuchukua au kukopa nje ya haki.
Na kwamba misalaba line kwamba sisi inayotolewa darasani.
>> Angalia, mitaala hatimaye kwa ajili ya mistari
kwamba sisi kuteka kama kuwa busara na tabia haina maana,
lakini ni kweli haina jipu chini ya kiini
ya kazi yako wanaohitaji kuwa yako mwenyewe katika mwisho.
Sasa kwa kuwa alisema, kuna heuristic.
Kwa sababu kama unaweza imagine-- kutoka masaa ya ofisi na kuonekana
na video tumekuwa umeonyesha hivyo far-- CS50
ni kweli maana ya kuwa kama shirikishi na kama vyama vya ushirika na kama kijamii
iwezekanavyo.
Kama shirikishi kama ni ukali.
>> Lakini pamoja na hayo, wakasema, heuristic, kama utaona katika mitaala,
ni kwamba wakati wewe ni kuwa na baadhi ya tatizo.
Una baadhi mdudu katika code yako kwamba haiwezi kutatua, ni busara kwa wewe
kuonyesha code yako kwa mtu mwingine.
rafiki hata katika darasa, rafiki ameketi karibu na wewe katika masaa ya ofisi,
au mwanachama wa wafanyakazi.
Lakini wanaweza kuonyesha si kanuni zao na wewe.
>> Kwa maneno mengine, kujibu kwa question-- yako
Mimi haja help-- si oh, hapa code wangu.
Tuangalie hii na kukisia kutokana na ni nini wewe.
Sasa, bila shaka, kuna njia wazi ya mchezo
mfumo huu ambapo mimi nitakuonyesha code yangu kabla ya kuwa na swali.
You show me yangu code yako kabla ya kuwa na swali.
Lakini kuona mtaala tena kwa maelezo ya finer ya ambapo mstari huu ni.
>> Tu sasa kuchora picha na kushiriki kama uwazi iwezekanavyo
ambapo sisi ni saa katika miaka ya hivi karibuni, hii ni idadi ya Ad Bodi ya kesi
kwamba CS50 imekuwa na juu ya kipindi cha miaka saba.
Pamoja na 14 kesi hii kuanguka hivi karibuni zaidi.
Katika suala la wanafunzi waliohusika, ilikuwa 20 baadhi ya wanafunzi isiyo ya kawaida
hii kuanguka nyuma.
Kulikuwa na kilele cha 33 wanafunzi baadhi ya miaka iliyopita.
Ambao wengi wao ni bahati mbaya tena hapa juu ya chuo.
>> Wanafunzi kushiriki kama asilimia ya darasa kihistoria umetofautiana kutoka 0%
kwa 5.3%, ambayo ni tu kusema hii ni kwa mwaka ni changamoto.
Na kuelekea mwisho kwamba, kile tunataka kufanya ni kufikisha moja
kwamba sisi dd-- tu FYI-- kulinganisha katika haki kwa wale wanafunzi ambao
ni kufuatia mstari ipasavyo.
Sisi kufanya kulinganisha wote sasa maoni juu ya ujumbe wa kila siku za nyuma
kutoka kipindi cha miaka mingi.
>> Tunajua pia jinsi ya Google karibu na kupata code hifadhi za seli
online vikao, majadiliano online, maeneo ya kazi online.
Kama mwanafunzi anaweza kupata hiyo, tunaweza hakika kupata kama kiasi sisi masikitiko kufanya.
Hivyo kile utaona katika mtaala ingawa ni kifungu majuto.
Mimi naweza kufanya kufahamu, na sisi wote ina
wafanyakazi baada ya kufanya bila shaka kama hii, au hii moja yenyewe baada ya muda,
hakika kujua ni kama wakati maisha anapata katika njia wakati una
baadhi usiku wa marehemu deadline-- si tu katika darasa hili,
lakini another-- wakati uko nimechoka kabisa, alisisitiza nje,
kuwa na idadi kupita kiasi ya mambo mengine ya kufanya.
Wewe kufanya wakati fulani katika maisha bila ya shaka mbaya, labda mwishoni mwa
usiku uamuzi.
>> Hivyo kwa mitaala, kuna kifungu hiki,
vile kwamba masaa kama ndani ya 72 ya kufanya baadhi uamuzi maskini, wewe mwenyewe juu yake
na kufikia nje kwangu na kimoja cha vichwa bila shaka ya
na tutakuwa na mazungumzo.
Sisi kushughulikia mambo ndani kwa matumaini
yake kuwa zaidi ya mafundisho muda au maisha ya somo,
na si kitu kwa ramifications hasa kuporomoka
kama unaweza kuona juu ya chati hizi hapa.
>> Hivyo hiyo ni tone kubwa sana.
Tusimame kwa chache tu sekunde kuvunja mvutano.
>> [MUSIC KUCHEZA]
>> DAVID J. Malan: zote haki, hivyo ni jinsi ni kwamba kwa segue?
Na mada ya leo ya msingi.
ya kwanza ambayo ni ya kufikirika tu.
Mwingine ambayo ni ya kwenda kuwa uwakilishi wa data, ambayo kusema ukweli
ni njia ya kweli kavu ya kusema jinsi gani tunaweza kwenda juu ya kutatua matatizo na kufikiri
kuhusu utatuzi wa matatizo?
Hivyo wameweza kuonekana katika Scratch, na wewe wameweza kuonekana labda tayari katika pset1 na C
kwamba wewe si tu wanaweza kutumia kazi, kama printf,
kwamba watu wengine katika kipindi cha miaka aliandika kwa ajili yenu.
Unaweza pia kuandika kazi yako mwenyewe.
>> Na hata kama unaweza kuwa na jambo hili katika C, na kusema ukweli katika pset1
wewe si kweli haja ya kuandika yako kazi mwenyewe kwa sababu problem--
wakati labda ngumu katika kwanza glance-- utaona
inaweza hatimaye kutatuliwa kwa si mistari yote kwamba wengi wa kanuni.
Lakini kwa kuwa alisema, katika suala ya kuandika kazi yako mwenyewe,
kutambua kwamba haina kutoa C wewe uwezo huo.
>> Mimi nina kwenda katika chanzo code ya leo, ambayo inapatikana tayari online,
na mimi nina kwenda mbele na wazi up programu inayoitwa kazi 0.C,
na katika kazi zero tutaweza kuona mambo kadhaa.
Katika mistari ya kwanza kwa njia ya 18 23 ni kazi yangu kuu.
Na sasa kwamba sisi ni mwanzo wa kusoma kificho kwamba sisi siyo kuandika juu ya kuruka,
lakini badala yake nimekuwa imeandikwa mapema au kwamba katika tatizo kuweka
tupate kupokea kuwa yameandikwa katika mapema.
njia nzuri ya kuanza kusoma code ya mtu mwingine
ni kuangalia kwa ajili ya kazi kuu.
Takwimu nje ambapo kuingia kwamba Suala ni kuendesha programu,
na kisha kufuata mantiki kutoka huko.
>> Hivyo mpango huu inaonekana prints jina yako ikifuatiwa na koloni.
Sisi kisha kutumia GetString kutoka maktaba CS50
kupata uzi, au neno au maneno kutoka kwa mtumiaji katika keyboard.
Na kisha kuna hii kitu here-- PrintName.
>> Sasa PrintName ni si kazi kuja na C.
Ni si katika kiwango io.h.
Ni si katika CS50.h.
Ni badala katika faili moja.
Taarifa kama mimi kitabu chini mistari bit-- 25 kwa 27--
ni njia tu pretty ya kutoa maoni code yako kwa kutumia nyota na mikwaju.
Hii ni multi-line maoni, na hii ni
maelezo yangu katika rangi ya bluu ya nini kazi hii haina.
>> Kwa sababu katika mistari 28 kupitia 31, Nimeandika kazi super rahisi
ambaye jina lake ni PrintName.
Inachukua wangapi hoja unaweza kusema?
Hivyo argument-- moja kwa sababu kuna moja Hoja waliotajwa ndani ya mabano.
aina ya ambayo ni String.
Ambayo ni kusema PrintName ni kama hii sanduku nyeusi
au kazi kwamba inachukua kama pembejeo kamba.
>> Na jina la Kamba kwamba conveniently itakuwa Jina.
Si S, si N, lakini Jina.
Kwa hiyo ni nini PrintName nini?
Ni nzuri rahisi.
Tu kama mstari mmoja wa code kwa printf, lakini inaonekana ni
prints nje "Hello," hivyo na hivyo.
Ambapo hivyo na hivyo linatokana na hoja.
>> Sasa hii si innovation kubwa hapa.
Kweli, nimekuwa kuchukuliwa mpango ambayo inaweza wamekuwa imeandikwa na line moja ya kanuni
kwa kuweka hii up hapa, na iliyopita kwa kitu
ambayo inahusisha baadhi sita au saba au hivyo mstari wa kanuni njia yote chini hapa.
>> Lakini ni kufanya mazoezi ya kanuni inayojulikana kama kufikirika tu.
Aina ya encapsulating ndani ya mpya kazi ambayo ina jina, na bora
lakini jina kwamba literally anasema nini anafanya.
I mean printf-- si kwamba hasa kina.
Kama mimi wanataka kujenga puzzle kipande, au kama mimi
wanataka kujenga kazi kwamba Prints jina la mtu,
uzuri wa kufanya hivyo ni kwamba kweli mimi
kutoa kazi ambayo jina kwamba inaeleza nini ni gani.
>> Sasa inachukua katika pembejeo kwamba Nimekuwa kiholela kuitwa jina,
lakini kwamba pia ni ajabu maelezo badala ya kuwa zaidi kidogo
generic kama S. Na batili, kwa sasa, ina maana tu
kwamba kazi hii haina mkono yangu nyuma ya kitu chochote.
Siyo kama GetString kwamba literally mikono yangu nyuma kamba
kama tulivyofanya na vipande vya karatasi na wanafunzi wako wiki iliyopita,
lakini badala yake tu ina athari upande.
Ni Prints kitu screen.
>> Hivyo mwisho wa siku, kama mimi kufanya kufanya kazi-0, ./function-0,
tutaweza kuona kwamba anauliza kwa jina langu.
Mimi aina David, na aina nje jina langu.
Kama mimi kufanya hivyo tena na Rob, ni kwenda kusema "Hello, Rob."
Hivyo wazo rahisi, lakini labda extrapolate kutoka hii kiakili
kwamba kama mipango yako kupata kidogo ngumu zaidi,
na unataka kuandika chunk ya kanuni na wito kwamba code-- waomba
kwamba code-- na baadhi ya maelezo jina kama PrintName,
C gani kumudu us uwezo huo.
>> Hapa ni mfano mwingine rahisi.
Kwa mfano, kama mimi kufungua faili kutoka leo kuitwa return.c,
taarifa na kile nimepata kufanyika hapa.
Wengi wa kazi hii kuu ni printf.
Mimi kwanza kiholela initialize x variable kuitwa kwa idadi 2.
Mimi kisha magazeti nje "x ni sasa % I "kupita kwa thamani ya x.
Hivyo Mimi tu kusema ni nini.
>> Sasa mimi nina tu kwa ujasiri wakidai kwa printf.
Mimi cubing kwamba thamani x, na mimi nina kufanya hivyo kwa wito kazi
kuitwa mchemraba kupita katika x kama hoja,
na kisha kuokoa pato katika variable yenyewe, x.
Hivyo mimi nina clobbering thamani ya x.
Mimi nina kuu thamani ya x na chochote
matokeo ya wito hii kazi mchemraba ni.
Na kisha mimi tu magazeti nje baadhi mambo fluffy hapa kusema nini mimi alivyofanya.
>> Hivyo basi ni nini mchemraba?
Taarifa nini kimsingi tofauti hapa.
Nimekupa kazi jina kama kabla.
Nimekuwa maalum jina kwa hoja.
Wakati huu ni kuitwa n badala ya jina, lakini mimi naweza kuiita kitu chochote nataka.
Lakini hii ni tofauti.
Jambo hili upande wa kushoto.
Hapo awali ilikuwa ni nini keyword?
Boys.
Sasa ni wazi int.
>> Basi nini labda kuchukua mbali?
Wakati kunaashiria utupu aina ya nothingness, na kwamba alikuwa kesi.
PrintName akarudi chochote.
Ni alifanya kitu, lakini hakuwa na mkono yangu nyuma
kitu ambacho mimi naweza kuweka juu ya upande wa kushoto wa ishara sawa
kama mimi tumefanya hapa juu ya line 22.
>> Hivyo kama mimi kusema katika juu ya line 30, nini kwamba pengine akimaanisha
kuhusu nini mchemraba gani kwa ajili yangu?
Yeah?
Ni anarudi integer.
Hivyo ni mikono yangu nyuma, kwa mfano, kipande cha karatasi
juu ya ambayo ameandika jibu.
2 cubed, au 3 cubed, au 4 cubed-- chochote mimi kupita katika,
na jinsi gani mimi kutekeleza hili?
Naam, tu n mara n mara n ni jinsi nipate mchemraba thamani.
Hivyo tena, super rahisi wazo, lakini demonstrative
sasa ni jinsi gani tunaweza kuandika kazi kwamba kwa kweli alikuwa na sisi nyuma
maadili ambayo inaweza kuwa ya riba.
>> Hebu tuangalie mfano mmoja mwisho hapa aitwaye moja ya kazi.
Katika mfano huu, ni kuanza kupata zaidi ya kulazimisha.
Hivyo katika kazi moja, hii ilani program-- hatimaye
wito kazi kuitwa GetPositiveInt.
GetPositiveInt ni si kazi katika maktaba CS50,
lakini tuliamua sisi ungependa kuwepo.
>> Hivyo kama sisi kitabu chini baadaye katika faili, taarifa jinsi nilikwenda kuhusu utekelezaji wa
kupata chanya int, na mimi kusema ni zaidi ya kulazimisha
kwa sababu hii ni heshima idadi ya mistari ya kificho.
Siyo tu silly kidogo toy mpango.
Ni kweli got baadhi ya kuangalia makosa na kufanya kitu muhimu zaidi.
>> Hivyo kama wewe hawajakiona walkthrough videos kwamba tuna iliyoingia katika pset1,
kujua kwamba hii ni aina ya kitanzi katika C, sawa katika roho
kwa aina ya mambo Scratch wanaweza kufanya.
Na kufanya anasema kufanya hivyo.
Magazeti hii nje.
Kisha kwenda mbele na kupata n-- kupata int na kuhifadhi katika n,
na kuendelea kufanya hivyo tena na tena na tena hivyo kwa muda mrefu kama n ni chini ya moja.
>> Hivyo n ni kwenda kuwa chini ya moja tu kama binadamu si kushirikiana.
Kama yeye au yeye ni kuandika katika 0 au -1 au -50,
kitanzi hii ni kwenda kuweka utekelezaji tena na tena.
Na hatimaye taarifa, mimi tu kurudi thamani.
Hivyo basi, tuna kazi kwamba ingekuwa tumekuwa nzuri
kama CS50 bila kutekeleza katika CS50.h na CS50.c kwa ajili yenu,
lakini hapa tunaweza sasa kutekeleza hili sisi wenyewe.
>> Lakini maoni mawili juu ya baadhi ya maelezo muhimu.
One-- kwa nini mimi kutangaza int n, unafikiri, juu ya mstari 29
badala ya kufanya tu hii hapa, ambayo ni
zaidi sambamba na nini tulifanya wiki iliyopita?
Yeah?
wazo nzuri.
Hivyo kama sisi walikuwa na kuiweka hapa, ni kana kwamba sisi
kuweka kutangaza ni tena na tena.
Kwamba katika yenyewe ni si tatizo, per se,
kwa sababu sisi tu haja thamani mara moja na kisha
sisi ni kwenda kupata moja mpya anyway.
Lakini wazo nzuri.
Yeah?
>> Close.
Hivyo kwa sababu nimekuwa alitangaza n juu ya line 29 nje ya kitanzi,
ni kupatikana katika kazi hii nzima.
Si kazi nyingine kwa sababu n ni bado ndani ya hizi curly
inakabiliwa na hapa.
So-- uhakika.
>> Hasa.
Hivyo hii ni hata zaidi kwa uhakika.
Kama sisi badala alitangaza n haki hapa kwenye mstari 32,
ni tatizo kwa sababu nadhani mahali pengine ambapo mimi haja ya kupata hiyo?
On line 34, na rahisi utawala wa kidole gumba ni
kwamba unaweza tu kutumia variable ndani ya hivi karibuni braces curly
katika ambayo wewe amekiri kuwa ni.
>> Kwa bahati mbaya, line 34 ni line moja kuchelewa mno,
kwa sababu nimekuwa tayari imefungwa brace curly juu ya line 33
kwamba sambamba na curly brace juu ya line 30.
Na hivyo hii ni njia ya kusema kwamba hii variable int ni scoped,
hivyo kusema, kwa ndani ya tu ya braces wale curly.
Ni tu haipo nje ya yao.
>> Hivyo kweli, kama mimi kufanya hivyo vibaya, basi mimi kuokoa code
kama ni is-- kimakosa maandishi.
Hebu kwenda mbele na kufanya kufanya kazi-1, na makosa notice--.
Matumizi ya Undeclared kitambulisho n juu ya line 35, ambayo ni haki hapa.
Na kama sisi kitabu juu zaidi, mtu mwingine.
Matumizi ya Undeclared kitambulisho n juu ya line 34.
>> Hivyo compiler, Clang, ni noticing kwamba ni tu
haipo ingawa wazi ni pale kuibua.
Hivyo fix rahisi ni kutangaza ni huko.
>> Sasa basi mimi kitabu kwa juu ya faili.
Nini anaruka nje saa wewe kama kuwa tofauti kidogo
na mambo sisi inaonekana katika wiki iliyopita?
Wala si mimi tu na jina, si tu kufanya Mimi na baadhi ya mkali ni pamoja na juu juu,
Nina jambo mimi nina wito mfano.
Sasa kwamba inaonekana awfully sawa na kile sisi tu kuona wakati iliyopita juu ya line 27.
>> Basi hebu infer kutoka mbalimbali ujumbe wa makosa kwa nini mimi tumefanya hii.
Hebu kwenda mbele na kufuta mistari haya huko.
Na hivyo sisi kujua chochote kuhusu mfano.
Remake faili hii.
Kufanya kazi moja.
Na sasa, damn, makosa manne.
Hebu kitabu juu kwa moja kwanza.
>> Kinachojitokeza tamko la kazi kupata chanya int ni batili katika C99.
C99 tu ina maana 1999 toleo la lugha
C, ambayo ni nini sisi ni kweli kutumia.
Hivyo hii ina maana gani?
Naam C-- na hasa zaidi C compilers-- ni mipango pretty bubu.
Wao tu kujua nini wameweza aliwaambia, na kwamba
kweli mada kutoka wiki iliyopita.
>> Tatizo ni kwamba kama mimi kwenda kuhusu utekelezaji wa jina up hapa,
na mimi simu kazi kuitwa GetPositiveInt hapa juu ya line 20,
kazi ambayo haina kitaalam kuwepo mpaka compiler anaona line 27.
Kwa bahati mbaya, compiler ni kufanya mambo ya juu, chini, kushoto, kulia,
hivyo kwa sababu ni hajapata kumwona utekelezaji wa GetPositiveInt,
lakini anaona wewe kujaribu kutumia it up hapa,
ni tu kwenda kwa bail-- yell saa wewe na makosa message-- labda
cryptic, na si kweli kukusanya file.
>> Hivyo kinachojulikana mfano up hapa ni admittedly redundant.
Literally, nilikwenda chini hapa na mimi kunakiliwa na pasted hii, na mimi kuweka it up hapa.
Void itakuwa sahihi zaidi, hivyo tutaweza literally nakala na kuweka wakati huu.
I literally kunakiliwa na pasted yake.
Kweli tu kama kama mkate chembe.
>> kidokezo kidogo compiler.
Sijui nini hii bado, lakini mimi nina kuahidi wewe
kwamba itakuwa kuwepo hatimaye.
Na kwamba ni kwa nini hii line-- katika line 16-- mwisho na semicolon.
Ni redundant na design.
Ndiyo?
>> Kama hakuwa na kiungo maktaba yako kwa the-- oh, swali zuri.
Sharp ni pamoja na inclusions header file.
Haja ya be-- lazima karibu daima kuwa saa ya juu sana
ya faili kwa ajili ya similar-- kwa hasa sababu hiyo hiyo, ndiyo.
Kwa sababu katika kiwango io.h ni literally line
kama hii, lakini kwa neno printf, na na hoja yake na kurudi aina yake.
Na hivyo kwa kufanya mkali ni pamoja na up hapa, nini wewe literally kufanya
ni kuiga na pasting yaliyomo ya mtu mwingine aliandika juu juu.
Hivyo cluing code yako katika ukweli kwamba kazi hizo kufanya kuwepo.
Yeah?
>> Kabisa.
Hivyo wajanja sana na sahihi ufumbuzi itakuwa, unajua nini?
Mimi sijui nini a mfano ni, lakini Mimi najua
kama mimi kuelewa kwamba C ni tu bubu na rethinks juu hadi chini.
Naam hebu kuwapa nini anataka.
Hebu kukata kwamba code, kuweka it up juu, na sasa kushinikiza kuu ya chini chini.
Hii pia itakuwa kutatua tatizo.
>> Lakini unaweza kwa urahisi sana kuja na mazingira ambayo A haja ya simu B,
na labda B wito nyuma A. Hii ni kitu kinachoitwa kujirudia,
na tutaweza kuja nyuma na kwamba.
Na wanaweza au si kuwa nzuri kitu, lakini unaweza dhahiri
kuvunja ufumbuzi huu.
>> Na zaidi ya hayo, napenda kudai stylistically,
hasa wakati mipango yako kuwa hii kwa muda mrefu na hii kwa muda mrefu,
ni tu super rahisi kuweka kuu saa ya juu
kwa sababu ni jambo la programmers ni kwenda huduma ya juu.
Na hivyo ni safi kidogo, arguably, kwa kufanya hivyo kwa njia
Mimi awali alifanya hivyo kwa mfano hata
ingawa inaonekana kidogo redundant katika mtazamo wa kwanza.
Yeah?
Sorry, unaweza kusema ni sauti?
>> Kama wewe kubadili maeneo ya utekelezaji na mfano?
Hivyo hiyo ni swali zuri.
Kama wewe re-kutangaza hii chini hapa, hebu angalia nini kinatokea.
Hivyo kama mimi kuweka chini hii hapa, wewe ni kusema.
Oh, sorry.
Louder?
Hata nguvu zaidi.
Oh, swali zuri.
Je, ni kubatilisha kazi?
Unajua, baada ya miaka yote haya, mimi na kamwe kuweka mfano baadaye.
Basi hebu kufanya kufanya kazi-1 baada ya kufanya hivyo.
>> [Muttering]
DAVID J. Malan: Oh, kusubiri.
Bado tuna kuweka kila kitu juu juu.
Basi hebu kufanya hili hadi hapa, kama mimi nina kuelewa swali lako kwa usahihi.
Mimi nina kuweka kila kitu, ikiwa ni pamoja na mfano juu kuu,
lakini mimi nina kuweka mfano chini ya utekelezaji.
>> Hivyo kama mimi kufanya moja, mimi nina kupata nyuma error-- outnyttjade variable n.
Oh, huko.
Asante.
Hebu angalia, sisi kujikwamua hii.
Hiyo ni mdudu tofauti, hivyo hebu kupuuza kwamba.
Hebu kweli haraka remake hii.
>> OK, hivyo hoja data si kutumiwa na String format
n-- oh, hiyo ni kwa sababu Mimi iliyopita kwa haya hapa.
Zote haki, sisi kujua nini jibu ni kwenda to-- yote ya haki, hapa sisi kwenda.
Ah, shukrani kwa ajili ya chanya.
Haki wote, mimi kurekebisha kanuni hii after-- kupuuza hii mdudu fulani
tangu hii was-- kazi ni jibu.
>> Hivyo hana overwrite nini umefanya tu kufanyika.
Mimi mtuhumiwa compiler imeandikwa katika namna
kuwa ni kupuuza mfano wako kwa sababu mwili, hivyo kusema,
ya kazi tayari unatekelezwa juu up.
Mimi ingekuwa kweli kushauriana mwongozo wa compiler
kuelewa kama kuna mtu mwingine yeyote maana, lakini katika mtazamo wa kwanza
tu kwa kujaribu na majaribio, inaonekana kuna kuwa hakuna madhara.
Swali nzuri.
>> Basi hebu yazua mbele sasa, kuhamia mbali na madhara ambayo
ni kazi ambayo kufanya kitu kama kuibua juu ya screen na printf,
lakini si kurudi thamani.
Na kazi ambayo kuwa na kurudi maadili kama sisi tu kuona wachache.
Sisi tayari aliona wazo hili la wigo, na tutaweza kuona hii tena na tena.
Lakini kwa sasa, tena, kutumia utawala wa kidole gumba
kwamba variable inaweza tu kutumika ndani ya hivi karibuni kufunguliwa
na kufungwa braces curly kama sisi aliona katika mfano kwamba fulani.
>> Na kama wewe alisema, kuna ability--
unaweza kutatua baadhi ya matatizo haya kwa kuweka variable kimataifa
saa sana juu ya faili.
Lakini katika karibu kesi zote tunataka frown juu kwamba,
na kwa kweli si hata kwenda ndani ya kwamba ufumbuzi kwa sasa.
Hivyo kwa sasa, takeaway ni kwamba vigezo na wazo hili la wigo.
>> Lakini sasa hebu tuangalie mwingine njia kavu ya kweli kuangalia
katika baadhi ya pretty kuvutia utekelezaji maelezo.
Jinsi sisi wanaweza kuwakilisha habari.
Na sisi tayari inaonekana saa hii katika wiki ya kwanza ya darasa.
Kuangalia binaries, na kujikumbusha ya decimal.
>> Lakini kukumbuka kutoka wiki iliyopita kwamba C ina aina mbalimbali data na mashada zaidi,
lakini ndio muhimu zaidi kwa sasa inaweza kuwa hizi.
char, au tabia, ambayo hufanyika kuwa Byte moja, au bits nane jumla.
Na kwamba ni kusema kwamba ukubwa ya char ni byte moja tu.
Byte ni bits nane, hivyo hii ina maana kwamba tunaweza kuwakilisha wahusika wangapi.
Jinsi barua nyingi au alama juu ya keyboard
kama tuna byte moja au bits nane.
Fikiria nyuma wiki sifuri.
Kama una bits nane, jinsi wengi maadili ya jumla ya
unaweza kuwakilisha na mifumo ya zeros na ndio?
One-- zaidi kuliko hiyo.
Hivyo jumla 256 kama wewe kuanza kuhesabu kutoka sifuri.
Hivyo kama una nane bits-- hivyo kama sisi alikuwa balbu wetu binary up hapa tena,
tunaweza kugeuka wale balbu mwanga juu ya na mbali katika yoyote ya 256 mifumo ya kipekee.
>> Sasa hii ni kidogo tatizo.
Si sana kwa lugha ya Kiingereza na romance lugha, lakini kwa hakika
wakati wewe kuanzisha, kwa mfano, lugha za Asia, ambayo
na alama mbali zaidi kuliko kama Barua 26 za alfabeti.
Sisi kwa kweli wanaweza kuhitaji zaidi ya Byte moja.
Na nashiriki katika miaka ya hivi karibuni ina jamii
iliyopitishwa viwango vingine kwamba matumizi ya Byte zaidi ya moja kwa malipo.
>> Lakini kwa sasa katika C, default ni tu Byte moja au bits nane.
integer, wakati huo huo, ni nne ka, inayojulikana kama 32 bits.
Ambayo ina maana nini kubwa iwezekanavyo simu tunaweza kuwakilisha na int
inaonekana?
Pamoja na bilioni.
Hivyo ni bilioni nne kutoa au kuchukua.
2 kwa nguvu 32th, kama sisi kudhani hakuna namba hasi
na tu kutumia yote mazuri namba, ni bilioni nne
kutoa au kuchukua uwezekano.
kuelea, wakati huo huo, ni aina tofauti ya data ya aina katika C. Ni bado ya simu,
lakini ni idadi halisi.
Kitu kwa uhakika.
Na zinageuka kuwa C pia hutumia ka nne
kuwakilisha yaliyo maadili uhakika.
>> Kwa bahati mbaya jinsi wengi yaliyo maadili uhakika ni huko katika dunia?
Jinsi wengi halisi idadi ni huko?
Kuna usio idadi, na kwa jambo hilo
kuna idadi ya usio wa integers.
Hivyo sisi ni tayari aina ya kuchimba wenyewe shimo hapa.
Ambapo inaonekana katika computers-- katika mipango angalau yaliyoandikwa katika C juu ya them--
unaweza tu kuhesabu kama juu kama bilioni nne kutoa au kuchukua,
na yaliyo maadili uhakika unaweza tu inaonekana
kuwa na baadhi ya kiasi kidogo cha usahihi.
Tu tatu wengi baada ya hatua yao decimal.
>> Kwa sababu, bila shaka, kama wewe tu 32 bits,
Sijui jinsi sisi ni kwenda kwenda juu anayewakilisha numbers-- halisi pengine
na aina tofauti ya mifumo ya.
Lakini kuna hakika finite idadi ya mifumo hiyo,
hivyo hapa, pia, hili ni tatizo.
>> Sasa tunaweza kuepuka tatizo kidogo.
Kama huna kutumia kuelea, unaweza kutumia mara mbili
katika C, ambayo inatoa wewe ka nane, ambayo ni chati njia zaidi uwezekano wa zeros
na ndio.
Lakini bado ni finite, ambayo ni kwenda kuwa tatizo kama wewe kuandika programu
kwa graphics au kwa dhana hisabati.
Basi unaweza kweli wanataka kuhesabu kubwa kuliko hiyo.
muda mrefu long-- stupidly named-- ni pia ka nane, au 64 bits,
na hii ni mara mbili kwa muda mrefu kama int, na ni kwa muda mrefu thamani integer.
>> Furaha fact-- kama int ni ka nne, muda gani ni ya muda mrefu katika C kawaida?
Pia ka nne, lakini ya muda mrefu ni ka nane,
na hii ni kwa sababu za kihistoria.
>> Lakini takeaway sasa ni tu data ambayo ina
kuwakilishwa katika computer-- hiyo ni kifaa kimwili na umeme,
ni kwa ujumla kuendesha gari wale zeros na ones--
kwa kiasi kidogo cha usahihi.
Hivyo tatizo ni nini basi?
>> Naam kuna tatizo ya integer kufurika.
Si tu katika C, lakini katika kompyuta kwa ujumla.
Kwa mfano, kama hii ni byte thamani bit--
hivyo kama hii ni nane bit-- wote ambayo ni namba moja.
Nini idadi ni hii anayewakilisha kama sisi kudhani
ni maadili yote mazuri katika binary?
>> 255, na si 256, kwa sababu zero ni idadi ya chini kabisa.
Hivyo 255 ni ya juu moja, lakini tatizo
ni kudhani kuwa nilitaka increment variable hii kwamba
ni kwa kutumia bits nane jumla kama nataka increment yake.
>> Naam kwa haraka kama mimi kuongeza moja kwa wote wa watu hao,
unaweza labda kufikiria visually-- tu kama kubeba moja kwa kutumia decimals--
kitu kinaendelea kati yake upande wa kushoto.
Na hakika, kama mimi kuongeza idadi ya moja kwa hii, kile kinachotokea katika binary
ni kwamba kufurika nyuma hadi kufikia sifuri.
>> Hivyo kama wewe tu use-- si int, lakini byte moja kwa kuhesabu integers
katika mpango, na default-- haraka kama kupata hadi 250, 251, 252, 253, 254,
255-- 0 inakuja baada ya 255, ambayo pengine ni nini
user ni kwenda kutarajia.
>> Sasa wakati huo huo katika hatua floating dunia, wewe pia kuwa na tatizo kama hiyo.
Si sana kwa number-- kubwa ingawa kwamba bado suala hilo.
Lakini pamoja na kiasi cha usahihi kwamba unaweza kuwakilisha.
Basi hebu tuangalie mfano huu hapa pia kuanzia leo chanzo code--
kuelea-0.c.
>> Na taarifa ni super mpango rahisi ambayo
lazima inaonekana magazeti nje thamani gani?
Je, wager hii ni kwenda magazeti ingawa kuna kidogo ya syntax mpya
hapa?
Hivyo hopefully 0.1.
Hivyo ni sawa na moja ya kumi kwa sababu mimi nina kufanya 1 kugawanywa na 10.
Mimi nina kuhifadhi jibu katika variable kuitwa f.
Variable kwamba ni ya aina kuelea, ambayo ni keyword I just mapendekezo kuwepo.
>> Tumekuwa si hii kuona mbele, lakini hii ni aina ya njia nadhifu katika printf
kutaja tarakimu ngapi wanataka kuona baada ya uhakika decimal.
Hivyo nukuu hii tu ina maana kwamba hapa ni placeholder.
Ni kwa ajili ya hatua yaliyo thamani, na oh, kwa njia,
kuonyesha kuwa na uhakika decimal pamoja na namba moja baada ya uhakika decimal.
Hivyo hiyo ni idadi ya tarakimu muhimu,
hivyo kusema, kwamba unaweza kutaka.
>> Hivyo basi mimi kwenda mbele na kufanya kufanya kuelea-0, ./float-0,
na inaonekana 1 kugawanywa na 10 ni 0.0.
Sasa kwa nini hii?
>> Naam tena, kompyuta ni kuchukua mimi literally, na Nimeandika 1
na mimi imeandikwa 10, na kuchukua nadhani nini ni kudhani data ya aina kwa wale wawili
maadili?
int, ni kitaalam kitu kidogo tofauti.
Ni kawaida kwa muda mrefu, lakini ni hatimaye thamani muhimu.
Si floating kumweka thamani.
>> Ambayo ni kusema kwamba kama hii ni int na hii ni int,
Tatizo ni kwamba kompyuta hana uwezo
hata kuhifadhi kwamba decimal uhakika.
Hivyo wakati wewe kufanya 1 kugawanywa kwa 10 kwa kutumia integers
kwa wote kadiri na denominator, jibu lazima 0.1.
Lakini kwa sababu computer-- wale ni integers--
hajui nini cha kufanya na 0.1.
>> Hivyo ni nini ni wazi kufanya?
Ni tu kutupa mbali, na nini mimi nina kuona hatimaye
ni 0.0 tu kwa sababu mimi alisisitiza kuwa printf show me moja decimal uhakika.
Lakini tatizo ni kwamba kama wewe kugawanya integer na integer,
utakuwa get-- kwa ufafanuzi ya C-- integer.
Na si kwenda kufanya kitu kizuri na conveniently
kama pande zote ni juu ya karibu moja juu au chini.
Ni kwenda butu kila kitu baada ya decimal.
>> Hivyo tu intuitively, nini pengine fix?
Nini rahisi fix hapa?
Yeah?
Hasa.
Kwa nini si sisi tu kutibu haya kama yaliyo maadili uhakika ufanisi
kumwelekeza katika ikifungwa au DOUBLES.
Na sasa kama mimi kufanya kufanya ikifungwa-0, au kama mimi kukusanya ikifungwa-1,
ambayo ni sawa na nini mara tu mapendekezo.
Na sasa mimi kufanya ikifungwa-0, sasa mimi kupata 0.1 yangu.
>> Sasa hii ni ajabu.
Lakini sasa mimi nina kwenda kufanya kitu kidogo tofauti.
Mimi nina curious kuona nini kweli kinachoendelea chini ya Hood,
na mimi nina kwenda kwa magazeti hii kufanyika kwa maeneo 28 decimal.
Nataka kweli kuona 0.1000-- infinite--
[Inaudible] zeros 27 baada ya kwamba 0.1.
>> Naam hebu angalia kama kwamba ni kile kweli kupata.
Kufanya ikifungwa-0 faili moja.
./floats-0.
Hebu zoom katika juu ya jibu makubwa.
Muda wote huu, wewe tumekuwa kufikiri 1 kugawanywa na 10 ni 10%, au 0.1.
Ni si.
Angalau hivyo mbali kama kompyuta ya wasiwasi.
>> Sasa why-- OK, hiyo ni kamili uongo 1 kugawanywa na 10 ni 0.1.
Lakini why-- kwamba ni si takeaway leo.
Sasa kwa nini kompyuta kufikiri, tofauti na sisi sote katika chumba,
kuwa 1 kugawanywa na 10 ni kweli kwamba thamani crazy?
Nini kompyuta kufanya inaonekana?
Nini hiyo?
>> Ni si kufurika, per se.
Kufurika ni kawaida wakati wewe wrap kuzunguka thamani.
Ni suala hili la kutokuwa sahihi katika hatua floating thamani
ambapo wewe tu 32 au labda hata kidogo 64.
Lakini kama kuna usio simu ya numbers-- halisi
idadi na pointi decimal na idadi thereafter-- hakika
huwezi kuwakilisha wao wote.
Hivyo kompyuta amewapa us mechi karibu
kwa thamani inaweza kuwakilisha kutumia kwamba bits wengi thamani mimi kwa kweli unataka,
ambayo ni 0.1.
>> Kwa bahati mbaya, kama wewe kuanza kufanya math, au wewe
kuanza kuwashirikisha aina hii ya yaliyo maadili kumweka katika programs-- muhimu
programu ya fedha, kijeshi software-- chochote
ambapo mtazamo ni pengine ni pretty muhimu.
Na wewe kuanza kuongeza namba kama hii, na kuanza
kuendesha programu kwamba na pembejeo kweli kubwa
au kwa ajili ya kura ya masaa au kura ya siku au kura ya miaka,
haya makosa kidogo kidogo hakika wanaweza kuongeza juu ya muda.
>> Sasa kama kando, kama wameweza milele kuonekana Superman 3 au ofisi nafasi
na unaweza kukumbuka jinsi wale guys aliiba
fedha nyingi kutoka kwa kompyuta zao kwa kutumia yaliyo maadili uhakika
na kuongeza up kidogo mabaki ya, hopefully kwamba movie
sasa hufanya akili zaidi.
Hii ni nini walikuwa inataja katika kwamba movie.
ukweli kwamba wengi makampuni bila kuangalia
baada ya idadi fulani ya maeneo decimal,
lakini hayo ni sehemu ndogo ya senti.
Hivyo kuanza kuongeza yao juu, kuanza kufanya mengi ya fedha
katika akaunti yako ya benki.
Hivyo hiyo ni Ofisi Space alielezea.
>> Sasa kwa bahati mbaya zaidi ya Ofisi Space, kuna
ni baadhi kihalali kumsumbua na madhara makubwa
wa aina hii ya kubuni maamuzi ya msingi,
na kwa kweli moja ya sababu sisi kutumia C katika mwendo
ni ili kweli kuwa nchi hii up uelewa wa jinsi ya kompyuta kazi,
jinsi programu ya kazi, na kufanya si kuchukua kitu chochote kwa nafasi.
>> Na hakika kwa bahati mbaya, hata kwa kuelewa kwamba msingi,
sisi binadamu kufanya makosa.
Na nini Nilidhani ningependa kushiriki ni hii video dakika nane hapa kuchukuliwa
kutoka kisasa Marvels episode, ambayo ni show elimu juu ya jinsi mambo kazi
kwamba rangi ya picha mbili ya wakati matumizi yasiyofaa
na uelewa wa yaliyo maadili uhakika
imesababisha baadhi ya muhimu bahati mbaya matokeo.
Hebu tuangalie.
[VIDEO avspelning]
-Sisi Sasa kurudi na "Engineering Maafa "juu ya kisasa Marvels.
Kompyuta.
Tumekuwa wote kuja kukubali matatizo mara nyingi frustrating kwamba
got na them-- mende, virusi, na programu glitches-- kwa bei ndogo
kulipa kwa ajili ya urahisi.
Lakini katika tech ya juu na mwendo wa kasi kijeshi na mpango nafasi maombi,
ndogo tatizo unaweza kutukuzwa katika janga.
>> Tarehe 4 Juni, 1996, wanasayansi tayari kuzindua unmanned Ariane 5 rocket.
Ni alikuwa amebeba kisayansi satelaiti iliyoundwa
kujua kwa usahihi jinsi Shamba interacts magnetic Dunia
na upepo nishati ya jua.
roketi ilijengwa kwa Space Agency Ulaya,
na lile mbali kutoka kituo yake katika pwani ya Kifaransa.
>> -At Kuhusu 37 sekunde ndani ya ndege, kwanza
niliona kitu ilikuwa kwenda vibaya.
Hiyo nozzles walikuwa swiveling katika njia ya wao kweli lazima si.
Karibu sekunde 40 ndani ya ndege, wazi gari alikuwa katika shida
na kwamba wakati wao alifanya uamuzi wa kuiharibu.
mbalimbali afisa usalama, na guts kubwa, taabu kifungo
na akapiga juu ya roketi kabla inaweza kuwa hatari kwa usalama wa umma.
>> -Hii Mara maiden safari ya Ariane 5,
na uharibifu wake alichukua mahali kwa sababu ya flaw
iliyoingia katika programu roketi.
-The Tatizo juu ya Ariane ni kwamba kulikuwa
ilikuwa ni idadi ambayo inahitajika 64 bits kwa kueleza,
na walitaka kubadilisha kwa 16-bit idadi.
Wao kudhani kwamba idadi kamwe kwenda kuwa kubwa sana.
Kwamba wengi wa wale tarakimu katika 64-bit idadi walikuwa zeros.
Walikuwa na makosa.
>> -The Kutokuwa na uwezo wa moja mpango wa programu kukubali
aina ya idadi yanayotokana na mwingine ulikuwa ndio mzizi wa kushindwa.
Programu ya maendeleo alikuwa kuwa sehemu ya gharama kubwa sana ya teknolojia mpya.
Ariane 4 roketi alikuwa imekuwa na mafanikio sana.
Sana ya programu iliundwa kwa ajili ya ilikuwa pia kutumika katika Ariane 5.
>> Tatizo -The ya msingi ni kwamba Ariane 5.
Mara faster-- kasi kasi, na programu alikuwa si waliendelea kwa ajili hiyo.
>> -The Uharibifu wa roketi ilikuwa kubwa maafa ya kifedha.
Wote kutokana na programu dakika makosa.
Lakini hii haikuwa kwanza wakati matatizo data uongofu
alikuwa kusumbuliwa teknolojia ya kisasa roketi.
>> -Katika 1991 na kuanza Vita ya Ghuba ya kwanza,
Patriot kombora uzoefu aina hiyo
ya tatizo ya simu kubadilika.
Na kama matokeo 28 people-- 28 Soldiers-- American waliuawa,
na watu karibu mia wengine kujeruhiwa.
Wakati Patriot, ambayo ilitakiwa kulinda dhidi ya Scuds zinazoingia,
alishindwa kwa moto kombora.
>> -Wakati Iraq walivamia Kuwait, na Amerika ya ilizindua Desert Storm katika mapema 1991,
Patriot kombora betri walikuwa uliotumika kulinda Saudi Arabia na Israeli
kutoka Iraq Scud mashambulizi kombora.
Patriot ni Marekani kati-mbalimbali uso-kwa-hewa mfumo
viwandani na kampuni Raytheon.
>> -The Ukubwa wa Patriot interceptor itself--
ni kuhusu takribani 20 miguu kwa muda mrefu, na uzani wa juu £ 2000.
Na hubeba warhead ya juu, Nadhani ni takribani £ 150.
Na warhead yenyewe ni kulipuka ya juu, ambayo
ina vipande karibu naye.
Hivyo casing ya warhead ni iliyoundwa na kutenda kama buckshot.
>> Makombora -The zinafanywa nne kwa chombo,
na ni kusafirishwa kwa trailer nusu.
>> -The Mfumo Patriot kupambana na kombora inakwenda nyuma angalau miaka 20 sasa.
Ni awali ilikuwa iliyoundwa kama hewa ulinzi kombora
kwa risasi chini ya ndege adui.
Katika Vita ya Ghuba kwanza wakati wa vita kwamba alikuja juu,
Army alitaka kuitumia risasi chini Scuds, si ndege.
Iraq Air Force mara si hivyo mengi ya tatizo,
lakini Jeshi alikuwa na wasiwasi kuhusu Scuds.
Na hivyo walijaribu kuboresha Patriot.
>> -Intercepting Adui kombora kusafiri saa Mach 5
alikuwa anaenda kuwa changamoto ya kutosha.
Lakini wakati Patriot alikimbizwa katika huduma,
Army hakuwa na ufahamu wa Muundo wa Iraq kwamba
alifanya Scuds yao karibu haiwezekani yake.
>> -Nini Kilichotokea ni kwamba Scuds walikuwa kuja katika walikuwa imara.
Walikuwa wobbly.
Sababu ya hayo ni Iraqis-- ili kupata 600 kilomita nje
300 wa kilomita mbalimbali missile-- alichukua uzito nje ya warhead mbele,
na alifanya warhead nyepesi.
Hivyo sasa Patriot ya kujaribu kuja katika Scud, na zaidi ya time--
idadi kubwa ya time-- ingekuwa tu kuruka kwa Scud.
>> -Baada Patriot mfumo wa kampuni barabara Patriot amekosa lengo lake,
wao detonated warhead Patriot ya ili kuepuka majeruhi iwezekanavyo kama ni
aliruhusiwa kuanguka chini.
>> -Kwamba Ilikuwa nini watu wengi aliona kama fireballs kubwa katika anga,
na kutoeleweka kama intercepts ya Scud warheads.
>> -Although Katika usiku anga, Patriots alionekana kuwa mafanikio kuharibu
Scuds, saa Dhahran kuna inaweza kuwa hakuna kosa kuhusu utendaji wake.
Kuna mfumo wa Patriot ya rada waliopotea wimbo wa Scud zinazoingia
na kamwe ilizindua kutokana na programu flaw.
>> Ilikuwa Israel ambao kwanza aligundua kwamba tena mfumo ilikuwa juu,
zaidi wakati tofauti akawa.
Kutokana na saa iliyoingia katika mfumo wa kompyuta wa ya.
>> -About Wiki mbili kabla ya janga katika Dhahran,
Israel kuripotiwa kwa Wizara ya Ulinzi
kwamba mfumo huo kupoteza muda.
Baada ya muda wa saa nane ya mbio, waligundua
kwamba mfumo wa kuwa na noticeably chini sahihi.
Wizara ya Ulinzi alijibu kwa kuwaambia yote ya betri Patriot
kwa si kuondoka mifumo ya juu ya kwa muda mrefu.
Wao kamwe alisema nini muda mrefu alikuwa.
Masaa 8, 10 masaa, masaa elfu.
Hakuna mtu alijua.
>> -The Betri Patriot iliyopo katika kambi ya
katika Dhahran na kiujanja wake wa ndani saa alikuwa kwa zaidi ya 100 masaa
juu ya usiku wa Februari 25.
>> -Ni Msisimko wakati kwa usahihi ya juu ya kumi ya pili.
Sasa ya kumi ya pili Idadi ya kuvutia
kwa sababu haiwezi kuwa walionyesha katika binary hasa, ambayo
ina maana haiwezi kuwa walionyesha hasa katika yoyote digital kompyuta ya kisasa.
Ni vigumu kuamini, lakini kutumia hii kama mfano.
>> Hebu kuchukua tatu namba moja.
Theluthi moja hawezi kuwa walionyesha katika decimal hasa.
Moja ya tatu ni 0.333 kinachoendelea kwa infinity.
Hakuna njia ya kufanya hivyo kwa usahihi kabisa katika decimal.
Hiyo ni hasa aina ya tatizo yaliyotokea katika Patriot.
tena mfumo mbio, mbaya kosa wakati akawa.
>> -Baada Masaa 100 ya kazi, kosa katika wakati alikuwa tu juu ya theluthi moja
ya pili.
Lakini katika suala la kulenga kombora kusafiri saa Mach 5,
ni matokeo ya kufuatilia kosa la zaidi ya 600 mita.
Itakuwa kosa mbaya kwa askari katika Dhahran.
>> -Nini Kilichotokea ni uzinduzi Scud alikuwa wanaona na onyo satelaiti mapema,
na walijua Scud alikuwa anakuja katika uongozi wao kwa ujumla.
Hawakujua ambapo alikuwa anakuja.
Ilikuwa sasa hadi rada sehemu ya mfumo Patriot
kutetea Dhahran ya Machapisho na kuweka wimbo wa zinazoingia kombora adui.
>> -The Rada ilikuwa smart sana.
Ni ingekuwa kweli kufuatilia nafasi ya Scud
na kisha kutabiri ambapo pengine itakuwa
wakati ujao rada alimtuma Pulse nje.
Aliyeitwa mlango mbalimbali.
>> -Then Mara moja Patriot anaamua muda wa kutosha ina
kupita kwenda nyuma na kuangalia ya eneo kwa ajili ya hii kitu wanaona
unaendelea nyuma.
Hivyo wakati akarudi makosa mahali, basi anaona hakuna kitu.
Na anaamua kwamba kulikuwa hakuna kitu.
Kwamba kulikuwa na kugundua uongo na ni matone kufuatilia.
>> -The Scud zinazoingia kutoweka kutoka screen rada,
na sekunde baadaye, slammed ndani ya ngome.
Scud kuuawa 28.
Ilikuwa moja mwisho fired wakati wa Vita ya Ghuba ya kwanza.
Kwa bahati mbaya, programu updated aliwasili alfajiri juu ya siku iliyofuata.
programu flaw alikuwa imekuwa fasta, kufunga
sura moja katika wasiwasi historia ya Patriot kombora.
>> [END video avspelning]
>> DAVID J. Malan: Hiyo ni kwa CS50.
Sisi kuona juu ya Jumatano.
>> [MUSIC KUCHEZA]