[MÜZİK OYUN] DAVID MALAN: Pekala. Bu CS50 ve bu Haftanın 2 sonudur. Ben olamazdı çok üzgünüm Orada bugün sizlerle, ama sen çok iyi ellerde konum. Beni tanıtayım CS50 kendi Rob Bowden. ROB BOWDEN: Ve tabii ki, o Biz aslında eğlenceli hale getirmek için var o bize bir dikey gönderdi Video ve göstermektedir. [VİDEO OYNATMA] [MÜZİK OYUN] [OLURMUŞ] -Bu Video vermedi Bu şekilde bakmak gerekiyor. Bu önlenebilirdi. Dikey videolara söylüyorlar. -Dikey Videolar sizi ne Fotoğraf makineniz yanlış yöne tutun. Videonuz sona erecek yukarı bok gibi bakıyor. - [Grunt] Bağımlısı daha fazla insan yok ki Her gün, dikey videoları hale getirmek için. Bu çatlak ya da başka bir şey değil, ama yine de gerçekten kötü. Iki çeşit vardır VVS ile tutulmuş insanlar. Birinci grup davranır videolar da fotoğraf gibi vur. Onlar herhangi bir zarar gelmez. Onlar sadece anlamıyorum Bir resim açabilirsiniz olurken, Eğer gerçekten bir video açamıyorum. [KAZA] - [MAYMUN SESLERİ] -The Diğer grup insanlar kim [BLEEP] vermeyin. -Dikey Video Sendromu tehlikelidir. Hareketli görüntüler var her zaman yatay olmuştur. Televizyonlar yatay. Bilgisayar ekranları yatay. Halk gözleri yatay. Biz inşa edilmez Dikey videoları izlemek. -Ben Dikey videoları seviyorum. -Kimse Senin umurunda. -Eğer Bu sorunun en denetlenmeyen, sen de sol Dört videoları gösteren başlayacak bir kerede sadece bant genişliği kaydetmek için. -Letterboxed Dikey videolar olur Bir posta pulu büyüklüğünde olacak. -Ve Her yerde yayılır. Film ekranlar var her zaman yatay olmuştur. Dikey videolar olursan Kabul, sinema salonları Uzun boylu ve sıska olmak zorunda. -Ve Sinemalara tüm olur yıkılıp yeniden almak zorunda. Ve zaman onlar yeniden inşa edildi, Mila Kunis, yaşlı ve çirkin olurdu. -Birds Onları içine çökmesine ve ölecektir. Geçemeyeceđiz tüm sert olsun yukarı seyir boyunlar. -Ve Hiç kimse oturup olacak Ön sıra asla. -George Lucas yeniden yayımı olacak Yıldızlı Savaşlar sıska baskı vasıtasıyla yine. -Ben Söylemek gerçekten mümkün değildi Ben söylemek istedim hikayesi. Bu benim için büyük bir şans oldu yeni bir teknoloji ile deneme. -Sen bir pisliksin. Bir mobil cihaz için kullanılır -Her zaman video kaydetmek, günaha var. Sadece hayır de. George Lucas hayır deyin. Eski Mila Kunis hayır deyin. Dikey videolara söylüyorlar. Birisi bunu yapıyor görürseniz -Ve, demek "Eğer bu doğru kukla çekmiyoruz!" [MÜZİK OYUN] [SON OYNATMA] [Alkış] [AUDIO OUT] ROB BOWDEN: --simple kriptografi formu, hangi temelde şifreleme gizli mesajların ve şifre çözme. Yani burada biz çok basit bir oyuncak var. Ve Fikir dış halka iç halka etrafında döner. Ve ben Büyütmek belki görebilirsiniz olarak, bunu görmek zor ki-. Ama, gibi numara 1-- şey, bu taşındı. 1 numaralı mektuba haritalar Mektuba X 2 numaralı harita J. zor İnanılmaz ileri atlamak için değil. Mektubu 2 J. haritalar Sayı 3 Demek D. haritalar Bu halka ile size verebilir Birisi bir mesaj 1, 2, 3. Nedense sizin için Onlara XJD söylemek istiyorum. Ama onları verebilirsiniz numaralarının bazı mesaj, ve bu halka sahip sürece, onlar söylemeye çalışıyoruz şifresini çözebilir. Yani görmüş olabilirsiniz bu kriptografi belirli bir örnek daha önce Noel sezonu etrafında ise Eğer A Christmas Story izledim. Eğer görmedim Daha önce, o zaman sadece kelimenin tam anlamıyla de TBS açmak Noel arifesinde her zaman, Onlar sadece arka arkaya göstermek için tüm gün geri geri geri. Ve ilgili bir video bu. [VİDEO OYNATMA] Hepsi ve muhtelif bilinen ol Ralph Parker, burada olduğu Küçük bir üyesi atandı Yetim Annie Secret Circle ve tüm onur hakkına sahiptir ve faydaları bununla meydana. Little Orphan Annie imzaladı. Mürekkeple Pierre Andre karşılıklı! Burs ve faydaları Zaten dokuz yaşında! [RADYO bağırıyor] -Hadi. En onunla dönelim. Ben tüm bu caz gerek yok kaçakçılar ve korsanlar hakkında. Ile -listen yarın akşam sonuç macera Black Pirate Ship. Şimdi, bu zamanı Annie'nin gizli mesaj Gizli Çember size üyeleri için. Çocuklar, sadece üyelere Remember Annie'nin Gizli Çember Annie'nin gizli mesajı çözebilir. Unutmayın, Annie size bağlıdır. B2 için işaretçilerine ayarlayın. İşte mesajdır. 12. 11. 2. -Ben Ilk gizli toplantıda duyuyorum. -25. 14. 11. 18. 16. Oh, Pierre büyük bir ses bu gece olduğunu. O gece en söyleyebilirdi mesajı gerçekten çok önemliydi. -3. 25. Yani Annie kendini bir mesajdır. Kimseye söylemeyin, unutmayın. Beş saniye sonra, ben sadece olduğum Evin oda nerede dokuz bir çocuk gizlilik ve decode oturup. Aha! B! Bir sonraki gittim. E. ilk kelime "olarak" dir. S. Şimdi daha kolay geliyordu. U. 25. Bu R. var -Haydi, Ralphie! Ben gitmeliyim ettik! Aşağı doğru olması -I'll, anne! Vay canına. Ne emin olun - T. O. "emin olun"? Little Orphan neydi Annie söylemeye çalışıyorsun? Ne emin olun? -Randy Gitmek var! Eğer çıkıp lütfen? -Tamam, Anne! Ben doğru dışarı olacağım! Ben yakın şimdi başlamıştı. Gerginlik korkunç. Bu neydi? Gezegenin kaderi askıda olabilir! -Ralphie, Randy gitmek lazım! Sesle ağlama için, doğru dışarı -I'll! Neredeyse! Benim parmak uçtu. Aklım çelik tuzak oldu. Her gözenek vibrasyonlu. Neredeyse açıktı! Evet. Evet. Evet. Evet. Senin ovaltine içmek için emin olun. Ovaltine? Bir köhne ticari? Orospu çocuğu. [SON OYNATMA] ROB BOWDEN: Yani bu nasıl Ovaltine Kriptolamaya ilişkindir. Temelde CS50 sadece reklamı Ovaltine, bu yüzden olabilir Ovaltine için bir crummy ticari olacak. Pekala. Yani şimdi gerçek bilgisayar bilimi. Pazartesi günü hatırla bıraktığımız dizeleri derinliklerine dalış. Yani biz ile uğraşmaktaydı string "Zamyla." Ve biz kabul edildi Biz tedavi gerçeği Karakter dizisi olarak "Zamyla". Ve öğrendik unutmayın braket gösterimde. Bu saklandı Yani daha sonra bir dizesinde "ın," dedik eğer s dirsek 0, bu olur mektup sermaye Z. gösterir Ve biz s tutucusu 1 söyledikten eğer İlk küçük a işaret eder, ve böylece ilgili dirseği 5 kadar, hangi son a işaret eder. Şimdi hatırlıyorum Bu dizenin uzunluğu, 6 ancak dize içine endeksleri vardır 0 ile 5 arasındaki, bu yoluyla Z sürer. Yani bu şimdi daha büyük bir resmin içine sığar Bilgisayarınızın bellek, RAM. Yani bir yerde program o Bilgisayarınızı çalıştırdığınız Zamyla hatırlamak gerekiyor belleğinde bir yerde. Yani bir gönüllü alabilir miyim? Evet lütfen. Ve senin adın ne? DEKAN: Dean. ROB BOWDEN: Dean? Dean Tanıştığımıza memnun oldum. Yani buraya gel ve Biz çizmek zorunda gidiyoruz bellek bizim güzel şık düzeni. Şimdi bellek düşünmek istiyorum bayt uzun bir şerit olarak, ama sadece gösterim amaçlı yaparız Sadece alta doğru, üst soldan yoktur. Tamam mı? Bu yüzden bir göstermek için gidiyorum Getstrings.c program--. Ve böylece tüm bu program yapıyor dört dizeleri istiyor ile bir kullanıcı, GetString ve daha sonra baskı her şeyin ilk dize girdi oldu. Biz dört ile iki görmezden geliyorsun. TAMAM. Yani buraya şimdi-- zaman İlk istek s1. Yani bilgisayar bulunmaktadır. Ve getString uygulamaktadır. Yani bir dize talep Beni, ben, tamam, Dean söylüyorlar. Dize ver "Dean." Yani bir yerde hafızaya hatırlamamız gerekiyor "Dean." Yani bir yerde belleğe yazmak. Mükemmel. TAMAM. Yani şimdi biz s2 var. Ve s2 olacak getString bir istek. Yani bir dize girin gidiyorum. Ben girmek için gidiyorum "Hannah." Yani bir yerde belleğe "Hannah" girin. Evet. A-H. Tamam, şimdi s3. Ve başka olacak getString rica ederiz. Ve şimdi "Maria." Girin Pekala. Ve sonra son bir var getString isteği, s4. Yani, ben bilmiyorum. Nasıl gitmek hakkında Kiliseyi Devletten Ayırmama. Yani belleğe o giriniz. Evet. Yani sadece "Rob." Do TAMAM. Yaptım yüzden şimdi açýklamama Bu boşluk bırakın? Bu boş var Neden burada, burada ve buraya boşluk? Evet. Ben gittiğimde Yani fark eğer öyleyse s1-- yazdırmak için biz vardı "Hannah" koşu sağ yanındaki "Dekan" Biz ne zaman nasıl biliyor musunuz string "Dean" biter? Yani dize s1 yazdırmayı olabilir Sadece "DeanHannahMariaRob" basılı herhangi bir ipucu yoksa "Dean" aslında biter bir zaman. Pekala. Yani bellekte şekilde biz aslında bir dize bu ucunu temsil ters eğik çizgi sıfır ile. Yani bu boşluk tam olarak ne istediğini olduğunu. Bir ters eğik çizgi sıfır olmalıdır. Bu, bir eğik sıfır olacaktır ve bu bir ters eğik çizgi sıfır olacaktır. Ve muhteşem bir ödül olabilir Mükemmel bir gönüllü olmak için. Stres topu al! TAMAM. Yani bu karakter ters eğik çizgi sıfır nasıl bir dize sonunu belirtir. Bu nasıl ne zaman herhangi bir program Bir dize yazdırmak istiyor Öğrendiğimiz hatırlıyorum how-- bu kadar strlen fonksiyonu Geçen hafta? Dize uzunluğu? Bu dize uzunluğu yapabiliyor nasıl bir dize kadar uzun belirler. Sadece yineleme tutar karakter üzerinden o bulana kadar sıfır karakteri karakterler. Önemli olan fark yüzden Ters eğik çizgi sıfır karakter hakkında o temsil ediyor olduğu bit tüm sıfır ile. Yani bu farklı olduğunu fark Sıfır karakter. Yani sıfır karakteri, eğer hatırlarsanız Örneğin o sonunda verdi Dersin karakterleri haritasına nerede 65 sermaye A haritaları gibi aşağıdaki amaçlara. 97 bir harita küçük harfe. Küçük b 98 olacaktır. Yani numarası 0 harita I do not aşağıdaki amaçlara Kafamın üst kapalı biliyorum. 44 ya da 45. Somewhere o bölgede. Yani karakter 0 gerçek bir sayıdır. Ama ters eğik çizgi sıfır Tüm sıfır bit haritalar. Yani bir ayrım var ters eğik çizgi sıfır arasında, hangi biz boş Sonlandırıcı arayacağım. Arasında bir ayrım var Ters eğik çizgi sıfır ve karakter sıfır. Pekala. Yani dizeleri hakkında biraz daha fazla konuşuyor. Öyleyse biz bu nasıl burada göremiyor bellekte ortaya koydu olacaktır. Yani bir dizi olarak dizeleri bu fikir characters-- resmi bilgisayar, böylece dizisi için sciency terim bir dizidir. Yani biz bir dize dediğimiz karakter dizisi. Ve aslında diğer veriler vardır Biz dışarı diziler yapabilirsiniz türleri. Yani bu motive etmek için, bir örnek bakmak. Biz olacak ages0.c arayacağım kopyalayıp bizim şablonu yapıştırın. TAMAM. Bu programda Peki biz yapmak istediğiniz yaş kapmak olduğunu Tabii üç öğrenci. Yani biz biliyoruz int age-- ve şimdi 0 söylemek için gidiyorum. Yani age1 söylemek istiyorum, ama belki amaçlar için çok kısa bir süre göreceksiniz Ben int age0 GETINT eşittir söylerim. GETINT aynı çağrı yüzden Biz I ile oldum isteyen için olmaz "Bana yaşını ver." diyerek Ama bunu ister. Ve age1 GETINT eşittir. Ve int Age2 GETINT eşittir. Yani, yine, üç öğrenci, ancak sonuçta değişken endeksleri Age2 ile age0 bulunmaktadır. TAMAM. Yani bu program yapacak ne olursa olsun Biz age0, age1 ve Age2 ile istediğiniz, ancak bu program sonunda üç öğrenci için çalışıyor. TAMAM. Yani şimdi ben dört öğrenci isterseniz ne olacak? Eh, ben geri gitmek zorunda gidiyorum Benim koduna, yorum değiştirmek, ve şimdi biz bir int var age3 GETINT eşittir. TAMAM. Peki burada kim sorun görür? Problem ne kurulum bu tür? Evet. Evet. Bu yüzden oluşturuyorsanız Her öğrenci için değişken. Şimdi çalışır, ancak sonuçta şimdi ne ben eğer Ben yaş kapmak istiyorum "derler Sekiz öğrenci veya 16 öğrenci veya bununla birlikte pek çok öğrenci CS50 öğrencilerin yüzlerce ya da kampüs binlerce öğrenci ya da dünyanın milyarlarca insan? Yani sonuçta bu sürdürülebilir değildir. Kendinizi kopyalama gördüğünüz herhangi bir zaman ve bunun gibi yapıştırma kod, genellikle hissetmeniz gerekir daha iyi bir yol olduğunu. Biz tanıtmak nerede Yani bu Bir dizi beyanı. Yani bir diziyi bildirmek zaman, Bu nedir genel formatı gibi bakmaya gidiyor. Biz türünü söylemek için gidiyoruz. ve sonra biz gidiyoruz o dizinin adını verin, sadece biz herhangi bir değişkeni tanımlamak olarak. Ve sonra nihayet biz kullanıyorsunuz Bu braket notasyonu tekrar ama farklı bir bağlamda nasıl biz daha önce bunu kullanarak bulundu. Yani burada bu normal gibi görünüyor Gördüğümüz değişken bildirimi. Bu yüzden daha önce int x noktalı virgül gördüm. Peki şimdi biz bir şey görebilirsiniz int x parantez 5 gibi. Ve bu fikri koyarak Biz have-- GETINT programı bu yüzden uygulayabilirsiniz Aynı şekilde bu. En Kullandığımız eğiliminde CS diyelim bir şeyin sayısı olarak n. Yani burada biz gidiyoruz Dört öğrencileri saklayın. Ve şimdi biz int yaş diyebiliriz braket oldukça o yet-- alamadım n- Dört öğrenci bir diziyi bildirmek için. Yani bu nasıl görüneceğini hafıza buna benzer olacaktır. Bu temizleyin. Ve biz bir yere zorunda gidiyoruz memory-- ben oraya bu kadar yatıracağız. Yani bir yerde bellekte. Bir iki üç dört. Biz bir satırda dört tamsayılar var Dört tamsayılar bu dizi için. Bu nedenle, şu anda, ne Bu kutulardan birinin boyutu? Evet. Bu dört bayt var. Bu 32 bit var. Yani şimdi bu farklı Diziden biz karakter önce, dizi gördüm. Bir dizesinde her kutu, sadece bir byte oldu Bir karakter sadece bir bayt olduğundan. Ama tamsayılar bir dizi, her kutu sipariş dört bayt olmak zorunda tüm tamsayı sığdırmak için. Peki bu ne bir dizi Dört ints gibi görünecektir. Ve sonra tekrar kod. Şimdi biz aslında mağaza istiyoruz Bu diziye tamsayı. Yani şimdi bu çok, çok, çok, bir noktada olacak ortak desen kas hafızası olur. Yani ben 0'a eşittir int. i n daha azdır. Ben artı. Yaş dirsek i GETINT eşittir. Yani bu döngü için, bu biçim, çok alışmak gerekir. Yani bu genellikle nasıl olacak hemen hemen her dizi üzerinden yineleme. Şimdi bu tür fark başından itibaren açıklıyor Biz döngüler int için gidiş için yoktu i veya daha az 10'a eşit, 1 'eşittir. Başlayarak Bunun da sebebi Sıfır dizilerle de bu işi yapar. Yani diziler endeksli sıfırdır. Bu dizi uzunluğu 4 ise, endeksleri 3'e kadar 0 vardır. İlk aracılığıyla Yani for döngüsü bu yineleme Biz yaş ayarı için gidiyoruz GETINT bir çağrı eşit braket 0. Yani ne oldu klavyeye girin. İkinci geçişte, biz konum GETINT için age1 eşit ayarı. Üçüncü geçiren, Age2. Final geçiş age3. Döngünün ilk geçişte Yani eğer Ben, klavyeden sayı 4 girin o zaman biz burada 4 ekleyeceksiniz. Ben girmek ikinci geçişte ise 50, biz burada bir 50 koyacağım. Üçüncü geçişte Olabilir girmek 1 negatif, 1 negatif, ve sonra nihayet ben 0-- girerseniz ve Şimdi bu endeks üç olduğunu hatırlıyorum. Loop arka sonra, i gidiş 4 artırılır edilecek. Artık 4'ü n, daha azdır. Ve biz döngünün patlak. Yani bu yanlış ne olacak? [Duyulamaz]? HEDEF KİTLE: [duyulamaz] Evet. Yani dizi sadece dört yerler vardır, hangi ile 3 endeksleri 0 olarak gelir. Bu durumda olsaydı, yapardım Yani bir noktada değeri 4 almak. yaş dirsek 4 ayarı olacak ne olursa olsun burada olur I have to say ne, 6 girin. Yani 6 bu ayar olacak. Ama biz burada ne olduğunu bilmiyorum. Bu bellek değildir biz erişime vardı. Yani hatırlıyorum eğer Bir önceki ders, O Zamyla değerlerini yazdırmak ve bir noktada o bu bölümleme vurdu arıza. Yani muhtemelen görmeye olacak Senin gibi birçok segmentasyon hataları Sorun setleri bazı uygulamak. Ancak bu yöntemlerden biri olduğu Bir segmentasyon karşılaşabilirsiniz Eğer erişirken başladığınızda, arıza Eğer olmamalıdır yollarla bellek. Bu yüzden erişimi yoktu Bu konumu ve bu bir hatadır. Yani bu daha iyidir. Şimdi hala küçük olduğu Bu kod ile sorun. Ve biz olduğumuzu temelde Hala dört öğrenci sıkışmış. Şimdi tamam, sekiz öğrenciye kullanmak istiyorsanız. O kadar büyük bir anlaşma değil. Ben değiştirmek, gidebilirsiniz Yorum ve n değiştirin. Şimdi bu sekiz öğrenci ile çalışacaktır. Ben bu derleme ve çalıştırırsanız Bu, bu bana-- gösterecektir bu sekiz tamsayılar talep edecektir Öğrenciler ve sadece çalışacaktır. Ama gerek ideal azdır programı her zaman derlemeye Ben öğrenci sayısını değiştirmek istiyorum Ben yaş için girmek istediğiniz. Yani son gelişme üzerine Biz burada-- göreceğimiz gibi bu, biz konum insanların sayısını istemek için gidiyor. Burada bir dizi var Odalarda insanların ya da odada kişi herhangi bir yaş. Ama biz numarayı istemek için gidiyoruz kullanıcı odada kişi. Yani bu aynı do-while olduğunu Daha önce gördüğümüz döngü. Bu aynı değil do-while döngüsü olduğunu sen Sorun setinde uygulama olabilir. Yani sürece onlar senin gibi 1 'den az bir n giren yani en olması var Odada en az bir kişi. Sürece senin gibi 1 'den az bir n giren Sonra tekrar soran tutmak için gidiyoruz. Numaranızı girin odada kişi. Şimdi, bir kez biz numarası var ODASI insanların ben orada o girebilirsiniz Bu odada 200 kişi bulunmaktadır. Sonra buraya gelip gidiyoruz ve büyüklüğü 200 bir diziyi bildirmek. Biz bu diziyi bildirmek ediyoruz yeterince büyük 200 yaş tutun. Iniyor, bu döngü için var Çok alışması olacaktır. Yani bu dizinin üzerinde yineleme, her yere atama bu dizi bir tamsayıdır ve sonra sonuçta burada değilsin Sadece yineleme bir örnek alıyorum Bu dizinin üzerinde, değerleri atamak için değil, ama değerlerine erişmek için. Buraya Yani biz bakın biz o Şimdi bir yıl diyorsun, kişi% i, i yaşında% olacak İlk% i artı 1 olduğu. Yani ben bu indeks değişkendir. Ve ikinci% i olacak yaşları dizisindeki artı 1 saklanan değer. Yani bu artı 1 we 'sadece çünkü Bu artı 1 saying-- yaşları i artı 1. Bu artı 1 we 'sadece çünkü Şimdi kişiden yılda diyerek bu eski olacak. Peki neden bu i artı 1 nedir? Neden orada bir artı 1 var? Evet. Evet. Yani diziler sıfır endekslidir hatırlıyorum. Biz bu yazdırarak Yani eğer birisi sadece çıkış okumak için, sonra muhtemelen bir şeyler görmek istiyorum kişi olan, kişi bir numara gibi, 20 yaşında olacak. Kişi sayısı iki 15 yaşında olacak. Onlar daha ziyade kişiyi göremiyorum ediyorum sayı sıfır 15 yaşında. Yani bu derleme ve sadece görme neler bazı alan oluşturun öyle gözüküyor ki--. Yaşları derler yapın. Yaş yayınlanıyor. Biz odada insanların sayısını görebilirsiniz. Yani orada söylerim Odada üç kişi. Kişinin bir numara Yaş, en 15, 20, 25 diyelim. Ve şimdi ben bir yılın söylerim şimdi 16, 21, 26 olacak. Şimdi bu ile çalıştığını görelim 3'e eşit olmayan bir n. Yani ben, kişi sayısı, biri 5 olduğunu söylemek iki, üç, iki, bir, bugünden itibaren bir yıl Onlar, iki, üç olacak dört, üç, iki yaşında. Yani tıpkı olabilir Kolayca n 10.000 olmak var. Şimdi oldukça burada oturuyor olacak Bir süre çağına giren, ancak bu çalışıyor. Yani şimdi bellekte bir yere biz boyutu 10.000 bir dizi var yani sonuçta 40.000 bayt, çünkü bu tamsayılar her biri için dört bayt. Yani bir dizi var boyut 10,000 nereye biz Bu 10.000 kişinin yaşları saklayın. Pekala. Bu herhangi biriyle ilgili sorularınız mı var? Evet. Ne negatif bir sayı verdiyse? En ne görelim. Bu özel case-- sayısında Yani oda, negatif bir insan. O reddetti Burada biz ne çünkü n ise, aslında işleme için az birden tekrar sormak için gidiyoruz. Bir ilan çalışırsanız Negatif boyutu dizisi, genellikle çalışmaz. Öyleyse deneyelim. En görmezden edelim ne olursa olsun n değeri onlar girdi ve sadece int yaşları negatif bir say. Hatta derler Bakalım. Emin değilim. Hayır. Yani yaş olarak bildirilmiş bir Negatif boyutu ile dizi. Yani ayarlıyoruz bir dizi olamaz tanır Negatif boyutta olması ve onu reddeder. Şimdi, biz idare olmasaydı Bu do-while döngüsü doğru Biz kontrol olmasaydı n en az 1-- ise en biz diyelim tüm bu yoktu ve bunun yerine sadece bir tamsayı kapmak. Ne olursa olsun o tamsayı ne biz bu boyutta bir dizi bildirmek. Yani derleyici olamaz muhtemelen şimdi şikayetçi. Ben bu-- derleme bu yüzden şikayet edemez, ben olduğumu biliyorum çünkü negatif bir sayı girecek, hangi geçersiz olabilir. Tüm bu Olabilir, bilir pozitif bir sayı girin, hangi mükemmel geçerlidir. Ben 1 Negatif girerseniz Yani hayal odada kişi, arıza segmentasyon. Yani Tamam. Yani bu sadece geri ekleyelim başlangıçta ne tutun. Yani yaş yapmak. Şimdi bir denemek istiyorum Negatif yani atalım age-- Odada beş kişi var demek. Kişinin bir numara Yaş kişi, üç olumsuz 4'tür sıfır, kişinin Tamam üç-- olduğunu. Yani burada bir yıl şu andan itibaren, kişi sayısı biri 3 yaşında negatif olacaktır. Yani muhtemelen mantıklı değil. Ama bu sadece bakarak çünkü kod tüm biz yapıyoruz GETINT istiyor. Şimdi, biz olsaydı GetPositiveInt fonksiyonu ya da biz sadece sadece bu yapmıştı Orada aynı while döngüsünde sıralama, o zaman bu mükemmel iyi çalışacak. Ancak bu, özellikle durum, sadece yok negatif değerler ele olmak olur. Diziler hakkında Başka soru? TAMAM. Yani biz şimdi diziler gördüm. Ve biz kullanmak için ihtiyacımız olacak komut satırı argümanları için bu. Yani problem iki-- set Seni çok biliyorum Hala sorun sette çalışıyor olabilir biri, ama sorun iki geliyor ayarlayın. Sorun iki set, sen gidiyorsun dizeleri, diziler ile ilgili olması gerekir, ve komut satırı argümanları. Komut satırı argümanları Peki nelerdir? Şimdi, burada aşağı görebilirsiniz tam olarak ne için küçük bir teaser gidiş oluyor gibi. Biz, int main, inc argc bakın Dize argv parantez. Böylece ilk en yorumlamaya çalışalım Ne demek çalışıyor. Şimdi tamam. Yani komut satırında sen olmalı Bu komutların alışmak biraz şimdi, ve muhtemelen çalıştırmak daha önce terminalde cd. Bu yüzden cd pset1 derseniz, Bunu gerektiğini biliyor pset1 dizine değişen olacak. Şimdi hiç fark ettik Daha önce böyle bir program yazılmıştır. Yazdığınız her program, Eğer, diyelim ki, aday olacağını Mario slash dot, dot açgözlü eğik çizgi ve sonra giriş yapmanızı isteyebilir. Şimdi, bu değil ne var dizin değiştirme yapar. Eğer cd çalıştırdığınızda, o zaman, demiyor Eğer cd hangi dizin içine istiyorsun? Bunun yerine, sadece söylemek, cd pset1 ve Sadece pset1 dizine gider. Yani benzer diğer örnekler var. merhaba olun. Yaptığınız çalıştırdığınızda, o zaman, demiyor Hangi program yapmak istersiniz? Sadece at demek Komut satırı merhaba olun. Hareket başka bir örnektir. Biz hareket bu bir bir dizin yukarı dosya mario.c. Yani şimdi bu örnekle biliyorum Gerçekten iki argüman geçiyoruz. İlk argüman olarak mario.c var, ve nokta nokta ikinci bir argümandır. Ve sonra, sizi yapmak çalıştırmak zaman Bu gerçekten uzun komutu bakın LINE Bu gerçekten uzun bir komut Komut satırında basılmış. Yani bu kadar uzun command-- bunun sadece kısa bir parçasıdır, ama şimdi biz üç var Komut satırı argümanları. Nokta çizgi sıfır, merhaba, ve merhaba.c. Peki bu komut satırı vardır argümanlar, argümanlar En geçerken olduğunuzu Komut satırı böylece sorulmasını zorunda değildir Eğer program çalıştırdığınızda. Bu sinir bozucu olacağını zaman eğer Eğer tınlamak koştu o tamam "dedi program-- hangi dosya derleme? Hello.c. Ne bayraklar yapacağınız girmek ister? dash o. Ne alırsınız Dosya çağrılacak? Merhaba. Hayır, sadece clang çalıştırmak o merhaba hello.c dosyasını çizgi. Böylece geri bu bakıyor. Şimdi argc-- argc argüman sayar olduğunu. Bu komut satırı numarası argümanları komut satırında girdi. Eh, teknik argv-- v, vektör açılımı ki bu temel olarak bir dizi anlamına gelir. Ama bunu göz ardı edebilirsiniz. Argv-- biz dize argv var böylece dize argv parantez. Yani bu başka bir şeklidir Eğer daha önce görmedim braketleri. Yani gördüğümüz dirsek Biz söylediğim gösterim, gibi, string Zamyla eşittir. s dirseği 0 karakter Z. kere Biz de parantez zaman gördüm Biz int yaşları 5 paranteze söyledi. Bu büyüklükte 5 bir dizi ilan etti. Yani burada bir versiyonu parantez daha önce görmedim. Dize argv Yani bu tür o Tamamen tanıdık olurdu Sadece bir dize olacağını söyledi. Şimdi parantez belirtmek bu bir dizidir. Yani dize argv parantez araçlar Bu argv dizeler bir dizidir. Şimdi teknik olarak bir dize karakter dizisidir. Yani bu artık bir dizidir karakter bir dizi. Ama düşünmek çok daha kolay dizeleri bu tıpkı bir dizi. Peki neden parantez boş olabilir? Gibi, biz neden, diyemeyiz braket 5, dirsek n? Evet. Evet. Biz kaç bilmiyoruz girişler var olacak. Yani biz clang Örneğin bakarsanız, merhaba hello.c o çizgi tınlamak söylüyorlar. Bu özel durumda, var olmasına Üç komut satırı argümanları olmak. Ve böylece brackets-- göreceğiz İkinci olarak bu üç olmaz. Teknik olarak dört olur. Ama parantez, biz olur diyelim ki, üç vardır. Ama şimdi biz hareket baktı eğer mario.c dot dot, parantez biz onlara iki koymak isterim. Ve komutların bir sürü vardır Komut satırından değişken sayıda argümanlar. Peki bu sürümü braket gösterimde gösterir argv dizelerden oluşan bir dizi olmasıdır. Ama kaç tane bilmiyoruz dizeleri bu dizide bulunmaktadır. Ve nasıl o zaman nasıl biliyor musunuz Birçok dizeleri dizisinde nelerdir? Yani bütün mesele argc var. argc argv ne kadar söyler. Yani son şey tutmak için Zihin, bu teknik olarak Komut kendisi biri olarak sayar Komut satırı argümanları. Cd pset1 Yani, iki vardır Komut satırı argümanları. Kendi içinde programı, cd ve sonra bu gerçek bağımsız değişken bölümü, pset1. Eğer şimdiye kadar yazdım herhangi bir program tek komut hattı argument-- nokta olmuştur Mario kesiyorsun. Bu sadece komut satırı argümanı. Yani şimdi clang bakıyor o merhaba hello.c dosyasını çizgi. Peki argc nedir? 4. Yani argc 4'tür. Clang, böylece argv aparatı 0 clang olup. argv tutucusu 1 çizgi 0'dır. argv dirseği 2 merhaba ve argv dirseği 3 merhaba.c olduğunu. Tamam, bu yüzden bu konuda sorular ve daha sonra yaparız Bazı programatik örneklere bakmak. TAMAM. Yani biz hello3.c bir göz atacağız. Yani bu tanıdık olmalı İlk c örneklerinden biri Biz sadece söyleyebilirim nereye merhaba, vardı Dünya, ama şimdi bu daha genel olduğunu. Yani burada biz merhaba diyorsun % s ters eğik çizgi n argv tutucusu 1. Bu noktada ana kadar yani Notice--, bu Ya benim şablon dosyası gibi baktı. Ben int main (void) vardı, sonra isterim ana işlevi bir şeyler yapmak. Şimdi bunun yerine, bir kez biz uğraşan başlar Komut satırı argümanları ile, Biz devlet gerek Ana farklı formu. Yani hello3 bakıyor Yine, ana gidiyor int argc şimdi-- iki argüman almak, komut satırı argümanları sayısı ve dize parantez argv gerçek dizeleri, komut satırında girdi. Yani bunu değiştirmek için gidiyorum Şablon gerçeğini yansıtıyor. Şimdi ne zaman yazmak Bir program, sen yapmazsan Herhangi bir komut satırı almak gerekir argümanlar, daha sonra sadece int main (void) kullanın. Ama şimdi yazarken Komut satırı argümanı programları, hangi Eğer sorun için yapıyor olması gidiyoruz şimdi sen çalıştırıyorsanız bu iki-- set almak gerekir programlar Komut satırı argümanları, Bu form ana olması gerekir. Yani burada-- bu büyük kullanımdır Komut satırı argümanı. Yani argv 1 yazdırma. Tamam öyleyse derlemek edelim ve bu programı çalıştırın. Hello3 olun. Derler. Dot hello3 çizgi. Ve en, diyelim "Rob." Merhaba Rob. Ben, "merhaba Maria," merhaba Maria derseniz. Maria Merhaba. Hannah hala merhaba "diyor Maria, "Ben değilim, çünkü Bizim argv 2 şey yapıyor. Argv 2 şimdi "Hannah" olurdu. Argc 3 olur. Ne yaptıysa? Yani merhaba boş. O kısaca aslında değindi Bu, teknik olarak, GetString null döndürür olabilir, ama biz bir alırsınız ne daha fazla boş içine çok aslında. Ama meselesi olarak götürün Hiçbir genellikle kötü olması. Biz eğer yanlış bir şey yaptım o "merhaba boş." yazdırma ediyor Ve neden yaptığımız Bu-- iyi terslik, Ben nokta çizgi hello3 çalıştırdığınızda, argc 1 oldu. Böylece argv uzunluğu 1 olduğu anlamına gelir. Bir dizi uzunluğu 1 ise, tek geçerli endeks sıfırdır. Ve işte 1 dışında argv Bu dizinin dizi. Ben denedim önce benzerdi dizinin sonuna dışında 6 saklamak için. Yani bir şey erişmeye çalışıyorum argv sayısı dışında, ve biz boş alıyoruz. Yani daha iyi bir versiyonu Bu, iyileşme, açıkça argc kontrol ediyor. Argc 2 eşitse Yani, biz koştu demektir nokta çizgi hello3 Rob gibi bir şey. Ve "merhaba Rob." Basacaktır Argc eşit değilse 2, sonra sadece gidiyor Eğer koymak ne görmezden komut satırı bağımsız değişkeni de komut satırı argümanları olarak. Eğer hiç bir koymadı Veya, bu kadar sadece görmezden ve sadece söylemek için gidiyoruz, "Merhaba sana." Yani bu derleme. Hello4 olun. Ve hello4 koşuyor. Bu şekilde Koşu, Ne basılmış olmalıdır? "Merhaba sana." Merhaba sana. Ne hello4 Rob hakkında? "Merhaba Rob." Ve nihayet, merhaba Rob Maria "merhaba Sen" yine sadece bir Eğer gerçekten girmediniz çünkü beklenen bir şey. Daha fazla isim girdi o ele verebilir daha, bu yüzden sadece öndeğer merhaba davranış. Bu soruların Yani? Ya da komut satırı argümanları? Tamam, bu yüzden bir göz alarak kullanarak birkaç daha fazla örnek Komut satırı ilk arguments-- Biz çizgi 1 nokta c argv var. Yani comments vermek neyi bu program yapıyor olmalıdır. Ama, for döngüsü bu şimdi-- fark Bu tam desen maçları Ben daha önce diyordum. Biz sadece olmak için ne n yerine argc kullanılmıştır. Şimdi argc gerçekten n. Bu argv dizinin uzunluğu var. Yani argv yineleme vardır Dizi printf-ing her argv değerini. Ben bu hale Yani eğer. Argv 1 yapın. Bu derler. Dot argv 1 kesiyorsun. Sadece bu çalışan, onu baskılar çizgi argv 1 dot sadece komut satırı beri Program adı argument--. Her zaman least-- Orada olacak argc, birinden az olamaz çünkü her zaman olacak, en azından çalıştırmak için program adı olacak. Yani 1 Rob 1 argv basacaktır argv ve daha sonra yeni bir satıra "Rob." Birinci tekrarda Yani Bu döngü, ben 0'dır. Argv 0 Program adıdır. Dot argv 1 kesiyorsun. Ve sonra 1 benim ilk argv Rob komut satırı argümanı. Bu noktada, argc eşittir. Biz döngü patlak ve bitti. Yani bu keyfi için çalışacak komut satırı argümanları sayısı. Dikkat bu argv 0, argv yazdırır 1, argv 2, argv 3, argv 4. Ve hiçbir argv 5 yoktur. argc 5'e eşittir. Yani ben 5 eşit olarak argc-- de, Biz döngünün patlak. TAMAM. Biz önce soruların Yani Daha karmaşık bir örnek bakmak? Yani 2 argv. Pekala. Yani biz hala yazdırırken Komut satırı argümanları. Ama şimdi biz fark Bir döngü için iç içe. Peki bu yapıyor? Yani ilk döngü yapıyor tam olarak ne daha önce yaptım. Biz hala üzerinde döngü ediyoruz Her komut satırı argümanı, ama şimdi bu ikinci loop-- biz ettik Ayrıca daha önce böyle bir şey görmemiştim. O yineleme zaman Zamyla Z-A-M-Y-L-A yazdırarak. Yani int j bu ikinci döngü eşittir 0, n argv dirsek i strlen eşittir. Yani ilk kez düşünelim Şeyin en doğru yürüyelim. En ne bilgisayar olur düşünelim Sadece nokta olarak ben bu programı koştum yapmalı argv çizgi 2 kesiyorsun. Yani eğer ben o zaman, bu kodu koştum argc 1'e eşit olacak. Ve dize yalnızca var argv-- argv bir endeks olacak, ve bu nokta eşit olacak argv çizgi 2-- program adını. Tamam, şimdi ben daha ben az 0 eşittir 1 i artı artı int j 0 eşittir için, n, bu yüzden argv dirsek 0 strlen eşittir Bu döngünün ilk yineleme. argv dirsek 0 nokta çizgi argv 2 'dir. Böylece dizenin uzunluğu nedir? Eh, A-R-G-V çizgi 2 çizgi nokta. Bunun strlen Yani 8 olacak. Yani j 0 eşittir, n 8 eşittir. Sürece j 8, j ++ az olduğu. Ve biz olacağız tek bir karakter, yazdırma hangi i j paranteze argv dirsek olduğunu. Yani sadece i sıfırdır. Biz hala sadece bir tane var komut satırı argümanı. Bu birinci tekrarda döngüsü için, biz konum Baskı olacak argv dirseği dirsek 0 0. Ve sonra j artırmak için gidiyor. Ve biz baskı gidiyoruz argv dirseği dirsek 0 1. Ve sonra dirsek 0 braket 2 argv. Yani bu bizim ilk karşılaşma Çok boyutlu diziler. Dedim ki daha önce hatırla Bu argv teknik olarak karakter dizileri bir dizi. Yani burada bir şey gibi desem string, argv dirseğini i eşittir ve sonra ben s dedi dirsek j, bu aynı şeyi gerçekleştirerek olacaktır. Şimdi, daha önce s braket j gördüm. Bu sadece j-inci erişmek bulunuyor Bu dizenin karakter. Bu Yani, biz alıyorsanız i-inci argv j-inci karakter. Peki bu sonuçta çıktı gerekir? Argv 2 yapın. Bu derler. Dot argv 2 çizgi. "Rob Maria Hannah," ve bize biraz yer ver. Yani biz bu çıkış olduğunu görüyoruz Kendi çizgi ve çizgi üzerinde nokta kendi satırında kendi satırında ve üzerinde. Dışarı her yazdırma ediyor Bireysel karakter Her komut satırı argümanı. Ve sonra aralarında, Çünkü bu yeni hattın Biz, buraya yazdırırken Aralarında yeni bir çizgi basalım. Yani bu benzer önce argv dash 1, yazdırılan her hangi Komut satırı argümanı, ama şimdi biz yazdırırken Komut satırı argümanları ve sonra her yineleme Her komut satırı argümanı karakteri Bu çıktıyı almak için. Tamam mı? Bu soruların Yani? Unutulmaması gereken bir şey olduğunu Komut satırı arguments-- böylece onlar boşluklarla ayrılmış Eğer doğal olarak onları olmasını bekleriz. Yani bir dize içinde boşluklar olabilir. Süper önemli değil, ama ben eğer Üçüncü komut satırı argümanı istedi Ben o zaman, bir boşluk var Böyle bir şey söyleyebiliriz. Tamam mı? Yani bu şimdi hala sadece üç vardır Komut satırı arguments-- kuyu 4. Dot argv tire 2 çizgi, Rob, Maria ve Hannah Bloomberg. TAMAM. Bu konuda sorularınız mı var? Özel bir şey yok boşluk karakteri hakkında. Bu sadece olur Komut satırı boşluk karakteri davranır nasıl gibi her argüman ayırın. Pekala. Sonra Sorun seti olmak için gidiyoruz iki-- gizli anahtar şifreleme bakıyor. Bu örnek, bu şekilde, benzer bir Biz A Christmas Story gördüm Bazı uygulama için gidiyoruz Bir mesaj verilmiş algoritmalar, Eğer muktedir gidiyoruz Bu iletiyi şifrelemek için Bu sır ile sadece birisi Anahtar, bu dekoder, halkalı, şifresini gerekir. Yani standart sürümüdür. Sen uygulanması için gidiyoruz İki farklı sürümleri. Eğer bir göz atın olursanız Hacker şimdi Sürümü-- de, Biz vereceğiz Böyle bir dize, hangi şifreli bir parola temsil eder. Yani hedef anlamaya etmektir şifresi çözülmüş şifre nedir. Şimdi bu aslında nasıl şifreleri bilgisayar bir çok saklanır ve sadece bu depolar karakter rasgele dize. Sen nasıl anlamaya var karakter bu rasgele dizesinden Orijinal şifre ne oldu. Ve son olarak, sonra Sorun seti, sen-meli Bunun ne anlama geldiğini anlamak mümkün. Peki şifresini öğreneceksiniz Rasgele dize bu tür. Benzer şekilde, hafta hatırlarsanız 0, bu URL'yi görmüş olabilir. Ve mümkün olmalıdır Sonunda bu şifresini. Sen mutlu olmayabilir zaman sizi Bunu deşifre ve linke tıklayın. Pekala. İşte bugün için bu kadar. Yani gelecek hafta görüşürüz! [ELEKTRONİK MÜZİK OYUN]