[Predvaja glasba] ANDI PENG: To je CS50, in dobrodošli na dva tedna oddelka. To je dejansko pa teden dva od naših class-- pravzaprav, Prvi teden smo imeli poglavje. Prikaži rok, koliko od vas vseh prišli do super oddelku prejšnji teden? OK, to je OK. To je ok. Koliko od vas gledal super oddelek prejšnji teden? V REDU. In naredila vidva redu o problemu nastavite eno? Torej grem, da ga vzamete, da imamo kup res inteligentne otroke v tem razredu in stvari, bo v redu. V REDU. Torej first-- Najprej smo le, da bo na kratko iti čez dnevnem redu danes. Bomo govorili o logistiki seveda. Veliko vas verjetno imate vprašanja v zvezi kako stvari tečejo v tem tečaju. Mi jih bomo odgovorili. Bomo na kratko iti čez zank, v primeru kateri koli od vaju zamudil super poglavje. Bomo govorili o kartiranju ASCII. O tem bomo govorili nizi, Funkcije, argumenti v ukazni vrstici. In končno, kaj vidva vse res želim biti tukaj, da spoznajo, je vaša pset2. Bomo imeli nekaj lepih trikov in nasveti za kako to storiti. V REDU. Tudi drugič, imamo veliko sladkarij tukaj. Vsakdo, ki ima rad sladkarije, pravkar prišel sem gor. Zgrabi nekaj. Imam kup. Imamo tone v pisarni. Res ne želim jesti sladkarije ves dan. Vi bi morali pojesti vse sladkarije, ker sem ga pripeljal sem za vaju. Samo jesti sladkarije. Tam bo sladkarije vsak oddelek. Torej, najprej, kdo sem jaz? Moje ime je Andi Peng. Jaz sem vodja TA od CS50 tukaj na univerzi Yale. In poleg da bom tudi be-- če bi kdo like-- vaš tek kolega, tvoja rama jokati naprej. Če je večer pred Due vašega pset je, nimate pojma, kaj se dogaja, hit me up. Bomo commiserate skupaj, et cetera. Samo vem, da sem tu kot virov za vas, kot frontno črto v pomoč vi ugotovimo, kako za reševanje problemov v CS50 in zunaj. Moj email je andi.peng@yale.edu. Jaz bom tudi pošlje posamezniku email z mojo telefonsko številko, v njej tako da ne vsakdo na Internet lahko vidite mojo telefonsko številko. Vas prosimo, da me pokličete kadarkoli. Resno, moj telefon je običajno pritrjene na moji roki. Jaz ne odzivajo v nekaj minutah. Morda se ne odzove v roku nekaj ur. Ampak jaz vam lahko garantiram, če ti e-mail me, če me boš poklical, besedilo mi, bom odgovoriti v 24 urah. Pogosto se bom odzval, preden da, ker sem razumel da je vsakdo dobil nekaj težav, in želite, da vaše odgovore treba odgovoriti zelo hitro. Vendar, če pokličete me 30 minut pred da je kos, ki je posledica četrtek night-- bilo všeč, Andi, pomagaj mi, Nisem started-- bom lahko dal ste, da je rama jokati naprej. Vendar je morda čas, da razmislite o tem kako ne storiti, da naslednjič. V REDU. Ups. Kako naj grem nazaj? Tam gremo. Torej, v tem seveda imamo ton podpore za vsakogar. Poleg pravkar odseki tukaj, ki vas vsak teden dobili, da bi porabili 90 čudovite minut z mano, imamo tudi uradne ure. Koliko od vas fantje že bil uradnih ur za pomoč? Great. To je res dobro videti, ker smo imajo zaposlenih več kot 45 ZU in CAS usposobljeni za to seveda, da so tu za vam pomagajo fantje s svojimi psets. Ponedeljki oni potekala v TEAL učilnica v 17 Hill House tukaj na univerzi Yale. Ob torkih in četrtkih, oni so potekala v commons. 08:00 do 11:00 precej vsak delovnik. Pridi, pridi ven. Vsak problem, ne problem-- samo pridi, in potem vam bomo pomagali ven s tem. Drugič, poleg uradnih ur in oddelki, imamo tudi hlače. Je kdo že kdaj videl nekaj od kratke hlače ali walkthroughs v video posnetkov na spletni strani? V REDU. Torej, oni so zelo, zelo koristno. Naša lepa proizvodnja Harvard ekipa tja na tej šoli na severu, ki so jih posneli in proizvaja ti neverjetni obiskov videi. Ti bom vas korak za korakom skozi kako iti o reševanju problema. Pogosto, če ste zmedeni o preprost koncept, ednini koncept, poglej, ker smo verjetno kratko o njej nekje na naši spletni strani. In to je ponavadi velik vir iskati, ko ste prvič izgubljena o tem, kako ravnati težave. Tretjič, imamo tudi study50 in reference50. Torej študija 50 o Spletna stran je samo povezava. To je, mislim, study.cs50.net ali nekaj takega. Samo Google. Imamo veliko mikroskopskih preparatov. Imamo veliko hlače in walkthroughs-- stvari vsi zbrani zelo lepo in urejeno za vas vse za brskanje skozi, vidim nobenih konceptov da ste zmedeni o tem. To bi se verjetno zajete tam v study50. Reference50-- podobno. Imamo veliko različnih bankovcev takoj na voljo za odstranjevanje. In nenazadnje, imamo kaj imenuje CS50 Pogovorite, forum, v katerem, če je noč pred delaš svoje težave, pravijo, imate vprašanje. Prijavite se na CS50 pogovorite. Objavi na vaše vprašanje. In nato pa eno od hundreds-- morda thousands-- vrstnikov ob tem razredu na spletu bo prijavite. In morda lahko nekdo dobil tvoj odgovor pred TA pločevinko. To je v bistvu samo spletni forum, da smo lahko vsi uporabiti, da bi razpravljali naše probleme. To je cool. V REDU. Torej, problem določa. Mi smo o tem prav v debel problem nastaviti dva. Veliko nas je že prebijala skozi problem nastaviti enega. Mi že vemo, da je morda čaka za sinoči, da opravljate svoje pset ni najpametnejša stvar v CS50. Nasveti in namigi v bistvu za Uspeh so prebrali celoten spec. Koliko od vas že preberite spec za pset 2? V REDU. To je trdna znesek. Vem, da ste fantje verjetno priznan Do sedaj so očala res dolgo. Oni so zelo, zelo dolgo. To je res težko brati vsako vrstico te skrbno besedo za besedo. Želite le prelistati, kjer to vam pove, da nekaj storiti. Jaz vam lahko garantiram, da ne delate. Če boste to storili, ste verjetno dogaja nekje pogrešal kjer vam pove kako začeti težave ali pa vam pove, kaj ime tvoj problem ali pa vam pove, To je verjetno najboljši način začeti početje vaše težave. In potem boste izgubili. Ko poskusite prebrati vašega spec polovici, Veliko pomembno information--, da niste bo lahko res dostop. Torej, preberite celoten spec. Poskusite prebrati celotno spec preden ste prišli na oddelku, ker potem, ko smo govorimo o pset, smo lahko vsi imeli idejo o tem, kaj se dogaja. Drugič, ta je koncept da bom všeč, da reference Veliko celotnem seveda semestra. Ampak v bistvu, izpolnjevati nas na pol poti, kajne? Jaz, kot vaš TA in Jason kot seveda manager in Scaz kot vaš profesor in David kot vaš profesor in vse druge lepe TAS v tem predmetu, pomočniki v tem course-- mi se bomo potrudili, da se zagotovi ste nastavili do uspeti v tem tečaju. Bomo držite poglavje. Mi bo imel uradne ure. Mi bomo odgovorili telefon poziva, da odgovori na vaša e-pošte, storiti vse, kar je v naši moči, da bi prepričan, vaša vprašanja so odgovori. Vendar pa nam pomaga ven preveč. Dobimo se na pol poti. Če ste prišli do uradnih ur da niso šli v oddelku, ne ko je videl predavanj, ki nima vem, kaj se dogaja, všeč, pomagaj mi. Bom všeč, dobro, mi je žal. Morda je čas, da posojajo da rama jokati naprej, ker nisem prepričan kaj lahko storim, da vam pomaga če ne poskusite vsaj pomoči si malo na začetku. Dobimo se na pol poti. Veš, prosim, pridi pripravljeni odgovoriti in dobili pripravljena sodelovati v materialu. To naredi stvari toliko lažje za vse vpletene. Ja, to je precej, da. Grading. Torej na učni načrt, to je zelo poglobljeno o tem, kako razred. Ampak v bistvu, razčlenitev pri tem je 50% vašega razreda bodo psets, ki je lepo, ker je to kjer ste preživeli velika Večina vaših seveda časa. Kvizi 40%, in vaš Končni projekt bo 10%. Tam bo dve kvizi vsej potek semestra. Mislim, da so časi in datumi navedeno tudi na učni načrt. Tako, da bomo se razvrščanje vaših psets je, da imamo v bistvu štiri vrednote, ki jih dodeljujejo za vsak razred. Imamo vrednost obsega, pravilnost, oblikovanje in slog. Torej, kot vidite, da je nekako naše formula za izračun psets. Trije smo dali najbolj teža za pravilnost, ker očitno vašega trenerja mora biti testiranje za primere da želimo, da bi test za. Vi vsi imajo check50 na voljo. To je zelo uporabna funkcija da vidva lahko vsi upload kodo na naših strežnikih, kjer smo jo bo preveril za vas. In ste videli tisti, frowny obrazi, Smiley obrazi. Oni so zelo, zelo koristno. Prosim, ne biti Študent, ki želi poizkusih hardcode v vseh odgovorov nanje. Sem definitivno videl pset kjer nekdo videl vse vrednote check50 in so le težko kodirane in-- če to število, natisnete to številko. Če to številko, natisnete to številko. Ne delaj tega. Čeprav tehnično check50 je pravilna, tvoj način reševanja Problem je, ni pravilna. Torej samo uporabo check50 varčno. Ampak tudi zagotoviti, da ste razumeti, kako je to deluje, Program deluje poleg check50, saj ne moremo testirati vsak mogoče primer check50. Mi bomo testiranje nekatere od njih. Design je v bistvu, kako dobro zasnovana, je svojo kodo? Če ste copy-lepljenje multipla vrstic kode mnogo, mnogo krat. Morda ne boste imeli prav najboljši dizajn v kodi. Mogoče je čas, da dodate to zanko. V bistvu, tukaj je samo vse o poskuša narediti svojo kodo, poskuša napisati svojo kodo kot učinkovito kot je mogoče, tako da vaš program teče v najkrajšem možnem času. Končno imamo stil. Torej stil je nekakšna arbitraren, subjektiven pojem. Vem, da uradno še slog 50 priročnik za CS50, kjer se vam pove, oh ti, mora imeti prostor tukaj. Moral bi nekako formatu kodo na ta način. Vi bi morali poimenovati stvari na ta način. Res ne skrbi, per se, kako izberete slog kodo, samo tako dolgo, dokler boste ostali dosledni. Na primer, če vam je všeč, da pustite prostor po vaši štiri pred svojim štiri zanke, samo to, da vsak čas. Ne nekako to storite. To ne stori druge čase. Če vam je všeč, da Curly oporniki prostor na določen način, samo vedno se na ta način narediti. Ne nekako to storiti nekje tu nekje ni tam. Ko smo razvrščanje, to je res težko če nimam pojma, kako ste formatiranje kodo, Stvari so čudaški in na pravem mestu. Če si ga obdržati dosledno, da je veliko lažje za mene, kot večja biti sposoben brati kodo. To je veliko lažje za vas kot študent da bi lahko odmisliti kodo in videti, kaj je narobe z to slash zakaj obstaja vprašanj. Style je eden izmed najlažjih stvari vi lahko storite, da bi dobili polno točk. V bistvu, če ste le ni vseeno, če boste plačali pet minut pozornosti s kodo vsak teden, morate lahko dobili polno slog točk. Nazadnje pa imamo, kar se imenuje multiplikator področja. Scope-- Vem, da je velik beseda, zlasti v tem razredu. Ampak področje, vse to pomeni je, da skušate se psets po najboljših močeh. Če vključite v treh od vaših štirih težave in niti ne poskušajte zadnja, ste verjetno boste izgubili nekaj točk na obsegu. Tudi če ste šele začeli problem, naredite svoje najboljše, da sprehod skozi to. Tudi če to ne deluje, ga vklopite v, ker to kaže in dokazuje, nam je, da ste poskušali, da ste poskusili problem nastavljeno po svojih najboljših močeh. In potem bomo lahko vam polnih točk za področje. Področje je zelo pomembno tudi za takrat, ko smo govorimo o najnižji padec pset rezultata. Torej tekom izmed semester, vidva imajo devet psets. In bomo dejansko pada najnižja ocena od tistih, devet, vendar le, če imate celotno področje točk. Torej, če zavijete v nepopolni pset, žal, ne moremo spusti, da je ena, ker je področje vašega točk ni bila zaključena. Torej, tudi če imate grozno teden kje ste umira in si bolan ali vaš pes umre, vaša mačka umre, in ste preobremenjeni z domačo nalogo, le poskušajte pset. Ali je po svojih najboljših močeh. Če to ne deluje, to ni važno. Samo obrniti. Vsaj lahko damo si točke za trud. A za napor v tem razredu. Vsaj najnižji padec oceno za trud. Torej, ja. To je precej to. Ima kdo kakšno vprašanje tako daleč od tega, kako razreda v razred? Ali kateri koli od teh? Vsak od teh tako far-- profili, uradne ure? Cool. V REDU. Torej je to tema, ki ni ena res rad govoril o tem. Res ne želi govoriti o tem. Vidva v resnici ne želijo slišal sem govoriti o tem. Ampak žal, vsi smo morali govoriti o tem. David preživel 20 minut predavanje govoriti o tem. In da je predmet akademske poštenosti. Torej smo vsi tukaj verjetno napisano esej nekje v našem Yale karieri. Verjetno smo gotten pogovor, kjer smo se so povedali, da ne plagiarize našo esej, ker to delo ni naša. V računalništvu, imamo ista vrsta koncepta. Vsa dela, ki jih predloži Vse kodo, ki ste napisali mora biti kodo, ki ste napisali. Ne bi smela biti kodo, ki ste jo kopira od nekje drugje. Ne bi smela biti oznaka, ki da ste googled in plopped v in ne vem, če deluje. Si nekako imajo občutek kaj to počne, vendar ni res. Če ste v dvomih, v bistvu, to je samo biti razumni. Na našem predmetniku, imamo cel seznam stvari vidimo kot razumno versus ni razumno. Na primer, primerno je vi in ​​vaš prijatelj razpravljali, kaj je najboljši način, da gredo o logično reševanje problema. To je dokaj razumno. Kaj ne bi bilo smiselno je, če vas fantje zbrali, natipkana isto kodo, in se obrnil v isto oznako. To ni razumno. Ista stvar, vrsta esej. Če želite, da bi razpravljali s svojim prijateljem, hej, To je tisto, kar želim pisati. To so koraki želim trajalo, da pišejo o tem, super. To je čudovito. Prosimo, da sodelujejo med seboj. Če vidva začetek pisati isto stvar, zavijete v istem eseju, ki je manj v redu. Torej, če ste v dvomih, samo ne stori. Tukaj smo v CS50, imamo skripte da run avtomatizirati za testiranje ne le pravilnost kode, ampak tudi edinstvenost kodo. Torej, prosim, ne nam postaviti v položaj imajo sklicevati svojo zadevo EXCOMM. Prosim samo za vsakogar, Dovolite samo bo to čudovita izkušnja. Vsakdo se uči bolje, smo vsi bolj srečni, in smo vsi ustanovljena za uspeti v tem tečaju. Nekaj, kar je zelo edinstven o tem razredu da mislim, da vsakdo bi moral res bodite pozorni, da je, da imamo kar se imenuje obžalovanje Klavzula v našem predmetniku. Torej v bistvu v 72 urah, če mislite, da ste naredili nekaj niste zares prepričani, da je bila primerno, prosim pridi k nam. Obljubimo vam, da v roku 72 ur bomo ročaj zadevo sami brez sklicevanja na višjo organ v upravi. Torej, če ste prišli k meni in rekel: Andi, hej, žal mi je, ampak mislim, da je nekaj vrstic v mojem Koda sinoči, da sem nekako googled, got off Stack Overflow, kopirati in prilepiti, in sem res, res mi je žal O tem, da mi sporočite. Prosim, ne pusti, da Zagnojiti in samo upam, da sem ga ujela. Mi ga bomo ujeli. Samo pridi k meni. Dovolite mi, da vem, v roku 72 ur. Bomo razbrati rešitev. In obljubljamo, da se ne bo nanašala na univerzitetne oblasti v bistvu. Torej je v vašem najboljšem interesu samo če sem iskren z vsemi vpleten v teku. V REDU. V REDU. Torej, zdaj, hitro, preden Sem korak naprej, pa nikomur imate vprašanja v zvezi z logistiko o tem, kako tečajih bomo teči, kako sekcije se bodo teči, nič od tega? V REDU. Ja. OBČINSTVO: [neslišno]? ANDI PENG: Ja. Torej quizzes-- koliko od vas so v poglavju ponedeljek / sreda? Koliko od vas, so v v torek / četrtek? OK, tako da je trdna split tukaj. Torej način, da tečemo je na univerzi Yale, je, da smo se dogaja, da imajo dva ločena quizzes-- enega za vsako section-- da bodo sprejeti v razredu. Mislim, da je oktober, konec oktobra, nekaj takega, kot enem tednu kviza. Ja, samo pridi v razred. Na ta ponedeljek ali sredo, boste vzeli kviz. Na ta torek ali četrtek, boste sprejme drugačno kviz. Vendar bo enak material prekrit. Ja. Dobro vprašanje. Ja. OBČINSTVO: Kje počnemo iti, da preverite naše ocene? ANDI PENG: Ja. Torej bom pošiljanje e-mail, kar vsak teden ko so kvizi graded-- ali, Žal mi je, ko se psets ocenjena. Psets običajno obrnil V opoldne ali petek. Torej, obljubim, da bom jih poskusite priti nazaj k tebi ki ga je poldneva naslednjega petka. Kadarkoli sem razred z pset, bom poslal ven obvestilom o redovalnice da vam pove svoj rezultat si lahko ogledate na spletu. Torej, prav ta teden, ko sem dokončati razvrščanje psets v zadnjem tednu, vi boste dobili e-pošto Obvestilo vam pove, hej to je, če vas pojdite na ogled svoje ocene. In si lahko ogledate vsak razčlenitev svojih razredih. Si lahko ogledate komentarje. Oh, hitro stvar tudi. Odsek komentar v veliki Knjiga je, če bom verjetno preživijo večino svojega časa razvrščanja. Torej, ena stvar, ki je zelo pomembno, ko vidva ogledujete tvoje stopnje na vaših psets ne samo išče na fizični rezultatom ampak tudi pokazal čas do res prebrali moje komentarje. Pogosto, da vam daje povratne informacije o tem, kako ste reševanje problema. Če morate storiti nekaj malo bolje, konstruktivna kritika je ponavadi Najboljši podane v teh pripombah oddelku. Torej, prosim, prosim, jaz grem preživeti nekaj časa pisanja komentarjev. Prosim, bi jaz zelo cenim če bi vi prebrali te pripombe. V REDU. Cool. V redu. Torej se bomo začeli govoriti in samo pregledovanje hitro nekaj materiala iz nič samo zato, da smo teden na desni strani za se začnejo težave v tem tednu je. Torej, medtem ko je ena zanka od treh vrst zank smo razpravljali prej v tem razredu. Nekaj ​​časa zanka v bistvu je napisan v skladnji kjer je, medtem ko je določen pogoj, To storite večkrat, kajne? Think of it v tej grafiki tukaj. Boš začeti na nekatere točke, ki v kodi. Ti boš, da vnesete pogoj zanke if-- Ne know-- x je manjši od ena. Če je to res, boste izvršiti zanke telo. In ti boš vztrajati početje da še enkrat, še enkrat, še enkrat, več in over--, ki je razlog, zakaj je loop-- dokler stanje postane false. Torej, na ta način, a while je eden izmed enostavnejši način pisati vse vrste pod pogojem, da mora ponavljati znova in znova in znova. Samo biti previdni, če pišete kakršno koli zanke da imate izstopni pogoj tudi za posodobitev karkoli že je je tako, da je tvoja zanka ne samo teči znova in znova neskončno. V vsakem primeru, boste želeli, da se prepričajte, da ste spreminjajo nekatere vidike kodo ali na koncu zanke Samo se prepričajte, da imate pot približevanja stanju ki si želijo spoznati do konca. Ali, da je smiselno, da vse? Mi pač ne želijo biti ujeti v tej spirali, kjer je gremo okoli in okoli in ni načina, da bi prekinil zanko. In vsak zanka v bistvu je način, kako to. V REDU. Drugič, mnogi od vas v vaših Mario psets verjetno moral zaposliti ta tip zanke. To se imenuje storila, medtem ko zanke. First of all, lahko kdorkoli povej mi kakšna je razlika med opravkov while zanko in medtem ko zanke? Ja. OBČINSTVO: Naredi while zanko teče na prvi [neslišno]. ANDI PENG: Ja, točno. Torej naredi while zanko vedno počne karkoli je v notranjosti opravkov, znotraj oklepajev tam in ne tega pogoja pred preverjanjem the-- žal, pa to kodo pred preverjanje pogojem. In to je še posebej pomembno za nas tukaj v tem razredu, saj je večina krat bomo želeli spodbuditi uporabnik za neke vrste vhodu. In nato, odvisno vhodni so nam dal, potem lahko ocenimo, oh, ne jih moramo še enkrat vpraša? Torej, v mario, če uporabnik ti je dal negativna višina, na primer, boš prvi poziv in stori vse, kar je notri. Potem boš, da preverite časa. Veš, je negativna 1, je, da s pozitivnim predznakom? Če je ne, bom šel nazaj in ponovite storiti in ponovite in ponavljati in ponavljati, dokler se ne Končno vam številko, ki vam je všeč, da bomo lahko vsi zaposlujejo v našem kodeksu. To je zelo pomembno za v bistvu vsaka uporabnik vložek. Jaz vam lahko garantiram koli Čas v pset kjer Prosimo vas, da vhod kakršno koli kodo, smo verjetno dogaja, da vam preizkus, v katerem smo dogaja, da vam nekaj slabega, da je tekoč poskusiti zlomiti kodo. Če se trudimo, da vas prosim za input celo število, lahko samo vam niz in videti, kako bi si, da zmorem. Če vas bomo prosili, da zaposlujejo starost, vam lahko dala negativno število da vidim, kako bi zmogel. Samo poskrbite, vidva sta testiranje za Primeri, v katerih ne boste dobili najboljše vhod, kaj je pravkar rekel. In storila, medtem ko zanke je velikokrat najbolje način, da oblikujete svoje kodo, tako da izpolnjuje to področje. V REDU. V REDU. Torej, to je verjetno najbolj Kompleksna zanke iz treh da smo pogledal tako daleč. In zdi zelo grozno na prvi. Ampak zagotavljam vam, ko vaju navaditi, kako uporabiti za zanke, to je ena izmed najbolj uporabnih stvari, najbolj uporabno orodje v vašem arzenal za premik naprej v tem razredu. Tako, na primer, v nič, smo imeli to zelo preprost blok da je pravkar rekel ponovite to gotovo stavki določeno število krat. Mimogrede, SAJ-- da je Scaz Andi Jason. Smo velikokrat prijavite našo e-pošto SAJ. Če rečemo, SAJ, ne bodite zmedeni. To je samo nas. Torej v nič, smo bili sposobni, da imajo blok, ki je dejal, da ponovite ljubim SAJ! 10-krat. Zelo preprosto. Logika, da je Zelo, zelo preprosto, kajne? Rad bi najprej iti skozi prvi čas in videli, da se drugič in glej, da se tretjič, itd in tako naprej, dokler ste zadeli do 10. In način, kako bi pomenilo, da je v koda je samo prek preproste za zanko. Torej za, boš razglasi svoj spremenljivka tukaj, v tem primeru, z notr. Bomo poimenovali i. Bomo inicializacijo 0. In izdaja ustavljanja bo i je manj kot 10. In posodobitev se bo i ++. In v zanki, gre izvršiti, dokler sčasoma idealno konec condition-- v kateri primeru, da se dogaja, da bi prekinil zanko. Treba bi bilo stvari, ki vas fantje so vse vrste videla in moral storiti za tvoj problem enega niza. Ali kdo kakršna koli vprašanja o zdaj za zanke? V REDU. Great. V REDU. Torej za tiste, ki imajo preberite pset spec za ta teden vemo, da bomo morali zaposliti nekaj, kar se imenuje ASCII ASCII tabela. Torej David v predavanju šel čez kratko kako računalniki essentially-- vse je kodiran v računalnik, ki je binarni, v ničel in enic. In način, kako so računalniki lahko za shranjevanje različnih vrednosti, poleg do ničel in enic so z določanjem te številke za zastopanje druge števke ali v bistvu drugih znakov. Torej, v tem primeru se mora ASCII table-- vse to počne je karta znakov ali znakov, do številk. Torej datoteke izvorne kode v vaš computer-- se vidi, hej, kup ničel in enic, ničel in enic, ničel in enic. To je tisto, shranjeni v Dejanska spomin računalnika. Toda, ko smo ljudje želijo komunicira z računalnikom, smo want-- reči, na primer, če želim, da velike črke A, Bom potreboval nek način povedal, računalnik, oh, ko sem tipa velike črke A, mislim to zastopanje v binarno. In tako se je način delamo, da vrgel samovoljno stvar imenuje ASCII tabelo, kjer smo, kot človeku, kot programerji, nekaj časa nazaj, smo samovoljno odločil, da mi grejo dodeliti te številke Vrednosti teh znakov. Tako lahko vidva google to na spletu. Mislim, da je povezava z njo v vašem pset-- samo ASCII map vloži, ASCII miza. To samo pomeni, binarni številke v znakov. In to se dogaja, da je zelo koristno za vaš problem niz kadarkoli hočeš izračunati ničesar ali če vas želite prikazati nekatere znakov ali cela števila ali manipulirati določene znake. To se dogaja, da je zelo pomembno je, da ste vsi vedo, kako krmariti po tabelo ASCII. Tako, na primer, z velikimi črkami A predstavlja številko 65. In male je zastopana s 97. Zato je pomembno, da vemo, da je Razlika med obema vrednostma je 32. Pogosto, če boste potrebovali za pretvorbo iz eden na drugega, je razlika 32. In ne skrbite, če ste prijazni od zmedeni o tem na prvi. Mi bomo šli čez kako bi zaposlujejo to dejansko kodo. V REDU. Torej za tiste, ki ste s prenosniki ven, vas prosimo, da pull up tabelo ASCII, saj ti bo verjetno zahtevajo vidva z referenčnimi kaj so znaki so. V REDU. Torej, vedoč, da so nekatere znaki karto za določene številke, če bi bil jaz teči šele prvi linija, ki code-- printf a, male črke a, minus velikimi A. Ali kdo imajo ugibati o tem, kaj bi bilo tiskanje zdaj iz zaslona? Torej, najprej, kaj počne male črke A pomenita? Koliko je to kodiran v tabeli ASCII. Žal? OBČINSTVO: 97? ANDI PENG: 97, super. In kaj je z velikimi črkami? A OBČINSTVO: 65. ANDI PENG: Torej, kaj je 97 minus 65? OBČINSTVO: 32. ANDI PENG: OK. Torej, kaj mislita se dogaja, da zgodilo, ko sem prispevek, da vrstica kode v mojem računalniku? OBČINSTVO: [neslišno]. ANDI PENG: Oprostite, govorite. Brez skrbi. To je zelo varna okolje, minus kamera. Gremo vsi to-- brez skrbi. Samo gremo vsi skupaj, da se pretvarjamo, kot to je samo nam hlajenje v tej sobi. Brez skrbi. Ni vprašanje, je preveč neumen. Brez odgovora je neumen odgovor. Jaz sem verjetno bo, da delajo napake v času mojega poučevanja. Resno, fantje, samo blurt ven. Bodite prepričani v sebe, veš? Torej, kaj je bilo to? Kdo je rekel, da je zadnji odgovor? V REDU. Kričati, da je lepo in jasno. OBČINSTVO: 32? ANDI PENG: 32. OK, kaj je teči to kodo in vidim, če je to, kaj se zgodi. V REDU. Tako kot lahko vidva vrste glej, tipično zapis sem ustanoviti tukaj za to, kako bi mi zaposlujemo vsaka vrsta programa na našem računalniku. Imamo glavno funkcijo znotraj naše glavno funkcijo. Jaz sem le, da bo kopiranje in prilepite to vrstico kode. Prav tako bodite previdni, ko si fantje kopirate in prilepite kodo. Včasih nekateri operaterji ne prilepi nad pravilno. V tem primeru je minus Znak je pravzaprav pomišljaj. In tako se računalnik ga niso dvignili. Tako da sem moral iti nazaj in fizično natipkati da. Samo biti previdni, ko vi počnete to. V REDU. Bomo to teči tukaj. Torej bomo cd v naši section2. Sem se imenuje ta program asciimath. Torej, se spomnite, ko smo teči koli Program, želimo, da jo najprej prevesti da ga teče skozi našo znamko. In potem želimo dejansko vozijo Program, ki ga delaš dot-poševnice. Torej bomo ./asciimath. Pravica, da gremo. In vidimo, 32. Dobro opravljeno. Zaslužiš si kos sladkarije. Candy za vas. Žal mi je. V redu. V REDU. Torej gremo lahko nazaj v našem primeru tukaj. Aah, ne. Aah. V REDU. Jaz sem šele tekoč, da ostane tako. V REDU. V REDU. Tako da lahko vi vidite, lahko storimo veliko zelo zanimivih stvari, Veliko zelo kul stvari, veliko zelo zapletene stvari, ki vključujejo ASCII znakov in številk. Ko prideš do pete, to je veliko, da sledite skupaj. Ne bomo šli skozi odsek. Vas prosimo, da se, če je le mogoče, dobro razmislite na papirju najprej o tem, kaj naj bi se dogaja, ko vnesete kot niz vrednot. Na primer, v tej zadnji vrstici, imamo z-- ki predstavlja določeno number-- a-- kar predstavlja tudi nekateri number-- plus 1 modulos 26 plus male črke a. Če fantje vodi obravnavo preko teh, vas lahko vidite vzorec prišel v kako smo manipulirajo kodo. Sem zelo, zelo predlagamo Po odsek vse vas Fantje gredo naprej in vhod tistih, vse v računalniku in videti, kakšen številke prihajajo ven in razmišljanjem skozi zakaj so to dogaja, ker za svoje psets To bo zelo pomembno za vas, da razumete zakaj nekatere stvari se dogajajo. Vse te diapozitivi bo na spletu. Torej, ne skrbi poskuša fizično prepišite zapiske. Spletni Vse je. To samo po sebi del bo na spletu. Vse moje izvorna koda, ki Tečem bo na spletu. Ja. Ali imate še vedno vprašanja? OBČINSTVO: Kaj je modulos? ANDI PENG: OK. Torej modulo operator, da se dogaja, da biti zelo pomembno, da se pset vaši fantje otroška tukaj. Torej tako, da upravljavci v C in programskega dela je, da imate kar se imenuje simbol delitve in simbol modul, ki je tako kot procent znaka. Torej, v C, ko boste to storili celo deljeno s celo število s poševno črto, C ima tendenco, da želijo zmanjšati off vse pikami, ker celo hoče pretvoriti v celo število. To se ne dogaja, da želijo biti dvojna s kupom decimalk vse po njej. Torej, če naredim 3 deljen z 2, da se dogaja da bi prekinil 0.5 in samo vam 1. Torej, to je nekaj, kar bi bilo zelo previdni, ko ste delaš vse vrste matematike pri načrtovanju, je, da so številke, ki jih dobite ne sme biti številke da ste mislili, zaradi česar je zaokroževanje v vašem zadnji pset je tako pomembno. Modulo vam preostanek. Tako na primer, če sem 3 modulo 2-- tako za 3 odstotke znamenje 2-- da bi vam v preostalem delu, ki. Torej 3 deljeno z 2 1.5. To je 1 preostanek 1. To bi vam 1, ki je je preostanek tega. Torej, ko sta vidva gibljejo skozi mizo ASCII, modulo bo na koncu pa nekaj, kar je zelo pomembno, in bomo razpravljali, da je pozneje. V REDU. Torej nekaj, kar je precej, precej nova in precej edinstven da smo razpravljali ta teden je koncept kakšna matrika je. Torej matrika je prva tip strukture podatkov da bomo srečati v tem razredu. Vsi podatkovna struktura se je neke vrste samovoljno, dobesedno stvari, kot strukture da smo kot so ustvarili programerji, ki smo mu v naši kodo, ki lahko vsebuje tudi druge kose kode. Torej, v tem smislu, kot array-- si o njej mislijo kot datoteko omari, kje če odprete drugačen police vaše datoteke omari, lahko dostopate do različnih stvari. V spomin, niz se samo delaš ista stvar na vašem računalniku. Lahko imaš drugačno blocks-- smo jih pokličete indices-- iz matrike. To je tako kot blok, polica spomina ki smo jih ustvarili v vaš računalnik, ki lahko vnesete nekatere stvari v različnih prostorih. Torej, s paleto, boste Vedno morajo specify-- morate navesti razglasitev matrika v naslednji obliki. Ti boš prvi določite vrsto podatkov da želite ustvariti array. Če želim niz števil, Jaz bom dal int tam. Če želim niz nizov, Bom dal strune tam, ime svoje matriki, in nato boste imeli oglatih oklepajih. In znotraj oglatih oklepajev, ste dogaja, da imajo velikost vašega array. Nekaj, kar je zelo pomembno, da imejte v mislih, ko je ustvarjanje nize da, ko si ustvarite matrika, da velikost ni mogoče spremeniti. Torej, če veste, da prav zdaj imate paleto velikosti 10, veš, da bom imela 10 celic znotraj ali 10 indeksov v tem polju, in to se ne bo nikoli razširiti ali zmanjšati ni važno kaj, in da je trenutno le 10 blokov prostora dodeljena v spominu, ki lahko shrani do 10 stvari, ki ne glede na ste dal. Torej, na ta način, tip podatkov matrika, podatkovna struktura, ki je matrika se zelo razlikuje od nekaterih drugih, da bomo se zajemajo kasneje v tem tečaju. Ja. Na primer, če si hotel ustvarite matriko velikosti 3, ki vsebuje spremenljivke integer-- oh, oprostite, za temperature-- in temperaturo, ki znaša Seveda je celo število. Tako bi ustvarili int, ki je vrsta podatkov o tem, kaj želimo shraniti. Bomo call to temperature zavoljo nomenklature poimenovanja nekaj, kar smo vsi razumeli. In bomo imeli oglatih oklepajih. In želimo tri številke. Torej bomo dal tri znotraj njega. Nekaj, kar je res pomembno imeti v mislih je, da so nizi nič indeksirajo. Vse to pomeni, da vas začne z indeksom 0, in zaženete navzgor skozi velikost matrike minus 1. Tako na primer tu, imajo celo paleto velikosti 3. To se dogaja, da se lahko da imajo tri vrednosti. Toda številke themselves-- da Številka, array, da indeks, array so 0 do 2. Torej fantje, bo zelo, zelo previdni, ko greš skozi vaše težave, določenimi in ustvarjanje kakršno koli array, saj veliko krat se počutiš res, res težko pozabiti. Sem dejansko nimajo indeks od 3, da sem trenutno šele imajo indeks 2. In če boste poskušali dostop tretjo indeks, to se dogaja, da je tisto, kar je imenuje null terminator. To se ne dogaja, da dejansko obstajajo v matriki. In je računalnik ne bo všeč. Zato bodite previdni, če ste dostop do stvari, samo da se zagotovi, da se spomnite da so nizi nič indeksirane. V REDU. Tako prvi primer je le eden od načinov ustvarjanja array. Drugi primer imam Spodaj je le poseben način oblikovanja, kar je enako podatki struktura, ki smo jih pravkar inputted. Torej, namesto da bi fizično teče skozi in dajanje na temperaturi od 0 enaka karkoli, temperatura 1 enaka ne glede, temperatura 2 enaka karkoli, da bi dejansko samo neposredno je vse ustvaril v eni vrstici v temperaturnih oglatih oklepajih enaka. In obvestilo, v tem primeru, vam ni treba določiti, kako velik je vaš matrika je, ker računalnik se dogaja, da iti skozi in videli, da obstaja trije elementi v teh zavitih oklepajih. In to se dogaja, da vedo, OK, Rabim matriko velikosti 3. Vam ne bo treba Vhod je na naslednji način. In tudi, ja, da je tako. Ima kdo vprašanja o tem, kako naredimo nize ali kako struktura matrike deluje? Ja. OBČINSTVO: [neslišno]? ANDI PENG: Ja, točno. Torej, če ste bili, da razglasi in inicializacijo matrika naslednja metoda, ki je drugi način, lahko pustite tiste. In računalnik avtomatsko ve, da je to potrebuje, da računajo, koliko elementov so v teh zavitih oklepajev, ločen z vejicami. Torej, tukaj so videli 65, 87, 30. Torej, računalnik ve, oh, tam je tri cela števila. Vem, da ustvarite ime matrike Temperatura pri treh elementov v njem. Dobro vprašanje. Ja. OBČINSTVO: Ali ni mogoče ustvariti niz z različnimi tipi podatkov ki bi jih lahko vnesli v to? Na primer, s števil [neslišno]? ANDI PENG: Za namene tega razreda, ne, prav zdaj. Ko ustvarite podatke strukturirati kot array, ste štetje računalnik, hej, jaz te potrebujem dodeliti toliko spomin na mojega trdega diska, z vsako celico čemer Določeno število bitov. Ne pozabite, smo se naučili v tednu nič, da različni podatki tipi so različnih velikosti? Tako na primer, niz je drugačen znesek prostora kot char, ki je drugačno količino prostora iz razpona. In tako, če ne določite vi premeša in se ujemajo Katere vrste spremenljivk imate računalnik je bo zelo zmeden. In to ne bo vedel koliko pomnilnika, da vam. Torej za namene pravice Zdaj, lahko računalniki samo prepoznati eno vrsto matrike. Dobro vprašanje. V REDU. Torej, seveda je Drugo vprašanje imamo je, no, zdaj, ko smo ustvarili niz in smo dal vse te stvari v matriki, kako smo bo mogel dostopati do njega? Torej tipična struktura, ki smo vedno dostop array je naša lepa za zanko. Obljubim vam fantje, da bomo vidim veliko tega kolega tukaj. V bistvu, kadarkoli želite za vnos vrednosti v matriki ali želite, da dostop do njih je Najboljši način za to je za zanke, saj za zanke, ki jih vem kolikokrat ste želeli teči skozi niz, ker imate izdaja stop, kajne? In vsakič, ko zaženete skozi, lahko dostopate drugačen element matrike. In tudi to je razlog, zakaj tipično Začnemo za zanke na vrednost 0, ker ko imate dostop do nizi, lahko dostopate indeks nič. In tako je tudi vzporednice zelo lepo. Vidva morda želeli pisati za int i enaka 1. i je manjše ali enako 3. Ampak to ne bi delovalo čisto kot tudi tukaj, samo zato, ker vas imajo elemente 0, 1 in 2. In tako, če ste bili, da začnete svoj i na elementu 1, 2 in 3, boš na koncu teče izven meja svojim matrike, in slabe stvari se bo zgodilo. Torej, upam, da vama glej segue zakaj v prejšnjih razredih smo vam poučevanje fantje kako teči in format za zanke na način, da smo bili. To je zato, ker zdaj smo jih prešli v nizi, lahko vidite, zakaj je 0 posoja sama zelo lepo za dostop. Torej, kako delamo, da je that-- sem samo tiskanje tukaj zavoljo , da tiskanje. Ampak imam ograde, vejico. In dejansko dostopanje del se dogaja. Ime matrike je bil imenovan temperature. Tako da je temperatura in i-ti element matrike. Tako kot zanko teče skozi, to se dogaja, da začnejo pri 0. To se dogaja, da natisnete ven 0. indeks tega niza. Potem pa se dogaja, da natisnete iz prvega elementa. Potem pa se dogaja, da natisnete iz druge. In potem bomo prekinil. Je vsakdo jasno kako, da se dogaja? Great. V redu. Torej imamo tukaj način rekel, če nismo želeli za trdo-kodo me in-- kot programer. Nisem hotel, da bi dejansko fizično dal v vsakega posameznega elementa te matrike. Če bi želel, da namesto imajo vhodne uporabniški vrednosti, kaj je najboljši način za to? No, tukaj sem ustvaril to lepo funkcijo, v katerem sem lahko razglasi array. Torej int scores-- dovolimo samo povem, želimo, da bi matrika, ki je potekala v razrede vseh 18 od tu v tem delu študentov. Mislim, da imamo malo več kot 18 otroci danes. Ampak zavoljo primer je, kaj je samo prevzeti smo imeli 18. Jaz bi ustvarili ime niz točk z Tip int, ker rezultati seveda so številke. In jaz grem, da imajo 18 v oglatih oklepajih, ker to je, koliko učenci I želijo, da bi lahko za shranjevanje partiturami. In tako sem zapolnijo matrika je, da sem ga vodijo skozi zanko, od Seveda, z 0, da si moja 0. indeks. In nato z 18, da si moja ustavljanje izdaja, ker tam je 18 elementov v matriki. In potem bom naredil printf, Enter Moštvo student-- bla glupostima. Mi lahko kdo pove, zakaj tukaj sem tiskanje i plus 1 in ne jaz? To je neke vrste trik Vprašanje, ni res. To pa dejansko ni fizično vplivajo na potek kode. Ja. OBČINSTVO: [neslišno] 0? ANDI PENG: Ja, točno. To je malo nerodno reči, hej, ste 0. študent v tem razredu. To je malo čudno. Torej nas kot ljudi, ne zares všeč razmišljati o tem, kako računalniki mislijo. Torej, čeprav v računalnik, da je shranjevanje vrednosti v 0-th indeksa, ko smo ljudi, ne bomo res radi se nanašajo na sebe kot nič. Torej, ko sem samo tiskanje, da Jaz grem za tiskanje in dodajanje 1 le zaradi jasnosti. Torej, ko sem natisniti, bom, da bo lahko natisnete učence od 1 do 18. To dejansko ne vpliva na uvajalnega kode kakorkoli, tako da natisniti. Toda bodite previdni, ko ste dejansko dostop do array. Ko boste videli rezultate i, opazili, tukaj sem dejansko dostop do 0th indeks in ni 1 plus 0-- ali 1 plus 1, tako da v tem primeru, indeks da je dejansko jasno. So vsi nekako OK na kako to teče skozi in z vsakim indeksom sem dajanje vrednost v matriki in ustvarjanje matriko z 18 številkami da uporabnik bo vhod? V REDU. Cool. V REDU. Zdaj se premaknete v nekaj, kar je precej pomembne za to delo določeno kot dobro. Vem, da v predavanju David-- Žal mi je, da si imel vprašanje? OBČINSTVO: Lahko jo povečate? ANDI PENG: Ja, tako sem se potrudil. Ampak jaz ne vem. Zaradi neznanega razloga, to različica PowerPoint res ne deluje tudi z zaslonom. Tako da smo šele tekoč da ostane, kot je ta. Vsi ti bodo naložili na spletu. Oprostite, fantje. Ja. V REDU. Tako bomo lahko imeli tudi strune. Torej, če vi dejansko notice-- I vem, Rob šli čez to v tem predavanju da je did-- niz je dejansko le niz znakov, če mislite o tem, kajne? Niz je ime ali stavek ali besedo, kajne? Če bi bil jaz ustvariti niz z imenom Andi-- samo moje ime, A-N-D-I. Misliš, da je tako samo eno spremenljivko. Ampak v resnici, je to razčlenjeno v samo niz znakov. Torej, to je dobil značaj shranjena v vrednosti matrike. To je dobil značaj n shranjeno v Drugi indeks in tako naprej in tako naprej. Torej na tak način, smo dejansko imajo te vrste strukture določene v postaviti za naše strune. Tako da tukaj, če bi bil jaz vhod Beseda "jesti" - tako niz beseda enaka dobili niz. Če bi bil jaz na vhodu beseda "jesti", da je fizično način, da je moj računalnik je hranjenje to niz v mojem spominu. In če sem hotel teči skozi to in tisk, ki out-- tako za v i enaka nič, se spomnite, v predavanju smo zajeti nekaj, kar se imenuje strlen, ali dolžina niza. Ker jaz ne dejansko vemo, kako veliko je polje je kakršnegakoli uporabnikovega inputting-- Na primer, sem inputted Beseda "jesti", in vem, ki je dolga tri znake, kajne? Tako sem lahko dal v treh tam in vse bo v redu. Ampak, če je vaš vhodni uporabnik nekaj da je drugačen število vrednosti, boš niso mogli zares vem, da ko programirate kodo. Torej tako, da ravnamo testnih primerov kot da je, da imamo nekaj imenovano strlen, ki je samo funkcija ki vam pove, kako dolgo je niz. Torej strlen za besedo. Moja beseda je jesti. n enak strlen za besedo. Mi lahko kdo pove, kaj da vrednost dejansko je tam? Kaj n predstavlja prav Zdaj, v tem primeru, če bi imel jesti? OBČINSTVO: 3. ANDI PENG: 3, točno. Torej imamo za int i enaka nič, n enak 3, v bistvu. In jaz se dogaja, da teče dokler je manj kot 3i ++. In to se dogaja, da v bistvu gre skozi in narediti isto stvar. To se dogaja, da natisnete vsako vrednost in vam E-A-T. To je samo označuje drugačen način pisanja. To se dogaja, da bi bilo zelo koristno. Ja. OBČINSTVO: Kaj je prednosti dajanje n enak strlen besedo v notranjosti, ki za zanke [neslišno]? ANDI PENG: Ja. Torej, če bi bil jaz to-- reči, na primer, če bi bil jaz to storiti, in nato do-- oop--, da je v mojem kodo, da bi dejansko delal kot isto stvar. Vendar pa je način, da je David pojasnil se med predavanjem, če kdo od vas fantje zapomniti, da je, kot je ljudje, kot programerji, smo res poskušali programirati tudi mi koda, tako da ima naš računalnik da delujejo kot minimalno možnem času, da je naša koda zelo učinkovit. Torej, če sem imel, da je tam, kaj bi se zgodilo z mojim za zanko je, da sem najprej razglasi spremenljivka poimenovana i se bo 0. Jaz bom, da preverite, oh, kaj je strlen besede? Oh, strlen 3. Torej je i manj kot tri? Ja to je. Jaz grem teči. In potem drugič nazaj okoli zanka, bom prirastek i. i se bo enega. In jaz se dogaja, da preverite, oh, ampak kaj je strlen za besedo? Oh, to je tri. In ne da se zdi nekako potratno, vsakič, ko teče skozi zanko, da se preverjanje delovanja, čeprav so strlen z besedo nikoli dejansko spreminja? Torej, to je dodatna moč za računalnik. Ko začnete govoriti o stvareh, da so v milijardah in milijardah in milijarde krajev dolgo, zamisliti računalnik da bi fizično iti skozi in preverite vse te vsak čas. To je razlog, da bi samo zaradi učinkovitosti, smo vajeni, da samo to, ker na ta način, da smo samo kliče funkcijo enkrat na začetku, in da se vsakič, ko je gre skozi to se dogaja za shranjevanje vrednosti 3 tam, da ne boste morali nenehno preveri vsak čas. Ja. OBČINSTVO: Žal mi je. Samo [neslišno]. Bi vam int n enak strlen in dal da je nad zunanji strani za zanko kot tudi? ANDI PENG: Ja. Lahko bi to naredil, absolutno. Razlog jo imamo tukaj, je ker je način za zanke del je, da je to imenuje lokalna spremenljivka v smislu da vse, kar ste ustvarjanju notranjost za zanke obstaja samo notranjost za zanke. Torej je spremenljivka i samo obstaja v teh razredih. In tukaj so spremenljivke n tudi obstaja samo v teh razredih. Torej, če ste bili, da uporabite strlen od beseda večkrat spodaj navzdol, absolutno najboljši način za to, da bi bilo, da ga razglasi up vrh tako da ne boste imeli, da to storite enkrat. Ja. OBČINSTVO: Zakaj imate Nova linija po odstotka vidim, če želite, da bi vse črke zraven njega ločuje? ANDI PENG: Oh, sem si želel jih vse natisnili na vsako vrstico. Ni važno. Ja, to je oblikovanje. To je dobro vprašanje, čeprav. Ja, če sem hotel, da natisnete vse to na samo eni vrstici, Jaz ne bi imel pomišljaj v. V REDU. Vsakdo dobro? V REDU. Cool. Zato mislim, da sem dovolj govorila. Vrsti vidva, da teče skozi kodo in mi povej, kaj je narobe tukaj. Kje je napaka? Torej, kot lahko vidite, sem razglašena za Nov niz tip niza z imenom razreda. In sem inputted Sam, Jess in Kim vanjo. In jaz sem poskušala, da natisnete vsi elementi matrike. Mi lahko kdo pove, zakaj to se dogaja, da mi težave? Dam ti fantje 10 sekund, da razmišljajo o tem. V REDU. Ja? OBČINSTVO: Je leva center enako 3 ali [neslišno]? ANDI PENG: Right. Torej, kolikokrat je to dejansko tekoč teči skozi to zanko? OBČINSTVO: Four. ANDI PENG: Točno tako. To se dogaja skozi štiri krat. To se dogaja, da teče skozi na 0, 1, 2 in 3, ker je njihov element je i je manjše ali enako 3. To se ne bo ustavil, ko je 2. To se dogaja, da bo, dokler ne zadene 3. In kot vemo, da je le tri elementi v naši dejanski matriki. Če bomo poskušali dostopati do četrtega Element ali indeks 3, boš nekje hit v pomnilniku, ki ne obstaja. To se imenuje null terminator. Nič se dogaja tam. Računalnik se ne bo da je zelo zadovoljen z vami. Ja. Ima kdo vprašanja zakaj, da se je dogajalo? Da je skupna površina izogniti. Ja. OBČINSTVO: Ali ni prva drsna imajo tudi niz 2? ANDI PENG: No. Torej v bistvu, ko delaš matriko, da nosilec desno tam, da number-- vse to je povedal, si je, kako številni elementi imam. To dejansko ne pove me indeksi karkoli. Torej, v tem primeru, vem želim pisati s tremi mesti, s tremi fizičnimi mest na držite karkoli hočem imeti. Torej, to je, zakaj je številka tri je tam. Vendar, če sem hotel da to dejansko dostop, če sem hotel reči, printf Razred število nosilec, nato boš dejansko dal fizični indeks tam. Ja, dobro vprašanje. OBČINSTVO: Torej je fizično Indeks naj bi [neslišno]? ANDI PENG: Žal mi je. Lahko govorite gor malo? OBČINSTVO: Torej je fizični indeks [Neslišno] vsak izmed škatel? [Neslišno]? ANDI PENG: Ja. Tako da sem šel nazaj tukaj. Pomislite tukaj. Imamo celo paleto velikosti 3. Tam je tri mesta, kot so, fizične ograde tukaj. Ampak oni so poimenovali 0, 1 in 2. Torej, če sem hotel dostop do njih, tako, da sem do njih dostop je printf od kar sem hotel tukaj. Ti bi morali natisniti ven imenom nje, ker potem računalniku ve, oh, moram pogledati v tej matriki za 0th indeksa. Ja. Vendar je velikost tega ne spremeni. Velikost je 3, ne glede kako jih označiti. V REDU. Vsakdo dobro? OBČINSTVO: Torej, vsakič, ko sem [neslišno]? ANDI PENG: OK. Torej, v tem primeru ne bomo res priti v to zdaj v teku. Ampak vem, da string-- kot I dejal, niz je v bistvu niz znakov. Torej, če sem ustvariti niz nizov, sem nekako imajo vrsto matrike znakov, kajne? Torej, v tem primeru, saj sem imajo vrsto nizov, če ste bili na vhodu res dolgo besedo, da še vedno zavzema le en prostor, ker to je en niz. Ampak, če ste bili, da razmišljajo o znaki te matrike, nato pa, da je ob nastopu veliko več znakov kot katerokoli drugo besedami so. Ni res pomembno za zdaj. Ampak to je samo splošno kako se to dela. V REDU. Torej je to nekaj, kar bom pustil vam Veliko tekom semestra. Moram počivati ​​moj glas. Vi morate sami spodbujajo. Veliko vas verjetno morali spati zdaj. Jaz sem vnesla naključne težave kjer smo kot razred ali pa s partnerjem, zraven tebe bodo preživeti nekaj minut razpravljanje o tem, kako bi se gremo o reševanju ali oblikovanje programa, kot je ta. Torej sedaj, želimo ustvariti program-- bomo, da ga pokličete upper.c--, ki pretvarja z malo začetnico besedo zgornji razred string-- velikimi, žal. Beseda v kito, žal, je sinonim. Grem, da jih spremenite pomeni isto stvar. Ja. Vzemite nekaj minut. To ni nujno, da je napisana v katerem koli jeziku. Samo v psevdokoda kode ali logično, kako bi še lotil tak problem. Ja. [SIDE POGOVOR] Prav tako sem opazila, da vidva can-- Nekako vidim že program. Mislim, da moje pomanjkanje Način voditelj je problem. Ampak to je v redu. [SIDE POGOVOR] Ja, prosim, fantje. Pridi sladkarije. Pridi sladkarije. OBČINSTVO: Ja! [SIDE POGOVOR] ANDI PENG: Prav, ja, Bom začel metati sladkarije na ljudi, ki ne odgovarja na vprašanja. Tako da bi morali biti vsi odgovori na vprašanja. Ali mislim ljudi, ki ne odgovarja na vprašanja. Ja, ravno obratno. [SIDE POGOVOR] OBČINSTVO: [neslišno] ANDI PENG: Ja. Ja. [SIDE POGOVOR] Vse je v redu, fantje. Vzemite, kot so, še 10 sekund. [SIDE POGOVOR] OK, fantje. Torej, preden začnemo poskušamo dejansko fizično napisati kodo, dobra navada razviti, da želimo prvi vrsti zaradi ven logično, kako bi to naredil. Hočeš, da poskrbite, Pred vami fizično začetek poskuša kodo v Mario, da vam bo prepričajte, da imate psevdokoda. Da vas vodi skozi kaj morate tako ustvariti da, ko te fizično napisati svoj program kasneje, ste bolje ujeti napake v kodi in stvari, kot je ta. Torej bomo šele začetek by-- v angleškem jeziku, v psevdokoda, does kdorkoli želite, da bi me generično razlaga o tem, kako bi šel o tem? Ja. OBČINSTVO: [neslišno]. ANDI PENG: Seveda, brez skrbi. OBČINSTVO: Lahko ga vprašam ali vprašajte nekdo, da bi dobili niz 1-- Ja, niz, in potem-- ANDI PENG: Ja, tako je to dober začetek. Bom začel tipkati, žal, kot govorite. SO- OBČINSTVO: --the male Številke so višje, kajne? Ali male črke imajo visoke številke? ANDI PENG: Točno tako. OBČINSTVO: Torej odštejemo 32 iz katerega koli [neslišno]. ANDI PENG: Great. Tako smo nekako imajo splošen občutek kako delati o tem problemu. Vedoč, da smo nekako naučili fizični način, godala so shranjene v pomnilniku, kaj si naredil že vem, da boš verjetno morali napisati v kodi z namenom, da se premaknete skozi niz? OBČINSTVO: Za zanke. ANDI PENG: A za zanke, točno. Great. Tako smo nekako imeli generično psevdokoda odpiše da je vrsta daje vas opozarja na to, kako bi se gibati reševanju problema. Zdaj pa, da imate to, vas lahko reference za kasneje ko skušate dejansko napisati svojo kodo. Tako bomo lahko dejansko šel tukaj. In imam funkcijo imenovano upper.c-- tam je is-- pravičnega prazno predlogo zdaj, da vaju bodo mi pomaga ugotoviti, kako napisati Ta linija ne code-- kode. To bo več vrstic kode. Ob zagonu kakršno koli slepe pset, kaj je prva stvar, rabim da se spomnimo, da naredim? OBČINSTVO: [neslišno]. ANDI PENG: Velika Jap. Vključi. stdio.h. Pogosto je to ena izmed Najbolj enostavno napake ljudi bo, ko si pisanje, je, da se bom pozabiti, da vključuje Pomembno knjižnica, ki jih potrebujejo. Torej, če je delovni čas in ste kot, Ne vem, zakaj je moja koda ne deluje. Mi lahko poveste, zakaj to ne deluje? Bomo rekli ste #include? Moral bi jo #include. V REDU. Torej imamo standard I / O tukaj. Je to edina knjižnica bomo potrebovali tukaj? Kaj drugega se bomo storili? Žal mi je. Nekdo ga je pravkar kričati ven? OBČINSTVO: [neslišno]. ANDI PENG: Tukaj imaš. V REDU. In kako naj grem o zagonu kakršno koli funkcije, kakršno koli glavni funkciji v okviru našega programa? Int glavni. V REDU. Kaj sem dal notri tukaj? Kaj je prva stvar, ki jo želite storiti? Če želimo, da bi dobili Niz od uporabnika, kaj bomo imeli storiti na tej prvi vrstici? Žal mi je, vidva samo občutek prosimo, da spregovorijo in glasno. Samo zakričal karkoli. OBČINSTVO: Vprašajte uporabnika? ANDI PENG: Kako to storimo? Ask-- bom tip "od uporabnika"? OBČINSTVO: printf. ANDI PENG: OK. Printf. Kaj hočem printf? OBČINSTVO: Vnesite nekaj. ANDI PENG: Kot da? Fantje, se pretvarjamo, kot da sem računalnik. Fizično povej mi vsak korak da moram vnesti tukaj? Delam kaj narobe? Moral bi vnesli nekaj? OBČINSTVO: Moraš narekovaje. ANDI PENG: Rabim ponudbe? V REDU. V REDU. OBČINSTVO: In potem nova linija. Podpičje. ANDI PENG: podpičje? V REDU. Dobro. OBČINSTVO: In morda določite ki si ga želite v male črke? ANDI PENG: Great. Vidva smejali me pozabijo postaviti podpičje. Zagotavljam ti nekje v okviru tega razreda boste pozabili, da dajo podpičje, in Vam bo tri ure, da ugotovimo zakaj tvoja koda ne deluje. To se je zgodilo, da vse nas. To se bo verjetno zgodilo s tabo. Priti v dobro navado uporabe podpičji. V REDU. OBČINSTVO: Želite narediti nasprotno poševnico? ANDI PENG: Seveda. Ali želite narediti poševnico? OBČINSTVO: Ja. ANDI PENG: Great. V REDU. Kaj naj storim zdaj? OBČINSTVO: Get niz. ANDI PENG: Get niz. Torej, kaj sem tip? Nekdo? OBČINSTVO: String s. ANDI PENG: String s. OBČINSTVO: GetString. ANDI PENG: Nekdo, si mi, kje lahko povem ta funkcija GetString prihaja iz? OBČINSTVO: string.h. ANDI PENG: string.h? Misliš, da je iz string.h? OBČINSTVO: [neslišno]. ANDI PENG: Tukaj imaš. To je od CS50.h. Če ste vedno zmedeni o kjer Knjižnica je datoteka ali datoteka glave je, google dobesedno string.h, in jaz ti bom povedal kaj so vse funkcije da so v string.h. V REDU. Torej sedaj, da sem ustvaril niz in sem poziv uporabniku za to, Sem ga shrani v spremenljivko poimenovani s, kaj moram storiti zdaj? OBČINSTVO: Preverite, če je z malimi črkami. ANDI PENG: Oprostite? OBČINSTVO: Preverite, če je z malimi črkami. ANDI PENG: V redu, kaj je to. Kako naj naredim to? Pravzaprav, za namene razreda prav zdaj, smo le, da bo Predvidevam, da je vse, kar je da vhod smo se že z malimi črkami. Če boste želeli, da preverite, bi si dodajte pogojno izjavo da preveri, da je preko vsak niz element in preveri, če je med določenimi vrednostmi. Sem pozabil, kaj se je število od vrednosti male črke so. Lahko ga lahko ogledate na mizo ASCII. Ampak ja, to je res dobra točka. Ampak zdaj, smo le, da bo Predvidevam, da so vse strune vnesemo so z malimi črkami. V REDU. Torej, kako bi jaz šel okoli ta problem zdaj? OBČINSTVO: Za zanke. ANDI PENG: Za zanke? V REDU. Povej mi, kaj naj tip. OBČINSTVO: Za int i enak 0. ANDI PENG: OK. OBČINSTVO: Oh, pravzaprav, potem vam storiti vejico in narediti n je enaka strlen. ANDI PENG: Tako pomembna stvar da mislim, da ona tu opazila je, da nismo imeli za povedati int n drugi, ko smo to naredili. Samo vedeti, da je z za zanka, ko ste o razglasitvi, vi dejansko ne potrebujete int o drugič vam spremenljivko. Lahko rečem n strlen. OBČINSTVO: S. ANDI PENG: s. V REDU. OBČINSTVO: Potem podpičje. ANDI PENG: Seveda. OBČINSTVO: In potem [neslišno] n. Potem i ++. ANDI PENG: Great. V redu. Kaj želimo v notranjosti od tega za zanke zdaj? Ne pozabite, če bomo teči skozi niz in teči skozi niz, želimo preveriti stvari v njem. Kaj bomo potrebovali? To je nekako zapleteno dela zdaj. Vsakdo ima ugibati? V REDU. Torej, najprej, kako bomo celo dostop? Kako bomo še najprej preverite, ali dostop element v matriki? Kako to storimo? Kaj je zapis, ki jih uporabljamo za to? Kaj je ime te matrike se imenuje? Imenuje se je, kajne? Ne pozabite, vsak niz je vedno array. Torej je nosilec i, kajne? Ker je trenutna vrednost ali vrednost indeksa smo preverjanje. In bomo nastaviti, da enako to-- želimo male vrednosti, kajne? Želimo, da bi se to spremenilo lower-- Žal, želimo z velikimi tiskanimi črkami. Želimo, da vklopite male vrednost v z velikimi črkami. In tako like-- Oprosti, kako ti je ime? OBČINSTVO: Heidi. ANDI PENG: Oprostite? OBČINSTVO: Heidi. ANDI PENG: Heidi. Kot je rekel Heidi na začetku, smo verjetno bodo potrebovali the-- smo Verjetno bodo morali odšteti 32 iz katerega koli charc, ki je, kajne? Ker na ASCII miza, razlika med malo črko in velike črke je 32. Torej, ko to počnemo, smo verjetno tekoč, da želijo, da odštejemo 32, kajne? Torej bomo storili S i. Ali vsi razumejo, zakaj sem to storil? Ker je prav zdaj, v naši matriki, smo preverjanje 0th indeks, kajne? In v 0th indeksa niz, to je prvi znak. In ta znak gremo domnevati, da je z malimi tiskanimi črkami. Če želimo, da bi bilo z velikimi črkami, smo morali odšteti 32 od njene vrednosti, ker v našem ASCII miza, to je, kako smo ga dobili do naslednjega ustreza vrednost, ki omogoča velike črke. Ali vsi razumejo, da je? Ja. OBČINSTVO: Bi tudi vi vse male črke v minus-- ANDI PENG: Ja, tako da je dejansko res dobro. Jaz bom prišel nazaj, da Vprašanje, ko smo to naredili. Ja. In potem, če želim glej, kaj se dogaja, Jaz sem verjetno bo želite natisniti, kajne? Nekdo mi je povedal, kaj Rad bi tu natisniti. OBČINSTVO: printf odstotkov c poševnica nazaj [neslišno]. To je vrednost [neslišno] ov i. ANDI PENG: s i, žal? OBČINSTVO: [neslišno]. ANDI PENG: Ne vem. Kaj misliš? OBČINSTVO: No, jaz wouldn't-- Mislim, da ne bi bring-- Jaz bi ga vzemite ven v notranjosti, saj [neslišno]. ANDI PENG: Oh, kako bi to storili? OBČINSTVO: Ja. ANDI PENG: Pustimo to pot je, in bom razložiti, zakaj kasneje. Ne pozabite, tudi če ste imajo držalo mesto, želite postaviti oklepaje okoli njega. V redu. Zato bi to moralo biti trdno funkcijo tukaj. Naj jo vodijo, in videli, če se pripravlja. Naredite zgornji del. Uh-oh. Da ne izgleda preveč dobro. Zakaj se to dogaja? Kot pri vseh drugih napak, ki jih želite iti nazaj in začeti s prvo, ker tipično ena napakah vzrokov veliko drugih napak po njej. Tu vidimo upper.c: 18: 25, ki pove, me v tem programu z imenom upper.c, na liniji 18, napaka implicitno razglasi knjižnica funkcij strlen s tipom unassigned-- bla, ne vem kaj se dogaja po tem. Vse to me zdaj povedal, je da se nekaj dogaja na strlen. In računalnik je zmeden, ker to je kot, ne vem, kaj strlen je? Kaj počne, da je verjetno vam povem vam manjka? OBČINSTVO: Ti manjka [neslišno]. ANDI PENG: Imaš prav. Točno tako. Torej, to je, če je to pomembno, da se prepričajte, da vsako funkcijo lahko uporabite v vašem kodo s pravilno glavo datoteke za knjižnico, ali pa boste dobili veliko napak in tvoja koda ne bo vedeti, kaj se dogaja. Torej bomo vključiti string.h tukaj. Zdaj, ko smo poskušali zbrati zgornji del. Prevedite pravilno. Oglejmo zaženete ta program. Torej, kaj vpisali v male. Kaj si fantje želijo, da tip? Kričati ven nekaj. Vredu, Charly samo hodil. Bomo vnesite ime Charly je. Charly z malimi črkami. In upajmo, upajmo, da je to dogaja kričati ven in izpljuni Charly z velikimi črkami. Jej! se vsi razumeli, kako Šel sem o reševanju tega? Tako, da sem lahko manipulirati z uporabo celih števil rešiti nekaj, kar Hočem narediti v kito, zaradi znakov in cela lahko se sklicujemo na enak način, saj kartiranje ASCII. Torej, da se vrnete na vašo točko, če sem želel dati tu namesto 32 velikimi minus male pravična kot da, da bi delovala enako dobro, ker je to preprosto samo Razlika med tema dvema vrednostma. Če želim, da bi ta again-- Charly. O, ne. Mislim, da smo šli v napačno smer, ja? OBČINSTVO: [neslišno] male črke a. ANDI PENG: Tukaj imaš. Ja. In ven pljuva Charly. Zato bodite previdni, ko ste odštevanjem vrednosti se spomnite, ki je eden večja od druge. Na primer, tu sem pozabil da male a pomeni dejansko večji kot z velikimi črkami A. Torej, ko sem Poskušal jim odštejemo drugo smer okoli, sem dobil negativen 32. In moj računalnik je bil všeč, Ne vem, kaj je to. To je verjetnost, da samo nekaj naključno vrednost, ki ni zelo dobra. In tako se prepričajte, da ste odštevanjem na pravilno dolžino najti znak, ki ga želite. V REDU. Je kdo zmedeni o tem, kako šli o pisanju to funkcijo? V REDU. Torej pravzaprav funkcija že obstaja v knjižnici imenuje ctype.h. Knjižnici se imenuje ctype.h. Ta funkcija je dejansko že napisal za vas. To je poklican, da zgornji del. In tako za namene to pset, boš da bi našli, da si res želite uporabiti Veliko funkcij je vseboval v knjižnici ctype. Da zgornji, znižati, je zgornji del, je lower-- to so vse funkcije da si bodo lahko zelo uporabo, zelo hitro v svojem kodeksu, ki počne točno to, kar ta počne. Pisali smo, kako spremeniti niz v velike črke. Toda to je dejansko kodo da je nekdo drug napisal in da lahko dostopate do preko različno funkcijo. Ja? OBČINSTVO: Torej si samo kopirajte je tam in to za vsako posamezno črko? ANDI PENG: Ja, saj jaz ne mar vrednosti a. Pravkar sem vseeno, da je razlika med njimi je 32, kajne? Razlika med malimi črkami b in velikimi B je prav tako 32. In razlika med c in velikimi C je vedno 32. Pravkar sem moral skrbeti približno Razlika med njima, ker so vse črk sledijo istemu vzorcu, kajne? Če imam razliko eno izmed njih, Vem, kaj je razlika med vsemi njimi. Dobro vprašanje. Ja. Vsakdo dobro? V REDU. OOP. V REDU. Torej še en koncept, ki je bo zelo koristno, saj vas še naprej razvijati kodo je ta ideja ustvarjanja funkcije ali abstrakcijo. Torej, zdaj smo vsi sprejeti algebro. V algebre, se boste naučili, da je ta čudovita stvar imenovano funkcijo stroj, kjer je, če vas vhod ena vrsta številka, teče skozi to čudovito funkcijo in iz pops drugačen izhod, kajne? V kodi, ista stvar se zgodi v kakršnikoli funkciji. Tako sem lahko fizično pisati v mojem telesu mojega kodo glavni izjavo, da v resnici ne ne glede na telo kode počne. Ampak zunaj, da sem lahko tudi napisati veliko različnih funkcij da narediti veliko različnih stvari. Na primer, ki smo jih že začel uporabljati nekatere od njih. Printf-- da je funkcija, da je nekdo drug je že napisal, da je smo lahko pokličete v našo kodo. Da upper-- v tem primeru, upper-- je še ena funkcija smo napisal, da smo Lahko pokličete v našo kodo. In zato mislim, zakaj imamo tudi funkcije? Zakaj ne bi samo Pljuskanje vse v isti vrstici kode? To je enostaven za vsakogar. No, argumentih, ki je, najprej, organizacije. To je zelo nadležno dogaja skozi kodo nekoga in ena funkcija kot printf. Če vidva pravzaprav vedel, kaj je Funkcija printf pomenilo pisati, to je, kot, 1.000 vrstic kode. Če vsakič, ko sem hotel da printf nekaj, Morala sem napisati 1.000 vrstic kode, da bi bilo zelo nadležno, da se glasi, prav? To je razlog, zakaj smo pravkar ustvaril ta abstraktno funkcijo da imamo že nekdo ostalo je napisal nekje drugje. In vsakič, ko se moramo, da ga uporabljate v naša koda, bomo morali reči printf. In da je sposoben, da uporabite funkcijo nekdo je napisal v našem kodeksu. To omogoča lažje organizacijsko prebrati kodo. Drugič, to je poenostavitev. To poenostavlja korake, ki jih imamo sprejeti, da bi rešili naš problem. Printf, funkcije, kot so printf, Funkcije, kot so na zgornji so vse stvari, ki nam omogočajo, da poenostavila naš kodo navzdol, tako da je lažje. In zadnja stvar, ki je ponovno uporabnost. Torej v dejstvu, da imamo funkcijo imenovano printf da lahko rečemo veliko različnih krat in omogoča, da je mogoče ponovno uporabiti. Če bi bil jaz pisati printf, Sem samo napisati enkrat. Obstaja le s tem, da na enem mestu. Če sem hotel še enkrat, jaz bi morali kopirati in prilepiti vse to v mojem drugem vrstico kode. Zato, če želimo ustvariti funkcijo ki obstaja zunaj naša glavna, bomo lahko samo pozivamo ga in ga kadar koli ponovno moramo tako, da je veliko lažje za nas kot programi za pisanje. Torej način, da bomo dejansko napisali funkcija je zelo podobna, kajne? To je nekako prva primer, v katerem bomo videli funkcijo prevzeti slog drugačna od naše int glavno praznino. V tem primeru, če bi hotel napisati funkcijo imenovano q, kajne? In int vrednost tukaj se vsi mi pravi, kaj hočem to delovati, da se vrnete k meni? Če želim kocko celo število, Grem, da želijo vhod. To so parametri. Bom vhodi vrednost tipa int. In bom, da se vrnete druga vrsta vrednost int. In tukaj, kot ti lahko vidite, vse delam je cubing karkoli moj vložek je kot je moj izhod in ga vrnete. Torej, vse to funkcijo pa je traja neko celo število. Jo pomnoži sam dvakrat tako da kocke v smislu. In potem se vrne karkoli, da izhod. Torej, v tem primeru, to je dve liniji koda, da smo morali napisati več. Ampak, če smo želeli poklicati ob tem večkrat, to je veliko lažje, da tip, da je eden linija tukaj, ki je na kocki, kot morali iti skozi več krat. Torej tako, da je v bistvu vsaka oblikovanje za kakršno koli funkcijo se dogaja, da obstaja je všeč tukaj. Torej imamo ime funkcije. V tem primeru, je pozval kocka. In smo ga poimenovati kocko, ker je to je enostavno zapomniti. Lahko poimenujte Square in to je dejansko mogoče kubikov. Ni važno. Samo ime, ki ste dodeljevanje svojo funkcijo. Ta pravica je tu, int, je tip parametra, ki jih potrebujete. Torej, kaj to funkcijo potrebujemo za delovanje? No, to potrebuje vhod. Poimenoval sem jo vhod. Lahko jo poimenujete kar hočeš. Ampak moram nekaj tipa int. To se dogaja, da dejansko izvrši vse, kar je znotraj tu, telo funkcijo. In potem tip donos tukaj, to int-- vse to je mi pravi, je da je ta funkcija dogaja, da se vrnete k meni v notr. Tako se dogaja, da v int, in to se dogaja, da vam nazaj int. Ali vsi razumejo, kako oblikovanje tovrstnega dela? Cool. V REDU. Torej, ne bodite v skrbeh, če se to zdi malo abstraktno zdaj. To je nekaj, da bomo govorili o tem. Bomo potopite globlje kasneje v teku. Tako, da kakršno koli višji ravni abstrakcija od teh stvari dela je, da se v pomnilniku, pri računalnik, vse je shranjena v tej vrsti iz dimnika, naj rečem. Torej tam na vrhu. Ne vem, če vas fantje, lahko vidite, da je dobro. Bom poskusil, da jo povečate. Tu na vrhu, smo imajo fizično besedilo o tem, kaj je računalnik interpreting-- vse ničle in tiste, ki obstajajo v našem računalniku. In potem imamo inicializiran podatkov in neinicializirane podatki, tisto, čemur pravimo globalnih spremenljivk. Torej spremenljivk, ki obstajajo v vseh programih in čez celoten, v bistvu, koda. Brez skrbi, če se vidva nekako nejasna glede tega. To sploh ni pomembno, prav zdaj. In potem imamo kaj imenujemo kup na kup. Pomislite na kupu dobesedno kot tako kot kup stvari, Sveženj drugačen Stvari se ga potiska na vrh drug od drugega, da shranite različne spremenljivke in sintaksa v kodi. In potem je tu na samem dnu, imamo spremenljivke okolja kaj ste izvršitve v samo tvoja vrstica kode. In smo le, da bo za povečavo v na dejanski dimnik delu. Torej tukaj, če smo bili za povečavo v na samo tem območju dimnika, To je tisto, kar izgleda. In to je dejansko zelo pomembna ko si fantje govorijo o funkcijah, ker je obvestilo, da je Spomin na računalniku je shranjevanje spremenljivk in funkcije in parametri, tako si Funkcija in vaše glavne spremenljivke v različnih krajih. Torej sedaj, glavno je, dejanska funkcija da ste izvršitve v kodi. Vi ste njegovi parametri shranjeni tukaj in njegove lokalne spremenljivke shranjene tukaj. Lokalna spremenljivka samo pomeni vsako spremenljivko da obstajajo samo v tej funkciji. In na vrhu je, imate to ločena funkcija imenuje kocka. Imate to parametri kot tudi tiste domačini. In razlog, da si lahko glej tukaj je, da tisto, kar se zgodi, ko se kocka je v vrednost iz vaše glavne funkcije je, da je dejansko to je kopiranje, da več. Torej, če sem hotel kocke 2 in se vrniti 8, da je 2 dejansko vnesene kot parameter in je kopirali več, tako da boste morali, da obstoječi v dveh različnih mestih v pomnilniku. In moraš biti zelo previdni o spominjanju, ki eno od tistih, ste dejansko manipulirajo. In primer, kaj se je zgodilo da bi bilo zelo, zelo slabo obstaja tukaj. Torej tukaj, imam, v teoriji, program prav tukaj, glavna funkcija da sem razglasitvi int x enaka 1. Jaz sem razglasitvi drugega int y enaka 2. In potem sem ga teče skozi to funkcijo imenuje swap, kjer sem domnevala, da to je zamenjavo dve vrednosti. In potem bom jih natisnete, kajne? To je tisto, kar želim ta program storiti. Torej, kaj je prišel dol in poglej. Torej, če sem dejansko napisal drugačen funkcije, kot lahko vidite, imamo glavno funkcijo tukaj. In potem imamo Druga funkcija tukaj. Void swap. Void samo pomeni, da je ne bo vrnil ničesar. Ime funkcija je imenuje swap, in to je bo sesalnih dvema spremenljivkama, int a in int b, iz [neslišno] funkcijo. Torej, v bistvu sem, da smo poteka X in Y v to funkcijo. In če bi ustvariti this-- zato želimo ustvariti začasno vrednost, kajne? Bomo dodeliti, da a. In potem se bo sedaj enako b. In b se bo vrnil kjer je bila vrednost temp, ki je, ker ko želite, da bi zamenjali stvari, ne moreš kar všeč swap njih. Imate, da ena od tukaj, tako da spominja kaj je to, ker ko ste zamenjali eno, ste pozabili kaj se da izvirna vrednost je bila, kajne? Torej, v teoriji, ta program bi morali delati, kajne? Če bi želel, da bi zamenjali dva, bi morali zamenjati. Torej, kaj je teči in videli, če deluje. Tako da lahko vi vidite, x je bil nekoč 1 in y je nekoč 2. In če sem ga natisnete, x je še vedno 1 in je y 2. Hm, ta program ne zdi, da je deluje tako, da želim to delati. Ali kdo želel vzeti strel na ugibati, zakaj to se je dogajalo? To je povezano z načinom da sta dve različni stvari shranjeni v različnih krajih v pomnilniku. V REDU. Torej vidva ne bi bilo treba skrbeti preveč o tem prav zdaj. Ampak vem, da je kocka je lokalna spremenljivke so a in b, ker tukaj v naši funkciji, smo razglasila a in b kot spremenljivke, ki obstajajo znotraj kocke, da funkcija. Ampak kot vidite, parametre, ki to je ob v so se tu shranijo. Vendar nismo bili dejansko vrača ničesar. Mi smo dejansko ne spreminja X in Y. Pravkar smo spreminjanje a in b. Imeli smo kopirali X in Y v nekaj, kar se imenuje a in b. Ampak mi nikoli dejansko manipulira x in y sami. Vidva ogleda kako, da se dogaja? Je, da smo preprosto kopiral več, vendar smo dejansko ne hranijo koloteka kjer so v pomnilniku. In tako zdaj računalnik je videti, oh, Sem teči to stvar skozi to čudovito funkcijo. Toda x in y so še x in y. Nič se je zgodilo jih zaradi dejstva da teh parametrov in lokalne spremenljivke so shranjeni v drugačni postaviti v spomin. In to je na višji ravni Koncept, da bomo začeli videvati kasneje v teku. Ampak samo vem, da je to problem, ki se lahko zgodi, in da bomo ugotovimo, kako o tem, kako Ukvarjamo se s tem kasneje v teku. V REDU. V redu. Torej zadnji koncept smo v resnici dogaja za kritje da se dogaja, da je koristno za pset ta teden so tisto, kar imenujemo argumenti v ukazni vrstici. Torej, Rob v svojem predavanju je šel skozi nekako na kratko, kako ti dela. V bistvu vem, da Ko pišete kot glavno funkcijo, ko smo napisal funkcij, preden je v preteklosti, smo imeli int glavno praznino. In razlog, da smo imeli neveljavne tam je bil, ker so naši programi niso morajo vhodne vrednosti teči, kajne? Ko sem tekel mario, nisem potreboval dejansko samo tip v nekaj ko sem tekel Mario. Jaz bi lahko poziv uporabniku kasneje. Ampak, da ne bo vedno tako. Na primer, v tem problem tedna določa, boste morali, da se v Poleg tega, da teče svoj program, boste želeli vhod nekatere stvari naravnost, medtem ko zagnati program. Torej je pot storimo, da imenuje argument ukazne vrstice, ki je kot argument lahko vnesete neposredno kot ste poskušali zagnati program. Torej zapis za to, to je zelo zapletena, je videti, ampak to je res, da ni težko. Torej int main-- to je samo vaša glavna funkcija. V argc vejico niz ARGV oklepajih. Torej vse, kar je rekel je, da je to int argc-- vse, kar je povedal, je, da so tisti število Argumenti računalnik bi smeli pričakovati. Torej, ena stvar, ki je res pomembno, da bi spremljali je fizični ime vašega programa se šteje kot eno od teh trditev. Torej, če sem hotel imeti svoj program teči plus eno dodatno ukazno vrstico Trditev, da sem dejansko dogaja, da imajo dva. Argc se dejansko dogaja, da se dva. In potem niz argv bracket-- vse, kar počne, to me je kar array nizov, ki je bo samo prikaz in shranjevanje kaj vsi ti argumenti ukazne vrstice so. Tako na primer, če sem hotel imeti to Program, ./copy infile outfile, kajne? To je samo tipičen ukaz Linux. Kaj pravzaprav je argc? Koliko argumenti ukazne vrstice so tam dejansko v tem? Vse to pa je, da kopijo infile imena eni datoteki in poleg tega kopije ga bo v druga datoteka, kajne? To je vse to počne. Kot lahko vidite, jaz delam v eni vrstici ne da bi dejansko potrebovali program. Kakšna je naša argc v tem primeru? Koliko argumenti imamo? OBČINSTVO: Three? ANDI PENG: Imamo tri, točno. Tako da je zelo intuitiven za Samo mislim, da je to samo infile in outfile. Ampak vem, da je fizični trgovini ime Program tečete šteje kot ena. Torej, v tem primeru, argc je pravzaprav tri. Kaj pravite, kaj je argv 0? Ne pozabite, da vse argumenti ukazne vrstice so bili skladiščeni v vrsto nizov. Torej, če sem poskusil priti do njih, kaj bi argv bracket 0 daj mi? OBČINSTVO: [neslišno]. ANDI PENG: Točno tako. To bi mi dala piko poševnica kopijo, ker je to 0. element je Prvi element mojega array. Kaj pa argv 1? OBČINSTVO: Infile. ANDI PENG: Infile, točno. Kaj pa argv 2? OBČINSTVO: outfile. ANDI PENG: outfile. To je zdaj malce zapleteno. Kaj mislita argv 3 se dogaja, da se mi je kar če sem se potrudil, da natisnete da ven? OBČINSTVO: [neslišno]? ANDI PENG: Ali imate roko? Ja. OBČINSTVO: An alternative. ANDI PENG: Točno tako. Torej, ne pozabite na predavanju, ki smo imajo na koncu dirko nečesa imenuje null terminator? Bomo dobili v tem tudi naprej v razredu. Ampak vem, da je v zapisu, način računalnik ve, da je konec matrike je, da postavlja nekaj imenuje null terminator ali pomišljaj nič. Torej, če boste poskušali dostopati argv 3, boš udaril ta pomišljaj 0. To je še toliko bolj trik vprašanje. Kaj pa argv 4? Torej, to je mimo null terminator, mimo meje našega array. Kaj misliš, da se dogaja, da zgodi, ko smo poskušali to storiti? OBČINSTVO: [neslišno]? ANDI PENG: Oprostite? Recimo, da je malo glasnejši? OBČINSTVO: [neslišno]. ANDI PENG: Da. To je ime, od Območje boste najverjetneje dobili. Ampak vem, da je argv 4-- ki vam omogoča dostop do mesta v vašem računalniku spomin, da vas res ne sme biti dotika, ker Zdaj veste, kaj argv je. Saj veš, da je matrika velikosti 3 da ima dot kopiranja infile in outfile. Če boste poskušali iti tako daleč, da je da ste mimo null terminator, računalnik ima verjetno shranjeni nekaj v argv 4. In res ne bi smelo biti dovoli dostop v argv 4, ker imate datoteko kabinet in ste samo dovoli dostop do teh treh policah. Ampak, če ste poskušali doseči pot onkraj polica, kje ste dovoljeno, boš začeti zlorabili druge stvari v spominu računalnika. To se dogaja, da je res, res slabo. Torej, samo vem, da je. Bodite zelo previdni, da vas ne samo naključno začetek dostopanje elemente v matriki, da niso bili v kar ste želeli ustvariti. Ja. V REDU. Torej bomo narediti še en terminal primer tukaj. V REDU. Torej, Rob hitro v predavanju drugi dan je šel skozi ta primer, kjer je imel int glavni int argc niz argv nosilci, ki so mi povedali, da sem dogaja, da imajo argumente ukazne vrstice. Ima, če argc enaka enaka 2-- spomnite, enaka Ene pomeni primerjavo. Če je enak 2, potem pa sem dogaja, da natisnete zdravo, ne glede na prvi element matrike je. Else print, zdravo svet. Kaj se to dogaja, da zgodilo v bistvu? Lahko nekdo samo razloži v Angleščina, kaj ta program počne? Ja. OBČINSTVO: Če nekdo vnesli v ukazu in dejal njihov ime in priimek, da ne bo samo natisnete Prvi in ​​reči, zdravo, ne glede na vaše prvo ime. ANDI PENG: OK, kaj je to teči. Torej, za primer, če bi bil jaz, da bi Ta datoteka bo zdravo to-- zdravo to-- kaj hočeš, da vhod? OBČINSTVO: ime in priimek. ANDI PENG: ime in priimek? Prostori? OBČINSTVO: Ja. ANDI PENG: Ali lahko nekdo povej me prav zdaj, kaj je argc? Samo tam? Ups, žal. Naj grem nazaj. Koliko argumenti ukazne vrstice vam are-- fantje ne morem videti. Ampak bom poskusil za povečavo. Poskušam. Ja, tam je tri, kajne? To je pika slash zdravo, to je Andi, in to je Peng. Torej, kaj mislita to Program se bo tiskanje? Oh. Oh, oprosti. Napačno ime. To je tiskanje, zdravo svet. Ali kdo želel, da pojasni Zato, da se dogaja? Ja? OBČINSTVO: [neslišno]. ANDI PENG: Točno tako. Torej, tukaj so pogojno je, če argc enaka enak 2. Torej le v primeru, da obstaja dva argumenta ukazne vrstice. Potem grem za tiskanje, Pozdravljeni, karkoli že je. Ampak drugega, bom natisniti le, Hello World. Torej nekdo rad da bi mi dal zgled o tem, kako bi se lahko dejansko zaslužiti to za tiskanje vrednost argv 1? Kaj bi jaz moral vhod tukaj? Samo ena stvar, kajne? Ker je pika Pozdravi že se šteje kot prvi argument. Imam eno samo. Torej dot zdravo, če sem naredil Andi. Pozdravljeni, Andi. Ali vsi razumeli Zato, da se dogaja? Ja. OBČINSTVO: Torej, prostor med Ukaz line-- je [neslišno]? ANDI PENG: No. Torej prostor v ukazni vrstici Trditev, x, da obvestite svojega računalnika da je to začetek novega niza. Torej niz argv ji here-- trgovin vsi vaši argumenti ukazi resornih v kito. In tako je prostor, v ukazni vrstici argument-- vse, kar počne, je vam povem, to je na koncu enega niza in da je čas, da se premaknete na drugo. Ja. To je zelo pomembno za Vaše pset, ker ste bodo testiranje teh. Torej, ali ima kdo kakršna koli vprašanja o tem? OK kul. Ja? OBČINSTVO: Torej razlog, s katero bi namesto da bi dal celo število argumenta calc od [neslišno] bi bilo, če želite da vnesete dodatne informacije [Neslišno]? ANDI PENG: Ja, točno. Nekateri programi vam bodo zahtevale za vnos argumentov ukazne vrstice da prehaja v in ki uporablja to. Ja. OBČINSTVO: Pa kaj, če [neslišno]? ANDI PENG: No, kaj imam potem spremenijo v mojem programu? OBČINSTVO: Samo 3. ANDI PENG: Zakaj je to dogaja, misliš? OBČINSTVO: Ker je [neslišno]. OBČINSTVO: Morali bi jo spremenite na 2 [neslišno]. OBČINSTVO: 1 in 2. ANDI PENG: 1 in 2, točno. Torej, v tem primeru, bi vam verjetno želijo imeti dva printf statements-- tisti, ki natisnjen argv 1 in tisti, ki je natisnjena argv 2. Tukaj. Jaz lahko dejansko narediti resnično hitro. Izvolite. Oh. Ni ravno to, kar si je želel. Ampak, če vi igral z formatiranje bo prišel ven. Ja. Cool. Vem, da smo malo v stiski s časom. Ampak jaz sem šele tekoč, da hitro porabiti Nekaj ​​minut gredo skozi helpful-- OBČINSTVO: Imate dve minuti. ANDI PENG: Imam dve minuti? Hvala. Nekaj ​​hitrih pset nasvete. Torej za to pset, sem močno priporočamo, kot sem rekel, vsakdo prebrati spec. Boste pisanje tri programs-- eno imenuje initials.c, ena imenovana caesar.c, ena imenovana vigenere.c. Nekaj ​​pomembnih nasvetov, ki vidva res želijo da v mind-- tako je ta funkcija imenovana atoi-- kot sem želel povedati, A trois. Jasno, če je to pravzaprav, kako si to rekel. Ampak vse to počne, to je vnesla. To pretvori niz v notr. Torej predstavlja ASCII na i celo število. To je samo pretvorbo ASCII Vrednosti celoštevilčnemu vrednosti. Torej ne pozabite argv, array, ki shranjuje vse vaše ukaze linijo arguments-- da jih vse shrani kot strune. In tako, če želite, da bi lahko ima eden izmed njih postanejo celo število, boste imeli Za uporabo te vrednosti tukaj. Modulo, kot smo pokrili prej v razredu danes, kar omogoča, da imajo Preostanek kar imate. Torej, če imamo res, res velike številke v cesarju, Kaj pa, če imamo na koncu iz niza Vigenere? Kako se boste, da se lahko da bi dobili, da se ovije okoli? Če sem udaril z in želim, da bi šel nazaj k, kako bom dobil da ovijte okoli? Verjetno želeli uporabiti modulo tam nekje. Drugič, brskate po vaša knjižnica. ctype.h. To je nova knjižnica imamo. Boste našli veliko zares koristno functions-- isupper, islower, toupper, tolower, isalpha, et cetera. Vse funkcije, ki bodo zelo koristne ko poskušate ugotoviti, je to znak male črke? Kako pretvoriti to niz z veliko začetnico? Vse te stvari bo zelo, zelo koristno za vaše pset. V REDU. Uradne ure so nocoj 8:00 do 11:00 v TEAL razredu jutri kot tudi v sredo in četrtek zvečer. Uradne ure so v commons. Zelo vam predlagamo, fantje Vse se je začelo takoj, ker si ne želijo, da se da fant, ki je v četrtek zvečer ima težave predložitvijo vaše pset in kot, ne vem, kaj naj naredim. Začel sem, sem končal, sem predložil. Poskusi, da bi si nekaj prostora, saj vedno pojavijo težave kodo. Hočeš, da poskrbite, da ste sami dajejo veliko časa, da bi lahko za dokončanje psets. Cool. Jaz bom visi tukaj. OBČINSTVO: Je to na spletu je že? ANDI PENG: Ne vem, če je to spletu že, vendar pa bo. Jaz bom visi tukaj, če kdo ima že vsa vprašanja. Hvala za prihod.