>> [MÜZİK OYUN]
DAVID J. MALAN: Pekala.
Bu CS50 ve bu 2. Hafta sonu.
Yani bugün, gidiyoruz Bizim göz devam
Bir şeyleri temsil nasıl hood-- uzaklaşmakta altında
tamsayılar gibi numaralardan gelen ve kayan nokta değeri
ve dizeleri odaklanarak ve sonuçta daha ilginç programlar.
Ama biz de bir bakmak gerekir etki alanına özgü problems-- çift
İlk olacak olan kriptografi ilgili olabilir,
bilgi çabalıyorlar sanatı, hangi burada yukarıda bakın
Radyo Yetim Annie'nin bir resim yesteryear gizli dekoder halkası.
>> Bu çok ilkel biçimi aslında ve kriptografi çocuk-dostu formu
bu halka, iki disks-- sahip olmasının sağlandığı, bir iç ve bir dış.
Ve tarafından, bunlardan birini yapabilirsiniz dönen esasen A gibi harfleri sıraya
diğer harfler ile Z arasındaki Diğer bir deyişle A. ile B gibi,
Eğer tam anlamıyla alfabeyi döndürebilirsiniz, böylece bir haritalama ile geliyor
harfler mektup olduğunu, bu yüzden eğer gizli bir mesaj göndermek istedim
Annie gibi birine, sen yazabilirsiniz Sonra döndürmek ve mesajın aşağı
harfler, burada, sen demek eğer yerine say ", A" demek "B"
Eğer demek "B" yerine "C" demek -
ya da bir şey biraz daha zeki ki- daha sonra, en sonunda,
çok uzun Annie, bu dekoder olduğu gibi halka, o mesajı çözebilir.
Şimdi, aslında, hatırlamak, bu o olabilir Bir çok ünlü filmde kullanıldığı
sırasında reklam nauseum çalış Noel sezonu.
Burada bir göz atalım.
Ralphie PARKER: "it Be Özetle tüm bilinen
Ralph Parker vesile tayin edildiğini Küçük Yetim Annie Secret üyesi
Çember ve tüm hakkı vardır onur ve faydaları bununla meydana. "
>> Ralphie PARKER (öykülemesi): Küçük Yetim Annie imzaladı.
Imzalandığı, Pierre Andre!
Mürekkeple.
Onur ve faydaları, Zaten dokuz yaşında.
>> [MÜZİK OYUN]
>> [RADYO CHATTER]
Ralphie PARKER: Hadi.
En onunla dönelim.
Ben tüm bu caz gerekmez kaçakçıları ve korsanlar hakkında.
RADYO ANONS: yarın Dinle sonuç macera için gece
Siyah Korsan Gemisinde.
Şimdi, zaman Annie'nin için var Eğer üyeler için gizli mesaj
Gizli Circle.
Çocuklar, sadece üyelere hatırla Annie'nin Gizli Circle
Annie'nin gizli mesaj deşifre edebilir.
>> Unutmayın, Annie sana bağlıdır.
B-2 için işaretçilerine ayarlayın.
İşte message-- 12, 11, 2--
Ralphie PARKER (anlatırken): Ben Benim ilk gizli toplantıda duyuyorum.
RADYO spikerinin: --25, 14, 11, 18, 16--
Ralphie PARKER (anlatırken): Ah, Pierre büyük bir ses gece oldu.
Ben o gece en söyleyebilirdi mesajı gerçekten çok önemliydi.
>> RADYO ANONS: --3, 25.
Bu Annie kendini bir mesajdır.
Kimseye söyleme, unutmayın.
>> [Panting]
Ralphie PARKER (öykülemesi): Doksan saniye sonra, ben değilim
tek odada Evin nerede dokuz bir çocuk
gizlilik ve decode oturup.
Ah.
"B"
>> [Güler]
>> Ralphie PARKER (öykülemesi): Bir sonraki gittim.
"E."
ilk kelime "olarak" dir.
Evet!
Şimdi daha kolay geliyordu.
"U."
>> [Güler]
>> Randy PARKER: Aw, Ralphie hadi.
Gitmeliyim!
>> Ralphie PARKER: Ben, sağ aşağı Ma olacak.
Vay canına.
"T" "O." "Emin olun için. "Ne" emin olun "?
Küçük Yetim Annie neydi demeye çalışıyor? Ne "emin olun"?
ANNE: Ralphie, Randy gitmek var.
Eğer çıkıp misin?
>> Ralphie PARKER: Pekala, anne!
Ben doğru dışarı olacağım!
Ralphie PARKER (öykülemesi): Ben yakın şimdi başlamıştı.
gerilim korkunç oldu.
Ne oldu?
gezegenin kaderi askıda olabilir.
>> ANNE: Ralphie, Randy gitmek lazım!
>> Ralphie PARKER: Birazdan döneceğim dışarı, yüksek sesle ağlama için!
Ralphie PARKER (Anlatan): Neredeyse orada!
Benim parmak uçtu!
Aklım bir çelik tuzak oldu.
Her gözenek vibrasyonlu.
Neredeyse açıktı!
Evet!
>> Ralphie PARKER: "Emin olun senin ovaltine içmek için. "
Ovaltine?
Bir köhne ticari?
>> [MÜZİK OYUN]
>> Ralphie PARKER: Orospu çocuğu.
>> [Gülüyor]
>> David J. MALAN: o zaman So ne kriptografi bir bakış
paha a için olabilir yesteryear içki.
Yani hızlı bir duyuru.
Eğer bu ücretsiz iseniz Cuma 13:15 de ve olur
CS50 için bize katılmak ister öğle, burada bu URL'ye baş.
Önce her zamanki gibi hizmet, gel.
Ama zamanla, biz emin olacağım Katılmak istiyorum çoğu kimse
zamanlama-bilge olabilir.
>> Yani dizeleri.
Biz Zamyla-- kime var Şimdi büyük olasılıkla tanıştım
Sorun Set 1-- olan isim Böylece yazıldığından.
Ve onun adını yazdığınız varsayalım bu bir bilgisayar programına
getString gibi bir şey kullanarak.
Almak üzere Bu tuş vuruşlarını, nasıl
Biz temsil gidiyorsun dize, bir kelime, bir paragraf,
veya bu gibi burada birden fazla harfler?
>> Biz yaklaşık son kez konuştuk tamsayı ve sorunlar
Bu tamsayı taşması ile ortaya ve kayan nokta değeri
ve sorunlar bu hassas içinde ortaya çıkar.
Dizeleri ile, en azından Biraz daha fazla esnekliğe sahip
strings-- çünkü sadece Gerçek --daha dünya olarak
oldukça keyfi uzunlukta olabilir.
Oldukça kısa, oldukça uzun.
Ama o zaman bile, biz gidiyoruz bulmak bilgisayarlar bazen olabilir ki
bellek yetersiz ve hatta koşmak yeterince büyük bir dizesini depolamak.
>> Ama şimdi, en görselleştirmek için başlayalım Bu kutulara şey olarak bir dize
işte.
Böylece altı kutu, her biri Bir karakteri ya da temsil "char,."
C-h-a-r-- - yani "karakter" olduğunu hatırlamak C. yerleşik veri türlerinden biri
Ve ne güzel kullanabilirsiniz olduğunu Bu tür bir yapı bloğu olarak,
Bir puzzle parçası, eğer sen, bir oluşturmak için Biz devam edeceğiz verilerin büyük türü
Bir "dizesini." aramak için
>> Şimdi, ne düşünme yararlıdır Bu şekilde dizeleri gibi şeyler?
Peki, biz can çıkıyor Aslında, bu yapı kaldıraç
Aslında bireysel karakterleri erişmek için oldukça basit bir şekilde.
Ben go ahead ve oluşturmak için gidiyorum adlı bir dosya "stringzero.c"
İstediğiniz ne olursa olsun ama sen diyebilirsin.
Ve dersin web sitesinde ise zaten önceden bu örnekte,
böylece gerek yok her şeyi yazın.
>> Ve ben önde gitmek için gidiyorum ilk int main boşluğu yok.
Ve bir kaç gün içinde, biz ayrı kızdırmak için başlayacağız
o yüzden ne boşluk, burada Ana yanında, vb int.
Ama şimdi, devam edelim kopyalamak için bu yapıştırın.
>> Ben s adında bir dize ilan edeceğim.
Ve ben dönmek için gidiyorum Ne olursa olsun kullanıcı türleri getString.
Bu basit olacak Program, hiçbir talimat,
Ben sadece körü körüne gidiyorum Kullanıcı biliyor bekliyoruz
ne basit tutmak için yapmak.
>> Ve şimdi ben döngü için bir var gidiyorum.
Ve benim için döngü içinde ben değilim Ben sıfır alır int olacak.
Ve ben, yine, sadece bir kuralıdır sayma için bir dizin değişkeni,
ama ben istiyorum ne olursa olsun bu diyebiliriz.
Ben de edemememden az yapacağım Zamyla adı altı harf uzunluğundadır.
Yani zor gidiyorum Şimdi orada kodu olduğunu.
>> Ve sonra i ++.
Ve şimdi bu kıvırcık içinde parantezi Ben, printf yapacağım
ve ben bir tane yazdırmak istiyorum Bir seferde bir karakter.
Yani için% c kullanmak için gidiyorum belki de ilk kez.
Ve sonra ben her yazdırmak istiyorum kendi satırında karakter.
Yani bir koymak için gidiyorum küçük ters eğik çizgi n var.
Kapat alıntı.
>> Ve şimdi burada bir şey yapmak istiyorum.
Ben yazdırmak istiyorum dizesinde özel mektup,
s, ben yineleme ediyorum gibi altı yukarı sıfırdan.
Başka bir deyişle, ben istiyorum s i'inci karakterini yazdırın.
Şimdi ben bunu nasıl yapabilirim?
>> Kutuları gibi Eh çok Burada bu temsil,
tür, boks kavramını hatırlatmak harfler, benzer şekilde bunu yapabilirsiniz
sözdizimsel sadece belirterek C, Ben karakter i'inci s 's yazdırmak istiyorum.
Köşeli parantez kullanma Bilgisayarınızın klavye üzerinde
Bir ABD klavye üzerinde olduğunu genellikle iade tuşun üzerinde.
>> Peki bu oldukça doğru değil Henüz, sen fark etmişsinizdir gibi.
Ama ben tür gidiyorum körü körüne burada adımlarla ilerlemek.
Ve ben dize 0 yapmak yapacağım.
Bunu Ama önce, en eğer bakalım biz Bazı yaygın hataları tahmin edemez.
Bu derlemek olacak mı?
Hayır, ben şeyler bir sürü eksik var.
Kütüphaneler duydum.
>> Yani başlık dosyaları hangi Burada eklemek isteyebilirsiniz?
Evet.
>> İZLEYİCİ: İhtiyacınız Standart I / O [duyulamaz]
>> DAVID J. MALAN: Mükemmel.
Yani standart I / O ihtiyacım var. Ne için Amaç Ben standart I / O istiyorsun?
Printf için.
Böylece stdio.h içerir.
Ve ayrıca ben dahil öneriyorum Ne nedenle CS50 kitaplığı?
Dizeleri sahip olmak.
Yani biz göreceğiz ne CS50 kütüphane yapıyor
bir dize bu kavramı yaratmak için.
Ama şimdi, sadece aklınıza gelebilecek Bunun gerçek bir veri türü olarak.
>> Yani biraz temizlenmiş gibi görünüyor.
Ve şimdi ben önde gitmek için gidiyorum ve gerçekten dize 0 yapabilirim.
Derleyen.
Yani iyi.
Yani bu yüzden biz yakınlaştırmak bana izin ./string0 daha yakından neler olduğunu görmek.
Girin.
Z-A-M-Y-L-A girin.
Ve biz Zamyla adının basılmış ettik.
>> Yani oldukça iyi.
Yani şimdi en önde gidelim ve Yine bu programı çalıştırın,
ve Daven tam adını yazın.
Sürpriz, sürpriz.
Girin.
Hmm.
Biz Daven basılı değil doğru, tam ilk isim.
Şimdi bu açık olmalı Çünkü Neyin geçmişi düşünme,
tür, aptal tasarım kararı?
>> Evet, ben sabit kodlanmış Benim döngü için altı iç.
Şimdi ben yaptım çünkü Ben Zamyla adını biliyordu
altı harf olacaktı.
Ama elbette bu değil genel bir çözüm.
Çıkıyor yüzden dinamik olabilir Bir dize uzunluğu anlamaya
strlen adında bir işlevi çağırarak.
>> Yine, kasıtlı kısaca sadece adında
yazın daha rahat yapmak için.
Ama bu eşanlamlı var Bir dize uzunluğunu almak.
Benim terminale geri dönmek için gidiyorum Pencere ve derleyici yeniden çalıştırın.
Ama bana bağırıyor.
Dolaylı olarak kütüphane fonksiyonu ilan const-- int işaretsiz tip strlen
Kayboldum.
Tamamen.
>> Nedenle, özellikle kayıt gözleri sır başlar
Böyle hata iletileri, odak dürüst ilk birkaç kelime üzerinde.
Biz sorun olduğunu biliyorum hat 8, burada belirtildiği gibi.
Ve bu dize 0.c öyle.
Dolaylı olarak ilan kütüphane işlevi strlen.
Yani genel olarak gidiyor Hata mesajlarının desen.
Örtük bir şey ilan.
>> Yani Kısacası, ben ne görünüyordu var Burada, 8 hat ile ilgili yapmış.
Ne olabileceğini çözüm bile olabilir Kendinize strlen hiç kullanmadım eğer?
>> İZLEYİCİ: Farklı bir kütüphane Bölüm?
DAVID J. MALAN: Bölüm Farklı bir kütüphane.
O bildirildi Yani, tabiri caizse.
Bazı dosyasında açıklanan stdio.h ve CS50.h. dışındaki
Şimdi nerede tanımlanır?
Dürüst olmak gerekirse, ya sadece var başınızın üst kapalı bu biliyorum,
veya bu Google'dan ve öğrenmek.
Ya da bu biliyorum, ben CS50 kadar açtık terminal programı, Cihazda hangi
sadece büyük, tam ekran versiyonu ne gedit penceresinin alt kısmında bulunuyor.
>> Ve bir var ki çıkıyor denilen benzer özlü komutu,
Eğer yazarsanız kılavuzda, man ve bir fonksiyonun adı, Enter'a
Eğer oldukça geri alırsınız arcane belgeler.
O genellikle sadece metin var Bu gibi küçük bir şey görünüyor.
Biraz ezici var İlk bakışta.
Ama açıkçası ben gidiyorum gözlerim üzerinde sır izin
ve sadece kısmen odaklanmak Şu an için önemsiyorum.
>> Bu hangisi.
Hangi yapısal benziyor bir şey aşina değilim.
Nitekim adam sayfası, bu yüzden konuşmak, size söyleyecektir
ne başlığı bir işlev dosya gibi strlen tanımlanır.
Yani gedit şimdi geri dönmek için gidiyorum.
Ve ben önde gitmek için gidiyorum ve Burada #include eklemek
ve dosyayı kaydedin.
>> Ben ekranı temizlemek için gidiyorum Kontrol L merak olduysan.
Ve ben makyaj yeniden çalıştırın gidiyorum string.0, bu sefer derler.
./string.0 Zamyla.
Bu beni gidelim çalışmak gibiydi önde ve Davenport ile yeniden çalıştırın.
Girin.
Ve bu da, iş gibi görünüyordu.
>> Bu yüzden, bu biraz daha iyi yapabilirim olsa da, biz düzenli şeyler başlayabilirsiniz
Sadece biraz yukarı.
Ve aslında gidiyorum Şimdi bir başka şey tanıtmak.
Ben önde gitmek için gidiyorum ve farklı bir dosyaya kaydetmek bu.
Ve ben diyeceğim Bu dosya string1.c sadece
kodu ile tutarlı olması online bulmak mümkün olacak.
>> Ve en odaklanmak izin aynı kodu.
Ben ettik çıkıyor alma olmuştur tür
verilen aslında benim laptop ki, ve bunun sonucunda, CS50 cihazı
Bellek bir sürü bir sürü var RAM, uzay bayt bir sürü
hangi ben dizeleri saklayabilirsiniz.
>> Ama gerçeklik Uzun yazdıysanız Yeterli ve yeterli tuş vuruşlarını,
Ben teori türü olabilir Daha fazla karakter
benim bilgisayar daha fiziksel bellek için vardır.
Ve bu sorunlu.
Çok bir int olabilir gibi sadece teoride, çok yüksek saymak,
Eğer sadece çok karakter tıkmak olabilir Bilgisayarınızın RAM veya Random içine
Erişim Belleği.
>> Ben daha iyi tahmin etmişti Bu problemi daha da
nadir bir olabilir ama Köşe durumda, tabiri caizse.
Sık olmaz, olabilirdi.
O olur ve eğer Ve ben yok tahmin ve bunun için bir program,
benim program kim bilir ne yapabilirdi.
, Neyse reboot, Freeze asmak.
Bir şey ne olabilir beklenen.
>> Yani yapacağım ne Şimdi, bundan böyle gerçekten
Hiç körü körüne I öncedir s gibi bir değişken kullanmak olduğunu
dönüş değeri atanmıştır getString gibi diğer bazı fonksiyon,
Ben emin olmak için gidiyorum Bu değeri geçerlidir.
Yani okuduktan yalnızca biliyorum GetString için CS50 belgelerine,
hangi sonuçta biz sizi işaret edeceğiz, Bu getString özel bir sembol döndürür
Tüm NULL, N-U-L-L denilen bir şey yanlış giderse, kapaklar.
>> Yani normalde, bir dize döndürür.
Ama N-U-L-ben- döndürür aksi takdirde biz sonunda gerçekten ne olduğunu göreceksiniz
sadece araçları means-- kötü bir şey oldu.
Şimdi bu kadar Scratch gibi, anlamı, Ben, C burada durumunu kontrol edebilirsiniz
s eşit NULL yok değilse.
Eğer daha önce bu görmedim Yani, Sadece demek bu eşit değil.
>> Peki bunun tersi , hatırlamak eşit eşittir,
Tek farklıdır atama olan eşittir.
S eşit değildir Yani eğer NULL, ancak o zaman yapılacak
Ben bu kod satırları yürütmek istiyorum.
Bu yüzden, diğer bir deyişle Ben körü körüne dalış önce
ve iterating başlar s üzerinde, ve onu tedavi
bu bir dizi sanki karakter, ben, ilk kontrol edeceğim
Bir dakika bekleyin, kesinlikle bu değil ise Bu özel değere eşit, NULL?
>> Eğer öyleyse, kötü şeyler olabilir çünkü.
Ve şimdi, o kötü şeyler varsayalım Program çöküyor demektir oluyor,
ve mutlaka kurtaramazsınız.
Yani açıkçası, bu çirkin görünüyor.
bu tür bakmadı şimdi kafa karıştırıcı oluyor.
Ama bu daha olacak uzun zaman önce tanıdık.
>> Ama ben teklif gidiyorum Şimdi bir başka gelişme.
Bu doğruluğunu bir gelişme var.
Benim program nedeniyle, artık daha doğru Nadir durumlarda bu yeterli değil bellek
Ben bunu idare edecek Varlığından, ve ben sadece bir şey yapacağım.
Ben en azından çökmesine olmaz.
>> Ama burada bir son versiyonunu yapalım.
Ve bir dosya string2.c çağırdı.
Bunu yapıştırmak için gidiyorum Sadece bir an için aynı kod,
ve ben bu vurgulamak için gidiyorum Sadece bir an için burada çizgi, 11,.
Şimdi gerçeklik bu akıllı derleyiciler olduğunu Clang bizim için bu düzeltmek gibi
sahne arkasında bizim hiç bilmeden.
Ama bu konuda düşünelim temelde sorunlu bir tasarım olarak.
>> Kod bu hat, tabii ki, diyerek, bazı değişken i 0 başlatılamadı.
Bu oldukça basittir.
Ve yine bu nedir Açıklamada, burada, ben yapıyorum, ++?
Biz daha önce görmüştüm, ama biz ettik Gerçekten bu konuda konuşmak değildi.
>> İZLEYİCİ: i artırma.
>> DAVID J. MALAN: i artırma.
Aracılığıyla her yineleme Yani Bu döngü, her döngü,
Eğer tek i artırılmıyor ediyoruz.
Bu yüzden büyük ve büyüdükçe, ve döngü sona kadar büyük.
Nasıl sona erer?
Peki bu orta var Daha önce kullanmış olduğunuz durum.
Siz de gördüm ve P kümesi izlenecek yollar.
>> Ama bu deyiş nedir?
Için aşağıdaki döngü yapın Uzun ben ne az olduğu?
HEDEF KİTLE: dize uzunluğu.
DAVID J. MALAN: dize uzunluğu.
Yani oldukça temiz çevirir Bu anlamda İngilizce.
Şimdi sorun her zaman ki ben Teoride bu döngü içinde yineleme,
Ben bu soruyu soruyorum.
Ben s dize uzunluğundan daha az mı?
>> Şimdi ben her tekrarında değişiyor?
Öyle.
++ Yüzünden.
Yani her yineleme i büyük oluyor.
Ama s büyüyor, ya da küçük, ya da hiç değişiyor?
Hayır.
Tasarım açısından, eksenlerinden biri Yani hangi boyunca biz kod değerlendirmek için çalışın
sınıfta, bu tür aptalca geliyor.
>> Eğer tam anlamıyla gibi, Her yineleme
Bu döngü soran Yine aynı lanet soru,
ve tekrar ve tekrar ve tam anlamıyla asla değiştirmek için gidiyor.
Ben s dokunmadan değilim en azından eğer ve s içeriğini değiştirmek için çalışıyorum.
Yani bu biraz daha iyi yapabilirim.
>> Ve ne yapacağım değil sadece bir değişken i beyan
ancak ikinci değişken Ben, keyfi olacak ama geleneksel, n diyoruz.
N eşittir atama s dize uzunluğu.
Ve sonra buraya, ben gidiyorum yani, bir akıllı küçük optimizasyon yapmak
günün sonunda, bu söz daha doğru veya daha az doğru
daha önce.
Ama daha iyi bir tasarım var.
Aslında ben kullanıyorum daha az zaman, daha az CPU döngülerini, bu yüzden
Aynı cevap, konuşmak soru, ama sadece bir kez.
>> Bu genel ilgili bütün soruları iyileştirilmesi ilkesi,
Bir programın verimliliği, ki?
Evet?
HEDEF KİTLE: Neden do you [duyulamaz] kullanılır?
DAVID J. MALAN: İyi bir soru.
Peki neden biz ucunda ++ koymak Ben yerine i başlangıcı?
Bu durumda, var fonksiyonel etkisi.
Ve genel olarak, ben eğilimindedir postfix operatörünü kullanabilirsiniz
biraz daha net olarak bu şekilde işlem oluyor ne zaman.
>> Bu alışılmadık için, başka var Eğer ++ i yapabileceğini sayede ifadeleri.
Bu işlevsel olarak Bu durumda eş
başka bir şey yok, çünkü Bu incrementation etrafında.
Ama birlikte gelebilir olgu ve kod satırları
hangi bir fark yaratıyor.
Yani genel olarak, biz yapmak Hatta bu bir konuda konuşmak.
Açıkçası Çünkü, o, sizin yapar Kod seksi ve çeşit yağmurluk,
ve daha az karakter.
Ama gerçek, bu çok zor olduğunu Bana fikrimi sarmak için bile, bence
bazen etrafında, operasyonların sırası.
Bir kenara olarak, eğer Yani Gerçekten, bu sevmiyorum
Hatta bu tür seksi olsa seyir, sen de yapabilirsiniz i + = 1,
olan çirkin versiyonu postfix incrementation için aynı fikir.
>> Ben bu ve seni demek Bunun eğlenceli yapmak gerekir,
ama siz kodunu görmek için gelecek uzun zaman önce güzel bir şey.
>> [KAHKAHA]
>> DAVID J. MALAN: Sağ?
Evet.
Ortada soru.
>> İZLEYİCİ: int n söylememe gerek var mı?
DAVID J. MALAN: Yapmanız int n söylemek gerek.
Biz zaten int dedi çünkü Yani, Tekrar söylemek gerekmez.
yakalamak n olmasıdır i aynı veri türü.
Yani burada sadece bir kolaylık.
Evet.
>> İZLEYİCİ: Eğer üzerinden gidebilir miyim Baskı karakterin s dirsek tekrar?
DAVID J. MALAN: Kesinlikle.
Yani% c, son hatırlayacaksınız Zaman, sadece bir yer tutucudur.
Burada bir char koymak anlamına gelir.
eğik N, tabii ki, sadece araçlar burada bir satır sonu koydu.
, Şimdi, yaprakları Böylece Yeni sözdizimi bu parça.
Ve bu anlamıyla kapmak, diyor string s çağırdı ve gidip onun
i'inci karakter, tabiri caizse.
>> Ve ben i'inci karakteri söylemeye devam Çünkü bu döngünün her tekrarında
Biz yazdırdığınız sanki bulunuyor dışarı, ilk s dirsek 0,
Bir programcı diyebilirsiniz.
Sonra s sonra, dirsek 1 s dirsek 2, daha sonra 3, 4.
Ama tabii bu bir değişken var, bu yüzden sadece i ile ifade.
>> Anahtar olsa da, fark etmek, değil ettik özellikle
Bu dünyaya acclimating edilmiştir programlama, hepimiz
lazım, sıfırdan saymak gibi görünüyor Şimdi sıfırdan saymaya başlar.
Çünkü dizeleri, ilk karakter, Zamyla z için iyi ya da kötü olduğunu
Konumu numarası sıfır yaşayacağım.
>> Pekala, bana getirsin Burada Zamyla için bize geri
ve gerçekten ne olup bittiğini görmek Kaputun altında üzerine.
Yani tipi döküm bu kavramı var.
Aslında olabilir Zaten bu ile oynanan,
belki hacker için P baskısı birini ayarlayın.
Ama tip döküm sadece anlamına gelir C yetenek ve bazı diğer diller
başka bir veri türüne dönüştürmek için.
>> Şimdi bu nasıl olabilir Oldukça delikanlı?
Yani, başlangıç ​​bu, hatırlama olduğunu İngiliz alfabesinin.
Ve bağlam, gelen, hatırlamak gibi bir hafta önce ASCII.
Amerikan Standart Kodu Bilgi Alışverişi için.
Hangi sadece gerçekten uzun bir yol olduğunu harfler bir eşleme söyleyerek
numaraları ve numaralardan gelen mektuplar.
>> Yani A, M ile burada, nokta nokta nokta, çizgiler ile, geri çağırma,
up ondalık sayı 65.
Ve biz konuşmadık açıkça bu konuda,
ama kesinlikle benzer var küçük harf sayılar.
Gerçekten de vardır.
Dünya birkaç yıl verdi önce o küçük bir, bir küçük harf,
97 olacak.
Ve küçük b gidiyor vb 98 ve olmak.
>> Ve herhangi bir diğer anahtarı için Klavyeniz, orada
bit benzer bir model olacak.
Ya da eşdeğeri, bir ondalık sayı.
Yani eldeki soru, Daha sonra, biz nasıl olabilir olduğu
Aslında başlık altında bu gördün mü?
Bu yüzden tekrar gedit üzerinde gitmek için gidiyorum.
Ve yerine türü daha sıfırdan bu bir,
Ben önde gitmek için gidiyorum ve Bir şey açmak
Bugünün kodundan ASCII sıfır çağırdı.
>> Ve ASCII sıfır bu gibi görünüyor.
Yani bu çevrede aklımızı sarın edelim.
Yani ilk ben yorumladı ettik güzel kod.
Tam anlamıyla Çünkü ne bekleyebileceğinizi bana,
Büyük harfler için bir eşleme görüntüler.
Şimdi ben çok bilmiyorum ne Bu demek, o yüzden anlaması edelim.
>> In English, belki biraz teknik okul İngilizce,
Ne hat 18 görünür yapar Bizim için yapıyor olması?
Sadece 18 satır.
Ne uyaran var?
Ne burada tekmelemek için gidiyor?
>> İZLEYİCİ: Bir döngü.
>> DAVID J. MALAN: Bir döngü.
Ve kaç kere yineleme olacak ki?
HEDEF KİTLE: [SESLER interposing] altı kez.
DAVID J. MALAN: Değil altı kez.
HEDEF KİTLE: 26 kere.
DAVID J. MALAN: 26 kere.
Evet, üzgünüm.
26 kez.
Neden?
Peki, biraz tuhaf, ama Ben 65 saymaya başladım.
Hangi garip, ama yanlış değildir.
Bu demek başına kötü değil.
Ve ben yapıyorum sadece çünkü bu, örneğin,
Ben tür tahmin ediyorum sermaye 65 oldu.
Şimdi bu değil en zarif yol sabit kod tür, bunu yapmak için
gizli değerler hiç kimsenin hiç hatırlamıyorum bekleniyor.
>> Ama şimdi, ben fark 65 artı 26 ile bu kadar yapıyor.
Görünüşte bile istemiyorum çünkü Kafamdaki aritmetik yapmak.
Yani derleyici bunu izin vereceğim.
Ama sonra her döngü, her yineleme döngü, ben i artırma ediyorum.
>> Peki şimdi bu biraz şifreli görünüyor.
Ama biz temel bina olmalı bloklar Bunu anlamak için.
% C karakter için sadece bir yer tutucudur.
% I int için bir yer tutucudur.
Ve bu kullanarak çıkıyor Yeni sözdizimi, bu parantez, bu yüzden
konuşmak bir veri türü öylesine Bir parantez içinde
Ben tedavi için derleyici zorlayabilir ı olmayan bir tamsayıdır, ancak char.
>> Böylece bana karakteri gösteren bu sayının eşdeğer.
Şimdi buraya, bu kod hemen hemen aynıdır.
Ben sadece yapmak istedim Süper açık bir gerçektir
Ben 97 ile başlıyorum ki, hangi bir küçük harf edilir.
Kadar 26 daha fazla harf aracılığıyla.
Ve ben, yine doing-- ediyorum i döküm, tabiri caizse.
Veya tipi döküm i, tabiri caizse.
>> Bir karakter bir int itibaren.
Yani sonuç olacak, açıkçası, bilgi zaten biliyoruz.
Ben yapmak için gidiyorum ascii-0 c nokta değil dot--.
Uyarı, muhtemelen bu yapılan hata Ben sadece yanlışlıkla yaptım.
ASCII-0 olun.
Şimdi ./ascii-0 yapacağım.
Ben yakınlaştırmak, ve ne yazık ki edeceğiz ekranı kapalı kaydırmak için gidiyor.
Ama biz bütün grafik nerede görmek 97 bir harita, 98 b haritalar,
ve biz daha fazla yukarı ilerleyin eğer A, tabii ki, 65 alır.
Yani bu demek sadece ne vaaz oldum,
Bu denklik, orada olduğunu Gerçekte aslında bir durumda.
Yani bu hızlı değişiklik.
Beni ascii-1.c açalım.
Ve sıralama, bu akıllı fark bir, bu açıklama.
Bu ascii-1.c ve Bu çılgın şey fark.
>> Ve bu gerçekten kalp alır ne bilgisayarlar yapıyoruz.
Hatta biz insanlar olur ama harflerinden açısından sayılmaz
Ben düşünmeye başlamak yok, tamam sonra b,
ve fiziksel nesneleri saymak için bunları kullanın.
Kesinlikle ben istiyorum diyebilirim denilen bazı değişkeni başlatmak C-
ama bu herhangibirşey denilen olabilirdi yani c sermaye A'ya başlatıldı
>> Günün sonunda, bilgisayar için Eğer depolama şeyi umursamıyor,
sadece istediğiniz nasıl umurunda Bu bilgiyi sunmak için.
Bilgisayarı istiyorsun nasıl bit o desen yorumlamak?
Yani bu bir şey değil Genellikle bunu tavsiye ederim.
Bu gerçekten sadece bir örnek iletmek olduğunu kesinlikle can
Bir karakter bir tamsayı başlatılamıyor.
Çünkü altında Bir char başlık, elbette,
0 ile 255 sadece bir sayı.
>> Yani kesinlikle can Bir int içine koydu.
Ve ne bu da olduğunu gösterir biz o
birinden dönüştürebilirsiniz Burada, başka yazın,
sonuçta aynı şeyi baskı.
Ve aslında, bu benim online-- çözecektir Burada, yine, bu demek gerekiyordu.
Beni çevrimiçi bu kadar temiz edelim ve yaparız gerektiği gibi bir çevrimiçi örneklerde görmek,
orada ne amaçlanmıştır.
>> Tamam.
Şimdi içeren Yani son örnek Bir üyenin b en sonra yaparız
Bir çentik şeyleri almak.
Bir ve b ve So harf c en
ve eşdeğerlik bunların, diyelim Burada, bu örnekte bir göz atın.
Başka bir kod örneği.
Biz olanı açacağım zaten yapılmış, biz böylece
yazmanız gerekmez Tüm sıfırdan dışarı.
Beklentisiyle >> Ve haber Biz birden başlık kullanıyorsanız
olan arasında dosya, Yeni arkadaş, string.h.
Şimdi bu ilk görünüyor bakışta biraz şifreli.
Ama biz akıl edemez bakalım Burada neler oluyor yoluyla.
Önce kullanıcıdan bir dize olsun, ve ben bir değişkene o dize koymak
denilen s.
Önce gelen macun kopyalayın.
Hat 22, ben görünüşe değilim tam olarak ne yapıyor
Ben yineleme ediyorum, bir an önce yaptım s karakter üzerinde.
>> Ve burada yeni hileler kullanan dize uzunluğu, küçük optimizasyon
n dize uzunluğu depolama, yerine tekrar strlen çağıran daha,
ve tekrar ve tekrar.
Ve sadece ben n daha az olduğunu kontrol.
Şimdi burada, işler olsun Biraz ilginç.
Ama sadece bir uygulama var Bu aynı yeni fikir.
İngilizce yapar ne Ben temsil s braket?
>> İZLEYİCİ: Sayma her karakter [duyulamaz].
>> DAVID J. MALAN: Her karakteri Sayma.
Ve hatta daha özlü, s dirsek i neyi temsil?
Hemfikir.
Burada yerinde koymak için değil.
>> İZLEYİCİ: Şey--
DAVID J. MALAN: kelime eğer bu-- Yani eğer dize başlar-- Zamyla olduğunu
İZLEYİCİ: --Sen başa karakter separately--
DAVID J. MALAN: İyi.
Kesinlikle.
köşeli ayraç notasyonu olanak sağlar tek tek her karaktere erişmek için,
böylece s dirsek 0 olacak dizesinde ilk karakter.
s dirseği 1 olacak benzeri ikinci, vb.
Yani soru soruyorum, Burada, bu durumda nedir?
S daha fazlası, i'inci karakter eşit veya bir küçük harfe?
Ve bu, burada, ne demek Çift adet ve işareti ile?
KİTLE (BİRLİKTE): Ve.
DAVID J. MALAN: Ve.
Bu sadece eşdeğerdir.
Ve C bir anahtar kelime değil, var kullanım, rahatsız edici, işareti işareti.
Ve bu, tersine, soran olduğunu karakter i'inci s en az veya eşit
z küçük harfe?
Ve yine, burada nerede Altta yatan anlama
Bir uygulama Bilgisayar mantıklı.
Ben olsa bile, dikkat edin nokta nokta nokta orada,
küçük harflerle z yoluyla gibi görünüyor edilir yukarı yukarı 97 tüm bitişik değerleri.
>> Ve 65 ° C'de başlayan büyük harf için aynı.
Yani paket, daha sonra, Bu, İngilizcedir
Eğer tarif nasıl 24 ne yaptığını çizgi?
Evet?
>> İZLEYİCİ: 24 Açık görmek için kontrol ediyor ister her karakter bir küçük olduğunu.
DAVID J. MALAN: Bu olup olmadığını kontrol ediyor Her karakterin bir küçük harf olduğunu.
Yani daha özlü olduğu s küçük harf i'inci karakter?
Yani hepimiz var mantıksal burada ifade,
Küçük bir üstü kapalı, fakat sonuçta oldukça delikanlı.
Karakter küçük harf i'inci s en midir?
>> Eğer öyleyse, ve burada nerede şeyler var Biraz zihin bükme olsun
Sadece bir an için, eğer öyleyse, gidip önde ve bir karakter çıktı.
Yani bu sadece bir yer tutucudur, ama ne karakter?
Neden s dirseğini i yapıyorum eksi burada bu ifade?
>> Peki burada desen dikkat edin.
Gerçek sayılar çok önemli değil.
Ama 97 olduğunu fark ne kadar uzakta 65?
>> İZLEYİCİ: 32.
>> DAVID J. MALAN: 32.
Ne kadar uzakta 66'dan 98?
>> İZLEYİCİ: 32.
>> DAVID J. MALAN: Büyük C Little c?
32.
Yani 32 şerbetçiotu var Başka bir mektup.
Yani açıkçası ben, olabilir bu, bu kolaylaştırır.
Ama sonra biraz zor kodlama ediyorum Bu düşük seviye anlayışı
Hiçbir okuyucu hiç olduğunu anlamak için gidiyor.
Yani bunu gibi genelleme için gidiyorum, ben biliyorum küçük harfler büyüktür.
Ben büyük harfler biliyorum küçük değerler, ironik.
>> Ancak bu etkin bir eşdeğerdir s dirsek i den 32 çıkarma diyerek.
Bu bağlamında Yani harfler, mektupta ise
Bir, küçük harf olur Bir, ve ben 32 çıkarma,
Bu nasıl bir etkisi var mı, matematiksel, bir küçük harf?
İZLEYİCİ: Capitalizes--
DAVID J. MALAN: it harfe çevirir.
Ve gerçekten de, bu yüzden bizim Program sıfır yararlanmak denir.
Bu program ya Mektup istifade,
o ise kontrol ettikten sonra gerçekten küçük harf.
Aksi takdirde, hat 30, ben ise ne yapmalıyım ben olduğumu bir küçük harf değil
Belirli bir de bakıyor döngü içinde yineleme.
Sadece çıktı.
>> Peki şeyler değişmez hatta küçük değil.
Kendinizi sınırla Küçük z yoluyla küçük bir.
Şimdi bu oldukça gizemli olduğunu.
Ama günün sonunda, bu nasıl, bir zamanlar, bir
şeyleri uygulamak zorunda.
Bunun yerine yararlanmak açarsanız bir oh şükür.
Bir işlev var Üst denilen o can
biz sadece yaptığımız her şeyi oldukça düşük bir seviyede.
>> Şimdi üst ilginç Bir dosyada ilan çünkü,
ve sadece bu bilemez belgeleri kontrol ederek,
veya sınıf içinde, diyelim ki, söylenme Bir dosya adı verilen ctype.h, var.
Yani bu bizim yeni bir arkadaş.
Ve üst tam yapar için Adından da anlaşılacağı ne.
>> Sen arasında, bir argüman olarak, iletebilirsiniz Bu parantez, bazı karakter.
Ben i'inci karakter geçmek için gidiyorum bizim fantezi yeni notasyonu kullanarak s
köşeli parantez içeren.
Ve bir tahmin almak, dönüş nedir Üst için değeri görünüşte gidiyor
olmak?
Bir harf.
>> Yani küçük a geçmek ise, umarım, üst kadar tanımı gereği,
bir geri gidiyor Aksi takdirde büyük A.
o bir küçük harf değilse ilk etapta, ben sadece bunu yazdırın.
Ve gerçekten de, fark Burada ikinci arkadaşım.
Sadece üst var için, ama daha düşük olan
Aslında benim için soru cevaplar.
>> Şimdi bunları kim yazdı, 10s yıl önce, biliyor musun?
Üst için uygulanan ve bir Bu gibi kodu kullanarak düşük.
Ancak yine, tutarlı uzak soyutlama bu fikri,
tür, alt düzey uygulama detayları.
Ve insanların omuzlarında ayakta kim fonksiyonlarını kullanarak, bizden önce geldi
Üst nasıl bir ve düşük olan harika yeterli güzel vardır
Onlar ne demek adlı, bir Harika bir paradigma kabul etmek.
>> Şimdi, ben okursanız çıkıyor , man sayfasında, üst için, demek
Ben başka bir şey öğrenirler.
Böylece adam toUpper.
Biraz bunaltıcı.
Ama ihbar, burada o söz var Ben kullanmanız gereken başlık dosyası.
Bir kenara, çünkü bu gibi yanıltıcı, işlev
int'leri yerine karakter kullanır Hata denetimi nedenlerle.
Ama biz belki gelirim geri o gelecekte.
>> Ama üst dönüştürür, burada fark mümkünse c harfi büyük harfe.
Yani oldukça basittir.
Ve şimdi biraz daha spesifik olalım.
En parçası bakalım dönüş değerinin altında adam sayfası.
döndürülen değer olduğunu Dönüştürülen mektup.
Veya c, eğer dönüşüm mümkün değildi
burada c orijinal girişi.
Hangi Ben, burada biliyorum Üst için argüman.
>> Peki bu paket nedir?
döndürülen değer olduğunu Dönüştürülen mektup,
veya c, orijinal mektup, eğer dönüşüm mümkün değildi.
Ne iyileşme bu nedenle can Benim kodun tasarım yapmak?
Evet?
>> İZLEYİCİ: Başka kaldırabilirsiniz.
DAVID J. MALAN: I can Başka deyimini kaldırmak,
ve sadece else.
>> İZLEYİCİ: Sen [duyulamaz] kaldırabilirsiniz.
>> DAVID J. MALAN: I can Bütün çatal kaldırma
yol, else if tamamen.
Yani gerçekten, bana açalım Bu son sürümü,
eğer,-2 yararlanmak ve nasıl sadece fark Eğer, seksi, kod artık oluyor edecek,
ki bazı indirgenmiş ettik Yedi ya da öylesine, sadece dört satır,
Ben amaçlanan işlevsellik sadece üst için arayarak,
s dirsek i, ve baskı geçirerek dışarı, tutucu% c ile,
o karakter.
>> Şimdi belki, bir hata var, ya bir hata en az riski,
Bu programda.
Yani sadece geri gelmek önceki bir paket için,
Ben muhtemelen ne yapmak gerekir Bu program, daha güçlü hale getirmek için,
hiçbir yolu yoktur, böylece can hatta nadir durumlarda, çökmesine?
HEDEF KİTLE: NULL değil emin olun.
DAVID J. MALAN: NULL değil emin olun.
Yani gerçekten, bu süper yapmak için Doğru, ben gibi bir şey yapmalıyım
s NULL, değilse go ahead ve yürütmek
bu kod satırları, hangi I can sonra böyle girinti,
ve sonra benim yakın parantez koymak.
Birlikte iki fikir ipe Çok iyi.
Evet?
HEDEF KİTLE: Kullandığınız Could Bir yerine, döngü sırasında yapılacak?
DAVID J. MALAN: Could Ben bir do while döngüsü do?
HEDEF KİTLE: --Sen emin olmak istiyorum aslında [duyulamaz] söyledi.
DAVID J. MALAN: Could Bir do yaparken kullanmak?
Kısa cevap, hayır.
Eğer üzeresin Çünkü Başka bir köşe davayı tanıtmak.
Dize sıfır uzunlukta değilse.
Örneğin, ben sadece vurursanız Hiç Zamyla yazmadan girin.
Ben geri gerçek sizi el gidiyorum dize, biz sonunda göreceğimiz gibi,
sıfır karakter vardır.
Hala bir dize var, sadece süper kısa.
Ama sırasında do kullanırsanız, Eğer körü körüne gidiyoruz
ile bir şeyler yapmaya çalışın Bu dizeye saygı,
ve hiçbir şey olacak.
>> İZLEYİCİ: Peki, yapsam yapmak [duyulamaz] s- ise
DAVID J. MALAN: Ah anlıyorum, tutmak kullanıcıdan bir dize alıyorum.
Yani kısa cevap, sen ve pestering tutmak
Onları size bu bir dize vermek belleğe sığacak kadar kısa.
Kesinlikle.
Ben sadece seçti.
Onlar bana dize I vermezsek istiyorum, ben bırakıyorum, ben veriyorum.
Ancak, kesinlikle bu amaçla, kesinlikle bunu yapabilir.
>> Yani kütüphanenin başlık dosyaları olduğunu Şimdi burada, bunlar aşina.
Standart I / O, CS50.h, string.h, ctype.h ve gerçekten, başkaları da var.
Bazılarınız keşfettim math.h. matematik kütüphanesi
Ama benim için, şimdi, seni tanıştırayım Bu kaynak, CS50 personel, Davin,
ve Rob ve Gabe özellikle bir araya getirdik.
Bu yakında bağlayacak dersin web sitesini.
Bu CS50 referans denir.
>> Sadece size hızlı vermek için hangi aşağıdaki gibi onun tadı, çalışır.
Beni reference.cs50.net gidelim.
Sol taraftan görürsünüz ezici bir liste yan
c ile gelen fonksiyonlar.
Ama şu an için, bakım eğer, strlen gibi bir şey hakkında,
Ben orada yazabilirsiniz.
Bu listede aşağı filtreler Ben umurumda sadece ne için.
Ben tıklayın gidiyorum.
Ve şimdi, sol biz umut istediğimi görürsünüz
Daha basit, insan nasıl dost açıklama
Bu fonksiyon çalışır.
>> Bir dize uzunluğunu döndürür.
İşte özet burada, bu sizi nasıl başlık dosyasında açısından kullanmak,
ve ne fonksiyon açısından kendi argümanları bakımından benziyor.
Ve sonra burada, döner bir dize uzunluğu.
Ama daha rahat o sizin için, aslında, daha rahat tıklayabilirsiniz
ve bu içeriği sayfa, şimdi, değişecek
Neyin varsayılan değerler için man sayfasını kullanarak olsun.
>> Diğer bir deyişle, CS50 Referans bir basitleştirme
Öğrenciler için personel tarafından man sayfaları, ve.
Özellikle, bu daha az rahat ve, aralarında, böylece
kaydırmak için denemek zorunda değilsiniz Aklını etrafında, açıkçası,
Bazı oldukça şifreli sözdizimi bazen ve dokümantasyon.
>> Yani akılda tutmak gün gelecek.
Yani burada, yine, bir Zamyla olduğunu.
Şimdi bu bir soru sorayım Biraz daha insani erişilebilir.
Oldu Chang sayesinde, Daha fazla filler baskı
Son birkaç gündür aralıksız.
Biz vermek için bir fırsat var onlardan en azından birinin.
Biz sadece bir gönüllü alabilir Eğer Ekranda çizmek için yukarı gelmek.
Nasıl hakkında burada?
>> Yukarı gel.
Adın ne?
ALEX: Alex.
DAVID J. MALAN: Alex.
Tamam.
Alex, gel.
Biz görmek üzereyiz senin Burada ekranda el yazısı.
Pekala, nice to meet you.
>> ALEX: Nice meet you.
>> DAVID J. MALAN: Pekala.
Yani, süper basit egzersiz.
Bar yüksek değil Bugün bir fil olsun.
Sen getString rol oynuyor.
Ve ben sadece söylemek için gidiyorum Eğer ele verdik dize.
Ve, senin varsayalım getString, adı olmuştur.
Ve insan, benim gibi, vardır Zamyla, Z-A-M-Y-L-A yazdınız.
Sadece devam edin ve üzerinde Zamyla bilgileri Ekran bunu aldık sanki
ve bellekte bir yere saklanır.
>> Birkaç nasıl olacak oda bırakmak Tamam diğer Kelimelerden--, devam et.
>> [KAHKAHA]
>> Peki Zamyla, mükemmel.
Şimdi varsayalım ki senin, getString, tekrar denir.
Ve bu nedenle, ben de, size Klavye, başka bir isim, Belinda ile.
Tamam.
Ve şimdi bir dahaki sefere getString olduğunu denilen, ben, Gabe gibi bir şey yazın
G-A-B-E. Gerçekten alıyorsun Kalp rasgele erişim belleği.
Hangi şeyi çizim Tamamen rastgele.
TAMAM MI.
>> [KAHKAHA]
ALEX: Üzgünüm benim el yazısı kötü.
DAVID J. MALAN: Hayır, sorun değil.
Ve nasıl Rob, R-O-B hakkında. TAMAM MI.
İyi.
Yani sana olacağını tahmin etmedi tür, bu şekilde şeyler yatıyordu.
Ama biz bu işi yapabilir.
Peki döşeme konusunda nasıl gitti bellekte bu karakter üzerinden?
Diğer bir deyişle, biz düşünüyorsanız Bu dikdörtgen siyah ekran
Bir temsil ettiği Bilgisayarınızın RAM veya bellek.
>> Ve RAM sadece olduğunu hatırlamak bayt bir sürü,
ve bayt bit bir sürü vardır.
Ve bit şekilde vardır genel olarak, uygulanan
bir çeşit donanım elektrik.
Yani bir çeşit Biz konuştuk katman
verilen ve şimdi alabilir.
Nasıl hakkında gitti nerede yazmaya karar
Rob karşı Gabe karşı Zamyla karşı Belinda?
>> ALEX: Ben sadece bunu yaptım Bana söyledi sipariş.
>> DAVID J. MALAN: Ve bu doğrudur.
Ama ne nerede koymak idare Belinda adı ve Gabe adı?
>> ALEX: Hiçbir şey?
DAVID J. MALAN: [Gülüyor] Yani çalıştığını, bu iyi.
Yani bilgisayarlar az olan Bundan daha düzenli.
Ve böylece biz orada kalmak implement-- zaman zaman aslında biz sadece bir moment-- için
gibi bir şey uygulamak Bir bilgisayarda getString,
Zamyla hemen hemen ortaya koydu olabilir gibi orada, ekranda yaptım.
>> Ve fark anahtarı nedir Burada, Alex ne yaptı,
bir sınır tür var Bu kelimelerin her biri arasında, değil mi?
Sen yazmadım A-Z-E-Y-L-A-B-E-L-I-N-D-A-G-A-B-,
diğer bir deyişle, bir tür var gibi görünüyor sınır,
tür, rastgele aralığı Bu çeşitli sözcükler arasında.
Ama bu, çünkü iyi biz insanlar artık can
Bu olduğu görselleştirmek Dört farklı dizeleri.
Bu sadece bir dizi değil karakter bir sürü.
Yani bir bilgisayar, daha sonra, bu arada, Zamyla gibi bir dize sürebilir,
Bu harflerin her biri koymak belleğin bir bayt içinde.
Ama bu sayı çok daha büyüktür Tabii, altı karakterden daha.
>> RAM bir sürü var.
Ve böylece bundan sonra, bu Kutuların ızgara gidiyor
ne Alex, sadece temsil etmek Ekranda burada yaptım.
Ve şimdi, Alex, size bir sunabilir mavi veya Chang bir turuncu fil.
ALEX: Ben mavi fil alacağım.
DAVID J. MALAN: Mavi fil.
Yani alkış büyük bir yuvarlak, Alex için buraya, eğer olabilir.
>> [Alkış]
>> ALEX: Teşekkür ederim.
DAVID J. MALAN: Teşekkür ederim.
Yani paket olduğunu, bu bile desen tür burada, zamanla değişti
Gemide, bu vardı Çeşitli dizeleri arasında sınır
Alex bizim için var olduğunu.
Şimdi bilgisayarlar, açıkçası, Aynı şeyi yapabilirdi.
Onlar tür plop olabilir her yerde RAM içinde dizeleri.
Burada yukarı, buraya, Burada aşağı buraya.
>> Onlar tam bunu yapabilir.
Ama, tabii, işte muhtemelen en iyi planlama.
Doğru?
Ben Alex soran devam ederse adlarını almak, muhtemelen o ediyorum
belki yukarı, burada biraz daha indirdi Burada, buraya, buraya, sonunda
buraya.
Ama biraz daha planlama ile, kesinlikle, daha temiz şeyler yatıyordu.
Ve gerçekten de, bir bilgisayar ne var.
>> Ama yakalamak olduğunu eğer olsun bir sonraki dize
Zamyla şey sonra Belinda gibi,
Biz yazmak olabilir nerede teklif Bu ızgara ile ilgili b mektup?
Nereye gitmek istiyorsunuz?
A sağında, a altında z, aşağıda?
İlk içgüdüleri ne olurdu?
HEDEF KİTLE: z görebilirsiniz.
DAVID J. MALAN: Yani z altında.
Ve bu oldukça var basit, değil mi?
Bu düzgün tür, biz ne var Bir klavyede biz Enter vurduğunda,
veya email yaparken şeylerin madde işaretli liste.
Ama gerçek bu bilgisayarlar daha verimli olmaya çalışın,
ve çok kesin tıkmak mümkün olduğu RAM'a verileri
böylece herhangi bir bayt boşa harcamayın.
Eğer boşa harcamayın Böylece Herhangi bir ekran gayrimenkul.
Ve sorun olsa da, yani biz kelimenin tam anlamıyla mektubu koyarsanız
b sonra, nasıl biz gidiyoruz Zamyla adı biter nerede
ve Belinda adı başlıyor?
Yani, sadece, iyi, teklif, insanların esasen, Enter tuşuna basın.
Aşağıya indirdi.
Veya Alex yaptığı bile, sadece yazmaya başlayın önceki altındaki sonraki ismi,
ve o biri altında, ve o bir altında.
Bu görsel ipucu var.
>> Bilgisayar, başka bir görsel işaret var ama biraz daha özlü var.
Bu korkak karakter.
Belki Backslash 0, Ters eğik çizgi n anımsatan,
ve benzeri, şimdi.
özel kaçış dizileri.
Ters kesme 0 yoludur Arka arkaya sekiz sıfır biti temsil.
0000 0000.
>> Bunu ifade yolu değildir klavyenizdeki sayı sıfır vurdu,
ASCII karakter aslında çünkü.
Bir sayı gibi görünüyor, ama Bir ondalık sayı aslında
Bu genelge temsil glif, dairesel yazı.
Bu arada, ters eğik çizgi sıfır anlamıyla anlamına gelir
Benim için burada sekiz sıfır bayt koydu.
>> Peki bu biraz keyfidir.
Biz herhangi bir desen kullanılmış olabilirdi bit, ama dünya
Birkaç yıl karar önce, bu temsil etmek
bellekte bir dize sonu, Sadece sıfır bir sürü koyun.
Biz algılayabilir çünkü.
Şimdi anlamına gelir hiçbir mektup alfabe sıfır ile temsil edilebilir.
>> Ama bu Tamam, biz zaten gördük Biz yukarı kadar içinde 97 üzerinde 65 kullandığınızı.
Biz her yerde alamadım Tüm sıfırlardan yakın.
Bir bilgisayarın belleğinde Belinda Yani Aslında buraya gitmek için gidiyor.
Ben sarı bunu boğuldum sadece buna bizim dikkat çekmek için.
Ve haber de, bu Tamamen keyfi.
Ben bir ızgara olarak boğuldum.
Gibi, RAM sadece bazı fiziksel nesnedir.
Mutlaka yok satır ve sütun, başına.
Bu sadece bayt bir sürü var nasılsa donanımda uyguladı.
Ama Belinda I sonra eğer Gabe adına yazdığınız,
O, bellekte burada sonuna kadar gidiyor ve ben Daven adına yazdıysanız,
Örneğin, burada sonuna kadar gidiyor.
Ve ben devam edebilirsiniz daha isimlerini yazınız.
>> Ne yazık ki, ben çalışırsanız Bir süper uzun isim yazma,
Sonunda bellek tükeneceğini.
Bu durumda, getString olduğunu Dediğimiz gibi, NULL iade edecek.
Ama neyse ki, en azından bu görsel olarak Burada, biz oldukça o kadar alamadım.
>> Şimdi ne güzel bu olduğunu şeyleri tedavi genel bir fikir
kutularda olmak gibi C bir özelliği için temsili
ve dillerin bir sürü, bir dizi olarak da bilinir.
Bir dizi verileri başka bir türüdür.
Eğer sen bu, bir veri yapısıdır.
Gerçekten anlamında Yapısı, tür, en azından, bir kutu gibi bakıyor
senin zihin gözünde.
Bir dizi bitişik olan aynı veri türleri dizisi,
arka arkaya arkaya arkaya.
Diğer >> Yani bir dize, kelimeler, karakter dizisidir.
Karakter dizisi.
Ama sen sahip olabilir çıkıyor şeyler salkım dizileri.
Aslında, biz bile koyabilirsiniz Bir dizideki sayılar.
Şeklinde Böylece hangi biz başlatmak için gidiyoruz
Bu verileri bildirmek bir dizi olarak bilinen yapı
Ayrıca köşeli parantez kullanmak için gidiyor.
Ancak bu kare parantez gidiyor Bu bağlamda farklı bir anlam var.
>> Ve şöyle hadi görelim.
Ben açıldı varsayalım Burada yeni bir dosya kadar.
Ve ben ages.c. olarak bu tasarruf
Ve ben burada benim klasöre bu tasarruf edersiniz.
Ve şimdi ben önde gitmek için gidiyorum ve bir şey yazmaya başlamak
bu gibi maddeler bulunmaktadır, CS50.h içerir stdio.h, ana boşluğu int.
Ve sonra buradan içinde, ben istiyorum İlk yaş denilen bir int var.
>> Ve ben bir almak için bu kullanmak için gidiyorum onun yaşı için kullanıcıdan int.
Ama bu program tarafından kullanılmak üzere içindir ne olursa olsun bağlamda için birden fazla kişi.
Ben insanların bir çizgi var.
Hepsi de yazmak zorunda onların Belki bazı bilmiyorum yaşı,
Yarışma, veya olay onlar için geldi ettik.
Yani gelecek kişi, ben Başka bir değişken gerekir.
>> Ben sadece bunu Çünkü eğer Yaş GETINT alır, o var
gidiş clobber, ya da üzerine yazmak Bir önceki kişinin yaşı.
Yani hiç iyi değil.
Benim ilk içgüdüsü Yani olabilir, oh, tamam,
Ben birden fazla kişi 's almak istiyorsanız ages--, en bu age1 diyelim
int Age2 int alır, int age3 GETINT alır.
Ve şimdi ben kullanmak için gidiyorum Burada bazı pseudocode kodu.
>> Bu numaraları ile bir şeyler yapın.
Biz başka bir gün için bırakacağım ne Biz orada yapıyoruz çünkü biz sadece
Şu an için bakım age1, Age2, age3 hakkında.
Ne yazık ki, I kez Bu programı derlemek
ve gerçek kullanıcıların önüne koymak temelde kötü tasarım ne
Ben görünüyor karar var mı?
Evet?
HEDEF KİTLE: [Duyulmaz]
DAVID J. MALAN: Evet, Ben bile denemedim
Kaç yaş anlamaya Aslında umurumda mı?
Ben burada daha az üç kişi varsa, ve bu nedenle daha az üç yaş,
Ben hala körü körüne üç bekliyorum.
Tanrı dört kişi sırıtmak korusun.
Benim program sadece bile onlara destek olmaz.
>> Ve böylece bu uzun bir hikaye Kısacası, iyi bir alışkanlık değil.
Doğru?
Bir esas olarak kopyalama ve kod yapıştırma ve sadece verdiği
Değişken adları.
Ve, Tanrım, sen olsaydı, üç değil yaş, fakat 10 veya 100 ve hatta 6500
lisans, örneğin.
Bu, özellikle olacak değil Zarif kodu veya sürdürülebilir.
Sen zorunda gidiyoruz programı her zaman yeniden
İnsanlar değişiklikler numaranız.
>> Peki minnetle, bizim gerçek olarak Bugün için ages.c dosya,
biz daha akıllı çözüm var.
Öncelikle, ben ödünç gidiyorum Biz bir kaç kez kullandım inşa
Bu almak için, döngü sırasında yapılacak odada kişi sayısı.
Ben sadece tekrar, kullanıcı musallat gidiyorum ve yine o kadar bana verir
pozitif bir tam sayı, n değeri.
>> Ben kullanmış olabilir, son Zaman olumlu int olsun.
Ama biz yok gerçek, bu yüzden devam ettim
ve bu fikri hayata yeniden.
Şimdi buraya, bu yeni hiledir.
Yorum olarak hat 27 içinde hat 26 anlaşılacağı içinde,
bir diziyi bildirmek hangi herkesin yaşını saklamak için.
>> Eğer isterseniz, değil bir int, değil almak yüzden İki int, ama ints bir sürü.
Özellikle n tamsayılar vardı n olabilir 100 olabilir, üç olmak, 1.000 olabilir.
sözdizimi, oldukça basit, için diyelim ki, ne veri türü istiyorsun?
Aramak istediğiniz ne belleğin o yığın?
Eğer ızgara aramak istiyorsun bu resimsel benziyor?
>> Ve burada parantez içinde, diyorsunuz ne kadar büyük dizi olmasını istiyorum.
Ve böylece daha önce, ne dedim sözdizimi, burada biraz farklı
biz hala köşeli parantez kullanıyorsanız, ama ben bir dizi ilan ediyorum ne zaman,
içinde sayısı köşeli parantez araçlar
ne kadar büyük dizi olmak istiyorsun.
>> Aksine, kullanıyordu ler dirsek i bir an önce, s, bir dize,
karakter dizisi, aslında, ancak Bir değişkeni bildirirken değilken,
Burada bu anahtar kelime ile olduğu gibi, sadece alıyoruz
Belirli bir göstergesi, belli bir Bu diziden eleman.
Bunu biliyoruz kez, dinlenme Bu basittir.
Ben ilk yazdırmak için gidiyorum yeni ise kişi sayısının i yaşı ne.
Ben sadece, kişinin bir numaralı demek Nerede kişi sayısı iki, kişi sayısı üç.
>> Ve ben sadece aritmetik yapıyorum, böylece gibi normal insanlar,
Bunun için bir saymak program olup sıfırdan.
Sonra GETINT diyoruz, ama ben saklamak çağlarda cevap i paranteze.
Hangi dizide i'inci yaş.
Son kez ise biz tedavi edildi Yani Zamyla adı için karakter olarak bu kutular,
ve diğerleri.
Şimdi, bu kutular temsil 32 bit ya da dört bayt
İçinde saklayabilir bir int, int, int.
Tüm bunlar, yine, Aynı veri türü vardır.
>> Şimdi bir şey aptal yapmak, Zaman geçtikçe gibi, sadece
Bu program yazma haklı.
Ve sonra buraya, ben tekrar yineleme bugünden itibaren bir yıl söyleyerek dizi üzerinde,
kişi bir numaralı irade bir şey yaşında olması.
Ve bu anlamaya math-- Yani, bu
çok arithmetic-- karmaşık değil Ben sadece kendi yaş tane ekleyin.
Sadece, yine bu göstermek için.
>> Sadece bir dize, s içine I endeksi olabildiğince, bu nedenle yaş bir diziye can I endeksi,
Orada böyle.
Peki bu bizi alarak olacak?
Yani biz göreceğiz, sonuçta, bir gün birkaç şey gelip.
Bir, bütün bu zaman, zaman Kendi programları yazma,
Mario, açgözlü, kredi gibi.
Sen adını yazarak oldum Program ve vurmak girin.
Ve sonra kullanıcının girişi alıyorum.
>> GetString, GETINT ile, getLongLong, veya benzeri yer alır.
Ama bu C desteklerini çıkıyor şey komut satırı denir
bize gidiyor argümanlar, aslında yazdığınız kelimeleri olsun,
Yanıp sönen isteminde, Programınızın adından sonra.
>> Size, gelecek günlerde Yani Sezar gibi bir şey yazabilirsiniz,
ya ./caesar sonra sayı 13.
Biz nasıl çalıştığını göreceksiniz.
Gerçekten de, çünkü Sorun şu konum, iki set
size tanıtmak için gidiyor küçük bir şey için
Ralphie en anımsatan haritacılık önceki meydan.
bilgi çabalıyorlar sanatı.
Bu, aslında çok, Ralphie yaptıklarını anımsatan.
>> Bu şifreleme örneğidir algoritması, R-O-T 13 rot13 adı.
Hangi basitçe döndürmek anlamına gelir alfabede 13 yerler harfler.
Bunu yaparsanız, şimdi göreceksiniz Bir tanıdık ifade, belki de, budur.
Ama yolu biz kullanmak için gidiyoruz Bu, sonuç olarak, daha genel olarak ise.
>> P ise, standart baskısında, iki set Eğer, şifrelerin bir çift uygulamak gerekir
Sezar adlı bir, Vigenere denilen bir.
Bunların her ikisi de, dönme olan ki şifreler, her nasılsa
Farklı bir mektupta içine bir harf çevirmek.
Ve Sezar süper basit.
Sen 13 ekleyin, bir ekleme veya 26'ya kadar bazı sayı.
Vigenere bu konuda yok Bir harf başına temeli.
Vigenere Yani, gibi görürsünüz spec, daha güvenli.
>> Ama günün sonunda ne , sen uygulama olacak ve P iki set
hem kullandığınız anahtar şifreleme ve şifre çözme için.
Dönme işlemine referansla düz metin, bazı orijinal mesaj,
cypher metin, içine hangi bir şey şifrelenir.
Ve sonra tekrar şifresini.
>> Korsan baskısında, Bu arada, sen olacağım
benzer bir şey ile görevli ruhu, size vereceğim nerede
Tipik bir Linux veya bir dosya, Mac veya Unix bilgisayar denilen etsy
bir bütün içeriyor şifre, kullanıcı adı ve şifre demet.
Ve bu şifreleri hepsi var Şifreli veya karma olarak,
böylece daha düzgün, konuşmak Eğer spec göreceğiniz gibi.
>> Ve korsan baskısı meydan okuyacak Böyle bir giriş alarak size,
ve şifre çatlama.
Bu sergiyi, ne İnsanın şifresi aslında.
Gerçekten, şifreler, Çünkü Genellikle açık saklanmaz,
ve genellikle şifreleri tahmin etmek zor olmalı.
Bu genellikle böyle değil.
>> Ve ne yapmamız düşündüm olduğunu Bir kaç dakika sonuçlandırmak
Özellikle de bakışta şifreleri kötü seçim
Bir filmden severek hatırlamak olabilir.
Değil Ve eğer kiralamak.
>> [VİDEO OYNATMA]
>> -Helmet, Sen şeytan, ne oluyor?
Kızıma ne yapıyorsun?
>> Tanıtmak için beni -Permit parlak genç plastik cerrah,
Doktor Phillip Schlotkin.
en büyük burun iş adam Tüm evren ve Beverly Hills.
>> -Senin Majesteleri.
>> -Nose Iş?
Anlayamıyorum.
O zaten bir burun işi geçirdi.
Onu tatlı 16 mevcuttu.
>> -Hayır, Düşündüğün gibi değil.
Bu çok, çok kötü.
Bana vermezseniz Hava kalkan kombinasyonu,
Doktor Schlotkin verecek sizin kızı eski burnunu geri.
- [Soluk soluğa] NOOOOOOOOOOOOO.
Bunu nereden aldın?
>> -Tamam.
Ben söyleyeyim, anlatacağım.
>> -Hayır, Baba, hayır.
Sen gerekir.
>> -Sen Doğru canım.
Ben yeni burnunu özleyeceğim.
Ama ben onlara değil kombinasyon ne olursa olsun.
>> -Çok Iyi.
Doktor Schlotkin, en kötü yapmak.
>> -Benim Zevk.
>> -Hayır!
Bekle, bekle.
Ben söyleyeyim.
>> -Ben Işe yarayacağını biliyordum.
Pekala, bana ver.
>> -The Kombinasyon biridir.
>> -on'un Preparasyonunu gösterir.
-İki.
-Üç.
-Dört.
Beş.
Kombinasyon biri -SO, iki, üç, dört, beş.
Bu aptalca bir kombinasyon Ben hayatımda duydum.
O şey, bir tür salak onun bagaj olurdu.
>> Majesteleri -Teşekkürler.
>> [UZAK tıklamaları]
>> Ne yaptın?
>> -Ben Duvar kapalı.
>> -Hayır, Sen, değil mi bütün film kapalı.
>> -Ben Olmalı yanlış düğmeye bastı.
>> -Peki, Geri koymak!
Geri filmi koy!
>> Evet, efendim!
Evet, efendim.
En, Arnold Gidelim.
, Gretchen gel.
Tabii ki ben olacak biliyorum Bunun için size fatura etmek zorunda.
-İyi?
İşe mı?
Kral nerede?
>> -Bu Biz, efendim çalıştı kombinasyon var.
-Harika.
Şimdi her geçen nefes alabilir Druidia taze hava.
Kombinasyon nedir?
>> -on, Iki, üç, dört, beş.
>>, Iki, üç, dört, beş -Bir?
-Evet.
-Bu Inanılmaz.
Ben aynı var Benim bagaj kombinasyonu.
Için Spaceballs'sun 1 hazırlayın acil çıkış.
>> Evet, efendim.
>> Değiştirmek -Ve Benim bagaj kombinasyonu.
[KAPI KAPANIŞ SES]
[KAPI CLINK KASK VURUŞ]
-Ahh.
[SON VİDEO OYNATMA]
DAVID J. MALAN: İşte için var CS50, önümüzdeki hafta göreceğiz.
ANLATICI: Ve şimdi, Derin DAV Farnham tarafından Düşünceler.
>> DAV FARNHAM C: Kodlama olan Scratch çok daha zor.
printf, Scratch bir yalandı.
>> [KAHKAHA Soundbite]