>> [MUSIC PLAYING]
>> DAVID J MALAN: Rendben, szívesen vissza CS50.
Ez a kezdete a hét kettő.
Néhány szó az egyik barátai az egyetemen -
ha érdekel, esetleg, vagy most vagy a jövőben bizonyos távon
még egyszer kényelmesebb, oktatás középiskolás diákok egy kis
valamit a számítógép-tudomány, ezt fejét, hogy az URL-t.
Ezek különösen nagy szükség van most a tanárok, különösen, ha
volt néhány expozíció számítástechnika.
>> Így emlékszem, hogy az utolsó alkalom, hogy be néhány adattípusok a C, és a
lehet, hogy elkezdtem a keze piszkos ezekkel eddig
A probléma az egyiket.
És volt egy char.
Így kissé technikai szempontból, milyen egy char mint tudjuk, ma?
>> Szóval ez a karakter, de most Pontosabban most.
Mit értünk karakter vagy az egyéni char?
A nem numerikus jellegű -
így nem feltétlenül.
Kiderült, hogy még a számokat, akár írásjelek és betűk
képviseltette magát az adatok írjon ismert char.
Tehát nem feltétlenül ábécé.
Igen?
>> Szóval ez egy ASCII karaktert.
Tehát, ha úgy gondolja, vissza a héten nullára ha mi volt a byte önkéntesek
jön, és vagy tartsa a kezét vagy nem minden, általuk képviselt bit.
Hanem együttesen, mint egy csoport nyolc, képviseltek a bájt.
És mi vezette be a fogalmat ASCII abban az előadás, ami csak egy
közötti leképezés számokat és betűket.
És ASCII használ, mint azok az emberek hallgatólagos, nyolc bit
hogy képviselje a karaktert.
>> Tehát ennek megfelelően ha nyolc bit mindegyik vesz egy két érték -
nulla vagy egy -
Ez azt jelenti, két lehetőség ez a személy -
nulla vagy egy -
kettő ez az ember, két e személy két ez.
Így összesen két alkalommal kétszer kétszer kétszer kettő -
így két a nyolcadik összesen.
Szóval van egy karakterek száma 256 lehet, hogy tudod
képviselt nyolc bit.
>> Nos, azok, akik beszélnek ázsiai nyelvek is tudják, hogy van még
karakter a világon, mint As és B és Cs és Ds.
És valóban, nem ASCII elegendő sok nyelven a világ.
De még az, hogy egy másik időben.
Most, tudom, hogy a C, ha szeretné hogy képviselje a levelet, egy darab
írásjelek, vagy csak valami karakter a természetben, használjuk a char.
És ez egy byte vagy nyolc bit.
>> Mit szólnál egy int?
Nos, egy int egész szám.
Hány bit, ha emlékszel, volt egy egész szám általában?
Bárki visszahívás?
Szóval ez tipikusan 32.
Ez valójában attól függ, hogy a számítógép hogy használ.
De a készüléket, és a sok számítógépek, ez 32 bites vagy négy
bájt - nyolcszor négy.
És ints csak tárolásához használt számokat, akár negatív,
pozitív, vagy nulla.
>> És ha van 32 bites, és csak törődnek pozitív számok, lehet
valaki stadion, hány egészek egy számítógép is képviseli a
nullára fel?
Így lenne két 32, amely nagyjából négymilliárd.
Tehát ezeket a hatásköröket a két lesznek visszatérő témák a számítástechnikában.
Mint látni fogjuk, ők nagyon kényelmes dolgozni, még ha ez nem is
egyszerűen nem a matek az ember feje.
>> Szóval mondom mintegy négy milliárd euróra.
Most, egy hosszú, hosszú -
akkor milyen kitalálni.
Ez hosszabb, mint egy int.
Hány bit?
Így 64 bit vagy nyolc bájt.
Ez csak azt jelenti, hogy még akkor is képviselt nagyobb számban, nagyobb pozitív vagy
nagyobb negatív számok.
>> És mi van a float?
Ez egy lebegőpontos érték 32 bit.
Ez csak egy valós szám, valami a tizedespont.
De ha inkább szüksége van több helyen a tizedesvessző után, vagy szeretne
képviselnek nagyobb szám néhány része után, akkor a
dupla, ami 64 bit.
>> De van egy érdekes elvihető itt.
Tehát, ha ints korlátozza 32 bit és még a hosszú longs korlátozza 64
bit, hogy a fajta felveti a kérdést, mi van, ha tényleg akar számolni
nagyobb, mint 4 milliárd egy int?
Nos, akkor csak használ egy hosszú, hosszú.
De mi van, ha szeretné számolni magasabb kettőnél a 64., ide vagy oda?
>> Nos, ez egy nagy szám.
De végül, lehet, hogy tényleg érdekel ilyen típusú értékek
különösen akkor, ha az adatbázisszerver és kezdő összegyűjteni sok-sok
és sok-sok adat és kiosztása egyedi számok minden egyes az adatokat.
Tehát ilyen problémája.
És hasonlóképpen, a lebegőpontos értékek - úszók vagy páros -
ha már csak véges számú bit, összesen hány számot tudnád
esetleg képvisel?
>> Nos, ez kevésbé egyértelmű, ha jár tizedespont.
De ez biztosan véges.
Ha van egy véges számú bitet, véges számú emberre, egy véges
száma izzók, biztosan akkor csak képviseli véges számú
lebegőpontos értékeket.
De hány valós számok van, hogy a világban?
Van egy végtelen.
Szóval ez a fajta probléma, mert nincs végtelen mennyiségű
memória vagy RAM belül a számítógépek.
Szóval néhány kihívást jelentő dolog történhet.
>> Szóval menjünk előre, és próbálja , hogy ezt itt.
Hadd menjek előre, és nyisd ki gedit.
Én megyek előre, és mentse a fájlt úgynevezett "floats0.c", csak hogy
megfelel egy példa, amely online elérhető, ha szeretné.
És én megyek előre, és határozza meg, hogy a következő -
Én megyek előre, és azt mondják, int fő érvénytelen, hiszen gyakran.
>> És akkor ez a program, fogok kijelentik magamnak egy úszó, így egy 32 bites
nevű változó f, önkényesen.
És akkor fogom tárolni benne Nem tudom, egy tizedét, így 0,1.
Így fogom kifejezni, hogy az egyik osztva 10, ami tökéletesen
legitim C.
>> És akkor a második sorban, egyszerűen szeretné kinyomtatni, hogy értéket.
Így emlékeztetni arra, hogy tudjuk használni az ismerős printf.
Nem akarjuk, hogy a% i egy int.
Azt akarjuk, hogy a% f egy úszó.
És akkor fogok csinálni backslash n szoros idézet, vessző, f, pontosvessző.
>> Tehát itt az én programot.
Van már egy bug.
Van valaki, akinek ez a kattintás Már szeretnénk mutatni legalább
Egy bug csináltam?
Igen?
Igen.
Elfelejtettem "# include" a felső, akkor tünete, amely, ha megpróbálom
össze ez lesz az, hogy a fordító fog kiabálni rám,
mondván meghatározatlan szimbólum vagy valami ebben az értelemben.
Nem értesz valamit mint printf.
>> Így fogok tenni "# include ", Mentse a fájlt.
És most már jobb formában.
De én is fog mutatni ki az egyik új részlet ma.
Amellett, hogy a meghatározó helyre tulajdonosai, mint a% f% i% s, akkor
néha magatartásának befolyásolására , hogy a helyőrző.
Például, abban az esetben, ha a lebegő pontértéke, ha csak azt akarom
megjeleníteni egy tizedesjegyig után időszak, én valójában 0.1f.
Más szóval, azt külön a és f A százalék jel 0,1, csak
mondja printf, akkor lehet, hogy egy egész csomó szám után a tizedes
pont nekem.
De én csak azt akarom, hogy az egyik közülük.
>> Szóval megyek előre, most és spóroljon a program, menj be a terminál
ablak, és én megyek előre és írd be: make úszó 0, adja meg.
Úgy látom, hogy kissé rejtélyes vonal kezd, hogy több értelme, mint mi
kötekedik szét ezen a héten és a jövő.
Most megyek előre és fuss úszó nulla.
És átkozott.
>> Tehát van egy másik hiba Itt valamilyen okból.
Biztos vagyok benne, hogy egy tized, vagy egy osztva 10, nem 0.0.
Talán csak nem keresek A számok elég.
Akkor miért nem azt mondom, két 0,2, hogy két tizedes, hanem csak egy.
Hadd menjek vissza a terminál ablak Itt és a hit egy-két alkalommal
látom a történelem.
Van, hogy úszó nullát, , majd újra.
És most be.
>> És most már biztos vagyok benne, hogy ez helytelen.
És nem tudtam nem három, négy, és én vagyok valószínűleg fog is látom nullák.
Szóval, hol van a hiba?
Egy osztva 10 legyen 0,1.
Valaki szeretné, hogy a stab, hogy mi az alapvető kérdés?
Igen?
Mindketten egész.
Szóval, mi van?
Tehát egy osztva 10, ez mit csinálok a matematikában.
És kapok 0.1.
>> Igen.
És ez így van valóban ebben a kérdésben.
Amikor Ön egy egész egy számítógépes és ossza meg egy másik egész,
A számítógép alapértelmezés szerint fog azt feltételezik, hogy szeretne egy egész szám.
A probléma azonban, természetesen, hogy a 0,1 nem egész szám.
Ez egy valós szám.
És akkor mi van a számítógép nem a alapértelmezésben ez csak eldobja
Mindent a tizedesvessző után.
Nem kerek le vagy fel önmagában.
Csak dob el mindent tizedesvessző után.
És most, hogy van értelme.
Mert most vagyunk világosan maradt nulla.
>> De várjunk csak egy percet.
Én nem látok egy int nulla.
Én valóban látta 0.00.
Szóval hogyan tudom összeegyeztetni ezt most?
Ha valaki osztva 10 nulla, de én látva 0,00, hol van ez kezd
át vissza a valós szám?
Igen.
Pontosan.
>> Tehát itt a sorban öt, amikor valóban tárolni, hogy a 0,1, amely aztán
csonka nullára, belsejében egy úszó, ez gyakorlatilag egyenértékű
tárolás nem int, hanem Valóban, mint a float.
Sőt, én majd a printf a kifejezetten nyomtatás ez a szám két
tizedes bár lehet, hogy valójában nem ilyen.
>> Tehát ez a fajta szar, nem igaz?
Úgy látszik, nem tudja matematika, legalábbis ezen a szinten a
pontosság, egy számítógép.
De biztosan van egy megoldás.
Mi a legegyszerűbb fix tudnánk talán igen, akár csak ösztönösen ide
megoldani ezt?
Igen?
Kapcsolja be az egész szám a -
igen.
Még ha nem vagyok egészen biztos benne, mi folyik itt valójában, ha
alapvetően arról szól, hogy ezeket mind hogy ints, jól, miért nem
tenni, hogy 10,0, így ez 1.0, mentse a fájlt.
Hadd menjek vissza a alsó és újrafordítani.
Hadd futtassa újra.
És ott -
Most kaptam a tizede képviseletében a 0.10.
>> Rendben van.
Szóval ez nem rossz.
És hadd rámutatni egy másik út tudtuk volna megoldani ezt.
Hadd tényleg térjen vissza az időben hogy mikor volt ez, mint egy
tizedik egy perce.
És hadd menjen előre, és mentse a fájlt mint egy másik fájl nevét, csak azért, hogy
Van egy kis ellenőrzőpont.
Szóval ez volt az egyik verzió.
És most hadd menjen előre, és ezt még egy változat.
Hívjuk ezt a verziót két nulla indexelt.
>> És fogok helyette csinálni ez - Tudod mit?
Hozzáadása dot nulla működik ebben az esetben.
De tegyük fel, az egyik volt a változót.
Állítólag 10 volt változó.
Más szavakkal, tegyük fel, hogy nem tudtam csak a kemény-kód 0,0 végén
Ennek aritmetikai kifejezés.
Nos, valóban tenni valamit zárójelben nevezzük casting.
Tudom leadni, hogy egész 10 úszó, és én is, hogy az egész öntött egy-egy
float, valamint.
Aztán a matek, hogy fog tenni hatékonyan 1,0 osztva 10,0,
az eredménye, ami túllép az f, mint korábban.
Tehát, ha úgy újrafordítani ezt teszi úszók 2, és most úszik 2. kapok ugyanazt
válaszolni, valamint.
>> Tehát ez egy meglehetősen kitalált példa, megoldani ezt a problémát
bevezetésével casting.
De általában, öntés lesz hatalmas dolog, különösen a
probléma meg kettő egy hét múlva, amikor a szeretnénk átalakítani egy adattípus
egy másik, hogy a végén a nap képviselve vannak azonos módon.
Végén a nap, minden egyes dolog, amit beszéltünk eddig is
csak ints a motorháztető alatt.
Vagy ha ez túl alacsony szinten te, ők csak számok
a motorháztető alatt.
Még karakterekből ismét felidézni héttől nulla, számok
a motorháztető alatt.
>> Ami azt jelenti, hogy tudja alakítani között különbözõ típusú számokat, ha
ők csak bit.
Meg tudja alakítani a számok között és levelek, ha ők csak
bit, és vice versa.
És öntés ily módon egy olyan mechanizmus programozás lehetővé teszi, hogy erőszakkal
megváltoztassa adattípust a másikra.
Sajnos, ez nem olyan egyszerű, mint talán volna.
>> Én megyek vissza úszók 1, amely az egyszerűbb,
egyszerű egyik 0,0 feltöltés minden.
És ahogy egy gyors frissítő, hadd menjen előre, és újrafordítani
ez, hogy úszók 2 -
Sajnálom, de ez, hogy úszik 1.
És most fussunk úszók 1.
És az alsó, észre hogy valóban kap 0,1.
Tehát, a probléma megoldódott.
>> De még nem.
Én most megy, hogy egy kicsit furcsa, és én megyek vissza az én
printf utasítás és mondjuk, tudod mit?
Szeretném megerősíteni, hogy ez a tényleg tizede.
És fogok, hogy szeretné látni ezt , mondjuk, öt tizedes.
Ez nem jelent problémát.
Tudom megváltoztatni a két öt, Én újrafordítani a make.
Azt futtasd azt lebeg 1.
Keres nagyon jó.
Az alapvető ellenőrzést is a végén ott van, de Kezdek egy kicsit kalandos.
Fogok változtatni 0,5-0,10.
Látni akarom 10 számjegy után A tizedes.
>> És én megyek előre, és újrafordítani ezt, és futtassa újra úszik 1.
Valahogy bánta teszteltem tovább, mert a matematika nem annyira
helyes már, úgy tűnik.
De várjunk egy percet, talán ez csak a véletlen műve.
Lehet, hogy a számítógép jár egy kicsit furcsa.
Hadd menjek előre, és nem 20 tizedes és megnyugtatni magam, hogy tudom
hogyan kell csinálni matek.
Tudom, hogyan kell programozni.
Legyen úszók 1 újrafordítani, és a fenébe is.
Ez nagyon, nagyon kezd messze a védjegyet.
>> Szóval, mi folyik itt?
Ösztönösen, amely a mi feltételezések korábban körülbelül akkora, adattípusok,
mit kell itt történik a motorháztető alatt?
Igen?
Pontosan.
Ha szeretné, hogy ez sokkal pontosság, ez egy fene nagy pontosság -
20 szám tizedesvessző után.
Nem lehet esetleg jelent tetszőleges számot, ha van egy
tetszőleges számú bit.
De mi nem.
Egy úszó, már csak 32 bit.
>> Tehát, ha 32 bit csak permutálódnak a módon - akárcsak mi emberek a, színpadon
kezét felfelé vagy lefelé - a véges számú módon, csak véges számú
A valós számok is képviseli azokkal bit.
És így a számítógép végül az lesz, hogy
kezd vágás sarkok.
A számítógép tudja elrejteni ezeket az adatokat tőlünk egy kis időt.
De ha elkezdjük dugta meg a számokat és keres egyre messzebb és messzebb a
záró számok az egész szám, akkor kezdjük látni, hogy ez
tulajdonképpen közelítő ötlet egytized.
>> Így kiderül, tragikusan, van végtelen számú számok
nem tudunk jelent pontosan a számítógép, legalább egy véges
bitek száma, egy véges RAM mennyisége.
Most sajnos, ez néha van valós következményei vannak.
Ha az emberek nem nagyon értékelik ezt vagy valami magától értetődőnek azt a tényt,
hogy a számítógép csak csináld, amit azt mondani, hogy igen, és nem
megérteni ezeket mögöttes képviselet adatai -
ami, őszintén szólva, az egyes nyelvek rejtve maradnak a felhasználó, ellentétben a C -
néhány rossz dolog történhet.
>> És amit gondoltam, hogy a az egy lépést hátra.
És ez körülbelül egy nyolc perces videó.
Ez sugárzott néhány évvel ezelőtt, és ez ad betekintést valójában mi mehet
baj, ha alul-értékelni ezeket típusú adatok az igen túlságosan
valós világban.
Ha tudnánk homályos a fények néhány percig.
>> SPEAKER 1: Most pedig a mérnöki
katasztrófák Modern csodák.
>> Számítógépek -
már minden jön, hogy elfogadja a gyakran zavaró problémák
, hogy menjen velük.
Hibák, vírusok, és a szoftver hibák olyan alacsony áron, hogy fizessen a
kényelem.
De a high-tech és a nagy sebességű katonai és űrprogram
alkalmazások, a legkisebb probléma lehet nagyítani a katasztrófa.
>> Június 4-én, 1996, tudósok kész indít pilóta nélküli Ariane 5 rakéta.
Ez vitt Tudományos műholdak megteremtésén pontosan hogyan
A Föld mágneses mezeje kölcsönhatásba a napszél.
A rakéta épült az európai Űrügynökség és emelte ki annak
lehetőség a tengerparton Francia Guyana.
>> JACK GANSSLE: Körülbelül 37 másodperc után a repülés, először észre
valami rosszul megy.
A fúvókák is forgatható a olyan módon, hogy tényleg nem.
Körülbelül 40 másodperccel a repülés, egyértelműen a jármű volt a baj.
És ez az, amikor elkészítették a döntés, hogy elpusztítsa azt.
A tartomány biztonsági tiszt, a óriási belek, megnyomta a gombot,
felrobbantották a rakéta előtt lehetett lesz veszélyt a közbiztonságra.
>> SPEAKER 1: Ez volt az első út Az Ariane 5, és a pusztítás
került sor, mert egy hiba beágyazott A rakéta szoftver.
>> JACK GANSSLE: A probléma az Ariane az volt, hogy egy számot
hogy a szükséges 64 bites kifejezni.
És azt akarták átalakítani hogy egy 16-bites szám.
Azt feltételezték, hogy a szám soha nem volt lesz nagyon nagy, hogy a legtöbb
a számjegyek a 64-bites szám is nulla.
Tévedtek.
>> SPEAKER 1: A képtelenség az egyetlen szoftver program elfogadja a fajta
generált egy másik volt a gyökere a hiba.
Szoftverfejlesztés vált nagyon költséges része az új technológia.
Az Ariane 4 rakéta már nagyon sikeres volt, így sok a szoftver
létre azt is használt Ariane 5.
>> PHILIP COYLE: Az alapvető probléma az volt, hogy az Ariane 5 gyorsabb volt,
felgyorsult gyorsabb.
, És a szoftver nem volt elszámolni ezt.
>> SPEAKER 1: A pusztítás a rakéta egy hatalmas pénzügyi katasztrófa,
minden miatt egy percig szoftver hiba.
De nem ez volt az első alkalom, adatok konverziós problémák is gyötörte modern
rakéta technológia.
>> JACK GANSSLE: 1991-ben, és a start Az első Öböl-háború, a Patriot
rakéta tapasztalt hasonló jellegű Egy szám konverziós probléma.
Ennek eredményeként a 28 amerikai katonák meghalt és mintegy 100 másik megsebesült
amikor a Patriot, ami kellett volna elleni bejövő Scuds,
nem a tűz egy rakéta.
>> SPEAKER 1: Ha Irak lerohanta Kuvait és Amerikában indított Sivatagi Vihar
1991 elején, Patriot rakéta elemek vezényeltek védeni Szaúd-Arábia
és Izrael az iraki Scud rakéta támadások.
A Patriot egy amerikai közepes hatótávolságú föld-levegő rendszer által előállított
A Raytheon cég.
>> THEODORE Postol: A méret a Patriot elfogó maga nagyjából
20 méter hosszú.
És súlya mintegy 2000 kg.
És ez hordoz robbanófejet mintegy -
Azt hiszem, ez nagyjából 150 £.
És a robbanófej maga a nagy robbanó amely
töredékek körül.
A burkolat a robbanófej célja úgy viselkedni, mint sörét.
>> SPEAKER 1: A rakéták hajtják négy egy konténer és szállítják
egy félpótkocsi.
>> PHILIP COYLE: The Patriot rakétavédelmi rendszer megy vissza
legalább 20 éve.
Ez volt az eredeti, mint egy légvédelmi rakéta
lő le az ellenséges repülőgépek.
Az első Öböl-háború, amikor a háború jött, a hadsereg akarta használni
lő le Scuds, nem repülőgépek.
Az iraki légierő nem volt így sok a probléma.
De a hadsereg aggódott Scuds.
És így igyekeztek frissíteni a Patriot.
>> SPEAKER 1: lehallgató ellenséges rakéta közlekedő mach öt volt
lesz elég ambiciózusak.
De amikor a Patriot rohant be szolgáltatás, a hadsereg nem volt tudatában a
Iraki módosítással, hogy tette a Scuds szinte lehetetlen, hogy elérje.
>> THEODORE Postol: Mi történt a Scuds voltak
jön a volt stabil.
Voltak ingadozik.
Ennek oka az volt az irakiak, a Ahhoz, hogy 600 kilométerre a
300 km-es hatótávolságú rakéta került Tömeg az első robbanófej.
Tették a robbanófej könnyebb.
Tehát most a Patriot megpróbálja hogy jöjjön a Scud.
És a legtöbb időt, a túlnyomó többség az idő, akkor csak
repülni a Scud.
>> SPEAKER 1: Ha a Patriot rendszer szolgáltatók felismerték a Patriot fogadott
a cél, hogy felrobbantotta a Patriots robbanófej hogy elkerülje az esetleges
veszteségek, ha azt szabad hogy leesik a földre.
>> THEODORE Postol: Ez volt, amit a legtöbb az emberek látták, amint nagy tűzgolyók az égen
és félreértik, mint elfogja A Scud robbanófejeket.
>> SPEAKER 1: Bár az éjszakai égen Patriots úgy tűnt, hogy sikeresen
megsemmisítése Scuds, a Dhahran ott lehet tévedés arról a
teljesítmény.
Ott, a Patriot radarrendszer elveszett nyomon bejövő Scud, és soha nem
indított szoftverhiba miatt hiba.
>> Ez volt az izraeliek, akik először fedezte fel hogy minél hosszabb a rendszer
volt, annál nagyobb az időeltérés esedékessé vált, hogy az óra
beágyazott rendszer számítógéphez.
>> JACK GANSSLE: Körülbelül két héttel a tragédia Dhahran, az izraeliek
jelentette a Honvédelmi Minisztérium hogy a rendszer időveszteség.
Körülbelül nyolc óra futás, észrevették, hogy a rendszer
egyre észrevehetően kevésbé pontos.
A Védelmi Minisztérium reagált mondja az összes Patriot akkumulátorok
, hogy ne hagyja el a rendszer a hosszú ideig.
Soha nem azt mondta, amit hosszú idő volt.
Nyolc óra?
10 óra?
1000 óra?
Senki sem tudta.
>> SPEAKER 1: The Patriot akkumulátor állomásozó A barakkban Dhahran
és hibás belső óra volt több mint 100 óra éjjel
Február 25.
>> JACK GANSSLE: A nyomon az idő egy pontossága körülbelül egy tized másodperc.
Most, egy tized másodperccel egy érdekes számot, mert nem lehet
kifejezve pontosan bináris, ami azt jelenti, nem lehet pontosan kifejezni
a modern digitális számítógép.
Nehéz elhinni, de használja ezt a példát.
Nézzük az első számú harmadikat.
Egyharmada nem lehet kifejezni decimális pontosan.
Egyharmada 0.333 folyik az a végtelen.
Nincs módja, hogy a abszolút pontosság tizedes.
Ez pontosan ugyanaz a fajta probléma hogy történt a Patriot.
Minél hosszabb a rendszer futott, a legrosszabb az idő, hiba volt.
>> SPEAKER 1: Miután 100 üzemóra, a hiba csak az időben
mintegy egyharmada a második.
De tekintve a célzás egy rakéta utazás Mach öt, azt eredményezte, hogy
a követési hiba több mint 600 méter.
Lenne egy végzetes hibát A katonák Dhahran.
>> THEODORE Postol: Mi történt a Scud elindítása volt kimutatható a korai
figyelmeztetés műholdak.
És tudták, hogy a Scud jött azok általános irányt.
Nem tudták, honnan jön.
>> SPEAKER 1: volt már, hogy a radar eleme a Patriot rendszer
védő Dhahran megtalálni és megtartani nyomon a bejövő ellenséges rakéta.
>> JACK GANSSLE: a radar nagyon okos.
Ez valóban nyomon helyzetét A Scud majd megjósolni, ahol
valószínűleg a következő alkalommal A radar küldött impulzus ki.
Ez volt az úgynevezett tartomány kaput.
>> THEODORE Postol: Akkor, amikor a Patriot dönt elegendő idő telt el, hogy menjen
vissza és ellenőrizze a következő helyen ez észlelt objektum, megy vissza.
Tehát, ha visszament a rossz helyén, akkor nem látja objektumot.
És úgy dönt, hogy nem volt tárgya, ez egy hamis felderítése és
csepp a pályán.
>> SPEAKER 1: A beérkező Scud eltűnt A radar képernyőjén, és
másodperccel később becsapódott a laktanyába.
A Scud megölte 28 és ez volt az utolsó lőtt az első Öböl-háború.
Tragikus, a frissített szoftver megérkezett a Dhahran a következő napon.
A szoftver hiba volt fix, záró egy fejezetet a bajba jutott
története Patriot rakéta.
>> Patriot valójában egy mozaikszó A Fázisvezérelt nyomkövető
Metszéspontja cél.
>> DAVID J MALAN: Rendben, így a kijózanító példa, az biztos.
És szerencsére, az alacsonyabb szintű hiba nem valami, hogy mi lesz
általában értékelni, természetesen nem pedig néhány
legkorábbi programok.
Inkább a legtöbb hiba azt is megtudhatod találkozás lesz logikus a természetben,
szintaktikai természetű, amelyben a kód csak nem működik rendben.
És tudod, hogy elég gyors.
>> De különösen akkor, ha eljutunk a a szemeszter végén, ez lesz a
egyre inkább annak lehetőségéről, hogy Tényleg azt hiszed, nehéz a tervezés
a programok és a mögöttes képviselet
ott is az adatok.
Például mindjárt a MySQL, amely egy népszerű adatbázis motor
amelyek segítségével a weboldalak adattárolásra a háttérben.
És akkor meg kell kezdeni, hogy dönteni a a végén a félév nem csak az, amit
típusú adatok ebbe az irányba kell használni de hogy pontosan hány bitet kell használni,
függetlenül attól, hogy a tárolni kívánt óra a dátumok és időpontok, mint idő, és még
dolgok, mint a milyen nagy akarsz a egyedi azonosító, hogy, mondjuk, a felhasználók
az adatbázisban.
>> Sőt, ha néhány van már Facebook számlák jó ideje,
és tudja, hogyan kell, hogy hozzáférjenek a felhasználói ID -
ami néha megjelenik a profil URL-je, kivéve, ha már kiválasztott egy
beceneve az URL, vagy ha már használt Facebook grafikon API, a
nyilvánosan elérhető API, amellyel kérheti Facebook a nyers adat -
tudod mi a numerikus azonosító.
És néhány évvel ezelőtt, a Facebook alapvetően kellett változtatni használja
egyenértékű ints használata hosszú sokáig, mert az idő múlásával a felhasználók jönnek
és megy, és hozzon létre sok számlák és hamis számlákkal, még ők is nagyon könnyen
tudták kimeríteni olyasmi, mint egy 4 milliárd lehetséges értéke, mint egy int.
>> Így több az ilyen jellegű kérdések az úton is.
Jól van, ez volt casting.
Ez pontatlanság.
Néhány gyors bejelentések.
Így szakaszok hivatalosan kezdődik a jövő Vasárnap, hétfő, kedd.
Majd hallani mailben később ezen a héten mint a rész feladat.
És akkor is itt, ezen a ponton, hogy hogy változtassa meg a részt, ha a
menetrend mára megváltozott, vagy a komfort mára megváltozott.
Közben P-set egy és hacker egy olyan mivel ez a csütörtök a lehetőséget, hogy
kiterjeszti a határidőt egy a előírások péntek
egy tipikus módon.
>> Ismerd fel, hogy tartalmazza a probléma set specifikáció utasításokat
hogyan kell használni a CS50 készüléket, győződjön meg, valamint néhány CS50 speciális eszközök
mint a stílus 50, amely az Ön visszacsatolással dinamikusan a
minősége a kódot stílus és ellenőrzés 50, ami az Ön számára
dinamikus visszajelzést, hogy a kód helyessége.
Bocsáss meg, hogy még mindig vasalás ki néhány csomó visszacsapó 50.
Néhány az osztálytársaival, akik nem indul körül 04:00 péntek este, amikor
A spec felment észre azóta néhány hiba, hogy mi dolgozunk
keresztül, és elnézést, aki tapasztalt indokolatlan frusztrációt.
Az én hibám.
De majd nyomon követi a CS50 Beszéljétek meg, amikor, hogy megoldódott.
>> Tehát egy szó pontszámok magukat.
Így lesz egy-két hétig, mielőtt kezdenek visszajelzést probléma határozza
mert még nincs tanítási fickó.
És még akkor is, kezdjük értékelni A C probléma határozza, mielőtt
menj vissza, és értékeli semmiből így hogy minél több releváns
visszajelzések gyorsabban.
De általában egy a tananyag, CS50 probléma határozza értékelik mentén
a következő négy tengely -
körét, korrektség, design, és stílus.
>> Köre lesz a szám általában nulla és öt, hogy
rögzíti, hogy mennyi a darab, amit leharapta.
Általában, ha szeretné, hogy ez az öt.
Akkor legalább megpróbált mindent.
És észre, hogy ez egy multiplikatív tényező úgy, hogy ezzel csak egy része a
probléma meg nem a legjobb stratégia.
>> Eközben több nyilvánvaló az jelentősége korrektség -
egyszerűen a programot korrekt tiszteletben tartja a specifikáció?
Ez a súlyozott szándékosan több erősen, mint a másik két tengely által
háromszorosára, mert felismertük, jellemzően fogsz tölteni
sokkal több időt kergeti néhány hibát, kezd a kód működik, akkor
vannak beljebb, és választás megfelelő változó nevek és a
mint például, amely a másik végén A spektrum a stílus.
>> Ez nem azt jelenti, a stílus nem fontos, és mi prédikálni át
idő mind előadások és szakaszok.
Stílus utal az esztétika a kód.
Már választott jól megnevezett változókra amelyek rövid, de valamivel
leíró?
Van a kódot tagolt, mint amit látott előadás és módon következetes
a stílus 50?
>> Végül a mintaoltalom ott a közepén.
Design a keményebb, hogy a ujját, mert ez sokkal
szubjektív.
De ez talán a legfontosabb A három tengely tekintetében pedagógiai
értéke az idő múlásával, és ez lesz a A tanítási fickó lehetőséget
az Ön számára a minőségi visszajelzést.
Valóban, CS50 bár mi van ezek a képletek és a pontszámok, a végén
A nap ezek nagyon szándékosan kis vödör - a pont értékek
a nulla és három és nulla és öt.
Mi nem próbáljuk felhívni nagyon durva vonalak a problémás készletek között, vagy
a diákok, hanem elsősorban mint tudjuk a minőségi, kézírás
visszajelzés, akár gépelt vagy szóbeli a az adott tanítás fickó,
kapsz, hogy tudja, elég jól.
>> De általában, ezek a súlyok hogy a különböző tengelyek lesz.
Közben is érdemes szem bánod, hogy nem kell feltételezni, hogy a
ötből három egy 60%-os ezért nagyjából nem.
Három szándékosan célja, hogy egyfajta út közepén jó.
Ha kapok hármasával a elején a félév, az
valóban azt jelentette, hogy a jó helyen kezdeni.
Ha kapok kettest, vásárok, ott van mindenképpen valami munkát fizetni egy kicsit
több figyelmet, hogy kihasználják A szakaszok és munkaidőben.
>> Ha kapok négyes és ötös, nagyszerű.
De tényleg, reméljük, hogy pályák a diákok körében - igen
személyre szabott egy diák, de a kezdő A félév itt egyfajta
A két a három tartományban, de véget itt a 4-5 tartományban.
Ez az, amit igazából keres.
És mi szem előtt tartani, a delta, hogy Ön mutatnak hét között nulla és hét
12 ha csinálok évfolyamon.
Nem számít, hogy mi egyáltalán hogyan Ön vásár az elején, ha a
pálya valóban felfelé és erős.
>> Akadémiai őszinteség - úgyhogy tegyem én komolyabb hang egy pillanatra.
Tehát ez a kurzus a különbséget küld több diák, mint bármely más
a történelem, hogy a hirdetés fórumon, azt hiszem.
Van egyfajta számolni ezen pontja, hogy milyen gyakran ez történik.
És ez nem azért, mert a hallgatók 50 bármilyen nagyobb, mint a becstelen
osztálytársak máshol.
De észre azt is, hogy nagyon jók vagyunk észlelje ilyesmi.
>> És ez az az előnye, hogy a számítástechnika osztály az, hogy mi
lehet, és mi hasonlítsa össze az összes diák probléma határozza páronként ellen minden
más, nem csak ebben az évben hanem minden korábbi évben.
Megvan a képessége, mint a hallgatók az osztály, a Google és megtalálni kód
oldalak, mint a GitHub és vitafórumokon.
Egyáltalán megoldások CS50 a p-készletek lebeg ott.
De ha megtalálja őket, megtaláljuk őket.
És mindez nagyon automatizált és egyszerű, és szomorú, hogy megtaláljuk.
>> De szeretném hangsúlyozni azt is, hogy a Természetesen az akadémiai őszinteség politikája
nagyon azt jelentette, hogy nagyon a másik, hogy a szellem.
Sőt, ebben az évben már fogalmazzák újra a dolgokat a tananyag, hogy ilyen, pont
dot dot, és részletesebben a tantervet.
De az átfogó témája során valóban ésszerűnek.
Tisztában vagyunk azzal, hogy van egy jelentős mennyiségű pedagógiai
értéket együttműködni, bizonyos mértékig, osztálytársaival, amely akkor
két vagy három, vagy több is állt a táblán
Whiteboarding, így beszél, a gondolatok -
írásban ki pszeudokódját képekben, diagramm mi Mario, ha
fel, hogy írja meg az első A pszeudokódja.
Mit kell a mohó algoritmus -
hogyan kell viselkednie, hogy egy probléma határozza egyet?
>> És rájön, hogy viselkedése hogy arra ösztönözzük nagyon
sok ezekhez hasonlót.
És a tananyag, akkor megjelenik egy csomó golyó alatt
ésszerű kategória és a nem megfelelő kategória, amely segít, hogy segítsünk
Ön tekerje elméd körül, ahol mi rajzolni a vonalat.
És általában, a tisztességes szabály az, hogy ha küzd megoldani
néhány hiba, és a barát vagy osztálytárs ül melletted, akkor
indokolt, hogy megmutathassa neki a kódot, és azt mondják, hé, tud segíteni
meg kitalálni, mi baj van?
>> Mi általában nem ölelés a szemközti oldalon.
Ez nem a helyes válasz a barát vagy osztálytárs itt mondani, ó,
csak nézd meg az enyém, és a szám ki azt, hogy az.
Ez a fajta, ésszerűtlen.
De, hogy valaki más, egy másik agy, másik szempár nézni
a képernyőn, vagy nézd meg a kódot és azt mondják, nem akarod
, hogy egy hurok itt?
Vagy akarod hogy pontosvessző itt?
Vagy ó, hibaüzenet jelent meg.
Ezek nagyon ésszerű és ösztönözni viselkedést.
>> Az esetekben, amelyekre én utalva korábban szűkülnek le, hogy ha a diákok
késő este, hogy rossz ítélet döntések és küldje a kódot, hogy
valaki mást, vagy csak azt mondom, Itt, ez a Dropbox vagy
Googling késő este.
És így azt javasoljuk, és Könyörgöm, ha van az elkerülhetetlen
pillanatok a stressz, akkor bumping fel szemben a határidő, nincs késő
nap, mivel ez már pénteken, hogy az pont, e-mailben a tanfolyam feje vagy
magam közvetlenül.
Mondd, figyelj, én vagyok az én töréspontot itt.
Vessünk egy beszélgetés és kitalálni.
Igénybe az interneten, vagy más nem ésszerű viselkedés soha nem a
oldatot, és a túl sok a osztálytársai már nem itt
campus azért rossz ítélet.
De ez nagyon könnyű szoknya, hogy a vonal.
>> És itt van egy kis kép felvidítani akkor fel Reddit így most
minden rendben lesz.
>> Tehát egy gyors bedugni, akkor , ahol abbahagytuk.
Így a múlt héten, emlékeztetni arra, hogy be körülmények között, nem Scratch
de C ebben az időben.
És volt néhány új szintaxis, de Tényleg nem az új ötletek önmagában.
Volt logikai kifejezések, hogy mi lehetett vagy azzal együtt két függőleges
rudak vagy és ezzel együtt a két ampersands, mondván, hogy a bal
és a jobb kell, hogy igaz legyen ezt végrehajtani.
Aztán volt kapcsolók, amely néztünk A rövid, de azt javaslom, tényleg
csak a különböző szintaxis eléréséhez ugyanaz a fajta cél, ha tudod, hogy a
előre, milyen esetben lesznek.
>> Megnéztük hurkok.
A for ciklus talán a leggyakoribb, vagy legalább az egyik, hogy az emberek
általában eléri az ösztönösen.
Annak ellenére, hogy úgy néz ki, egy kicsit rejtélyes, látni fogod, sok-sok példa erre
nemsokára, ahogy van Már a múlt hét végén.
While hasonlóképpen elérni ugyanazt a dolgot.
De ha azt szeretnénk, hogy nem minden incrementation vagy frissítése
változó értékeit, akkor a csinálni többet kézzel, mint a
A ciklus előtt teszi.
És akkor ott van a do-while ciklus, amely lehetővé teszi számunkra, hogy tegyünk valamit a
legalább egyszer, míg valami más igaz.
És ez különösen jó programok vagy a játékok, ahol szeretné
jelezve a felhasználónak, hogy valami legalább egyszer.
És akkor, ha ő nem működik együtt, érdemes csinálni
újra és újra.
>> Változók, eközben volt vonalak A kód, mint ez, ami
két sor.
Lehet nyilvánítják int hívott számláló, pontosvessző.
Vagy csak bevallani és határozza meg azt, hogy úgy mondjam.
Ad ez egy értéket ugyanabban az időben.
>> És akkor végül, beszélgettünk a funkciókat.
És ez egy jó példa az értelemben, hogy ez szemlélteti
kétféle funkciót.
Az egyik getString (), amely ismét kap egy stringet a felhasználó.
De getString () a fajta érdekes, amennyiben már használta,
mert már mindig azt valamit a bal oldalon egy
egyenlőségjel.
Ez azt jelenti, hogy getString () visszaad egy értéket.
Visszatér, természetesen, a string.
És akkor a bal oldali, vagyunk egyszerűen megtakarítás, hogy a húr belsejében egy
nevű változó nevét.
>> Ez más, bizonyos értelemben, a printf mert printf, legalábbis a mi
használata itt nem adott vissza semmit.
Mellesleg, ez vissza valamit.
Egyszerűen nem érdekel, hogy mi van.
De ez van, amit az nevezett mellékhatás.
És mi az, hogy a mellékhatás minden esetben láttunk eddig?
Mit jelent a printf csinálni?
Kiírja valamit a képernyőn, feliratokat vagy számok, vagy valami
a képernyőn.
És ez csak úgy egy mellékhatás mert nem igazán adják
vissza nekem.
Ez nem válasz belsejében egy fekete doboz, hogy én is, majd
elérjen és megragad.
Ez csak csinálja a saját, sokkal mint Colton volt dugva a
fekete doboz a múlt héten, és valahogy varázslatosan rajzolt a fórumon
nélkülem valójában szó.
Ez lenne a mellékhatás.
De ha tényleg kellett elérni vissza itt, és azt mondják, ó, itt a szöveg
a felhasználó, ami egy visszatérési értéket.
>> És eddig még csak használt funkciókhoz hogy mások írtak.
De mi is valójában ezek a dolgokat magunk.
Szóval megyek a CS50 készüléket újra.
Hadd fejezzem be a lap, hogy már nyitott egy perce.
És hadd menjen előre, és hozzon létre egy új fájlt.
És én megyek előre, és hívják ezt positive.c.
Szóval szeretnék csinálni valamit pozitív számok itt.
Szóval megyek előre, és nem int -
megijedni -
# Include.
Ne tegyük, hogy ugyanaz hiba, mint korábban.
Int main (void), nyitott göndör zárójel, zárt zárójel.
>> És most azt akarom, hogy tegye a következőket.
Szeretnék írni egy programot, amely ragaszkodik ahhoz, hogy a felhasználó megadja
nekem egy pozitív egész szám.
Tehát nincs GetPositiveInt funkció A CS50 könyvtárban.
Csak getInt ().
De ez rendben van, mert a konstrukciókat amit szabhat
kicsit több korlátot, hogy az értéket.
Én is valami ilyesmit.
>> Így int n -
és ha gépelés mellett, csak észre Én megyek vissza, és
változtatni néhány dolgot, egy pillanat -
így int n értéke getInt ().
És ez megy, hogy egy int n belül.
És hadd legyek egy leíró jellegű.
Hadd mondjak valamit, mint én, hogy a kereslet adsz nekem egy pozitív egész szám.
>> Rendben van.
Tehát csak egy kis útmutató.
És most mit tehetek?
Nos, azt már tudjuk, az én egyszerű feltételek vagy ágak, mint én
volt a Scratch, tudnék mondani valamit mint ha n értéke kisebb, vagy egyenlő, mint
nulla, akkor akarok valamit tetszik, hogy nem pozitív.
És akkor tudtam csinálni -
OK, de azt szeretné, hogy, hogy az int.
Így tudtam felmenni ide, és tudtam, kedves példány ezt, és a francia.
És akkor, OK.
Tehát, ha n értéke kisebb, mint, vagy nullával egyenlő erre.
>> Nos, mi van, ha a felhasználó nem működik együtt?
Nos, akkor megyek kölcsönzése itt.
Aztán megy itt és itt és itt.
Tehát ez nyilvánvalóan nem a megoldás, nem igaz?
Mert nincs vége a láthatáron.
Ha azt akarom, hogy a kereslet, hogy a felhasználó megadja nekem egy pozitív egész szám, én
tényleg csak az int.
Én majd ellenőrizze, hogy az int.
De aztán érdemes ellenőrizni, hogy újra és ellenőrizze, hogy újra és ellenőrizze ismét.
Tehát nyilvánvaló, hogy mi a jobb konstrukciót használ itt?
Rendben, tehát valamiféle hurok.
>> Így fogok megszabadulni szinte minden ezt.
És azt szeretnénk, hogy ez int legalább egyszer.
Így fogok mondani csinálni -
és jövök vissza míg csak egy pillanatra -
Most mit csináljak?
Fogok csinálni int n kapja getInt ().
OK.
Szóval ez elég jó.
És most milyen gyakran Azt akarom, hogy ez?
>> Hadd tegye a printf belsejében a hurok így a kereslet újra és újra,
ha kell.
És mit akarok ezt míg a feltétel, hogy nem?
Azt akarom, hogy ezt míg mi a helyzet?
Igen.
N értéke kisebb, vagy egyenlő, mint nulla.
Így már, most már jelentősen takarítani ezt a kódot fel.
Már kölcsön egy nagyon egyszerű konstrukció - A do-while ciklus.
Loptam csak a fontos vonalak A kód, hogy elkezdtem a másolás és
beillesztés, ami nem volt bölcs.
És most megyek, hogy ténylegesen be ez itt, és csak csináld egyszer.
>> És most mit akarok csinálni A legvégén a program?
Én csak mondom, valami egyszerű, tetszik, köszönöm a - és
Megteszem% i az int -
backslash n, vessző, majd csatlakozó n, pontosvessző.
>> Rendben van.
Úgyhogy lássuk, mi történik most amikor elindul a program.
Én megyek előre, és nem, hogy pozitív.
Rohadt.
A néhány hibát.
Hadd lépjünk vissza az első.
Ne dolgozzon rajtuk keresztül visszafelé.
A munka rajtuk keresztül felülről lefelé nehogy kaszkád, és csak
egy dolog, hogy tévedek.
Implicit nyilatkozat funkció getInt ().
Igen.
Tehát ez nem volt elég.
Valahogy ugyanazt a hibát, de egy kicsit más ebben az időben.
Azt kell, hogy ne csak azokat, hanem stdio.h cs50.h is, amely magában foglalja a
úgynevezett nyilatkozatok kap int, amely tanítják a készülék, vagy tanít
C mit getInt () függvény.
>> Hadd mentse.
Megyek figyelmen kívül hagyja a többi hibák mert fogom remélni, hogy ők
módon kapcsolódik a hiba Már rögzített.
Hadd megy előre, és újrafordítani az, hogy pozitív, Enter.
Rohadt.
Három hibák, még mindig.
Hadd felfelé az első.
A fel nem használt változó n.
Már nem láttam ilyet.
És ez is egy kicsit rejtélyes.
Ez a kimenet a fordító.
És hogy ez mit kiemelt sor ott - positive.c :9:13 -
azt mondja, ez azt mondja on line kilenc positive.c, a 13. karakter
13. oszlopban elkövette ezt a hibát.
>> És különösen, hogy mondja nekem nem használt változó n.
Tehát lássuk -
vonal kilenc.
Én vagyok a n abban az értelemben, hogy a Adok neki értéket.
De amit a fordító nem szeretek, hogy nem vagyok látszólag használja.
De várjunk egy percet, én vagyok használ ez.
A 11. sor, én vagyok a itt.
De ha tovább lapozás at positive.c :11 -
így sorban 11 karakter 12, a fordító mondja el, használata
be nem jelentett azonosító n.
>> Így a be nem jelentett módon van nincs megadva, mint egy
változó adat típusát.
De várjunk csak egy percet.
Én pontosan ezt tette a sorban kilenc.
Tehát valaki nagyon zavaros itt.
Ez sem engem, sem a fordító, mert sorban kilenc, megint én érvényben, amely a
int n, és én, hogy hozzárendeli a visszatérési értéke getInt ().
Akkor én használ, hogy n változó sorban 11. és ellenőrzése, ha annak értéke kisebb,
mint, vagy egyenlő nullával.
De ez a látszólag rossz, törött, miért?
Mondd még egyszer?
>> Ah, azt be kell jelenteniük n előtt belépő a hurok.
De miért?
Úgy értem, mi csak javaslatot egy kicsit ezelőtt ez rendben van, hogy állapítsa meg változókat
minden egy sorban, majd a hozzá nekik értéket.
A globális változó - térjünk vissza az, hogy az ötlet csak egy pillanat.
Miért akarod, hogy kívülre a hurok?
Ez az.
Pontosan.
>> Tehát, bár kissé ellentétes az, hadd foglaljam össze.
Amikor Ön kijelenti n belül A do blokkban -
külön belső a zárójelek -
hogy a változó n mi úgynevezett hatály -
független a pontozási rendszer a természetesen -, de van egy köre, ami
csak azok zárójelek.
Más szóval, általában ha kijelentik egy változó belsejében egy sor
zárójelek, hogy a változó csak akkor létezik belül a zárójelek.
Tehát, hogy a logika egyedül, még akkor is Már kijelentette n sorban kilenc, a
lényegében eltűnik a hatály, eltűnik a memóriából, hogy úgy mondjam,
mire hit line 11.
Mivel a 11. sor, sajnos, kívül a zárójelek.
>> Szóval sajnos nem tudja kijavítani ezt megy vissza, amit tettem ilyet.
Lehet, hogy először ezt.
De mi most nem csinál ciklikusan?
Te nyilván nem kap Az int ciklikusan.
Így tudjuk elhagyni a getInt (), és kell hagyni a getInt () belül a
loop mert ez az, amit szeretnénk ellep a felhasználó újra és újra.
De ez nem elegendő ahhoz, hogy menjen akár vonal, mondjuk, hat.
Int n, pontosvessző.
Ne add értéke még, mert nem kell, hogy csak még.
>> De most itt, felhívás - ez lenne egy nagyon egyszerű hiba.
Nem akarom, hogy az árnyék a korábbi nyilatkozat n.
Szeretném használni az n, hogy valóban létezik.
És most a 10. sorban, Én hozzá n értéket.
De soros hathengeres, kijelentem n.
És akkor én is, vagy nem tudok használni a 12-es vonal most?
Nem tudok, mert amelyek között göndör fogszabályozó n kijelentette, most?
Az egyik itt vonalon öt.
Egy itt 14. sor.
Tehát, ha most kicsinyíteni, mentse ezt a fájlt, menj vissza, és fut a pozitív, a
össze ebben az időben.
Szóval ez már folyamatban van.
Slash. . / Pozitív, Enter.
>> Követelem, hogy adjon nekem pozitív egész.
Negatív 1.
Negatív 2.
Negatív 3..
Zero.
Egy.
És köszönöm az egyik mi már nyomtatott.
>> Hadd próbáljak valami mást, kíváncsiságból.
Én is azt mondta, hogy be egy egész számot.
De mi van, ha ahelyett, hogy írja bárány?
Szóval most már látni egy másik gyors -
próbálja újra.
De sehol a kódomat írtam újra.
Tehát ahol feltehetően ez újra azonnali érkező, mit mondana?
Igen, az getInt () is.
Tehát az egyik dolog, CS50 munkatársai nem az Ön számára, legalábbis ezek az első néhány
héten, már írt egy összeget hiba ellenőrzése annak biztosítására, hogy
hívja getInt (), akkor legalább vissza egy int a felhasználó.
Ön nem fog egy string.
Ön nem fog egy char.
Ön nem fog valami mássá.
Kapsz egy int.
>> Nos, lehet, hogy nem lehet pozitív.
Lehet, hogy nem lehet negatív.
Azt, hogy nincs garancia, hogy körül.
De mi ellep a felhasználó számára, hogy újra, újra, újra, amíg ő tényleg
együttműködik.
Hasonlóképpen, ha én 1,23, amely nem int.
De ha írja, mondjuk, 50, hogy a ad nekem egy értéket, amit akartam.
>> Rendben van.
Tehát nem rossz.
Bármilyen kérdése, amit már most tenni?
A kulcs, hogy elvihető, hogy világos legyen, nem annyira a hurok, amit láttunk
mielőtt még akkor is, még nem igazán használt, de a kérdés a hatály, ahol
változók csak akkor lehet csak akkor lehet használni belül egyes meghatározott hatálya alá.
>> Jól van, hadd foglalkozzon a javaslatot amit korábban, hogy a
globális változót.
Mellesleg, kiderül, hogy egy másik megoldás erre a problémára, de a
általában helytelen megoldás, vagy egy rosszul megtervezett megoldás az, hogy
állapítsa meg a változó, mint mi úgynevezett globális változót.
Most én vagyok ilyen megsértése a definíció A hatály mert
nincs zárójelek az egyik legfontosabb és a legalján egy fájlt.
De a következménye, hogy a az, hogy most sorban négy,
n egy globális változót.
És ahogy a neve is mutatja, ez csak elérhető mindenhol.
>> Scratch valójában ezeket.
Ha használt változó, lehet felidézni választani kellett, ha ez az
ez a szellem, vagy az összes sprite.
Nos, minden sprite csak a tisztább szóval globális.
Igen?
Ah, nagyon jó kérdés.
>> Így emlékeztetnek arra, hogy már az első verzió a kódomat, amikor helytelenül
bejelentett és meghatározott n a sorban kilenc -
Én kijelentette, hogy a változó és adtam egy értéket
Az értékadó operátor -
ez adott nekem két hiba.
Egy, az a tény, hogy n nem vette igénybe, és két, hogy line 11
csak nem jelentették.
Tehát az első, akit nem cím abban az időben.
Ez nem feltétlenül hiba, hogy állapítsa meg Változó, de nem használja.
De az egyik dolog, amit tenni A CS50 készülék, szándékosan,
pedagógiai, az már hajlított fel a elvárások a fordító, hogy a
arról, hogy te a dolgokat nem csak helyesen, de nagyon helyesen.
>> Mert ha nyilvánító változó mint n és soha nem használja, vagy használja
helyesen, akkor mi van az ott?
Ez igazán nem szolgál semmilyen célt.
És ez nagyon egyszerű az idő múlásával, ha nem konfigurálja a saját számítógép
Így, hogy csak olyan kód, amely kis maradék itt, maradványai ott.
Aztán hónap múlva nézel vissza, és Ön, mint, hogy miért van ez a sor
kód van?
És ha nincs jó ok, hogy nem részesül Ön vagy munkatársai
az úton, hogy meg kell megbotlik rajta akkor.
>> Mellesleg, hol van hogy jön?
Nos, emlékeztetni arra, hogy minden alkalommal, amikor össze programja, mind ez a cucc
nyomtatás alatt.
Szóval majd még visszatérünk erre.
De ismétlem, hogy egy olyan segédprogram, amely automatizálja összeállításának folyamata által
fut az aktuális fordító nevű csenget.
Ez a dolog, akkor előbb-utóbb látni, van köze hibakeresési speciális
program neve a debugger.
Ennek köze van optimális kód - inkább az, hogy a jövőben.
Std = C99 -
ez csak azt jelenti, használja a 1999 verzióját C. C már körül még hosszabb, mint
hogy, de néhány szép változások 10 plusz évvel ezelőtt.
>> És itt van a megfelelő is.
Azt mondjuk, hogy mindent, ami korábban lett volna a figyelmeztetés
hiba megakadályozza a tanuló az összeállítása.
És a Wall esetre sem, hogy a csomó dolog, nem
csak a kapcsolódó változókat.
És akkor hadd lépjen a végén ez a sor.
És ez is fogjuk végül gyere vissza.
Ez nyilvánvalóan a neve A fájl vagyok összeállítása.
Ez emlékeztet a fájl nevét Én kimenetre, mint a neve
az én futtatható programot.
Ez csak azt jelenti, lcs50 használja a CS50 könyvtár, és a nullák és egyesek, hogy
a személyzet írt és összeállított korábbi ebben az évben, integrálása
őket a programba.
>> És valaki, hogy mi-lm az?
Ez a matematikai könyvtárat, amely Csak ott akkor is, ha
nem tesz semmilyen matek.
Ez csak automatikusan, feltéve, nekünk tenni.
>> Nos, hadd tegye egy másik példa itt nyit egy új fájlt.
És hadd mentse ezt mint string.c.
Kiderül, hogy ahogy beszélünk adatok típusok ma még nagyobb
folyik a motorháztető alatt mint láttuk eddig.
Hadd gyorsan egy gyors programot.
Tartalmazza stdio.h.
És én, kivéve azt.
És tudod, hadd ne, hogy a ugyanazt a hibát újra és újra.
Tartalmazza cs50.h.
És hadd menjen előre, már és nem int main (void).
>> És most csak akarok egy programot hogy működik ez - mondja a szöveg
hívott s, és kap egy húr a felhasználó elől.
És hadd tegyek egy kis útmutató itt -
kérlek adj egy húr - így a felhasználó tudja, mit kell tennie.
És akkor itt lent ez alatt, Azt akarom, hogy a következő -
az int i lesz nulla.
Ismét, számítógépes szakemberek általában kezdődik számláló nulla, de tudtuk
tenni, hogy az egyik, ha igazán akar.
Most fogom tenni az i kisebb mint a húr hossza s.
Így strlen -
S-R-T-L-E-N -
Ismét, ez tömör, mert könnyebb írja, annak ellenére, hogy a
kis rejtélyes.
>> Ez egy olyan funkció, általunk nem használt előtt, de szó szerint ez azt -
vissza nekem egy számot, amely képviseli a hossza a húr
hogy a felhasználó beírt.
Ha beírt hello, akkor vissza öt, mert van öt
betűk Hello.
Ezután minden egyes iterációs Ez a ciklus, én plus plus.
Tehát megint a szokásos konstrukció akkor is, ha te nem egészen túl kényelmes, vagy
ismeri még.
>> De most minden iterációban erre a ciklusra, észre, mit fogok csinálni.
Azt akarom, hogy menjen előre és nyomtatás ki egy karakter -
így% c backslash n új sorban.
És akkor, tudod, mit akarok csinálni?
Bármi legyen is szó, az az, hogy a felhasználó beír be, mint a Hello, szeretnék nyomtatni
H-E-L-L-O, egy karakter soronként.
Más szóval, azt akarom, hogy a egyes karaktereket a string,
ahol eddig egy string éppen volt karaktersorozat.
>> És kiderül, meg tudom csinálni s, konzol, i, záró zárójel, közel
zárójel, pontosvessző.
És nekem kell csinálni még egy dolog.
Ez a nevű fájlt string.h hogy strlen nyilvánították.
Tehát, ha azt szeretné használni ezt a funkciót, El kell mondanom a fordító,
elvárják, hogy használja.
Most hadd menjen előre, és A program neve string.
Dot, slash, string.
>> Kérek egy string.
Én megyek előre, és írja.
Helló, a nagybetűs, Enter.
És most veszi észre, amit nyomtatott ezt egy karakter a másik után.
Így az új részlet az, hogy egy string, a végén a nap, lehet
útján elérhető az egyes karakterek bevezetésével a tér
konzol jelölést.
És ez azért van, mert a szöveg alatt a motorháztető valóban sorozata
karakter.
De mi szép róluk a számítógép RAM -
Mac, PC, bármi is legyen az -, ők szó háttal a vissza -
H-E-L-L-O -
az egyes szomszédos bájt a memóriában.
>> Tehát, ha azt szeretnénk, hogy a nyolcadik olyan byte, amely ebben a hurokban lenne
konzol nulla, egy konzol, konzol két, konzol három, négy konzol -
ez nulla indexelt ig öt -
kiírja, hogy a H-L-E-L-O külön sorban.
>> Most, a teaser, hadd mutassam meg a dolgok, hogy akkor végül is
képes megérteni, legalábbis néhány szoros néz.
Az egyik, amit tartalmaz a mai példa, ha szeretné, valójában
az egyik legelső szökik az iPhone.
Jailbreak jelenti repedés a telefon így valóban használni a
más fuvarozó vagy telepítés saját szoftver.
És észre fogod venni, ez úgy néz ki teljesen rejtélyes, valószínűleg.
De nézd meg ezt.
Az iPhone nyilvánvalóan repedt A for ciklus egy, ha a feltétel, a más
állapotban, egy csomó funkció már nem láttam.
>> És ismét, akkor nem Első pillantásra talán
érti, hogy ez hogyan működik.
De minden, amit a fajta, hogy értetődőnek modern életünk
ténylegesen általában csökkenti sőt bizonyos Ezen alapvető voltunk
nézett.
Hadd menjek előre, és nyitott egy másik program, holloway.c.
Szóval ez is az, amit Nem igazán tudom.
Még sem a személyzet vagy a tudtam Valószínűleg ezt meg nézi
, mert ez a valaki kódja küldtünk el, hogy milyen
történelmileg néven eltorzítva C verseny, ahol írni egy programot
hogy lefordul és fut, de átkozottul rejtélyes ember sem megérteni, hogy mi
meg fog tenni, amíg valójában futtatni.
>> Tehát valóban, ha megnézi ezt kódot, látok egy kapcsolót.
Látom fő.
Én ezeket a szögletes zárójelek ami valamilyen tömb.
Akar valaki kitalálni, hogy mi ez a program valóban
nem, ha futok Holloway?
Igen.
OK.
Jól sikerült.
Tehát csak a személyzet, és nem tudok rájönni , mi ezeket a dolgokat csinálni.
>> És most végül, hadd menjek előre és megnyitja egy másik programot.
Ez az egy -
Ismét megpróbáljuk a forráskódot online elérhető - ez csak
milyen szép, hogy nézd meg.
Minden ők a hit a szóköz egy kicsit.
De ez az igazi kódot.
Tehát, ha úgy gondolja, hogy elég, ha valóban futtatni ezt a parancsot,
végül látni fogod, hogyan talán a dolgok, mint ez.
>> Szóval majd hagyjuk azon megjegyzés és találkozunk szerdán.
>> [MUSIC PLAYING]
>> SPEAKER 2: A következő CS50, A TF-színpadon a lázadás.
>> SPEAKER 3: Ott van.
Kapd el!
>> [MUSIC PLAYING]