[MÜZİK OYUN] DAVID J. MALAN: Pekala. Bu CS50 ve bu Haftanın iki başlangıcıdır. Yani bize bir hata ile bugün başlayalım. Bir hata, elbette, bir Bir programda hata, ve çok alırsınız Bu kavramına aşina Eğer programlanmış hiç eğer önce. pset0 ve şimdi pset1. Ama bir şey düşünelim İlk başta biraz basit. I ki burada bu program, , önceden birlikte attı ve ben bu yazdırmak gerektiğini iddia Printf kullanarak ekranda 10 Yıldız ama görünüşe göre bir şekilde adamcağız var. Bu şartname göz önüne alındığında 10 yıldız yazdırmak gerekir, ama görünüşe göre değil, ne hata size iddia ederim? Evet? Yani bir hata ile bir kapalı, ve bu ne demek istiyorsunuz? TAMAM MI. Mükemmel. Bu yüzden belirtilen ettik i için sıfır değerini başlatmak, ve biz, 10 bir n değeri belirtilen ettik ama biz daha eşit veya daha az kullandım. Ve bu nedeni iki karakterleri ve sadece bir sembol, Bir matematik kitabı gibi, Eğer yok ise ifade etmenin bir yoludur bir karakter eşdeğer. Böylece daha az anlamına gelir, ancak Eğer sıfırdan saymaya başlarsanız, ama tüm yol saymak 10 aracılığıyla ve eşit, Eğer ders gitmeyi konum toplam 11 şeyler saymak. Ve böylece 11 yıldız yazdırmak için gidiyoruz. Peki bunun için bir düzeltme olabilir? Evet? Yani sadece daha az ayarlamak veya daha az, eşit ve belki de, ben iddia var çok başka bir çözüm. Başka ne yapabilir? Evet? Yani 1 olarak eşit başlar, ve veya daha az eşit bırakın. Ve açıkçası ben iddia ediyorum bu, tipik bir insan için, Bu muhtemelen daha basittir. 1 saymaya başlayın ve ile 10 kadar saymak. Aslında ne demek istediğini yapmak. Ama gerçek olan programlama, biz gördüğümüz gibi, Bilgisayar bilim adamları ve programcılar genellikle sıfırdan saymaya başlar. Ve böylece bir kez para cezası buna alışmak. Sizin durum genellikle olacak daha az gibi bir şey. Yani sadece bir mantıksal Hata ki şimdi olabilir düzeltmek ve sonuçta derlemeye Bu ve sadece 10 olsun. Peki burada nasıl bu hata hakkında? Burada, yine, ben var olduğunu iddia 10 stars-- baskı gol hat bu kez başına bir, ama öyle değil. Önerdiğimiz önce ne düzeltme yapar, ne olduğunu Ben derlemek olsaydı görsel yazdırmak ve bu program sizce çalıştırmak? Evet? Yıldız. So bütün yıldızlar Aynı hat duydum ne, ve daha sonra yeni satır karakteri. Yani bu deneyelim. Yani adamcağız-1, girmek yapmak, ve ben clang komutu görmek Geçen zaman hakkında konuştuk. ./buggy-1 ve gerçekten ben 10 yıldız görmek Ben iddia rağmen aynı hat üzerinde Benim şartname üstünde sadece bir yorum içinde Ben bir per yapmak amacıyla kod çizgi. Ama bu doğru görünüyor. Ben gibiyim Şimdi satır 15 görünüyor Sonra bir yıldız baskı ve çizgi 16 Ben baskı olduğum gibi görünüyor Yeni bir satır karakteri, ve her ikisi de böylece girintili konum Ben açıkça döngü içinde değilim. Yani yıldız yapmamalıyız, yeni çizgi, yıldız, yeni hat, yıldız, yeni hat? Evet? Evet, bir dilin aksine gibi Python, tanıdık iseniz, girinti yok Bilgisayara önemli. Sadece insan için önemli. Burada ise ben icat ettik çizgiler Yani 15 ve güzel görünüyor 16--, ancak bilgisayar umursamıyor. Bilgisayar umurunda aslında küme parantezi sahip kod bu satırları etrafında. Bu clear-- olduğunu Yani sadece gibi Scratch-- kod bu iki sıranın olduğu idam edilmelidir. Bu sarı Scratch bulmaca biri gibi adet tekrar ve tekrar ve tekrar. Ben eğer Peki şimdi bu yeniden çalıştırın program-- ./buggy-2-- Hımm. Ben şimdi bir hata var. Ne yapmak unutmak mı? Evet, bu yüzden derleme vermedi. Yani adamcağız-2 yapmak. Böyle bir dosya bilmiyordum çünkü aslında ikinci versiyonunu derlemek. Şimdi ilginç bildirilmemiş 2 değil değişken--. Biz 1 yapıyoruz. Make adamcağız-1-- ./buggy-1-- ve şimdi bunların her biri, aynı hat üzerindedir. Şimdi bir istisna var benim bu sözde iddia Bu bu küme parantezi gerekir. Ne zaman aslında OK-- Eğer ettik eğer bölüm veya textbooks-- fark küme parantezi ihmal? Evet? Aynen. Sadece bir tane var zaman kod satırı size ile ilişkili verilsin Bizim ilk örnekte olduğu gibi döngü. Bu tamamen meşru olduğunu küme parantezi ihmal Sadece bir kolaylık tür olarak Size derleyici. Evet? İyi bir soru. Bir stil hatası düşünülebilir? Bu CS50 olarak promote-- olur tarzı kılavuzu, URL bu her zaman pset1-- içinde kıvırcık parantez kullanmak. Kesinlikle programlama yeni iseniz. gerçeklik değiliz olduğunu Seni yasaklamak gidiyor Bu kolaylıklar yapmaktan. Ama sadece alıyorsanız şeylerin salıncak, kesinlikle sadece zaman kıvırcık kullanmak Eğer onu asmak elde edene kadar parantez. İyi bir soru. Tamam. Böylece daha sonra bir hata oldu. Oldukça basit bir şey en azından. Ve henüz bu düşündüğünüzden Doğru, oldukça ilkel? Bu ilk haftanın tür dil bakarak gibi, hata burada bakın. Ama gerçek bunlar Aslında temsilcisi bazı oldukça korkutucu sorunlar Bu gerçek dünyada ortaya çıkabilir. Peki sizin bazı çağırmak olabilir Eğer teknoloji haberleri takip ederseniz, ya da belki de yakalandı Şubat ayında bu rüzgar Elma vardı bu geçtiğimiz yılın Her iki iOS bir hata biraz yaptı işletim sistemi onların telefonları ve ayrıca Mac OS işletim sistemi kendi masaüstü ve dizüstü bilgisayarlarda. Ve bu gibi başlıkları gördüm. Ve daha sonra, elma Bu hatayı düzeltmek için söz verdi, ve çok hızlı bir şekilde, iOS bunu düzeltmek yaptı ama sonra sonuçta, Mac OS sabit de. Bu başlıkları Şimdi hiçbiri tek başına gerçekten altta yatan sorunun ne olduğunu ortaya koymak, ancak hata sonuçta düşürülmüştür SSL bir hata, güvenli yuva katmanı. Ve uzun lafın kısası, Bu yazılım bizim tarayıcılar ve diğer Yazılım ne yapardı? Ben SSL olduğunu söyledi ise dahil, her seni HTTPS ile başlayan bir URL ziyaret sonra ne SSL ile ilişkili olabilir? Şifreleme. Bu yüzden hakkında konuşacağım Önümüzdeki günlerde bu. Şifreleme, sanatı bilgi ite sağlanabilir. Ama uzun lafın kısası, Elma bazen bir hata yapmış önce SSL kendi uygulanmasında sonuçta uygulayan yazılım HTTPS veya max gibi URL'ler orada çok bağlantıları. sonucu olduğunu edin bağlantıları potansiyel olabilir ele geçirilmesi. Ve bağlantıları vardı mutlaka şifreli değil Eğer aralarında bazı kötü adam vardı, eğer sen ve hedef web sitesi olan Bu yararlanmak için nasıl biliyordu. Şimdi Apple sonuçta gönderildi Bir nihayet bunun için düzeltmek, ve açıklama onların düzeltmenin bu oldu. Güvenli taşımacılık doğrulamak için başarısız oldu bağlantı özgünlük. Sorun tarafından ele alındı Eksik doğrulama adımlarını geri. Yani bu bir çok el dalgalı açıklama sadece biz berbat olduğunu söyleyerek için. Tam anlamıyla bir yok arabası olan kod satırı kendi SSL uygulanması, ve Eğer çevrimiçi ve bunun için eğer arama aslında bulabilirsiniz Orijinal kaynak kodu. Örneğin, bu bir ekran görüntüsü sadece oldukça büyük bir dosyanın bir kısmı, ama bu görünüşte adında bir fonksiyondur SSL işareti sunucusu anahtar değişimi doğrulayın. Ve bir sürü alır argümanlar ve girişler. Ve biz odaklanmak gitmiyoruz Orada minutia çok fazla, ama içeride kod odaklanmak durumunda diyelim function-- bu TopMost arasında Bu yakınlaştırmak. Zaten şüpheli olabilir ne hata olabilir Eğer hiçbir fikrim yok bile olabilir sonuçta en aradığınızı. Bir anomali tür var Burada, hangi nedir? Evet, gerçekten sevmiyorum İki goto bakmak başarısız olur. Açıkçası, ben gerçekten bilmiyorum ne git araçları başarısız, ama ikisi olan arka arkaya. Bu sadece tür bana losyonları entelektüel yanlış yol, ve biz yakınlaştırmak gerçekten eğer Sadece bu satırları, bu C'dir Apple'ın kod Yani bir sürü kendisi C ile yazılmıştır, ve bu görünüşte Gerçekten equivalent-- olduğunu değil güzel girinti için sürüm, ancak tanımak eğer gerçeği Hiçbir kaşlı, var olduğunu ne Apple gerçekten görünüyor kod oldu yazdı böyle. Yani uzaklaştırdınız sadece ben yaşadım anlamda girinti sabit hiçbir küme parantezi, bu varsa İkinci git o sarı bulunuyor başarısız Ne olursa olsun çalıştırmak için gidiyor. Bu ilişkili değil üstünde ise durum. Peki, hatta yine, eğer oldukça anlamak bu belki olabilir yapıyor olmak bilmek Bunların her biri olduğunu Bu hatların her biri conditions-- çok önemli bir adımdır kontrol sürecinde veri aslında eğer şifreli. Yani bunlardan birini atlayarak adımlar, değil iyi bir fikir. Ama biz bu çünkü İkinci Goto, sarı başarısız çünkü biz bir kez tür estetik nereye sola hareket ettirin mantıksal an olduğunu, ne Bu hat için demek İkinci Goto altında kod Eğer düşünürdüm başarısız? Her zaman atlanır gidiyor. Yani gotos genellikle üzerine kaşlarını çattı biz gerçekten girmeyeceğim nedenlerden dolayı, ve gerçekten de CS50 biz eğilimindedir Bu deyimi goto ifadesi öğretmek, ancak Goto düşünebilirsiniz anlam gitmek atlama gibi başarısız kod başka bir kısmına karşılık gelmektedir. Diğer bir deyişle üzerinden atlamak tamamen bu son satırı, ve bu nedenle bu aptal sonucu Sadece basit bir hata oldu Muhtemelen birisi bir sonucu kopyalama ve yapıştırma de bir tane birçok kez tüm oldu iOS ve Mac OS güvenlik kesmeye karşı savunmasız oldu Uzun süredir kötü adamlar tarafından. Apple kadar nihayet bu sabit. Şimdi bazılarınız aslında eğer iOS veya Mac OS eski sürümlerini çalıştıran, Eğer gotofail.com gidebilirsiniz hangi Birisi kurmak bir web sitesi esas olarak belirlemek için programlı Bilgisayarınız hala savunmasız ise. Ve açıkçası, o ise, muhtemelen iyi bir fikir Telefonunuzu güncellemek veya Bu noktada Mac. Ama orada, sadece vasiyetname sadece nasıl Bu alt düzeyde bir takdir detaylar ve oldukça Basit fikirler olabilir gerçekten kararları tercüme ve sorunlar bu Bu case-- içinde affected-- milyonlarca insan. Yönetimine Şimdi bir kelime. Bölüm bu önümüzdeki Pazar başlayacak. Sen tarafından bir e-posta alacaksınız bölüm hakkında hafta sonu, hangi noktada rezeksiyon işlemi Eğer ettik eğer başlayacak Şimdi var fark Bazı yeni çatışmalar. Yani bu her yıl olur, ve biz Önümüzdeki günlerde karşılayacak. Hours-- bir duruyorsun Ofis Burada bu programa göz. Bu hafta biraz değiştirir, Özellikle başlangıç ​​zamanı ve konumu, yani danışmak yapmak Bu ofis saatleri gitmeden önce sonraki dört gece herhangi. Ve şimdi değerlendirmede bir kelime, Eğer sorun dalmak özellikle de on ve ötesinde ayarlar. Şartname başına Yani, Bu genel olarak eksen boyunca hangi biz işi değerlendirmek. Kapsam için ne ifade eder ölçüde kod uygular özellikler gerekli Bizim şartname ile. Diğer bir deyişle, ne kadarının Bir parça seti ısırmak yaptım. Bunun üçte yapmak mı, bunun bir yarım, bunun% 100. Doğru değil bile, ne kadar girişimi mi? Bu seviyeye yakalar Yani çaba ve miktarı hangi kapalı ısırdı Sorun kümesinin sorunlar. Için, bu bir Correctness-- ne ölçüde, senin kodudur ile tutarlı bizim özellikleri ve hataların ücretsiz. Yani düzgün çalışmıyor? Biz bazı giriş verirseniz, bunu yapar bize bekliyoruz çıkış vermek? Design-- şimdi ilkidir Özellikle nitel olanlar, veya insan muhakeme gerektirmektedir olanlar. Biz bir kadroya sahip, neden Ve gerçekten, bu Pek çok öğretim arkadaşlarının ve tabii yardımcıları. Ne ölçüde şey sizin Kod iyi yazılmış? Ve yine bu çok olduğunu nitel değerlendirme Bu sizinle çalışacak hafta içinde çift yönlü gelmek. Böylece değil olsun Sadece sayısal puanlar, ama aynı zamanda yazılı puanları, ya da daktilo geribildirim, veya İngilizce bir deyişle geri bildirim yazılı. Bu sizi götürmek için kullanacağız ne aslında daha iyi kod yazma doğru. Ve ders ve bölümünde, biz deneyeceğim olarak sık can-- olarak bir konrtol işaret ne bir programı yapar sadece Doğru ve işlevsel iyi, ama aynı zamanda iyi tasarlanmış. En verimli olması, ya da olabilir Hatta en güzel o olabilir. Tarzı bizi hangi. Stil sonuçta bir estetik yargı. Eğer iyi seçim mi senin değişkenler için isimler? Eğer düzgün kodunuzu girintili mı? Bu nedenle iyi bakmak ve mu, başka bir insan için kolay Lütfen ilgili okumak onun doğruluğunun. Şimdi genel müfredat başına, biz puan Bir beş puanlık bir ölçekte bu işler. Ve bana gelin eve çekiç izin Bir üç ki gerçekten iyi. Çok hızlı millet yapmak aritmetik yapmaya başlayabilirsiniz. Onlar üç out olsun Bazı pset için doğruluğu beş ve onlar lanet düşünüyorum, ben% 60 olacak bunlar esas itibariyle, D ya da E bir Bu şekilde değil biz Bu sayıların düşünüyorum. Üç ne gerçekten iyi ve biz Genellikle başında bekliyoruz dönem alıyoruz eğer ki belki three's-- bir demet bir çift fuar, fours-- bir çift ya Birkaç ikişer ikişer, fours-- bir çift Bu başlamak için iyi bir yerdir. Ve biz bir çok uzun gördüğünüz gibi zamanla yukarı yörünge, Eğer özellikle iyi bir yerdesiniz. Biz kullanmak formül Ağırlık şeyler esasen müfredat başına bu, hangi sadece biz anlamına gelir doğruluğunu daha fazla ağırlık vermek. Çok sık doğruluğu Çünkü çoğu zaman alır. Şimdi bana güven. En azından find-- olacak bir pset-- o seni zaman% 90 harcama Sorunun% 10 üzerinde çalışıyor. Ve işlerin her tür bir ya da iki böcek hariç ve bu hatalar olduğunu Gece geç saatlerde seni tutmak. Bu olanlar olduğunu sıralama size kaçış. Ama uyku sonra, veya ofis saatleri katılıyor veya online soru soran Bunu% 100 hedefe olsun, ve bu yüzden biz kilo var En Hatasızlık. Biraz daha az Tasarım ve Bu biraz daha az stil. Ama zihinli tarzı tutmak belki de en kolay Bunların ısırmaya stil kılavuzu başına. Ve şimdi, daha ciddi Akademik dürüstlük not. CS50 talihsiz taşıyor Reklam Kurulu büyük üreticisi olan olgu hemen hemen her yıl tarihsel. Öğrenciler hile çünkü bu değil CS50 bir daha çok başka bir sınıfı daha ancak çünkü işin doğası gereği, elektronik var olması, bunun için bakmak ve gerçeği Aslında biz bilgisayar bilim adamları vardır Ben maalesef söyleyebiliriz Bunu tespit de çok iyi. Peki bu reel olarak ne anlama geliyor? Bunun Yani, müfredat başına, dersin felsefesi gerçekten makul olmak için aşağı kaynatın yok. Bu çizgi arasında var kendi kişinin işi ve biraz alıyorum Bir arkadaşımdan makul yardım, ve düpedüz için bu işi sizin arkadaş, ya da ona kod gönderme o sadece can böylece almak veya hak dışarı ödünç. Ve bu çizgiyi geçtiğinde Sınıfta çizilmiş olduğunu. Müfredat bakın sonuçta hatları makul olarak çizmek ve mantıksız davranışlar, ama gerçekten kaynatın yapar özünde aşağı İşinizi gerek arasında Sonunda kendi olmak. Şimdi bunu dedi, Bir sezgisel vardır. Eğer imagine-- edebileceğiniz gibi çünkü Mesai saatleri ve görseller arasından ve videolar biz ettik gösterilen böylece far-- CS50 gerçekten işbirlikçi olarak çıkartılacaktır ve kooperatif ve sosyal mümkün olduğunca. Işbirlikçi gibi titiz olduğu gibi. Ama bu sözü ile, sezgisel, Eğer müfredat göreceğiniz gibi, Eğer bazı sorun yaşıyorsanız zaman olduğunu. Sen kodunda bazı hata var olduğunu çözemez, sizin için makul başkasına kodunuzu göstermek için. Hatta sınıfta bir arkadaşım, bir arkadaş ofis saatlerinde senin yanında oturan, ya da personel üyesi. Ama onlar size kendi kodunu göstermek olmayabilir. Diğer bir deyişle, bir senin question-- cevap Ben Yardım eder, oh, burada benim kod değil gerekir. Bu bir göz atın ve ne olacak ondan anlamak. Şimdi, tabii ki, orada Bir yolu açıkça oyun Ben size göstereceğim sayede bu sistem Bir soru kalmadan önce benim kodu. Sen bana kodunuzu göstermek Bir soru kalmadan önce. Ama yine tanıtım bilgilerin görmek Bu çizgi nerede ince detaylar. Sadece şimdi resmini ve mümkün olduğunca şeffaf paylaşmak Son yıllarda en nerede, Bu Reklam Kurulu vakaların sayısı Bu CS50 üzerinde olmuştur Geçtiğimiz yedi yıl. 14 olguda bu en son sonbahar ile. Katılan öğrencilerin açısından, 20 bazı garip öğrencileri Geçtiğimiz sonbaharda. 33 bir zirve oldu birkaç yıl önce öğrenciler. Kime çoğu ne yazık ki artık burada kampüste. Bir yüzdesi olarak yer Öğrenci sınıf tarihsel% 0 arasında değişmektedir etti demek sadece% 5.3, için Bu yıl bir mücadeledir. Ve bu sonuna doğru, ne biz bir iletmek yapmak istiyorum Biz sadece FYI-- de karşılaştırmak dd-- ki Bu öğrencilere bir adalet kim buna göre hattını şunlardır. Hepimiz akım karşılaştırma yapmak tüm geçmiş misyonlar karşı gönderimler Geçmiş yıllar arası. Biz etrafında Google'dan nasıl da biliyorum ve kod depolarını bulmak Online, tartışma forumları Online Online, iş siteleri. Bir öğrencinin bulabilirsiniz, biz kesinlikle can o kadar çok biz üzülerek yapmak bulmak. Peki müfredat içinde görürsünüz ama bu pişmanlık hükmü olduğunu. Ben kesinlikle can takdir ve hepimiz vardır Personel kursu gibi yapmış olan zamanla bu, ya da bu kendisi, kesinlikle ne gibi biliyorum hayat var yol alır Bazı gece geç deadline-- sadece, bu sınıfta, ama another-- olduğunuzda Tamamen bitkin, stresli bir aşırı sayıda diğer şeyler yapmak. Bazı noktada en yapacak kesinlikle kötü belki geç hayat gece karar. Ders başına Yani Bu hüküm var, yapma öyle ki, 72 saat içinde Bazı kötü karar, sen o kadar kendi ve bana ulaşmak ve dersin başkanlarının biri ve biz bir görüşme olacak. Biz şeyler idare edecek dahili umuduyla Bir daha olma Öğretim an veya hayat dersi, ve bir şey değil Özellikle ciddi yansımaları Burada bu listelerde görebilirsiniz gibi. Yani çok ciddi bir sesi var. Bize sadece bir kaç için duraklama Let saniye gerilim kırmak için. [MÜZİK OYUN] DAVID J. MALAN: Pekala, böylece nasıl bir segue için? Bugünün temel konular için. hangi ilk soyutlama değildir. Hangi bir başka olacak açıkçası verilerin gösterimi nasıl söyleyerek gerçekten kuru şekilde biz yapabilirsiniz olduğunu sorunların çözümü ve düşünme hakkında gitmek sorunlarının çözümü hakkında? Yani Scratch gördüm, ve sen ettik C pset1 belki de daha önce de Eğer sadece kullanabilirsiniz fonksiyonlar, printf gibi, diğer insanlar yıl geçmiş sizin için yazdı. Ayrıca kendi işlevlerini yazabilirsiniz. Ve yok olsa bile pset1 açıkçası C bu yapılır, ve Eğer gerçekten yazmaya gerek yok senin problem-- nedeniyle kendi fonksiyonu belki de zor iken İlk görürsünüz glance-- sonuçta ile çözülebilir kod tüm o kadar satır. Ama bu anlamda, söz konusu olan Kendi işlevi yazma, vermek C olmadığını fark Bu yeteneği. Ben bugünün kaynak koduna gitmek için gidiyorum, hangi zaten online mevcut ve ben önde ve açık gideceğim işlev 0.C adlı bir program kadar, ve işlevi sıfır Biz bir şeyler göreceksiniz. İlk hatlar 18 aracılığıyla 23 benim ana işlevi. Ve şimdi biz okumak için başlıyoruz ki Biz anında yazılı değil kod, ama bunun yerine önceden yazdım veya bir sorun ayarladığınız sahip alabilirsiniz önceden yazılmış. Iyi bir şekilde başlamak için Birisi başkasının kodunu okuma ana işlevi için bakmak. Nerede girişi dışarı Şekil nokta programını çalıştırmadan olduğunu, ve oradan mantıksal olarak izleyin. Peki bu program görünüşte yazdırır Bir iki nokta üst üste adınız. Daha sonra GetString kullanımı CS50 kütüphanesinden bir dize ya da bir kelime veya kelime öbeği almak için klavyeden kullanıcıdan. Ve sonra bu var şey ötürü-- printAnıtın. Şimdi printAnıtın bir değil C ile geliyor fonksiyonu Bu standart io.h içinde değil Bu CS50.h. içinde değil Aynı dosyada oldukça var. Ben aşağı kaydırma eğer fark Kişilik Sokak hatları 25 27-- için o yorumlama sadece güzel bir yol var yıldız ve bölü kullanarak kodu. Bu çok çizgi Yorum, ve bu sadece bir mavisi benim açıklama Bu fonksiyon ne. 31'e kadar hatlarda 28 Çünkü, Ben bir süper basit fonksiyon yazdım kimin ismi printAnıtın olduğunu. Bu kaç alır argümanlar derdi? Yani bir argument-- biri var çünkü Parantez içinde belirtilen argüman. tipi String. Hangi printAnıtın demek ki Bu kara kutu gibi alır veya fonksiyon girdi bir dize olarak. Ve bu dize adı elverişli Adı olacak. Değil S, değil N, ancak adı. Peki printAnıtın ne yapıyor? Güzel basit. Sadece bir satır kod gibi printf, ama görünüşe göre onu yazdırır "Merhaba," falan. Nerede falan argüman geliyor. Şimdi bu burada büyük bir yenilik değil. Gerçekten, I could bir program aldım bir satır kod ile yazılmış Burada bu kadar koyarak, ve bir şey değişti bazı altı ya da yedi ya da öylesine içerir Buraya kod satırları tüm yol. Ama tatbik edilmesi bu soyutlama olarak bilinen prensibi. Tür yeni bir iç encapsulating Bir adı vardır fonksiyonu ve daha iyi Henüz bu ismi tam anlamıyla o ne diyor. Ben değil printf-- demek Özellikle açıklayıcı. Ben bir oluşturmak istiyorsanız bulmaca parçası, ya da ben eğer Bir işlevi oluşturmak istiyorum Bu, birinin adını yazdırır Bunu yapmanın güzelliği ben aslında can olduğunu Bu fonksiyonu bir isim verin o ne açıklar. Şimdi bir giriş alır Ben keyfi adını aradım, ama bu çok harika açıklayıcı yerine biraz daha olma S. ve benzeri jenerik geçersiz, şimdi, sadece anlamına gelir bu işlev yaptığı bir şey beni geri ver. Bu GetString gibi değil ki tam anlamıyla bir dize bana geri eller gibi biz kağıt parçaları ile yaptığımız sınıf arkadaşlarınızla geçen hafta, ama bunun yerine sadece bir yan etkisi vardır. Bu ekranda bir şey yazdırır. Günün sonunda, eğer öyleyse ben Fonksiyon-0, ./function-0 yaparım, biz benim adını sorar görürsünüz. Ben ismimi dışarı türleri David yazın ve. Ben Rob ile tekrar yaparsanız, söylemek gidiyor "Merhaba, Rob." Yani basit bir fikir, ama belki Bu zihinsel hesapladığım programlarınızın olsun ki , biraz daha karmaşıktır ve bir yığın yazmak istiyorum Kod ve çağrı code-- çağırmak bazı açıklayıcı tarafından bu code-- printAnıtın gibi isim, C bize bu yeteneği göze yapar. İşte başka bir basit örnek. Örneğin, ben bir açarsanız return.c denilen bugün dosyasını, Ben burada ne yaptık dikkat edin. Bu ana işlevi çoğu printf. Ben ilk keyfi bir başlatılamadı 2 sayısına x denilen değişken. Ben daha sonra x şimdi "çıktı % I "x değeri geçen. Yani sadece ne olduğunu söylüyorum. Şimdi sadece cesaretle değilim printf ile iddia. Ben bu değer x cubing ediyorum, ve ben Bir işlevini çağırarak bunu yaparken denilen küp geçen argüman olarak x, ve daha sonra çıkış tasarruf değişken kendisi, x. Yani x değerini clobbering ediyorum. Ben geçersiz kılma ediyorum ile x değeri ne olursa olsun çağırarak sonucu Bu küp fonksiyonudur. Ve sonra ben sadece bazı çıktı kabarık şeyler burada ne yaptım diyerek. Öyleyse küp nedir? Temelde ne dikkat Burada farklı. Ben işlevi verdik önce bir isim. Ben bir argüman için bir isim belirtilmiş ettik. O n isim yerine denir Bu kez, ama ben istiyorum bir şey diyebiliriz. Ama bu farklı. Soldaki bu şey. Daha önce ne kelime oldu? Boys. Şimdi tabii ki int var. Peki, belki de uzak alacak? Boşluk anlamına Oysa tür hiçlik, ve bu böyleydi. PrintAnıtın şey geri döndü. Bu bir şey yaptı, ama o beni geri el vermedi Ben koymak bir şey eşit işareti sol taraftaki gibi on line 22 burada yaptık. Ben hattına 30 içine derseniz Yani, muhtemelen ne ima işte ne küp hakkında benim için yapar? Evet? Bu bir tamsayı döndürür. Yani için, beni geri eller kağıt örneği, bir parça hangi o cevap yazmıştır. 2 küp ya da 3 küp ya da 4 cubed-- I geçirilen ne ve nasıl bu uygulamak mı? Peki, sadece n kere n kere n Ben bir değer küp nasıl olduğunu. Yani yine, süper basit fikir, ama demonstratif şimdi işlevleri yazabilirsiniz nasıl aslında bize geri vardı ilgi olabilir değerleri. En son örneğe bakalım Burada fonksiyonu tek aradı. Bu örnekte, bu başlar daha zorlayıcı olsun. Yani fonksiyonu bir de, bu program-- haber sonuçta GetPositiveInt adlı bir işlevi çağırır. GetPositiveInt bir değil CS50 kütüphane işlevi ama biz biz karar o var istiyorum. Daha sonra dosyada aşağı kaydırma Yani, Ben uygulama hakkında nasıl gittiğini fark Pozitif int olsun, ve ben daha zorlayıcı olduğunu söylüyorlar Bu iyi bir çünkü kod satır sayısı. Bu sadece aptalca değil küçük oyuncak programı. Aslında bazı hata denetimi var ve daha yararlı bir şey yapıyor. Eğer örneklerde görmedim Yani Biz pset1 gömülü olan videolar, Bu bir tür olduğunu biliyorum ruhu benzer C döngü, şeyler Scratch türlü yapabilirsiniz. Ve ne bunu söylüyor. Bu yazdırın. Sonra devam edin ve n- olsun Bir int olsun ve n saklayın ve tutmak tekrar ve tekrar ve bunu yaparken Yine çok uzun n olarak az biridir. Yani n az biri olacak sadece insan işbirliği değilse. O yazıyor ise 0 veya -1 veya -50 yılında, Bu döngü devam edecek Tekrar ve tekrar yürütme. Ve sonuçta ben, fark sadece değerini döndürür. Yani şimdi bir işlevi var bu güzel olurdu CS50 uygulamaya olsaydı Sizin için CS50.h ve CS50.c, ama burada şimdi can Bu kendimizi uygulamak. Ama bazı anahtar detaylar üzerinde iki yorum. Şehre neden int ilan etmedi n, hat 29, sizce yerine yapıyor Burada bu, hangi daha tutarlı Geçen hafta ne? Evet? İyi bir düşünce. Yani eğer bunu koymak vardı Burada, bu biz sanki bulunuyor Tekrar ve tekrar ilan tutun. Ve kendisi budur sorunlu değil, aslında, biz sadece gerekir çünkü bir kez ve sonra değeri biz yine de yeni bir tane almak için gidiyoruz. Ama iyi bir düşünce. Evet? Kapatın. Ben n ilan ettik çünkü Yani satır 29 döngü dışında, o boyunca erişilebilir Tüm bu işlev. Değil diğer işlevler nedeniyle n bu kıvırcık içinde hala Burada parantez. Emin çor. Aynen. Yani bu noktada bile fazla. Bunun yerine beyan ederse n burada hat 32, bu tahmin, çünkü sorunlu başka nerede bunu erişmek gerekir? Hat 34, ve üzerinde başparmak basit kural Eğer sadece bir değişken kullanabilirsiniz En son küme parantezi içinde hangi ilan etti. Ne yazık ki, hat 34 bir satır, çok geç Ben zaten kapalı ettik çünkü hat 33 kaşlı ayraç tekabül hat 30 kaşlı ayraç. Ve böylece bu söyleyerek bir yoludur Bu değişken int kapsamlı olduğunu, yani sadece içeriye, konuşmak Bu kaşlı ayraçlar arasında. Sadece bunların dışında yok. Peki gerçekten, ben bu yaparsam Yanlış, bana kodu kaydetmek izin gibi yanlış yazılmış bu--. Beni go ahead ve yapabilirim edelim Fonksiyon-1 ve notice-- hata. Bildirilmemiş tanıtıcısı n Kullanımı Burada çizgisi 35 üzerinde. Ve biz yukarı eğer bundan başka, bir tane daha. Bildirilmemiş kullanımı hat 34 tanımlayıcı n. Peki derleyici, Clang, öyle fark hemen olsa bile yok açıkça görsel var. Yani basit bir düzeltme oraya ilan edilir. Şimdi bana gidin izin dosyanın üst. Ne gibi size dışarı atlar Biraz farklı olmak şeyler biz geçen hafta baktı? Sadece adı sahibim, sadece do Ben, bazı keskin kontör içerir var Ben olduğum bir şey var Bir prototip çağrılıyor. Şimdi müthiş benziyor ne biz sadece hat 27 bir an önce gördüm. Yani farklı gelen sonucuna izin Ben bu yaptığım neden hata iletisi. Bana devam edelim ve Orada bu satırları silin. Ve bu yüzden prototip hakkında hiçbir şey bilmiyorlar. Bu dosyayı Remake. Fonksiyonu bir olun. Ve şimdi, lanet, dört hataları. Ilk birine yukarı edelim. Fonksiyonunun örtük beyanı Pozitif int olsun C99 geçersiz. C99 sadece 1999 anlamına gelir dil sürümü Biz gerçekten kullanıyor olduğunuz C. Peki bu ne anlama geliyor? Peki C- ve daha özellikle C Oldukça aptal programlar compilers-- vardır. Onlar sadece var biliyorum onlara, ve işte Geçen hafta aslında tematik. Sorun giderseniz olduğunu Burada adını uygulanması konusunda, ve ben adında bir işlevi çağırmak Hat 20 burada GetPositiveInt, Bu işlev teknik değil derleyici hattı 27 görene kadar var. Ne yazık ki, derleyici top, aşağı, sağa, sola şeyler yapıyor, Görüldüğü değil çünkü bunu GetPositiveInt uygulanması, ama o çalışıyor görür Burada o kadar kullanmak için, sadece bağırma bail-- gidiyor Bir hata ile belki message-- Şifreli ve aslında dosyasını derlemek. Böylece adlandırılan prototip kadar Burada kuşkusuz gereksiz olduğunu. Kelimenin tam anlamıyla, ben buraya gittim ve kopyalanan ve bu yapıştırılan ve ben burada o kadar koyun. Void daha doğru olurdu, bu yüzden olacak kelimenin tam anlamıyla kopyalayıp bu sefer yapıştırın. Ben tam anlamıyla kopyalanan ve yapıştırılan. Gerçekten sadece bir ekmek kırıntısı gibi. Derleyici Biraz ipucu. Ben bu ne bilmiyorum Henüz değil, ama ben sana vaat ediyorum sonunda mevcut olacaktır. Bu line-- Ve bu yüzden çizgi 16-- bir noktalı virgül ile biter. Bu tasarım ile gereksiz olduğunu. Evet? Eğer bağlantı kitaplığı olmadıysa oh iyi bir soru Şeyin için. Keskin başlık dosyası kapanım içerir. Gerekir neredeyse şey olmak Need her zaman çok üstünde olması bir similar-- için dosya aynı nedenle, evet. Standart çünkü io.h anlamıyla bir çizgidir Bu gibi ama kelime printf ile, ve onun argümanları ve dönüş türü ile. Ve böylece keskin yaparak yukarı dahil Burada, kelimenin tam anlamıyla ne yaptığını konum içeriğini kopyalayarak ve yapıştırarak bir birinin başka üst yazdı. Böylece için kodunuzu cluing Bu fonksiyonlar var olduğunu aslında. Evet? Kesinlikle. Yani çok zeki ve doğru çözüm olacaktır, biliyor musun? Bilmiyorum ne prototip, ama ben biliyorum C sadece olduğunu anlamak dilsiz ve yukarıdan aşağıya gözden geçirilmesiyle. Peki en çok ne istediğini verelim. O kadar yapıştırın, en bu kodu keselim üst ve şimdi aşağı aşağıda ana itin. Bu da sorunu çözmek istiyorum. Ama çok kolay ile gelebilir A B aramak gerekir hangi bir senaryo, ve belki de B A. Bu geri çağırır yineleme denen şey, bir ve biz geri o geleceğiz. Ve ya da iyi olabilir veya olmayabilir şey, ama kesinlikle can Bu çözüm kırmak. Ve dahası, yapardım üslup iddia, özellikle programlarınızı Bu uzun ve bu uzun hale, sadece süper uygun bulunuyor üstündeki ana koymak bu şey, çünkü çoğu programcılar umurumda olacak. Ve bu yüzden biraz temizleyici, belki, o yolu yapmak Ben aslında yaptım Bir prototip bile biraz görünüyor olsa İlk bakışta gereksiz. Evet? Maalesef, sen yüksek sesle bunu söyleyebiliriz? Eğer konumlarını geçerseniz uygulama ve prototip? Yani bu iyi bir soru. Eğer siz bu aşağı yeniden ilan Burada, en ne görelim. Ben bu aşağı koymak Yani eğer Burada, sen söylüyorsun. Ah, üzgünüm. Yüksek sesle? Hatta yüksek sesle. Ah, iyi bir soru. Bu işlevi geçersiz misiniz? Biliyorsun, bunca yıldan sonra, ben sonradan bir prototip koymak asla. Yani fonksiyon 1 yapmak yapalım Bu yaptıktan sonra. [Mırıldanıp] DAVID J. MALAN: Oh, bekle. Biz hala üst her şeyi koymak zorunda. Yani ben eğer kıyafetleri, burada bu kadar yapalım Sorunuzu doğru anlamak. Ben de dahil olmak üzere, her şeyi atıyorum Ana Yukarıdaki prototip, ama prototip atıyorum uygulanması altında. Ben bir tane yaparsanız, ben alıyorum Yani geri bir error-- kullanılmayan değişken n. Ah, orada. Teşekkür ederim. Bakalım, biz bu kurtul. Yani, farklı bir hata var bu yüzden bu görmezden edelim. En gerçekten hızlı bu remake edelim. Tamam, bu yüzden veri argüman değil biçim dize tarafından kullanılan oh n-, çünkü var Ben burada bu değişti. Pekala, biz biliyoruz ne cevap amaçlara yönelik tamam gidiyor, işte gidiyoruz. Ah, pozitif için teşekkürler. Pekala, ben bu kodu çözecektir after-- bu özel hata gözardı Bu çalışıyor Ben-- beri cevaptır. Yani üzerine yazmaz ne sadece yaptık. Ben derleyici şüpheli Böyle bir şekilde yazılır sizin prototip görmezden olduğunu vücudun nedeniyle, tabiri caizse, fonksiyonu zaten sahiptir daha yukarı uygulanmıştır. Aslında danışmak gerekir derleyici manuel başka varsa anlamak için iması, ama ilk bakışta Sadece deneyerek ve deneyerek, hiçbir etkisi gibi görünüyor. İyi bir soru. Yani, şimdi adımlarla ilerlemek hareket edelim uzak yan etkileri olan gibi bir şey yapmak işlevleri vardır görsel printf ile ekranda, ama bir değer döndürmek yok. Ve bu işlevleri dönüş var biz gibi değerler sadece birkaç gördüm. Biz zaten, kapsam bu kavramı gördüm ve biz tekrar bu görürsünüz. Ama şimdi, yine, başparmak kuralı kullanın Bir değişken sadece kullanılabileceğini En son açılan içinde ve biz gibi kapalı kaşlı söz konusu örnekte gördü. Ve işaret ettiği gibi, Bir ability-- orada Bu sorunlardan bazılarını çözmek olabilir küresel bir değişken koyarak Bir dosyanın çok üstünde. Ama hemen hemen her durumda biz üzerine kaşlarını olur, ve gerçekten bile gidemez Şimdilik bu solüsyona ilave edilir. Şimdi Yani, paket olduğunu değişkenleri kapsam bu kavramı var. Ama şimdi en başka bakalım aslında seyir kuru yolu Bazı oldukça ilginç bir uygulama detayları. Bu bilgileri nasıl temsil edebilir. Ve biz zaten bu baktı sınıfın ilk haftasında. Ikili baktığımızda, ve ondalık kendimizi hatırlatan. Ama C olduğu geçen hafta çağırmak Farklı veri tipleri ve demetleri daha, ama en kullanışlı olanlar Şimdi bu olabilir. Olur bir karakter veya karakter, bir byte veya sekiz bit olmak üzere toplam. Ve bu boyutta olduğunu söylemek var Bir karakter sadece bir bayt olduğunu. Bir bayt sekiz bit, yani bu demektir Biz kaç karakterleri temsil edebilir. Kaç harf veya Klavye üzerindeki semboller biz bir bayt veya sekiz bit varsa. Geri hafta sıfır düşünün. Eğer sekiz bit varsa, kaç toplam değerleri Eğer birlikte temsil edebilir sıfır ve olanları desenleri? Bundan daha seçin--. Yani 256 toplam eğer sıfırdan saymaya başlar. Yani sekiz bits-- yüzden biz eğer varsa , yine burada bizim ikili ampuller vardı biz bu ampuller dönüşebilir ve 256 benzersiz desen herhangi kapatır. Şimdi bu biraz sorunlu. İngilizce ve için çok değil Romantik dilleri, ama kesinlikle Eğer tanıtmak zaman, için Örneğin, Asya dilleri, hangi gibi çok daha sembolleri var Alfabesinin 26 harf. Biz aslında gerekebilir bir byte daha fazla. Ve minnetle içinde Son yıllarda toplum vardır kullanmak kabul diğer standartlar Şarj başına birden fazla bayt. Ama şimdi C, varsayılan Sadece bir bayt veya sekiz bittir. Bir tamsayı, bu arada, dört olduğunu bayt, aksi takdirde 32 bit olarak da bilinir. Hangi büyük olası ne demektir numara, bir int ile temsil edebilir görünüşe? Milyarlarca. Yani dört milyar vermek veya almak var. 2 32. güç, biz eğer Hiçbir negatif sayılar varsayalım ve sadece tüm olumlu kullanmak sayılar, bu dört milyar bulunuyor vermek veya almak olanaklarını. Bir şamandıra, arada, farklı bir türüdür Hala bir sayı C. veri türü, ama gerçek bir numara. Bir ondalık noktasının ile bir şey. Ve o çıkıyor C ayrıca dört bayt kullanır kayan nokta değerlerini temsil etmek. Ne yazık ki ne kadar yüzer nokta değerleri dünyada var? Kaç gerçek sayılar var? Sonsuz var numarası ve için o olsun tamsayılar sonsuz sayıda var. Yani biz tür zaten konum Burada kendimizi bir delik kazma. Bu sayede, görünüşe göre computers-- en them-- üzerine yazılmış C az programları Sadece yüksek olarak sayabilirsiniz dört milyar, vermek veya almak ve kayan nokta değeri can sadece görünüşte hassas bazı sınırlı miktarda var. Sadece çok basamak sonra onların ondalık nokta. Çünkü elbette, eğer Sadece 32 bit var, Ben yaklaşık gitmek için gidiyoruz nasıl bilmiyorum Muhtemelen gerçek Numaraları temsil desen farklı tipleri ile. Ama kesinlikle bir sonlu var bu modellerin sayısı bu yüzden burada da, bu sorunlu. Şimdi biz sorunu biraz önleyebilirsiniz. Eğer bir float kullanmak istemiyorsanız, Eğer bir çift kullanabilirsiniz C, burada sadece sekiz bayt verir sıfır yol daha mümkün desenler olduğunu ve olanlar. Ama hangi gidiyor, hala sonlu var Eğer yazılımı yazarsanız sorunlu olması grafik ya da fantezi için matematiksel formüller. Yani aslında isteyebilirsiniz Bundan daha büyük saymak için. Uzun long-- aval named-- Ayrıca sekiz bayt veya 64 bit olduğunu, ve bu, bir int olarak iki kat daha uzun olan ve uzun bir tamsayı değeri için. Bir int dört bayt ise Eğlence, fact-- genellikle C uzun ne kadar süre? Ayrıca dört bayt, ama bir uzun bir sekiz bayt, ve bu tarihsel nedenlerle içindir. Şimdi Ama paket sadece veri sahiptir bu bir computer-- temsil edilecek elektrik ile bir fiziksel aygıt, genellikle sürüyor Bu sıfır ve ones-- hassas sonlu miktarlarda. Peki sorun ne o zaman değil mi? Peki bir sorun var tamsayı taşması. Sadece C, ama Genel olarak bilgisayarlar. Örneğin, bu takdirde Bir bayt değerinde Kişilik Sokak olduğunu bu nedenle bu sekiz bit-- ise, hangi bir numara vardır. Ne sayı bu biz varsayalım eğer temsil bu ikili tüm pozitif değerler var? 255, ve çünkü, 256 değil, sıfır düşük sayıdır. Yani 255 yüksek olduğunu bir, ama sorun Ben istedim varsayalım Bu değişkeni artırmak olduğunu Sekiz bit toplam kullanıyor Ben bunu artırmak istiyorum. Ben eklemek Peki en kısa sürede bir Bu olanlar, tüm bir, belki sadece visually-- hayal edebiliyorum decimals-- kullanarak bir taşıma gibi bir şey sola akmaya gidiyor. Ve gerçekten de, ben numara eklerseniz Bu bir, ne ikili olur geri sıfıra taşması olmasıdır. Yani sadece bir int değil use-- eğer, ancak tek bir bayt tamsayılar saymak Bir programda, kısa sürede default-- tarafından Eğer, 250 olsun 251, 252, 253, 254, 255-- 0 255 sonra gelecek hangi muhtemelen ne olduğunu Bir kullanıcı beklemek için gidiyor. Şimdi arada nokta dünyayı kayan, Ayrıca benzer bir sorun var. Büyük number-- ile çok değil Her ne kadar hala bir sorun var. Ama hassas miktarı ile Eğer temsil edebilir ki. Yani bu örnekte bir göz atalım Burada da bugünün kaynak code-- gelen float-0.c. Ve fark o bir süper bulunuyor basit bir program bu görünüşte ne değerini yazdırmak gerekir? Eğer bu yazdırmak için gidiyor bahis ne Yeni sözdizimi biraz var olsa bile işte? Yani umarım 0.1. Yani onda biri eşdeğer Ben 10 bölü 1 yapıyorum çünkü. Ben cevap depolamak ediyorum Bir değişken f denir. Bu değişken türü float, bir olan Ben sadece önerilen bir anahtar kelime var olduğunu. Biz daha önce bu gördük, ama ettik Bu printf düzgün bir şekilde tür kaç basamak belirtmek için size ondalık noktadan sonra görmek istiyorum. Yani bu gösterim sadece anlamına gelir burada bir yer tutucudur var. Bir kayan nokta için var değer, ve oh, bu arada, ondalık noktasının ile birlikte bunu göstermek virgülden sonra bir numara. Yani sayı önemli basamak, böylece isteyebilirsiniz, konuşmak için. Bu yüzden bana go ahead ve yapalım Şamandıra-0, ./float-0 yapmak, ve görünüşe göre 1 ile 10 bölü 0.0. Şimdi neden bu? Peki tekrar, bilgisayar alıyor Beni tam anlamıyla, ve ben 1 yazdım ve ben 10 yazılı ve bir tahmin almak ne Bu iki kabul veri türüdür değerler? Bir int, teknik var Biraz farklı bir şey. Tipik olarak, uzun, fakat bu kadar sonuçta ayrılmaz bir değer. Değil bir kayan noktalı değer. Ki bu demek değildir Bir int ve bu bir int Sorun bilgisayarda olduğunu yetenek yok Hatta bu ondalık noktayı saklamak için. Eğer 1 yaptığınızda Yani bölünmüş 10 kullanılarak tamsayılar tarafından pay ve hem payda, cevap 0.1 olmalıdır. Ama computer-- nedeniyle Bu integers-- olan 0.1 ile ne bilmiyor. Peki açıkça ne yapıyor? Sadece, o uzakta atıyor ve ben sonuçta ne görüyorum Ben ısrarla çünkü 0.0 printf bana bir ondalık noktasını göstermektedir. Ama sorun olduğunu eğer Bir tamsayı ile bir tamsayı bölmek, Eğer tanımı gereği get-- edecek arasında bir tam sayı C-. Ve bunu yapmak için gitmiyor güzel ve elverişli bir şey kadar onu yuvarlak gibi bir yukarı veya aşağı yakın. Bu kesecek gidiyor ondalık sonra herşey. Yani sadece sezgisel, Muhtemelen bir düzeltme nedir? Burada basit düzeltme nedir? Evet? Kesinlikle. Neden sadece bu tedavi yok etkili bir nokta değerlerini kayan şamandıra veya çiftlerde dönüştürerek. Ve şimdi ben yapabilirim eğer yüzen-0, ya da ben yüzen-1 derlemek, ki ile aynıdır sadece ne teklif edildi. Ve şimdi yüzen-0, şimdi benim 0.1 alırım. Şimdi bu inanılmaz. Ama şimdi ben yapacağım Biraz farklı bir şey. Ben gerçekten ne olduğunu görmek için merak ediyorum kaputun altında oluyor, ve ben bu yazdırmak için gidiyorum üzerinden 28 ondalık yerler. Ben gerçekten görmek istiyorum 0.1000-- bir infinite-- Bu 0.1 sonra [duyulamaz] 27 sıfır. Peki işte bakalım Ben gerçekten ne olsun. Yüzen-0 aynı dosyayı olun. ./floats-0. En dramatik cevap yakınlaştırmak edelim. Tüm bu sefer, düşünme oldum 10'a bölünür 1,% 10 ya da 0.1 kadardır. Öyle değil. En azından şimdiye kadar olduğu gibi bilgisayarın ilgili. Şimdi neden-- Tamam, bu tam değil 10 bölü yalan 1 0.1. Ama bu değil neden-- paket bugün. Peki neden bilgisayar, düşünüyor Odaya hepimiz farklı, 10'a bölünür 1 olduğu aslında çılgın değeri var mı? Görünüşe göre yapıyor bilgisayar nedir? Bu da ne? Bu taşma değil, başına. Taşma tipik zaman olduğu Bir değer etrafında sarın. Bu tutarsızlığın bu mesele Bir kayan nokta değeri Eğer sadece 32 var burada ya da belki de 64 bit. Ama sonsuz varsa Gerçek Numaraları sayısı ondalık noktaları ile sayılar ve sayıları kesinlikle thereafter-- hepsini temsil edemez. Yani bilgisayar verdi Bize en yakın eşleşme değeri o kullanarak temsil edebilir Aslında istediğiniz değere birçok bit, bu, 0.1. Ne yazık ki, eğer matematik yapmaya başlayabilirsiniz, ya da yüzen bu tür içeren başlangıç Önemli programs-- nokta değerleri finansal yazılım, Askeri software-- şey nerede algı Muhtemelen oldukça önemlidir. Ve sen eklemeye başlayın Bu gibi numaraları ve başlangıç Bu yazılımı çalıştıran gerçekten büyük girişlerle veya saat veya sürü sürü yıl gün veya sürü, Bu minik hatalar kesinlikle zamanla ekleyebilirsiniz. Şimdi bir kenara, sen ettik eğer her zamanki gibi Superman 3 veya Office Space görüldü ve Hatırlayacağınız olabilir nasıl bu adamlar çaldı kendi bilgisayarlarından çok para kayan nokta değerleri kullanarak ve küçük ekleyerek kalanları, umarım bu film Şimdi daha mantıklı. Bu onlar ne Bu filmde ima. Aslında çoğu bu şirketlerin bakmak olmaz belirli miktarda kullanımdan sonra ondalık basamak, ancak bu sent kısımlar bulunmaktadır. Yani, onları eklemeye başlayın Eğer çok para kazanmak için başlayın banka hesabınıza. Yani Office Space açıkladı var. Şimdi maalesef ötesinde Office Space, orada Bazı meşru rahatsız olan ve önemli etkiler Bu tür Altta yatan tasarım kararları, nedenlerle ve gerçekten de bir Biz derste C kullanın Eğer gerçekten bu zemin var, böylece Bilgisayarlar nasıl anlaşılması kadar, nasıl yazılım çalışır ve yapamaz verilen bir şey almak. Gerçekten de, ne yazık ki, ve bu da Bu temel anlayış, biz insanlar hata yapar. Ve ne ben paylaşmak düşündüm olduğunu Bu sekiz dakikalık video burada alınan bir Modern Harikalar bölüm, gelen işlerin nasıl bir eğitim gösterisi Bu iki resim boyaları bir zaman bir uygunsuz kullanımı ve anlayışı noktası değerleri kayan bazı önemli neden talihsiz sonuçlar. Bir göz atalım. [VİDEO OYNATMA] -Şimdi Mühendisliği "geri dönmek Modern Harikalar üzerine Afetler ". Bilgisayarlar. Hepimiz kabul geldim genellikle sinir bozucu sorunlar olduğunu them-- böcek, virüs var, ve küçük fiyatlar için yazılım glitches-- kolaylık ödemek için. Ancak yüksek teknoloji ve yüksek hızda Askeri ve uzay programı uygulamaları, küçük bir sorun olabilir felakete büyütülecek. 4 Haziran 1996 tarihinde, bilim adamları hazırlanmış Bir insansız Ariane 5 roketi başlatmak için. Bilimsel taşıyordu uydular tasarlanmış tam olarak nasıl kurmak Dünya'nın manyetik alanı etkileşime Güneş rüzgarları ile. roket için inşa edildi Avrupa Uzay Ajansı, ve tesis kapalı kaldırdı Fransız Guyanası kıyısında. -En Yaklaşık 37 saniye içine Uçuş, ilk fark şeylerin yanlış gidiyordu. Memeleri döndürülebilir olduğunu Bir şekilde onlar gerçekten olmamalıdır. Uçuş içine 40 saniye civarında, açıkça araç, sorun oldu yaptıkları zaman ve işte Karar onu yok etmek. aralık güvenlik görevlisi ile muazzam cesareti, düğmeye basıldığında elinden öncesi ve roket havaya uçurdu kamu güvenliği için bir tehlike haline gelir. -Bu Kızlık oldu Ariane 5 sefer, ve onun imha aldı Çünkü kusur yer roketin yazılım gömülü. Üzerine -The sorun Ariane olduğunu orada Gerekli bir sayı olduğu 64 bit, ifade etmek ve onlar dönüştürmek istedim 16-bit numarasına o. Bu sayı olduğu varsayılır çok büyük olacak asla. Bu da, bu basamak, en 64-bit sayı sıfır vardı. Onlar yanlış. Birinin -The yetersizlik yazılım programı kabul etmek tarafından üretilen sayıda tür Başka bir başarısızlık kökünde oldu. Yazılım geliştirme olmuştu bir Yeni teknolojinin çok pahalı parçası. Ariane 4 roket vardı çok başarılı olmuştur. Için oluşturulan yazılım O kadar aynı zamanda Ariane 5 kullanılmıştır. -The Temel problem olduğu Ariane 5. Faster--, hızlı hızlandırılmış oldu ve Yazılım bu hesaba etmemişti. Roket -The imha büyük bir mali felaket oldu. Tüm nedeniyle bir dakika yazılım hatası. Ama bu ilk değildi zamanlı veri dönüştürme sorunları Modern roket teknolojisini musallat etmişti. Başlaması ile birlikte 1991 -Yeniden Birinci Körfez Savaşı, Patriot füze benzer bir tür deneyimli Bir sayı dönüştürme sorunu. Ve sonuç olarak 28 people-- 28 Amerikan soldiers-- öldürüldü, ve yaklaşık yüz kişi yaralandı. Ne zaman gerekiyordu Patriot, Gelen Scuds karşı korumak için, Bir füze ateş başarısız oldu. -Ne Zaman Irak'ın Kuveyt'i ve Amerika'yı istila Erken 1991 yılında Çöl Fırtınası başlattı, Patriot füze bataryaları konuşlandırıldı Suudi Arabistan ve İsrail'i korumak için Irak Scud füze saldırılarından. Patriot ABD orta menzilli olduğunu Yüzey-to-air sistemi Raytheon şirketi tarafından üretilen. Patriot -The boyutu önleme itself-- o, yaklaşık kabaca 20 metre uzunluğunda ve yaklaşık 2.000 kilo ağırlığında. Ve bu, yaklaşık bir savaş başlığı taşıyan Ben kabaca 150 £ olduğunu düşünüyorum. Ve savaş başlığı kendisi yüksek patlayıcı, hangi Etrafındaki parçaları vardır. Yani savaş başlığı gövde olduğunu Bir buckshot gibi davranacak şekilde tasarlanmıştır. -The Füzeler gerçekleştirilmektedir konteyner başına dört, ve yarı römork tarafından taşınır. -The Patriot füze savunma sistemi Şimdi en az 20 yıl geriye gider. Başlangıçta dizayn edilmiştir bir hava savunma füze gibi düşman uçaklarını vurmaya. Birinci Körfez Savaşı Bu savaş geldi, Ordu bunu kullanmak istedim Scuds değil, uçaklar vurmaya. Irak Hava Kuvvetleri oldu Bir sorun değil çok, ancak Ordu Scuds endişe edildi. Ve böylece çalıştı Patriot yükseltin. Bir düşman -Intercepting Mach 5 de seyahat füze Yeterince zor olacaktı. Ama ne zaman Patriot hizmete koştu, Ordu farkında değildi Iraklı bir değişiklik olduğunu onların scuds yapılan neredeyse bunu imkansız. Ne oldu Scuds olduğu geliyordu kararsız idi. Onlar titrek. Bunun nedeni, Iraqis-- oldu 600 kilometre almak için 300 kilometrelik menzil missile-- arasında ön savaş başlığı dışarı ağırlığını aldı ve savaş başlığı hafif yaptı. Yani şimdi Patriot adlı gelmek için çalışıyor Scud de, olan Zamanın ve en ezici çoğunluğu seferinde-- sadece Scud tarafından uçmak. Patriot sistemi operatörleri -Sonra Patriot hedefini kaçırmış fark Onlar Patriot adlı savaş başlığı patlatıldı Bunun mümkünse kayıpları önlemek için yere düşmesine izin verildi. -Bu Çoğu insan gördüm ne olarak gökyüzünde büyük Fireballs, gibi yanlış Scud savaş başlıklarının yakaladığını. Gece gökyüzü, Patriots içinde olsa- başarıyla yok olduğu ortaya çıktı Scuds, Dhahran orada olabilir onun performansı hakkında hiçbir hata. Orada Patriot radar sistemi Gelen Scud kayıp parça nedeniyle başlatılan asla Bir yazılım kusur. İlk keşfedilen İsrailliler oldu uzun sistem oldu ki, büyük zaman tutarsızlık oldu. Nedeniyle gömülü bir saat kadar Sistemin bilgisayar. -Yaklaşık Iki hafta önce Dhahran trajedi, İsrailliler rapor Savunma Bakanlığı Bu sistem zaman kaybetmeden oldu. Yaklaşık sekiz saat sonra, çalışan, onlar fark Sistem en olma ki fark daha az hassas. Savunma Bakanlığı yanıt verdi Patriot pillerin tüm söylüyorum sistemlerini terk etmek Uzun bir süre için. Onlar uzun zaman oldu ne söylemedim. 8 saat, 10 saat, bin saat. Kimse biliyordu. -The Patriot batarya kışlasında konuşlu Dhahran ve kusurlu olarak iç Saat 100 saatten fazla olmuştu 25 Şubat gecesi. -Bu Bir doğruluk zaman paletli Bir saniyenin onda. Bir saniyenin Şimdi onda ilginç bir sayıdır o ifade edilemez çünkü tam ikili hangi tam olarak ifade edilemez anlamına gelir Herhangi bir modern dijital bilgisayar. Bu, inanmak zor ama Bir örnek olarak kullanabilirsiniz. Numaralı üçte birini ele alalım. Bir üçüncü olamaz Tam ondalık olarak ifade edilmiştir. Üçte biri 0.333 olduğunu sonsuzluğa için devam. O yapmak için hiçbir yolu yoktur Bir ondalık mutlak doğruluk. Bu sorunun tam tür Bu Patriot oldu. uzun sistem koştu, kötü zamanı hatası oldu. Operasyon sonra- 100 saat, zaman içinde hata yalnızca üçte biri oldu Bir saniye. Ancak, bir hedef açısından Mach 5 de seyahat füze, bir takip ile sonuçlanmıştır 600 metre hata. Bu ölümcül bir hata olur Dhahran de askerler için. Ne bir Scud lansmanı yapıldı edilir oldu Erken uyarı uyduları tarafından tespit, ve onlar Scud geldiğini biliyordu genel olarak saptanmıştır. Önümüzdeki nerede Onlar bilmiyordu. Bu radara kadar şimdi oldu Patriot sistemin bileşen Dhahran savunan bulmak ve tutmak Gelen düşman füze parça. -The Radar çok akıllı. Aslında takip ediyorum Scud pozisyonu ve daha sonra nereye tahmin muhtemelen olurdu bir dahaki sefer Radar dışarı darbe gönderdi. Bu aralık kapısı denirdi. Patriot kez -Sonra yeterli zaman vardır karar geri dönün ve bir sonraki kontrol geçti Bu tespit nesne için konum geri gider. Yani yanlış geri gittiğinde Yer, o zaman hiçbir nesne görür. Ve hiçbir nesne olduğunu karar verir. Bir yanlış algılama olduğunu ve parça düşer. -The Gelen Scud kayboldu radar ekranından, ve saniye sonra, onu kışlaya çarptı. Scud 28 öldürdü. Bu sonuncusu kovuldu İlk Körfez Savaşı sırasında. Trajik, güncellenmiş yazılım ertesi gün şafakta geldi. Yazılım kusur vardı been sabit, kapanış sorunlu bir bölüm Patriot füze tarihi. [SON VİDEO OYNATMA] DAVID J. MALAN: Bu CS50 için var. Çarşamba günü görecek. [MÜZİK OYUN]