DAVID J MALAN: Hepsi Pekala, bu CS50 olduğunu. Ve bu açıkça bir cuma günü. Ve bu hafta biri sonudur. Yani biz bıraktığımız Hatırlayacağınız, bir tür çekişme ile son kez. Mademki biz bu yalanı açığa hayır o olursa olsun büyüyen size öğretilen oldum ne kadar 10 ile ayrılır 1 değil, Aslında, 0.1 ya da 0.100 veya 0,10000. Aslında, eğer biz bu derleme Program, biz dün yaptığı gibi, belirsizliğe yapın ve sonra nokta yapmak, çizgi, belirsizlik, Bu ne olduğunu öğrendim 1 aslında 10 bölü. Yani gerçekten oldukça durumda değil. Ama bu bazı ipucu yok Bilgisayarların temel sınırlama. Ve gerçekten, arasında şeyler yapmamız için gidiyoruz Bugün bu var, neden bir göz atın olduğunu oldu, bu neler etkileri, İnsanlık başarısız oldu nasıl Bazı çok bu kavramak Ciddi situations-- sonucu Oldukça trajik olmuştur ve aynı zamanda expensive-- ve biz nasıl bir göz atın aslında savunmak sınırlamalar bu tür karşı. Yani sezgisel, belki de Neden 1 10 bölünür, Benim bilgisayara göre Burada, sadece 1/10, 0.10? Evet. Ne düşünüyorsun? KİTLE ÜYE: radix farkı nedir? DAVID J MALAN: nedir? Ah, radix farkı nedir? Yani tamamen değil. Aslında daha var donanım temel. Diğer düşünceler? Evet. KİTLE ÜYE: Onlar farklı sayıları temsil? DAVID J MALAN: Yani onlar-- Sağ. Onlar farklı sayıları temsil etmektedir. Yanlış anlaşılan. Peki, o-- Böylece farklı Neyden? Ya da kime? Bizden? KİTLE ÜYE: Evet. Onlar ondalık kullanmayın [duyulamaz] sistem. DAVID J MALAN: Tamam. Yani bir anlamda, onlar değil ondalık sistemi kullanın. Kaputun altında, Her şey, aslında, ikili ve aslında ilgili var. Ama bile basittir Bundan daha açıklama. Evet. KİTLE ÜYE: Onlar sadece bu kadar çok bit var. Onlar sadece belli saklayabilirsiniz ölçüde, ondalık olduğu gibi. DAVID J MALAN: Evet. Bu gerçekten de alıyorum ne olduğunu. O bilgisayarları çıkıyor tipik olacak her zaman yalnızca bilgi sınırlı miktarda kullanın bir şey temsil etmek. Sağ? Sonuçta, biz sadece bir sabit var sabit disk alanı miktarı. Biz sadece sabit bir miktar var RAM veya bilgisayar belleği. Ve sadece bir varsa bir şeyin sabit tutar, kesinlikle aslında saymak olamaz sonsuzluk veya istediğiniz herhangi bir numaraya. Sen, bir tür, var almak ve hangi aralığı seçin size desteklemek için gidiyoruz değerleri. Ve böylece, örneğin, bir hafta ya da iki önce biz ASCII hakkında konuştuk, ve biz yaklaşık 8 bit konuştuk, veya bir bayt, yani, konuşmak için En büyük sayı biz-ebil 8 bit ile ne olduğunu temsil? 255. Ve biz 256 toplam değerleri temsil edebilir ama biz onlardan biri harcamak değilse Peki 0--, aynı biz eğer 0 bunlardan birini harcamak, Daha sonra büyük sayı 255, tabii ki,. Peki bu olduğunu, çıkıyor Bu bağlamda çok durumda. Biz konuşurken, geçen sefer başladı kayan noktalı sayılar, hakkında hangi içinde, tamsayılar farklıdır Onlar bir ondalık noktası var ve umarım, bazı sayılar bundan sonra, ama onlar da vardır. Bir bilgisayar yalnızca tipik gidiyor 32 bit, belki 64 bit kullanmak için Bir kayan nokta değeri temsil. Olsa bile Yani biz büyüdük matematik öğrenme ve bilme Kesinlikle olabilir ki sayıların sonsuz sayıda ondalık noktasının, sonra değil Eğer sonlu bellek varsa. Sen, biraz, yuvarlak zorunda veya almak ve seçtiğiniz numaralar temsil gidiyoruz. Ve böylece bir anlamda, aklınıza gelebilecek, Bu varlık bilgisayar en yakın değeri 10/01 yaklaşma bu Sadece 32 ya da öylesine bit ile alabilirsiniz. Ve bu sadece 1/10 değil. Örneğin, bu değiştirirseniz Düşündüğümüz 1/3, hatta daha kolaydır. Yani 1'den 3'e bölünür. Bana dosyayı kaydetmek edelim. Beni go ahead ve bunu derlemeniz edelim. Ve beni yeniden çalıştırın. Burada da, görünüşe göre, 1/3 0.3 değil, ve daha sonra 3 's sonsuz sayıda bundan sonra. Sen sonunda bu belirsizlik var. Bu yüzden insanlar doğru ve ne Eğer, aslında, isimli doğru öğrendim ama biz darbeleme ediyoruz Bazı sınırlamalar karşı. Ve ben düşündüm Biz bugün yaparım, başlamak olduğunu açıkçası, bakarak Bu trajik sonuçları Bazen zaman insanoğlu Oldukça uygulamıyor Bu gerçeklik ve bu sınırlamaların için. Ve biz vinyet bir dizi göreceksiniz alan History Channel nasıl şeyler bir göz yanlış gitmiş. Bu, yaklaşık 8 dakika uzunluğunda ve biz bu sonra geri geleceğiz ve tam bir göz atın başka ne ters gidebilir. Biz ışıklar-- dim olsaydı [VİDEO OYNATMA] -Bilgisayar, Hepimiz kabul geldim genellikle sinir bozucu sorunlar olduğunu onlarla birlikte gitmek. Hatalar, virüsler ve yazılım hataları küçük fiyatları kolaylık ödemek için. Ama yüksek teknoloji ve yüksek hızda Askeri ve uzay programı uygulamaları, En küçük bir sorun olabilir felaketinin içine büyütülecek. 4 Haziran 1996 tarihinde, bilim adamları hazırladı 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. -Ve Yaklaşık 30 saniye içinde Uçuş, ilk fark şeylerin yanlış gidiyordu. Memeleri döner 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. Bir Range Güvenlik Görevlisi ile muazzam bağırsaklar düğmeye bastı, o olabilir önce roket havaya uçurdu kamu güvenliği için bir tehlike haline gelmiştir. -Bu Kızlık oldu Ariane 5 sefer, ve imha aldı bir kusur nedeniyle koyun Roketin yazılımında gömülü. Üzerinde -The sorun Ariane olduğunu orada Gerekli sayıda oldu 64 bit, ifade etmek ve o dönüştürmek istiyordu bir 16 bit'lik bir sayıya. Bu sayı olduğu varsayılır çok büyük olacak asla, ki bu rakam en 64 bit numarası 0 aitti. 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 teknoloji çok pahalı bir parçası. Ariane roketi 4 çok olmuştu yazılım, başarılı çok aynı zamanda olduğu için oluşturulan Ariane 5 üzerinde kullanılan. -The Temel sorun Ariane oldu 5, daha hızlı daha hızlı hızlandırdı. Ve Yazılım yoktu Bu sorumluydu. Roket -The imha büyük bir mali felaket oldu Kusura 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 -In Birinci Körfez Savaşı, Patriot füze benzer bir tür deneyimli sayı dönüştürme sorunu. Bunun bir sonucu olarak, 28 kişi, 28 Amerikan askeri öldürüldü ve yaklaşık edildi 100 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 işgal ve Amerika'yı 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ına karşı. Patriot ABD, orta menzilli olduğunu Yüzey havaya sistemi Raytheon şirketi tarafından üretilen. Patriot uçağı ve -The boyutu kendisi, yaklaşık 20 feet uzunluğunda, ilgili. Ve yaklaşık 2000 £ ağırlığındadır. Ve bu about-- bir savaş başlığı taşıyan Ben kabaca 150 £ olduğunu düşünüyorum. Ve savaş başlığı, kendisi yüksek patlayıcı olduğu, hangi etrafında parçaları vardır. Savaş başlığı gövde ise buckshot gibi davranacak şekilde tasarlanmıştır. -The Füzeler vardır 4 her bir kap, gerçekleştirilebilir, ve yarı-römork tarafından taşınır. -The Patriot anti-füze sistemi Şimdi en az 20 yıl geriye gider. Başlangıçta dizayn edilmiştir Bir hava savunma füze olarak düşman uçakları vurmaya. Birinci Körfez Savaşı, savaş boyunca geldi, Ordu bunu kullanmak istedim Scuds değil, uçaklar vurmaya. Irak Kuvvetleri değildi Bir sorun çok, ancak ordu Scuds endişe edildi. Ve böylece çalıştı Patriot yükseltin. Bir düşman -Intercepting füze mach beş de seyahat Yeterince zor olacaktı. Ama ne zaman Patriot hizmete koştu, Ordu, bir farkında değildi Yapılan Irak değişiklik Onların scuds vurmak neredeyse imkansız. Ne oldu scuds olduğu geliyordu, kararsız olduğunu Onlar wobbling bulundu. Bunun nedeni, sırayla, Iraklılar oldu üzerinden 600 kilometre almak için 300 kilometrelik menzilli füze, Ön savaş başlığının dışarı ağırlığını aldı ve savaş başlığı çakmak yaptı. Yani şimdi, Patriot adlı gelmek için çalışıyoruz scud de, çoğu zaman, ezici çoğunluğu Zaman, sadece scud tarafından uçmak. Patriot sistemi operatörleri -Bir 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. Çoğu insan ne gördüm -Bu oldu Gökyüzündeki o büyük Fireballs, gibi yanlış Scud savaş başlığı yakaladığını. Gece olmasına rağmen Gökyüzü, Patriots çıktı başarılı bir şekilde olmak Dhahran de, Scuds yok, Hiçbir hata olabilir onun performansı hakkında. Orada, Patriot radar sistemi Gelen Scud izini kaybettik, ve başlattı asla Bir yazılım kusur nedeniyle. İlk keşfedilen İsraillilere oldu uzun sistem üzerinde olduğunu, büyük zaman tutarsızlık nedeniyle gömülü bir saatin, oldu Sistemin bilgisayar. -Yaklaşık 2 hafta önce Dhahran trajedi, İsrailliler bildirildi Savunma Bakanlığı, Sistem zaman kaybetmeden olduğunu, Bu çalışan yaklaşık 8 saat sonra, bunlar sistem olduğunu fark fark daha az hassas hale. Savunma Bakanlığı yanıt verdi Patriot pillerin tüm söylüyorum sistemlerini terk etmemeleri Uzun bir süre için. Onlar uzun bir süre ne olduğunu söylemedim. 8 saat? 10 saat? 1000 saat? Kimse biliyordu. -The Patriot batarya kışlasında konuşlanmış Dhahran ve onun kusurlu iç at 100 saatten fazla saat olmuştu 25 Şubat gecesi. -Bu Doğrulukla zaman paletli yaklaşık 1/10 saniyenin evi. Şimdi ikinci bir 1/10 İlginç bir numara olamaz, çünkü tam olarak ikili olarak ifade edilmiştir. Ki bu olamaz, demek ifade, tam olarak, Herhangi Modern dijital bilgisayar. Bu, inanmak zor ama örnek olarak kullanabilirsiniz. Numarasını, 1/3 ele alalım. 1/3 ifade edilemez ondalık tam. 1/3 sonsuzluğa için devam 0.333 olduğunu. Bunu yapmanın bir yolu ile, var ondalık mutlak doğruluk. Yani tam olarak aynı tür Patriot oldu sorun. Uzun sistem koştu, kötü zamanı hatası oldu. 100 saatlik bir -Önce hata zaman içinde sadece yaklaşık 1/3 bir saniye idi. Ancak hedef açısından füze mach 5 de seyahat, Bir izleme sonuçlandı 600 metre hata. Bu ölümcül bir hata olur Dhahran askerler için. Ne oldu, bir Scud başlatmak olduğunu oldu erken uyarı uyduları tarafından tespit ve Scud olduğunu, yeni genel yönde geliyor. Önümüzdeki nereye onlar bilmiyordu. -Bu Radara kadar şimdi oldu Patriot sistemi bileşeni, bulmak ve korumak için, Dhahran savunan Gelen düşman füze iz. -The Radar çok akıllı. Aslında takip ediyorum Scud pozisyonu ve daha sonra nereye tahmin o, muhtemelen olurdu bir dahaki sefere, Radar dışarı darbe gönderdi. Bu aralık kapısı denirdi. -O Zaman, Patriot kez yeterli zaman vardır karar Geri dönüp bir sonraki kontrol etmek 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 olduğunu karar Nesne, bu yanlış bir algılama oldu, ve parça düşer. Gelen Scud kayboldu radar ekranından, ve saniye sonra, o kışlaya çarptı. Scud 28 ölü ve son biri Birinci Körfez Savaşı sırasında ateş etti. Trajik, güncellenmiş yazılım ertesi gün Dhahran geldi. Yazılım kusur vardı edilmiş sabit kapatma sorunlu bir bölüm Patriot füze tarihçesi. [SON OYNATMA] DAVID J MALAN: Yani biz bir göz atacağız Sadece biraz bazı benzer sınırlamalar. Ama önce, haydi Birkaç geçiş Bilginize var. Bu hafta sonu Şehre Yani, orada süper bölümler olacak, yerini alması amacıyla, hangi düzenli olarak planlanan bölümler, hangi dolayısıyla hafta başlayacaktır. CS50 web sitesinde bir göz atın Bu hakkında daha fazla bilgi için. Onlar da filme ve izlenebilecek katılamayan kişiler için yaşamak. Sorun 1 set Zaten dersin web sitesi ve biz bir göz atacağız Sadece biraz o. Ve mesai saatleri de alacak Perşembe ile bu Pazartesi yerleştirin. Yani bu en kanonik oldu programı, son kez baktı. Bu basit gibi Eğer C yazabilirsiniz programı, ve hatta bu cesur iddia biraz. Sağ? Bir sürü orada Çünkü Bu karmaşıklığı görünen. Yani kısaca bir göz atalım Ne bu unsurların bazılarını ve ardından sağlamaya çalışıyoruz nasıl bir zihinsel modeli programlar bu basit çalışmak ve daha sonra biz başlayacağız her zamankinden daha karmaşık şeyler bakarak. Yani bu hat burada, şimdi vurgulanan sarı, biz ne dedin, son kez, Bu bizim için yaptığı? Hizmet verdiği amacı nedir? Geriye gelen herkes? Evet. KİTLE ÜYE: [duyulamaz] DAVID J MALAN: İyi. Yani size erişim sağlar komutlara veya atalım onları aramak fonksiyonları, o kimse Başka ilan olduğunu yazdı, böylece diğer bazı dosyasında, konuşmak için. Bu yüzden tam olarak ne bir .h dosyası göreceksiniz Sonunda, bir .c dosyası karşısında olduğunu. Ama şimdilik, sadece bilmek Bu Printf, örneğin, olmuştur fonksiyonlar arasında yer alıyor bir yerde, başka bir dosyada beyan bulutun sabit diskinde başka o Bize printf erişmek ve kullanmak için izin verir kalkmasından zorunda kalmadan Kendimizi tekerlek söyledi. Bu arada, ana. Ana, geçen hafta analog neydi? Evet. KİTLE ÜYE: Yeşil bayrak tıklandığında. DAVID J MALAN: Evet. Scratch kıyafetleri, yeşil bayrak tıklandığında. Bu puzzle parçası gibi şeyleri başladı. Ve böylece Benzer şekilde, dünyayı yaptım C birkaç yıl önce karar ve diğer dillerin bir demet, Eğer bir program yazmak istiyorsanız, İlk fonksiyon Ana, çağrılacak gelmiştir. Ve bu gibi görünmek zorunda. Ama biz geri geleceğiz Başka bir zaman, ne kadar, int, ve geçersiz, bu bağlamda demek. Şimdilik, kaşlı tür çizilme en puzzle parçası şekli gibi Bu hatların bazı sayısını saklar. Ve hatları arasında burada, burada bu biridir. printf, amacı bir işlevdir Hayat biçimlendirilmiş bir dize yazdırmaktır. Ve Biçimlendirilmiş tarafından, seni kastediyorum yer tutucu değerleri takabilirsiniz, ve kaç ondalık belirtebilirsiniz puan, kaç sayı yazdırmak için Bir ondalık noktasının ve benzeri sonrası. Ve printf, tabii ki, birini alır veya değişkenler veya parametreler daha Aksi takdirde daha basit, girdi olarak bilinen. Bir sürü gibi, So printf fonksiyonlar, giriş alır. Ve bu girişler bağrında Burada iki parantez. Ve bu iç bir giriş olduğunu. Biz bunu aradım gibi bir dize var, Hangi karakterlerin sadece bir dizi olduğunu, Bir kelime veya bir cümle ya da bir bütün gibi deneme bile, çift tırnak arasına. Ve bu etkilemek için neler var Printf davranışı nedeniyle, tabii ki, Sadece genel bir yazdırma işlevi var. Bu ne bilmek gitmiyor Eğer bunu söylemek sürece, yazdırmak için. Ve sonra, bir minutiae. Bu garip dedin ne Sembollerin sekansıdır Evet. KİTLE ÜYE: Yeni hat. DAVID J MALAN: Yeni hat. Yani sadece vurmak olamaz çıkıyor, Eğer programı yazıyoruz zaman girin. Genellikle, derleyici gidecek Ne demek ne kadar biraz karıştı. Aksine, tam anlamıyla var Burada bana yeni bir satır verecek, derler. Ve böylece / n ne genellikle Bir kaçış karakterini diyoruz. Yani n, yeni hat için. Ve derleyici bilir o / n gördüğünde, aslında bilgisayar neden olmalı, sonuçta veya Printf, bu durumda, gerçek bir Yeni yazdırmak için çizgi, vurmak gibi, girin klavyenizdeki tuş. Ve son olarak, ne dediniz sözdizimi bu parça için? O neyi temsil ediyor? Evet. KİTLE ÜYE: [duyulamaz] DAVID J MALAN: Bu sadece satır sonu. Bu ifadenin sonuna geldik. Ve biz değil fark Her yerde koyun. Biz kesinlikle onları koymayın her dizinin uçlarında. Örneğin, hiçbiri orada var İlk satır, hiçbiri hattı üzerinde var ana ile, hiçbiri var kaşlı ayraçlar sonra, ama gördüğünüz ve almak başlayacağız o çağırdı nerede aşina. Ve bir işlev sonra hemen hemen her zaman var Bazı eylem, çağrı veya bir açıklama Bu aslında alıyorsun. Ve, özellikle şimdi biliyorum daha rahat olanlar arasında, Bu aptalca şeyler türü vardır Yanlışlıkla beceriyor bitireceğiz olduğunu üzerinde duvara başınızı. Mantıksal olacak çünkü Bazı sorun güvenen Bir sorun için çözdük set ve sadece lanet şey derlemek ya da çalışmaz. Ve sık sık, erken, o gidiyor Eğer bir parantez cevapsız çünkü olması, veya bir virgül cevapsız. Ve böylece sadece dikkatli olmak şeyler bu tür, ve hayal kırıklığına almak için çalışın onları çok çabuk yapar, çünkü eski bir şapka olur. Ama almak çok kolay Bir sonuç olarak, erken sinirli. Yani şimdi, en nasıl bir göz atalım Bu hat aslında çalışıyor ve daha sonra biraz bakmak daha karmaşık bir. Yani biz burada, üzerinde var Bu ekranda çizmek yeteneği. Ve en varsayalım Bu, benim bilgisayar ekranı ama ben, merhaba program yazıyorum ve ben, printf hayata değil. Başkası, printf uygulamıştır. Kim iddia istiyorum , printf hayata geçirdik? Biz may olur? Pekala, adın ne? ÖĞRENCİ 1: [? Copal. ?] DAVID J MALAN: Copal, yukarı gel. Yukarı gel. Pekala. Yani biz burada var, bazı ad etiketleri, biz bu küçük bir oyun yapacağız çünkü. Ve biz printf, sizi arayacaktır. Ve sen buraya gelmek istiyorsanız, ne sadece ekranda boğuldum, o, beni orada, oldukça basit bu var. Pekala, merhaba benim adım olduğunu printf, bunu koymak istiyorsanız. Pekala. Ve standı gidebilirsiniz eğer Bilgisayar ekranı sanki işlevi olduğunu Bu bilgisayar sistemi ile geldi. Ve Hayattaki amacı aslında bir şey yazdırmak için. Ama programı gibi çok biz Sadece burada, ekranda vardı, biz zorunda gidiyoruz Aslında bazı giriş vermek. Ve böylece, benim girişi varsa, burada olduğu Görünüşe göre, ya printf'in geçirilir en tür böyle o kadar alay edelim. Ben tam anlamıyla yazmak için gidiyorum bir parça kağıt, "merhaba, dünya," Ters eğik çizgi N. Ve açık olması ne Ben sadece, bu kağıt parçası üzerinde boğuldum bu gibi görünüyor. Yani bu programı çalıştırın ve bu zaman kod sarı çizgi idam olur, o, ben, merhaba programı sanki bulunuyor bir işleve kapalı bazı girdi teslim ediyorum Başkasının yazdığı. Ve eğer, parmağınızla, Aslında olabilir, parmağınızla, ekranda çizmek ne olursa olsun Eğer teslim edilmiştir olduğunu etkisi nihayetinde için tam olarak, ekranda gördüğünüz. Ve burada bir küçük köşe durumda. Ve iyi, biz görmemeli Bu noktada, yeni satır. Senin için yanlış olur açıkça yeni satır çizmek için. Ama biz tutulması halinde ilgili kelimeleri yazarken Ekran, onlar aşağıda sona ereceğini. Yani çok teşekkür ederim, ama sopa Buralarda sadece bir an için. Biz şimdi diğer bir ihtiyaç Gönüllü, eğer olabilir, Bu rol oynamaya ihtiyacı olacak of-- Bu orkestrada sadece insanlar var hemen. Nasıl Tamam about--. Tam burada. Yukarı gel. Adın ne? ÖĞRENCİ 2: [? Ivay. ?] DAVID J MALAN: Üzgünüm? ÖĞRENCİ 2: [? Ivay. ?] DAVID J MALAN: Ethan, yukarı gel. Hayır mı? Hatta, bu yanlış aldın mı Eğer iki kere söyledikten sonra? Yukarı gel. Burada yukarı duymak zor. TAMAM. Ve üzgünüm, senin adın ne? ÖĞRENCİ 2: [? Ivay. ?] [? DAVID J MALAN: Ivay. ?] TAMAM. Şimdilik, bunu yaparsanız değil zihin, sen getString vardır. ÖĞRENCİ 2: Tamam. Güzel. DAVID J MALAN: Eğer isterseniz Yani Sadece bir an için burada durmak, en hafif bir göz atalım daha karmaşık bir program, bu Şimdi kod üç satır vardır. Bu yüzden, bir tane var kullanarak adınızı devlet printf; İki, getString bir çağrı, Bir bir atama tarafından takip Değişken string s, çağrılan veya s adlandırılan; ve sonra printf, başka çağrı, ancak iki girişli bu sefer. Yani biz zaten yaptık devlet Adınızı, ya da daha doğrusu, biz ettik Zaten bir printf çağrısı yapılır. Yani isminizi belirtin, yazacağım. Ve bu yüzden, ben ne gidiyorum Sadece bir an, printf, pas, Bu, oldukça basit olduğunu. Devam edin ve bu çizmek istiyorsanız Yani Ekranda, o senin girdi şimdi var. Pekala. Ve biz şimdi var, dize unutmak Burada kod kendi hattı. Yani içinde, GetString, ihtiyacımız Aslında, getString aramak için. Yani hayattaki amacınız sadece yürümek için orkestra içine, sen-ebil eğer, ve birinin adını almak. Ama seni verelim bir şey onu koymak. Eğer isterseniz, gidin önde ve bir dize olsun, Bu konuda birinin adını almak kağıt parçası, sen-ebil eğer. Pekala. Ve biz, sadece bir an, göreceksiniz Adını biz alıyoruz. Bu arada, ben ne gidiyorum hazır, boş bir parçasıdır kağıt, hangi, ben gidiyorum saklamak için ne değer o GetString bana dönüyor ki, Ben denilen bir dize değişkeni, s olmak. Pekala. Peki burada ne var? Nik. Pekala. Yani biz burada Nik adını sahiptir. Peki nedir bu tam anlamıyla iade edilmiştir Bana, bu yüzden getString tarafından, konuşmak için. Ben gidiyorum, şimdi, am sol tarafını yürütmek Ben sadece bu ifadenin, bir Bugünün amaçlar, Nik için, aşağı kopyalayın. Yani şimdi, ben bir değişken var denilen, Nik adını saklamak, s. Zaten teslim ettik printf, bir önceki argüman. Ama bizim üçüncü ve son satırda Kod, aslında eli printf var Biraz different-- şey "Merhaba% s," ters bölü n. Ve böylece son çizgi ben gidiyorum Ben son şey send-- için Hemen aşağı yazacağız, budur. Yani iki kod çizgiler veya Kodun son satırında ziyade, İki inputs-- için çağrı biri, bu, iki, bu. Bizim printf fonksiyonu Yani eğer Şimdi girdi olarak bu alabilir, Senin için ekranı temizlemek edelim. Aslında hayır, sen devam edebilir. Biz bu yana, o kadar bırakacağım Aynı programda var. Biz, merhaba, Nik görmelisiniz. Pekala. Yani bu epeyce oldu çemberler sadece üzerinden atlamak için yazma, devlet sizin Merhaba, Nik adını ve. Ama mesaj geçen bu basit bir fikir, Giriş ve çıkış alma geçen bölgesinin biz gidiyoruz modeli tam olarak Hatta en karmaşık fonksiyonlar için. Yani ikiniz için çok teşekkür ederim. Biz güzel bir stres var Burada senin için top. Ve bizim getString teşekkür ederiz hem ve printf gönüllüler. Teşekkür ederim. Pekala. Size hem teşekkür ederiz. Yani biz bahsediyoruz oldum Şimdiye kadar çoğunlukla dizeleri hakkında. Ve o C gerçekte olabilir çıkıyor bir kaç farklı veri türlerini kavrar. Aslında, en alalım Bir buradaki bak. Yani C ve dillerin bir sürü karakter denilen şeyleri anlamak. Bir karakter genellikle bir tek bayt veya sekiz bit. Ve tek bir karakteri temsil, harfi A, ya da sermaye benzeri A harfi, ya da küçük harf Bir veya bir ünlem işareti, ya da herhangi bir karakter yazabilirsiniz o Klavye ve bazen daha fazla. Biz de yüzen görmek olur. Düz bir genel olarak bir 32-bit değeri, ya da dört bayt Yine, çünkü bir bayt sekiz bittir. Yani bir şamandıra bir kayan nokta değeri, Bir ondalık noktasının olan bir şey. Ve gerçekten de, bu ne var Film konuşuyordu Onlar yüzen hakkında konuştu ne zaman puan değerleri, bit bazı sabit sayısı Gerçek bir sayısını temsil etmek için kullanılır. Ama aynı zamanda iki katına denen şey var. Bunlar, Java ana kadar Eğer APCS aldım eğer, ve bir çift olarak adı minnetle anlaşılacağı iki kez şamandıra kadar büyük. Hala bir gerçek sayı, Sadece daha fazla bit var hangi ile, her zamankinden daha hassas olmaya hatta daha büyük sayıları depolamak için. int kolaydır. Biz o son kez konuştuk. Bu sadece bir tamsayı var. Ve genellikle 32 var bit ya da dört bayt. Ve böylece, varsa, şimdi görelim 32 bits-- ve biz hafta 0 yaptı, Eğer varsa bu kadar briefly-- 32 bit, büyük ne Eğer bir tamsayı olarak temsil edebilir sayısı? Al yada ver? Bu, 4 milyar gibi ve biz konum sadece var Pozitif sayılar sadece temsil eder. Eğer 32 bit var ve isterseniz hem de olumsuz sayıları temsil, senin aralık esasen, negatif ise 2 milyar pozitif 2 milyar. Ama genelde biz başlayacağız 0 ° C'de 4 milyar kadar gitmek. Sen tam bilmek zorunda, ama yok Sadece biz, aslında, bu görebilirsiniz Burada, küçük bir hesap açmak. Ben 32 2 yapmak ve olabilir Bu tam olarak nasıl büyük, Kaç değerler yapabilirsiniz 32 bit ile temsil etmektedir. Ve kabaca 4 milyar bulunuyor. Yani biz bu sayıyı görmeye devam edeceğiz Bir kaç farklı yerde. Ama artık ihtiyacınız varsa Bunun dışında sayılar, o orada 's çıkıyor bir şey uzun uzun bir denir. Ve uzun uzun Genellikle 64 bit, hangi bu büyüklükte bir sipariş demektir bir int bile daha büyük. Yani ben bile büyük telaffuz edemez Eğer temsil edebilir sayı, ama belirgin büyük. Şimdi bir kenara, tarihsel, Bir int 32 bit ise, ve uzun uzun 64 bit, nasıl Büyük uzun değil, uzun uzun nedir? Bunu bir int daha uzun olduğunu düşünmek istiyorum ama belki daha uzun daha uzun uzun, ama aslında bağlıdır. Ve böylece bir çıkıyor çok hayal kırıklıklarının, Belirli sistemlerde kod yazma ile olduğunu, bu veri türlerinin hepsi önceden belirlenmiş değerlere sahiptir. Bazen bu kadar çok bit var. Bazen birçok bit var. Yani aslında bilmek zorunda, bazen, hangi donanım Eğer sizin yazılımı çalıştıran ediyoruz. Neyse ki, diğer diller ve Şimdi mevcut diğer veri tipleri, Eğer daha hassas olmasını sağlar. Peki, biz, dize gördüm ve biz de bool gördüm ama o gelip çıkıyor Sadece CS50 kütüphanesi ile. Yani o inşa edilmez C. halinde olanlar, bunun yerine, denilen dosyada gel CS50.h ki biz sonunda olacak katmanlarını geri soyma. Ama şimdi, onlar sadece konum ek veri türleri. Bir bool bir doğru ya da yanlış, ve a Dize bir karakter dizisidir, Bir kelime gibi. Şimdi printf, biz gördük, sahip tutucular,% s biridir. Ve sen, şimdi, mümkün olabilir Bu diğer örneklerde, kimden nasıl anlaması Eğer bir yer tutucu olabilir Farklı veri türleri için. Örneğin, bir tahmin almak eğer kullanarak tek kömürü dışarı yazdırmak istedim printf, yer tutucu muhtemelen% c. Ve bir yazdırmak istiyorsanız Yer tutucu,% i ile tamsayı. % lld, uzun uzun ondalık değer ama çok uzun, o eşleştiren böylece. Kayan ve daha sonra% f puan değeri veya bir çift için, bu yüzden bazen yeniden alıştığınız farklı bağlamlarda. Yani biz görmek ve kullanacağız zamanla olanların bazıları. Printf ve diğer fonksiyonlar ve Destek başkalarının kaçış dizileri, ve bazen de, bu gerekli değildir. Yani ters eğik n yeni bir çizgi vardır. Backslash t, herkes yapar bir bıçak almak ister misin? KİTLE ÜYE: Tab. DAVID J MALAN: Tab. Aslında istiyorsanız Bir sekmeyi değil yazdırmak için alanlarda sabit sayıda ancak gerçek sekme karakteri, sen sizin yanınızdaki basmayın, klavyede sekme, anahtar, genellikle, aslında ters eğik çizgi t yapmak. Backslash çift tırnak, Neden şimdiye kadar böyle isteyeyim? Sağ? Neden sadece bir yazamaz Benim klavyede çift tırnak? KİTLE ÜYE: Aksi takdirde, bu, Çünkü bu sonu düşünmek için gidiyoruz Sizin baskı [beğendin mi? Metin. ?] DAVID J MALAN: Kesinlikle. Ile Unutmayın bizim printf örnekler, ne zaman biz giriş printf geçerken, Bu giriş dizesi solunda ve bu girişin sağında bahar, tabii ki, bir çift tırnak oldu. Kendi giriş çift varsa, Bunun ortasında alıntı Bilgisayar potansiyel olabilir olarak, karışık, Bu çift tırnak yapar ortada aittir? Sol biriyle aittir? Doğru biriyle aittir? Ve böylece, süper bunu yapmak istiyorsanız açık, çift tırnak kullanılan karakterler yapmak, o kaçtı, böylece tabiri caizse, ve Başka bir şey için conflated değil. Ve, burada birkaç diğerleri var ters eğik çizgi r tek tırnak, 0, biz de, zamanla görebilirsiniz. Ve şimdi ne işlevleri hakkında? Biz bugüne kadar alabilir eylemler Yani Bu dilde, C, iyi, biz gördük, Printf, tabii ki, ve Ekranda başkalarının, Burada, biz kullanacağız olduğunu Sadece dersin ilk birkaç hafta, zaman CS50 kitaplığı geliyor. Ve onlar, çok daha kolay hale C, aslında kullanıcı girişi alır. O C çıkıyor ve Açıkçası birkaç dilde, bunu yapmak için boyun gerçek bir ağrı var istemi kullanıcı gibi basit bir şey, onun girişi için klavyenin için. Ve böylece bu fonksiyonlar kolaylaştırır. Ve aynı zamanda hata var boyunca kontrol bu yüzden sizi, o Çarşamba biz üzerinde çağırmak , yeniden, uyarı gördüm Ben işbirliği vermedi, ve ben bir kelime yerine bir dizi yazdınız? Biz erken ağır kaldırma yaptık kullanıcı işbirliği emin olun. Ama bunlar sadece eğitim vardır biz sonunda olacak jantlar, ve hızlı bir şekilde, çıkar. Özetle, sonra, en hızlı bir göz atalım, Biz Scratch en yaptığımız gibi çok C. bazı kanonik yapılar Bu tür içindir arasında, bir kasırga tur olacak, Sadece böylece bir referans var ve ilk başta bir şeyler gördük. Ama sonra biz gerçek kodlama bakacağız Bu yapı taşlarından bazılarını kullanmak. O kadar Scratch gibi, Biz ifadeleri gibi ne zaman, C biz var, bekleyin, söylemek ya da Printf gibi iyi işlev görür. Biz durumu ifade etmek istiyorsanız, C, o ruhu, benzer, Bu puzzle parçasına o Scratch böyle görünüyordu. Ama onun yerine, biz Gerçekten sadece eğer, yazma. Sonra, parantez içinde, Biz bir koşul koymak, Bu durum nerede ne olacak Bir boolean deyim, yine arayın. Ve yine, bu pseudocode tür. Ve aslında, // bir yorumdur. Bu sadece kendime İngilizce kelimeleri var. Ama bu genel bir Bir eğer durumun yapısı. Ama biz beton görürsünüz sadece bir an örnekler. Eğer olmasını istiyorsanız Yolun iki yönlü çatal, gibi çok biz bizim gönüllü ile yaptığımız Çarşamba, başka eğer, bir olabilir. Ve bir üçüncü olmasını istiyorsanız ve Son durum veya varsayılan durum, Orada sadece bir başka blok olabilir. Ve benzer şekilde, boolean ifadeler ile, Onları birlikte can ve. Ve biz, Çarşamba günü gördüm tek bir işareti değil, Bu alt düzey nedeniyle, iki olduğunu Sonunda görmek ve birlikte oynayacağız. Şeyleri bir araya Or-ing 2 dikey çubuklar olduğunu. ABD klavyesinde, bu anahtar genellikle Yukarıdaki Shift tuşu ile senin Enter tuşuna veya tuşuna dönün. Sonra bunları var ki Biz bir veya iki kez belki kullanacağız. Onlar işlevsel olarak eşdeğer olan eğer başka ne varsa, bir ile yapabilirsiniz, else eğer, inşa, ama onlar anahtar denir. Onlar çok farklı görünüyor, ama biz olacak Bizim dağıtım kod bazı görmek, gelecekte bir sorun kümesi için, büyük olasılıkla, Sadece bazen güzel olduğunu bir bütün ifade yolu koşulların demet, küme ayraçları bir sürü kalmadan ve Parantez ve girinti bir sürü. Ama onlar bize artık vermek Güç biz zaten var daha. Ve şimdi döngüler. Ve bu, biz bakacağız daha yavaş biraz da. Ama sonra, bu kullanmaya başlayacağız, Özellikle zaten tanıdık olanlar için. Bu eğer inanılmaz, kurallı bir yoldur arcane yolu, C. bir döngü yazmak için Şimdi Scratch bir döngü oldu Oldukça basit. Sen, sonsuza, blok var. Sen, tekrar, blok ile var Sadece bir sayı yazmanız gerekir. Ve, için döngü ile yapabilirsiniz bu fikirlerin ikisi de uygulamak ama biraz daha teknik bir konu. Ama açıkçası, o da var nispeten basit. Eğer sırasını öğrendikten sonra operasyonlar, kelimenin tam anlamıyla Sadece değerlere takmak için gidiyoruz ve ne yapmak için bilgisayarı söyle. Yani burada bir örnek. Bu bir döngü olduğunu, oldukça sadece bir sayı kadar sayar Başka yoluyla. Ve sadece bakarak tarafından Eğer varsa bile, en ile önceden deneyim Bu dil, hangi sayıyı muhtemelen sayma başlar? Tamam, 0. Ve ben senin yüzünden olduğunu tahmin ediyorum Bir int ve bir ben var olduğunu görmek hangi bir değişkendir. Bu 0'a başlatıldı oluyor. Ve daha sonra, bu gibi görünüyor Biz bir değer printf geçiyoruz. Ve aslında, ben burada küçük bir yazım hatası yaptı. Ama bu kolay sabit oluyor. Beni burada, i ekleyelim. Biz şimdi printf varlık var Bu yer tutucu değerini geçti. Ve aracılığıyla saymak ne oluyor? HEDEF KİTLE: 50. 50. 49. DAVID J MALAN: 49. Yani 50, ilk bakışta doğru gibi görünüyor. Ama bu, o çıkıyor, olacak biz kontrol etmek bizim durum. Ve biz bir kez durdurmak için gidiyoruz Artık 50 daha azdır. Yani bu döngü tersine, gerektiği çok uzun ben 50 daha az olduğu için, yürütün. Ama 50 ya da 51 olduğunda en kısa sürede, ya da daha kötüsü, otomatik olarak durması gerekir. Pekala. Peki aslında ne oluyor burada? Yani bu sırasıdır Bir döngü için işlemler. Bir, sen var başlatma sözde. Bu sarı vurgulanan yığın kod, ilk olarak yürütülür ve etkisi, başına sahip Çarşamba, muhtemelen hayal. Bu değişken i ve denir oluşturur Bu değişkende saklar değeri 0. Yani ben hikaye bu noktada 0 olduğunu. Bir sonraki şey Bu yapıda olur, durumu kontrol alır olmasıdır. Yani, hemen kontrol Ben 50 daha azdır? Ve tabii ki, cevap Şimdilik evet, elbette vardır. Evet i, 0, çünkü Bu kesinlikle 50'den az var. Sonra ne olur, bu olduğunu kod satırı idam alır. Ve aslında, eğer birden fazla var Bu küme parantezi kod satırları, hepsi birbiri ardına idam olsun. Ve burada etkisi olduğu Görünüşe göre, yazdırmak için gidiyor numara i 0 ve daha sonra 1 ve 2. olacak. Ama neden? Neden artırılır olsun ki? Peki, dördüncü şey olur bu sözdizimi olduğunu noktalı virgül sonra, idam olur. Ben söyleyerek bir kestirme yoludur ++; i değerini alır ve buna 1 ekleyin; ve daha sonra sonraki sefer eklemek Buna 1; ve sonraki sefer, buna 1 ekleyin. Yani biz devam edersek, Ne ne olacak Bir sonraki ben gitmiyorum olduğunu Bir daha i başlatılamadı. Ben başlatılıyor devam ederse i 0, bu örnek Çünkü bitmezdi Ben 0 sıkışmış olacaktır. Ama ne olacak ne durumu kontrol edilecektir, kod satırı idam alacak, i artırılır durumu kontrol edilecek, kod çalıştırılır alacak. Ve, yine bisiklet tuttu ve yine, ve yine, i kadar ++ 50 değerini neden olur. Koşul, der 50'den 50 daha azdır? Cevap, tabii ki, hayır ve böylece bütün kod yürütme durur. Ve ekranda daha fazla kod varsa altında, bir sonraki ne olur. Bu küme ayraçları dışarı çıkar ve bundan sonra daha yazdırmaya devam eder. Yani Foxtrot Şimdi bir şaka, o belki şimdi anlayacaksınız. Her zaman komik. Bu chuckles gibi tür, süzülmek ve sonra fark yapmamalıdın Böyle mizah gülüyor olacak. Ancak bazı paket var Burada, pedagojik, çok. Yani ben çıkıyor sözdizimi bir parça eksik, veya Foxtrot en eksik Burada sözdizimi parçası. Ne biz yaptık, eksik her örnekte, bugüne kadar? İade, yani, orada Bu, başka bir şey Daha önce uzun geri geleceğiz. Ne eksik olsa? Evet. KİTLE ÜYE: [duyulamaz] başlatılması. DAVID J MALAN: Tamam. Yani evet. Yani aslında, bu Kuyu bu--, ve sayım başlatıldı Yukarıda yukarı, ya da daha doğrusu, yukarıda kadar ilan etti. Yani bu bunu yapmanın başka bir yoludur. Ama bir satırda olsa geçerlidir bu. Buraya ne dersin? KİTLE ÜYE: Bu kaşlı mı? DAVID J MALAN: Evet. Yani kaşlı eksik. Ama bu kod, ben kredi için, yani, Aslında, sözdizimsel geçerlidir. Bu çıkıyor, değil mi küme parantezi gerek Sadece bir kod satırı varsa o Eğer döngü içinde yürütmek istiyoruz. Şimdi biz her zaman, sınıfta ve Bizim dağıtım kod tüm küme parantezi dahil Neyse, sadece Açıklık aşkına. Ama ders kitaplarında fark ve çevrimiçi örnekler, sen çok iyi kıvırcık görebilirsiniz bazen eksik parantez. Ve bu, Tamam ne varsa girintili ve amaçlanan var kodu sadece tek bir satır ve değil Potansiyel kod birden çok satır. Pekala. Konusuna Yani ilgili belirsizlik, taşma bir konudur anlamda bu, benzer şekilde, tamsayılar onlara sınırları var sadece nokta değerleri yüzer gibi? Dünyada bir kayan nokta olarak değerleri, sadece bu kadar ince olabilir Bazen, daha sonra Kötü şeyler, olabilir ve bizim programları arabası ve hata olabilir. Şimdi bile tamsayılar ile, sorun haline çalıştırabilirsiniz. Şimdi bir tamsayı bir yok ondalık nokta veya ondan sonra sayılar. Genellikle, sadece bir doğal sayı var. Yani bir int ile ne yanlış gidebilir? Ben bir int için kullanıyorum varsa , ne yanlış gidebilir sayısı? Çok basit görünüyor. Evet. KİTLE ÜYE: Eğer numara alır [duyulamaz] DAVID J MALAN: Evet. Eğer çok yüksek saymak sen misin ne Bu gerçekten büyük bir sayı ifade edemez. Sağ? Bir noktada, sen gidiyorsun sınırlarını aşmayacak şekilde Bir 32-bit değeri ya da bir 64-bit değerinin bir. Şimdi tekrar, nasıl emin değilim 64-bit değeri okunur, ama 32-bit tamsayı biliyorum, bu olabilir büyük değer, sadece pozitif ise değerler, kabaca 4 milyar olduğunu. Ben 5 milyar saymak çalışırsanız Yani, Bir şey olacak. Ama aslında, neler olabileceğini, görelim. Tamsayı dünyasında Taşma, nerede, bir anlamda, Bir kapasitesini taşma tamsayı, ne olur acaba? Yani burada bir ikili sayı, 0'a bir gerileme var. Her 1'ler ve tutucuları var Orada, 2 yetkileri vardır bu nedenle bu ikili. Peki bu ekranda 8, 1 bit. Ve sen çağırmak ya da eğer hızlı bir şekilde matematik yapmak, Ne değer temsil ediliyor Burada bu sekiz 1 bit? 255. Ve oldukça emin değildi bile matematik, bunu dışarı yapabilirdi. Ya da sadece bir tür olabilir nedenle bunun üzerinden, Ben eğer, bir dakika bekleyin 8 bitlik bir değeri temsil eden, ve ben 256 olası değerleri var, ancak birinci 0, Ben sadece biliyorum En büyük, 255 olacak ve bu biri olabileceğini budur. Yani bu değere 1 eklemeye çalıştığınızda varsayalım. Eğer sınıfta ne yapardınız Okul 1 ekleme ve zaman Gerçekten çünkü uymuyor Eğer 1 taşımak zorunda? Gidiş bu sayı nedir Eğer 1 eklerken olmak? O 0 olmak için gidiyor. Sağ? Daha bits-- vardı ve eğer Çünkü olacak , tür, denemek var-- yazın dışarı Biz daha fazla bit, olsaydı ne 1 ekleyin olduğunu burada yapabileceğini, ve sonra biz bu olsun istiyorum. Whoops. Biz buraya bir 1 Biti tüm yol olurdu. Ancak bu sonlu ise değer, sadece 8 bit var, ve önceden belirlenmiş var: bilgisayar tarafından, 1 etkin bir şekilde orada değil. Bu sadece tür bir uçurumdan düşer. Ve böylece 255 1 eklerseniz ne Görünüşe göre değeri alabilirim? 0. Ve kazara sayılar, böylece, ve belki de istemeden, Bu gibi etrafında sarma sonuna kadar. Peki bu ima olabilir? Eh, birkaç farklı şeyler var. Yani bir bu görsterme yok 0 gibi, istemeden, ama ne tür görebilirsiniz Hatta gerçek dünyada, iyi ya da kötü, Bir sınırın bu düşüncenin tezahürleri. Örneğin, birisi sizin için kim Hiç Lego Star Wars oynamıştır, Herkes biliyor mu jeton sayısı Eğer Lego Star Wars toplayabilir? Dayalı bir tahmin almak Günümüzün önde gelen sorular. Bu 256 ya da 255 daha büyük. Bu 4 milyar bulunuyor. Bu yüzden çıkıyor ve Bazı people-- var Bazı googling teyit son akşam-- 4 milyar altın sikke aldık, ya Lego Star Wars etajer. Görünüşe rağmen, var Bir yol oyunu kandırmak için, Bir hata veya özellik var, o yapmanızı sağlayan sadece çok ve çok puan tahakkuk. Ama en büyük olası değer, uygun Birisi I Bu ekran görüntüsü için çevrimiçi bulundu, aslında 4 milyar olduğunu. Şimdi neden? Bu, tam olarak 4000000000 var: Muhtemelen birileri karar çünkü, kim bu oyun yazıyordu, Onlar 4 milyar yapabileceğini, bir şey, bir şey, bir şey, değeri gibi koymak hesap makinesi ile daha önce ama bu insanlar için sadece küçük bir temizleyici maksimum sayıda söylemek coins-- veya çivilerin, onlar sizin bu them-- dediğimiz gibi toplayabilir 4 milyar olduğunu. Ve böylece, bu neden? Nasıl LEGO oyunu sayaç uygulama Bu takip tutuyor Sahip jeton sayısı? Onlar neyi kullanıyorlar? KİTLE ÜYE: Bu durdurur 4 milyar sonra sayım. DAVID J MALAN: Bu durdurur 4 milyar sonra sayma, hangi anlamına gelir Bir programcı olarak, anlaması, Muhtemelen olduğunu 32 bitlik tamsayı kullanarak. Programcı gibi kelimenin tam anlamıyla sadece tip, int, onun kod, ve bu değişkenin tipi olduğunu Onlar birinin kodunu depolamak için kullanıyoruz. Yani diğer belirtiler var limitlerin bu tür. Yani bu galibiyet oynadı değil ve ben tarihe kadar okuyor much-- olarak ama teyit etmek Uygarlık, özgün sürümü görünüşte her etkileşim Diğer ve savaş ya da barış olabilir, Gandi biri olması gerekiyordu en huzurlu karakterler, ben İlk olarak, bunu anlamak Uygarlık sürümü. Ve aslında, 1 ila 10 arasında bir ölçek üzerinde Onun saldırganlık sadece 1 oldu. Yani her zamankinden çok hafif agresif, görünüşe göre. Ama bir noktada, görünüşte yapabilirsiniz senin coğrafyada demokrasi yükleyin. Ve eğer demokrasiyi yüklerseniz Oyunun sürümü içine, sonra saldırganlık düzeyi iner. Bu iyi bir şey. İnsanlar daha sakin olan Görünüşe göre, bu durumda. Ama görünüşe göre, birisi yaptı Bir, eğer, durumu yok kodun orijinal versiyonu. Yani Gandi'nin saldırganlık düzeyi gitti 1 olumlu, eksi 2, 1 negatif, ama oyun değil Negatif sayılar anlıyorum. Peki ne oldu Gandi'nin saldırganlık oldu seviye, 1 negatife, 0, 1 gitti etkisi vardı olmanın etrafında sarma en agresif karakteri Oyunda, 255 değerinde, 1 ila 10 arasında bir ölçekte. Ve o zamandan beri, var oldu Bu oyunun daha enkarnasyonları, ve onlar gibi sakladım Paskalya yumurtası bir tür, Gandi görünüşte olduğunu bu yüzden korkunç agresif. Ama sonucudur çok basit bir programlama hatası Oyunun çok erken versiyonu. Şimdi daha rahatsız edici, daha Son zamanlarda, Boeing 787 Bir sahip olarak belgelenmiştir Cihazın hata değil, bir tür Eğer özellikle bir hata olmasını istiyorum. Ve belirtiler, ben okuyacağım Burada, çevrimiçi bir makaleden, Bu bir model 787 uçak oldu Bu sürekli desteklenmektedir edilmiştir 248 gün boyunca tüm kaybedebilir alternatif akım, AC, nedeniyle elektrik enerjisi, Jeneratör kontrol üniteleri, GCUs, eş zamanlı olarak Fail-güvenli modda girmeden. Yani bu verilen bir uyarıydı Bu sorun keşfedildi zaman. Bu durum ortaya çıkar Bir yazılım sayacı ile, , GCUs iç yüzden bir tamsayı veya değişken, 248 bundan sonra olacak taşması Sürekli güç günler. Boeing sürecinde Bir GCU yazılım güncellemesi gelişmekte olduğunu güvensiz durumu düzeltmek olacaktır. Füze gibi O kadar senaryo, burada Onlar değişken bir tür vardı Bu, sayma ve sayım ve sayma, ama yavaş yavaş taşan onun yeteneği sınırları, Benzer lanet uçağı yaptı değişken taşma var çalışan yeterli süre sonra. Ve böylece dil-yanak yolu Bu soruna geçici bir çalışma Gerçekten, yeniden doğmuş gibi, senin uçağın her etmektir Bellek sildi alır, böylece 247 gün, ve değişken 0 geriye gider. Ama fark bu çok olduğunu Yazılımın büyük vücut bulma, ama biz Apple'ın duymak özellikle otomobil girmeden işletim sistemlerini, Google'dan araba kendi kendine sürüş ve Yazılımın incarnations herhangi bir sayıda Bizim günlük yaşamlarını, TV'lerde ve saatler, ve daha fazlası, yazılım tarafından çevriliydi fark, bütün bunlar bize insanlar tarafından yazılmıştır. Ve hepimiz yakında keşfedeceksiniz olarak, çok kolay ve çok tipik yazılım yazarken hata yapmak. Ve sen onları yakalamak yoksa, Bazı kötü şeyler olabilir. Şimdi bazen, bazı komik şeyler, olabilir ya da en azından bazen Bazı kötülüğü beklemek biliyorum. Yani 0 sınıftan 0 bölü Okul, genellikle kötü bir şeydir. Bu tanımsız var. Ve konrtol döner ve en olmadığını görelim Bu alabilirsiniz benim mikrofon o Apple up-- Son zamanlarda bu bazı eğlendim. Yani burada bir iPhone var. Ben Siri konuşmak ve ona soracağım Bana 0 bölü 0 cevap vermek. 0 0 ile ne bölünür? SIRI: Eğer 0 olduğunu düşünün Çerezler ve eşit olarak onları bölmek 0 arkadaşlar arasında. Her kişi kaç kurabiye alıyor? Görmek? Bu mantıklı değil. Ve kurabiye canavarı üzücü hiçbir tanımlama vardır. Ve o üzgün Eğer hiçbir arkadaşlarım var. DAVID J MALAN: Bu iğrenç tür. Yani bu sadece orada söylenenleri olduğunu. O tanımlı değil, belirsiz değil, ve aslında birçok programlama dilleri ya da gerçekten, derleyiciler olacak ne zaman bir program tespit, 0 ile 0 bölmeye çalışın. Bu olsa daha eğlenceli olduğunu görünüşe göre, Cookie Monster Bugünlerde Twitter'da olduğunu. Ve o bu ile, bu cevap, hangi kesinlikle çok güzel. Ama kısaca bir göz atalım Diğer yapıların bir çift, ve sonra bu biraz koymak Kod iyi şekilde kullanmak. Bu yüzden yanında, çıkıyor döngüler için, var şey bu, bir while döngüsü denilen farklı görünüyor ve uygulanmaktadır Biraz differently-- ve Biz sonunda examples-- görürsünüz ancak bir anlamda, bunun nedeni basittir Eğer başlatmak için izin vermez ve döngünün sınırları içinde güncelleyin. Hala bunu uygulamaya olabilir. Yani aynı şeyler yapabilirsiniz Bir süre döngü ile döngü bir olduğu gibi, ancak sözdizimi, ultimately-- biz sonunda olacak şekilde see-- farklı olacak. Bir do, döngü sırasında bile var olan aslında biraz farklı bu ise için döngü ve her zaman bir while döngüsü eğer, öncelikle kendi durumunu kontrol Eğer alt bu şey üst okumak o gidiyor gibi bu tür görünüm bu kadar geçen çünkü 's durumunu kontrol kod gerçekten son satırı. Ve gerçekten de, bu yararlı olacak Biz yazmak belirli programlara, Eğer sadece körü körüne bir şey yapmak istiyorsanız ve sonunda durumunu kontrol edin. Bu mutlaka kötü bir şey değil. Biz değişkenleri istiyorsak, yapabileceğimiz farklı şekillerde bir çift. Ve biz fokstrot gördüm karikatür, bunu yapmanın bir yolu, Nerede sizin değişken bildirmek, int sayaç noktalı virgül gibi, ve sonra belki bir sonraki later-- çizgi, belki 10 satır later-- aslında başlatılamadı. Kod Peki bu 2 satır int türünde bir değişken bildirmek o verir, böylece ve sayaç diyoruz Beni yeterince bit bir int tutun. Ve sonra sonunda, bu koyar Bu değişkene değer 0. Bir 0 ve 1 's düzenler desen, biz geçen hafta biliyorum, Biz 0 olarak biliyoruz sayısını temsil eder. Ya açıkçası, bu kadar yapabilirsiniz daha özlü, sadece bu gibi. Şimdi biz de var işlevleri çağırmak için yeteneği. Ve aslında, burada bir 2 satır var Program, ya da bunun bir alıntı, aslında bize izin verir Bazı kod yazmak user-- bir dize alır çok Bizim gönüllü bir an gibi önce-- sonuç olarak depolamak isim adında bir değişken, ve sonra-- çok bizim gönüllü olduğu gibi Bu değerler üzerinden printf-- baskılar İki argüman olarak ileterek, Dize, değişken ardından isim, kendisini aradı. Yani önce, bir göz atalım Biz oraya Mario gelmek Bu şimdi, örnekler bir çift. Ben önde ve açık gidiyorum yukarı, işlevi-0.c, diyelim. Ve her zaman olduğu gibi, bu kodu dersin web sitesinde mevcuttur, böylece de birlikte oynayabilir Ev ve daha sonra bakmak. Bu kadar ama burada program hat 17 ile 22 özü. Ana program olduğu programı her zaman başlayacak. Bu program, görünüşe göre, gidiyor , kolon adını yazdırmak için. Daha sonra, getString arayacak tıpkı bizim gönüllülerle yaptı. Ve sonra, bu, ilginç o PrintName arayacak. Orada, bütün bu süre çıkıyor PrintName olarak adlandırılan bir fonksiyonu olduğu görülmektedir. O birinin adını yazdırır. Biz gelen printf kullanmaya gerek yoktu yesteryear, PrintName var. Ama bu yanıltıcı PrintName değildir, çünkü C. İnsanlar vermedi gel yaklaşık 40 ya da 50 yıl önce icat, Bunun yerine, yaptım. Ve aslında, ben kaydırma eğer ayrıca, haber aşağı Benim kendi yazabilirim nasıl C. fonksiyonları Biz sonunda olacak diyerek devam niçin, boşluk, birkaç yerde, ama bugün için, haydi Sadece adının bak. Hat 24 üzerinde, isterseniz Kendi işlevi oluşturmak kelimenin tam anlamıyla yazmak Fonksiyonun adı. Ben PrintName seçti. Parantez olarak, Daha sonra belirttiğiniz ne tür girdilerin, ve kaç Bu işlev almak istiyorum. Bu durumda, ben almak istiyorum Denilen 1 değişken, isim, ve bunun olacak türü, dize, bu yüzden gidiyor bazı karakterler dizisi için. Ve sonra, bu program-- Scratch gibi çok, özel bulmaca olabilir pieces-- Bu özel davranış sahip oluyor. Bu printf arayacak geçen, merhaba, yer tutucu, ve daha sonra fiş gidiyor ne olursa olsun kullanıcı denir. Yani bu bir örnek nedir Bir bilgisayar bilimcisi olur Çağrı soyutlama veya fonksiyonel Sadece olan ayrışma, saying-- eğer mı fantezi yolları Eğer bu üst düzey fikri hoşuma gibi işlevselliğini istiyorum Kesinlikle, birinin adını yazdıran Kelimenin tam anlamıyla, sonra printf yazabilir ve İstediğiniz argüman olarak geçmesi, ve program çalışacaktır, Çarşamba beri olduğu gibi. Ama uzak soyut başlayabilirsiniz Bir isim yazdırmak kavramı. Sen buna bir isim verebilirsiniz, PrintName ve bunun gibi Haftanın 0 dan katmanlama bu fikir. Bundan böyle, ben ve bilmek zorunda değilsiniz veya PrintName nasıl uygulandığını önemsiyorum. Evet belki, printf kullanır kim kullanır bilir ne, değil mi? Kim umursar? Şimdi ben burada konuşuyorum, yerine aşağı buradan. Ve gerçekten, bizim programlar olsun daha gelişmiş ve sofistike, hafife biz almaya devam edeceğiz Alt düzey puzzle parçaları var olduğunu. Biz onları yazdım çünkü ya da bir başkası, bu yüzden yaptım biz o zaman onları üstüne inşa edebilirsiniz. Şimdi bu bir göz atalım varyant, bir işlev. Yani bu bir biraz daha var Gelişmiş, ama çıkıyor CS50 kütüphanesinde bu, Sadece GETINT fonksiyonu var. Biz, yıllar önce, düşünmüyordu Bir GetPositiveInt işlevi uygulamak. Ve bu biraz sinir bozucu çünkü eğer Siz bir program olup, yazıyoruz Eğer olumlu bir almak istiyorum kullanıcı arasında bir tamsayıdır, kesinlikle GETINT kullanabilirsiniz. Ve kesinlikle ile kontrol edebilirsiniz durumu ve belki bir döngü Bu int büyük olduğu takdirde ve 0'dan kullanıcı bağırma o vermezse Eğer pozitif bir sayı. Ama bu oluşsun Bina, bir kendimizi engellemek, Özel Scratch parça, eğer sen. Bir program için gidiyorum Burada sonuçta, ben arama yapabilmek istiyorum GetPositiveInt ve ben olmak istiyorum Bu int ne olursa olsun yazdırmak mümkün. Ama bu artık uzak soyutlanması edilir. Bu sadece yüksek düzeyde verilmiş oldu ne yaptığını söylüyor isim, o çünkü harika olan okumak artık çok kolay. Umurumda yaparsam ne altında var Kaput, beni aşağı kaydırma olsun. Ve biraz korkutucu olduğunu İlk başta, özellikle Bu ilk program ise, ama en bir göz atalım. Ben artık geçersiz diyorum işlevleri çıkıyor, çünkü çok getString gibi, can Bana bir değer döndürür. Onlar sadece yok ekrana yazdırmak için, aslında teslim edebilirsiniz geri bana bir şey. Ve PrintName önce ise, Hiçbir şey geri gerek yoktu. Ben yan etkisi gerekli bir şey, ekranda gösteriliyor ama bir insan gerek yoktu Bana bir şey geri el. Burada, GetPositiveInt ile GETINT olduğu gibi, Ben geri bir şey teslim etmek istiyorum. Yani, boşluk değil söylüyorum hat 23, fakat int üzerine, hangi diyor, bu işlev Ben yazıyorum, GetPositiveInt gidiyor denilen bir tamsayı değil, hiçbir şey beni geri ver, hükümsüz değil. Bu arada, hayır almaya gidiyor girişler, bu yüzden, tür, bunu tersine ettik. Ben GetPositiveInt herhangi vermeyeceğim girişi, ben bana çıkışını vermek istiyorum. Sonra ne olacak şimdi? Yani burada bir değişken bildirebilirsiniz nasıl. Ben, döngü dışında yaptık biz sonunda göreceğiz nedenlerden dolayı, ama bu sadece verir Bana 32 bit olarak adlandırılan, n, ve ön-belirleyici ettik Onları tamsayı saklamak için. Ve burada, yapı iken yapmak var yararlı yüzden ve bu olduğunu. Kelimenin tam anlamıyla bunu, n 1 'den daha az olduğu görülmektedir. Yani ne olacağını görelim. Ben, lütfen çıktısını Bana olumlu bir int verir. Sonra CS50 en kullanarak, bir int olsun fonksiyonu ve n saklandı. Ve sonra, kod satırının muhtemelen mantıklı, sonraki idam olur? Hangi satır numarası? Evet, bu yüzden 31. Eğer ettik kadar bu bilemeyiz söyledi ya gerisini sonucuna edilmiş, ama bu doğru değil. Bu yukarıdan aşağıya gider ve sonra yinelenen tutar. Ben sayısı, diyelim ki yazdığınız Yani eğer 1 negatif, 1 eksi daha n az? Evet. 1 olumsuz 1 'den daha az olduğu için. Peki ne olur ki? Bunu yapmak için gidiyorum n, en az 1 iken, bu yüzden geri hattına 28 gidiyorum. Ve her defasında bir ve en bu-- çalışmasına izin Fonksiyon 1 derlemek için yapmak, ve şimdi fonksiyonu 1. çizgi nokta. Negatif 1 yazarsanız, bu kadar bana bağırmaya devam edecek Her için işbirliği kadar Benim girişlerin en az 1 'dir ve daha az 1 iken ise, Ben bunu yapmaya devam edeceğim. Sonunda 50 gibi o bir numara verirseniz, Neyse ki, bu 50 için teşekkürler, diyor. Neden? N, daha az olmadığı için en kısa sürede 1, ben, bu döngüde saplanıyor durdurmak ve bu yeni kelime bugün, Dönüş, tam anlamıyla bunu yapmaz. Yani sadece bir yer, uyguladık duygusu, getString eşdeğer, nerede geri teslim ediyorum kim, bazı değer beni kullanıyor. Öyle olmak zorunda değildir bir dize, bir int var. Hızlı, Yani basit örnek ama biz yakında olacak Biraz daha sofistike bakın Hala sürümleri. Aslında, en bir bir göz atalım return.c adlandırılan sayısal biri. Ve bu aslında Biraz daha basit. Yani bu programın amacı içinde Hayat-- en derleyip çalıştırmak izin, yani nokta, dönüş yapmak çizgi, return-- haber program sadece değeri 2 küpler. Bu, zor oldukça aptal oluyor kod, herhangi girdileri almaz, ancak başka göstermek yapar Kendimi yazdık işlevi. Yani burada, ben ilan ettik Değişken, int türünde, x denilen sayı 2 eşit tamamen keyfi. Bu sadece bazı kabarık baskı yapıyor. Bu x söylüyor şimdi, böyle ve Böyle, cubing dot dot dot. Ve sihirli hattında 21 görünüşe göre. Ben, küp adında bir işlevi arıyorum, Ben bunu bir kâğıt teslim ediyorum üzerinde yazılı sayı 2 ile, ve ne gibi bir değer, matematiksel, Ben bunun dışında almak istiyorsun? Sadece bir sağlamlık denetimi olarak? 8. Sağ? Ben 2 2, geri küp istiyorum 3 güç, yani 8 geri. Peki küp uygulanır? Peki, burada aşağı uygulamaya olduğunu fark. Ve hemen önce olduğu gibi, mantıksal, Hatta sözdizimi muhtemelen olsa Size pek çok yeni, Ben bu işlevi istiyorum bir sayfa beni geri el Bunun üzerine bir int kağıt. Yani bir int var isim, keyfi bir ama uygun küp denir. Bunun giriş, bir n, Bu yüzden, tamsayı yazın Ben sayısı geçebilir nasıl Bir kağıda 2. Ve sonra C destekleri çıkıyor matematik, yani, zaman x adlı yok Sadece yıldız kullanmak Çarpma için. Ve bu n kez n defa döndürür basit bir küp değeridir n. Peki biz bu tüm gidiyorsun? Bu kesinlikle bir olduğunu kasırga turu, dinlenme emin, süper bölümlerde ve problem, 1 set Eğer yürüdü olacak bu daha. Ve sorun set 1 de, biz geçiş olacak Sıfırdan grafik dünyadan bir şey daha komut satırına C. Ama biz ilham olacak Bu burada oyun geçmişin, burada adı C ve standart edition kullanarak p kümesi Mario'nun piramit uygulamak gerekir. Ve hacker baskısında p seti, bunu seçecek seçerseniz, Eğer biraz daha uygulayacak İki zirveleri ile piramit zorlu. Ayrıca, bir uygulamaya edeceğiz algoritması, açgözlü bir algoritma. Bu var çıkıyor bazı ilginç mantık süreci arkasında Bir kasiyer istasyonu çalıştıran aslında teslim Birisi arka değişiklik. Oldukça var bir algoritma var basit, o bile olabilir İlk okuduğunuzda sezgisel kavramak bu-- ben hep buydu hayata Birini bazı verdik herhangi bir zamanda yapılabilir Her zaman olanak tanır para back-- sayısını en aza indirmek Kağıt notları veya metal sikke geri kullanıcıya teslim ediyoruz söyledi. Ve bu, tabii ki, zorlayıcı Eğer CVS veya etajer giderseniz, çünkü Eğer teslim olmak istemiyorum olanlar bir sürü ya peni bir sürü. Sen en az istiyorum paralar, muhtemelen mümkün. Son olarak, meydan olacak Su dünyasında serpmek ve aslında bir takdir almak akış oranları arasında eşleme için, Bir duş, su gibi, Sadece ne kadar su kullanılır. Ve orada kinaye, Burada bu klibi olacak biz üzerinde bitireceğiz hangi Sadece 60 saniye, o Bir resim çiziyor Düşük akımlı duş başlıkları. [VİDEO OYNATMA] -Pekala. Burada her şey var. Ben, Cyclone F Serisi var Hydra Jetflow, Stockholm Supersteam, adını siz koyun. -Ve Sen ne tavsiye edersiniz? -Ne arıyorsun? -Güç Adam. Güç. Benzeri Silkwood. -Bu Radyasyon için. -Bu doğru. Bu nedir -Şimdi? -Bu Komando 450 var. O bir satmıyoruz. Ama biz istediğimiz bu. Bir komando 450 var. -Hayır Inan bana. Sadece sirk kullanılır. Bu filler için. Herhangi bir ödeme -I'll. Jerry hakkında -Ne? -Böyle Ele olamazdı. O narin. Ah evet. [SON OYNATMA] DAVID J MALAN: Pekala. Bu CS50 için eğer var. Gelecek hafta görüşürüz. KONUŞMACI 1: [? Scully?] [? Ian?] bildiğim kadarıyla bu outro projesi olarak, Siz ne ile geldi? HOPARLÖR 2: Evet, biz verdik bu düşünce, çeşitli ve biz en iyi şekilde düşünüyorum aşağıdaki amaçlara KONUŞMACI 3: May? HOPARLÖR 2: Evet. Elbette, aslında. KONUŞMACI 3: Yani bence Bizim fikir özetleyebilirim Bir word-- şey Outros için. DAVID J MALAN: Hiçbir şey? KONUŞMACI 3: Hiçbir şey. DAVID J MALAN: Bu ne anlama geliyor? KONUŞMACI 3: outros hakkında bir şey vardır. HOPARLÖR 2: Şey, yani, felsefe, Yani, hiçbir şey her zaman bir şeydir. KONUŞMACI 1: Yani Neler-- öncül ne? KONUŞMACI 3: Yani hayat gibi. TAMAM. Bugün ne yaptın? DAVID J MALAN: Kalktım vardı kahvaltı ve çalışmak için geldi. KONUŞMACI 3: Bu bir outro var. HOPARLÖR 2: Demek Fakat, olmamalıdır bir şey Şeyin üzerine ona ne KONUŞMACI 3: Hayır, hayır, hayır, hayır. Hiçbir şey olmuyor. KONUŞMACI 1: Öyleyse neden izliyoruz? KONUŞMACI 3: Çünkü Bu CS50 bir outro var. DAVID J MALAN: Henüz.