[Powered by Google Translate] David J. MALAN: U redu, ovo je CS50 i to je
kraj tjedna 1, pa studijskih kartice su i ukupni broj
kolege koje su u ovoj godini je 745.
A mi tako smo oduševljeni da su mnogi od vas u tijeku
ovaj semestar, ali iako je ovaj tečaj je toliko velika,
shvatiti da je ove stvari poput petak ručkove, poput
radno vrijeme, 15-osoba sekcije, i tako dalje da
su zapravo značilo stvoriti ovo intimnije
okoliš.
Dakle, iako možemo skupiti jednom ili dvaput tjedno, ovdje u
Sanders, znam da velik dio svog iskustva u ovom tečaju
će biti jako puno hands-on na uz svoje kolege
i nastavno osoblje.
>> Dakle, ovdje mi ići, Jesen 2012.
Dakle podsjetiti da smo zadnji put završila na note
nepreciznost, govori o zastupljenosti brojeva.
I mi smo gledali jedan od propusta koji su se dogodili, u
stvarnom svijetu, kada je došao do nesporazuma
kako računala rade.
Pa, danas ćemo ponovno jedan od onih ideja kao
te nastaviti našu raspravu o CS50 klijenta
i C i što to znači da stvarno programu.
Ali prvo, samo par vihoru najavama.
>> Sekcije početi ove nedjelje, a prvi tjedan je uvijek
malo brzog starta, jer smo upravo dobili u
Vaši sekcija forme.
Mi radimo isto, sada, s nastavnim bližnjima, sada
da znaju svoje rasporede, tako da smo s ciljem, prema
Subotnje jutro, pratiti s vama s vašim dijelu
Raspored i TF.
Shvatite da će početi sljedeći dan, nedjelja
ili ponedjeljak ili utorak.
A onda ćemo ugostiti sekcija promjene kao što su nastali
u danima koji dolaze.
Radno vrijeme, u međuvremenu, su, opet, večeras, 8:00 do 11, u
Annenberg, kao sutra.
Iako se problem setovi su uglavnom zbog četvrtkom
u podne, shvatite da ste i do pet dana kasni provesti,
stoga dostupnost radnog vremena četvrtkom ako
ste novac u jednom od tih kasnih dana, a time i dostaviti
nešto je u petak.
Dopustite mi sugeriraju da Scratch je među više zabave, među
više niske ključni problem seta.
I ja bih objesiti na tim kasnim dana, strateški, samo
za kasnije u semestru kad život počinje da se na putu
s midterms i druge klase.
Problem Set 1, u međuvremenu, će biti objavljen na tečaj je
Web stranica ovog petka, kao što će biti u toku hoda
kroz video, koji će biti sniman u 14:30 u petak
, a zatim objavljena putem sljedećeg dana.
>> Tako smo završili u ponedjeljak.
Želim - zapravo, jedan napomenuti ovdje.
Budući da su razredi - jer Sanders nije točno posuditi
sama povremeni Q & A natrag i naprijed strašno dobro, mi smo
će pokušati nešto malo novo u ovoj godini, pri čemu
ako nisi ugodno podizanje ruku ili ste samo
radije ne digne ruku u sobi kao što je ovaj,
idemo da imaju neke od nastavnih bližnjima i CAS
popunu cs50.net/discuss tijekom predavanja.
Dakle, ako imate pitanje, jer sam bio posve
nejasno o nečemu ili vas zanima o nekim
tema, pokušajte ga posting postoji.
Tag ga s oznakom Predavanje, a mi ćemo se potruditi
danas i sljedeći tjedan - hrapavi pokušati ovo - to teren
ili elektronski, on-line, ili ako se osjeća kao da smo trebali
stvarno baviti masovno, jedna od nastavnih bližnjima ili
CA će podići svoju ruku i pitati
anonimno na vaše ime.
Dakle, mi ćemo dati ovo probati i vidjeti koliko dobro to radi.
No, svim sredstvima, i dalje podizati ruke kao što ste željeli.
>> Dakle, zadnji put kad smo otkrili da je 10% ili jednu desetinu nije, u
Činjenica, 0.1, kao što su nas učili prije mnogo godina.
To je u stvari, kao što je to vrijednost.
No, to nije u potpunosti točno, zar ne?
Moramo samo ovo ograničenje u računala pri čemu, ako
samo imaju ograničen količinu memorije, RAM, ili više
posebno bita, dobro, postoji samo konačan broj
stvari koje mogu predstavljati.
Na primjer, ako imamo broj nula, a mi želimo da
predstavljaju u binarnom pomoću osam bitova, gdje je malo,
opet, nula ili jedan, možemo
ga predstavljaju kao 00000000.
I to je nešto nepotrebno preopširan.
Baš kao u decimalnom sustavu u stvarnom svijetu,
općenito, ako želite napisati broj 123, što
ljudi vjerojatno ne pisati 00000123 iako,
funkcionalno, to je isti broj.
Mi samo kap vodeće nule, da se tako izrazim.
>> U binarnom, možemo učiniti isto.
Binarni i nula, nula i binarni je samo nula.
Vi samo trebate jedan malo.
Ali opet, najčešći jedinica mjere u svijetu
računalstva je bajtova, osam bita.
Samo zato što jedan zalogaj, prilično beskoristan.
Osam bitova, nije strašno korisno, ali barem to je više
korisniji od jedne mjerne jedinice.
Tako je s osam bita, obično ćete predstavljaju binarni.
Dakle, ovdje imamo brojeve nula, jedan, dva, a onda, kao
Nate je učinio u našem videu prošle srijede, možemo nastaviti
računajući do sedam, osam.
A onda, ako ćemo koristiti sve više i više bitova, mi
može računati do beskonačnosti.
Ali ako imate samo ograničen broj tih bitova, kao što je
slučaj u bilo kojem računalnom sustavu ili čak raketa
sustav, dobro, doista imate samo
konačnih iznosa preciznosti.
Dakle, ako želite da predstavljaju broj kao 0,1, dobro,
Računalo mora izabrati.
A ako ima samo konačan broj brojeva što može
predstavljaju, može doći blizu 0,1 za vas, ali to ne može
nužno dati vam točno vrijednost koju želite.
A to je samo jedan od izazova računala,
ispod poklopca motora, srećom.
>> Kao što smo krenuti dalje u semestru, te niža razina
Detalji postao mnogo manje zanimljiva, ali sigurno
primjena tih ideja može imati neki vrlo stvarni svijet
posljedice.
Jedan od njih je malo zabavno.
Kako mnogi od vas su vidjeli iznenađujuće Space film Office?
Ako niste, to je vaš neslužbeni
zadaća za tjedan dana.
No, u uredski prostor, na novaci u tom filmu uzeti
Prednost upravo ovom idejom, ali oni zapravo ukrao
ona iz drugog filma koji bi mogli imati
vidio, čak i godinama prije.
Pa neka mi vam dati nekoliko sekundi ovog prikolicu od
Ova nevjerojatna film i to je jako puno
akademski relevantno.
>> [Igra film]
Zapravo sam se promovirala.
Ja mogu programirati virus koji će parati da
stavljajte off veliki put.
Pa, kako se to radi?
Svaki put ima bankovne transakcije u kojoj je interes
kompjutorska, postoje tisuće dan, računalo završi
s tim frakcija centa.
Ali neću to učiniti ništa protuzakonito.
Ilegalna? Samir, ovo je Amerika.
Morate Kunem se Bogom.
Ako nitko ne zna o tome, ali nas, u redu? No članovi obitelji, nema
djevojke, nitko.
[Nečujan].
Ne brinite, čovječe, neću nikome reći bilo.
[MOVIE ZAVRŠAVA]
>> U redu, pa možda sam pronašao ovaj film bolji od većine
ljudi ovdje, ali u svakom slučaju, virus koji su bili
pokušava stvoriti -
te u filmovima, bilo da bih nazvati nešto virusa,
to je općenito nije zapravo virus.
To je samo program koji je netko napisao nešto učiniti.
I u ovom slučaju, dečki su pokušali napisati program
da je iskoristio svoju tvrtku pod nazivom Innotech je
računalni sustav, pri čemu Računala, također, čak i kada je to
dolazi do novca, ne može nužno
predstavljaju novac precizno.
Dakle, iako ste možda 0,10 dolara u svoj bankovni račun,
0,10, dobro, računalo zapravo možda mislite da imate
to mnogi centi u svoj bankovni račun.
I tako ono što ti dečki su teže učiniti - i oni
ukrao ideju, ispada iz Superman III, gdje
Richard Pryor učinio istu stvar - oni su u suštini
pisanje programa koji teže da se svi prateći
brojevi, svi od sitnih, sitnih, sitnih frakcija
penija, i siphoning one off, tako da su ljudi samo
misao, oh, to je samo 0,10 dolara tamo, ali sve one
prateći brojevi na kraju zbrojiti.
Dakle prekrasnom idejom i osvetio urnebesno u tome
posebno film.
>> No, u stvarnom svijetu, također, postoji puno više u vezi
implikacije ovih svašta.
A jedan od razloga da se upustim u području računala
Znanost je, opet, njezina primjenjivost ne
tehničkih znanosti sama, ali samo za
druga područja.
Dakle, ovo je manje raspoložen pogled na ono što može poći po zlu, ali
to je također prilično otvara oči, mislim, kad je u pitanju
razumijevanje kako točno sveprisutna tehnologija poput
računala i programiranje i ovih dana,
u obliku softvera.
Dakle, ovo Sljedeći isječak je samo oko šest minuta, nastavlja
gdje smo stali zadnji put, ali nam omogućuje da pogledate malo
više u dubinu na jednom takvom od tih pitanja.
Dopustite mi da preskočite naprijed tamo gdje smo stali,
koji je bio ovdje.
I mi smo dio dva od dva, za oko šest minuta ovdje.
>> [PLAY MOVIE]
Udario moderne raketne tehnologije.
Godine 1991, s početkom prvog Zaljevskog rata, Patriot
raketa doživjeli sličnu vrstu
Broj pretvorbe problem.
I kao rezultat toga, 20 osoba, 20 američkih vojnika, ubijeno
a oko 100 ranjeno, kada Patriot, koji je trebao
za zaštitu od dolaznih Scuds,
nije uspio ispaliti projektil.
>> Kad Irak napao Kuvajt i Amerika pokrenula Desert
Oluja je početkom 1991, Patriot raketne baterije su
razmještene kako bi zaštitili Saudijsku Arabiju i Izrael iz Irački
Scud raketnih napada.
Patriot je američki srednjeg dometa zemlja-zrak sustav,
proizveden od strane tvrtke Raytheon.
Veličina Patriot interceptor sama, riječ je o
otprilike 20 metara dug i težak oko 2.000 kilograma.
I to nosi bojevu glavu od oko - Mislim da je to otprilike
150 £.
A bojne glave sama je visoka eksploziv koji ima
Fragmenti oko njega.
Kućište glavom je zamišljen kao sačma.
Rakete su provedena četiri po kontejneru i
prevezeno polu prikolicu.
>> Patriot proturaketni sustav seže barem do
20 godina.
To je bio izvorno zamišljen kao raketa protuzračne obrane na
pucati dolje neprijateljske zrakoplove, u prvom Zaljevskom ratu.
Kada je taj rat došao zajedno, vojska želi da ga koristiti za pucanje
dolje Scuds, a ne zrakoplova.
Air Force Irački nije toliko problem, ali vojska
bio zabrinut Scuds.
I tako su pokušali nadograditi Patriot.
Presretanje raketa neprijatelj putuju na MACH 5 ide
se dovoljno izazovan.
No, kada je Patriot je prevezena u službu, vojska
nije bio svjestan nekog iračkog izmjene koje je napravio njihov
Scuds gotovo nemoguće pogoditi.
>> Ono što se dogodilo je Scuds koje su
dolaze u bilo nestabilno.
Oni su klimatav.
Razlog za to je bio Iračani, kako bi dobili 600
kilometara iz 300km raspon projektila, uzeo
težina od prednjeg glavom i
napravio bojne glave upaljač.
Tako sada Patriot pokušava doći na Scud, a većina
vrijeme, velika većina vremena, to bi
samo lete po Scud.
Nakon Patriot sustava operateri shvatili Patriot
promašio svoj cilj, oni detonirao Patriot bojevu glavu.
Da biste izbjegli moguće gubitke, to je dozvoljeno
da padne na tlo.
To je ono što većina ljudi vidjeli, kao velike vatrene kugle na nebu,
i neshvaćen kao presreće od Scud bojevih glava.
>> Iako, na noćnom nebu, Patriotsi pojavio se
uspješno uništili Scuds, na Dhahran, nije moglo biti
pogreška o njegovu učinkovitost.
Tu, Patriot je radarski sustav izgubio trag
dolazni Scud i nikada pokrenut zbog
do programskog mana.
To je bio Izraelci koji je prvi otkrio da je više
Sustav je uključen, to je veća diskrepancija vrijeme postao,
zbog sat ugrađen u sustavu računala.
Oko dva tjedna prije tragedije u Dhahran, The
Izraelci izvijestio da Ministarstvo obrane da je
Sustav je gubljenje vremena.
Nakon što je oko osam sati rada, oni su primijetili da
Sustav je postao osjetno manje točne.
Ministarstvo obrane je reagirao rekavši sve
baterije Patriot da ne napuštaju sustave
na dulje vrijeme.
Oni nikada nije rekao ono što je dugo vremena bio - 8 sati, 10
sati, 1000 sati.
Nitko nije znao.
>> Patriot baterija stacioniran u vojarni u Dhahran
i njegov manjkav unutarnji sat je bio na više od 100 sati na
noć 25. veljače.
To prati vrijeme do točnosti od oko desetine sekunde.
Sada desetina drugi je zanimljiv jer je broj
to se ne može izraziti u binarnom, točno, što znači
to se ne može izraziti točno u bilo
Suvremeni digitalni računalo.
To je teško vjerovati.
Ali ovo koristiti kao primjer.
>> Ajmo uzeti broj trećine.
Jedna trećina ne može izraziti u decimalnom, točno.
Jedna trećina je 0,333 za odlazak na beskonačnost.
Nema načina da to učinite s apsolutnom točnošću u decimalama.
To je točno ista vrsta problema koje se dogodilo u
Patriot.
Što duže sustav trčao, što je još gore vrijeme pogreška postala.
Nakon 100 sati rada, pogreške u to vrijeme bio samo
oko jedne trećine drugi.
No, u smislu cilja projektil putuje na MACH 5,
to je rezultiralo praćenje pogrešaka više od 600 metara.
To će biti fatalna pogreška za vojnicima na Dhahran.
>> Ono što se dogodilo je Scud lansiranje je otkriven rano upozorenje
sateliti i oni znali da je Scud je dolazio u njihovom
opći smjer.
Oni nisu znali gdje je dolazio.
To je sada do radarske komponente Patriot
sustav, braneći Dhahran, locirati i pratiti
dolazni neprijatelj projektila.
Radar je jako pametna.
Ti bi zapravo pratiti položaj Scud, a zatim
predvidjeti gdje će vjerojatno biti sljedeći put
radarski poslao puls van.
To je bio pozvan u rasponu vrata.
Zatim, nakon što je Patriot odluči dovoljno je vremena prošlo da ide
natrag i provjerite sljedeću lokaciju za to otkriven
objekt, to ide natrag.
Dakle, kada se vratio na krivom mjestu, onda ne vidi
prigovoriti, i to odluči da nema objekt.
To je lažna detekcija i padne sa staze.
>> Dolazni Scud nestao iz radaru.
I sekundi kasnije, udario u vojarni. The Scud
ubili 28, a bio je posljednji otkaz tijekom
prvi Zaljevskog rata.
Tragično, ažurirani softver stigao u Dhahran
sljedećeg dana.
A softver mana je fiksna, zatvaranje jednog poglavlja u
uznemiri povijest Patriot rakete.
Patriot je zapravo skraćenica za "phased Array praćenje
Presresti od Target. "
>> U redu, tako mnogo žalosni ishod nije sasvim
razumijevanje ovaj svijet.
I takeaway, stvarno, iz filma je da rješenje
tamo je ponovno pokrenuti sustav obrane proturaketne
svako jednom u neko vrijeme.
I tako opet, jedan od ciljeva ovog kolegija, svakako
na više skromnom skali od tih aplikacija, je
stvarno otvori svačiji oči na točno kako idete o
Strojevi za izradu učiniti ono što želite ih učiniti i kako idete
o da radi ispravno, a usput radi
dobro, elegantno, i tako dalje.
I tako danas, ajmo zaroniti malo više od toga, ali
tako da mi ne ide prebrzo, posebice za one manje
ugodno, ali isto tako da možemo zadržati interes
one ugodnije, neka je samo brzo početi s malo
od rekapitulacija neke od tih ideja.
I opet, pitajte dalje, kako u osobi ili online, ako imate
pitanja tako da možemo zadržati sve na istoj stranici.
>> Dakle CS50 aparati, brz korak natrag, je
ono, u svojim riječima?
To je u redu ako nemate pojma što te riječi mogu biti još.
[Nečujan]
Ok, tako univerzalno sučelje za -
da možemo sve dijeliti.
Apsolutno.
Tako smo mogli, na primjer, reći da ide na neke
web stranica, preuzimanje datoteka ovaj softver za Mac OS.
Preuzmite ovaj softver za Windows, konfigurirati u
na taj način i da.
No, stvarnost je tada ćemo izvoditi u bezbroj tehničke
podržavaju pitanja.
I također ovih dana, mnogo od onoga što je učinjeno strani poslužitelja,
u svijetu računalstva, posebno kada je u pitanju
web development i web aplikacije temeljene, zapravo
vrlo često radi na Unix ili Linux računala, za razliku od
Macovi ili Windows računala.
>> Dakle, među odlika, onda, koristeći ovu stvar zove
CS50 Appliance je svi ćemo imati istu okolinu.
Dakle, svatko je na istoj stranici bez obzira na hardveru koji vam
došao na kampusu s, ali će također biti brbljanje u točno
Isto okruženje koje ćete koristiti prema
Semestar je kraj, kao i za izradu web stranica, kao iu
Budućnost za stvarnim aplikacijama istih.
Dakle, konkretno, CS50 Appliance je besplatno komad
softver koji vam omogućuje da pokrenete drugi operativni sustav,
Linux, u ovom slučaju, na vašem računalu, u prozoru.
Sada ne možete samo preuzeti aparat.
Trebate program s kojim se igraju ili pokrenuti uređaj.
A taj komad softvera je općenito poznat kao
hypervisor.
Hipervizorskog dolaze u obliku proizvoda kao što su VMware,
Virtualni Box, Paralele.
Sve vrste tvrtki čine softver, i slobodan i
komercijalne, podjednako.
Što ćete vidjeti u problemu Set 1 su upute o tome kako
dobiti besplatni softver s kojim se
pokrenuti CS50 Appliance.
A kada to učinite, imat ćete, u prozoru na vašem Mac ili PC,
desktop okruženje koje izgleda baš tako, gdje je
ima početni izbornik poput stvar
donji lijevi kut.
To je u kući mapu, ili home direktorij, u gornjem lijevom
postoji, kanta za smeće, i tako dalje.
Tako ćemo zafrkavati osim potrebne pojedinosti što idemo.
>> Ali sada počnimo zaroniti u C.
Dakle, C je ovo programski jezik, sličan u duhu
Scratch, ali daleko manje grafički, ali ironično, daleko
snažnije jednom kad se pamet s njom.
Dakle, u C, pišemo programe pisanjem izvornog koda, što je
ovo Engleski poput sintakse, slično čarape
dokaz da smo zadnji put koji vam omogućuje da
izraziti sebe dosta precizno, ako
arcanely, na računalo.
>> Pa kakav proizvoda softvera ti zapravo treba
pisati programe na jeziku poput C, na temelju naših
razgovor u ponedjeljak?
[Nečujan]
OK, trebate samo tekst editor.
Ne trebate bilo koji poseban softver
po sebi pisati programe.
Vi samo trebate tekst editor kao što je Notepad, na Windowsima,
TextEdit na Mac, ili nešto što se zove gedit, u svijetu
Linux, koji ćemo koristiti ovdje.
I to je to, pisati programe.
>> No pisanje je samo polovicu jednadžbe.
Nakon toga je potrebno da ih pokrenuti.
No, kako bi se pokrenuti programe -
ne možete pokrenuti izvorni kod.
Umjesto toga morate učiniti ono što za njega prvi?
Da.
David J. MALAN: Morate
prevesti ga.
A, netko drugi, sastavljanje izvornog koda znači -
[Nečujan]
David J. MALAN: Točno.
Ga Prevođenje na nula i one.
Zbog svih nas, ovih dana, imaju računala koja imaju CPU,
Gotovo svi koji su napravljeni od strane tvrtke pod nazivom Intel i
Intel Inside, znači da je to mozak unutar vašeg
računalo, poznat kao CPU-a.
A jedna od stvari koje činimo da mozak, to zna
kako razumjeti obrasce nula i one.
To zna što uzorak bitova predstavlja dodatak, što
uzorak predstavlja oduzimanja, ono uzorak
bitovi predstavljaju ispis i stvaranje zvučnim zvuk.
>> Dakle, u kratko, CPU, zajedno s operativnim sustavom,
što je komad softvera koji radi na vrhu CPU,
da se tako izrazim.
Zajedno, ta dva komada znati kako pokrenuti programe koji
mi ljudi pisati.
>> Dakle, ako sam otići u CS50 Appliance ovdje, moram otvoriti
gore tekst editor, a ja mogu pristupiti ovo
u nekoliko načina.
Ja mogu ili ići na Izbornik, Programiranje,
i onda mogu odabrati -
Nope, ne da izbornik.
Ja mogu ići na Accessories / gedit ovdje otvoriti
moj mali tekst editor.
Ili jednostavno, ja mogu kliknite ovaj mali ikonu na dnu
lijevom kutu.
A sada ću dobiti ovu sredinu ovdje.
To je prilično podsjeća na jednostavan tekst editor, sa samo
jedan ili dva razlike.
U vrhu, gdje je kursor treperi sada, ovo je mjesto gdje
Ja mogu početi pisati svoj kod.
U dnu je ta stvar zove prozor terminala.
A što vrste stvari mogu učiniti u ovom
takozvani terminal prozor?
[Nečujan]
>> Ok, tako ću pokrenuti naredbe.
A neke od naredbi smo vodili u ponedjeljak bili malo
grobni na prvi, ali li za popis, cd za promjenu direktorija,
rm, za uklanjanje.
Dakle, to je svojevrsna old-school način Kretanje
računalo, koristeći samo tipkovnicu i tekstualnih naredbi,
a ne, općenito, pomoću miša.
No, vidjet ćemo, prije dugo, to zapravo nam daje
malo više snage i malo više preciznosti s kojom
se izraziti.
I onda ovdje na lijevoj strani, samo mi ćemo vidjeti,
kao što smo početi pisanje softvera, malo sažetak
Program koji smo napisana na gornjem lijevom kutu.
No, vidjet ćemo da je opet ne zadugo.
>> Tako ćemo učiniti nešto prilično jednostavan ovdje.
Neka me prvi ići naprijed i idite na File, Save, a ja sam samo
ide kliknuti na jharvard ovdje, više na lijevoj strani, a
jharvard je, opet, ime za moj dom mapu, moje
osobne datoteke, mene, sada je John Harvard, kao i sve vas
uskoro će biti John Harvard u ovom okruženju.
On je dobio ovu Home imenik, Moji dokumenti i tako dalje,
da želim spasiti, sada, ova datoteka u.
Dakle, ja ću to nazvati hello.c. Onda ću otići
naprijed i kliknite Spremi, a što sad imam ovdje je kartica
zove hello.c, toliko kao drugi tip urednika.
>> Pa sada neka mi ići naprijed i početi pisati program.
int main (void).
A onda sam učinio zadnji put, printf, za ispis formatiran,
("Hello, World!"
);.
Gotovo završiti.
Ali ja sam nedostaje nekoliko detalja.
Ono što nedostaje iz ovog programa da sam stvarno potrebno za
to je zapravo sastaviti?
Da.
[Nečujan]?
>> David J. MALAN: Da, pa trebam uključiti standard
I / O biblioteka.
Dakle, to treba ići iznad glavni, tako da sam samo ću
napraviti neki prostor za njega tamo.
I ja ću to učiniti # include .
I primijetiti angled zagrade tamo.
I kao stranu, gedit je malo user friendly, ako
ponekad malo konfuzno, u smislu da pokušava pomoći vašem
Oči primijetiti ono linije s kojim.
Dakle, činjenica da je moj kursor je tik do ove kutno
Nosač, primijetiti kako se to isticanje drugog kutno
Nosač plus ovo.
A to je samo privući moju pozornost na činjenicu da sam
imaju simetriju.
I simetrija u programiranju je općenito dobra stvar.
Isto tako, ako sam premjestiti moj kursor do kraja, primijetiti kako
vitičastih zagrada redati pokazati da, da, imam otvoren jedan
i zatvoreni jedan, da tako kažemo.
>> U redu, a ja mogu napraviti jednu drugu stvar.
To nije strogo potrebno, ali dobra praksa, kako kažu
povratak 0.
A povratak 0 ne ono što za nas ovdje?
Ili znači što?
[Nečujan]
David J. MALAN: Ali ništa ne valja.
I iskreno to je teško za mnogo pogriješiti u
programirati ovaj kratki.
Dakle, ja sam samo biće super eksplicitno da je sve dobro.
Ja, čovjek, kad sam pokrenuti ovaj program, vjerojatno neće nikada
vidim da 0.
Općenito, ovi brojevi koji su se vratili iz glavne
samo stražnji glave prema ljudima kada
nešto pođe po zlu.
A ti se malo pop-up rekavši pogreške sustava, jedan,
dva, tri, ili bez obzira na broj je da
je zapravo vratio.
Tako nešto drugo krivo s tim?
[Nečujan]
>> David J. MALAN: Dakle, to nije toliko funkcionalna pogreška
ali estetski jedan.
Vjerojatno sam trebao staviti u newline karaktera tamo
kraj ovog niza, tako da smo zapravo pomicanje kursora
sljedeći redak, a program samo izgleda malo ljepše.
>> Dakle, sada me pusti do mog prozora terminala
i zoom natrag u.
A ova stvar ovdje, to se zove brz.
To samo me podsjeća tko sam ja, jharvard @ aparata, gdje
Uređaj je naziv računala sam na.
U zagradama je to tilda, migoljiti simbol, koji
predstavlja što?
PUBLIKA: Početna katalog.
David J. MALAN: Početna katalog.
Dakle, to je samo skraćeni zapis za reći da su u
vaš osobni folder gdje sve svoje datoteke ići po defaultu.
Tako sada, ovdje, ja mogu upisati ls za popis.
I jedino što ovdje vidim u ovom trenutku je hello.c.
I to je dobro, jer sam upravo to napisao.
>> Pa neka mi ići naprijed i ne bi pozdraviti.
I primjetiti nisam tipkati napraviti hello.c.
Umjesto toga, ja sam samo tipkati osnovni naziv datoteke, halo.
I da, kao što smo vidjeli u ponedjeljak, samo će zaključiti da želim
c. datoteka.
Dakle, sada sam upisali bi pozdravio.
Sada vidim ovu prilično dugo naredbu, a nastavit će
Vidjevši to ponovo i ponovo.
Ali da bude jasno, zveka, riječ koja je upravo pojavio,
da je stvarna prevodilac.
Provjerite je samo graditi alat.
To je samo više user friendly program koji me spašava, u
dugoročno, iz potrebe da tip iz nevjerojatno dosadan dugo
naredbe kao što je to jednom.
Dakle, da bi mogao pokrenuti zveka ručno.
Ti bi mogao upisati sve to ručno.
Samo se jako dosadan.
I tako bi je samo program koji pojednostavljuje naš život i
radi složenije naredbe za nas.
>> U redu, tako da sada ono što bi datoteka trebala sam
u mom trenutnom direktoriju?
Ne samo hello.c, ali i bok.
Dakle, ako želim pokrenuti halo, podsjetiti da kažem dot crtu,
gdje dot znači ići u trenutačnoj mapi, gdje god
su, a zatim pokrenuti program pod nazivom Pozdrav, i doista, sada,
Imam Hello World.
U redu, bilo kakva pitanja na tijek ili sintaksa
ono što smo upravo učinili?
>> U redu, tako da ćemo uzeti stvari u usjek opet.
Dakle, ovo je underwhelming samo napisati program koji samo
ikada kaže halo, svijet.
Tako smo ga mijenjali, u ponedjeljak, kako kažu, halo, David.
To je malo više osobni, ali jednako teško kodirana kao
Prva verzija.
Dakle, nije sve što je uvjerljiv.
Ali postoji, u C, funkcije sigurno osim
ispis, funkcije koje vam doći korisničkog unosa.
I način na koji smo to učinili, drugi dan, bio je kako slijedi.
Prije nego što sam zapravo isprintati nešto, prvo sam dobio
nešto od korisnika.
Pa neka mi to učiniti opet.
>> Gudački a, gdje je samo proizvoljna ime, ovdje, za
string, jednako GetString.
Dakle, ono što je GetString?
To je očito dobiva niz, na temelju svoje ime.
Ali što je to, više tehnički?
To je funkcija.
Dakle, to je funkcija koja ne dolazi s C po sebi.
CS50 osoblje to napisao.
I tako bi koristili ovu, ne možete samo su stdio.h,
Također je potrebno uključiti što?
Da.
Dakle cs50.h, što je samo datoteka smo pisali prije nekoliko godina.
Mi ga instalirali na aparatu za vas uz
sve standardne datoteke.
I tako u ovih prvih nekoliko tjedana razreda, koristit ćemo
to samo kako bi se pojednostavio proces radi vrlo osnovni
stvari kao što je dobivanje korisničkog unosa.
Jer kao što ćemo vidjeti u nekoliko tjedana, uzimajući korisnički unos u
jezik kao C je zapravo iznenađujuće složena,
Posebno zato što ne znaju unaprijed, obično, kako
puno stvari korisnik će se upisati u.
A kad ne znaš koliko podataka za očekivati, ne znaš
znati koliko je memorije izdvojiti.
A ako zaista imati optužni korisniku koji je pokušavao
zasjeći svoj sustav, srušiti računalo, dobro,
općenito prva metoda napada je, baš kao što sam učinio na
Ponedjeljak, upišite cijeli dug niz slučajnih znakova,
Unesite hit, i vidjeti što razbija.
Jer općenito, ako program pauze, koja nagovještava
sigurnosni propust, potencijalno.
To svakako nagovještava vas, programer, nakon što je
pogreška, ali više opasno, možda ste napravili
sigurnosti vezane pogreška, i općenito vidjet ćemo da
to je kako su strojevi ugrožena na ovaj dan, oboje
u svijetu weba i programa na
naredbenog retka, kao što je ovaj.
>> U redu.
Dakle, niz je jednak GetString.
Dakle, konkretno sada, što znači linija 6 učiniti ovdje?
Dakle, funkcija na desnoj strani dobiva niz,
traje koliko argumenti?
Ok.
Dakle, nitko.
Malo razum ček.
Argument, opet, samo ulaz u funkciji mijenjati
njegova zadano ponašanje na neki način.
No, u ovom slučaju, ne želim mijenjati
ponašanje GetString.
Samo sam htjela da biste dobili niz.
Pa sam stavio ništa u zagradama, a zatim sam stavio
zarez markiranja kraj retka koda.
Sada, znaka jednakosti ne znači jednak, sama po sebi.
To znači da zadatak, što znači staviti što god dobiva
outputted na desnoj unutarnjoj god je na lijevoj strani.
>> Dakle, na lijevoj strani, možemo reći da smo proglasio
Niz se zove e.
I točnije, mi smo dodjeljuje memoriju unutar
koje ćemo staviti bitova koji predstavlja slijed
likovi.
No, za danas smo izdvojili
ili proglašen niz.
U redu.
Dakle, sada kada sam to učinio, želim priključiti u vrijednosti
e, a ne vrijednost Davida.
Dakle, to je krivo zašto?
Dakle, ovo je samo doslovno teško kodirana je.
To je za reći "bok, a", što nije ono što ja želim.
Dakle, ja to mogu.
Posto znak je rezervirano, ali sada moram
proći u ispisati drugi argument.
Sjetite se da su argumenti funkcije odvojeni
zarezi, pa sljedeći zarez ovdje sam stavio nakon toga pismo je.
I u tom kontekstu sada, a je varijabla, i printf,
Po primitku ta dva ulaza -
string na lijevoj i ime varijable s. na desno -
to će se priključiti potonji u bivši za nas, a
samo isprintati lijep lijep niz koji sadrži
bez obzira na to je da smo upisali u.
>> Dakle, pokušajmo to.
Idete ići naprijed i smanjivanje, natrag
na moj prozor terminala.
Povećavanje na dnu ovdje.
Ponovno bi pozdravio.
Jeka Čini se da su reprizu.
Ja ću upisati. / Halo, Enter.
Ništa se čini da se događa, no to je u ovom retku
da mogu upisati nešto poput Natea, Enter, a sada imamo
Pozdrav, Nate.
I ja mogu to učiniti opet s Rob, i tako dalje.
Dakle, nadamo se da sada ovaj program se ponaša kao ja namjeravam.
>> Sada, nije sve što je user friendly.
Nemam pojma što se očekuje od mene.
Dakle, mi sigurno može počistiti ovo gore malo.
Dopustite mi vratiti se ovdje, i umjesto da samo ronjenje i
pita korisnika za niz, dopustite mi reći izričito
Korisnik ono što sam očekivao.
Dakle printf ("Unesite string:"
);
Dakle, nema varijable ovdje.
No posto znakovi.
Samo jednostavna engleski izraz.
Dopustite mi sada ići na dno i ovdje ponoviti moj program.
Ali ništa ne čini da su se promijenile.
Zašto?
Moram ga rekompiliranje.
Tako jednostavno pogreška za napraviti.
No, morate ne samo spremiti datoteku, ali
rekompiliranje program.
I tako, ako sam ponovno pokrenuti čine halo, sada zveka radi.
Sada mogu trčati. / Bok. I sada vidim "Unesite string:".
Ok.
Sada je malo više user-friendly.
Nate, Enter, halo, Natea.
>> Pa, ajmo probati ovo opet i početi razmišljati
o kutu slučajevima.
Dakle, baš kao u nule, ti si potaknuo ili su se
poticati u spec. da vrsta razmišljati o tome što bi moglo ići
krivo ako ne predviđaju sve korisnik može učiniti.
Nedostaci, dakle, moglo uslijediti.
Dakle, unesite string -
što je kutak ovdje slučaj?
Što je scenarij da sam, programer, možda neće imati
Predviđeno?
Da.
Ok.
Pa što ako sam upisati u velikom broju kao što je ovaj?
U redu.
Dakle, to još uvijek radi.
Gramatically nema smisla.
Ali barem program radi.
>> Što je još kutak slučaj?
Nešto nisam očekivao.
Da?
Ok.
Tako smo mogli učiniti nešto poput jako, jako velikom broju.
Dakle, neka je to učiniti ovdje.
Dopustite mi smanjili za drugi, neka mi istaknuti.
Ne možete kopirati i zalijepiti ovdje dolje.
U redu.
Dakle, ja ne mogu kopirati i zalijepiti u ovom terminalu prozora, pa ćemo
samo ga simulirati.
Dopustite mi da smanjivanje, idući u obaviti.
Neću to učiniti za predugo, jer to neće
zapravo break u ovom programu.
Ali, to bi mogao.
Upišite.
Ali to nije.
U redu.
No, to je pravi kut slučaj.
I jedini razlog da ponašao korektno, tako da
govoriti, jer CS50 funkcija GetString je zapravo
dizajniran ispod haube, kao što ćemo vidjeti u nekoliko tjedana,
automatski dodijeliti više i više RAM-a, sve više i više
memorije od operativnog sustava, kada to shvati, vau,
stvarno ste upisali u nešto prilično dugo.
Sada, to je malo bijelog laži.
Ako mi zapravo zastao već neko vrijeme i ja upisali u
nešto poput 5000000000 znakova na tipkovnici
ovdje, ili stvarno hit copy-paste dosta smo vrlo vjerojatno
mogla prouzročiti da se program za srušiti.
Samo malo teže simulirati da je s konačnim
iznos od vrijeme.
>> Što je još kutak slučaju možemo pokušati?
Da?
Da.
Pa zašto ne bismo odgovorili ništa?
Dakle, mi zapravo moramo nešto poduzeti, jer inače
Program će sjediti tamo treperi cijeli dan.
Ali ako sam samo pritisnite Enter -
OK, sada, još uvijek izgleda u redu.
Nije li srušiti, ali možda tu je sada prilika da se
početi provoditi strože programa
koji zapravo provjerava.
A ako je string, rečenica, riječ da sam
upisali u ima dužinu 0, dobro, možda sam trebao vikati na
korisnik, ili mu reći ili joj unijeti string opet, tako da je
mi smo zapravo dobili ono što izgleda kao ispravno ponašanje, a ne
Samo potpuni nadzor na moj dio.
>> Pitanje u leđa?
Decimalni broj.
Tako bismo mogli pokušati da, previše.
1,10000005.
Čini se kao da će se raditi samo zapravo ok.
I to je zapravo očekuje.
Iako možda smo upisali taj broj postoji, ili
veći broj ranije, shvatiti da kad smo tipkati korisnika
ulaz, a mi smo pomoću GetString funkciju, ne
obzira da li ono što sam tipkati izgleda kao broj.
Podsjetimo da je prema ASCII, sve na svom
Tipkovnica ima brojčanu vrijednost koja se može preslikati na
lik, char.
Dakle, u ovom slučaju, iako sam možda upisati broj,
Računalo će se razmišljati o tome, da se tako izrazim, kao niz -
nešto što izgleda kao broj, ali je
zapravo ne broj.
No, to je zapravo savršen segue, jer sada možemo
zapravo prijelaz na pisanje programa koji
koristiti i druge vrste podataka.
>> Dakle, osim pomoću znakova, odnosno, osim pomoću žice,
shvatiti da imamo i druge vrste podataka u C, kao iu
drugi jezici.
Char, kao ime sugerira, je samo jedan znak.
Plovak je Krajnja vrijednost, a to je samo fantazija
način da se kaže pravi broj - nešto što ima decimale
točka u njoj s nekim brojevima na lijevo i / ili desno.
Int je cijeli broj, koji je samo broj kao 123.
I sada više zanimljivo su stvari poput kontre.
Što ćemo reći dvaput bio zadnji put?
To je 64, u pravu.
Dakle, dok je obično float je 32-bitni -
tako da je ovo dugo u sjećanju, koristi 32 nula i one na
predstavljaju vrijednosti - dvostruka doslovno dvostruko, što
znači da možete ili predstavljaju veći broj, ili
možete predstavljaju preciznije brojeve.
Dakle, možete imati više brojeva nakon decimalne točke, ali
kao kolega rekao u videu, čak i nešto jednostavno
konceptualno kao trećina ne može predstavljati upravo
računalo, jer na kraju vam ponestane bita, a
Stoga možete učiniti samo .33333333 toliko puta, na
kojem trenutku imate samo reći da sam iz reprezentacije
prostor, moram samo nazvati dan i zastupanje
pomalo neprecizno sviđa.
I dugo dugo -
glupo ime, ali to je zato što je vrsta podataka poznat kao
dugo u C koji slučajno je često 32 bita, baš kao i
int je 32 bita, ali dugo dugo je
općenito 64 bita.
Dakle, to samo znači da može predstavljati veći
brojevi od toga.
>> U redu.
Dakle, ako smo zapravo žele započeti predstavljajući stvari, mi
Možda ćete morati više sofisticirane vrste, i
to je razlog zašto smo niz.
Dakle, u CS50 knjižnici, da datoteka zove cs50.h, mi smo
zapravo proglasio vrsta podataka, da se tako izrazim, zove string,
ali niz zapravo ne postoji.
To je, opet, jedan od tih slojeva idemo oguliti
natrag u tjedan ili dva i baciti ga daleko, a zapravo
pogledajte ispod haube na ono string zapravo, i
kako se to predstavlja.
Mi također idemo pogledati Boolean vrijednosti.
>> Dakle, ono što je bool u kontekstu Scratch?
To je istinita ili lažna.
Dakle, to je samo vrijednost koja je istinita ili lažna, ili isključiti, 1 ili
0, međutim želite vidjeti svijet.
Dakle, u C, zahvaljujući CS50 knjižnici, što pak
uključuje još biblioteku ispod haube, imamo
pristup bogatu tipa koji se zove bool, koji će
doslovno nam omogućiti da dodijeliti vrijednosti true ili false da
stvari u programu.
>> Dakle, idemo naprijed i ovdje napisati mali program koji
učini nešto uključuje brojeve umjesto.
Dakle, neka mi se vratiti na CS50 Appliance, pusti me naprijed i
stvoriti novu datoteku ovdje zove -
recimo samo da nešto jednostavno, poput math.c.
U redu.
A sada idi gore na vrhu moj program, ja sam
će učiniti i obično -
# Include , tako da ja mogu koristiti
printf, int main (void) -
vratit ćemo se, na kraju, ono što int znači
ovdje, što znači void ovdje, ali za sada, samo znam da je
morate pokrenuti programe kao što je ovaj.
Sada ću ići naprijed i reći nešto malo
drugačije - printf ("Daj mi broj:"
);.
Tada ću učiniti int n = GetInt, jer
Ispada GetInt je još jedna funkcija u CS50 knjižnici
osim GetString.
A sada ću učiniti nešto glupo, kao što je "zahvaljujući
za% d, "za decimalni broj, a zatim zarez n i
zatim se vratiti 0.
Pa opet, povratak 0 ima veze s brojem ja sam
pita korisnika za.
Samo znači na kraju da su svi, vjerojatno, je dobro.
>> Tako da me pusti do mog prozora terminala ovdje.
Dopustite mi upišite napraviti matematiku, ući.
I nešto nije u redu.
Napravite matematika nije uspjelo.
Evo prvi od naših poruka.
Zašto?
Malo zagonetan, ali -
Da.
Dakle cs50.h.
Pa opet, pogotovo u početku, vi ćete napisati svoj prvi
program za pset 1 u dijelovima, u uredu sata, a
Iskreno, to će biti velika ponekad ono što ove stvari
zapravo govore.
Ali shvatit ćete vrlo brzo počnu padati
u ćelije pri čemu ovo znači da ste stali jedan
od # uključuje na vrhu datoteke.
I zveka, prevodilac, vas obavijestili o to
govoreći, prilično maštovito, implicitno deklaracija
Funkcija GetInt je nevažeći.
>> U redu.
Dakle, što to znači?
To samo znači da ste implicitno proglasio GetInt u
Osjećaj da niste eksplicitno ga proglasio.
Da izričito izjavljujem int, morate naučiti
Zveka da postoji.
A vrlo jednostavno rješenje za to je da ga naučiti po
uključujući ove druge datoteke, cs50.h, na
vrh datoteci.
Jer doslovno, ono # include nema je ona priča zveka
prilično ići pronaći datoteku pod nazivom cs50.h, kopiranje,
zalijepite automatski u vrhu mog programa za mene,
, a zatim pretvoriti izvorni kod za nula i one.
No, da bi očito biti vrlo zamorno ako mi ljudi imali
ići kopiranje i lijepljenje ove velike datoteke svih vremena,
tako # uključiti samo čini sve da se automatski bez
muddying moj broj s tuđim knjižnici.
A knjižnica je samo još jedan datoteka koja sadrži funkcije i
druge stvari koje je netko drugi pisani, da smo
utjecati zbog nas samih.
>> U redu.
Idemo pokušati ponovno.
Napravite matematiku.
Upišite.
Dobro.
Tako da izgleda kao da su radili.
Pa neka mi sada pokrenuti matematike;. / Matematike.
Unesite daje mi broj, 123.
Hvala za 123.
Sada ćemo pokušati još corner slučaj.
Niz je prilično velikodušan, jer
Niz može biti ništa.
Može izgledati brojeva, izgledati
likovi, izgledati riječima.
No int je int.
Pa sad, ako sam teško korisnik, i to je govoreći: "Daj mi
broj, "što ako ja pokušati učiniti nešto poput 0,1?
Pa, to je broj, i to je u skladu s
gramatika sam ovdje, ali ispod haube, ja sam od
Tečaj pomoću funkcije GetInt.
>> Tako ćemo vidjeti što će se dogoditi.
Unesite, pokušajte ponovno.
U redu.
Dopustite mi biti teško i samo pritisnite Enter ponovo.
Enter, Enter.
Dakle, sada se čini da GetInt je malo više
moćniji od GetString.
Mi, djelatnici, provodi na takav način da, ako smo primijetili
niste dali nam int - i int je decimalni broj
sadrže nule, one, dvojke, trojke, četvero, petero, šestero,
Sevens, osmice, ili očnjaci.
I to je to.
Nema decimalna mjesta, nema znakova, nema interpunkcije.
Čini se da ćemo morati surađivati.
Pa neka mi probati četiri, pet, šest, i da me prođe.
Pa stvarno, da se analni ovdje, vjerojatno sam trebao reći: "Daj mi
cijeli "kako bi se prenio na korisnika
točno ono što ja namjeravam.
>> Sada ćemo razmišljati o ispod haube.
Nećemo pogledati kako cs50.h se provodi danas,
da knjižnica.
Ali ako ga čuva rekavši ponovo, ponovo, ponovo, ono programiranje
konstruirati sam vjerojatno pomoću ispod haube na
implementirati da?
Dakle, samo petlja, zar ne?
Jedan od najjednostavnijih ideja koje smo vidjeli na Scratch.
Zauvijek konstruirati, izgraditi Ponovi.
Vjerojatno, u ovom programu, ispod poklopca motora, čak i
iako je napisan u C, a ne ispočetka, to radi
nešto što se zove ekvivalentna zauvijek ako korisnik nije
upisali u cijeli broj, recimo ponovo, ponovo, ponovo, ponovo, pa
onda napokon kad mi se cijeli broj, onda vam
pobjeći iz tog kruga.
>> Dakle, ono što drugi funkcije možemo koristiti ovdje u CS50 knjižnici?
Pa, neka vrsta od očitih, barem na temelju
vrste podataka koje sada znamo postoje.
Proveli smo GetString, GetInt, ali u cijeloj
prvi tjedana mandata, također možete koristiti i GetFloat
GetDouble i GetLongLong kako bi dobili upravo
vrste podataka koje želite.
Zbog ključ detalj ovdje je da za razliku od nekih jezika,
kao Python i Ruby, gdje se ne moraju nužno
proglasiti tip podataka varijable -
nemate reći računalo kakav stvari
ideš staviti u varijablu -
u C, moraš biti uvijek tako precizan.
Dakle, ako želite varijablu nazvanu n, komad pohranu
da je u ovom slučaju se dogodi da se 32 bita po konvenciji, što
moram reći računalu da ti bitovi
će pohraniti broj -
nije lik, a ne niz, ne plovak.
A to rješava problem možemo učinkovito
ran u zadnjih tjedan dana.
Ako smo koristite nula i one brojeve predstavljaju ne samo
brojevi, ali kao i B i Cs, kako u svijetu je
Računalo će znati da je ovaj uzorak bitova zapravo
predstavlja broj 65, za razliku predstavlja
pismo, koji u isto vrijeme, u skladu s
ASCII, podsjetimo, bio je ekvivalent za 65?
>> Dakle, ovi tipovi podataka pružiti kontekst s računalom, tako
da ne zna je li ta bita treba tumačiti kao
int ili kao string.
Sva pitanja, a zatim, na ovo?
Da?
David J. MALAN: Dobro pitanje.
Ako uzmemo iz stdio.h, mi spremite datoteku -
pusti me do prozora terminala i trčanje napraviti matematiku, zoom
i ući -
Sada sam dobiti drugu pogrešku, jer sam implicitno
izjavljujući ono što funkcionira sada?
Printf.
Dakle, sada sam stvorio novi problem, čije rješenje je
u suštini isti.
Trebam staviti to natrag.
PUBLIKA: [nečujan]
David J. MALAN: Oh.
Dakle, ako sam izvaditi -
Dobro, da.
Dakle, ako sam ukloniti standardni I / O biblioteka je uključivanje gore
ovdje, a onda si rekao da sam riješi printf, dobiti
osloboditi od printf?
Da.
Ovo bi trebalo raditi, jer sam više ne koristite bilo - ups.
Jesam li samo ležati?
Oh, u redu.
To neće raditi zbog novog pogreške smo upravo uveden.
I ovo je malo više samorazumljivo.
>> U čemu je problem?
Neiskorišteni varijabla n.
Dakle, to je pogreška rezultat našeg nakon konfiguriran
Uređaj se osobito pedantan, stvarno vikati na
ti za svaku moguću pogrešku, čak i ako je to vrsta
ne-fatalna pogreška ovako - je li to doista tako velika
nositi da sam dodijeljen int, stavi broj u njega, a zatim
upravo učinio ništa s njom?
Dakle, funkcionalno, br.
To se neće prekinuti program.
To je samo glupo, zar ne?
Nema vrijednosti za što pitao za tog broja, pohranjeni
to u varijablu, ako ne ide ništa učiniti
s njim, da li ga ispisati ili ga spremiti.
Dakle, u ovom slučaju, zveka je priznati koliko i
to govori nekorištene varijabilne n.
>> Tako možemo popraviti, ako zaista želimo.
Ali opet, to nije dobro za programiranje sada.
Tako sam mogao to učiniti -
ići dolje, dopustite mi da jasan zaslon, napraviti matematiku.
To funkcionira.
Sada mogu pokrenuti moj program matematike, ima ulaz -
dobro, što je loše.
Vodi ulaz, i da je sve to ipak, u ovom slučaju.
>> Pa zapravo, pokušajmo jednom drugom kutu slučaj da smo
nije misliti ranije.
U tom slučaju - ovdje, vratimo se na onaj koji je
malo više user-friendly.
Pusti me natrag ovdje i pokrenuti učiniti math opet.
Joj, što sam učinio krivo?
Moram vratiti dalje.
Ok.
Sada smo se vratili u prvobitno stanje, gdje je sve
je nadam se dobro.
A sada, ako sam pokrenuti matematiku, 123 čini se da rade.
No, to zapravo i nije učinkovita dokaz, samo reci
ok, da radi.
789, koji radi.
Vrijeme podnijeti.
Budući da je drugi kutak slučajeva ovdje.
Niz nije stvarno nam puno problema upisom u
puno znakova.
No, što ako sam upisati u to?
Udaranje broj jedan puno, puno ovdje -
sve u redu, to je sve malo dosadno, pa idem
zaustaviti ovdje, a ja ću udariti Enter.
>> Što, dovraga, upravo dogodilo?
Dakle, to zapravo može biti objašnjeno.
Dakle, nije to to uzeti kao binarni?
Dobra misao, ali ne, to nije činjenica da ga je uzeo
kao binarno, jer doista, to je bio samo vrsta
slučajnost.
Možemo to učiniti opet.
Dakle, nema 2 u binarnom sustavu, koji je
vjerojatno dovoljno svejedno.
Upišite.
Dakle, to nije problem.
Što još?
Točno.
>> Dakle, mislim natrag na ono int zapravo jest.
To je 32 bita koji su kolektivno interpretirana
kao broj.
Ako imate 32 bita, što znači da svaki od bitova može biti
0 ili 1, 0 ili 1.
Dakle, to znači da postoje dvije mogućnosti za to malo,
dvije mogućnosti za to, dvije mogućnosti za to
malo - tako da je dva puta dva puta -
tako da je 2 do 32-snage je ukupan broj
permutacije nula i one ako imaju 32
rezerviranih mjesta, nula ili one, u ispred vas.
Dakle, ako imam dva do 32, Matematički, to je ono što?
Dakle, to je puno.
To je 4 milijarde kuna, dati ili uzeti.
I 4000000000 ne čini da se ono što je tiskana ovdje.
U stvari, to izgleda bliže dvije milijarde.
No, to nije slučajnost.
Činjenica da je računalo krivo protumačena moj veliki broj,
moj veliki niz one i onda se moj veliki nizom dvojke,
kao otprilike dvije milijarde, je objasnio kako?
Tu je kapa na int.
Tu je svakako najveća vrijednost koju mogu predstavljati.
No, to je obično 4000000000, zar ne?
Ako dvije do 32 je oko 4 milijarde kuna, da izgleda kao
da je najveći broj.
Dakle, ne ostatak, ali dobra misao.
Negativni brojevi.
Dakle, ako imate 4 milijarde mogućih stvari koje možete
predstavljaju s tim različitim permutacija od 32 0S i
1s, dobro, to stoji da je razlog da mi ljudi možda želite
predstavljaju ne samo pozitivne integers
ali negativni cijeli brojevi.
I doista, to je pretpostavka da je C čini.
Tako je s 32 bita, što može predstavljati grubo negativna 2
milijardi skroz do pozitivnog 2000000000.
I tako, u ovom slučaju, ono što smo stvarno vidjeli samo
rub kapacitet naših cijeli broj, a mi imamo, pa
govoriti, preplavila cijeli broj.
Pokušali smo nagurati više bitova u njemu nego što zapravo može stati.
Dakle, krajnji rezultat je da smo u suštini imaju sve 1 bita.
Mi smo zrcaljeno svim našim bitova na, mi smo pokušali da predstavljaju
Najveći broj moguće, ali to očito nije gotovo
dovoljno velika da predstavljaju dvije stvari sam upravo upisali u.
Da?
PUBLIKA: [nečujan]
>> David J. MALAN: Dobro pitanje.
Zašto ne možemo jednostavno predstavljaju da negativna
potpisati samo kao lik?
Tako smo apsolutno mogli, a mi onda mogao spasiti
dodatni zalogaj.
No, još uvijek si idući u morati zastupati tu crticu, a
to će vas koštati barem nešto,
vjerojatno malo.
Tako da, mogli bismo imati 32 bita koriste za naš broj, ali sada
moramo još malo koristi za naše crtica
simbol, znak minus.
Tako sada imamo 33-bitne vrijednosti, koje smo mogli učiniti, ali to je
samo ne onako kako je učinjeno.
Napravili smo presudu poziva godina, 32 bita je vrsta
jedinica mjere ovdje.
Tako ćemo koristiti jedan od tih bitova učinkovito
predstavljaju negativnosti, a 31 bita da predstavljaju broj.
Ostala pitanja?
U redu.
To je puno.
Zašto ne možemo ići naprijed i uzeti našu pet minuta pauze ovdje?
>> U redu.
Pa opet, ne prenaglasiti matematičke aplikacije
programiranja, Ajmo iščupati s ovog jednog primjera
prije nego što smo preseliti u drugim tvorevinama, samo zato što
će ilustrirati nekoliko zajedničkih točaka spoticanja na neke od
osnove kada je u pitanju pisanje programa.
U ovom slučaju, radi aritmetickih izraza koji imaju neke
Zanimljivo relevantnost sintakse.
>> Dakle, ovo je samo formula s kojima možemo pretvoriti
Temperature od fahrenheit do Celzija.
Ako se ne sjećate, to je samo formula.
Dakle, ako smo priključiti Fahrenheit vrijednosti od 32 stupnjeva, što je
smrzavanja, to će biti 32 minus 32 je 0, i doista,
0 u Celzija je također smrzavanja.
Tako brzo razum ček postoji - da je upoznat formula.
Pusti me preko aparata, ipak, i početi
pisanje programa koji se zove, kao što su, f2c; "Fahrenheit na
Celzija dot c ".
A gore na vrhu ovdje, ja ću krenuti s # include
stdio.h, i ja ću učiniti int main (void), a
opet, vratit ćemo se u budućnosti kao što int znači
postoji i ono void znači da postoji.
I sada neka mi ići naprijed i provoditi program koji
suštini to čini pretvorbe za nas.
>> Dakle printf, recimo, temperatura u Fahrenheit.
I onda neka mi ići naprijed i dobiti vrijednost od korisnika.
Kakve vrijednosti trebam dobiti od korisnika, ako želim
ih da mi daju temperaturu u Fahrenheit?
Da?
Što bi ti predlažeš?
Da.
Dakle plovak osjeća prilično razumno.
Mi smo, opet, samo nekoliko mogućnosti da
Vidjeli smo dosad.
Imamo stvari poput char, float, bračnim, int, long long,
bool, niz.
Dakle, tih, plovak se osjeća prilično razumno.
Mogli bismo koristiti dvostruko, pravo, jer ako doista želimo
predstavljaju ljudske temperaturu -
98,60000 -
možemo koristiti 64 bita za to, ali to se osjeća kao
overkill za temperature.
Dakle, neka je samo ići s pomičnim zarezom.
Sada trebam varijablu.
Samo držati jednostavne stvari, ja ću ga nazvati ž, ali ja
mogao jednako ispravno nazvati temperatura,
ali bilo je u redu.
Dakle plutaju F = GetFloat.
Čim sam sada odlučio koristiti GetFloat, iako sam
trebate napraviti jednu korekciju.
Da.
Dakle, moramo # include , inače prevodilac je
će vikati na nas.
Sada imam plovak, dopustite mi ići naprijed i učiniti
pretvorbe.
>> Tako je prvi, neka mi također dobiti u naviku ovdje od
komentirajući moj broj.
Pa opet, komentar je samo zapis na čovjeka koji je
nije dio programa po sebi, ali to jednom, te pomaže
razumjeti ono što si učinio sljedećeg jutra, ili sljedeći
mjesec, to pomaže vaš demonstrator razumiju ono što si učinio
ili ono što namjerava učiniti, tako da je
općenito vrlo dobra praksa.
Svakih nekoliko linija koda, napisati komentar
sami ili vaš kolega.
Dakle, ovdje ću reći, "Pitaj korisnika za temperaturu."
Ne mora biti potpuna rečenica, samo kratka fraza.
No, ideja komentirajući u C je da svaki od vaših
komentari bi vas osnažiti - ili, recimo, TF ili kolegu -
da obranim svoj program i znam točno što radi, a ne
toliko čitanja koda, ali čitajući komentare, koji
treba biti kratak i jasan.
U redu, tako da sada pusti me naprijed i reći, "Pretvorba
Celzijusa na Celzija. "Tako ću ići naprijed i učiniti,
recimo, plutaju c.
Mi ćemo zadržati Celzijevih kao pomičnim zarezom vrijednosti.
>> I neka mi se ubosti na to.
Formula je, opet, ovdje gore.
Kao 5/9 puta F minus 32.
Tako ćemo to učiniti.
Dakle, pet podijeljena 9, minus -
ups, ja sam to zabrljati gore već.
Times.
Dakle, 5/9 puta F minus 32.
Dakle, F minus 32, zarez.
A sada, ovdje dolje, ja ću ići naprijed
i kažu, ispisati rezultat.
I ovaj dio je jednostavno. Printf.
Kako mogu ići o ispisu ovo?
Pa, mogao bih reći: "To je broj u Celzija je% f \ n",
samo za neke estetike.
I što se onda vrijednost ne želim priključiti ovdje printf-a
Drugi argument?
Ok.
Dakle, samo c.
Tako ćemo početi s tim, a onda samo vrate 0.
Opet, to nema nikakve veze s matematikom.
To samo znači da je sve dobro.
>> Sada, je li to točno, ovaj program?
U redu.
Pa sam napravio neke pogreške.
Čak i ako nemate pojma što je programiranje, možete sortirati
od zaključiti leđima osnovnoj školi što
greške ovdje moglo biti.
Što je jedan od prvi?
PUBLIKA: [nečujan]
David J. MALAN: Da.
Tako smo nedostaje zagrade.
To je namjerno da sam zagrade u govoru
slajd ovdje, jer tu je zapravo taj pojam bi
poslovanja, ili prednost, pri čemu određene radnje -
množenje -
imaju veći obvezujuća, imaju veću prednost, nego stvari
kao zbrajanje ili oduzimanje.
Tako smo to učinili za godina samo da bi jasno točno
ono što matematička operacija bi trebalo biti učinjeno na prvom mjestu.
Tako sam vjerojatno bi trebao oponašati upravo to.
Inače, računalo vjerojatno će pokušati učiniti
nešto poput podjele pet do devet, zatim pomnožite F, onda oduzimati
32 od cijele stvari.
Koji nije, u stvari, ono što želimo učiniti.
Tako ćemo staviti u zagradu.
Dodajmo moje zagrade ovdje, zagrade ovdje.
Stavimo ovo ovdje.
Evo, upravo sam primijetio drugu pogrešku sam napravio na putu.
Da?
PUBLIKA: [nečujan]
>> David J. MALAN: Ah.
Dobro.
Tako smo zapravo imaju isti cijeli
Podjela problem od prije.
Ja ispraviti da, ajmo vidjeti što je simptom.
No, mi ćemo morati ispraviti jedan
druga pogreška.
Da?
PUBLIKA: [nečujan]
David J. MALAN: Da.
Dakle, glupa pogreška sam napravio, ali nevjerojatno važno.
Računalo se ne događa samo progledati kroz prste i pustiti
mi koristiti kapitala F, kada sam zapravo proglasio varijabla
kao mala f ovdje, u skladu osam.
Dakle, moram ispraviti u liniji 11 mom kapitalizaciji, koja
Trenutak prije bio glavni F greškom.
Što je ovdje?
Ukoliko se to mala kao dobro?
To bi trebao biti, ali to je slučajnost.
To% f nema nikakve veze s varijablom.
Dakle, samo da se super jasno ovdje, pusti me naprijed i
preimenovati ovu, ukratko, "temperaturu". Dopustite mi da preimenovati
ovo "temperatura". Dopustite mi da ne preimenovati to.
Jer, opet,% f globalno znači, "Krajnja vrijednost."
Ima veze s mojim varijable.
No, "temperatura" posvuda je samo malo razvučen,
tako da ću se vratiti na moj malim slovom "F" s.
>> Sada, neka mi ići naprijed dolje na moj prozor ovdje.
Napravite f2c -
što je, opet, proizvoljna sam ime
dao ovu datoteku.
Čini se da su sastavljeni.
Dopustite mi pokrenuti f2c.
Upišite.
Temperatura u Fahrenheit - ajmo napraviti jedan jednostavan.
32.
OK, ispraviti.
Ali, ako sam sada napraviti 212 za vrije -
osuditi.
U redu.
Dakle, očito ne ispravi, ako je vaš TF pokušava
najmanje dvije vrijednosti.
Dakle, ono što je ovdje problem?
Pa, već ste stavili prst na ono što je problem.
No, zašto je to tako?
Do ovdje, kad radim matematiku od 5 podijeljeno devet.
Dakle, konceptualno, to je savršeno točno.
Totalno skladu s formulom.
Ali računala samo učiniti upravo ono što
reci im da rade.
I ono što mi zapravo govorite računalo ovdje
podijeliti cijeli 5 Po integer 9
i dajte mi rezultat.
Problem je, međutim, kada se ne podjela koristeći podatke
vrste, izlaz je isti tip podataka kao ulaza.
I tako, ako su dva ulaza su obje Ints, izlaz ide
biti int.
I tako pet podijeljeno devet je točka nešto.
No, ono što je najbliži cijeli ukazati nešto?
Dakle, to je zapravo 0.
Dakle, kao što smo razgovarali u ponedjeljak, sve nakon decimale
točka dobiva skraćen.
To samo dobiva bačena.
Dakle, ovo je potpuna pogreška, jer sam možda i samo
pomnožiti sve po 0 ovdje.
>> Sada, ja mogu popraviti u nekoliko načina.
Ja mogu to učiniti.
5,0 podijeljeno 9,0.
Tehnički, ja uopće ne treba učiniti.
To čini dovoljno je samo napraviti jedan od brojeva float -
ili dvaput - stavljajući decimalnu točku ovdje.
Jer ono što se događa sada kada ste podijeliti cijeli broj po
float, ili double, računalo će se ostvariti
oh, jedna od njih je i precizniji.
Dopustite mi griješiti na strani daje vam više preciznosti nego
ste namjeravali.
Dakle, to će se pretvoriti u rezultat -
to će vratiti rezultat kao pomičnim zarezom vrijednosti kao dobro.
Tako da će raditi.
To bi raditi.
A tu je još jedan mehanizam koji ćemo vidjeti u
podrobnije sljedeći tjedan.
Možete zapravo, kao programer, recite računalo
zapravo liječiti jedan tip podataka kao
iako su bili drugi.
>> Tako sam zapravo mogao to učiniti.
U zagradama, ja mogu reći nešto poput (float), otvorenu
zagr, blizu zagr.
I to je ono što se zove "lijevanje." Opet, više
na ovoj sljedeći tjedan.
Ali to je samo programski način govori
računalo, da znam devet je cijeli ili dugo.
Znam da to nije Krajnja vrijednost.
Ali tretirati ga kao takvog svejedno.
Dakle, da se baci vrstu podataka znači pretvoriti
od jednog do drugog.
Iskreno, to je samo malo ružno, pa bih predložiti idemo
natrag na izvornom prijedlogu samo pretvaranje
ove stvari na pomičnim zarezom vrijednosti ručno.
Jer sada je samo super jasno što se događa, a
to nije sve što odvlače pažnju.
>> Dakle, ajmo sad vratiti u moj prozor terminala.
Napravite f2c.
Pusti me naprijed i pokrenuti ovo.
I, kao što je na stranu, ti dosadi tipkanja ove naredbe
i opet, shvatiti da računala, kao što su Linux ovdje,
imaju tendenciju da se prilično pametna.
I ako sam pogodio Gore, možemo proći kroz cijeli moj povijesti
naredbe, gore i dolje.
Dakle, u ovom slučaju ovdje, ja mogu samo otići do pokrenuti napraviti f2c.
Ja sam se vikao na, jer sam upravo to učinio drugi prije.
To je već do danas.
Dakle, sada mogu pokrenuti f2c opet.
Pokušajmo 32 celzijusa.
Sada pokušajmo 212 celzijusa.
>> Fuj.
Čini se da rade.
Sada, to je dobro, ali to se osjeća malo proizvoljna da
Ja sam pokazujući šest brojeva nakon decimalni bodova.
Točno?
Ako ste vremenske osoba na TV-u, ti si vrsta doofus
ako čitate temperaturu na
ovaj stupanj preciznosti.
Tako ćemo pojednostaviti ovaj.
Dakle, neka je zapravo ide ovdje, na moj printf.
I da, želim da plutaju.
Ali želim sada navesti preciznost.
I ja ću biti malo kratak.
Ja ću reći, daj mi jedan bod nakon decimalnog mjesta.
Dakle, umjesto da kažu% f, ja ću reći% .1 f.
A to samo znači mi dati jednu poziciju
nakon decimalne točke.
U redu.
Pokušajmo ovo ponovno.
Dopustite mi da ponovno pokrenuti ga nakon sastavljanja.
I sada sam upisati u 32, a ja sam se vratiti
jezgrovitija vrijednost.
I mogu upisati, sada, 212, i vratiti se na više jezgrovit
vrijednost kao dobro.
A tu je i druge stvari koje možete učiniti s printf.
Vi zapravo možete odrediti koliko je široko broj bi trebao biti.
Ako želite imati padding na njega, tako da možete desnom tipkom poravnati ili
lijevo-align sve svoje brojeve ili
pokušati centar stvari.
Dakle, shvatili postoje mali trikovi koje možete učiniti tamo.
No, oni su samo svode na format kodova,
kao da smo tamo.
>> Dakle, u smislu ovog izdanja prvenstva.
Ovo je vrlo dosadan stol proći kroz sustavno.
No, shvatili da su autori C dolazi do
pravila koja određuju koji operateri imaju veći
prednost, više obvezujuća snaga, nego drugima.
Dakle, dok je u osnovnoj školi, mi općenito znao da je
množenje i dijeljenje, onda zbrajanje i oduzimanje,
zatim neke druge stvari.
U svijetu programiranja, postoji mnogo
više popis stvari.
I to nije nešto vrijedno pamćenja sada.
Vi ćete dobiti acclimated na njega ne zadugo.
No, baš kao u osnovnoj školi, zagrade općenito riješiti
pitanja od prvenstva, čineći super jasna
računalo i ljudski podjednako što je namijenjen.
Dakle, razmislite o ovom samo malo varati list postoji.
No, većina od tih detalja nećemo doći do još neko vrijeme.
>> U redu.
Sada, neka je izgraditi i odmaknuti od tih glup malo
matematički primjeri.
Ipak koristiti iste osnove, ali početak
izražavajući sebe malo više poput Scratch.
Tako je u nule, imali smo ove Boolean izraza.
I na engleskom jeziku, logički izraz je ono?
Istina ili laž.
To je nešto što se procjenjuje na true ili false.
1 ili 0.
On ili off.
Što god želite to nazvati.
Sada u nule, slagalice izgledao ovako.
I to je kombinacija, na dnu tamo, od tri
slagalice.
Jedan zajedno -
nešto što ima prazan i prazan.
A onda dvije Boolean izraza unutar nje.
Tako možete gnijezdo Boolean izraza da biste dobili više
komplicirano Boolean izraza.
Na primjer, ako je subota, i to je lijepo
vrijeme, a zatim otići vani.
Ili nešto proizvoljno kao što je to.
Tako možete pridružiti Boolean izraza da se s
veći istina vrijednost, čiji odgovor se temelji
na one manje.
>> Sada, u C, srećom, to je mapiranje
zapravo prilično jednostavna.
Zagrade pomoći kako bi se stvari jasno ovdje.
&& Je ono što znači "i". Dakle, to je kako
idemo pretvoriti one blokove od nule do C.
A za uvjete koje smo vidjeli u nule, na lijevoj ruci
strana tamo, ja ih mogu slagati slično u C. Ako je x manje
od y, onda to učinite.
Inače, ako je x veći od y, onda to učinite.
Inače logično moraju biti jednaki, tako kažu
da su jednaki.
Dakle, sada možemo početi graditi ove stvari.
>> Tako ćemo napraviti primjer.
Dopustite mi otvoriti datoteku koja je na stazi stranicama tog
Napisao sam unaprijed.
To se zove nonswitch.c.
A vidjet ćemo zašto je u samo trenutak.
Dakle, u ovoj datoteci - nonswitch.c--
prvi shvatili da postoji cijela hrpa
komentari na vrhu.
To je jednostavno objašnjavajući naziv datoteke, što je
ne, i tako dalje.
I to očito pokazuje korištenje boolean I-ing -
conjoining dva izraza.
>> Dakle, neka je vidjeti kako ovaj program radi.
Mogu uključiti svoje dvije datoteke, cs50.h i stdio.h.
Ako sam se pomaknite prema dolje, sada, na programu, to je malo duže
nego smo prije pisao, ali prilično čitljiv.
Tako sam prvi ispis za korisnika, na liniji 18,
"Daj mi cijeli broj između 1 i 10". Tako
da je tamo.
Sada sam dobiti cijeli broj.
No, shvatili da GetInt - prilično jednostavna.
To samo ide da biste dobili int.
To će osigurati da ne dobijete int, a ne
niz ili plovak.
No, to se neće učiniti bilo kakve granične provjere.
To se neće filtrirati brojevi biti između
određeni asortiman.
Dakle, moramo provesti da sebi.
Dakle, baš kao u nule, gdje sam mogao napraviti spoj između
dva izraza, mogu to učiniti u C kako slijedi.
Ako je n veći ili jednak 1, a n je manje od te
ili jednak 3, idem na samom samovoljno odluci da
broj se mali broj.
Samo radi priopćenju.
Inače, ako je n između 4 i 6, print "Vi odabrali medij
broj. "Jer ako je n između 7 i 10, ispis" Odabrali
Veliki broj. "Else print" Vi pokupiti nevažeći broj. "
Zato je logično da slijedi ako smo
iscrpljeni naš asortiman.
>> Dakle, shvatite to nije baš kako smo pisati ili veće od
jednaka u math class.
Točno?
Obično ga izvući ovako, s linije ispod nje.
No, ne postoji takva tipka na tipkovnici.
Tako simbol u C za izražavanje veće ili
jednaka je dva lika, i simbol za manje od
ili jednak je dva znaka kao dobro.
U redu.
Dakle, ako sam pokrenuti ovaj program, vjerojatno možete pogoditi što je to
će učiniti.
Ako sam ići naprijed i učiniti nonswitch, Enter.
A onda pokrenuti nonswitch.
Daj mi broj između 1 i 10.
Ja ću mu dati 11.
Podigao sam nevažeći broj.
Dopustite mi da pokušam broj tri.
Uzela sam mali broj.
Dakle prilično jednostavan tamo.
>> Što ako želim promijeniti ponašanje ovog programa i
učiniti nešto malo drugačije, umjesto?
Pusti me naprijed i reći ovo.
Dopustite mi da riješi sve ovo.
I dopustite mi da kažem, ako (n == 42).
I onda ću ići naprijed i reći print "Vi pokupila
pravi odgovor. "Inače ćemo ići naprijed i reći,
printf ("Odabrali
pogrešan odgovor ");. Ok.
Samo zato.
>> Sada, nekoliko bodova možemo napraviti ovdje.
Jedan od njih, nisam upišite simbol koji mislite da bi je
najrazumnija.
Kad želim provjeriti jednakost, ispada da ne koristite
znak jednakosti.
Umjesto toga koristite jednak znak jednakosti.
A zašto bi to moglo biti, samo intuitivno?
Da.
PUBLIKA: [nečujan]
David J. MALAN: Točno.
Znak jednakosti već se koristi za dodjelu.
Netko nije stvarno mislite da je ovo kroz.
I tako sada, kada je u pitanju ravnopravnost testiranja, moramo
biti jasniji, i reći jednak jednak.
Vrlo česta pogreška je da to učinite.
I, ako je u uredovno vrijeme ili negdje sljedeći tjedan ili u
Sljedeći dva tjedna učiniti nešto ovako, a zatim
boriti s njim za 10, 20 minuta pokušavajući shvatiti
ono prokleto bug je, shvatite da ste jedan od onih
ljudi koji su tu pogrešku.
Dakle, super jednostavan za napraviti.
No, cilj je da se sada odbiti tu pogrešku.
To bi moglo procijeniti, jer ono što je to zapravo govori?
Ako je n dobiva 42.
Tako je glagol ljudi koriste, verbalno, izraziti
Pojam zadatka je "dobiva." Dakle, ako je n dobiva 42.
Dakle, to znači dodijeliti 42 do n.
Sada imam Boolean izraza u zagradama,
unutar ovog stanja, vrijednost koja je 42.
Točno?
Jer ako ga ocjenjuje iznutra prema van, ukupne
Odgovor je, sada je 42.
>> Dakle, ako sam pitao vas pitanje, "ako (42)," što je
da stvarno govoriš?
Pa, Boolean izraza može biti samo true ili false.
1 ili 0.
On ili off.
Tako mi se čini da imaju corner slučaj ovdje, gdje svi
Odjednom, govorim "ako (42)". To nije Boolean vrijednost.
Dakle, ono što rade računala, iako je to zapravo izjednačava
ništa to nije 0 tumači da bi bilo istinito.
1.
Na.
Oni su svi funkcionalno ekvivalentne.
Samo vrijednost 0, ili ključna pogrešna, jer ćemo
na kraju vidjeti, je zapravo lažna.
Dakle, "ako (42)" zapravo bi bilo istinito, jer je to od nule.
Dakle, da budemo precizniji ovdje, Boolean vrijednost stvarno nije tako
puno istinita ili lažna, ali za to
slučaju, ako je 0 ili od nule.
Dakle, netočno ili ne lažna.
I to nam omogućuje da obuhvati sve više
mogućnosti u zagradi izraza.
Dakle, trebamo, uvijek je tako pažljivo, reći ovo -
if (n == 42).
Jednostavno zato moramo odrediti test jednakosti,
ne dodjeljivanje vrijednosti.
>> Što je još napomenuti ovdje?
Ove vitičastim zagradama su zapravo i nije potrebno.
Ja sam ih rade samo da bi bili NIT-picky ovdje.
No, kada imate uvjet da ima samo jedan redak
broj, kao pogodnost, programeri ne treba koristiti
su vitičastih zagrada.
Dovoljno je samo alineji, iz estetskih razloga, a
zatim napisati svoju liniju koda.
Tek kada želite pisati dvije linije koda - za
Primjerice, drugi printf ("Bok!"). Ako želite učiniti
da, to je slomljen.
Možete alineje sve što želite, ali je činjenica da imate
upisali dvije linije koda bez vitičastih zagrada
znači da je ovaj program ne bi pokrenuti ispravno, ili ukoliko bi
ni sastaviti ispravno.
Dakle, za sada, da budem iskren, mislim da je najbolji navika je samo
koristiti vitičastih zagrada, i vidjet ćete da oni čine
super jasno što se događa.
>> Također, kao stranu - pogotovo ako ste među onima koji koriste
preporučene knjige ili izvori online -
shvatiti da postoji taj pojam u stilu
programiranje.
A neki ljudi zapravo vole staviti kovrčavu braće
ovamo na liniji.
Neki ljudi više vole raditi smiješne stvari,
sviđa stavite ih ovdje.
Nema krivo odgovor kada je u pitanju
stil, ali to je pogrešno.
No, neki ljudi to učiniti.
[Smijeh]
David J. MALAN: Pa sam spomenuo to sada, jednostavno zato što su
ste pročitali na stvari u knjigama ili online, ti si idući u dobiti
različite poruke iz različitih nastavnika i
različiti autori.
I samo shvatiti da, funkcionalno, oni su
općenito odgovara, ali budite dosljedni.
Dakle, u ovom slučaju, mi ćemo standardizirati na kovrčava
aparatić podstava gore na lijevoj strani.
>> U redu.
Dakle, idemo naprijed i sada pokrenuti to, i vidjeti što se događa
s ovim programom.
Make nonswitch.
Onda trčanje nonswitch.
Daj mi cijeli broj između 0 i - tako da nije relevantno
više, ali ja samo idem samovoljno reći 42.
I ja sam odabrao pravi odgovor.
Pa sad, ajmo zapravo se to u nekom drugom smjeru.
Ispada da je neka druga sintaksa smo
možete koristiti u programu.
Evo novi komad sintakse koja je funkcionalno isti,
ali samo uvodi još jedan način izražavanja sebe.
Dakle, to je ono što se zove "Naredba switch." A
Naredba switch djeluje kako slijedi.
To traje, u zagradama, vrijednost koju želite
"Prekidač" na.
Želite da se ponašaju drugačije na temelju njegove vrijednosti.
Dakle, to znači prekidač na vrijednost n.
A što to znači?
Pa, ako n je 1 ili 2 ili 3, naprijed i ispis "You
pokupila veliki broj ", a onda razbiti.
Razlog za break je da način na koji funkcionira C je kao
Čim se pronađe predmet koji odgovara, ona počinje izvršenja
sve kod ispod njega.
Dakle, ako imam jednu liniju koda, kao što sam to ovdje na liniji 27, to
dobiva pogubili.
Ako sam dodati još jednu liniju ovdje, to dobiva pogubili.
Druga linija ovdje, to dobiva pogubili.
Program zaustavlja samo izvršava ono što je ispod
primjenjivo slučaj gubitka kad sam izričito
reći "break". Dakle, u redu.
Desno, u ovom slučaju, kao rezultat.
Slučaj 4 ili 5 ili 6, na sličan način, ide
ispisati poruku.
U ovom slučaju, srednje broj.
Break.
Slučaj 7, 8, 9, 10, to će ispisati "Ti pokupio veliki
broj. "Break.
A tu je i doslovno ključna zove "default"
da je učinkovito kao "drugi" izgraditi.
Dakle, nova sintaksa, ali intelektualno,
ništa at svi novi ovdje.
To je baš kao Scratch.
Ako, drugo ako drugdje, ako, recimo blok.
>> Tako da je uključen verzija ovog programa.
Ali primijetite da smo to učinili s brojevima ovdje.
Dopustite mi otvoriti drugi verziju, samo da pokazuju
nešto malo više betona.
Dakle, ovdje imamo ocjene umjesto.
Ispada možete koristiti prekidače ne samo na integers, ali na
likovi.
Nije u svim vrstama podataka, ali barem na likovima.
Dakle ovdje smo mogli učiniti nešto slično, ako je vrijednost C koji
korisnik upisao u, u skladu 19, pomoću getchar funkciju,
je grad ili mala slova, ajmo ga tumače kao razred,
i kažu da bere izvrsnu ocjenu.
A dolje uz switch, imamo druge
slučajevi za "B" i "C", a s., i tako dalje.
Ali ajmo sad zaokružuju jednu drugu stvar.
A opet, nekako leti kroz
neke od tih primjera.
No, to je stvarno tako da ih možemo primijeniti, sada -
ili stvarno, samo ih prevesti sada -
na C.
>> Pa neka mi ići naprijed i učiniti.
Idem otvoriti novu datoteku.
I ja ću to učiniti uključuju .
A onda ću to učiniti int main (void).
Dopustite mi da spasi ovu sliku kao loop.c.
Baš kao primjer.
I ja ću ići naprijed i učiniti sljedeće.
Želim napisati vrlo zahtjevan program.
Tako 10.
Ajmo to učiniti.
9.
U redu.
Čim počnete raditi to u programiranju, ti si
vjerojatno radiš nešto krivo.
No, mi ćemo početi tamo ionako.
Ups.
To je zapravo krivo.
7.
6.
5.
4.
Ništa se neće dogoditi kad dođemo do 0.
3.
2.
1.
Ok.
0.
Izbriši.
>> U redu.
Dakle, povratak 0.
Dakle, ovaj program očito će učiniti ono što je vrlo
dosadnog kaže da će to učiniti.
To će ispisati sve one
vrijednosti, od vrha do dna.
Pa neka mi to napraviti petlju.
A onda - ups.
Make petlju.
Bio sam u krivu imeniku.
I sada neka mi pokrenuti petlju.
Upišite.
Sjajno.
Vrlo lijep.
Nice, dugo program.
>> U redu, ali sada hajdemo to učiniti bolje.
Baš kao u nule, kada ste počeli koristiti loop
izgradnju, umjesto samo kopirati i zalijepiti sve
slagalice, neka mi predstaviti ovu stvar.
Dakle, u C, postoje razne petlje konstrukti,
od kojih jedna izgleda ovako.
"Za" petlja ima tri stvari, odvojene dvije zarezom.
I onda, unutar tijela petlje, da tako kažemo -
stvari unutar od vitičastih zagrada -
možemo nešto učiniti opet i opet.
Dakle, ono što sam ovdje na zaslonu, to je
doslovno samo komentar.
/ / Ovdje znači dolazi komentar.
To nije broj.
Ovo je samo engleski opis, za mene, čovjeka.
>> Dakle inicijalizacije, uvjeti i ažuriranja.
Pa, neka je vidjeti kako se to radi.
To mi omogućuje da prepisati ovaj program kako slijedi.
Za -
tako da ovdje dolazi moj petlju -
int ja -
ovdje dolazi varijabla zove "ja" -
dobiva inicijaliziraju 10.
Dakle, tu je moj inicijalizacije.
Želim napraviti ovu petlju tako dugo kao "ja" ili veći
jednaka 0.
I na svakoj iteraciji ove petlje, želim
da mi je činiti -.
Tako smo vidjeli + + u ponedjeljak.
- Je suprotno.
To decrements vrijednost do 1..
Unutar ove petlje, želim nešto napraviti.
Dakle, ja ću reći nešto poput printf.
Ja ne želim reći 10 sada, jer je to očito samo
će ispisati istu vrijednost.
Što želim ispisati umjesto toga, vjerojatno?
Da.
Dakle, "ja". Dakle,% d, ja.
>> Dakle, ja ću ukrasti jednu od tih ideja od ranije -
ovo zamjena za oblikovanje kodova -
i onda ovdje dolje, na dnu, ja ću se vratiti 0, samo
za dobru mjeru.
Ali sada, imam više jezgrovit program.
To je samo nekoliko redaka, a ne nekih 10 ili 11 linija.
Pusti me da moj upit ovdje dolje.
Remake petlja.
Repriza petlju.
A čini se da se ista.
Sada, program nije više zanimljiv.
Ali sada mogu upisati nešto poput ovoga.
Ja to ne mogu promijeniti na 100.
I onda mogu rekompiliranje moj program.
I onda ja mogu ponovno pokrenuti moj program.
I sada to ide super brzo na današnjim računalima.
No, tu imam -
i zapravo, moj vraćati tampon ne
čak idu tako daleko.
Tu ćemo ići.
Dakle, tu imamo sve sto.
No, to je lako napraviti greške ovdje.
Što će biti očekivano ponašanje, ako sam
slučajno to učiniti?
Dakle, ona se osjeća kao beskonačna.
Dakle, neka je vidjeti ako je računalo ponaša.
>> Pa neka mi ići naprijed i učiniti petlju.
I neka mi pokrenuti petlju.
Dakle, ajmo se vratiti na to u samo jednom trenutku.
Mi ćemo pustiti da radi.
Zato što bismo trebali brojati do, minimalno?
Vjerojatno barem dvije milijarde, ako imamo da su mnoge bitova, a
mi smo koristeći pozitivne vrijednosti.
Dakle, neka je skočiti natrag ovdje.
Osim ove vrste petlji, imamo ono što se zove dok
petlje. Dakle, baš kao u nule, što je zauvijek
blokovi, a imali ste Ponovljeni blokova.
Isto tako, u C, imate samo druge načine
od sebe izražavanje.
Dakle, imate taj pojam while petlje koji vam omogućuje da
izraziti sebe malo drugačije.
I onda imate nešto što se zove učiniti-while petlja,
koji djeluje nešto drugačije, kao dobro.
A mi ćemo zafrkavati njih, osim tijekom vremena.
>> Ali neka je pogledati ovo posljednja ovdje.
Ako idemo u -
još uvijek traje.
To je prilično beskonačna.
Tako da me pusti na pozitivan i pokazati kako možemo zapravo
dr korisničkog unosa malo učinkovitije.
To je prilično kratka programa.
I ovdje imamo, u glavnom, int n deklaracije.
Tako mi dati varijablu nazvanu n. Sada, doslovno sam reći
"Učiniti." A onda sam dobio otvorenu kovrčava
braće, blizu kovrčava braće.
A onda primijetite, odmah nakon toga, kaže, dok n
je manje od 1.
Dakle, primijetite da su ove linije -
19-24 -
sastaviti kolektivno učiniti-while petlja.
I opet, nova sintaksa, nije nova ideja.
To je samo još jedan način petlje, sintaktički.
Pa što to učiniti?
Učinite sljedeće dok je n manji od 1.
Dakle, ono što želim učiniti?
Zahtijevam da li mi dati pozitivan cijeli broj.
Tada sam zapravo pokušati dobiti cijeli od korisnika.
No, u smislu kako bi operacija ovdje, jer
dok je uvjet ovdje, onda sam ću provjeriti, je n
manji od 1?
Dakle, pretpostavimo da korisnik -
nakon što je zahtijevao na ovaj način -
vrste u vrijednosti 0.
To stanje će biti istinita ili lažna?
Pa, to je zapravo događa da bi bilo istinito.
Budući n je 0, a 0 je manji od 1.
Dakle, što to znači?
Učinite to opet.
Samo jednom da je uvjet procjenjuje na FALSE.
Ako sam upisati 42.
Pa ne, 42 ne manje od 1.
Stoga ova petlja je učinio izvršenja.
I tako u tom trenutku, program će reći, hvala za
42, u ovom slučaju.
Sada da ste ovaj način izražavanje sebe -
Ne smijemo čekati da se to završi.
To će potrajati neko vrijeme.
Da bi se nastavio sljedeći put, možda.
>> Ali sada, imate mogućnost nadamo da razumiju
Malo monstrum humor.
Isprike.
To nije reprezentativan za humor u informatici
svijet, ali to je slatka.
[Smijeh] Idemo na kraju na toj bilješci.
A mi ćemo vas vidjeti u ponedjeljak.
[Pljesak]