>> [MÜZİK]
>> DAVID J. MALAN: Pekala.
Bu CS50 ve bu da 2. Hafta başlangıcıdır.
Ve bunu üzerinde Hatırlayacaksınız hafta geçmiş çift,
Biz bilgisayarı piyasaya oldum bilim ve, sırayla, programlama.
>> Ve biz yoluyla hikaye başladı Çizilmeye, bu grafik dil
MIT'S Media Lab.
Sonra, en son, Geçen hafta, biz mi
Bir higher-- a tanıtmak alt düzey dil bilinen
C, tamamen metinsel var bir şey olarak.
Ve, gerçekten, son kez bu bağlamda araştırdı
kavramların bir dizi.
>> Bu, geri çağırma, çok oldu İlk program biz baktı.
Ve bu program, oldukça basit, , "Merhaba, dünya." Yazdırır
Ama çok şey var görünüşteki sihirli oluyor.
Bu #include var Bu köşeli parantez ile.
int var.
(Boşluk) var.
Parantez, kaşlı var, noktalı virgül, ve çok daha fazlası.
>> Ve böylece, o hatırlamak Biz Scratch tanıttı
biz ideal olarak, geçmişte görebiliyordu ki Bu sözdizimi, gerçekten değil şeyler
Tüm bu entelektüel ilginç ama erken
Kesinlikle, biraz zor Aklını etrafına sarmak için.
Ve, gerçekten de, en yaygın olanlarından biri erken bir programlama sınıfında şeyler,
özellikle de daha az rahat, hayal kırıklığına elde etmektir
ve bazı sözdizimsel tarafından takıldı hataları, mantıksal hataları söz değil.
Ve böylece bizim hedeflerimiz arasında Bugün, aslında, olacak
Bazı ile donatmak olacak nasıl problem çözme teknikleri
Daha iyi sorunlarını kendileri çözmek için ayıklama formunda olabilir.
Ve sen de hatırlamak olduğunu edeceğiz Biz tanıttı çevre
en son ne zaman CS50 IDE denirdi.
Bu web-tabanlı yazılım olduğunu Eğer bulut içinde program sağlar,
Tüm tutarken, bu yüzden konuşmak için sizin biz bugün yine olacak, dosyalarını birlikte.
Ve o biz hatırlamak Burada bu konuları yeniden gözden,
Aralarında fonksiyonları ve döngüler ve değişkenler ve mantıksal ifadeler,
ve koşullar.
Ve biz aslında bir kaç Sıfırdan dünyasından tercüme
C dünyasına
>> Ama temel yapı bloklar, tabiri caizse,
Gerçekten hala aynı geçen hafta vardı.
Aslında, biz gerçekten sadece vardı farklı bulmaca parçası, eğer sen.
Bunun yerine mor bloğu kaydetmek yerine
olan printf vardı C Bu fonksiyonu olduğunu
Bir şey yazdırmak için izin verir ve ekranda biçimlendirmek.
Biz CS50 tanıttı Kütüphane, nerede
senin bertaraf get_char şimdi var, ve get_int ve get_string,
ve birkaç diğer işlevleri iyi, hangi aracılığıyla size giriş alabilirsiniz
kullanıcının kendi klavyeden.
Ve biz de şeylere bir göz attım onun- bool, ve Char gibi,
ve çift, şamandıra, int, long_long dize.
Ve C hatta diğer veri türlerini var
>> Eğer beyan Diğer bir ifadeyle, Değişken bir değeri saklamak için,
ya da bir işlevi uygulamak zaman Bazı değerini döndürür,
ne belirtebilirsiniz olan değer türü.
Bir dize gibi mi karakter dizisi?
bir tamsayı gibi bir sayıdır?
Bir kayan nokta var değeri veya benzeri?
Yani C, Scratch aksine, biz aslında veri ne tür belirtmek başladı
dönen ya da kullanıyorlardı.
>> Ama tabii ki, biz de koştu bilgisayar bazı temel sınırlar.
Ve özellikle de, Bu dil C, hatırlama
Biz de bir göz attım o tamsayı taşması, gerçeklik
Yalnızca varsa o bellek sınırlı miktarda
ya da özel olarak ise, sınırlı bir sayıda bit, sadece bu kadar yüksek güvenebilirsiniz.
Ve bu yüzden burada bu örneğe baktım bu sayede uçaklarda bir sayaç,
Aslında, yeterince uzun olursa olur çalışan taşma ve yazılım neden
gerçek bir fiziksel potansiyel hata.
>> Biz de yüzen baktı nokta belirsizlik, gerçeklik
sadece sınırlı sayıda bit, 32 veya 64 olsun,
Eğer sadece çok sayıda belirtebilirsiniz ondalık noktadan sonra, bundan sonra
kesin olmayan elde başlar.
Örneğin, üçte biri Yani Burada dünya insan dünyada,
Biz sadece sonsuz sayıda olduğunu biliyorum ondalık noktadan sonra 3s.
Ama bilgisayar mutlaka olamaz sayıların sonsuz sayısını temsil eder
Sadece izin verirseniz bazı bilgilerin sınırlı miktarda.
>> Yani sadece sizi donatmak mı açısından daha büyük bir güce sahip
size kendinizi ifade nasıl Programlama açısından bir klavye
biz de ne sınırlı aslında yapabilirsiniz.
Ve gerçekten, böcek ve hatalar yapabilir sorunların bu tür kaynaklanmaktadır.
Ve gerçekten, konular arasında bugün hata ayıklama gibi konular olacak
ve aslında başlık altında seyir şeyler tanıtıldı nasıl geçen hafta
aslında uygulanmaktadır daha iyi, böylece
anlama, hem yetenekleri ve C gibi bir dilin sınırları
>> Ve aslında, biz katmanları geri soyma olacak veri yapısının basit bölgesinin
Bir dizi denilen şey, hangi Çizilmeye bir çağrı olur "listesi."
Biraz var bu bağlamda farklı.
Ve sonra biz de birini tanıtacağız Bizim etki alanına özgü sorunların ilk
CS50 içinde, dünya kriptografi, sinyal karıştırıcı sanatı
ya çok bilgi deşifre Eğer gizli mesajlar gönderebilirsiniz
ve gizli mesajları deşifre İki kişilik, A ve B arasında
>> Bu yüzden geçiş önce yeni dünya,
Biraz ile donatmak için çalışalım teknikler hangi ile ortadan kaldırabilirsiniz
ya da en azından bazı azaltmak hayal kırıklıklarının
muhtemelen karşılaştığım yalnız geçen hafta.
Aslında, önünüzde bazı such-- vardır C. Ve oran içinde ilk sorunlar vardır
Siz de benim gibi iseniz, ilk kez Eğer bir program yazmaya çalışıyorum,
Eğer mantıklı düşünmek bile Program, oldukça basit
Eğer çok iyi bir duvara isabet ve olabilir derleyici işbirliği gitmiyor.
Yap ya da Clang gitmiyor aslında teklif yapmak.
>> Ve neden olabilir?
Eh, en az bir göz atalım belki de basit bir program.
Devam edin ve bu tasarruf için gidiyorum kasten buggy0.c adlı bir dosya,
Ben bunu biliyorum çünkü Önceden kusurlu.
Ama eğer bu fark olmayabilir birinci ya da ikinci ya da üçüncü bir program
ben aslında kendim yapıyorum.
Yani önde gidiyorum ve Int main (void) dışarı yazın.
Ve sonra benim küme parantezi içinde, merhaba, --daha ( "çok tanıdık
ters eğik çizgi, n ") - ve bir noktalı virgül.
>> Ben Dosyayı kaydettikten.
Şimdi aşağı gitmek için gidiyorum Benim Terminal penceresine
ve make buggy0 nedeniyle, yine, Dosyanın adı bugün buggy0.c olduğunu.
Yani girin buggy0 yapmak yazın.
>> Ve, ah, Tanrım, son kez çağırmak Hiçbir hata iletileri bu iyi bir şeydir.
Yani hiçbir çıkış iyi bir şeydir.
Ama burada açıkça var bazı hataları sayısı.
>> çıktı ilk satırında Yani buggy0 yapmak yazdıktan sonra, geri çağırma,
Çınlama en oldukça ayrıntılı çıkışıdır.
Kaputun altında, CS50 IDE yapılandırılmış
bir sürü kullanımı Bu derleyici ile seçenekleri
bu yüzden yok onlar hakkında düşünmek.
Ve hepsi bu ilk çizgi Clang başladığı anlamına gelmektedir.
>> Ama bundan sonra, sorunlar kendi görünümünü yapmaya başlar.
satır 3, karakteri Buggy0.c 5, büyük, kırmızı hata var.
O nedir?
Dolaylı kütüphane fonksiyonu ilan tipi int (const char * ile printf,
...) [-Werror].
Ben çok hızlı bir şekilde, onu demek Çok gizemli alır.
Ve elbette, ilk bakışta, biz olmaz
anlamak bekliyoruz Bu mesajın tamamı.
ders ve böylece bir bugün gidiyor için
fark etmeye olmak desenler, ya da benzer şeyler,
hataları aklınıza gelebilecek Geçmişte karşılaştı.
Yani sadece ayrı kızdırmak edelim tanıdık o kelimeler.
büyük, kırmızı hata açıkça bir şeyin sembolik yanlış olma.
>> örtük ilan kütüphane işlevi printf.
Yani oldukça anlamıyorum bile neler dolaylı kütüphane fonksiyonu ilan
araçlar, mutlaka sorun şekilde printf ilişkindir.
Ve bu sorunun kaynağı Bunu ilan ile ilgisi yoktur.
>> bir fonksiyonudur bildirmek ilk kez söz.
Ve geçen hafta terminolojiyi kullanmış Bir fonksiyonun prototip bildirmek,
ya üstündeki bir satır ile sizin kendi dosya ya da bir sözde başlık dosyasında.
Ve ne dosya biz dedin Geçen hafta printf alıntı olduğunu,
unquote ilan?
hangi dosya içinde prototip nedir?
>> Yani eğer, ilk şey çağırmak tip, hemen hemen her program son seferinde--
ve yanlışlıkla bir an önce başladı myself-- yazarak bu burada-- oldu
hash-- #include <stio-- için giriş / output-- nokta H ve gerçekten de,
Şimdi bu dosyayı kaydetmek, ben gidiyorum devam edin ve benim ekranı temizlemek için,
yazarak yapabileceğiniz Temizle ya da Kontrol L tutabilir
Sadece terminal penceresini temizlemek için sadece bazı dağınıklığı ortadan kaldırmak için.
>> Ben devam edeceğim ve yeniden tipi yapmak buggy0 girin.
Ve işte, ben hala görüyorum Clang uzun komut,
ama hiçbir hata iletisi bu sefer var.
Ve gerçekten, ben ./buggy0 yaparsanız, Geçen seferki gibi,
nerede nokta bunun anlamı dizin, Slash sadece anlamına gelir
Burada programın adını gelir ve Programın bu isim, buggy0 olduğu
, "Merhaba, dünya." Enter
>> Şimdi, nasıl olabilir Bu çözümü panoda
olmadan mutlaka gibi pek çok kelime tanıma
Olarak yaptım, kesinlikle sahip Bu yüzden yıllardır yapılan?
Peki, ilk sorun başına gerçekleştirmek set, size bir komuta tanıtmak
CS50 kendi personeli olduğunu denilen help50 yazdı.
Ve gerçekten, C için şartname yapar Sorun, bu nasıl kullanılacağı konusunda ayarlayın.
>> Ama esasen help50 olduğunu Bir program CS50 personeli
Bu izin verir yazdı çalıştırmak Bir komut ya da bir programı çalıştırmak
ve anlamıyorum eğer onun Çıktı, help50 çıktısı geçmek için
hangi yazılım işaret dersin personeli yazdı
Programınızın çıktı bakacağız satır satır, karakter karakter.
Ve biz, personel, tanımak Karşılaştığınız hata iletisi
bazı size kışkırtmak için çalışacağız bazı tavsiyeler ile retorik sorular,
Bir TF veya CA veya benim gibi çok mesai saatleri bizzat yapardı.
>> eğer yapmazsam Yani help50 bakmak mutlaka bir sorunu tanımak.
Ama güvenmeyin bir koltuk değneği olarak çok.
Kesinlikle anlamaya çalışın onun Çıktı ve sonra ondan öğrenmek
bu yüzden sadece bir veya iki kez sizi yapmak Şimdiye kadar, belirli bir hata help50 çalıştırmak
mesaj.
Bundan sonra, olmalıdır kendinizi daha iyi donanımlı
aslında ne olduğunu anlamaya.
>> burada diğeri yapalım.
Bana başka önde gitmek ve let Dosya bu buggy1.c arayacağım.
Ve bu dosyada ben deliberately-- gidiyor
ama yok iddia Yaptığım şey hata anlıyorum.
>> Devam edin ve bu-- yapacağım #include, ben ettik beri
Bir an önce dan dersimi aldım.
Int main (void), daha önce olduğu gibi.
Ve sonra burada ben gidiyorum dize s yapmak - get_string.
Ve son kez çağırmak olduğunu Bu araçlar, hey, bilgisayar,
Bana bir değişken vermek o s arama ve Bu değişken bir dize türü yapmak
bu yüzden o bir veya daha fazla kelime saklayabilirsiniz.
>> Ve sonra sağ taraftan eşittir işareti yan
Bir olan get_string olduğu CS50 Kütüphanesi'nde işlevi
Bu tam olarak bunu yapıyor.
Daha sonra bir işlevi ve alır sağ eller onu sola.
Yani bu eşit işareti anlamına gelmez Biz matematik düşünebilir "eşittir".
Bu sağdan sola atama anlamına gelir.
Yani bu, gelen dize almak anlamına gelir Kullanıcı s içine saklayın ve.
>> Şimdi bunu kullanalım.
Bana bir saniye şimdi ve önümüzdeki gidelim çizgi, beni go ahead ve "Merhaba" diyelim -
değil "dünya," ama "Merhaba,% s- hangi bizim tutucu, virgül s,
hangi bizim değişkendir, ve daha sonra bir noktalı virgül.
Yani çok fazla berbat olmasaydı Burada, bu doğru kod gibi görünüyor.
>> Ve benim içgüdüleri şimdi derlemek için vardır.
Dosya buggy1.c olarak adlandırılır.
Yani girin buggy1 yapmak yapacağım.
Ve lanetlemek-it, yoksa eskisinden daha fazla hata.
Ben daha var, yani hata iletileri it would
Bu programda gerçek hatları daha görünüyor.
>> Ama paket burada olduğunu Eğer bunalmış olsanız bile
iki ya da üç ya da dört hata mesajları,
çok her zaman odak bu mesajların ilk.
en üstteki tek baktığımızda, olmak yedekleyin olarak gerek kaydırma.
Yani burada yapmak buggy1 yazdınız.
Burada beklendiği gibi Clang çıkışı var.
>> Ve burada ilk kırmızı hata var.
bildirilmemiş tanımlayıcı kullanımı dize, ben standardı demek istedi?
Yani standart olduğunu Aslında başka bir şey.
Bu kullanıcının atıfta Klavye, esas olarak.
>> Ama bu demek istemedim.
Ben dize geliyordu ve ben get_string anlamına geliyordu.
Peki o ne ben Bu sefer yapmak unuttum?
Bu sefer ne eksik?
Benim #include var, bu yüzden printf erişimi vardır.
>> Ama ben ne yok henüz erişim?
Evet, sadece son kez gibi, Ben derleyici söylemek gerekir
Bu fonksiyonlar nelerdir tınlamak.
Get_string gelmiyor C ile ve özellikle,
gelmez Dosyayı başlık.
Bunun yerine geliyor bir şey personel yazdı
hangi farklı bir dosya isim ama aptly.
>> Yani sadece bir satır olduğunu ekleyerek son kez code-- hatırlama
Clang çalıştığında o, gidiyor alt benim kod üst bakmak,
soldan sağa.
Fark için gidiyor oh, istiyorum.
Gidip o bulsun, sunucuda her yerde,
esasen, kopyalayıp yapıştırın, Kendi dosyasının en içine
böylece hikayenin bu noktasında bu, hat 1, programın geri kalanı
Gerçekten, fonksiyonların herhangi birini kullanabilirsiniz Bu şekilde, aralarında get_string.
Yani görmezden gidiyorum Bu hataların geri kalanı,
Çünkü ben, gerçekten, sadece şüpheli İlki aslında önemi.
Ve ben, önde ve yeniden çalıştırın gideceğim Benim dosyayı kaydettikten sonra buggy1 olun.
Ve işte, o işi yaptım.
Ve ben ./buggy1 yapmak ve eğer için, yazın örnek, Zamyla, şimdi, merhaba alacak
Zamyla, yerine merhaba dünya.
>> Pekala.
Yani burada paketler daha sonra vardır, bir, kadar olabildiğince toplamak için çalışın
yalnız hata iletileri gelen, seyir tanınabilir bazı kelimeleri de.
Bu Kısıtlama, başına help50 kullanın Sorun özellikleri ayarlayın.
Ama bu engelleme de her zaman bakmak Üst hata sadece, en azından
Başlangıçta, görmek için hangi bilgileri aslında verim olabilir.
Ama orada çıkıyor Hatta daha fazla işlevsellik inşa
CS50 Library içine yardımcı olmak için dönem erken sen
ve erken programlama yanlış neler olduğunu anlamaya.
Yani burada başka bir örnek yapalım.
Ben, hangi bu buggy2 çağıracağım, Yine, dışarı kusurlu olacak
tasarım tarafından kapıda, evi.
>> Ve ben önde gidiyorum ve #include yapmak.
Ve sonra ben int main (void) yapacağım.
Ve sonra bir for döngüsü yapacağım.
Için (_ 0 int i.
i ya da daha az 10'a eşittir.
i ++ ve sonra küme ayracı, ben gidiyorum Burada sadece bir hashtag sembolü yazdırmak için
ve yeni bir satır karakteri.
>> Bu benim niyet Yani Program oldukça basit olduğunu
10 kez yinelemek ve her tekrarında
bu döngü her seferinde döngüsü boyunca,
Bir hashtag çıktı, Bir hashtag, bir hashtag.
Bir başına hattı çünkü ben Orada yeni bir satır var.
Ve için hatırlatmak geçen hafta-- başına döngü,
ve daha fazla alırsınız sözdizimi aşina
Uygulamada ile kullanarak long-- önce bu bana verir
Değişken i denilen ve 0'a ayarlar.
>> Bu i üzerinde artışlarla 1 ile her yineleme.
Yani ben 2'den 3'e 1 gider.
Sonra bu durumdaki noktalı virgülle arasında orta
yapmak için her tekrarında kontrol gets Biz aralığında hala olduğundan emin olun.
Yani 10 kez yineleme yapmak istiyorum, bu yüzden var çeşit çok sezgisel sadece
Orada benim üst sınır olarak 10 koyun.
>> Ve yine, ben bu çalıştırdığınızda, sonra make ile derleme buggy2--
ve Tamam derliyor.
Bu yüzden bir yok sözdizimi hatası bu sefer.
Beni şimdi devam edelim ve Enter, buggy2 çalıştırın.
Ve şimdi yukarı ilerleyin.
Ve ben artırmak izin penceresinin boyutu.
>> Ben var gibi görünüyor 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.
Yani olsa da, 11 Hashtag'leri var Ben açıkça bu döngü içine 10 koyun.
Şimdi bazılarınız hemen görebilirsiniz Hata nedeniyle, gerçekten, bu ne
yapmak çok zor bir hata değildir.
Ama çok yaygın olduğunu Çok erken yapılan.
>> Ne işaret etmek istiyorum, ancak, , Nasıl bu anlamaya olabilir mı?
Eh, o çıkıyor CS50 Kütüphanesi geliyor
sadece get_string ve get_int ile get_float ve diğer fonksiyonları ve.
Aynı zamanda özel fonksiyonu ile birlikte geliyor adı eprintf veya hata Printf.
Ve bunu yapmak için sadece mevcut Sizin için biraz daha kolay
Sadece kodunuzu ayıklarken ekranda bir hata mesajı yazdırmak
nereden geldi ve biliyorum.
>> Yani örneğin, bir şey olabilir Bu fonksiyon bu-- olduğunu burada yapmak
eprintf, sonra ben önde gidiyorum ve i, ters eğik çizgi, n şimdi% olduğunu söylüyorlar.
Ve ben i değerine takmak için gidiyorum.
Ve kontör, bunun nedeni , CS50 Kütüphanesi'nde olduğu
Ben devam edeceğim ve bunlar arasında
bu yüzden bu işleve erişebilirsiniz.
Ama düşünelim hangi satır 9 yapıyor olması gerekiyordu.
Sonunda bu silmek için gidiyorum.
Bu ilgisi yok Benim kapsayıcı hedefi ile.
Ancak eprintf hata Printf sadece kastedilmektedir Bana bazı tanısal bilgiler vermek.
Benim program çalıştırdığınızda, ben istiyorum geçici olarak ekranda görmek
de sadece anlamak için neler oluyor.
>> Ve, gerçekten de, her bir Burada hat 9 yineleme
Ben görmek istiyorum, i değeri nedir?
i değeri nedir?
Ve umarım, ben sadece gerektiği bu mesajı, ayrıca, 10 kez bakın.
>> Bu yüzden bana devam edelim ve benim program derlemeye,
Ben her zaman yapmak zorunda olduğu gibi Ben bir değişiklik yapmak. ./buggy2.
Ve şimdi-- Tamam.
daha fazla oluyor bir sürü şey var.
Bu yüzden bana içinde yukarı izin daha da büyük bir pencere.
>> Ve o her göreceksiniz hashtag hala yazdırıyor.
Ama aradaki her biri şimdi bu aşağıdaki gibi teşhis çıkışı biçimlendirilmiş.
Burada benim programın adı buggy2 olduğunu.
Dosyanın adı buggy2.c olduğunu.
Satır numarası hangi basılan bu hat 9.
Ve o sağında Ben bekliyorum hata mesajı.
>> Ve bu olduğunu hakkında güzel ne Şimdi ben mutlaka saymak gerekmez
Kafamın içinde benim program ne yaptığını.
Ben görebiliyorum i 0 ilk yineleme,
Daha sonra 1, daha sonra 2, daha sonra 3, daha sonra 4, daha sonra 5, daha sonra 6, daha sonra 7, daha sonra 8, daha sonra 9, daha sonra
10.
Yani bir dakika bekleyin.
Burada neler oluyor?
Hala sayma gibi görünüyor olarak 10 kadar niyetindeydi.
>> Ama nerede başladınız?
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
Bu yüzden, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10-- 11 parmak
bir sorundur.
Ben sayılır gibi görünüyor yanlış benim döngü içinde.
10 tekrarlamalar gitmek yerine, Ben, 0'dan başlıyorum
Ben ve 10'a kadar bitiriyorum.
Ama nedeniyle, bir bilgisayar gibi, Ben 0, sayma başlıyorum
Ben sayma gerektiğini için, ancak, 10 aracılığı ile.
>> Ve böylece düzeltme, ben sonunda Burada gerçekleşen iki şeyden biridir.
Çok basitçe söyleyebiliriz az 10'a kadar saymak.
Bu yüzden, 0, 1, 2, 3, 4, 5, 6, 7, 8, Gerçekten de doğrudur 9,
Hatta biraz yanlış geliyor olsa da.
Ya da yapabileceğini eşit veya daha az 9, çok uzun ben 0'dan başlar başlamaz.
Ya da gerçekten sevmiyorum, seni 10'a kadar saymak ancak 1 başlayabilirsiniz.
Fakat yine de, bu sadece o yaygın değildir.
programming-- olsa içinde Scratch-- değil çok
ama programlamada C ve diğer dillerde,
JavaScript ve benzeri Python ve diğerleri, öyle
sadece çok yaygın İkili arasında tartışma
Sadece saymaya başlamak için 0 yapabilirsiniz düşük sayı.
Pekala.
Yani eprintf var.
Ve yine, şimdi ben çözdüm o benim Sorun ve ben 0'a geri dönmek için gidiyorum
az 10'a kadar, ben gidiyorum gitmek ve eprintf silmek için.
>> ben orada olmamalı benim kod gemi ya da benim kod göndermek
ya da bir başkasına göstermek.
Gerçekten sadece pinti geçici kullanılır.
Ama şimdi bu çözdüm yanı sıra özel bir sorun.
>> Peki, burada bir örnek daha yapalım Ben şöyle körüklemek için gidiyorum.
Ben devam edeceğim ve #include. 50 $
Ve ben önde gidiyorum ve #include.
>> Ve ben kurtarmak için gidiyorum buggy3.c olarak bu dosyayı.
Ve ben önde gidiyorum ve int main (void) ilan ediyorum.
Ve sonra içeride orada Ben i int yapacağım _ -
Ben bir programı uygulamak istiyorum Bir get_negative_int ile.
Bu henüz var olan bir işlev değil.
Bu yüzden hayata gidiyoruz bu sadece bir an.
Ama biz neden görmek için gidiyoruz ilk geçişte adamcağız.
Ve ben kazanılmış bir kez kullanıcıdan gelen bir int,
Ben sadece% i yazdırmak için gidiyorum bir negatiftir tamsayı, ters eğik çizgi, n, virgül, i.
Başka bir deyişle, tüm G yapmak için bu program istiyorum
bir negatif int almak olduğunu kullanıcı ve sonra çıktı
böyle ve böyle olumsuz bir int.
>> Şimdi bu işlevi uygulamak gerekir.
Yani daha sonra benim dosyasında, ben gidiyorum öncesinde ve adında bir işlevi bildirmek
get_negative_int (void) - ve biz edeceğiz Bu hat tekrar ne anlama geldiğini gelmek sırt
Bir moment-- int n; sanıyor- do following-- Printf n :.
, Get_int - Ve sonra ben n yapacağım ve bu süre n 0'dan büyüktür yapmak.
Ve sonra n iade ;.
>> Yani oluyor bir çok şey var which we did not bu ama hiçbiri
en azından kısa bir süre, geçen hafta bak.
Yani burada hat 10 ı ilan ettik get_negative_int denilen fonksiyonu,
ve ben, (boşluk) koyduk parantez, neden bu varlık
bir giriş almaz.
Ben bir şey geçirerek değilim Bu işleve.
Ben sadece geri ondan bir şeyler alıyorum.
>> Ve ben ne umuyorum geri almak bir tam sayıdır.
hiçbir veri türü olarak orada C negative_int aradı.
Bu sadece int, bu yüzden gidiyor emin olmak için bize olmak
Bu aslında değer dönmedi sadece bir int
ama aynı zamanda negatif.
>> hat 12 ben bir değişken ilan ediyorum n ve int türünde yapma denir.
Ve sonra hat 13 18 aracılığıyla Ben bir şey yapıyor bir şey doğrudur iken.
Ben önde ve baskı gidiyorum n, kolon ve daha sonra bir boşluk,
kullanıcı için bir istemi gibi.
>> Sonra get_int arıyorum ve sözde dönüş değeri depolamak
Bu değişken n.
Ama yapmaya devam edeceğim Bu ise, n, 0 daha büyüktür.
Diğer bir deyişle, kullanım bana verirse int ve bu sayı 0'dan büyük,
ergo, pozitif, ben gidiyorum Sadece kullanıcı reprompting tutmak,
zorlayarak, reprompting tutmak işbirliği ve bana olumsuz bir int verir.
>> Ve n, aslında negative-- bir kez Nihayet türleri -50 kullanıcı varsayalım
o zaman bu while döngüsü artık gerçek -50 0'dan büyük değildir, çünkü.
Bu yüzden bunun patlak loop mantıklı ve n dönün.
>> Fakat diğer bir tane var şey yapmak zorunda.
Ve ben sadece bunu yapabilirsiniz Kopyalama ve yapıştırma tarafından
dosyanın üstündeki bir satır kod.
Ben, çınlama öğretmek gerekir veya çınlama söz,
açıkça yaparım ki Gerçekten, gidip uygulamak
Bu fonksiyon, get_negative_int.
Sadece dosya daha düşük olabilir.
Yine hatırlatmak Clang , Yukarıdan aşağıya şeyler okur
soldan sağa, yani yapamazsın Clang eğer bir işlev çağrısı
o var olacak bilmiyor.
>> Şimdi, ne yazık ki, bu program, olarak size bazı fark etmiş olabilirsiniz,
Zaten adamcağız.
Beni devam edin ve buggy3 yapalım.
benim sorunum şimdi değil, bu yüzden derler bir sözdizimi hatası, bir metinsel hata gibi,
aslında mantıklı olacak Ben kasten ettik hatası
için bir fırsat olarak yapılan Neler adım adım.
>> Ben devam edeceğim şimdi buggy3 çalıştırın.
Ve ben gidiyorum önde ve işbirliği.
Ben o 1 numara vereceğim.
Bu yüzden beğenmedim yine bana sormadan ediyor.
>> Ne yaklaşık 2?
3?
50?
Bunların hiçbiri çalışıyoruz.
Nasıl -50 dersiniz?
Ve programın iş gibi görünüyor.
>> Bana bir kere daha deneyelim.
Bana -1 deneyeyim, iş gibi görünüyor.
Bana -2 deneyeyim, iş gibi görünüyor.
Bana 0 deneyeyim.
Ha, bu yanlış.
Şimdi, biz burada biraz bilgiçlik davranıyorsun.
Ama bu durumda 0 olduğunu, gerçekten, var olumlu ne de olumsuz olduğunu.
Ve bu yüzden benim programı gerçektir ki 0 negatif tamsayı olduğunu söyleyerek
Bu teknik olarak doğru değil.
>> Şimdi, neden yapıyor?
Eh, çok açık olabilir.
Ve, gerçekten, program oldukça basit olması gerekiyordu
bu yüzden keşfetmek için bir şey var.
>> Ama üçüncü bir hata ayıklama tanıştırayım teknik burada debug50 denir.
Yani bu bir program biz sadece oluşturduk olduğunu
bu yıl adı debug50 bu sana izin verecek
yerleşik denen kullanmak için CS50 IDE grafik debugger.
Ve bir hata ayıklayıcı sadece bir program olduğunu genellikle sizin programı çalıştırmak sağlar
ama adım, satır adım adım satır satır, alay, duraklatma
etrafında, değişkenler bakarak böylece Program sadece sizin geçmiş darbe değil
ve hızlı bir şekilde bir şeyler yazdırmak falan yazdırmayın.
Bu en, size bir fırsat verir İnsan hız, onunla etkileşim.
>> Ve bunu yapmak için, size sadece aşağıdakileri yapın.
kodunuzu derleme sonra, ki ben zaten yaptım, buggy3,
Eğer devam edin ve debug50 ./buggy çalıştırın.
O kadar help50 çalıştırmak var gibi help50 ve sonra komut,
debug50 Eğer debug50 çalıştırmak vardır ve Daha sonra komuta adı.
>> Şimdi benim ekranda ne izle, Özellikle sağ taraftaki.
Ben Çalıştır tüm vurduğunda ani bu sağ paneli
Ekranda açılır.
Ve devam eden bir çok şey var ilk bakışta üzerinde.
Ama orada çok değil Henüz endişelenecek çok şey.
>> Bu bana her şeyi gösteriyor bu benim programın içine oluyor
Şu anda bu aracılığıyla düğmeleri üst daha sonra yukarı
Benim kod adım için bana izin sonuçta adım adım adım.
Ama henüz.
ne dikkat edin.
Benim Terminal penceresinde Ben n istendiğinde oluyorum.
Ve ben önde gidiyorum ve -1 Bu kez ve türünü işbirliği.
Ve olsa biraz şifreli, -1 beklendiği gibi negatif tamsayıdır.
>> Ve sonra çocuk ile çıkıldı Durum 0 gdbserver çıkarken.
GDB, GNU Debugger, adı altta yatan yazılım
bu hata ayıklayıcı uygular.
Ama bütün bu gerçekten, hata ayıklayıcı demektir benim program çıkın çünkü gittiler
ve tüm iyi oldu.
Ben gerçekten benim Programda hata ayıklamak istiyorsanız, Ben, preemptively debug50 söylemek zorundayım
nerede başlar istiyorsun Benim kodu atlama?
>> Ve belki en basit yolu aşağıdaki gibi olduğunu yapmak için.
Ben üzerinde gezdirin eğer Burada benim editörü oluk,
yani gerçekten sadece burada kenar çubuğunda, hat numarasının solunda,
ben sadece tıklayın fark ederseniz bir zamanlar, biraz kırmızı nokta koydu.
Ve o küçük kırmızı nokta, bir dur işareti gibi, hey, anlamı,
debug50, benim kod duraklama yürütme Orada ben bu programı çalıştırdığınızda.
>> Yani böyle yapalım.
Beni devam edin ve benim program çalışmasına izin Yine debug50 ./buggy3 ile girin.
Ve şimdi, haber, bir şey Farklı oldu.
Ben istenmeden değilim Henüz Terminal penceresinde
her şey için, çünkü ben değil Benim programda henüz kazanılmış.
8. satırda dikkat edin şimdi vurgulanır hangi
ve küçük bir ok at var Sol söyleyerek, burada durduruldu.
kod, hat bu hat 8, henüz idam değil.
>> Ben bakarsanız, meraklı ne Sağ taraftaki buraya,
Ben yerel olduğunu fark anlamda yerel değişken,
o anki işlev içinde var.
Ve onun değeri, görünüşe göre, varsayılan olarak, ve çeşit elverişli 0'dır.
Ama 0 yazın vermedi.
Bu sadece olur onun Şu anda varsayılan değer.
>> Bu yüzden bana go ahead ve şimdi yapalım.
Beni öncesinde ve devam edelim Burada top, ben
önde gidecek ve bu ilk simgesini hangi
üzerinde adım atlama yok anlamına gelir o ancak bu kod hattı üzerinden adım,
Yol boyunca çalıştırarak.
>> Ve şimdi, fark benim istemi sadece değişti.
Neden?
Ben debug50 söyledim, Bu kod satırı çalıştırın.
bu kod satırı ne yapar?
bir int için beni ister.
TAMAM.
Bana işbirliği yapalım.
beni şimdi devam edin ve -1 yazın Enter edelim.
Ve şimdi ne değişti dikkat edin.
Sağ tarafta, benim yerel değişken i
varlık -1 şimdi olarak gösterilir.
Ve bu int türünde hala.
>> Ve ihbar de benim sözde yığını çağrı, nerede duraklama mı?
Biz hakkında daha fazla konuşacağız Gelecekte bu.
Ama çağrı yığını sadece ne ifade eder fonksiyonlar hareket şu anda.
Şu anda sadece ana var.
Ve şu anda sadece yerel Değişken değeri 1 ile i.
>> Ve nihayet bu hat üzerinden adım ne zaman Burada, sağ üst köşesinde aynı simge ile,
-1 Negatif tam sayıdır.
Şimdi o küme ayracı üzerinde duraklatma ediyor.
en onun bir şey yapsın.
O çizgi, ve voila üzerinden adım.
>> Yani tüm bu korkunç , Aydınlatıcı henüz
ama bana duraklama izin verdin ve mantıklı düşünmeye
bu program ne yapıyor.
Ama bu hatalı durum değildi.
aşağıdaki gibi tekrar yapalım.
>> O kesme terk edeceğim kırmızı noktalı hat 8.
Ben debug50 yeniden gidiyorum.
Otomatik burada durdurulmuş oluyor.
Ama bu sefer, yerine Bu hat üzerinden adım,
Beni aslında içinde gidelim get_negative_int ve anlamaya,
neden geçerli bir yanıt olarak 0 kabul edilir?
>> Yani yerine Step Over tıklayarak.
Ben devam edeceğim ve Step Into tıklayın.
Ve çizgi 8 olduğunu fark Şimdi birdenbire şimdi vurgulanan
satır 17 olur.
>> Şimdi, hata ayıklayıcı bu değil hatları 14 ve 15 ve 16 atlanır etti.
Bu sadece bir şey yok oluyor Orada size göstermek için.
Bunlar sadece değişkenleri ilan edilir, ve daha sonra kelime var Do var
ve daha sonra açık kaşlı ayraç.
var sadece fonksiyonel çizgi sulu gerçekten bu bir, 17 olduğunu.
biz ettik nerede ve o otomatik olarak durduruldu.
>> Yani printf ( "n.is:") ;, bu yüzden Bu henüz gerçekleşmedi.
O yüzden go ahead ve Üzeri Step tıklayın edelim.
Şimdi benim istemi, gerçekten, olarak değiştirildi ( "n").
Şimdi gitmiyorum, get_int adım rahatsız,
Bu işlev, çünkü Kütüphanede CS50 tarafından yapılan.
Bu muhtemelen doğru.
>> Yani önde gidiyorum ve tür vererek işbirliği
bir int, ancak olumsuz bir int.
Bu yüzden bana go ahead ve 0 değmesine izin.
Ve şimdi ne burada olur Ben aşağı olsun 21 hattına?
Yine iterated ettik.
Ben bu döngü içinde sıkışmış görünmemektedir.
Diğer bir deyişle, bu sarı bar etrafında devam etmedi
ve çevresinde, etrafında.
>> Şimdi, neden?
Eh, n, şu an ne n tane nedir?
Yerel bakabilirsiniz Hata ayıklayıcı değişkenleri.
n, 0 'dır.
Pekala, benim durum neydi?
>> 20-- satır 20 de olduğunu, 0 0 daha büyüktür.
Bu doğru değil.
0 0 daha büyük değildir.
Ve bu yüzden bu çıktı.
>> Ve böylece bu yüzden hattı üzerinde 21, ben aslında devam ederse,
Hatta, 0 dönmek için gidiyorum Ben 0 reddedilen gerekirdi gerçi
olarak aslında negatif olmamak.
Yani şimdi, ben gerçekten bile yok Hata ayıklayıcı umurumda.
o, ben gerek yok got Neler olup bittiğini daha fazla bilgi.
>> Yani önde gidiyorum ve sadece Oynat düğmesini tıklatın,
ve bu bitiş yukarı olsun.
Şimdi, ben fark ettik benim Hata hattı 20 görünüşte.
Bu benim mantık hatası var.
>> Ve böylece ne istiyorsun Bunu değiştirmek için ne yapmak?
Sorun değilim ki eğer 0 yakalamak, sadece bir mantık hatası var.
n iken söyleyebileceğim daha yüksek veya eşit 0,
Tekrar ve tekrar kullanıcıya sormadan tutun.
>> Yani, yine, basit bir hata, belki de Beni görünce bile bariz
sadece bir kaç dakika önce yazmak.
Ama burada paket olan hata ayıklama 50 o,
ve hata ayıklama ile Yazılım daha genel olarak,
Bu yeni bulunan güç var bak, kendi kod üzerinden yürümek
Bu sağ paneli ile nasıl senin değişkenler değerlerdir.
Yani mutlaka yok bir şey kullanmak zorunda
gibi bu değerleri yazdırmak için eprintf.
Aslında bunları görebilirsiniz görsel ekranda.
>> Şimdi, bunun ötesinde, bu fazlalaştı olan başka bir teknik var ki
Aslında süper yaygın.
Ve neden bu küçük merak edebilirsiniz Burada adam sahnede oturan olmuştur.
Yani bu teknik genellikle var lastik ördek hata ayıklama olarak bilinen,
hangi gerçekten sadece bir olduğunu Aslında vasiyetname
sık sık programcılar kod yazma,
onlar mutlaka değiliz başkaları ile işbirliği,
veya paylaşılan bir ortamda çalışan.
>> Onlar evde çeşit konum.
Belki o gece geç oldu.
Onlar şekle çalışıyoruz kendi kod bazı hata dışarı.
Ve onlar sadece bunu göremiyoruz.
>> Ve hiçbir oda arkadaşı var.
TF yoktur.
Etrafta hiç CA yoktur.
onların rafta olan tüm Bu küçük kauçuk aziz olduğunu.
>> Ve böylece lastik ördek ayıklama Sadece bu davettir
aptalca bir şey düşünmek Gerçek bir yaratık olarak bu kadar
ve aslında kod üzerinden yürümek sözlü bu cansız nesneye.
Dolayısıyla, örneğin, eğer Bu benim örnek burada--
ve daha önceki hatırlama Sorun, bu oldu
Ben bu kod ilk satırı silerseniz, ve ben devam edin ve tekrar adamcağız 0 yapmak,
Ben bu olduğunu hatırlamak Burada hata iletileri.
Yani ben bile saçma Buradaki fikir, Kamuya bunu şu anda hissediyorum
Bu hatadır.
>> Tamam, benim sorunum ben ettik ki örtük bir kütüphane işlevi ilan etti.
Ve bu kütüphane fonksiyonu printf olduğunu.
Tamam Declare--, beyan prototip hatırlatıyor.
>> Ben aslında gerekiyor demektir önceden derleyici ne diyeceğim
fonksiyonu gibi görünüyor.
Bir dakika bekle.
Ben standart io.h yoktu
Çok teşekkür ederim.
>> Size of-- Dolayısıyla, sadece bu süreç aslında bir ördek olması gerekmez.
Ama yürüyen bu fikir Kendi kod aracılığıyla kendiniz
bu yüzden bile duymak Kendinizi, bu yüzden sen misin
Kendi içinde eksiklikler fark açıklamalar, genellikle bir fikirdir.
>> Ve, belki de daha mantıklı, o kadar O biri ama daha dahil olan çok
örnek sadece, adamcağız 3.c'de yaptım bunun üzerinden kendinizi yürümek olabilir
aşağıdaki gibi.
Yani tamam, lastik aziz, DDB, eğer sen.
Burada benim ana işlevi var, Negatif int olsun diyorum.
>> Ve ben dönüş değerini alıyorum.
Ben sol tarafta saklayarak yaşıyorum bir değişken hat 8 i çağırdı.
Tamam, ama bekleyin, nasıl yaptım o değeri olsun?
Beni hat 12 fonksiyon bakalım.
>> hat 12, biz negatif int almak var.
herhangi girdileri almaz, Tamam, bir int çıkmıyor.
Ben hat 14 değişken n üzerinde beyan ederim.
Bir tamsayı saklamak için gidiyor.
İstediğim bu.
>> n izin o-- süre Yani aşağıdakileri yapın Bana düzeltme zaten ne yaptım geri.
n, daha büyük ise yüzden 0, tamam, n isimli çıktı.
Ve sonra int n depolanır diyoruz.
n, 0 ise, ve daha sonra, kontrol n Ben- orada olmasıdır.
Yani, yine, yok Gerçek ördek gerekir.
Ama kendini yürürken entelektüel bir egzersiz olarak kod
genellikle size yardımcı olacaktır , Neler oluyor farkında
Sadece bir şey yapıyor aksine Bu gibi ekrana bakarken,
ve kendini konuşarak değil dürüst değil o,
Yaklaşık etkili bir yöntem olarak.
Yani orada var o bir Farklı teknikler sayısı
aslında kod hata ayıklama için ve arıza bulma hepsi
sizin araç araçları olmalıdır , Gece geç saatlerde değiliz ki
Özellikle, sen yemek konum salonlar, ya da ofis saatlerinde,
karşı baş vurarak duvar, bazı sorunu çözmek için çalışıyorum.
yazılım araçları olduğunu fark.
lastik ördek araçlar vardır.
Ve bütün bir personel var yardım etmek bekliyor destekler.
>> problem üzerinde Yani şimdi, bir kelime setleri, ve biz size umuyoruz ne
onları dışarı almak ve nasıl biz değerlendirilmesi hakkında gidin.
dersin müfredat Başına, CS50 sorunu setleri
Böylece, dört ana eksen üzerinde değerlendirilir kapsamını speak-- için doğruluğu, tasarım,
ve stil.
Ve kapsamı sadece ne kadar ifade eder parçanın kapalı ısırıldı var?
Nasıl bir sorun çok denediniz mi?
çaba hangi düzeyde Eğer ortaya mı?
>> Doğruluk, olduğu gibi program çalışır o CS50 şartname başına gerekiyordu
belirli girdileri sağlamak zaman veya belirli çıkışları geri geliyor?
Tasarım çoğu subjektiftir.
Ve bir o olacak bulunuyor öğrenmek için uzun sürebilir
ve en uzun süre, öğretmek şimdiye kadar aşağı kaynar olarak,
kodunuzu ne kadar iyi yazılmış mı?
>> Sadece doğru yazdırmak için bir şey çıkışlar veya sağ değerler döndürür.
Ama sen bunu yapıyor mümkün olduğunca verimli?
bunu bölmek yapıyorsun ve fethetmek, veya ikili
yakında biz mi göreceğiz gibi arama İki hafta önce telefon rehberi ile?
çözmek için daha iyi yollar vardır Şu anda burada var daha sorun?
Bu daha iyi bir tasarım için bir fırsattır.
>> Ve sonra nasıl style-- Oldukça sizin kod nedir?
Ben güzelim fark edeceksiniz benim kod girinti hakkında belirli,
ve emin olun benim değişkenleri yapma makul olarak adlandırılır. n,
kısa bir süre, bir iyi bir adıdır sayı, sayma tamsayı i,
bir dize için s.
Ve biz daha uzun olabilir değişken isimleri tarzı.
Stil ne kadar iyi kod görünüyor?
Ve ne kadar okunabilir?
>> Ve zamanla, ne TA ve TF'ler ders yapacak
Bu size bir Nitel geribildirim tür
Daha iyi olsun ki Bu değişik yönlerine.
Ve biz nasıl açısından Bu eksenlerin her değerlendirmek
çok az, tipik olarak var: kovalar size böylece genellikle,
yaptığınızı ne kadar iyi bir fikir olsun.
Ve, gerçekten, bir puan üzerinde alırsanız Bu axes-- doğruluğu, tasarım herhangi bir
ve stil especially-- bu sayı genel olarak 1 ila 5 arasında olacaktır.
Ve, tam anlamıyla, alıyorsanız dönem başında 3 kıyafetleri,
Bu çok iyi bir şeydir.
Hala var demektir iyileştirilmesi için oda,
İçinde umut ediyorum ki İlk defa bir sınıf alarak.
tavan bazı biraz umarım var hangi sen ulaşan isteyen ediyoruz.
Ve böylece 3'ün alma erken adet,
eğer bazı 2'nin ve 4 kıyafetleri, Gerçekten, iyi bir şeydir.
Bu, iyi aralığında bulunuyor beklentilerin içinde.
>> zihniniz yarış Ve eğer, bekle Bir dakika, üç beş dışarı.
Bu gerçekten 10 6 çıktı.
Bu% 60 değil.
Bir F var Tanrım,
>> Değil.
Bu, aslında, bu değil.
Aksine, geliştirmek için bir fırsat dönem boyunca.
Ve bazı alıyorsanız yoksullar, bunlar bir fırsattır
ofis saatleri yararlanmak için, kesinlikle bölümleri ve diğer kaynaklar.
>> En iyisi, gerçekten, bir fırsattır Eğer ettik ne kadar uzak gurur duyulacak
dönem boyunca gelir.
Yani farkında mısın, hiçbir şey eğer Başka, üç iyidir.
Ve zamanla büyümesi için yer sağlar.
>> Bu eksenleri olarak nasıl ağırlıklı, gerçekçi sen
alma çoğu zaman geçireceğimizi iş şeyler, doğru dursun.
Ve böylece doğruluk eğilimi olduğu gibi, çoğu ağırlıklı olarak
Üç bu çarpımsal faktör.
Tasarımı da önemlidir ama mutlaka yok bir şey
üzerinde bu saatler tüm harcamak şeyler sadece işe almak için çalışıyorum.
>> Ve bu yüzden ağırlıklı oluyor daha hafif biraz.
Ve sonra stil az ağırlıklı.
Hatta az olsa temelde önemli,
bu sadece, belki de en kolay şey, doğru yapmak için
örnekler biz taklit ders ve bölüm yapmak,
güzel şeyler girintili ve yorumladı,
ve benzeri kolay biridir şeyler yapmak ve sağ olsun.
gibi Yani, fark Bu noktalar olduğunu
kavramak için nispeten kolaydır.
>> Ve şimdi bir kelime üzerinde Akademik dürüstlük bu--.
Elbette kişi başına Yani Müfredat, göreceksiniz
Elbette vardır oldukça Bu çevrede dilin biraz.
Ve tabii ki sorunu alır Oldukça ciddi akademik dürüstlük.
>> Biz ayrım var, daha iyi ya da kötü,
gönderilen olma her geçen yıl daha disiplin cezası için öğrenciler
diğer bir çok daha Tabii ki, ben farkında olduğumu.
Bu mutlaka değil Aslında göstergesidir
CS öğrencileri, ya da CS50 öğrenciler, oldukları daha az sınıf arkadaşlarınızla daha dürüst.
Ama gerçek ki bu Dünya elektronik, biz sadece
teknolojik var Bu tespit araçları.
>> Bunun için bizim için önemlidir sınıfa karşısında adalet
Yaptığımız bu algılar ve yükseltmek Sorun biz şeyleri görünce.
Ve sadece bir resmini ve gerçekten Bu lavabo gibi bir şey yardımcı olmak için,
Bunların sayılardır son 10 yılda öğrenci
Bazı dahil edildiğini akademik dürüstlük gibi konular,
bazı 32 öğrenci ile sonbaharda 2015 den hangi
biz alıyoruz demek ki madde çok ciddiye.
Ve nihayetinde, bu sayılar oluşturmak, son olarak yaklaşık% 3,% 4 ya da daha
sınıfı.
>> Öğrencilerin süper çoğunluğu için bu yüzden çizgiler net görünüyor.
Ama bu duruyorsun özellikle geç, zihin
Geceleri ile mücadele yaparken Bir sorun grubu bazı çözeltisi,
mekanizmalar vardır kendinizi daha iyi almak için
Senden daha destek olabilir Hatta o saatte düşünüyorum.
Aldığımız zaman fark Öğrenci gönderimler, biz çapraz
Bu yıl her gönderimi karşılaştırmak Her başvuru geçen yıl karşı,
2007 her teslimiyete karşı, ve aynı zamanda, bakarak, çünkü,
Kod, çevrimiçi depoları tartışma forumları, iş siteleri.
Ve biz bu söz, Gerçekten uğruna, bütün
Tam açıklama, eğer başkası online bulabilirsiniz
kesinlikle, bu yüzden tabii ki olabilir.
Ama, gerçekten, ruh Elbette aşağı kaynar arasında
müfredat bu maddeye.
Gerçekten sadece, makul olduğunu.
>> Ve biz eğer üzerinde durmak sadece biraz daha dil ile,
gerçekleştirmek tüm özü Bu dersle teslim çalışma
Kendi olmalı.
Ama bu içinde, orada kesinlikle fırsatlar ve teşvik,
dönüm ve pedagojik değeri Kendimi uzadıya, TF'ler, CA,
sınıfta TA, ve diğerleri, destek için, yalnız arkadaşlar izin
ve oda arkadaşı okumuş kim daha önce CS ve programlama.
Ve böylece bir ödenek var.
Ve Genel kural Yardım için paha soran olduğunda,
başkalarına kodunuzu gösterebilir, ama onların görmek olmayabilir.
Yani ofis saatlerde olsanız bile, veya D salonu, ya da başka bir yerde de
Bazı parça sette çalışan, Bir arkadaşı ile birlikte çalışan hangi
de, tamamen iyi Günün işinizi sonunda
sonuçta her ait olmalıdır Senin sırasıyla değil
Bazı ortak çaba, Final projesi nerede hariç
Buna izin ve teşvik ediyor.
>> eğer fark bir şey ile mücadele
ve arkadaşım sadece olur Daha sonra bu daha iyi olması için size,
ya da daha bu soruna daha iyi, ya da uzak önünüzde biraz daha,
o çevirmek tamamen makul ve arkadaşınıza, hey, demek
Burada benim kod bakarak sakıncası yok, benim sorun nedir nokta yardım?
Ve umarım, içinde pedagojik değeri faiz
O arkadaşın değil sadece yapar Oh, bunu söylemek değil,
ne on line eksik 6, veya böyle bir şey?
Ama çözüm değil senin yanında arkadaş
oh, iyi, burada, bana çekin dedik Bu kadar ve sana benim çözüm göstermektedir.
Yani hattıdır.
Size kodunu göstermek Diğerleri, ama olmayabilir
Diğer tabi onların görüntülemek dersin müfredatında kısıtlamaları.
>> Yani akılda bu duruyorsun üzüntü maddesi olarak adlandırılan
yanı sıra dersin müfredatında yer, Bu bazı eylemde eğer
uygun değildir, ancak getirmek dersin başkanlarının dikkatini
72 saat içinde, ders Yerel yaptırım uygulayabilir olabilir
tatmin edici olmayan bir içerebilir veya gönderilen iş için başarısız notu.
Ama tabii ki bakın olmayacak Daha fazla disiplin cezası için önemli,
tekrarlanan eylemlerin halleri dışında.
Başka bir deyişle, bunu yaparsanız bazı yapmak aptal, özellikle gece geç, kararın
ertesi sabah ya da iki gün Daha sonra, uyanmak ve fark
ne düşünüyordum?
Bir çıkış var CS50 yapmak Bu sorunu düzeltmek için
ve böylece o kadar sahip biz yarım seninle tanışmak ve ilgileneceğiz
Bu hem bir konuda birlikte Eğitim ve sizin için değerli,
ama bir şekilde hala cezalandırıcı.
Ve şimdi, bu kenar çıkarmak için.
>> [VİDEO OYNATMA]
>> [MÜZİK]
>> [SON OYNATMA]
DAVID J. MALAN: Pekala, biz geri döndük.
Ve şimdi bir bakmak Bizim gerçek dünya alanlarının ilk
CS50 içinde, kriptografi sanatı, gönderme ve alma sanatı
gizli mesajlar, şifreli mesajlar eğer sen,
Eğer varsa bu sadece deşifre edilebilir gönderenin sahip olduğu bazı anahtar madde
de.
biz götürürüz Yani bu motive etmek a, burada bu şeye bakmak
bu, bir örneğidir Gizli dekoder halkası olduğunu
anlamaya için kullanılabilir gizli bir mesaj aslında ne olduğunu.
Aslında, Lütfen ilkokulda gün,
Hiç gizli mesajlar gönderdi eğer Bazı arkadaş veya sınıftaki bazı ezilme,
Eğer düşünebilirdi Zeki ediliyordu
Kağıt değişen parçanın üzerinde tarafından, gibi, A'dan B'ye ve B C ve C D,
ve benzeri.
Ama aslında şifreleyerek edildi Bilgilerinizi, hatta
biraz önemsiz olsaydı, değil o kadar zor öğretmen gerçekleştirmek için,
iyi, sadece değiştirirseniz A ve C B B ye,
aslında anlamaya mesajı neydi,
ancak bilgi deşifre edildi.
>> Sadece bunu yapıyordun sadece çok Ralphie gibi burada
oynayan ünlü bir film hemen hemen reklam nauseum her kış.
[VİDEO OYNATMA]
tüm bu bilinen ol Ralph Parker vesile olan
Küçük bir üyesi atandı Öksüz Annie The Secret Circle
ve tüm onur hakkına sahiptir ve faydaları bununla meydana gelen.
>> -Signed, Little Orphan Annie, Karşı-imzalı mürekkep, Pierre Andre.
Burs ve faydaları, Zaten dokuz yaşında.
>> [Bağırarak]
-Hadi ama.
en onunla dönelim.
Ben tüm bu caz gerekmez kaçakçılar ve korsanlar hakkında.
>> için -listen yarın akşam sonuç macera
siyah korsan gemisi.
Şimdi, bu zamanı Annie'nin gizli mesaj
Gizli Circle sen üyeleri için.
Çocuklar, sadece üyelere hatırla Annie'nin Gizli Circle
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--
>> -Ben, Benim ilk gizli toplantısını duyuyorum.
>> -14, 11, 18, 16.
>> -Pierre Büyük bir ses bu gece oldu.
O gece en söyleyebilirdi mesajı gerçekten çok önemliydi.
>> -3, 25, bu bir mesajdır Annie kendisinden.
kimseye söyleme, unutmayın.
>> -90 Saniye sonra, ben sadece ben Evin oda nerede dokuz bir çocuk
gizlilik ve decode oturup.
Aha, B!
Bir sonraki, E. gitti
>> İlk kelime olduğunu.
S, şimdi daha kolay geliyordu, U, 25--
>> Oh, gitmeliyim, Ralphie hadi!
>> aşağı doğru olması -I'll, anne!
Vay canına!
>> -T, O, ne emin olun aşağıdaki amaçlara emin olun?
Little Orphan neydi Annie söylemeye çalışıyorsun?
Ne emin olun?
>> -Ralphie, Andy var , Dışarı gel lütfen olacak gitmek?
>> -Tamam, Anne!
Ben doğru dışarı olacağım!
>> -Ben Daha yakın şimdi başlamıştı.
gerginlik korkunç.
Bu neydi?
gezegenin kaderi dengede askıda kalabilir.
>> -Ralphie!
Andy'nin gitmeli!
>> sesle ağlama için, doğru dışarı -I'll!
>> Orada-neredeyse, benim parmak, fikrimi uçtu Bir çelik tuzak oldu, her gözenek titreşerek.
Evet, evet, evet, neredeyse açıktı.
>> senin Ovaltine içmek için emin ol.
Ovaltine?
Bir köhne ticari?
Orospu çocuğu.
[SON OYNATMA]
DAVID J. MALAN: Tamam, Bu çok uzun bir yol oldu
kriptografi tanıtan, ve Ovaltine.
Aslında, bu eski reklam gelen Burada, neden ovaltine bu kadar iyi?
Bu olgun konsantre bir çıkarma olduğunu Arpa malt, saf krem ​​inek sütü,
ve özellikle birlikte, kakao hazırlanan Doğal fosfatidler ve vitaminler ile.
Bundan başka, takviye edilmiş Ek vitamin B ve D, yum.
Ve hala, görünüşe göre, bunu elde edebilirsiniz Amazon, biz burada yaptığımız gibi.
>> Ama motivasyon burada oldu Özellikle, şifrelemesi tanıtmak
Bilinen kriptografi bir tür gizli anahtar kriptografi olarak.
Ve adı, bütün anlaşılacağı gibi Bir gizli anahtar kripto sisteminin güvenliği,
Bir metodoloji eğer olacak Sadece çabalıyorlar için
iki kişi arasındaki bilgi, yani Sadece gönderen ve sadece alıcı
gizli key-- bazı değerini bilmek, bazı Gizli ifade, bazı gizli numara, o
Her iki şifrelemek onlara izin verir ve bilgi şifresini çözer.
Ve kriptografi, gerçekten, Sadece bu hafta 0 değil.
>> Bu girişler var bir sorun var İngilizce gerçek mesajı gibi
ya da her türlü dil size sınıfta birine göndermek istiyorsanız,
veya internet üzerinden.
oluyor bazı çıktı, orada şifreli mesaj olduğu konusunda sizi
Alıcı almak istiyorum.
Ve bile birisi Orta, o çok alır
sen onları istemiyorum mutlaka şifresini muktedir,
Bu iç nedeniyle kara kutu, ya da algoritma,
Bazı mekanizma, adım adım bazı Bu girdi almak için talimatlar,
ve dönüştürerek umarım güvenli bir şekilde çıkış.
>> Ve, Aslında, bazı Bu dünyada kelime olarak izler.
Düz metin kelime olduğunu bilgisayar bilimcisi olur
girişi tarif etmek için kullandıkları İngilizce gibi mesaj
veya ne olursa olsun aslında dil sizi diğer bazı insan göndermek istiyor.
Ve sonra şifreli kapışmasıdır şifrelenmiş, ya da şifreli,
bunların sürümü.
>> Ancak burada bir başka madde daha var.
bir diğer giriş için var gizli anahtar şifreleme.
Ve bu anahtar kendisi, bu, genel olarak, bir
biz göreceğimiz gibi, bir sayı veya mektup, ya da kelime ne olursa olsun
o aslında algoritma bekliyor.
>> Ve nasıl bilgi şifresini mı?
Bunu nasıl deşifre edersiniz?
Peki, sadece ters çıkışları ve girişleri.
>> Diğer bir deyişle, bir kişi bir kez şifreli mesaj alır
o sadece var Aynı anahtarı bilmek.
Onlar şifreli aldık.
Ve bu iki takarak kripto sistemi içine girdiler,
algoritma, dışarı bu kara kutu, orijinal metin gelmelidir.
Ve böylece çok yüksek seviyede bulunuyor kriptografi aslında ne görüntüle
tüm hakkında.
>> Yani oraya alalım.
Şimdi altına bakalım şey davlumbaz
için verilen biz alarak oldum Geçen hafta, ve bu oturumda
dize Doğuların.
Günün sonunda bir dize karakter bir dizisidir.
>> Bu hello world, ya da olabilir merhaba Zamyla, ya da her neyse.
Ama bu ne anlama geliyor bir karakter dizisi olabilir mi?
Aslında, CS50 kütüphane verir Bize dize denilen bir veri türü.
>> Ama hayır aslında yoktur C bir dize olarak böyle bir şey
Gerçekten sadece bir dizidir karakter, karakter, karakter,
karakter, geri, için, geri geri, içeri geri, geri
Bilgisayarınızın bellek veya RAM.
Ve biz o derinlerine bakacağız Gelecek, bellek kendisi baktığınızda
kullanımı, ve ve söz konusu tehditler.
>> Ama dize Zamyla düşünelim.
Yani sadece isim Burada, insan, Zamyla,
Bu dizisidir karakterler, Z-A-E-Y-L-A.
Ve şimdi varsayalım o Zamyla adı Bir bilgisayarın içinde depolanan ediliyor
programı.
>> Eh, biz gerektiği bu nedenle duruyor bu karakterler bakmak mümkün
tek tek.
Yani biraz çekmek için gidiyorum Burada Zamyla adının etrafında kutu.
Ve C olduğu zaman sizi o belki Zamyla-- ve benzeri, bir dize var
bu dize geri geldi olsun dize gibi bir işlev,
aslında işleyebilirsiniz karakteri ile bu karakteri.
>> Şimdi, bunun için geçerli olacaktır Konuşma el, çünkü
kriptografi olarak değiştirmek istiyorsanız D bir B ve B C ve C,
ve benzeri, sen gerekiyor bireysel karakter bakmak için
bir dize.
Sen değiştirmek gerekiyor başka bir şey, A Z
için başka bir şey, M Başka, ve böylece bir şey.
Ve bu yüzden bir yol gerekir, programlı, bu yüzden
C, konuşmak değiştirmek mümkün ve bireysel harflerle bakmak.
aşağıdaki gibi Ve biz bunu yapabilirsiniz.
>> beni geri CS50 IDE kafasıyla gidelim.
Ve beni önde gitmesine izin ve yeni bir dosya oluşturun
Ben bu sefer string0 arayacağım o, Bizim bu tür ilk örnek olarak, c nokta.
Ve ben önde gidiyorum aşağıdaki gibi ve o kadar kırbaç.
>> Böylece CS50.h içerir ve daha sonra standart io.h arasında,
ki ben hemen hemen her zaman gidiyorum En azından, benim programlarında kullanıyor olması
Başlangıçta.
Ana boşluğu int, ve sonra burada ben dizeleri yapacak dize almak alır.
Ve sonra ben gidiyorum go ahead ve bunu.
Ben devam etmek istiyorum ve bir sağlamlık denetimi olarak,
sadece söylemek, merhaba, yüzde s, noktalı virgül, dize 0 yapar.
ah ah, ben burada ne yaptım?
Oh, takın vermedi.
Yani ders, öğrendim kasıtlı değildi.
>> Yani hata, daha fazla, yüzde veri argümanlar daha dönüşümler.
Ve bu, nerede çizgi 7-- Tamam, ben,
unquote alıntı, o benim dize printf.
Ben yüzde işareti var.
Ama ikinci argümanı kaçırıyorum.
>> Ben virgül s, eksik olan Önceki örneklerde var mı.
Yani iyi bir fırsat düzeltmek için bir daha hata, yanlışlıkla.
Ve şimdi bana çalışmasına izin Zamyla bölgesindeki string0 yazın.
Zamyla merhaba, tamam.
>> Bu yüzden programın bu tür çalıştırmak Şimdi bir kaç farklı zamanlarda.
Ama bir şey a yapalım Bu sefer biraz farklı.
Bunun yerine sadece Zamyla en baskı printf ile bütün isim,
karakteri tarafından o karakteri yapalım.
>> Ben bir for döngüsü kullanmak için gidiyorum.
Ve kendimi vereceğim Bir sayma değişkeni, i aradı.
Ve ben bu yüzden, iterating devam edeceğim i s uzunluğundan daha az olduğu sürece.
>> Bu çıkıyor, we did not Bu son kez yapmak,
Bu c ile geliyor işlev Stirling aradı.
Geri gün içinde, ve genel olarak hala işlevlerini uygularken,
insanlar genellikle çok seçecektir Sesin özlü isimleri bu tür
Eğer öyle olsa bile, istediği gibi Birkaç ünlüleri veya harfleri eksik.
Bu nedenle Stirling Bir fonksiyonun adını bu
arasında bir argüman alır bir dize olmalıdır parantez.
Ve bu sadece bir tamsayı döndürür, Bu dizenin uzunluğu.
>> on line 7 for döngüsü bu yüzden gidiyor i 0 eşittir saymaya başlayın.
Artırmak için gidiyor her tekrarında i
1 ile, biz bir kaç kez yaptığını olarak.
Ama sadece yapmak gidiyor noktaya kadar bu kadar
I uzunluğu ise dize kendisi.
>> Yani bu, sonuçta bir yoludur karakter yineleme
dizede olduğu gibi takip eder.
Ben değil yazdırmak için gidiyorum Bütün dize, ancak yüzde c,
tek bir karakter Yeni bir hat izledi.
Ve sonra ben gidiyorum devam edin, ben de gerek
Ben Yazdırmak istediğiniz söylemek s i karakteri.
>> i gösteren değişken Yani eğer dize, indeksi
Eğer içinde, ben edebilmek için ihtiyacı vardır Bana s i karakter vermek demek.
Ve c yapmanın bir yolu vardır köşeli parantez ile bu.
Sadece adını söylemek Bu durumda s dize.
Sonra sen köşeli parantezleri kullanın genellikle sadece Dönüş veya Enter yukarıdaki
klavyedeki tuş.
Ve sonra dizin koymak Yazdırmak istediğiniz karakter.
Yani endeks olacak number-- 0, veya 1, ya da 2 veya 3, veya nokta,
nokta, bazı başka bir numara nokta.
>> Ve biz gidiyor sağlamak , Doğru numarayı olmak çünkü ben
0 saymaya başlar.
Ve varsayılan olarak, ilk karakter bir dize Kongre 0 gereğidir.
Ve ikinci karakter dirseği 1'dir.
Ve üçüncü karakter dirseği 2 'dir.
Ve sen de gitmek istemiyorum uzakta, ama biz değiliz çünkü
Sadece bu kadar i artırmak için gidiyor dizenin uzunluğu eşittir.
Ve bu noktada, for döngüsü bu duracaktır.
>> Bu yüzden bana go ahead ve bu kaydetmesine izin Program ve çalışma dizesi 0 olun.
Ama berbat.
Dolaylı kütüphane fonksiyonu ilan tip gibi ile Stirling ve şimdi such--,
Bu tanıdık geliyor.
Ama printf değil.
Ve bu dizeyi almak değil.
>> Ben batırmadım Aynı şekilde bu sefer.
Ama burada biraz aşağı fark Bundan başka, başlık string.h arasında,
açıkça sağlamak Stirling için beyanname.
Yani aslında orada bir ipucu var.
>> Ve gerçekten de çıkıyor Başka bir başlık dosyası var
Kullandığımız değil ettik sınıfta henüz o ama var
Mevcut olanlar arasında Size, string.h denir.
Ve bu dosya, string.h Stirling ilan olduğunu.
Bu yüzden bana devam edelim ve dize olun, bu tasarruf
0-- güzel, hiçbir hata iletisi bu sefer.
>> ./string0 Zamyla ve Ben, Enter tuşuna üzereyim
bu noktada getString gidiyor dize döndürmek için, s koydu.
for döngüsü yineleme gidiyor o zaman Bir seferde bir S karakterleri üzerinde,
çünkü onlara satıra bir tane yazdırmak Ben sonunda bu ters eğik çizgi n vardı.
Yani bu ters eğik çizgi ihmal olabilir n ve sonra sadece tüm Zamyla yazdırmak
Aynı doğrultuda, etkili reimplementing
tüm bu yararlı değildir printf.
Ancak bu durumda, bunu yapmadık.
Aslında basılır ettik Bir seferde bir karakter, her satıra bir tane,
bu yüzden aslında etkisini görmek söyledi.
>> Ama burada bir şeyi dikkat etmelisiniz.
Ve biz geri geleceğiz gelecekteki bir hafta içinde bu.
Bu çıkıyor Kod potansiyel adamcağız.
>> O olsun dize çıkıyor ve hayatında bazı diğer fonksiyonlar
mutlaka her zaman yapmak Eğer ne beklediğini dönün.
Biz geçen sınıftan biliyorum olsun bu sefer
dize bir dize gerekiyordu.
Ama ne tür dışarı kullanıcı türleri ise Uzun bir kelime veya paragraf veya kompozisyon
yeterli değil var olduğunu bilgisayar hafızası sığdırmak için.
>> Gibi ne bir şey giderse başlık altında yanlış?
Bu, sık olmaz olabilir ama bir kez olabilirdi
bir süre, çok seyrek.
Ve böylece o olsun dize çıkıyor ve bunun gibi fonksiyonlar mutlaka yapmak
Her zaman dizeleri döndürür.
Onlar bazı hata değerini döndürebilir, bazı gözlem değeri tabiri caizse,
bu göstermektedir bir şeyler yanlış gitti.
Ve sadece bu bilemez Şimdi sınıfta öğrenmiş,
veya biraz daha belgelerine okumak zorunda.
O olsun dize çıkıyor null adı verilen bir değer döndürebilir.
Boş olduğunu yaparız özel bir değerdir gelecekteki hafta içinde geri gelmek.
Ama şimdi, sadece ben istersem biliyorum ileriye doğru hareket gerçekten uygun olmak
olsun dizesini kullanarak, ben sadece onu aramak değil,
ve körü körüne dönüş değeri kullanın, bir dize olduğunu güveniyorum.
>> İlk demeliyim hey, sadece bir dakika bekleyin
s eşit yapmazsa devam null, nerede null, yine,
sadece bazı özel değerdir.
Ve sadece özel değer sen olsun dizesi için endişelenmenize gerek.
Dize ya gidiyor Get bir dize veya null dönün.
>> Ve bu ünlem işareti eşittir işareti belki matematik dersinde biliyoruz olabilir
Eğer bir eşittir işareti çizmek olabilir içinden bir çizgi eşit olmadığını belirtmek için.
Bu genellikle bir karakter değil Klavyenizdeki yazabilirsiniz.
Ve bu yüzden çoğu programlama dilleri, Eğer eşit değildir demek istiyorum,
Eğer bir ünlem işareti kullanmak, aksi takdirde patlama olarak da bilinir.
Yani patlama, eşittir demek ki olup, mantıksal eşittir anlamına gelir.
Bu büyük orada değil sadece gibi daha ya eşit veya daha düşük
eşit veya klavyenizdeki girmek için bu bir sembol olarak her şeyi yapıyor.
Böylece yüzden, geçmiş örneklerde, Açık bir dirsek yaptı ve daha sonra
eşit işareti, sırayla yapılacak , Daha büyük ya da daha az, derler.
>> Yani paket burada ne var?
Bu şimdi bir yolu basitçe Bu sözdizimi tanıtan, bu özellik,
Bireysel yineleme bir dize karakter.
Ve sadece bu kare gibi parantez, sen onlara almak için izin
olarak o köşeli parantez dikkate tür, bu altta yatan ima
tasarım, bu sayede her bir dize içinde bir karakter
tür altında bir yere kutulu edilir Bilgisayarınızın belleğinde davlumbaz.
>> Ama bu bir türevi yapalım.
Bu çıkıyor program doğrudur.
CS50 eksenlerinin her Böylece değerlendirmek için Kod, bu artık doğru.
Özellikle şimdi ben kontrol ediyorum o null, bu program çökmesine asla.
Ve ben sadece deneyimlerinden biliyoruz.
Ama bu başka bir şey yok biz gerçekten burada yanlış gidebilir.
Ama çok iyi tasarlanmış değil Çünkü en temel dönelim.
>> İlk olarak, principles-- for döngüsü ne yapar?
for döngüsü üç şey yapar.
Bazı başlatır değer, sen bunu sorarsan.
Bir durumu kontrol edilir.
Sonra sonra her yineleme, her döngüden sonra,
bazı artırır Burada değer veya değerler.
>> Peki bu ne anlama geliyor?
Biz i 0 başlatılamıyor.
Biz kontrol ve emin olun ben daha az Z-A-E-Y-L-A, S uzunluğu,
böylece daha az 6 olan.
Ve, gerçekten de, 0 az 6 gibi.
>> Biz Zamyla adından Z çıktı.
Sonra 0 ile 1 arasında i artırmak.
Daha sonra 1 az, kontrol s uzunluğundan daha?
s uzunluğu 6'dır.
Evet öyle.
>> Bu yüzden Zamyla adına, ZA bir yazdırın.
Biz 2, 1, 0, i artırmak.
Daha sonra, 2 den daha az, kontrol Zamyla adının uzunluğu.
6- yani 2 den az 6'dır.
Evet, en şimdi M çıktısını izin Zamyla adı, üçüncü karakter.
>> Burada anahtar her birine olduğunu Hikayenin yineleme, ben kontrol ediyorum,
i Zamyla uzunluğundan daha azdır?
Ama yakalamak olduğunu Stirling bir özellik değildir.
programlamış olduğunuz olanlarınız Java ya da diğer dillerde önce
bir dize uzunluğunu biliyor olabilir Bir özellik, sadece bazı sadece değerini okuyun.
>> Bu durumda, C, bu ise, tam anlamıyla bir işlev
sayılmasıyla Her zaman Zamyla karakterler
biz bu işlevini çağırın.
Her zaman kullanmak için bilgisayarı sormak Stirling, o, Zamyla bir göz alıyor
söyleyerek Z-A-E-Y-L-A, 6.
Ve 6 döndürür.
Aramadan dahaki sefere for döngüsü içerde o
o Zamyla bakmak için gidiyor Yine, Z-A-E-Y-L-A, 6 üzerinden.
Ve 6 dönmek için gidiyor.
Yani bu tasarım hakkında aptal nedir?
>> Neden benim kod değil 5 üzerinden 5 olan Şu anda tasarım, tabiri caizse?
Eh, ben soruyorum, bir gereksiz yere soru.
Ben gerek daha ben daha çok iş yapıyorum.
>> Yani olsa da Cevap Ben, doğru
Bilgisayarı soran, ne Yine Zamyla uzunluğu
ve tekrar ve tekrar ve tekrar?
Ve o cevap asla değişecek.
Her zaman 6 olacak.
>> Bu daha Yani iyi bir çözüm Bu bir sonraki sürümü olacak.
Beni devam edelim ve bir koyun string1.c denilen ayrı bir dosya,
sadece ayrı tutmak.
Ve bir de çıkıyor döngü, aslında can
Aynı anda birden fazla değişkenleri bildirmek.
>> Yani i tutmak ve 0 olarak ayarlayın gidiyorum.
Ama aynı zamanda gidiyorum bir virgül ekleyin ve söylemek,
Bana kimin n adında bir değişken vermek değer s dize uzunluğuna eşittir.
Ve şimdi, benim durumu olun Çok uzun i n daha az olarak.
>> Bu yüzden, bu şekilde, bir mantık Günün sonunda aynıdır.
Ama hatırlayarak Bu durumda, değer 6.
Zamyla adının uzunluğu nedir?
Ve ben n it at koyuyorum.
>> Ve ben hala bakıyorum durum her zaman.
0 6 daha düşük mü?
1 6 daha düşük mü?
vb 2 6 daha az ve var mı?
>> Ama bilgisayar sormuyorum Tekrar ve tekrar, ne
Zamyla adının uzunluğu?
Zamyla adının uzunluğu nedir?
Bu Zamyla adının uzunluğu nedir?
Ben tam anlamıyla hatırlayarak ilk ve Sadece bu ikinci değişken n cevap.
Yani bu artık sadece olurdu Doğru, ama aynı zamanda iyi tasarlanmış.
>> Şimdi, tarzı hakkında?
Ben değişkenleri adında ettik oldukça iyi diyebilirim.
Onlar şu anda süper özlü konum.
Ve bu tamamen iyi.
>> Eğer sadece bir tane varsa Bir programda dize,
sen de o dize için s diyebilirsiniz.
Eğer tek bir değişken varsa Bir program saymak için,
siz de bunu i diyebilirsiniz.
Eğer bir uzunluğa sahip ise, n, hem de süper yaygındır.
Ama benim kod herhangi bir yorumda bulunmadılar.
>> Ben reader-- haberdar ettik Bu benim TF veya TA olsun,
ya da sadece ne gerekiyor colleague-- Bu programda üzerinde olacak.
Ve çok iyi bir stil elde etmek için, Yapmak istediğim ne
bu-- bir şeydir gibi giriş için kullanıcı isteyin.
Ve ben yazabilirsiniz şekillerde, bu herhangi bir sayı.
>> Emin olun get olmak s- emin dize dize döndü.
Ve sonra var-- ve bu belki de En önemli comment-- iterate
Bir seferde s bir karakter üzerinde.
Ve ben herhangi kullanabilirsiniz İngilizce dil seçimi
Burada her açıklamak için Bu kod topakları.
>> Ben koymak değil dikkat edin kodun her satırında yorumlamak
gerçekten sadece ilginç üzerinde olanlar, olanlar o
Bazı anlam ben belki Birine süper net yapmak istiyorum
kodumu okuma.
Ve neden olsun aradığınız dize girişi için kullanıcı sormak?
Hatta bu bir mutlaka değil tüm bu açıklayıcı.
Ama bu, bir hikaye anlatmak yardımcı olduğu Hikayenin ikinci hat, emin olun bir
olsun dize dize döndü.
>> Ve hikayenin üçüncü hattıdır s birinde karakterler üzerinde yineleme
zamanında.
Ve şimdi sadece iyi ölçmek için, Devam edin ve eklemek için gidiyorum
bir daha açıklama bu sadece s baskı i-inci karakter diyor.
Şimdi, ne yapmış günün sonunda?
>> Bazı İngiliz eklemiş yorumların şeklinde kelimeler.
çizgi çizgi sembolü hey, anlamı, Bu insan için bilgisayar,
senin için, bilgisayar.
Bu yüzden mantıklı göz ardı ediyoruz.
Onlar sadece oradayız.
>> Ve, gerçekten, CS50 IDE olarak gösterir gri, kullanışlı, ancak anahtar olarak
Programa.
Şimdi ne yapabilirim dikkat edin.
Eğer C bilip programlama ya da değil,
Sadece bu geri durabiliriz Program ve yorumlarınızı yağsız.
emin olun, giriş için kullanıcı isteyin dize dize döndürdü olsun,
s karakter üzerinde yineleme Bir defada bir karakteri yazdırmak
i-inci karakter s- sen değil Hatta koduna bakmak zorunda
bu program ne anlama.
Ve, daha iyisi, kendinize bakarsanız Bir ya da iki hafta içinde bu programda,
ya da bir ay ya da bir yıl, Çok yok
koduna bakmak için, hatırlamaya çalışıyorum,
ne bu kod ile yapmaya çalışıyordu?
>> Kendini söyledim.
Sen kendin için tarif ettik, Bazı meslektaşım, veya TA veya TF veya.
Ve böylece bu şimdi olacak Doğru ve tasarım iyi,
ve sonuçta tarzı iyi yanı.
Böylece akılda tutmak.
>> Yani diğer bir tane var şey burada yapacağım
şimdi tam olarak ne ortaya çıkarabilir başlık altında oluyor.
Yani bu özellik var C, ve diğer dillerde,
adı typecasting bu da dolaylı olarak
veya açıkça dönüştürmek için izin verir başka bir veri türü.
Biz mücadele ettik dizeleri ile çok bugün.
>> Ve dizeleri karakterlerdir.
Ama hafta çağırmak 0, karakterler nelerdir?
Karakterler sadece bir soyutlama olan Numaraları ondalık sayılar üstüne,
ve ondalık sayılar gerçekten sadece bir olan ikili sayılar üstüne soyutlama,
biz bunu tanımlandığı gibi.
>> Yani karakterler sayılardır.
Ve sayıları karakterler, sadece bağlama göre.
Ve o içeride çıkıyor Bir bilgisayar programı,
Eğer bakmak istiyorum nasıl belirleyebilirsiniz bu programın içinde bit?
>> Biz hafta 0 hatırlayın Sadece bu kodu Ascii,
sayılara haritalama mektupları.
Ve biz sermaye 65 olduğunu söyledi.
Sermaye B vb 66, ve.
>> Ve ihbar, biz aslında üzerinde karakter var Burada en üst sıra, C onları aramak gibi,
karakterleri ve ardından İkinci satırda ints.
Ve dönüştürebilirsiniz çıkıyor sorunsuz tipik olarak iki, arasındadır.
Ve biz yapmak istiyorsanız Bu kasıtlı, biz
mücadele etmek isteyebilirsiniz böyle bir şey.
>> Biz dönüştürmek isteyebilirsiniz büyük harf düşürmek için
dava veya harfe küçük harf.
Ve orada 's çıkıyor Burada aslında bir desen
Biz sadece bir an kucaklama olabilir.
Ama bir ilk bakalım açıkça bunu örnek.
>> Ben CS50 IDE geri gidiyorum.
Ben oluşturmak için gidiyorum Dosya Ascii 0.c. denilen
Ve ben devam edin ve eklemek için gidiyorum benim üstündeki standart io.h, int void main
Benim işlevi üstündeki.
Ve sonra ben sadece yapacağım ben eşit döngünün bir following--,
en, 65 diyelim.
>> Ve sonra ben daha az olacak alfabesinde 65 artı 26 harf.
Yani bilgisayarı izin vereceğim Orada benim için matematik yapmak.
Ve sonra bu döngü içinde, ne yazdırmak için gidiyorum?
>> % C, n'nin kullanılan karakterler% 'dir.
Ve şimdi iki değerden takmak istiyorum.
Ben geçici olarak soru koyduk sorusunu davet var işaretler.
>> Ben ileriye 65 yineleme yapmak istiyorum alfabenin 26 harfinin için,
her tekrarında yazdırarak o karakterin ayrılmaz eşdeğer.
Başka bir deyişle, ben istiyorum üzerinde 26 numaralar baskı yineleme
Ascii karakter nedir, mektup, ilgili sayı bu-- Ne
Gerçekten sadece yeniden Bu slayt grafik.
Peki bu soru işaretleri ne olmalıdır?
>> Eh, bu ikinci çıkıyor biri sadece değişken i olmalıdır.
Ben bir numara olarak görmek istiyoruz.
Ve orta argüman Burada, ben bilgisayar söyleyebilirim
bu tamsayı tedavisinde ben bir karakter olarak, böylece
Yüzde C için burada yerine
>> Diğer bir deyişle, eğer, İnsan programcı, biliyorum
Bunlar sadece rakamlar günün sonunda.
Ve ben 65 gerektiğini biliyorum Bazı karaktere harita.
Bu açık döküm ile, Bir parantez,
istediğiniz veri türünün ismi dönüştürmek ve bir kapalı parantez,
söyleyebilirim Bilgisayar, hey, bilgisayar,
Bir char bu tamsayı dönüştürmek.
>> Yani bu çalıştırdığınızda Program derleme sonra,
Diyelim ki Ascii 0 yapmak get-- bakalım.
Lanet olsun, ben burada yanlış ne yaptım?
bildirilmemiş tanımlayıcı kullanın tüm kasıtlı, doğru değil,
ama bakalım eğer biz değil Bu yoluyla sebebi.
>> Yani çizgi yüzden alamadım five-- Çok uzak vidalama önce.
Bu iyi.
Yani i hat 5 eşittir 65-- görüyorum.
Bu yüzden bazı aksine, C unutmayın Eğer önceden programlama dilleri varsa
deneyim, sahip Bilgisayarı anlatmak için,
Sıfırdan farklı olarak, ne değişkenin türünü öyle.
>> Ve ben burada bir anahtar sözcük unuttum.
beşinci satırda, ben i kullanmaya başladım.
Ama C söylemedim Ne veri türü olduğunu.
Yani burada gitmek için gidiyorum ve ah, bu bir tamsayı yapmak, demek.
>> Şimdi devam edin ve yeniden derlemek için gidiyorum.
Bu sabit.
Enter ./ascii0, bu tür bir serin.
Sadece o süper hızlı Bilgisayarı bu soru sormak
yerine bir slayt yukarı bakarak daha, o, A 65, her satırda bir tane basılmış
B I beri down-- 66, tüm yol , Harfler z bu 26 times-- yaptım
hangi 90 olduğunu.
Ve, aslında, hafif daha akıllı olur
Benim için not have been güvenmek bilgisayarda 26 ekleyin.
Ben sadece yapmış olabilir 90, hem de çok uzun
Ben iki kere aynı hatayı yapmayın olarak.
Ben üzerinden gitmek istiyorum z, sadece yukarı y üzerinden.
>> Yani açık bir döküm var.
Bu çıkıyor Hatta gerekli değildir.
Beni go ahead ve bu yeniden edelim derleyici ve yeniden çalıştırın Ascii 0.
Bu, C oldukça zeki olduğu ortaya çıktı.
>> Ve Printf, özellikle, Oldukça zeki.
Sadece iki kez i geçirirseniz Her iki tutucuları için, printf
, Gerçekleştirecek oh iyi ben tanıyorum Bana bir bir numara integer-- verdi,
65 ya da 90 ya da her neyse gibi.
Ama sen beni istiyorsun görüyoruz bir karakter gibi bu sayıyı biçimlendirmek.
Ve böylece Printf örtülü çevirebilirsiniz sizin için de bir char int.
Yani hiç bir sorun değil.
>> Ama bu nedenle denklik fark biz aslında yanı yapabilirsiniz.
Beni devam edin ve bir yapalım paha ASCII 1.c diğer versiyonu
Ve yerine yineleme tamsayılar, gerçekten aklını darbe olabilir
karakter üzerinden yineleme tarafından.
Bir karakter c sermaye A alırsa, ben go ahead ve bunu yapmak istiyorum,
Çok uzun C eşit veya daha az olduğu sermaye Z'ye Ve her tekrarında
Ben can, C artırmak istediğiniz şimdi burada benim printf hattında
diyelim ki, yüzde C yüzde tekrar, virgül C
>> Ve şimdi, diğer yönde gidebilir, açıkça karakteri döküm
Bir tamsayıya.
Yani, yine, bunu neden yapsın ki?
Bu sıralamak biraz garip karakter bakımından sayılır.
>> Ama ne anlarsanız başlık altında oluyor,
hiçbir sihirli gerçekten var.
Sadece hey, bilgisayar vermek, söylüyorsun Bana tip char C olarak adlandırılan bir değişken.
sermaye A. başlatılamıyor ve tek tırnak meseleyi dikkat edin.
>> C karakterler için gelen çağırmak Geçen hafta, tek tırnak kullanın.
dizeleri için, kelimeleri, ifadeler, çift tırnak kullanın.
Tamam, bilgisayar, bu yüzden, bu yapmaya devam karakter sürece daha az
veya z eşit.
Ve ben Ascii tablosundan biliyorum tüm Bu Ascii kodlarının bitişik bulunmaktadır.
>> boşluk var.
Bu yüzden, sadece A ile Z arasındaki bulunuyor bir numara her ayrılmış.
Ve sonra ben artırmak için Bir karakter, gerçekten istiyorsanız.
Günün sonunda, bu sadece bir sayıdır.
Bunu biliyorum.
Ben sadece ona 1 eklemek için tahmin edebilirsiniz.
>> Ve sonra bu kez, c yazdırmak, ve sonra ayrılmaz eşdeğer.
Ve hatta açık döküm gerekmez.
Ben printf ve sağlayabilirsiniz Bilgisayar rakam şeyler dışında,
böylece şimdi çalıştırırsanız , Ascii1./ascii1 yapmak
Ben de aynı şeyi olsun.
>> Yararsız bir program, kimse rağmen-- Aslında yazılım yazmak için gidiyor
anlamaya için, neydi A eşleyen numarası veya B, ya da Z?
Sadece Google'dan olacak, ya da konum online bakmak, ya da onu aramak
bir slayt veya benzeri üzerinde.
Peki bu gerçekten yararlı alır?
>> Eh, o konuşma slayt, orada olduğunu fark
harf arasında burada gerçek bir desen ve küçük tesadüfi değildi.
sermaye A 65 olduğuna dikkat edin.
Küçük harf 97 olduğunu.
Ve ne kadar uzakta düşük bir durumdur?
>> Yani 65 kaç adım uzaklıkta 97 dan?
Yani 97 eksi 65 32'dir.
Yani sermaye 65 olduğunu.
Bunun için 32 eklerseniz, Bir küçük harfe olsun.
Ve, eşdeğer, sen 32 çıkarma durumunda, Eğer sermaye geri almak A- B ile aynı
Biraz c küçük b, büyük C.
>> Bu boşlukların hepsi birbirinden 32 vardır.
Şimdi, bu bize izin gibi görünüyor Microsoft Word gibi bir şey yapmak,
veya Google Dokümanlar, nerede bulunuyor Her şeyi seçin ve ardından söyleyebiliriz,
küçük harfe tüm değiştirmek veya harfe tüm değiştirmek,
ya da sadece ilk sözcüğü değiştirmek harfe bir cümle.
Biz aslında bir şey yapabilirsiniz kendimizi böyle.
>> Beni devam edelim ve bir dosyayı kaydetmek Burada 0.c. yararlanmak denilen
Ve en go ahead ve bir program kamçılamak izin Bu tam olarak takip ettiği yok.
Yani CS50 kütüphane yer almaktadır.
Ve standart I / O bulunmaktadır.
>> Ve ben bu yakında geliyor biliyorum.
Yani koymak için gidiyorum Orada zaten string.h,
bu yüzden erişimi Stirling gibi şeyler,
ve daha sonra her zamanki gibi ana boşluğu int.
Ve sonra ben önde gidiyorum ve dizeleri yapmak dize almak alır,
sadece kullanıcıdan bir dize alır.
Ve sonra ben gidiyorum Benim sağlamlık denetimi yapmak.
dize eşit boş değilse, o zaman devam etmek güvenlidir.
Ve ne yapmak istiyorsunuz?
Ben, ben 0 eşittir gelen yineleme gidiyorum ve n s dize uzunluğu kadar.
>> Ve ben bu yüzden sürece bu yapacağım i Ayrıca artı N den az ve.
Şimdiye kadar, ben gerçekten sadece ben önce fikir alma.
Ve şimdi ben bir şube tanıtmak için gidiyorum.
>> Yani Scratch, geri düşünmek Biz yolun bu çatal vardı
ve geçen hafta C. ben gidiyorum Bu derseniz s i-inci karakter
bir ya da daha büyük davayı bir alt eşit,
ve-- Scratch içinde tam anlamıyla olur Ve fakat C size işareti say
ampersand-- ve s i-inci karakter , Daha az ya da durumda Z, alt eşittir
en ilginç şey yapalım.
en aslında bir çıktısını alalım hiçbir yeni satır ile karakter
Bu dize karakter, dizesinde i-inci karakter.
>> Ama devam edelim ve o 32 çıkarılır.
Else if karakter Biz arıyoruz bu dize
küçük a arasında değil ve küçük z, go ahead
ve sadece değişmeden dışarı basılmış.
Bu yüzden sunduk Bu parantez içi gösterim
Bizim dizeleri almak için dizesinde i-inci karakter.
>> Ben gibi bazı koşullu mantık ekledik Geçen haftaki hafta birinde Scratch
Ben sadece benim temel kullanıyorum ne anlaşılması
başlık altında oluyor.
s i-inci karakter mi Bir daha büyük ya da eşit?
Gibi, 97 ya da 98 veya 99 ve benzeri?
>> Ama aynı zamanda daha az ya da eşittir küçük z değeri?
Ve eğer öyleyse, bu hat ne demek?
14, bu tür Bütün fikir tohumu,
tarafından harfini büyük harf basitçe, ondan 32 çıkarılarak
Bu durumda, biliyorum, çünkü o her Benim numaralar nasıl temsil grafik.
O yüzden devam edin ve bu çalışmasına izin, 0.c yararlanmak derlemek sonra,
ve çalıştırma 0 yararlanmak.
>> gibi bir şey yazın en edelim tüm küçük harflerle Zamyla girin.
Ve şimdi hepimiz büyük harf Zamyla var.
Hepimiz küçük harflerle Rob yazın bakalım.
Hepimiz küçük harflerle Jason deneyelim.
Ve biz almaya devam zorla büyük harf.
Bir küçük hata var ben tür tahmin etmedi.
Yeni istemi biten olduğunu fark isimleri aynı hat üzerinde,
hangi biraz dağınık hissediyor.
>> Yani burada gidecek ve ben aslında bu programın sonunda
Bir satır karakteri çıktı.
Bu kadar.
printf ile gerek yok değişkenler veya biçim kodunda geçmektedir.
Kelimenin tam anlamıyla sadece yazdırabilirsiniz bir satır gibi bir şey.
>> O yüzden devam edin ve yapalım , Zamyla onu yeniden, tekrar 0 yararlanmak.
Ve şimdi biraz daha güzel olduğunu.
Şimdi, benim istemi kendi yeni hat üzerindedir.
Böylece tüm ince ve güzel.
Yani bu iyi bir örnek.
Ama ben bile mutlaka yok sabit kod 32 gerekir.
Biliyor musun?
Ben hiç yok açarsanız olabilir fark hatırlıyorum.
>> Ama biliyorum ki, eğer ben bir küçük harf var,
Ben esasen çıkarmak istiyorum ne olursa olsun mesafe çok az arasındadır
a ve büyük A çünkü varsayalım eğer Diğer tüm harfleri, aynı
Bu işi olmalıdır.
Ama bunu yerine, biliyor musun?
Yine bir başka yolu var.
>> Ben olsaydım o 1.c-- yararlanmak eğer ayrı bir dosya içine koymak.
aşağıdaki gibi en 2.c yararlanmak yapalım.
Gerçekten burada bu kadar temiz gidiyorum.
Ve bunun yerine hatta zorunda bilmek ya da bu düşük seviyede umurumda
uygulama detayları, yerine ben Sadece bir karakter yazdırmak için gidiyor,
alıntı unquote, yüzde C, ve sonra başka bir işlev çağrısı olduğunu
Bu bir argüman alır var, hangi Böyle bir karakterdir.
>> Orada, C çıkıyor Başka bir işlev çağrısı
Üst hangi adı olarak anlaşılacağı bir karakter alır
ve büyük harf yapar eşdeğeri ve sonra döner
böylece printf orada onu takabilirsiniz.
Ve bu yüzden olsa da, bunu yapmak için bir başka dosya tanıtmak gerekir.
başka bir dosya var dışarı o döner Sadece sınıftan bilemez,
Bir ders kitabı veya çevrimiçi ya da Referans olarak adlandırılan Cı type.h.
>> Benim başlığındaki arasında bu kadar ekleyebilirsiniz eğer öyleyse dosyaları ve şimdi yeniden derlemek Bu programı,
capitalize2 girin ./capitalize2.
en tüm Zamyla yazın edelim küçük, hala aynı şekilde çalışır.
Ama ne biliyor musunuz?
Üst için çıkıyor diğer bazı işlevselliğe sahiptir.
>> Ve beni bu tanıştırayım çeşit beceriksizce, burada komut
adlı, ancak kılavuzu adam.
Bu, çoğu Linux bilgisayarlar çıkıyor biz Linux işletim burada-- kullanıyor gibi
Bir komut var system-- diyor denilen adam,
Hey, bilgisayar, bana ver Bilgisayarın kılavuzu.
ne yapmak istiyorsun Bu kılavuzda bakmak?
>> Ben fonksiyonunu bakmak istiyorum Üst çağırdı girin.
Ve biraz şifreli var Bazen okumak için.
Ama biz konum fark Linux programcı kılavuzu.
Ve tüm metin var.
Ve orada olduğunu fark buraya fonksiyon adı.
O adında bir kuzeni vardır çıkıyor tersini yapar, hangi düşürmek için.
Ve Sinopsisten altında bildiri, bu kullanmak için , Tabiri caizse, man sayfasına işlev
Bana o I anlatıyor c type.h. içermesi gerekir
Ve ben uygulamadan biliyordu.
>> Burada, bana iki gösteriyor fonksiyon için prototipler,
böylece şimdiye kadar bu kullanmak istiyorsanız Ben onlar girdi olarak alır biliyorum,
ve onlar çıkış olarak dönmek neyi.
Ve sonra okursanız açıklama, görüyorum
daha ayrıntılı fonksiyon ne.
Ama daha önemlisi, eğer Ben, dönüş değeri altında bakmak
iade değer olduğunu söylüyor Dönüştürülen mektup bu,
ya da C, orijinal giriş, eğer Dönüşüm mümkün değildi.
>> Diğer bir deyişle, üst çalışacağız için harfe bir mektup dönüştürmek.
Ve eğer öyleyse, onu geri gidiyor.
Ama bazı nedenden dolayı bunu eğer belki de zaten büyük harf var,
belki bir ünlem işareti var ya da başka bir punctuation--
Sadece gidiyor Orijinal C dönüş
Ben kodu yapmak anlamına gelir aşağıdaki gibi iyi tasarlanmış.
>> Ben tüm ihtiyacım yok Bu kod lanetlemek hatları.
Birkaç gün önce hatlarının tümü sadece vurgulanan can
Sadece bir basit içine çökmüş olması bu-- printf yüzde çizgi,
Üst S desteğinin i c.
Bu, bir olacaktır Daha iyi bir tasarım örneği.
>> Neden 7 veya 8 hatlarında uygulamak kod, ben sadece ne oldu
yerine daraltmak zaman, silinen Bu mantık ve karar verme tüm
Şimdi tek bir satırda, 13 içine Bir kütüphaneye dayanır function--
Bir C ile geliyor fonksiyon, ama bu Bunu ne yapmak istediğinizi tam olarak yok.
Ve açıkçası, olsa bile o C ile gelmedi,
siz, kendiniz uygulamak negatif int olsun ile gördüm
ve aynı zamanda pozitif int geçen hafta olsun.
>> Bu kod artık çok daha okunabilir.
Ve, gerçekten, biz yukarı eğer, ne kadar daha kompakt bakmak
Benim program bu sürümüdür.
Bu, şimdi biraz üst ağır Tüm bu dahil olan.
şimdi ben duruyorum, çünkü Ama bu, Tamam programcılar omuzlarında
Benden önce.
Ve kim kim Gerçekten üst için uygulanan
çok gibi, bana bir iyilik yapanı uygulanan Stirling gerçekten
bir süre önce bana bir iyilik yaptın.
Ve şimdi biz bir var Daha iyi tasarım programı
Bu aynı mantık uygular.
>> stirling bahsetmişken, let Beni devam edip bunu.
Beni go ahead ve kaydetmek izin stirling.c olarak bu dosyayı.
Ve çıkıyor, biz geri soyma olabilir Oldukça sade bir şekilde şimdi başka bir katman.
Ben önde ve kamçı gidiyorum Ana başka bir programa kadar
Burada sade uygular yeniden o dize uzunluğu aşağıdaki gibi.
Yani burada bir kod satırı olduğunu Bana kullanıcıdan bir dize alır.
Biz tekrar bu kullanmaya devam.
Gidip kendime adında bir değişken vereyim Bir numara depolayan int türünde n.
>> Ve beni devam izin vermedi ve Aşağıdaki mantık yok.
s n-inci karakter yok iken eşit değil eğik 0, go ahead
ve n artırmak.
Ve sonra printf yüzde i n çıktı.
Ben, bu programın burada iddia dize uzunluğu çağırmadan,
Bir dizenin uzunluğu rakamlar.
>> Ve sihirli tamamen çizgi 8 içinde kapsüllenmiş
Burada yeni sözdizimi gibi göründüğünü ile, tek tırnak bu ters eğik çizgi 0.
Ama neden?
Eh, oldu düşünün Bütün bu süre devam.
>> Unutmadan önce Ve bir kenara, fark çok adam sayfalarına ek olarak
tipik bir gel CS50 IDE gibi Linux sistemi,
fark biz, dersin personeli, aynı zamanda var
Bir web sitesi versiyonunu yaptı denilen bu aynı düşüncenin
vardır reference.cs50.net, Bu aynı adam tüm sayfaları,
Aynı tüm dokümantasyon yanı sıra
izin veren üst kısmında küçük bir kutu Eğer adil tüm dönüştürmek
daha az rahat içine gizli bir dil modu, nerede, öğretim elemanları,
ile gitti ve basitleştirmek için çalıştık şeyleri tutmak için bazı dil
fikirler üzerinde duruldu değil, technicalities bazılarıdır.
Yani akılda tutmak, reference.cs50.net de başka bir kaynak olarak.
>> Ama neden dize uzunluğu işi yapar Ben bir an önce önerilen yolu?
İşte Zamyla adı yine var.
Ve burada Zamyla adı var Ben yapmaya devam olarak, kutulu,
o olmanın bir resmini, Gerçekten, karakterler sadece bir dizi.
Ancak Zamyla yok Bir programda izolasyon.
>> yazıp bir program çalıştırdığınızda, Eğer Mac ya da PC kullanıyorsanız
bellek veya RAM olarak tabiri caizse.
Ve aklınıza gelebilecek sahip olarak bilgisayar
bellek gigabayt bugünlerde çok.
Ve bir konser, milyarlarca demektir bayt böylece milyarlarca.
>> Ama zaman içinde geri saralım.
Ve biz kullanıyoruz varsayalım Gerçekten eski bilgisayar olduğunu
Sadece bellek 32 bayt vardır.
I could, benim bilgisayar ekranında, aşağıdaki gibi sadece bu çizin.
>> Ben sadece söyleyebiliriz benim Bilgisayar bu belleğin hepsi var.
Ve eğer bu, bellek sopa gibi Geçen zaman bizim resmi çağırmak.
Ve ben sadece bölmek eğer Yeterince zamanlarda bu,
Ben 32 bayt olduğunu iddia Ekranda bellek.
>> Şimdi, gerçekte, Ben sadece Burada bu ekranda şimdiye kadar çizin.
Bu yüzden, go ahead için gidiyorum ve sadece kongre tarafından,
Bir benim bilgisayarınızın belleğini çizmek Izgara değil, sadece bir düz çizgi.
Özellikle, şimdi iddia Bu ızgara, bu 8 ile 4 ızgara,
Sadece 32 byte temsil benim Mac kullanılabilir bellek,
ya da benim PC mevcuttur.
Ve onlar sarma konum üzerinde iki satır, sadece
ekranda daha fazla uyuyor çünkü.
Ama bu ilk bayt olduğunu.
Bu ikinci bayt olduğunu.
Bu üçüncü bayt olduğunu.
>> Ve bu 32 bayt olduğunu.
Ya da, bir bilgisayar gibi düşünüyorsanız bilim adamı, bu bayt 0, 1, 2, 3, 31 olduğunu.
Yani, eğer 31 0 var 0 olarak saymaya başlar.
>> Biz programı kullanmak Yani eğer çağrıları dize olsun,
ve biz insana bir dize olsun Ben Zamyla denilen yaptım gibi Z-A-M-Y-L-A,
dünya nasıl yapar içinde Bilgisayar tutmak parça hangi byte arasında
belleğin hangi yığın, hangi dize aittir?
Diğer bir deyişle, biz devam eğer bilgisayara başka bir ad yazın
Bu Andi gibi, çağıran dizge ikinci kez olsun,
A-N-D-I sonuna kadar sahip bilgisayarın bellek de.
Ama nasıl?
>> Eh, o altından çıkıyor dizeleri saklarken kaput ne C yapar
İnsan tip, ya da bu o, başka bir kaynaktan geliyor
Bunların sonu ile delineates Özel bir character-- ters eğik çizgi
Sadece özel bir yoludur 0, bir satırda 80 bit söyleyerek.
>> Yani A- bu sayı 97 hatırlama olduğunu.
8 bit yüzden bazı desen ondalık sayı 97 eder.
Bu ters eğik çizgi 0 anlamıyla sayıdır 0, diğer adıyla nul, N-U-L, daha önce farklı olarak,
N-U-L-L, biz konuştuk.
Ama şimdi, sadece bu olduğunu biliyoruz Ters eğik çizgi 0 Arka arkaya sadece 80 bittir.
>> Ve bu sadece bu çizgi sola şey diyor kum
bir dize ya da bir veri türüne aittir.
sağa ve bir şey Başka bir şey aittir.
Andi adı, bu arada, hangi sadece görsel
diğer satıra üzerine sarmak için olur, ama bu, sadece estetik bir detay var
Benzer nul sonlandırılır.
>> Bu bir A-N-D-I karakter dizesidir artı beşinci gizli karakter,
Sadece demarcates tüm 0 bit, yanı sıra Andi adının sonu.
Ve biz diyoruz eğer dize üçüncü kez olsun bilgisayar gibi bir dize almak için
Maria, E-A-R-I-A, benzer Maria olduğu adı nul ters eğik çizgi 0 ile sonlandırıldı.
>> Bu temelden farklıdır nasıl bir bilgisayar zamanki
Bir tamsayı ya da bir şamandıra veya diğer saklamak hala veri tipleri, hatırlama, çünkü
bir tamsayıdır, genellikle 32 bit ya da 4 bayt, ya da belki de 64 bit,
ya da sekiz bayt.
Ancak bir bilgisayar çok ilkel Bir programlama dilinde
sabit bir sayıda hood-- altında bayt
belki 1, belki 2, belki 4, belki 8.
>> Ama dizeleri, tasarım gereği, bir var karakter dinamik sayısı.
Sen gelene kadar, önceden bilmiyorum Z-A-E-Y-L-A, insan tip
veya M-A-R-I-A veya A-N-D-I. Bilmiyorsun kaç kez kullanıcı isabet edecek
klavye.
Bu nedenle, nasıl olduğunu bilmiyorum önceden kaç karakter
İhtiyacınız olacak.
>> Ve böylece C sadece tür bir gibi yaprakları kaputun altında gizli kırıntı
dizenin sonunda.
bellekte Z-A-E-Y-L-A depoladıktan sonra, o da sadece eşdeğer koyar
Bir dönem.
Bir cümlenin sonunda, o kadar, 80 bit koyar
nerede hatırlamak Zamyla başlar ve biter.
>> Yani bağlantı nedir, Daha sonra, bu program?
Burada Bu program, Stirling, bir mekanizma basitçe
bir dize almak için kullanıcıdan, çizgi 6.
Hat 7, bir değişken bildirmek n denir ve 0'a eşit olarak ayarlayın.
>> Ve sonra 8. satırda, ben sadece sordum Soru, n'inci karakter yapar iken
eşit değil bütün 0 bits-- diğer bir deyişle, yok
eşit bu özel karakter, eğik 0, hangi
Sadece bu özel nul character-- oldu devam edin ve sadece n artırmak.
>> Ve bunu yaparken tutmak ve korumak bunu yaparken, ve bunu yapmaya devam.
Ve bu yüzden bile olsa biz i kullandım geçmiş,
mükemmel para cezası anlam n kullanımı,
Sadece etmeye çalışıyorsanız kasten bu kez saymak,
ve sadece n onu aramak istiyorum.
Yani bu sadece soruyu soruyor, tüm 0s s n-inci karakter?
Değilse, bir sonraki görünüm bakmak, Sonraki bakmak sonraki bakmak,
Bir sonraki bekliyoruz.
>> Ama en kısa sürede ters eğik çizgi 0 gördüğünüz gibi, 11-- ile bu loop-- hattı 9 durur.
Sen, while döngüsünün patlak Bu değişken n içinde bırakarak
her bir toplam sayım Gördüğün dizesindeki karakter,
böylece dışarı baskı.
Yani bu deneyelim.
>> olmadan, beni devam edelim ve stirling fonksiyonunu kullanarak,
ama sadece benim kendi Homegrown sürümünü kullanarak Burada stirling denilen, beni önde gitmesine izin
bir şey ve çalıştırmak stirling, tip Ben önceden biliyorum Zamyla gibi
Altı karakterdir.
eğer çalışırsa görelim.
Gerçekten de altı var.
Kullanıcı Rob ile deneyelim, üç karakter, Üç karakter de ve benzeri.
Böylece gidiyor hepsi bu başlık altında üzerinde.
Ve bağlantıları fark Daha sonra, ilk hafta ile
sınıf, konuştuğumuz nerede soyutlama gibi bir şey,
hangi fikirlerin sadece bu katman, ya da karmaşıklığı, temel ilkeler üstünde.
Burada, tür arıyoruz stirling kaputunun altında,
bu yüzden anlamaya, konuşmak, nasıl uygulanacak ki?
>> Ve biz kendimizi yeniden uygulamak.
Ama biz asla gidiyoruz için stirling yeniden uygulamak.
Biz sadece gidiyoruz için Stirling kullanımı
aslında bazı dizeleri uzunluğu elde etmek için.
>> Ama büyü var Kaputun altında.
Eğer biliyorsanız altında olduğunu Kaput, bir dize
karakter bir dizisidir.
Ve karakter o dizi tüm sayısal ele alınabileceği
dirsek 0, dirsek ile 1, dirsek 2 ve
Bir dizenin sonunda bir olduğunu biliyoruz özel karakter, sen anlamaya
Bir çoğu şey yapmak nasıl Program, tüm çünkü aşağı kaynar
okuma ve hafıza yazıyor.
Yani değişen ve seyir olduğunu belleğin ya da hareketli şeyleri
etrafında bellekte, baskı şeyler vb ekranı ve üzerinde.
>> Yani şimdi bu yeni keşfedilen kullanmasına izin aslında dizeleri ne anlama
Kaputun altında, ve bir başka katman geri soyma
Şimdiye kadar biz ettik kadar o tamamen görmezden.
Özellikle, herhangi bir zamanda Biz bir program uyguladık,
Biz bu kod satırını yaşadım üst kısmına yakın ana ilan.
Ve biz int main boşluğu belirttiniz.
>> Ve parantez içinde o boşluk sahip olduğu tüm bu kez söz edilmiştir o ana
kendisi herhangi bir argüman almaz.
Ana olduğuna dair herhangi bir giriş kullanıcıdan almak için gidiyoruz
diğer bazı gelmek zorunda mekanizma gibi olsun int,
ya da float almak, ya da dize olsun, ya da başka bir fonksiyon.
Ama çıkıyor Bir programı yazarken,
aslında belirtebilirsiniz bu program taahhüt eder
insandan girişleri almak Komut satırından kendisi.
>> Diğer bir deyişle, daha da Böylece kadar Merhaba ./hello sadece yürütüyor var
ya da benzeri programlar, her Kullandığımız oldum diğer programlar,
Biz kendimizi yazmadım o var, öyle görünüyor ki, alarak
Komut satırı arguments-- make gibi şeyler.
Sen yapmak gibi bir şey söylemek, ve daha sonra, bir ikinci kelime.
Yoksa çınlama, daha sonra tınlamak ve söylemek İkinci kelime, bir dosyanın adı.
>> gibi olabilir, hatta RM ya da CP görülen ya da zaten kullanmış
kaldırmak veya dosyaları kopyalamak için.
Bunların hepsi sözde almak Komut satırı arguments--
Terminal isteminde ek kelimeler.
Ama bugüne kadar, biz kendimizi olmadı
girdi alarak bu lüks Kullanıcı o aslında çalışır
Komut satırında Programın kendisi.
>> Ama biz tarafından yeniden beyan yapabilirsiniz Ana sahip olarak, ileriye doğru değil hareketli
parantez içinde geçersiz, fakat bu iki argüman
ilk olarak bir tamsayı instead--, ve ikinci bir şey
dediğimiz için gidiyoruz yeni bir şey bir dizi, ruhu içinde benzer bir şey
Biz bir liste olarak Scratch gördüklerim, ama dizelerden oluşan bir dizi, yakında göreceğimiz gibi.
Ama bu görelim Örneğin yolu, önce biz
Bu tam olarak ne demek ayırt eder.
>> Ben CS50 IDE gitmek Yani eğer Burada, ben önde gittin
ve adlı bir dosyaya ilan Aşağıdaki şablon argv0.c.
Ve tek şey fark o kadar farklı
Ben int geçersiz değiştirdik ki argc dize yakın, açık dirsek argv
braket.
Ve orada, şimdi fark Bu parantez içi bir şey yok.
>> Hiçbir numara var.
Ve, hayır var ya N ya da başka herhangi bir mektup.
Ben sadece kullanıyorum Şimdilik köşeli parantez,
nedenlerden dolayı biz geleceğiz geri sadece bir an.
>> Ve şimdi ne yapacağım budur.
argc eşitse eşittir 2-- ve o eşittir eşittir hatırlamak
karşılaştıran eşitlik operatörüdür eşitlik için sol ve sağ.
Bu atama değil operatör,
kopya anlamına tek eşittir işareti, sağ taraftan bazı değer sola.
>> argc eşittir 2 eşitse, ben istiyorum diyelim ki, printf, merhaba, yüzdeleri, yeni satır,
ve daha sonra kırmızı alt çizgi takın ve burada yeni nedenlerle trick-- argv tutucusu 1,
biz geri bir anda geleceğiz.
argc yapmazsa başka 2 eşit, biliyor musun?
Her zamanki, baskı gibi, hemen önünüzde gidelim ve hiçbir değişiklik ile merhaba dünya.
>> Öyle görünüyor ki argc, hangi eğer , Argüman sayısı açılımı 2 eşittir
Ben yazdırmak için gidiyorum merhaba bir şey ya da diğer.
Aksi halde, varsayılan olarak, ben merhaba dünya yazdırmak için gidiyor.
Peki bu ne anlama geliyor?
>> Peki, beni go ahead ve kaydetmek izin Bu dosya, ve sonra argv0 yapabilirim,
ve sonra ./argv0 girin.
Ve dünya merhaba diyor.
Şimdi, neden?
>> Eh, istediğiniz zaman çıkıyor Komut satırında bir programı çalıştırmak,
ne yaparız doldururken genellikle bir argüman vektör diyoruz.
otomatik olarak diğer bir deyişle, bilgisayar, işletim sistemi,
Programınıza teslim edecek kendisinin tüm kelime listesi
İnsan olarak yazdığınız durumda istemi, sen
programcı yapmak istiyorum Bu bilgilerle bir şey.
Bu durumda, tek kelime Ben isteminde yazdığınız ./argv0 olduğunu.
>> Ve böylece argüman sayısı olduğunu Benim programa geçirilen sadece bir tanesidir.
Diğer bir deyişle, bir argüman Aksi takdirde argc olarak bilinen, saymak
Burada bir tamsayı olarak, sadece bir tanesidir.
Bir, tabii ki, iki eşit değildir.
Ve böylece bu merhaba, dünyayı yazdırır budur.
>> Ama bana bu bir yere atalım.
, Dememi argv0 olsun.
Ve o zaman nasıl Maria hakkında?
Ve sonra Enter tuşuna basın.
>> Ve sihirli burada ne dikkat edin.
Şimdi, bunun yerine merhaba dünya, ben Bu programın davranışı değişti
olsun değil girişi alarak dize veya başka bir fonksiyon,
ancak, görünüşe göre, benim komut kendisi, ben aslen de yazdıklarınızı.
Ve ben yine bu oyunu oynayabilir Örneğin, Stelios için değiştirilmesi.
>> Ve şimdi yine başka bir isim bakın.
Ve burada, ben Andi diyebilirsiniz.
Ve ben Zamyla diyebilirsiniz.
Ve biz, tüm gün boyunca bu oyunu oynayabilir Sadece farklı değerler tıkanmasında
Çok uzun ben tam sağlamak gibi isteminde iki kelime,
argc, benim argüman saymak böyle, 2 'dir.
>> Ben isim takılı olduğunu görüyor musun printf, burada bu durum başına?
Bu yüzden şimdi var gibi ifade yeteneği
Başka bir mekanizma girdi alarak, Sözde komut satırından,
yerine beklemek zorunda daha kullanıcı programı çalıştırır kadar
ve sonra ona istemi olsun dize gibi bir şey kullanarak.
>> Peki bu nedir?
Argc, yine sadece bir tam sayı olduğu, Kelimelerden-- arguments-- sayısı
Şuna sağlanan kullanıcı istemi terminal penceresinde,
Programın adını da dahil olmak üzere.
Yani ./argv0 etkili olduğu Programın adı,
ya da nasıl programını çalıştırın.
>> Bu bir kelime olarak sayar.
Yani argc 1 olacaktır.
Ama Stelios yazmak, ya da Andi veya Zamyla veya Maria
Bu argüman sayısı iki olduğu anlamına gelir.
Ve şimdi geçirilen iki kelime var.
>> Ve ihbar, biz bu mantığı devam edebilirsiniz.
Aslında diyorsan Zamyla Chan gibi bir şey,
Bir tam adı, böylece geçen toplam üç argüman,
şimdi varsayılan yine diyor, Elbette, 3 2 eşit değil çünkü.
>> Ve böylece bu yolla, ben var argv bu yeni argüman üzerinden erişim
Biz teknik ebil Bizim istediğimiz şey diyoruz.
Ama Kongre tarafından, bu kadar sırasıyla argv ve argc.
Argv argüman vektör, tür Bir programlama için bir eş anlamlısı
C özelliği bir dizi denir.
>> Bir dizi benzer değerler listesi geri, geri, geri, geri.
Diğer bir deyişle, eğer bir doğru burada olduğunu RAM, bir sonraki, ona hemen yanında
ve hemen yanında.
Onlar biryere değiliz.
Ve bu ikinci senaryo, işler Tüm bellekte yerinde var,
aslında güçlü bir özellik olabilir.
ne zaman biz ama biz geri geleceğiz meraklısı veri yapıları hakkında konuşun.
Şimdilik, bir dizi sadece bir olduğunu bitişik bellek yığın,
öğesi olan her geri, geri, geri, geri,
ve genellikle aynı tür.
>> Yani, yaklaşık düşünüyorsanız an önce, bir dize nedir?
Eh, bir dize, Zamyla gibi, Z-A-E-Y-L-A, teknik, bir
sadece bir dizi.
Bu karakter bir dizi var.
>> Ve bu yüzden gerçekten bu kadar çizerseniz ben Bellek bir yığın olarak, daha önce yaptım
bu o her çıkıyor karakterleri bir bayt kaplıyor.
Ve sonra bu özel var Nöbetçi karakter, ters eğik çizgi 0,
veya sekiz 0 bit, o Bu dizenin sonunu çizmektedir.
Yani bir dize, o döner dışarı, unquote dize alıntı
chara-- sadece bir dizidir gerçek bir veri türü olan Char.
>> Ve şimdi argv, meanwhile-- geri programa dönelim.
biz sözcük görmek bile argv, dize burada, bir dize kendisi değildir.
Argv argüman vektör, dizelerden oluşan bir dizidir.
>> Eğer bir dizi var, böylece tıpkı karakterler, daha yüksek seviyede olabilir,
strings-- bir dizi, yani, örneğin, Ben bir an önce yazdığınız zaman ./argv0
argv0, uzay Z-A-E-Y-L-a, I iddia argv, bu-- ./argv0 iki dizeleri vardı
ve Z-A-E-Y-L-A. İçinde Başka bir deyişle, argc 2 oldu.
Neden?
>> Eh, etkin bir ne oluyor üzerinde bu dizelerin her biri olduğunu
Elbette, karakter dizisidir daha önce olduğu gibi, her kimin karakterler
tek bir bayt kaplıyor.
Ve gerçek 0 karıştırmayın 0 ile programın adı,
bu 80 bit anlamına gelir.
Ve Zamyla, bu arada, hala Ayrıca karakterlerin bir dizi.
>> Günün sonunda, bu yüzden gerçekten başlık altında bu gibi görünüyor.
Ama nasıl ana doğası gereği, argv işleri, bana tüm bu sarılmasına izin verir
, Eğer sen, büyük bir diziye kadar biz biraz üzerinde basitleştirmek eğer, o
resim gibi ve do not göründüğünü Oldukça orada büyütmek için çizmek,
Bu dizi, sadece boyutu 2 ilkidir bir dize içeren unsuru,
İkinci unsur hangi bir dize içerir.
Ve, sırayla, eğer tür her yakınlaştırmak
Bu dizeleri, ne sen Kaputun altında bakın
her dize sadece olmasıdır karakter dizisi.
>> Şimdi, sadece dizeleri gibi, Biz erişim olsun başardık
bir dize i inci karakter Bu köşeli ayraç gösterimi kullanarak.
Benzer şekilde, dizilerle Genel olarak, biz can
almak için köşeli ayraç notasyonu kullanmak Dizideki dizeleri herhangi bir sayıda?
Örneğin, bana izin go ahead ve bunu.
>> Beni devam edin ve argv1.c yaratalım, hangi biraz farklı bu kez.
Bunun yerine argc2 için denetimi, Ben bunun yerine bu yapacağım.
Ben 0 olsun int, ben az argc daha ben artı artı,
ve daha sonra, bu iç çıktısını Yüzde s, yeni hat ve ardından
argv dirsek i.
>> başka bir deyişle, bu yüzden ben başa değilim Şu anda bireysel karakter.
Argv, bu boş bir meydanda ima ettiği adı argv sağında parantez,
dizelerden oluşan bir dizidir argv anlamına gelir.
Ve argc sadece int.
>> Burada bu hat, 6, olduğu set söyleyerek i 0 eşittir.
, Kadar tüm yol saymak ancak argc, dahil.
Ve sonra her tekrarında, bir dize çıktı.
Ne dize?
>> argv i-inci dize.
Ben önce ise bu yüzden köşeli ayraç kullanarak
notasyonu i indisli ulaşmak için Şimdi bir dizesinde karakter,
Ben köşeli ayraç notasyonu kullanıyorum Dizideki i dize almak için.
Yani bir katman tür Yukarıdaki kavramsal.
>> Ve böylece bu konuda derli toplu ne Şimdi program ben argv1 derlemek,
ve sonra ./argv1 yapmak ve sonra yazın foo bar Baz gibi bir şey,
Üç varsayılan kelime olan vardır bilgisayar bilimcisi her zaman için ulaşır
o biraz tutucu kelimeler ihtiyacı ve Enter tuşuna basın, bu kelimelerin her biri,
Programın adını da dahil olmak üzere hangi Birinci konumda argv içinde
biter her seferinde bir yazdırılan.
Ve ben bunu değiştirmek ve ben dersem argv1 Zamyla Chan gibi bir şey,
biz onlardan her üç olsun argv0 olduğu sözler,
argv1, argv2 bu nedeniyle vaka argc, sayısı, 3'tür.
>> Ama ne temiz olduğunu anlamak eğer olduğunu Bu argv, dizeler sadece bir dizidir
ve bir dize anlıyoruz karakter dizisidir,
biz aslında bir tür kullanabilirsiniz köşeli ayraç notasyonu birden çok kez
bir dize seçin ve sonra seçmek için dize içinde bir karakter,
aşağıdaki derin olarak dalış.
Bu örnekte, gitmeme izin önde ve bu argv2.c diyoruz.
Ve bu örnekte, beni önde gitmesine izin ve i 0 olsun int için following-- yapmak,
i argc daha azdır I artı artı, sadece eskisi gibi.
Yani şimdi bu diğer Kelimelerden-- ve Yeterince karmaşık oluyor.
Sonra söylemek için gidiyorum argv dizeleri üzerinden yineleme,
kendime bir açıklama olarak.
Ve sonra ben bir var gidiyorum , For döngüsü iç içe muhtemelen size hangi
yapılabilir veya kabul var Scratch olarak, yapıyor, nerede
Ben ben int-- söylemek için gidiyorum Tekrar i kullanmak için gitmiyorum,
Ben gölge istemiyorum çünkü ya çeşit mevcut i üzerine.
>> Çünkü, bunun yerine, j söylemek için gidiyorum Bu, i daha sonra değişken zaman git
zaman sadece çalışıyorum Basit numaralar saymak.
j alır için 0-- ve ayrıca, n, gidiyor , Argv desteğinin i kıç uzunluğu olsun
Uzun J m'den az olduğu, j artı artı, aşağıdakileri yapın.
Ve burada ilginç bir parçası.
>> bir karakter ve yeni bir satır yazdırın, argv dirsek i, dirsek j tanıttığım.
Tamam, bu yüzden beni burada bazı yorumlar ekleyelim.
karakterleri üzerinde yineleme Geçerli dizesinde,
i-inci dize baskı j-inci karakter.
Yani şimdi, en düşünelim bu yorumlar ne anlama.
>> dizeleri üzerinde yineleme argv-- kaç
dizeleri bir dizi hangi, argv vardır?
Argc çok, bu yüzden yineleme ediyorum i argc kadar 0 eşittir.
Bu arada, kaç karakter argv i-inci dize vardır?
>> Eh, bu cevap almak için, Ben sadece dize uzunluğunu çağrı
Geçerli dize I bakımı argv dirsek i olan yaklaşık.
Ve ben geçici olduğunu saklamak için gidiyorum değer n, sadece önbelleğe alma amaçlı,
verimlilik için hatırlamak için.
Ve sonra ben, 0 j başlatmak gidiyorum j az n sürece devam,
ve her yineleme artış j.
>> Ve sonra burada, başı hat 12 benim yorum,
Bir karakter çıktı, yeni bir hat izledi,
Özellikle argv braket Ben bana i-inci dize verir
argv-- yani ilk kelime, ikinci kelime, üçüncü kelime, ne olursa olsun.
Ve sonra j daha derin dalışlar ve alır Bana o kelimenin j-inci karakter.
Ve böylece, aslında, sen tedavi edebilir argv çok-boyutlu bir şekilde,
iki boyutlu, dizi olarak, bu sayede görünüyor her kelime türlü
Aklını en böyle Göz ve her karakter
tür içinde oluşur Bir sütun, eğer yardımcı olur.
>> Gerçekte, biz ne zaman kızdırmak Gelecekteki haftalarda bu apart,
Biraz olacak Bundan daha sofistike.
Ama gerçekten can şimdilik, bunu düşünmedim,
sadece bu iki boyutlu olarak Bunun dizisi, bu sayede bir seviye
dizeleri tümüdür.
Ve sonra derin, senin dalış ise Bireysel karakter alabilirsiniz
Burada bu notasyonu kullanarak buradaki.
>> Yani net etkisi nedir?
Beni devam edelim ve argv2-- lanetlemek bunu yapmak.
Burada bir hata yaptım.
örtük ilan kütüphane işlevi Stirling.
Yani tüm bu zaman, bu kadar belki uygun
biz bir çeşit terbiye olduğunuzu tam Başladığımız yere.
>> Ben örtük ilan berbat kütüphane işlevi Stirling.
Tamam, bir dakika bekleyin.
Özellikle, unutmayın çünkü tam burada.
I string.h dahil etmek gerekir Programın bu sürümü.
>> Beni go ahead ve dahil edelim string.h, bu tasarruf, go ahead
ve argv2 yeniden derleyin.
Ve şimdi, burada girin, argv2 yapmak, gidin.
Ve biraz olsa ilk bakışta şifreli,
Gerçekten, fark ne nokta argv2 yazdırılır olduğunu.
>> Ama sonra bazı kelimeler yazarsanız istemi, argv2 Zamyla Chan gibi,
Ayrıca, biraz girin ilk bakışta şifreli.
Ama biz geri kaydırma eğer, ./argv2 Z-A-E-Y-L-A, C-F-A-K.
Bu yüzden her kelimenin üzerine iterated ettik.
Ve bu da, bizim iterated ziyaretinde Bir kelime içinde her karakter.
>> Şimdi, bu sonuçta, var olduğunu fark
bir başka ayrıntı biz tür oldum Bu bütün zaman görmezden.
Biz sadece ayrı alay şey Main adlı girişleri olabilir?
Ne ana üretiminin dersiniz?
>> Bu sürenin tamamı, biz oldum Sadece kopyalama ve yapıştırma
Ana önündeki kelime int, Online gördüğünüz olsa,
bazen yanlış eski sürümlerinde C ve derleyiciler, onlar, geçersiz söylüyorlar
veya hiçbir şey.
Ancak, gerçekten de, sürüm C biz kullanmakta olduğunuz,
C 11 veya 2011, fark o int olmalıdır.
Ve bu da olmalıdır geçersiz veya argc ve burada argv.
>> Ama neden int main?
aslında ne dönüyor?
Peki, tüm bu zaman çıkıyor her zaman bir program main yazdım
Her zaman bir şeyler dönüyor.
Ama çok gizlice yapıyor.
>> Bu şey bir int çizgi olarak 5 göstermektedir.
Ama ne int?
Peki, bu var programlama kongre,
bu sayede hiçbir şey varsa yanlış gitti ve tüm iyi,
Genellikle programlar ve fonksiyonlar return-- biraz counterintuitively--
0.
0 genelde tüm iyi belirtir.
aklınıza Yani olsa bile Birçok bağlamlarda sahte o,
aslında genel olarak iyi bir şey anlamına gelir
>> Bu arada, bir program 1 dönerse, veya negatif 1, ya da 5 veya negatif 42,
veya olmayan herhangi bir 0 değeri, Bu genellikle anlamına
O bir şey yanlış gitti.
Aslında, kendi Mac veya PC üzerinde, Aslında görmüş olabilir
Bir hata mesajı, bu sayede onu bir şey ya da diğer hata diyor
Kod negatif 42 ya da hata kodu Böyle 23, ya da bir şey.
Bu sayı genellikle sadece bir ipucu programcı, ya da şirkete
bu yazılımı yapılmış, ne yanlış ve neden gitti
onlar bakmak böylece kendi bilgisi veya kod,
ve anlamaya neler Hata aslında şu anlama gelir.
Genellikle değil Bize yararlı son kullanıcılara.
>> Ama asıl döner 0, tüm iyi olduğu zaman.
Ve sizin belirlediğiniz yoksa dönmelidir ana ne
Sadece otomatik olacak Senin için 0 döndürür.
Ama bir şey dönen Başka aslında yararlıdır.
>> Bu son programda, bana izin go ahead ve bu exit.c çağrı,
ve bugünün son tanıtmak Bir hata kodu olarak da bilinir konular.
Beni go ahead ve dahil edelim bizim tanıdık dosyaları kontör, int main yapmak.
Ve bu sefer, en int argc yapalım dize argv ve benim parantez ile
bu dizide olduğunu ima etmek.
Ve sonra bana sadece bir sağlamlık denetimi yapalım.
Bu sefer, argc yapmazsa 2 eşit, o zaman biliyor musun?
Unut gitsin.
Bunu söylemek için gidiyorum, hey, kullanıcı, Eğer komut satırı argümanı eksik
ters eğik çizgi n.
>> Ve o kadar.
Ben çıkmak istiyorum.
Ben, preemptively gidiyorum ve erken gerçekten geri dönüş
1 numara dışında bir şey.
İlk değerine gitmek olabilir hata 1'dir.
Eğer hatalı diğer bazı varsa oluşabilir durum
Eğer geri dönüşü 2 söylemek veya 3 dönmek, ya da olabilir hatta belki de negatif 1 veya negatif 2.
>> Bunlar sadece çıkış kodları Bu olan genel olarak
Sadece programcıya yararlı ya da yazılım nakliye oluyor şirketi.
Ama aslında öyle olduğunu 0 değil önemli olan budur.
Yani bu programda, ben istiyorum garanti bu program sadece
kullanıcı beni sağlar çalışır iki bir argüman sayısı ile,
programın adı ve diğer bazı kelime, ben, şu kadar zorlayabilir
printf söyleyerek kullanıcı bağırma, komut satırı argümanı eksik,
1 döndürür.
Bu sadece hemen olacak programdan çıkın.
>> argc eşit Yalnızca 2 aşağı alacak burada, ben söylemek için gidiyorum hangi noktada,
merhaba yüzde s, ters eğik çizgi n argv1.
Diğer bir deyişle, ben argv 0 peşinde değil,
hangi programın sadece addır.
Ben, virgül, merhaba yazdırmak istediğiniz İnsan yazdığınız ikinci kelime.
Ve bu durumda üzerinde Satır 13, tüm iyi.
>> Ben argc 2 olduğunu biliyoruz mantıksal bu programdan.
Devam edin ve 0 dönmek için gidiyorum.
bir kenara, unutmayın ki bu da sıfırdan geçerlidir.
>> Mantıken, bunu yapabileceğini ve bu satırları saklanması
Burada bu else bloğu kod.
Ama bu tür var gereksiz benim kod girintilenmiş.
Ve ben süper yapmak istiyorum açık olursa olsun ne olduğunu,
Varsayılan olarak, merhaba bir şey, baskılı alacak
Kullanıcı işbirliği sürece.
>> Bu yüzden kullanımı çok yaygındır Bir durum, sadece eğer,
Bazı hatalı yakalamak için durum ve çıkın.
Sonra, bu kadar uzun hepsi iyi, başka bir yok,
ama sadece kod var Bu dışarıdan, öyle çünkü eğer
Bu eşdeğer özel durumda, mantıksal.
Yani ben sadece, 0 iade ediyorum açıkça tüm iyi anlamına gelir.
>> Ben return 0 atlanırsa, it would benim için otomatik olarak kabul edilmez.
Ama şimdi ben iade ediyorum En azından bu durumda bir,
Ben iyi ölçmek için, gidiyorum ve netlik, bu durumda 0 döndürür.
Yani şimdi beni go ahead ve çıkış yapalım, hangi sadece ayrılmak için mükemmel bir segue olduğunu.
>> Ama çıkış yapmak ve gitmeme izin önde ve ./exit yapmak girin.
Ve program, bana bağırdı komut satırı argümanı eksik.
Tamam, beni işbirliği yapalım.
>> Bana yerine ./exit yapsın, David girin.
Ve şimdi merhaba David diyor.
Ve normalde bu görmek değildir.
>> Ama bu bir var olduğu ortaya çıkıyor aslında görmek için Linux özel yolu
Ne çıkış kodu ile bir program çıkıldı.
Bazen grafiksel olarak Mac OS veya Windows gibi dünya
Yalnızca bu sayıları bir bakın hata mesajı ekranda açılır
ve programcı Sana bu sayısını gösterir.
Ama biz ne hata görmek istiyorsanız mesajı biz burada-- yapabiliriz, bir
böylece ./exit girin, baskı komut satırı argümanı eksik.
>> Şimdi yankı $ ?, yaparsanız hangi seyir gülünç şifreli.
Ama $?
büyülü sihir olduğunu Bu diyor hey, bilgisayar,
Bana söylediklerini önceki Programın çıkış kodu oldu.
Ve ben Enter tuşuna basın.
çünkü o, 1 gördüklerinizi ben dönmek için benim ana işlevi söyledi.
>> Bu arada, ben David ./exit yaparsanız, ve ben, merhaba David bkz Enter tuşuna basın.
Şimdi yankı $ yaparsanız ?, ben 0 merhaba görüyorum.
Ve böylece bu aslında olacak değerli bilgiler olabilir
Hata ayıklayıcı bağlamında değil, bu yüzden de Eğer, insan, ister misiniz o kadar.
Ama debugger ve diğer programlar, biz bu dönem kullanacağız
sık sık bu sayının bakacağız, o tür uzak gizli olsa bile
Eğer, bunun için bakmak sürece belirlemek, bir programın olsun ya da olmasın
yürütme doğru veya yanlış idi.
>> Ve böylece bize getiriyor Bu, günün sonunda.
Biz bakarak bugün başladı hata ayıklama ve sahasında da
kendisi ve daha sonra da ilginci, teknik başlık altında
ne dizeleri son hangi vardır hafife hafta biz sadece aldı
ve kesinlikle onları aldı için Scratch verilen.
>> Biz sonra biz nasıl erişebileceğini baktı bir dize bireysel karakterler,
ve sonra tekrar daha yüksek bir seviyeye aldı eee nasıl bakıyor, şeyler bakmak
bireysel olarak almak istiyorsanız yapısı gibi bir listede elemanları,
Biz birden fazla dizeleri ile yapamaz?
Ve biz komut satırı argümanları ile yapabilirsiniz.
Ama burada sadece kutuları bu resim Bu genel düşüncenin inandırıcı olduğunu
bir dizi ya da bir listesi veya bir vektör.
Ve bağlı Bağlam, bu kelimelerin hepsi
biraz farklı anlamlara gelir.
Yani C, sadece gidiyoruz bir dizi hakkında konuşmak için.
Ve bir dizi yığınıdır bellek, her kime var:
elementler, sırt, bitişik olan geri, geri, geri.
>> Ve bu elemanlar, genel olarak Aynı veri türünde, karakter,
karakter, karakter, karakter, ya da dize, dize, dize, dize veya int,
ne olursa olsun int, int, biz saklamak için çalışıyoruz.
Ama günün sonunda, bu ne kavramsal benziyor.
Sen alıyorsun senin Bilgisayarın bellek veya RAM.
Ve içine dışarı oyma ediyoruz aynı büyüklükte kutular, hepsi
için, geri, geri döndü geri bu şekilde geri.
>> Ve hakkında güzel ne Bu fikir ve gerçek
Bu şekilde değerlerini ifade edebilmeleri Veri yapıları ile ilk
sınıfta, başlayabilir aracı kodu ile sorunları çözmek için
bu hafta 0 çok sezgisel geldi.
Telefonu Hatırlayacaksınız kitap örneği, nerede
Biz bir bölünmeyi kullanılan ve fethetmek veya bir ikili arama algoritması,
bir bütün aracılığıyla elemek isim ve numaralar demet.
Ama biz, hatırlama kabul o telefon rehberi zaten sıralanmıştır
başkasının zaten vardı out-- adlarının bir listesi verildi düşündüm
ve bunları alfabetik nasıl Numaraları.
Ve şimdi o C biz çok yeteneği var
Şeyler değil düzenlemek için fiziksel bir telefon rehberinde
ama neredeyse bir bilgisayarın içinde bellek, biz güçlü önümüzdeki hafta olacak
İlk bu-- tekrar tanıtmak Bir array-- bizim veri yapıları
ama daha da önemlisi, gerçek bilgisayar bilim algoritmaları uygulamaya
kod, hangi ile biz saklayabilirsiniz Böyle yapılarda veriler,
ve daha sonra işlemek başlar ve aslında sorunları çözmek için,
ve bunun üzerine inşa etmek, Sonuç olarak, C programları
Python, JavaScript, SQL veritabanlarını sorgulamak?
>> Ve biz bunlardan hepsi göreceksiniz kilidi farklı fikirler.
Ama şimdi, o hatırlamak Bugün tanıtılan alanı
Bu şey burada, ve kriptografi dünya.
Ve sonraki sorunların kendinizi arasında çözmek kriptografi sanatıdır olacak,
çabalıyorlar ve de-çabalıyorlar bilgi ve şifreleme
ve metni deşifre ve nihai olarak varsayarak
Şimdi biliyorum bu ne başlık altında olduğunu
böylece bakın veya aldığınızda Böyle bir mesaj, sizi
kendiniz çözebilir.
Bütün bu ve daha bir dahaki sefere.
>> [VİDEO OYNATMA]
>> -Mover Sadece geldi.
Ben ziyaret gidiyorum Üniversite profesörü.
Evet.
Merhaba.
Sensin.
Bekleyin!
David.
Ben sadece anlamaya çalışıyorum Size ne olduğunu.
Şey yardımcı olabilir olun.
Sen onun kolej vardı Oda arkadaşı, değil mi?
Onunla ne zaman ile vardı O CS50 projesini tamamladı?
>> [MÜZİK]
>> -Bu CS50 idi.
>> Burayı seviyorum.
>> -Yiyip bitirmek.
Biz iş dışarı gidiyoruz.
>> [SON OYNATMA]