[MÜZİK OYUN] Doug LLOYD: Pekala. Tek ile çalışma değişkenler oldukça eğlenceli. Ama biz ne isterseniz çalışmak değişkenlerin bir sürü, ama biz bir grup var istemiyorum Bizim kod etrafında farklı isimler uçan? Bu durumda, diziler vardır gerçekten kullanışlı gelecek. Diziler gerçekten temel bir veri vardır Herhangi bir programlama dili için yapı Kullanacağınız söyledi. Ve onlar, gerçekten, gerçekten yararlı konum Özellikle, biz CS 50, göreceğimiz gibi. Biz tutmak için diziler kullanın aynı veri türü değerleri bitişik bellek yerlerde. Yani bir değil, demek ki şekilde biz grup olabilir beraber tamsayılar bir demet bellek veya karakterlerin bir demet ya da gerçekten bellekte yüzer birbirine yakın ve iş bunların her biri vermek zorunda kalmadan biri kendi benzersiz ad, can Bir süre sonra hantal olsun. Şimdi, tek yönlü diziler benzetme için Yerel yazı hakkında düşünmektir Bir saniye ofisi. Yani programlama uzak adım ve sadece gözlerinizi kapatın ve kafanızda görselleştirmek yerel postane. Genellikle, çoğu sonrası ofisler, bir büyük banka var Duvarda bir postane kutuları. Bir dizi dev bir blok bitişik bellek, Bir posta aynı yolu senin postane, banka büyük bir boşluk olduğunu postanenin duvarı. Diziler, küçük bölümlenmiş edilmiştir aynı alan belli boyutlarda bloklar, bunların her biri, bir öğe olarak adlandırılır Aynı şekilde yazının duvarının ofis, küçük bölümlenmiş edilmiştir aynı alan belli boyutlarda bloklar, hangi bir posta kutusu diyoruz. Dizinin her elemanı olabilir veri belirli bir miktar depolamak Her posta kutusu mümkün olduğu gibi posta belirli bir miktarda tutmak için. Her bir elemanı saklanabilir ne Dizi aynı verilerin değişkenlerin Böyle sadece int ya Char gibi tipi, senin postane kutusunda olduğu gibi, Eğer tek şey sığabilecek Benzer bir tipteki, Bu tür mektuplar veya küçük paketler olarak. Son olarak, biz her elemanını erişebilirsiniz doğrudan indeks sayısına göre dizi, bizim postane erişebilirsiniz gibi onun posta kutusu numarasını bilerek kutu. Umarım, bu benzetme Eğer kafanı yardımcı olur Dizilerin fikri etrafında başka bir şey benzerlikler muhtemelen olduğunu zaten aşina. C, bir dizinin elemanları 1 değil, 0 dan başlayarak endeksli. Ve bu gerçekten çok önemli. Neden biz Ve aslında, bu, CS 50, Sık sık ve neden bilgisayar bilimcileri 0'dan sayacaktır olduğunu Çünkü C'nin dizinin her zaman 0 başlar indeksleme. Bir dizi n elemanlarından oluşur Yani eğer, Bu dizinin ilk elemanı , indeks 0 yer almaktadır ve dizinin son elemanı n indeksi eksi 1 bulunmaktadır. Yine n unsurları varsa bizim Dizi, son endeks n eksi 1 olduğunu. Yani bizim dizi 50 unsurları varsa İlk unsur, endeks 0 yer almaktadır ve son eleman endeksi 49 bulunmaktadır. Ne yazık ki, ya neyse, bakış açınıza bağlı olarak, C burada çok hoşgörülü olduğunu. Bu engel olmaz senin dizi sınırlarının dışına gidiyor. Sen eksi erişebilir Senin dizinin 3 unsuru ya da dizinin 59 elemanı, diziniz sadece 50 öğeleri varsa. Bu sizin programı durmayacak derleme, ama çalışma zamanında, Bir karşılaşabileceğiniz Korkunç segmentasyon arızası Belleği erişmek başlatırsanız Bu ne sınırları dışında olduğunu size vermek için bir program istedi. Yani dikkatli olun. Ne bir dizi yapar beyan benziyor? Biz varlığını içine bir dizi kodu nasıl gibi herhangi bir başka değişken kod? Üç parça bir dizi vardır Bir tür declaration--, bir isim, ve boyutu. Bu çok benzer Değişken bildirimi, hangi Sadece bir tür ve bir isim, varlık büyüklüğü elemanı Bir dizi için özel bir durum, biz onlardan bir demet alıyorsanız, çünkü aynı zamanda. Yani tipi değişken ne tür sen Dizinin her elemanı olmak istiyorum. Tamsayılar dizisi için istiyor musunuz? Ardından, veri türü int olmalıdır. Eğer bir olmak ister misiniz Çiftlerde veya yüzen dizi? Veri tipi çift olması veya şamandıra olmalıdır. Adı ne size dizinizi aramak istiyorum. Bu dev isim istiyorsun tamsayılar ya da şamandıra veya karakter banka veya iki katına, ya da ne var? Ne onu aramak istersin? Pretty kendini açıklayıcı. Gider Son olarak, boyut, köşeli parantez içinde, kaç unsurlar yapacağınız diziniz içeren gibi. Kaç tamsayı istiyorsun? Kaç yüzen istiyorsun? Yani, örneğin, öğrenci notları 40 int. Bu Öğrenci adında bir dizi beyan 40 tamsayılar oluşan sınıflarda,. Pretty kendini açıklayıcı, umarım. İşte bir başka örnek. Çift menü fiyatları 8. Bu adında bir dizi oluşturur Oluşan menü fiyatları, Sekiz çiftler için bellekte oda. Her elemanın düşünüyorsanız türü veri tipi bir dizinin, bu nedenle, örneğin, tek bir eleman int türünde bir dizi, aynı şekilde size Başka düşünürdüm int türünde değişken, tüm tanıdık operasyonları biz o Operasyon önce tartışılan Video mantıklı olacaktır. Yani burada biz bir dizi bildirebilirsiniz Truthtable denilen boolean bölgesinin hangi 10 Booleans için odadan oluşmaktadır. Ve sonra, sadece biz sadece atayabilirsiniz gibi Çeşidi başka değişkene bir değer Boole, biz bir şey söyleyebiliriz Truthtable köşeli ayraç gibi Biz işaret nasıl 2, hangi doğruluk tablosunun eleman? Üçüncü unsur Doğruluk tablosu, hatırlıyorum, çünkü Biz 0'dan güveniyoruz. Yani biz işaret nasıl doğruluk tablosunun üçüncü unsur. Truthtable 2, yanlış eşittir sadece biz declare-- olabilir gibi veya herhangi bir yerine, atama olabilir Boolean tipi değişken yanlış olduğu. Biz de koşullarda kullanabilirsiniz. (truthtable 7 == eğer demek doğrudur), Sekizinci elemanı ise Truthtable bölgesinin doğrudur belki mesaj yazdırmak istiyorsanız kullanıcı, printf ("DOĞRU! n") için ;. Bu Truthtable söylemek bize neden 10 doğru, gerçek eşittir? Eh, ben can, ama oldukça var tehlikeli, çünkü hatırlıyorum Biz 10 Booleans bir dizi var. Yani en yüksek endeks o derleyici bize 9 vermiştir. Bu program derlemek, ancak eğer bellekte başka bir şey nerede olur var Truthtable 10 gitmek için bekliyoruz, Biz bir segment hataya zarar verebilir. Biz onunla uzak olsun olabilir, ama genel olarak, oldukça tehlikeli. Peki ben burada yapıyorum yasal C, ama ille en iyi hamle. Şimdi, beyan zaman ve Aynı anda bir diziyi başlatmak, Aslında oldukça var özel sözdizimi size dizi doldurmak için kullanabileceğiniz başlangıç ​​değerleri ile. Bu hantal alabilirsiniz boyutu 100 bir diziyi bildirmek ve sonra söylemek zorunda, eleman 0 Bu eşittir; elemanı 1, bu eşittir; eleman 2 olduğunu eşittir. Doğru, ne anlamı var? Küçük bir dizi var ise, Böyle bir şey yapabilirdi. Bool truthtable 3 açık eşittir kaşlı ayraç ve sonra virgül elemanların listesini ayrı Eğer dizide koymak istiyorum. Sonra kaşlı ayraç noktalı kapatın. Bu bir dizi oluşturur Boyut Truthtable olarak adlandırılan üç, elemanları, yanlış doğru ve gerçek olan. Ve aslında, örnekleme Burada var sözdizimi yapıyor tam olarak aynı Aşağıda bireysel eleman sözdizimi. Kodlama Bu iki yolu olur aynı dizi üretir. Benzer şekilde, biz yineleme elementlerin tüm Bir döngü kullanarak bir dizi, içinde Aslında, bir çok kuvvetle önerilir evde egzersiz. Nasıl bir dizi oluşturmak do 100 tamsayılar, bir dizinin her öğesi olan endeks nedir? Yani, örneğin, biz 100 bir dizi var tamsayı ve birinci elemanı, Biz 0 koymak istiyorum. Ikinci eleman olarak, biz 1 koymak istiyorum. Üçüncü elemanı, biz istiyoruz 2 koymak; ve benzeri ve benzerleri. Bu gerçekten çok iyi evde egzersiz yapmak. Burada, bu görünmüyor gibi çok fazla değişti. Ama arasındaki fark köşeli parantezler, bu sefer, Aslında numarayı ihmal ettik. Eğer kullanıyorsanız ediyorsanız, bu çok özel örnekleme sözdizimi, bir oluşturmak için Dizi, aslında yok boyutunu belirtmek gerekir Dizinin önceden. Derleyici yeterince akıllı aslında size bilmek boyutu 3 bir dizi istiyorum Eğer üç unsuru koymak çünkü eşittir işaretinin sağındaki. Eğer dört koymuştu, o olurdu Size boyutu dört bir doğruluk tablosu verilen; ve benzeri ve benzerleri. Diziler tek sınırlı değildir oldukça serin boyut. Aslında birçok olabilir Yan belirteçleri istediğiniz gibi. Yani, örneğin, oluşturmak istediğiniz takdirde Oyun Battleship için tahta, Hiç oynanırsa, bir oyun 10 ızgara tarafından, 10 mandal ile oynanır, Eğer böyle bir dizi oluşturmak olabilir. Sen Bool söyleyebiliriz savaş köşeli parantez 10 Kapalı köşeli ayraç kare dirsek 10 köşeli ayraç kapattı. Ve sonra, seçebilirsiniz 10 olarak kafanızda bu yorumlamak Hücrelerin 10 ızgara ile. Şimdi, aslında, bellekte, gerçekten sadece does , 100 eleman kalır Tek boyutlu dizi. Ve bu, aslında, eğer gider üç boyutlu ya da dört ya da beş tane var. Gerçekten sadece çarpma yok indices-- tüm ya da boyutu her Birlikte specifiers--, ve sadece tek boyutlu olsun o boyutta bir dizi. Ama organizasyon anlamında ve görselleştirme ve insan algısı, çok daha kolay olabilir, bir ızgara ile çalışmak Eğer bir oyun üzerinde çalışıyorsanız Tic-tac-toe veya Battleship benzer, Ya da bunun gibi bir şey. Harika bir soyutlama olduğunu, Bunun yerine sahip Bir Tic-tac-toe düşünmek dokuz çizgi olarak tahta kareler veya Battleship kurulu 100 kareler çizgi olarak gösterilmiştir. 10 ızgara veya üç tarafından 10 üçe ızgara muhtemelen çok daha kolay algılamak. Şimdi, bir şey gerçekten diziler hakkında önemli. Biz, her bir tedavi edebilir bir değişken olarak dizinin elemanı. Biz daha önce gördük biz ne zaman atama yapıldı Belirli Booleans True değeri ya Koşullamalar onları test. Ama biz bütününü tedavi edemez değişkenler olarak kendilerini diziler. Bu, örneğin, bir dizi tayin edilemez atama kullanarak başka diziye Operatör. Yasal C. değil Biz example-- için, isterseniz neyi biz bu örnekte yapıyor olacak başka bir bir dizi kopyalamak olacaktır. Biz, aslında yapmak istiyorsanız kopyalamak için bir döngü kullanmak gerekir Aynı anda her bir elemanı, bir. Ben alıcı biraz zaman olduğunu biliyorum. Yani, örneğin, eğer bu çift vardı kod satırları, bu iş olur mu? Şey, hayır, bu doğru, değil mi? Biz çalışıyoruz, çünkü bar yiyecek atamak. Bu işe gitmiyor, bir dizi olduğu için, ve biz sadece tarif yasal C. olmadığını Bunun yerine, biz isterseniz Gıda içeriğini kopyalamak ne barda içine Biz burada yapmaya çalışıyoruz Böyle bir sözdizimi gerekir. Biz bir döngü için gider var J, 5 kadar, 0 eşittir ve biz her yineleme J artırmak döngü ve böyle atamak unsurlar. Bu aynı zamanda, çubuğu ile sonuçlanacaktır olan, bir, iki, üç, dört, beş, ama biz çok bunu yapmak zorunda Yavaş eleman-eleman yolu, yerine sadece tarafından Tüm dizi kopyalama. Diğer programlamada dil, daha modern olanlar, Eğer, aslında, sadece yapabilirsiniz Bu sözdizimi basit eşittir. Ama C, maalesef, biz konum Bunu yapmak için izin verilmez. Şimdi, diğeri var şey bahsetmek istiyorum diziler hakkında böyle biraz olabilir biraz zor ilk kez size onlarla çalışmak. Biz bir video tartışılan Değişken kapsamı hakkında, Bu çağrı C çoğu değişkenler, Onları fonksiyonları, değer geçirilir. Bunun ne anlama geldiğini hatırlıyor musun değeriyle şey geçmek? Biz bir kopyasını yapıyoruz demektir geçirilen ediliyor değişken. Aranan fonksiyonu, fonksiyon Bu, değişken alan var değişken kendisi almaz. Kendi yerel alır Bunun kopyası ile çalışmak. Diziler, tabii ki, do Bu kurala uymayan. Aksine, biz bu dediğimiz referans geçiyor. Aranan aslında dizi alırsınız yok. Bu almaz onun Bunun kendi yerel kopyası. Ve sen düşünmek eğer o, bu mantıklı. Diziler gerçekten büyükse, o çok zaman ve çaba gerektirir bir dizinin bir kopyasını yapmak 100 veya 1000 veya 10.000 elemanları, Bir için değmez olduğunu Bunun bir kopyasını almak için işlev, sonra onunla bazı işler yapmak ve Sadece kopya ile yapılabilir; o olması gerekmez artık etrafında asılı. Diziler Çünkü bazı hantal ve biçimsiz, Biz sadece referans onları geçmek. Biz sadece bu fonksiyonu güven bir şey kırmak değil için. Yani aslında dizi olsun. O kendi yerel kopyasını almaz. Peki bu ne anlama geliyor, Daha sonra, zaman Aranan Dizinin elemanlarını manipüle? Ne olur? Şimdilik, biz parlak olacak Neden tam olarak bu aşkın Neden diziler olur başvuruya göre iletilir ve her şey değeriyle geçirilir. Ama size söz veriyorum, biz olacak dönmek ve size cevap vermek Bir sonraki videoda bu. İşte size bir tane daha egzersiz Biz diziler şeyleri tamamlamayı önce. Burada kod demet işte değil özellikle iyi tarzı, Sadece bu ihtar yapacağız. Burada hiç yorum yok, hangi oldukça kötü şeklidir. Ama ben olmak istedim çünkü sadece var Ekrandaki her şeyi sığdırmak mümkün. Üst kısmında, ben görebiliyorum set dizisi için iki fonksiyon tanımlamaları ve int ayarlayın. Set dizisi görünüşte bir dizi alır girdi olarak dört tamsayılar. Ve set int görünüşte alır girdi olarak tek bir tam sayı. Fakat her ikisi de bir çıkış yok. Çıktı, dönüş Her biri geçersizdir bölgesinin yazın. Main, biz var bir kod satırları çift. Biz bir tamsayı değişken bildirmek A denilen ve o değeri 10 atayın. Biz dört tamsayı dizisi bildirmek B olarak adlandırılan ve elemanları 0, 1 atamak, Sırasıyla, 2 ve 3,. Sonra, biz ayarlamak için bir çağrı var int ve bir çağrı dizisi ayarlamak için. Set dizinin ve set tanımları int altta aşağı aşağıda belirtilmiştir. Ve böylece, yine, sana bir soru sorabilir. Ne çıktısı alır Burada Main sonunda? Bir çıktı col var. Ben iki tamsayı yazdırarak. Ben A'nın içeriğini yazdırmak çalışıyorum ve B köşeli ayraç 0 içerikleri. Burada Videoyu duraklatmak ve bir dakikanızı ayırın. Ne bu anlamaya Can fonksiyon sonunda yazdırılır? Umarım, hatırlarsan değerine göre geçen ayrımı ve referans olarak geçen bu Sorun sizin için çok zor değildi. Cevap ve yapacağınız bulduk budur. Sen gerçekten emin değilseniz, Bu durumda neden, bir saniyenizi ayırın Geri dönmek, ben sadece ne gözden diziler geçen tartışılması referans, geçen karşı değeriyle diğer değişkenlerin, ve umarım bu yapacağım Biraz daha mantıklı. Ben Doug Lloyd değilim ve bu CS50 olduğunu.