>> [Mūzikas atskaņošanas]
>> DAVID J Malan: Labi, welcome atpakaļ uz CS50.
Tas ir sākums no divu nedēļu.
Vārds no viena no mūsu draugi par universitātes pilsētiņā -
Ja Jums ir interese, iespējams, vai nu tagad vai kādā turpmākajā laikā
pat tad, kad ērtāk, mācību vidusskolā skolēni maz
kaut ko par datorzinātņu, do galvu uz šo URL.
Tie ir īpaši nepieciešams tieši tagad ir skolotāji, jo īpaši, ja jums ir
bija daži pakļaušanu datorzinātnēs.
>> Tāpēc atgādinām, ka pēdējo reizi, mēs iepazīstinājām daži datu tipi in C, un
Jums var būt sākās, lai saņemtu savu rokas netīras ar tiem līdz šim
jo problēma iestatīt vienu.
Un mums bija char.
Tātad nedaudz tehniskā ziņā, kas ir char, kā jūs to pazīstam šodien?
>> Tātad, tas ir raksturs, bet pieņemsim precīzāk tagad.
Ko mēs saprotam ar raksturu vai individuālo char?
Ne-ciparu raksturs -
tāpēc ne vienmēr.
Izrādās, ka pat numurus, pat interpunkcijas un vēstules
pārstāvji ar šiem datiem rakstiet pazīstams kā char.
Tātad, tas ne vienmēr ir alfabēta.
Yeah?
>> Tātad, tas ir ASCII rakstzīmju.
Tātad, ja jūs domājat, ka atpakaļ uz nulles nedēļā, kad mums bija mūsu baitu brīvprātīgajiem
nākt klajā un vai nu turēt rokas uz augšu vai nav viss, viņi pārstāv bitiem.
Bet kopā kā grupa, astoņi, viņi pārstāvēja baitu.
Un mēs ieviesām jēdzienu ASCII šajā lekcijā, kas vienkārši ir
kartēšana starp ciparu un burtu.
Un ASCII lietojums, kā tiem cilvēkiem netieši, astoņi biti
pārstāvēt raksturs.
>> Līdz ar to, ja ir astoņi biti var katrs veikt uz vienu no divām vērtībām -
nulle vai viens -
tas nozīmē, ka pastāv divas iespējas par šo personu, -
nulle vai viens -
divi par šo personu, divi šīs Persona, divi par šo vienu.
Tātad kopā divas reizes divas reizes divas reizes divas reizes divas -
tāpēc divi astoto kopumā.
Tātad tur ir kopējais skaits rakstzīmju 256 Iespējams, ka jūs varat
pārstāvēt ar astoņiem bitiem.
>> Tagad, tiem no jums, kas runā Āzijas valodas, varbūt zināt, ka tur ir vairāk
rakstzīmes pasaulē nekā tikai Kā un Bs un Cs un DS.
Un tiešām, ASCII, nav pietiekams, lai daudz pasaules valodās.
Bet vairāk par šo citā laikā.
Tagad zinu, ka C, ja vēlaties pārstāvēt vēstuli, gabals
pieturzīmes, vai vienkārši kaut ko rakstzīmju dabā, mēs izmantojam char.
Un tas ir viens baits vai astoņi biti.
>> Kā par int?
Nu, int ir vesels skaitlis.
Cik bitus, ja jūs atceraties, ir vesels skaitlis, kas parasti?
Ikviens atcerēties?
Tātad, tas ir parasti 32.
Tas patiesībā ir atkarīgs no datora ka jūs izmantojat.
Bet iekārtā, un ir daudz datoriem, tas ir 32 bitu vai četriem
baiti - astoņas reizes četras.
Un Ints ir tikai izmanto, lai uzglabātu numurus, gan negatīvs,
pozitīvs vai nulle.
>> Un, ja jums ir 32 bitu un jums ir tikai rūpējas par pozitīviem skaitļiem, var
ikviens ballpark, cik iespējams veseli dators var pārstāvēt no
nullei uz augšu?
Tātad tas varētu būt divas līdz 32, kas ir aptuveni četrus miljardus.
Tātad šie divi pilnvaras būs atkārtojas tēmas datorzinātnēs.
Kā mēs redzēsim, viņi diezgan ērts strādāt ar, pat ja tas nav gluži
viegli darīt to math, kas savu galvu.
>> Tāpēc mēs teikt aptuveni četrus miljardus.
Tagad, ilgi ilgi -
Jūs varat veida minējums.
Tas ir garāks nekā int.
Cik bitus?
Tātad, 64 bitu vai astoņi baiti.
Tas tikai nozīmē, ka jūs varat pārstāvēt pat lielāki skaitļi, lielāka pozitīva vai
Lielāki negatīvie skaitļi.
>> Un kā par peldēt?
Tas ir peldošā komata vērtība no 32 bitiem.
Tas ir tikai reāls skaitlis, kaut ar komatu.
Bet, ja jūs, nevis nepieciešams vairāk vietas aiz komata, vai vēlaties
pārstāv lielāku numuru, ar kādu frakcija pēc tam, jūs varat izmantot
double, kas ir 64 biti.
>> Bet tur ir interesants takeaway šeit.
Tātad, ja Ints ir ierobežota ar 32 bitiem un pat ilgi garie ir ierobežota ar 64
biti, ka veida Rodas jautājums, Ko darīt, ja jūs tiešām vēlaties, lai saskaitītu
augstāka par 4 miljardiem int?
Nu, jūs vienkārši izmantot ilgi ilgi.
Bet ko tad, ja jūs vēlaties saskaitīt augstāka nekā divas 64, sniegt vai pieņemt?
>> Tagad tas ir milzīgs skaits.
Bet galu galā, jūs varētu faktiski rūpēties par šiem vērtībām veidiem,
it īpaši, ja jūs izmantojat datu bāzi un sāk vākt daudz un daudz
un daudz datu un piešķirot unikālu numurus katru gabalu šo datu.
Tātad, mēs veida ir problēma.
Un līdzīgi, ar peldošo punktu vērtībām - pludiņi vai divvietīgi -
ja jūs esat tikai got ierobežots skaits biti, cik kopējais skaits varētu jums
iespējams, pārstāv?
>> Nu, tas ir mazāk skaidrs, kad jūs saistīta ar komatu.
Bet tas, protams, ierobežots.
Ja jums ir ierobežots bitu skaits ierobežots skaits cilvēku, ierobežots
skaits spuldžu, protams, jūs varat veido tikai ierobežots skaits
peldošā punkta vērtības.
Bet cik reāli skaitļi ir viņu pasaulē?
Tur ir bezgalīgs.
Tātad tas ir sava veida problēmu, jo mēs nav bezgalīgu daudzumu
atmiņa vai iekšpusē mūsu datoriem RAM.
Tāpēc daži izaicinājumu lietas var notikt.
>> Tāpēc iesim uz priekšu un mēģināt izteikt šo šeit.
Ļaujiet man iet uz priekšu un atvērt gedit.
Es iešu uz priekšu un saglabājiet failu sauc par "floats0.c", tikai, lai būtu
savienojams ar piemēru, kas ir pieejami tiešsaistē, ja vēlaties.
Un es iešu uz priekšu un definēt to šādi -
Es iešu uz priekšu un saka, int Galvenais spēkā neesošu, jo mēs bieži vien darām.
>> Un tad šajā programmā, es esmu gatavojas atzīt sevi, apgrozāmos līdzekļus, lai 32 bitu
mainīgo sauc par f, patvaļīgi.
Un tad es esmu gatavojas glabāt tajā Es nezinu, vienu desmitdaļu, 0.1 tā.
Tāpēc es esmu gatavojas paust, ka par vienu dala ar 10, kas ir pilnīgi
likumīgi C.
>> Un pēc tam otrajā līnijā, es vienkārši vēlaties izdrukāt šo vērtību.
Tāpēc atgādinām, ka mēs varam izmantot pazīstami printf.
Mēs nevēlamies, lai izmantotu% i par int.
Mēs vēlamies izmantot% F apgrozāmos līdzekļus.
Un tad es esmu gatavojas darīt slīpsvītru n, aizvērt citēju, komats, f, semikols.
>> Tātad, šeit ir mana programma.
Tur jau ir viena kļūda.
Vai kāds, kam tas uzklikšķināt jau vēlos norādīt vismaz
viens bug es esat veikuši?
Yeah?
Jā.
Es aizmirsu "# ietver" at augšu, viņi simptoms, kas, ja es mēģinātu
apkopot tas būs, ka kompilators gatavojas kliegt uz mani,
sakot undefined simbolu vai kaut kas šajā sakarā.
Tā nesaprot kaut ko patīk printf.
>> Tāpēc es esmu gatavojas darīt, "# ietvert ", Saglabājiet failu.
Un tagad tas ir labāks.
Bet es esmu arī gatavojas uzsvērt veic vienu jaunu detaļu šodien.
Papildus norādot vietu turētājiem, piemēram,% f% i% s, jūs varat
dažreiz ietekmē uzvedību šī vietturī.
Tā, piemēram, attiecībā uz peldoša punkta vērtība, ja es tikai gribu
lai parādītu vienu zīmi aiz komata pēc periodā, es patiesībā var darīt 0.1F.
Tātad, citiem vārdiem sakot, es atdalīt f un procentu zīme ar 0,1, tikai
stāsta printf, jums varētu būt visai ķekars numuriem pēc decimālzīmes
punktu par mani.
Bet es tikai gribu redzēt vienu no tiem.
>> Tāpēc es esmu gatavojas iet uz priekšu tūlīt un ietaupiet šī programma, iedziļināties manā termināls
logu, un es esmu gatavojas iet uz priekšu un tips padarīt float 0, ievadiet.
Es redzu, ka nedaudz mistisks līniju, kas sāks daudz lietderīgāk, kā mēs
ķircināt to nošķir šonedēļ un nākamo.
Tagad es esmu gatavojas iet uz priekšu un palaist float nullei.
Un, damn.
>> Tātad tur ir vēl viens bug šeit, kāda iemesla dēļ.
Es esmu diezgan pārliecināts, ka viena desmitā daļa, vai viens dala ar 10, ir ne 0.0.
Varbūt es esmu tikai nav meklējat pie pietiekami cipariem.
Tātad, kāpēc nav es saku divus .2 redzēt divus zīmēm aiz komata, nevis tikai vienu.
Ļaujiet man iet atpakaļ uz manu termināļa logā šeit un hit up pāris reizes, lai
skatīt manu vēsturi.
Vai padarīt peldēt nulle atkal, un pēc tam atkal.
Un tagad ieiet.
>> Un tagad es esmu diezgan pārliecināts, ka tas ir nepareizi.
Un es varētu darīt, trīs un četri, un es esmu iespējams, gatavojas glabāt redzēt nullēm.
Tātad, kur ir kļūda?
Viens dala ar 10 vajadzētu būt 0.1.
Kāds vēlas pieņemt stab pie kādiem pamatjautājums ir?
Yeah?
Viņi abi ir veseli skaitļi.
Tātad, ko?
Tātad ar vienu dalīts ar 10, kas ir ko es daru aritmētisko.
Un man 0.1.
>> Jā.
Un tā tas tiešām ir, ka jautājums.
Kad jūs veikt veselu skaitli datorā un jūs sadalīt to ar citu skaitlim,
pēc noklusējuma dators ir gatavojas pieņemam, ka jūs vēlaties skaitli.
Problēma, lai gan, protams, ir ka 0,1 nav vesels skaitlis.
Tas ir reāls skaitlis.
Un tā, ko dators dara ar noklusējuma tas ir tikai met prom
viss aiz komata.
Tas nav noapaļot uz leju vai uz augšu per se.
Tas vienkārši met prom visu aiz komata.
Un tagad, ka ir jēga.
Jo tagad mēs esam skaidri kreisi ar nulli.
>> Bet pagaidiet minūti.
Es neesmu redzēt int nulli.
Es tiešām redzēt 0.00.
Tātad, kā es varu savienot šo tagad?
Ja viens dalīts ar 10 ir nulle, bet es esmu redzot 0.00, ja tas kļūst
konvertē atpakaļ uz reālu skaitli?
Jā.
Tieši tā.
>> Tātad, šeit ir pieci līniju, kad es faktiski uzglabāt ka 0,1, kas ir pēc tam
saīsināts līdz nullei, iekšpusē pludiņa, kas ir vienlīdz efektīvs
uzglabājot to nevis kā int, bet, tiešām, kā apgrozāmos līdzekļus.
Turklāt es esmu, tad, izmantojot printf skaidri drukāt šo numuru uz divām
zīmēm aiz komata, lai gan tur iespējams, nav faktiski nekāda.
>> Tātad šāda veida sucks, vai ne?
Acīmredzot jūs nevarat darīt math, vismaz šajā līmenī
precizitāte, ar datoru.
Bet, protams, tur ir risinājums.
Kas ir vienkāršākais noteikt mēs varētu varbūt darīt, pat tikai intuitīvi šeit
atrisināt šo?
Yeah?
Savukārt veselos skaitļus par -
yeah.
Pat ja es neesmu pilnīgi pārliecināts, kas ir īsti notiek šeit, ja tas
būtībā ir jādara ar šiem abiem ir Ints, labi, kāpēc ne es
darīt, ka 10,0, padarot šo 1.0 atkārtoti saglabāt failu.
Ļaujiet man iet atpakaļ uz leju, lai grunts un pārkompilācija.
Ļaujiet man tagad atkārto.
Un tur -
Tagad, es esam ieguvuši savu vienu desmito pārstāvēja 0,10.
>> Labi.
Tātad, tas nav slikti.
Un ļaujiet man norādīt uz kādu citu veidu, mēs varētu atrisināt šo.
Ļaujiet man faktiski roll atpakaļ laikā , kad mums bija kā vienu
desmitais pirms brīža.
Un ļaujiet man iet uz priekšu un atkārtoti saglabāt šo failu kā citu faila nosaukumu, tikai uz
ir maz kontrolpunkts.
Tā, ka ir viens variants.
Un tagad ļaujiet man iet uz priekšu un darīt vēl vienu versiju.
Mēs saucam šo versiju divi nulle indeksēti.
>> Un es esmu gatavojas, nevis darīt šo - jūs zināt, ko?
Pievienojot dot nulles strādā šajā lietā.
Bet pieņemsim, ka viens bija mainīgs.
Vajadzēja 10 bija mainīgs.
Citiem vārdiem sakot, pieņemsim, ka es nevarēju tikai grūti-kods .0 beigās
Šī aritmētiskas izteiksmes.
Nu, es patiesībā var darīt kaut ko iekavās sauc liešana.
Es varu nodot šo skaitli 10 ar pludiņa, un es varu nodot šo veselo vienu
peldēt, kā arī.
Tad math, kas notiek, kas jādara efektīvi 1,0 dalīts ar 10,0,
rezultāts, kas iet in f kā iepriekš.
Tātad, ja es recompile to kā padarīt pludiņi 2, un tagad peld 2, man tas pats
atbildēt, kā arī.
>> Tātad tas ir diezgan izdomāts piemērs, lai atrisinātu šo problēmu
ieviešot liešana.
Bet kopumā, liešana būs spēcīgs lieta, jo īpaši
problēma, kas divas nedēļas laikā, kad Jūs vēlaties, lai pārvērstu vienu datu veidu, lai
vēl viens, ka beigās, dienā ir pārstāvēti tajā pašā veidā.
Beigās, dienā, katru lieta, ko mēs esam runājuši par līdz šim ir
tikai Ints zem motora pārsega.
Vai, ja tas ir pārāk zema līmenis tu, viņi vienkārši numuri
zem motora pārsega.
Pat rakstzīmes, atkal atgādināt No nedēļu nulles, ir skaitļi
zem motora pārsega.
>> Kas nozīmē, mēs varam konvertēt starp dažādu veidu numuriem, ja
viņi vienkārši biti.
Mēs varam konvertēt starp numuriem un vēstules, ja viņi vienkārši
biti, un otrādi.
Un liešanas šādā veidā ir mehānisms programmēšanā, kas ļauj piespiedu kārtā
mainīt vienu datu tipu uz citu.
Diemžēl, tas nav tik vienkāršs, kā es varētu būt patika.
>> Es esmu gatavojas doties atpakaļ uz pludiņiem 1, kas ir vienkāršāka, vairāk
vienkārši viens ar 0,0 pievienots, lai katrs.
Un tikpat ātri celšanas, ļaujiet man iet uz priekšu un recompile
tas, padara pludiņi 2 -
sorry, tas ir padarīt pludiņi 1.
Un tagad pieņemsim darboties pludiņi 1.
Un apakšpusē, paziņojums ka es tiešām saņem 0.1.
Tātad, problēma atrisināta.
>> Bet vēl nav.
Es esmu tagad gatavojas saņemt mazliet ziņkārīgs, un es iešu atpakaļ manā
printf pārskats un teiksim, jūs zināt, ko?
Es gribētu, lai apstiprinātu, ka šī ir tiešām viena desmitdaļa.
Un es esmu gatavojas vēlaties redzēt šo , teiksim, piecas zīmēm aiz komata.
Tā nav problēma.
Es mainīt 2-5 ar, Es recompile ar darīt.
Es atkārto to kā pludiņi 1.
Meklē diezgan laba.
Mana veselība pārbaudes varētu nonākt tur, bet Es saņemu nedaudz vairāk piedzīvojumu.
Es esmu gatavojas mainīt 0,5-0,10.
Es gribu redzēt 10 cipariem aiz zīmi aiz komata.
>> Un es iešu uz priekšu un recompile šo un atkārto pludiņi 1.
Es veida nožēlu, kam pārbauda šo tālāk, jo mana matemātika nav tik
labot vairs, šķiet.
Bet pagaidiet minūti, varbūt tas ir tikai parazīts.
Varbūt dators darbojas mazliet dīvaini.
Ļaujiet man iet uz priekšu un darīt 20 aiz punktiem un pārliecināt sevi, ka es zinu,
kā to izdarīt math.
Es zinu, kā programma.
Padarīt pludiņi 1, kompilējiet, un nopelt to.
Tas ir patiešām, patiešām kļūst tālu no zīmes.
>> Tātad, kas notiek šeit?
Intuitīvi, balstoties uz mūsu pieņēmumiem agrāk par lielumu datu tipu,
kas ir noticis šeit zem pārsega?
Yeah?
Tieši tā.
Ja jūs vēlaties tik daudz precizitāti, un kas ir heck par daudz precizitāti -
20 skaitļi aiz komata.
Jūs nav iespējams pārstāvēt patvaļīgs skaitlis, ja jums ir
patvaļīgs bitu skaits.
Bet mums nav.
Par pludiņa, mums ir tikai 32 bitus.
>> Tātad, ja 32 biti var tikai permutēts ar veids - tāpat kā mūsu cilvēkiem uz, skatuve
rokas uz augšu vai uz leju - ar noteiktu skaitu veidi, tur ir tikai ierobežots skaits
reāliem skaitļiem, jūs varat pārstāvēt ar šiem bitiem.
Un tā dators beidzot ir nāksies
sākt griešana stūriem.
Dators var slēpt šo informāciju no mums mazliet laika.
Bet, ja mēs sāktu poking uz skaitļiem un meklē tālāk un tālāk pie
trailing skaitu vesels skaitlis, tad mēs sākam redzēt, ka tas ir
faktiski tuvināšana Ideja par vienu desmito daļu.
>> Un tā izrādās, traģiski, tur ir bezgalīgi daudz skaitļu
mēs nevaram pārstāvēt precīzi dators, vismaz ar ierobežotu
bitu skaits, ierobežots summa RAM.
Tagad diemžēl, tas dažreiz ir reālās pasaules sekas.
Ja cilvēki nav īsti novērtēt to vai veida pieņemt par pašsaprotamu faktu
ka viņu dators būs tikai darīt to, ko viņi pateiks to darīt, un nav
izprast šīs bāzes pārstāvniecības detaļas -
kas, atklāti sakot, dažās valodās ir slēpta no lietotāja, atšķirībā no C -
dažas sliktas lietas var notikt.
>> Un ko es domāju, ka mēs gribētu darīt ir veikt soli atpakaļ.
Un tas ir par astoņu minūšu video.
Tā izskanējuši pirms dažiem gadiem, un tas dod ieskatu faktiski ko var aiziet
nepareizi, ja jūs nepietiekami novērtēt šos veida informāciju, kas ir ļoti visi pārāk
reālo pasauli.
Ja mēs varētu tuvās gaismas uz dažām minūtēm.
>> SPEAKER 1: Mums tagad atgriežas inženierija
katastrofas uz mūsdienu brīnumiem.
>> Datori -
mēs visi esam ieradušies pieņemt bieži nomākta problēmas
, kas iet kopā ar viņiem.
Bugs, vīrusi un programmatūras glitches ir mazas cenas, lai samaksātu par
ērtības.
Bet augsto tehnoloģiju un ātrgaitas militārās un kosmosa programma
lietojumprogrammas, mazākā problēma var tikt palielināts par katastrofu.
>> 4.jūnijā 1996 zinātnieki gatavs uzsākt bezpilota Ariane 5 raķeti.
Tas nesa zinātniskos satelītus paredzēti, lai precīzi noskaidrotu, kā
Zemes magnētiskais lauks mijiedarbojas ar saules vēju.
Raķete tika uzbūvēta Eiropas Kosmosa aģentūru un jāpaceļ no tās
mehānisms krastā Franču Gviānā.
>> JACK GANSSLE: Aptuveni 37 sekundes uz lidojums, viņi pirmo reizi pamanīju
kaut kas notiek nepareizi.
Sprauslas tika grozot ar kā viņi tiešām nevajadzētu.
Ap 40 lidojuma sekundē, skaidri transportlīdzeklis bija nepatikšanas.
Un tas ir tad, kad viņi lēmums to iznīcināt.
Diapazons drošības virsnieks, ar milzīgs iekšām, piespiež pogu,
uzspridzināja raķešu pirms tā varētu kļūt apdraudēt sabiedrisko drošību.
>> SPEAKER 1: Tas bija pirmajā braucienā no Ariane 5, un to iznīcināšanu
notika tāpēc, ka iegulto plaisāt kas Rocket programmatūru.
>> JACK GANSSLE: Problēma uz Ariane bija tas, ka numurs
bija nepieciešami 64 biti izteikt.
Un viņi gribēja, lai pārvērstu līdz 16-bit skaitu.
Viņi pieņem, ka skaits bija nekad nav būs ļoti liels, ka lielākā daļa
šie cipari ir 64-bit numurs bija nulles.
Viņi bija nepareizi.
>> SPEAKER 1: nespēja vienu programmatūru Programma pieņemt veida
numurs, ko vēl bija saknē neveiksmes.
Programmatūras izstrāde ir kļuvusi ļoti dārga daļa no jaunās tehnoloģijas.
Ariane 4 raķete bija ļoti veiksmīga, tik daudz programmatūras
radīti tas bija arī izmanto Ariane 5.
>> PHILIP COYLE: Galvenā problēma bija ka Ariane 5 bija ātrāks,
paātrināta ātrāk.
Un programmatūra nebija jāatskaitās par to.
>> SPEAKER 1: iznīcināšana raķešu bija milzīgs finanšu katastrofa,
viss, pateicoties minūti programmatūras kļūdas.
Bet tas nebija pirmā reize dati pārveides problēmas bija norisinās mūsdienu
raķešu tehnoloģijas.
>> JACK GANSSLE: 1991, ar startu no pirmā Persijas līča kara, Patriot
raķešu piedzīvoja līdzīga veida no numura konversijas problēmu.
Tā rezultātā 28 amerikāņu karavīri nogalināti un aptuveni 100 citi ievainoti
kad Patriot, kas bija paredzēts lai aizsargātu pret ienākošo Scuds,
neizdevās, lai šautu raķeti.
>> SPEAKER 1: kad Irāka iebruka Kuveitā un Amerikā sāka Desert Storm
Jau 1991 Patriot raķešu baterijas tika izvietoti, lai aizsargātu Saūda Arābija
un Izraēlu no Irākas traukties raķešu uzbrukumiem.
Patriot ir ASV vidēja rādiusa zeme-gaiss sistēmu, ko ražo
Raytheon uzņēmums.
>> THEODORE POSTOL: lielums Patriot aizturētāja pati par sevi ir aptuveni
20-pēdu garš.
Un tas sver aptuveni 2000 mārciņas.
Un tā veic kaujas galviņu aptuveni -
Es domāju, ka tas ir apmēram £ 150.
Un kaujas galviņu pati par sevi ir augsts sprāgstviela, kas ir
fragmenti ap to.
No kaujas galviņu korpuss ir paredzēts rīkoties kā Buckshot.
>> SPEAKER 1: The raķetes tiek veiktas četras uz konteinera un tiek transportēti
ar puspiekabi piekabe.
>> PHILIP COYLE: Patriot pretraķešu Sistēma iet atpakaļ
vismaz 20 gadus.
Tā sākotnēji tika veidota kā pretgaisa aizsardzības raķešu, lai
atvašu nosaka ienaidnieks lidmašīnas.
Pirmajā Persijas līča kara, kad, ka karš nāca kopā, armija vēlējās, lai to izmantotu
nošaut Scuds, nevis lidmašīnas.
Irākas gaisa spēku nebija tik daudz problēmu.
Bet armija bija noraizējies par Scuds.
Un tā viņi centās, lai uzlabotu Patriot.
>> SPEAKER 1: pārtvērēja ienaidnieka raķetes ceļo piecās mach bija
būs grūti pietiekami.
Bet, kad Patriot tika metās pakalpojums, armija nebija zināms
Irākas izmaiņas, kas padarīja viņu Scuds gandrīz neiespējami, lai sasniegtu.
>> THEODORE POSTOL: Kas notika ir Scuds, kas bija
nāk bija nestabila.
Viņi bija wobbling.
Iemesls tam bija irākiešu, kas Lai iegūtu 600 kilometru no
300 kilometru diapazona raķešu, ņēma svars no priekšējā warhead.
Viņi kaujas galviņu vieglāks.
Tāpēc tagad Patriot mēģina nākt pie traukties.
Un lielāko daļu laika, milzīgs lielāko daļu laika, tas būtu vienkārši
lidot ar traukties.
>> SPEAKER 1: Kad Patriot sistēma uzņēmēji saprata Patriot garām
tās mērķis, tās uzsprāgt Patriots kaujas galviņu, lai izvairītos no iespējama
negadījumu, ja tas ir atļauts krist uz zemes.
>> THEODORE POSTOL: Tas bija tas, ko lielākā daļa cilvēki redzēja, kā lielie fireballs, kas debesīs
un pārprast kā pārtver no Scud kaujas galviņām.
>> SPEAKER 1: Lai gan nakts debesis Patrioti izrādījās veiksmīgi
iznīcinot Scuds pēc Dhahran tur varētu būt kļūda par tās
veiktspēju.
Tur, ka Patriot radaru sistēma zaudēja līdzi ienākošo traukties un nekad
uzsākta sakarā ar programmatūras plaisāt.
>> Tas bija izraēlieši, kurš pirmais atklāja ka garāks sistēma
bija, lielāks laiks neatbilstība kļuva sakarā ar pulksteni
iestrādāta sistēmas datorā.
>> JACK GANSSLE: Aptuveni divas nedēļas pirms traģēdija Dhahran, izraēlieši
ziņots Aizsardzības departaments ka sistēma zaudēt laiku.
Pēc apmēram astoņas stundas darba, viņi pamanīja, ka sistēma ir
kļūst ievērojami mazāk precīza.
Aizsardzības departaments atbildēja, stāsta visi Patriot baterijas
lai neatstāj sistēmas uz ilgu laiku.
Viņi nekad nav teicis, kas ilgu laiku bija.
Astoņas stundas?
10 stundas?
1000 stundas?
Neviens nezināja.
>> SPEAKER 1: Patriot akumulators izvietoti pie kazarmām pie Dhahran
un tās trūkumi iekšējais pulkstenis bija par vairāk nekā 100 stundas naktī
25 februāris.
>> JACK GANSSLE: Tas kāpurķēžu laiks precizitāte no aptuveni desmito daļu no otrā.
Tagad, par sekundes desmitdaļu ir interesanti numurs, jo tas nevar būt
izteikta bināro precīzi, kas nozīmē, tas nevar izteikt tieši
jebkurš mūsdienu digitālo datoru.
Ir grūti noticēt, bet izmantot kā piemēru.
Paņemsim numur vienu trešdaļu.
Viena trešdaļa nevar izteikt decimālā tieši.
Viena trešdaļa ir 0,333 notiek on bezgalību.
Nav veids, kā to darīt, ka ar absolūtā precizitāte aiz komata.
Tas ir tieši tas pats veida problēma kas notika Patriot.
Ilgāk sistēma skrēja, sliktākais laika kļūda kļuva.
>> SPEAKER 1: Pēc 100 darba stundām, laikā kļūda bija tikai
aptuveni trešdaļa no otrās.
Bet attiecībā uz mērķa raķešu ceļo piecu Mach, tā rezultātā
uzskaites kļūda vairāk nekā 600 metrus.
Tas būtu fatāla kļūda karavīri pie Dhahran.
>> THEODORE POSTOL: Kas noticis, ir Scud uzsākšanu tika konstatēti agrāk
brīdinājuma satelīti.
Un viņi zināja, ka dzīšanās bija nāk to vispārējā virzienā.
Viņi nezināja, kur tas nāk.
>> SPEAKER 1: Tagad bija līdz pat radara sastāvdaļa Patriot sistēmas
aizstāvot Dhahran, lai atrastu un saglabātu līdzi ienākošo ienaidnieka raķešu.
>> JACK GANSSLE: radaru bija ļoti gudri.
Tas faktiski sliežu ceļa stāvoklis Scud un tad paredzēt, kur tas
iespējams, būs nākamreiz radara nosūtīja impulsu out.
Ka sauca diapazonā vārtiem.
>> THEODORE POSTOL: Pēc tam, kad Patriot nolemj pietiekami daudz laika ir pagājis, lai dotos
atpakaļ un pārbaudiet nākamo vietu šis atklāti objektu, tas iet atpakaļ.
Tad, kad tas devās atpakaļ uz nepareizu vietā, tad tas neredz objektu.
Un tā nolemj, ka nav objektu, tas bija viltus atklāšanas, un
pilieni dziesmu.
>> SPEAKER 1: ienākošo dzīšanās pazudusi no radara ekrāna, un
sekundes vēlāk tas slammed uz kazarmām.
Scud nogalināti 28 un bija pēdējais atlaists pirmajā Persijas līča karā.
Traģiski, atjaunināta programmatūra ieradušies pie Dhahran nākamajā dienā.
Programmatūra trūkums tika noteikts, slēdz vienu nodaļu nemierīgajā
vēsture Patriot raķešu.
>> Patriots ir faktiski akronīms Pakāpeniskas Array izsekošana
Pārtvert Target.
>> DAVID J Malan: Labi, tāpēc sobering piemērs, lai pārliecinātos.
Un, par laimi, šie zemākā līmenī bugs nav kaut kas, mēs
parasti ir novērtēt, protams, ne ar kādu no mūsu
Agrākais programmu.
Drīzāk, lielākā daļa no bugs jūs saskarties būs loģiska rakstura,
sintaktisko dabā, saskaņā ar kuru kods, vienkārši nedarbojas pareizi.
Un jūs zināt, tas diezgan ātri.
>> Bet, jo īpaši, kad mēs nokļūt beigās semestra, tas notiek
arvien vairāk un vairāk iespēju tiešām jādomā par dizainu
no savas programmas un pakārtoto pārstāvība
tur, too, no datiem.
Piemēram, mēs ieviest MySQL, kas ir populārs datu bāzes
ka jūs varat izmantot ar tīmekļa vietnes, lai uzglabātu datus par atpakaļ beigās.
Un jums ir, lai sāktu nolemt beigās semestra ne tikai to, kas
datu veidiem gar šo līniju, lai izmantotu bet tieši tā, cik bitus izmantot,
vai jūs vēlaties saglabāt datus par datumu un laiku, kā vienmēr, un arī
lietas, piemēram, cik liels jūs vēlaties unikālu ID, lai būt, teiksim, izmantotājiem
savā datu bāzē.
>> Faktiski, ja daži no jums ir bijusi Facebook veido ilgu laiku,
un jūs zināt, kā piekļūt ar savu lietotāja ID -
kas dažreiz parādās jūsu Profila URL, ja esat izvēlējies
iesauka URL, vai, ja jūs esat Lietota Facebook Graph API,
publiski pieejamu API, ar kuru jūs var lūgt Facebook par izejas datiem -
Jūs varat redzēt, kas jūsu ciparu ID ir.
Un pirms dažiem gadiem, Facebook galvenokārt nācās pāriet no
ekvivalents ints, izmantojot ilgtermiņa ilgi, jo laika gaitā, kā lietotāji nāk
un iet, un radīt daudz kontiem un viltus konti, pat viņi ir ļoti viegli
varēja izplūdes kaut ko līdzīgu 4 a miljardiem iespējamā vērtība, piemēram, int.
>> Tātad vairāk par tiem jautājumiem, veidiem nosaka ceļu, kā arī.
Labi, tā ka bija liešana.
Tas bija neprecizitāte.
Pāris ātri paziņojumiem.
Tātad sekcijas oficiāli sākt šo nāk Svētdiena, pirmdiena, otrdiena.
Jūs dzirdat pa e-pastu vēlāk šajā nedēļā par savu sadaļu uzdevumu.
Un jūs arī šeit, šajā brīdī, kā , lai mainītu savu nodaļu, ja jūsu
grafiks tagad ir mainījies, vai jūsu komforta līmenis tagad ir mainījies.
Tikmēr P-set vienu un hakeru viens ir dēļ šo ceturtdien, izmantojot iespēju
pagarināt šo termiņu par vienu specifikācijas līdz piektdienai
ir tipisks veidā.
>> Saprast, kas iekļauts ar problēmu komplekts specifikācijas ir instrukcijas par
kā izmantot CS50 ierīci, veikt, kā arī daži CS50 īpaši instrumenti
piemēram, 50 stils, kas var sniegt jums ar atgriezenisko saiti dinamiski
Jūsu koda stila kvalitāti, kā arī pārbauda 50, kas var nodrošināt jūs ar
dinamiska atgriezenisko saiti par jūsu kodeksa pareizību.
Piedod, ka mēs joprojām esam gludināmais veic dažas Kinks ar 50 pārbaudes.
Daži no jūsu klasesbiedriem, kuri bija jāsāk ap 04:00 piektdienas vakarā, kad
spec piegāja ir pamanījuši, kopš tā laika dažas kļūdas, ka mēs strādājam
cauri, un atvainojos ikvienam, kas ir piedzīvojusi nepamatoti neapmierinātību.
Vaina ir mans.
Bet mēs sekot līdzi CS50 to apspriest, kad tas ir atrisināts.
>> Tātad vārdu par rādītājus sevi.
Tātad tas būs nedēļu vai divas pirms jums sāk saņemt atgriezenisko saiti par problemātisko komplekti
jo jums vēl nav mācību puisis.
Un pat tad, mēs sāksim izvērtēt C problēma noteikti pirms mēs
doties atpakaļ un izvērtēt scratch tā ka jūs saņemsiet vairāk piemēroti
atsauksmes ātrāk.
Bet kopumā vienu mācību, CS50 problēmu kopas tiek vērtēti kopā
pēc četrām asīm -
jomu, pareizību, dizains un stils.
>> Joma būs vairāki tipiski no nulles līdz pieciem, kas
atspoguļo, cik daudz gabals, kas jūs mazliet off.
Parasti, jūs vēlaties, lai tas būtu pieci.
Jūs vismaz mēģinājis viss.
Un pamanāt, ka tas ir multiplikatīvo faktors tāpēc, ka, veicot tikai daļu
Problēma kas nav labākā stratēģija.
>> Tikmēr vairāk acīmredzama nozīme pareizību -
vienkārši ir jūsu programma pareizs ar ievērot ar specifikāciju?
Tas ir svērtā apzināti vairāk mērā nekā pārējās divas asis, ko
koeficientu trīs, jo mēs apzināmies, ka parasti jūs gatavojas tērēt
Daudz vairāk laika pakaļdzīšanās nosaka dažus bugs, kļūst jūsu kodu uz darbu, tad jums
indenting to un izvēloties atbilstošas ​​mainīgo nosaukumi un
, piemēram, kas ir uz otru galu spektra stilu.
>> Tas nav teikt, stils nav svarīgas, un mēs sludinām to vairāk
laiks gan lekcijās un sadaļās.
Stils attiecas uz estētiku Jūsu kodu.
Vai esat izvēlējies arī nosaukts mainīgie kas ir īss, bet nedaudz
aprakstošs?
Vai jūsu kods izrobota, kā jūs esat redzējis lekciju un tādā veidā, kas atbilst
ar 50 stilu?
>> Visbeidzot ir dizaina tiesības tur vidū.
Dizains ir grūtāk viena likt pirkstu, jo tas ir daudz vairāk
subjektīvi.
Bet tas ir iespējams, vissvarīgākā trīs asis attiecībā uz pedagoģiskās
vērtība laika gaitā, un ka šis būs mācīšanu kolēģiem ir iespēja
nodrošināt jūs ar kvalitatīvu atgriezenisko saiti.
Patiešām, CS50 lai gan mums ir šīs formulas un partitūras beigās
no dienas tie ir ļoti apzināti ļoti mazi kausi - punkts vērtības
no nulles līdz trim un nulles un pieci.
Mums nav mēģināt izdarīt ļoti rupjš līnijas starp problemātiskajām kopām vai starp
studentiem, bet drīzāk jākoncentrējas tik daudz kā mēs varam uz kvalitatīviem, parastais raksts
atgriezeniskā saite, vai nu mašīnrakstā vai mutiski no jūsu īpaši mācību kolēģi,
jūs iepazīt diezgan labi.
>> Bet vispār, tie ir svari ka dažādās asis būs.
Tajā pašā laikā pārāk, ir vērts paturēt prātā, ka jums nevajadzētu pieņemt, ka
trīs no pieciem ir 60%, un Tādējādi aptuveni nedarot.
Trīs ir apzināti domāts, lai būtu veida ceļa vidū labas.
Ja saņemat trijiem pie sākumā semestra, kas ir
patiešām ir domāts, lai būtu labs vieta, kur sākt.
Ja saņemat pāriem, izstādes, tur ir noteikti kādu darbu, lai maksāt nedaudz
vairāk uzmanības, lai izmantotu Sadaļu un biroja stundām.
>> Ja saņemat četrinieki un piecinieki, lieliski.
Bet tiešām, mēs ceram redzēt trajektorijas studentu vidū - ļoti
individualizēta vienu studentu, bet, sākot semestris šeit veida
divi līdz trīs diapazonā, bet beidzas šeit augšā 4-5 diapazonā.
Tas, ko mēs patiesībā meklējam.
Un mums jāpatur prātā delta ka Jums piemīt starp nedēļu nulles un nedēļas
12, kad es esmu dara atzīmes.
Tas nav svarīgi, lai mums absolūti kā Jums godīgi sākumā, ja Jūsu
trajektorija ir patiešām augšu un spēcīga.
>> Akadēmiskais godīgums - tāpēc ļaujiet man likts uz manu nopietnākas balss tikai brīdi.
Tātad šis kurss ir atšķirība sūtīt vairāk studentu, nekā jebkura cita
vēsturē ar reklāmu kuģa, es uzskatu.
Mums ir sava veida zaudētā skaits šajā punktu, cik bieži tas notiek.
Un tas nav tāpēc, ka studenti, kas 50 Ir vairāk negodīgi, nekā viņu
klasesbiedru citur.
Bet saprast arī to, ka mēs esam ļoti labi ir atklāt šāda veida lieta.
>> Un tas ir priekšrocība, ka datorzinātnes klase ir ar to, ka mēs
var un mēs salīdzināt visus skolēnus Problēma noteikti pa pāriem pret katru
cits, ne tikai šogad bet visiem iepriekšējiem gadiem.
Mums ir iespēja, piemēram, studentiem klasē, Google un atrast kodu
vietnēs, piemēram, GitHub un diskusiju forumos.
Ir absolūti risinājumi CS50 s p-komplekti peldošs apmēram tur.
Bet, ja jūs varat atrast tos, mēs varam atrast tos.
Un tas viss ir ļoti automatizēta un viegli, un skumji, lai mēs varētu atrast.
>> Bet es gribu uzsvērt arī to, ka Protams, akadēmiskais godīgums politika
ļoti daudz domāts, lai būtu ļoti daudz pretējs šajā garā.
Patiešām, šogad mēs esam pārfrāzēts lietas šajā mācību programmā būtu tas, dot
dot dot, ar sīkāk mācību.
Bet galvenais temats gaitā tiešām, ir jābūt saprātīgam.
Mēs apzināmies, ka ir nozīmīgs daudzums pedagoģiskās
vērtība sadarbojoties, zināmā mērā, ar klasesbiedriem, ar kuru jūs
divas vai jūs trīs vai jums vairāk ir stāvot pie baltās tāfeles
whiteboarding, tāpēc, lai runā, savas idejas -
rakstot no pseudocode attēlos, shēmu, kas būtu Mario būt, ja
jums bija rakstīt to vispirms in pseudocode.
Kas būtu mantkārīgs algoritms -
kā to vajadzētu izturēties vienam Problēma nosaka vienu?
>> Un tā saprotam, ka uzvedība ka mēs aicinām ir ļoti
daudz kas pa šo līniju.
Un mācību, jūs redzēsiet viss ķekars lodes saskaņā
saprātīgu kategorija un nav saprātīga kategorija, kas palīdz mums palīdzēt
jūs wrap savas domas ap kur mēs izdarīt šo līniju.
Un vispār, pienācīgas īkšķis ir tas, ka, ja jūs cīnās, lai atrisinātu
dažas bug, un jūsu draugs vai klasesbiedrs sēž blakus jums, tā ir
saprātīgi, lai jūs parādītu viņam vai viņai savu kodu un teikt, hey, jūs varat palīdzēt
man izdomāt, kas notiek nepareizi šeit?
>> Mums nav parasti apskāviens pretējā pusē.
Tas ir nav pareizs atbilde uz jūsu draugs vai klasesbiedrs šeit teikt, ak,
paskatieties raktuves un skaitlis to ārā no tā.
Tas ir sava veida nesaprātīgs.
Bet kam kāds cits, vēl smadzeņu, vēl viens acu pāris apskatīt
Jūsu ekrāna vai apskatīt savu kodu un teikt, jūs esat pārliecināts, ka vēlaties
lai būtu cilpa šeit?
Vai jūs esat pārliecināts, ka vēlaties ka semikolu šeit?
Vai ak, tas kļūdas paziņojums nozīmē to.
Tie ir ļoti saprātīgs, un jāmudina uzvedību.
>> Gadījumi, uz kuru man bija atsaucoties uz agrāk vārīties uz leju, kad studenti ir
vēlu naktī padarīt sliktu spriedumu lēmumiem un pasta vēstuļu sūtīšanas savu kodu
kāds cits, vai vienkārši sakot, šeit, tas ir Dropbox vai
Googling vēlu naktī.
Un tāpēc es aicinu un izlūgties no jums, ja jums ir kas neizbēgami
brīži stresa, jūs mutuļošana uz augšu pret termiņa, jums nav par vēlu
dienu, jo tas ir jau piektdien plkst ka punkts, e-pastu kurss ir galvas vai
pats tieši.
Teiksim, klausīties, es esmu pie mana lūzuma punkts šeit.
Let 's ir saruna un skaitlis tas.
Atsaukšanās uz web, vai kādu citu ne saprātīga rīcība nekad
risinājumu, un pārāk daudzi no jūsu klasesbiedru vairs nav šeit
Campus tāpēc, ka slikta spriedumu.
Bet tas ir ļoti viegli svārki šīs līnijas.
>> Un šeit ir maz attēlu, lai uzmundrināt Jūs pat no Reddit tā, ka tagad
viss būs OK.
>> Tik ātri Atgādinājums, tad, , kur mēs left off.
Tāpēc pagājušajā nedēļā, atgādināt, ka mēs ieviešam apstākļiem, nevis Scratch
bet C šis laiks.
Un tur bija dažas jaunas sintaksi, bet tiešām nav jaunu ideju par sevi.
Mums bija Būla izteiksmes, ka mēs varētu vai kopā ar divām vertikālām
bāri vai un kopā ar divām ampersands, sakot, ka gan pa kreisi
un tiesības ir taisnība par to izpildīt.
Tad mums bija slēdži, ko mēs skatījāmies uz īsu brīdi, bet es ierosinu, ir patiešām
tikai atšķirīga sintakse, lai sasniegtu Paša veida mērķi, ja jūs zināt,
iepriekš, kādas ir jūsu gadījumi gribam būt.
>> Mēs paskatījās cilpas.
Cilpa varbūt visbiežāk, vai vismaz viens, ka cilvēki
parasti sasniegt instinktīvi.
Pat ja tas izskatās mazliet noslēpumains, jūs redzēsiet daudzus, daudzus piemērus
pirms ilgi, jo jums ir jau vēlu pagājušajā nedēļā.
Kaut cilpas var līdzīgi sasniegtu to pašu.
Bet, ja jūs vēlaties darīt kādu incrementation vai atjaunināšanu
mainīgā vērtībām, jums ir darīt vairāk, manuāli nekā
lai cilpa pirms atļauj.
Un tad tur ir do-kamēr cilpa, kas ļauj mums darīt kaut ko
Vismaz vienu reizi, bet kaut kas pārējais ir taisnība.
Un tas ir īpaši labs programmām vai spēlēm, kur vēlaties
pamudinājusi lietotājam kaut ko vismaz vienu reizi.
Un tad, ja viņš vai viņa nevēlas sadarboties, Jūs varētu vēlēties, lai to izdarītu
atkal un atkal.
>> Ar mainīgajiem, tikmēr mums bija līnijas koda, piemēram, tas, kas varētu
ir divas līnijas.
Jūs varētu pasludināt sauc par int skaitītājs, semikols.
Vai arī varat vienkārši paziņot un definēt, lai runāt.
Arī tā vērtība, tajā pašā laikā.
>> Un tad visbeidzot, mēs runājām par funkciju.
Un tas bija jauks piemērs sajūta, ka tas parāda,
divu veidu funkcijas.
Viens ir GetString (), kas, atkal, izpaužas string no lietotāja.
Bet GetString () ir sava veida interesanta, Ciktāl mēs esam to izmanto,
jo mēs esam vienmēr to izmanto ar kaut kreisajā pusē
vienādības zīmi.
Tas ir teikt, ka GetString () atgriež vērtību.
Tā atgriež, protams, virkne.
Un pēc tam kreisajā pusē, mēs esam vienkārši saglabājot, kas virknē iekšpusē no
mainīgā sauc vārdu.
>> Tas atšķiras, kas nozīmē, no printf jo printf, vismaz mūsu
izmantošana šeit, neatgriež neko.
Kā malā, tas atgriešanās kaut ko.
Mums vienkārši nav vienalga, kas tas ir.
Bet tas ir to, kas ir sauc blakusparādība.
Un kas ir tas, ka blakus efekts katrā gadījumā mēs esam redzējuši līdz šim?
Kāda printf darīt?
Tas drukā kaut ko uz ekrāna, displeji teksts vai skaitļi, vai kaut ko
uz ekrāna.
Un tas ir tikai uzskatāms blakusparādība tāpēc, ka tas nav īsti nododot
tas atpakaļ uz mani.
Tā nav atbilde iekšpusē melnā kaste, ka es varu, tad
sasniegt vērā un paķert.
Tas ir vienkārši darīt to par savu, daudz piemēram Colton tika pieslēgts šis
melnā kaste pagājušajā nedēļā, un viņš kaut kā maģiski tuvojās uz kuģa
bez manis faktiski iesaistīti.
Tas būtu blakusparādība.
Bet, ja man tiešām bija jānonāk atpakaļ šeit un teikt, ak, šeit ir virkne
no lietotāja, ka būtu būt atgriešanās vērtību.
>> Un līdz šim mēs esam tikai izmanto funkcijas , ka citi cilvēki ir uzrakstījuši.
Bet mēs varam reāli darīt šos veida lietas sevi.
Tāpēc es esmu gatavojas iedziļināties CS50 ierīces vēlreiz.
Ļaujiet man aizvērt cilni, ka mēs bija atvērts pirms brīža.
Un ļaujiet man iet uz priekšu un izveidot jaunu failu.
Un es iešu uz priekšu un nosaukt šo vienu positive.c.
Tāpēc es gribu darīt kaut ko ar pozitīviem skaitļiem šeit.
Tāpēc es esmu gatavojas iet uz priekšu un darīt int -
sorry -
# Ietvert.
Let 's nav darīt, ka pats kļūda, jo pirms tam.
Int galvenais (spēkā neesošs), atklāts cirtaini lencēm, slēgta cirtaini lencēm.
>> Un tagad es gribu darīt turpmāk.
Es gribu uzrakstīt programmu, kas uzstāj, ka lietotājiem sniedz
man pozitīvs skaitlis.
Tāpēc nav GetPositiveInt funkcija ar CS50 bibliotēkā.
Tur ir tikai GetInt ().
Bet tas ir OK, jo man ir konstrukcijas, ar kuru es varu uzlikt
nedaudz vairāk ierobežojums šīs vērtības.
Es varētu darīt kaut kas līdzīgs šim.
>> Tātad, int n -
un, ja jūs rakstāt kopā, tikai saprotam Es iešu atpakaļ un
mainīt dažas lietas, uz brīdi -
tāpēc int n ir vienāds GetInt ().
Un tas ir gatavojas nodot int iekšpusē no n.
Un ļaujiet man būt vairāk aprakstošs.
Ļaujiet man teikt kaut ko līdzīgu, es pieprasu, ka jūs varētu man vesels pozitīvs skaitlis.
>> Labi.
Tik vienkārši mazliet norādījumiem.
Un tagad ko es varu darīt?
Nu, es jau zinu no manu vienkāršu nosacījumus vai filiāles, tāpat kā es
bija nulles, es varētu teikt kaut ko , piemēram, ja n ir mazāks par vai vienāds ar
nulle, tad es gribu darīt kaut ko , piemēram, kas ir ne pozitīvs.
Un tad es varētu darīt -
OK, bet es tiešām gribu, lai iegūtu, ka int.
Lai es varētu iet uz augšu šeit, un es varētu veida eksemplāru šo un ievilkumā to.
Un tad, OK.
Tātad, ja n ir mazāks nekā vai vienāds ar nulli izdarīt.
>> Tagad, kas notiks, ja lietotājs nesadarbojas?
Nu, tad es esmu gatavojas aizņemties šo šeit.
Un tad es iet šeit un šeit un šeit.
Tātad tas, protams, nav risinājums, vai ne?
Jo tur nav redzams gals.
Ja es gribu prasīt, lietotājs dod man pozitīvs skaitlis, es varu
faktiski iegūtu int.
Es pēc tam var pārbaudīt šo int.
Bet tad es gribu, lai pārbaudītu to atkal un pārbaudiet to vēlreiz, un to pārbaudīt vēlreiz.
Tātad, protams, kas ir labāks būvēt, ir, izmantojot šeit?
Labi, tāpēc daži veida cilpas.
>> Tāpēc es esmu gatavojas atbrīvoties par gandrīz visu.
Un es gribu, lai iegūtu šo int vismaz vienu reizi.
Tāpēc es esmu gatavojas teikt darīt -
un es ņemšu atgriezties bet tikai brīdi -
tagad darīt?
Es esmu gatavojas darīt, int n izpaužas GetInt ().
Labi.
Tātad tas ir diezgan laba.
Un tagad, cik bieži Es gribu darīt?
>> Ļaujiet man nodot printf iekšpusē cilpa lai es varētu pieprasīt atkal un atkal,
ja tas būtu nepieciešams.
Un ko es gribu šo bet nosacījums darīt?
Es gribu, lai saglabātu to izdarīt bet kāda tā ir?
Jā.
N ir mazāks par vai vienāds ar nulli.
Tāpēc jau mēs esam ievērojami iztīrīt šo kodu uz augšu.
Mēs esam aizņēmušies ļoti vienkāršs būvēt - do-kamēr cilpa.
Es esmu nozagts tikai svarīgus līnijas kods, kas es sāku kopēšanas un
līmēšana, kas nebija gudri.
Un tāpēc tagad es esmu gatavojas faktiski ielīmētu tā šeit un vienkārši darīt to vienu reizi.
>> Un tagad to, ko vēlos darīt ļoti gals no šīs programmas?
Es ņemšu tikai teikt kaut ko vienkāršu patīk, paldies - un
Es darīšu% i par int -
slīpsvītru n, komats, un pēc tam plug n, semikols.
>> Labi.
Tātad, pieņemsim redzēt, kas notiek tagad kad es palaist šo programmu.
Es iešu uz priekšu un darīsim pozitīvi.
Damn.
Dažas kļūdas.
Tātad, ļaujiet man ritiniet atpakaļ uz augšu uz pirmo.
Nestrādā caur tiem atpakaļ.
Darbs caur tiem no augšas uz leju lai tie kaskādes un tikai
viena lieta ir nepareizi.
Netieši deklarācija funkcija GetInt ().
Jā.
Tātad tas nebija pietiekami.
Es veida, kas to pašu kļūdu, bet nedaudz atšķirīgs šoreiz.
Man vajag, lai ne tikai iekļaut stdio.h, bet arī cs50.h, kas ietver
ts deklarācijas iegūt int, kas mācīt ierīci, vai arī māca
C, kas GetInt () ir.
>> Tātad, ļaujiet man atkārtoti saglabāt.
Es esmu gatavojas ignorēt citas kļūdas jo es esmu gatavojas cerēt, ka viņi
kaut kā saistīts ar kļūdu Es jau noteikti.
Tātad, ļaujiet man iet uz priekšu un recompile ar padarīt pozitīvu, Enter.
Damn.
Trīs kļūdas, tomēr.
Ļaujiet man ritiniet līdz pirmās.
Neizmantotās mainīgo n.
Mēs esam nav redzējis to pirms tam.
Un tas arī ir nedaudz noslēpumains.
Tas ir izejas kompilatoru.
Un ko tas uzsvērts līnija tur - positive.c :9:13 -
saka, tas saka par deviņu līnijas positive.c, pie 13 raksturu,
13 kolonna, jūs veicāt šo kļūdu.
>> Un jo īpaši tā stāsta man neizmantots mainīgo n.
Tātad, pieņemsim redzēt -
līnija deviņi.
Es esmu, izmantojot n tādā ziņā, ka Es esmu, piešķirot tam vērtību.
Bet ko kompilators nepatīk, ir ka es neesmu šķietami to izmanto.
Bet pagaidiet minūti, es esmu, izmantojot to.
11 rindā, es esmu, izmantojot to šeit.
Bet, ja es ritiniet uz leju tālāk at :11 positive.c -
tā pie līnija 11, raksturs 12, kompilators stāsta man, izmantošanu
nedeklarētu identifikators n.
>> Tāpēc nedeklarētas nozīmē, ka es nav norādīts tā kā
mainīgo ar datu tipu.
Bet pagaidiet minūti.
Man bija tieši tā, ka deviņi rindā.
Tātad, kāds ir patiešām sajaukt šeit.
Tas ir vai nu man, vai kompilatoru, jo deviņās rindā, atkal, es esmu deklarējot
int n, un es esmu, piešķirot tai atgriezties vērtību GetInt ().
Tad es esmu, izmantojot šo mainīgo n rindā 11, un pārbaudīt, ja tā vērtība ir mazāka
par vai vienāds ar nulli.
Bet tas acīmredzot ir slikts un šķelto kāpēc?
Saka to vēlreiz?
>> Ah, man ir atzīt n pirms ienāk cilpa.
Bet kāpēc?
Es domāju, mēs vienkārši ierosināja nedaudz atpakaļ, ka tas ir naudas sods deklarēt mainīgos
visi uz vienas līnijas, un pēc tam piešķirt viņiem kādu vērtību.
Globālo mainīgo - pieņemsim atgriezties ar šo ideju, tikai brīdi.
Kāpēc jūs vēlaties, lai es tā ārpus no cilpas?
Tas ir.
Tieši tā.
>> Tātad, lai gan, nedaudz counterintuitive, ļaujiet man apkopot.
Kad jūs atzīt n iekšā no do bloka tur -
īpaši iekšpusē no šie cirtaini bikšturi -
ka mainīgo n ir to, kas ir sauc joma -
kas nav saistīti ar mūsu vērtēšanas sistēmu kurss - bet ir joma, kas ir
tikai tie cirtaini lencēm.
Citiem vārdiem sakot, parasti, ja jūs atzīt mainīgs iekšpusē kopumu
cirtaini bikšturi, ka mainīga pastāv tikai iekšpusē no tiem cirtaini lencēm.
Tātad, šīs loģikas vien, lai gan Es esmu deklarēta n deviņās rindā, tas
būtībā pazūd no darbības jomas, pazūd no atmiņas, tā teikt,
līdz brīdim, kad es hit līniju 11.
Jo 11 līnija, diemžēl, ir ārpus šīm cirtaini lencēm.
>> Tāpēc es diemžēl nevaru noteikt šo, dodas atpakaļ uz to, ko es darīju to pirms tam.
Jūs, iespējams, sākumā to izdarītu.
Bet ko jūs tagad nav dara cikliski?
Jūs esat acīmredzot nesaņemu int cikliski.
Tātad, mēs varam atstāt GetInt (), un mēs jāatstāj GetInt () iekšienē
cilpa, jo tas, ko mēs vēlamies, lai apgrūtināt lietotājam, lai atkal un atkal.
Bet tas nav pietiekami, lai dotos līdz līnijas, teiksim, seši.
Int n, semikols.
Nedod tai vērtību vēl jo Jums nav nepieciešams, lai tikai vēl.
>> Bet tagad šeit lejā, paziņojums - tas būtu ļoti viegli kļūda.
Es nevēlos, lai ēnot manu iepriekšējo deklarācija n.
Es vēlos izmantot šo n, ka faktiski pastāv.
Un tā tagad 10 līniju, Es piešķirt n vērtību.
Bet sešu rindā, es apliecinu n.
Un tā es varu, vai es varu ne izmantot to 12 līniju tagad?
Es varu, jo, starp kurām cirtaini breketes ir n deklarēta tagad?
Viens šeit uz pieciem rindā.
Ar vienu te uz 14 līnijas.
Tātad, ja es tagad tālināt, saglabājiet šo failu, dodieties atpakaļ un palaist lai pozitīvi, to
apkopoti šo laiku.
Tātad tas jau ir progress.
Slash. . / Pozitīvs, Enter.
>> Es pieprasu, ka jūs varētu man pozitīvs skaitlis.
Negatīvs 1.
Negatīvs 2.
Negatīvs 3.
Nulle.
Vienu.
Un paldies par kādu ir to, kas tagad izdrukāt.
>> Ļaujiet man mēģināt kaut ko citu, aiz ziņkārības.
Es esmu to teicis ievadi veselam skaitlim.
Bet ko tad es, nevis rakstīt jēru?
Tātad jūs tagad redzēt dažādas ātru -
mēģiniet vēlreiz.
Bet nekur manā kodu tomēr es rakstīt vēlreiz.
Tātad, ja, iespējams, ir tas mēģiniet vēlreiz ātru nāk no, vai Jūs teiktu?
Jā, no GetInt () pati.
Tātad viena no lietām, CS50 darbinieki dara jums, vismaz uz šiem pirmais maz
nedēļām, ir mēs esam uzrakstījuši kādu summu no kļūdu pārbaude, lai nodrošinātu, ka tad, ja
zvanāt GetInt (), jūs vismaz nokļūt atpakaļ int no lietotāja.
Jums nav iegūt virkni.
Jums nav iegūt char.
Jums nav iegūt kaut ko cits vispār.
Jūs saņemsiet int.
>> Tagad tas varētu būt pozitīva.
Tas varētu būt negatīva.
Mums nav nekādas garantijas ap to.
Bet mēs apgrūtināt lietotājam vēlreiz, retry, retry, kamēr viņš vai viņa patiesībā
sadarbojas.
Tāpat, ja man 1.23, kas ir ne int.
Bet, ja es rakstīt, teiksim, 50, ka dod man vērtību, ko es gribēju.
>> Labi.
Tātad nav slikti.
Visus jautājumus par to, ko mēs esam tikko veikts?
Galvenais takeaway ir, lai būtu skaidrs, ne tik daudz cilpa, ko mēs esam redzējuši
Pirms kaut arī mums nav īsti to izmanto, bet gan jautājums par darbības jomu, kurā
mainīgie lielumi var tikai tad, var izmantot tikai ietvaros kādā noteiktā jomā.
>> Labi, ļaujiet man pievērsties ierosinājumu veicāt agrāk, ka
globālo mainīgo.
Kā malā, izrādās, ka cita risinājums šai problēmai, bet,
parasti nepareizu risinājumu vai slikti izstrādāts risinājums, ir līdz
atzīt savu mainīgo, kā to, kas ir sauc globālo mainīgo.
Tagad es esmu veida aizskart manu definīciju jomas, jo ir
Nav cirtaini bikšturi pie ļoti top un ļoti apakšā failu.
Bet nozīmē arī, ka ir tā, ka tagad četrās līniju,
n ir pasaules mainīgais.
Un, kā norāda nosaukums, tā ir vienkārši pieejami visur.
>> Scratch patiesībā ir tiem.
Ja tu izmanto mainīgo, jūs varētu atcerēties jums bija izvēlēties, ja tas ir par
šī elfa vai visiem sprites.
Nu, visas sprites ir tikai skaidrāks veids, kā pateikt pasaules.
Yeah?
Ak, tiešām labs jautājums.
>> Tāpēc atgādina, ka jau pirmajā versijā par manu kodu, kad es nepareizi
deklarētie un noteikti n deviņās līnijas -
Es to pasludināja par mainīgo un man deva to vērtību ar
uzdevums operators -
tas deva man divas kļūdas.
Viens, tas, ka n nav izmantots, un divi, ka līnija 11
tas vienkārši nav deklarēta.
Tātad, pirmais man nebija adrese brīdī.
Tas nav stingri kļūda deklarēt mainīgs, bet neizmanto to.
Bet viena no lietām, ko mēs esam darījuši, kas CS50 ierīces, apzināti,
pedagoģiski, ir, mēs esam izliekts uz augšu cerības kompilatoru, lai
pārliecinieties, ka jūs darāt lietas ne tikai pareizi, bet īsti pareizi.
>> Jo, ja jūs deklarē mainīgo piemēram, n un nekad to izmanto, vai arī izmantojot to
pareizi, tad to, kas tas dara tur?
Tas patiesi kalpo mērķim.
Un tas ir ļoti viegli laika gaitā, ja jūs nav konfigurēt savu datoru
šādā veidā, vienkārši ir kods, kas ir maz paliekas šeit, paliekas tur.
Un tad mēnešus vēlāk paskatās atpakaļ un jūs, piemēram, kāpēc tas ir līnija
kods tur?
Un, ja nav labs iemesls, tas nedod labumu jums vai jūsu kolēģiem
nosaka ceļu, lai būtu paklupt pār to pēc tam.
>> Kā malā, kur ir kas nāk no?
Nu, atgādināt, ka katru reizi, kad mēs apkopotu programma, tas viss stuff ir
tiek drukāts.
Tātad, mēs būsim atpakaļ uz to.
Bet atkal, lai ir lietderība, kas automatizē apkopošanas procesu, ko
rādīt faktisko kompilators sauc šķindoņa.
Šī lieta, mēs galu galā redzēt, ir darīt ar atkļūdošanu ar īpašu
Programma sauc atkļūdotājs.
Tas ir saistīts ar optimizējot kods - vairāk par to nākotnē.
Std = C99 -
tas tikai nozīmē izmantot 1999 versiju C. C ir bijis apmēram pat ilgāk, nekā
tas, bet viņi kādu jauku Izmaiņas 10 plus gadus atpakaļ.
>> Un šeit ir attiecīgās ones.
Mēs sakām, darīt visu, kas agrāk būtu bijis brīdinājums
kļūda novērst students no sastādīšanas.
Un sienu nozīmē to izdarītu viss ķekars lietas, kas nav
tikai saistībā ar mainīgajiem.
Un tad ļaujiet man atrodiet beigām, šīs līnijas.
Un arī tas, mēs galu galā atgriezties.
Tas ir acīmredzami nosaukums failu, es esmu sastādīšanas.
Tas atgādina par faila nosaukumu Es esmu outputting kā nosaukums
mana skrienams programmas.
Šī-lcs50 tikai nozīmē izmantot CS50 bibliotēka, un visi nullēm un tiem, ka
personāls rakstīja un apkopoti agrāk šogad, integrēt
tos manā programmā.
>> Un kāds zina, kas-lm ir?
Tas ir math bibliotēka, kas ir tikai tur, pat ja jūs esat
nav darot jebkuru math.
Tas ir vienkārši automātiski sniedz ko mums darīt.
>> Nu, ļaujiet man darīt vienu citu piemēru Šeit atverot jaunu failu.
Un ļaujiet man saglabāt šo vienu, kā string.c.
Izrādās, ka, kā mēs runājam par datiem veidiem šodien, tur ir vēl vairāk
notiek zem motora pārsega nekā mēs esam redzējuši līdz šim.
Tātad, ļaujiet man ātri darīt ātri programmu.
Iekļaut stdio.h.
Un es glābt to.
Un jūs zināt, ļaujiet man nepadara pašu kļūdu atkal un atkal.
Iekļaut cs50.h.
Un ļaujiet man iet uz priekšu tagad un darīt int galvenais (spēkā neesošs).
>> Un tagad es vienkārši gribu darīt programmu ka tas - atzīt virkni
sauc s un saņemt virkni no lietotāja.
Un ļaujiet man darīt nedaudz instrukcijas šeit -
lūdzu, iedodiet man virkni - tā lietotājs zina, ko darīt.
Un tad šeit lejā zem šīs, Es gribu darīt šādi -
par int i kļūst nulle.
Atkal, datorzinātnieku parasti sākt skaitīšanu no nulles, bet mēs varētu
veiktu šo vienu, ja mēs patiešām vēlējās.
Tagad es esmu gatavojas darīt, man ir mazāka nekā virknes garumu s.
Tātad strlen -
S-T-R-L-E-N -
atkal, tas ir īss, jo tā ir vieglāk rakstīt, pat ja tas ir
maz mistisks.
>> Tā ir funkcija, mēs esam nav izmantoti agrāk, bet burtiski tas, ka -
atgriezties pie manis uz skaitli, kas apzīmē garums string
ka lietotājs drukāti.
Ja viņi drukāti sveiki, tas atgriezīsies Piecu jo tur ir pieci
burti sveiki.
Tad uz katru atkārtojuma Šī cilpa, es plus plus.
Tātad vēlreiz, standarta būvēt, pat tad, ja jūs neesat pilnīgi pārāk ērti vai
pazīstams ar to vēl.
>> Bet tagad par katru atkārtojuma šīs cilpas, paziņojums, ko es esmu gatavojas darīt.
Es gribu iet uz priekšu un izdrukāt veic vienu rakstzīmi -
tāpēc% c slīpsvītru n jaunā rindā.
Un tad, jūs zināt, ko es gribu darīt?
Neatkarīgi vārds ir tas, ka lietotājs jo, piemēram, sveiki, es gribu izdrukāt
H-E-L-L-O, viens raksturs uz līnijas.
Citiem vārdiem sakot, es vēlos saņemt pie individuālās rakstzīmes virknes,
saskaņā ar kuru līdz šim string ir tikko bijis rakstzīmju secība.
>> Un izrādās es varu darīt s, kronšteinu, i, netālu kronšteins, aizveriet
iekavas, semikols.
Un man ir jādara vēl viena lieta.
Tas ir failā ar nosaukumu string.h ka strlen ir deklarēti.
Tātad, ja es vēlos izmantot šo funkciju, Man vajag pateikt kompilatoru,
gaidīt, lai izmantotu to.
Tagad ļaujiet man iet uz priekšu un darīt programmu, ko sauc virkne.
Dot, slīpsvītra, stīgu.
>> Lūdzu, iedodiet man virkni.
Es iešu uz priekšu un ierakstiet to.
Sveiki, visiem vāciņiem, Enter.
Un tagad paziņojums es esmu iespiests šo viens raksturs pēc otra.
Tātad jaunais papildinājums šeit ir tas, ka virkne, beigās, dienā, var būt
piekļūt, kā tās personas zīmes, ieviešot laukumā
kronšteins notācija.
Un tas ir tāpēc, ka virkne zem pārsegs ir patiešām secība
rakstzīmes.
Bet kas ir veikls par tām ir jūsu datora RAM -
Mac, kāds tas ir - viņi burtiski atpakaļ atpakaļ atpakaļ -
H-E-L-L-O -
individuālā, blakus baiti atmiņā.
>> Tātad, ja jūs vēlaties saņemt pie astotais šāds baits, kas šajā cilpas būtu
kronšteins nulle, viens bracket, bracket divi, kronšteins trīs, četru bracket -
kas ir nulle indeksētas līdz pieciem -
ka izdrukās H-E-L-L-O savā rindā.
>> Tagad, kā teaser, ļaujiet man parādīs veidu lietas, jūs, iespējams, būs
varētu saprast, vismaz ar kādu tuvu meklē.
Attiecībā uz vienu, ko mēs iekļauts šodienas piemēru, ja vēlaties, ir faktiski
viens no pašiem pirmajiem jailbreaks par iPhone.
Jailbreaking ir plaisas tālruni lai jūs varētu faktiski izmantot to
atšķirīgas pārvadātājam vai instalēt savu programmatūru.
Un jūs pamanīsiet, tas izskatās pilnīgi mistisks, visticamāk.
Bet paskaties uz to.
IPhone tika acīmredzot sašķelts ar uz cilpas, ja nosacījums, cits
nosacījums, ķekars funkcijas mēs esam nav redzējis.
>> Un atkal, jums nav pie pirmā acu uzmetiena, iespējams,
saprast, kā tas darbojas.
Bet viss, ko mēs veida uzņemties par pašsaprotamu mūsu mūsdienu dzīvē
faktiski ir tendence samazināt pat dažus no šiem pamatiem mēs esam bijuši
meklē.
Ļaujiet man iet uz priekšu un atvērt vienu cita programma, holloway.c.
Tātad tas arī ir kaut kas jums nav īsti zināt.
Pat darbinieku neviens, vai es varētu iespējams izrēķināt to, ko meklē
tas tāpēc, ka tas bija kāds kods , kas tika iesniegts, kas ir
vēsturiski pazīstama kā obfuscated C konkurss, kur uzrakstīt programmu
kas apkopo un iet, bet ir tik nopelt mistisks neviens cilvēks nevar saprast, ko
tā gatavojas darīt, kamēr tie faktiski palaist to.
>> Tātad, protams, ja paskatās uz to kods, es redzu slēdzi.
Es redzu galvenais.
Es redzu šīs kvadrātiekavas norādot sava veida masīva.
Vai kāds vēlas uzminēt, ko šī programma faktiski
tomēr, ja man palaist Holloway?
Jā.
Labi.
Labi darīts.
Tātad tikai darbinieki, un es nevaru izdomāt , ko šīs lietas darīt.
>> Un tagad visbeidzot, ļaujiet man iet uz priekšu un atvērt vēl vienu programmu.
Šis ir viens -
atkal, mēs veiksim pirmkodu pieejami tiešsaistē - tas viens ir tikai
veida diezgan apskatīt.
Visi viņi ir hit starpdevējs pavisam nedaudz.
Bet tas ir reāls kods.
Tātad, ja jūs domājat, ka ir diezgan, ja mēs kursēt šo pie ātru,
galu galā jūs redzēsiet, kā mēs varētu darīt lietas, kā šis.
>> Tāpēc mēs ņemšu atvaļinājumu jums šī piezīme un redzēt jūs trešdien.
>> [Mūzikas atskaņošanas]
>> SPEAKER 2: Nākamajā CS50, uz TFS skatuves dumpoties.
>> SPEAKER 3 Tur viņš ir.
Saņemt viņam!
>> [Mūzikas atskaņošanas]