1 00:00:00,000 --> 00:00:02,200 [Powered by Google Translate] [Viikko 3] 2 00:00:02,200 --> 00:00:03,950 [David J. Malan - Harvardin yliopisto] 3 00:00:03,950 --> 00:00:07,140 [Tämä on CS50. - CS50.TV] 4 00:00:07,140 --> 00:00:10,720 Saanen ohjaavat meitä suuntaan mihin jäimme viime kerralla, 5 00:00:10,720 --> 00:00:13,890 joka alkoi ajatella vähän enemmän kuin noin syntaksi 6 00:00:13,890 --> 00:00:17,150 ja yrittää ajatella hieman vähemmän siitä kaikki pienet yksityiskohdat 7 00:00:17,150 --> 00:00:20,630 joka vie vähän aikaa tottua tähän mennessä kannalta puolipistettä 8 00:00:20,630 --> 00:00:22,360 ja suluissa ja aaltosulkeita, 9 00:00:22,360 --> 00:00:25,630 alkaa ottamaan asioita hieman korkeammalle käsitteellisellä tasolla 10 00:00:25,630 --> 00:00:28,800 niin että ongelmat nyt alkaa ratkaista seuraavan useita viikkoja 11 00:00:28,800 --> 00:00:32,340 tulevat ottamaan enemmän korkeamman tason käsitteellisiä ongelmia 12 00:00:32,340 --> 00:00:36,310 ja vähän vähemmän syntaktisia kuin saat jalat märkä 13 00:00:36,310 --> 00:00:40,090 ja kädet likainen joidenkin syntaksin näiden viimeisten viikkojen aikana. 14 00:00:40,090 --> 00:00:43,690 >> Niin muistaa, että viime viikolla otimme käyttöön tämän käsitteen array. 15 00:00:43,690 --> 00:00:49,320 Ja array Englanti voidaan kuvata mitä? >> [Äänetön opiskelijan vastausta] 16 00:00:49,320 --> 00:00:51,710 Anteeksi? 17 00:00:51,710 --> 00:00:54,810 Kokoelma? >> [Äänetön opiskelijan vastausta] >> Okei, hyvä. 18 00:00:54,810 --> 00:00:57,820 Kokoelma kohteita. Joten näimme taulukot Scratch. 19 00:00:57,820 --> 00:01:01,880 Jos sattui käyttää PSET 0 yksi Scratch n luetteloita, joita voi vetää asioita 20 00:01:01,880 --> 00:01:05,410 kuten appelsiinit ja banaanit, inventaario tapaisena, 21 00:01:05,410 --> 00:01:07,100 se on sellainen kuin mitä array on. 22 00:01:07,100 --> 00:01:10,980 Ja sitten lisää teknisesti yhteydessä todellinen tietokone, 23 00:01:10,980 --> 00:01:14,730 array on yksinkertaisesti yhtenäinen kimpale muistia. 24 00:01:14,730 --> 00:01:18,590 Toisin sanoen, sinun on tavu, sitten toinen tavu, sitten toinen tavu, sitten toinen tavu, 25 00:01:18,590 --> 00:01:21,330 ja jos oli piirtää niitä tavua kuvan, 26 00:01:21,330 --> 00:01:24,510 he olisivat takaisin takaisin takaisin takaisin. Sitähän me tarkoitamme vierekkäin. 27 00:01:24,510 --> 00:01:26,690 >> Joten se on tavu numero 1, sitten 2, sitten 3. 28 00:01:26,690 --> 00:01:29,680 Se ei tarkoita täällä, täällä, täällä, täällä. 29 00:01:29,680 --> 00:01:33,800 Array on yhtenäinen kimpale 0 tai enemmän tavua. 30 00:01:33,800 --> 00:01:36,160 Joten mitä ne ovat hyödyllisiä? 31 00:01:36,160 --> 00:01:40,090 Muistan meillä oli tällainen keinotekoinen esimerkki varastointi ihmisten tietokilpailu arvosanoja ohjelmaan 32 00:01:40,090 --> 00:01:42,580 laskemaan Quiz keskimäärin jonkin kurssin, 33 00:01:42,580 --> 00:01:46,780 ja muistuttaa, että voisimme aloittaa kirjallisesti ohjelma julistamalla muuttuja quiz1. 34 00:01:46,780 --> 00:01:49,550 Silloin voisimme olla toinen muuttuja nimeltä quiz2. 35 00:01:49,550 --> 00:01:52,030 Mutta sitten jos oli 3 tietokilpailuja tässä luokassa, quiz4. 36 00:01:52,030 --> 00:01:55,710 Tai jos oli viikoittain tietokilpailu, olisi quiz5, quiz6, quiz7. 37 00:01:55,710 --> 00:01:58,520 Joten sinulla olisi kaikki nämä muuttujat julisti sisällä main 38 00:01:58,520 --> 00:02:00,470 tai muualla oman ohjelman 39 00:02:00,470 --> 00:02:03,870 ja ongelma tämän lähestymistavan, helppo vaikka se on vain kopioida ja liittää, 40 00:02:03,870 --> 00:02:06,120 on se vain nopeasti muuttuu hankalaksi. 41 00:02:06,120 --> 00:02:09,360 Jumala varjelkoon sinulla oikeasti on 30 tietokilpailuja tai 50 tietokilpailuja. 42 00:02:09,360 --> 00:02:12,080 Jos se on kuin lukion tyyliin päivittäin Pop Quiz, 43 00:02:12,080 --> 00:02:15,910 sitten vain on naurettavan pitkä lista muuttujien julistetaan, 44 00:02:15,910 --> 00:02:17,780 ja tämä vain hyvin nopeasti pääsee käsistä. 45 00:02:17,780 --> 00:02:20,820 Se on ruma, se on vaikea säilyttää, se on niin paljon helpompaa typo 46 00:02:20,820 --> 00:02:23,910 jos saat 1 numero kirjoitettu väärin jossain ohjelman. 47 00:02:23,910 --> 00:02:26,800 >> Joten otimme käyttöön käsite array sijaan. 48 00:02:26,800 --> 00:02:30,760 Ja muistaa, että otimme tämän ohjelman tekemällä vähän jotain tällaista. 49 00:02:30,760 --> 00:02:33,950 Sallikaa minun mennä tänään Source 3. maanantai hakemistossa 50 00:02:33,950 --> 00:02:37,160 ja avata array, jossa näimme viime kerralla. 51 00:02:37,160 --> 00:02:39,940 Ja vaikka siellä oli pari uutta C temppuja täällä, 52 00:02:39,940 --> 00:02:41,920 joukossa käsite vakio, 53 00:02:41,920 --> 00:02:47,140 Muistutan, että me julistettu useita kohoissa pääasiassa käyttämällä seuraavaa syntaksia: 54 00:02:47,140 --> 00:02:51,750 float, sitten muuttujan nimi, sitten käytetään hakasuluilla todella ensimmäistä kertaa, 55 00:02:51,750 --> 00:02:55,450 ja mitä teimme sisällä näiden hakasuluilla tosiasiallisesti laittaa numero. 56 00:02:55,450 --> 00:02:59,780 Mutta sen sijaan, että numero, laitan tämän aktivoidut sanan, tietokilpailuja. 57 00:02:59,780 --> 00:03:03,220 Ja mikä oli motivaatio laskemisesta Aktivoitujen sana kuten tietokilpailuja 58 00:03:03,220 --> 00:03:08,170 ja sitten käyttämällä linja 17: n temppu täällä todella antaa se numero? 59 00:03:08,170 --> 00:03:11,240 Mikä oli motivaatio siellä? Joo. 60 00:03:11,240 --> 00:03:13,360 >> [Äänetön opiskelija vastausta] >> Aivan. 61 00:03:13,360 --> 00:03:16,630 Jos haluamme muuttaa tuota arvoa 2, meillä on vain muuttaa sitä 1 paikka 62 00:03:16,630 --> 00:03:19,680 koska pitävät - En edes muista, mitä tämä ohjelma teki täsmälleen, 63 00:03:19,680 --> 00:03:22,040 mutta jos vain vilkaista sitä näette tietokilpailuja, tietokilpailuja. 64 00:03:22,040 --> 00:03:24,720 Näet tietokilpailuja, tänne lisää tietokilpailuja. 65 00:03:24,720 --> 00:03:28,180 Eli jos meillä ei olisi tätä jatkuvaa, tämä teräviä määritellä, 66 00:03:28,180 --> 00:03:33,320 olisimme kirjoittanut 2, sitten 2, sitten 2, sitten 2, joka on hieno. Olisi aivan yhtä oikeita. 67 00:03:33,320 --> 00:03:36,220 Mutta oletetaan, että ensi vuonna meillä on 3 tietokilpailuja CS50. 68 00:03:36,220 --> 00:03:39,190 Joten minun täytyy mennä ja päivittää koodin, minun täytyy kääntää se, 69 00:03:39,190 --> 00:03:43,820 mutta ongelma on, jos teen jotain typerää, kuten minä unohtaa 1 mainittu 2 70 00:03:43,820 --> 00:03:46,750 ja unohtaa plug 3, koko ohjelma saattaa hyvinkin rikkoa. 71 00:03:46,750 --> 00:03:48,720 Joten me vain pyytää ongelmia. 72 00:03:48,720 --> 00:03:53,170 >> Joten käsite vakio on kyse factoring joitakin pala tietoja, 73 00:03:53,170 --> 00:03:56,070 onko se merkkijono tai char tai float tai mitä tahansa, 74 00:03:56,070 --> 00:04:00,070 ja julistaa 1 paikka niin, että voit helpommin muuttaa sitä tulevaisuudessa. 75 00:04:00,070 --> 00:04:03,660 Ja se on myös suoraan sanoen hieman helpompi lukea, koska jos vain ajatella tätä nyt, 76 00:04:03,660 --> 00:04:07,840 se tietokilpailuja, tai voimme jopa nimetä se jotain NUMBER_OF_QUIZZES 77 00:04:07,840 --> 00:04:09,430 tai jotain nimenomaista. 78 00:04:09,430 --> 00:04:11,830 Koodi tulee vain hieman enemmän selvää siitä, mitä se tekee, 79 00:04:11,830 --> 00:04:15,780 ja mietit hieman vähemmän mitä numero 2 voisi tapahtua tarkoittaa. 80 00:04:15,780 --> 00:04:18,920 Joten jatkuva ollut mitään tekemistä pohjimmiltaan ryhmät. 81 00:04:18,920 --> 00:04:22,990 Array otettiin käyttöön tapa näiden hakasuluilla. 82 00:04:22,990 --> 00:04:26,610 >> Niin huomaat että linjaa 23 pyydämme käyttäjä, "Mitkä olivat tietokilpailun tulokset?" 83 00:04:26,610 --> 00:04:31,120 Sitten meillä on vain tämä silmukka joka ilmeisesti kysyy käyttäjältä niiden arvosanat. Miten? 84 00:04:31,120 --> 00:04:37,460 Se toistetaan 0-2. Ja sanon 2, koska tietokilpailuja kaikki korkit on tällä hetkellä 2. 85 00:04:37,460 --> 00:04:42,310 Joten se toistetaan 0 enintään 2 ja sitten se tulostaa Quiz # jotain jotain, 86 00:04:42,310 --> 00:04:45,830 ja sitten se käyttää GetFloat saada arvon käyttäjältä. 87 00:04:45,830 --> 00:04:49,050 Joten huomaa tämä on ainoa uusi pala syntaksin viime keskiviikkona. 88 00:04:49,050 --> 00:04:53,120 Jos haluat tallentaa jotain tietyssä paikassa että array, 89 00:04:53,120 --> 00:04:55,460 taas käyttää hakasulkeissa. 90 00:04:55,460 --> 00:04:57,030 >> Joten siellä vähän kahtiajako täällä. 91 00:04:57,030 --> 00:04:59,040 Ensimmäisen kerran käytät hakasulkeita 92 00:04:59,040 --> 00:05:02,250 käytät sitä määrittää kuinka iso haluat array olla. 93 00:05:02,250 --> 00:05:06,580 Mutta tämä seuraava yhteydessä täällä missä olemme taas käyttävät näitä hakasuluilla 94 00:05:06,580 --> 00:05:10,540 tarkoittaa jos siinä array haluat laittaa jotain arvoa? 95 00:05:10,540 --> 00:05:13,650 Ja ero tässä voidaan päätellä yhteydessä. 96 00:05:13,650 --> 00:05:17,130 Ilmoitus tästä on tietotyyppi, sitten meillä on nimi muuttujan, 97 00:05:17,130 --> 00:05:20,770 Sitten meillä on hakasuluilla useita sisällä, puolipiste. Siinä kaikki. 98 00:05:20,770 --> 00:05:22,290 Joten se ilmoitus. 99 00:05:22,290 --> 00:05:28,390 Se on aivan kuin olisimme tehneet jotain float Grade1, float Grade2; 100 00:05:28,390 --> 00:05:31,730 mutta jälleen kerran, tämä hyvin nopeasti lankeaa aivan liikaa kopioida, liittää, 101 00:05:31,730 --> 00:05:34,260 joten sen sijaan me vain yksinkertaistettu sitä sellaisena, 102 00:05:34,260 --> 00:05:38,800 mikä tarkoittaa sitä, tästedes meillä on arvosana, joka voidaan varastoida kiinnike 0, 103 00:05:38,800 --> 00:05:41,760 meillä on toinen luokka, joka voidaan varastoida kiinnike 1, 104 00:05:41,760 --> 00:05:46,890 mutta mitä jos minä hölmö ja esimerkiksi minun silmukka menee niin pitkälle - 105 00:05:46,890 --> 00:05:48,740 Esimerkiksi, esitän pienempi tai yhtä suuri kuin, 106 00:05:48,740 --> 00:05:50,620 mikä Recall oli lähde aiemman bug - 107 00:05:50,620 --> 00:05:55,590 mikä käytännössä tarkoittaa sitä, että tiettyjen kolmansien vahingossa iterointia tämän silmukan 108 00:05:55,590 --> 00:06:00,380 Käytän kiinnike 2. Tehokkaasti, mitä voisi tapahtua täällä? Anteeksi? 109 00:06:00,380 --> 00:06:02,860 [Opiskelija] Se aiotaan korvata. >> Onko aiotaan korvata? 110 00:06:02,860 --> 00:06:04,520 Mitä korvataan? 111 00:06:04,520 --> 00:06:10,890 Tämä kirjaimellisesti sanoo korvata mikä on paikka 2 paluun arvo GetFloat. 112 00:06:10,890 --> 00:06:13,690 Mutta ongelma on, kuinka suuri on array tässä vaiheessa tarinan? 113 00:06:13,690 --> 00:06:17,730 [Äänetön opiskelija vastausta] >> array on edelleen vain koko 2 114 00:06:17,730 --> 00:06:22,730 koska array, kuten mikä tahansa muuttuja, julistettiin ensin, ennen käytimme sitä, 115 00:06:22,730 --> 00:06:27,220 ja me tässä määritetty tämän vuoksi jatkuvasti, että minulla on 2 arvosanoja että aion laittaa. 116 00:06:27,220 --> 00:06:29,930 >> Mutta muistakaa, tietojenkäsittelyasiantuntijat alkavat laskien 0. 117 00:06:29,930 --> 00:06:33,620 Niin ensimmäinen sijainnin siitä, että matriisi on kiinnike 0. 118 00:06:33,620 --> 00:06:40,210 Seuraava sijainti on 1. Tämä asia on yhä niin vähän liian pitkälle yli puolelle. 119 00:06:40,210 --> 00:06:42,870 Eli toisin sanoen, jos olen itse ollut tämä array - 120 00:06:42,870 --> 00:06:46,790 ja haluan nähdä kuinka hyvin tämä toimii täällä meitä - 121 00:06:46,790 --> 00:06:52,360 jos minulla on array, että olen yksinkertaisesti tehdä seuraavasti 122 00:06:52,360 --> 00:06:56,750 ja olen varattu tilaa 2 elementtejä, voisin tehdä tätä näin muistiin 123 00:06:56,750 --> 00:06:58,020 jos tämä iso valkoinen kangas on. 124 00:06:58,020 --> 00:07:00,920 Se on vain RAM Minulla on tietokone, keikka RAM, 2 gigan RAM riippumatta, 125 00:07:00,920 --> 00:07:05,400 mutta nämä 2 laatikkoa nyt erikseen edustavat kellua, 32 bittiä. 126 00:07:05,400 --> 00:07:10,860 Joten jos laitan 1 numero täällä kuin 1,0, niin laitan toisen numeron täällä kuin 3,2 127 00:07:10,860 --> 00:07:15,280 mutta sitten minä kannatin 2, se on kuin laittaisi jotain. 128 00:07:15,280 --> 00:07:17,820 Ja kuten kuva osoittaa, siellä ei ole mitään. 129 00:07:17,820 --> 00:07:20,450 Se on tavallaan kuin ei-kenenkään maalla, koska en ole pyytänyt käyttöjärjestelmä 130 00:07:20,450 --> 00:07:23,550 antaa minulle tämän kolmannen tietokilpailu. 131 00:07:23,550 --> 00:07:26,940 Jos halusin että kolmansien tietokilpailu, minun olisi pitänyt ennakoimaan 132 00:07:26,940 --> 00:07:31,700 kysyä käyttöjärjestelmä sen ilmoittamalla tietovisoja saa olla 2 133 00:07:31,700 --> 00:07:34,210 vaan sen sijaan yhtä 3. 134 00:07:34,210 --> 00:07:39,000 >> Eli toisin sanoen, kuva meillä tehokkaasti käsillä näyttää tältä täällä. 135 00:07:39,000 --> 00:07:42,260 Tämä taas ei ole kenenkään maalla. Meidän on parempi olla yrittää kirjoittaa arvoja täällä. 136 00:07:42,260 --> 00:07:45,300 Mutta jälleen kerran, koska tietojenkäsittelyasiantuntijat laskea 0, 137 00:07:45,300 --> 00:07:49,520 kun puhumme tästä sijainnista array, että pitäisi olla paikka 0, 138 00:07:49,520 --> 00:07:53,890 Tämän on tarkoitus olla paikka 1, ja tämä ei ole edes olemassa 139 00:07:53,890 --> 00:07:57,380 sillä me vain pyytänyt käyttöjärjestelmän 2 tällaisissa paikoissa. 140 00:07:57,380 --> 00:08:00,130 Joten ne teistä etukäteen ohjelmointi kokemusta muista kielistä 141 00:08:00,130 --> 00:08:04,150 tietäisivät, että tämä ei aina päde pakkoja tai asioita kutsutaan vektoreiden. 142 00:08:04,150 --> 00:08:06,930 Pikemminkin, voit vain pitää lisäämällä ja lisäämällä ja lisäämällä asioita paneelit, 143 00:08:06,930 --> 00:08:10,720 jotka suoraan sanottuna meillä oli, että kyky Scratch ja silti näytä antaneen sen tänne 144 00:08:10,720 --> 00:08:15,160 koska C-ohjelmoit paljon selkeämmin. 145 00:08:15,160 --> 00:08:17,980 Se on vain sinä ja tietokone juuri nyt, ja tietokone on vain aikoo tehdä 146 00:08:17,980 --> 00:08:19,530 mitä kerrot sen tehdä. 147 00:08:19,530 --> 00:08:24,270 Joten jos vain kertoa se antaa sinulle 2 kellukkeet Poiketen linjan 22 täällä, 148 00:08:24,270 --> 00:08:27,640 siinä kaikki mitä aiot saada takaisin käyttöjärjestelmä: tilaa 2. 149 00:08:27,640 --> 00:08:34,049 >> Joten yhä ovat ohjelmia tulee joskus olemaan buginen osalta paneelit. 150 00:08:34,049 --> 00:08:37,520 Tämä on vain eräänlainen luonne pedon jossa me kaikki olemme erehtyväinen, 151 00:08:37,520 --> 00:08:42,490 ja jossain vaiheessa luultavimmin indeksi ylittää rajan oman array. 152 00:08:42,490 --> 00:08:45,980 Ja se on vain hieno tapa sanoa menit kiinnike jotain 153 00:08:45,980 --> 00:08:49,970 ja jotain oli aivan liian iso numero. Menit armoille oman array. 154 00:08:49,970 --> 00:08:51,530 Mutta ylösalaisin nyt tämä. 155 00:08:51,530 --> 00:08:54,990 Loput Ohjelman oikeastaan ​​ole mitään pohjimmiltaan tekemistä paneelit. 156 00:08:54,990 --> 00:08:58,180 Se kaikki on vain joitakin yksinkertaisia ​​aritmeettisia tietotekniikkaa keskiarvoja. 157 00:08:58,180 --> 00:09:03,200 Joten meillä on täällä tämä silmukka täällä ensin muuttuja nimeltään summa että meidän alustaa 0. 158 00:09:03,200 --> 00:09:09,020 Sitten toistaa 0 enintään 2 uudelleen ja lisäämme siihen summamuuttujan 159 00:09:09,020 --> 00:09:12,620 i luokan, joten kannatin 0 sitten kannatin 1. 160 00:09:12,620 --> 00:09:15,130 Ja sitten kun tekisi alakoulussa laskea keskiarvon, 161 00:09:15,130 --> 00:09:19,420 me yksinkertaisesti ottaa se summa, jakaa sen kokonaismäärä tietokilpailuja, 162 00:09:19,420 --> 00:09:22,520 ja sitten kaiken kukkuraksi kutsumme funktio tässä kutsutaan kierroksella. 163 00:09:22,520 --> 00:09:28,580 >> Nyt, kuten syrjään, mikä on käsitellä tämän sulkeissa int linjalla 34? 164 00:09:28,580 --> 00:09:31,730 Se ehkä keksiä jo kohdassa, ei ole oikeastaan ​​puhuneet siitä virallisesti täällä, 165 00:09:31,730 --> 00:09:35,210 mutta mitä tämä INT parens luultavasti tekee? >> [Äänetön opiskelijan vastausta] 166 00:09:35,210 --> 00:09:38,500 Joo, tämä viittaa valu tai tyypittely, 167 00:09:38,500 --> 00:09:41,690 mikä tarkoittaa, että otetaan 1 tietotyyppi ja muuntaa sen toiseen. 168 00:09:41,690 --> 00:09:45,400 Et voi tehdä tätä kaikkien tietotyyppien koska joskus se olisi vähän outoa. 169 00:09:45,400 --> 00:09:49,640 Mutta tässä tapauksessa, jos paluuarvo pyöreiden on float 170 00:09:49,640 --> 00:09:53,880 koska loppujen lopuksi otan float ja jakamalla se numero kuin 2, 171 00:09:53,880 --> 00:09:55,840 Aion saada takaisin float. 172 00:09:55,840 --> 00:10:00,760 Mutta alakoulussa ihmiset eivät todella tietää, että heidän oli keskimäärin 93,4 173 00:10:00,760 --> 00:10:04,420 koska he ymmärtävät he olivat aina niin lähellä, että 95 pyöristystä kohta. 174 00:10:04,420 --> 00:10:09,540 >> Joten me haluamme sen sijaan käyttää int pyöristää kaikille lähimpään int- 175 00:10:09,540 --> 00:10:12,730 joka tässä tapauksessa tulee olemaan 94, joilla ei ole kohta sen jälkeen. 176 00:10:12,730 --> 00:10:14,530 Joten se on vain pieni matemaattinen temppu. 177 00:10:14,530 --> 00:10:17,570 Ja me palaamme tähän käsitteeseen valu, koska sillä on vaikutusta, 178 00:10:17,570 --> 00:10:21,640 jos et ole löytänyt jo, sillä ongelma asettaa 2. 179 00:10:21,640 --> 00:10:25,210 Joten array sitten voit ajatella - se tulee tehdä minulle hymyillä koko päivän. 180 00:10:25,210 --> 00:10:27,830 Tälle jos piirtää kuvan siitä, 181 00:10:27,830 --> 00:10:31,460 mutta tärkeintä on, että koko on myös valinnut sinut 182 00:10:31,460 --> 00:10:34,050 kun pyydät sitä käyttöjärjestelmästä. 183 00:10:34,050 --> 00:10:39,460 Kaikki kysymykset sitten paneelit? Joo. 184 00:10:39,460 --> 00:10:47,080 [Äänetön opiskelija kysymys] 185 00:10:47,080 --> 00:10:49,310 Ah, hyvä kysymys. 186 00:10:49,310 --> 00:10:53,150 Kysymys on mitä tapahtuu null 0 array? Se ei ole tässä yhteydessä. 187 00:10:53,150 --> 00:10:57,430 Että on olemassa vain osana jouset, jotka aiomme tulla vain hetken. 188 00:10:57,430 --> 00:11:02,300 Mutta array, kuten tässä tapauksessa, kaikki saat mitä pyydät käyttöjärjestelmä. 189 00:11:02,300 --> 00:11:04,050 >> Ja kuten syrjään, ettei tämä olla epäselvä, 190 00:11:04,050 --> 00:11:07,030 Minä pitää sanoa kysyt käyttöjärjestelmä, kysy käyttöjärjestelmä. 191 00:11:07,030 --> 00:11:10,090 Käyttöjärjestelmä, kuten varmasti tiedätte, on Mac OS, Windows, Linux. 192 00:11:10,090 --> 00:11:13,560 Kun soitat toimintoja kuten GetFloat 193 00:11:13,560 --> 00:11:19,280 tai olet julistaa muuttujia, kuten arvosanoja, 194 00:11:19,280 --> 00:11:23,200 lopussa päivä olet kysyy, joku muu antaa teille, että muisti 195 00:11:23,200 --> 00:11:25,940 koska me pyrkivä ohjelmoijia 196 00:11:25,940 --> 00:11:28,800 ei ole aavistustakaan siitä, miten todella saada fyysistä pääsyä muistiin. 197 00:11:28,800 --> 00:11:31,100 Mutta joku tekee: käyttöjärjestelmä. 198 00:11:31,100 --> 00:11:36,630 Siis sen lisäksi esittelee meille melko kuvakkeet ja valikot ja kansiot ja vastaavat 199 00:11:36,630 --> 00:11:39,050 että näet työpöydällä, onko Mac-tai PC- 200 00:11:39,050 --> 00:11:42,240 käyttöjärjestelmien myös tehdä alhainen arkipäiväinen kamaa, 201 00:11:42,240 --> 00:11:44,680 erittäin teknisiä juttuja hallintaa gigatavu 202 00:11:44,680 --> 00:11:48,780 tai 2 gigatavua muistia, että sinulla on, toimitusjohtaja CPU että sinulla on, ja niin edelleen. 203 00:11:48,780 --> 00:11:50,170 Joten kun kirjoitat koodin, 204 00:11:50,170 --> 00:11:53,900 olet todella koukkaaminen sisään käyttöjärjestelmän mielessä. 205 00:11:53,900 --> 00:11:55,720 Aion pitää minimoida tämä. Selvä. 206 00:11:55,720 --> 00:11:59,980 >> Muita kysymyksiä ryhmät? 207 00:12:00,330 --> 00:12:02,520 Ei? Okei. 208 00:12:02,520 --> 00:12:06,680 Joten siirtyminen luonnostaan ​​paneelit on todella aihe, joka on hieman tuttu. 209 00:12:06,680 --> 00:12:09,570 Ja me katsoimme koskaan niin lyhyesti tällä viime kerralla liikaa. 210 00:12:09,570 --> 00:12:12,500 Tämä oli merkkijono esimerkiksi keskiviikkona. 211 00:12:12,500 --> 00:12:15,060 Tämä merkkijono esimerkki oli melko yksinkertainen ohjelma, 212 00:12:15,060 --> 00:12:18,120 ja olen todella yksinkertaistettu sitä pari riviä nykypäivän tarkoituksiin. 213 00:12:18,120 --> 00:12:22,680 Kaikki se vastaa 19 on saada merkkijonon käyttäjän tallentaa sen muuttujaan nimeltä s. 214 00:12:22,680 --> 00:12:28,670 Sitten line 22 lähtien se on ilmeisesti tulostamista merkkijono 1 merkki per rivi. 215 00:12:28,670 --> 00:12:30,730 Mutta miten se tekee tämän? 216 00:12:30,730 --> 00:12:33,350 Olemme julistamisesta muuttuja i, jossa se yhtä suuri kuin 0, 217 00:12:33,350 --> 00:12:35,770 ja tämä on tulossa vanha tapa nyt. 218 00:12:35,770 --> 00:12:39,270 Emme olleet nähneet tätä vasta keskiviikkona, mutta voit eräänlainen päättelevät sen nimi 219 00:12:39,270 --> 00:12:44,610 strlen palaa aivan mitä annettaessa s? Pituus merkkijono. 220 00:12:44,610 --> 00:12:47,940 Joten jos kuljen se merkkijono, lainaus-lainaus päättyy DAVID, 221 00:12:47,940 --> 00:12:51,810 se toivottavasti tulee palata minulle numero 5, koska David. 222 00:12:51,810 --> 00:12:55,600 Niin, että sen tarkoitus elämässä on ottaa nuora, myös kova koodattu sinua 223 00:12:55,600 --> 00:12:58,840 tai tässä tapauksessa kytketty muuttujana, koska argumentti, 224 00:12:58,840 --> 00:13:01,980 ja se keksii mitä pituus, että merkkijono on. 225 00:13:01,980 --> 00:13:06,470 >> Joten tässä nyt olemme lainaa joitakin merkintä edellisestä Quiz esimerkki. 226 00:13:06,470 --> 00:13:09,390 Tällä ei ole mitään tekemistä kellukkeilla, ei ole mitään tekemistä tietokilpailuja, 227 00:13:09,390 --> 00:13:13,100 mutta käy ilmi, että pieni valkoinen valhe olemme kertoneet teille, koska viikko 1 228 00:13:13,100 --> 00:13:16,330 on, että merkkijono ei oikeasti olemassa C. 229 00:13:16,330 --> 00:13:20,230 String lopussa päivä on oikeastaan ​​vain joukko. 230 00:13:20,230 --> 00:13:25,140 Se joukko tavua, joten tavu, tavu, tavu, tavu, joka muistaa on vain 8 bittiä, 231 00:13:25,140 --> 00:13:28,130 joten kimpale muistia, kimpale muistia, kimpale muistia, kimpale muistia. 232 00:13:28,130 --> 00:13:31,210 Ja keinoista, joilla merkkijono toteutetaan 233 00:13:31,210 --> 00:13:33,070 on laittamalla ensimmäinen merkki tästä, 234 00:13:33,070 --> 00:13:37,470 Sitten täällä, niin tässä, niin tässä, takaisin takaisin takaisin tietokoneen muistiin. 235 00:13:37,470 --> 00:13:42,160 Joten jos halusi täsmentää sana kuten Hei, sinulla olisi laittaa 1 merkki H, 236 00:13:42,160 --> 00:13:48,240 sitten E, L niin L, sitten O - 5 merkkiä yhteensä - jossain tietokoneen RAM. 237 00:13:48,240 --> 00:13:52,080 Mutta avain yksityiskohta on, että he aikovat olla takaisin takaisin takaisin takaisin, 238 00:13:52,080 --> 00:13:54,200 vieressä toisiinsa. 239 00:13:54,200 --> 00:13:58,820 Kun kun sanon s [i], mitä Englanti on tämä antaa minulle? 240 00:14:01,240 --> 00:14:04,550 Mitä s [i] edustaa tässä asiassa? Joo. 241 00:14:04,550 --> 00:14:07,800 >> [Opiskelija] i merkin merkkijono. >> Aivan. I merkki merkkijonon. 242 00:14:07,800 --> 00:14:12,260 Nyt olen aikoo alkaa 0 kohti minun ja silmukka täällä, 243 00:14:12,260 --> 00:14:14,850 mutta se on hyvä, koska kaikki alkaa laskien 0. 244 00:14:14,850 --> 00:14:19,160 Joten s [0] on menossa edustaa kirjaimella H sanaa kuten HELLO, 245 00:14:19,160 --> 00:14:24,530 s [1] on menossa edustaa kirjain, kuten E sanaa kuten HELLO, ja niin edelleen. 246 00:14:24,530 --> 00:14:27,130 Ja mitä me näytämme tekevän jokaisen iteraation tämän silmukan 247 00:14:27,130 --> 00:14:32,780 on väliaikaisesti tallennetaan i: nnen merkin muuttuja nimeltä c, joka on vain char, 248 00:14:32,780 --> 00:14:35,010 ja sitten olemme tulostamalla c 249 00:14:35,010 --> 00:14:37,620 niin, että loppujen lopuksi mitä tämä ohjelma tekee, on seuraava. 250 00:14:37,620 --> 00:14:42,900 Jos menen lähde hakemistoon ja teen merkkijono1 ja minä mennä eteenpäin ja ajaa merkkijono1, 251 00:14:42,900 --> 00:14:51,920 ja sitten kirjoita sana kuten HELLO, Anna, kaikki se on tulosta tämä 1 merkki kerrallaan. 252 00:14:51,920 --> 00:14:54,010 >> Joten siellä mahdollisuus tarkentaminen täällä. 253 00:14:54,010 --> 00:14:58,150 Olen sellainen tehdä enemmän työtä, vaikka se on enemmän selvää ehkä näin, kuin tarpeen. 254 00:14:58,150 --> 00:15:03,270 Mitkä koodiriviä täällä voin varmaan heittää pois kokonaan? Joo. 255 00:15:03,270 --> 00:15:08,290 Linjaa 24 pitkin. Linjalla 24 Olen julistamisesta muuttuja c. 256 00:15:08,290 --> 00:15:14,320 Olen tallennetaan i luonnetta s siinä, mutta sitten olen käyttäen C täällä. 257 00:15:14,320 --> 00:15:20,160 Joten olen käyttäen C, joten minusta tuntuu etten voi vain heittää linja 24 pois. 258 00:15:20,160 --> 00:15:23,850 [Äänetön opiskelija kommentti] >> Aivan. 259 00:15:23,850 --> 00:15:26,240 Joten kun se tulee puhumaan suunnittelusta ohjelmien 260 00:15:26,240 --> 00:15:30,740 huomata tämän hieman yksinkertaistaminen koodin, joka on aivan yhtä luettavissa, 261 00:15:30,740 --> 00:15:34,680 mutta ymmärtää, että s on vain muuttuja, sen tietotyyppi on joukko, 262 00:15:34,680 --> 00:15:38,610 niin s [i] vain menossa heti takaisin sinulle i merkin merkkijonon. 263 00:15:38,610 --> 00:15:40,620 Ja jos haluat tulostaa sen, että on hieno. 264 00:15:40,620 --> 00:15:43,680 Sinun täytyy vain käyttää% c koska et ole tulostus merkkijono, 265 00:15:43,680 --> 00:15:48,520 olet tulostaa merkin merkkijono, ja tämäkin on vaikutusta tulostaa nnen merkin. 266 00:15:48,520 --> 00:15:51,390 Ja muistuttaa ainoa ero oikeastaan ​​viime viikolla käyttämällä printf 267 00:15:51,390 --> 00:15:54,220 on, että taas viikon aikaisemmin tekisimme jotain erittäin yksinkertaista 268 00:15:54,220 --> 00:15:58,510 kuten% s paikkamerkki sitten nimen merkkijono täällä, 269 00:15:58,510 --> 00:16:01,190 Nyt olemme sukeltamassa hieman syvemmälle alla huppu ja sanoi, 270 00:16:01,190 --> 00:16:06,090 älä tulosta merkkijono, tulostaa yhden merkin siinä. 271 00:16:06,090 --> 00:16:10,570 >> Joten voimme tehdä jotain hieman erilaista täällä, koska siellä on 1 muu - ei bugi 272 00:16:10,570 --> 00:16:14,090 koska tämä ohjelma on oikea, mutta olen tekemässä jotain typerää 273 00:16:14,090 --> 00:16:16,810 että mainitsin lyhyesti keskiviikkona. 274 00:16:16,810 --> 00:16:22,680 Mutta ajattelen, miten tämä ohjelman suunnittelussa voidaan parantaa entisestään? Joo. 275 00:16:22,680 --> 00:16:28,280 [Äänetön opiskelija vastausta] >> Voi hyvä. 276 00:16:28,280 --> 00:16:32,120 Niin muistaa, että otimme käyttöön toinen muuttuja nimeltään n viimeisen kerran, 277 00:16:32,120 --> 00:16:34,850 joka näyttää ristiriidassa itsemme, koska minun tavoite sekunti sitten 278 00:16:34,850 --> 00:16:37,380 oli vain heittää pois muuttuja tarpeettomana, 279 00:16:37,380 --> 00:16:40,700 mutta muistuttaa, että keskiviikkona me todella teki tämän. 280 00:16:40,700 --> 00:16:46,170 Muutin varten silmukan oikeastaan ​​pilkkua täällä, niin n = strlen, 281 00:16:46,170 --> 00:16:52,120 ja sitten tänne tein i 00:16:57,660 Mikä on perustavanlaatuinen vahvistus, että olen saavuttaa muuttamalla minun alustus tähän 283 00:16:57,660 --> 00:17:01,590 ja tilani tämän nyt? >> [Äänetön opiskelijan vastausta] >> Aivan. 284 00:17:01,590 --> 00:17:06,170 En muistuttaa strlen uudestaan ​​ja uudestaan ​​ja uudestaan, koska muistuttaa kuinka varten silmukka toimii. 285 00:17:06,170 --> 00:17:08,790 Vaikka he alkavat saada monimutkaisempia näköinen, 286 00:17:08,790 --> 00:17:12,480 muistuttaa, että asia ennen ensimmäistä puolipiste on alustus, joka tapahtuu kerran. 287 00:17:12,480 --> 00:17:14,359 Ehto, vaikka on keskellä, 288 00:17:14,359 --> 00:17:17,710 ja tämä saa tarkistetaan aina, kun läpi silmukan. 289 00:17:17,710 --> 00:17:22,420 >> Joten se on tavallaan typerää kysyä tietokoneen saman kysymyksen uudestaan ​​ja uudestaan ​​- 290 00:17:22,420 --> 00:17:25,920 Mikä pituus HELLO? Mikä pituus HELLO? Mikä pituus Haloo? - 291 00:17:25,920 --> 00:17:29,740 sillä kuten näemme tänään ja keskiviikkona, tämä on ehdottomasti vie aikaa, 292 00:17:29,740 --> 00:17:34,320 ja se ei ole kovin hyvä käyttää aikaa, koska selvittää pituus merkkijonon 293 00:17:34,320 --> 00:17:37,030 todella vie hieman vaivaa. 294 00:17:37,030 --> 00:17:39,760 Se ei ole hetkellinen, koska se on joissakin kielissä. 295 00:17:39,760 --> 00:17:43,920 Joten muuttamalla tätä n, hinta olen maksaa mitä? 296 00:17:43,920 --> 00:17:45,640 Näemme kauppa-off täällä. 297 00:17:45,640 --> 00:17:49,460 Voin säästää aikaa ei pyydä samalla pirun kysymykseen uudestaan ​​ja uudestaan, 298 00:17:49,460 --> 00:17:51,740 mutta se tulee maksamaan minulle jotain, joka on mitä? 299 00:17:51,740 --> 00:17:55,050 >> [Opiskelija] menetät jonkin verran muistia. >> Aivan. Se tulee maksamaan minulle muistia. 300 00:17:55,050 --> 00:17:56,670 Joten tässä tapauksessa se maksaa minulle mitä? 301 00:17:56,670 --> 00:18:01,530 Toinen 32 bittiä koska n on vain int, kuten ehdotetun sanan int täällä. 302 00:18:01,530 --> 00:18:03,300 Mutta onko se ok? 303 00:18:03,300 --> 00:18:05,800 Suoraan sanottuna, se on luultavasti okei, koska jos ajattelee sitä, 304 00:18:05,800 --> 00:18:09,030 pidempi merkkijono on, sitä enemmän aikaa aion tuhlata 305 00:18:09,030 --> 00:18:11,920 koska strlen on menossa kutsutaan uudestaan ​​ja uudestaan ​​ja uudestaan 306 00:18:11,920 --> 00:18:13,520 jokaisen iterointia silmukan. 307 00:18:13,520 --> 00:18:18,070 Ja näinä päivinä, Mac on 2 gigan RAM, näinä päivinä 4 gigan RAM joskus. 308 00:18:18,070 --> 00:18:22,420 Luulen varaa 4 niistä tavua todella nopeuttaa asioita. 309 00:18:22,420 --> 00:18:26,590 Mutta tämä tulee olemaan kompromissi ja teema todella ohjelmatyössä ja tietotekniikassa 310 00:18:26,590 --> 00:18:28,320 ja koskaan saada mitään ilmaiseksi. 311 00:18:28,320 --> 00:18:32,880 Jos haluat parantaa jotain, joudut maksamaan sitä vastoin jotenkin. 312 00:18:32,880 --> 00:18:35,880 Space ajan funktiona tässä tapauksessa. 313 00:18:35,880 --> 00:18:40,700 >> Joten tämä kaikki johtaa ylös kohti jotain kryptisiä tällaista, 314 00:18:40,700 --> 00:18:44,070 joka, kuten luultavasti tajunnut jo oikeastaan ​​kertoo? 315 00:18:44,070 --> 00:18:47,420 [Äänetön opiskelija vastausta] >> Joo, joten tämä on, muista juoda Ovaltine, 316 00:18:47,420 --> 00:18:52,490 todellisuudessa käytetään algoritmia kutsutaan ROT13, ROT 1-3, 317 00:18:52,490 --> 00:18:55,500 mikä tarkoittaa vain pyörivät kaikki kirjaimet 13 paikkaa, 318 00:18:55,500 --> 00:18:58,720 mikä tarkoittaa kestää ja sitten lisätä 13 sitä ja mennä piste, piste, piste 319 00:18:58,720 --> 00:19:04,640 aina 13. kirjain pois, tee sama asia B ja C sekä D ja niin edelleen. 320 00:19:04,640 --> 00:19:10,850 Ja niin jos me todella muuntaa tämän tästä käyttäen siirtyminen 13 paikkaa, 321 00:19:10,850 --> 00:19:14,580 Palaamme mitä pikku Ralphie oli, joka oli, muista juoda Ovaltine. 322 00:19:14,580 --> 00:19:18,160 Mutta nyt ongelmaan asetettu 2, Standard Edition ainakin 323 00:19:18,160 --> 00:19:21,680 olet sellainen tehdä tämän salakoodausohjelmia itse, 324 00:19:21,680 --> 00:19:25,990 ja meidän on jotenkin otettava tuotantopanosten kuten tämä ja salata sen tai purkaa sitä. 325 00:19:25,990 --> 00:19:29,850 >> Joten mikä näistä perusteista tavallaan johtaa meidät tätä mahdollisuutta? 326 00:19:29,850 --> 00:19:32,650 Katsotaanpa katsomaan tätä kolmatta esimerkki tästä. 327 00:19:32,650 --> 00:19:38,430 Ensinnäkin sitä kutsutaan ASCII. Mitä ASCII palata? 328 00:19:38,430 --> 00:19:40,460 American Standard Code for Information Interchange, 329 00:19:40,460 --> 00:19:43,850 joka on todella pitkä tapa sanoa mitä? Mikä on ASCII? 330 00:19:43,850 --> 00:19:47,890 [Äänetön opiskelija vastausta] >> Mikä tuo on? >> [Opiskelija] Merkistö. >> Merkistö. 331 00:19:47,890 --> 00:19:51,390 Se vain karttoja numeroita kirjaimia koska maailmassa on standardoitu 332 00:19:51,390 --> 00:19:55,380 mitä numerot ovat mitä kirjeet jotta me kaikki voimme käyttää tietokoneita 333 00:19:55,380 --> 00:19:59,340 ja meidän ohjelmat kaikki ovat vain yhteensopivia, kun se tulee tulostaa asioita ruudulla. 334 00:19:59,340 --> 00:20:04,680 Niin muistaa, että 65 tapahtuu edustamaan, 97 sattuu edustamaan pieniksi. 335 00:20:04,680 --> 00:20:08,510 Ja niin tämä yksinkertainen ohjelma täältä ASCII on hyödyntää tätä seikkaa - 336 00:20:08,510 --> 00:20:12,770 että maailma tietää, että pääoma on 65 - ja se vain tulostaa kartoitus. 337 00:20:12,770 --> 00:20:16,320 >> Joten ennen kuin sukeltaa tähän koodia, anna minun vaan avaa terminaali-ikkuna. 338 00:20:16,320 --> 00:20:21,550 Anna minun mennä eteenpäin ja tehdä ASCII, ja sitten mennään vain ajaa tätä asiaa vain pilata lähdön. 339 00:20:21,550 --> 00:20:25,960 Ja se vain tekee tämän: todella iso kaavion että vain kertoo minulle kaikki eri koodien 340 00:20:25,960 --> 00:20:27,950 Kaikkien eri kirjaimet. 341 00:20:27,950 --> 00:20:32,100 Joten erittäin yksinkertainen ohjelma, mutta en tarvitse kova koodi niitä 52 riviä lähtö: 342 00:20:32,100 --> 00:20:34,860 26 isot, 26 pieniä. 343 00:20:34,860 --> 00:20:37,790 Sen sijaan tein tämän ohjelmallisesti kanssa pari silmukoita. 344 00:20:37,790 --> 00:20:39,720 Huomaa mitä tein täällä. 345 00:20:39,720 --> 00:20:44,790 Olen Iteroidun alkaen i on 65 jopa 65 + 26, koska halusin tulostaa 26 kirjainta 346 00:20:44,790 --> 00:20:49,860 in Englanti aakkoset, i + + jokaisen iteraation, ja nyt huomaa tätä uudestaan. 347 00:20:49,860 --> 00:20:52,540 Se toistumisen ystävämme tyypittely 348 00:20:52,540 --> 00:20:54,620 jolloin voit muuntaa 1 tietotyypin toiseen 349 00:20:54,620 --> 00:20:57,480 sillä mitä haluan tehdä kyseistä ohjelmaa? 350 00:20:57,480 --> 00:21:02,650 Haluan laskea numeerisesti koska niin minä kasvoin laskenta - 65, 66, 67, ja niin edelleen - 351 00:21:02,650 --> 00:21:04,420 mutta en halua tulostaa vain numeroita. 352 00:21:04,420 --> 00:21:08,030 Haluan tulostaa kirjeen seuraa numero. 353 00:21:08,030 --> 00:21:18,640 Haluan tulostaa: numero, B: numero, mutta en voi tehdä tätä täsmälleen sama muuttuja. 354 00:21:18,640 --> 00:21:21,630 Olen siis tulostaa% c paikkamerkkinä merkin, 355 00:21:21,630 --> 00:21:25,080 % D paikkamerkkinä numero tai numero. 356 00:21:25,080 --> 00:21:27,750 Sitten mitä minä kytken niitä 2 paikkamerkit? 357 00:21:27,750 --> 00:21:33,960 Olen ensimmäinen plug in luonteeltaan vastaava i, ja sitten tulostaa i. itse. 358 00:21:33,960 --> 00:21:36,400 >> Joten huomaa tämäkin toimii. 359 00:21:36,400 --> 00:21:39,320 Aivan kuten voin valettu float int 360 00:21:39,320 --> 00:21:41,750 Jotta siirtyä todellisen numeron kokonaisluku, 361 00:21:41,750 --> 00:21:46,100 täällä voin mennä INT char, joka on hieman outo - 362 00:21:46,100 --> 00:21:48,680 ei aivan kuvautuvat todellisen maailman - mutta tietokoneet 363 00:21:48,680 --> 00:21:51,140 char on vain numero alla huppu, 364 00:21:51,140 --> 00:21:53,590 joten olemme on aina niin selkeästi täällä tietokone, sanomalla, 365 00:21:53,590 --> 00:21:58,920 printf, tulostaa en 65, tulostaa sen sen numeerinen vastaava. 366 00:21:58,920 --> 00:22:02,110 Ja en näköjään teknisesti ei edes tarvitse tätä. 367 00:22:02,110 --> 00:22:05,020 Mitä tein hetki sitten nimenomaisesti valu 368 00:22:05,020 --> 00:22:08,760 määrittämällä mitä tietotyyppi haluan mennä ja. 369 00:22:08,760 --> 00:22:11,840 Mutta huomaa, että olen jo tämän Paikkamerkki% C 370 00:22:11,840 --> 00:22:14,930 ja tämä toinen% c paikkamerkki tässä. 371 00:22:14,930 --> 00:22:18,880 Vaikka tämä ei ole int, tietokone ymmärtää, että char, 372 00:22:18,880 --> 00:22:21,080 se on vain int alla huppu. 373 00:22:21,080 --> 00:22:25,100 >> Joten jos olen itse kääntää tämän ja uusintana ASCII-ohjelman 374 00:22:25,100 --> 00:22:31,210 huomaa silti vain toimii, koska tietokone tajuaa että tämä kirjeenvaihto. 375 00:22:31,210 --> 00:22:34,870 Nyt on tärkeämpää tehdä nimenomainen valu maailmassa kelluu ints 376 00:22:34,870 --> 00:22:37,460 koska olet todella tehdä laskettu päätös: 377 00:22:37,460 --> 00:22:40,140 heittää pois kaiken desimaalipilkun jälkeen. 378 00:22:40,140 --> 00:22:44,990 Siellä oikeastaan ​​mitään heittää pois, koska merkki on vain numero, 379 00:22:44,990 --> 00:22:48,220 ja merkkijono on vain joukko merkkiä. 380 00:22:48,220 --> 00:22:52,530 Joten kun se tulee aika täytäntöön joitakin salaus tai salauksen, 381 00:22:52,530 --> 00:22:56,770 miten on mahdollista, että voimme todella kääntää jotain tällaista hölynpölyä, 382 00:22:56,770 --> 00:22:58,670 Muista juoda Ovaltine? 383 00:22:58,670 --> 00:23:02,700 Mitä jos me tiedämme nyt - Otetaan kuin oletus - että avain, 384 00:23:02,700 --> 00:23:08,010 numero että olemme pyörivä kaikki nämä kirjeistä, on numero 13? 385 00:23:08,010 --> 00:23:11,800 Niinpä menimme kirjeestä B aina O alussa virkkeen 386 00:23:11,800 --> 00:23:14,710 Muista juoda Ovaltine, koska jos en B 387 00:23:14,710 --> 00:23:19,600 ja sitten menen C, D, E, F, G, H, I, J, K, L, M, N, O, 388 00:23:19,600 --> 00:23:23,760 Siksi salaus kirjain B tulee O 389 00:23:23,760 --> 00:23:26,570 koska olen vain lisännyt 13 siihen. 390 00:23:26,570 --> 00:23:33,460 >> Joten jos haluan purkaa tätä, olen lähinnä on otettava O ja sitten vähentää 13 siitä. 391 00:23:33,460 --> 00:23:36,880 Tai suoraan sanottuna, koska siellä on 26 kirjaimia, tämä on ihanan symmetrinen, 392 00:23:36,880 --> 00:23:41,260 Voimme myös vain lisätä 13 ja saamme takaisin kirjaimella B. 393 00:23:41,260 --> 00:23:44,290 Mutta miten edetä täytäntöön jotain tämän Caesar 394 00:23:44,290 --> 00:23:46,600 tai oikeastaan ​​manipuloimalla merkkijonoja yleensä? 395 00:23:46,600 --> 00:23:51,380 Jos kirjain B on mitä numero? 396 00:23:51,380 --> 00:23:55,290 Mikä kirjain B? Joten se 66, eikö? 397 00:23:55,290 --> 00:23:59,220 Joten jos kirjain on 65 ja kirjain B 66, 398 00:23:59,220 --> 00:24:03,940 niin 66, kaikki minun täytyy tehdä, on lisätä 13 sitä, ja tämä antaa minulle 79. 399 00:24:03,940 --> 00:24:09,150 Ja jos menemme meidän pikku lunttilappu, 79 jopa karttoja O. 400 00:24:09,150 --> 00:24:11,290 >> Mutta on hieman nurkassa tässä tapauksessa. 401 00:24:11,290 --> 00:24:15,170 Mikä on, sanovat, kirjain Z? 402 00:24:15,170 --> 00:24:20,180 Jos teemme 66 + 25 saada aina aakkosten loppuun, me olemme 91. 403 00:24:20,180 --> 00:24:24,520 91 + 13 antaa minulle 104, ja arvaa mitä? 404 00:24:24,520 --> 00:24:29,200 104 ei yhtä iso kirjain. 405 00:24:29,200 --> 00:24:31,610 Mennään takaisin hieman lunttilappua täällä. 406 00:24:31,610 --> 00:24:38,070 Jos minä uusintana tämän ohjelman laitteeseen, huomaa, että 104, jos menen takaisin pääteikkunaa 407 00:24:38,070 --> 00:24:41,800 104 on ilmeisesti pieni h.. 408 00:24:41,800 --> 00:24:46,400 Tarvitsemme siis joitakin keskeisiä temppu tässä varmistamiseksi, että kun aloitamme klo Z 409 00:24:46,400 --> 00:24:50,260 ja lisäämme 13 sitä emme halua vain pitää taonta eteenpäin isompia ja isompia numeroita. 410 00:24:50,260 --> 00:24:52,600 Mitä me todella haluamme tehdä? 411 00:24:52,600 --> 00:24:54,570 Haluat Ulottumamitan. 412 00:24:54,570 --> 00:25:00,250 >> Joten se kääntyy pois, kuten olet nähnyt varmaan jaksossa nyt tai ongelma joukon spec itse 413 00:25:00,250 --> 00:25:05,730 tajusi, että tämä toinen operaattori C, joka myös on prosenttimerkki, 414 00:25:05,730 --> 00:25:11,020 mutta että olemme käyttäneet% tästä määrittää paikkamerkin, 415 00:25:11,020 --> 00:25:15,420 tiedämme, että erityisesti ongelma-sarja 2, siellä on myös jotain tällaista: 416 00:25:15,420 --> 00:25:18,990 int x = y% z. 417 00:25:18,990 --> 00:25:22,770 Haluan vain esittää tämän hyvin yleinen muoto tästä. 418 00:25:22,770 --> 00:25:25,580 Prosenttia tarkoittaa mitä ohjelmointikieli? >> [Opiskelija] Modulo. 419 00:25:25,580 --> 00:25:28,790 Modulo, mikä on hieno tapa sanoa loput. 420 00:25:28,790 --> 00:25:31,620 Vaikka siellä on hieman eroa määritelmää siellä, 421 00:25:31,620 --> 00:25:37,210 Tämä tarkoittaa jakaa y z, mutta älä palauta tähän jakoon; 422 00:25:37,210 --> 00:25:39,650 sijaan, palauta loput. 423 00:25:39,650 --> 00:25:47,390 >> Joten jos y on todella 3 ja z on todella 2, 3 jaettuna 2 on 1, jossa on jäljellä 1, 424 00:25:47,390 --> 00:25:51,550 niin mitä x oikeastaan ​​yhtä tässä skenaariossa? 1. 425 00:25:51,550 --> 00:25:54,540 Tämä on niin yksinkertainen, matalan tason idea. 426 00:25:54,540 --> 00:25:56,480 Se vie vähän aikaa saada mieltäsi kääritty sen ympärille 427 00:25:56,480 --> 00:25:58,740 koska se on todennäköisesti ollut jonkin aikaa kun joutui jopa välitä jakojäännöksiä 428 00:25:58,740 --> 00:26:01,160 ja todella käyttää niitä jotain määrätietoinen, 429 00:26:01,160 --> 00:26:05,290 mutta tässä tapauksessa yksinkertainen tosiasia, että voit mennä iso numero kuin 3 430 00:26:05,290 --> 00:26:08,920 on suhteellisen pieni luku, kuten 2, ja sen jälkeen kietoa tehokkaasti 431 00:26:08,920 --> 00:26:14,160 käyttämällä loput pienempään arvoon kuin 1 tulee olemaan korvaamaton temppu 432 00:26:14,160 --> 00:26:17,690 että voimme käyttää sekä jotain Caesarin ja tämä toinen juttu Vigenere 433 00:26:17,690 --> 00:26:22,240 ongelmatilanteissa asetettu 2, mutta tämä tulee olemaan toistuva temppu koko lukukauden. 434 00:26:22,240 --> 00:26:24,880 Tämä yksinkertainen, yksinkertainen ajatus vain ottaa loput yleensä 435 00:26:24,880 --> 00:26:26,530 on menossa, jotta voimme kietoa. 436 00:26:26,530 --> 00:26:31,140 Ja kun alamme pelaa enemmän paneelit aloitamme pelaa enemmän muistia itse, 437 00:26:31,140 --> 00:26:35,800 tämä on tulossa enemmän ja enemmän voimakas temppu. 438 00:26:35,800 --> 00:26:43,420 >> Joten kysyttävää sitten ASCII tai edustus merkkijonoja taulukot? 439 00:26:43,420 --> 00:26:47,430 Ja otamme sen 1 pykälän eteenpäin. Joo. 440 00:26:47,430 --> 00:26:52,350 [Äänetön opiskelija kysymys] >> Hyvä kysymys. 441 00:26:52,350 --> 00:26:55,370 Mitä se tarkoittaa, kun muuttuja on tähti edessä? 442 00:26:55,370 --> 00:26:57,720 Saanen lykätä vastaamalla että yksityiskohtaisesti, 443 00:26:57,720 --> 00:27:00,100 mutta joka viittaa viestiin tunnetaan osoitin. 444 00:27:00,100 --> 00:27:03,440 Osoittimet on tekemistä muistia, ja olemme oikeastaan ​​tänään 445 00:27:03,440 --> 00:27:06,330 ottaa ensimmäinen askel kohti tätä keskustelua, 446 00:27:06,330 --> 00:27:08,600 mutta nyt haluan teeskennellä, että tähti ei ole olemassa 447 00:27:08,600 --> 00:27:15,380 ja jatkamme soittamalla jouset jouset sijasta char *, 448 00:27:15,380 --> 00:27:19,530 joka olet luultavasti nähnyt ennen ja laitan ruudulla vain hetki teaser. 449 00:27:19,530 --> 00:27:23,010 Joten me palaamme, että siten tarkemmin kuin moni varmasti sinulle. 450 00:27:23,010 --> 00:27:25,760 Lopulta, ei tänään. Joo. 451 00:27:25,760 --> 00:27:42,810 >> [Äänetön opiskelija kysymys] 452 00:27:42,810 --> 00:27:47,080 Missä yhteydessä sinun on annettava merkki merkki? >> [Opiskelija] Joo. 453 00:27:47,080 --> 00:27:52,130 Joten oletusarvoisesti, kun et laita + vain positiivisia lukuja oletetaan. 454 00:27:52,130 --> 00:27:55,390 Joten jos vain kirjoittaa numero 1, se positiivista 1. 455 00:27:55,390 --> 00:27:57,710 Jos todella haluat määrittää kieltämistä arvon, 456 00:27:57,710 --> 00:28:01,060 sinun kirjaimellisesti täytyy tehdä -1 näppäimistöllä. 457 00:28:01,060 --> 00:28:20,440 Mutta tämä luultavasti ei ole kysymys. >> [Äänetön opiskelijan vastausta] 458 00:28:20,440 --> 00:28:22,200 >> Hyvä kysymys. Okei. 459 00:28:22,200 --> 00:28:24,970 Joten tämä on tehtävä, ymmärtääkseni, jonkinlainen bug juoksit 460 00:28:24,970 --> 00:28:27,640 koska olit muuntaa kokonaisluvun merkki, 461 00:28:27,640 --> 00:28:29,780 mutta jotenkin negatiivisuus sai mukana, 462 00:28:29,780 --> 00:28:32,380 ja niin hahmo vain tuli ulos munged jotenkin. 463 00:28:32,380 --> 00:28:36,710 Joten nyt haluan pelkistettyjen hieman kunnes palaamme tällaista aihetta. 464 00:28:36,710 --> 00:28:39,570 Nyt ajatella asioita tällä tavalla - ja tämä on yksinkertaistava. 465 00:28:39,570 --> 00:28:43,500 Mutta maailmassa kokonaisluku, sinulla kuinka monta bittiä käytettävissänne? 466 00:28:43,500 --> 00:28:45,190 Sinulla on 32 bittiä. 467 00:28:45,190 --> 00:28:49,030 Ja tähän mennessä olemme puhuneet kokonaismäärä kokonaislukuja voit siis edustaa 468 00:28:49,030 --> 00:28:52,430 on noin 4 miljardia euroa, koska sinulla on 32 bittiä, 469 00:28:52,430 --> 00:28:55,100 niin se on 2 32, niin se on noin 4 miljardia euroa. 470 00:28:55,100 --> 00:28:58,810 Mutta näimme viikko tai 2 sitten, että et todellakaan ole eri numerot 471 00:28:58,810 --> 00:29:01,240 0 on enintään 4 miljardia euroa. 472 00:29:01,240 --> 00:29:06,340 Alue sen sijaan menee noin negatiivinen 2000000000 positiiviseen 2000000000. 473 00:29:06,340 --> 00:29:10,990 Mutta tämä sitten herää kysymys, miten te edustatte käsite negatiivisen 2000000000 474 00:29:10,990 --> 00:29:13,260 saati negatiivinen 1? 475 00:29:13,260 --> 00:29:17,960 Nyt voimme pelkistettyjen ja sanoa, että aiomme käyttää vasemmanpuoleisinta bit 476 00:29:17,960 --> 00:29:22,380 näistä 32 bittiä, ja jos se on 1 se negatiivinen luku, 477 00:29:22,380 --> 00:29:25,090 ja jos se on 0 se positiivinen numero. 478 00:29:25,090 --> 00:29:28,570 Ongelma, että yksinkertaistettu esitys negatiivisia lukuja 479 00:29:28,570 --> 00:29:33,700 että jos tietoisesti olla fiksu ja yrittää muuntaa merkin numero 480 00:29:33,700 --> 00:29:37,190 tai päinvastoin, ettei ole sellaista asiaa kuin negatiivinen merkki. 481 00:29:37,190 --> 00:29:42,550 Maailmassa ASCII, joka käyttää vain 8 bittiä, kaikki 8 näiden bittien asia, 482 00:29:42,550 --> 00:29:46,810 ja vasemmanpuoleisin bitti ei ole mitään tekemistä negatiivisuus. 483 00:29:46,810 --> 00:29:49,670 Ja vain olla selkeä, kun sanon vasemmanpuoleisin bittiä, 484 00:29:49,670 --> 00:29:54,610 muistuttaa, että kun teimme osamme liittyviä esimerkkejä ensimmäisellä viikolla 485 00:29:54,610 --> 00:30:02,570 Muistutan, että olemme tehneet asioita, kuten 1001101, jotain tällaista. 486 00:30:02,570 --> 00:30:07,210 Kun sanon vasemmanpuoleisin bitti, juuri kirjaimellisesti tarkoita 1 että kirjoitat aina yli vasemmalle. 487 00:30:07,210 --> 00:30:11,910 Niinpä maailman merkkejä ei ole käsite negatiivisuutta, 488 00:30:11,910 --> 00:30:16,360 jotta vasemmanpuoleisinta vähän todella on jotain tekemistä ASCII, mitään tekemistä negatiivisuus. 489 00:30:16,360 --> 00:30:19,390 >> Joten se kuulostaa - ja ulos kontekstista on vaikea vastata tarkasti - 490 00:30:19,390 --> 00:30:25,840 mutta jotenkin, koodi oli hämmentävää, että vasemmanpuoleisin bitti edustavan negatiivinen arvo 491 00:30:25,840 --> 00:30:29,160 kun se todella oli osa merkin osalta. 492 00:30:29,160 --> 00:30:32,250 Ja vielä, olen oversimplifying koska tietokoneet todella tehdä jotain hieman harrastaja 493 00:30:32,250 --> 00:30:37,080 kuin vain muuttamalla se vasemmanpuoleisin bitti on 1, negatiivinen merkki vs. 0. 494 00:30:37,080 --> 00:30:41,270 He sen sijaan, jos olet kiinnostunut Google käyttää jotain tyypillisesti kutsutaan 2 komplementti, 495 00:30:41,270 --> 00:30:43,830 joka on hieman kehittyneempi toimintamalli, 496 00:30:43,830 --> 00:30:45,490 mutta idea on lopulta sama. 497 00:30:45,490 --> 00:30:50,530 >> Eli lyhyesti sanottuna, se oli tekemistä sen kanssa, että olit hierovat numeron merkki 498 00:30:50,530 --> 00:30:53,750 tai päinvastoin, mutta koodi ei tietoinen siitä 499 00:30:53,750 --> 00:30:56,510 että 1 näistä biteistä ollut merkitystä numeerinen maailmassa. 500 00:30:56,510 --> 00:30:59,940 Se ei tapahtunut merkki maailmassa. 501 00:30:59,940 --> 00:31:04,270 Mutta se kuulostaa korjasit, jolloin moot nyt. Muut kysymykset. 502 00:31:06,030 --> 00:31:07,110 Okei. 503 00:31:07,110 --> 00:31:11,560 Niin tähän mennessä kaikki ohjelmat olemme kirjoittaneet ottaneet tulo ehkä käyttäjältä 504 00:31:11,560 --> 00:31:14,330 muodossa toimintoja, kuten GetInt, GetString, 505 00:31:14,330 --> 00:31:16,990 tai jos olet lukenut eteenpäin useita kirjoja tai verkossa viittauksia, 506 00:31:16,990 --> 00:31:21,390 olet itse saattanut käyttää toimintoja kuten scanf jotka suoraan sanottuna käytämme CS50 kirjastossa. 507 00:31:21,390 --> 00:31:25,370 Mutta viikon tai 2, me todellakin näyttää, miten CS50 kirjasto toteutetaan 508 00:31:25,370 --> 00:31:27,890 jotta voimme ottaa ne apupyörät pois kokonaan. 509 00:31:27,890 --> 00:31:31,340 >> Mutta se muuttuu siellä toinenkin tapa saada käyttäjältä syöte. 510 00:31:31,340 --> 00:31:34,670 Itse asiassa olemme itse ovat käyttäneet komentoriviargumentteja 511 00:31:34,670 --> 00:31:36,500 muutaman viikon ajan. 512 00:31:36,500 --> 00:31:41,150 Joka kerta olemme juosta clang tai olemme suorita make, 513 00:31:41,150 --> 00:31:45,050 emme ole juuri kirjoittanut kalahtaa, Anna, emme ole kirjoittanut tehdä, Enter. 514 00:31:45,050 --> 00:31:49,340 Mitä olemme yleensä kirjoitettu sanan clang meidän terminaalin ikkunoita nopeasti? 515 00:31:51,110 --> 00:31:52,900 [Opiskelija] tiedostonimen. >> Tiedoston nimi, eikö? 516 00:31:52,900 --> 00:31:57,560 Hello.c tai mario.c tai mitä asiaa tiedoston nimi on. 517 00:31:57,560 --> 00:32:01,910 Ja siinä mielessä, mitä olet oikeasti tehnyt on olet vaikuttanut käyttäytymiseen clang 518 00:32:01,910 --> 00:32:05,750 koska varmasti ihmiset kirjoittivat clang ei ollut aavistustakaan siitä, että pieni vanha olet 519 00:32:05,750 --> 00:32:08,890 aikoi kirjoittaa ohjelma nimeltä mario.c vuotta myöhemmin. 520 00:32:08,890 --> 00:32:13,150 Joten sinulla oli jotenkin vaikuttaa käyttäytymiseen kyseisen ohjelman, 521 00:32:13,150 --> 00:32:18,140 ja että ohjelma clang oli kirjoitettu siten, että se voi hyväksyä syötettä 522 00:32:18,140 --> 00:32:23,480 lisäämällä sanat kehote ennen käyttäjän osumia Enter. 523 00:32:23,480 --> 00:32:27,860 >> Joten näyttää siltä, ​​että jonkin aikaa olemme julistaa lähes kaikki ohjelmat 524 00:32:27,860 --> 00:32:32,840 aloittaa näin - int main (void) - ja sitten olemme menneet eteenpäin 525 00:32:32,840 --> 00:32:35,110 ja alkoi kirjoittaa meidän koodia. 526 00:32:35,110 --> 00:32:37,910 Ja meillä saattaa olla joitakin teräviä sisältää yläosassa tiedoston, 527 00:32:37,910 --> 00:32:40,660 mutta lähes kaikki ohjelmat tähän mennessä on aloitettu tämän 528 00:32:40,660 --> 00:32:44,200 vaikka olet ehkä nähnyt jaksossa, kirjoja, online-viittaukset 529 00:32:44,200 --> 00:32:46,570 että tämä ei itse asiassa tarvitse olla mitätön. 530 00:32:46,570 --> 00:32:55,820 Toinen laillisena tämä ottaa on int argc ja string argv []. 531 00:32:55,820 --> 00:32:57,500 Mitä nyt on tämä mikä? 532 00:32:57,500 --> 00:33:01,320 On käynyt ilmi, että argc, mikä on ihmisen yleissopimus - tätä voidaan kutsua foo- 533 00:33:01,320 --> 00:33:03,710 mutta se olisi vain paljon epäselvempi lukijoille - 534 00:33:03,710 --> 00:33:09,330 argc juuri on argumentti toimintoa kutsutaan pää, joka edustaa mitä? 535 00:33:09,330 --> 00:33:12,450 Mitä argc seisomaan niille tuttuja? 536 00:33:12,450 --> 00:33:14,980 >> [Äänetön opiskelija vastausta] >> Joo, useita väitteitä tai väitteitä count. 537 00:33:14,980 --> 00:33:16,510 Se on niin yksinkertaista. 538 00:33:16,510 --> 00:33:19,160 Kuinka monta argumenttia siirretty tähän ohjelmaan? 539 00:33:19,160 --> 00:33:20,630 Mitä se tarkoittaa? 540 00:33:20,630 --> 00:33:27,090 Jos komentorivillä olen juossut jotain tällaista - clang mario.c-- 541 00:33:27,090 --> 00:33:35,440 argc kun Enter aikoo ottaa arvosta, hieman erehdyttävästi, 2. 542 00:33:35,440 --> 00:33:40,150 Joten näyttää siltä, ​​että argc on argumentti määrä, 543 00:33:40,150 --> 00:33:46,280 mutta historiallisista syistä, ohjelman nimi itse kuuluu, että count. 544 00:33:46,280 --> 00:33:51,950 Joten argc on 2, kun kirjoitin clang mario.c. 545 00:33:51,950 --> 00:33:54,290 Mitä argv sisältää? 546 00:33:54,290 --> 00:33:57,020 Ensinnäkin, argv näyttää merkkijonon, mutta ei aivan 547 00:33:57,020 --> 00:33:59,310 koska kuten viime keskiviikkona ja sitäkin tänään, 548 00:33:59,310 --> 00:34:02,890 Näiden hakasuluissa tarkoittavat mitä? Tuo array. 549 00:34:02,890 --> 00:34:07,110 Ei ole numero array, ja että olisi järkevää intuitiivisesti 550 00:34:07,110 --> 00:34:10,790 koska ihmiset, jotka kirjoittivat clang vuotta sitten todellakaan ollut aavistustakaan 551 00:34:10,790 --> 00:34:16,300 kuinka monta sanaa meidän kaltaisemme olisivat kirjoita kehoitteeseen ennen Enteriä. 552 00:34:16,300 --> 00:34:22,280 >> Eli tässä tapauksessa täällä he ovat julistaneet toiminnon tärkeimmät kuin ottaa erilaisia ​​argumentteja, 553 00:34:22,280 --> 00:34:24,590 0 tai enemmän argumentteja. 554 00:34:24,590 --> 00:34:26,460 He eivät tiedä etukäteen, kuinka monta niitä on, 555 00:34:26,460 --> 00:34:29,690 joten ei tarkoituksellisesti määrä sisällä näitä hakasulkeissa. 556 00:34:29,690 --> 00:34:32,750 Mutta se, että hakasuluissa ovat siellä kertovat tietokoneen, 557 00:34:32,750 --> 00:34:34,639 odottavat array. 558 00:34:34,639 --> 00:34:37,489 Argv on vain lyhennetty merkintätapa argumentti vektori. 559 00:34:37,489 --> 00:34:39,889 Vektori on hieno tapa sanoa array, 560 00:34:39,889 --> 00:34:42,980 ja joukko on hieno tapa sanoa luetteloon tai kokoelmaan. 561 00:34:42,980 --> 00:34:47,360 Joten tämä tarkoittaa vain, että jos kirjoitat tärkein näin 562 00:34:47,360 --> 00:34:51,100 sijaan, kuten kuinka olemme tehneet sitä jo viimeiset pari viikkoa, 563 00:34:51,100 --> 00:34:54,699 ohjelma on nyt valta hyväksyä komentoriviargumentteja 564 00:34:54,699 --> 00:34:58,520 niin että ei enää sinun tarvitse kirjoittaa Mario ja paina sitten Enter- 565 00:34:58,520 --> 00:35:01,610 kirjoita numero kuinka monta lohkojen korkealle haluat pyramidin olla, 566 00:35:01,610 --> 00:35:03,100 sitten Enter uudelleen. 567 00:35:03,100 --> 00:35:07,720 Emme edes tarvitse käyttää GetString enää tai GetInt tai GetFloat että asiassa. 568 00:35:07,720 --> 00:35:12,370 Voimme vain odottaa käyttäjän koneella kirjoitettuna kehoitteeseen itse 569 00:35:12,370 --> 00:35:16,850 kuten kirjoittajat clang päättänyt, että olisi todella ärsyttävää ohjelma 570 00:35:16,850 --> 00:35:20,550 jos kääntää koodi ensin kirjoitetaan clang Enter, 571 00:35:20,550 --> 00:35:24,090 Sitten sanoimme käyttäjälle, kirjoita tiedoston nimi, jonka haluat kääntää, 572 00:35:24,090 --> 00:35:26,920 Sitten me kirjoita mario.c ja paina Enter. 573 00:35:26,920 --> 00:35:29,850 Mutta se mitä olemme tehneet meidän käyttäjien viimeisen parin viikon aikana. 574 00:35:29,850 --> 00:35:33,550 Käytämme GetString ja odotamme, kunnes ohjelma on käynnissä pyytämään niitä syöttää. 575 00:35:33,550 --> 00:35:36,710 Että ei enää tarvitse olla. 576 00:35:36,710 --> 00:35:41,160 >> Joten tässä esimerkki tästä, meillä on nyt merkkijono argv, 577 00:35:41,160 --> 00:35:43,390 ja tämäkin on yksinkertaistus, 578 00:35:43,390 --> 00:35:45,610 apupyörät, että tulee hyvin pian pois. 579 00:35:45,610 --> 00:35:50,860 Tämä on enemmän oikea tapa kirjoittaa tämän vaihtoehtoisen ilmoitus tärkeimmistä 580 00:35:50,860 --> 00:35:54,740 koska näyttää siltä, ​​että mitä pidämme kutsuvan merkkijono todella on tähti, 581 00:35:54,740 --> 00:35:58,440 tähti, sen todellinen määritelmä, mutta tämä vain näyttää monimutkaiselta, 582 00:35:58,440 --> 00:36:02,600 Se on hämmentävää aluksi, joten me yksinkertaistaa jota vain luoda synonyymi tapaisena 583 00:36:02,600 --> 00:36:09,340 vuonna CS50 kirjastossa kartat char * Tämän käyttäjäystävällisemmäksi sana merkkijono. 584 00:36:09,340 --> 00:36:13,180 >> Joten itse kokeilla tätä sitten. Anna minun mennä eteenpäin ja avata gedit täällä. 585 00:36:13,180 --> 00:36:17,010 Anna minun mennä eteenpäin ja avata argv 1. 586 00:36:17,010 --> 00:36:21,620 Tämä ohjelma ilmeisesti tulostaa argumentteja, mutta Englanti kannalta, 587 00:36:21,620 --> 00:36:26,290 katsomalla tämän koodin, mitä tämä tehdä tarkemmin? 588 00:36:26,290 --> 00:36:35,910 Jos minä kirjoita komento a.out foo bar, mitä saa painettu mustat ja valkoiset ikkuna? 589 00:36:35,910 --> 00:36:41,260 A.out foo bar, Enter. 590 00:36:43,120 --> 00:36:48,300 Menkää. Joo. >> [Äänetön opiskelijan vastausta] 591 00:36:48,300 --> 00:36:52,730 Hyvä. Joten a.out, uusi linja, foo, uusi rivi, baari, uusi rivi. 592 00:36:52,730 --> 00:36:54,980 Miksi on näin? Voimme varmasti vahvistaa vain hetken. 593 00:36:54,980 --> 00:36:56,940 Tämä on eräänlainen pörröinen koodirivin. 594 00:36:56,940 --> 00:36:59,560  Se vain tulostaa uuden rivin vain tehdä asioita kauniimpi ruudulla. 595 00:36:59,560 --> 00:37:03,730 Tämä on silmukka, joka on iteroimalla 0 on jopa argc, 596 00:37:03,730 --> 00:37:07,210 ja tämä on kasvattamalla jokaisen iteraation + +. 597 00:37:07,210 --> 00:37:12,270 Joten tämä sanoo nyt tulostaa merkkijonon, koska ymmärtää tämän% s. 598 00:37:12,270 --> 00:37:16,460 Argv [i] on melko sama idea kuin edellisessä esimerkissä. 599 00:37:16,460 --> 00:37:19,580 Kutsuimme muuttuja s, nyt sitä kutsutaan, mielivaltaisesti, argv. 600 00:37:19,580 --> 00:37:24,270 Tämä tarkoittaa tulosta nnen väitteen, joka oli kirjoitettu komentoriville, 601 00:37:24,270 --> 00:37:28,690 ja sitten kun tämä koko juttu on tehty, vain hyvä toimenpide tulosta toinen uusi rivi. 602 00:37:28,690 --> 00:37:31,600 >> Joten katsotaanpas tätä. Saanen avata terminaali-ikkunan. 603 00:37:31,600 --> 00:37:37,470 Saanen koota argv 1, ja nyt haluan ajaa argv 1, Anna. Hmm. Okei. 604 00:37:37,470 --> 00:37:40,850 Katsotaanpa juosta foo bar. Mielenkiintoista. Baz. 605 00:37:40,850 --> 00:37:42,640 Ja jos olet joskus miettinyt, miksi kirjoitan tätä, 606 00:37:42,640 --> 00:37:45,010 tämä on vain myös tyhmä tietojenkäsittelytieteen sopimusta. 607 00:37:45,010 --> 00:37:48,050 Maailma tarvitsee usein vain sanallista paikkamerkkejä sanoja. 608 00:37:48,050 --> 00:37:50,090 Joten jos haluat puhua joitakin yleisiä merkkijono, 609 00:37:50,090 --> 00:37:53,250 tietojenkäsittelyasiantuntijat vain tapana sanoa foo kun he tarvitsevat satunnainen sana, 610 00:37:53,250 --> 00:37:55,530 Sitten he sanovat bar, jos he tarvitsevat toinen satunnainen sana, 611 00:37:55,530 --> 00:37:59,100 Sitten he sanovat Baz jos he tarvitsevat kolmas sana, niin he sanovat qux jos he tarvitsevat neljäsosaa sana, 612 00:37:59,100 --> 00:38:01,520 ja sitten on valtava uskonnollinen keskustelu verkossa, mitä tulee sen jälkeen qux, 613 00:38:01,520 --> 00:38:04,940 joten voit Googlelle, että selvittää, mitä muut mielivaltaista sanan pitäisi olla. 614 00:38:04,940 --> 00:38:07,480 Mutta nämä ole merkitystä lainkaan, 615 00:38:07,480 --> 00:38:10,100 Vaikka foo bar, jos Google että tämä ei ole merkitystä, 616 00:38:10,100 --> 00:38:12,780 joka on osa etymologia tässä. 617 00:38:12,780 --> 00:38:17,550 >> Joten kaikki tämä tekee sitten tulostaa 1 näistä jouset riville. 618 00:38:17,550 --> 00:38:19,900 Joten jos olen sen sijaan kuitenkin halusi saada vähän harrastaja, 619 00:38:19,900 --> 00:38:22,550 Oletetaan että en halua tulostaa jokaisen merkkijonon kohti; 620 00:38:22,550 --> 00:38:26,220 Halusin tulostaa jokaisen hahmon jokaisen kielen lauseita. 621 00:38:26,220 --> 00:38:28,550 Miten voisin sen sijaan tehdä? 622 00:38:28,550 --> 00:38:33,720 Mitä minun pitää muuttaa tästä ohjelmasta, jos haluan tulostaa ei jokaista sanaa 623 00:38:33,720 --> 00:38:37,290 mutta haluan tulostaa jokaisen sanan kirjain kirjeellä, 624 00:38:37,290 --> 00:38:40,590 Sitten seuraava sana kirjain kirjeellä? 625 00:38:40,590 --> 00:38:43,650 Miten yhdistää nämä ideat tähän mennessä? Joo. 626 00:38:43,650 --> 00:38:47,390 [Opiskelija]% c. >> Selvä. Joten me jossain tarvitsemme% c. 627 00:38:47,390 --> 00:38:50,680 Hyvä, koska en halua tulostaa koko merkkijonoja, haluan tulostaa merkkiä. Mitä muuta? 628 00:38:50,680 --> 00:38:54,290 >> [Äänetön opiskelija vastausta] >> Mielenkiintoinen. 629 00:38:54,290 --> 00:38:56,860 Tarvitsemme siis tavallaan toisen ulottuvuuden täällä nyt 630 00:38:56,860 --> 00:39:02,300 koska ajattelevat argv kuin array, mutta se joukko merkkijonoja. 631 00:39:02,300 --> 00:39:07,170 Mutta kuten, kuten, 15 minuuttia sitten, mitä merkkijono? Se on erilaisia ​​merkkejä. 632 00:39:07,170 --> 00:39:12,320 Siis todella, argv on joukko erilaisia ​​merkkejä, 633 00:39:12,320 --> 00:39:14,870 joukko ryhmät merkkiä. 634 00:39:14,870 --> 00:39:19,170 Joten näyttää siltä, ​​että voimme käyttää vain lisää hakasulje muistiinpanoja. Joten tehdään tämä. 635 00:39:19,170 --> 00:39:23,650 Kun alkuun Tämän silmukan rivillä 19, aion toistaa mistä olen aina argc, 636 00:39:23,650 --> 00:39:25,760 mutta sitten aion tehdä tämän seuraavasti: 637 00:39:25,760 --> 00:39:27,580 sillä - En voi käyttää nyt. 638 00:39:27,580 --> 00:39:30,300 Tarvitsen toisen muuttujan koska haluan toistaa yli sanat 639 00:39:30,300 --> 00:39:32,640 mutta myös yli kirjaimet sanoja 640 00:39:32,640 --> 00:39:37,280 joten tavallaan on pystyakselin ja vaaka-akseli, tavallaan käsitteellisesti. 641 00:39:37,280 --> 00:39:43,930 Joten int j saa 0, niin haluan tehdä j kunhan j on pienempi kuin - ja Siivoan tätä ylös hieman. 642 00:39:43,930 --> 00:39:48,410 Miten iteroida yli kirjaimet merkkijono? Teimme tämän hetki sitten. 643 00:39:48,410 --> 00:39:54,670 Strlen of argv [i]. Hyvä. 644 00:39:54,670 --> 00:39:57,860 Ja vielä, olen tekemässä hieman tehottomuus täällä ei luomalla n tai mitä tahansa, 645 00:39:57,860 --> 00:39:59,610 mutta Palaamme tähän. 646 00:39:59,610 --> 00:40:03,270 >> Joten nyt j + +. Nyt minun täytyy luetelmakohdan edelleen täällä. 647 00:40:03,270 --> 00:40:06,950 Mitä nyt haluat tulostaa jokaisen iteraation? 648 00:40:06,950 --> 00:40:09,720 [Äänetön opiskelija vastausta] >> So [i] antaa minulle sana. 649 00:40:09,720 --> 00:40:12,910 [I] [j], tavallaan kuin matriisin. 650 00:40:12,910 --> 00:40:14,810 Ne teistä math-y taustat, 651 00:40:14,810 --> 00:40:19,340 Olemme tavallaan indeksointi jopa syvemmälle tähän matriisiin tai tämä joukko matriiseja, 652 00:40:19,340 --> 00:40:21,380 Tämän 2-ulotteinen rakenne. 653 00:40:21,380 --> 00:40:25,070 Joten nyt katsotaanpas mitä täällä tapahtuu. Saanen avata minun isompi pääteikkuna. 654 00:40:25,070 --> 00:40:28,170 Saanen uusinta soveltavat argv 1. 655 00:40:28,170 --> 00:40:33,090 Ja olen mokasin täällä, mikä on hyvä oppitunti koska minäkin unohdin tehdä tämän. 656 00:40:33,090 --> 00:40:37,150 Implisiittisesti julistaa C kirjaston funktion "strlen" tyypin "unsigned - 657 00:40:37,150 --> 00:40:40,360 En edes tiedä, mitä muuta se tarkoittaa, mutta olen nähnyt tämän ennenkin, 658 00:40:40,360 --> 00:40:42,000 implisiittisesti julistaa. 659 00:40:42,000 --> 00:40:45,540 Aina kun näet tämän virheen, mitä tämä yleensä merkitsee? 660 00:40:45,540 --> 00:40:48,520 >> [Äänetön opiskelija vastausta] >> unohdin kirjasto ylös. Mutta hetkinen. 661 00:40:48,520 --> 00:40:51,690 Yleensä olen mokannut koska unohdin CS50 kirjasto, mutta se on siellä. 662 00:40:51,690 --> 00:40:54,480 Yleensä olen mokannut, koska olen unohtanut vakio I / O. 663 00:40:54,480 --> 00:40:57,960 Ja suoraan sanottuna, en edes tarvitse tätä. Emme käytössä GetString tänään. 664 00:40:57,960 --> 00:40:59,900 Mitä minä puuttuu? 665 00:40:59,900 --> 00:41:04,860 On toinenkin kirjasto että nyt meidän täytyy käyttää joskus kutsutaan string.h, 666 00:41:04,860 --> 00:41:08,980 ja tämä on vain jälleen yksi kirjasto, joka on enemmän toimintoja, jotka eivät ole vakio I / O. 667 00:41:08,980 --> 00:41:11,640 >> Mennään takaisin minun iso pääteikkuna. 668 00:41:11,640 --> 00:41:16,670 Okei. Nyt, hitto soikoon, kai olin väärässä. Käytin CS50 kirjastoa. 669 00:41:16,670 --> 00:41:18,460 Jotta voimme korjata tämän jollakin 2 tapoja. 670 00:41:18,460 --> 00:41:21,510 Voimme ottaa apupyörät pois juuri nyt ja juuri tähän, 671 00:41:21,510 --> 00:41:26,600 tai Katsotaan sellaista pitää, että yksinkertaistamisen juuri nyt, liitä tämä takaisin, 672 00:41:26,600 --> 00:41:30,180 ratkaisemaan tämän ongelman, ja nyt palaa pääteikkuna. 673 00:41:30,180 --> 00:41:33,080 Joten on selvää, että CS50 kirjasto ei ole vain tehtäviä, 674 00:41:33,080 --> 00:41:36,920 se on myös avainsanan merkkijono, minkä vuoksi se virhe juuri tapahtui. 675 00:41:36,920 --> 00:41:43,010 >> Joten tässä sitä mennään. Korjasin molemmat kirjaston asioista. Enter. Hyvä. 676 00:41:43,010 --> 00:41:49,250 Argv 1, foo bar, Enter. Erinomainen. 677 00:41:49,250 --> 00:41:52,830 Meillä on nyt siis jokaisen kirjaimen jokaisen sanan painettu 1 per rivi, 678 00:41:52,830 --> 00:41:55,290 joka ei tee hyvin mielenkiintoinen ohjelma, 679 00:41:55,290 --> 00:41:59,350 mutta ilmoitusta nyt meillä on kyky paitsi iteroimalla yli sanat 680 00:41:59,350 --> 00:42:04,090 mutta myös yli yksittäisiä kirjaimia sanoissa, mikä kuulostaa hirveän tutulta 681 00:42:04,090 --> 00:42:10,330 edes yksinkertaisimpia sovelluksia, kuten salaus kirjaimia merkkijono näin. 682 00:42:10,330 --> 00:42:12,410 Mennään eteenpäin ja otamme 5 minuutin tauon. 683 00:42:12,410 --> 00:42:14,410 Ja kun tulemme takaisin, aloitamme puhua tehokkuudesta 684 00:42:14,410 --> 00:42:17,670 jolla voimme tehdä näitä asioita paremmin. 685 00:42:19,370 --> 00:42:21,900 >> Selvä. Olemme takaisin. 686 00:42:21,900 --> 00:42:26,970 Kiitos yksi TF joka pelaa paljon bananagrams, 687 00:42:26,970 --> 00:42:30,000 meillä on todellakin koko joukko merkkiä kanssamme täällä tänään 688 00:42:30,000 --> 00:42:32,520 fyysisesti ruumiillistunut näitä pieniä muovisia paloja, 689 00:42:32,520 --> 00:42:36,910 ja haluaisin ehdottaa, että tämä tyhjä valkoinen pöydältä täällä edustaa RAM minun tietokone - 690 00:42:36,910 --> 00:42:39,790 kannettava tietokone, desktop, mitä - ja siellä näyttää paljon se 691 00:42:39,790 --> 00:42:44,090 koska jos aloitamme hakkaamalla tätä RAM pieniksi tavu kokoisen palan, 692 00:42:44,090 --> 00:42:48,970 Oletetaan mielivaltaisesti sanoa jotain, koko ja että epäselvä edustaa - 693 00:42:48,970 --> 00:42:52,430 siellä mennään, ja katsotaanpa loitontaa vähän täällä - 694 00:42:52,430 --> 00:42:56,120 sanotaanko jotain kokonsa yhden tavun. 695 00:42:56,120 --> 00:43:00,400 Joten voimme todellakin mahtuu koko joukko tavua tai merkkiä sisällä tämän muistin, 696 00:43:00,400 --> 00:43:02,860 ehdottivat suhteellinen koko täällä. 697 00:43:02,860 --> 00:43:06,780 >> Joten Oletetaan nyt, että tavoitteena on varata muistia merkkijono. 698 00:43:06,780 --> 00:43:08,680 Miten tämä oikein toimii? 699 00:43:08,680 --> 00:43:11,380 Vuonna ohjelmissa olemme kirjallisesti, olemme yleensä käyttänyt GetString, 700 00:43:11,380 --> 00:43:16,300 mutta nyt selkeästi, on tämä toinen kanava, jonka kautta voimme saada käyttäjä syöttää sisään argv 701 00:43:16,300 --> 00:43:18,190 kautta komentorivin argumentteja. 702 00:43:18,190 --> 00:43:20,580 Mutta mitä todella tapahtuu alla huppu? 703 00:43:20,580 --> 00:43:24,920 On käynyt ilmi, jos me kutsumme - mennään siirry takaisin GetString - toiminto GetString 704 00:43:24,920 --> 00:43:28,190 vuonna CS50 kirjastossa, käyttäjältä pyydetään merkkijono, 705 00:43:28,190 --> 00:43:30,780 käyttäjä tyypit joissakin sana - kutsukaamme sitä HELLO. 706 00:43:30,780 --> 00:43:35,410 Ja olemme sanoneet viimeiset pari viikkoa, että paluu arvo GetString 707 00:43:35,410 --> 00:43:37,750 on itse asiassa merkkijono, kuten sana HELLO. 708 00:43:37,750 --> 00:43:39,660 >> Mutta mitä GetString oikeasti tekee? 709 00:43:39,660 --> 00:43:45,230 Kun käyttäjä on HELLO, Anna, GetString on miettiminen, 710 00:43:45,230 --> 00:43:47,930 Okei, kuinka monta merkkiä on tämä? Tämä on H-E-L-L-O. 711 00:43:47,930 --> 00:43:52,500 Joten se on myöntää, se tarvitsee kysyä käyttöjärjestelmä - Linux tässä tapauksessa - 712 00:43:52,500 --> 00:43:55,410 vähintään 5 tavua tallentaa HELLO. 713 00:43:55,410 --> 00:43:59,570 Ja mitä se sitten etenee tehdä, kun se saa takaisin niitä 5 tavua käyttöjärjestelmästä 714 00:43:59,570 --> 00:44:04,120 on hahmottaa HELLO takaisin takaisin takaisin takaisin. 715 00:44:04,120 --> 00:44:11,070 Ja niin, mitä todella palannut GetString on kimpale tietojen näyttää tältä. 716 00:44:11,070 --> 00:44:16,850 Mutta tämä on vähän epätarkka, koska näyttää siltä, ​​että se ei ole niin yksinkertaista 717 00:44:16,850 --> 00:44:20,310 kuten juuri tallennetaan HELLO on tietokoneen muistiin 718 00:44:20,310 --> 00:44:24,140 koska oletetaan, että minun ohjelma, olen kirjallisesti C kutsuu sitten GetString uudelleen, 719 00:44:24,140 --> 00:44:28,210 ja seuraavan sanan käyttäjä tyyppejä on Bye, bye. 720 00:44:28,210 --> 00:44:31,300 No, minun täytyy sovittaa että sana BYE jossain muistissa. 721 00:44:31,300 --> 00:44:33,790 En voi hakata HELLO. 722 00:44:33,790 --> 00:44:37,320 Esimerkiksi, en halua tietokonetta vain aloittaa korvaa näin 723 00:44:37,320 --> 00:44:41,400 alkuperäinen sana, koska en voi vielä käyttää sanaa HELLO muuttujaan 724 00:44:41,400 --> 00:44:43,070 jossain muualla minun ohjelma. 725 00:44:43,070 --> 00:44:45,900 >> Niin B-Y-E on päätyä jonnekin muualle muistiin. 726 00:44:45,900 --> 00:44:50,460 Mutta yleissopimus tyypillisesti, että seuraava merkkijono jakaa 727 00:44:50,460 --> 00:44:54,940 todennäköisesti, mutta ei aina, on menossa päätyvät seuraavan käytettävissä muistipaikka. 728 00:44:54,940 --> 00:44:57,370 Ja jos en ole pyytänyt käyttöjärjestelmän mitään muistia 729 00:44:57,370 --> 00:45:01,380 koska viimeksi pyysin GetString, kertoimet ovat sanan BYE 730 00:45:01,380 --> 00:45:05,790 tulee päätyä heti sanan HELLO muistiin. 731 00:45:05,790 --> 00:45:10,550 Mutta tässä vaiheessa voit ehkä nähdä, missä mahdollinen ongelma. 732 00:45:10,550 --> 00:45:13,310 Koska seuraava paloina muistin, seuraava tavua, jotka olivat vain free - 733 00:45:13,310 --> 00:45:18,230 Puhdista valkoinen liuskekivi - in tietokoneen muistiin oli aivan HELLO, 734 00:45:18,230 --> 00:45:23,670 tuntuu ensimmäinen merkkijono pyysin voi yhtäkkiä nyt muuttua 735 00:45:23,670 --> 00:45:26,410 koska olen muuttunut olennaisesti sen HELLOBYE 736 00:45:26,410 --> 00:45:31,310 sen sijaan, että jotenkin demarcing alusta BYE ja lopussa HELLO. 737 00:45:31,310 --> 00:45:33,920 >> Joten näyttää siltä, ​​että mitä todella tapahtuu alla huppu, 738 00:45:33,920 --> 00:45:37,570 jotka olet ehkä vilahti verkossa viittauksia tai osan tai kirjoja 739 00:45:37,570 --> 00:45:41,780 tai ei ollenkaan aivan vielä on, että on todella tahallinen rajaamista 740 00:45:41,780 --> 00:45:45,890 välillä sanojen tietokoneen muistiin. 741 00:45:45,890 --> 00:45:52,480 Ja itse asiassa tässä tapauksessa tänne, eikä vain laittaa BYE vieressä HELLO, 742 00:45:52,480 --> 00:45:58,610 sijaan, tietokone tuo erikoismerkin, erityinen nollamerkki, niin sanotusti, 743 00:45:58,610 --> 00:46:03,050 joka edustaa tunnistettavasti kanssa kenoviiva 0. 744 00:46:03,050 --> 00:46:06,700 Niin pitkä tarina lyhyt, muistuttaa, että merkit ovat edustettuina ASCII. 745 00:46:06,700 --> 00:46:09,680 ASCII on vain kartoitus numeroita ja kirjaimia, 746 00:46:09,680 --> 00:46:13,870 ja useimmat näistä kirjeistä alkaa noin 65 pääoman, 747 00:46:13,870 --> 00:46:19,780 mutta se osoittautuu voit varmasti edustaa numero 0 kokonaislukuna tai binääri, 748 00:46:19,780 --> 00:46:22,690 ja se osoittautuu maailmalle päätti kauan, kauan sitten, "Tiedätkö mitä?" 749 00:46:22,690 --> 00:46:27,550 "Mennään varanto numero 0, koska ei edusta mitään merkkejä näppäimistöltä - 750 00:46:27,550 --> 00:46:30,810 "No kirjaimia, numeroita, ei välimerkkejä. 0 on erityinen." 751 00:46:30,810 --> 00:46:35,830 "Se tulee olemaan erityinen nollamerkki, ja aiomme kirjoittaa se \ 0". 752 00:46:35,830 --> 00:46:41,170 Ero on, jos me vain kirjoitti 0, 0 on merkki. 753 00:46:41,170 --> 00:46:45,700 Muistuttaa, että on olemassa ASCII-koodeja 0, 1, 2, 3 754 00:46:45,700 --> 00:46:50,570 koska merkki 0 on eri kuin numero 0. 755 00:46:50,570 --> 00:46:54,270 Ja voit nähdä, että jos katsotte taaksepäin Viikko 1 kun ensin puhuttiin ASCII- 756 00:46:54,270 --> 00:46:59,130 0 ja 1, 2 ja 3 kaikki tavalla jopa 9 oli oma ASCII-koodit. 757 00:46:59,130 --> 00:47:02,300 Ne eivät ole sattumalta, 0 kautta 9. Ne ovat hyvin erilaisia. 758 00:47:02,300 --> 00:47:08,770 Eli 0 tarkoittaa vain "minä olen erikoinen" ja \ 0 tarkoittaa, kirjaimellisesti, "En ole 0 luonnetta." 759 00:47:08,770 --> 00:47:11,360 "Olen tätä erityistä arvoa, null merkki." 760 00:47:11,360 --> 00:47:16,930 Joten en oikeastaan ​​tarvitse toista näistä, koska en voi tehdä samaa virhettä kahdesti. 761 00:47:16,930 --> 00:47:21,550 >> Joten kun sanan BYE olemme myös menossa tarvitse toista näistä null merkkiä. 762 00:47:21,550 --> 00:47:27,090 Saanen napata minun kynä täällä ja haluan piirtää nopeasti toiseen \ 0 763 00:47:27,090 --> 00:47:30,480 niin että kun olen pyytänyt käyttöjärjestelmä 2 jousille 764 00:47:30,480 --> 00:47:33,270 kautta GetString seurasi toinen puhelu GetString, 765 00:47:33,270 --> 00:47:35,640 Tämä on mitä todellisuudessa muistiin. 766 00:47:35,640 --> 00:47:39,900 Joten kun tulen takaisin merkkijonon, olen todella saada takaisin, että 767 00:47:39,900 --> 00:47:43,450 ja kun saan seuraavan merkkijonon, olen todella saada takaisin se. 768 00:47:43,450 --> 00:47:47,910 Joten tämä herättää kysymyksen, strlen ensinnäkin, mitä sen pitäisi palauttaa? 769 00:47:47,910 --> 00:47:54,650 Kun Kehotan strlen merkkijono s ja s oli sana HELLO että käyttäjä kirjoitettu, 770 00:47:54,650 --> 00:47:57,800 mitäs me tietysti sanoa pituus HELLO oli muutama minuutti sitten? 771 00:47:57,800 --> 00:48:01,290 Se oli 5, eikö? H-E-L-L-O. Ja se tosiaan miten strlen toimii. 772 00:48:01,290 --> 00:48:05,670 Se palauttaa mitä normaali ihminen odottaa pituus merkkijonon olla. 773 00:48:05,670 --> 00:48:11,030 Mutta todellisuudessa, kuinka suuri on joukko merkkejä on varastointi Haloo? 774 00:48:11,030 --> 00:48:12,770 Se on oikeastaan ​​6. 775 00:48:12,770 --> 00:48:15,740 Joten strlen ei mainita tästä sinulle. 776 00:48:15,740 --> 00:48:20,300 Mutta alla huppu tietokone todellakin käyttää 6 tavua tallentaa 5-kirjain sanan, 777 00:48:20,300 --> 00:48:22,380 ja tämä on totta riippumatta siitä, kuinka kauan sana on. 778 00:48:22,380 --> 00:48:26,470 Siellä on aina olemaan erityinen null päättyy merkin lopussa merkkijonon 779 00:48:26,470 --> 00:48:28,800 on demarc kokonaispituudesta. 780 00:48:28,800 --> 00:48:33,430 >> Joten sitten jos olet nyt henkilö täytäntöönpanoa strlen 20, 30 vuotta sitten, 781 00:48:33,430 --> 00:48:35,520 miten edetä toteuttamisessa strlen itsestään? 782 00:48:35,520 --> 00:48:39,980 Otamme itsestäänselvyytenä, että se on olemassa, aivan kuten pidämme itsestään selvänä, että printf olemassa, 783 00:48:39,980 --> 00:48:42,850 mutta jos HELLO on sana kyseessä 784 00:48:42,850 --> 00:48:45,220 ja mitä olen muistissa on jotain, joka näyttää tältä, 785 00:48:45,220 --> 00:48:48,130 jos sinulla on ollut reimplement strlen koska pyydettiin 786 00:48:48,130 --> 00:48:50,260 tai siksi, suoraan sanottuna, et tiennyt strlen olemassa - 787 00:48:50,260 --> 00:48:54,280 piti kääriä tämä omalla - miten voisit toteuttaa strlen 788 00:48:54,280 --> 00:48:57,760 kun sitä jotain, joka näyttää tältä? 789 00:48:57,760 --> 00:49:02,750 Nyt kun tiedämme merkkijono on taulukko, voimme toistaa yli jokaisen yksittäisiä merkkejä 790 00:49:02,750 --> 00:49:06,320 käyttäen jotain - Yritetään tehdä tämän lennossa. 791 00:49:06,320 --> 00:49:12,060 >> Sallikaa minun mennä laitteeseen. Saanen luoda uuden tiedoston, strlen.c. 792 00:49:12,060 --> 00:49:19,260 Anna minun mennä eteenpäin nyt ja eivät kuuluu stdio.h jotta meillä on pääsy printf. 793 00:49:19,260 --> 00:49:25,820 Anna minun tehdä int main (void). Oh. Otan vain tehdä tämän omasta nyt sitten. [Naurahtaa] 794 00:49:25,820 --> 00:49:28,300 Kiitos. 795 00:49:28,300 --> 00:49:31,000 Tämä on mitä olen tekemässä. Selvä. 796 00:49:31,000 --> 00:49:34,820 Joten ennen käänsin ruudulla, olen kirjoittanut kaiken tuon. 797 00:49:34,820 --> 00:49:37,550 Ja nyt, mitä aion tehdä, on seuraava: 798 00:49:37,550 --> 00:49:40,360 printf ("Anna minulle merkkijono:") 799 00:49:40,360 --> 00:49:42,700 Se on vain pörröinen ohjeita. 800 00:49:42,700 --> 00:49:45,700 Nyt haluan tehdä string s = GetString. 801 00:49:45,700 --> 00:49:47,260 Olen jo täytyy tehdä muutoksia nyt. 802 00:49:47,260 --> 00:49:52,740 Käytän CS50 kirjaston yhtäkkiä, joten anna minun mennä eteenpäin ja kirjoita cs50.h. 803 00:49:52,740 --> 00:50:00,720 Ja nyt tehdään tämä: printf ("pituus on:% d, strlen [s] - 804 00:50:00,720 --> 00:50:03,540 ja en ole tehnyt vielä. Mitä muuta minun täytyy lisätä tähän ohjelmaan? 805 00:50:03,540 --> 00:50:05,740 >> [Opiskelija] string.h. >> String.h. 806 00:50:05,740 --> 00:50:10,800 Joten nyt, käytämme strlen, joten katsotaanpa varmista kääntäjä tietää missä se on, 807 00:50:10,800 --> 00:50:12,390 niin vähän järki tarkistaa. 808 00:50:12,390 --> 00:50:16,400 Saan merkkijonon linja 8 ja linja 9 Minä tulostamalla sen pituus% d. 809 00:50:16,400 --> 00:50:19,400 Joten mene eteenpäin ja avaa ylöspäin. 810 00:50:19,400 --> 00:50:23,380 Olemme tehdä strlen - kokoaa okay - 811 00:50:23,380 --> 00:50:30,120 strlen - haluan zoomata - Anna, H-E-L-L-O, Enter. Pituus on 5. 812 00:50:30,120 --> 00:50:32,730 >> Okei, joten strlen tuntuu toimivan, mutta maailma tiesi. 813 00:50:32,730 --> 00:50:37,310 Joten nyt toteuttaa strlen itsemme seuraavasti. 814 00:50:37,310 --> 00:50:39,490 Otan tämän kirjaston pois. 815 00:50:39,490 --> 00:50:42,590 Meillä ei ole enää pääsyä string.h koska en edes tiedä sitä olemassa. 816 00:50:42,590 --> 00:50:45,970 Mutta se on okei, koska en voi toteuttaa strlen itseäni 817 00:50:45,970 --> 00:50:50,200 ja on se otettava merkkijono nimeltä tulo, 818 00:50:50,200 --> 00:50:53,830 ja nyt minun täytyy selvittää pituus tämän merkkijonon. 819 00:50:53,830 --> 00:50:55,880 Joten miten voin tehdä tämän? 820 00:50:55,880 --> 00:51:00,190 Mitä jos teen - Katsotaan, miten tämä - Mitä haluat tehdä? 821 00:51:00,190 --> 00:51:04,130 >> [Äänetön opiskelija vastausta] >> Okei. 822 00:51:04,130 --> 00:51:05,970 Joten voimme tehdä tämän nippu tavoilla. Yritän ottaa tämän lähestymistavan. 823 00:51:05,970 --> 00:51:10,220 Annan itselleni int muuttuja i, niin i alkaa 0. 824 00:51:10,220 --> 00:51:19,380 Ja saanen sanoa tämän: vaikka input [i] ei ole yhtä suuri, mitä? \ 0. 825 00:51:19,380 --> 00:51:23,480 Joten se kääntyy pois, kuten tapauksessa kaikkien merkkiä kirjoittaessasi niitä kirjaimellisesti ohjelmaan 826 00:51:23,480 --> 00:51:25,940 joudut käyttämään lainausmerkkejä, ei lainausmerkkeihin. 827 00:51:25,940 --> 00:51:29,250 Joten jos olisin kirjallisesti kirjeen, tekisin, että kirje b, tekisin sen. 828 00:51:29,250 --> 00:51:33,440 Tässä, sen sijaan olisi merkkijono, ei yksittäinen merkki. 829 00:51:33,440 --> 00:51:38,470 >> Haluan siis \ 0 kirjaimellisesti. Mitä haluan tehdä tämän silmukan? 830 00:51:38,470 --> 00:51:42,650 Oikeastaan, tarvitsen toisen muuttujan, joten int pituus saa 0. 831 00:51:42,650 --> 00:51:46,190 Vaikka et olisi varma miksi aloitimme niin teimme, 832 00:51:46,190 --> 00:51:50,110 Nyt aiomme tällä tiellä, mitä haluan tehdä on line 9? 833 00:51:50,110 --> 00:51:55,820 pituus + + ja sitten tänne rivillä 10, paluu pituus. 834 00:51:55,820 --> 00:51:58,370 Joten miten on strlen toteutetaan? 835 00:51:58,370 --> 00:52:00,550 Se on tosiasiallisesti toteutettu luultavasti näin. 836 00:52:00,550 --> 00:52:03,470 Ehkä henkilö käyttää varten silmukka, ehkä tehdä, kun silmukka - kuka tietää? 837 00:52:03,470 --> 00:52:05,940 Olisimme todella katsoa alla huppu on todellinen lähdekoodin 838 00:52:05,940 --> 00:52:08,520 Joissakin tiedostoon nimeltä string.c luultavasti. 839 00:52:08,520 --> 00:52:10,480 >> Mutta tässä Ajatellaanpa mitä olen tekemässä. 840 00:52:10,480 --> 00:52:13,640 Olen julistamisesta muuttuja nimeltä I, jossa se vastaa 0. 841 00:52:13,640 --> 00:52:17,520 Olen sitten julistaa toisen muuttujan nimeltään pituus, jossa se vastaa 0. 842 00:52:17,520 --> 00:52:25,440 Sitten sanon taas i. merkki tulo ei ole yhtä erityistä nollamerkki, \ 0, 843 00:52:25,440 --> 00:52:27,070 increment pituus. 844 00:52:27,070 --> 00:52:32,550 Mutta heti kun i hahmo on tässä erityinen luonne, mitä tapahtuu silmukan? 845 00:52:32,550 --> 00:52:36,540 Se oikosulkuja. Se pysähtyy, mikä tarkoittaa, että sitten voisit palata pituus. 846 00:52:36,540 --> 00:52:40,740 >> Joten jos en sotke, mennään eteenpäin ja palata minun pääteikkuna. 847 00:52:40,740 --> 00:52:43,550 Saanen kääntää. Ja en tyriä. 848 00:52:43,550 --> 00:52:46,320 Yhteensopimaton uudelleenesittely kirjaston funktion strlen. 849 00:52:46,320 --> 00:52:48,650 Joten yritin saada liian fiksuja oman hyvän täällä. 850 00:52:48,650 --> 00:52:51,610 Kääntäjä itse tietää, että on olemassa funktio kutsutaan strlen 851 00:52:51,610 --> 00:52:55,290 vaikka emme ole mukana kirjastoon. Se on hienoa. Whatever. 852 00:52:55,290 --> 00:52:58,230 Olemme juuri menossa tekemään niin. Katsotaanpa nimetä tämä pituus. 853 00:52:58,230 --> 00:53:04,110 Saanen muuttaa käytöstä sen pituuden täällä, ja tämä tekee clang onnellisempia. 854 00:53:04,110 --> 00:53:08,900 Kuten syrjään, koska jotkut näistä toiminnoista ovat niin hiton yhteisiä - 855 00:53:08,900 --> 00:53:12,390 strlen, prinf - heillä todella on eräänlainen erityisasema. 856 00:53:12,390 --> 00:53:15,310 Ja niin clang vain tietää vähän jotain erityistä niistä. 857 00:53:15,310 --> 00:53:18,760 Se ei aina ole eniten toimintoja, joten siksi jouduimme huusi. 858 00:53:18,760 --> 00:53:21,350 >> Yritän uudelleen. Onneksi se toimi tuolloin. 859 00:53:21,350 --> 00:53:23,560 Joten nyt haluan ajaa oman strlen ohjelman. 860 00:53:23,560 --> 00:53:29,740 Anna merkkijono: H-E-L-L-O, Enter. Ja olen mokasin. 861 00:53:29,740 --> 00:53:34,750 Miksi? >> [Äänetön opiskelijan vastausta] >> Aivan. 862 00:53:34,750 --> 00:53:39,180 Joten olen itse täällä erittäin hauskannäköinen loputon silmukka 863 00:53:39,180 --> 00:53:42,270 koska vaikka olen mukaa pituus kunkin iteraation, 864 00:53:42,270 --> 00:53:47,860 mitä olen selvästikään tee? En lisäävä i. Okei. Helppo korjata. Kyllä? 865 00:53:47,860 --> 00:53:52,430 Okei. No nyt me ajaa riitautui muu yleinen virhe, jos minä tarvitsen suluissa. 866 00:53:52,430 --> 00:53:54,430 Ja suoraan sanottuna, tämä koodi alkaa ruma, 867 00:53:54,430 --> 00:53:56,460 niin otamme puukottaa puhdistamista ylös hetki. 868 00:53:56,460 --> 00:53:58,810 Mutta nyt olen kasvaville sekä pituus ja i. 869 00:53:58,810 --> 00:54:02,630 Suoraan sanottuna olen jo nähdä mahdollisuutena parantaa täällä, mutta me palaamme siihen. 870 00:54:02,630 --> 00:54:05,270 >> Joten nyt mennään vain varmista, että olemme ainakin edistystä. 871 00:54:05,270 --> 00:54:08,320 Tämä on tapahtunut muutaman teistä, ja olen laiminlyönyt mainita tämän etukäteen. 872 00:54:08,320 --> 00:54:12,420 Kun sinulla on epäonnea skenaarion näin, miten korjata tämä 873 00:54:12,420 --> 00:54:15,130 lyhyt uudelleenkäynnistys laitteen tai tietokoneen tai sulkemalla ikkunan? 874 00:54:15,130 --> 00:54:16,860 Se on todella helppo. 875 00:54:16,860 --> 00:54:21,680 Ohjaus C lähettää tämä pieni porkkana symboli C, ja se vain päättyy useimmissa ohjelmissa. 876 00:54:21,680 --> 00:54:25,990 Jos sinulla on todella paha loputon silmukka, joka tulostetaan tavaraa äärettömän monta kertaa, 877 00:54:25,990 --> 00:54:29,960 Joskus saatat joutua lyödä Ohjaus C tuhat kertaa, jotta se todella kuulla sen. 878 00:54:29,960 --> 00:54:33,910 Joten ymmärtää nyt, koska en tulostamista mitään, se oli melko helppoa. 879 00:54:33,910 --> 00:54:37,970 Ja teknisesti, kerran riittää, mutta tulen kärsimättömäksi ja olen yleensä lyödä sitä, että monta kertaa. 880 00:54:37,970 --> 00:54:43,400 >> Niin strlen. Anna merkkijono: HELLO. Onko menossa töihin tällä kertaa? 881 00:54:44,580 --> 00:54:47,490 Okei. Toinen yleinen virhe. On kääntää. 882 00:54:47,490 --> 00:54:50,430 Se oli tahallinen, että yksi. Selvä. 883 00:54:50,430 --> 00:54:54,260 Niin strlen, H-E-L-L-O, Enter. Erinomainen. 884 00:54:54,260 --> 00:54:55,910 Joten meillä on nyt strlen 5. 885 00:54:55,910 --> 00:54:58,100 Joten olemme kirjaimellisesti reimplemented että pyörä. 886 00:54:58,100 --> 00:55:02,080 Joten nyt mennään puhdistamaan tämä ylös, koska se ei tee minusta vaikuttunut 887 00:55:02,080 --> 00:55:04,080 kanssa suunnittelu minun koodi. 888 00:55:04,080 --> 00:55:07,200 Mitä voimme selvästi poistaa tämän ohjelman puhdistaa tämän? 889 00:55:07,200 --> 00:55:11,840 [Äänetön opiskelija vastausta] >> Joo. Kirjaimellisesti, me hoidetaan i ja pituus identtisesti. 890 00:55:11,840 --> 00:55:16,440 Joten miksi emme vain fiksuja ja sano samalla pituus? 891 00:55:16,440 --> 00:55:20,450 Pikemminkin, mennään vain kutsua sitä pituus aluksi, alustaa sen 0 892 00:55:20,450 --> 00:55:23,340 koska oletuksena merkkijonon ole pituutta, kunnes saamme selville, mitä se on. 893 00:55:23,340 --> 00:55:26,160 >> Nyt teemme tämän, ja nyt tämä on melko tyylikäs ohjelma. 894 00:55:26,160 --> 00:55:28,660 Yksi muuttuja. Siivosin sen, tiukennettiin sen. 895 00:55:28,660 --> 00:55:31,980 Joten nyt mennään takaisin minun pääteikkuna. Mennään eteenpäin ja ajaa tätä. 896 00:55:31,980 --> 00:55:35,670 Tee strlen. Näyttää hyvältä. Suorita strlen uudelleen Enter. 897 00:55:35,670 --> 00:55:40,680 Anna merkkijono: HELLO, Anna. Ja se näyttää toimivan kuin 5. 898 00:55:40,680 --> 00:55:45,580 Nyt on selvää, jos en olisi kirjoittanut, esimerkiksi HELLO 1 merkkijono 899 00:55:45,580 --> 00:55:48,840 ja sitten BYE toiseen, voimme varmasti useita sanoja. 900 00:55:48,840 --> 00:55:53,150 Jos lauseke halusin kirjoittaa ollut HELLO vaan esimerkiksi 901 00:55:53,150 --> 00:55:58,920 Hello World, huomaa, että meidän ei olisi tämä tilanne täällä, eikö? 902 00:55:58,920 --> 00:56:00,580 Tämä viittaa siihen, että se on 2 jouset. 903 00:56:00,580 --> 00:56:06,060 Et varmasti voi olla välilyöntiä merkkejä, joten jos todella kirjoitetaan pidempi lause 904 00:56:06,060 --> 00:56:08,390 kuten Hello World, mitä me todella olla muistissa 905 00:56:08,390 --> 00:56:12,730 näyttää vähän jotain siellä. 906 00:56:12,730 --> 00:56:18,910 >> Selvä. Kysyttävää sitten noin edustus täällä merkkijonojen? 907 00:56:18,910 --> 00:56:20,450 Ei? Selvä. 908 00:56:20,450 --> 00:56:25,130 Joten minä sanoin, että kutsuvan strlen uudestaan ​​ja uudestaan ​​tarkoituksella sellaista 909 00:56:25,130 --> 00:56:28,070 luultavasti ei ole paras idea, koska aiot tehdä paljon työtä 910 00:56:28,070 --> 00:56:30,280 uudestaan ​​ja uudestaan ​​ja uudestaan. 911 00:56:30,280 --> 00:56:36,150 Todellakin, mitä työtä on tarpeen miettiminen pituus merkkijonon, ilmeisesti? 912 00:56:36,150 --> 00:56:40,720 Sinun täytyy aloittaa alusta ja sitten katsoa, ​​katso, katso, katso, katso 913 00:56:40,720 --> 00:56:44,930 kunnes lopulta nähdä, että erikoismerkin, jolloin, ah, nyt tiedän pituus. 914 00:56:44,930 --> 00:56:48,040 Joten aikaisemmin kun olimme strlen kutsutaan uudestaan ​​ja uudestaan ​​ja uudestaan, 915 00:56:48,040 --> 00:56:52,080 syystä olen ehdottanut, että oli typerää siksi jälleen, että merkkijono näyttää että. 916 00:56:52,080 --> 00:56:54,880 Se ei aio muuttaa joka kerta iteroida läpi silmukan, 917 00:56:54,880 --> 00:56:56,890 joten teet turhaa työtä. 918 00:56:56,890 --> 00:57:00,620 Samalla sinun pitäisi tietää, koska syrjään, että kääntäjät kuten clang näinä päivinä 919 00:57:00,620 --> 00:57:02,530 on kehitetty monien vuosien ajan, 920 00:57:02,530 --> 00:57:05,690 ja kääntäjä kirjailijat, ohjelmoijat, ovat melko fiksu. 921 00:57:05,690 --> 00:57:10,170 Ja niin näyttää siltä, ​​että clang ja muut kääntäjät voivat todella selvittää, että 922 00:57:10,170 --> 00:57:13,650 okei, kyllä, kirjoitit strlen teidän kunnossa, 923 00:57:13,650 --> 00:57:17,520 mikä teknisesti tarkoittaa sitä, että me kutsuisimme sitä uudestaan ​​ja uudestaan ​​ja uudestaan. 924 00:57:17,520 --> 00:57:21,880 Mutta fiksu kääntäjät voivat itse optimoida tuollaiset köyhät käyttäjän päätösten 925 00:57:21,880 --> 00:57:23,870 ulos koodi korjata asioita. 926 00:57:23,870 --> 00:57:27,360 >> Joten älä vain ymmärrä, että joskus kääntäjä on älykkäämpi kuin meitä 927 00:57:27,360 --> 00:57:29,210 ja millaisia ​​piilottaa omat virheemme. 928 00:57:29,210 --> 00:57:31,620 Mutta varmasti kun se tulee ongelmaa yms, 929 00:57:31,620 --> 00:57:35,340 älä ajatella niitä perustavanlaatuisesti virheellisen suunnittelun päätöksiä 930 00:57:35,340 --> 00:57:38,110 mahdollisesti siitä yksinkertaisesta syystä, että olisimme tekemässä paljon enemmän työtä 931 00:57:38,110 --> 00:57:41,330 kuin meillä on todellakin tehtävä. Mutta kuinka paljon enemmän työtä? 932 00:57:41,330 --> 00:57:44,960 Kun kyseessä Hello World, aloitamme yleistää koko ongelman. 933 00:57:44,960 --> 00:57:48,100 Mikä on pituus ongelma tai koko ongelma 934 00:57:48,100 --> 00:57:50,770 kun sana käyttäjä kirjoitettu on HELLO? 935 00:57:50,770 --> 00:57:53,790 Se on ilmeisesti 5, ehkä 6. Plus tai miinus 1. Whatever. 936 00:57:53,790 --> 00:57:55,680 Se on niin lähellä me vain kutsumme sitä 5. 937 00:57:55,680 --> 00:58:00,480 >> Joten mitä koko ongelma, kun yrittää selvittää pituus HELLO? 938 00:58:00,480 --> 00:58:06,790 Se on 1, 2, 3, 4, 5, ja ehkä 6 viimeisen merkin, mutta katsotaanpa yleistää, että n. 939 00:58:06,790 --> 00:58:10,300 Joten n, vain muuttuja n, mitä tietotekniikan tutkijoita olisi tyypillisesti käyttävät 940 00:58:10,300 --> 00:58:13,890 kuvaamaan koko ongelma, ja ongelma käsillä on kuinka kauan on HELLO? 941 00:58:13,890 --> 00:58:17,050 Kuinka kauan strlen kestää? 942 00:58:17,050 --> 00:58:21,010 Se vie suuruusluokkaa n askelta, jolloin jokaisen vaiheen tarkoitetaan katsoa merkin, 943 00:58:21,010 --> 00:58:23,350 tarkastellaan merkki, katso merkki. 944 00:58:23,350 --> 00:58:26,850 Ja meillä oli tämän keskustelun taas takaisin, toimenpiteiden määrä jotakin vie. 945 00:58:26,850 --> 00:58:29,910 Aivan ensimmäinen päivä luokan olimme kaikki kömpelösti seisomaan, 946 00:58:29,910 --> 00:58:32,060 ja sitten kaikki alkoivat pariksi pois toistensa kanssa 947 00:58:32,060 --> 00:58:35,990 jotta todella laskea ihanteellisesti kuinka monta ihmistä oli huoneessa. 948 00:58:35,990 --> 00:58:39,860 Ja teimme myös toinen asia, jossa jos vaan tein sen vanhan koulun tapa 949 00:58:39,860 --> 00:58:44,800 vain alkaen 1, 2, 3, 4, 5, 6 ja niin edelleen, 950 00:58:44,800 --> 00:58:49,360 että myös koko, että ongelma oli koko n. Oli n ihmisiä huoneeseen. 951 00:58:49,360 --> 00:58:52,010 Mutta voisin nopeuttaa että, eikö? Peruskoulun tyyli voisin aloittaa laskemisen 2s. 952 00:58:52,010 --> 00:58:55,560 2, 4, 6, 8, 10, 12. Ja se tuntuu niin paljon nopeammin, ja se todellakin on. 953 00:58:55,560 --> 00:59:01,720 Se on kirjaimellisesti kaksi kertaa niin nopeasti, mutta jälleen, jos toinen 400 ihmistä käveli tämän huoneen 954 00:59:01,720 --> 00:59:08,250 kaikki kerralla, ne algoritmit veisi toiset 400 tai ehkä 200 vaiheita. 955 00:59:08,250 --> 00:59:13,310 >> Mutta sitä vastoin, jos todella fiksuja ja olemme lisänneet kaikkia teitä itseänne, 956 00:59:13,310 --> 00:59:15,280 muistamme, miten se algoritmi toimi. 957 00:59:15,280 --> 00:59:17,110 Te kaikki nousi seisomaan. Saanen nopeasti eteenpäin tätä. 958 00:59:17,110 --> 00:59:20,430 Te kaikki nousivat seisomaan, sinun pariksi pois, niin puolet istuit alas, 959 00:59:20,430 --> 00:59:22,510 puolet istuit alas, puolet istuit alas, 960 00:59:22,510 --> 00:59:27,350 ja jokaisen iteraation tämän kaareen viikolla 0, me puolittui ongelma käsillä 961 00:59:27,350 --> 00:59:30,040 ja meni n / 2, niin n / 4, ja sitten n / 8. 962 00:59:30,040 --> 00:59:35,350 Ja seuraus tästä on, että jos toinen 400 ihmistä kävelevät huoneeseen, no big deal, 963 00:59:35,350 --> 00:59:40,120 se vie meidät vielä 1 krs, ei 400 lisää kierroksia, ei 200 lisää kierroksia. 964 00:59:40,120 --> 00:59:43,640 Ja niin tarina kerroimme taas takaisin oli tehdä vähän jotain tähän. 965 00:59:43,640 --> 00:59:47,750 Tämä punainen viiva tässä on lineaarinen, se on suora, ja se on merkitty n 966 00:59:47,750 --> 00:59:50,250 koska sillä koko ongelma kasvaa, 967 00:59:50,250 --> 00:59:54,690 jos algoritmi tai ohjelma, jolla olet ratkaiseminen kestää n askelta, 968 00:59:54,690 --> 00:59:58,620 voimme piirtää sitä suoraa linjaa, jossa se vie enemmän aikaa mitä suurempi koko ongelmaa. 969 00:59:58,620 --> 01:00:03,280 Ja twosies lähestymistapaa, laskenta 2, 4, 6, 8, vielä suora viiva, vain hieman paremmin. 970 01:00:03,280 --> 01:00:08,440 Se vie vähemmän aikaa, joten keltainen viiva on punaisen viivan alapuolella pisteen pisteen. 971 01:00:08,440 --> 01:00:12,580 >> Mutta vielä parempi oli tämä pyhä Graal mitä me kutsutaan logaritminen aika 972 01:00:12,580 --> 01:00:14,830 jos vaikka taas tuplaamme ihmisten määrä huoneessa, 973 01:00:14,830 --> 01:00:18,240 me kaksinkertaistaa tuon puhelinluettelon ensimmäinen päivä luokan, 974 01:00:18,240 --> 01:00:22,310 no big deal, se kestää vielä 1 sivu kyynel, kestää 1 enemmän istuen 975 01:00:22,310 --> 01:00:25,550 jotta voidaan ratkaista ongelma, joka on kaksi kertaa niin iso. 976 01:00:25,550 --> 01:00:27,460 Ja niin keskustelu saamme nyt alkaa ottaa on 977 01:00:27,460 --> 01:00:30,380 Miten voimme todella ratkaista ongelmia tehokkaasti 978 01:00:30,380 --> 01:00:32,510 jos ajatellaan yksinkertaisin tämänkaltaisia ​​ongelmia? 979 01:00:32,510 --> 01:00:36,210 Oletetaan, että meillä on 8 ovea jonka takana on joitakin numeroita, 980 01:00:36,210 --> 01:00:39,720 ja kukin näistä numeroista ei ole lajiteltu millään tavalla, 981 01:00:39,720 --> 01:00:42,830 he vain satunnaisia ​​kokonaislukuja takana ovien 982 01:00:42,830 --> 01:00:47,290 ja me kysyä miten edetä löytää numero - kuka tietää - 983 01:00:47,290 --> 01:00:50,250 7 takana nämä ovet? 984 01:00:50,250 --> 01:00:53,400 Mitä sinä, ihminen, tehdä jotta löydettäisiin minulle numero 7 985 01:00:53,400 --> 01:00:56,810 Jos taas kukin näistä ovat ovet ja nähdä arvoa joudut avaamaan oven? 986 01:00:56,810 --> 01:00:59,650 Mikä olisi sinun algoritmi olisi kenties? 987 01:00:59,650 --> 01:01:05,310 >> [Äänetön opiskelija vastausta] >> Joten aloita vasemmalla ja avaa oven, avaa ovi, avaa ovi. 988 01:01:05,310 --> 01:01:08,570 Ja pahimmassa tapauksessa, kuinka kauan se vie meidät löytää numero 7? 989 01:01:08,570 --> 01:01:12,800 Ja vielä, he eivät lajitella, joten se ei ole niin helppoa kuin, no, aion avata 7. luukku. 990 01:01:12,800 --> 01:01:15,240 Se voisi viedä meidät, maksimaalisesti, 8 askelmaa. 991 01:01:15,240 --> 01:01:19,940 Pahimmassa tapauksessa, 7 on satunnaisesti aivan lopussa linjan ovien, 992 01:01:19,940 --> 01:01:22,090 joten ehkä kokeilla N ovet. 993 01:01:22,090 --> 01:01:24,440 Joten jälleen täällä, meillä näyttää olevan lineaarinen algoritmi. 994 01:01:24,440 --> 01:01:27,030 Itse teimme tämän vain pari vuotta sitten. 995 01:01:27,030 --> 01:01:29,910 Yksi edeltäjistänne kyseenalaistettiin juuri tätä 996 01:01:29,910 --> 01:01:32,050 jos meillä ei ole digitaalista versiota, meillä sen sijaan oli liitutaulu 997 01:01:32,050 --> 01:01:33,780 joitakin papereita sitä. 998 01:01:33,780 --> 01:01:36,940 Ja mitä ajattelin tehdä, on ottaa vilkaista taaksepäin miten tämä meni, 999 01:01:36,940 --> 01:01:40,760 yksi parhaista ja ehkä hankalimmat mahdollisuuksia lavalla 1000 01:01:40,760 --> 01:01:42,530 on esittelyä oikeus täällä Sanders. 1001 01:01:42,530 --> 01:01:44,000 Meillä oli 2 riviä numeroita. 1002 01:01:44,000 --> 01:01:47,280 Olemme vain menossa katsomaan mitä tapahtuu täällä Sean varten hyvin alkuun näiden rivien. 1003 01:01:47,280 --> 01:01:49,660 Ellei kukaan ikinä vapaaehtoisten CS50, 1004 01:01:49,660 --> 01:01:52,010 meillä oli Sean siunaus pitää tämän kameran, 1005 01:01:52,010 --> 01:01:54,670 joten hän tietää, että sadat ihmiset ovat katsomassa tätä nyt vuosia. 1006 01:01:54,670 --> 01:01:59,500 Mutta Sean teki loistavaa työtä - vai oliko hän? - Klo oikeastaan ​​löytää meidät tietty numero. 1007 01:01:59,500 --> 01:02:04,570 >> Joten katsotaanpas miten hän ratkaisi algoritmi jotta me jatkaa tätä keskustelua ennen pitkää 1008 01:02:04,570 --> 01:02:08,300 miten löydämme asioita tehokkaasti. 1009 01:02:08,300 --> 01:02:12,300 [Malan video] Olen piilossa näitä ovia numero 7, 1010 01:02:12,300 --> 01:02:16,710 mutta makaavat joissakin näistä ovet sekä ovat muita negatiivisia lukuja, 1011 01:02:16,710 --> 01:02:19,980 ja sinun tehtäväsi on ajatella tätä ylärivin numeroita vain array 1012 01:02:19,980 --> 01:02:22,920 tai vain sarja paperilappuja numeroilla takana, 1013 01:02:22,920 --> 01:02:26,960 ja sinun tehtäväsi on vain käyttämällä ylä array täällä, löytää minut numero 7. 1014 01:02:26,960 --> 01:02:30,800 Ja olemme sitten menossa kritiikki miten edetä tee sitä. >> Selvä. 1015 01:02:30,800 --> 01:02:33,880 [Malan] Etsi meille numero 7, kiitos. 1016 01:02:36,210 --> 01:02:38,350 [Naurua] 1017 01:02:41,610 --> 01:02:44,460 [Malan] No [naurua] 1018 01:02:45,760 --> 01:02:58,080 5, 19, 13, [naurua]. Se ei ole temppu kysymys. 1019 01:03:00,560 --> 01:03:02,390 1. 1020 01:03:04,560 --> 01:03:06,910 [Naurua] 1021 01:03:06,910 --> 01:03:10,760 Tässä vaiheessa sinun pisteet ei ole kovin hyvä, joten voit yhtä hyvin pitää käynnissä. [Naurua] 1022 01:03:12,490 --> 01:03:14,070 3. 1023 01:03:17,340 --> 01:03:23,480 Mene. Rehellisesti, en voi olla ihmettelemättä, mitä olet edes ajatellut. [Naurua] 1024 01:03:25,010 --> 01:03:28,870 Vain ylärivillä, joten sinulla 3 vasemmalle. Joten löytää minut 7. 1025 01:03:28,870 --> 01:03:45,360 [Opiskelijat sorinaa] 1026 01:03:46,270 --> 01:03:49,870 [Malan] 17. 1027 01:03:49,870 --> 01:03:55,460 [Opiskelijat sorinaa] 1028 01:03:56,920 --> 01:04:01,550 [Malan] 7! [Aplodit] 1029 01:04:01,550 --> 01:04:06,080 >> Joten keskiviikkona me sukeltaa tähän ja kehittyneempiä algoritmeja löytää asioita. 1030 01:04:06,080 --> 01:04:10,200 Nyt jätämme sinulle Sean ja nähdään keskiviikkona. 1031 01:04:11,280 --> 01:04:13,000 [CS50.TV]