>> [Muzikos grojimo]
Doug LLOYD: Visos dešinę.
Darbas su vieno kintamieji yra gana įdomus.
Bet kas, jei mes norime dirbti su kintamųjų daug,
bet mes nenorime turėti krūva skirtingus pavadinimus plaukioja aplink mūsų kodą?
Šiuo atveju, matricos yra vyksta ateiti tikrai patogu.
Masyvai yra tikrai esminis duomenys struktūra bet programavimo kalba
kad jums naudoti.
Ir jie tikrai, tikrai naudinga, ypač, kaip matysime, CS 50.
>> Mes naudojame masyvus laikyti vertės pačiu duomenų tipą
ne gretimuose atminties vietų.
Tai yra, tai būdas, kad mes galime grupė
iš sveikųjų skaičių krūva kartu atminties arba simbolių krūva
arba plūdės atmintyje tikrai uždaryti kartu ir darbas
su jais nereikia duoti kiekvienas viena savo unikalų pavadinimą, kuris gali
gauti sudėtinga po truputį.
>> Dabar vienas būdas Analogizować masyvai yra galvoti apie savo vietiniame pašto
biuro sekundę.
Taigi žingsnį nuo programavimo ir tiesiog uždaryti savo akis
ir vizualizuoti savo mintis Jūsų vietiniame pašto skyriuje.
Paprastai daugumoje paštu biurai, yra didelis bankas
paštas dėžės ant sienos.
>> Masyvas yra milžiniškas blokas iš gretimos atminties,
tuo pačiu būdu, kad pašto bankas savo pašte
yra didelė erdvė ant siena pašte.
Masyvai buvo padalytas į mažas, identiškai dydžio blokai erdvėje,
kiekvienas iš kurių yra vadinamas elementas, visų taip pat, kad posto sienos
tarnyba buvo padalinta į mažas, identiškai dydžio blokai erdvėje,
kuri mes vadiname pašto Dėžutės.
Kiekvienas iš masyvo elementas gali laikyti tam tikrą kiekį duomenų,
kaip kiekviena pašto dėžutės gali surengti tikrą kiekį paštu.
>> Tai, kas gali būti saugomas kiekvieno elemento masyvas yra kintamieji tos pačios duomenų
tipas, pavyzdžiui, int ar char, tik kaip jūsų pašto dėžutės,
jūs galite tik tilptų dalykus panašaus tipo,
pavyzdžiui, raidės ar mažose pakuotėse.
Galiausiai, mes galime prieiti prie kiekvieno elemento masyvo tiesiogiai indekso numerį,
kaip mes galime prieiti prie mūsų pašte Dėžutė, žinant savo pašto dėžutės numerį.
Tikimės, kad analogija padeda jums gauti savo galvą
aplink masyvų idėją analogizing į ką nors kita
kad jūs tikriausiai jau susipažinę su.
>> C, iš masyvo elementai yra indeksavimo pradedant nuo 0, ne nuo 1.
Ir tai yra labai svarbu.
Ir iš tiesų, tai yra, kodėl mes, CS 50, Ir kodėl kompiuterių mokslininkai Dažnai
bus skaičiuojami nuo 0, tai nes C anketa masyvo
indeksavimas, kuris visada prasideda 0.
Taigi, jei masyvas susideda iš n elementų, pirmasis elementas tos masyvo
yra ne 0 indeksą, ir paskutinis elementas masyvo
yra ne rodiklis n minus 1.
Vėlgi, jei yra n elementų mūsų masyvas, paskutinis puslapis yra n atėmus 1.
>> Taigi, jei mūsų masyvas yra 50 elementai, su pirmasis elementas yra ne 0 indeksą,
ir paskutinis elementas yra ne 49 indekse.
Deja, arba, laimei, priklausomai nuo jūsų požiūriu,
C yra labai atlaidus čia.
Tai netrukdys jums vakarėliai ribų jūsų masyvo.
Jūs galite prieiti prie minuso 3 elementas jūsų masyvo
arba 59. elementas jūsų masyvas, Jei jūsų masyvas turi tik 50 elementų.
Jis nebus sustabdyti savo programą iš renkant, tačiau vykdymo metu,
jums gali susidurti baimės segmentavimo kaltės
jei pradėsite naudotis atminties kad yra už ką ribų
Jūs paprašė savo programą Jums.
Taigi, būkite atsargūs.
>> Ką masyvą deklaracija atrodo?
Kaip mes kodą masyvą į egzistavimą kaip mes koduoti bet kokį kitą kintamąjį?
Yra trys dalys į masyvą declaration-- tipą, vardas
ir dydis.
Tai labai panašus į kintamasis deklaracija, kurios
yra tik tipo ir pavardė, dydis elementas yra
specialus dėklas masyvą, nes mes gauti iš jų krūva
Tuo pačiu metu.
>> Taigi tipas yra kokios kintamajame jūs nori kiekvienas iš masyvo elementas turi būti.
Ar norite jį į sveikųjų skaičių masyvas?
Tada jūsų duomenų tipas turi būti int.
Ar norite, kad ji yra masyvas dvejetų ar plūdės?
Duomenų tipas turėtų būti dvigubai ar plūduriuoti.
Pavadinimas yra tai, ką norite skambinti savo masyvo.
Ką norite pavadinti šį milžiną bankas skaičiais ar plūdes ar simbolių
arba padvigubėja, ar kas jums?
Ką jūs norite jį pavadinti?
Gražūs savaime suprantama.
>> Galiausiai, dydis, kuris eina viduje laužtiniuose skliaustuose,
yra kiek elementai darytumėte kaip jūsų masyvas yra.
Kiek sveikieji skaičiai tu nori?
Kiek plūdės tu nori?
>> Taigi, pavyzdžiui, int studentų pažymius 40.
Ši deklaruoja masyvą vadinamas Studentų rūšių, kurią sudaro 40 skaičių.
Gražūs savaime suprantama, tikiuosi.
Štai dar vienas pavyzdys.
Dviviečiai meniu kainos 8.
Tai sukuria masyvą vadinamas Meniu kainos, kurią sudaro
kambario atmintyje aštuoni dviviečiai kambariai.
>> Jei manote, kad kiekvieno elemento kurio tipo duomenų tipo masyvą,
taigi, pavyzdžiui, vieno elementas AN tipo int masyvas, tokiu pačiu būdu
manyčiau, pagamintos iš bet kurių kintamasis tipas int,
visi pažįstami operacijos, kad mes aptarta anksčiau vykdymo
vaizdo įrašas bus prasminga.
Taigi čia mes galėtume paskelbti masyvą apie loginę vadinamų Truthtable,
kuris susideda iš kambario 10 loginę.
>> Ir tada, kaip mes galėtume tiesiog priskirti vertės į bet kurią kitą kintamojo tipo
Būlio, mes galime pasakyti kažką kaip Truthtable kvadratinį laikiklį
2, kuri yra, kaip mes rodo, kuris elementas tiesos lentelę?
Trečiasis elementas iš Tiesa stalo, nes atsimenu,
mes skaičiuojant nuo 0.
Štai kaip mes nurodyti Trečiasis elementas tiesos lentelę.
Truthtable 2 yra lygus klaidinga, kaip galėtume declare--
ar galėtume priskirti, o, bet Būlio tipo kintamasis būtų klaidinga.
>> Mes taip pat galime naudoti ją sąlygas.
if (truthtable 7 == teisinga), kuris yra,
jei aštuntą elementą iš Truthtable tiesa,
gal mes norime spausdinti pranešimą vartotojui, printf ("tiesa! n") ;.
Tai sukelia mums pasakyti Truthtable 10 lygu tiesa, tiesa?
Na, aš galiu, bet tai gana pavojinga, nes atsimenu,
mes turime 10 loginę matricą.
Taigi didžiausias rodiklis, kad kompiliatorius davė mums yra 9.
>> Ši programa bus rinkti, bet jei kažkas atmintyje
egzistuoja, jei mes būtume tikėtis Truthtable 10 eiti,
galėtume patirti segmentavimo kaltės. Mes gali išeiti su juo, bet apskritai,
gana pavojinga.
Taigi, ką aš darau čia yra juridinis C bet nebūtinai geriausias komandos.
Dabar, kai jūs deklaruoti ir inicijuoti masyvą vienu metu,
ten tikrai gana specialią sintaksę, kad jus
galite naudoti norėdami užpildyti masyvo su pradinių reikšmių.
Jis gali gauti sudėtinga paskelbti apie dydžio 100 masyvą,
ir tada pasakyti, elementas 0 lygi tai; elementas 1 lygu tai;
elementas 2 yra lygus tai.
Kas yra taškas, tiesa?
>> Jei tai mažas masyvas, galite galėtų padaryti kažką panašaus į tai.
Bool truthtable 3 yra lygus atviras garbanotas petnešomis ir tada kablelis
atskirti sąrašas elementų, kad jūs norite įdėti į masyvą.
Tada uždarykite garbanotas petnešomis kabliataškį.
Tai sukuria masyvo dydis trijų vadinamas Truthtable,
su elementais klaidinga, tiesa, ir tiesa.
Ir iš tiesų, momentinė sintaksė Turiu čia
lygiai taip pat daro individualus elementas sintaksė žemiau.
Šie du būdai kodavimo kas be gaminti tą patį masyvą.
>> Be to, mes galime pakartoti per visus elementus,
masyvo, naudojant kilpą, kuri, savo Tai yra labai primygtinai rekomenduojama
namuose mankšta.
Kaip jums sukurti masyvą 100 sveikieji skaičiai, kur
kiekvienas masyvo elementas yra jos indekso?
Taigi, pavyzdžiui, turime 100 masyvo sveikieji skaičiai, ir pirmojo elemento,
mes norime įdėti 0.
Antroje elemento, nori įdėti 1.
Trečioje elemento, mes nori įdėti 2; ir taip toliau, ir taip toliau.
Štai tikrai geras namuose pratimas tai padaryti.
>> Čia, tai ne atrodo kaip per daug pasikeitė.
Tačiau pastebėti, kad tarp skliaustus, šį kartą,
Aš iš tikrųjų praleisti numerį.
Jei naudojate šią labai ypatingą momentinė
Sintaksė sukurti masyvas, jūs iš tikrųjų nėra
reikia nurodyti dydį masyvo anksto.
Kompiliatorius yra pakankamai protingas, žinoti, kad jūs iš tikrųjų
nori, kad apie 3 dydžio masyvą, nes jūs įdėti trys elementai
į vienodo žymens dešinės.
Jei buvo įdėjęs keturi, ji turėtų davė jums tiesą lentelę dydžio keturių;
ir taip toliau, ir taip toliau.
>> Masyvai yra ne tik vienas matmuo, kuris yra gana kietas.
Jūs iš tikrųjų galite turėti daug šalutinis specifikacijas nustatantys, kaip jūs pageidaujate.
Taigi, pavyzdžiui, jei norite sukurti už žaidimą Šarvuotis taryba, kuri,
jei jūs kada nors grojo, yra žaidimas, kuris yra grojo su vinys apie 10 10 tinklelį,
galite sukurti panašaus masyvo.
Galima sakyti, bool Šarvuotis kvadratinių laikiklis 10
uždara keturkampė aikštė laikiklis laikiklis 10 uždarytas kvadratinių laikiklį.
>> Ir tada, jūs galite pasirinkti interpretuoti tai jūsų protas kaip 10
10 tinklelį ląstelių.
Dabar, iš tikrųjų, atmintyje, tai tikrai tik
lieka 100 elementas, vieno matmenų masyvo.
Ir tai, tiesą sakant, eina, jei jums turi tris matmenis arba keturis ar penkis.
Tai tikrai nėra tik daugintis visi indices--
arba visi dydžio specifiers-- kartu,
ir jūs tiesiog gauti vienmatis masyvas tokio dydžio.
>> Tačiau kalbant apie organizaciją ir vizualizacija ir žmogaus suvokimas,
ji gali būti daug lengviau dirbti su tinkleliu
jei dirbate žaidimą kaip Kryžiukai-nuliukai ar Battleship
ar kažkas panašaus.
Tai puiki abstrakcija, vietoj to,
galvoti apie Kryžiukai-nuliukai Board kaip devynių linija
kvadratų arba Šarvuotis lenta kaip 100 kvadratų linija.
Iš 10 10 tinklelį ar trijų trys tinklelis yra turbūt
daug lengviau suvokti.
>> Dabar kažkas tikrai Svarbu apie matricas.
Mes galime gydyti kiekvienas individas elementas masyvo, kaip kintamojo.
Mes matėme, kad anksčiau kai mes buvome paskirti
vertė Tiesa tam tikrų loginę arba juos išbandyti sąlyginių.
Bet mes negalime gydyti visą Masyvai save kaip kintamųjų.
Mes negalime, pavyzdžiui, priskirti viena matrica į kitą masyvo, naudojant priskyrimą
operatorius.
Tai ne teisinė C.
>> Jei norime, už ką example-- mes būtų daryti toje pavyzdžiui
būtų nukopijuoti viena matrica į kitą.
Jei mes norime padaryti, kad mes iš tikrųjų reikia naudoti kilpą kopijuoti per
kiekviena atskira elementas vienu metu.
Žinau, kad tai šiek tiek laiko.
>> Taigi, pavyzdžiui, jei mes turėjome šias pora kodo eilučių, ar tai veikia?
Na, ne, tai ne, tiesa?
Kadangi mes bandome priskirti maisto bare.
Štai nesiruošia dirbti, nes tai masyvas,
ir mes ką tik aprašytos kad ne teisinė C.
>> Vietoj to, jei norime kopijuoti maisto turinį
į barą, o tai, ką mes bandome padaryti čia
mums reikia kaip šis sintaksė.
Mes turime už kilpos, kad eina iš J yra lygus 0 iki 5,
ir mes prieaugio J ant kiekvieno pakartojimo kilpa ir priskirti elementai, pavyzdžiui, kad.
Tai lemtų juostoje taip pat yra vienas, du, tris, keturis, penkis,
bet mes turime tai padaryti, tai labai lėtas elementas po elemento būdas,
vietoj tiesiog Kopijuojant visą masyvo.
Be kitų programavimo kalbos, daugiau moderniausių,
galite, iš tikrųjų, tai tik kad paprastas lygus sintaksė.
Tačiau, C, deja, mes neleidžiama daryti.
>> Dabar ten vienas kitas dalykas, kurį noriu paminėti
apie matricas, kad gali būti šiek tiek tiek sudėtinga pirmą kartą
dirbti su jais.
Aptarėme video apie kintamos apimties,
kad dauguma kintamieji C, kai skambinate juos funkcijų, yra perduodama pagal vertę.
Ar pamenate, ką tai reiškia praeiti kažką pagal vertę?
Tai reiškia, kad mes darome yra kopijos kintamasis, kuris manimi buvo priimtas.
Callee funkcija, funkcija kad priimantieji kintamąjį,
negauna pati kintamąjį.
Ji gauna savo vietos jo kopija dirbti.
>> Masyvai, žinoma, daryti ne laikytis šios taisyklės.
Atvirkščiai, tai, ką mes vadiname bėga nuoroda.
Callee tikrųjų ar gauti masyvo.
Jis negauna jos savo vietos kopija.
Ir jei jūs manote apie , tai jis turi prasmę.
Jei matricos yra tikrai didelis, tai trunka taip daug laiko ir pastangų
padaryti kurio masyvo kopiją 100 arba 1000 arba 10000 elementus,
kad tai nėra verta dėl funkcionuoti gauti jo kopiją,
padaryti tam tikrą darbą su juo, ir tada tiesiog būti daroma su kopiją;
ji nėra, reikia turėti ji kabinti aplink nebėra.
>> Kadangi matricos yra kai nepatogūs ir sudėtinga,
mes tiesiog perduoti juos nuorodą.
Mes tiesiog pasitikite šią funkciją kad, neatlieka nieko.
Taigi ji iš tikrųjų gauti masyvo.
Jis neturi gauti savo vietinį kopiją juo.
>> Taigi, ką tai reiškia, tada, kai callee
manipuliuoja elementus iš masyvo?
Kas atsitinka?
Nes dabar, mes blizgesio daugiau, kodėl būtent ši
atsitinka, tai kodėl masyvai yra priimtas prejudicinį sprendimą
ir visa kita yra perduodama pagal vertę.
Bet aš jums pažadu, mes grįžti ir duoti jums atsakymą
tai vėlesniame vaizdo.
>> Štai dar vienas pratimas jums kol mes susivynioti dalykų matricos.
Iš kodą, krūva, tai ne itin geras būdas,
tiesiog aš padaryti, kad įspėjimu.
Yra Nėra komentarų čia, kuri yra gana bloga forma.
Bet tai tik todėl, kad norėjau būti galima pritaikyti viską ekrane.
>> Viršuje, jūs galite pamatyti, kad aš turiu Dviejų funkcijų deklaracijos rinkinio masyvo
ir nustatyti int.
Nustatyti masyvas, matyt, užima masyvą keturi sveikieji skaičiai, kaip savo indėlį.
Ir nustatyti INT matyt trunka vienas sveikasis skaičius, kaip savo indėlį.
Bet juos abu neturi išvestį.
Išėjimo, grąžinimo tipo, kiekvieno iš klaidinga.
Be Main, mes turime pora eilučių kodo.
Mes pareiškiame kintamąjį vadinamas ir priskirti jai vertę 10.
Mes paskelbti keturi sveikieji skaičiai masyvo vadinamas B ir priskirti elementus 0, 1,
2 ir 3, atitinkamai.
Tada mes turime skambinti nustatyti int ir kvietimas nustatyti masyvo.
Seto masyvo ir nustatyti apibrėžimai tarpinis junginys yra žemyn žemiau, apačioje.
>> Ir taip, ir vėl, prašau į klausimą.
Kas gauna neišspausdino čia ne į pagrindinių pabaigos?
Yra spaudinys sp. Aš spausdinti du sveikieji skaičiai.
Aš spausdinti su A turinį ir iš B kvadratinį laikiklį 0 turinį.
Pristabdyti vaizdo įrašą čia ir užtrukti keletą minučių.
Ar jums išsiaiškinti, kas tai funkcija bus atspausdinti pabaigoje?
Tikimės, jei prisimenate skirtumo tarp kitko pagal vertę
ir pakeleivingi nuoroda, tai Problema buvo ne per sudėtinga jums.
Ir atsakymas jums būtų nustatėme, yra tai.
Jei nesate tikras, kaip į kodėl tai toks atvejis, imtis antra,
grįžti, peržiūrėti, ką aš buvo tiesiog aptarti dėl artimųjų masyvai
nurodant, palyginti su artimųjų kiti kintamieji pagal vertę,
ir tikiuosi, jis bus padaryti šiek tiek daugiau prasmės.
>> Aš Doug Lloyd, ir tai yra CS50.