[Powered by Google Translate] [Osa 4] [vähemmän mukavaksi]
[Nate Hardison] [Harvardin yliopisto]
[Tämä on CS50.] [CS50.TV]
>> Selvä, tervetuloa takaisin osiossa.
Tämän viikon jaksossa aiomme tehdä pari asiaa.
Menemme ensin kertaus Problem Set 2,
joka on Caesar ja Vigenère ongelma set.
Ja sitten me aiomme sukeltaa Quiz 0 tarkastelu
ja viettää vähän aikaa neulojen laittaminen takaisin neulansuojukseen mitä olemme puhuneet
kussakin luentoja tähän mennessä, ja me myös tehdä muutamia ongelmia
edellisen vuoden tietokilpailuja.
Näin teillä hyvä tapa valmistautua siihen.
>> Voit aloittaa, olen käynnistetty pari hyvää ratkaisuja
kuluneen Harjoitus, Harjoitus 2, tähän tilaan.
Jos te kaikki osuma linkki,
ja jos klikkaa nimeni ja valitse ensimmäinen tarkistamista
näet caesar.c, joka on juuri Etsin.
Puhutaanpa tästä todella nopeasti.
Tämä on vain näyteliuosta.
Tämä ei välttämättä ole täydellinen ratkaisu.
On olemassa monia erilaisia ​​tapoja kirjoittaa tähän,
mutta on olemassa muutamia asioita, joita halusin korostaa
että huomasin kun olin ryhmittely, yleisiä virheitä, että mielestäni
tämä ratkaisu tekee erittäin hyvää työtä käsittelyn.
>> Ensimmäinen on ottaa jonkinlainen otsikon kommentti yläosassa.
Riveillä 1 7 näet yksityiskohdat,
mitä tämä ohjelma tekee.
Hyvä yleinen käytäntö, kun olet kirjoittamassa C-koodia
riippumatta, jos ohjelma on sisällä yksittäinen tiedosto tai
onko se jaettu yli useita tiedostoja on jonkinlainen
suuntaaminen comment yläreunassa.
Tämä on myös ihmisiä, jotka menevät ulos ja kirjoittaa koodia todellisessa maailmassa.
Tämä on, jos he laittaa tekijänoikeustiedot.
Alla # sisältyvät.
Rivillä 16 on tämä # define, jonka tulemme takaisin vain hieman.
Ja sitten kun toiminto käynnistyy, kun pääasiallinen alkaa,
koska tämä ohjelma on kaikki sisältyy yksi toiminto
Aivan ensimmäinen asia, joka tapahtuu ja tämä on hyvin idiomaattisia ja tyypillinen C-ohjelma
että vie komentoriviargumentteja-on, että se välittömästi tarkistaa
>> varten argumentti count, argc.
Täällä me näemme, että tämä ohjelma on odottaa 2 väitteitä tarkalleen.
Muista siellä että ensimmäinen väite, joka on erikoinen
että on aina ohjelman nimi, joka on ajetaan,
nimi suoritettavan tiedoston.
Ja niin, mitä tämä tekee se estää käyttäjää käynnissä ohjelmasta
enemmän tai vähemmän argumentteja.
Syy haluamme tarkistaa tämän heti johtuu
emme voi oikeastaan ​​käyttää tätä argv array täällä luotettavasti
kunnes olemme tarkistanut kuinka suuri se on.
>> Yksi yleisimmistä virheistä olen nähnyt oli ihmiset heti mennä
ja napata argv [1].
He napata keskeinen argumentti pois array eivätkä jotta voin tarkistaa sitä,
ja sitten he tehdä testi argc sekä seuraavaan testiin,
vai ei ensimmäisen argumentin oli todellakin kokonaisluku samaan aikaan,
ja se ei toimi, koska siinä tapauksessa, että ei ole perusteita mukana
sinun on tarttumalla väite, joka ei ole siellä tai yrittää napata yksi, joka ei ole siellä.
>> Toinen suuri asia, että sinun pitäisi huomata, että
haluat aina tulostaa jonkinlainen hyödyllisiä virheilmoituksen
käyttäjän suunnata niitä.
Olen varma olet kaikki ajaa ohjelmia, joissa yhtäkkiä se kaatuu,
ja saat tämän naurettavan pieni dialogi, joka ponnahtaa ylös ja sanoo
jotain hirvittävän arvoituksellinen ja ehkä antaa virhekoodi tai jotain
että ei ole mitään järkeä.
Tämä on, jos todella haluat antaa jotain hyödyllistä
ja kohdennettu käyttäjälle niin, että kun he ajaa sen he menevät "Oh," face palm.
"Tiedän tarkalleen, mitä tehdä. Tiedän miten korjata tämä."
>> Jos et tulostaa viestin, niin voit päätyä todella
jolloin käyttäjä mennä tutkimaan lähdekoodia
selvittää, mikä meni pieleen.
On myös joitakin kertoja, että voit käyttää erilaisia ​​virhekoodeja.
Täällä me vain käyttää yhdellä sanoa oli virhe,
oli virhe, virhe.
Isompi ohjelmia, usein ohjelmia, joita kutsutaan muita ohjelmia,
palauttaa jonkinlainen erityinen virhekoodien eri skenaarioissa
ohjelmallisesti kommunikoida mitä muutoin
vain käyttää mukava Englanti viestin.
Cool.
Kun teemme työtä alas, voit nähdä meidän vetää avaimen ulos.
Testaamme onko avain sopii.
Saamme viestin käyttäjälle.
Syy teemme sen tässä do while-silmukka-ja tämä on jotain, että me kattaa
vuonna hieman, mutta näyttää siltä, ​​että jos kirjoitat ohjaus D
kun saat että GetString kehote terminaalin
mitä se oikeastaan ​​tekee se lähettää erikoismerkki
ohjelmaan.
Sitä kutsutaan ELF tai tiedoston loppuun luonnetta.
Ja siinä tapauksessa, meidän viesti merkkijono on null,
joten tämä ei ollut meidän tarkistettu vuonna ongelmaan asetti.
>> Mutta kuten me mennä, nyt kun olemme alkaneet puhua osoittimia
ja dynaamisen muistinkäytön kasaan,
tarkistanut null aina on toiminto, joka voisi
palauttaa null arvona on jotain, että sinun kannattaa saada tapana tehdä.
Tämä on täällä lähinnä kuvitus.
Mutta kun et näe GetString tulevaisuudessa,
Joten Harjoitus 4, sinun kannattaa pitää tämä mielessä.
Tämäkään ei ole ongelma Harjoitus 3 joko koska meillä ei ollut kata sitä vielä.
Lopuksi saamme tähän osaan, jossa saamme tärkeimmät salaus silmukka,
ja on olemassa pari asiaa täällä.
Ensinnäkin, me kerrata koko viesti merkkijono itse.
Täällä olemme pitäneet strlen puhelun kunnossa,
joka monet teistä ovat todenneet ei ole hyvä tapa mennä.
On käynyt ilmi, tässä tapauksessa se on myös ole suuri,
osittain koska olemme muutetaan viestin sisältö itse
sisällä on silmukan, joten jos saamme viestin, joka on 10 merkkiä pitkä,
ensimmäistä kertaa aloitamme että silmukka strlen palaa mitä?
10.
>> Mutta jos me sitten muokata viestin, sanomme muuttaa sen 5. luonnetta,
ja me heittää \ 0 hahmo 5. paikkaan,
on myöhempi iteraatio strlen (viesti) ei palauta mitä se teki
ensimmäistä kertaa toistetaan,
mutta sen sijaan palauttaa 5, koska me heitti että null terminaattori,
ja merkkijonon pituus on määritelty
asennon mukaan, että \ 0.
Tässä tapauksessa tämä on hyvä tapa edetä, koska olemme muuttamalla sen paikalleen.
Mutta huomaa, että tämä on oikeastaan ​​yllättävän helppo salata
jos saat matematiikka oikein.
Kaikki mitä tarvitaan on tarkistaa, onko kirje että etsit
on sekä isoja että pieniä.
>> Siksi meidän on vain tarkistaa, että ja meillä ei tarvitse tarkistaa
on alfa asia johtuu
jos merkki on iso tai jos se on pieni
niin se on ehdottomasti kirjaimen,
koska meillä ei ole isoja ja pieniä numeroita.
Toinen asia teemme ja tämä on hieman hankala,
on olemme muutetaan standardin Caesar cipher kaava
että annoimme Harjoitus erittely.
Mitä eroa tässä on, että me vähennetään
on iso asia pääomaa, ja sitten lisäsimme pääoma
takaisin lopussa.
>> Tiedän muutamia olet tehnyt tämän koodin.
Oliko kukaan teistä tehdä tämän sinun väitteitä?
Sinä teit tämän. Voitteko selittää, mitä tämä tekee, Sahb?
Vähentämällä sitä, koska teit mod heti sen,
sinun täytyy ottaa se pois, niin että niin saat [yskää] asentoon.
Ja sitten lisäämällä sen takaisin myöhemmin sinä siirtynyt joka halusitte.
Joo, aivan.
Mikä Sahb sanoi oli, että kun haluamme lisätä
meidän viestimme ja tärkeimmistä yhdessä
ja sitten mod että mod että NUM_LETTERS,
jos emme mittakaavassa meidän sanoman sopiva 0-25 alue ensin,
Sitten saatamme päätyä saada todella outo numero
koska arvot me tarkastelemme kun katsomme viesti [i]
kun katsomme i luonnetta meidän plain-tekstiviestin,
on arvo jossain tässä 65-122-alue
perustuu ASCII arvoja isojen läpi pieniä z.
Ja niin kun me mod sen 26 tai NUM_LETTERS,
koska se oli meidän # define oikeassa yläreunassa tänne,
että menee meille arvon sehän on 0-25 välillä,
ja meidän tapa niin laajasti, että takaisin ylös
ja saada sen asianmukaista ASCII alue.
Helpoin tapa tehdä se on vain skaalata kaiken alas
osaksi 0-25 välillä aluksi,
ja sitten siirtää kaiken takaisin ylös lopussa.
>> Toinen yleinen virhe, että näin ihmiset törmätä on se, että
jos et itse tee tätä skaalaus heti
ja lisäät viestin ja avaimen yhteen ja lisäät ne vaikkapa
osaksi char muuttuja, ongelma, että
on, koska viesti [i] on suhteellisen suuri määrä aloittaa-
Muistan sen on ainakin 65, jos se on ison kirjaimen,
jos sinulla on iso avain, eli jotain 100,
ja lisäät ne 2 yhteen allekirjoitettu char aiot saada ylivuoto.
Olet menossa saada arvon, joka on suurempi kuin 127,
mikä on suurin arvo, char muuttuja mahtuu.
Jälleen, siksi et haluaisi tehdä tuollaista aluksi.
Jotkut ehtinyt tapauksessa tekemällä jos muuta ja testaus
onko se olisi ylivuoto sitä ennen, että
mutta näin saa kiertää.
Ja sitten tässä ratkaisussa me tulostaa koko merkkijonon aivan lopussa.
Muut ihmiset tulostetaan merkki kerrallaan. Molemmat ovat mahtavia.
Tässä vaiheessa tehdä teillä on kysymyksiä, kommentteja tästä?
Asiat haluat, mitä et pidä?
>> Minulla oli kysymys.
Ehkä missasin sen aikana selitys, mutta miten tämä ohjelma
ohittaa tilat liittämistä varten avain tekstin pituus?
Tämä on vain Caesarin salakirjoitus. >> Anteeksi, joo.
Joo, näemme, että.
Vuonna Caesar cipher saimme noin että koska
me vain selattava merkkiä.
Me vain pyörinyt, jos ne olivat isoja tai pieniä.
Te olo melko hyvä tästä?
Voit vapaasti kopioida tämän kotiin, ota se,
vertaa sitä mitä te kirjoitti.
Ehdottomasti vapaasti lähettää kysymyksiä siitä liikaa.
Ja vielä, ymmärtää, että tavoite täällä ongelman asettaa
ei saada te kirjoittaa täydellinen koodi ongelman sarjaa.
Se on oppimiskokemus. Joo.
>> Palaa do while-silmukka, jos se vastaa null,
joten null juuri merkitse mitään, he vain enteriä?
Null on erityinen osoittimen arvoa,
ja käytämme null kun haluamme sanoa
meillä osoitin muuttuja osoittaa mitään.
Ja niin yleensä se tarkoittaa, että tämä muuttuja, tämä viesti muuttuja
on tyhjä, ja täällä, koska käytämme CS50 erityistä merkkijono tyyppi,
Mikä on CS50 merkkijono tyyppi?
Oletko nähnyt, mitä se on, kun Daavid vedetty takaisin huppu luento?
Se on funky-se osoitin, eikö?
Okei, joo. >> Se char *.
Ja niin todella voisimme korvata tämän
täällä kanssa char * viesti
ja niin GetString toiminto, jos se ei ole onnistunut saamaan merkkijono käyttäjältä,
se ei voi jäsentää merkkijono, ja yhdestä tapauksesta, jossa se ei voi jäsentää merkkijono
on, jos käyttäjä tiedoston loppuun luonnetta, ohjaus D
joka ei ole jotain yleensä tehdä, mutta jos se tapahtuu
niin funktio palauttaa tämän null arvon tapa sanoa
"Hei, en saanut merkkijono."
Mitä tapahtuisi, jos emme laita viestiä = null,
joka on jotain, että emme ole tehneet vielä?
Miksi se olisi ongelma?
Koska tiedän, että olemme puhuneet hieman vuonna luennon muistivuotoja.
Joo, tehdään se, ja katsotaan mitä tapahtuu.
>> Basil kysymys oli, mitä tapahtuu, jos emme oikeastaan ​​ole
viesti = null testi?
Katsotaanpa selaamalla ylös.
Te voi kommentoida tätä.
Oikeastaan, minä pelastan sen tarkistamista.
Tämä on Revision 3.
Mitä sinun täytyy tehdä ajaa tätä ohjelmaa sinun täytyy klikkaa tästä vaihde kuvaketta täällä,
ja sinun täytyy lisätä väitteen siihen.
Sinun täytyy antaa sille keskeinen väite, koska haluamme kulkea komentorivillä.
Täällä aion antaa sen numero 3. Pidän 3.
Nyt zoomaus takaisin ulos, käynnissä ohjelma.
Se on käynnissä, kokoamisessa, rakennus.
Täällä mennään. Se odottaa pyydetään.
Jos minä kirjoita jotain hello-minne se meni?
Voi, minun ohjelma kesti liian kauan ajaa. Olin jawing liian kauan.
Täällä se menee.
Nyt minä kirjoita hei.
Näemme, että se salaa asianmukaisesti.
Nyt mitä tapahtuu, jos teemme nopean GetString palata null?
Muista, sanoin, että teimme, että painamalla Control-D samanaikaisesti.
Minä selaamalla ylös tänne. Me ajaa se uudelleen.
Building. Siellä se menee.
Nyt kun lyön ohjaus D
Sain tämän linjan, joka sanoo opt/sandbox50/bin/run.sh, segmentointi vika.
Oletteko nähnyt sitä aiemmin?
>> [Opiskelija] Miksi ei->> Anteeksi?
[Opiskelija] Miksi ei ole core dump tässä tapauksessa?
Core dump on-kysymys on miksi ei ole core dump täällä?
Kysymys on, että voi olla, mutta core dump on tiedosto
että saa tallennettua kiintolevylle.
Tässä tapauksessa olemme käytöstä ytimen kaatopaikkoja
ajelu palvelimelle niin että emme ole ihmisiä segmentti Virhesovellus
ja rakentaa tonnia ytimen kaatopaikkoja.
Mutta saatat saada.
Core kaatopaikat ovat sellainen asia, että voit usein poistaa,
ja joskus et.
Segmentointi vika, vastata kysymykseen, Basil,
on selvää, että olemme yrittäneet avata osoittimen
joka ei asetettu osoittamaan mitään.
Muista Binky vuonna videon kun Binky yrittää
go pääsy osoitin, joka ei ole osoittaa mitään?
Tässä tapauksessa kai teknisesti osoitin osoittaa jotain.
Se osoittaa null, mikä on teknisesti 0,
mutta että on määritelty olevan segmentin, joka ei ole käytettävissä
teidän ohjelma, joten saat segmentointi vika
koska et päästä muistia, joka on voimassa olevassa segmentissä
kuten kasan segmentin tai pinon segmentin tai datasegmentin.
Cool.
Kysyttävää Caesar?
>> Siirrytään. Katsotaanpa Versio 2 todella nopeasti.
Se Vigenère.
Täällä Vigenère
käydään läpi tämä melko nopeasti, koska jälleen
Vigenère ja Caesar ovat melko samanlaisia.
Header kommentti on ennen,
# Define on ennen välttää käyttämällä näitä Magic Numbers.
Kiva juttu on sanoa halusimme siirtyä
eri aakkoset tai jotain.
Sen sijaan, mennä manuaalisesti muuttaa kaikki 26: n vuonna koodin
voisimme muuttaa 27 tai pudota alas
jos käytimme eri aakkosista, eri kieliä.
Jälleen meillä tämä tarkistus väitteen määrä,
ja todella voi melkein pitää tätä mallia.
Melkeinpä jokainen ohjelma voit kirjoittaa pitäisi olla-
jos se kestää komentoriviargumentteja-jotkut järjestyksessä linjat
että lukee näin aivan alussa.
Se on yksi ensimmäisistä sanity testien haluat tehdä.
>> Täällä mitä teimme oli teimme että
avainsana oli voimassa, ja se oli toinen tarkastus, että teimme.
Huomaa jälleen, että erosimme tämä päässä argc ja 2.
Huomaa, että tässä tapauksessa yksi asia, että meidän oli tehtävä oli sen sijaan
käyttää i halusimme vahvistaa koko merkkijonon,
ja jotta tehdä, että sinulla todella on mennä merkki merkiltä
yli merkkijono.
Ei ole hyvä tapa soittaa jotain sitä
koska jopa, esimerkiksi i palaa 0
jos se ei voi jäsentää kokonaisluku, niin että ei edes toimi.
Jälleen mukava viesti kertoo käyttäjälle, mitä tapahtui.
Sitten täällä taas, hoidamme myös silloin
käyttäjä tyypit ohjaus D satunnainen luonne.
>> Ja sitten Charlotte oli kysymys aikaisemmin siitä, miten me onnistumme ohittaa tiloihin
meidän merkkijono täällä.
Tämä oli sellainen samanlainen kuin mitä teimme Myspace ohjelmaan
että teimme osassa, ja miten tämä toimi
on, että me seurataan kirjainten määrä että olimme nähneet.
Kun kävelimme yli viestin merkkijonon, kun kävelimme yli merkki merkiltä
me seurataan indeksi osana varten silmukan, ja sitten me myös seurataan
kirjeiden määrä, joten ei erikoismerkkejä, ei numeroita, ei-valkoinen tila
että olimme nähneet erillisessä muuttuja.
Ja sitten tämä liuos muutetaan avaimen
saada todellinen avain kokonaisluku, ja se että lennossa,
juuri ennen kuin se menee sitten salata varsinaisen viestin merkki.
On joitakin ratkaisuja, jotka olivat täysin hyvältä
joka muuttaa ylös kun testaus avaimen voimassaoloajan.
Lisäksi varmista, että merkki ja avainsana
oli kirjaimella se kääntyi, että tulee kokonaisluku
vuonna 0-25 alue siirry ottaa tehdä myöhemmin tätä silmukka.
Jälleen näet täällä on todella täsmälleen sama koodi
että me käytetään Caesar tässä vaiheessa.
Teet täsmälleen sama asia, joten todellinen temppu on miettiminen
miten kääntää avainsanan kokonaisluku.
>> Yksi asia, että teimme täällä, että on hieman tiheä
on me toisti tämän lauseen, kai sitä voisi kutsua,
3 erillistä kertaa linjat 58, 59, ja 61.
Voiko joku selittää, mitä tämä lause ei?
Se pääsyä hahmo, kuten sanoit.
Joo, se on [kuulumattomissa] merkki avainsanan,
ja niin se on määrä kirjaimia nähnyt, koska olet vain liikkuvat pitkin
Hakusanalla kun olet nähnyt kirjeen,
niin että menee tehokkaasti ohittaa tiloja ja muuta vastaavaa.
Joo, aivan.
Ja sitten kun olet nähnyt avainsanan tyhjäksi juuri mod niin siirryt takaisin noin.
Aivan. Se on täydellinen selitys.
Mikä Kevin sanoi, että haluamme indeksinä avainsanan.
Haluamme saada num_letters_seen merkki, jos haluatte,
mutta jos num_letters_seen ylittää pituus avainsanan,
miten saamme takaisin sopiva alue on käytämme mod operaattori
tehokkaasti kääri ympärille.
Yksi esimerkki lyhyellä, avainsanojen on pekonia,
ja se on 5 kirjainta pitkä.
Mutta olemme nähneet 6 kirjainta meidän tekstimuodossa tässä vaiheessa
ja salattu 6.
Päädymme päästä num_letters_seen,
joka on 6, mod pituus avainsanan, 5,
ja niin saamme 1, ja niin me teemme on hyvitämme
käyttää ensimmäisen merkin sisällä avainsanojen tässä vaiheessa.
>> Selvä, kysyttävää Vigenère
ennen kuin siirrymme?
Te olo melko hyvä tästä?
Cool, suuri.
Haluan varmistaa, että te saavat mahdollisuuden nähdä koodin
että ajattelemme näyttää hyvältä ja on mahdollisuus oppia siitä.
Tämä tulee olemaan viimeinen Käytämme tiloja toistaiseksi,
ja aiomme siirtyminen nyt, ja aion mennä cs50.net/lectures
jotta voimme tehdä hieman tietovisa tarkastelun.
Paras tapa mielestäni alkaa tehdä tietovisa arvostelu
on tullut tähän Luennot sivulle, cs50.net/lectures,
ja alla jokainen viikon otsikot, joten jos katson täällä viikolla 0,
Näen, että meillä on lista aiheita, jotka kävimme viikolla 0.
>> Jos jokin näistä aiheista näyttävät tuntemattomia teitä
sinun ehdottomasti halua mennä takaisin ja pestä luentomuistiinpanot ja mahdollisesti
vaikka lukaista läpi luentojen, katsella niitä uudelleen, jos haluat
saada tuntea, mitä on tekeillä kunkin aiheista.
Sanon lisäksi tänä vuonna yksi viileä resursseja meillä
On nämä shortsit että olemme luoneet, ja jos tarkastellaan viikon 0,
meillä ei ole kaikkia aiheita, mutta meillä varsin harvat niistä,
joitakin hankalampi niistä, joten katsomassa näitä shortsit uudelleen
on hyvä tapa saada sinut vauhtiin.
Erityisesti aion laittaa pistoke 3 pohjalle, koska tein nuo.
Mutta jos olet kamppailee binary, bitit, hex, tuollaista kamaa,
binary on hyvä paikka aloittaa.
ASCII on toinen, joka on hyvä tarkastella myös.
Voit jopa katsella minua 1.5x nopeudella jos aion liian hidas sinulle.
Koska se katsaus, voit tehdä niin.
>> Vain aloittaa todella nopeasti, aiomme käydä läpi pari näitä tietovisa ongelmista
vain nopeasti suoltaa näiden kautta.
Esimerkiksi Katsotaanpa ongelma 16 että minulla asti tänne taululle.
Meillä tätä seuraavan laskelman binary,
ja haluamme osoittaa mitään työtä.
Okei, aion antaa tämän laukaus.
Teidän pitäisi seurata mukana paperi,
ja teemme tämän todella nopeasti.
Haluamme tehdä seuraava laskelma binary.
Minulla 00110010.
Ja aion lisätä siihen 00110010.
Sillä matematiikka neroja jälkeen pitkin kotona,
Tämä on käytännössä kertomalla 2.
Aloitetaan.
Aiomme noudattaa samaa Lisäksi algoritmi, jota teemme
kun lisäämme desimaalilukujen yhteen.
Oikeastaan ​​ainoa ero on se, että me silmukka takaisin noin
kun meillä on 1 + 1 eikä kerran saamme 10.
>> Jos lähdemme oikealta, todella nopeasti, mitä ensimmäisen numeron?
[Student] 0. >> [Nate H.] 0.
Suuri, toinen numero?
[Student] 1.
[Nate H.] Onko se 1? 1 + 1 on?
[Opiskelija] 10.
[Nate H.] Aivan, niin mikä on numero että kirjoitan oikealla alla 2 niistä yhteen?
[Opiskelija] 1, 0 tai 0 ja sitten kuljettaa 1.
[Nate H.] 0 ja kuljettaa 1, tarkalleen.
Seuraavaksi yksi ylös, Basil, sinun vuorosi.
Mikä on kolmas? >> [Basil] 1.
[Nate H.] 1, täydellinen. Kevin?
[Kevin] 0. >> [Nate H.] 0, Charlotte?
[Charlotte] 0. >> [Nate H.] Joo, ja mitä teen?
[Opiskelija] 1.
[Nate H.] Ja mitä teen? Ja sitten jatkan 1.
Täydellinen, Sahb? >> [Sahb] Nyt sinulla on 1.
[Nate H.] Ja teen jotain täällä?
[Sahb] Sitten seuraava sinulla on 1 koska siirretyt 1.
[Nate H.] Great, joten tässä voimme lopettaa sen.
Cool.
[Student] Onko 0 + 0 = 0?
0 + 0 = 0.
1 + 1, kuten sanoit, on 10, tai 1, 0, pikemminkin.
10 on harhaanjohtava, koska minulle 10 tarkoittaa numero 10,
ja se omituisuus, miten me eli sitä, kun olemme sen kirjoittamisesta.
Edustamme numero 2 1, 0, ja numero 10 on hieman erilainen.
>> Mikä on tavallaan mukavaa noin binary on, että ei todellakaan ole, että monet
tapauksissa sinun täytyy oppia.
Ei 0 + 0 = 0, 0 + 1 = 1,
1 + 1 on 0, ja sitten kuljettaa 1,
ja sitten näet täällä kolmannessa sarakkeessa oikealta
meillä oli tämä 1, 1, ja 1.
Ja 1 + 1 + 1 on 1,
ja kannatte vielä 1.
Kun teet binary lisäksi melko yksinkertainen.
Tekisin pari enemmän näitä järki tarkistaa itseänne
ennen kuin mennä, koska tämä on
luultavasti jotain, että me nähdä tietovisa.
Nyt tehdään tämä seuraava samoin.
Tehdään ongelma 17.
Aiomme muuntaa Seuraavat binääripaketit numeroa desimaalin.
Minulla 10100111001.
Muistakaa binary video, että tein
Kävelin läpi pari esimerkkiä, ja näytin miten
kaikki toimii kun teet sen desimaali.
Kun olet työskennellyt desimaalin edustus Taidamme
Tässä vaiheessa elämäämme niin sujuvaa se, että
se on melko helppo peitellä mekaniikka, miten se todella toimii.
>> Mutta tehdä nopea kertaus, jos minulla on numero 137
tämä todella tarkoittaa ja uudestaan, tämä on desimaali edustus-
numero 137 desimaalimuodossa tarkoittaa, että minulla on 1 x 100 + 3 x 10 + 7 x 1.
Tämä kaikki on pysyä näytöllä.
Ja sitten jos tarkastellaan näitä numeroita täällä,
100, 10 ja 1, näette että he todella kaikki valtuudet 10.
Olen 10 ², 10 ¹, ja 10 nollaan.
Meillä on samanlainen jutuissa binääri,
paitsi että meidän pohja, kuten me sitä kutsumme, on 2 sijasta 10.
Nämä 10s että kirjoitin tänne alareunassa,
Tämän 10 m², 10 ¹, 10 nolla, 10 on meidän tukikohta,
ja eksponentti, 0, 1 tai 2,
on epäsuorasti aseman numeron määrä, että me kirjoittaa.
1, jos katsomme sitä, tämä 1 on 2. asennossa.
3 on ensimmäinen asento, ja 7 on 0. asennossa.
Näin saamme eri eksponentit alla meidän perustaa.
>> Sen jälkeen kaikki tämän we'll-oikeastaan, tiedätkö mitä?
Teemme-mistä minun kumoa painike mennä?
Siellä se menee.
Rakastan tätä kumoa juttu.
Tämän Mielestäni minulle ainakin
Helpoin tapa aloittaa muuntamalla binääriluvun
tai heksadesimaaliluvun jossa pohja on 16
eikä 10 tai 2 on mennä eteenpäin ja kirjoittaa
perusteet ja eksponentit varten kaikki numerot minun binääriluvun yläreunassa.
Jos alamme vasemmalta oikealle jälleen
joka on eräänlainen counterintuitive,
Muutan takaisin mustan tänne, meillä on 2 0. asentoon,
ja sitten meillä on 2 ¹, 2 ²,
ja sitten 2 3, 2 ja 4, 2 ja 5, 6,
7, 8, 9, ja 10.
Nämä luvut Olen kirjoittanut ulos kaikki eksponentit.
Minä vain kirjoitti emäkset täällä ensimmäisen 3 vain tilaa.
>> Tässä vaiheessa aion mennä eteenpäin ja olen todella menossa poistaa
kamaa, että teimme desimaali, jos se on okei.
Olette kaikki sai tuon.
Ne teistä katsomassa verkossa olen varma voi kelata minulle jos haluat.
Siirtyminen takaisin kynän.
Nyt, mitä voimme tehdä, jos te ole täysin vauhtiin oman toimivalta 2,
joka on täysin viileä.
Se tapahtuu. Ymmärrän.
Minulla oli kerran työhaastattelussa, jossa minulle kerrottiin minun pitäisi tietää kaikki valtuudet 2
läpi 2 30..
Se ei ollut työtä sain.
Joka tapauksessa, te voi mennä eteenpäin ja tehdä matematiikka täällä,
mutta binary se ei oikeastaan ​​mitään järkeä,
eikä se myöskään järkeä kanssa desimaali tai heksadesimaali joko
tehdä matematiikka missä olet nollia.
Näet minulla on 0 tänne, 0 tässä 0 tänne, 0 tänne, 0 tässä 0 täällä.
Miksi ehkä se ole järkevää tehdä todellinen matematiikka
laskea sopiva teho 2 tämän kannan?
Aivan kuten Charlotte sanoi, se on 0.
Voisi yhtä hyvin säästää aikaa, jos lasketaan toimivalta 2 ei ole sinun vahva puku.
Tässä tapauksessa meidän tarvitsee vain laskea sen 2, 0, joka on-?
[Student] 1.
[Nate H.] 1, 2, 3, joka on-?
[Student] 8. >> [Nate H.] 8.
2 4?
[Student] 2. Olen pahoillani, 1.
[Nate H.] 2 4 16, tarkalleen.
2 5, Kevin? >> 32.
[Nate H.] 32, 2 8?
[Student] 32 x 8, 256.
[Nate H.] Perfect.
Ja 2 10?
[Student] 1024.
[Nate H.] Joo, 1024.
>> Kun meillä näitä numeroita voi tiivistää ne kaikki ylös.
Ja tämä on, jos se on todella tärkeää tehdä pari asiaa.
Yksi on mennä hitaasti ja tarkista työsi.
Voit kertoa, että siellä on 1 lopussa tämän määrän,
joten minun pitäisi ehdottomasti saada pariton minun tulos,
koska kaikki muut niitä aiotaan vielä numerot
koska se on binäärinen numero.
Toinen asia tehdä, on, jos saat tämän pisteen testi
ja olet kirjoittanut sen pois näin pitkälle
ja olet loppumassa aika
tarkastellaan pisteitä, että tämä ongelma kannattaa.
Tämä ongelma, kuten voitte nähdä, jos heitän takaisin minun laptop todella nopeasti,
Tämä ongelma on 2 pistettä, joten tämä ei ole sellainen lisäys
sinun pitäisi mennä läpi, jos olet todella kiire.
Mutta me siirtyä takaisin iPad ja käymme läpi todella nopeasti.
>> Tykkään tehdä pieniä määriä ensimmäinen
koska mielestäni helpompaa.
Pidän 32 ja 8, koska he menevät yhdessä melko helposti, ja saamme 50.
16 ja 1 saa 17.
Siellä saamme 57,
ja sitten voimme tehdä loput tästä, jotta voimme tehdä 57, 156.
Tule.
Mies, hyvin, katsotaanpa.
Meillä oli 57, 256 ja 1024.
Tässä vaiheessa olisin mieluummin vain mennä läpi.
Minulla ei ole hajuakaan. Olen selvästikin täytyy lukea tästä.
7, 6, ja 4, saat 17.
1, 5, 5, 2, 13.
Sitten saamme 3, ja sitten saamme 1.
1337.
Pääsiäismuna, kukaan?
Joku tunnistaa tämän numeron?
Chris tunnistaa numeron. Mitä se tarkoittaa, Chris?
[Chris] Leet.
Leet, joten jos tarkastellaan tätä, se näyttää Leet.
Hacker kamaa. Varo tällaista kamaa puolivälissä tai tietokilpailu, melko.
Jos huomaat, että tuollaista ja mietit "Huh"
että saattaisi merkitä jotain.
En tiedä. David tykkää laitat sen sisään
Se on hyvä tapa järki tarkistaa.
Kuten Okei, ymmärrän, mitä on tekeillä.
>> Tuo Viikko 0/Week 1 kamaa.
Jos me palata meidän kannettavan nyt,
loitontaa, ja pari muuta asiaa.
On ASCII, jonka olemme tehneet paljon ongelmaa sarjaa.
Tämä pääomanliikkeinä A. Mikä on se todella?
Tietäen se desimaalin kokonaisluku.
65 on mitä se on kartoitettu vuonna ASCII taulukon,
ja se siis miten tietokone kirjoittaa sitä,
ja näin olemme päässeet pälkähästä todella kirjallisesti
merkki pääoma ja merkin pieniksi
Joissakin näistä ratkaisuista ja ongelma asetetaan, että olet tekemässä.
Pari muuta asiaa.
Meillä lausuntoja, boolean ilmaisuja, olosuhteet, silmukoita, muuttujia ja kierteet.
>> Ne kaikki näyttävät järkeviltä suurimmaksi osaksi?
Osa tästä terminologia on hieman funky ajoittain.
Haluan ajatella lausuma pääosin jotain joka päättyy puolipisteellä.
Lausunnot kuten x = 7, jossa muuttuja,
oletettavasti kutsutaan x = 7.
Oletettavasti x on tyyppiä, joka voi tallentaa numero 7,
joten se on int tai mahdollisesti float tai lyhyt tai char,
jotain.
Boolen lauseke käyttää näitä kaksinkertainen vastaa
ja bang vastaa tai ei vastaa, vähemmän kuin, suurempi kuin,
pienempi tai yhtä suuri, kaikki tuollaista.
Ehdot sitten ovat, jos muu lausuntoja.
Muistelin, että et voi olla muuta ilman vastaavaa jos.
Samoin voit olla if ilman vastaavaa jos.
Silmukat, muistuttaa 3 erilaista kaarta olemme mäiske sinuun
Viimeisen parin osien ja ongelma sarjaa.
Käyttämällä tehdä kun kun olet saada käyttäjä syöttää,
käyttäen samalla silmukoita kunnes tietty ehto on tosi,
ja sitten käyttää niitä silmukoita, jos haluat
tietää, mikä iterointia silmukan olet tällä hetkellä on se, miten ajattelen sitä.
Tai jos teet jokaiselle merkin merkkijono haluan tehdä jotain,
jokaisessa elementissä array haluan tehdä jotain, että elementti.
>> Langat ja tapahtumia.
Näitä emme ole katettu niin yksiselitteisesti C,
mutta muista että tämä tyhjästä.
Tämä on käsite, jolla eri skriptejä.
Tämä on myös tämä käsite lähettää tapahtuman.
Jotkut ihmiset eivät käytä lähetykset hankkeiden aluksi,
joka on täysin jäähtynyt,
mutta nämä ovat 2 eri tapoja käsitellä tätä suuremmasta kysymyksestä kutsutaan samanaikaisuuden,
mikä on miten saat ohjelmia suorittaa
tai näennäisesti suorittaa samanaikaisesti?
Erilaiset tehtävät käynnissä, kun muut tehtävät ovat myös käynnissä.
Näin käyttöjärjestelmä tuntuu toimivan.
Tämän vuoksi, vaikka esimerkiksi
Minulla selaimen käynnissä, voin myös käynnistää Spotify ja soittaa kappaleen.
Se on enemmän käsitteellinen asia ymmärtää.
Haluaisin vilkaista kierteet lyhyellä
Jos haluat tietää enemmän siitä.
>> Katsotaanpa, uskon että olisi voinut
Ongelmana tässä on yksi näistä.
Jälleen, mielestäni kierteet ja tapahtumat eivät ole jotain, että pystymme kattamaan C
vain koska se on huomattavasti vaikeampaa kuin Scratch.
Sinun ei pitäisi pelätä sitä siellä, mutta varmasti ymmärtävät käsitteet,
ymmärrä, mitä on tekeillä.
Ennen kuin jatkamme, kysyttävää Viikko 0 materiaalia?
Kaikki tuntuu aika hyvältä?
Ymmärtäminen muuttujat ja mikä muuttuja on?
>> Liikettä. Viikko 1.
Pari asiaa täällä, että ei erityisesti kuulu
vuonna Quiz tarkastelun välttämättä ja ovat käsitteellisiä asioita ajatella.
Ensimmäinen on tämä käsite mitä lähdekoodia, kääntäjät ja kohdekoodilla ovat.
Anybody? Basil.
Onko kohdekoodi-Siis lähdekoodi on mitä laitat kalahtaa,
ja kohdekoodit mitä kalahtaa tuo niin, että tietokone voi lukea ohjelman.
Aivan.
Lähdekoodi on C-koodia, että olet todella kirjoittaa ylös.
Kohdekoodit mitä saat ulos kalahtaa.
Se on 0 ja 1s että binaarimuodossa.
Mitä sitten tapahtuu, on kun on nippu objektin tiedostoja,
sanovat olet kootaan hankkeen tai ohjelman, joka käyttää useita lähdekooditiedostoihin,
jotka perinteisesti annetaan. C tiedostotunniste.
Siksi olemme caesar.c, vigenère.c.
Jos kirjoitat Java-ohjelmia annat heille laajennus. Java.
Python ohjelmissa on laajennus. Py usein.
>> Kun sinulla on useita. C tiedostoja, käännät niitä.
Clang sylkee kaiken tämän binary roskaa.
Sitten koska haluat vain 1-ohjelman
sinulla linkkeri linkin kaikki nämä objektin tiedostoja yhdessä
jaetaan 1 suoritettavaa tiedostoa.
Tämä on myös mitä tapahtuu, kun käytät CS50 kirjastoa, esimerkiksi.
CS50 kirjasto on sekä että. H header tiedosto
että olet lukenut, että # includecs50.h.
Ja sitten se on myös erityinen binary kirjaston tiedosto
, joka on laadittu, joka on 0 ja 1s,
ja että-l lippu, joten jos menemme takaisin meidän tilat ja odotamme todella nopeasti
mitä täällä tapahtuu, kun katsomme meidän clang komento,
Mitä meillä on tämä meidän lähdekooditiedostoa täällä.
Nämä ovat joukko kääntäjän lippuja.
Ja sitten aivan lopussa, nämä-l liput linkki
todellinen binääritiedostojen nämä 2 kirjastojen, CS50 kirjasto ja matematiikka kirjasto.
>> Ymmärtäminen kunkin tiedostojen tarkoitus
vuonna tietojenkeruuprosessiin on jotain sinun kannattaa pystyä
antaa ainakin korkean tason katsaus.
Lähdekoodi tulee sisään Objektin koodi tulee ulos.
Kohdekoodi tiedostot linkitetään yhteen, ja saat kauniin, suoritettavan tiedoston.
Cool.
Tämä on myös silloin voit saada virheet useita pisteitä
vuonna laadintaprosessissa.
Tässä on, jos esimerkiksi otat tämän yhdistää lippu,
CS50 lippua, ja jätät sen Spaces tai kun käytät koodia,
tämä on silloin saat virhe yhdistää vaiheessa,
ja linkkeri sanovat: "Hei, sinä kutsutaan funktion GetString
se on CS50 kirjastossa. "
"Sanoit se oli CS50 kirjastossa, ja en löydä koodia."
Siellä sinun täytyy linkittää se, ja se on erilliset
alkaen kääntäjä virheen, koska kääntäjä etsii syntaksin ja tuollaista kamaa.
On hyvä tietää, mitä tapahtuu, kun.
>> Muita asioita tietää.
Sanoisin ehdottomasti haluat vilkaista lyhyttä tyypittely tehdään Jordan
ymmärtää, mitä ints ovat konepellin alle,
Mitä merkkiä ovat konepellin alla.
Kun puhumme ASCII ja me todella katsoa ASCII taulukon,
mitä se tekee antaa meille konepellin alla näyttää
miten tietokone todellisuudessa edustaa pääomaa ja numero 7
ja pilkku ja kysymysmerkki.
Tietokone on myös erityisiä tapoja edustaa
numero 7 kokonaislukuna.
Se on erityinen tapa edustaa numero 7: n liukuluku,
ja ne ovat hyvin erilaisia.
Tyypittely on miten kertoa tietokone "Hei, haluan sinun muuntaa
yhdestä edustus toiseen edustus. "
Miksi emme katsomaan sitä.
>> Haluaisin myös katsomaan lyhyttä kirjastojen ja lyhyt kerääjiä.
Ne puhuvat prosessi laatimista,
Mikä kirjasto on ja mennä yli joitakin näistä kysymyksistä että saatat kysytään.
Kysymyksiä Viikko 1 materiaalista?
Onko viesteihin tässä että tuntua pelottava haluat kattaa?
Yritän puhaltaa läpi useimmat näistä aiemmin aiheita, jotta voimme saada
osoittimet ja tehdä vähän rekursion.
Ajatuksia?
Mitään kattaa?
Aika suklaata ehkä?
Te työskentelevät läpi.
Aion pitää juoden minun kahvia.
Viikko 2.
Hyvä puhelu, hyvä soittaa.
Viikolla 2 puhuimme hieman lisää toimintoja.
>> Parin ensimmäisen ongelman sarjaa emme oikeastaan ​​kirjoittaa mitään tehtäviä kaikilla
muu kuin mikä funktio?
[Student] Main. >> Main, tarkalleen.
Ja niin olemme nähneet erilaisia ​​pukuja, jotka pääasiassa jalassaan.
On yksi jossa se ei ota argumentteja,
ja me vain sanoa mitätön välillä suluissa,
ja sitten on toinen, jos emme halua ottaa komentoriviargumentteja,
ja kuten näimme, että siellä olet int argc ja string argv array
tai nyt että olemme tosiasiallisesti altistuneet merkkijono char *, että se on
aiomme aloittaa kirjallisesti sitä char * argv ja sitten suluissa.
Ongelma Set 3, te näki joukko toimintoja,
ja sinä toteutettu joukko toimintoja, piirtää, etsiä, sekoita.
Prototyypit olivat kaikki kirjoitettu siellä sinua varten.
>> Halusin puhua täällä toiminnoista todella nopeasti
on, että on 3 osaa heille aina kun kirjoitat funktion.
Sinun on määritettävä palautuva toiminto.
Sinun on määritettävä nimi toiminto ja sitten sinun täytyy määrittää
parametrilistaus tai parametrilista.
Esimerkiksi, jos olisin kirjoittaa toiminto tiivistää joukko kokonaislukujen
ja palaa sitten minulle summan mikä olisi minun palautuva
jos halusin Yhteenvetona kokonaislukuja ja palata sitten summa?
Sitten toiminnon nimi.
Jos menen eteenpäin ja kirjoittaa vihreällä, tämä osa on palautuva.
Tämä osa on nimi.
Ja sitten suluissa
on, jos annan argumentteja,
usein lyhennetty args, joskus kutsutaan params parametrien.
Ja jos sinulla on yksi, juuri määritä yksi.
Jos sinulla on useita erotat jokainen pilkulla.
Ja jokaista argumenttia annat sen 2 asioita, jotka ovat, Kevin?
[Kevin] Sinun täytyy antaa tyyppi ja sitten nimi.
Ja sitten nimi, ja nimi on nimi, jonka aiot käyttää
viitata tähän väitteeseen sisällä summa toiminto,
sisällä toimintoa, että olet kirjoittamassa.
>> Sinun ei tarvitse-esimerkiksi, jos aion yhteenvetona,
sanoa, joukko kokonaislukuja-Me do int array,
ja minä annan itselleni aaltosulkeita siellä-
sitten kun kuljen array SUMMA
Kuljen sen ensimmäisessä asennossa parametrilistaus.
Mutta array että olen kulkea ei tarvitse olla nimeä arr.
Arr tulee olemaan miten viitata tähän väitteeseen kehossa toiminnon.
Toinen asia, joka meidän on otettava huomioon,
ja tämä on hieman erilainen toiminnoista, mutta minusta se on tärkeä asia,
on, että C kun kirjoitan toimivat näin
Miten tiedän kuinka monta elementit ovat tässä array?
Tämä on jokseenkin temppu kysymys.
Puhuimme tästä hieman viime viikon jaksossa.
Mistä tiedän lukumäärän Sisällä array C?
Onko niin?
>> On käynyt ilmi, että ei ole mitään keinoa tietää.
Sinun on läpäistävä se erikseen.
On temppu, että voit tehdä
jos olet sama toiminto, jossa joukko on julistettu,
ja olet työskennellyt pino array.
Mutta se toimii vain jos olet samaa toimintoa.
Kun ohitat array toisen toiminnon tai jos olet ilmoittanut array
ja laitat että array kasaan, olet käyttänyt malloc
ja sellaista tavaraa, silloin kaikki vedot ovat pois päältä.
Sitten sinun todella täytyy kulkea ympäri
erityinen argumentti tai toinen parametri
kertoo kuinka suuri joukko on.
Tässä tapauksessa en haluaisi käyttää pilkkua-Olen pahoillani, se menee pois ruudulta täällä-
ja olin siirtää toiseen argumentti
ja kutsua sitä int len ​​varten pituuden.
>> Yksi asia, joka voisi keksiä tietokilpailu
pyytää sinua kirjoittamaan tai toteuttaa tietty toiminto nimeltään jotain.
Jos emme anna sinulle prototyyppi, joten tämä koko juttu täällä,
Tämä koko sotku kutsutaan funktion ilmoituksen tai funktion prototyyppi,
Tämä on yksi ensimmäisistä asioista, jotka sinun kannattaa naulata jos sitä ei ole annettu
sinulle heti päälle tietovisa.
Muut Temppu olen oppinut, että
sanoa teemme teille prototyyppi toiminnon ja sanomme, "Hei, sinulla kirjoittaa sitä."
Sisällä aaltosulkeita että sinulla on tietokilpailu
Jos huomaat, että on palautuva ja huomaat että palautuva
on jotain muuta kuin mitätön, mikä tarkoittaa sitä, että funktio ei palauta mitään,
Sitten yksi asia et varmasti halua tehdä, on kirjoittaa
jonkinlainen tuotto lausuman aivan lopussa funktion.
Return, ja tässä tapauksessa, laitamme tyhjä, koska haluamme täyttää tyhjä.
Mutta tämä saa sinut ajattelemaan oikealla tavalla, miten aion lähestyä tätä ongelmaa?
Ja se muistuttaa sinua olet menossa on palattava arvo
soittajalle funktion.
>> Joo. >> [Student] Ei tyyliä sovelletaan, kun olemme kirjallisesti koodi tietovisa?
Kuten sisennys ja että millaista tavaraa? >> [Student] Joo.
Ei, ei niin paljon.
Mielestäni paljon-tämä on jotain me selkeytettävä tietovisa päivänä,
mutta tyypillisesti murehtia # sisältyvät ja sellaista tavaraa, se on tavallaan ulkona.
[Opiskelija] Haluatko kommentoida käsin koodia?
Haluatko kommentoida käsin koodia?
Kommentointi on aina hyvä, jos olet huolissasi osittaisen luotto
tai haluat viestiä tahtosi luokkalainen.
Mutta minä taas selventää koskeva tietovisa itse ja tietokilpailu päivänä,
mutta en usko, että sinun tarvitse kirjoittaa kommentteja, no.
Tyypillisesti ole, mutta se on ehdottomasti sellainen asia, jossa
voit kommunikoida sinun tahtosi, kuten "Hei, tämä on minne olen menossa sen kanssa."
Ja joskus se voi auttaa osittaisen luotto.
Cool.
>> Basil.
[Basil] Mitä eroa julistaa vaikkapa int lang
vuonna väitteitä tai parametrit vs. julistetaan muuttujan funktio?
Vau, kahvi meni alas henkitorveen.
[Basil] Kuten mitä asioita haluamme laittaa perusteluja.
Joo, se on hyvä kysymys.
Miten valita, mitä asioita haluat laittaa väitteitä
vs. mitä asioita sinun pitäisi tehdä sisällä toimii?
Tässä tapauksessa olemme mukana nämä molemmat argumentteina
koska he jotain, kuka aikoo käyttää summan toimintoa
on täsmennettävä niitä asioita.
>> Summa toiminto, kuten puhuimme, ei voi mitenkään tietää
kuinka suuri joukko on se saa sen soittajan tai kuka käyttää SUMMA.
Siinä ei ole mitään keinoa tietää, kuinka iso se joukko on.
Syy ohitamme tämän pituuden täällä kuin väitteen
johtuu siitä, että on jotain, että olemme pohjimmiltaan kertoo soittajan toiminto,
kuka aikoo käyttää summan toimintoa, "Hei, ei vain sinulla on antaa meille array
ja ints, sinun on myös kertoa meille kuinka iso joukko, että olet antanut meille. "
[Basil] Ne ovat kummatkin komentoriviargumentteja?
Ei, nämä ovat todellisia perusteluja, että voisitte siirtyä toiminnon.
>> Anna minun tehdä uusi sivu täällä.
[Basil] Kuten nimi kulkisi-
[Nate H.] Jos minulla on int main (void)
ja aion laittaa minun return 0 tänne alareunassa,
ja sanoa haluan soittaa summa toimintoa.
Haluan sanoa int x = sum ();
Voit käyttää SUMMA-funktio minun täytyy kulkea molempien array että haluan tiivistää
ja pituus array, joten tämä on silloin
olettaen Minulla oli joukko Ints,
say I oli int numbaz [] = 1, 2, 3,
sellaista käyttöä, joka hakata jopa syntaksi oikeassa,
mitä sitten tekisin on summa haluaisin kulkea
sekä numbaz ja numero 3
kertoa summa toiminto "Okei, tässä array haluan sinun summa."
"Tässä on sen koosta."
Onko siinä järkeä? Tarkoittaako tämä kysymykseesi?
>> Monella tapaa se rinnakkainen mitä olemme tekemässä tärkeimpien
kun meillä komentoriviargumentteja.
Ohjelma kuten Caesar cipher, esimerkiksi, että tarvitaan
komentoriviargumentteja ei voisi tehdä mitään.
Se ei tiedä, miten salata, jos et kerro sitä mitä näppäintä käyttää
tai jos et kerro sitä mitä merkkijono halusit salata.
Kehotukset syötteen, tämä on meillä 2 eri mekanismien
ottaa panos käyttäjältä, ottaa tietoa käyttäjältä.
Saat Harjoitus 1 näimme tämän GetInt, GetString, GetFloat tavalla
kehotus syötteen, ja sitä kutsutaan käyttäen vakiosyötteestä stream.
Se on hieman erilainen.
Se on jotain, voit tehdä kerralla eikä
Kun vedota ohjelmaa, kun käynnistät ohjelman käynnissä.
Komentoriviargumentteja kaikki määritellään kun käynnistät ohjelman käynnissä.
Olemme sekoittamalla kaksi näistä.
Kun käytämme argumentteja funktion, se on paljon kuin komentorivin argumentteja to main.
Se kun vedota toiminnon sinun täytyy kertoa sille
mitä se tarvitsee voidakseen suorittaa tehtävänsä.
Toinen hyvä asia tarkastella ja annan sinun katsoa sitä omalla vapaa-ajallaan,
ja se kattoi Quiz-oli tämän käsitteen soveltamisalan
ja paikalliset muuttujat vs. globaaleja muuttujia.
Onko kiinnittää huomiota tähän.
>> Nyt olemme pääsemässä tähän muita juttuja,
viikolla 3 aloimme puhua etsiminen ja lajittelu.
Etsiminen ja lajittelu, ainakin CS50,
on hyvin johdatus joitakin enemmän teoreettista osaa tietojenkäsittelytiede.
Ongelma etsimistä, ongelma lajittelu
ovat suuria, kanoninen ongelmia.
Miten löytää tietty numero joukko miljardien kokonaislukujen?
Miten löytää tietyn nimen sisällä puhelinluettelosta
joka tallennetaan kannettavan tietokoneen?
Ja niin me esitellä tämä käsite asymptoottinen ajoajat
todella määrällisesti kuinka kauan, kuinka kovaa nämä ongelma on,
kuinka kauan ne kestää ratkaisemiseksi.
Vuonna uskon, 2011: n tietokilpailu siellä ongelma mielestäni ansaitsee
kattavat hyvin nopeasti, mikä on tämä, ongelma 12.
O no, se on Omega.
>> Täällä me puhumme nopein mahdollinen ajoaika
Tietyn algoritmin ja sitten hitain mahdollinen ajoaika.
Tämä Omega ja O ovat oikeastaan ​​vain pikakuvakkeita.
He Merkintöjen pikavalinnat sanomalla
kuinka nopeasti mahdollisimman tapaus meidän algoritmi aikavälillä,
ja miten hidasta Pahimmassa tapauksessa tulee meidän algoritmi ajaa?
Tehdään pari näistä, ja nämä olivat myös katettu
Lyhyellä on asymptoottinen notaatio, jota suosittelen lämpimästi.
Jackson teki todella hyvää työtä.
Binary search, puhumme binäärihakupuu olevan algoritmi,
ja me yleensä puhua kannalta sen ison O.
Mikä on iso O?
Mikä on hitain mahdollinen ajoaika binäärihakupuu?
[Student] N ²?
Sulje kai samanlainen.
Se on paljon nopeampi kuin.
[Student] Binary? >> Joo, binäärihakupuu.
[Student] On log n.
Log n, joten mitä log n tarkoittaa?
Se puolittaa se jokaisen iteraation.
Aivan, joten hitain mahdollinen tapaus,
sano jos sinulla on lajiteltu array
miljoona kokonaislukuja ja numero etsit
on joko ensimmäinen alkio tai viimeinen alkio.
Muista, että binäärihakupuu algoritmi toimii katsomalla keskielementti,
nähdä, jos se on ottelu, joka etsit.
Jos se on, niin suuri, olet löytänyt sen.
>> Parhaassa mahdollisessa tapauksessa, Kuinka nopeasti binäärihakupuu ajaa?
[Opiskelijat] 1.
1, se on vakio aika, iso O 1. Joo.
[Opiskelija] Minulla on kysymys. Kun sanot kirjaudut n, sinä tarkoitat osalta pohja 2, eikö?
Kyllä, niin se on toinen asia.
Sanomme log n, ja luulen, kun olin lukiossa
Olen aina olettanut, että log oli pohja 10.
Joo, niin kyllä, kirjaudu pohja 2 on tyypillisesti mitä käytämme.
Jälleen menee takaisin binäärihakupuu, jos etsit joko
elementti aivan lopussa tai elementin alusta
koska aloitat keskeltä ja sitten hävitä
kumpi puoli ei täytä kriteerejä, jotka etsit,
ja menet seuraavan puolen ja seuraavan puolen ja seuraavan puoli.
Jos Etsin suurin osa miljoonan kokonaisluku array
Aion puolittaa se korkeintaan log 1 miljoona kertaa
ennen kuin sain vihdoin testata ja nähdä, että osa etsin
on suurin tai suurin indeksi array,
ja joka vie log n, log on 1 miljoonaa kertaa.
>> Bubble sort.
Oletteko te muistaa kupla lajitella algoritmi?
Kevin, voitko antaa minulle nopea kertaus mitä tapahtui kupla lajitella algoritmi?
[Kevin] Periaatteessa se menee läpi kaiken luettelossa.
Siinä tarkastellaan kahta ensimmäistä.
Jos ensimmäinen on suurempi kuin toinen se swap niitä.
Sitten se vertaa toisen ja kolmannen, sama asia, swapit,
Kolmas ja neljäs, kaikki alas.
Isompi määrä seuraa loppuun asti.
Ja kun kuitenkin monia silmukoita olet valmis.
Aivan, joten mitä Kevin sanoi, että me katsella isompi numerot
kupla loppuun asti jono.
Esimerkiksi, älä viitsi kävely meidät läpi tämän esimerkin, jos tämä on meidän array?
[Kevin] Sinun kestää 2 ja 3.
3 on suurempi kuin 2, joten vaihtaa niitä.
[Nate H.] Oikea, joten me vaihtaa nämä, ja niin saamme 2, 3, 6, 4, ja 9.
[Kevin] Sitten voit vertailla 3 ja 6.
3 on pienempi kuin 6, joten jätä ne,
ja 6 ja 4, haluat vaihtaa niitä, koska 4 on pienempi kuin 6.
[Nate H.] Oikea, niin saan 2, 3, 4, 6, 9.
[Kevin] ja 9 on suurempi kuin 6, niin jätät sen.
Ja haluat palata läpi uudelleen.
>> [Nate H.] Olenko tehnyt tässä vaiheessa? >> [Kevin] No
Ja miksi en ole tehnyt tässä vaiheessa?
Koska se näyttää minun array lajitellaan. Etsin sitä.
[Kevin] Mene sen läpi uudelleen ja varmista, että ei ole enää swapit
ennen kuin voi täysin pysäyttää.
Aivan, joten sinun pitää käydä läpi ja varmista, ettei swapit
että voit tehdä tässä vaiheessa.
Se oli oikeastaan ​​vain onnekas, kuten sanoit, että päädyimme
vain ottaa tehdä 1 läpi ja me lajitellaan.
Mutta tässä yleisessä tapauksessa me todella täytyy tehdä tämä uudestaan ​​ja uudestaan.
Ja itse asiassa, tämä oli esimerkki, että parhaimmassa tapauksessa
kuten näimme ongelma.
Näimme, että paras mahdollinen tapaus oli N.
Kävimme läpi taulukon 1 kerran.
Mikä on pahin mahdollinen tapaus tämä algoritmi?
[Kevin] N ².
Ja mitä se näyttää? Mitä array näyttävät että veisi n ² aikaa?
[Kevin] [kuulumattomissa] lajiteltu.
Aivan, joten jos olisin array 9, 7, 6, 5, 2,
ensin 9 olisi kupla koko matkan ylös.
Sen jälkeen 1 iteraatio olisimme 7, 6, 5, 2, 9.
Sitten 7 olisi kupla ylös, 6, 5, 2, 7, 9, ja niin edelleen ja niin edelleen.
>> Meidän täytyisi käydä läpi koko taulukon n kertaa,
ja voit itse saada hieman tarkempi kuin tämä
koska kerran olemme siirretty 9 aina ylös sen viimeinen mahdollinen asema
tiedämme, että meidän ei tarvitse verrata sitä vastaan ​​elementti uudelleen.
Kun alamme kuplii 7 ylös
me tiedämme, että voimme pysäyttää kun 7 on juuri ennen 9
koska olemme jo verrattuna 9 siihen.
Jos teet tämän fiksu niin se ei totisesti minä arvaan, että paljon aikaa.
Et aio verrata kaikkia mahdollisia [kuulumattomissa] yhdistelmät
joka ikinen kerta mennä läpi jokaisen iteraation.
Mutta silti, kun puhumme tästä yläraja sanomme, että
etsit n ² vertailut kaikki läpi.
>> Mennään takaisin, ja koska olemme alkaneet saada hieman vähän aikaa
Sanoisin sinun pitäisi ehdottomasti käydä läpi loput tämän taulukon
Täytä kaikki ulos.
Ajattele esimerkkejä. Ajattele konkreettisia esimerkkejä.
Se on todella kätevä ja hyödyllinen tehtävä.
Piirrä sitä.
Tämä on sellainen taulukon kuten mennä läpi tietojenkäsittelytieteen
sinun pitäisi todella alkaa tuntea nämä ulkoa.
Nämä ovat erilaisia ​​kysymyksiä saat haastatteluissa.
Nämä ovat asioita, joita on hyvä tietää,
ja ajatella niitä reuna tapauksissa todella mietitään, miten ajatella
tietäen, että kupla lajitella pahin mahdollinen array
lajitella kanssa on yksi, joka on päinvastaisessa järjestyksessä.
>> Pointers. Puhutaanpa hieman siitä viitteitä.
Viime minuutin olemme täällä
Tiedän, että tämä on jotain yhdessä tiedoston I / O, joka on melko uusi.
Kun puhumme osoittimet syy haluamme puhua osoittimia
johtuu, yksi, kun pyrimme C
Olemme todella melko alhainen verrattuna useimpiin modernin ohjelmointikieliä.
Olemme todella pystyy manipuloimaan muuttujat muistiin,
selvittää missä he todella sijaitsevat meidän RAM.
Kun olet mennyt tekemään käyttöjärjestelmän luokat näet
että se on taas eräänlainen abstraktio.
Se ei ole oikeastaan ​​kyse.
Meillä näennäismuistin piileskelee kyseiset tiedot meiltä.
>> Mutta nyt voit olettaa, että kun sinulla on ohjelma,
Esimerkiksi, kun alkaa näyttää Caesar cipher ohjelma-
Minä vaihtaa takaisin minun iPad todella nopeasti,
että alusta ohjelma, jos sinulla on vaikkapa
4 gigatavua muistia kannettavaan tietokoneeseen,
saat kumoaa tämän kimpale, ja me kutsumme tätä muistia.
Ja se alkaa paikassa aiomme soittaa 0,
ja se päättyy paikassa että soitamme 4 gigatavua.
En todellakaan voi kirjoittaa. Ihminen, joka on hakkeroitu.
Kun ohjelma suorittaa
käyttöjärjestelmän kaivertaa RAM,
ja se määrittelee eri segmenteille eri puolilla ohjelman asua
Täällä tämä alue on eräänlainen ei-kenenkään-maalla.
Kun menet ylös hieman kauempana tästä
sinulla todella paikka, jossa
koodi ohjelman elämään.
Että todellinen binäärikoodin, että ohjelmatiedoston todella latautuu muistiin
Kun käynnistät ohjelman, ja se elää koodisegmentissä.
Ja kuin ohjelma suorittaa prosessori näyttää tällä koodisegmentti
selvittää, mitä on seuraavaksi ohje?
Mikä on seuraava koodirivi minun täytyy suorittaa?
>> Mukana on myös tietoja segmentti, ja tämä on paikka, jossa merkkijono vakioita
saa varastoida että olet käyttänyt.
Ja sitten ylempänä on tämä paikka nimeltä kasaan.
Me käyttää muistia sinne käyttämällä malloc,
ja sitten kohti hyvin alkuun ohjelman
siellä pino,
ja se jos me pelannut suurimman osan alussa.
Tämä ei ole mittakaavassa tai mitään.
Paljon tämä on hyvin kone riippuvainen,
käyttöjärjestelmän riippuvainen, mutta tämä on suhteellisen miten asiat chunked ylös.
Kun suoritat ohjelman ja te julistaa muuttuja nimeltään x-
Aion tehdä toiseen ruutuun alhaalla, ja tämä tulee olemaan RAM samoin.
Ja aion katsoa.
Me piirtää rosoiset viivat osoittamaan tämä on vain pieni osa muistia
ja kaikki eivät sitä vedämme huipulla.
>> Jos Julistan kokonaisluku muuttuja nimeltä x,
niin mitä minä itse saada on kartoitus
, joka on tallennettu symboli taulukossa oman ohjelman
joka yhdistää nimeä x tälle alueelle muistin, että olen laatinut
täällä välillä pystysuoralla palkilla.
Jos minulla on koodirivin minun ohjelma sanoo x = 7
prosessori tietää "Ai, okei, minä tiedän, että x asuu tässä paikassa muistiin."
"Aion mennä eteenpäin ja kirjoittaa 7 sinne."
Miten se tietää, mitä paikalla on muistissa?
No, kaikki on tehty käännöksen yhteydessä.
Kääntäjä huolehtii jakamisesta jossa kukin muuttujat eivät mene
ja luodaan erityinen kartoitus tai pikemminkin yhdistävät pisteitä
välillä symboli ja mihin se on menossa, muuttujan nimi
ja mihin se on menossa elää muistiin.
Mutta näyttää siltä, ​​että voimme todella käyttää sitä meidän ohjelmista.
Tämä saa tärkeää, kun alamme puhua joistakin tietorakenteita,
joka on käsite, joka aiomme esitellä myöhemmin.
>> Mutta nyt, mitä voit tietää, että voin luoda osoittimen tähän paikkaan, x.
Esimerkiksi voin luoda osoitin muuttuja.
Kun luomme osoitinmuuttuja käytämme tähti merkintää.
Tässä tapauksessa tämä sanoo aion luoda osoitin int.
Se on eräänlainen kuten muutkin.
Annamme se muuttuja kuin y,
ja sitten asettaa sen yhtä osoitetta, osoitteeseen.
Tässä tapauksessa voimme asettaa y osoittamaan x
ottamalla osoite x, jonka teemme tätä et-merkki,
ja sitten asetamme y osoittamaan se.
Mitä tämä pohjimmiltaan se on, jos katsomme meidän RAM
Tämä luo erillisen muuttuja.
Se tulee kutsua y,
ja kun tämä rivi koodia suorittaa
se todella tulee luoda hieman osoittimen jota tyypillisesti piirtää kuin nuoli,
ja se asettaa y osoittamaan x.
Kyllä.
[Student] Jos x on jo osoitin, sinä vain tehdä
int * y = x sen sijaan, et-merkki?
Kyllä.
Jos x on jo osoitin, voit asettaa 2 osoittimia keskenään yhtä,
jolloin y eivät osoittaneet x,
mutta se osoittaa mitä x osoittaa.
Emme valitettavasti liian myöhään.
>> Sanoisin tässä vaiheessa, voimme puhua tästä tilassa,
mutta sanoisin aloittaa työskentelyn kautta tätä ongelmaa, # 14.
Näet siellä jo hieman täytetty sinua täällä.
Voit nähdä, että kun me julistamme 2 osoittimia, int * x ja * y,
ja huomaa, että osoittaa * vieressä muuttuja oli jotain, joka tehtiin viime vuonna.
On käynyt ilmi, että tämä on samanlainen kuin mitä me teemme tänä vuonna.
Sillä ei ole väliä missä kirjoittaa * kun olet julistaa osoitin.
Mutta olemme kirjoittaneet * vieressä tyypin
koska se tekee hyvin selväksi, että olet julistamista osoitin muuttuja.
Voit nähdä, että julistamalla 2 viitteitä antaa meille 2 laatikkoa.
Täällä kun asetamme x yhtä malloc
mitä tämä sanoo asettaa syrjään muistia kasaan.
Tämä pieni laatikko täällä, tämä ympyrä, sijaitsee kasaan.
X osoittaa sen.
Huomaa, että y on vielä osoittaa mitään.
Saadaksesi muistia tallentaa numero 42 tulee x
me käyttäisimme mitä merkintätapaa?
[Opiskelija] * x = 42.
Aivan, * x = 42.
Tämä tarkoittaa seurata nuolta ja heittää 42 siellä.
Täällä missä asetamme y ja x olemme y osoittaa x.
Jälleen, tämä on aivan kuin mitä Kevin sanoi joissa asetimme y yhtä x.
Y ei osoita x.
Pikemminkin se osoittaa, mitä x on osoittaa samoin.
>> Ja sitten lopuksi tässä viimeisessä ruudussa on 2 mahdollista asioita, joita voisimme tehdä.
Yksi on voisimme sanoa * x = 13.
Toinen asia on, että voisimme sanoa-Alex, tiedätkö mitä voisimme tehdä täällä?
Voisi sanoa * x = 13 tai-
[Student] Voisi sanoa int riippumatta.
[Nate H.] Jos tämä kutsuttiin int muuttuja me voisimme tehdä sen.
Voisimme myös sanoa * y = 13, koska he molemmat osoittavat samaan paikkaan,
jotta voisimme käyttää joko muuttujaa sinne.
Joo. >> [Opiskelija] Miltä näyttää, jos me vain sanoa int x on 13?
Tämä olisi julistaa uusi muuttuja nimeltä x, joka ei toimi.
Meillä täytyisi törmäyksen koska julistettu x olla osoitin täällä.
[Student] Jos meillä oli vain toteamus itse mitä se näyttää kannalta ympyrän?
Jos meillä olisi x = 13 niin olisimme laatikko, ja sen sijaan nuoli
tulossa ulos laatikosta olimme tehdä sitä vain 13.
[Opiskelija] ruutuun. Okei.
>> Kiitos katsomassa, ja onnea Quiz 0.
[CS50.TV]