>> [Muzikos grojimo]
David J. Malan: Gerai.
Tai CS50, ir tai yra iš dviejų savaitės pradžia.
Taigi pradėkime šiandien su vabalo.
Klaidą, žinoma, yra klaida programoje,
ir jūs gausite labai susipažinę su šios sąvokos
jei jūs niekada užprogramuotas anksčiau. pset0 ir dabar pset1.
Tačiau aptarkime kažką tiek paprastas ne pirmas.
Ši programa čia, kad I išmetė kartu iš anksto,
ir aš tvirtina, kad tai turėtų spausdinti 10 žvaigždutės ant ekrano naudojant printf,
bet tai, matyt, Buggy tam tikru būdu.
>> Atsižvelgiant į tai, kad nurodyta, kad jis turi atspausdinti 10 žvaigždės,
tačiau ji negali matyt, kas jūs reikalauti yra klaida?
Taip?
Taigi, tai viena klaida išjungti, ir ką visa tai reiškia?
Gerai.
Puikus.
Taigi mes nenurodyta pradėti vertę nuliui i,
ir mes nurodėte n vertę 10, bet mes naudojamas mažesnis arba lygus.
Ir todėl, kad tai yra du simbolių ir ne tik vienas simbolis,
kaip ir matematikos knygos yra ta, kad jūs neturite
išreikšti būdas vienas simbolis ekvivalentas.
>> Taigi tai reiškia, kad mažiau, bet jei pradėti skaičiuoti ne iki nulio,
bet jums suskaičiuoti visą kelią iki per ir lygi 10,
jūs, žinoma, ketina skaičius 11 dalykų iš viso.
Ir taip jūs ketinate spausdinti 11 žvaigždžių.
Taigi, kas gali būti už tai pataisyti?
Taip?
>> Taigi tiesiog nustatykite mažiau nei arba lygi tiesiog būti mažesnis nei,
ir ten, aš teigti, galbūt kitas sprendimas, taip pat.
Kas gali dar galite padaryti?
Taip?
>> Taigi pradėkite lygu ją 1 ir palikti mažesnis arba lygus.
Ir tiesą sakant aš norėčiau teigti, , kad tipiškas žmogaus,
tai tikriausiai daugiau paprasta.
Pradėti skaičiuoti ne 1 ir suskaičiuoti per 10.
Iš esmės tai, ką tu kalbi.
>> Tačiau realybė yra programavimas, kaip mes matėme,
kompiuterių mokslininkai ir programuotojai paprastai neturi pradėti skaičiuoti iki nulio.
Ir taip, kad viskas gerai, kai jums priprasti prie jo.
Jūsų būklę, paprastai būti kažkas panašaus į mažiau nei.
Taigi tiesiog logiška klaida, kad mes galėtume dabar
nustatyti ir galiausiai perkompiliuoti tai ir gauti tik 10.
>> Na, kaip apie šią klaidą čia?
Čia, vėlgi, aš teigti, kad turiu spausdinti 10 stars-- tikslas
po vieną eilutėje šį kartą, tačiau taip nėra.
Prieš mes siūlome tai, kas nustatyti yra, ką tai
spausdinti vizualiai, jei aš buvo surinkti ir paleisti šią programą jūs manote?
Taip?
>> Žvaigždžių.
Taigi visi ant žvaigždutės toje pačioje eilutėje yra tai, ką aš girdėjau,
ir tada naujoji linija charakteris.
Taigi pabandykime tai.
Todėl įsitikinkite, buggy-1, įveskite, ir matau Zaszczękać komandą
kad mes kalbėjome apie paskutinį kartą.
./buggy-1, ir iš tiesų aš matau visus 10 žvaigždžių toje pačioje eilutėje, nors aš reikalauti
mano specifikacijos tiesiog viršuje komentarą kodas, aš ketina padaryti vieną kiekvienam
linija.
Bet tai atrodo teisinga.
>> Dabar linija 15 atrodo aš spausdinti žvaigždę, o tada linija 16
atrodo aš spausdinimas Naujoji linija charakteris,
ir jie abu atitrauktas taip, Aš viduje kilpos aiškiai.
Taigi neturėtų aš daryti žvaigždė, nauja linija, žvaigždutė, nauja linija, žvaigždutė, nauja linija?
Taip?
>> Taip, skirtingai kalba kaip Python, jei esate susipažinę,
įdubimas nėra Nesvarbu prie kompiuterio.
Tai tik svarbu į žmogaus.
Todėl nors čia aš išrado linijų 15 ir 16-- kad atrodo gražiai,
bet kompiuteris nerūpi.
Kompiuteris rūpi realiai garbanotas petnešos
aplink šias kodo eilutes.
>> Taigi, kad tai clear-- kaip ir Scratch-- kad šių dviejų eilučių kodo
turėtų būti vykdomas.
Kaip vienos iš tų geltona Scratch dėlionės vienetų, vėl ir vėl ir vėl.
>> Taigi dabar, jei aš vėl paleiskite program-- ./buggy-2-- Hm.
Turiu klaida dabar.
Ką aš pamiršti tai padaryti?
Taip, taip, aš ne rinkti jį.
Todėl įsitikinkite, buggy-2.
Nėra tokio failo, nes aš ne iš tikrųjų sudaryti antrą versiją.
Taigi dabar įdomu nedeklaruota variable-- ne 2.
Mes darome 1.
Padaryti Buggy-1-- ./buggy-1-- ir dabar kiekvienas iš jų yra toje pačioje eilutėje.
>> Dabar yra į išimtis tai turėtų teiginys mano
kad jums reikia šiuos vingiuotus skliaustus.
Kada ji iš tikrųjų OK-- jei jūs pastebėjau skyriuje ar textbooks--
praleisti garbanotas petnešos?
Taip?
>> Būtent.
Kai yra tik vienas linija kodą, kuris Jums
noriu būti susijęs su kilpa, kaip mūsų pirmame pavyzdyje.
Tai visiškai teisėtas praleisti garbanotas petnešos
kaip rūšies patogumui nuo jums kompiliatorius.
Taip?
Geras klausimas.
Ar tai laikoma stiliaus klaida?
Norėtume promote-- kaip CS50 stilius vadovas, dėl kurių URL
yra pset1-- kad visada naudoti vingiuotus skliaustus.
Žinoma, jei esate naujas į programavimą.
Realybė yra tai, kad mes ne ketina uždrausti jums
nuo daro šiuos patogumais.
Bet jei jūs tik gauti į dalykų sūpynės,
absoliučiai tiesiog visada naudokite garbanoti petnešos, kol gausite pakabinti jį.
Geras klausimas.
>> Viskas gerai.
Taigi, kad tada buvo klaida.
Bent jau kažką gana paprasta.
Ir dar jūs manote tai yra gana primityvus, tiesa?
Tai tarsi pirmą savaitę žiūri kalba
kaip, pamatyti savo klaidas jame.
Tačiau realybė tai yra iš tikrųjų atstovas
kai kurių gana bauginantis problemų kad gali kilti realiame pasaulyje.
>> Taigi kai kurie iš jūsų gali prisiminti jei jums sekti technologijų naujienas,
arba gal net pagauti vėjas tai vasarį
Šio pastaruosius metus, kad "Apple" padarė klaidingai tiek abiejų iOS,
operacinė sistema jų telefonus, ir taip pat
Mac OS operacinė sistema savo stalinių kompiuterių ir nešiojamųjų kompiuterių.
Ir, kad matėte tokių antraščių kaip šis.
Ir po to, "Apple" pažadėjo išspręsti šią klaidą,
ir labai greitai padarė ją išspręsti iOS, bet tada galiausiai sutaisė Mac OS
taip pat.
>> Dabar nė vienas iš šių antraščių tik tikrai atskleisti, kas Esminė problema buvo,
bet klaida buvo sumažinta iki SSL klaida, Secure Sockets Layer.
Ir ilga istorija trumpa, tai programinė įranga
kad mūsų naršyklių ir kitų programinė įranga, naudojama ką daryti?
>> Jei pasakiau, kad SSL dalyvauja, kai jums
aplankyti URL, kuris prasideda https, kas tada gali SSL būti susiję su?
Šifravimas.
Taigi mes kalbame apie tai artimiausiomis dienomis.
Šifravimas, iš meno kodavimo informaciją.
>> Bet ilga istorija trumpa, "Apple" kadaise padarė klaidą
jų įgyvendinimo SSL į programinė įranga, kuri galiausiai įgyvendina
URL kaip HTTPS ar max jungtys ten pat.
Kurios rezultatas yra tai, kad jūsų jungtys galėtų potencialiai
būti sulaikytas.
Ir buvo jūsų nebūtinai šifruojami
jei turėjo tam tikrą blogiukas tarp jūs ir paskirties svetainė, kurie
žinojo, kaip pasinaudoti šia.
>> Dabar "Apple" pagaliau paskelbtas nustatyti pagal tai, pagaliau,
ir aprašymas jų tvirtinimu, buvo tai.
Saugus transporto nesugebėjo patvirtinti Jungties autentiškumas.
Klausimas buvo sprendžiamas atkurti trūkstamus patvirtinimo veiksmus.
>> Taigi tai yra labai ranka banguotas paaiškinimas už tik sakau, kad mes įsukus.
Yra pažodžiui vienas linija kodą, kuris buvo Buggy
jų įgyvendinimo SSL ir jei jūs einate internete ir ieškoti tai
Jūs iš tikrųjų galite rasti originalus kodą.
Pavyzdžiui, tai ekrano vaizdas tik iš gana didelio failo dalis,
bet tai funkcija, matyt, vadinama SSL patikrinti ženklas serverio raktu.
Ir tai užima krūva argumentai ir įėjimai.
Ir mes neketiname sutelkti per daug ten smulkmenomis,
bet jei jums sutelkti dėmesį į kodą viduje tos viršutinis function-- tegul
padidinti, kad.
Galbūt jau įtariate, kas klaida gali
būti, net jei jūs neturite idėjos galiausiai, ką jūs ieškote.
Yra natūra anomalija čia, o tai, ką?
>> Taip, aš ne tikrai patinka dviejų pradziu atrodo nepavyksta.
Atvirai kalbant, aš tikrai nežino, ką pradziu nesugeba priemones, bet turintys du iš jų
nugara prie nugaros.
Tai tiesiog rūšies rubs man intelektualiai neteisingas būdas,
ir iš tiesų, jei mes priartinti tik tas linijas, tai yra C.
>> Taigi Apple kodas aikštelė yra pati parašyta C,
ir tai, matyt, yra tikrai equivalent--
ne į tą gana įdubimas versija, bet jeigu jūs atpažinsite faktas
kad ten nėra garbanotas petnešos, ką "Apple" tikrai rašė, buvo kodas, kuris atrodo
kaip šis.
Taigi aš Mastelis, ir aš tiesiog nustatė ta prasme, įdubimas
kad jei nėra jokių garbanotas petnešos, kad antra pradziu nepavyksta tai geltona
ketina vykdyti, nesvarbu koks.
Jis nėra susijęs su jei sąlyga virš jo.
>> Taigi, net ir vėl, jei jūs ne visai suprasti, ką tai galėtų galbūt
daryti, žinau, kad kiekvienas iš jų conditions-- kiekvienos iš šių linijų
yra labai svarbus žingsnis į tikrinimo proceso
jei jūsų duomenys yra iš tikrųjų šifruojamas.
Taigi praleidžiant vieną iš šių žingsniai, o ne geriausia idėja.
>> Bet kadangi mes turime tai antra pradziu nepavyksta geltonai,
ir todėl, kad kai mes rūšiuoti estetiškai
perkelti jį į kairę, kur jį logiškai yra tuo momentu, kas
tai reiškia, kad linija kodo žemiau šios antros pradziu
nesugeba Jūs manote?
Jis visada bus praleidžiami.
Taigi gotos paprastai frowned dėl priežasčių, mes tikrai ne eiti į,
ir iš tiesų CS50 mes linkę ne mokyti šį pareiškimą pradziu,
bet jūs galite galvoti pradziu nepavyks, nes prasmė Pasirinkti Pasirinkti
į kitą dalį kodo.
>> Kitaip tariant peršokti per tai paskutinė eilutė iš viso,
ir taip tai kvailas rezultatas paprasta klaida, kad buvo tiesiog
iš turbūt kažkas rezultatas nukopijuoti ir įklijuoti vieną per
daug kartų buvo, kad visa saugumas iOS ir Mac OS
buvo pažeidžiami perimti informaciją blogi vaikinai gana ilgą laiką.
Iki Apple pagaliau išspręsta tai.
>> Dabar, jei kai kurie iš jūsų yra iš tikrųjų veikia senų versijų iOS arba Mac OS,
Jūs galite pereiti į gotofail.com kuris yra svetainė, kad kažkas įsteigti
iš esmės nustatyti, programiškai
jei jūsų kompiuteris yra vis dar pažeidžiama.
Ir tiesą sakant, jei jis yra, tai tikriausiai gera idėja
atnaujinti savo telefoną ar Jūsų Mac šiuo metu.
Bet ten, tiesiog liudija tik tai, kaip šių žemesnio lygio vertinimas
detalės ir gana paprastų idėjų tikrai gali
išversti į sprendimų ir problemos, su kuriomis
affected-- šiame case-- milijonai žmonių.
>> Dabar žodis administracija.
Skyrius pradės šį sekmadienį.
Jūs gausite elektroninį laišką iš savaitgalį apie skyriuje, kuriame taškas
resectioning procesas pradės, jei jūs
supratau dabar jūs turite keletas naujų konfliktų.
Taigi tai atsitinka kiekvienais metais, ir mes įsikurs dienomis ateiti.
>> Biuro hours-- daryti nuolat akis šio grafiko čia.
Keičia truputį šią savaitę, ypač pradžios laikas
ir vietą, todėl nereikia konsultuotis kad prieš antraštę į darbo valandų
bet per ateinančius ketverius naktų.
O dabar žodis vertinimu, ypač kaip jūs pasinerti į problemą
nustato vieną ir už jos ribų.
>> Taigi už specifikacijos, paprastai tai yra
ašys, išilgai kurio mes vertiname savo darbą.
Taikymo sritis nurodo, ką mastu jūsų kodas padargai
funkcijos reikalauja mūsų specifikacija.
Kitaip tariant, kiek gabalas rinkinys padarė jums atsikąsti.
Ar jūs trečdalis ja, jo pusė, 100% jo.
Net jei tai nėra teisinga, kiek bandėte?
Taigi, kad fiksuoja lygį pastangų, ir sumos,
į kurį nukando problemą, problemos.
>> Correctness-- šį vieną, Kiek, jūsų kodas
atitinka mūsų specifikacijos ir be klaidų.
Taigi jis veikia teisingai?
Jei mes suteikti jai tam tikrą indėlį, ar ne mums išvestį, kad mes tikėtis?
Design-- dabar tai pirmiausia itin kokybiniais,
ar tie, kurie reikalauja žmogaus sprendimą.
Ir iš tiesų, tai yra, kodėl mes turime darbuotojų tiek daug mokymo bičiuliais ir, žinoma
padėjėjai.
Kiek yra jūsų kodas parašyta gerai?
>> Ir vėl tai labai kokybinis vertinimas
kad bus dirbti su jumis bi-kryptingos per ateinančias savaites.
Taigi, kad, kai jūs gaunate ne tik skaitmeniniai balai, bet taip pat
raštišką balai, ar įvedėte atsiliepimai, arba raštu atsiliepimą į angliškų žodžių.
Štai ką mes naudosime vairuoti jus link iš tikrųjų rašyti geriau kodą.
Ir paskaitos ir skyriuje mes pabandysime atkreipti out-- taip dažnai, kaip mes can--
ką daro programa ne tik teisinga ir funkciškai gerai,
bet ir gerai suprojektuoti.
Efektyviausias tai gali būti arba net gražiausia jis gali būti.
>> Kuris mus veda į stilių.
Stilius galiausiai yra estetinis sprendimas.
Ar jums pasirinkti gera pavadinimai savo kintamiesiems?
Ar jūs atitraukiama kodą tinkamai?
Ar tai atrodo gerai, ir todėl, tai lengva kitam žmogui
skaityti jūsų atitinkamas jos teisingumą.
>> Dabar paprastai už mokymo programą, mes nesunkiai šie dalykai apie penkių balų skalę.
Ir leiskite man plaktukas namų vieta kad per tris iš tiesų yra geras.
Labai greitai padaryti žmonės pradėti daryti aritmetiką.
Kai jie gauna trys iš penkias teisingumą tam tikrą pset
ir jie galvoja, kad velniškai, aš ketina 60% kuri iš esmės yra D arba E.
>> Tai ne taip, kaip mes galvoti apie šiuos numerius.
Trijų iš tiesų yra gera, ir tai, ką mes paprastai tikėtis pradžioje
termino, kad jei jūs gaunate iš three's-- krūva gal pora
mugių, iš fours-- pora arba pora poromis, iš fours-- pora
tai gera vieta pradėti.
Ir tol, kol mes matome į viršų trajektorija per tam tikrą laiką,
Jūs esate ypač geroje vietoje.
>> Formulė mes naudojame svoris dalykai yra iš esmės
tai už mokymo programas, kuris tiesiog reiškia, kad mes
suteikti daugiau svorio teisingumą.
Nes labai dažnai teisingumas kad laikosi daugiausia laiko.
Patikėkit manim dabar.
Jūs find-- bent vienoje pset-- kad jums
išleisti 90% savo laiko dirba 10% problema.
>> Ir viskas tarsi veikia išskyrus vieną ar dvi klaidas,
, ir tai yra klaidos, kad jus iki vėlyvos nakties.
Tai yra tie, kurie rūšiuoti pabėgti jums.
Bet po miego ant jo, arba lankyti darbo valandas
ar užduoti klausimus internetu, yra kai jūs gaunate į tą 100% tikslas,
ir tai, kodėl mes svorį teisingumą labiausiai.
Dizainas šiek tiek mažiau, o stiliaus truputį mažiau, nei nurodyta.
Tačiau turėkite mind-- stiliaus turbūt paprasčiausias
iš jų atkąsti kaip už stiliaus vadove.
>> Ir dabar, rimtesnė dėmesį į akademinio sąžiningumo.
CS50 yra gaila skirtumą nuo yra didžiausia gamintoja Ad Board
atvejų beveik kasmet istoriškai.
Tai ne todėl, kad studentai apgauti CS50 bet labiau nei bet kuri kita klase,
bet todėl, kad pagal darbo pobūdžio, Faktas, kad tai elektroninė,
Faktas, kad mes žiūrime į jį, ir Tai mes esame kompiuterių mokslininkai,
Galiu pasakyti, kad mes, deja, labai geras aptikti jį.
>> Taigi, ką tai reiškia realiai?
Taigi, už mokymo programas, Žinoma, filosofija
tikrai skliautais būtų pagrįsta.
Yra tai linija tarp daro savo darbą dėl savo
ir gauti šiek tiek pagrįsta pagalbos iš draugų,
ir iš karto daryti, kad dirbti savo draugas, arba siųsti jam ar jai savo kodą
kad jis ar ji gali tiesiog imtis arba skolintis jį teisę.
Ir kad kerta liniją kad mes atkreipiamas į klasę.
>> Žiūrėti, mokymo programą galiausiai linijų
kad mes atkreipiame kaip pagrįstai ir neprotinga elgesys,
bet tai tikrai Varėna žemyn į esmę
savo darbą, kuriems reikia būti savo pabaigos.
Dabar su tai sakė, yra euristinis.
Kadangi, kaip jūs galite imagine-- nuo darbo valandų ir vizualizacijomis
ir video mes parodyta taip far-- CS50
iš tikrųjų reiškia būti kaip bendradarbiavimo ir kaip bendradarbiauti ir kaip socialinės
kaip įmanoma.
Kaip, bendradarbiaujant, kaip ji yra tiksli.
>> Bet tai sakė, euristinis, kaip jūs pamatysite mokymo programą,
yra tai, kad, kai jūs tam tikra problema.
Jūs turite tam tikrą savo kodą klaida, kad jus negali išspręsti, tai yra protinga jums
parodyti savo kodą kam nors kitam.
Draugas net klasėje draugas sėdi šalia tavęs darbo valandomis,
ar personalo narys.
Bet jie negali parodyti savo kodą su jumis.
>> Kitaip tariant, atsakymo į savo question--
Man reikia help-- nėra oh, čia mano kodas.
Pažvelkite tai išvaizdą ir išvesti iš jo ką nori.
Dabar, žinoma, yra būdas aiškiai į žaidimą
tai sistema, pagal kurią aš jums parodysiu, mano kodas, prieš turintys klausimą.
Jūs parodykite man savo kodą prieš turintys klausimą.
Bet pamatyti mokymo programą vėl prabangiau duomenys, kur ši eilutė yra.
>> Tiesiog dabar tapyti paveikslėlį ir pasidalinti kaip įmanoma skaidriau
kur mes esame pastaraisiais metais, tai iš Ad Board atvejų skaičius
kad CS50 turėjo per Per pastaruosius septynerius metus.
Su 14 atvejų tai naujausias rudens.
Kalbant apie moksleivių, dalyvaujančių projekte, jis buvo 20 kai nelyginis studentai
praeitą rudenį.
Nebuvo iš 33 piko studentai prieš keletą metų.
Daugelis iš jų, deja, nebėra čia miesteliu.
>> Studentai, dalyvaujantys kaip procentą istoriškai klasė svyravo nuo 0%
iki 5,3%, o tai yra tik pasakyti, kasmet tai iššūkis.
Ir link šio tikslo, kas mes norime padaryti, tai perteikti vieną
kad mes dd-- tik FYI-- palyginti ne sąžiningumas tiems studentams, kurie
yra po linija pakeisti.
Mes palyginti visų dabartinių pareiškimai prieš visus pastaruosius misijų
iš per pastaruosius keletą metų.
>> Mes žinome, per kiek "Google", aplink ir sužinoti kodų saugyklas
internete, diskusijų forumai internete, darbo vietų internete.
Jei studentas gali rasti jį, mes galime tikrai mano, kad tai, kiek mes, deja padaryti.
Taigi, ką jūs pamatysite mokymo programą nors tai apgailestauju sąlyga.
Galiu tikrai vertiname, ir mes visi turi
darbuotojai padarę panašaus kursą tai, ar tai pats vienas, laikui bėgant,
tikrai žinau, ką reiškia, kai gyvenimas tampa tokiu būdu, kai jūs turite
kai vėlai naktį deadline-- ne tik šios klasės,
bet another--, kai esate visiškai išnaudotos, pabrėžė,
turi vis dar veikia daugybė Kitų dalykų, kuriuos reikia padaryti.
Jūs galėsite atlikti tam tikru klausimu gyvenimas tikrai neblogai, gal vėlai
naktį sprendimas.
>> Taigi už mokymo programas, yra tai sąlyga,
tokia, kad jei per 72 valandas po priėmimo kai prastas sprendimas, turite į jį
ir pasiekti, kad mane ir vienas iš kurso Galvų
ir turėsime pokalbį.
Mes tvarkyti dalykus viduje viltis
IT tampa daugiau mokymo metu arba gyvenimo pamoka,
o ne kažkas su ypač drastiškų pasekmių
kaip jūs galite pamatyti šių diagramas čia.
>> Štai labai rimtas tonas.
Leiskite mums pristabdyti tik nedaugelis sekundžių pertrauka įtampą.
>> [Muzikos grojimo]
>> David J. Malan: Gerai, taip, kaip buvo, kad tam Segue?
Norėdami šiandienos pirminių temomis.
Iš kurių pirmasis yra abstrakcija.
Kitas, kuris bus atstovavimas duomenų, kurie tiesą sakant
yra tikrai sausa būdas pasakyti, kaip mes galime eiti apie sprendžiant problemas ir galvoti
apie sprendžiant problemas?
Taigi jūs mačiau nulio, ir jūs matyti galbūt jau pset1 su C
kad jūs ne tik galite naudotis funkcijos, kaip printf,
kad kiti žmonės metų praeities parašė jums.
Taip pat galite rašyti savo funkcijas.
>> Ir nors jūs negalite turėti padaryti tai C, o atvirai ir pset1
Jums tikrai nereikia rašyti savo savo funkcija nes problem--
o galbūt nelengvas ne Pirmasis glance-- pamatysite
galiausiai gali būti išspręsta su ne visi, kad daug eilučių kodo.
Bet tai sakė, kalbant rašyti savo funkciją,
suprasti, kad C nėra duoti Jums tai galimybė.
>> Aš ruošiuosi eiti į šiandienos kodo, kuri yra prieinama jau internete,
ir aš ruošiuosi eiti į priekį ir atidaryti iki programos vadinamos funkcija 0.C,
ir funkcija nulio matysime keletą dalykų.
18 per pirmąsias eilutes 23 yra mano pagrindinė funkcija.
Ir dabar, kad mes pradedame skaityti kodas, kad mes ne raštu skristi,
bet vietoj to aš parašiau iš anksto arba kad jums problema nustatyti
galite gauti turintys buvo parašyta iš anksto.
Geras būdas pradėti skaityti kažkieno kodą
yra ieškoti pagrindinės funkcijos.
Išsiaiškinti, kur šį įrašą taškas yra paleisti programą,
ir atlikite ją logiškai iš ten.
>> Taigi ši programa matyt atspaudai jūsų vardas, po dvitaškio.
Mes tada naudokite GetString iš CS50 bibliotekoje
gauti eilutę, arba žodį ar frazę iš ne klaviatūrą vartotojui.
Ir tada ten tai dalykas here-- PrintName.
>> Dabar PrintName nėra funkcija, kuri ateina su C.
Tai ne standartinis io.h.
Tai ne CS50.h.
Tai veikiau tą patį failą.
Atkreipkite dėmesį, jei aš slinkti žemyn a bit-- linijos 25 27--
tai tiesiog gana būdas komentuodamas Jūsų kodas naudojant žvaigždžių ir nerijos ribos.
Tai kelių eilučių pastabas, ir tai tik
mano aprašymas mėlyną kas ši funkcija veikia.
>> Kadangi eilutėse nuo 28 iki 31, Aš parašiau super paprastą funkciją
kurio vardas yra PrintName.
Tai užtrunka kiek argumentai norėtumėte pasakyti?
Taigi vienas argument-- nes ten vienas išvardyti viduje skliausteliuose argumentas.
Kurių tipas yra Styginių.
Kuris yra pasakyti PrintName yra tarsi šio black box
arba funkcija, kuri trunka kaip įvesties eilutę.
>> Ir tos String vardas Patogiai bus Pavadinimas.
Ne S, ne N, tačiau Vardas.
Taigi, ką PrintName daryti?
Tai gražus paprasta.
Tiesiog kaip vieną liniją kodą printf, bet, matyt, jį
spausdina iš "Hello", taip ir taip.
Jeigu taip ir taip kilęs iš argumentų.
>> Dabar tai ne didžiulis inovacijos čia.
Tikrai, aš ėmėsi programą, kuri galėtų buvo parašyta viena eilutė kodo
įgyvendinant šią iki čia ir pakeitė jį į kažką
kuris apima kai šešių ar septynių ar taip eilučių kodo visą kelią žemyn čia.
>> Bet tai iš praktikuojančių principas žinomas kaip abstrakcija.
Rūšis sandarinimo viduje nauja funkcija, kuri turi vardą, ir geriau
dar tas pavadinimas pažodžiui sako, ką ji daro.
Aš turiu galvoje, printf-- kad ne ypač aprašomasis.
Jei aš noriu sukurti dėlionės gabalas, arba jei I
norite sukurti funkciją kad spausdina kažkieno vardą,
tai padaryti grožis yra tai, kad aš iš tikrųjų galite
suteikti šią funkciją vardą , kuris apibūdina, ką ji daro.
>> Dabar ji imasi įvesties kad Aš savavališkai vadinama vardas,
bet taip pat yra nuostabiai aprašomojo vietoj to, kad šiek tiek daugiau
bendrinis, kaip S. negaliojančiu, dabar, tiesiog reiškia,
kad ši funkcija nėra ranka man atgal nieko.
Jis nemėgsta GetString kad pažodžiui rankas mane atgal eilutę
kaip mes padarėme su popieriaus gabaliukais su savo bendraklasiais praėjusią savaitę,
o jis tiesiog turi šalutinį poveikį.
Jis spausdina kažką ekrane.
>> Taigi tuo dienos pabaigoje, jei aš do, kad funkcija-0, ./function-0,
matysime, kad jis prašo mano vardu.
Aš tipo Dovydą, jis tipus iš mano vardu.
Jei aš jį dar kartą su Rob, jis ketina pasakyti "Labas, Rob."
Taigi paprasta idėja, bet galbūt ekstrapoliuoti iš to protiškai
kad jūsų programas gauti šiek tiek daugiau sudėtinga,
, ir jūs norite parašyti gabalą kodas ir skambučių, kad code-- Invoke
kad tam tikrą aprašomojo code-- pavadinti kaip PrintName,
C daro sau mums šią galimybę.
>> Štai dar vienas paprastas pavyzdys.
Pavyzdžiui, jei aš atverti failą iš šiandien vadinama return.c,
pastebėti tai, ką aš padariau čia.
Dauguma šios pagrindinės funkcijos yra printf.
Aš pirmą kartą savavališkai inicijuoti kintamasis vadinamas x skaičių 2.
Tada aš atsispausdinti "x yra dabar % I "einančios nuo x vertę.
Taigi, aš tiesiog pasakyti, kas tai yra.
>> Dabar aš tiesiog drąsiai teigdamas su printf.
Aš cubing kad x vertė, ir aš darydamas telefonu funkciją
vadinamas kubas artimųjų X, kaip ir argumentas,
ir tada taupymo išėjimo pačiame kintamojo, x.
Taigi, aš clobbering X vertę.
Aš viršesniais vertė x su kokia
, iš kurios skambinama rezultatas Šis kubas funkcija.
Ir tada aš tiesiog atsispausdinti kai pūkuotas dalykų čia pasakyti, ką aš padariau.
>> Taigi, kas tada yra kubas?
Atkreipkite dėmesį, kas iš esmės skiriasi čia.
Aš suteikti funkciją vardas, kaip ir anksčiau.
Aš nurodėte vardą argumentas.
Šį kartą ji vadinama n vietoj vardo, bet aš negalėjau ją vadina ką aš noriu.
Bet tai yra skirtingi.
Ši kairėje dalykas.
Anksčiau tai buvo tai, ką žodis?
Berniukų.
Dabar jis akivaizdžiai vid.
>> Taigi, kas galbūt atimti?
Kadangi negaliojančiais reiškia, tarsi nebūtis, ir kad buvo atvejis.
PrintName grįžo nieko.
Jis padarė kažką, bet ji nebuvo ranka mane atgal
kažkas, kad galėčiau įdėti kairėje pusėje lygybės ženklą
kaip aš padariau čia on line 22.
>> Taigi, jei aš sakau, į 30 eilutę, kas tai tikriausiai reiškia
apie tai, ką kubas daro už mane?
Taip?
Ji grąžina sveikąjį skaičių.
Taigi rankas į mane, už pavyzdžiui, iš popieriaus gabalas
dėl kurių ji turi raštišką atsakymą.
2 kubeliais arba 3 kubeliais arba 4 cubed-- ką aš praėjo,
ir kaip aš įgyvendinti tai?
Na, tiesiog n kartų n kartų n kaip galėčiau kubeliais vertę.
Taigi dar kartą, super paprasta idėja, bet demonstratyvus
dabar, kaip mes galime rašyti funkcijas kad iš tikrųjų turėjo mus atgal
vertybės, kurios galėtų dominti.
>> Pažvelkime vieną paskutiniame pavyzdyje čia vadinama funkcija vienas.
Šiame pavyzdyje, ji pradeda gauti daugiau įtikinamos.
Taigi funkcijos viename, tai program-- pranešimas galiausiai
ragina funkcija vadinama GetPositiveInt.
GetPositiveInt nėra funkcija CS50 bibliotekoje,
bet mes nusprendėme mes norėčiau, kad jis egzistuoja.
>> Taigi, jei mes slinkti žemyn vėliau į bylą, pranešimas, kaip aš apie įgyvendinimo
gauti teigiamą int, ir aš pasakyti, kad tai daugiau įtikinamų
nes tai yra padorus skaičius eilučių kodo.
Tai ne tik kvailas mažai žaislas programa.
Tai iš tiesų gavo šiek tiek klaidų tikrinimas ir daro kažką daugiau naudingos.
>> Taigi, jei jūs dar nematėte rankos video, kad mes įterptos į pset1,
žinau, kad tai yra Tipo kilpa C, panaši dvasia
į daiktų nulio rūšių gali padaryti.
Ir tai sako, kad tai daryti.
Spausdinti šį iš.
Tada eiti į priekį ir gauti n-- gauti int ir laikyti jį n,
ir nuolat daro tai vėl ir vėl, ir vėl tol, kol n yra mažesnis nei vienas.
>> Taigi n bus mažiau nei vieną tik tada, jei žmogus ne taip bendradarbiauti.
Jei jis ar ji rašo į 0 arba -1 ar -50,
šis ciklas vyksta nuolat vykdant vėl ir vėl.
Ir galiausiai pastebėsite, aš tiesiog grįžti vertę.
Taigi dabar mes turime funkciją kad tai jau buvo malonu
jei CS50 būtų įgyvendinti CS50.h ir CS50.c už jus,
bet čia mes galime dabar įgyvendinti tai save.
>> Tačiau du pastabos dėl keleto svarbių klausimų.
One-- kodėl aš pareiškiu, int n Ar manote,, on line 29
o ne tik daro tai čia, kuris yra
labiau atitiktų ką mes padarėme praėjusią savaitę?
Taip?
Gera mintis.
Taigi, jei mes įdėti jį čia, tai kaip nors mes
išlaikyti skelbiantis jį vėl ir vėl.
Tai ir pati yra nekelia problemų, per se
nes mes tik reikia vieną kartą ir tada vertė
mes ketiname gauti naują vistiek.
Bet gera mintis.
Taip?
>> Uždaryti.
Taigi dėl to, aš paskelbė n įjungtas linija 29 už kilpos,
tai prieinama visoje Visa ši funkcija.
Ne kitas funkcijas, nes n yra dar viduje šių garbanotus
Petnešos čia.
So-- tikrai.
>> Būtent.
Taigi, tai yra dar iki taško.
Jei mes vietoj deklaruotos n čia on line 32,
tai problemiška, nes atspėti kur dar man reikia ją gauti?
Dėl 34 linija, ir paprasta nykščio taisykle yra
kad galite naudoti tik kintamasis viduje iš naujausių klamrami
, kurioje jūs jį deklaruoti.
>> Deja, linija 34 yra viena eilutė, per vėlai
nes aš jau uždarytas garbanotas petnešomis apie 33 eilutėje
, kuri atitinka garbanotas petnešomis 30 eilutėje.
Ir todėl tai pasakyti būdas kad šis kintamasis int yra scoped,
taip sakant, tik viduje tų klamrami.
Jis tiesiog neegzistuoja už jų.
>> Taigi iš tiesų, jei aš tai padaryti negerai, leiskite man išsaugoti kodą
nes is-- neteisingai parašyta.
Leiskite man eiti į priekį ir padarysiu funkcija-1 ir notice-- klaida.
Naudokite nedeklaruojamo identifikatorius n on-line 35, kuris yra čia.
Ir jei mes slinkite aukštyn Be to, dar vienas.
Naudokite nedeklaruota identifikatorius n on line 34.
>> Taigi sudarytojas, žvangėjimas, yra pastebėjęs, kad jį tiesiog
neegzistuoja, nors Akivaizdu, kad jis ten vizualiai.
Taigi paprasta nustatyti deklaruoja jį ten.
>> Dabar leiskite man pereikite prie failo viršuje.
Kas šuoliai į tave kaip yra šiek tiek kitoks
iš dalykų, mes pažvelgė praeitą savaitę?
Ne tik aš turiu vardą, o ne tik tai, Turiu keletą aštrių apima iki viršaus,
Turiu ką aš paskambinę prototipą.
Dabar, atrodo siaubingai panašus į tai, ką mes tiesiog matė prieš akimirką on line 27 d.
>> Taigi leiskite išvadą iš skirtingų klaidos pranešimas, kodėl aš padariau tai.
Leiskite man eiti į priekį ir ištrinti šias eilutes ten.
Ir todėl mes nieko apie prototipą žinoti.
Perdarytas šį failą.
Padaryti funkciją vieną.
Ir dabar, velniškai keturios klaidos.
Leiskite pereikite iki pirmosios.
>> Numanomas deklaracija funkcija gauti teigiamą int negalioja C99.
C99 tiesiog reiškia 1999 portalo kalba
C, kuris yra tai, ką mes iš tikrųjų naudoti.
Taigi, ką tai reiškia?
Na C-- ir konkrečiau C compilers-- yra gana kvailas programas.
Jie tik žino, ką jūs pasakė jiems, ir kad
iš tikrųjų teminis iš praeitą savaitę.
>> Problema yra ta, kad jei aš einu apie įgyvendinant vardą čia,
ir aš skambinti funkcija vadinama GetPositiveInt čia on line 20
kad funkcija techniškai nėra egzistuoja, kol kompiliatorius mato liniją 27.
Deja, sudarytojas yra daryti dalykus viršų, žemyn, į kairę, į dešinę,
todėl, kad ji nematė įgyvendinimas GetPositiveInt,
bet jis mato jus bando naudoti jį čia
tai tik ketina bail-- klykauti jūs su klaida Message galbūt
paslaptingas, o ne iš tikrųjų kaupia failą.
>> Taigi vadinamasis prototipas iki čia yra tiesa nereikalinga.
Drąsiai, nuėjau čia, ir aš nukopijuoti ir įklijuoti, ir aš įdėti jį čia.
Atkrenta būtų tinkamas, todėl mes tiesiog nukopijuokite ir įklijuokite jį šį kartą.
Aš tiesiog nukopijuoti ir įklijuoti jį.
Tikrai kaip kaip duonos trupiniai.
>> Mažai raktas kompiliatoriui.
Aš nežinau, kas tai daro dar, bet aš perspektyvus jums
kad ji egzistuoja, galų gale.
Ir štai kodėl tai line-- į linija 16-- baigiasi kabliataškiu.
Tai nereikalingas dizainas.
Taip?
>> Jei nebuvo susieti savo biblioteką į the-- oh, geras klausimas.
Sharp yra failo antraštės intarpai.
Reikia be-- turėtų beveik visada būti pačiame viršuje
dėl pasiūlymo dėl similar-- failą tiksliai tos pačios priežasties, taip.
Nes standartas io.h yra tiesiog linija
kaip tai, bet su žodžiu printf ir su savo argumentais ir jos grįžtamasis.
Ir taip darant aštrus įtraukti iki čia, ką jūs tiesiog darote
yra nukopijuoti ir įklijuoti turinį kažkas kitas rašė iki viršaus.
Taip cluing kodą į Faktas, kad šios funkcijos egzistuoja.
Taip?
>> Absoliučiai.
Taigi labai protingas ir teisingas sprendimas būtų, žinote, ką?
Aš nežinau, ką prototipas yra, bet aš žinau,
jei aš suprantu, kad C yra tiesiog kvailas ir permąsto viršaus į apačią.
Na tegul duoti, ko jis nori.
Leiskite supjaustyti tą kodą, įklijuokite jį viršuje, o dabar stumti Pagrindinis žemyn žemiau.
Tai taip pat padėtų išspręsti šią problemą.
>> Bet jūs galite labai lengvai sugalvoti scenarijus, pagal kurį reikia paskambinti B,
o gal B ragina grįžti į A. Šis yra kažkas vadinamas rekursija,
ir mes grįžti prie to.
Ir tai gali ar negali būti geras dalykas, tačiau jūs galite tikrai
nutraukti šį sprendimą.
>> Ir be to, aš norėčiau teigia, stilistiškai,
ypač kai savo programas tapo tai ilgas ir taip ilgai,
tai tiesiog super patogus įdėti pagrindinė viršuje
nes tai, ką dauguma programuotojai ketinate rūpi.
Ir todėl jis yra šiek tiek švaresnis, be abejo, tai padaryti taip, kaip
Aš iš pradžių padarė jį su prototipu net
nors atrodo šiek tiek nereikalinga pirmo žvilgsnio.
Taip?
Atsiprašome, galite pasakyti, kad tai garsiau?
>> Jei perjungti vietas įgyvendinimas ir prototipas?
Štai geras klausimas.
Jei iš naujo paskelbti tai žemyn čia galime pamatyti, kas atsitiks.
Taigi, jei aš įdėti šį žemyn čia jūs sakote.
Oi, atsiprašau.
Garsiau?
Net garsiau.
O, geras klausimas.
Ar tai anuliuos funkciją?
Žinai, po visus šiuos metus, aš niekada įdėti prototipą vėliau.
Taigi darykime, kad funkcijos-1 Po daryti.
>> [Mamroczący]
David J. Malan: Oi, palauk.
Mes vis dar turime viską iki viršaus.
Taigi leiskite tai padaryti čia, jei aš suprasti jūsų klausimą teisingai.
Aš pradėti viską, įskaitant virš pagrindinis prototipas,
bet aš pradėti prototipą toliau įgyvendinti.
>> Taigi, jei aš padaryti vieną, aš gaunu atgal error-- nepanaudotą kintamasis n.
O ten.
Ačiū.
Pažiūrėkime, mes atsikratyti tai.
Štai skiriasi klaidą, tad ignoruoti tai.
Leiskite tikrai greitai perdaryti tai.
>> Gerai, kad duomenys argumentas nėra naudojamas formatas String
n-- oh, tai todėl, kad Aš pakeičiau į juos čia.
Gerai, mes žinome, ką atsakyti vyksta to-- viskas gerai, čia mes einame.
Ak, ačiū už teigiamas.
Gerai, aš išspręsti šią kodą after-- ignoruoti šį konkretų klaidą
nes tai was-- tai veikia atsakymas.
>> Taigi nėra perrašyti ką jūs ką tik padarė.
Įtariu, kad kompiliatorius yra parašyta taip,
kad ji ignoruoja savo prototipą nes organizme, taip sakant,
iš funkcija jau buvo įgyvendintos aukščiau.
Aš turiu tikrai konsultuotis iš kompiliatorių vadovas
suprasti, jei yra bet koks kitas potekstė, tačiau iš pirmo žvilgsnio
tiesiog bando ir eksperimentuoja, atrodo, kad jokio poveikio.
Geras klausimas.
>> Taigi leiskite išsiveržia į priekį dabar, pereinant nuo šalutinių poveikių, kurie
yra funkcijos, padaryti kažką panašaus vizualiai ekrane su printf,
bet negrįžta vertę.
Ir funkcijas, turi grįžti vertės, kaip mes tik pamačiau iš nedaugelio.
Mes jau matė šį apimties sąvoką, ir mes pamatyti, tai vėl ir vėl.
Bet dabar, vėlgi, naudoti nykščio taisykle
kad kintamasis gali būti naudojamas tik viduje neseniai atidarytas
ir uždaros garbanotieji petnešų, kaip mes pamačiau toje konkrečioje pavyzdyje.
>> Ir kaip Jūs nurodėte, yra ability--
galite išspręsti kai kurias iš šių problemų išleidimą į kintamuosius globaliai
ne pačiame viršuje failą.
Tačiau beveik visais atvejais mes raukytis, kad
ir iš tiesų net ne eiti į tą tirpalo dabar.
Taigi dabar, Takeaway yra tai, kad kintamieji turi šią sritį sąvoką.
>> Bet dabar pažvelkime kitą sausas būdas iš tikrųjų ieškote
į kai kuriuos gana įdomi įgyvendinimo informacija.
Kaip mes galime atstovauti informaciją.
Ir mes jau pažvelgė tai į pirmą savaitę klasėje.
Pažvelgus binaries, ir priminti save iš po kablelio.
>> Bet prisiminti iš praeitą savaitę, kad C yra skirtingi duomenų tipai ir kekių daugiau,
Bet labiausiai naudingų tie Dabar gali būti šie.
Char, ar personažas, kuris vyksta būti vienas baitas, arba aštuonių bitų iš viso.
Ir tai pasakyti, kad dydis iš char yra tik vienas baitas.
Baitas yra aštuonis bitus, taigi tai reiškia, kad galime atstovauti kiek simbolių.
Kiek raidės arba simboliai ant klaviatūros
jei mes turime vieną baitą ar aštuonis bitus.
Prisiminkite nulio savaitę.
Jei turite aštuonis bitus, kiek bendrosios vertės
galite atstovauti su modeliai nulių ir?
One-- daugiau nei tai.
Taigi 256 Iš viso, jei jums pradėti skaičiuoti nuo nulio.
Taigi, jei turite aštuonių bits-- Taigi, jei mes turėjo mūsų dvejetainiai lemputes čia vėl,
galėtume paversti šiuos lemputes ant ir išjungti bet 256 unikalių modelių.
>> Dabar tai yra tiek problematiškas.
Ne tiek daug anglų ir romanų kalbos, bet tikrai
kai jūs įdiegti, už Pavyzdžiui, Azijos kalbomis, kurie
turi daug daugiau simbolių, nei kaip 26 abėcėlės raidės.
Mes iš tikrųjų gali prireikti daugiau nei vieną baitą.
Ir, laimei, į Pastaraisiais metais visuomenė
priimti kitus standartus, kurie naudoja daugiau nei vienas baitas už mokestį.
>> Bet dabar C, pagal nutylėjimą yra tik vienas baitas ar aštuonis bitus.
Sveikasis skaičius, tuo tarpu, yra keturi baitų, kitaip žinoma kaip 32 bitai.
Tai reiškia, kas kuo skaičius galime atstovauti su int
matyt?
Su milijardo.
Taigi, tai keturis milijardus suteikti arba užtrukti.
2 prie 32th galios, jei mes prisiimti jokių neigiamus skaičius
ir tiesiog naudoti visi teigiami numeriai, tai keturis milijardus
suteikti arba užtrukti galimybes.
Plūdė, tuo tarpu, yra skirtingo tipo duomenų tipo C. Jis vis dar numeris
bet tai realus skaičius.
Kažkas su kablelio.
Ir paaiškėja, kad C taip pat naudoja keturis baitus
atstovauti slankiojo kablelio vertybes.
>> Deja, kaip daugelis plūduriuojančius taško verčių ten pasaulyje?
Kiek realus skaičiai yra ten?
Yra begalinis skaičius, ir kad nesvarbu
ten begalinis skaičius sveikieji skaičiai.
Taigi mes jau natūra kasti sau duobę čia.
Pagal kurią matyt computers-- ne Mažiausiai programos parašytos C temperatūroje them--
gali tik tikėtis, kaip aukštas, kaip keturis milijardus suteikti arba užtrukti,
ir slankiojo kablelio vertybes gali tik matyt
turėti tam tikrą baigtinį kiekį tikslumu.
Tik tiek daug skaitmenų po jų kablelio.
>> Nes, žinoma, jei turite tik 32 bitai,
Aš nežinau, kaip mes ketiname eiti apie atstovaujančių nekilnojamojo numbers-- tikriausiai
su skirtingų tipų modelius.
Bet ten tikrai baigtinis Daug tokių modelių,
todėl čia taip pat tai yra problemiškas.
>> Dabar mes galime šiek tiek išvengti problemų.
Jei nenorite naudoti plūdę, galite naudoti du kartus
C, kuris suteikia jums aštuonis baitų, kurie yra būdas daugiau galimų modelių nuliai
ir tie.
Bet tai vis dar ribotas, kuris vyksta būti problemiška, jei jums reikia parašyti programinę įrangą
grafikos ar išgalvotas matematinės formulės.
Taigi jums gali iš tikrųjų nori suskaičiuoti daugiau nei tai.
Ilgai long-- kvailai named-- taip pat aštuonių baitų arba 64 bitų,
ir tai yra du kartus tol, kol int, ir tai ilgą sveiko skaičiaus.
>> Pramogos fact-- jei int yra keturi baitai, kiek yra C: paprastai ilgai?
Taip pat keturių baitų, tačiau ilgai ilgai aštuonių baitų,
ir tai yra dėl istorinių priežasčių.
>> Bet Takeaway dabar yra tik tai, kad duomenys turi
turi būti pavaizduoti computer-- ŠTAI fizinis įrenginys su elektros,
jis paprastai vairavimo tie nuliai ir ones--
su ribotais kiekiais tikslumu.
Taigi, kas yra problema tada?
>> Na ten problema iš sveikojo skaičiaus perpildymo.
Ne tik C, bet kompiuteriai apskritai.
Pavyzdžiui, jei tai yra baitų verta bit--
todėl, jei tai yra aštuoni bit-- visi iš kurių yra numeris vienas.
Kas numeris yra atstovaujančių jei mes manome,
tai visas teigiamas vertybes dvejetainiu?
>> 255, ir tai ne 256, nes nulis yra žemiausia skaičius.
Taigi 255 yra aukščiausias vienas, tačiau problema
tarkime, kad aš norėjau prieaugio šį kintamąjį, kad
naudoja aštuonis bitus iš viso jei noriu prieaugio jį.
>> Na, kai aš pridėti vienas visiems šiems tie,
galite galbūt įsivaizduoti visually-- tik kaip atlikti vieną naudojant decimals--
kažkas ketina tekėti į kairę.
Ir iš tiesų, jei aš pridėti numerį viena tai, kas vyksta dvejetainis
yra tai, kad yra kupina atgal iki nulio.
>> Taigi, jei jūs tik use-- ne int, bet vienas baitas skaičius sveikieji skaičiai
programoje, kurią kuo greičiau default-- jūs gaunate 250, 251, 252, 253, 254,
255-- 0 ateina po 255, kuris yra tikriausiai ne ką
vartotojas ketina tikėtis.
>> Dabar tuo tarpu slankiojo kablelio pasaulį, Jūs taip pat turi panašią problemą.
Ne tiek daug su didžiausiu number-- nors tai dar klausimas.
Bet su tikslumo suma kad jūs galite atstovauti.
Taigi leiskite pažvelgti į šį pavyzdį Čia taip pat iš šiandienos šaltinio code--
plūdės 0.c.
>> Ir atkreipkite dėmesį, kad tai super paprasta programa, kuri
matyt turi atsispausdinti kas vertė?
Ką lažintis tai vyksta spausdinti nors ten iš naujos sintaksės tiek
čia?
Taigi, tikiuosi, 0.1.
Taigi iš vienos dešimtosios lygiavertis nes darau 1 dalijami iš 10.
Aš saugoti atsakymą į kintamąjį vadinamas f.
Tai kintamasis yra tipo plūdės, kuri yra raktažodis Aš tiesiog pasiūlė egzistavo.
>> Mes nematėme prieš tai, bet tai tipo tvarkingas būdu printf
nurodyti, kaip daug skaitmenų jums norite matyti po kablelio.
Taigi, šis žymėjimas reiškia tiesiog kad čia vietos rezervavimo ženklas.
Tai už slankiojo kablelio vertė, ir oh, beje,
parodyti jį su po dešimtainio taško su vienas skaičius po kablelio.
Štai numeris Reikšmingų skaitmenų,
taip sakant, kad jūs galbūt norėsite.
>> Taigi leiskite man eiti į priekį ir daryti kad plūdė-0, ./float-0,
ir, matyt, 1, padalytą iš 10 yra 0,0.
Dabar kodėl tai yra?
>> Na vėl, kompiuteris, atsižvelgiant man pažodžiui, ir aš parašiau 1
ir parašiau 10, ir atspėti, kas yra manoma, duomenų tipas šioms dviems
vertybes?
Int, tai techniškai kažkas šiek tiek skiriasi.
Tai paprastai ilgas, bet tai galiausiai neatsiejama vertė.
Ne slankaus kablelio reikšmė.
>> Kuris yra pasakyti, kad, jei tai yra int ir tai yra int
problema yra ta, kad kompiuterio neturi galimybės
net laikyti, kad kablelio.
Taigi, kai jūs darote, 1 skirstomi 10, naudojant skaičiais
tiek skaitiklį ir vardiklis, atsakymas turėtų būti 0,1.
Bet kadangi computer-- tie, kurie integers--
nežino, ką daryti su 0,1.
>> Taigi, kas yra aiškiai daro?
Tai tiesiog mesti jį šalin, ir ką aš matau galiausiai
yra 0.0 tik todėl, kad aš primygtinai reikalavo, kad printf parodyti man vieną kablelio.
Bet problema yra ta, kad jei jūs padalinti sveikasis skaičius iki sveikojo skaičiaus,
jūs get-- pagal apibrėžimą iš C-- sveikasis skaičius.
Ir ji nesiruošia daryti kažką gražaus ir patogiai
kaip apvalios jį iki artimiausia aukštyn arba žemyn.
Ji ketina trumpinti viskas po dešimtainio.
>> Taigi tiesiog intuityviai, kas tikriausiai pataisyti?
Kas paprasčiausias fix čia?
Taip?
Būtent.
Kodėl mes tik gydyti juos kaip slankiojo kablelio vertybes efektyviai
sukant juos į plūdes arba dvejetų.
Ir dabar, jei aš padarysiu plūdės-0, arba, jei aš surinkti plūdės-1,
kuri sutampa su ką tik buvo pasiūlyta.
Ir dabar aš plūdės-0, dabar aš gausiu 0,1.
>> Dabar tai yra nuostabu.
Bet dabar aš ruošiuosi daryti kažkas šiek tiek skiriasi.
Man smalsu pamatyti, kas iš tikrųjų vyksta po gaubtu,
ir aš ruošiuosi spausdinti šį iš 28 skaitmenų po kablelio.
Noriu tikrai pamatyti 0.1000-- infinite--
[Nesigirdi] 27 nuliai po tos 0.1.
>> Na pažiūrėkime, jei tai ką aš iš tikrųjų gauti.
Padaryti plūdės-0 patį failą.
./floats-0.
Leiskite priartinkite dramos atsakymą.
Visą šį laiką, jūs buvote galvoti 1, padalytą iš 10, yra 10%, arba 0,1.
Tai ne.
Bent tiek, kiek kompiuterio atžvilgiu.
>> Dabar why-- Gerai, pilnas melas 1, padalytą iš 10 yra 0,1.
Bet why-- kad nėra Takeaway šiandien.
Tad kodėl kompiuteris manote, skirtingai nuo mums visiems į kambarį,
kad 1, padalytą iš 10 yra tikrai, kad kvailai vertė?
Kas kompiuteris daro matyt?
Kas tai?
>> Tai nėra perkrautas, per se.
Perpildyta yra paprastai, kai jums wrap aplink vertę.
Tai šis netikslumo problema į slankaus kablelio vertė
kur jūs turite tik 32 arba gal net 64 bit.
Bet jei ten begalinis skaičius nekilnojamojo numbers--
numerius su dešimtųjų kiekis ir numeriai thereafter-- tikrai
Jūs negalite atstovauti juos visus.
Taigi kompiuteris davė mums arčiausiai rungtynės
vertę, ji gali atstovauti naudojant, kad daug bitai vertės Aš iš tikrųjų norite,
kuris yra 0,1.
>> Deja, jei jums pradėti daryti matematiką, ar jūs
pradėti įtraukiant šiuos plūduriuojančius rūšių taško vertės svarbaus programs--
finansų programinė įranga, karinė software-- nieko
kur suvokimas yra tikriausiai gana svarbus.
Ir jūs pradėti pridedant numeriai, kaip tai ir pradžia
veikia, kad programinė įranga su tikrai didelėmis žaliavų
arba daug valandų ar daug Dienų arba daug metų,
Šios mažytės mažai klaidų tikrai gali pridėti iki per tam tikrą laiką.
>> Dabar, kaip panaikinti, jei jūs kada nors matyti Supermenas 3 arba Office Space
ir jūs tikriausiai pamenate, kad kaip tie vaikinai pavogė
daug pinigų iš savo kompiuterio naudojant slankiojo kablelio vertybes
ir sudėjus mažai liekanos, tikiuosi, kad filmas
dabar suteikia daugiau prasmės.
Tai yra tai, ką jie užuominos tame filme.
Tai, kad dauguma įmonės turėtų ne ieškoti
po tam tikro skaičiaus po kablelio,
bet tie, kurie frakcijas centų.
Taigi pradėdami pridedant juos, pradėdami padaryti daug pinigų
į jūsų banko sąskaitą.
Štai Office Space paaiškinti.
>> Dabar, deja, ne tik Biuro patalpos, yra
keletas teisėtai nerimą ir reikšmingi poveikiai
iš šių rūšių pagrindinės dizaino sprendimai,
ir iš tiesų viena iš priežasčių, mes naudojame C kurse
yra toks, kad jūs tikrai turite šį pagrindą iki suprasti, kaip kompiuteriai dirbti,
kaip programinė įranga veikia ir ne imtis nieko savaime suprantamu dalyku.
>> Ir iš tiesų, deja, net ir su kad esminis supratimas,
mes, žmonės daro klaidų.
Ir tai, ką aš maniau aš pasidalinti yra tai aštuonių minučių vaizdo įrašą čia imtis
iš Šiuolaikiniai stebuklai epizodas, kuris yra švietimo šou apie tai, kaip viskas veikia
kad dažai dvi nuotraukas kada netinkamo naudojimo
ir supratimas slankiojo kablelio vertybes
paskatino kai reikšminga gaila rezultatus.
Paimkime išvaizdą.
[VIDEO PLAYBACK]
-Mes Dabar grįžti į "inžinerijos Katastrofos "ant Šiuolaikinės stebuklai.
Kompiuteriai.
Mes visi ateis priimti dažnai nelinksma problemų, kurios
gavo su them-- klaidų, virusų, ir programinė įranga glitches-- mažų kainų
mokėti už patogumą.
Tačiau aukštųjų technologijų ir dideliu greičiu karinių ir kosmoso programos paraiškas,
mažiausia problema gali būti padidintas į katastrofą.
>> June 4, 1996, mokslininkai parengė pradėti nepilotuojamas Ariane 5 raketą.
Jis nešėsi mokslo palydovai sukurta
nustatyti, kaip tiksliai Žemės magnetinio lauko sąveikauja
su saulės vėjų.
Raketų buvo pastatyta Europos kosmoso agentūra,
ir pakilo iš savo įrenginio nuo Prancūzijos Gvianos priekrantės vandenų.
>> -At Apie 37 sekundžių į skrydžio, jie pirmą kartą
pastebėjau, kad kažkas negerai.
Tai purkštukai buvo pakreipti tokiu būdu jie tikrai neturėtų.
Maždaug 40 sekundžių į skrydžio aiškiai transporto buvo bėdų,
ir tai, kai jie padarė sprendimas jį sunaikinti.
Diapazonas saugos pareigūnas, su milžiniškas viduriai, spaudžiamas mygtukas
ir susprogdino raketą, kol ji galėtų tapti pavojinga visuomenės saugumui.
>> -Tai Buvo mergautinė kelionė Ariane 5,
ir jos naikinimo veiksmai buvo padėkite dėl škvalas
įtraukti į raketą savo programinę įrangą.
-The Problema Ariadnė buvo, kad
buvo skaičius, kad reikia 64 bitai išreikšti,
ir jie norėjo atsiversti tai prie 16 bitų skaičius.
Jie manė, kad skaičius niekada bus labai didelis.
Tai dauguma tų skaitmenų į 64 bitų skaičius buvo nuliai.
Jie klydo.
>> -The Vienas nesugebėjimas programa sutikti
Skaičiaus natūra generuoja dar buvo ties gedimo priežastis.
Programinės įrangos kūrimas tapo labai brangus dalis naujos technologijos.
Ariane 4 raketa turėjo buvo labai sėkminga.
Tiek daug programinės įrangos sukurtos jis taip pat buvo naudojamas Ariane 5.
>> -The Pagrindinė problema buvo ta, kad "Ariane 5.
Buvo faster-- paspartino greičiau, ir programinė įranga nebuvo apskaitomi, kad.
>> -Iš Raketų naikinimo buvo didžiulis finansinis katastrofa.
Viskas dėl to, kad minutę programinės įrangos klaidos.
Bet tai buvo ne pirmas laiko duomenis konvertavimo problemos
buvo kentėjo modernią raketų technologiją.
>> -In 1991 su pradžios pirmojo Persijos įlankos karo,
Patriot raketų patyrė panašios rūšies
iš skaičių konvertavimo problemos.
Ir kaip rezultatas 28 people-- 28 Amerikos soldiers-- žuvo,
ir apie šimtai sužeistųjų.
Kai Patriot, kuris turėjo apsaugoti nuo gaunamų Scuds,
Nepavyko į ugnį raketa.
>> -Kai Irakas įsiveržė Kuveitas, ir Amerikoje pradėjo Desert Storm 1991 pradžioje,
Patriot raketų baterijas buvo dislokuoti apsaugoti Saudo Arabija ir Izraeliu
iš Irako SCUD raketų atakų.
Patriotas yra JAV vidutinio nuotolio paviršius-oras sistema
pagaminti Raytheon kompanijos.
>> -The Patriot dydis kolektoriaus itself--
tai apie maždaug 20 pėdų ilgio, ir jis sveria apie £ 2000.
Ir tai atlieka maždaug galvutę, Manau, kad tai maždaug £ 150.
Ir pati užtaisą yra aukštos sprogmuo, kuris
turi fragmentus aplink jį.
Taigi iš galvutės korpusas skirta veikti kaip Śrut.
>> -The Raketų atliekami keturių už konteinerį,
ir gabena puspriekabe.
>> -The Patriot priešraketinė sistema nueina dabar bent 20 metų.
Iš pradžių buvo sukurta kaip oro gynybos raketų
numušti priešo lėktuvus.
Per pirmąjį Persijos įlankos karą kai, kad karas atėjo,
armija norėjo jį naudoti numušti Scuds, o ne lėktuvais.
Irako oro pajėgų buvo ne tiek daug problemų,
bet armija nerimauja Scuds.
Ir taip jie bandė atnaujinti Patriot.
>> -Intercepting Priešą raketų važiuojant Mach 5
ketino būti pakankamai sudėtinga.
Bet kai Patriot buvo skubėjome eksploatuoti,
Armija buvo nežino Irako modifikuoti taip, kad
pareiškė savo scuds beveik neįmanoma į jį.
>> -Kas Atsitiko su Scuds kad buvo prasiveržęs buvo nestabili.
Jie buvo klibantis.
Dėl šios priežasties buvo Iraqis-- siekiant gauti 600 kilometrų iš
iš 300 kilometrų nuotolio missile-- paėmė svorio iš priekio galvutės,
ir padarė užtaisą lengvesni.
Taigi dabar "Patriot bando ateiti tuo SCUD, ir dauguma LAIKĄ_
Dauguma LAIKĄ_ tai tiesiog skristi į SCUD.
>> -Kai The Patriot sistemos operatorių supratau Patriot praleido savo tikslą,
jie susprogdino patriotas savo užtaisą išvengti galimų aukų, jei jis
buvo leista patekti į žemę.
>> Išmokėtą sumą buvo tai, ką dauguma žmonių matė kaip dideli ugnies danguje,
ir nesuprastas, nes ašyje SCUD galvučių.
>> -Although Naktiniame danguje, patriotai pasirodė sėkmingai naikina
Scuds, ne Dhahran galėtų būti Nesuklyskite apie jo rezultatus.
Yra patriotas savo radaro sistema prarado kelio priimamą SCUD
ir niekada pradėjo dėl į programinės įrangos trūkumas.
>> Tai buvo izraeliečių, kurie pirmą kartą atrado kad ilgiau sistema buvo,
didesnis laiko skirtumas tapo.
Dėl laikrodis įterptųjų į sistemos kompiuterį.
>> -Apie Prieš dvi savaites iki į Dhahran tragedija,
Izraelis pranešė, kad Gynybos departamentas
kad sistema buvo prarasti laiką.
Po maždaug aštuonių valandų iš eilės, jie pastebėjo,
kad sistema tapus pastebimai mažiau tikslūs.
Gynybos departamentas atsakė sakau visi Patriot baterijų
ne palikti sistemas nuo ilgą laiką.
Jie niekada nesakė, kas ilgą laiką buvo.
8 valandos, 10 valandų, tūkstantį valandų.
Niekas nežinojo.
>> -The Patriot baterija dislokuota kareivinės
ne Dhahran ir jos trūkumų vidaus laikrodis Buvo daugiau nei 100 valandų
apie 25 vasaris naktį.
>> -Ji Vikšrinių laiko tikslumu apie sekundės dešimtadaliu.
Dabar sekundės dešimtas yra įdomus skaičius
nes jis negali būti išreikštas dvejetainiu tiksliai, kuris
tai jis negali būti išreikštas tiksliai bet šiuolaikinio skaitmeninio kompiuterio.
Sunku patikėti, bet naudoti kaip pavyzdį.
>> Paimkime skaičių trečdalį.
Trečdalis negali būti išreikštas dešimtaine tiksliai.
Trečdalis yra 0.333 vyksta begalybės.
Nėra jokio būdo, kaip tai padaryti su absoliutus tikslumas dešimtainį.
Būtent tokios problemos kad atsitiko Patriot.
Ilgiau sistema bėgo, blogiau laiko klaida tapo.
>> -Po 100 veikimo valandų, klaida metu buvo tik apie trečdalis
sekundės.
Tačiau, kalbant apie orientacija raketų važiuojant 5 macho,
tai lėmė sekimo klaidos daugiau nei 600 metrų.
Būtų lemtinga klaida už ne Dhahran karių.
>> -Kas Atsitiko yra Scud įkūrimas buvo aptikti ankstyvojo perspėjimo palydovai,
ir jie žinojo Scud artėjo jų bendrą kryptį.
Jie nežinojo, kur jis atėjo.
Tai buvo dabar iki radaro komponentas Patriot sistemos
ginti Dhahran surasti ir išlaikyti kūrinys gaunamus priešų raketų.
>> -The Radaras buvo labai protingas.
Tai iš tiesų sekti iš SCUD pozicija
ir tada numatyti, kur tai tikriausiai būtų
Kitą kartą radaro siunčiami impulsas iš.
Tai buvo vadinama diapazonas vartai.
>> -Tada Kartą Patriot nusprendžia pakankamai laiko turi
praėjo grįžti ir patikrinti kitas vieta šio aptikto objekto
jis eina atgal.
Taigi, kai jis grįžo į negerai vieta, tai tada nemato objektą.
Ir ji nusprendžia, kad ten buvo ne objektas.
Tai ten buvo klaidinga aptikimo ir jis nukrenta takelį.
>> -The Įeinantis Scud dingo iš radaro ekrano,
vėliau ir sekundes, ją pateko į kareivines.
Scud žuvo 28.
Tai buvo naujausia atleistas per pirmąjį Persijos įlankos karą.
Tragiškai, atnaujinama programinė įranga atvyko auštant kitą dieną.
Programinė įranga trūkumas turėjo buvo fiksuotas, uždarymas
vienas skyrius neramus istorija Patriot raketų.
>> [END VIDEO PLAYBACK]
>> David J. Malan: Štai jį CS50.
Pamatysime jus trečiadienį.
>> [Muzikos grojimo]