[Muusika mängib] SPEAKER 1: See on CS50 ja see on algus nädalal kaks. Niisiis, olgem sukelduda otse midagi mis on lollakas, kui nii võib öelda. Niisiis, siin on CS50 IDE ja ma olen tõmmatakse ette seda screen-- kuradi seda. Spoiler alert. Hästi. Olen tõmmata seda ekraani siin millel on väga lihtne programm. Kui me keri, kõige Selle lihtsalt kommenteerib, kuid siin read 13 kuni 17 on meil programmis. See on süntaktiliselt kehtivaks, mis tähendab, et kui Ma kompileerida, siis kompileerida ja tööle, aga see on lollakas. See programm väidab kommentaarid up top, et see peaks printida 10 tähte, kuid see ei ole. Ja mis põhineb oma kogemusi, või varsti kogemus C, saab loogiliselt eristada miks see tegelikult lollakas? Jah? Sihtrühm: See läheb nullist 10. See on 11 korduste. SPEAKER 1: Jah. Nii, see läheb nullist üles läbi ja võrdne 10 mis muidugi on 11 korduste. Nii, see läheb print tõepoolest 11 tähte. Niisiis, infotehnoloogia konventsiooni Enamikus programmeerimiskeeltes on tõesti lihtsalt alustada nullist, aga loota, aga vähem läbi väärtus, mida sa tegelikult hoolivad. Nüüd, see on üks asi, mis võtab natuke harjumist ja isegi kriimustus, mille kuna see on mitte programmeerijad või mitte arvuti teadlaste ja lastele suuresti, on ette nähtud selleks hakkate lugedes tavaliselt ühe. Ja see on hea. Võite täiesti hakka lugema ühes kui see on mugavam. Ja loota kuni kuni 10, kuid saate aru, eriti sel nädalal ja pärast seda lihtsalt nii paljud asjad programmeerimine eeldada, et 0 on esimene kohaline kellega loota, et sa lähed on lihtsam lihtsalt sattuda see harjumus algus nullist ja lugedes kuni väärtus sa hoolid kohe alates saada minna. Nii, et on fikseeritud, et. Muutsime väiksem või võrdub lihtsalt alla. Võtame pilk teine ​​näide. Nii, see programm on liiga väidab oma Kommentaarid up top, et see peaks printida kümne tärni, kuid see ei esine. Mis viga siin? Nii, what-- ja kahju, olgem selged. 10 tähte. Üks rida, kuid see ei ole. Nii et tegelikult, las ma minna ja koostada see üks, sest see on natuke vähem kustutada põhineb sellel kirjeldus. Lubage mul minna meie allikas kataloog. Tee lollakas üks dot kaldkriipsuga lollakas üks. OK, ma näen 11 tähte, mis on jätkuvalt problemaatiline, kuid nad on ka kõik ühele joonele. Milles on küsimus siin? Jah. Sihtrühm: [kuuldamatu]. SPEAKER 1: Jah. Nii et see on teravmeelsus, mida võib mäleta mind muutes lühidalt of. Kuigi kõik tundub ilus, ja see on kenasti liigestatud, ja see omamoodi näeb Scratch-like sellele reale 16 ja 17 on tõepoolest, liigestatud all, et loop. See on ebaoluline. Arvuti ei tea ega näe valget ruumi. Valge ruum on lihtsalt Meie inimesed, stiililiselt. Arvuti ei tea, kui teil on looksulg, mis tõepoolest Selle probleemi lahendamiseks. Niisiis, kui me tegelikult läks ja selgesõnaliselt panna need looksulg mis probleemi lahendada poolt teha selgeks, et tõlkija et ma tegelikult tahan täita kaks rida koodi uuesti, ja uuesti ja uuesti. Aga mis on põhiline selgitus? Õigus? Me ei vaja otseselt looksulg kogu aeg, kuigi see on ilmselt parim Praktikas sattuda, et harjumus niikuinii kuigi see lisab kaks tegelased oma koodi. miks? Sihtrühm: [kuuldamatu]? SPEAKER 1: Jah, nii see on teine ​​lahendus kokku. Õigus? Eriti kui esmapilgul te ei tõesti hindan, mis toimub. Noh, kindlasti saime lihtsalt teha kahte asja korraga ja lihtsalt vältida probleemi üldse. Ja see on hea, kuid nüüd, tänapäeva tähenduses, mida on seletus viga? Miks olid kõik need tähed ühes reas? Jah? Sihtrühm: Tundub, et kui sul on üks rida koodi, sa ei saa seda teha, ilma et need. SPEAKER 1: Täpselt. See on lihtsalt inimese konventsioon. Inimesed mõistavad, et see on natuke tüütu või tüütu on panna looksulg kõik ajast, kui kõik mida sa teha tahad on täita üks rida koodi. Niisiis, inimesed otsustasid mõned aega tagasi, et see on hea. Kui sa tahad panna kõik oma loop just, et üks rida niimoodi, see on hea koos ühe semikooloniga lõpus. Aga sa võid teha ainult üks selline line ilma looksulg. Niisiis, kui CS50 stiili juhend kui punkt teil, näete, et üldiselt see on hea harjumus sattuda, kuni olete üsna mugav Hulkuvaid taolised konventsioonid ja teeb oma asja. Nii kaua, kui sa oled ise järjekindel. Ja me räägime rohkem soengusse veidi hiljem täna. Niisiis, lubage mul avada ühe teise programmi. Muidugi, me peaksime määrata, et 10 samuti. Lubage mul minna ja kirjutada tõeline kiire programm, mis ma helistan, oletame, loop dot C. Nii, loop dot C. Ja loop dot C ma lähen, hulka standard I / O dot H int main void. Ja nüüd lihtsalt teha, tõepoolest, silmus. Niisiis, 4 int ma läheb nulli. Ma vähem kui, ütleme, 50. Ma pluss pluss. Ja siis siin teeme minna ja ei prindi F. Ja siis ma tahan printida Ma ning uus liin, semikooloniga. Ja see peaks printida kõik numbrid nullist kuni 50? Paar head noogutab. Mõned numbrid. Mis viga juba? Mis on lihtne viga tegin? Jah. Sihtrühm: [kuuldamatu]. SPEAKER 1: Jah. Nii et kuigi see näeb nagu see, mida ma kavatsen, Tuletame meelde, et ma ka lihtsalt ASCII. Niisiis, kui ma ütlen, print "I." See on sõna otseses mõttes läheb prindi I. Niisiis, kui ma tahan plug-in kohatäide väärtust ma tegelikult vaja seda teha ja siis siduda nendega I väärtus dünaamiliselt. Muidu ma olen lihtsalt kavatse saada 50 ma oma ekraanil. Niisiis, lubage mul minna ja seda loop, käivitada, ja tegelikult on meil kõik viis kuni läbi 49. Ja kui ma kerida ajas tagasi ma näen number null alguses. Noh, mis siis, kui ma mingi kruvi lahti? Mis siis, kui ma seda teen? Lihtsalt sellepärast, et ma ei mõtle. Mis selle programmi. Kui oled kompileerida ja tööle, kavatseb teha loogiliselt? Sihtrühm: Mitte midagi. SPEAKER 1: Nothing. Miks nii? Sihtrühm: I mõeldud null. Nii, tingimus on vale. SPEAKER 1: Jah, täpselt. Kõik kood on õige, süntaktiliselt. See koostab selle kood töötab, kuid see ei ole kavatse teha midagi kasulikku sest ma initsialiseerida ma nulli. Siis vaadake, on mul rohkem kui 50? Ilmselt ei, see ei ole. Nii silmus kunagi täide üldse. Mis siis, kui me midagi veidi hoolimatu? Nii, mis siis, kui me teeme nagu int ma läheb nulli. Ja nüüd lubage mul kasutada samal ajal loop, mis oli teine ​​tingimus. Ja kui ma ütlen, kui ma on suurem kui või võrdub nulliga, ja siis siin ma minna ja salvestage fail, teha loop. Ja ma olen umbes käivitada. Mida ma näha seda aega koos, samas loop? Jah. Sihtrühm: lõputu silmuse? SPEAKER 1: lõputult aega? Jah, ja miks? Sihtrühm: Sest see on alati null. SPEAKER 1: Jah. Niisiis, ma käivitub null. Muidugi ma alati suurem kui või võrdne 0 tagajärjel. Niisiis, ma olen lihtsalt kavatse vaata seda lõpmatult. Ja nüüd, see on tulnud kord või kaks korda kursuse peadesse. Mis juhtub, kui on lõputu silmuse? Sihtrühm: kontrolli C. SPEAKER 1: Jah. Nii Kontroll C lõpuks vastata. Kahjuks oleme välja printida miljonite nullidega juba ja nii on arvutisse Selline sai minu ees. Nii, see läheb ignoreerida mind natuke. Aga kui sa lihtsalt vajuta kontroll C mõned korda Mac või PC klaviatuur, lõpuks peaks tõepoolest lõpetada. Ja kui ei, siis me näitame teile mõned tehnikat enne pikka kus sa võib tegelikult sunniviisiliselt tappa programme, palju nagu Windows ja Mac OS, vajaduse korral. Aga proovime midagi muud. Olgem tegelikult juurdekasvu I. Kas see ikka saab olema lõpmatu? Lubage mul teha selle. Ja nüüd saab sellist näha, mis toimub. Ka see on lõputu silmuse. Aga see on natuke konksuga küsimus. Kas see trükkimineku numbrid igavesti? Sihtrühm: Ei SPEAKER 1: Ei Miks? Kuulsin mõned nos siin. Someone-- Jah. Sihtrühm: Sa ei ole piisavalt bittide tõesti edasi. SPEAKER 1: Olgu. Nii et ma ei ole piisavalt bitti edasi. Niisiis, mis juhtub? See on lihtsalt kavatse lõpetada? Sihtrühm: Mingil hetkel lülitub see the-- SPEAKER 1: See sulgeb silmus maha, kuid miks? Mis juhtub juures Päris lõpus oma piirid? Jah? Sihtrühm: see tsükkel Tagasi negatiivsed arvud. SPEAKER 1: negatiivsed arvud, või kui me olime lihtsalt ravivad positiivne, null vähemalt. Nii et jah, absoluutselt. Tuletame meelde, et me nägime viimast korda, et kui sa juurdekasvu oma bitti liiga palju kordi, ja seal esiplaanile ülevoolu suutlikkust oma int või mis iganes andmete tüüp on, sa oled läheb ümbritsev ilmselt Kahe negatiivse arvu. Või kui olete määrata, et teie vahemikus peaks olema ainult positiivne, mida saate teha, kuid meil ei ole näinud, et veel võite lõpuks vähemalt tagasi nulli. Kuigi tegelikult jah. Sel juhul negatiivse numbrid, mispuhul silmus läheb lõpetada sest ma ei ole tegelikult suurem või võrdne null, kui see on negatiivne. Nii kahjuks kuidas kaua oleks me peame ootama? Praegu oleme kuni Mis, 2 miljonit-ish? Me oleme nagu 2 miljardit, me läheme pea ootama kuni me tegelikult saame näha see sümptom. Aga me näeme seda veidi kiiremini, maybe-- Vaatame, kas me saame katkestada. Ole nüüd. Isegi menüüd ilmuvad aeglaselt. Hästi. Niisiis, me tuleme tagasi, et enne pikk. See on hea AEG_ kurat, kutsikad. See on hea aeg mõned teated. Niisiis, kui teile soovida tegeleda YHack, mis üritus on sponsoreerib meie sõbrad Yale'i. Ja tõepoolest, mõned kursuse TF Yale'i on seotud sellega. YHack on rahvusvaheline Hack-a-Thon võõrustajaks ja hoitakse Yale'i, tuues kokku 1500 sarnaste huvidega häkkerid ja reklaamid kõik üle maailma. Kui see on huvi, vaatleme siin. Kui see on liiga lühidalt ekraan, kui heita pilk tänapäeva slaidid jaoks URL yhack.org. Niisiis, ka mõned kiired teadaandeid. Nii, ametlikult lõigud hakkab Järgmisel nädalal nii siin kui ka New Haven. Pea meeles, sa pead olema saada Kirjuta hiljem sel nädalavahetusel kõige tõenäolisem. See võtab kaua aega jaoks CS50 paragrahvi, anda kogu inimest klassi ja kõik ringi liikudes. Ja kõik Õpetamine Fellows ' sõiduplaanide ka veel kramplikult, kuid Hoia talle ja kui vaja võimalik, saab uuesti osa järel. Study.cs50.net. Seega, isegi kui teil on pidev osaleja kell lõigud, mõistame, et peaaegu kõik ressursse, mida me kasutame lõigud on avalikkusele kättesaadavad CS50 Uuring sellelt aadressilt siin. Niisiis, kui soovite kunagi tahaks uuesti läbivaatamine materjali osa, või lugeda edasi, või te ei saa teha seda mõne nädala, aru, et proov slaidid, ja probleeme, ja definitsioonid, ja kõik on seal hästi. Lahtiolekuajad jätkata täna ja homme ja kolmapäeval, ja neljapäeval vaadake kursuse kodulehel ajakava. Ja ka nüüd käivitada täna on CS50 Arutle. Niisiis, kas ja millal teil on küsimusi omavahel või kursuse personal ja toimivad üldiselt mõned probleem komplekti, mõistad, et sa ei pruugi on pöörduda inimese kõrval teid. Kui seal on keegi seal, saate jõuda meile ja klassikaaslastega Online kaudu CS50 Arutle. Niisiis, see on arutelu juhatuse käigus, ja mõistma, et see on ehk parim koht alustamiseks, kui teil on küsimusi kui väljaspool tööaega eriti. Lõunasöök käivitub sel nädalal ka. Kell Tule ja Jää [Kuuldamatu] New Haven. Heitke pilk kursuse kodulehel, et RSVP. Kes ees, see teenib selle eest. Kui sa ei saa selles nädalas me teeme neid kõige igal reedel tähtaja jooksul. OK, ja nüüd sõnagi mune. Eriti kui me siseneme probleem määrata ühe, mis on välja sel nädalal, ja probleem seatud kaks ja pärast seda. Kuidas minna hindamiseks P komplekti ja hinnata nende kvaliteet? Nii, see on nelja telje, et me kasutame CS50, ja nad on need neli siin. Ulatus, mis lööb numbrilise alusel, kui palju on P komplekt sa lahendada. See on umbes vastab vaeva, ja see on meie viis hõivamiseks sa proovida pool P määrata, kõik P komplekti. See on lihtne, saada täiuslik hinded kui te seda teete, tõepoolest, proovida iga aspekti P komplekti. Nii, et hoidke seda silmas pidades. Korrektsus on just nii. Kas teie koodi töö spetsifikatsioon ja kui staabid proovi lahust viitavad sellele, et oma koodi peaks tegelikult töötavad. Saate 50, kui sa ei ole täidetud siis veel, on P määrata ühe spetsifikatsioon ja üldiselt sulle jah / ei vastused kas teie kood on õige. Vähemalt nii palju kui me läheme hinnata seda, mis põhineb testid et võtame selles programmis. Disain on palju subjektiivset. See, kuidas hästi kirjutatud on oma kood. Ja see on midagi, saad paremini ajas, ja see on midagi, mida me tulen pakkuda rohkem kvalitatiivset tagasisidet. Ja disain võin tähenda enne kaua te võib tekkida kiusatus mõnel P määrata midagi loopingly, kuid on võibolla kolme või nelja või viie nested esiplaanile silmad või pesitseda samas silmad. See üldiselt peaks hakkavad sind roomama ja oleks üldiselt halvaks disain. Ja sa hakkad näha klassi ja välja klassi hea viise asju, halb viise asju, et võib kõik olla korrektne, kuid ei tingimata hästi disainitud. Nagu essee kirjutamiseks. Sa võiksid panna sõnu leht, mis on grammatiliselt õige, kuid essee või Lõputöö nad on lihtsalt täiesti seosetu või unpersuasive. Ja nii, et võiks olla analoogi kirjutatud maailma halb või hea disain. Ja stiili, liiga, on üsna subjektiivne. Aga vähemalt ootame järjepidevus. See, kuidas päris on oma kood. Kas asjad kenasti liigestatud? Kas teie muutujaid ka nime / Kas kõik sinu sulgudes ja looksulg korrastada, kui nad peaksid olema? Meil on CS50 stiilis juhendi Probleemi komplekt toob välja teid. Need mugavam on Tere hulkuvate et nii kaua, kui te olete ise järjekindel. Ja ka see on õppetund me tugevdada punktis. Niisiis, kui see kõik oli natuke kiire, realiseerida P komplekt ja sektsioonid läheb põhjalikumalt enne pikk. Aga üldiselt on meil väga vähe kopad CS50. Hinded on üldiselt skaalal ühest kuni kolmest või 1-5. Oleme literally-- ja ma ei saa öelda, Käesoleva piisavalt esimesel nädalal. Kolm on hea. Niisiis, kuigi, jah, kolm viie tavaliselt matemaatiliselt võib olla 60 protsenti või nagu D miinus. Kolm on tegelikult hea. Ja tegelikult ootame enamik õpilasi klassis alustad mõiste ümber kahekaupa ja kolmekesi ja püksid. Tõenäoliselt mitte nii palju viied. Mitte liiga palju ones. Aga üldiselt alustada et magus kohapeal kõver nii et aja kulgedes, seal on tegelikult ruumi, ja võimalused ülemine progresseerumist. Niisiis, ärge võrdsustada kolm 60%. See on palju rohkem abstraktne kui see. Valem, mida me arvutada klassid on hääli järgmiselt. Korrektsus on väärt rohkem. Disain on väärt natuke vähem. Stiil on väärt natuke vähem. Ja seda üldiselt lööb aega mis läheb üha iga Nende telgede just õige. Stiil on väga lihtne, peaks olema super kiire, kuid see on lihtne harjumus saada laisk kohta. Korrektsus võib võtta sa enamuse ajast. Chasing alla mõned bug väest võtta, et ekstra tund või rohkem, ja nii, punktisüsteem lõpuks lööb see. Ja nii, nüüd tõsisemalt sõna. Kuna CS50 on vahet, parema või veel hullem, olemise ehk parem tuttavaks küsimustega akadeemilise ausus kui enamik muid muidugi. Ja tõepoolest, see on minu teada, et saadame rohkem õpilasi, kahjuks distsiplinaareesmärgil Igal aastal kui tulemus. Niisiis, huvides täis avalikustamine, räägime lühidalt umbes mis toimub CS50 ja mida saab teha ja mida saab tähelepanelik. Nii, siin alates 2007. aastast, mil Ma päris loomulikult on mitmeid Ad Board juhtudel. Kuulutus Board on Harvardi distsiplinaarkaristuse keha või nüüd Honor nõunik, mille juhtudel on nimetatud kui õpilaste midagi, mis kursuse ainekava arvab ebamõistlik. Ei ole reaalne muster siin, ma ütleks. See kõigub üle aastat, kuid üldiselt see arv juhtudel, mis on nimetatud. Õpilaste arv mis on seotud? See on liiga erinev. Tavaliselt mullu Näiteks 29 õpilaste Harvardi olid Ad laudis, nii rääkida. 29 neist praegused õpilased, kaks neist enne üliõpilased, kes olid koostööd Mõnes ebasoovitavad viis. Ja siis poolest protsent, see on tavaliselt umbes 3% klassi, et kahjuks teeb selliseid otsuseid. Niisiis, eelmisel aastal oli see 3,5% on CS50 üliõpilaskonna mis oli Kuulutus laudis, nii rääkida. Niisiis, mida see kõik tähendab? Ja mida me tegelikult teha? Nii täielikku avalikustamist, me absoluutselt, kui arvuti teadlased, on tarkvara meie käsutuses olevaid vahendeid ja see on väga lihtne meile, õiglus, et teiste klassikaaslastega, kes ei ole ületamisel neid ridu ületada võrrelda Iga esitamise sel aastal vastu iga esitamise viimase kaheksa aasta jooksul. Tarkvara teeb seda. Ja lõpuks on see Inimese silmad, et otsustada, kas pöörduda mõne loe edasiseks lahendamiseks, kuid tarkvara kindlasti aitab. Ja see, ausalt öeldes, sellepärast, et ma arvan, meil on selline suur hulk CS50. See ei ole, sest CS50 õpilased või CS õpilased rohkem Üldiselt on kõik vähem aus kui mis tahes muu üliõpilased, see on lihtsalt oleme tööriistu ja tehnikaid kellega seda esmase. Aga me hoida silma kõik need asjad samuti jällegi huvides tunnistades tööd, mis kuramuse panna poolt super enamus klassi. Ja muidugi poliitika Akadeemilisel ausus, kuigi see kamp punktid kaua koos kamp täppe mis on loodetavasti üsna loetav, siis tõesti taandub mõistlik. Ja parim rusikareegel, et Pakume kuni piires ainekava see on, sisuliselt kõik tööd, mida esitama selle käigus peab olema oma. Ja tõepoolest, peaaegu kõik need, nimetatud juhtudel distsiplinaarkaristuse see oli, sest mõned õpilane hilja ühe öösel tavaliselt välja tema kood üle lausa klassivend, kes siis võttis ta tervikuna või oluliselt selle. Aga tõesti, see on OK. Ja tõepoolest, kontoris tundi, kombineed paber olete meheks, kui sa tulid kontor tundi eelmisel nädalal julgustab nii palju. Sul on täiesti tervitas ja julgustada arutada probleemi komplekti koos klassikaaslastega. Et aidata teineteist komistuskivi. Aga üldiselt rusikareegel peaks olla see, "kui te küsite abi, võite näidata oma koodi teistele, aga sa ei pruugi näha päralt. " Niisiis, teisisõnu, kui Kõht hädas mõne P komplekt ja ma istun seal söögisaal, või raamatukogu või klassiruumis ja püüavad leida süü, Ma kindlasti näitan minu kood minu ekraanil et inimene istub kõrval mulle kindlasti personali, vaid ka klassivend. Aga kui lahendus, mis minu klassivend pakub on, oh, siin lihtsalt võtta pilk Ma tegin, mis läbib liin. Ja ma julgen öelda, et on üldiselt mõistlik asi, et enamik inimesi väga lihtsalt kohapeal rida. Ja nii, vaata ainekava üksikasjalikumalt. Ja nüüd üks rohkem vastuolulisem küsimus on CS50 ainekava, et ma arvasin räägiksime lõpetuseks siin on nn kahetsust punkti. Niisiis, siin on kõik trahvi print. Aga üldiselt oleme näinud viimase 8 pluss aastat et tõepoolest, peaaegu kõik CS50 tema juhtudel akadeemilise ebaaususe on tulemus lihtsalt halb otsustusprotsessi hilisõhtuni. Tulemuseks on stress, tulemus puudumise söömine, unetus, liiga palju P komplekti, liiga palju tähtajad, liiga palju kohustusi. Stress ülesehitamisel on 2:00, 3:00 AM, 04:00, tähtajaga ootuses. Enamik õpilasi nendel juhtudel äsja tehtud halbu otsuseid et nad võivad väga hästi kahetse Järgmisel hommikul kui mitte minutit hiljem kuid kuni eelmise aasta polnud väljalaskeklapp, et need õpilased võiksid tegelikult avada tegelikult tegeleda probleemiga, kartmata käivitatud kolledži kokku. Ja tõepoolest, tutvustasime Selle kahetsust § eelmisel aastal mis ütleb, et kui sees 72 tundi, kolm päeva, ületamise mõned line ettenähtud ainekava sa teeks ühe kursuse peade ja me vestelda midagi. On siiski mõned tulemus, et vastupidi on teatatud teisiti. On veel mõned tulemused, mis on vaidlustatavad poolt muidugi üldiselt nullimist P komplekt või võttes mingeid teisi tegevusi, kuid me tõepoolest hakkama ise ja mitte vaadake seda suurem oli tulemus võib olla palju raskemad. Ja tõesti, et jagada, mis juhtus Eelmisel aastal kaheksa aastat ja nüüd üheksa aastat, õpetades seda muidugi ja pärast sisemusse erinevaid nuppe, keerates erinevate valib viimase mitu aastat akadeemilisel ausus, ja nähes ühe andmeid ei ilmne mõju, isegi kõnede niimoodi, see oli käed alla parim asi oleme kasutusele pedagoogiliselt kaheksa aastat mööda Nende ridade CS50. 19 üliõpilast tuli edasi Käesoleva paragrahvi eelmisel aastal. Me ei võtnud vastu Seitsme nende õpilaste, määratakse kindlaks, et nad olid asjatult muretsema. Nad ei olnud tegelikult ületanud joone, kuid see oli hea chat on sellegipoolest. Me nullitakse 11 skoori mis esitati. Ja ühel juhul me küsis õpilane tegema probleem seada. Aga rohkem kaalukaid, ausalt, need 19 vestlused, mis oli nii rohkem kui mina Eeldatakse, igaüks neist 10 minutit võibolla tund pikk, tõi valguse hulk küsimusi perekondliku küsimusi, sõber küsimusi, vaimse tervise probleemid mis me siis tegeleb, üliõpilase õnnistus, resident Dean, või sõbrad, või mõni muu number toetuse ressurssidest. Nii et see oli siiani üks parimaid kasutusviise meie aja ja üks parimaid sekkumised. Olles seda öelnud, see ei olnud sisend määr avastamine akadeemilise ebaaususe üldisemalt. Ja ma julgen öelda, et see alagrupis Õpilaste eelmisel aastal oli demograafiline et me varem kunagi kindlaks teha enne ja ei olnud kunagi seotud varem. Ja nii olid need Imeline edulugusid kuigi nad toodi päevavalgele vähem kui optimaalne asjaolusid. Niisiis, pidage seda meeles teete, võib-olla, viletsat otsust ise hilisõhtuni, et on vaja kasutada nii kaua, kui õpilane selles olukorras ise üles ja teeks, et saaksime ole sellist chat ja sellega tegeleda viisil, mis on haridus- ja seejärel me võime sellest möödas järgmisel päeval. Nii ilma pikema jututa, võtta serv off see vestlus, põhjus kutsikad on kuni on lihtsalt murda jää hetkekski. Ja kahjuks on nad kõik magama, aga mis pidi juhtuma siin oli igaühel pidi Hirmu ja omamoodi lõõgastuda pärast, et väga raske vestlus. Aga ilmselt panin kutsikad magama. Aga kui te lähete CS50 on veebisait kaldkriipsuga kutsikad, võite vaadata neid kogu päeva pikkune. Eriti võibolla 2:00, või 03:00 või 04:00 öösel näha vähe stressi leevendamiseks olemas. Nii et on kaldkriips kutsikad. Hästi. Kas polnud lõbus? OKEI. Niisiis, tagasi mõned arvuti teaduse, kui tohib. Nii, meenutada, et viimase aja hakkasime otsin mitte ainult peamine, mis oli vaikimisi funktsiooni, kui roheline lipp klõpsanud samaväärne, kuid alustasime ka lühidalt kirjalikult mõned meie funktsioonid. Ja siiani ükski nendest funktsioonidest on olnud eriti suur või tuumakas. Saad neisse suurem funktsioone ilmselt, P komplekt 2, P seatud 3, kindlasti P seatud 4 ja edasi. Just nüüd enamiku oma programme, kui mitte kõik neist, kindlasti P komplekt 1 saab teha täiesti peamine. Kui teie programm on ainult viis rida, 10 rida, isegi 20 rida pikk, täiesti mõistlik kirjutada kõik põhi- ja mitte üle keeruliseks koodi, kuid mida me teeme täna ja edasi üritab ka tutvustada häid projekteerimise tehnikaid nii et kui koodi saab rohkem keeruline ja kuna probleemid soovite lahendada saada raskem ja huvitav olete, omamoodi, vahendeid oma tööriistakasti, mille kujundada häid lahendusi neile. Niisiis, võtame pilgu tagasi selle programmi oma eelmisel nädalal, mis oli funktsioonid null dot C. Ja märkate, et lihtsalt see näeb välja selline kahe funktsioone, pea- ja print nimi. Ja mõtlesin tagasi või ehk reverse engineering täna Mis ajendas sisse Funktsiooni line 28 nimega, print nimi? Või mis oli see näide on Seoses põhimõte või Buffee, Kui soovid. Mõned murmurs. Mida? Jah, nii funktsionaalne lagunemine on selline, et fancy viis öelda, lagunevad oma programmi osadeks ja siis kasuta neid osi koguda tervikuna. Nii, et liiga on lihtsalt selline suutäie juba, aga see on võib-olla isegi parem näide millestki just helistas võtmiseks. Õigus? Üldistus saab olema üks on korduvad teemad CS50 ja ka arvutiteadus üldisemalt, sest see on tehnikat, millega saab lahendada probleemidega tõhusamaks, sest sa saab kirjutada lahendusi rohkem intuitiivselt ja nii, et kaalud ja on ka mõistetav teiste inimeste poolt. Mida ma mõtlen, et? Nii, väidetavalt on palju selgem ja arusaadavam vaadata programmi nagu see, super lühike, kuigi see on. Kui näed real 22, et seal on funktsioon nimega, print nimi. See nimi üksinda ütleb, mida ta teeb. See funktsioon ilmselt võtab sisendi vahel sulgudes, ja ilmselt teeb midagi, arvatavasti prindib nime. Ja nii, kuigi me absoluutselt võiks olla teinud seda, mida me tegime nädal tagasi, mis oli lihtsalt võtta see tegelik rida koodi, vabaneda sellest, ning saada lahti see kõik koos, me mingi ammutatud ära mõiste printimise nimi. Mind ei huvita, kui te kasutate print def. Mind ei huvita, kui teil on protsenti S ja kaldkriips N. Need on uskumatult kauge üksikasjad. Mida ma hoolin kui programmeerija prindib nime. Ja jah, siis mis oleks parem viis seda teha kui helistades funktsiooni print nimi? Ja nii, et oli üks motivatsioone teeme midagi sellist. Making kood loetavamaks rohkem korduvkasutatavad ja ka ise kirjeldav. Nüüd võtame pilk veel üks näide, mis oli funktsioonid ühe, mis meil oli siin. Nii, see on võib-olla isegi rohkem oluline seetõttu, et antud juhul Ma ei taha lihtsalt saada int. Ma tahan saada positiivset int. Ja selgub, et saada positiivne int sa pead tegema kamp legwork. Õigus? See ei ole lihtne üks rida helistada nagu print nimi oli, mis on küll vähem veenvad. Et saada positiivset int, logically-- andke mulle tagasi kerima alla peita. Mida sa pead tegema? Nagu kõik tööriistadele on hetkel on asjad print def Standard Raamatukogu ja ka CS50 raamatukogu meil siia keskmine, ja siia Float, Võta Long Long, saad String, kuid ainus, Germane, just nüüd on siia Int. Niisiis, kui ainus vahend teil on oma tööriistakomplekti on siia keskmine, kuidas me minna rakendamisel et saada positiivne int? Sihtrühm: Loo log ja vaadake kas sisend, et nad andsid oli positiivne või mitte. SPEAKER 1: täiuslik. Täpselt. Teine vahend oleme meie tööriistakast nädal või kaks tagasi on lihtsalt silmukoiminen ehitada. Ja nii, jah, kui me kasutame ajal loop või teha, kui silmus, või esiplaanile loop me saaksime tõenäoliselt ära mõnega neist mingis vormis. Me saame rakendada mõiste get positiivne int poolt lihtsalt kasutades siia keskmine, ja siis muudkui nimetades seda uuesti ja hoida tüütamine kasutaja kuni ta tegelikult annab meile, mida me tahame. Ja nii nüüd, see võtmiseks protsessi saada positiivne int funktsiooniks nimetatakse Võta Positiivne keskmine on veidi rohkem oluline seetõttu vaadata seda. Need on nagu 10 pluss rida koodi, mis on kaasatud saada positiivset int, ja ma tõesti ei hooli, kuidas seda teha. Kõik ma hoolin on see, et sa ei saa seda teha, ja nii ma olen peidetud kõik need üksikasjad taga funktsiooni nimetatakse siia Positiivne int, et Tõepoolest, on see tee samas loop. Ja vaadake eelmisel nädalal süntaks seal, kuid see lihtsalt kuulutab N, ja ta prindib välja Juhised kasutajale. Ta kutsub siia Int ja siis kontrollib see tingimus uuesti ja uuesti, ja jälle, kuni kasutaja koostööd. Nüüd, mõned meelerahu kontrolli. Neile võib-olla tuttav mõned programmeerimise, miks on N deklareeritud, miks ma loon N väljaspool do samas loop? Miks see on line 29 ja mitte kohta, nagu 33 näiteks. Sihtrühm: Sest kui sa kuulutada välja, et selline rohkem, seda suurem scope-- SPEAKER 1: Good. Sihtrühm: --and kui te kuulutada see sees silmus, [kuuldamatu] sest ta ei tea midagi. SPEAKER 1: Täpselt. Kui ma ei saa simplify-- see on küsimus ulatus. Ja ulatus viitab kontekst kus muutuja on olemas või on kasutatavad. Ja kena rusikareegel on see, et Üldiselt, kui sa tunnistada või luua muutujale, mida saab kasutada ainult siis sees Lähima omaks looksulg. Mida see tähendab? Kui ma hoopis tagasi võtta ja minna koos midagi, mis tundub veidi lihtsam. Õigus? Line 32 ainult tundub puhtam mulle nüüd. Ma teen nii asju üks kord ja seejärel määrates Paremalt vasakule poolt. Probleem nüüd põhineb et kohaldamisala määratlus on, et N saab kasutada read 31 ja 32 sees see silmus, aga kus, mida see määratlus võib see ei tohi kasutada? Kooskõlas mida? Jah. Sihtrühm: 35. SPEAKER 1: 35. Kindlasti mitte 35. Ja ka siis, kui teine? Sihtrühm: 34. SPEAKER 1: Isegi 34 on problemaatiline, sest see on väljaspool looksulg. Ja nii tegelikult, vaatame, mis juhtub. Õigus? See võib tunduda natuke intuitiivne või ei pruugi, aga vaatame, mida koostaja on öelda, kui läheme tänapäeva allikas kataloog. Tee funktsiooni ühes. Oh mu jumal. Noh, ma lõpuks valmis mis, muide. Hästi. Ja mis teema siin? Väga kauge vaadata. Aga siin on, mida ma typed-- Funktsiooni üks. Siin on, mida teha indutseeritud mis on tegelikult kasutades koostaja rõkkama mõned neist lipud et me näeme jälle enne pikk. Ja jälle, alati otsima esimesel viga, sest see võib lihtsalt olla kuhjuvate mõttetu mõju teistele liinidele. Mida see tähendab, et Probleem on funktsioon 1.c. On line 32. Ja see on veeru või märk, 13. Nii et kui teie tekstiredaktor, mis suudab aitab tuvastada, kui küsimus on. Nii et kui ma keri üles, mis on line 32? See on tõepoolest see üks mis on juba esile siin-- kasutamata muutuja n. Aga see ei ole kasutamata. Ma kasutan seda. Aga koostaja segaduses, sest see eksisteerib vaid seestpoolt selle ulatust. Ja nii ma ei saa seda kasutada siin. Ma ei saa seda kasutada siin. Ja tõlkija, seega isegi ei huvita, et ma üritan. Tundub olevat kasutamata tema tegelikku ulatust. Nii saame laiendada tehes täpselt, mida me hakkasime with-- int n. Ja kuigi seda ei juhtu otsida elegantne, võib-olla, ja me võttes täiendava line Siin, nüüd on see ulatus kõikjal. Nii proovime uuesti. Nii et funktsiooni ühes. Nice. Ja nüüd, kui ma kui ma saan funktsiooni üks, andkem see negatiivne 10, negatiivseid 1, 0, 1, ja see tõepoolest toimib. Nii on teine ​​lahendus siin. Tead mida? Mis siis, kui ma tegelikult olen maadlevad seda? Ma ei tea, kus n pidi minema. Tead mida? Ma lihtsalt panna see kõik kuidas ülaosas minu pilt siin. Mida see ei, sa arvad? Jah? Sihtrühm: [kuuldamatu]. SPEAKER 1: Jah. Nii et ma olen teinud globaalse, nii rääkida. Kui teil on muutuja, mis on väljaspool kõik oma funktsioone, mis on lubatud, ja kood peaks koostama ja n Nüüdsest on kättesaadav mitte ainult get positiivse int, vaid ka main-- mille on veidi murettekitav, sest seal on juba n peamine, et rohkem kohta, et just moment-- kuid seda võiks pidada halva disaini. Hästi. Kui teil on vaja kasutada midagi, oh, ma lihtsalt pane see siia üles, sest kood tundub koostada Üldiselt ei ole hea tava. Pigem sa tahad valida võimalikult kitsalt ulatus Teie muutujaid, mis tähendaks läheb meie esialgne projekt, mis on siin. Nüüd kui panna, et kui ei ole sellega identselt nimega muutuja siin Muide c käsitleks see-- kuigi seda ei juhtu liiga often-- on see, et see on siiski täiesti trahvi siin. Aga see definitsioon n kooskõlas 22 on vari globaalsed. Nii see toimib jooksul Peamine ja globaalsed tegelikult kohaldatakse, kui oled saada positiivset int Aga sellest pikemalt muul ajal, kuid ainult neile, uudishimulik. Lühidalt öeldes, me määrata see siin. Nüüd tease peale kaks tükki enne kui me vaatame viimast rida koodi Selles programmis. Saada positiivset int. Vasakul servas Oma sõna on sõna int. Mida see tähendama sa arvad? Seni oleme enamasti näinud tühine. Jah? Sihtrühm: See tüüp muutuja, mis sa küsides. SPEAKER 1: Jah See tüüp, lase mind ei ütle muutuv, kuid millist tüüpi väärtust et ma olen palunud tagasi. Ja tõepoolest, see on intuitiivne siin, loodetavasti. Õigus? Kui soovite saada positiivne int, mis see on teile taha funktsioon-- nagu meie vabatahtlikud eelmisel nädalal anda teile tagasi tükk paberile int seda? Ja nii me oleme täpsustada, et nn tüübi tagastamise seda funktsiooni on saada positiivne int. Kui me ei taha, et see tagasi midagi, sa ütled tühine. Kui sa tahad seda tagasi string, ütlete string. Kui sa tahad seda tagasi ujuk, ütlete sularahaga. Aga ainus, mis kehtib ka siin loogiliselt, sest ma kasutan get int, kuigi ma olen piirata seda positiivseid väärtusi, on tagasi int. Nii vastupidi, mida see tähendab et seal on tühine sulgudes? Mida sulgudes üldiselt defineerida? Jah? Sihtrühm: See tähendab, et funktsiooni tegelikult ei saada seda. SPEAKER 1: See tähendab, et funktsiooni tegelikult ei saa, mida? Sihtrühm: Sisend. SPEAKER 1: Sisend, üldse. Nii tõesti, kui sulgudes Siin saab määrata tühine, see tähendab lihtsalt ma ei taha mingit sisendit. Ma tegelen probleemi ise. Ja tõepoolest, sa ei pea rääkige saada positiivset int midagi. Sa lihtsalt öelda, saada positiivset int, ja et funktsiooni kustub ja teha oma asja. Aga seal on olnud väike trikk ma olen mänginud siin kogu see aeg veenduda selle koodi koostab. Pange tähele, et int-- saada positiivne int void-- on line 27. Aga mõned pealtnäha veider põhjus see on ka siin on line 16. Ja just hea meede ma kordan see nii on täiesti identsed. Ja ma olen öelnud prototüüp jumbu-line kommentaari. Mis juhtub, kui ma kustutan selle, Ja nüüd uuesti, et funktsioon 1, siseneda. Oih. Oota hetk. Kus mu tab? Huh? Ootel. Tee funktsiooni 1. Seal me läheme. OKEI. Ei salvestanud õigesti. Niisiis, ma arvan, et seal on vähe bug siin, kus ma ei ole Nähes tab nimi hetkel. Mis siin toimub? Kaudsed deklaratsiooni funktsioon saada positiivset int on kehtetu C99. Nii ajab jälle. Mis on see viitab? Noh, tuleb välja, et C on päris loll. Noh, see on programmeerimine keele või pigem koostaja on. See ainult ei tea, mis teil on õpetas ta, ja see on ainult läheb tea midagi kui sa õpetasid seda varem. In teisisõnu Peamised hetkel, ma olen üritab helistada funktsioon nimetatakse saada positiivset int. Aga koostaja ei kavatse märgata, et saada positiivne int püsib kuni rida 26. Ja mis siis koostaja teeb, on lihtsalt vead nii kiiresti kui ta saab liinile 17, öeldes kaudne deklaratsioon ning saada positiivset int, mis on lihtsalt fancy viis öelda, ma ei ole tean, mida saad positiivne int on veel. Teised keeled nagu Java ja Python ja Ruby võiks vaadata tulevikku. C ei ole. Ja nii nagu me määrata see on üks kahest viisist. Kas üks, kui probleem on see, et saada positiivne int ei ole näinud, Noh, las ma lihtsalt liiguta seda üles. See oleks probleemi lahendada. Aga üldiselt, see on peetakse paremaks tehnika panna oma põhifunktsiooni on väga top, nii et inimene lugemine koodi teab, mida programm teeb, sest peamine pole maetud kõik Muide allosas või keskel. See on tipus. Nii, et ei tunne ideaalne. Ja tegelikult võite saada situatsiooni, kus kui üks funktsioon nõuab teine, mis nõuab teise, võite sattuda küsimus, kus ei ole võib minna üle teistele loogiliselt. See lihtsalt ei ole võimalik. Ja nii teel tööle ümber on lihtsalt võtta funktsiooni allkiri, nii et speak-- esimene rida, kus see on declared-- ja lihtsalt kopeerida, kleepida juures top, kuid mitte lokkis braces-- lihtsalt semikooloniga. See on nagu väike vihje kohta, mis on tulemas. Ja tegelikult, kogu see aeg, mil me näinud asju nagu standard io.h ja cs50.h samamoodi nendes dot h failid on olemas teisi prototüübid. Ja me näeme, et enne pikk. Lühidalt öeldes, kui teil on programmi failis koos mitmeid funktsioone Lisaks peamisele, siis peaaegu alati taha tunnistada neid lihtsalt teed oma esimese line, millele järgneb semikoolon, ülaservas faili. See oli palju kõik korraga. Kas küsimusi on? Kas küsimusi on? Hästi. Nii liigume edasi siis et midagi köha. Oh. Kui hästi. Hästi. Köha. Nii et siin on c programmi rakendamise kohta tegime teisel päeval Scratch, et väga lihtsalt lihtsalt ütleb köha, köha, köha. Hästi. Ja keegi ütles paari päeva tagasi, et seal on viis puhastada see kood üles juba. Hästi? Niipea kui sa kopeerimine ja kleepides ilmselt halva disaini. Vähemalt kord saame neli või viis või 20 köha, tundub halb tava. Me muudkui koopia, kleepimine. Mis on ilmne lahendus Puhastus selle programmi üles? Sihtrühm: Loop. SPEAKER 1: Jah. Nii et kasutage silmus. Ja me saame kasutada for-loop, samal ajal loop, tahes mitmeid lähenemisi. Ja tõepoolest, see, mida teeme versioon siin. Olen asemel kirjutatakse see versioonis üks cough.c olla lihtsalt köha jooksul for-loop. Kõik õige, kuid seal on võimalus nüüd selline algus kavandada käesoleva natuke rohkem nagu Tunni me õpetasime hetk tagasi, mis on see-- arvan, et ma tahtsin luua funktsiooni nimetatakse köha, Vaatleme hetkeks mida see hakkab välja nägema. Nii et kui ma tahan midagi köha, ma lihtsalt vaja kasutada print f sees funktsiooni. Ja tõepoolest olen. Ja tegelikult, kõik see aega, iga kord, kui oled trükkimine midagi ekraani, programmeerija kutsuksin et kõrvaltoime. See ei ole minu üleandmist tagasi keegi väärtus. See on minu võtaksid meetmeid mis võivad olla visuaalselt ilmselge. Aga see funktsioon köha, see tagasi midagi, mis põhineb tema esimene rida? Ei, sest selle tüübi tagastamise on tühine, mis tähendab lihtsalt see ei jagab mulle midagi tagasi. Võiks midagi visuaalselt, kuid see ei ole üleandmise mind tagasi paberile, nagu eelmisel nädalal. Kas seda üldse sisendkäibemaksu? Ei. Ja nii see on tühine ka siin. Nii et see on ka omamoodi üle-Engineering see probleem. Õigus? Olen teinud programmi rohkem keerukamaks, rida koodi, Ma ei ole teinud ühtegi toimivamad, kuid see oleks vaheastmeks, ehk laiemat kontekstis keerulisemate koodi. Aga see? Mida ma done-- lihtsalt riivav seda ilma vaadates kommentaar tipus on file-- mida on Ma põhimõtteliselt teha siin minu köha rakendamist, mis on erinev? Jah, on tagasi? Sihtrühm: Tee nii et saate on märk lülitada. SPEAKER 1: Jah. Nii et see tundub selline kena. Õigus? See on nagu lisades funktsioon oma programmi või oma funktsiooni, antud juhul. See ikka tagasi midagi. See võib olla visuaalne kõrvaltoime, sest see helistab print f. Aga nüüd olen parametriseerisin Funktsiooni mille tähendab, et ma olen täpsustatud võtta sisend-tüüpi int ja nimetame seda n, aga ma võiks seda nimetada midagi, mida ma tahan. Tegelikult võib see olla ainult korda veelgi selgem. Ja siis ma võiks lihtsalt muuta see siin. Kuid küsimus on selles, et see, kuidas ma luua funktsioon, mis võtab sisend. Ja kui te mäletate flipping läbi ehk internetis ühe jalutada läbi ekspordi, siis Neljas ja viimane köha näiteks märkad siin ma olen üldistatud minu kood further-- mingi abstraktse seda edasi. Nagu köha ja aevastus, nii on umbes nagu öelda midagi või teha mingi heli. Salvesta oleks vastava Scratch blokeerida. Ja nii ma tegin selles versioonis, mida me saame lihtsalt pilk, on köha on nagu öelda, [Köha] köha, ja vahepeal, aevastamine on nagu öelda, [ACHOO]. Ja nii ma üldistada Nende rakendamisel nüüd rakendamiseks tavalisele funktsiooni, öelda, mis on huvitav tänapäeva eesmärkidel ainult sellepärast, et see ikka ei ole tagasi tüübist. Aga kui palju sisendeid see on? Sihtrühm: Kaks. SPEAKER 1: Kaks. Ja kui sa tahad võtta kaks argumenti, lihtsalt eralda need komaga. Ja kui sa tahad, siis helistada, et funktsiooni, märgata, et sa lihtsalt helistada ütleme, quote, Tsitaat lõppeb, esimest argumenti, ühise n, teist väidet. Nii jälle, me lihtsalt nüüd ehitusplokkide et saaksime tegelikult rakendada mõned meie funktsioonid. Hästi. Kõik küsimused need on? Nüüd oletame, koorida tagasi kiht kui nii. Ja eesmärk lõppkokkuvõttes on järgmisel nädalal probleem komplekt läheb edasi cryptogrophy-- kunst skrambleerimisbittide informatsiooni. Ja konkreetsemalt teavet on teil krüptida või lahti krüptida läheb teksti. Ja nii, et sellist kutset Tänane küsimus nagu hästi, mis toimub all kapuuts teksti peale ASCII nädalast null, Ja kuidas me tegelikult alustada manipuleerida seda? Nii et siin on Zamyla nime. Ja teksti, mis võib olla sisestatud arvesse nagu get Stringifunktsioonide. Ja algab nüüd, kui näete string nagu see-- Z-A-M-Y-L-a-- hakata mõtlema sellest, nagu oleks iga need tegelased on kasti oma oma. Ja tõepoolest, nädala või nii on aega, kusjuures kõik lahtrid läheb esindama väga konkreetselt ploki memory-- hammustada mälu. Nii kõik need kirjad, lõpuks esindab 8 bitti. Ja me tegelikult näha, mis toimub kohta all kapuuts minu arvuti. Aga mitte piisab lihtsalt vaadata Zamyla läbi selle läätse, kusjuures iga need kirjad on oma kasti. Ja kenasti piisavalt C saame juurde kõik need kastid otse. Nii et kui sa tahad saada esimene täht tema nime, super lihtne C. Kui sa tahad saada viimase kirja, super lihtne ka tükk uut süntaks. Nii et ma lähen edasi minna arvesse CS50 IDE ja avada string null dot C. Ja selles näites siin, seal on paari uusi asju juhtub. Nii esimene rida 19, me oleme näinud seda before-- get string. Nii nagu kiire meelerahu kontrolli, kui keegi saaks pakkuda kuni verbaalselt võhik selgitus mis toimub kooskõlas 19. Nagu lihtsalt see viiks English et toakaaslane ei CS50 Võib aru saada. Jah. Sihtrühm: Kas kasutaja sisestada string ja hoidke seda muutujat s. SPEAKER 1: Good. Kas kasutaja sisend string ja hoidke seda muutujat s. See on suurepärane. Nii et paremal külg, mida me nimetame get string. See tagastab väärtuse et ei saada määratud alates parempoolne vasakpoolseks pool muutujaks nimetatakse s, mis on säilitamiseks mõeldud string. Täpselt. Nüüd joon 22 kohta kommentaari kooskõlas 21, ilmselt prindib et string üks märk rea kohta. Aga kuidas? Nii esiteks, me initsialiseerida I 0. Ja siis kuidas me saame lõpuks Zamyla nimi? Noh, lõpus Zamyla nimi, suutsin käsitsi sisestama viimase iseloom Tema nimi kuidagi, või kui palju see. Õigus? Kui me läheme tagasi siin-- Z-A-M-ma-- Y-L-a--, et ma võiks kirjutada. Mis on indeks Zamyla viimane kiri? Kui see on 0-- rääkides nagu programmer-- 0, 1, 2, 3, 4, 5, Ma heard-- nii tõesti, viimane täht in Zamyla nimi on kuues, aga kui me loota 0, see saab olema number 5. Nii et hoidke seda silmas pidada. Selgub, seal on funktsioon C nimetatakse strlen ja juba järgmisel päeval ja sel päeval veel, Paljud programmeerijad vali sünkroonida nimed nende funktsioone, mis kõlab nagu sõnad nad üritavad öelda. Nii strlen on string pikkusega. Ja mis oleks string pikkusega S naasta, kui Zamyla on sisend? Sihtrühm: Viis. SPEAKER 1: Z-A-M-Y-L. Kuus. Õigus? Mis on pikkus Zamyla nimi? Õigus? Ja just tegelikult kuus tähte. Õigus? Ja mis siis kas see tähendab, et meie loop? Me läheme alates 0 kuni kuus, mille läheb meile viit korduste. Mida me teeme iga iteratsiooni? Noh, protsenti C, keegi arvata teisel päeval, tähendab kohatäide, mida? Sihtrühm: Char. SPEAKER 1: Lihtsalt char. Nii ühe character-- ole Mitme tegelasi nagu string. Ja siis siin on uus liin et meil väljatrükk. Ja siis siin on uus süntaks. Kui soovite välja printida i-nda märgi stringi S, nii et rääkida, võite lihtsalt öelda nimi stringi S, ja avage nurksulg ja Seejärel suletakse nurksulg koos i keskel. Ja see on selline tore, et see selline näeb välja nagu kandiline nagu ruudud, mis Zamyla on tegelased olemas, et pilt on. Nii et kui ma tegelikult teha selle Nüüd vaatame, mis juhtub. Tee string 0 dot kaldkriipsuga string 0, ja siis ma olen ei kavatse tüüpi Zamyla nime. Ei ole kiire, sest ma ei ole kasuta print f, kuid sellest pole midagi. Ma lihtsalt tean, mida teha. Ja tõepoolest, ta prindib välja Zamyla nimi, üks rea kohta. Nüüd on natuke hoolimatu. Oletame, et ma ei tea umbes strlen ja ma arvasin, kõik õige, keegi läheb on nimi suurem kui näiteks 50 tähemärki. Lähme edasi ja kompileerida seda ja korrake seda, ja siis kirjuta Zamyla uuesti. Loogiliselt, mida on Programm kavatse proovida trükkida? Z-A-M-Y-L-A siis nagu 45 teadmata baiti mälu. Ja tõepoolest, me tuleme tagasi Selle idee mälu. Aga loogiliselt, kui Zamyla nimi on see pikk, ühe pildi siin, mida me ütleme on hoida trükkimine, hoida trükkimine, hoida trükkimine, hoida trükkimine, hoida trükkimine, kõik viis 50. iseloomu, mis kes teab, mis juhtub. Nii saab tegelikult vaatleme. Olgem kirjuta Zamyla. Huvitavad. Meil vedas. Lihtsalt terve hulk tühja ruumi. Oh. Seal on üks funky iseloomu. Tundub selline nagu imelik küsimus märgi sinna, kuid seal on Zamyla nime. Lähme tõesti hoolimatu. Kuidas me välja printida 500 plokid tundmatusse? Lähme edasi ja muuta see samuti ja siis uuesti käivitada. Ja olgem täisekraanil, sest me peame nägema rohkem ruumi. Zamyla. Vedas jälle. Julge saame rohkem hoolimatu? Lähme rohkem hoolimatu. 50000 tähemärki. See on kõige kindlasti ei ole hea mõte. Hästi. Tee string 0. See on meie viimane demo. Zamyla. Ugh. Ugh. OKEI. Nii et minu mälu on tõesti tühi kohe, mis on tegelikult omamoodi mugav. Mida ma üritan saada mina-- kõik korras. Ja nüüd ma lähen lihtsalt saada hoolimatu. 500,000. Make-- olgem täisekraani ta. Sisesta. Zamyla. Seal me läheme. Mul pole aimugi, mida see on, kuid see kõlab halb. Hästi. Ja tegelikult, varsti, kui sa oled üks õnnelik vähe tööaega ja probleem määrata üks, siis võib väga hästi esineda seda. Segmenteerimine süü tegelikult teeb on täpselt määratletud tähenduses. See tähendab, mingi viga seotud segmenti mälu. Ja üldarusaadavat mõttes, see tähendab, et me puudutanud memory-- me kasutasime RAM minu arvuti et ma ei oleks pidanud olema juurdepääs. Ja see, mida on nii võimas ja ka ohtlik umbes C on see, et sa tegelikult olema piiramatu juurdepääs ta kõigile oma programmi mälu või baiti või RAM täpsemalt. Nii et kuigi Zamyla nimi on ainult kuus tähemärki, Ma ei saa ikka kuhugi minna mälu tahan. Ja kui kõrvale, kui olete kunagi lugenud mõnda artiklit aastate jooksul mõningate server või mõne programmi saada pragunenud või häkkinud see on võetakse ära midagi nimetatakse buffer overflow ära võime me tegelikult rääkida mõne nädala, mis on Üldiselt viitab kuidagi kavaldades arvuti sisse läheb hästi piiridest kaugemale mälu et see peaks olema, ja leida midagi mahlane et memory-- Parooli ehk viis möödahiilimiseks mõned seerianumber Kontrollige, või lihtsalt üldiselt võimelised trikk Arvuti on kood, mis ei olnud mõeldud. Aga tulgem tagasi Tegelikkuses hetkeks kus see programm oli rakendada strlen, ja tutvustada üks asi siin. Mida uut Neist esikolmikusse read? Nii string dot h. Selgub, et see on raamatukogu nimetatakse String Dot H või String raamatukogu kelle päisefail, nii-öelda on string dot h, mis annab mulle juurdepääsu sellele strlen funktsiooni. Kui ma jätta, et koostaja on läheb peale karjuda mingis vormis. Aga tead mis? Nüüd lähme tõesti nüansirikas. Vastavalt 22, seal on midagi sellist of inefficient-- halvasti projekteeritud, arguably-- selle rida koodi. Mõelge sellele, kuidas for-loop rakendamine ja milliseid samme korduda ja uuesti ja again-- vormindamise, tingimusel, kood, mis saab täita, siis juurdekasvu või muutus, siis tingimusel, siis koodi, siis muutus, siis tingimusel, siis kood, Seejärel muutus, ja nii edasi. Mis võiks olla natuke murettekitav või halvasti teinud siin? Jah, sinine. Sihtrühm: strlen on nimetatakse palju, palju kordi. SPEAKER 1: Jah. Nii strlen nimetatakse mitu korda, kuid mis on pikkus Zamyla oma nime, Esimest korda loop täidab? Sihtrühm: Kuus. SPEAKER 1: Kuus. Noh, mis on pikkus tema nimi teine ​​kord kood käivitab? Sihtrühm: Kuus. SPEAKER 1: Olgu. See on ikka kuus. Õigus? Zarla nime ei ole muutunud, isegi kui ma otsin kell ainult osa tähti tema nimi. Ja nii, et ma olen tegelikult selle küsimuse, mis on pikkus Zamyla, mis on pikkus of Zamyla, mis on pikkus Zamyla, kuue eri aegadel, või Seitsme isegi, on lihtsalt loll, sest see on muutumatu, et vastus. Ja nii ma võiks tegelikult teha on see-- string üks Mul on natuke parem versioon siit. There-- whoops-- string kaks mul marginaalselt parem variant, kus Mina see-- asemel lihtsalt initializing i 0, ma ka komaga Kinnitan teise muutuja nimega n-- ma ei pea ütlema, int uuesti. Ma ei tohiks tegelikult. Aga ma ütlen n. Ja siis ma initsialiseerida n strlen n, nii et nüüd Mitu korda strlen saada hukati kokku? Ainult üks kord. Ja nii on see, mida me mõtleme varem, parem disain. Tegelikult, kui teie kood on õige, lähen tagasi ja läbi mõelda, ma kasutan nii vähe mälu või mõne sekundi või millisekundit arvuti ajal võimalik rakendada mingi probleem? Ja ma lähen kerida up ja lihtsalt mainida et seal on see mainimine null selles versioonis, kuid me tuleme tagasi, et enne pikk. Sest nüüd, lähme vaatame kell, kus see saab meid. Nii et üks, selgub, et Nüüd, kui meil on võime vaadata üksikute märkide, saame võimendada midagi nädalast 0, mis oli väga kauge ja omamoodi ebahuvitav ajal. Aga nüüd, ja eriti siis, kui me saada Krüptograafia nädalas see saab olema päris võimas. Selgub, et mõned andmed types-- ints ja ujukite ja süütab ja stringid ja teiste things-- mõned neist saab väga kergesti muundada teiseks. Näiteks, kui me rääkisime umbes ASCII mõnda aega ago-- siin Pealinnas tähtedega A läbi M, dot, dot, dot-- me ütlesime, et seal on kaardistamine vahel tähed ja numbrid. Ja tegelikult, see kehtib jaoks väiketähti samuti. Väiksed tähed a on 97, kapitalile on 65. Ja seal on mitmeid ASCII, mis on lihtsalt selle kaardistamine süsteemi kõik need muud tähed. Mida see tähendab? Noh, ma lähen edasi minna ja avatud tõelisi kiiresti midagi, mida nimetatakse ASCII 0, millest enamik on kommentaarid. Ja taas online saab alati lühidalt läbi kommentaarid. Ja vaadata, mida see saab seda teha. Nii see ju peamine funktsioon. Olen kodeeritud numbrid lihtsalt nüüd, sest ma tean, mida ma teen. Ma tean, mida ma tahan näha siin. Ja ma olen vormindatud I 65. Ja ma arvestan üles läbi 26 tähte kokku. Ja mida ma nüüd prindi üks rida korraga kas saate tõlgendada see esile rida? Mis saab trükkida? Jah. Sihtrühm: Kas sa lähed prindi kirjas, et vastab kaart kirjas väärtus ja täisarvuni? SPEAKER 1: Täpselt. Ma lähen printida kirja vastab täisarvuni, ja vastupidi, on järgmine. Noh see, et keegi varem ütles, on lihtsalt kohatäide char. See ikka on. See muidugi on kohatäide jaoks int-- ole uus liin. Ja nüüd märkate, minu esimene väärtus, mis Ma ühendades selleks kohatäide ei ole lihtsalt I. ma räägin, sulgudes char ma, mis Sulgudes char on räägib tõlkija, raviks Ma ole suur, nagu ta on, mis on number. Treat see tegelik iseloom. Arvestades, et teine ​​väärtus Ma kõrvaldamine in-- I-- peaks olema ainult number. Nii et kui ma koostada selle program-- nii et see on tee ASCII 0, dot kaldkriipsuga ASCII 0-- ma lihtsalt saada see mugav väike skeem, mis näitab mulle kõiki võimalikke kaardistamisel, ilma et arvan, et see läbi või sellest aru saada minu oma. Ja ma olen ka välja trükkida, märgata väiketähti, sest mõned read hiljem, ma ka välja printida selle kaardistamine samuti, mis on lihtsalt öelda, et kui sa mõistad mis toimub all kapuuts, sa saad automaatselt teisendada edasi ja tagasi. Ja tegelikult, kui keegi teist kunagi tegin seda algkool või kuulnud keegi müütiline võttes teadmiseks ja saata see oma või tema sõber klassis, aga sa Segipaisatud tähti näha nii muutub B, ja B muutub C, või midagi keerulisem kui see, noh, kuidas sa minna rakendamisel, et nagu laps? Noh, sa lihtsalt selline tea  saab B, B muutub C, kuid matemaatiliselt, Mis see oli poiss teeb? Mida sa lisades iga täht? Sisuliselt 1. Nii et kui muudad A B, mis on selline nagu muutuvatele 65-66, mis matemaatiliselt tähendab lihtsalt lisada 1. Ja nii, kui sa olid rakendada et veidi petlik tehnikat Sinu õpetaja koodi, siis Võib teha just nii lihtsalt lisades ühe tähe koos. Nii et enne pikk, et me oleme näeme, kuidas me saab ära, et tegelikult tõeliselt rüselus ja lahti harutama informatsiooni. Vahepeal teatada, et oleme alustanud tutvustada paar teiste raamatukogude siin-- string üks täna. Ja väga kasulik sait Loodetavasti leiad nimetatakse reference.cs50.net, mis Õppejõudude on kokku pandud, nii et kui sa tahad otsida, kuidas strlen tööd, võidki kirjutama hakata funktsiooni nime, kliki strlen seal, ja siis vähem mugav selgitus läheb ilmuda. Või kui soovite, et ametnik Linuxi-põhiste selgitus, võite klõpsata hubane ülevalt paremalt ja see esitab sama teavet, aga keerukamate mõttes. See on kasulik ressurss tegelikult tea, mida kõike teeb. Järgmine kord, kui me läheme heita pilk Ovaltine ja rohkem, ja tutvustada ennast maailma krüptograafia. Enne seda, et me näeme sa hiljem sel nädalal. Ja nüüd, Colton Ogden. Kohtumiseni kolmapäeval. [Muusika mängib] [Muusika mängib] SPEAKER 1: Mis [Piipar] sa teed? SPEAKER 1: Ma söön oma magustoitu? Kuidas sa seda süüa? Käega? [Muusika mängib]