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