>> David J. MALAN: Tämä on CS50 ja tämä on alku viikolla neljä.
Ja poika, on Volkswagen vaivaa kaikki, koska ohjelmisto.
Olkaamme katsomaan.
[VIDEOTOISTOSTA]
-Cars, Älykkäin merkkiä Fast and Furious elokuvia.
Tällä viikolla saksalainen autovalmistaja Volkswagen löytyi itse
keskellä skandaali mahdollisesti rikollista mittasuhteet.
>> -Volkswagen On piristävä miljardeja sakkoja, mahdollinen syyte
sen johtajat, kuten Yhtiö pahoittelee
varten takila 11000000 autoja auttaa se voittaa päästöjä testejä.
>> -Certain Diesel mallit olivat suunniteltu ohjemistosovellukset
että käytetyt tiedot, mukaan lukien ohjausmekanismin asennoissa ja ajoneuvon
nopeus määrittää auto oli olevien päästöjen testausta.
Tämän seikka, moottori vähentäisi myrkyllisiä päästöjä.
Mutta auto oli väärennetty ohitus että kun se ajetaan.
Päästöt kasvoivat 10-40 kertaiseksi hyväksyttävä EPA tasolle.
>> [Lopeta toisto]
>> DAVID J. MALAN: Joten katsomaan tämä
ja nähdä, miten tämä voitaisiin toteuttaa
ja miten tämä voisi vaikuttaa niin paljon autoja kuin tämä.
Joten kädessäni täällä ovat lehdistö julkaistujen on antanut EPA--
Environmental Protection Agency joka
on USA: n virasto, joka kahvat ympäristönäkökohdat,
ja sitten varsinainen oikeudellinen huomautus, joka oli
Lähetä Volkswagen vain muutama päivä sitten.
>> Joten EPA kirjoittaa, ja esittää nyt julkisesti, hienostunut ohjelmisto
algoritmi tietyistä Volkswagen ajoneuvot havaitsee
kun auto on käynnissä virallinen päästöt testaus
ja muuttuu koko päästöt ohjaa vain testin aikana.
Tehokkuus näiden ajoneuvojen saastuminen
päästöt ohjauslaitteet on suuresti vähennetään kaikissa tavanomaisissa ajo
tilanteissa.
Tämä johtaa autojen, jotka täyttävät standardit laboratoriossa tai testaus
asemalla, mutta normaalin toiminnan aikana päästää typen oxides-- tai NOx--
jopa 40-kertainen.
Ohjelmisto tuottama Volkswagen on lainaus lainaus päättyy, estolaitteena,
määritelty Clean Air Act Yhdysvalloissa.
>> He menevät edelleen, että EPA ja toinen virasto
paljastui estolaite ohjelmistot jälkeen riippumaton analyysi
tutkijat West Virginia University.
NOx pilaantuminen lisää osaltaan typpidioksidin, alailmakehän otsonin,
ja pienhiukkasten.
Altistumista näille yhdisteistä onkin linkitetty
jossa on laaja valikoima vakavia terveysvaikutuksia,
mukaan lukien lisääntynyt astma iskut ja muut hengityselinten
sairauksia, jotka voivat olla niin vakavia lähettää ihmisiä sairaalaan.
Otsonille altistumisen ja hiukkasten on myös
liittynyt ennenaikaista kuolema johtuu hengitysteiden liittyvä
tai sydän liittyviä vaikutuksia.
Lapset, vanhukset, preexisting hengityselinten sairaus
ovat erityisen alttiina terveysvaikutukset näiden epäpuhtauksien.
>> Riittää sanoen, se on melko vakava.
Ja mennään edelleen lukea vain yksi ote
ja sitten me katsomaan taustalla vaikutukset
Tämän yhteydessä auton.
Erityisesti Volkswagen valmistetaan ja asennetaan
ohjelmisto ns elektroninen ohjaus
module-- tai ECM-- on nämä ajoneuvot, jotka aisti
kun ajoneuvo oli testataan noudattaminen EPA päästönormit.
Perustuu eri panokset lukien asento ohjauspyörä, ajoneuvojen
nopeus, kesto moottorin toimintaa, ja ilmanpaine,
nämä tulot tarkasti seurataan parametrit
liittovaltion testausmenettelyn käytetty päästöjen testaus EPA sertifiointi
tarkoituksiin.
>> Aikana EPA: n päästöjen testausta, ajoneuvot ECM ohjelmisto
juoksi ohjelmisto joka tuotti yhteensopiva päästöjen tuloksia.
Kaikkina muina aikoina, ajoneuvon ECM ohjelmisto
juoksi erillinen tie kalibrointi mikä vähensi
tehokkuutta yleinen päästöjenrajoitusjärjestelmän,
erityisesti selektiivinen katalyyttinen vähentäminen Lean NOx trap--
joka näemme hetken kuluttua.
Tämän seurauksena NOx-päästöt kasvoivat kertoimella 10-40 kertaa
yläpuolella EPA tasot riippuen drive cycle.
>> Joten mitä tämä todella tarkoittaa, ja lähdekoodin ohjelmisto käynnissä
on Volkswagenin ei ole vielä julkisesti,
on se, että käytännössä, tämä vastaava on jossain siellä sisällä
Volkswagenin koodin.
Jos testataan, ja jos auto havaitsee tietyt ympäristötekijät
kuten ohjauspyörä asento tai liike
tai sen puuttuminen auton tai useita muita tekijöitä
että tällä hetkellä arveltu olla osa tätä kaavaa,
ne yksinkertaisesti päälle täysi päästöjen valvontaa.
Toisin sanoen, ne alkavat säteilevät vähemmän epäpuhtauksia.
>> Else, joka toisessa tilanteessa kun se ei ole havainnut olevan
laboratoriossa, he eivät vain.
Ja niin voit yksinkertaistaa tämä useampaan betoni pseudokoodilla jotain
kuten tämä.
Jos pyörät pyörivät mutta ohjauspyörä ei ole, suggestiivinen
että auto on joissakin sellainen pyörivän sylinterin
mutta jonkinlainen varasto testataan,
sitten käyttäytyä EPA haluaisivat sinun.
Muuten ei.
Joten katsomaan lyhyen videon, joka
ottaa tarkasteluun mitä seurauksia ovat tämän todella mekaanisesti.
>> [VIDEOTOISTOSTA]
>> -Last Perjantaina EPA ilmoitti, että jotkut Volkswagen Audi tehty vuodesta 2009
ja tänä vuonna käyttivät ns estolaite
kiertää päästöjen lakeja suunniteltu pitämään ilman puhtaana.
Mutta mitä se tarkoittaa tarkalleen?
>> No, nykyaikaiset autot on kymmeniä tietokoneita niiden sisällä.
Ja jotkin näistä tietokoneista auttaa koordinoimaan toimintoja
moottorin optimaalisen suorituskykyä samalla on huolehdittava,
että ei ole liikaa roskaa tulossa ulos pakoputkesta.
He todella työskennelleet Näin useita vuosikymmeniä nyt.
Periaatteessa jokainen osa nykyaikaisen auton moottori
on anturi tai ohjain sitä, ja nämä tietokoneet
lukevat tietojen tuhansia kertaa sekunnissa säätöjen
kuten suhde polttoaineen ja ilman että menee sylintereihin.
>> Nämä huijaaminen Volkswagen ja Audi mallit ovat dieselit,
ja dieselit on vielä yksi todella tärkeä tietokone
ohjatut muuttujat, joka on määrä palamattoman polttoaineen menossa
osaksi pakoputki.
Nyt kuulostaa pahalta.
Ei kuulosta mitä haluaisi palamattoman polttoaineen menee pakokaasun.
Mutta kun kyseessä on diesel, sinulla on jotain
kutsutaan NOx-trap, joka on laite, joka imee ja ansoja typen oksidien
jotka ovat epäpuhtauksia, jotka muuten mennä ilmakehään.
Ja vaikutus, että NOx-trap- on parannettu palamattoman polttoaineen.
Joten estolaite on erityinen ohjelma sisällä näitä tietokoneita, jotka voivat tehdä sen
näyttää auto täyttää päästöjen standardit, vaikka se ei ole.
Volkswagen oli ongelma sen käsissä.
Sen dieselmoottorit olivat tiedossa saada suuri polttoainetalouden,
mutta NOx-trap vain toimii hyvin kun enemmän polttoainetta käytetään.
Niin auto olisi havaita, käyttämällä tätä estolaitteena,
kun se oli tulossa päästöt testi, se käyttää enemmän polttoainetta,
tehdä NOx-trap toimivat hyvin, päästöt olisi hienoa.
Mutta sitten saat tiellä, laite sammuu, poltat vähemmän polttoainetta
mutta olet laskemisesta peräti 40 kertaa enemmän epäpuhtauksia ilmakehään.
Mutta miten hitossa auton tietää, että se oli
testataan päästöjen noudattamista?
EPA sanoo, että se oli hienostunut joka tarkastetaan asiat
kuten ohjauspyörän asento, nopeus, kuinka kauan moottori oli,
ja jopa ilmanpaine.
Toisin sanoen, oli mitenkään tämä oli vahingossa
koska ohjelmisto oli suunniteltu erittäin huolellisesti havaitsemaan
virkamies päästötesti.
Se on joitakin melko vakavia petos ja se on
miksi Volkswagen on tällaisia ​​vakavia ongelmia.
Itse asiassa niiden toimitusjohtaja, Martin Winterkorn, juuri astui alas.
>> Joten mitä tapahtuu seuraavaksi?
No, jos olet yksi puoli miljoonaa diesel jettas, Beatles, golfs, Passatin,
tai Audi A3S suoritettu, hyvä uutinen on on
että auto on edelleen turvallista ajaa.
Sinun ei tarvitse laittaa sen pois kunnes Volkswagen antaa muistaa.
Mutta jossain vaiheessa he luultavasti menossa on
päivittää ohjelmisto autoosi.
Kun näin tapahtuu saatat saada vähemmän mailia tankki.
Asianajajat ovat jo valmistautuu up ryhmäkanteen oikeusjuttuja
joten omistajat voisivat saada korvauksen jossain vaiheessa tulevaisuudessa.
Mutta se ei aio tapahtua milloin tahansa pian.
>> [Lopeta toisto]
DAVID J. MALAN: Eli tämä todella herättää mielenkiintoinen isompi kuva kysymys
kuten luottaa.
Oikea?
Kaikilla meillä on iPhone tai Androids tai jotain meidän taskuihin todennäköisimmin
näinä päivinä, tai kannettavat tietokoneet meidän kierrosta, jotka ovat
käynnissä ohjelmisto tehty Apple ja Microsoft
ja rypäleterttuja muiden yritysten.
Mutta miten me tiedämme, että mitä näistä ohjelmista tekevät
on oikeastaan ​​mitä nämä yritykset sanovat he tekevät?
>> Esimerkiksi kuka on sanoa, että aina kun
soittaa iPhonella tai Android-puhelinta tai vastaavaa,
että puhelinnumero ei myöskään ole latautumisen jonkin yrityksen palvelimelle
koska joidenkin ohjelman olet kirjoitettu, onko se toiminta
itse järjestelmän kuten iOS tai Android, tai koska olet ladannut
jotkut kolmannen osapuolen sovellus että jotenkin kuuntelee
kaikki mitä kirjoitat tai kaiken, mitä olet todella sanovat.
Mistä tiedät, että kun te ovat käynnissä kalahtaa
tai Tee kokoat oma ohjelmisto CS50, miten
oletteko että CS50 oma henkilökunta, Poiketen CS50 kirjasto,
ei ole kirjautumisen joka string olet koskaan saanut
tai jokaisen sentin olet koskaan saanut?
No, voit varmasti etsiä klo lähdekoodi jotain
kuten CS50 kirjasto, sinua voisi katsoa lähdekoodia
Linux-käyttöjärjestelmä käynnissä CS50 IDE.
Mutta hämmästyttävä esitys sai takaisin vuonna 1984
jotka saavat Turing Award hyvin kuuluisa tietokone tiedemies tiedossa
as-- nimeltään Ken Thompson jotka sai Turing Award joka
on eräänlainen tietokoneen tieteen Nobelin, jos haluatte,
hänen työstään käyttöjärjestelmä nimeltään
Unix, joka on hyvin samankaltainen henki, mitä käytämme joka on Linux.
Ja kysymys hän kysyi hänen hyväksymistä puhe, lähinnä
koskevista puitteista vuodet keskustelu
noin luottamusta ja turvallisuutta, oli tämä.
Missä määrin yksi luottamus maininta siitä, että program-- pala
on software-- on vapaa troijalaiset?
Ehkä se on tärkeää luottaa ihmiset, jotka kirjoittivat ohjelmisto.
>> Ja itse asiassa olemme sidoksissa on puhua, että hän
antoi Hyväksyessään tämän palkinnon 80-luvulla on CS50: n verkkosivuilla
alle Luennot sivun tänään.
Koska mitä näet on, että hän todella antaa
melko yksinkertainen esimerkki siitä, miten jopa kääntäjä kuten kalahtaa tai mitä tahansa
kääntäjät toiset ovat käyttäneet aiemmin, mitä jos upotettu kääntäjä me
itse käyttävät on vähän, jos edellyttäen, että pohjimmiltaan sanoo,
jos huomaat, että tämä koodi on käytössä GetString toiminto tai GetInt
toiminto, mennä eteenpäin ja lisätä takaoven tai Troijan hevonen
siten, että kyseinen ohjelma nyt joitakin nollia
ja ne, jotka tekevät jotain haittaohjelmia.
Kirjautumalla kaikki näppäimistön, lataat että tiedot
Joidenkin palvelimelle, tai oikeastaan ​​mitään.
>> Ja mitä Ken Thompson jatkuu tehdä hänen puhua
on osoittaa, että vaikka voit käyttää lähde
koodi kääntäjä, joka Haitallisen voisi tehdä tätä,
sillä ei ole väliä, koska on tämä kana ja muna
todellisuus menneisyyden monet vuotta jolloin kerääjiä
käytetään koota itse.
Toisin sanoen, paluumatkalla kun joku oli kirjoittaneen ensimmäinen kääntäjä.
Ja tämän jälkeen, milloin he ovat päivitetty kääntäjä muuttamalla sen lähdekoodia,
lisäämällä ominaisuuksia ja kääntää uudelleen sen ihmisiä kuin voimme käyttää, hyvin,
he käyttävät vanhaa versio kääntäjä
koota uuteen versio kääntäjä.
Ja jos olet katsomaan klo puhua että hän antoi,
näet, että koska Tämän kierron
voit itse olla vikoja tai Troijan hevoset upotettu ohjelmisto
käytämme.
Ja vaikka jos tarkastellaan lähdekoodi näiden ohjelmien,
se ei ehkä ole edes ilmeistä koska huijaukseen on todella
Joissakin vanhempi versio kääntäjä, joka siitä lähtien on ollut
ruiskuttamalla uhka meidän ohjelmisto.
>> Joka on vain sanoa, me todellakaan voi ja pitäisi
Trust Software käynnissä meidän läppäreissä tai puhelimia tai useita paikkoja.
Ja itse asiassa myöhemmin tämän lukukauden kun alamme puhua web ohjelmointi
ja todella alkaa rakentaa web-sovelluksia itse,
me puhumme näistä uhkia ja muut.
Nyt, olet ehkä miettinyt ja huomasin että oli pikku Darth
Vaderin leikkeet että Verge näytti siellä
noin Volkswagen. Jos et ole koskaan nähnyt, minä
ajattelin meidän pitäisi keventää mieliala koska tämä on kaikki
erittäin masentava ja pelottavaa.
Aion katsoa taaksepäin Super Bowl 2011
kun kaupallinen mukaan Volkswagen-- ja tämä
melkein tekee niistä sympaattinen again-- esitettiin ensimmäistä kertaa televisiossa.
Se on 60 sekunnin leike mielestäni voit nauttia.
[VIDEOTOISTOSTA]
[MUSIC - Theme from "Star Wars"]
[DOG KUORII]
[Auto alkaa]
[Lopeta toisto]
DAVID J. MALAN: Joo.
Olin juuri tarkkailun.
Tämä auto on rikkomusten luettelo.
Selvä.
Joten me tarkastelemme joitakin pseudokoodi hetki sitten.
Ja tässä on isompi pätkä pseudokoodina koodi
että olemme nähneet muutaman kerran toistaiseksi.
Ja nyt käyttää tätä on tilaisuus nyt ottaa käyttöön uuden ohjelmakauden
tekniikka että teimme katso algoritmisesti
viime viikolla, kun me katsoimme yhdistämisen lajitella.
Mutta katsotaanpa virallistaa se ja miten voisimme käyttää sitä itse koodi,
ja sitten me aiomme käyttää tätä tekniikka tiellä eniten
todennäköisesti ratkaisemaan tiettyjä muita ongelmia.
>> Joten tämä oli yksi ensimmäisistä ohjelmat me koskaan kirjoitti, vaikkakin pseudokoodilla koodi.
Ja mitä tämä ohjelma pystyimme tekemään kurssi
oli löytää Mike Smith puhelinluettelosta.
Ja huomaa erityisesti linjat kahdeksan ja 11, jotka oli tämän siirry julkilausuman.
Ja itse asiassa, tietyissä kielet, C joukossa,
itse tehdä on ilmoitus, että on kirjaimellisesti
Siirry jonka avulla voit hypätä tietylle riville.
On yleisesti paheksuttavaa, koska se voidaan helposti käyttää väärin
ja voit aloittaa hyppääminen teidän Ohjelman koko paikka vastakohtana
käyttämään sellaista logiikka ja ohjausvuo
että olemme käyttäneet tähän mennessä vain silmukat ja olosuhteet ja vastaavat.
>> Mutta voimme yksinkertaistaa tämä algoritmi pseudokoodilla koodi seuraavasti.
Sen sijaan tämän iteratiivisen tai looping lähestymistapa
jossa pidämme menossa takaisin ja takaisin ja takaisin linja kolme,
miksi emme juuri sellainen punt ja lisää yleensä sanoa linjassa seitsemän ja 10,
vain korvata nämä kaksi paria linjat,
if Smith on aikaisempi kirjan me will
etsi Mike vasen puoli kirjan.
If Smith on myöhemmin kirja, etsiä Mike oikeaan
puolet kirja.
Ja huomaa jo kiertomuuttoa.
Oikea?
Etsin Mike puhelinluettelosta ja sitten
Olen lopulta osuma ehkä line seitsemän tai ehkä linja 10
ja minun opetus itselleni on haku Mike puolessa puhelinluettelosta.
No, miten voin etsiä Mike?
Olen keskellä etsivät Mike, miksi
sinä tavallaan lähettää minulle ympyrän?
Mutta se on OK, koska mitä on tapahtuu koko ongelman,
kuten kirjoitettu rivillä 7 ja 10?
Emme vain sano haku Mike, etsi Mike.
Me nimenomaan sanoa mitä?
Etsi hänet vasemmalla puolella oikea puoli, joka on tehokkaasti
puolet koko ongelman.
Niin se on OK, että olemme tavallaan harjoittaa tämän kierron
tämä kehäpäätelmä, koska ainakin olemme
jolloin ongelma pienempiä.
Ja lopulta me aiomme päästä että ns pohja tapauksessa
meillä on vain yksi sivu left-- meidän vapaaehtoinen viime viikolla
did-- meillä oli yksi sivu vasemmalle ja sitten emme
on pidettävä etsivät Mike Smith koska hän on joko sivun
tai hän ei ole.
>> Joten kuinka voimme toteuttaa tätä ajatusta, tämä eräänlainen kehämäisyys todellisessa koodi?
No, voimme hyödyntää tekniikkaa joka on yleisesti kutsutaan rekursio.
Ja olemme nähneet tämän pseudokoodi yhdistäminen lajitella viime viikolla.
Muista, että tämä oli pseudokoodi yhdistäminen lajitella.
Se on todennäköisesti jopa helpompaa kuin kupla tai valinta tai lisäyslajittelun
pelkästään ehtojen yksinkertaisuuden jolla voit ilmaista se.
>> Mutta se johtuu olemme tavallaan circularly
sanomalla, etsi jotain etsimällä se uudelleen.
Mutta me hakuja joko vasen puoli tai oikea puoli
ja sitten lopulta olemme sulautuvat tässä tapauksessa.
Mutta täällä, liian kanssa nämä kaksi lajitella riviä,
ei meillä on jälleen tämä Ajatus rekursio.
Ja konkreettisesti, mitä tämä tarkoittaa, yhteydessä algoritmi,
on, että algoritmi on rekursiivinen jos se käyttää tai kutsuu itseään.
>> Tai kannalta C, toiminto on recursive-- toiminto nimeltään
foo on rekursiivinen jos foo, jossain sen lähdekoodi,
kehottaa toiminto foo itse.
Ja se on paha, jos kaikki foo koskaan ei on kutsua itseään uudelleen ja uudelleen.
Se on OK, jos foo lopulta pysähtyy, samoin yhdistää lajitella, sanomalla, odota minuutti,
jos tämä ongelma on super pieni, esimerkiksi,
tai löysin minä, jota minä olen etsivät, vain palata.
Älä rekursiivisesti, älä syklisesti itseäni uudelleen.
>> Ja niin katsotaanpa katsomaan miten tämä voisi todella toimivat.
Joten aion mennä eteenpäin ja avoin kaksi koodiesimerkkejä täällä.
Joista yksi on nimeltään Sigma 0.
Ja tämä ei ole ollenkaan rekursiivinen, mutta sallikaa
katsokaa mitä tämä ohjelma tekee.
Olen riisuttu pois kaikki huomautuksia siitä, mutta kaikki
lähteen koodi CS50: n sivusto on kommentteja, jos olet
halua lukea läpi uudelleen myöhemmin.
Ja tehkäämme pari mielenterveyden tarkistaa täältä.
>> Joten yläreunassa tämän koodin, meillä ovat CS50.h.
Mitä tämä tekee?
Miksi se on täällä?
Kohtuullisessa Maallikon termein.
Mitä se tekee?
Joo.
>> Yleisö: Jotta GetInt toiminto toimii.
>> DAVID J. MALAN: Jotta GetInt toiminto toimii.
Koska sisällä tämän tiedosto, CS50.h, joka
näemme ennen pitkää ehdot sen lähdekoodi,
on joukko toimintoja declared-- GetInt, GetString,
ja joukko others-- ja ellei meillä on todellakin että Sisällytä linja,
kääntäjä kalahtaa ei ole menossa tietää, että se on olemassa.
Ja sama pätee linja kaksi jossa int määritellään
printf, joka on funktio pidämme käyttäen melko vähän.
Nyt linja neljä tuntuu hieman outoja koska se on vain yksi linjaliikennettä.
Se sai puolipiste, ei kihara henkselit, ei koodia sen sisälle.
Mutta mitä me kutsumme tämä asia viikkoa aikaisemmin?
Joo.
Niin prototyyppi.
Ja miksi meillä prototyyppi joka näyttää
olla hieman tarpeeton tyypillisesti koska me yleensä
katso toiminto uudelleen myöhemmin tiedoston, eikö?
Joten miksi me have-- olet vain naarmuuntumisen pään mutta otan sen.
Joo.
>> Yleisö: [äänetön] toiminto jälkeen tärkein.
DAVID J. MALAN: Aivan.
Niin että kääntäjä tuntee teidät lopulta määrittää tai toteuttaa
että toiminto jälkeen tärkein, oletettavasti.
Niin Clang ja kaikkein kääntäjät ovat eräänlainen tyhmiä
ja he vain tietää mitä kerrot heille.
Ja jos haluat käyttää toiminto nimeltään sigma,
sinun on parasta opettaa kääntäjä että se on olemassa etukäteen.
>> Nyt tärkein itse, jopa vaikka se on joukko viivoja,
on melko tuttu toivottavasti nyt.
Se sai tehdä, kun silmukka jonka tarkoitus elämässä
tässä ilmeisesti on saada positiivinen kokonaisluku käyttäjältä.
Ja vain pitää kiusanneet häntä tai hänen kunnes ne tekevät yhteistyötä.
Sitten linja 16 Minulla mielenkiintoinen puhelu.
IntAnswer.
Joka vasemmalla puoli antaa minulle Int
joka voi store-- kutsutaan Answer-- joka tulee tallentaa, ilmeisesti
palauttaa arvon sigma.
Joten sigma on vain mielivaltainen mutta kuvaava nimi
että olen antanut toiminto jonka tarkoitus elämässä
on otettava yksi argument-- me kutsumme sitä N tässä case--
ja vain ottaa summa, että määrä plus jokainen positiivinen luku, joka on
pienempi kuin se.
>> Jos siis kulkea numero 2 sigma, haluan lisätä 2 plus 1
plus 0-- ei 0-- niin että antaa minulle 3.
Jos välitän 3 Sigma, haluan on 3 plus 2 plus 1, joka antaa minulle 6.
Ja niin edelleen.
Niin se vain lisää jopa kaikki numerot vähemmän kuin tai yhtä suuri kuin se.
>> Nyt, täällä olen juuri menossa tulostaa vastaus.
Niin nopeasti järki tarkistaa, katsotaanpa tehdä sigma 0-- piste slash sigma 0--
ja haluan kirjoittaa 2.
Ja minä todellakin saada 3.
Saanen tyypin 3.
Olen todellakin saat 6.
Ja jos joku voi tehdä matematiikka nopeasti, jos teen 50 mitä olen menossa saada?
>> Yleisö: [äänetön].
DAVID J. MALAN: No, ei.
Mutta 1275 joka on melko lähellä.
Joten tämä on tulos tehdä 50 plus 49 plus 48 plus 47 plus 46
kaikki alas 1.
Niin, että kaikki Sigma tekee.
Mutta katsotaanpa kuinka olemme toteutetaan se nyt.
Joten täällä on toiminto itse.
Ja tämä ei näytä olevan mitään tekemistä rekursion vielä.
Itse asiassa käytämme vanhan koulun tekniikka.
Olen alustetaan muuttuja nimeltä summa nollaan, niin minulla on foreloop täällä,
ja olen julistamisesta Int nimeltään I, jossa se vastaa 1--
vaikka voisin asettaa sen yhtä nolla, mutta koska olen tekemässä Lisäksi
Ketä kiinnostaa, jos se on nolla tai yksi.
Se tulee ole vaikutusta.
>> Joten olen iteroimalla niin kauan kuin minä on vähemmän kuin tai yhtä suuri kuin m, mikä
on väite, että hyväksyttiin.
Ja sitten vain pitää lisäävä I ja oivalluksia
silmukan kaikkien Mulla tekee summa plus vastaa I. Ja se on tahallista.
En halua tehdä, tässä tapauksessa, kuten summa plus plus.
Haluan todella lisätä nykyinen arvo,
joka pitää saada isompi ja isompi ja isompi käynnissä vastaavuuden.
>> Ja sitten palaan summa.
Ja niin vastaus saa arvon summa.
Ja sitten tulostaa sen.
Joten ei tilaisuus täällä, kuitenkin sellaista yksinkertaistaa
tämä koodi käsitteellisesti ja sellainen isku oman
mielessä kannalta yksinkertaisuus vaikka se
vie aikaa lajitella on ymmärtää, miksi tämä
on voimakas nämä pienet esimerkeissä.
Tässä on sigma one-- niin toinen versio tämän koodin.
Kaikki ylös on sama niin että sama juttu pätee kuin ennen.
Mutta nyt katsokaamme täytäntöönpano sigma joka
Olen supistettu vain nämä lines-- neljä riviä koodia, todella,
plus joitakin kihara henkselit ja valkoinen tila.
>> Mutta mitä teen?
Jos m on pienempi kuin tai yhtä suuri kuin nolla, minun täytyy sellainen käsitellä
että Super yksinkertainen asia.
Ja jos käsi minulle nolla tai mitään negatiivinen joka on vain outo,
Olen juuri menossa mielivaltaisesti mutta johdonmukaisesti palaa nolla.
En halua tätä asia päästä outoja ääretön
silmukka koska negatiivinen arvo.
Joten Sanon vain, jos annat minulle nolla tai vähemmän, olen palaamassa nolla.
>> Mutta se on hyvä, koska se on että yhden sivun puhelinluettelosta
on jäljellä.
Olen puree pois hyvin erityinen ongelma ja emme vaadi jotain rekursiivisesti.
Mutta linjassa 31, mitä voin näyttää tekevän?
Suluissa ovat vain pitämällä asioita, toivottavasti, hieman selkeämpi.
Mutta kaikki Mulla on minä olen palaavat m-- riippumatta
annat me-- plus arvo m-- pahoillani,
plus arvo sigma m miinus 1.
Mitä tämä tarkoittaa?
Jos annat minulle numero 3 syötteenä vastaus Haluan saada lopulta
on 6, koska 3 plus 2 plus 1 antaa minulle 6.
Mutta miten voin ajatella miten tämä koodi on käynnissä?
Ensimmäistä kertaa kutsun sigma ja välitän arvon 3,
Se on kuin sanoisi pala paperin, tässä on arvo 3
ja olen kulkenut tätä sigma.
3 ei tietenkään ole pienempi kuin 0 niin Jos ehto ei koske.
Muu ei.
Joten mitä teen?
Haluan palata m, joka on 3, sekä sigma m miinus 1.
Joten haluan seurata tätä.
Aion laittaa tämän paperille alas.
Ja mitä arvo, on kirkas, olen menossa ohi
osaksi sigma tässä vaiheessa tarina?
Mikä numero?
2, eikö?
3 miinus 1 on 2.
Joten Tarvitsen vain vähän romu paperi tähän.
Joten nyt sigma on tulossa kutsutaan uudelleen.
Ja olen tietoisesti tämä alas, koska se on
ikään kuin keskeyttämällä että versio tarinasta
koska nyt olen keskittynyt signaalin m miinus 1.
Joten m oli 3, m miinus 1 on 2.
Joten tässä on 2 että olen kulkenut.
2 ei tietenkään vähintään 0 jotta asia ei koske.
Else palaan m, mikä on tämän asia, plus Sigma mitä arvo?
Joten jos sigma on 1-- koska m on nyt 2 niin 2 miinus 1 on 1.
Joten nyt minulla on vain arvo 1.
Olen ohimennen vain numero 1 toiminto sigma--
tai itse here-- joten 1 ei tietenkään ole pienempi kuin nolla, ei vieläkään sovelleta.
>> Else paluu 1 plus sigma mitä?
0.
Joten haluan vain muistaa, että.
Palaan tähän myöhemmin.
Nyt aion mennä eteenpäin ja JOT alas numero 0, koska se on
minun argumentti tai parametrin.
Olen läpäissyt numero 0 ja lopulta tämä prosessi
vain toistan itseäni ilmoitus nauseum ei lakkaa sillä mitä
voin heti tehdä, kun näen tämän 0?
Palaan nolla.
Joten nyt sinun täytyy kelata tarina.
>> Jos minä nyt mennä ajassa taaksepäin, mikä oli viimeisin asia
Tein jos olisit kirjaimellisesti kelaus video?
Aion poimia viimeisimmän 1 ja joka antaa minulle 1 plus 0 on 1.
Jos pidän kelaus tarina, joka on menossa antaa minulle
2 plus tämä käynnissä arvo, joka on 1.
Niin, että 3.
Ja sitten aion pitää uudelleenkelaus.
Kun ensimmäisen kerran laittaa alas numero 3-- joten 3 + 3 antaa minulle 6.
>> Ja nyt, jos olet uudelleenkelattua video tähän saakka,
tämä oli hyvin Ensimmäinen kysymys kysyin.
Kun kulunut 3, mikä on sigma 3?
Se on itse asiassa 6, summa kaikki nämä paperille.
Joten jos joka vie vähän aikaa kääri mieltäsi ympärille, se käy hyvin.
Mutta pitävät sitä oli little-- se oli hyvin tahallinen että olen pinottu
nämä numerot päällekkäin.
Se on tavallaan kuin ottaa memory-- ennätys aikaa,
kuten pesuri on video, että voin todellakin kelata sisään.
Ja aiomme palata että metafora vain vähän.
>> Mutta ensin, käy ilmi, että on olemassa paljon geeks ja hauskoja ihmisiä,
Oletan, Google.
Olisiko joku on hyvin hyvä Googling mieli
tulossa vain hetken ja auttaa minua etsiä jotain?
Hyvin, hyvin pieni avain.
Joku, joka ei ole koskaan keksiä ennen, ehkä.
OK.
Joo?
Tule.
Tule alas.
Mikä on nimesi?
>> SAM: Sam.
>> DAVID J. MALAN: Sam, tule alas.
Tämä on sama.
Kiva tavata.
Hei.
Tule tänne.
Joten kaikki mitä tarvitsemme sinua tekemään, jos voisit, Sam, tässä on Google.
Voitteko etsiä termin rekursio?
Älä pilaa.
>> Ja nyt let's-- joo.
OK Valitse että.
Parempi klikkaa sitä.
Ahh, saat sen.
Ei?
OK.
Joten tehdä pari toiset.
Ei niin paljon liittyvä akateemisesti täällä, mutta oletko
koskaan etsinyt Googlen anagram?
>> SAM: Ei.
>> DAVID J. MALAN: OK.
Etsi anagram sijasta rekursion.
Entä vinossa.
Oletko etsinyt vinossa?
Nyt, tämä on hieman vaikea nähdä, mutta toivottavasti everything's-- OK.
Se on vain sinä ja minä nauttia tästä.
OK.
>> Joten lopuksi, tämä one's-- se on vähän vinossa.
Nyt tehdä tynnyri roll.
Ihana.
Selvä.
Suuri kiitos Sam.
Ole hyvä.
Kiitos.
>> Joten mitä tapahtuu kaikissa Näiden typerä esimerkkejä?
Siis todella, alla huppu Googlen miljoonia rivejä koodia
ilmeisesti on muutama typerä IF ehdot, jotka ovat olennaisesti
tarkistaa, jos käyttäjä on kirjoitettu tämän lauseen,
tehdä jotain, joka luultavasti otti triviaali aikaa
toteuttaa vain olla huvittavaa tällä tavalla.
Mutta siinä kaikki se kiehuu alas alla huppu.
Mutta tietenkin, rekursio on enemmän geekier
Esimerkiksi joukossa erikoistemppuja.
Ja varmasti siellä muut siellä myös, että meillä ehkä ole edes
löydetty vielä.
>> Joten katsomaan, tai harkita nyt seuraava ohjelma,
ja varmasti napata kaikki Näiden matkalla ulos.
Aion mennä eteenpäin ja avata ohjelma, joka on
yrittävät vaihtaa kahden arvon.
Mutta ennen kuin menemme sinne, tehdään tämä.
Voisimmeko saada yhden vapaaehtoinen, luulen?
Haluatko tehdä vapaaehtoistyötä?
Ei?
Tule ylös.
Selvä.
Joten nimi on mitä?
>> LAUREN: Lauren.
>> DAVID J. MALAN: Lauren.
Tule ylös, Lauren.
Joten Lauren ollaan haastoi täällä seuraavasti.
Kiva tavata.
Joten Lauren tässä on edessä hänen kaksi tyhjää kuppia.
Ja meillä on joitakin oranssi mehua ja maitoa
ja aiomme mennä eteenpäin ja toimi seuraavasti.
Olemme juuri menossa täyttämään tämän.
Muutama unssia maitoa tänne ja lähdetään Täytä hieman appelsiinimehua tänne.
>> Ja edessä kaikki Näiden yleisön jäsenet,
vaihtaa kaksi arvoa näiden kupit.
Laita appelsiinimehu maitoon kuppi ja maidon appelsiinimehua kuppi.
Miten teet tämän, jos olit kotiin ja oli pääsy muita tarvikkeita?
LAUREN: Laita se toisen kupin.
DAVID J. MALAN: OK.
Joten on väliaikainen muuttuja, jos me.
Ja mennä eteenpäin nyt ja toteuttaa tämä sama vaihtamalla menettelyä.
Niin hyvä.
Laitoimme EYVL tilapäiseen muuttuja, maitoa EYVL muuttuja,
ja nyt väliaikainen muuttuja maitoon muuttuja.
OK.
Joten hyvin tehty toistaiseksi.
Joten se kääntyy out-- katsonut, että Vaikka vain hetken.
Täällä vain pelle sitä hieman, tämä olisi vastaava C-koodia
että me vain täytäntöön.
Meillä oli kaksi tuloa, a ja b, sekä joka meidän täytyy vain sanoa yksinkertaisuuden ovat
int n.
Ja huomaa täällä, jos haluan vaihtaa arvot kaksi muuttujaa, a ja b,
me todellakin tarvitsemme välikäsi, väliaikainen muuttuja, väliaikainen kuppi,
johon kaada yksi arvoista niin että meillä on paikkamerkki sen.
Mutta sitten koodi on täsmälleen kuten Lauren täällä täytäntöön.
>> Nyt vain saada pikku hullumpi, osoittautuu
että voit tehdä tämän ilman väliaikainen muuttuja.
Voit tehdä tämän oikein, vaikka aiomme on huijata joidenkin kemia.
Meillä on joitakin ylimääräisiä kupit täällä.
Joten lähinnä asia, joka näyttää kuten maito ja vesi perhaps--
tai maitoa ja OJ-- on meillä on joitakin vesi, joten me täyttää tämä ylös
muutaman unssia puhdasta vettä.
Se on luultavasti liikaa.
Joo.
Se on ehdottomasti liikaa.
Odota yksi sekuntia.
>> Ja nyt meillä on öljyä, joka, muistaakseni alkaen yläasteella kemian luokka,
toivottavasti se ei sekoitu veteen.
Mutta se tavallaan eräänlainen näyttää maitoa ja lehdessä.
Joten nyt, ilman väliaikainen muuttuja,
voit vaihtaa näitä kahta arvoa?
Joten öljyt menee veteen cup, vesi menee öljykuppiin.
LAUREN: Ei muita kupit?
DAVID J. MALAN: Ei muita kupit.
Ja en ole oikeastaan testannut tätä ennen tämän vuoden
joten en tiedä, jos tämä todella toimivat kemiallisesti.
Tämä ei pitänyt tapahtua.
Toimiiko se?
Selvä.
Joten erottaa?
Hyvä.
Nyt täytyy saada vettä toiseen kuppiin.
Fiksumpia kemia keskittimien voisi luultavasti tehdä tämän paremmin kuin minä.
>> LAUREN: vesi on pohjassa.
>> David J. MALAN: water--, joka oli Mikä avain viimeksi teimme tämän.
Sinun täytyy tehdä se oikeassa järjestyksessä.
Joo.
Se on ok.
Joten nyt meillä on kaksi kuppia öljyä.
OK.
Se on ok.
Mutta kemiallisesti jos tämä toimi kuin I--
>> LAUREN: Tämä on vesi.
>> DAVID J. MALAN: Se on enimmäkseen vettä.
Selvä.
Mutta se on silti sama kuppi kuin ennen.
Joten kaada it-- kokeile sitä tuolla.
OK.
Tämä on hyvä käyttää luokan aikaa tänään.
OK.
Joten nyt we-- mukavaa.
Tavallaan.
Selvä.
Niin erittäin hyvä.
Kiitos Lauren.
Erittäin hyvin tehty.
>> Joten vain räjäyttää mielenne, ja tämä on ehkä jotain
pelata jos pidät CS50 tunnus, voit itse asiassa vaihtaa kahden muuttujan
ilman väliaikaista kokonaisluku.
Ja tämä on vastaava C-koodia.
Ja jos muistaa viime Keskiviikkona esittelimme, jos lyhyesti,
joitakin uusia toimijoita C. eikä kukaan muistaa, mitä pikku porkkana
symboli on, että pieni kolmiomainen symboli näppäimistö edustaa?
Mikä bittioperaattori?
>> Yleisö: EXOR.
>> DAVID J. MALAN: EXOR.
Exclusive Or.
Joten jos haluat, vain hauskaa kotiin, antaa ja b kaksi mielivaltaista
arvot kuten kaikki eight-- ja minä valitsisin kahdeksan bitin arvo.
Jos teet tämän kanssa 32 bittiä, voit hyvin nopeasti kyllästy.
Mutta vain antaa kahdeksan bitin arvo, joka on mitä tahansa, yksi tai kaksi,
ja antaa b samanlainen arvo.
Ja sitten käyttämällä määritelmän XOR viime keskiviikkona
sovelletaan, että pala palalta, kukin nämä kahdeksan bittiä kussakin a ja b,
ja sitten tehdä se juuri kohti tämän koodin.
Ja se ei ole virheellinen mitä näet täällä ruudulla.
Se todellakin kuihtuu kolme XOR toimintaa
ja jotenkin maagisesti ja b vaihtavat kannat
menettämättä mitään tietoja.
>> Niin öljy ja vesi temppu on lähimpänä reaalimaailman inkarnaatio
Voisin ajatella matkia että.
Mutta se on varmasti helpompi käyttää väliaikainen muuttuja,
kuten tässä tapauksessa täällä.
Ja tämäkin on mahdollisuus sanoa, Myös tällainen mikro optimointi,
kuten tietojenkäsittelytieteessä sanoisi, vaikka tavallaan hauskaa
kehuskella miten teit tämän ilman kuten vaihtamalla ylimääräinen muuttuja,
se ei ole kaikki, että pakottavia.
Koska tallentaa 32 bittiä, kuten jos kyseessä todellinen int,
ei ole kovin pakottavia järjestelmään, jossa
saatat käyttää kymmeniä megatavuja tai jopa enemmän kuten muistia näinä päivinä.
Ja itse asiassa, kun saamme myöhempään Harjoitus
ja käytät oikeinkirjoituksen ruudullinen ja sinun
haastetaan tekemään niin tämä niin vähän muistia ja niin vähän
aika kuin mahdollista computer-- silti
on viikko toteuttaa it-- sinun have-- voit olla
haastoi minimoimiseksi näitä resursseja.
Ja se on oikeastaan ​​ainoa tilaisuus tämä lukukausi
jossa voit kannustettava ajella pois pienimmätkin suorituskyky
maksaa muuten.
>> Joten what-- kuinka voimme nähdä tämän itse koodi?
Anna minun mennä eteenpäin nyt ja avata esimerkki
että tarkoituksella kutsutaan Ei Swap koska se ei
itse asiassa vaihtaa muuttujat kuten itse voisi odottaa.
Joten katsomaan.
Tässä ohjelma, joka ei ole CS50 kirjasto tekeillä, vain vakio I / O.
Nyt meillä on prototyyppi swap ylös joka vain
tarkoittaa se sai määriteltävä myöhemmin.
Ja tässä on tärkein.
>> En mielivaltaisesti x ja y, vastaavasti, arvot yksi ja kaksi
vain koska he pieni ja helppo ajatella.
Ja sitten vain on nippu printfs jossa minulla on järki tarkistaa. x on 1
ja y on 2 on oletettavasti mitä nämä printfs sanovat.
Joten mitään maagista toistaiseksi.
>> Sitten aion vaatia kanssa tulostaa def, vaihtamalla piste piste piste.
Aion soittaa swap toiminto, kulkee x ja y.
Ja Oletetaan nyt, että swap on toteutettu täsmälleen
koska se oli hetki sitten tilapäinen muuttuja.
Ja niin Väitän rohkeasti, vaihtuneet.
X on nyt tämä, ja y on nyt.
Mutta tiedoston, tietenkin, kutsutaan Ei Vaihda.
Joten itse nähdä mitä tapahtuu.
Jos minä koota ei swap ja sitten do ./noswap, x on 1, y on 2.
Vaihtaminen vaihtuneet.
x on 1, y on 2.
Joten se todella näyttää olevan virheellinen jopa vaikka swap-- katsotaanpa selaa now--
toteutetaan täsmälleen kohti koodi Ehdotin hetki sitten.
Joten emme aio saada fancy kanssa XOR juttuja nyt.
Tämäkin pitäisi toimia vain kuten maidon ja EYVL,
mutta se ei tunnu toimivan.
>> Joten tehdä tätä uudelleen.
Ehkä en vain ollut käynnissä oikein.
Joten ajaa Ei Swap uudelleen.
Ehkä I-- ei.
Niin se vain ei toimi.
Joten tehdä vähän järki tarkistaa.
Anna minun mennä eteenpäin täällä Swap ja vain lisätä, odota minuutti,
on% i / n ja lähdetään plug-arvon.
Koska en todellakaan halua nähdä, mitä tapahtuu.
Ja itse asiassa tämä on virheenkorjaus tekniikka
että saatat olla käyttämästä virka tai kotona jo,
muistuttaa alkupuoliskolla Dan Armendariz n video PSET3
jossa esittelimme tulostaa def kuin suositeltava tekniikka, ainakin
yksinkertaisia ​​tapauksia.
Anna minun mennä eteenpäin ja suorita make ei swap uudelleen, ./noswap.
>> Mielenkiintoinen.
Joten huomaa, mitä näyttää pitävän paikkansa. X on 1, y on 2, mutta on 2, kun b on 1.
Joten nämä kaksi jotenkin vaihtoivat mutta x ja y eivät saa vaihdettu.
Joten tehdä selväksi, mitä tapahtuu on, täällä minulla on x ja y
ja ne ovat muuttujia paikallisia laajuus tärkein, olen ohimennen x- ja y-
vaihtaa.
Nyt, swap, erillisenä toiminto, on vapaasti soittaa sen perustelut
tai sen parametrien mitään se haluaa.
Foo baariin vai X tai Y tai tai b.
Vain tehdä selväksi, että he ole sama kuin x ja y sinänsä,
Olen sanonut ja b.
Mutta voisimme kutsua heille mitään haluamme.
>> Ja niin se näyttää swap on siirrellään
x-- AKA a-- ja se on siirrellään y-- AKA b.
Jotenkin nämä kolme riviä ovat vaihtamalla nämä arvot tarkalleen
kuten Lauren teki maidon ja OJ.
Mutta kun me tulostaa arvot, a ja b
ovat todellakin vaihtaa mutta X ja y ei ole muutosta niihin.
Muista, että x ja y ovat täällä.
>> Jotta voimme nähdä tämän kautta toinen tekniikka samoin.
Ja tämäkin on tekniikka upotettu ongelma asettaa kolme.
Mennään eteenpäin ja tehdä tämän CS50 ID jos et ole jo.
Oikealla puolella me on tämä Debugger välilehti.
Ja jos avaat tämän ylös, siellä on mystistä tietoa
joka on heittänyt sinua aluksi.
Mutta katsotaanpa tease tämä toisistaan ​​todella nopeasti.
>> Joten, näet paikallisia muuttujia.
Osoittautuu, että rakentaa osaksi CS50 IDE, ja paljon ohjelmointiympäristöjä lisää
yleensä, on debuggeri.
Työkalu, jonka avulla voit visuaalisesti nähdä mitä tapahtuu sisällä oman ohjelman
tarvitsematta turvautua lisäämällä printfs ja kokoaminen ja käynnissä
ja lisäämällä printf ja koota ja käynnissä, joka jo vuonna virka
tai koti, on luultavasti tulossa melko tylsiä.
>> Joten tässä, vain hetken, olemme menossa nähdä reaaliajassa
arvoja paikallisia muuttujia.
Olemme myös menossa voitava asettaa mitä kutsutaan breakpoints joka
mahdollisuuksia omassa ohjelmassa tauko suoritus tietyllä koodiriviä
että olen utelias.
Oikea?
Nämä ohjelmat toimivat sekunnin murto-osassa.
Se on tavallaan mukavaa meille hitaammin ihmisille pystyä keskeyttää, hetki, katso
mitä tapahtuu noin tietty koodiriviä
ilman ohjelma auraus sen läpi ja viimeistely kokonaan.
Joten raja-arvot menee jotta voimme tauko ja tauko tietyssä vaiheessa.
>> Kutsupino on hieno tapa sanomalla mitkä toiminnot ovat tällä hetkellä
kutsutaan tällä hetkellä.
Tärkein on aina kutsutaan ensin.
Mutta jos Main kutsuu toiminto nimeltään Swap,
olemme todella menossa nähdä tämän torni toimintoja, jotka ovat olleet
nimeltään käänteisessä kronologisessa järjestyksessä.
Joten nähdä, että.
>> Aion loitontaa.
Aion mennä takaisin minun koodi.
Ja vain koska haluan olla pikkutarkka täällä,
Aion mennä eteenpäin ja valitse vain vasemmalla linjan viisi.
Ja joka luo punainen piste.
Ja huomaa oikealla puolella että debuggeri tietää, hei,
Sanoin vain keskeytyskohdan noswap.c linja viisi, erityisesti
Tämän koodiriviä.
Joten debuggeri tietää, että minä ovat pyytäneet, että seuraavan kerran
Juoksen minun ohjelma se tauko suorittamisen siellä eikä vain
käynnissä koko juttu huippunopea.
>> Joten nyt aion klikkaa Debug -painiketta hyvin alkuun IDE
ja että menee toimi seuraavasti.
Se tulee avata ensin hieman pelottavan näköinen toinen napa window--
etävianmääritystä alkaen isäntänä ja such--
ja me palaamme mitä kaikki tämä tarkoittaa ennen pitkää.
Mutta mikä on tärkeää nyt on, että punainen piste osui,
debuggeri on tahallisesti keskeytetty execution--
ei radalla sinänsä vaan ensimmäisenä rivi itse koodi tähän toimintaan.
Ja siksi linja seitsemän on nyt on korostettu keltaisella.
>> Ja Nyt katsomaan oikealla puolella.
Näyttää siltä, ​​oletuksena, kauniisti tarpeeksi, x on mitä arvo?
0.
Ja y on mitä arvo?
Nolla.
Ja se on odotettavissa mielessä että x ja y-- että keltainen line-- on
ei toteutettu vielä.
Joten X ei pitäisi olla arvoa 1.
Se voi olla jokin muu arvo, ns roskat arvo.
Ja me onnekas, että se on nolla tässä vaiheessa lähinnä.
>> Joten nyt on vain muutama painikkeet meidän tarvitse välittää
noin kun virheenkorjaus tällä tavalla.
Huomata täällä, meillä toistopainiketta.
Ja jos me pelata tai lyödä jatkaa, se on vain
menossa ajaa läpi loput ohjelman
tai kunnes se osuu toiseen murtuessa.
Mutta en ole asettanut mitään muuta raja-arvot niin se on vain
menossa läpi loppuun.
Tällainen tappioita tarkoituksena tönäisi ympäri.
>> Joten sen sijaan, välitän nämä kuvakkeet oikealle.
Ja jos minä hääriä ne, kuin pitäisi liian,
näet vähän tips-- työkalu vinkkejä.
Tämä on askel yli.
Nyt se ei tarkoita Ohita seuraava rivi koodia.
Se vain tarkoittaa toteuttaa sitä ja siirtyä seuraavalle, siirry seuraavaan,
siirtyä seuraavaan.
Toisin sanoen, kautta että painike, voin kävellä
kautta minun koodi yksi askel kerrallaan.
Rivi riviltä, ​​kirjaimellisesti.
Nyt, oikealle että siellä toinen
että näemme vain hetken.
Tämä on ns Astu ikoni, joka on
aio sallia minulle sukellus toiseen toiminto.
Mutta katsotaanpa tämä vain hetken.
Joten aion klikkaa askel yli.
Ja nyt huomaa, koska olen klikkaa tätä painiketta oikeassa yläkulmassa,
pitää silmät suunnilleen alle Paikallinen Muuttujat ja katso mitä tapahtuu x.
X on nyt 1, koska keltainen viiva on nyt suoritettu
ja olemme siirtyneet rivillä 8.
Ja vain hetken y olisi toivottavasti tulee 2.
>> Nyt, ei mitään kiinnostavaa tapahtuu hieman.
Kaikki tämä on on printf.
Ja huomaa, minun toissijainen terminaali ikkuna, näen tuotos tulostaa def.
Ja nyt minun täytyy tehdä Päätös sellaisena kuin ohjelmoija.
Voin astua yli tämän linjan koodi, sen suorittamista mutta ei
saada tietää, mitä sisällä.
Tai voin itse astua se ja mennä sisälle swap itse.
Tehdäänpä jälkimmäinen.
>> Anna minun mennä eteenpäin ja valitse ei askel yli vaan Step Into.
Ilmoitus, yhtäkkiä ikkuna muutokset
Korosta ensimmäinen koodirivin Vaihda.
Se on linja 21.
Ja nyt, mikä on tavallaan funky on että, jos tarkastellaan tänne, odotetusti,
pilkku b on 1 ja 2, vastaavasti.
Miksi temp 32767?
Muistuttaa, että lämpötila, aivan kuten tyhjä kuppi hetki sitten,
julistetaan täällä line 21.
Miksi 32,000- Tarkoitan, miksi se vain outoja arvo?
Joo?
>> Yleisö: Se ei ole alustettu.
>> DAVID J. MALAN: Se ei ole alustettu.
Joten meidän tietokone aina on fyysistä muistia.
Se on aina keskusmuistia.
Ja siellä on aina Zeron ja yksi on siellä, eikö?
Koska käytämme meidän tietokone koko päivän,
käytät CS50 IDE tai palvelimet koko päivän.
Jotta RAM joko on joitakin nollia tai jotkut oman tai jonkin nollia ja ykkösiä.
Ei ole väliä onko tai ei käytät niitä.
Et voi vain olla tyhjä tiloissa, joissa haluat bittiä.
He joko nollia ja ykkösiä.
>> Joten käy ilmi, että lämpötila, koska olemme ole alustettu sitä vielä,
meillä on ne 32 bittiä mutta he eivät ole alustettu tahansa tunnettuja arvoja.
Joten mitä he olivat eniten viimeksi käytetyt for-- ne 32 bits--
me vain nähdä esineitä joidenkin aiemmasta käytöstä kyseisiä 32
bittiä.
Heti kun klikkaa askel yli kuitenkin, huh huh, lämpötila on menossa arvoon 1.
Ja jos teen sen uudelleen, on Menossa annetaan arvo 2
ja sitten b aikoo annetaan arvo 1.
>> Ja niin mitä mukavaa nyt tässä vaiheessa tarina
on, että debuggeri on osoittaa minulle, Super hitaasti
minun omaan tahtiin, mitä tila Swap on.
Mutta huomaa huipulla täällä, ilmoitus että kutsupino todella
on kaksi kerrosta siihen.
Nyt yksi, joka on korostettu Swap, jos napsautan Main sijaan,
huomaa kuinka paikalliset muuttujat muuttuvat koska kehittäjä voi vain hypätä
ympäri ja mennä mihin tahansa eri soveltamisala.
Joten vaikka me teemme kaiken tämän toimivat ja oikein vaihtamalla ja b,
jos menen edestakaisin Swap jossa on 2 ja b on 1 ja Main,
on Main vaikuttanut lainkaan?
Ei.
Niin mitä takeaway täällä?
No, käy ilmi, että aina soitat toimivat kuten Swap,
ja ohitat sen argumentteja, mitä olet ohimennen Swap toiminto
tässä tapauksessa on kopio näistä perusteluista.
Joten jos x ja y ovat kukin vastaavasti 32 bittiä, mikä vaihto on tulossa
on kaksi uutta paikallista muuttujia, tai väitteitä,
kutsutaan ja b-- mutta ne ovat mielivaltaisia names-- mutta kuvio nollia
ja ne sisällä a ja b ovat rivissä olevan identtinen x ja y
mutta ne eivät ole sama asia kuin x ja y.
>> Se on ikään kuin Main on sen pala paperi numero 1 ja 2 x ja y,
ja sitten kun se kädet että paperinpala Swap,
Swap hyvin nopeasti saa oma kynä, kirjoittaa alas
1 ja 2 omasta paperiarkille, kädet takaisin alkuperäisen xy Main
ja sitten tekee omat juttu ja b.
Ja tämä on nyt erittäin tärkeää, koska tämä on triviaali vaikutuksia
sillä todella kirjoittamista oikea koodi koska vaikuttaa siltä, ​​emme voi vaihtaa
kaksi muuttujaa.
>> Olen kirjoittanut oikean Swap toiminto.
Olemme toteutettu sen Lauren kuin oikea swap toiminto todellisuudessa,
mutta ilmeisesti mikään että asiat jos et voi itse
vaihtaa kaksi arvoa pysyvästi.
Joten tarvitsemme toisella tavalla todella saada tämän,
ja meidän on pystyttävä itse asiassa tämän ongelman ratkaisemiseksi.
Ja se kääntyy out-- ja tulemme takaisin tähän nimenomaiseen kuva
ennen long-- tämä on yksi tapa, että saatat kiinnittää tietokoneen muistiin.
Se on vain suorakulmion.
Voisit piirtää se mitään monin tavoin, mutta se on
kätevä tehdä sitä suorakulmio seuraavasta syystä.
>> Aiomme aloittaa tänään ja sen jälkeen puhutaan ns pino.
Ja pino on vain murikka of RAM-- kimpale memory--
että toiminnot on pääsy milloin niitä kutsutaan.
Ja niin se kääntyy pois, että hyvin alareunassa tämän pinon
on, jos kaikki Mainin paikallisia muuttujia ja Org C ja org V ja kaikki jutut
eivät mene oletuksena. Ja jos Main kehottaa muuna kuten Vaihto,
hyvin, Swap on menossa toiseen kerros muistia jopa sen yläpuolella.
>> Ja niin vain antaa sinulle nopeasti pintapuolinen kuva tästä, jos menen yli here--
ja haluan heijastavat tätä piirtoheitin kuten well-- mitä todella olen,
jos välitämme vain pohjassa tätä kuvaa nyt,
on että kun olen suorittanut ohjelman ja Main saa kutsutaan,
Tärkein annetaan kimpale RAM minun tietokone, joka on
alareunassa tämän ns pino.
Ja aion tehdä sitä tarkoituksella kuten neliö.
Joten se on kuin 32 bittiä tai neljä tavua.
Ja jos tämä päätehtävä on muuttuja nimeltä x arvo on 1
ja se on muuttuja nimeltä Y arvo 2, joka on
kuin ottaa tämä suikale muistin Main on antanut toiminta
järjestelmä ja jakamalla sen niin, että ensimmäinen paikallinen muuttuja menee täällä,
toinen menee täällä, ja se on siinä.
>> Kun Main kehottaa Swap, Vaihda saa oman siivu muisti
että me tehdä näin käyttöjärjestelmästä,
ja se tulee olla sen oma paikalliset muuttujat perustuvat
meidän täytäntöönpanosta aiemmin paikallisten muuttujien
ja b, että aluksi saada arvoja 1 ja 2.
Mutta sitten, heti kun Swap koodi suorittaa,
ja Lauren todella swap OJ ja maito, mitä tapahtuu?
No, tämä 2 on tulossa 1, tämä 1 on tulossa 2, ja, muuten,
on temp muuttuja, joka on on käytetty että koko sen ajan, lopulta
menee pois.
Mutta se ei ole väliä kuinka paljon työtä teet
tämän linjan of-- tässä muistia, x ja y ovat täysin koskematon.
>> Joten tarvitsemme tapa antaa Swap ja toimintoja, kuten se
salainen yhteys, jos haluatte, että toiminnot like-- muistiin, kuten x ja y.
Joten katsomaan esimerkki, joka auttaa
meitä nähdä, mitä on ollut käynnissä koko tämän ajan.
Aion mennä eteenpäin ja avata Vertaa Zero.
Ja aion sulkea meidän debuggeri, aion
sulkea tämän pelottavan näköinen viesti vain sanoo, odota minuutti,
olet keskellä virheenkorjaus.
Aion piilottaa tämän välilehden täällä vain palata yksinkertaisuus.
Joten älä huolestu, jos GDB kuolee.
Se vain tarkoittaa, että ohjelma on on lopettaa, tarkoituksella tässä tapauksessa,
minun.
>> Ja nyt Vertaa Zero tekee tämän.
Olen käyttäen CS50 kirjasto vakio I / O.
Minulla päätehtävä, että ensin sanoo, sanoa jotain, ja saa merkkijono.
Sanoo sitten uudelleen ja saa toisen merkkijono.
Ja huomaa, että nämä kaksi merkkijonoa kutsutaan s ja t, vastaavasti.
Ja nyt tämä ohjelma, Vertaa Nolla, sen elämän tarkoitus,
sen pitäisi kertoa minulle, minä kirjoita sama asia?
Ja niin aion takaisin viikko yksi.
Olen käyttäen yhtä suuri yhtä suuri operaattori joka on laatu operaattori.
Ei Sijoitusoperaattori, yhtäsuuruusoperaattorin.
Olen vain vertaamalla s ja t.
>> Joten itse mennä eteenpäin ja tehdä tämän.
Ja aion mennä eteenpäin ja tehdä Vertaa Zero.
Aion tehdä ./comparezero.
Ja aion mennä eteenpäin ja sanoa jotain
kuten, tehdään äiti pienillä kirjaimilla ja miten äiti isoja kirjaimia.
Ja tietenkin kirjoitan eri asioita.
Selvä.
Se on odotettavissa.
>> Katsotaanpa ajaa se uudelleen.
Molemmilla kerroilla tehdä pieniä, pieniä.
Joka näyttää Super sama minulle.
Anna.
OK.
Ehkä se on vain outoa, koska se ei miellytä minun kielioppia.
Tehdäänpä pääoman MOM, pääoman MOM, identtiset.
Eri asiat.
>> Niin miksi?
No, mitä todella tapahtuu on alla huppu täällä?
Joten mennään takaisin yli täällä vain hetken
ja miettiä, mitä GetString todella tekee.
Kun soitat GetString, se funktio me
itse kirjoitti ja se jotenkin saa merkkijono käyttäjältä.
Ja oletetaan, että ensimmäinen aika Pyydän GetString, joka antaa minulle
kimpale muisti, joka näyttää tältä.
Ja jos olen kirjoittanut pienillä m-o-m-- ja mitä tapahtuu sen jälkeen?
Vain nopeasti järki tarkistaa.
>> Backslash nolla.
Tiedämme, että.
Ja muistuttaa, että me pelasimme ympäriinsä Zamila nimi
ja joukko muita nimiä kun Rob oli täällä etsimässä
mitä tapahtuu sisällä muistia.
Niin, että tarina on täsmälleen sama.
Tämä on mitä GetString palaa minulle.
Nyt minun koodi hetki sitten tallennettu palauttaa arvon GetString
muuttujaan nimeltä s.
Ja sitten toisen kerran kutsuin sitä, se tallennetaan se muuttujaan nimeltä t.
>> Joten jos menen tänne, tarvitsen tehdä tämä paikallinen variable--
ja olen yleensä menossa piirtää merkkijonon just-- me will
kutsuvat sitä s-- kuin pienen aukion täällä.
Ja nyt, somehow-- miten äiti mennä sisälle tämän muuttujan s?
No, meidän täytyy mennä takaisin ensin periaatteita täällä.
Mikä on GetString todella palaamassa?
>> Joten käy ilmi, että M-O-M kenoviiva nolla, ja rajoittamattoman määrän
Muiden jousille muisti kuin Zamila ja Rob tai Andy tai muilta,
ovat tietenkin meidän tietokoneen RAM tai muistin.
Ja RAM on like-- olet keikka RAM, kaksi keikkaa RAM,
tai miljardia kaksi miljardia tavua, tai ehkä jopa enemmän näinä päivinä.
Joten Oletetaan, päivän tarkoituksiin, että sillä ei ole väliä kuinka me numero
heitä, mutta voimme numeroitava näiden miljardia tai kaksi miljardia
tai neljä miljardia tavua.
>> Ja haluan vain mielivaltaisesti sanoa, että tämä on ensimmäinen purra, toisen purema,
kolmas, neljäs.
En tarkoituksella käytä nolla tänään, mutta me palaamme siihen.
Eli toisin sanoen, jos tämä on Ensimmäistä kertaa olen käyttäen ohjelmaa,
Olen vain saada onnekas ja ensimmäinen purema on sijainti yksi sitten kaksi
sitten kolme kuin neljä.
Ja jos Pidin piirustus, laatikko numero kaksi miljardia olisi tapa täällä.
>> Mitä mieltä olet, sitten, GetString todella palauttaa?
Se ei ole tulossa takaisin M-O-M kenoviiva nolla sinänsä koska selvästi
ei mahdu ruutuun että olen laatinut.
Mitä muuta voisi GetString todella palaamme kaikki näistä viikoista?
Vastaus on aluksella täällä jossain.
Ei mahdu M-O-M kenoviiva nolla, joten mitä saattaisi olla järkevää sen sijaan?
Jos piti olla erittäin fiksu, laskemisesta on ns engineering hattu,
mitä voisit palata?
Mikä on vähiten tietoa voisit tuottoa, joka olisi vielä
voit löytää M-O-M muistia?
Joo?
>> Yleisö: Yksi.
>> DAVID J. MALAN: One.
Ja miksi?
Yleisö: Koska se kertoisi minne mennä [kuulumattomiin].
DAVID J. MALAN: Aivan.
Olen juuri menossa palauttaa osoitteeseen merkkijonon, että olen saanut.
Osoite tähän asia on sijainti yksi.
Joten mitä todella on tallennettu s-- ja jokainen merkkijono muuttujan näin far--
on juuri osoitteen merkkijono.
>> Samaan aikaan, jos kutsun GetString toisen kerran ja minä
kirjoita kirjaimellisesti samassa thing-- M-O-M lowercase-- M-O-M
ja toinen kenoviiva nolla, ja nyt ehkä minun ohjelman
olleet käynnissä jo jonkin aikaa, joten ehkä tämä on 10, tämä on paikka 11, tämä on 12,
tämä on 13.
Tietokoneissa muulla muisti jostain syystä.
Mitä nyt menee minun toinen muuttuja minun ohjelma t?
10.
Aivan.
>> Ja niin kun katsomme lähdekoodi tämän ohjelman
missä olen yksinkertaisesti yrittää vertailla kahta arvot,
on S yhtä suuri yhtä t, mikä on inhimillisestä vastaus?
Vain ei koska 1 ei ole sama 10.
Ja niin tässä piilee mahdollisuus meille todella
vain mennä takaisin, jälleen, ensimmäinen periaatteet ja miettiä, hyvin,
mitä tapahtuu alla huppu?
Olemme puhuneet bitit ja tavut ja muisti,
mutta se on todella hyödyllistä ymmärtää koska kun soitat GetString,
vaikka ajattelemme se on palaavat M-O-M tai merkkijono äiti
tai Andy tai Zamila tai kuten, teknisesti
se on vain palauttamalla osoite Kyseisen murikka muistia.
>> Mutta se on OK.
Koska mistä tiedän jossa merkkijono päättyy?
Jos olen vain antanut alkua?
No, kenoviiva nolla, eikö?
Vain lineaarisessa ajassa voin tulostaa tulostetun def M-O-M.
Ja kun näen kenoviiva nolla, en välitä, mistä aloitin,
Tiedän jo epäsuorasti jossa minun täytyy lopettaa.
>> Ja niin tänään merkitsee beginning-- ja anna minun tehdä tämä dramaattisesti, koska me
meni läpi paljon vaivaa saada nämä täällä koulutus wheels--
joten tänään apupyörät alkaa irrota ja me paljastaa klo least--
>> [APPLAUSE]
>> Se oli matkan arvoinen Target tänä aamuna, kyllä?
Joten now-- on, se kääntyy , mitään sellaista asiaa kuin merkkijono.
String ei ole olemassa.
Se on synonyymi että meillä on ollut sisällä CS50 kirjaston.
Vastedes aiomme aloittaa kutsuvan s ja t ei jouset vaan merkkiä tähteä.
Ja nieriä tähti me will tease erilleen ennen pitkää.
Mutta tämä on sanottava, että vaikka jatkamme
käyttäen GetString nyt, teknisesti minun pitäisi
sanovan char tähti ja nieriää tähti.
>> Ja käy ilmi, mitä että tähti on menossa kuvaamaan on jotain
kutsutaan osoitin tai osoite.
Ja itse asiassa, teaser mitä on edessä
on tämä 20 sekunnin klippi meidän ystävä Nick Parlante Stanfordin
joka jo jonkin aikaa sitten, viettää naurettava aikaa,
kuten parhaiten voin kertoa hänen keittiö tai hänen kellarissa,
mikä claymation käyttöön maailmalle
hahmo nimeltä Binky jonka kanssa me
otetaan käyttöön seuraavan kerran viitteitä.
Joten tässä on esikatselu siitä, mitä on tulossa.
>> [VIDEOTOISTOSTA]
>> Hei, Binky.
Herää.
On aika osoitin hauskaa.
>> -Mikä tuo on?
Lisätietoja viitteitä?
Voi, Goody.
>> [Lopeta toisto]
DAVID J. MALAN: Ja että huomautuksen, näemme sinut keskiviikkona.
Selvä.
Kuka tanssii?
Tule.
Kuka tanssii?
Haluat minun päästä se alkoi?
Haen se alkoi.
Woooo!
>> LAUREN: Makea fancy Mooses.