[Musiqi ifa] DAVID J Malan: Bütün sağ, CS50 geri salamlayıram. Bu həftə iki başlayın. Bizim bir söz kampus Friends - Əgər istəyirsinizsə, bəlkə, ya Hazırda, yaxud bəzi gələcək vəd hətta bir dəfə daha rahat, tədris orta məktəb şagirdləri bir az informatika haqqında bir şey, ki, URL rəhbəri edin. Onlar indi xüsusilə ehtiyacı var müəllim, Siz xüsusilə də əgər informatika bəzi ifşa idi. Belə ki, son dəfə xatırlayıram, biz təqdim bir neçə data C növləri, siz almaq başlamışdır bilər Bu günə qədər çirklənmiş əlləri problem bir seçin. Və biz bir char idi. Belə ki, bir qədər texniki baxımından, nə Bu gün bildiyiniz kimi bir char var? Belə ki, bir xarakter, lakin edək İndi daha dəqiq ola bilər. Biz xarakteri ilə nə deməkdir və ya char fərdi? Qeyri-ədədi xarakter - belə mütləq. Bu da, hətta ədəd çıxır durğu işarələri və məktubları Bu data ilə təmsil bir char kimi tanınan yazın. Belə ki, mütləq əlifba deyil. Bəli? Belə ki, bir ASCII xarakter var. Zaman, həftə sıfır geri hesab edirəm ki, əgər biz könüllü bizim byte idi çıxmaq və ya əlləri almaq və ya heç, onlar bit təmsil edib. Lakin kollektiv səkkiz bir qrup kimi, onlar bir byte təmsil edib. Və biz ASCII anlayışı daxil ki, mühazirə də, bu sadəcə bir nömrələri və məktublar arasında Xəritəçəkmə. Və ASCII istifadə edir, həmin insanlar örtük, səkkiz bit bir xarakter təmsil etmək. Belə ki, müvafiq olaraq, əgər səkkiz bit bilər hər iki dəyərlərindən birini keçirilib - sıfır və ya bir - iki imkanları var idi o deməkdir ki, Bu şəxs üçün - sıfır və ya bir - Bunun üçün bu şəxs, iki iki şəxs, bu iki. Belə ki, iki dəfə cəmi iki dəfə iki dəfə iki dəfə iki - cəmi belə iki səkkizinci. Belə ki, simvolların ümumi sayı var Mümkün 256 bilərsiniz ki, səkkiz bit ilə təmsil edir. İndi sizin Asiya danışan Dil daha çox olduğunu bilirik bilər sadəcə dünya simvol Və pansiyonlar və Cs və Ds. And olsun ki, ASCII üçün kifayət etmir dünya dillərinin bir çox. Ki, başqa bir vaxt, lakin daha çox. İndi, C istəyirsinizsə bilirik ki, məktub, bir parça təmsil durğu, və ya sadəcə bir şey xarakter təbiət, bir char istifadə edin. Və bir bayt və ya səkkiz bit var. Necə int haqqında? Yaxşı, bir int bir tamsayı edir. Neçə bit, siz geri əgər, adətən tam idi? Hər kəs geri? Belə ki, adətən 32 var. Bu, həqiqətən, kompüter asılıdır istifadə etdiyiniz edir. Amma cihaz və bir çox kompüter, 32 bit və ya dörd var bytes - səkkiz dəfə dörd. Və ints yalnız saxlanılması üçün istifadə olunur ya mənfi nömrələri, müsbət və ya sıfır. Və 32 bit və var yalnız müsbət nömrələri haqqında qayğı bilərsiniz hər ballpark neçə mümkün kompyuter təmsil edə bilər integers up sıfır? Belə ki, 32 iki olacaq təxminən dörd milyard. Iki bu səlahiyyətlərin olacaq ki kompüter təkrarlanan mövzular. Görəcəyik ki, onlar olduqca rahat istəyirik bu tamamilə belə işləmək üçün bir baş riyaziyyat etmək asan. Beləliklə, biz təxminən dörd milyard demək lazımdır. İndi, uzun uzun - siz tahmin növ edə bilərsiniz. Bu int artıq var. Neçə bit? 64 bit və ya səkkiz bayt belə. Bu, hətta təmsil edə bilər deməkdir böyük nömrələri, daha müsbət və ya böyük mənfi nömrələri. Və necə üzmək? Bu üzən point var 32 bit dəyəri. Bu bir şey, yalnız bir real sayı Onluq kəsr nöqtəsi ilə. Amma əvəzinə daha çox yerdə lazımdır, əgər bu kəsir sonra və ya istədiyiniz bəzi böyük sayı təmsil edir sonra fraksiyası bir istifadə edə bilərsiniz cüt, 64 bit edir. Amma maraqlı var burada paket. Ints 32 bit və məhduddur Belə ki, əgər hətta uzun longs 64 ilə məhdudlaşır bit ki, növ sual begs, nə həqiqətən saymaq istəyirsinizsə bir int 4 milyard daha yüksək? Bəli, yalnız bir uzun uzun istifadə edin. Amma ali saymaq nə istəyirsinizsə 64-cü iki daha çox vermək və ya almaq? İndi ki, bir çox var. Amma nəhayət, həqiqətən, qüdrət , dəyərlər bu cür qayğı bir verilənlər bazası istifadə edərək, özellikle və bir çox və bir çox toplamaq başlayır və məlumat çox və unikal verilməsi ki, məlumatların hər parça nömrələri. Belə ki, biz cür bir problem var. Və eyni, üzən point ilə dəyərlər - üzdüyü və ya çiftler - yalnız bir sonlu sayı var, əgər bit, nə qədər ümumi sayı siz bilər bəlkə təmsil? Zaman yaxşı, daha az aydın Onluq kəsr nöqtəsi daxildir. Lakin bu, şübhəsiz ki, məhdud deyil. Siz bit bir sonlu sayı, varsa insan məhdud sayı, məhdud yüngül ampüller sayı, şübhəsiz ki, siz yalnız məhdud sayı təmsil edir point dəyərlər üzən. Amma nə qədər real nömrələri onların dünya var? Sonsuz var. Belə ki, bir problem növü var, çünki biz sonsuz məbləği yoxdur yaddaşında və ya bizim kompüter daxilində RAM. Belə ki, bəzi çətin şeylər ola bilər. Elə davam və edək burada bildirirəm. Mənə davam və gedit açmaq edək. Mən irəli getmək və bir fayl saxlamaq gidiyorum "floats0.c" yalnız olmağa çağırıb ki, bir nümunə ilə uyğundur Əgər istəyirsinizsə online. Və mən davam gedən və alıram aşağıdakı kimi müəyyən - Mən int, irəli getmək və demək gidiyorum əsas void, biz tez-tez edirik. Və sonra bu proqram, mən gedirəm özümü bir float elan, bir 32-bit belə dəyişən özbaşına, f çağırıb. Və sonra onu saxlamaq gidiyorum Mən bir onuncu, belə ki, 0.1 bilmirəm. Beləliklə, mən ifadə gedirəm ki, biri 10 bölünür, olan mükəmməl deyil C. qanuni Və sonra ikinci xəttində, mən sadəcə ki, dəyəri çap etmək istəyirəm. Beləliklə, biz istifadə edə bilərsiniz ki, xatırlayıram printf tanış. Biz int i% istifadə etmək istəmirəm. Biz float üçün% f istifadə etmək istəyirik. Və sonra, backslash n etmək gidiyorum yaxın quote, vergül, f, nöqtəli vergül. Belə ki, burada mənim proqramıdır. Bir səhv artıq var. Mu bu tıklayan kimə kimsə Artıq ən azı qeyd etmək istəyirəm bir səhv mən etdik? Bəli? Bəli. Mən də "# include" unuttum Mən cəhd əgər üst, onlar simptom Bu tərtib olacaq ki, compiler, mənə fəğan gedir undefined simvolu və ya söyləyərək bu barədə bir şey. Bu bir şey dərk etmir printf istəyirəm. Belə ki, I # include "etmək gidiyorum "Faylı qeyd edin. İndi daha yaxşı forma var. Amma mən də qeyd etmək gidiyorum həyata yeni bir detal bu gün. Yer ifadə əlavə % f% i% s kimi sahibləri, siz bəzən davranış təsir ki, tutucu edir. Məsələn, üzən halda point dəyər, mən yalnız istəyirsinizsə, sonra bir decimal yerə keçirmək üçün dövr, mən, həqiqətən 0.1f edə bilərsiniz. Belə ki, başqa sözlə, mən f ayırıb yalnız 0,1 ilə yüzdə işarəsi, printf izah edən bir bütün ola bilər decimal sonra nömrələri dəstə Mənim üçün qeyd. Amma yalnız bir görmək istəyirik. Belə ki, indi davam və saxlamaq gidiyorum Bu proqram, mənim terminal daxil pəncərə və mən irəli getmək gidiyorum və növü daxil edin float 0 olun. Hesab edirəm ki, bir qədər sirli line oldu ki, biz daha məntiqli başlayacaq Bu həftə və gələn onu ayrı tease. İndi davam gidiyorum və float sıfır axır. Və lənətləmək. Belə ki, bir səhv var burada nədənsə. Hesab edirəm ki, bir onuncu olduqca əminəm, və ya 10 bölünür biri 0.0 deyil. Bəlkə yalnız axtarır deyiləm kifayət qədər rəqəm edir. Belə ki, niyə mən iki .2 iki görmək demək deyil onluq yerlərinə əvəzinə yalnız biridir. Mənim terminal pəncərə geri gidelim burada dəfə bir neçə hit mənim tarixi baxın. Yenidən sıfır sal etmək etməyin, və sonra yenidən. İndi daxil edin. Və indi bu səhv olduqca eminim. Və mən üç və dörd edə bilər və mən yəqin ki, adet sıfır görən saxlamaq üçün gedir. Belə ki, səhv haradadır? 10 bölünür biri 0,1 olmalıdır. Kimsə nə bir zərbə almaq istəyirsinizsə fundamental məsələdir? Bəli? Onlar həm integers istəyirik. Belə ki, nə? Belə ki, 10 bölünür biri ilə Mən hesab nə nə. Və mən 0.1 almaq. Bəli. Və bu həqiqətən ki məsələdir. Bir kompüter bir tam almaq zaman və, başqa tam onu ​​bölmək ismarıcları kompüter gedir Əgər tam istədiyiniz daşımır. Baxmayaraq problem, əlbəttə ki, 0.1 bir tam deyil. Bu real sayı var. Və kompüter nə belə yoxdur default yalnız üz salır edir bu kəsir sonra hər şey. Bu özlüyündə aşağı dəyirmi və ya qədər deyil. Bu, sadəcə hər şey üz salır bu kəsir sonra. İndi anlamlı. Indi biz aydın olduğunuz sıfır ilə ayrıldı. Amma bir dəqiqə gözləyin. Mən int sıfır göremiyorum. Mən, həqiqətən, 0.00 görüyorum. Belə ki, necə ki, mən bu barışdırmaq edirsiniz? 10 bölünür bir sıfır, amma Ben əgər 0.00 görən, harada olur bir real sayı geri çevrilir? Bəli. Eynilə elə. Belə ki, up, burada xətt beş, mən həqiqətən ilə 0.1, ardından ki, saxlamaq daxilində bir float ki, sıfıra qaralar, ki, səmərəli ekvivalent var bir int kimi deyil saxlanılması, lakin Həqiqətən, bir float kimi. Bundan başqa, mən sonra printf kullanıyorum açıq-aşkar iki ki sayı çap onluq yerlərinə olsa belə var həqiqətən hər hansı bir ola bilər. Sucks Belə ki bu cür, sağ? Görünür, siz riyaziyyat edə bilməz ən azı bu səviyyədə bir kompüter dəqiq. Ancaq şübhəsiz ki, bir həll var. Biz bəlkə ola bilər ki, sadə fix nədir yalnız daxilən burada hətta etmək Bu həll? Bəli? Daxil integers Turn - Bəli. Mən nə tam əmin deyiləm Hətta əgər Əgər, həqiqətən, burada onu əsaslı Bu həm də nə var ints olan, yaxşı, nə deyil 10.0 Bu edilməsi etmək 1.0, fayl resave. Mənə geri aşağı gedək alt və yeniden derlemeyle. Mənə indi təkrar edək. Və orada - İndi, mən bir onuncu var 0.10 kimi təmsil. Bütün hüquqlar. Belə ki, pis deyil. Və mənə bir başqa şəkildə qeyd edək biz bu həll ola bilər. Mənə həqiqətən vaxt geri gəzmək edək bir bu idi zaman Onuncu bir an əvvəl. Və mənə davam və bu faylı resave bildirin yalnız fərqli bir fayl adı kimi bir az nəzarət buraxılış məntəqəsi var. Belə ki versiyası idi. Və indi mənə irəli getmək imkan və daha bir versiyası yoxdur. Biz bu versiyası zəng edəcəyik iki sıfır dizine. Və mən əvəzinə bunu gidiyorum Bu - Siz nə? Dot sıfır durub bu halda işləyir. Amma bir dəyişən idi güman edirlər. Ehtimal 10 dəyişən idi. Başqa sözlə, mən bilməz Güman sonunda yalnız hard-kodu .0 Bu hesab ifadə. Yaxşı, Mən, həqiqətən, bir şey edə bilərsiniz Mötərizə içində tökmə çağırıb. Mən bir float ki, tam 10 tökmə bilər və mən ki, tam bir tökmə bilər üzmək, həmçinin. Sonra həyata olacaq ki, riyaziyyat səmərəli 10.0 bölünür 1.0, gedir nəticəsi əvvəlki kimi f. Mən bu kimi üzüb gedirdi etmək derleyeceğiz Belə ki, əgər 2 və indi 2 üzüb gedirdi, mən eyni almaq , eləcə də cavab. Beləliklə, bu, kifayət qədər contrived nümunəsidir Bu problemi həll etmək üçün tökmə tanıdıb. Amma, ümumiyyətlə, həlledici olacaq xüsusilə güclü şey problem zaman, bir həftə vaxt iki müəyyən Sizə bir veri növü çevirmək istəyirik başqa ki, gün sonunda eyni şəkildə təmsil olunur. Gün hər bir sonunda Biz bu günə qədər haqqında söhbət etdik şey başlıq altında yalnız ints. Və ya çox aşağı səviyyədə əgər siz onlar yalnız ədəd istəyirik başlıq altında. Hətta simvol, yenə geri həftə sıfırdan, nömrələr başlıq altında. Demək ki, biz arasında çevirə bilərsiniz ədəd müxtəlif növ əgər yalnız bit istəyirik. Biz nömrələr arasında çevirə bilərsiniz və məktublar yalnız değilseniz bit, və əksinə. Və bu şəkildə salınması bir mexanizmdir proqramlaşdırma ki, zorla imkan verir bir veri növü dəyişir. Təəssüf ki, bu deyil kimi Mən bəyəndim ola bilər kimi sadə. Mən üzdüyü geri getmək gidiyorum 1, olan sadə, çox idi ilə sadə bir .0 Hər əlavə. Və yalnız bir sürətli ixtisasartırma kimi, Mənə davam və derleyeceğiz bildirin Bu, floats 2 etmək - Üzr istəyirik, bu üzdüyü 1 olun. Və indi üzüb gedirdi 1 run edək. Və alt Qeyd Mən, həqiqətən, 0.1 almaq. Belə ki, problem həll. Amma hələ. İndi bir az maraqlı almaq üçün gidiyorum və mən geri getmək gidiyorum printf bəyanat və demək nə bilirik? Hesab edirəm ki, təsdiq etmək istərdim bir onuncu həqiqətən. Və mən bu görmək istəyirik gidiyorum etmək, beş onluq yerlərinə deyirlər. Bu problem deyil. Mən beş iki dəyişiklik Mən etmək ilə derleyeceğiz. Mən bunu 1 üzüb gedirdi təkrar. Olduqca yaxşı axtarır. Mənim ağlı başında olma çek orada bitirmək, lakin bilər Mən bir az daha sərgi alıram. Mən 0.10 0.5 dəyişdirmək üçün gedirəm. Mən sonra 10 rəqəm görmək istəyirəm Boylam yer. Və mən irəli getmək və derleyeceğiz gidiyorum Bu və təkrar 1 üzüb gedirdi. Təəssüf I növ bu test edərək mənim riyaziyyat, belə deyil, çünki daha artıq doğru görünür. Amma bəlkə, bir dəqiqə gözləyin ki, yalnız bir fluke var. Bəlkə kompüter fəaliyyət göstərir bir az qəribə. Mənə davam və 20 decimal bal edək və mən bilirəm ki, özümü sakitləşdirmək riyaziyyat etmək necə. I proqramına necə bilirik. Üzdüyü 1, yeniden derlemeyle edin və Lanet olsun. Həqiqətən ki, həqiqətən əldə uzaq nişanı seçin. Bəs burada olacaq? Daxilən, bizim ehtimallara əsaslanır məlumat növləri həcmi haqqında əvvəllər, burada nə baş olmalıdır başlıq altında? Bəli? Eynilə elə. Bu çox dəqiq istəyirəm, və əgər ki, dəqiq bir çox bir heck var - Bu kəsir sonra 20 ədəd. Siz bəlkə bir təmsil edə bilməz Əgər yoxsa ixtiyari sayı bit ixtiyari sayı. Amma biz deyil. Bir float üçün, biz yalnız 32 bit var. 32 bit yalnız bir permuted bilər Belə ki, əgər yolu - yalnız bizim insanlar kimi də, mərhələ əlləri yuxarı və ya aşağı - bir məhdud sayda yolları, bir sonlu sayı yalnız var real nömrələri siz təmsil edə bilər o bit ilə. Və belə kompüter sonda üçün gedir guşələrindən kəsici başlayın. Kompüter həmin ətraflı gizlədə bilərsiniz vaxt bir az bizdən. Amma biz nömrələri poking başlamaq əgər və uzaq və uzaq baxaraq bütün sayı nömrələri arxada, sonra biz bu görmək başlamaq əslində yaxınlaşdırılması bir onda fikir. Və belə çıxır, faciəli var ədəd sonsuz sayda biz dəqiq təmsil edə bilməz ən azı bir sonlu ilə kompüter, bit sayı, məhdud RAM məbləği. İndi təəssüf ki, bu bəzən real-dünya nəticələri var. Insanlar olduqca bunu yüksək qiymətləndiririk deyilsə Faktla verilən və ya növ almaq onların kompüter yalnız bunu ki, nə onlar və bunu demək Bu əsas anlamaq nümayəndəliyi details - səmimi, bəzi dillərdə olan C fərqli olaraq, istifadəçi gizli - bəzi pis şeylər ola bilər. Ümidvaram ki, biz istədiyiniz nə fikir addım geri almaq olunur. Və bu barədə səkkiz dəqiqəlik video. Bu bir neçə il əvvəl yayımlanan və o verir bilərsiniz həqiqətən nə daxil anlayışlar yanlış bu altında qiymətləndiririk zaman çox bütün çox ətraflı növləri real dünya. Işıq biz bilər dim edin bir neçə dəqiqə. HOPARLÖR 1: Biz indi engineering qayıtmaq Müasir möcüzələri barədə fəlakət. Kompüterlər - biz bütün qəbul gəldiniz tez-tez sinir bozucu problemləri onlara ilə gedin. Bugs, virus və proqram glitches üçün ödəmək üçün kiçik qiymətləri rahatlığı. Lakin, yüksək texnologiyalı və yüksək sürət hərbi və kosmik proqramı Proqramlar, kiçik problem fəlakət daxil böyüdüləcək bilər. 4 iyun 1996-cı il, alimlər üçün hazırlanmış insansız Ariane 5 raket başladın. Bu elmi peyk daşıyan dəqiq necə yaratmaq üçün nəzərdə Yer maqnit sahəsində qarşılıqlı günəş küləklər. Raket Avropa üçün tikilmiş Kosmik Agentliyi və off qaldırdı sahil harada Fransa Qvineya edir. JACK GANSSLE: 37 saniyə zamanı nəzərə Uçuş, onlar əvvəlcə qeyd bir şey yanlış gedirdi. Bu nozzle ildə döner idi bir yol həqiqətən olmamalıdır. Uçuş daxil 40 saniyə ətrafı, aydın vasitə problem idi. Onlar zaman və o, bir məhv qərar. Ilə sıra təhlükəsizlik işçisi, böyük içalat, düyməni basdı o əvvəl raket qədər blew ictimai təhlükəsizliyi üçün təhlükə olur. HOPARLÖR 1: Bu reys oldu ki, Ariane 5 və məhv çünki əlaqədar bir qüsur yaşandı raket-nin proqram. JACK GANSSLE: The Ariane məsələsi bir neçə idi ki, tələb olunan 64 bit bildirirəm. Onlar çevirmək istəyirdi 16-bit sayı. Onlar nömrə heç vaxt güman , çox böyük olacaq ki, ən 64-bit həmin rəqəm sayı adet sıfır idi. Onlar yanlış idi. HOPARLÖR 1: bir proqram bilməməsi cür qəbul proqramı başqa generated sayı müvəffəqiyyətsizliyin kök. Software inkişaf çox olmuşdur yeni texnologiya bahalı hissəsidir. Bu Ariane 4 raket çox olmuşdur proqram uğurlu, çox bu da idi yaradılıb ki, Ariane 5 istifadə olunur. PHILIP COYLE: əsas problem idi ki, Ariane 5, sürətli idi ki, daha sürətli sürətləndirdi. Və proqram idi ki, düşür. HOPARLÖR: 1 raket kəsilməsi , böyük maliyyə fəlakət idi bir dəqiqə proqram hatası nedeniyle bütün. Amma bu ilk dəfə data idi dönüşüm problemlərin müasir mürəkkəbləşdirilir ki, raket texnologiyası. JACK GANSSLE: 1991-ci ildə start ilk Körfəz Müharibəsi, vətənpərvər raket bənzər bir cür yaşadı bir sıra dönüşüm problem. Nəticədə, 28 Amerika əsgəri idi ölən və 100-ə yaxın digər yaralı zaman ehtimal olunan vətənpərvər, Gələn Scuds qarşı qorumaq üçün, bir raket yanğın bilmədi. HOPARLÖR 1: İraq Küveyt işğal və zaman Amerikada Desert Storm başlayıb erkən 1991, Patriot raket batareyaları Səudiyyə Ərəbistanı qorumaq üçün səfərbər edildi İraq Scud və İsrail raket hücumları. Bu Patriot ABŞ orta mənzilli edir istehsal səthi-hava sistemi ki, Raytheon şirkəti. THEODORE POSTOL: The Patriot həcmi kesen özü təxminən edir 20 metr uzunluğunda. Və bu barədə 2000 funt ağırlığında. Və bu barədə bir döyüş başlığı keçirir - Hesab edirəm ki, təxminən 150 kilo olduğunu düşünürəm. Və döyüş başlığı özü bir olan yüksək partlayıcı onun ətrafında fraqmentləri. Ki, döyüş başlığı olan casing nəzərdə tutulmuşdur buckshot kimi hərəkət etmək. HOPARLÖR 1: raketlər dörd keçirilir konteyner başına nəql olunur yarı trailer ilə. PHILIP COYLE: The Patriot anti-raket Sistem geri gedir İndi ən 20 il. Bu, ilk olaraq hazırlanmışdır bir raket düşmən təyyarələr gülləboran etmək. Ilk Körfəz müharibəsi, zaman ki, müharibə birlikdə gəldi, Ordu istifadə etmək istədi Scuds deyil, təyyarələr gülləboran etmək. İraq hava güc deyil bir problem qədər. Amma Ordu Scuds narahat oldu. Və onlar yükseltmek üçün cəhd The Patriot. HOPARLÖR 1: düşmən raket intercepting mach beş səyahət kifayət qədər çətin gedir. Amma Patriot soxulmuş zaman xidmət, Ordu bir xəbərdar deyil Onların ki, İraq modifikasiyası Hit üçün təxminən mümkün Scuds. THEODORE POSTOL: Ne oldu olan Scuds edir gələn qeyri-sabit idi. Onlar wobbling edilmişdir. Bunun səbəbi də, İraqlılar oldu bir 600 kilometr çıxmaq üçün 300 kilometr mənzilli mərmi etdi ön döyüş başlığı həyata çəkisi. Onlar döyüş başlığı yüngül etdi. Belə ki, indi Patriot çalışırıq olan Scud gəlmək. Və çox vaxt, əzici vaxt əksəriyyəti, sadəcə ki, olan Scud ilə uçmaq. HOPARLÖR 1: dəfə Patriot sistemi operatorları Patriot buraxılmış həyata onun hədəf, onlar Vətənpərvərlər partlatdı mümkün qarşısını almaq üçün döyüş başlığı buna icazə edilib itki yerə düşəcək. THEODORE POSTOL: Bu nə ən çox insanlar səmada böyük fireballs olaraq gördüyünü və tutduğunu kimi misunderstood Scud başlıq edir. HOPARLÖR: 1 gecə göyə baxmayaraq Patriots uğurla olduğu ortaya çıxdı orada Dhahran da, Scuds məhv onun haqqında heç bir səhv ola bilər performans. Ki, Patriot-nin radar sistemi var itirdi Daxil olan Scud takip və heç bir proqram qüsur görə başlatdı. İlk kəşf edən israillilər oldu ki, sistem artıq , böyük vaxt uyğunsuzluq olub bir saat səbəbiylə oldu sistemin kompüter əlaqədar. JACK GANSSLE: təxminən iki həftə əvvəl Dhahran, israillilər faciə Müdafiə Nazirliyi məlumat sistem vaxt itirmək edilib. Çalışan təxminən səkkiz saat sonra, onlar sistemi olduğunu bildirib xeyli az dəqiq olurlar. Müdafiə Nazirliyi cavab verdi The Patriot batareyaları bütün danışanlardan sistemi tərk deyil uzun müddət üçün. Onlar uzun müddət nə söylədi. Səkkiz saat? 10 saat? 1000 saat? Heç kəs bilirdi. HOPARLÖR 1: Patriot batareya konuşlu Dhahran da barak da və onun qüsurlu daxili saat olmuşdur gecəsi 100-dən çox saat 25 fevral. JACK GANSSLE: Bu zaman izlenen ikinci bir onuncu haqqında dəqiqliyi. İndi ikinci bir onuncu bir deyil bu ola bilməz, çünki maraqlı nömrəsi məhz ikili ifadə deməkdir tam ifadə edilə bilməz hər hansı bir müasir digital kompüter. Bu inanmaq çətindir, lakin nümunəsi kimi istifadə edin. Nin bir nömrəli üçüncü edək. Üçdə biri ifadə edilə bilməz tam decimal edir. Üçdə biri 0,333 gedir daimi üçün. Ilə etmək üçün heç bir yol var Mexanizmi Boylam decimal mütləq dəqiqlik. Bu dəqiq problem eyni cür var ki, Patriot baş verib. Bu artıq sistemi, qaçdı pis vaxt səhv oldu. HOPARLÖR 1: əməliyyatın 100 saat sonra, vaxt səhv idi ikinci təxminən üçdə. Amma baxımından raket hedefleme mach beş səyahət, bu səbəb üzərində 600 metr izleme səhv. Bu, bir ölümcül səhv olardı Dhahran da əsgər. THEODORE POSTOL: Ne oldu bir Scud launch erkən tərəfindən aşkar edilmişdir xəbərdarlıq tabe oldular. Onlar Scud gələn bilirdi ki onların ümumi istiqamətində. Bu gələn edildiyi Onlar bilmirdim. HOPARLÖR 1: Bu qədər radar indi The Patriot sisteminin komponenti tapmaq və saxlamaq üçün Dhahran müdafiə Gələn düşmən raket baxın. JACK GANSSLE: The radar çox ağıllı idi. Bu, həqiqətən mövqeyi izlemek olacaq sonra Scud və proqnozlaşdırmaq harada yəqin ki, gələn dəfə olacaq radar bir zərbə göndərdi. Bu sıra qapısı adlanırdı. THEODORE POSTOL: Sonra Patriot dəfə kifayət qədər vaxt getmək keçib qərar geri üçün növbəti yer yoxlamaq Bu aşkar obyekt, geri gedir. Bu yanlış geri döndü zaman yer, sonra heç bir obyekt görür. Və bu, heç bir obyekt yox idi ki, qərar bir səhv aşkar idi, track düşər. HOPARLÖR 1: daxil olan Scud yoxa radar ekran, və saniyə sonra çarpdı Qışla daxil. Bu Scud 28 şəhid və son biri idi ilk Körfəz müharibəsi zamanı atəş etdi. Faciəli, yenilənmiş proqram gəlib Dhahran aşağıdakı gün. Bu proqram qüsur müəyyən edilmişdir ki, çətinlikli bir fəsil bağlanması The Patriot raket tarixi. Patriot həqiqətən bir kisaltmasidir Açılıyor Array izleme üçün Hədəf almaq. DAVID J Malan: Bütün sağ, belə bir əmin olmaq, məsələn sobering. Və xoşbəxtlikdən, bu aşağı səviyyədə bugs biz lazımdır ki, bir şey deyil adətən, əlbəttə, yüksək qiymətləndiririk var bizim bəzi proqramların ən. Əksinə, bugs ən will qarşılaşma, təbiətdə məntiqi olacaq təbiətdə sintaktik vasitəsi olan kodu sağ işləmir. Və bu, olduqca sürətli bilirik. Amma xüsusilə biz almaq zaman dövr sonunda, bu olacaq etmək imkanı daha çox və daha həqiqətən dizayn haqqında ağır düşünmək proqramları və əsas və təmsil orada da məlumatların. Məsələn, biz, MySQL təqdim edəcəyik olan məşhur bazası motorudur siz web sites istifadə edə geri sonunda veri. Və siz qərar başlamaq lazımdır dövr sonunda nə yalnız istifadə etmək üçün aşağıdakı xətt növləri data amma dəqiq necə çox bit istifadə etmək, Siz tarixləri saxlamaq istəyirəm və ya olmayan tarix və dəfə dəfə, və həmçinin Siz nə qədər böyük istəyirsiniz kimi şeylər , üçün demək unikal kimlikleri, istifadəçilər Sizin verilənlər bazası. Əslində, bəzi varsa idi Facebook, çox vaxt düşür və əldə etmək necə - İstifadəçi ID bəzən sizin göstərir Bir seçdiyiniz halda profilin URL URL üçün ləqəb, və ya varsa İstifadə Facebook Graph API ki, açıq API olan siz xammal məlumat üçün Facebook xahiş edə bilər - Siz rəqəmli ID nə görə bilərsiniz. Və bir neçə il əvvəl, Facebook əsasən istifadə dəyişdirmək idi uzun istifadə ints bərabər uzun müddət ərzində istifadəçilər gəlmək çünki və getmək və hesabları çox yaratmaq və saxta hesablar, hətta çox asanlıqla 4 kimi bir şey girinc bacardıq bir int kimi milyard mümkün dəyəri. Məsələlər bu cür daha çox yol aşağı, həm də. Bütün sağ, tökmə ki, belə. Bu qeyri-dəqiqlik idi. Tez elanlar bir neçə. Belə bölmələr formal olaraq bu gəlir başlayacaq Bazar, Bazar ertəsi, çərşənbə axşamı. Daha sonra bu həftə e-mail vasitəsilə duyarsınız Sizin Bölmə təyin etmək üçün. Və burada o nöqtədə will necə Sizin Bölmə dəyişdirmək əgər cədvəli artıq dəyişdirilə və ya nedeni rahatlıq səviyyəsi artıq dəyişib. Bir vaxt P-set bir və hacker seçimi ilə bu Cümə axşamı görə hər ki, tarixini uzada Cümə spesifikasiyalar tipik yolu. Problemi ilə daxil olduğunu dərk set xüsusiyyətlərindən təlimatlar ki, CS50 cihaz necə istifadə etmək, habelə bəzi CS50 xüsusi alətlər təmin edə bilər ki, stil 50, kimi üzrə dinamik Əlaqə kodunuzu stil keyfiyyəti və həmçinin Sizinlə təmin edə biləcək, 50 yoxlamaq sizin kimi dinamik feedback Məcəlləsinin düzgün. Biz hələ ütü edirik ki, bağışla çek 50 ilə bir neçə kinks həyata. Başladı edən sinif yoldaşları bir neçə dörd ətrafında Cümə gecəsi AM zaman getdi spec qədər o vaxtdan hiss Biz çalışırıq ki, bir neçə bugs hər kəs üçün vasitəsilə və üzr edən hədsiz frustrations yaşadı. Fay mina edir. Amma biz CS50 üzrə edəcəyik həll ki, müzakirə olunur. Puanları özləri haqqında bir söz belə. Belə ki, siz bir həftə əvvəl və ya iki olacaq problem dəsti geri bildirim almaq üçün başlamaq Siz hələ yoxdur, çünki tədris yoldaş. Və hətta sonra, biz qiymətləndirmək başlayacaq C problem qarşısında qoyur geri və danışıq belə qiymətləndirmək daha alakalı almaq daha tez geribildirim. Ancaq proqramı başına ümumiyyətlə, CS50 problem seti boyunca qiymətləndirilir dörd baltalar aşağıdakı - daxilində, dürüstlük, dizayn və stil. Sayt adətən bir sıra olacaq ki, sıfır arasında beş ele necə çox Siz off bit parça edir. Adətən, bu beş olsun. Siz ən azı hər şey çalışırdılar. Və bir multiplikativ amil bildiriş belə ki yalnız düşəni problem dəsti ən yaxşı strategiya deyil. Eyni zamanda, aydındır ki, düzgün əhəmiyyəti - yalnız proqramı ilə doğru dəqiqləşdirilməsi hörmət? Bu qəsdən daha ağırlıklı ağır bir tərəfindən digər iki baltalar daha üç amil biz tanımaq, çünki adətən bir sərf etmək olacaq ki, çox vaxt bəzi hataları aşağı chasing, sonra, kodu işləmək bu indenting və seçimi müvafiq dəyişən adları və kimi olan digər sonunda edir stil spektrinin. Bu stil deyil demək deyil əhəmiyyətli və biz bunu artıq vəz lazımdır mühazirələr və bölmələrdə həm vaxt. Style estetik aiddir Sizin kodu. Yaxşı adlı dəyişənlərin seçmiş qısa, lakin bir qədər ki, təsviri? Siz gördüm kimi kodu indented mi mühazirə və ardıcıl şəkildə stil 50? Nəhayət dizayn hüququ var ortada. Design bir qoymaq üçün daha biri daha çünki on barmaq subyektiv. Amma bəlkə ən əhəmiyyətli pedaqoji baxımından üç baltalar zamanla və dəyəri bu olacaq tədris fellow nin imkanı siz keyfiyyətli rəy təmin edir. Həqiqətən, CS50 biz var, baxmayaraq ki, sonunda bu düsturlar və puanları, gün bu çox qəsdən edir çox kiçik buketler - point dəyərləri sıfır və üç və sıfır və beş. Biz çox iri xətləri çəkmək üçün cəhd etməyin problem dəstləri arasında və ya arasında tələbə daha çox kimi çox diqqəti Biz keyfiyyətli də, el yazısı bilərsiniz geri, ya tipli və ya şifahi xüsusi tədris yoldaş, Siz çox yaxşı bilirik almaq lazımdır. Amma, ümumiyyətlə, həmin çəkilər var müxtəlif baltalar ki. Eyni zamanda, bunu saxlamaq dəyər siz güman ki, ağla ki, Beş həyata üç 60% təşkil edir və Buna görə də təxminən uğursuz. Üç qəsdən deməkdir yaxşı yolun ortasında növ. Siz də üçlər alıyorsanız dövr başlayaraq var həqiqətən yaxşı olmaq üçün nəzərdə başlamaq üçün yer. Siz ikilər, yarmarkalarda alıyorsanız var bir az ödəmək üçün mütləq müəyyən iş daha çox diqqət, istifadə etmək bölmələr və ofis saat. Siz dörd ayaq alıyorsanız və beşbir, böyük. Lakin, həqiqətən, biz trajectories görməyə ümid edirik tələbələr arasında - çox tələbə hər fərdi, lakin başlanğıc Sıralama burada dövr Bu üç sıra iki lakin sona qədər burada dörd-beş intervalında. Yəni biz, həqiqətən, aradığınız budur. Və biz nəzərə delta ki saxlayırsınız Siz həftə sıfır və həftə arasında nümayiş 12 I notları yapýyorum zaman. Bu, tamamilə necə bizə etməz siz başında ədalətli əgər trajectory həqiqətən yuxarı və güclü. Akademik düzlük - Bu mənim qoymaq bildirin yalnız bir an üçün daha ciddi səs. Beləliklə, bu əlbəttə fərq var hər hansı digər daha çox tələbə göndərilməsi reklam board tarixi, mən inanıram. Biz bu itirdi sayı növ var bu baş necə tez-tez baxımından. Və 50-ci çünki tələbələr deyil Hər daha riyakar var başqa yerdə sinif yoldaşları. Amma biz çox yaxşı ki, bu da həyata şey bu cür aşkarlanması. Və bu üstünlük bir informatika sinif var ki, biz və biz bütün tələbələr müqayisə edə bilərsiniz problem hər qarşı cüt-müdrik edir başqa, bu il yalnız lakin bütün əvvəlki il. Biz tələbələr kimi, imkanı var Google və kodu tapmaq üçün sinif, Github kimi sites və Forums. CS50 etmək üçün tamamilə çözümü vardır orada ətrafında üzən P-edir. Amma onları tapa bilər, biz onları tapa bilərsiniz. Bu bütün çox avtomatlaşdırılmış və asan və kədərli bizim üçün tapa bilərsiniz. Amma, mən də qeyd etmək istəyirəm ki, Əlbəttə akademik düzlük siyasəti çox çox nəzərdə ki, ruh qarşı. Həqiqətən, bu il biz şeyi rephrased etdik ola bilər proqramları ilə, nöqtə daha ətraflı ilə dot dot, proqramları edir. Amma zamanı mühüm mövzu həqiqətən ağlabatan olmalıdır. Biz əhəmiyyətli olduğunu etiraf pedaqoji məbləği müəyyən dərəcədə əməkdaşlıq dəyər, sinif yoldaşları ilə vasitəsi siz iki və ya üç və ya daha çox ağ board duran belə etmək whiteboarding, Sizin fikir danışmaq - şəkillər pseudocode həyata yazı, Mario əgər nə olmalıdır diagramming siz ilk yazmaq idi pseudocode edir. Nə görməmiş alqoritmi olmalıdır - necə hər davranmaq problem bir müəyyən edir? Və belə davranış həyata biz təşviq edən çox bu xətt çox. Və proqramları, bir görəcəksiniz əsasında güllə bütün dəstə ağlabatan kateqoriya və ağlabatan deyil bizə kömək edir ki, kateqoriya siz ətrafında fikrinizi kesmek ki, xətt çəkmək yoxdur. Thumb və ümumiyyətlə, layiqli qayda ki, həll üçün mübarizə əgər Bəzi bug və dost və ya sinif yoldaşı Bu, yanında oturan onu göstərmək üçün əsaslı və ya onun Sizin kodu və hey, sizə kömək edə bilər, demək Məni bura yanlış nə anlamaq? Biz adətən əhatə etmir qarşı tərəf. Bu sizin üçün doğru cavab deyil dost və ya demək üçün buraya sinif yoldaşı, oh, yalnız mina və rəqəm baxmaq ki, onu həyata. Bu cür əsassız deyil. Amma başqası, başqa bir beyin, olan gözləri bir cüt baxmaq kodunuzu sizin ekran və ya baxmaq və demək, siz əminsinizmi Burada bir loop var? Və ya siz əminsinizmi burada nöqtəli vergül? Və ya oh ki, səhv baş beledir bu deməkdir. Bu çox ağlabatan və təşviq davranışlar. Mən alluding edilmiş olan hallar tələbələr zaman əvvəllər aşağı qaynamaq gecə pis mühakimə edilməsi qərarlar və onların kodu e-poçt başqa və ya kimsə deyərkən, Burada Dropbox var ya Gecə gec googling. Və mən təşviq və siz yalvarmaq olacaq bu qaçılmaz var, əgər stress anlar, Siz bumping edirik son qarşı, siz heç mərhum var ki, artıq cümə gündən nöqtə, əlbəttə nin rəhbərləri e-poçt və ya birbaşa özümü. Qulaq asmaq, De, mən də oldum burada point qırılma. Gəlin söhbət və bu anlamaq. Internet müraciət və ya başqa deyil ağlabatan davranış heç vaxt ki, Sizin həll və çox sinif yoldaşları artıq burada var ki, yoxsul qərarın kampus. Lakin line etek çox asandır. Və burada şənləndirmək üçün bir az şəkil Siz Reddit ki, indi hər şey OK olacaq. Tez recap Belə ki, o, biz off sol harada. Belə ki, ötən həftə biz təqdim etdiyi Xatırladaq şərait deyil, Not-ci ildə lakin C bu dəfə. Və yeni sintaksis amma var idi se başına həqiqətən heç bir yeni fikir. Biz Boolean ifadələr var idi, biz bilər ki, və ya birlikdə şaquli iki bar və ya birlikdə iki ampersands deyərək sol, həm də ki, və sağ doğru olmalıdır Bu icra etmək üçün. Sonra biz baxdı ki, açarları idi qısa, lakin mən təklif həqiqətən ki, nail olmaq üçün yalnız müxtəlif sintaksis Əgər məqsəd eyni cür bilirsinizsə avans hansı hallarda olacaq. Biz loops baxdı. Loop üçün, bəlkə ən ümumi və ya ən azı bir insanlar qeyri-iradi üçün adətən çatmaz. Bir az sirli görünür baxmayaraq, Bu bir çox, bir çox misallar görürsünüz Siz kimi, uzun əvvəl artıq mərhum ötən həftə. Loops eyni bilər eyni şey nail olmaq. Lakin hər hansı bir incrementation etmək istəyirsinizsə və ya yenilənməsi dəyişən dəyərləri, sizə daha özünüz artıq bunu loop əvvəl imkan verir üçün. Və sonra do-isə loop var hansı bir şey etmək üçün imkan verir ən azı bir dəfə isə bir şey başqa həqiqətdir. Bunun üçün xüsusilə yaxşıdır siz istədiyiniz proqramları və ya oyunları üçün bir şey üçün istifadəçi təklif etmək ən azı bir dəfə. Və sonra o, əməkdaşlıq etməsə siz bunu edə bilərsiniz təkrar. Dəyişənlərin Eyni zamanda, biz xətləri idi Bu kimi Məcəllənin hansı ki, iki xətləri ola bilər. Siz adlı int bəyan edə bilər counter, nöqtəli vergül. Və ya sadəcə bəyan edə bilər belə demək olarsa, bu, müəyyən edir. Bu eyni zamanda bir dəyər verin. Və sonra nəhayət, danışdıq funksiyaları haqqında. Bu gözəl bir nümunə idi bu göstərir ki mənada iki cür funksiyaları. Bir GetString (), bir daha, bu, istifadəçi bir string alır. Amma GetString (), maraqlı növü indiyə qədər biz onu istifadə etdiyiniz kimi, biz həmişə bu istifadə etdiyiniz çünki bir və sol tərəfində bir şey bərabər işarəsi. Yəni GetString () demək bir dəyər qaytarır. Bu, əlbəttə, bir simli qaytarır. Və sonra sol tərəfində, biz istəyirik sadəcə bir daxili ki, simli qənaət dəyişən adını. Bu, bir mənada fərqlidir printf printf, ən azı bizim çünki Burada istifadə, bir şey geri deyil. Bir kənara kimi, geri bir şey yoxdur. Biz yalnız bu nə qayğı yoxdur. Lakin bu nə yoxdur bir yan təsiri çağırıb. Hər ki, yan təsiri nə halda biz belə uzaq gördüm? Printf nə edir? Bu ekran bir şey yazdıran ekran mətn və ya ədəd və ya bir şey ekranda. Və yalnız bir yan təsiri hesab həqiqətən verilməsi deyil, çünki mənə geri. Bu daxili bir cavab deyil qara qutusu Mən ki daxil olmaq və qamarlamaq. Bu, sadəcə, öz qədər bunu oldu Colton kimi bu tıkalı edilib black box keçən həftə, o birtəhər magically şurası rəsm edilib məni olmadan həqiqətən iştirak edib. Bu bir yan təsiri olacaq. Amma həqiqətən geri çatmaq idi əgər burada və demək, oh, burada simli deyil istifadəçi ki, ki, bir dönüş dəyəri. Və bu günə qədər biz yalnız funksiyaları istifadə etdiyiniz digər insanların yazılı ki. Ancaq biz, həqiqətən, bu nə edə bilər özümüzü şeyi növləri. Mən getmək gidiyorum CS50 cihaz yenidən. Mənə nişanı yaxın edək ki, bir an əvvəl açmaq idi. Və mənə davam və qoy yeni bir fayl yaratmaq. Və mən davam gedən və alıram bu bir positive.c çağırırıq. Belə ki, mən bir şey etmək istəyirəm Burada müsbət nömrələri. Beləliklə, mən irəli getmək və int etmək gidiyorum - Üzr istəyirik - # Daxildir. Ki, eyni etmək edək əvvəlki kimi səhv. Int əsas (void), açıq-buruq burğu, buruq brace bağladı. İndi mən belə etmək istəyirəm. Mən bir proqram yazmaq istəyirəm ki, istifadəçi verir ki, təkid Mənə bir müsbət tam. Belə ki, heç bir GetPositiveInt funksiyası var ki, CS50 kitabxana. Yalnız GetInt () var. Mən çünki Amma ki, OK Mən bir tətbiq edə bilər olan yapıları ki, dəyəri az daha sıxıntı. Mən bu kimi bir şey ola bilər. Belə ki, int n - siz boyunca yazaraq əgər və yalnız həyata Mən geri gedən və alıram bir anda bəzi şeyləri dəyişdirmək - belə int n GetInt () bərabərdir. Və qoymaq olacaq n bir int daxilində. Və mənə daha təsviri olsun. Hesab edirəm ki, tələb kimi mənə bir şey demək edək mənə bir müsbət tam verir. Bütün hüquqlar. Belə ki, təlimat yalnız bir az. İndi nə edə bilər? Yaxşı, mən artıq mənim sadə bilirik yalnız mən kimi şərait və ya filialı, Not idi, mən bir şey deyə bilər n daha az və ya bərabər olduqda istəyirəm sıfır, mən bir şey etmək istəyirəm istəyirəm ki, müsbət deyil. Və sonra mən nə edə bilər - OK, amma həqiqətən ki, int almaq istəyirəm. Ona görə də mən burada davam edə bilər və mən cür ola bilər surəti bu və bu indent. Və sonra, OK. N-dən az və ya əgər sıfıra bərabər bunu. İndi nə əgər istifadəçi əməkdaşlıq etmir? Yaxşı, sonra mən gidiyorum Bu borc. Və sonra burada getmək və burada və burada. Belə ki, bu aydın deyil həlli, sağ? Gözündə sonu yoxdur çünki. Mən istifadəçi verir ki, tələb etmək istəyirsinizsə, Mənə bir müsbət tam, mən əslində int almaq. Mən o int kontrol edə bilərsiniz. Lakin mən yenidən yoxlamaq istəyirəm və daha yoxlamaq və daha yoxlayın. Belə ki, açıq-aydın, daha yaxşı nə var burada istifadə üçün qurmaq? Bütün sağ, loop belə bir növ. Beləliklə, mən qurtarmaq üçün gidiyorum demək olar ki, bütün bu edir. Və mən bu almaq istəyirəm ən azı bir dəfə Int. Beləliklə, mən nə demək gidiyorum - və mən geri gəlmək lazımdır yalnız bir anda isə - indi nə? Mən int n edir GetInt () etmək gedirəm. OK. Belə ki, olduqca yaxşı. İndi necə tez-tez Bunu istəyirsiniz? Mənə loop printf daxilində qoymaq edək Mən təkrar tələb edə bilər ehtiyac ola bilər. Və mən bu nə istəyirik vəziyyətdə nə isə? Mən bunu saxlamaq istəyirsinizsə, isə işi nədir? Bəli. N daha az və ya sıfıra bərabərdir. Belə ki, artıq biz xeyli var Bu kodu təmizlənə. Biz çox sadə tikintisi borc sonra - ki, do-isə loop. Mən yalnız mühüm xətləri oğurlanmış sonra Mən çıxarmaq başladı və kodu sovuşdurmaq, bu müdrik idi. Və indi mən, həqiqətən, yapıştırmak gidiyorum burada və yalnız bir dəfə bunu. İndi mən nə üçün istəyirsiniz Bu proqram çox sonunda? Mən yalnız bir şey sadə deyəcəyəm kimi üçün təşəkkür edirik - və Mən int i% edəcəyik - backslash n, vergül, sonra n, nöqtəli vergül plug. Bütün hüquqlar. Belə ki, indi olur görək Bu proqram çalıştırdığınızda. Mən davam gedən və alıram müsbət edə bilərəm. Lanet olsun. Bir neçə səhvlər. Belə ki, məni ilk geri hərəkət edək. Geri onların vasitəsilə iş etməyin. Aşağı top onlara vasitəsilə iş deyə onlar şəlalə və yalnız bir şey yanlış ola bilər. Gizli bəyannamə funksiyası GetInt (). Bəli. Belə ki, kifayət qədər deyil. I növ eyni səhvi ancaq bir az fərqli bu dəfə. Mən yalnız stdio.h daxil etmək lazımdır, lakin da olan da cs50.h, qondarma bəyannamələri olan int almaq Aracın öyrətmək, və ya öyrədir C nə GetInt () təşkil edir. Mənə resave bildirin. Mən digər səhvlər ignore gidiyorum Mən onlar etdiyiniz ümid etmək gidiyorum çünki elə səhv ilə əlaqədar Mən artıq müəyyən. Mənə davam və derleyeceğiz bildirin müsbət etmək ilə daxil edin. Lanet olsun. Üç səhvlər hələ. Mənə ilk diyirləyin edək. Istifadə olunmamış dəyişən n. Biz əvvəl bu görmürsənmi etdik. Və bu da bir az sirli edir. Bu compiler çıxış edir. Və nə olduğuna diqqəti çəkən xətt var - positive.c :9:13 - deyərək, bu xətti doqquz deyən oldu positive.c, 13 karakter ilə, 13 sütun, bu səhv etdik. Və xüsusilə, bu danışanlardan oldu Mənə olunmamış dəyişən n. Elə görək - line doqquz. Mən mənada n istifadə alıram ki, Hesab edirəm ki, bir dəyər verirəm. Amma nə compiler istəyirəm etmir Mən zahirən istifadə deyiləm ki. Amma mən istifadə edirəm, bir dəqiqə gözləyin. Line 11, mən burada onu istifadə edirəm. Amma aşağı daha fırladın əgər positive.c :11-da - belə line 11, karakter 12-da compiler, istifadə mənə oldu bəyan identifikatoru n. Mən belə bəyan vasitələri bir kimi müəyyən deyil məlumat növü ilə dəyişən. Amma bir dəqiqə gözləyin. Mən məhz etdi line doqquz. Belə ki, kimsə həqiqətən burada səhv edir. Bu da mənə və ya çünki compiler var line doqquz yenə, mən bəyan edirəm int n, və mən bu verilməsi alıram GetInt () dəyəri qaytarın. Sonra uyğun dəyişən n kullanıyorum 11 və onun dəyəri az olduğu halda yoxlanılması çox və ya sıfıra bərabərdir. Amma bu Şübhəlinin pis və nə broken? Daha demək? Ah, mən əvvəl n elan var loop girir. Amma niyə? Mən demək, biz yalnız bir az əvvəl təklif bu dəyişənlər elan gözəl bütün bir xətt və sonra onların bəzi dəyəri tapşırılsın. A qlobal dəyişən - Haydi qayıtmaq yalnız bir anda ki, fikir. Niyə mənə qoymaq istəyirsiniz bu loop kənarda? Deyil. Eynilə elə. Belə ki, bir qədər counterintuitive olsa, Mənə ümumiləşdirilməsi bildirin. Əgər daxili n bəyan edərkən orada do blokunun - xüsusilə daxili o buruq aşırma - dəyişən n var nə var bir vüsət çağırıb - də bizim qol sistemi olmayan Əlbəttə - ancaq ki, bir əhatə dairəsi var o buruq aşırma ilə məhdudlaşmır. Başqa sözlə, adətən siz bəyan əgər bir sıra daxilində dəyişən buruq aşırma, dəyişən yalnız var o buruq aşırma daxilində. Belə ki, tək məntiqi ilə, baxmayaraq ki, Mən line doqquz n bəyan etdik ki, bu mahiyyətcə, əhatə yox , belə danışmaq, yaddaş itir zaman mən line 11 təşkil edib. Line 11, təəssüf ki, çünki o buruq aşırma kənarda. Beləliklə, mən təəssüf ki, bu düzeltemez Mən əvvəl nə geri gedir. Siz ilk bunu bilər. Amma indi nə deyil cyclically Doing? Siz açıq-aydın əldə deyilik cyclically da int. Belə ki, biz GetInt () tərk, və biz ki, daxilində GetInt () tərk etməlidir ki, biz istəyirik nə loop çünki təkrar istifadəçi bezdirmək. Amma getmək üçün kifayət etmir up line, altı deyirlər. Int n, nöqtəli vergül. Hələ bir dəyər vermir, çünki yalnız hələ ehtiyac yoxdur. Amma indi aşağı burada, bildiriş - bu çox asan səhv olardı. Mən əvvəlki kölgə istəmirəm n bəyan. Mən n istifadə etmək istəyirəm ki, həqiqətən var. Və indi line 10, Mən bir dəyər n tapşırılsın. Amma line altı, mən n bəyan edir. Və mən edə və ya bilməz İndi line 12 istifadə olunur? Mən üzündən arasında qıvrım aşırma artıq elan n? Up burada line beş on bir. Burada line 14 bir. İndi Uzaklaştırmak Belə ki, getmək bu faylı geri və müsbət etmək çalıştırın bu dəfə tərtib. Belə ki, artıq irəliləyiş var. Slash. . / Müsbət daxil edin. Mənə vermək tələb müsbət tam. 1 Mənfi. 2 mənfi. 3 mənfi. Zero. Biri. Və bir sayesinde indi çap neler. Mənə başqa bir şey cəhd edək maraq həyata. Mən daxil bir tam izah olunur alıram. Amma əvəzinə quzu nə yazın əgər? Belə ki, indi müxtəlif tez görmək - təkrar edin. Amma heç bir yerdə mənim kodu Mən yeniden yazmaq idi. Beləliklə, harada, ehtimalla, bu yeniden edir gələn təklif, siz deyəcəksiniz? Bəli, GetInt () özü. Belə ki, CS50 heyəti edir biri sizin üçün, ən azı bu ilk bir neçə ildə həftə, biz bəzi məbləği yazılı var təmin etmək üçün yoxlanılması səhv ki, əgər Siz GetInt () zəng, ən azı olacaq istifadəçi bir int geri almaq. Siz simli götürə bilməyəcək. Siz char götürə bilməyəcək. Siz bir şey almaq deyil başqa cəmi. Siz int almaq lazımdır. İndi müsbət ola bilər. Bu mənfi ola bilər. Biz ki, ətrafında heç bir zəmanət edir. Amma biz, istifadəçi yeniden bezdirmək edəcək retry, o qədər yeniden cəhd edin və ya o, faktiki əməkdaşlıq edir. Eynilə, mən 1,23 əgər, bir int deyil. Amma mən 50, deyirəm, yazın əgər ki, məni mən istəyirdim ki, bir dəyər verir. Bütün hüquqlar. Belə ki, pis deyil. Biz yalnız etdik nə hər hansı bir sualınız? Əsas paket, aydın olmaq, olmayan Göründüyü etdiyiniz qədər loop, əvvəl biz, həqiqətən, baxmayaraq istifadə, lakin daxilində məsələsi olduğu dəyişənlərin yalnız istifadə edilə bilər bilər bəzi müəyyən daxilində. Bütün sağ, mənə təklif ünvanı edək bir ki, daha əvvəl edilən qlobal dəyişən. Bir kənara kimi, başqa bir çıxır Bu problemin həlli, lakin adətən yanlış həll və ya bir zəif dizayn həlli üçün nə kimi dəyişən elan qlobal dəyişən çağırıb. İndi mənim sözünün pozulması növü edirəm daxilində var çox üst heç buruq aşırma və bir fayl çox aşağı. Amma ki, ima ki, indi line dörd edir n qlobal dəyişir. Adı nəzərdə tutur kimi, bu hər yerdə yalnız əlçatan. Not həqiqətən, bu var. Bir dəyişən istifadə etsəniz, geri bilər Bunun üçün əgər seçmək idi bu sprite və ya bütün sprites üçün. Yaxşı, bütün sprites yalnız aydın deyil qlobal söyləyən yol. Bəli? Ah, həqiqətən yaxşı sual. Belə ki, ilk versiyası Xatırladaq ki Mənim kodu, mən səhv line doqquz elan və müəyyən n - Mən bir dəyişən kimi bəyan və mən bir dəyər verdi tapşırıq operator - Bu mənə iki səhvlər verdi. Bir, n istifadə edilmişdir ki, və iki, ki line 11 yalnız elan edilmişdir. Getmədim Belə ki, ilk bir vaxt ünvanı. Bu ciddi bəyan etmək bir səhv deyil dəyişən istifadə yox. Biz etdik şeyi ancaq bir qəsdən CS50 cihaz, pedaqoji, biz qədər dirsəkvarı etdik olunur compiler gözləmələri etmək əmin hər şeyi edirik ki, yalnız düzgün lakin həqiqətən doğru. Çünki bir dəyişən elan yapıyorsanız n və onu istifadə edərək, və ya istifadə heç kimi düzgün, nə orada edir? Bu, həqiqətən, heç bir məqsədə xidmət edir. Əgər, zamanla çox asandır siz öz kompüter konfiqurasiya yoxdur Bu yolla, yalnız var kodu var Burada az qalıqları var qalıqları. Və sonra ay sonra geri baxmaq və sizin kimi istəyirik, niyə bu xətt orada code? Və heç bir səbəb yoxdur, əgər siz və ya həmkarları fayda deyil yol aşağı etmək o, artıq hata. Bir kənara, burada olduğu kimi, ki, gələn? Yaxşı xatırlayıram ki, tərtib hər zaman proqram, bu məhsulları və bütün çap olunur. Beləliklə, biz bu qayıda bilərsiniz. Ancaq yenə də, etmək bir uygulamadır tərəfindən tərtib prosesi avtomatik faktiki compiler çalışan cingilti çağırıb. Bu şey, biz nəhayət görürsünüz var xüsusi ayıklama ilə Proqram ayıklama çağırıb. Bu optimallaşdırılması ilə bağlı kodu - daha çox gələcəkdə ki. Std = C99 - Bu yalnız 1999-cu versiyasını istifadə deməkdir C. C daha uzun ətrafında olub lakin onlar bir gözəl etdi ki, dəyişikliklər il əvvəl 10 plus. Və burada müvafiq olanları var. Biz bir şey etmək söyləyərək ki, əvvəl bir xəbərdarlıq olardı tələbə qarşısını səhv tərtib edir. Və divar deməkdir ki, nə şeyi bütün dəstə deyil, yalnız dəyişənlərin bağlı. Və sonra mənə diyirləyin bildirin Bu xəttin sonu. Və bu da, biz nəhayət rəftar geri gəlir. Bu təbii adıdır Mən tərtib alıram faylı. Bu fayl adını xatırladır Mən adı olaraq tipi alıram mənim runnable proqram. Bu, lcs50 yalnız CS50 istifadə deməkdir kitabxana, və hər hansı bir adet sıfır və olanları ki, heyəti yazdığı və əvvəllər tərtib bu il inteqrasiya mənim proqram onları. Və hər kəs-lm nə olduğunu bilirsinizmi? Bu olan math kitabxana var sen orada olsa belə, hər hansı bir riyaziyyat məşğul deyil. Bu, sadəcə avtomatik təmin edir bizə etmək ilə. Yaxşı, mənə bir başqa misal edək burada yeni fayl açaraq. Və mənə string.c bu bir qazanc imkan verir. O çıxır ki, biz data danışmaq kimi növləri, bu gün daha çox var başlıq altında gedir Biz indiyə qədər gördük daha. Mənə tez tez proqram edək. Stdio.h daxildir. Və mən saxlaya bilərsiniz. Və siz bilirsiniz, mənə etmək qoy eyni səhvi təkrar. Cs50.h. daxil Və indi mənə irəli gedək və int main (void) yoxdur. İndi sadəcə bir proqram etmək istəyirəm Bunu ki, - bir simli elan s adlanır və bir simli almaq istifadəçi. Və mənə bir az bunu bildirin burada təlimat - belə - Mənə bir string verin istifadəçi bunu bilir. Və sonra aşağı bura aşağıda Mən belə etmək istəyirəm - int i sıfır olur. Yenə, kompüter alimləri adətən sıfır hesablanması başlamaq, lakin biz bilər Biz, həqiqətən, istəyirdi ki, bir olun. İndi mən bunu gidiyorum i az s simli uzunluğu daha. Belə ki, strlen - S-T-R-L-E-N - daha asandır, çünki yeniden, bu qısa var O, baxmayaraq ki, yazın bir az sirli. Yəni istifadə etdiyiniz bir funksiyası var əvvəl sözün ki, yoxdur - mənə təmsil ki, bir sıra qayıtmaq simli müddəti istifadəçi yazdığınız. Onlar salam Yığdığınız varsa, bu qayıtmaq Beş beş yoxdur çünki salam məktubları. Sonra hər iteration haqqında Bu loop, i plus plus. Belə ki, yenə bir standart hətta tikintisi Siz çox çox rahat deyilik və ya hələ tanış. Amma indi bu loop hər iteration üzrə Mən gedirəm nə görürsünüz. Mən irəli getmək və çap istəyirəm bir xarakter - yeni xətt belə% c backslash n. Və sonra, Mən bunu istəyirəm nə? Sözü nə olursa olsun ki, istifadəçi ildə salam kimi, mən çap istəyirəm H-E-L-L-O, satır başına bir xarakter. Başqa sözlə, mən də almaq istəyirəm bir simli fərdi simvol indiyə qədər bir simli yalnız var vasitəsi qədər simvol bir ardıcıllıqla olmuşdur. Mən s, bracket edə bilər həyata Və bu çevrilir i, yaxın bracket yaxın parantez, nöqtəli vergül. Və mən bir daha şey var. Bu string.h adlı bir fayl var ki strlen elan edilir. Mən ki, funksiyadan istifadə etmək istəyirəm əgər Mən compiler demək lazımdır istifadə gözləyirik. İndi mənə davam və edək proqram string çağırıb. Dot çizgi, simli. Mənə bir string verin. Mən irəli getmək və yazın lazımdır. Salam, bütün caps ildə daxil edin. Və indi bu çap etdik qeyd bir karakter digər sonra. Belə ki, burada yeni ətraflı bir simli, Günün sonunda ola bilər öz fərdi yolu ilə əldə meydanda tətbiq etməklə simvol bracket notation. Və, bir string altında, çünki başlıq həqiqətən bir ardıcıllıqla deyil simvol. Bəs onlar haqqında səliqəli edir kompüter RAM - Bu nə Mac, PC, - onlar istəyirik sanki arxa-arxaya geri - H-E-L-L-O - fərdi, qonşu da yaddaş bayt. Siz səkkizinci belə əldə etmək istəyirsinizsə Belə ki, əgər byte, bu loop olacaq bracket sıfır, bracket bir, bracket iki, bracket üç, bracket dörd - ki, sıfır beş qədər indexed oldu - H-E-L-L-O çap edəcək öz xətti ilə. İndi, bir iltifat kimi, siz mənə göstərmək bildirin şeyi növ siz nəticədə olacaq ən azı, anlaya bəzi yaxın axtarır ilə. Bir üçün, biz bu gün nə daxil misal, isterseniz, əslində ilk jailbreaks biri iPhone üçün. Jailbreaking telefon krekinq deməkdir belə ki, həqiqətən onu istifadə edə bilərsiniz müxtəlif daşıyıcısı və ya quraşdırma öz proqram. Və bu tamamilə görünür görəcəksiniz sirli, çox güman. Amma bu oldu. IPhone yəqin ilə cadar olub loop üçün, bir halda şərti başqa vəziyyəti, funksiyaları bir dəstə biz görmürsənmi etdik. Və yenə sizə olmayacaq yəqin ki, ilk baxışdan bu iş necə başa düşürük. Amma biz növ almaq ki, hər şey müasir həyatında verilən həqiqətən bəzi hətta azaltmaq üçün çalışır Bu əsaslarını biz oldum baxırlar. Mənə irəli getmək və bir açıq edək digər proqram, holloway.c. Belə də, bir şey sizin həqiqətən bilmək olmaz. Hətta heyəti heç biri və ya ola bilər yəqin ki, baxaraq bu rəqəm Bu kimsə kodu idi, çünki ki, nə təqdim edilmişdir tarixən bir obfuscated C kimi tanınan bir proqram yazmaq yerləşir müsabiqə, tərtib edir və çalışır, lakin belə lənətləmək ki, sirli insan heç nə başa düşə bilər qədər bunu olacaq onlar həqiqətən çalıştırın. Bu baxmaq, həqiqətən, əgər kodu, mən bir keçid oldu. Mən əsas oldu. Mən bu kvadrat mötərizədə eyham bax bir sıra bir növ. Hər kəs təxmin etmək istəyir nə həqiqətən, bu proqram Mən Holloway əgər edir? Bəli. OK. Yaxşı. Belə ki, yalnız işçi heyəti və mən anlamaq bilməz bu şeyi nə. İndi nəhayət, mənə davam bildirin və başqa bir proqram açmaq. Bu - Yenə kodunu edəcəyik online mövcuddur - bu, yalnız var cür olduqca baxmaq. Etdikləri bütün edib ki, space bar çox bir bit. Amma bu real kodudur. Siz olduqca, əgər olduğunu düşünürəm Belə ki, əgər biz Əslində, tez bu çalıştırmak nəticədə biz necə görürsünüz bu kimi şeylər ola bilər. Belə ki, qeyd, siz tərk edəcəyik və çərşənbə günü görürsünüz. [Musiqi ifa] HOPARLÖR 2: Növbəti CS50 hazırda, ki, TFS bir qiyam mərhələsi. HOPARLÖR 3: var deyə. Onu alın! [Musiqi ifa]