[Powered by Google Translate] DAVID MALAN: Ovo je CS50, a to je početak tjedna 1.
Ono što smo mislili da ćemo učiniti danas je pogledati natrag na
nešto što mnogi od vas vjerojatno su hodali prošlost za neke
Vrijeme sada i može izgledati malo upoznati.
To je stvar ovdje, ovo je, naravno, u -
PUBLIKA: Znanost.
DAVID MALAN: Znanost centar.
Dakle, to je zapravo jedan od prvih računala
Povratak iz 1940.
To je bio jedan od prvih elektromehaničkih računala
koja je bila sposobna osobito dugo,
self-pretrpio proračuni, a ono što mi zapravo vidimo u
znanost centar je samo mali dio ovoga.
Ono što smo mislili da ćemo tada učiniti je pogledati unatrag na videu
koji je napravio prije nekog vremena, uvođenjem to
stvar na svijetu.
A vi ćete vidjeti iz glazbe i glasa koji doista onih
bili su vrlo sretni puta.
>> [Video reprodukciju]
-Trijumf matematičke i mehaničke vještine je to
veliki novi automatski kalkulator na Sveučilištu Harvard.
Zamršeno problemi u matematici, staviti preko
stroj u kodiranom obliku na vrpci, točno se riješiti u
minuta frakcija vrijeme potrebno za čovjeka
Izračun.
Dizajniran kako bi ubrzali sve oblike matematička i znanstvena
Istraživanje, div mehanički mozak će raditi za United
Države mornarice do rata kraja.
>> DAVID MALAN: Dakle, ono što možda ne znate je da je u
taj isti uređaj koji pojam svi mi sada uzeti prilično
zdravo za gotovo je skovao, a to je bug.
Dakle, jedan od inženjera koji rade u ovom računalu
doslovno pronašao mali moljac u stroju koji je rezultirao
u nekim pogrešnim izračunima.
I kao što se priča da je moljac je sniman na ovom dnevniku
Časopis ovdje, natrag od 9. rujna u 1940 i nešto,
i tako je rođen za svijet pojam "bug".
Dakle, ubuduće ćemo razmotriti bugovi da se bilo kakve pogreške u
programi, hoće li čovjek napravio ili, u ovom slučaju, insekti.
>> Dakle, nekoliko najavama, kao što smo nastavili.
Dakle CS50 ima tradiciju nudeći ručkove od sorti na
većina Petkom tijekom semestra, gdje smo uzeti 30 do
40 studenata na vatru i led na trgu za povremeni
ćaskati, razgovor o računalnoj znanosti,
razgovarati o budućnosti.
Pozivamo alumni i prijatelje iz industrije za razgovor gore
studenti kao dobro.
Stvarno prema kraju izrade što je prilično velika klasa
sve više intimni, barem jednom u dok je za
podskupovi studenata.
Dakle, ako želite da nam se pridružite ovaj petak, 13:15, idite na
CS50.net/lunch na RSVP.
A mi ćemo to učiniti recurringly, tako da ne brinite ako niste
među prvih 30 ili tako ovaj tjedan.
>> Dakle, pisar bilješke.
Riječ o sredstvima koja će sada početi biti dostupan
učenicima u razredu.
Tako da vaši šefovi ne moraju biti dolje tijekom predavanja
škrabotine dolje sve kažem i tako dalje, što nam je činiti
umjesto toga osigurati iz nastavnog osoblja
kanonski set nota.
Dakle, imamo jednu od naših nastavnih bližnjima, Andrew Sellergren,
koji sjeda svaki tjedan, pregled videa, a zatim
zapisuje ono što mi mislimo da je prilično
mjerodavan set nota.
A Andrije vole, također, stavljanjem snarky fusnote
dno.
Dakle, nadamo se da ćete uživati ​​u ove kao referentna knjiga za
zabavno, a također, dolaze kviz vrijeme, kao prilika za pregled
Što se dogodilo u pojedinim predavanjima.
Dakle, oni su povezani na predavanja stranici.
>> Problem set 0, u međuvremenu, je van.
I u pogledu raspoloživih resursa za vas -
prohod.
Milo vodio prvi petak.
To je sniman, staviti online do subote.
I tako shvatiti, ako ste zapravo nisu sigurni gdje početi,
za ovo ili budućnost p-seta, uvijek se najprije
prohod ili videa istih.
Rezova je u tijeku, a na cs50.net/section je mjesto gdje ćete
treba dostaviti svoje preferencije, ako niste
, već od danas.
Zbog sekcije će početi ovaj dolazak nedjelja, ponedjeljak,
i utorak.
Mi radimo dijelove tih tri dana, svaki tjedan
semestar za najveći dio.
I mi također uvesti, opet, različite pjesme.
Tako ćete biti pitani na ovom rezova obliku, ako
nisu ga vidjeli već, ako ste među onima manje
ugodno, ugodnije, ili negdje između.
A ako ste vrsta na ogradi, uglavnom negdje u
između je ono što većina studenata završiti provjeru.
Radno vrijeme početi večeras.
>> Dakle, Scratch je prilično niska ključ, iako je sasvim prirodno
pokrenuti u raznim bugova, ili biti neizvjesno kako da
provesti nešto.
Dakle, shvatili da ćemo početi radno vrijeme ovaj tjedan.
Oni će biti na Annenberg ponedjeljak, utorak, srijeda,
Četvrtak, 20:00-23:00 tijekom pauze mozga.
Gornja classmen mogu dobiti, a ako ste ikada imali problema dobivanje
u vrata, jer oni će se očitavanjem, samo razgovarati svoj put
i objasniti da ste s CS50.
Obično 20-30 od nas na osoblje će biti tu da pomogne
ti jedan na jedan.
>> Po dolasku ideja je ovo: vi ćete donijeti svoj laptop,
imat ćete svoj punjač, ​​mi ćemo imati dodatni kabele napajanja,
posebno uz južni zid Annenberg gdje
postoji mnogo električnih utičnica.
A glavna polazna točka za uredski sata Q & A je da ide
cs50.net/discuss i postavljati
Vaše pitanje tamo.
I da ga označiti s pset 0 ili pset 1, bez obzira na tjedan
bi se moglo dogoditi da bude.
A onda ono što ćemo učiniti je imati tablicu nastavnih bližnjima
i naravno asistenti, općenito 8 ili 10 ili tako od nas,
prolazi kroz, držanje budnim okom na brodu, a
plucking off pitanja stvarno tako brzo kao što možemo,
ti odnosi povezanih postova, ako niste našli one
vi, online reference, prema potrebi.
A onda, ako postoje problemi, kao što neminovno
će biti, ili je to samo čini više smisla da sjednu jedan na jedan,
raditi kroz probleme s nekim.
>> Ili ste samo doći u uredovno vrijeme stvarno
potrebe da razmišljanje.
Vi ne želite ići kroz elektroničkom obliku,
stvarno želite upoznati s nekim.
Komunicirajte da za nas, a što će se dogoditi kada je vaše
Pitanje je vidio član osoblja, a mi
odrediti, Yup, to bi trebalo biti poslana na jedan od 20 ili
30 reprezentativci ovdje lokalno, vidjet ćete na vrhu lijevo je ovo
Malo Unesite Queue gumb počne treptati na cs50.net /
raspravljati.
A to vam govori da ste sada su pozvani, pa
govoriti, ući u red.
A ako kliknete gumb, vaše ime će se pojaviti na
ipad da CS50 greeter, jedan od tečaja u glavama, neće
se drži na samom ulazu u Annenberg, koji će zatim
vidjeti kao što je prikazano ovdje, studenti koji imaju pitanja o
lijevo, osoblje članovi koji su prisutni na desnoj strani.
A s klikom lijevo i desno, vaš web preglednik će
početi treptati čim, na primjer, profesor McGonnagal
je spreman da vas vidim na određenom stolu u Annenberg.
>> Tako smo napravili neke od ove prošle godine.
Mi smo digne radno vrijeme i
ponovno provoditi mnogo softvera.
Dakle, shvatili da će to biti zagrijati ovaj tjedan.
Ali isto tako shvatiti previše, u posljednjih godina, kao što ste možda čuli
od prijatelja, radno vrijeme je od 50 do doista
150 učenika odjednom.
I to je jednostavno nije moguće za nas da obrađuju da
učinkovito, jedan na jedan, tijekom večeri.
I tako ono što smo stvarno idući u pokušati učiniti ove godine je
kapitalizirati na činjenicu da je puno pitanja su
česta i često može biti bolje odgovorio
asinkrono.
Tako možete sortirati think kroz osoblja odgovor,
i možemo misliti kroz koda, bez grijani
tlak nužno bore
kroz to rame uz rame.
Tako smo procijenili da je otprilike trećina ili polovica pitanja
će biti otpremljen u osobi, a mi ćemo pokušati oteti off kao
koliko pola ili više elektronski,
tijekom radnog vremena.
A mi ćemo nastaviti koristiti Raspravljajte
tijekom tjedna, kao dobro.
>> I na kraju, shvatili da je ovaj tečaj može uzeti pass / fail.
Dakle, ako ste na ogradi ili samo mislite da ste stvarno
ne siguran ako ovaj je svijet za vas, ili je to stvarno
prilično stran vas, shvatite da je to prekrasan način
dobivanjem neke povjerenje s kojima se korak u
klase, kao što sam učinio iskreno, godina.
I onda imaju pet tjedana sortirati figure out za
sami, ako želite ostati proći / ne, prebacite na slovo
razreda, ili slično.
A obično ono što prođe / ne ne, mislim, za studente je
da, ako ste stavili u tom 10 sati, 20 sati, bez obzira na to
možda na neke probleme, a vi ste lupanje glavom
uza zid,
i stvarno jednostavno ne mogu loviti nešto dolje, a vi
ima toliko drugih stvari koje trebate učiniti, iskreno, što sam
mislim proći / ne, to traje rub off
situacije kao što je to.
Gdje ste uzeli stvar 90% na putu.
Znate, to nije sasvim savršen.
Ali imaš puno od njega, svejedno.
Dakle, razmislite proći / ne kao što vam daje da
mentalni model, možda.
>> U redu, tako je prošlog tjedna smo zaronili u nule, a mi
govorio o programiranju na prilično visokom grafičkom razini.
I danas smo napraviti prijelaz na jeziku
zove C, niže razine programski jezik na vrhu
koje mnogi moderni jezici su sada izgradili, uključujući i neke
od onih ćemo koristiti prema termina kraja.
I sintaktički, što izgledaju
Sve je vrlo sličan.
Pa krenimo napraviti taj prijelaz ovdje.
Dakle, ovo je program prošlog tjedna da je najjednostavniji
Hello World programa.
To jednostavno ispisati na svijetu ekrana Hello, s
Malo govor mjehurić izlazili mačka.
Pa, ako ćemo odmah početi prevesti ovo na drugu
jezik, shvatiti da su ideje danas i srijedu
su identični, ali sintaksa počinje mijenjati.
Dakle, dok je prošlog tjedna imali smo, kada je zelena zastava kliknuli, kažu
halo svijet.
Danas ćemo imati int, glavni, praznina, printf,
povratak, s nekim drugim sintakse u tu kao dobro.
Kovrčava proteza i zagrade, i citati, i sitnica.
No, shvatili da je osnovna ideja ovdje je tisak,
i na kraju činjenica da glavni sada će biti
sinonim za pokretanje programa.
Glavni će biti tamo gdje zelena zastava slatkiš stvari off.
>> Dakle, sada idemo zafrkavati osim neke od građevnih blokova ovdje
prije nego što smo zaroniti u nekim konkretnim primjerima.
Tako smo nazvali ovu izjavu prošlog tjedna, pri čemu je samo
upute.
Učinite to - u ovom slučaju, pozdravi svijet.
Pa u C, ako gledamo samo toj liniji, to je, kako smo
će početi izražavajući taj određeni dio slagalice:
printf ("Hello World");.
A sada ćemo zafrkavati njih, osim sve više i više vremena,
ali shvatite da je obrazac ovdje.
Dakle, mi smo tu stvar zvanu printf, što je
suštini analogan riječi reći.
To je ono što će učiniti.
Printf, i f ovdje znači "formatiran".
Dakle, to samo znači da možete umetnuti
razni estetski detalj.
Dakle, citat završiti citat je početak onoga što ćemo
početi zovete niz.
Riječ, fraza, rečenica.
Niz u programskom jeziku je niz nula
ili više znakova.
Dakle h-e-l-l-o, zarez, i tako dalje je,
citat završiti citat, niz.
A sada backslash n, malo sintaktički čudno, ali mi
već definirano da je prošli tjedan što znači što?
To je samo novi redak.
To je samo način prenošenja na računalo želite
ekvivalent udarca Unesite postoji, ali ne
želite da se zapravo pogodio Unesite i stoga zabrljati sve
oblikovanje svog stvarnog programa.
Sada zagrade priložiti ovaj niz, otvorena zagrada i
blizu paren, a unutar koje je naš niz.
Budući da je zato u C, a drugi programski
jezici, stvari printf like uzeti argumente, ili se
parametri.
>> Dakle, početi razmišljati sada ove ljubičaste Say bloka kao
funkciju, kao i metode, kao postupak.
Vi stvarno možete ga nazvati kako god želite, za sada, ali
to je svojevrsni minijaturni programu koji se samo čini jedan
stvar, u jednoj liniji, ne manje.
Dakle printf je ono što ćemo početi zovete
funkcija, a funkcija nešto učiniti - u ovom slučaju
ispisuje formatiran string na zaslonu -
ali funkcionira također uzeti argumente ili parametre.
I argumenata ili parametara, hvala ti, što znači
da njihovo ponašanje može utjecati ono što prođe u
unutar zagrada.
Dakle, u ovom slučaju, printf potrebe se javi što za ispis, a mi
samo proći, u navodnicima ovdje, niz koji smo
zapravo želite ispisati.
I zarez na samom kraju ove linije je samo
povijesni neugodnost čemu na kraju većine linija koda,
stavite zarez bi super jasno na računalo
da je ova linija koda završava ovdje.
Sada je to dobro, jer kao što ćemo vidjeti, kao programa dobiti više
kompleks, zarez, učinit će super jasno da nas ljudi,
i računalo, gdje linije koda početka i kraja.
Shvatite da neki jezici nemaju neke
od tih istih detalja.
A u stvari, u JavaScriptu, ne trebate uvijek nešto
poput zarezom.
No, više o tome kako doći.
>> Dakle petlje.
Imali smo nešto ovako, vrlo intuitivno, očito, ne
nešto opet i opet i opet.
Sviđa mi se stavlja na čarapama ili rekavši hello, u ovom slučaju.
Pa, počevši danas u C, mogli bismo izraziti ovu Scratch
blokirati jer dok (istina) printf ("Hello World").
Dakle, primijetit ćemo počinju graditi na doslovno slagalice
komad od prije.
Imamo istu ljubičastu blok, ali to je unutar toga
zagrade Beskonačno blok, a najbolji način za prevođenje koji
na C je sljedeća.
Nema Beskonačno ključna riječ.
Ne samo upišite f-O-R-e-v-e-r u C.
Dakle najbliži analogne dok.
>> Sada, dok je (istina) čini malo glupo jer ne vrijednost
istinske ikada promijeniti?
Vjerojatno ne.
To je kao da kažete, dok je jedan, dok je na, dok je istina.
To je sve ista stvar, istina je uvijek slučaj.
Dakle, ovo petlja zapravo izaziva Kakav petlju?
Samo beskonačna petlja, desno.
Zauvijek petlja ili kako smo ga nazvali prošlog tjedna,
samo beskonačna petlja.
Dakle, ponekad to je loše.
Ponekad to je bug, ponekad to je razlog zašto ste dobili
predenje lopta za plažu ili pješčani sat ili slično.
No, u ovom slučaju, mi se namjerno, iz bilo kojeg
Razlog, htio ispisati istu stvar opet
i opet i opet.
Ili, u slučaju kao sat, što želite učiniti
nešto opet i opet i opet.
Dakle beskonačne petlje moglo imati smisla.
A to je, kako se u C možemo prevesti Beskonačno do koda.
>> Tako sada ovaj je malo precizniji.
Imali smo ponoviti 10 puta sljedeću izjavu.
Dakle, dok je (istina) ne sasvim tamo raditi, jer istina je
uvijek istina.
Dakle, ako smo umjesto pogledate C verzije, sada dobiva sintaksa
Malo više zagonetan.
No, da budem iskren, kada počnete vidjeti to, sve to dobiva
prilično upoznat brzo.
Dakle, to je ono što se zove for petlje.
For petlja će reći računalo učiniti nešto
opet i opet i opet sve dok
te stvari su istinite.
Što ćemo sada reći?
Pa, tu je tri dijelove za petlje, a mi ćemo
vratiti na to u kontekstu stvarna
Primjeri u ovom trenutku.
Dakle, ne brinite ako ne sasvim potonuti u sve odjednom.
No int i = 0, duljimo, rekavši mi dati
varijabla koja je tipa integer, tako da će mi dati broj
Zvao sam, i to inicijalizirati na 0.
To je kao da mi daju algebarski varijable x i
ga inicijalizirati na 0.
No, u ovom slučaju smo ga zvali ja.
Tada se u sredini, što govori i je manje od 10.
To govori računalo ne sljedeće stvari, tako dugo
kao što sam je manje od 10.
A očito je da počne manje od 10 jer
počinje na 0.
Onda na kraju, možda možete pogoditi što sam + + sredstva.
To je malo sintaksom to samo znači ja povećavati.
Dakle, dodajte 1 do i, opet i opet i opet.
>> I tako ćemo vidjeti ovu petlju, to sintaksa, a, provodi
upravo ista stvar koja, iskreno, u Scratch je samo tako
puno lakše izraziti.
Ponovite 10, i gotovi ste.
U C, te u većini programskih jezika, moramo biti
malo više poučan za računala i zapravo
odrediti ovako nešto.
No, vratit ćemo se na to i druge sintakse.
>> Što o varijabli?
U Scratch smo imali nešto poput ovih narančastih blokova,
gdje bih mogao proglasiti varijablu.
Ajmo proizvoljno nazvati brojač.
Neka je to inicijalizirati na 0, a zatim
ajmo zauvijek učiniti nešto.
U tom slučaju u Scratch govorim brojač, tako
mačka će imati malo oblačića koji je govorio
broj koji je u tom varijablom.
I onda imamo promjenu brojač jedan.
Dakle, sve je to upakirano unutar zauvijek bravu.
Dakle, mi već sada imamo izgrađeni u C s
koja prevesti ovo.
>> Jedan način na koji smo mogli učiniti da je to.
Daj mi integer, nazovite ga brojač.
Ga Inicijaliziranje na 0
u prvoj liniji tamo.
Dok (prava), pa sam ukrao tu ideju od samo trenutak
Prije ići naprijed i učiniti sljedeće.
Ispiši brojač, a zatim povećajte brojač,
opet, i opet, i opet.
Ili opet, + + samo znači dodati jedan na nešto.
No, tu je novi komad sintakse ovdje.
Što iskakanja kako ne među našim prethodnim primjerima?
Da, to% d.
Tako da možda mogu zaključiti što to radi, iskreno, na temelju
na ono grebanje blok radi.
Ali opet u C, samo moramo biti malo više posebno
kada je u pitanju sami izražavanja.
>> Dakle printf ("% d \ n").
Pa većina da možemo baciti kao što je poznato.
U citati samo znači da je niz, backslash n
je samo nova linija.
Dakle, jedina nova stvar ovdje je% d.
A sve to je je rezervirano.
% D će označavati decimalni broj.
I% d računalo znači, staviti decimalni broj ovdje.
Pa, što broj ne želite staviti tamo?
Pa, kao što ste možda može zaključiti, nakon zareza kažemo
brojač, koji je ime varijable koje smo proglasili ili
stvorili nekoliko redaka ranije.
Dakle, ovo je samo Kasiopejci način plugging u varijablu u
Niz dinamički.
Jer za razliku od, ako sam umjesto učinio nešto poput
to, printf ("brojač"), što bi to
Program umjesto učiniti, vjerojatno?
To doslovno će ispisati "brojač".
Koji nije efekt koji želim.
Trebam zamijeniti u nekom numeričkom vrijednosti.
Tako ćemo vidjeti da funkcija tada, kao i printf, može potrajati ne
tek jednokrevetne argumente, poput
"Hello World".
Oni mogu uzeti zarez Citat završen citat, i onda neke varijable
da će dobiti priključen u, kao što ćemo vidjeti prethodni niz
putem tih rezerviranih% potpisati.
>> Pa što je Boolean izraza?
Boolean izrazi bili ove vrijednosti, pravi ili lažni.
Da ili ne.
1 ili 0.
On ili off.
Tako je u Scratch oni izgledaju ovako, i primijetiti da
dno blok ovdje je zapravo zajedno
dvaju manjih blokova.
Tako nekako sam vukao i pao tri slagalice
zajedno kako bi taj duži komad puzzle tamo, tako da sam
mogao prenijeti ideju da želim x biti manji od y i
y da se manje od z.
I tako ja mogu prevesti ove dvije odvojene linije kao što slijedi.
Vrh može biti vrlo naivno prevedena na C,
sa samo x <y.
Možda s nekim zagradama za dobru mjeru.
A onda je u C, ne pisati i za označavanje
veznik nečega.
Možete pisati umjesto &&.
I kao što smo na kraju ćemo vidjeti, jedan znak za struju događa
znači nešto drugo.
Dakle && samo označava ideju I.
>> Pa opet, iako je ovo počinje izgledati prilično složena,
jedan od ciljeva uvođenja Scratch, osim
samo da neku od zabave na-rampe gdje možete učiniti
nešto što je vrlo grafički, i animirani, a
djeljiv i slično, također je prenijeti ideju da
sve ideje počnemo ronjenja u danas i nadalje
su utjelovljena u čak da jednostavno
sučelje od jednog dana.
Što je ovo ovdje?
>> Dakle uvjeti.
Dakle Scratch blok na lijevoj strani ima izgleda
malo složeniji.
Ali to je samo neki povlačenjem i
ispadanje poznatih komada.
Ako je x manje od y, tako reći.
Inače, ako je x veći od y, tako reći.
Inače, mi logično pretpostaviti da je zaključiti da
oni moraju biti jednaki.
Dakle, reći da su jednaki.
Sada u C na desnoj, isto točno stvar.
I primijetiti da su vitičastim zagradama će biti
značajka C i drugim jezicima koje ne ovu vrstu
od kućištima.
Baš kao i ako blok je to žuta stvar koja je vrsta
grabbing ljubičastu blok unutar nje.
Slično su ti aparatić -
ove kovrčave aparatić -
značilo da dočarati tu istu ideju obuhvaćajući jedan ili više
linija koda koje su razvedene unutar njih.
Dakle, na desnoj strani ovdje, ako je x manje od y, printf
("X je manji od y").
Drugo ako je x veći od y, ispisati isti.
Inače isprintati da su jednaki.
>> Dakle, u kratko, tu je prilično izravan mapiranje ili prijevod
jezika što smo vidjeli dosad, uključujući i za neke
od više sofisticirane značajke.
Dakle, ne može se koristiti to za svoj projekt, ili možda ne
biti koristeći ovaj za svoj projekt ovaj tjedan.
No, mi smo te stvari naziva polja u C. U Scratch,
oni nazivaju popisi.
A vidjeli smo ih s Fruitcraft RPG prošlog tjedna.
Mali plavi čovjek koji je hodao okolo, branje gore
višnje i naranče i slično.
Pa u nule, koji je proveden uz ovu naranče
blokirati koji sadrži riječi, u ovom slučaju, mi smo doslovno
dodavanjem "naranča" na
varijabla zove inventar.
Dakle, u C, to sintaksa će dobiti malo više zagonetan.
A mi ćemo se vratiti na ovaj sljedeći tjedan i učiniti više
zanimljive stvari u svijetu kriptografije s njim.
No, pri dnu ovdje, ove dvije linije bitno
prevesti na ono što radimo u jednoj Scratch blokirati tamo gore.
No, više o tome kako doći.
>> Dakle, stavljajući ga zajedno, ovdje je program u C. Dakle, neka je
brzo zafrkavati, osim nekih komada sintaksi ovdje, ali
onda ajmo zapravo početi pisati neki kod, upoznati
ste s nekim od alata ćemo se koriste, i vidjeti ako mi
mogu graditi na sada neke od tih osnovnih građevnih blokova od
prošlog tjedna, sada sintaktički u C. Dakle, na vrhu ovdje, to
je možda jedan od najvažnijih dosadnih programa koje bi moglo
pisati u većini bilo kojem programskom jeziku.
No, to je neka vrsta ima posebno značenje jer je
kanonski program koji svaki računalni znanstvenik piše kada
podučavanje nekoga programski jezik -
Hello World programa.
>> Tako je na samom vrhu, vidimo taj pojam # include
, a zatim u zagradama ukošene, stdio.h.
Mi ćemo se vratiti na to, ali stvarno što je
znači da je datoteka u ovom svijetu zove standardni
I / O, stdio točka h, a to je samo tekstualna datoteka koja
netko je napisao godina.
A unutar tog teksta datoteke su cijela hrpa
funkcije, ili metode ili postupke, da netko drugi
napisao da smo korisnici, jer smo
sada mogu koristiti te osobe kod.
Funkcije on ili ona napisala.
U ovom slučaju, printf nije nešto što sam napisao, to je
nije nešto što CS50 napisao.
To je nešto što je netko napisao godina i staviti u
file zove stdio.h i tada, kao i na stranu, stavi
drugi dio funkcije u drugu datoteku.
No, mi ćemo doći.
>> Dakle # include je samo naš način da se kaže, u
C, daj mi pristup funkcijama koje je netko drugi napisao.
I u ovom slučaju mi ​​je stalo jer želim printf.
Sada smo dobili int main (void).
Dakle, ovo je jedna od tih stvari, iskreno, da je na dan 0,
prilično Ja sam za takve zone van, jer to je samo
nije zanimljivo
intelektualno, neki od sintakse.
No, za sada znamo da funkcije, inače poznat kao
postupci ili metode, uglavnom proizvesti neku vrijednost.
Oni nešto učiniti.
Oni dolaze do odgovora.
Oni proizvode izlaz.
Dakle int uz glavni je samo naša stenogram način da se kaže
da ova funkcija, ovaj postupak, na kraju će
da vam vratiti broj.
I zašto je, vratit ćemo se na.
Glavni je samo standardni zadani svijet za defaultu
funkcija koja će se izvršiti u C programu kada
ćete ga pokrenuti.
Void samo znači ovo, glavni, ne traje
argumenti, u ovom slučaju.
Dakle, ja sam se super eksplicitno.
Nema žice u, tamo je nema zarezi.
Void znači da nema glavni argumenti.
>> Sada, na kraju, srećom, u posljednje dvije linije su upoznati.
Unutar vitičastih zagrada imamo printf
i imamo povratak.
A povratak je vrsta nesretni da moramo
staviti ga tamo, jer u tom slučaju to ne čini sve da
mnogo interesa.
No, u računalnog programa, kada funkcija vraća 0,
to znači da je sve dobro.
Ništa je pošlo po zlu.
Nasuprot tome, ako je funkcija vraća jedan ili negativan 1, ili
negativna 1337, ili neki slučajni brojevi kao što je to, da je
općenito znači da pogreška zapravo došlo.
Dakle, ako ste na vašem Mac ili PC računala, ako ste ikad vidjeli
neke dosadne poruke, jer je vaše računalo srušio ili
zamrznuta, a tu je zagonetna poruka,
i onda neki broj, kao što su sustav kod
1,2,3,4, neki broj,
da je općenito nepotreban detalj reći
Većina od nas ljudi, ali to je ono što neke funkcije ili neki
Program je zapravo vratio, non-nula vrijednost.
A prednost je to da 0 označava sve što je dobro, a
onda bitno imati beskonačan broj stvari koje
možete pogriješiti.
Koji je razlog zašto su izabrali 0 za dobar i ne-nula vrijednost za
loše, kao što ćemo uskoro ćemo vidjeti.
>> Dakle, idemo naprijed i napisati ovo.
Tako se prisjetiti da je neki dan sam koristio moj Mac otvoriti
terminal prozor, a onda sam otvorio teksta programa, kao i
TextEdit, a ja sam počeo pisati neki kod.
Pa to je u redu.
No, vaše iskustvo će biti drugačiji na Mac, ili
na Solaris računala, Linux računala, bez obzira na operativni
Sustav vam se dogoditi da se koristi.
I tako je u tijeku, što mi, umjesto da koriste nešto
zove CS50 aparati.
Dakle CS50 Appliance je preuzeti dio softvera
koji vam omogućuje da pokrenete operativni sustav pod nazivom Linux,
posebno Fedora Linux, na svoj Mac ili PC.
A ti to preuzimanjem nešto što se zove hypervisor.
Dakle, sve to će biti dokumentirana u problematiku setu 1.
I vi ćete biti vođeni prema onome što vam je potrebno za preuzimanje.
No, krajnji rezultat, bez obzira imate li Mac ili PC, je li
preuzeti neki besplatni softver.
Vi onda preuzeti CS50 Appliance, a vi recite da
slobodni softver - hypervisor -
pokrenuti CS50 aparati u prozoru na vašem računalu.
A ono što se događa je to.
>> I sada su, primijetit ovdje, ono što se čini desktop
okoliš.
I neka mi zapravo smanjiti taj jedan prozor.
Dakle, ovo je sada moj Mac, s malo prozor ovdje, a unutar
ovog prozora se dogodi da se potpuno
drugačiji operativni sustav.
Doista postoji ovo početak izbornik ovdje dolje, podsjeća
Windows, koji ima hrpu podizbornika, uključujući
link na CS50 priručniku, Dropbox, i slično.
A što je ovo okruženje sada je standardni okoliš
da svatko od nas sada može koristiti, tako da bez obzira što je vaš
Računalo je, ono što ste instalirali na njega, što je verzija
Mac OS ili Windows koju koristite, svi mi sada imamo
Isto okoliš.
I sada, u ovom okruženju možemo početi pisati neki kod.
>> Tako ću ići naprijed i otvoriti program pod nazivom gedit.
To je usporedivo s notepad.exe, ili
TextEdit na Mac.
A to je samo super jednostavna program za uređivanje teksta
da izgleda ovako na prvi pogled.
Sada, na samom vrhu, imam bijelu paletu, na dnu sam
imati ovu crnu prozor koji kaže jharvard @ aparata.
A to je zato korisnički račun da smo unaprijed stvorili
za svakoga se zove John Harvard.
On ima mapu gdje se sve njegove datoteke koje ćete ići, i
evo gdje možemo početi pisati neki kod.
Pa neka mi ići naprijed i ovdje povećavanje samo malo, i ja sam
će učiniti # include , int main (void), a
onda ću to učiniti printf ("Hello World")
; Povratak 0.
Sada je to sve prilično crno-bijelo.
>> Dopustite mi ići naprijed i učiniti jednu stvar naučiti gedit što sam
zapravo radi.
Pusti me na Spremi kao.
Idem odabrati na lijevoj strani ovdje jharvard.
Pa opet, čak i ako ste nikada koristili Linux prije, iskreno
ovih dana, sve od njih su u suštini devolving
isti tip sučelja -
Mac OS, Windows i Linux.
Tako sam izabrao jharvard početnu mapu ovdje.
I ja ću spasiti ovu sliku kao hello.c.
Tako je na samom vrhu, ja upisali hello.c; imenovanja C
Program s nastavkom. C je
što je uobičajena praksa.
I ja sam pogodio Spremi.
A sad ono što je lijepo je da sam zapravo sam učio gedit,
da je to C program.
Obavijest da je moj crno-bijeli tekst sada je boja kodiran, ili
sintaksa istaknuo, koja je upravo privlači moju pažnju
različite semantičke dijelovi programa.
Na vrhu lijevo tamo, kao moji programi dobili složeniji, ja sam
će imati sažetak svih stvari koje sam napisao.
Tako da je to tamo gore.
Pa neka mi sada smanjivanje i ići dolje na ovom terminalu prozora.
>> Dakle, ovo je možda novi za mnoge ljude.
Ako ste nikada koristili okruženje naredbenog retka, ste nikada
koristiti DOS-a, ili ste nikada koristili Linux, ili ste nikada nije otvorio
Mac OS terminala prozor, postoji puno stvari koje
mogao učiniti s GUI, kao što pokazuje i klikom, a
povuci i pusti, i slično, ali općenito -
sigurno u svijetu računalnih znanosti -
pomoću naredbenog retka, gdje nemate miša
uglavnom, imate samo tipkovnicu, je zapravo puno
moćniji od sučelje, jednom kada se udomaćile
razne naredbe.
A ti vrsta slobodnog sebe od potrebe za točku i kliknite
u svemu.
Tako je u gedit ćemo sortirati od imati najbolje od oba svijeta.
Možemo povući i ispustiti tekst, možemo ga vidjeti
lijepo i po boji.
No, kada dođe vrijeme za pokretanje naš program, mi ćemo ponekad
samo koristiti ovaj mali prozor ovdje.
>> Tako ću ići naprijed i učiniti.
U donjem crne i bijele prozor, ja ću ići naprijed
i pisati zveka.
I jeka je ime prevodilac.
To je program koji pretvara moj izvorni kod
u, tako, objektni kod.
0s i 1s, da smo vidjeli nakratko prošli tjedan.
Podsjetimo od prošlog tjedna, što smo obećali da ćemo se
ići od nešto ovako - mi smo trebali biti
nešto ovako -
a to sigurno nije nešto što čovjek ide
učiniti ručno.
Dakle, umjesto da ćemo koristiti program, a da je program u
U tom slučaju se zove zveka.
I ime mog programa je hello.c.
Dakle, kako bi se sastaviti hello.c iz izvornog koda u
objektni kod, ili 0s i 1s, to bi trebalo biti dostatno za samo napraviti
ovo i udarite Enter.
>> Ok, ništa ne čini da se to dogodilo.
Ali znam sada, odnosno od prošlog tjedna, da zadani naziv
Program, kada je napisan u C, budalasto se zove a.out.
Većina nezanimljiv ime koje bi moglo doći do.
Je prvo slovo abecede, out je ono što je
outputted, ali tako se to.
Ovo je moj program, a sada dot udarac, kao što ćemo vidjeti,
zapravo samo vrsta sigurnosne značajke, jer
a.out je program sam napisao.
To nije došao sa mojim računalo, to je
ne u Program Files.
To nije u Mac OS-a mapi Applications.
Moram biti super eksplicitno s računalom, i reći
ovaj program, a.out, je u trenutnoj mapi,
trenutni katalog.
I način na koji predstavljaju to u okruženju kao što je ovaj
je točka predstavlja ono što mapu u kojoj se trenutno u.
I tako. / Samo znači pokretanje a.out
u trenutnoj mapi.
I ja sam pokrenuti ovu Enter, i voila, moj prvi program.
>> Sada neka mi se korak natrag.
Ovaj prozor je malo mali, i shvatiti da je dno
lijevo od aparata ovdje je još jedan simbol.
Jedan od njih je Chrome, koji bi trebao biti prilično upoznat, samo web
preglednik unutar uređaja.
I to crna i bijela ikona je samo
veći terminal prozor.
Dakle, ako to dobiva malo neugodno da vrsta ima samo
ovaj maleni malo kriška kroz prozor s kojima komunicirati
s programima, umjesto toga može učiniti.
I sada neka mi početi tipkati malo prije
biti poznate naredbe.
Jel.
Tako li je naredba za uvrštenje.
Dakle, u Mac OS ili Windows, što bi općenito dvokliknete
mapu, a zatim, voila, vidjet ćete sve od raznih datoteka
i mape.
U okruženju naredbenog retka, gdje možete samo upisati
naredbe ili tekst, ls je ekvivalent.
Dakle, mi pokazati što je u ovom direktoriju.
>> Sada postoji hrpa stvari ovdje da je i malo
upoznati i malo upoznati.
Ali primijetite da baš kao i Windows i Mac OS, jharvard
ima desktop mapu.
Dakle, sve ikone koje su na mom desktopu dogoditi
da se u toj mapi.
Postoji preuzimanja mape, stvari koje
Chrome mogao staviti tamo.
Dropbox.
Dakle, aparat dolazi s ugrađenim u podršku za ispuštanje
tako da je tijekom semestra, možete sinkronizirati s Dropbox
račun, tako da sve svoje programe su podupirač gore.
Oni su dostupni na drugom računalu.
Ako je išta ikada pođe krivo s aparatom, možete
vrlo lako oporaviti od Dropbox.
Tako da mapa je tamo za to.
Postoje dvije datoteke koje sam napravio - hello.c
i a.out.
A onda na desnoj postoji neki drugi mape koje ćemo
doći do krajem semestra, s web
programiranje.
Dakle, kada radim. /, A.out, Enter, koji govori ide
u imeniku sam u, trenutnom direktoriju, i pokrenuti
Program se zove a.out tamo.
>> U redu, tako da je lijepo i dobro, ali to nije sve što je
uvjerljiv napisati program pod nazivom pomoći a.out.
Dakle, mi zapravo možemo učiniti to malo drugačije.
Dakle, umjesto samo trčanje zveka, hello.c, dodajmo
ono što se zove argument naredbenog retka.
Dakle, argument naredbenog retka, ili prebaciti u ovom slučaju, samo je
druga riječ ili izraz koji upišete u redak nakon
Program želite pokrenuti.
Dakle, u ovom slučaju, zveka je Program želim pokrenuti,-o
znači izlaz datoteka koja se više ne zove a.out.
Izlazna datoteka zove hello, i to prikupljanjem
posljednja riječ na liniji, hello.c.
Dakle, u kratko, to je vrlo marginalna poboljšanja, pri čemu
umjesto da ovo glupo nazivom datoteke a.out,
Ja sada mogu učiniti zveka-o bok, a zatim hello.c, a
zatim pritisnite Enter.
Ništa se čini da se dogodi, ali opet volio s 0 - kada
ništa ne čini kako bi se dogoditi da ne znači ništa loše dogodilo -
pa ajmo napraviti ls sada, Enter, i doista sam sada
imati Hello program.
Dakle, ako sam upisati bok sada, naredba nije pronađen.
OK,. /.
Dakle, točno.
Dakle, jer ovaj program sam napisao, a to nije došao s
računalo,. / halo, Enter, znači
Ja sam sada prikazivati ​​bok.
>> Tako da je to tamo.
Sada ono što smo na kraju ćete doći do više i više naredbenog retka
argumenti koji nam omogućuju učiniti više, ali samo za one za
koga bi to moglo biti stari šešir, dopustite mi zapravo ide u
katalog ovdje i samo vam dati teaser kako drugo mi
mogao ići o provedbi Hello World.
Pusti me u ovdje, a ja ću ga otvoriti.
Pa zapravo, ja ću objasniti što radim, tako
to je korisno.
Pusti me natrag gore.
>> Tako sam to dugo vremena.
Dakle primijetiti tijekom dana tamo su par
direktoriji koji začudo su imenovani source1m i source1w.
Ovo je samo glup konvencija ćemo koristiti.
Izvor samo znači izvornog koda, 1 znači ovaj je tjedan jedan, a
m znači da je u ponedjeljak, a w znači da je srijeda.
Dakle, ništa grobni tamo.
To je samo skraćeni zapis.
Ove plave stvari su mape, inače poznat kao
imenika.
Želim ići u tu mapu sada, i na normalnom računalu
Upravo sam mogao dvaput kliknite na ikonu mape i
tu je sve moje datoteke.
No, u okruženju naredbenog retka, ja ne mogu sasvim učiniti
da, pa umjesto toga, moram promijeniti direktorije ručno.
Dakle, ako sam upisati CD, a zatim source1m, Enter, primijetiti da
moj brz, stvar je u bijelom na lijevoj strani, samo promijenio.
I tako je doista, kada je samo rekao zagrade, a zatim
malo migoljiti, tilda simbol, da samo značilo da sam bio
u Johna Harvarda kuće imenik, njegovi Moji dokumenti,
njegove osobne datoteke.
Ali sada u zagradi piše ~ / source1m.
To samo znači da sam u mapu pod nazivom source1m
da je u Johna Harvarda kuće direktorij.
Dakle, ako sam sada želite popis datoteka u toj mapi, lako
pitanje, ja upišite samo ls.
I sada vidim sve datoteke koje sam unaprijed stvoren za danas
predavanje, od kojih svi, ili od kojih je većina, dogoditi
završiti u. C.
>> Pa neka mi sada ići naprijed i pokrenuti gedit o programu nazvanom
holloway.c, koji je napisao neki slučajan hakera
na Internetu, koja izgleda malo kao što je ovaj.
A mi se ne ide na proći kroz ovaj jedan u bilo
detalj, ali za one ugodnije, posebice ako
želite da se nagađati o tome što ovaj program radi ovdje.
Budite uvjereni, da li ste manje ili više ugodno,
nismo ni doći do takve vrste stvari do kraja
ovaj semestar.
To je ono što je primjer natjecanja obfuscated C, što
znači pisati najviše grobni potrazi program koji eventualno
može nadmašiti druge pametne ljude, koji su na sličan način
pokušavaju pisati stvari i pokaže da može pisati
više grobni stvari od tebe.
Dakle, ovo nije primjer dobro pisanom programu iz
perspektiva stilu, ovo je primjer programa te
pobijedi na natječaju, za ljude pokušava
biti nejasna i apstraktna.
>> Dakle, ako smo pokrenuti ovu stvar, pusti me u mom terminal prozoru,
da se tako izrazim.
Dakle, ovo crna i bijela okolina se zove
terminal prozor općenito.
Pusti me naprijed i prevesti ga.
Neću koristiti zveka, jer ovaj program je
malo zagonetan i to treba drugačije
prevodilac, jedan se zove GCC.
No, to čini istu stvar.
Potrebno je izvorni kod objektnom kodu.
A sada, ako sam pokrenuti a.out, taj program ti
Vidjela sam to.
Dakle, taj kolega te godine osvojio taj natječaj.
U svakom slučaju, ne idemo u tom smjeru, po sebi.
>> Dakle, neka je zapravo pokušati sada zafrkavati, osim što možemo učiniti
s tim temeljnim građevnih blokova kako bi sve više i više
zanimljivi programi.
Tako smo napisali program, mi smo pokrenuti program.
Sada smo zapravo može pojednostaviti i više ne moraju pisati
Riječ zveka na upit.
Ispada kao naši programi dobili više zagonetan, možemo, ili
složeniji nego, zapravo možemo pokrenuti ovu naredbu.
Pa neka mi vratiti moj dom imenik, da se tako izrazim, neka mi
ukloniti - rm je remove naredba - Idem ukloniti
datoteka zove a.out i bok.
I sada primjetiti u okruženju naredbenog retka, kao u
GUI, možete dobiti zatraži. Ja ne mogu kliknuti gumb iako, ja
morati upisati y za da, y za da.
A sada, ako sam upisati ls opet, obavijest da oni zeleni
programi - a.out i hello -
su nestali.
Čuvajte rm.
To se može činiti loše stvari, baš kao što možete povlačenjem
stvari na svoje smeće.
>> Dakle, sada idemo naprijed - i sam mogao to učiniti - zveka-o
halo, halo -
Ja sam već dosadno da upišete naredbu.
Iako sam upisali to malo brže.
Tako smo umjesto toga može učiniti da zdravo.
Tako bi se ne prevodilac.
To je samo prijateljski program koji dolazi s Linuxom, u ovom
slučaj - operativni sustav -
koji automatizira proces sastavljanja programa.
Dakle, umjesto da se sjećam zveka-o datoteke i
onda tako dalje, pogotovo nakon one linije dobiti više i
više, ja mogu samo napisati napraviti.
I to će se ispljune hrpu stvari tu
smo na kraju ćete vidjeti ovaj semestar.
Ali primijetite sada, ako ja tipkam LS, halo je natrag u mom imeniku.
I doista sam ga pokrenuti sa. / Bok.
Tako bi samo automatizira proces pokrenut što je,
u ovom slučaju, mnogo dulje, složenije naredbe.
Tako ćemo početi koristiti marku, samo zato što je puno
više user friendly.
>> No, sada idemo napraviti više zanimljiv program
nego samo pozdraviti.
Dakle, u programima koje smo dosad napisano tamo je glavni.
To je samo zadana stvar koja započinje sve off.
No, tu su i druge funkcije vani, kao i
stdio.h je stvar da smo vidjeli na vrhu naše
datoteku prije, i to je ono što je poznato kao standardni knjižnici.
Unutar standardne biblioteke je cijela hrpa funkcija
da je netko napisao, i možemo početi koristiti njih
Funkcije više pisati
zanimljivi programi sami.
>> Dakle, neka mi se vratiti na aparatu.
Ja ću zatvoriti ovaj prozor terminala.
Ja ću zatvoriti ono što smo pisali ranije, i samo ići
u hello.c, i primjetiti da sada mogu učiniti sljedeće.
Pozdrav svijet nije sve što je zanimljivo, ja bih
personalizirati ovaj program za sebe.
Dakle, umjesto da se kaže svijet, idem
ići naprijed i reći -
Mogao sam upisati Davida - ali ovo je stvarno vrsta
temelja isti.
Ali ajmo isprobati ovu rezerviranog ideju.
Podsjetimo da je u C, a u printf, imali smo ove
Rezervirana mjesta, a tu su i više nego samo% d.
Dakle,% d je, brzo razum ček.
Ok, decimalni broj, to je to.
Decimalnih znamenki, to je sve.
Dakle% c, kao što ćemo se susresti, što će biti znak.
Stavite lik ovdje, pismo kroz z,
ili interpunkcija simbol.
Jedan lik,% f, tko zna iz drugih jezika?
Dakle Krajnja vrijednost.
Realni broj.
Dakle, ne decimalni broj - to je zapravo realni broj s
decimalna točka, a neki broj znamenki lijevo
i desno od njega.
% S, string.
Onaj ćemo vidjeti vrlo često.
String, opet, je samo riječ, fraza, sekvenca
pojedini likovi.
I na kraju, LLD?
Dakle, to je više od kutnom slučaju.
Dugo, dugo decimalno.
Dakle, ako želite ne samo broj koji je to veliki,
žele veći broj, ti si idući u morati specificirati
računalo koje je od određene veličine.
>> Dakle, neka je štipanje ovu malo.
Umjesto samo tvrdi koda u Davidu, neka mi malo
dinamički reći% s.
Dakle, stavio% s, što je rezervirano za niz.
Onda neka mi napraviti zarez, a zatim "David" ovamo.
Sada to nije sve što je intelektualno zanimljiv,
jer sve što sam učinio sada stvarno je stvoriti više posla za
računalo.
Umjesto reći računalo ne to sve odjednom, ja sam sada
rekavši to i ubaci niz ovdje na kraju, zarez,
ovdje je da niz.
Dakle, to nije bolje poboljšanje, ali je barem
korak prema više zanimljivih programa.
Jer sada, dopustite mi ići naprijed i učiniti ovaj prozor malo
veći, pusti me naprijed i pokrenuti napraviti bok.
I sada,. / A.out ne radi, zašto?
U redu, sada se zove zdravo.
Pa opet napraviti, a također jeka sa-o, preimenovane
Program se nešto više zanimljiv.
I voila: sada je, kaže bok Davide.
>> U redu, još uvijek glupi program.
Dakle, sada idemo zapravo vratiti ovdje i uvesti pojam
varijable.
Ne bi li bilo lijepo kad bih mogao proglasiti varijablu
čiji je tip string?
A varijabla je vrijednost zapravo dolazi od korisnika
ga ili sama.
Dakle, samovoljno, ja ću nazvati svoju varijablu s, što je
samo zajednička konvencija kada imate jednu varijablu naziva
niz.
Ja ću učiniti znak jednakosti, a onda ću pozvati
funkcija zove GetString.
Dakle GetString nije nešto što dolazi ugrađen u C. To je
funkcija koja CS50 osoblje napisao, stvarno samo za
ovi prvi par tjedana, kako bi se pojednostavio proces
dobivanje korisničkog unosa i dobivanjem korisničkog unosa u obliku
nizova, odnosno brojeva, i takvih.
Dakle GetString je kao printf, ali očito umjesto
ispisati to će učiniti ono što mu ime kaže, dobili niz.
Ali za korištenje GetString, mi smo idući u morati napraviti promjenu
ovdje, izvan toga.
Dakle intuitivno, ovaj program, nadamo se, ide nekako
dobili su niz od korisnika, a što onda će to učiniti
s tom nizu, pozvao je?
To samo će ga ispisati, zar ne?
Još uvijek nije stimulirajuće programa, jer sve što se događa
učiniti je priključiti u toj vrijednosti u gdje je% s
kaže da bi trebao ići.
>> Pa neka se barem vidjeti u akciji.
Dopustite mi da spasi i smanjivanje.
Sada u mom terminal prozoru ovdje dolje, mala kriška jednom,
neka mi opet ne bi pozdraviti.
Ok, i ah, prokleti, dobio sam hrpu pogrešaka.
Dopustite mi da pomicanje gore, a vidimo naš prvi -
pa neka je zapravo to u još većem prozoru, tako da
Možete vidjeti kako loše sam zeznuo -
tako da bi pozdravio.
Ok, to je katastrofa, zar ne?
Ja sam napisao tri linije koda, a
to mi dao 12 pogrešaka.
Pa zašto je to?
Dakle, na sreću, često kada vidite mnogo, mnogo pogrešaka
pljuvanje se odjednom, to je stvarno samo zato što ste
zbunjeni računalo ovdje.
I to ostaje zbunjen vrijeme dobiva ovdje dolje.
I tako je to samo počinje okidanje, i tetura, a
pljuvanje iz više zastrašujuće stvari nego što zapravo vrijedi.
Dakle, u cjelini, uvijek započnite s vrha jedne.
>> Dakle, vrlo vrhu najviše instanca crveno, na
poruka je to.
Koristite neprijavljenog identifikator niza, nisam
znači standard u?
Nisam.
Mislio sam niz, ali to je zato što je, također, riječ niz
da sam zadržati koristeći verbalno zapravo
ne postoji u C bilo.
To je nešto što ćemo koristiti samo za prvi tjedan ili dva
ovdje, ali to postoji u datoteci pod nazivom cs50.h.
Dakle, za sada, znamo da postoji taj drugi knjižnica koja
Osoblje je napisao, tako da je bio napisan u novije vrijeme od
stdio.h.
No, unutar cs50.h je definicija, sinonim
vrste, koji stvara tu riječ string.
>> Dakle, sada me pustiti natrag u moj prozor terminala.
Ja ću očistiti cijelu ovu zbrku prema Ctrl-L. Mi ćemo samo
obrišite sve čisto, a ja ću ići naprijed i učiniti
Pozdrav opet, Enter.
Dakle, što se dogodilo sada?
Sada sve od tih pogrešaka ode.
Dakle, ono što sam stvarno učinio?
Upravo sam učio računalo da postoji niz, a to je
u toj datoteci pod nazivom cs50.h.
Dakle prestati žaliti, jer sada znate gdje se mogu naći
tu funkciju izjava da se tako izrazim.
Gdje to postoji u svijetu.
>> Dakle, sada ću ići naprijed i pokrenuti bok.
Čini mi se da imaju beskonačnu petlju, ništa se događa.
Dakle, moram upisati nešto ovdje, upravo.
Prva linija koda u mom programu je GetString.
Dakle, to je doslovno čeka za mene da biste dobili niz.
Dakle, u tom smislu da, to je beskonačna petlja.
Očito u GetString je zadano ponašanje koje smo
napisao - osoblje -
da samo kaže čekati i čekati i čekati i čekati i čekati,
dok korisnik daje vam niz upišete nešto u.
Pa neka mi ići naprijed i putovanja u D-a-v - ja-d, Enter.
I to je to, bok Davide.
>> Sada se to čini kao da je to samo čin?
Pusti me naprijed i upišite u Tommyja.
Unesite, ok, čini se da se radi.
Radovi za Rob, radi za Zamyla, radi za - ok.
Tako to ide na posao, najvjerojatnije.
Dakle, to bi trebalo ispisati sve što smo zapravo ga dati,
i možemo biti malo teško ovdje.
Idemo vidjeti ako mi nešto poput halo.
Može ići ovamo, neka se vidi, copy, paste.
Neću biti u mogućnosti da biste zalijepili da mnogo puta ovdje.
Paste, ok, Shift + Ctrl + V. Dakle, ono što bi
dogoditi da je loše ovdje?
>> Ok, tako, segfaults.
Dakle, neki od vas s prethodnim pozadina će znati da
općenito, dajući računalima puno ulaza kad si
Vjerojatno nije značilo za primanje duge nazive kao što je ovaj - Bad
stvari događaju.
Doista, u svijetu interneta, previše, to se događa vrlo malo,
kojom prilikom ste projektiranje web stranica, kada ste
projektiranje Facebook, morate donositi arbitrarne odluke do
Prednji, poput koliko dugo će netko
Facebook korisničko ime biti?
Ili koliko dugo će nečija prvo ime biti?
Koliko dugo će nečiji telefonski broj biti i slično.
A ako programeri bi loše pretpostavke, programi razbiti
zato što pokušavaju dati im više izlaz, više ulaza
a, nego da imaju memoriju.
Ili RAM dodijeljeno za njega, pa ako sada sam pogodio Enter,
taj program je zapravo radio, jer smo bili u knjižnici
i mi zapravo očekuje ovom konkretnom slučaju.
No nema sumnje da je ovo semestar, što će napisati barem jedan
Program koji će reći ove riječi.
Zapamtite ovu tjedna od sada, možda dva dana od danas.
Segmentacija kriv je loša stvar.
To će se odnositi na vaše radiš nešto što računala
nije predvidjeti.
I u tom slučaju, vi, programer, nije predvidio.
Baš kao što je to hrpa čarapa, bilo je raznih
kutak slučajevi mogli smo naišli.
Slično tome, u programima ako ne predviđaju koliko dugo je
nečija ime će biti.
Ili što ako imam zlonamjerni korisnik, a njegov naziv je
zapravo prilično kratka, ali oni samo pokušavaju
nered sa mnom?
Što će biti ponašanje mog programa?
Pa, u tom slučaju, nešto se zapravo može srušiti.
>> Tako ćemo to učiniti.
U 90 minuta, to je strašno dugo vremena
učiniti informatike.
Zašto ne bismo dobili u naviku uzimanja pet minuta
razbiti ovdje, a kad se vratimo, bit ćemo zaroniti u neke
složeniji i zanimljiviji programi?
Pet minuta.
>> U redu.
Dakle, jedan brzi komentar.
Ja sam rekao da, iako je to na zaslonu prije, što
došao iz mojih usta je cs50.net/rsvp.
To je točno. cs50.net/lunch.
Dakle, sada možete pokušati RSVPing za to na / ručak.
No, hajdemo to učiniti sada.
Dakle, ovo je super brzo, super nova za puno ljudi.
Stari šešir za neke ljudi.
Dakle, ajmo premotati samo na trenutak, i vidjeti kako smo došli do
ovaj halo svijet izlaz samo trenutak prije.
>> Tako je prvi, tu je ovo CS50 aparati.
Opet, komad softvera, problema postaviti jedan će reći
kako da ga preuzeli, gdje ga skinuti, što je kliknuti
i tako dalje.
I onda kada slijediti te upute, moći ćete
kako bi se povećala svoj prozor, i vaše Mac ili PC će izgledati
malo nešto ovako.
Crna pozadina, mape dom na vrhu gdje je sve
datoteke ići, kanta za smeće u gornjem lijevom kutu,
izbornik na dnu.
Pa opet, prilično slično u duhu na Mac OS ili Windows,
iako se dogodi da se Linux.
Dakle, ono što smo pored učiniti?
Pa, mi smo počeli pisati programe.
I sjećam od prošlog tjedna da je sve što je potrebno za pisanje
Program je jednostavan tekst editor,
kao Notepad ili TextEdit.
Iskreno, čak možete koristiti Microsoft Word.
No, loše stvari s vremenom će se to dogoditi, jer to je vrlo
trapav rješenje za pisanje programa, plus to ćete
spremiti u pogrešnom formatu.
Ali to je samo tekst editor, program za obradu teksta, sve je to
potrebno napisati program.
>> Dakle, u CS50 Appliance, možemo to učiniti u jednom jednostavan način.
Možemo samo kliknite na ovu ikonu na dnu lijevo.
I opet, problem postaviti jedan će vas obavijestiti o tome, i voila -
ti ovaj crni i bijeli sučelje gdje možemo početi
pisanja koda.
Pa krenimo pisati super jednostavan program ponovno.
Ja idem gore na File, Save, a ja ću nazvati
to, recimo, hello2.c.
I ja sam samo to reći klikom na jharvard, stavite ga
u svojoj kući imeniku, ja stvarno ne briga
gdje to ide.
A onda Save.
I sada mogu početi pisati svoj program.
I sjećam se od ranije da moram pisati int
Glavni (void).
Zoom na gornjem lijevom kutu.
A onda želim reći printf, uzmi dvije.
A sada newline, blizu citat, zatvorite
zagrade, točka.
A onda idem dolje na moj prozor terminala koji je
ugrađen u gedit, samo za praktičnost.
I ja ću ići naprijed i napisati napraviti hello, ali ne
Pozdrav sama, hello2.
>> Dakle, moj file se zove hello2.c. Moj datoteka stoga
bi trebao biti pozvan hello2, u ovom slučaju.
Dovraga, što sam učinio krivo?
U redu, tako da sam jasno izostavi liniju, ako se prisjetiti onoga što
prethodna programi izgledati.
No, vidjet ćemo, ako ne možemo zafrkavati ovo odvojeno.
Nažalost, većina ljudi koji pišu programe s kojima
pišemo programi ne pojednostavljuju stvari sve to dobro.
Dakle, moramo vrsta listati što ne sasvim bi
osjetiti ovdje i vidjeti da li možemo shvatiti što je krivo.
Vrlo prva linija postoji, kaže implicitno proglašenja C
Knjižnica funkcija printf s tipa int.
OK, shvatio sam dio toga.
No, čini se da je aludirajući na činjenicu da sam koristio printf
krivo, nekako.
I ono što je smisao to krivo?
Samo nisam uče računalo da je to u datoteku
zove stdio.h.
Sada imam samo samo zapamtiti da sada printf je
u stdio.h, i doista tu će biti drugi
funkcije u toj istoj datoteci da ćemo naviknuti.
>> Pa sada neka mi ići naprijed i udario Ctrl-L samo jasno da
daleko, repriza bi hello2, i voila.
I ovu zapovijed opet, složeniji nego ćemo objasniti
današnji svrhe.
Ali to nije trčanje zveka, i jeka traje izvornog koda i
ispljune 0s i 1s.
A oni 0s i 1s, u ovom slučaju se zove ono?
Ok, objektnog koda.
I sliku da su oni u se zove, tako,
hello2, u ovom slučaju.
Jer moj tekst datoteka je hello2.c, Enter.
I sada sam uzeti dva uskličnika, exclamation
točka, uskličnik.
U redu, tako da sada imamo mogućnost da se žice,
očito.
Pa, što drugo možemo dobiti od korisnika?
>> Pa u CS50 knjižnici, postoji druge funkcije koje
će pojednostaviti svoje živote u tih prvih nekoliko dana.
Getchar, GetDouble, GetFloat, GetInt,
GetLongLong, GetString.
Pa, neka je iščupati s najlakši od njih prvi.
GetString doslovno ne da.
To samo sjedi tamo, čekajući korisnika upisati nešto u,
i čim sam upisati nešto i pogodio Enter, to
učini nešto s tom vrijednošću.
Dakle, vratimo se na tom primjeru se vidi točno ono što
GetString radi.
Pusti me naprijed i otvoriti u gedit, hello.c, i podsjetiti
to pravo prije pauze, to je tamo gdje smo stali.
>> Dakle, ajmo sad zafrkavati to osim u malo više detalja.
Dakle, na liniji 6, postoje dvije stvari
događa u ovom trenutku.
Znak jednakosti je odvajanje prvu polovicu i drugi pol.
Dakle, na lijevoj strani znaka jednakosti, mi smo
govoreći niz s.
A onda, samo laik uvjete, što je niz s
radi, ne mislite?
To je stvaranje što?
Dakle, to je stvaranje string zove a.
Sada, što to zapravo znači?
Pa, to je rezervirati prostor za niz zove a.
To nije sasvim točno.
Što se to radi?
Pa računala, kao što znate, imaju hard diskove, to je mjesto gdje
Vaši su pohranjene datoteke.
Računala imaju RAM-a, a to je mjesto gdje se programi učitava
dok su trčanje.
Dakle, kada dvaput kliknete na ikonu i Microsoft Word otvara
gore, Microsoft Word radi, da se tako izrazim, RAM-u, koji je
elektronički dio računala.
Ne fizički, mehanički dio koji se vrti, gdje
podaci obično je pohranjena dugoročno.
Dakle, niz je je prilično puno govori računalo mi dati
dovoljno RAM-a da stane niz.
A da je malo od pojednostavljivanje, jer
koliki je string će biti?
Pa mi zapravo još ne znamo, tako da u narednim tjednima
mi zapravo ću povući sloj koji je niz i
mi ćemo vam reći ono što stvarno jest.
Gudački, za sada, je samo lijepo pojednostavljenje našeg svijeta.
No, niz je niz izjavljuje pod nazivom e, za sada.
Proglašava niz.
To zadržava neki prostor u RAM-a za string korisnik je
o tipu.
>> Sada pogledajmo u desno od znaka jednakosti.
Dakle, ona kaže GetString ().
I malo razum ček.
Činjenica da ne postoji ništa unutar zagrada
podrazumijeva što o GetString?
Potrebno nema argumente.
To jest, ne možete utjecati na svoje ponašanje na bilo koji način.
Svaki put kada ga koristiti, to će dobiti niz i to je to.
Nasuprot tome, printf, nadamo se njegovo ponašanje ne
promijeniti svaki put.
Inače, to je prilično beskoristan ispis funkcija ako
čini istu stvar.
Ako je to uvijek ispisuje Davida ili nešto
proizvoljna sve vrijeme.
Dakle printf smisla imati argument.
GetString ne treba argument, jer sam htjela
dobiti niz od korisnika, a to je korisnik koji se događa
dostaviti dinamičnost upišete u različitim slovima
svaki put na tipkovnici.
>> Dakle, što u konačnici GetString ne?
Razmislite o tome kako ovaj mali crnoj kutiji.
I to crna kutija preuzima nikakvu ulaz, ali kad udariš
to, to ispljune niz koji je korisnik upisali u.
A činjenica da postoji znak jednakosti tamo znači uzeti
što se ispljune na desnoj strani i pohraniti unutar
što je na lijevoj strani.
Dakle, znak jednakosti ovdje, to zapravo ne znači
jednakost, to već znači tehnički zadatak.
Uzmi vrijednost na desnoj strani, i staviti ga u
varijabla na lijevoj strani.
Dakle, to je sve što se događa tamo.
>> Sada u skladu 7, mi smo nazivajući printf.
Dakle printf nadamo se uzimajući malo dosadno do sada.
Dakle ispisati formatiran string.
Što string?
Ispis, "h-e-l-l-o,% s
! \ N ".
U redu, pa što ne želim plug-in za% s?
Doslovno, sve što je pohranjena u s..
Dakle, u ovom slučaju, malo razum ček, koliko argumenti ne
printf uzeti?
Ok, čuo sam jedan.
Čuo sam jednom opet.
Dva, čuo sam dvije.
A o tome kako tri?
Ok, tri?
Izvrsno.
Tri moguća odgovora, samo jedan od njih je ispravan.
Dakle argumenti opet utjecati na ponašanje funkciji.
U prošlosti, printf samo uzeli jedan argument.
"Hello World" bio je jedan argument.
Međutim, sada, primijetit gdje je to zarez je.
Ovo je zarez izvan citat / Citat završen, što znači
hej printf, ovdje dolazi drugi argument.
>> Dakle, zarezi u većini programskih jezika
odvojene više argumenata.
Dakle, odgovor je ovdje definitivno nije jedan, jer
tu je ovaj zarez.
Dakle, minimalno, printf očito je uzimanje dva
argumenti ovaj put.
No, priliku za trik pitanje ovdje je ono
o ovom zarezom?
Da li to znači da postoji zapravo tri argumenti?
To, to, i to.
Dakle, ne, jer to je zarez unutar navodnika, koji
znači to je zapravo samo estetski engleskom jeziku.
To nema nikakve veze s brojem
argumenti u ovom programu.
Dakle, ovo je zarez izvan navodnicima.
I onda se vratiti 0.
Za sada neka je samo vrsta iskoristiti ovu jedne na vjeri
danas, i samo znam da kad funkcije su učinili izvršenja
linija koda, općenito treba vratiti neku vrijednost.
U ovom slučaju, samo zato glavna moraju vratiti int,
to je samo način na jezik C radi.
>> Dakle, jer ništa pošlo po zlu, osjeća kao ovaj program je
fino, samo sam teško kodirane u zamjenu 0.
No, za razliku, a ja ću napisati ovo u pseudo kodu
sada, baš kao i Josipu učinio kada smo radili čarapu
Primjer prošlog tjedna.
Ako je nešto pošlo po zlu - to nije stvarni broj - otišao
krivo, a zatim se vratiti, recimo, jedan.
Inače vratiti 0.
Dakle, ovo je mjesto gdje ćemo s tim.
To nije stvarna C koda, samo pseudocode.
Ali to je, kako se može vratiti
različite moguće vrijednosti.
No, za sada sam samo ići naprijed i vratiti 0.
U redu, bilo kakva pitanja dosad na sintaksu, funkcionalnosti,
ili sviđa?
Da, u leđa.
>> PUBLIKA: [nečujan]
DAVID MALAN: Možete li govoriti malo glasnije?
Zašto je to učinio 0 programa povratka i?
PUBLIKA: [nečujan]
DAVID MALAN: Oh, to je zato što sam dobio lijen, žao mi je.
Bez dobre akademske odgovor, povratak 0.
Mogu vrsta spasilo to, rekavši tehnički C, ako je glavni
ne izričito vratiti vrijednost, 0 će biti vraćen
automatski za vas.
Koji je to istina, nisam samo prikrivanje.
No, trebala sam to učinio ovaj put.
Ne Zanimljivo takeaway nego da osim moje pogreške.
Da?
>> PUBLIKA: Obično kada upišete u prazninu, koja vam znači
ne vrati nešto.
DAVID MALAN: Točno.
Ako umjesto toga, možete odrediti prije imena funkcije, za
primjer ovdje, praznina, onda funkcija
ne vrati ništa.
I zato bih samo reći, povrat ili ništa at svi,
i da će biti dosljedan.
A mi ćemo se vratiti na to.
I samo za Vašu informaciju, jedan od ulova s ​​učenjem
programiranje u svijetu koja ima stotine knjiga i
stotine web stranice vani je da će uvijek
vidjeti različite sintakse u različitim knjigama
od strane različitih ljudi.
Shvatite ćemo se potruditi u dijelovima i predavanja biti
dosljedni.
Ali ponekad ćete vidjeti sukobljene sintaksu.
Dakle, kad god ste u nedoumici, samo pitajte.
I općenito, mi ćemo se pobrinuti za predavanja i sekcije za
gotovo uvijek ga predstaviti na pravi način.
A ja kažem gotovo uvijek, jer slučaj u točki.
Ostala pitanja?
>> PUBLIKA: Da li postoji izvan% s aparata?
DAVID MALAN: Da li% s postoji izvan uređaja?
Da.
Dakle% s ima veze s C. činjenicu da smo ga koristili u
Uređaj fundamentalno nema nikakve veze s
obilježja jezika kojeg koristimo.
Doista, prošli tjedan kad smo se moj Mac, napisao sam
C koda na mom Macu.
Mogao sam koristiti% s na mom Macu, a možete ga koristiti na
vaš Windows računalo, ako ste instalirali prevodilac, kao što je
Visual Studio od Microsofta.
Dakle% s.
Sve što radimo unutar ovog prozora danas ima
učiniti sa C. I bitno ništa učiniti s
operativni sustav u pitanju.
Nasuprot tome, crna i bijela terminala prozor - kada
Ja sam tipkati stvari poput ls, i RM, a cd -
da ima veze s operativnim sustavom i
navigacije oko.
Da.
PUBLIKA: Mislio sam u knjižnicu, na CS50 knjižnicu.
DAVID MALAN: Ok, pa ako misliš ključne riječi niz, koji
postoji samo u CS50 knjižnici, točno.
To ne postoji u C sama, i doista u paru
tjedana ćemo baciti CS50 knjižnicu i početi
radi stvari od nule sebe, da se tako izrazim.
Ostala pitanja?
Da.
>> PUBLIKA: [nečujan]
DAVID MALAN: Dobro pitanje.
Jesu li naredbe slova?
I neka mi napraviti razliku ovdje.
Dakle, naredbe su općenito stvari ćemo pisati u
dno prozora, u terminal prozoru.
Sve do ovdje bi se izjave ili C kod.
No, u oba slučaja, odgovor je isti, da.
Obje od tih okruženjima, C koda na vrhu i
operativni sustav naredbenog retka u
Dno, su velika i mala slova.
Dakle, morate iskoristiti GetString s glavnog G,
kapital S. Morate napisati printf u svim malim slovima.
Morate upisati ls u svim malim slovima.
Dakle, u gotovo svakoj situaciji ovog semestra, slučaj će se, u
Činjenica, stvar.
Da.
>> PUBLIKA: [nečujan]
DAVID MALAN: Ah, pa dobro, što ako smo imali datoteku
zove hello.d.
Tako ispada D programski jezik.
I tako, u nekim slučajevima, mi zapravo mogli napisati program u
tu datoteku i to su sastavljeni u toj modi.
Možemo, i zapravo, kratak odgovor je, ne znam.
Tako da ćemo to učiniti.
Pusti me naprijed i stvoriti novu datoteku.
I centrifuge ovdje, iskreno u cjelini, kad god bilo sumnje
ovaj semestar, a vi imate svoj uređaj ili računalo
otvoriti, ići naprijed i pokušajte nešto.
Dakle, ja ću spremiti datoteku pod nazivom hello.d.
Spremi.
I ja ću pokrenuti napraviti halo Enter.
Činilo se da zaključiti da je c je više vjerojatno
od d, u ovom slučaju.
Ostala pitanja.
Da.
>> PUBLIKA: [nečujan]
DAVID MALAN: Ok, recimo da je još jednom.
PUBLIKA: [nečujan]
DAVID MALAN: Kako bi idete o dijagnozi da ili
rješavanje problema koji?
Dakle, najvjerojatnije, jer oni su različiti jezici,
najvjerojatnije će dobiti potpuno
drugačije Program outputted.
Ti bi dobiti potpuno različite poruke o pogrešci.
A također samo u smislu dizajna, nedvojbeno će biti
siromašni dizajn odluka da se pisanje dva različita
jezika s gotovo identično imenovanih datoteka, u
Isti katalog, koristeći
automatski alat kao što čine.
Dakle, ja također mogu gurnuti unatrag i reći u 15 godina to,
Nikad nisam napravio tu pogrešku.
Može se dogoditi.
No, tu je samo različite, mislim,
logistički obranu u mjestu.
Plus poruke o pogreškama koje bi proizašli, da bi
konačno otkriti u čemu je problem.
No, moguće kutak slučaj.
>> U redu, tako da ćemo uvesti samo nekoliko drugih
značajke sada ovdje, tako da možemo započeti s izgradnjom u više
i složeniji program.
Dakle, prije svega, iz matematike.
Dakle, matematika primjeri su samo vrsta lako u prvom tjednu.
To ne znači da su svi programiranje je o
matematika.
Dakako, razumijevanje različitih obilježja
matematike, algebre osobito je
vrlo relevantan ovdje.
U višim razinama CS klase, linearna algebra,
račun, i slično.
Ali realizirati većinu onoga što ćemo raditi ovaj semestar smanjuje ne
za matematiku, a svakako ne aritmetike, po sebi, ali stvarno
na samo logike i pažljivog razmišljanja.
I tako ovu vezu da informatika dugo je imao,
posebno na visokoj razini škole, s matematike, je
malo zabludu.
Budući da je većina programa koji ćemo pisati, stvarno su
vrsta višoj razini i usredotočiti na rješavanje problema koji,
sigurni, možda koristite neki zbrajanje, oduzimanje, i raznih
matematičke formule ili slično,
ali na kraju dana, to je oko razmišljati a ne
samo provodi ono što bi učinio na kao TI
kalkulator u srednjoj školi.
>> Dakle, s koje je rekao, hajdemo sada nešto učiniti s tim
matematički operatori koji ne postoje, tako da možemo izlet
preko neke od temeljnih aspekata programiranja, ili u
ovaj slučaj C. Dakle, postoje, kao CS50 knjižnica predložio,
, a danas smo samo pomoću GetString - iu trenutku
možda jedna druga funkcija -
ali postoje različite vrste podataka u računalu.
Na kraju dana, računala samo znam 0s i 1s.
No, podsjetimo da je prošlog tjedna razgovarali smo o binarnom sustavu
u predstavlja brojeve, kao broj 0 i 1, i 2,
sve način na do 8, kao iu Nate je video.
A onda možemo računati mnogo veći kao i mi
učinio na pozornici ovdje.
No, ako želite da predstavljaju ne samo brojeve, ali slova,
smo mi, ljudi, moram smisliti neke arbitrarne
konvencije, pri čemu ako se na kraju dana sve moje računalo
je je sposobnost da izraze 0s i 1s, dobro mi bismo bolje
početak standardizacije obrasce 0S i 1S koje predstavljaju
različite stvari.
Uzorak 0S i 1S koja predstavlja pismo je.
Obrasci 0S i 1S koje predstavljaju slovo z.
Obrasci 0S i 1S koje predstavljaju plava boja, ili
crveno, ili slično.
Moramo koristiti sve ove 0s i 1s da se izražavaju u
različitim kontekstima, na različite načine koji nisu
nužno numerički.
>> Dakle, u smislu zastupljenosti, C ima različite vrste podataka,
i vidjeli smo jedan od njih do sada.
Vidjeli smo int, a obavijest što nije na zaslonu
Trenutno je niz.
Gudački ne, u stvari, postoje u C. Opet, to je
pojednostavljenje smo predstavljanja za prvi
par tjedana.
Char je pojedinac lik.
Float je realna brojka, s decimalnom točkom i brojeva
lijevo i desno od njega.
Dvostruko je ono, za one s leđa prethodne pozadini?
Dakle, dvostruko je dva puta nešto.
Dodaje dvostruko više preciznosti.
Dakle, što to znači?
Dakle, u svakom od tih slučajeva, svijet ima kakve standardizirane
koliko bitova se koristi za predstavljanje
svaki od tih stvari.
Dakle, ako ste gledali Nate je ASCII videa već dio
od pset 0, ili kasnije ovaj tjedan što će, vjerojatno ćete znati
da ASCII -
karakter reprezentacije -
koristiti koliko bita?
A možda čak i zapamtiti iz našeg prosvjeda prošlog tjedna kako
mnogi ljudi su bili na pozornici.
Dakle 7 ili 8, u pravilu.
Dakle, općenito osam, a tu je nešto što se zove kao proširena
ASCII koji koristi svih 8 bitova, umjesto sedam.
No, u cjelini, govorimo u ovlasti 2, tako da u ovom slučaju, osam.
Dakle char u programskom jeziku je obično 8 bita.
Dakle, int je općenito 32 bita.
Plovak je općenito 32 bita.
Dvostruko je općenito 64 bita.
A što to znači?
To znači da može predstavljati veće brojeve, ili u slučaju
realnih brojeva, možete imati puno više brojeva nakon
decimalno mjesto.
Puno više preciznosti, u tom slučaju.
Sada dugo dugo nažalost se zove.
Dakle, tu je int, što je 32 bita.
Tu je dugo što je, nope, 32 bita.
I dugo dugo koji je 64 bita.
Međutim, neke od njih su osjetljiva na kontekst, to ovisi
kakav računalu imate.
Dakle, u cjelini, mi ćemo odrediti u zadaću ili u kvizu kada
to je zapravo važno.
No, stvar je tu je sve to drugačije
reprezentacije ovdje.
>> Dakle, neka je zapravo zaroniti u programu.
Umjesto napisati ovaj jedan od nule, pusti me naprijed
i otvoriti iz današnje izvornog koda - što je sve
online - ako želite da prtljati oko online, ili povratak na
Srijeda s aparatom na računalu, upute
za koje će se povezati na stazi početnoj stranici.
Evo super jednostavan program.
Ali to je dobio malo nešto novo na vrhu koji
nismo imali prije.
Puno plavih redaka teksta.
Dakle, ove plave linije predstavljaju komentare.
Dakle, to je vrlo korisno u programu da bi mogli pisati
neki komentari na sebe, ili s kolegama ili prijateljima, ili
nastavne momci, da vrsta opisati ono što se događa u
ovu sliku, ali imaju veze s C kod sebe.
Ništa učiniti s programom funkcionalno, to je samo
estetika.
Dakle, način na koji to učiniti u C je obično ćete početi svoje
komentari sa / * i svrši svoje komentare sa
* /.
A ako ste stvarno analni i kao izvući kakve slike,
onda bih stavio puno zvijezda, što bih napraviti
kutijica ovako.
No, ništa od toga pitanja.
Jedina stvar koja je bitna je prvi
i posljednji.
To je ono što se zove multi-line komentar.
I to je samo ljudska konvencija da često zvijezde i kutija
stvari u ovako, ako imate puno slobodnog vremena.
>> Dakle, nakon što ste napisali u nekim komentarima, općenito, dolaze
stvarne hrabrosti programa.
Evo naša poznata # include .
I baš brzo, to je potrebno ili nije potrebno?
PUBLIKA: Neophodna.
DAVID MALAN: Pa to je zapravo nije potrebno.
Pa zašto je, međutim, to nije potrebno?
Dakle, nema printf.
Doista.
Sve što radimo u ovom programu je matematika.
Dakle, ja zapravo mogu izbrisati to.
Dakle, ne moraju uvijek uključivati ​​ništa
vrhu programa.
>> Tako ćemo pojednostaviti ovaj malo.
I sada primjetiti ono što ovaj program radi.
Nije puno interesa.
int x = 1.
Pa, što je to radiš?
Pa, mislim natrag na mentalnom modelu od prije.
Na lijevoj strani ovog izraza što radi?
Napravite prostora za cijeli broj.
Dakle, koliko prostora?
Pa, mi se dogoditi da sada znamo da je 32 bita.
Prije toga, niz je tehnički 32 bita, ali više
na to u budućnosti.
No int je 32 bita.
Dakle, ovaj izraz na lijevoj ovdje, int x samo kaže hej
operativni sustav, daj mi 32 bita RAM -
inače poznat kao 4 bajta RAM -
tako da ja mogu staviti cijeli u tom prostoru.
Što cijeli si htio staviti?
Pa, samo broj 1.
int y dobiva dvije, radi točno istu stvar, iako
broj je veći, u smislu njegove veličine.
Sama brojka je još samo 32 bita.
To je samo uzorak bitova se razlikuje
predstavljaju jedan nasuprot dva.
int z sada kaže mi dati još 32 bita, nazovite ga z, i staviti
zbir 1 i 2 u tamo.
Tako da sada z vjerojatno je spremanje vrijednost 3,
a zatim se vratiti 0.
>> Sada je ovaj program, to ništa interesa?
Tako da zapravo ne učiniti ništa zanimljivo, u bilo
smislu, jer zašto? To je događaj neki math.
No, to nije povratak odgovor, zar ne.
To je povratak 0.
To ne znači tiskanje odgovor.
Dakle, ovaj program je u osnovi isprazna, kao što je
stoji sada.
To radi neki posao.
To će potrajati neko broj sekundi, ili mikrosekundi, na
pokrenuti, ali to nije zapravo radi ništa
korisno za čovjeka.
>> Dakle, neka je zapravo sada otvoriti math2, gdje sada sam zapravo
ispis rezultata.
Dakle, to također može zaključiti iz naših prethodnih primjera.
Ako želim napraviti neke jednostavne matematike, int x = 1, y
= 2. z je 1 plus 2 sada.
Što se to događa s isprintati očito?
Samo tri.
Tako brzo razum ček.
Dopustite mi da se presele u ovaj direktorij.
Dakle, cd source1m.
Pusti me naprijed i upišite napraviti math2.
Nema pogreškama izašao, pa neka mi pokrenuti -
Ne a.out--neka mi pokrenuti math2. Upišite.
I doista, to ispisati tri.
Pa hajdemo pogledati varijanta to.
U math3.c, sada imamo ovaj primjer ovdje.
>> Dakle, ovo je jedna vrsta zanimljiva.
Dakle, u tom jednom ovdje, odgovor će dobiti jedan podijeljena 10,
i primijetiti sam proglasio kao float.
Zašto želim da bude plovak?
Pa, to je dio.
To će biti pravi broj.
Dakle, to će biti 0,1, nadamo se - 10%, u ovom slučaju.
A što ja onda želim isprintati?
Pa, ovaj odgovor.
Pa, neka je zadirkivao to osim prvi.
Dakle, na lijevoj strani, izjavljujem
plutaju, nazovite to odgovoriti.
Na desnoj strani, ne jednom podijeljena 10 i staviti da
odgovoriti na unutrašnjost varijable.
Sada, ova linija izgleda malo više zagonetan.
Ali primijetite neke poznate značajke. % Znači ovdje dolazi
rezervirano.
f znači evo Krajnja vrijednost, samo pravi
broj, nešto s decimalnom točkom.
0,2 znači što?
Svatko zna iz prethodnog iskustva?
Dvije decimale.
Dakle, mi ne vidio ovo prije, ali to je samo način
vježbanje malo više kontrole nad printf i
izreka ne daj mi 30 bodova nakon decimalne točke,
umjesto daj mi samo dvije.
>> A onda idemo naprijed i pokrenuti ovo.
Tako bi matematiku 3, a sada neka mi pokrenuti matematike 3, Enter.
A to nije u redu.
Izgleda da smo naišli naš prvi pravi grešku.
Pa, možda sam samo ne gleda dovoljno blizu.
Dakle, pusti me ovdje, i neka mi stavi 20 decimale
point mjestima.
I neka mi sastaviti to učinili, math3, pokrenuti.
Prilično siguran 1 podijeljeno 10 nije 0.
Dakle, što se događa?
Pa dobro, tako da zapravo ne morate učiniti s tim.
To je dobra misao.
To je zapravo samo slučajnost
da smo to.
Ali samo dokazati da to nije to, ja ću
vratiti nešto slučajan.
Nemojte to učiniti kod kuće, jer to je samo krivo.
Ali bi math3, dopustite mi da ga pokrenuti.
Dakle, nema nikakve veze s onim što sam povratka, samo treba napraviti
s tim što sam ispis.
Ali sam ga čuo ovdje dolje.
Što?
PUBLIKA: Dakle, trebamo pisati brojeve u
Podjela kao -
>> DAVID MALAN: Ok dobro.
Dakle, moramo napisati brojeve koji sudjeluju u
Podjela ovdje kao plutajuće točke se cijeni.
Dakle, problem je kao i prije: C, kao i sa puno
jezici, ima različite vrste podataka.
A ti tipovi podataka, na primjer, da su ovi ovdje.
A tipovi podataka u pitanju ovdje, kad sam upisati 1, a onda sam
Tip 10, su vjerojatno ono što vrste podataka?
Dakle, to je vjerojatno int, zar ne?
To definitivno nije float jer nema decimala
točka ili bilo što slično.
Pa stvarno, imam int podijeljene int.
>> Dakle zanimljiva stvar o matematici i računala je da
ako radite podjele koristeći prirodna broja -
1 podijeljeno 10, da je 0.1.
Međutim, kada ste dijeljenjem integer po cijeli broj,
Odgovor mora biti i cijeli samo zato, za sada.
A što je implikacija onda?
Pa, ako je odgovor jedna je podijeljeno 10 jednak 0,1, što
Računalo će učiniti je nemam pojma kako
predstavljaju 0,1, jer je to Krajnja vrijednost, ne
integer; to će odsjeći sve nakon
decimalna točka i samo vam pokazati 0 na početku.
A činjenica da je tiskanje kao plutajući točke
vrijednost, to je samo estetski stvar.
To je zato što sam prisiljavajući računalo za ispis ovo kao
Krajnja vrijednost.
I doista sam ga proglasio kao float, ali matematika
događa ovdje.
>> Pa neka mi zapravo popraviti u jednoj prilično jednostavan način.
Zašto ne samo napraviti 10,0 i 1,0, iako
tehnički sam mogao izvući samo radi jedne od njih.
Sada neka mi ići naprijed i učiniti math3.
Pusti me naprijed i sada pokrenuti math3, Enter.
I sada, oh boy.
Sada imamo novi problem uopce.
Dakle, bolje, zar ne, mi smo bliže 0,1, ali ono što je jasno je
krivo ovdje?
Ako smo je lagao za godine, zar ne?
1 podijeljeno s 10 je zapravo nije sasvim 0.1, tako što je
Stvarno se ovdje događa?
Pa možete vrsta razloga kroz to logično.
Ako računalo ima samo ograničenu količinu RAM-a za početak
sa, i doista računalo samo koristi 32 bita za
Krajnja vrijednost, logično je da s
konačan broj bitova, 32 u ovom slučaju, da, možete
predstavljaju puno stvari.
To je zapravo četiri milijarde različite vrijednosti mogu biti
zastupljena s 32 bita, 2 do 32, ali to je još uvijek konačna.
Dakle, problem je tu beskonačan broj stvarnom
brojevi, desno.
Ako mi dati pravi broj, ja uvijek mogu naći jednoga
nešto veći, nešto manje, a samo ugađati
brojevi koji su nakon decimalne točke.
Dakle, ako nemate neograničen broj bitova, što
nikako ne može predstavljati beskonačan
broj realnih brojeva.
>> Dakle, tu je ovo svojstveno nepreciznost u računalima, a
to dobiva spotaknuo svih vremena čak i najjednostavniji
Programi kao što je ovaj.
No, također u nekim vrlo stvarnim problemima, kao dobro.
U stvari, uzmimo na trenutak samo pogledati
nešto što se zapravo dogodilo u stvarnosti.
Mi ćemo gledati samo prvih par minuta, a zatim
ćemo objaviti online vezu.
No, to je dokaz da se samo ono što može poći krivo, sasvim
iskreno, u vrlo tragičan način, kada te stvari nisu
poštovati ili samo mi ljudi griješe kada je u pitanju
ove vrste provedbenih detalja modernih računala.
>> [Video igranje]
-Mi smo sada vratiti inženjering katastrofa na modernim čudima.
Računala.
Svi smo došli da prihvati često frustrirajuće problema
da ide s njima.
Nedostaci, virusa i softver glitches su male cijene na
platiti za praktičnost.
No, u high-tech i visoke brzine vojske i prostora
programskih aplikacija, najmanji problem može biti
uvećana u propast.
Na 4. lipanj 1996, znanstvenici spremni lansirati bespilotnih
Ariane 5 raketa.
To je prevozio znanstvenih satelita namijenjene
utvrditi točno kako je Zemljina magnetskog polja
komunicira sa solarnim vjetrovima.
Raketa je izgrađen za Europske svemirske agencije i
uzletio iz objekta na obali Francuske Gvajane.
>> -Na oko oko 37 sekundi u letu, oni prvi
Primijetio je nešto pošlo krivo, da su mlaznice bile
zakretanje na način da stvarno ne treba.
Oko 40 sekundi u letu, jasno vozila
bio u nevolji, a to je kada je donio odluku da
ga uništiti.
Časnik Raspon sigurnost s ogromnim pritiskom crijeva
gumb, raznio raketu prije nego što je mogao postati
Opasnost za javnu sigurnost.
>> -To je bilo prvo putovanje od Ariane 5, a njegova
uništavanje dogodio zbog mana ugrađen u
Rocket je softver.
>> -Problem na Ariane je da je broj koji
zahtijeva 64 bitova izraziti i htjeli su ga pretvorili
na 16 bitni broj.
Oni Pretpostavlja se da broj nikad nije bio
će biti vrlo velika,
da je većina od tih znamenki u 64 bitnom broju bili 0s.
Oni su bili u krivu.
>> -Nesposobnost jedne programu prihvatiti
vrsta broja generirani od strane drugog je u korijenu
neuspjeh.
Softver razvoj je postala vrlo skupo dio
Nova tehnologija.
The Ariane 4 Raketa je bio vrlo uspješan.
Toliko od softvera stvorena za njega je također bio korišten
u Ariane 5.
>> -Osnovni problem je da Ariane 5 je bio brži,
ubrzan brže.
A softver nije činio za to.
>> -Zabranjeno je uništavanje raketa bio veliki financijski
katastrofa, sve zbog minuta softvera pogreške.
No, to nije bio prvi put da podaci o pretvorbi problemi imala
udario moderne raketne tehnologije.
>> DAVID MALAN: Mi ćemo ostati na tome.
No, to je dokaz da se samo kako je primjenjivo čak i neke od
ove najnižu razinu pojedinosti koje smo počele
istraživati ​​danas su.
Dakle, čak i kao što ste dobili malo rastresen možda neki od
sintaksa i arcaneness ovdje, shvatite da nad
Pojam ćemo se fokusirati samo na to kako je primjenjivo to je
svjetovi daleko izvan CS.
Mi ćemo vas vidjeti u srijedu.