[MUSIC PLAYING] DOUG LLOYD: Bütün hüququ. Bir İş dəyişənlər olduqca eğlenceli. Lakin biz istəyiriksə iş dəyişənlərin bir çox, lakin biz bir dəstə istəmirəm bizim kodu ətrafında müxtəlif adlar uçan? Bu halda, seriallarda var həqiqətən lazımlı gəlib gedir. Diziler həqiqətən fundamental məlumatlar hər hansı bir proqramlaşdırma dili üçün strukturu istifadə edəcək. Onlar, həqiqətən, həqiqətən faydalı istəyirik xüsusilə, biz CS 50, görəcəksiniz kimi. Biz keçirmək Diziler istifadə Eyni data növü dəyərləri bitişik yaddaş yerlərdə. Ki, bir var, demək deyil Yolumuz qrup bilər birlikdə integers bir dəstə yaddaş və ya simvol bir dəstə və ya, həqiqətən yaddaş üzüb gedirdi birlikdə bağlamaq və iş onlarla hər vermək olmadan biri öz unikal adı, bilərsiniz Bir az sonra çətin almaq. İndi, bir yol serialların analogize üçün Yerli post haqqında düşünmək üçün ikinci ofis. Belə ki, proqramlaşdırma uzaq addım və yalnız sizin gözlərinizi bağlayın və nəzərə görüntüləmək Yerli poçt şöbəsi. Adətən, ən post ofislər, böyük bir bank var divar bir Post Office qutuları. Bir sıra nəhəng blok edir bitişik yaddaş, poçt ki, eyni şəkildə Sizin post ofisində bank böyük kosmik edir poçt şöbəsinin divar. Diziler, kiçik parçalanmış edilmişdir eyni yer ölçülü blokları, olan hər bir element adlanır Eyni şəkildə post divar ki, katibə, balaca daxil parçalanmış edilmişdir eyni yer ölçülü blokları, Hansı bir PO qutusu çağırırıq. Serialın hər element bilər məlumatların müəyyən saxlamaq hər Post Office qutusu edə kimi poçt müəyyən bir keçiriləcək. Hər bir element saxlanıla bilər nə array eyni data dəyişənlərin edir Belə ki, yalnız int və ya char kimi növü, Sizin poçt şöbəsi qutusuna kimi, Yalnız şeyi uyğun oxşar tipli, Belə məktublar və ya kiçik paketləri kimi. Nəhayət, biz hər element əldə edə bilərsiniz birbaşa index sayı array, Biz poçt daxil ola bilərsiniz kimi Onun poçt qutusu sayı bilmədən qutusu. İnşallah bundan bənzətməsi Siz baş almaq kömək edir Diziler ideyası ətrafında başqa bir şey analogizing Siz yəqin ki, var ki, ilə artıq tanış. C, bir sıra elementləri 1-dən deyil, 0-dan başlayaraq dizine. Və bu, həqiqətən vacibdir. Niyə biz Və əslində, bu, CS 50, tez-tez və nə kompüter elm 0-dan saymaq edir çünki C serialın həmişə 0 başlayır endeksleme. Bir sıra n elementdən ibarətdir Belə ki, ki, serialın ilk element , kataloq 0 yerləşir və serialın son element index n minus 1 yerləşir. Yenə N elementləri var, əgər bizim array, son index n minus 1. Belə ki, bizim array 50 elementlər var, əgər ilk element, index 0 yerləşən və son element indeksi 49 yerləşir. Təəssüf ki, ya xoşbəxtlikdən, perspektiv asılı olaraq, C burada çox yumşaq edir. Bu mane olmayacaq Sizin array hüdudlarından kənarda gedir. Siz minus daxil ola bilər Sizin serialın 3 element ya serialın 59-cu element, Sizin array yalnız 50 elementlər var. Bu sizin proqram dayandırmaq olmaz tərtib, lakin run zamanda, Bir qarşılaşa bilər dreaded seqmentasiya günah yaddaş daxil olmaq üçün başlamaq əgər ki, nə hüdudlarından kənarda Siz vermək üçün proqram istədi. Belə ki, ehtiyatlı olun. Nə bir sıra edir bəyannamə kimi görünür? Biz mövcud bir sıra kod necə kimi biz hər hansı digər dəyişən kod? Üç hissədən bir sıra var növü declaration--, bir adı, və ölçüsü. Bu çox oxşardır dəyişən bəyannamə olan yalnız bir növü və adı, olan ölçüsü element bir sıra xüsusi halda, biz onlara bir dəstə əldə çünki eyni vaxtda. Belə növü dəyişən nə cür siz serialın hər element olmaq istəyirəm. Integers bir sıra üçün istəyirsiniz? Daha sonra, data type int olmalıdır. Siz bir olmaq istəyirsiniz ikiqat və ya üzüb gedirdi array? Data növü ikiqat və ya float olmalıdır. adı nədir siz Sizin array səslənmək istəyirəm. Bu nəhəng ad nə istəyirsiniz integers və ya üzüb gedirdi və ya chars bank və ya iki, və ya hər hansı var? Nə zəng etmək istəyirsiniz? Pretty özünü izahlı. Gedir Nəhayət, ölçüsü, kvadrat mötərizədə daxilində, neçə elementləri ki Sizin array olan kimi. Necə bir çox integers istəyirsiniz? Necə bir çox üzüb gedirdi istəyirsiniz? Belə ki, məsələn, tələbə siniflər 40 int. Bu Student adlı bir sıra bəyan 40 integers ibarətdir notları. Pretty özünü izahlı inşallah. Burada başqa bir misal var. Double menyu qiymətləri 8. Bu adlı bir sıra yaradır Ibarət olan menyu qiymətləri, səkkiz ikiqat üçün yaddaş otaq. Hər element hesab edirəm ki, type data tipli bir sıra, belə, məsələn, bir element növü int bir sıra, eyni şəkildə sizə hər hansı digər hesab edirəm ki, növü int dəyişən, bütün tanış əməliyyatları biz ki, Əməliyyatlar əvvəllər müzakirə video mənada edəcək. Odur ki, biz bir sıra bəyan edə bilər Truthtable adlı Booleans, olan 10 Booleans üçün otaq ibarətdir. Və sonra, yalnız biz yalnız təyin edə bilər kimi tipli hər hansı digər dəyişən dəyəri Boolean, biz bir şey deyə bilər Truthtable kvadrat mötərizə kimi Biz göstərir necə 2, olan həqiqət masa element? üçüncü element həqiqət masa, xatırlayıram çünki, biz 0-dan hesablanması edirik. Belə ki, biz göstərir necə həqiqət masa üçüncü element. Truthtable 2, yalan bərabərdir yalnız biz declare-- bilər kimi və ya hər hansı bir, daha doğrusu, təyin edə bilər Boolean tipli dəyişən saxta olması. Biz də şəraitində istifadə edə bilərsiniz. (truthtable 7 == əgər demək doğru) səkkizinci element əgər Truthtable ki, doğrudur bəlkə biz bir mesaj çap istəyirəm istifadəçi printf ("TRUE! n") üçün ;. Ki Truthtable demək bizi səbəb olur 10 doğru, doğru bərabərdir? Bəli, Mən, lakin bu, olduqca var təhlükəli, çünki, xatırlayıram 10 Booleans bir sıra var. Belə ki, ən yüksək göstəricidir ki, compiler bizə 9 verib. Bu proqram tərtib, lakin əgər yaddaş başqa bir şey harada, biz mövcud Truthtable 10 getmək üçün gözləmək, bir seqmentasiya günah əziyyət bilər. Biz ilə üz əldə edə bilər, lakin, ümumiyyətlə, olduqca təhlükəlidir. Belə ki, nə mən burada edirəm hüquqi C, lakin mütləq yaxşı hərəkət. İndi, elan zaman eyni zamanda bir sıra başlamaq, həqiqətən olduqca var xüsusi syntax ki, array doldurmaq üçün istifadə edə bilərsiniz onun başlanğıc dəyərləri ilə. Bu çətin əldə edə bilərsiniz , ölçüsü 100 bir sıra bəyan və sonra demək lazımdır, element 0 Bu bərabərdir; element 1 Bu bərabərdir; element 2. bərabərdir. Sağ, point nədir? Bir kiçik array varsa, siz bu kimi bir şey edə bilər. Bool truthtable 3 açıq bərabərdir buruq brace və sonra vergül elementlərin siyahısını ayrı-ayrı Siz array qoymaq istəyirəm. Sonra buruq brace nöqtəli vergül bağlayın. Bu bir sıra yaradır size Truthtable adlı üç, elementləri, yalan doğru və həqiqi ilə. Və əslində, Destekleme Mən burada var sintaksis bunu kimi tam eyni aşağıdakı fərdi element syntax. Kodlaşdırma bu iki yol olardı eyni sıra istehsal edir. Eynilə, biz təkrarlamaq bilər elementləri bütün bir loop istifadə bir sıra, ildə Əslində bir çox güclü tövsiyə at-ev həyata. Necə bir sıra yaratmaq edirsiniz 100 integers, bir serialın hər element öz index edir? Belə ki, məsələn, biz 100 array var integers və ilk element, biz 0 qoymaq istəyirik. İkinci element, biz 1 qoymaq istəyirik. Üçüncü element, biz istəyirik 2 qoymaq; və s və s. Bu, həqiqətən yaxşı at-ev həyata bunu. Burada baxmaq deyil kimi çox dəyişib. Amma arasında da fark kvadrat mötərizədə, bu dəfə, Mən, həqiqətən, sayı çıxarılmışdır etdik. Istifadə edirsinizsə bu çox xüsusi Destekleme syntax bir yaratmaq array, həqiqətən deyil ölçüsü göstərmək lazımdır serialın əvvəlcədən. compiler kifayət qədər ağıllı deyil həqiqətən, sizin ki, bilmək , ölçüsü 3 bir sıra istəyirəm üç elementləri qoymaq çünki bərabər işarəsi sağ üçün. Siz dörd qoyduğu, bu, olardı Siz ölçüsü dörd bir həqiqət masa verilir; və s və s. Diziler bir məhdud deyil olduqca sərin ölçüsü. Siz, həqiqətən, kimi bir çox ola bilər yan specifiers istədiyiniz kimi. Belə ki, məsələn, siz yaratmaq istəyirsinizsə, Oyun Battleship bir board, Əgər ifa əgər, bir oyun 10 grid ilə 10 dirək ilə oynanan Bu kimi bir sıra yarada bilər. Siz Bool deyə bilər battleship kvadrat mötərizə 10 qapalı kvadrat mötərizə kvadrat bracket 10 kvadrat bracket bağlanıb. Və sonra, siz seçə bilərsiniz 10 kimi mind bu şərh hüceyrələri 10 grid tərəfindən. İndi, əslində, yaddaş, Bu, həqiqətən, yalnız yoxdur 100 element qalır bir ölçülü array. Və bu, əslində, əgər gedir üç ölçüləri və ya dörd və ya beş var. Bu, həqiqətən, yalnız çoxaltmaq deyil indices-- bütün və ya ölçüsü bütün birlikdə specifiers--, və yalnız bir-ölçülü almaq ki, ölçüsü array. Lakin təşkilat baxımından və vizual və insan qavrayış, bir çox asan ola bilər bir grid ilə işləmək üçün Bir oyun çalışırıq əgər Tic-tac-barmaq və ya Battleship kimi, ya kimi bir şey. Bu, böyük bir abstraksiya var, əvəzinə olan bir Tic-tac-barmaq haqqında düşünmək doqquz bir xətt kimi board meydanların və ya Battleship board 100 meydanların bir xətt kimi. 10 grid və ya üç ilə 10 üç grid yəqin ki, bir çox daha asan dərk etmək. İndi, bir şey həqiqətən Diziler haqqında əhəmiyyətli. Biz hər bir fərdi müalicə edə bilər bir dəyişən kimi serialın element. Biz ki, əvvəllər gördüm biz təyin edildi müəyyən Booleans True dəyər və ya conditionals onları test. Amma biz bütün müalicə edə bilməz dəyişənlərin özlərini Diziler. Biz, məsələn, bir sıra təyin edə bilməz tapşırıq istifadə bir sıra operator. Hüquqi C. deyil Biz misal üçün, istəyirsinizsə nə ki, nümunə bunu olunacaq birinə array surəti olardı. Biz ki, biz, həqiqətən, etmək istəyirsinizsə üzərində surəti bir loop istifadə etmək lazımdır bir zamanda hər bir fərdi element biridir. Mən aparan bir az vaxt bilirik. Belə ki, məsələn, əgər biz bu neçə idi kodu xətləri, bu iş olardı? Yaxşı, heç bir, sağ deyil ki? Biz çalışırıq, çünki bar ərzaq təyin etmək. Bu işə niyyətində deyil, Bu bir sıra var, çünki, və biz yalnız təsvir hüquqi C. deyil ki, Əksinə, biz istəyirsinizsə Qida məzmunu surəti nədir bar, daxil biz burada nə çalışdığınız Biz bu kimi bir sintaksis lazımdır. Biz loop üçün gedir J, 5-ə qədər 0 bərabərdir və biz hər iteration J arttırmayı loop və bu kimi təyin elementləri. Bu da bar ilə nəticələnəcək olan bir, iki, üç, dörd, beş, lakin biz çox bunu var yavaş element-by-element yol əvəzinə yalnız ilə bütün array çıxarmaq. Digər proqramlaşdırma dil, daha müasir olanları, Siz, əslində, yalnız edə bilərsiniz ki, sintaksis sadə bərabərdir. Lakin C, təəssüf ki, biz istəyirik bunu icazə verilmir. İndi, digər bir var şey qeyd etmək istəyirəm Diziler haqqında bir az ola bilər az çətin ilk dəfə onlarla işləmək. Biz video müzakirə dəyişən daxilində, ki, zəng C ən dəyişənlər, Onlara funksiyaları, dəyəri qəbul olunur. Siz nə deməkdir yadınızdadırmı dəyəri bir şey keçmək? Bu surətini edirik deməkdir qəbul olunur dəyişən. callee funksiyası funksiyası ki, dəyişən qəbul edir dəyişən özü almaq deyil. O, öz yerli alır bu surəti ilə işləmək üçün. Diziler, əlbəttə, bunu Bu qayda əməl. Əksinə, biz bu dediyimiz istinad keçir. callee həqiqətən array alır. Bu almaq deyil onun Bunun öz yerli surəti. Və barədə düşünmək , bu mənada edir. Diziler həqiqətən böyük varsa, çox vaxt və səy tələb edir bir sıra surəti etmək 100 və ya 1000 və ya 10,000 elementləri, bir üçün dəyər deyil ki, bir kopyasını almaq üçün fəaliyyət, sonra bəzi iş və yalnız surəti ilə edilə; Bu lazımdır deyil artıq ətrafında asma. Diziler Çünki bəzi böyük və çətin, biz yalnız istinad onları keçir. Biz yalnız funksiyası etibar bir şey qırmaq deyil üçün. Belə ki, həqiqətən array almaq deyil. Bu, öz yerli surəti almaq deyil. Belə ki, bu nə deməkdir, sonra zaman callee array elementləri manipulates? Nə baş verir? İndi, biz parıltı lazımdır niyə məhz bu artıq niyə serialların baş verir arayış qəbul edilir və başqa hər şey dəyəri ilə qəbul edilir. Amma sizə söz verirəm, biz qayıtmaq və sizə cavab vermək daha sonra video bu. Burada sizin üçün daha bir həyata var biz Diziler şeyi bükmək əvvəl. burada kodu dəstə ki Biz xüsusilə yaxşı style, yalnız mən ki, xəbərdarlıq etmək lazımdır. Burada şərh var, olan olduqca pis formasıdır. Amma bu mən olmaq istəyirdi, çünki yalnız var ekranda hər şey uyğun edə. Üst, mən ki, görə bilərsiniz set array üçün iki funksiyası bəyannamələrin və int seçin. Set array yəqin bir sıra edir onun giriş kimi dörd integers. Və set int yəqin edir onun giriş kimi bir tam. Lakin onların hər ikisi bir çıxış yoxdur. çıxış, qaytarılması hər bir etibarsız edir, yazın. Main, biz bir kodu xətləri neçə. Biz tam dəyişən elan A adlanır və bu dəyəri 10 tapşırılsın. Biz dörd integers bir sıra elan B adlanır və elementləri 0, 1 təyin, Müvafiq olaraq 2 və 3. Sonra biz təyin etmək üçün bir zəng int və zəng array təyin etmək üçün. set array və dəsti anlayışlar int altındakı aşağı aşağıdır. Belə ki, yenə, mən sizə sual. Nə çap olur Burada əsas sonunda? Bir printout col var. Mən iki tam çap. Mən A məzmunu çap alıram və B kvadrat mötərizə 0 məzmunu. Burada video fasilə və bir dəqiqə. Siz nə bu həyata rəqəm edə bilərəmmi funksiyası sonunda çap edəcək? Ümid edirəm ki, siz geri əgər dəyəri keçən arasında fərq və istinad keçən, bu problem sizin üçün çox çətin idi. Cavab və siz ki gördük bu. Siz kimi həqiqətən əmin değilseniz Ki, işin görə, ikinci almaq geri, Mən yalnız nə nəzərdən Diziler keçən haqqında müzakirə istinadən, keçən qarşı dəyəri digər dəyişənlərin, və ümid edirəm ki, bu, etmək lazımdır bir az daha mənada. Mən Doug Lloyd oldum və bu CS50 edir.