[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]