>> [Musiikkia]
DOUG Lloyd: Selvä.
Työskentely yhden muuttujat on aika hauskaa.
Mutta mitä jos haluamme työskennellä jossa on paljon muuttujia,
mutta emme halua olla nippu eri nimiä lentelee meidän koodi?
Tässä tapauksessa taulukot ovat tulossa todella kätevä.
Taulukot ovat todella perustavanlaatuinen tiedot rakenne tahansa ohjelmointikielellä
jota käytät.
Ja he todella, todella hyödyllinen, varsinkin, kun näemme, CS 50.
>> Käytämme taulukot pitää arvot samaa tietotyyppiä
klo vierekkäisiä muistipaikkaa.
Toisin sanoen, se on tapa, jolla voimme ryhmä
joukko kokonaislukujen yhdessä muistiin tai joukko merkkejä
tai kelluu muistiin todella lähekkäin ja työ
niitä ilman antaa jokaiselle yksi oma yksilöllinen nimi, joka voi
saada hankalia hetken kuluttua.
>> Nyt, yksi tapa analogize paneelit on mieti paikallisen postin
toimisto toista.
Joten askel poispäin ohjelmointi ja sulje silmäsi
ja visualisoi mielessäsi paikallisesta postista.
Yleensä useimmissa post toimistot, siellä suuri pankki
postilokerot seinälle.
>> Array on jättiläinen lohko yhtenäistä muistia,
samalla tavalla kuin posti pankki omassa postissa
on suuri tilaa seinä posti.
Taulukot on jaettu pieniin, identtisesti kokoisia lohkoja tilaa,
joista kukin on kutsutaan elementtiä Samalla tavoin, että seinämä kentältä
toimisto on osioitu pieniksi, identtisesti kokoisia lohkoja tilaa,
jota kutsumme postilokero.
Jokainen alkio voi tallentaa tietty määrä tietoa,
aivan kuten jokainen posti laatikko pystyy pitää tietty määrä postia.
>> Mitä voidaan tallentaa jokaisen elementin matriisi on muuttujat samat tiedot
tyyppi, kuten int tai char, vain kuten omassa posti laatikko,
voit vain sovi asioita Samantyyppisiä,
kuten kirjaimia tai pienissä pakkauksissa.
Lopuksi voimme käyttää jokaisen elementin array suoraan indeksin numero,
aivan kuten voimme käyttää myös posti box tuntemalla sen postilaatikon numero.
Toivottavasti että analogisesti auttaa saat päätäsi
noin ajatus matriisia analogizing jotain muuta
että olet todennäköisesti jo tuttu.
>> C, elementit jono ovat indeksoitu alkaen 0, ei 1.
Ja tämä on todella tärkeää.
Ja itse asiassa tästä syystä me, CS 50, ja miksi tietotekniikan tutkijoita usein
laskee 0, on koska C: n array
indeksointi, joka aina alkaa 0.
Joten jos joukko koostuu n elementtejä, ensimmäinen osa, joka array
sijaitsee indeksi 0, ja viimeinen osa array
sijaitsee indeksi n miinus 1.
Jälleen, jos on n alkiota meidän array, viimeinen indeksi on n miinus 1.
>> Joten jos meidän joukko on 50 elementtejä, ensimmäinen elementti sijaitsee indeksi 0,
ja viimeinen osa sijaitsee indeksi 49.
Valitettavasti tai onneksi riippuen näkökulmasta,
C on hyvin lievä täällä.
Se ei estä sinua menee out of bounds oman array.
Voisit miinus 3 osa sinun array
tai 59. osa sinun array, jos joukko on vain 50 elementtejä.
Se ei lopeta ohjelmaa kokoamiseen, mutta suorituksen aikana,
saatat kohdata pelätty segmentointi vika
jos alkaa käyttää muistia että on rajojen ulkopuolella, mitä
pyysit ohjelma antaa sinulle.
Joten älä ole varovainen.
>> Mitä array ilmoitus näyttää?
Miten koodata array olemassaoloon kuten me koodata muitakin muuttujia?
On kolme osaa array declaration-- tyyppi, nimi,
ja koko.
Tämä on hyvin samankaltainen muuttuja ilmoitus, joka
on vain tyyppi ja nimi, koko elementti on
erikoistapaus varten array, koska saamme nippu niitä
samaan aikaan.
>> Joten tyyppi on, millaista muuttuja haluavat jokainen osa array olla.
Halua sen joukko kokonaislukuja?
Sitten tietosi, olisi oltava int.
Haluatko sen olevan joukko tupla tai kelluu?
Tietotyyppi pitäisi olla kaksinkertainen tai kellua.
Nimi on mitä haluavat soittaa array.
Mitä haluat nimetä tämän jättiläinen pankki kokonaislukujen tai kellukkeet tai merkkiä
tai kahden, tai mitä olet?
Mitä haluat soittaa sitä?
Melko itsestään selvä.
>> Lopuksi, koko, joka menee sisällä hakasulkeissa,
on kuinka monta elementtiä olisit kuten teidän array sisältää.
Kuinka monta kokonaislukua haluat?
Kuinka monta kellukkeet haluat?
>> Niinpä esimerkiksi, int opiskelija laadut 40.
Tämä ilmoittaa array nimeltään Student laadut, joka koostuu 40 kokonaislukuja.
Melko itsestään selvä, toivottavasti.
Tässä toinen esimerkki.
Kaksinkertainen valikko hinnat 8.
Tämä luo array nimeltään Valikko hintoja, joka koostuu
tilaa muistiin kahdeksan kaksinkertaistuu.
>> Jos luulet jokaisen elementin on joukko tyyppi tietojen tyyppi,
niin esimerkiksi yksittäinen elementti joukko int, samalla tavalla kuin
ajattelisi muuta muuttuja tyyppiä int,
kaikki tutut toiminnot että me keskusteltu aiemmin Operations
video on järkeä.
Joten tässä, voisimme julistaa array on Booleans kutsutaan Truthtable,
joka koostuu tilaa 10 Booleans.
>> Ja sitten, aivan kuten me voisi vain antaa arvo muihin tyyppisenä muuttujana
Boolean, voisimme sanoa jotain kuten Truthtable hakasulje
2, joka on, miten me osoittavat, joka elementti totuustaulukon?
Kolmas elementti totuustaulu, koska muistan,
olemme laskien 0.
Niin, että miten me osoittavat kolmas elementti totuustaulu.
Truthtable 2 tuloksena vääriä, aivan kuten voisimme declare--
tai voimme luovuttaa, vaan kaikki Boolean tyyppi muuttuja vääriksi.
>> Voimme myös käyttää sitä olosuhteissa.
jos (truthtable 7 == tosi), joka on sanoa,
jos kahdeksas elementti on Truthtable on totta,
ehkä me haluat tulostaa viestin käyttäjälle, printf ("totta! n") ;.
Jotka antaisivat aiheen sanoa Truthtable 10 vastaa totta, eikö?
No, voin, mutta se on melko vaarallista, koska muistan,
meillä on joukko 10 Booleans.
Joten korkein indeksi kääntäjä on antanut meille on 9.
>> Tämä ohjelma kokoaa, mutta jos jotain muuta muistiin
olemassa, kun olisimme odottaa Truthtable 10 mennä,
voisimme kärsiä segmentointi vika. Me voi koira veräjästä, mutta yleensä,
melko vaarallinen.
Joten mitä teen täällä on laillinen C, mutta ei välttämättä parhaan tilanteen.
Nyt, kun julistaa ja alustaa array samanaikaisesti,
siellä oikeastaan ​​aika syntaksinsa että olet
voi käyttää tankata array sen lähtöarvot.
Se voi saada hankala julistaa joukko koko 100,
ja sitten täytyy sanoa, elementti 0 vastaa tämä; elementti 1 vastaa tämän;
elementti 2 on sama kuin.
Mitä järkeä, eikö?
>> Jos se on pieni joukko, sinua voisi tehdä jotain tällaista.
Bool truthtable 3 vastaa auki kihara ahdin ja sitten pilkku
erillinen luettelo elementtien että haluat laittaa array.
Sulje sitten kihara ahdin puolipiste.
Tämä luo erilaisia koko kolme kutsutaan Truthtable,
elementtejä väärä, totta, ja totta.
Ja itse asiassa, instantiation syntaksi Minulla on tässä
täsmälleen sama kuin tekee yksittäinen elementti syntaksi alla.
Nämä kaksi tapaa koodaus olisi tuottaa täsmälleen sama joukko.
>> Samoin voisimme kerrata yli kaikki elementit
array käyttäen silmukan, mikä Itse asiassa on erittäin suositeltavaa
at-home liikuntaa.
Miten luoda array 100 kokonaislukuja, jossa
jokainen alkio on sen indeksi?
Niinpä esimerkiksi, meillä on joukko 100 kokonaislukuja ja ensimmäinen elementti,
haluamme laittaa 0.
Toisessa elementti, haluamme laittaa 1.
Kolmannessa elementti, haluamme laittaa 2; ja niin edelleen ja niin edelleen.
Se on todella hyvä at-home liikuntaa tehdä.
>> Täällä, se ei näytä kuten liian paljon on muuttunut.
Mutta huomaa, että väliin hakasulkeita, tällä kertaa,
Olen itse pois numero.
Jos käytät tätä erittäin erityinen instanssien
syntaksi luoda array, te itse ei
täytyy ilmoittaa koko array etukäteen.
Kääntäjä on fiksu tietää, että olet itse
haluavat taulukon koko 3, koska laitat kolme tekijää
oikealla yhtäläisyysmerkki.
Jos olisit laittaa neljä, se olisi antanut sinulle totuuden taulukko koko neljä;
ja niin edelleen ja niin edelleen.
>> Paneelit eivät rajoitu yhteen ulottuvuus, joka on aika siistiä.
Voit itse olla niin monta puoli suunnittelijat kuin haluat.
Niinpä esimerkiksi, jos haluat luoda aluksella peli Battleship, joka,
Jos olet koskaan pelannut, on peli, joka on pelataan tapit 10 10 verkkoon,
voit luoda erilaisia ​​näin.
Voisi sanoa Bool taistelulaiva hakasulku 10
suljettu hakasulje neliö kiinnike 10 suljettu hakasulku.
>> Ja sitten, voit valita tulkita tämä mielessäsi kuin 10
10 ruudukon solujen.
Nyt, itse asiassa, muistiin, se todella vain
edelleen 100 elementti, yksi ulotteinen array.
Ja tämä itse asiassa pätee jos on kolme ulottuvuutta tai neljä tai viisi.
Se oikeastaan ​​vain ei moninkertaistaa kaikki indices--
tai kaikki koon specifiers-- yhdessä,
ja juuri saada yksiulotteisen joukko, että koko.
>> Mutta suhteen organisaatiossa ja visualisointi ja ihmisen käsitys,
se voi olla paljon helpompaa työskennellä verkkoon
jos olet työskennellyt peli kuten Ristinolla tai Battleship,
tai jotain sellaista.
Se on hyvä abstraktio, sen sijaan,
ajatella Ristinolla Aluksella linja yhdeksän
neliön tai taistelulaiva hallitus kuten linja 100 neliöitä.
10 10 verkkoon tai kolme kolme ruudukko on luultavasti
paljon enemmän helppo hahmottaa.
>> Nyt, jotain todella tärkeää noin taulukot.
Voimme käsitellä jokaisen yksittäisen alkiota muuttujana.
Näimme, että aiemmin kun olimme osoitetaan
arvo True tiettyihin Booleans tai testaamalla niitä conditionals.
Mutta emme voi kohdella koko paneelit itseään muuttujia.
Emme voi esimerkiksi määrittää yhden ryhmän toiseen matriisi toimeksianto
operaattori.
Se ei ole oikeudellista C.
>> Jos haluamme, sillä example-- mitä sivuuttaisimme siinä esimerkissä
olisi kopioida yhden ryhmän toiseen.
Jos haluamme tehdä niin, me todella täytyy käyttää silmukan kopioida
kukin yksittäinen elementti kerrallaan.
Tiedän, että se vähän aikaa vievää.
>> Niinpä esimerkiksi, jos meillä olisi nämä pari riviä koodia, olisi tätä työtä?
No, ei, se ei olisi, eikö?
Koska me yritämme määrittää ruokaa baarissa.
Se ei tule toimimaan, koska se on joukko,
ja me vain kuvattu että se ei ole oikeudellista C.
>> Sen sijaan, jos haluamme kopioida ruoka
osaksi baari, joka on mitä yritämme tehdä täällä,
tarvitsisimme syntaksi näin.
Meillä varten silmukka, joka menee J on yhtä suuri kuin 0 enintään 5,
ja me kasvattaa J jokaisen iterointia silmukka ja määrittää elementtejä niin.
Tämä johtaisi baarissa myös on yksi, kaksi, kolme, neljä, viisi,
mutta meidän on tehtävä se tämän hyvin hidas elementti-by-elementti tavalla,
sijaan vain hieman kopiointi koko ryhmän.
Muissa ohjelmointi kielet, enemmän uudempiin,
voit itse asiassa tehdä juuri että yksinkertainen vastaa syntaksin.
Mutta C, valitettavasti olemme ei saa tehdä.
>> Nyt on olemassa yksi muu asia, jonka haluan mainita
noin taulukot, jotka voivat olla hieman vähän hankala ensimmäisen kerran
työskennellä heidän kanssaan.
Keskustelimme video noin kiikaritähtäimellä,
että useimmat muuttujat C, kun soitat ne toiminnot, johdetaan arvosta.
Muistatko, mitä se tarkoittaa siirtää jotain arvon?
Se tarkoittaa, että teet kopion muuttuja, joka on parhaillaan kulunut.
Callee toiminto, funktio joka on vastaanottava muuttuja,
ei saa itse muuttujan.
Se saa oma paikallinen kopio työskennellä.
>> Taulukot, tietenkin, do ei noudata tätä sääntöä.
Pikemminkin, mitä me kutsumme tätä on ohi viitteenä.
Callee todella ei saa jono.
Se ei saa sen oma paikallinen kopio.
Ja jos ajattelee se, että tämä on järkevää.
Jos paneelit ovat todella suuria, se vie niin paljon aikaa ja vaivaa
tehdä kopion joukko 100 tai 1000 tai 10000 elementtejä,
että se ei ole sen arvoista toimiakseen saada jäljennös niistä,
tehdä töitä sen kanssa, ja sitten vain tapahduttava jäljennös;
sen ei tarvitse olla se roikkuu ympäri enää.
>> Koska paneelit ovat joitakin iso ja raskas,
me vain siirtää ne viittaamalla.
Me vain luottaa siihen, että toiminto on, eivät riko mitään.
Joten se ei itse saada jono.
Se ei saa oma paikallinen kopio.
>> Joten mitä tämä tarkoittaa, silloin, kun soiton
manipuloi taulukon alkiot?
Mitä tapahtuu?
Nyt me kiilto yli miksi juuri tämä
tapahtuu, miksi taulukot välitetään viittaamalla
ja kaikki muu on ohi arvo.
Mutta lupaan teille, me palata ja antaa sinulle vastauksen
tähän myöhemmässä video.
>> Tässä yksi enemmän liikuntaa sinulle ennen kuin paketoida asioita paneelit.
Nippu koodia täällä, se on ei erityisen hyvä tyyli,
vain Teen että varoitus.
Ei ole kommentteja täällä, joka on melko huono muoto.
Mutta se on vain koska halusin olla pystyä sopimaan kaiken ruudulla.
>> Ylimpänä, voit nähdä, että minulla on kaksi toimintoa ilmoitukset asettaa array
ja asettaa int.
Aseta array ilmeisesti vie array neljä kokonaislukuja sen panos.
Ja joukko int ilmeisesti vie yksi kokonaisluku sen panos.
Mutta molemmat heistä ei ole tuotos.
Lähtö, paluu kirjoitat, jokainen on mitätön.
Main, meillä pari riviä koodia.
Me julistamme kokonaisluku muuttuja nimeltään ja määrittää sen arvo 10.
Me julistamme johdosta neljä kokonaislukuja nimeltään B ja antaa elementit 0, 1,
2, ja 3, vastaavasti.
Sitten meillä on asettamiseen int ja asettamiseen array.
Määritelmät asettaa array ja asettaa int ovat alhaalla, alareunassa.
>> Ja niin, taas, pyydän teitä kysymyksen.
Mikä saa tulostaa täällä lopussa Main?
On tuloste col. Olen tulostamalla kaksi kokonaislukua.
Olen tulostamalla sisältöä ja sisältö B hakasulku 0.
Tauko video täällä ja kestää minuutin.
Voitko selvittää, mitä tämä toiminto tulostaa lopussa?
Toivottavasti jos muistatte erottelu ohi arvo
ja ohi viittaus, tämä ongelma ei ollut liian hankala sinulle.
Ja vastaus olisit ovat löytäneet on tämä.
Jos et ole aivan varma siitä, miksi näin on, ota toinen,
palata, tarkastella, mitä olin juuri keskustelemme siitä kulkee paneelit
viittaamalla, vs. kulkee muiden muuttujien arvon,
ja toivottavasti, se tulee tehdä hieman enemmän järkeä.
>> Olen Doug Lloyd, ja tämä on CS50.