[Powered by Google Translate] DAVID MALAN: Acesta este CS50, iar acest lucru este începutul săptămânii 1.
Ceea ce ne-am gândit facem astăzi este să ia o privire înapoi la
ceva mulți dintre voi ați mers, probabil, pentru unii trecut
Acum si ar putea arata un pic familiar.
Acest lucru aici, asta, desigur, este în -
PUBLICUL: Stiinta.
DAVID MALAN: Science Center.
Deci, aceasta este de fapt una dintre cele mai vechi calculatoare
Inapoi din anii 1940.
Acesta a fost unul dintre primele calculatoare electromecanice
care a fost capabil de deosebit de lungă,
auto-susținute calcule, și a ceea ce vedem, de fapt, în
Centrul știința este doar o bucată mică de acest lucru.
Ceea ce ne-am gândit apoi face este să ia o privire înapoi la un videoclip
care a fost făcut ceva timp în urmă, introducerea acestei
lucru pentru a lumii.
Și veți vedea de la muzica si vocea care într-adevăr cele
au fost vremuri foarte fericite.
>> [PLAYBACK VIDEO]
-Un triumf de calificare matematice și mecanice este aceasta
Calculator de mare nou automată la Universitatea Harvard.
Probleme complicate de matematică, a pus prin
aparatului în formă codificată pe bandă, sunt exact rezolvate într-un
fracțiune de minute timpul necesar pentru consumul uman
calcul.
Conceput pentru a accelera toate formele de matematică și științifică
de cercetare, gigantul creier mecanic va lucra pentru United
Marina Statelor până la sfârșitul războiului.
>> DAVID MALAN: Deci, ceea ce ar putea să nu știți este că a fost, în
acest dispozitiv același care un termen noi toți iau acum destul de mult
ca de la sine a fost inventat, că de un bug.
Deci, unul dintre inginerii care lucrează în acest computer
găsit literalmente o molie mică în mașina care a dus
în unele calcule incorecte.
Și, după cum povestește că molie a fost filmat la acest jurnal
jurnal aici, înapoi din 9 septembrie în 1940, ceva,
și, astfel, sa născut pentru lumea termenul de "bug".
Deci, de acum înainte vom considera bug-uri pentru a fi orice fel de greșeli în
programe, indiferent dacă om sau, în acest caz, insecte.
>> Deci, un anunțuri câteva, așa cum vom proceda.
Deci, CS50 are o tradiție de a oferi prânzuri de felul în
majoritatea vinerea în timpul semestrului, în cazul în care vom lua 30 la
40 de elevi la foc și gheață, în Piața pentru casual
chitchat, vorbesc despre stiinta de calculator,
vorbim despre viitor.
Vă invităm absolventii si prieteni de la industrie la chat-up
studenți, precum și.
Într-adevăr spre un scop de a face ceea ce este o clasa destul de mare
toate mai intim, cel puțin o dată în timp ce pentru
subseturi de studenți.
Deci, dacă doriți să ni se alăture în această vineri, 01:15 PM, du-te la
CS50.net/lunch la RSVP.
Și vom face acest lucru recurringly, nu atât să vă faceți griji dacă nu ești
printre primii 30 sau cam asa ceva în această săptămână.
>> Deci, note Scribe.
Un cuvânt pe resursele care vor începe acum fiind disponibile
elevilor din clasa.
Așa că vă capetele nu trebuie să fie în timpul prelegerilor
zmângăleală jos tot ceea ce spun și așa mai departe, ceea ce facem
în loc să se ofere de la cadrele didactice o
set canonic de note.
Deci, avem unul dintre semenii noștri de predare, Andrew Sellergren,
care se așează în fiecare săptămână, opiniile videoclipuri, și apoi
notează ceea ce noi credem că este o destul de
set de note de autoritate.
Și lui Andrew fond, de asemenea, de a pune note de subsol în snarky
partea de jos.
Deci, vă veți bucura de acestea, sperăm ca o carte de referință pentru
distracție, și, de asemenea, vin test timp, ca o oportunitate de a revizui
ceea ce sa întâmplat în prelegeri individuale.
Deci, cei care sunt legate, pe pagina de prelegeri.
>> Set de probleme 0, între timp, se află în afara.
Și în ceea ce privește resursele disponibile pentru tine -
walkthrough.
Milo a condus prima vineri.
Acesta a fost filmat, pus online de sâmbătă.
Și dau seama deci, dacă nu sunteți sigur de unde să încep,
pentru acest lucru sau viitoare p-seturi, întoarce întotdeauna primul
walkthrough sau cu privire la aceasta videoclipul.
Secționarea este în curs de desfășurare; în cs50.net/section este locul unde vă
ar trebui să prezinte preferințele, dacă nu aveți
deja, de astăzi.
Deoarece secțiuni va începe în această duminică vine, luni,
și marți.
Noi facem aceste secțiuni de trei zile, în fiecare săptămână de
semestru pentru cea mai mare parte.
Și noi, de asemenea, să introducă, din nou, piste diferite.
Deci, veți fi întrebat pe acest formular de secționare, dacă
nu l-am văzut deja, dacă ești printre cei mai puțin
confortabilă, mai confortabil, sau undeva în între.
Și dacă ești un fel de pe gard, în general, undeva în
este ceea ce majoritatea dintre elevii ajung verificare.
Program de lucru începe în seara asta.
>> Deci, Scratch este cheia destul de scăzută, chiar dacă este destul de natural
pentru a rula în diverse bug-uri, sau să fie îndoieli cu privire la modul de a
punerea în aplicare a ceva.
Deci, ne dăm seama că va începe oră de birou în această săptămână.
Vor fi la Annenberg Luni, Marți, Miercuri,
Joi, 8:00 - 11:00 în timpul pauzei de creier.
Classmen superioare pot obține în, și, dacă aveți vreodată probleme cu obtinerea
în ușă, pentru că acestea vor fi trecerea peste ecran, doar vorbim calea ta
in și explică esti cu CS50.
De obicei 20 la 30 din noi privind personalul va fi acolo pentru a ajuta la
tu unu la unu.
>> La sosire ideea este aceasta: vei aduce laptop-ul,
vei avea încărcătorul, vom avea cabluri de alimentare suplimentare,
în special de-a lungul peretelui de sud a Annenberg în cazul în care
există o mulțime de prizele electrice.
Și principalul punct de intrare pana la birou oră Q & A este de a merge la
cs50.net/discuss și pentru a posta
vînzătorului acolo.
Și să-l eticheteze cu PSET 0 sau PSET 1, indiferent de săptămâni
s-ar putea întâmpla să fie.
Și atunci ce vom face este să aibă o masă a semenilor didactice
și asistenți de curs, în general, 8 sau 10 sau cam asa ceva de noi,
prin care trece, ține un ochi vigilent pe bord, și
jumulire pe întrebări cu adevărat cât de repede putem,
referindu-vă la posturile aferente, dacă nu ați găsit cele
vă, referințe online, după caz.
Și apoi, dacă există probleme, deoarece există în mod inevitabil
va fi, sau face doar mai mult sens să se așeze unu la unu,
lucreze prin problemele cu cineva.
>> Sau ai venit doar în orele de birou cu adevărat
nevoie de această stare de spirit.
Tu nu vrei să mergi prin formă electronică, vă
într-adevăr vrea să se întâlnească cu cineva.
Comunică faptul că la noi, și ce se va întâmpla este atunci când dumneavoastră
întrebarea a fost văzut de către un membru al personalului, iar noi
determină, yup, acest lucru ar trebui să fie expediate către unul din 20 sau
30 de membri ai echipei aici pe plan local, veți vedea în partea de sus a lăsat asta
Introduceți putin butonul de coadă începe să lumineze intermitent pe cs50.net /
discuta.
Și acest lucru este vă spun că acum au fost invitați, astfel încât
de a vorbi, pentru a intra coada.
Și făcând clic pe acest buton, numele dumneavoastra va aparea apoi pe
un iPad care Greeter CS50, unul dintre capetele de curs, va
fie deține aproape de intrarea Annenberg, care va fi apoi
văd cum este descris aici, elevii care au întrebări cu privire la
stânga, membrii personalului care sunt prezenți pe dreapta.
Și cu un clic de stânga și dreapta, browser-ul web va
începe să clipească, cât mai curând, de exemplu, profesorul McGonnagal
este gata să te văd la o masă special în Annenberg.
>> Așa că am făcut parte din ultimul an.
Am repornit oră de birou și
re-implementat o mare parte din software-ul.
Deci dau seama că acest lucru va fi încălzi în această săptămână.
Dar, de asemenea, seama de asemenea, în ultimii ani, așa cum s-ar putea să fi auzit
de la prieteni, într-adevăr, oră de birou au avut 50 la
150 de elevi de la o dată.
Și e pur și simplu nu este posibil pentru noi să se ocupe de asta
în mod eficient, unu la unu, de-a lungul seara.
Și astfel ceea ce sunteți cu adevărat de gând să încercați să faceți acest an este
valorifica pe faptul că o mulțime de întrebări sunt
frecvent solicitat și poate fi de multe ori mai bine răspuns
asincron.
Astfel încât să puteți sorta de cred că prin răspunsul personalului,
și ne putem gândi prin codul, fara încălzită
Presiunea de luptă în mod necesar
prin ea cot la cot.
Deci, estimăm că aproximativ o treime sau jumătate din întrebările
vor fi expediate în persoană, și vom încerca să smulgă off ca
mulți ca o jumatate sau mai mult pe cale electronică,
în timpul orelor de serviciu.
Și vom continua să folosească Discutați
pe tot parcursul săptămânii, de asemenea.
>> Și, în fine, seama că acest curs pot fi luate trece / nu.
Deci, dacă sunteți pe gard sau doar crezi că ești cu adevărat
nu sunt sigur dacă acest lucru este lume pentru tine, sau aceasta este într-adevăr
destul de străin de tine, seama că aceasta este o modalitate minunată
de a obține niște probleme cu care să-și intensifice în
clasa, cum am făcut eu sincer, de ani în urmă.
Și apoi au cinci săptămâni pentru a sorta de figura afară pentru
te dacă vrei să stai treci / nu, treceți la o scrisoare
grad, sau similar.
Și de obicei, ceea ce trece / nu are, cred, pentru studenți este
că, în cazul în care ați pus în faptul că 10 ore, 20 oră, orice ar fi
poate fi pe unele probleme, iar tu trage capul
împotriva perete,
și într-adevăr pur și simplu nu se poate urmări ceva în jos, și tu
au atât de multe lucruri de care aveți nevoie pentru a face, sincer, ceea ce am
cred că treci / nu este, este nevoie de marginea de pe
situații ca asta.
În cazul în care ați luat chestia de 90% din drum.
Știi, nu e chiar perfectă.
Dar ai o mulțime de ea, totuși.
Deci, ia în considerare trece / nu ca oferindu-vă că
model mental, probabil.
>> Toată săptămâna dreapta, deci trecută am scufundat în Scratch, și am
a vorbit despre programarea la un nivel destul de ridicat grafic.
Și astăzi vom face tranziția către o limbă
numit C, un limbaj de programare de nivel mai mic pe partea de sus a
care mai multe limbi moderne sunt acum construite, inclusiv unele
din cele pe care le vom folosi spre finalul termenului.
Și punct de vedere sintactic, ceea ce arata ca
este tot destul de asemănătoare.
Așa că hai să începem să facă această tranziție aici.
Deci, asta a fost un program de săptămâna trecută, care a fost mai simplu de
salut programe mondiale.
Este pur și simplu pentru a imprimat lumii ecranul salut, cu un
bule mic discurs iese din pisica.
Ei bine, dacă începem acum să traduce aceasta într-un alt
limbaj, dau seama că ideile de astăzi și miercuri
sunt identice, dar sintaxa începe să se schimbe.
Deci, întrucât săptămâna trecută am avut, când steagul verde clic, spune
salut lume.
Astăzi vom avea int, void main,, printf,
retur, cu unele sintaxa alt acolo, de asemenea.
Acolade, și paranteze, și citate, și fleacuri.
Dar seama că nucleul Ideea aici este de imprimare,
și în cele din urmă faptul că principala este acum va fi
sinonim cu plecare al unui program.
Principal va fi în cazul în care steagul verde începe lucrurile off.
>> Deci, acum sa tachineze pe langa unele dintre pietrele de temelie aici
înainte de a ne scufunda în unele exemple concrete.
Așa că am sunat săptămâna aceasta o declarație trecută, prin care e doar
o instrucțiune.
Face acest lucru - în acest caz, spun Salut lume.
Ei bine, în C, dacă ne uităm la acea linie, acest lucru este modul în care suntem
O să încep exprima această piesă de puzzle special:
printf ("Hello World");.
Și acum vom tachineze acestea în afară mai mult și mai mult în timp,
dar dau seama că există un model aici.
Deci unul, avem acest lucru numit printf, care este
în esență, similară cu cuvântul Say.
Asta e ceea ce va face.
Printf, și f aici înseamnă "formatat".
Deci, doar înseamnă că puteți insera
diverse detalii estetice.
Deci, citatul citat este începutul a ceea ce vom
pentru a începe un șir de asteptare.
Un cuvânt, o frază, o propoziție.
Un șir într-un limbaj de programare este o secvență de zero
sau mai multe caractere.
Deci, h-e-L-L-o, virgulă, și așa mai departe este,
citatul citat, un șir.
Și acum backslash n, un pic ciudat punct de vedere sintactic, dar noi
deja definite ca saptamana trecuta ca însemnând ce?
E doar o linie nouă.
E doar un mod de a transmite la computerul pe care doriți
echivalentul a lovi Enter acolo, dar tu nu faci
vrei sa lovit, de fapt Introduceți și, prin urmare, strica tot
formatarea din programul dvs. real.
Acum paranteze anexați acestui șir, deschis și paren
paren aproape, și în interiorul nostru, care este șir.
Pentru că asta e pentru că, în C, si programare alte
limbi, lucrurile place să ia printf argumente, sau de a lua
parametri.
>> Deci, începem să ne gândim acum de acest bloc Spune violet ca un
funcție, ca o metodă, ca o procedura.
Puteți apela cu adevărat ce vrei tu, pentru moment, dar
E un fel de program de miniatură pe care doar face o
lucru, într-o singură linie, nu mai puțin.
Deci printf este, de asemenea ceea ce am de gând să înceapă o asteptare
funcției, precum și funcțiile de face ceva - în acest caz,
imprimă un șir formatat pe ecran -
dar funcțiile lua, de asemenea argumente sau parametri.
Și prin argumente sau parametri, vă mulțumesc, ne referim
că comportamentul lor poate fi influențată de ceea ce trece în
interiorul parantezelor.
Deci, în acest caz, nevoile printf se spună ce să imprimați, iar noi
doar trec în, în ghilimele duble aici, șirul pe care le
de fapt, doriți să imprimați.
Și virgulă privind sfârșitul acestei linii este doar o
pacoste istorică prin care, la sfârșitul celor mai multe linii de cod,
ai pus o virgulă pentru a face super-clar pentru calculator
faptul că această linie de cod se termină aici.
Acum, acest lucru este bun, deoarece, după cum vom vedea ca programele obține mai mult
complexă, punct și virgulă va face super-om clare pentru noi,
și, de asemenea, calculatorul, în cazul în care liniile de cod început și de sfârșit.
Seama că unele limbi nu au unele
dintre aceste detalii aceleași.
Și, de fapt, în JavaScript, nu aveți nevoie întotdeauna ceva
ca punct și virgulă.
Dar mai multe despre asta să vină.
>> Deci, bucle.
Am avut ceva de genul asta, foarte intuitiv, evident, nu
ceva nou și din nou și din nou.
Vrei punerea pe ciorapi, sau de a spune salut, în acest caz.
Ei bine, incepand de astazi în C, am putea exprima această Scratch
bloca ca in timp ce (adevărat) printf ("Hello World").
Deci, observați că începi să se bazeze pe literal puzzle
piesa de dinainte.
Avem același bloc violet, dar e în interiorul acestei
paranteze totdeauna bloc, iar cel mai bun mod de a traduce faptul că
la C este după cum urmează.
Nu e nici totdeauna cuvinte cheie.
Nu puteți chiar tip F-o-r-e-v-e-r în C.
Deci, cel mai apropiat analog este timp.
>> Acum, în timp ce (adevărat) pare un pic stupid, deoarece nu valoarea
despre schimbarea vreodată adevărat?
Probabil că nu.
E ca și cum spune în timp ce unul, în timp ce pe, în timp ce adevărata.
Totul e același lucru, adevărată este întotdeauna cazul.
Deci, aceasta bucla se induce, de fapt ce fel de buclă?
Doar o buclă infinită, dreapta.
O bucla Forever sau cum l-am numit săptămâna trecută,
doar o buclă infinită.
Asa ca, uneori asta e de rău.
Uneori, asta e un bug, uneori, de aceea te
minge de plaja filare, sau clepsidra sau similar.
Dar în acest caz, am deliberat, pentru orice
motiv, a vrut să imprime același lucru din nou
și din nou și din nou.
Sau, în cazul în care ca un ceas, vrei să faci
ceva nou și din nou și din nou.
Deci bucle infinite s-ar putea face sens.
Și acest lucru este modul în care, în C am putea traduce totdeauna la cod.
>> Deci, acum, asta e un pic mai specific.
Ne-am repeta de 10 ori următoarea declarație.
Deci, în timp ce (adevărat) nu funcționează destul de acolo, pentru că adevărată este
întotdeauna adevărat.
Deci, dacă ne uităm în schimb, la versiunea C, acum devine o sintaxa
puțin mai criptic.
Dar pentru a fi sincer odată ce începe să vedeți acest lucru, totul devine
destul de familiar de repede.
Deci, asta este ceea ce se numește un pentru buclă.
A pentru buclă este de gând să-i spun computer pentru a face ceva
din nou și din nou și din nou, atât timp cât
aceste lucruri sunt adevărate.
Acum, ce ne spui cu asta?
Ei bine, nu e trei părți la un pentru buclă, și am de gând să
reveni la acest lucru în contextul actual
exemple într-o clipă.
Deci, nu vă faceți griji în cazul în care nu se scufunde destul dintr-o dată.
Dar int i = 0 este, pe scurt, spunând da-mi un
variabilă care este de tip întreg, asa ca acorda-mi un număr de
numit i, și inițializa-l la 0.
Asta e ca și cum mi dea o variabila x algebric și
inițializa-l la 0.
Dar în acest caz, am numit-o eu.
Apoi, în mijloc, se spune că este mai mic de 10.
Asta spune calculatorul nu chestii următorul atât de mult timp
ca i este mai mic de 10.
Și, evident, de a începe mai puțin de 10, deoarece
începe de la 0.
Apoi în sfârșit, puteți ghici, probabil, ceea ce am + + mijloace.
E un pic de sintaxă, care înseamnă doar incrementa i.
Adaugă astfel încât de la 1 la i, din nou și din nou și din nou.
>> Și așa cum vom vedea, aceasta bucla, această sintaxă, mai degrabă, implementeaza
exact același lucru pe care, sincer, în Scratch a fost doar atât de
mult mai ușor să-și exprime.
Repetați 10, și ați terminat.
În C, iar în majoritatea limbajelor de programare, trebuie să fie un
putin mai instructiv pentru calculator și de fapt
specifica ceva de genul asta.
Dar ne vom reveni la acest lucru și sintaxa altele.
>> Ce zici de variabile?
În Scratch am avut ceva de genul aceste blocuri portocalii,
în cazul în care aș putea declara o variabilă.
Să numim arbitrar contra.
Să-l inițializați la 0, și apoi
hai sa facem ceva pentru totdeauna.
În acest caz, în Scratch spun contra, astfel încât
pisica va avea un balon mic discurs care vorbește
numărul care este în această variabilă.
Și apoi avem contra schimbărilor de 1.
Deci, toate acestea sunt înfășurat în interiorul un sistem de blocare pentru totdeauna.
Deci, avem deja acum blocuri în C cu
care să traduce aceasta.
>> O modalitate am putea face asta este aceasta.
Dă-mi un întreg, o numesc contra.
Inițializa-l la 0
în prima linie acolo.
În timp ce (adevărat), așa că eu sunt furat ideea de la doar un moment
Acum, mergeți mai departe și procedați în felul următor.
Imprima contra, iar apoi incrementați contra,
din nou, și din nou, și din nou.
Sau, din nou, + + înseamnă doar adăuga la 1 la ceva.
Dar există o nouă piesă de sintaxă aici.
Ce se sărind ca nu se numără printre exemplele noastre anterioare?
Da, asta d%.
Deci, se poate deduce ce poate face, sincer, pe baza
asupra a ceea ce blocul Scratch este de a face.
Dar, din nou în C, trebuie doar să fie un pic mai special
atunci când vine vorba de a ne exprima.
>> Deci printf ("% d \ n").
Ei bine, de cele mai multe pe care le putem arunca la fel de familiar.
Cele mai citate înseamnă doar că este un șir de caractere, backslash n
este doar o linie nouă.
Deci, singurul lucru nou pe aici este d%.
Și tot ce este este un substituent.
D% va pentru a desemna un număr zecimal.
Și computer% d mijloace, a pus un număr zecimal aici.
Ei bine, ce număr vrei să afișezi acolo?
Ei bine, după cum se poate deduce, probabil, după virgulă spunem
contra, asta e numele unei variabile pe care le declarată sau
a creat câteva linii mai devreme.
Deci, aceasta este doar felul lui C de conectarea într-o variabilă într-un
șir dinamic.
Pentru că prin contrast, dacă aș fi făcut așa ceva în schimb
acest, printf ("counter"), care ar fi aceasta
Programul face schimb, probabil?
Va imprima literal "contra".
Ceea ce nu este efectul pe care vreau.
Am nevoie să substituie, în unele valoare numerică.
Deci, vom vedea că funcțiile de atunci, la fel ca printf, nu pot lua
doar doar argumente simple, cum ar fi
"Hello World".
Ele pot lua citatul citat virgula, iar apoi unele variabile
care va primi conectate la, după cum vom vedea șirul precedent
prin intermediul acestor substituenți% semn.
>> Ei bine, ce zici de expresii booleene?
Expresii booleene erau aceste valori, adevărate sau false.
Da sau nu.
1 sau 0.
ON sau OFF.
Deci, în Scratch acestea arata ca aceasta, și observați că
Blocul de jos aici este de fapt coroborat
a două blocuri mai mici.
Asa ca am un fel de târât și a scăzut trei bucăți de puzzle
împreună pentru a face această piesă de puzzle mai este acolo, astfel că am
ar putea transmite ideea că vreau x să fie mai puțin decât y și
y pentru a fi mai puțin decât z.
Și așa am putea traduce aceste două linii separate, după cum urmează.
Cel de sus poate fi foarte trivial tradus în C,
doar cu x <y.
Poate cu unele paranteze pentru o bună măsură.
Și apoi în C, nu scrie și pentru a desemna
coroborat cu ceva.
Scrii în loc &&.
Și, după cum vom vedea în cele din urmă, un singur ampersand se întâmplă cu
Adică ceva diferit.
Deci && denotă doar ideea de AND.
>> Deci, din nou, chiar dacă acest lucru începe să arate destul de complex,
unul din scopurile de introducere Scratch, în afară de
având doar un fel de distracție pe rampa, unde puteți face
ceva care este foarte grafică, și animat, și
partajabile și cum ar fi, de asemenea, este de a transmite ideea că
toate ideile pe care le încep scufundări în ziua de azi și mai departe
au fost încorporate în chiar atât de simplu
Interfața din prima zi.
Ce zici de asta de aici?
>> Așa condiții.
Deci, bloc Scratch pe stanga arata
un pic mai complex.
Dar e doar o glisare și
scădere de piese de familiare.
Dacă x este mai mic decât y, spune acest lucru.
Altfel daca x este mai mare decât y, spune acest lucru.
Altfel, putem presupune în mod logic se deduce că
acestea trebuie să fie egal.
Deci, spun că ele sunt egale.
Acum in C pe un lucru bun, exact același.
Și observați că acolade vor fi o
caracteristică a C și alte limbi care fac acest tip
de încapsulare.
La fel ca în cazul în care blocul este acest lucru galben, care e un fel de
hapsân bloc violet în interiorul său.
În mod similar sunt aceste bretele -
aceste acolade -
menite a evoca faptul că aceeași idee de a îmbrățișa una sau mai multe
de linii de cod, care sunt indentate interiorul lor.
Deci, pe partea dreaptă aici, dacă x mai mic decât y, printf
("X este mai mic decât y").
Altfel daca x este mai mare decât y, imprimați aceeași.
Altele imprima că ele sunt egale.
>> Deci, pe scurt, e destul de o mapare directă sau traducere
a limbii care le-am văzut până acum, inclusiv pentru unii
dintre caracteristicile de mai sofisticate.
Deci, nu ar putea fi folosirea acestui pentru proiectul dumneavoastra, sau s-ar putea să nu
folosi acest proiect pentru dvs. în această săptămână.
Dar am aceste lucruri numite matrice în C. În Scratch,
se numesc liste.
Și am văzut acestea cu RPG Fruitcraft săptămâna trecută.
Micuțul albastru, care a fost de mers pe jos în jurul valorii de, ridicarea
cireșele și portocale și similare.
Ei bine, în Scratch, care a fost pusă în aplicare cu această portocaliu
bloca care conține cuvinte, în acest caz, suntem literalmente
adăugând "portocaliu" într-o
variabilă numită inventar.
Deci, în C, această sintaxă este mergi la a lua un pic mai mult criptic.
Și vom reveni la această săptămâna viitoare și să facă mai mult
lucruri interesante în lumea criptografiei cu ea.
Dar, în partea de jos aici, în esență, aceste două linii
traduce ceea ce facem intr-unul Scratch bloca acolo.
Dar mai multe despre asta să vină.
>> Deci, a pune împreună, aici este un program în C. Deci, haideți să
rapid tachineze pe langa unele dintre piesele de sintaxă aici, dar
apoi să începem de fapt, scris unele cod, familiarizarea
vă cu unele dintre instrumentele vom fi folosind, și să vedem dacă ne
se poate baza pe acum unele dintre aceste blocuri de constructii de baza de la
săptămâna trecută, acum punct de vedere sintactic în C. Deci, la partea de sus aici, această
este, probabil, unul dintre programele cele mai plictisitoare ai putea
scrie în cele mai multe orice limbaj de programare.
Dar e un fel de are o insemnatate speciala pentru că e
Programul canonică că orice om de știință de calculator, scrie atunci când
predarea cineva un limbaj de programare -
un program de salut lume.
>> Deci, la partea de sus foarte, vom vedea această noțiune de # include
și apoi, în paranteze unghiulare, stdio.h.
Vom reveni la asta, dar de fapt ce
înseamnă că există un fișier numit în această lume de iarnă
I / O, stdio punct h, și că e doar un fișier text care
cineva a scris de ani în urmă.
Și în interiorul acelui fișier text sunt o grămadă de
funcții, sau metode, proceduri sau, ca altcineva
a scris că noi suntem beneficiarii, deoarece noi
poate acum folosi codul acelei persoane.
Funcțiile el sau ea a scris.
În acest caz, printf nu este ceva ce am scris, e
nu este ceva care CS50 scris.
E ceva ce cineva a scris de ani în urmă și a pus într-o
fișier numit stdio.h și apoi, ca o parte, a pus
o altă parte a funcției într-un alt dosar.
Dar vom ajunge acolo.
>> Deci, # include este doar modul nostru de a spune, în
C, dă-mi acces la funcții care altcineva a scris.
Și în acest caz, îmi pasă pentru că vreau printf.
Acum avem int main (void).
Deci, acesta este unul dintre aceste lucruri, sincer, că în ziua 0,
destul de mult Am sa cam în zonă, pentru că e doar
nu interesant
intelectual, o parte din sintaxa.
Dar, pentru că acum știu funcții, altfel cunoscut sub numele de
proceduri, sau metode, produc, în general, o anumită valoare.
Ei fac ceva.
Ei vin cu un răspuns.
Ele produc de ieșire.
Deci, int de lângă principal este doar modul nostru de a spune prescurtare
faptul că această funcție, această procedură, în cele din urmă se va
pentru a vă da înapoi un număr.
Și de ce este, ne vom întoarce la.
Principalul este doar lumea standardul implicit pentru implicită
funcție care va fi executat într-un program C atunci când
îl rulați.
Nule înseamnă doar acest lucru, principal, nu ia nici o
argumente, în acest caz.
Deci, eu sunt super-fiind explicită.
Nu e nici o siruri de caractere acolo, nu e nici o virgulă.
Void înseamnă că nu argumente la principal.
>> Acum în sfârșit, din fericire, ultimele două linii sunt familiare.
În interiorul acolade avem o printf
și avem o revenire.
Și retur este un fel de regretabil faptul că trebuie să ne
a pus-o acolo, pentru că în acest caz nu face tot ceea ce
o mare parte din interes.
Dar într-un program de calculator, atunci când o funcție returnează 0,
înseamnă că totul este bine.
Nimic nu a mers prost.
În schimb, în ​​cazul în care o funcție returnează 1, sau negativă 1, sau
negativ 1337, sau a unor numere aleatoare, cum ar fi faptul că, faptul că
în general, înseamnă că o eroare de fapt a avut loc.
Asa ca daca esti pe Mac sau PC-ul, dacă ați văzut vreodată
unele mesaj enervant deoarece computerul dvs. a prăbușit sau
congelate, și nu există un mesaj de eroare criptic,
și apoi un cod, cum ar fi sistemul de coduri
1,2,3,4, unele număr,
că, în general, este un detaliu inutil să-i spun
cele mai multe dintre noi, oamenii, dar asta este ceea ce o funcție sau o
Programul a revenit, de fapt, o valoare non-zero.
Și beneficiul acestui fapt este că 0 înseamnă totul, de asemenea, și
atunci aveți în esență, un număr infinit de lucruri care
poate merge prost.
Care este motivul pentru care a ales 0 pentru bună și o valoare non-zero pentru
rău, după cum vom vedea în curând.
>> Așa că hai să mergem mai departe și să scrie acest lucru.
Deci reamintească faptul că altă zi am folosit Mac-ul meu pentru a deschide o
fereastră de terminal, iar apoi am deschis programul de text, cum ar fi
TextEdit, și am început să scriu un cod.
Ei bine, asta e bine.
Dar experiența dumneavoastră va fi diferit de la un Mac, sau
pe un calculator Solaris, un computer Linux, indiferent de operare
Sistemul se întâmplă să fie folosind.
Și astfel, în cursul, ceea ce în schimb să folosească este ceva
numit Aparatura CS50.
Deci, Aparatura CS50 este o bucată de software descărcabil
care vă permite să rulați un sistem de operare Linux numit,
în special Fedora Linux, pe Mac sau PC-ul dumneavoastră.
Și tu faci acest lucru prin descărcarea ceva numit un hypervisor.
Deci, toate acestea vor fi documentate în set de probleme 1.
Și veți fi ghidat spre ceea ce aveți nevoie pentru a descărca.
Dar rezultatul final, dacă aveți un Mac sau PC-ul, ești tu
descărca unele software-ul gratuit.
Ai apoi descărca Appliance CS50, și vă spun că
software-ul liber - hypervisor -
pentru a rula Appliance CS50 într-o fereastră de pe computer.
Și ce se întâmplă este aceasta.
>> Am acum, observați aici, ceea ce pare a fi un desktop
mediu.
Și lasă-mă să scadă de fapt, această fereastră unică.
Deci, aceasta este acum Mac-ul meu, cu o fereastră mică aici, și în interiorul
din această fereastră se întâmplă să fie un complet
sistem de operare diferit.
Într-adevăr, e un meniu de start aici, amintind de
Windows, care are o gramada de meniuri sub, inclusiv
un link la manualul CS50, Dropbox, și similar.
Și ce acest mediu este acum un standard de mediu
că toți dintre noi poate folosi acum, astfel că indiferent de ceea ce dvs.
calculator este, ceea ce ai instalat pe el, ce versiune
de Mac OS sau Windows rulați, noi toți avem acum
același mediu.
Și acum, în acest mediu, putem începe scrierea unele cod.
>> Așa că am de gând să merg mai departe și să deschidă un program numit gedit.
Acest lucru este comparabil cu notepad.exe, sau
TextEdit pe un Mac.
Și acesta este doar un super program de editare de text simplu
care arata ca acest lucru la prima vedere.
Acum, la foarte de sus, am o paleta alb, în ​​partea de jos am
Trebuie fereastra neagra care spune că aparatul jharvard @.
Și asta pentru că contul de utilizator pe care am creat pre-
pentru toată lumea este numit John Harvard.
El are un dosar în cazul în care toate fișierele sale sunt de gând să meargă, și
aici e în cazul în care putem începe să scriem un cod.
Așa că lasă-mă să merg mai departe aici și mări doar un pic, și eu sunt
de gând să facă # include , int main (void), si
apoi m-am de gând să fac printf ("Hello World")
; Întoarce 0.
Acum, acest lucru este destul de toată în alb și negru.
>> Lasă-mă să mergeți mai departe și de a face un singur lucru să-i învețe gedit ceea ce am
de fapt, a face.
Lasă-mă să merg la Salvare ca.
Am de gând să aleagă, la partea stângă aici jharvard.
Deci, din nou, chiar dacă nu ați mai folosit înainte de Linux, sincer
aceste zile, toate acestea sunt în esență, descentralizarea în
același tip de interfață -
Mac OS, Windows și Linux.
Asa ca am ales folderul jharvard lui acasă aici.
Și am de gând pentru a salva acest fisier ca hello.c.
Deci, la foarte de sus, am scris hello.c; numirea unui C
program cu extensia. c este
ce e practică comună.
Și l-am lovit pe Salvare.
Și acum ce e frumos este că am învățat în mod eficient gedit,
că acesta este un program de C.
Observați că textul meu alb-negru este acum cod de culoare, sau
sintaxă a subliniat, care atrage atenția mea doar pentru a
diferite părți semantice ale programului.
În partea de sus a plecat de acolo, ca programele mele devin mai complexe, eu sunt
O să aibă un rezumat al tuturor lucrurile pe care le-au scris.
Deci asta e. acolo.
Așa că lasă-mă să micșora acum afară și du-te în jos la această fereastră terminal.
>> Deci, aceasta este, probabil, nouă pentru mulți oameni.
Dacă nu ați utilizat niciodată un mediu de linie de comandă, n-ai mai
utilizate DOS, sau nu ați utilizat niciodată Linux, sau n-ai deschis
Mac OS fereastra terminalului, există o mulțime de lucruri pe care le
ar putea face cu GUI, cum ar fi îndreptat, și făcând clic, și
glisare, și fixarea, precum și cum ar fi, dar în general -
cu siguranță, în lumea informatică -
utilizând o linie de comandă, în cazul în care nu aveți mouse-ul
în general, ai doar tastatura, este de fapt o mulțime
mai puternic decât interfață, odată ce te procedează la aclimatizarea
diverse comenzi.
Și tu fel de liber-te de a avea nevoie de la punctul și faceți clic pe
la toate.
Deci, în gedit vom rezolva de cele mai bune au din ambele lumi.
Noi putem drag and drop de text, putem vedea
frumos și cod de culoare.
Dar când vine vorba de timp pentru a rula programul nostru, vă vom uneori
utilizați această fereastră mică aici.
>> Așa că am de gând să merg mai departe și de a face acest lucru.
În fereastra de jos alb-negru, am de gând să merg mai departe
și de a scrie zăngănit.
Și zăngănit este numele unui compilator.
Este un program care convertește codul meu sursa
în, deci, cod obiect.
0s și 1s, pe care am văzut pe scurt săptămâna trecută.
Recall de săptămâna trecută, am promis că am fost de gând să
du-te la ceva de genul asta - am nevoie pentru a fi
ceva de genul asta -
iar acest lucru cu siguranță nu este ceva care se întâmplă un om
pentru a face manual.
Deci, în loc să mergem să utilizați un program, și că, în programul de
acest caz se numeste zăngănit.
Și numele programului meu este hello.c.
Deci, în scopul de a compila hello.c de la codul sursă în
cod obiect, sau 0s și 1s, acesta trebuie să fie suficiente doar pentru a face
acest lucru și apăsați Enter.
>> Bine, nimic nu pare să se fi întâmplat.
Dar eu știu acum, sau de săptămâna trecută, că numele implicit al
un program, atunci când scrisă în C, se prosteste numit a.out.
Numele cel mai neinteresant ai putea veni cu.
A este prima literă a alfabetului, out este ceea ce a fost
scoase, dar așa să fie.
Acesta este programul meu, iar acum dot slash, așa cum vom vedea, este
de fapt, doar un fel de caracteristica de securitate, deoarece
a.out este un program-am scris.
Ea nu a venit cu calculatorul meu, e
nu în Program Files.
Nu e în dosarul lui Mac OS Aplicații.
Am nevoie să fie explicită super cu calculatorul, și spune
acest program, a.out, este în directorul curent,
directorul curent.
Și modul în care aceasta reprezintă într-un mediu ca asta
este punct reprezintă orice folder vă aflați în prezent inch
Și așa. / Înseamnă doar să rulați a.out
în folderul curent.
Și am alerga aceasta cu Enter, și voila, programul meu foarte primul.
>> Acum, lasă-mă să iau un pas inapoi.
Această fereastră e un pic mic, și să realizeze că în partea de jos
stânga aparatului aici este o altă pictogramă.
Una dintre ele este Chrome, care ar trebui să fie destul de familiar, doar un web
Browser-ul în interiorul aparatului.
Și această pictogramă alb-negru este doar o
mai mare terminal de fereastra.
Deci, în cazul în care acesta devine un pic enervant pentru a sorta de avea doar
această felie micuță de o fereastra cu care să interacționeze
cu programe, ce putem face în schimb acest lucru.
Și acum să-mi să încep să tastați câteva curând
pentru a fi comenzile familiare.
ls.
Deci, ls este comanda pentru listare.
Deci, într-un sistem de operare Mac sau Windows, în general, v-ar dublu-clic pe o
folder și apoi, voila, veți vedea toate fișierele diferitelor
și foldere.
Într-un mediu de comandă linie, în cazul în care aveți posibilitatea să tastați doar
comenzi sau text, ls este echivalent.
Deci, arată-mi ce e în acest director.
>> Acum, există o grămadă de lucruri aici care e atât un pic
familiar și nefamiliar un pic.
Dar observați că la fel ca Windows și Mac OS, jharvard
are un folder pe desktop.
Astfel încât orice pictograme care sunt pe desktop-ul meu se întâmple
să fie în acel folder.
Există un dosar de descărcări, lucruri care
Chrome ar putea pune acolo.
Dropbox.
Deci, aparatul vine cu built-in de sprijin pentru Dropbox
astfel încât, pe semestru, puteți sincroniza cu Dropbox dvs.
considerare, astfel încât toate programele sunt susținute.
Sunt accesibile pe computer altă parte.
Dacă vreodată ceva nu merge bine cu aparatul, puteți
foarte recupera cu ușurință de la Dropbox.
Așa că dosarul e acolo pentru asta.
Există două fișiere pe care le-am făcut - hello.c
și a.out.
Și apoi la dreapta există câteva alte dosare pe care le vom
spre a ajunge la sfârșitul semestrului, cu web
de programare.
Asa ca atunci cand fac /,. A.out, Enter, care spune du-te
în directorul Sunt, directorul curent, și rulați
Programul numit a.out chiar acolo.
>> În regulă, așa că e frumos și bun, dar nu e tot ceea ce
obligarea de a scrie un program numit a.out de ajutor.
Astfel încât să putem face de fapt acest lucru un pic diferit.
Deci, în loc de doar zăngănit de rulare, hello.c, să adăugați
ceea ce se numește un argument de linie de comandă.
Deci, un argument de linie de comandă, sau un comutator în acest caz, este doar
un alt cuvânt sau o frază care să tastați într-un prompt după
programul pe care doriți să o executați.
Deci, în acest caz, zăngănit este programul Vreau să rulez,-o
de ieșire înseamnă un fișier care nu mai este numit a.out.
Ieșire un fișier numit salut, și de a face acest lucru prin compilarea
ultimul cuvânt în linie, hello.c.
Deci, pe scurt, aceasta este o îmbunătățire foarte marginală, prin care
în loc de a avea acest fisier a.out stupid numit,
Eu pot face acum zăngănit-o salut, apoi hello.c, și
a lovit apoi Enter.
Nimic nu pare să se întâmple, dar, din nou mult mai dori cu 0 - atunci când
nimic nu pare să se întâmple asta nu înseamnă nimic rău sa întâmplat -
așa că hai să facem ls acum, Enter, și într-adevăr am acum
au un program de salut.
Deci, dacă tip I salut acum, nu a găsit comanda.
OK, /..
Deci, exact dreapta.
Deci, pentru ca acest program am scris, si nu a venit cu
calculator, / Buna ziua., Enter, înseamnă
Eu conduc acum salut.
>> Deci asta e tot acolo.
Acum, ce vom ajunge în cele din urmă la linia de comandă mai mult
argumente care ne permit să facem mai mult, dar doar pentru cei pentru
care acest lucru ar putea fi pălărie veche, lasă-mă să merg de fapt, într-o
Culegere de aici și doar vă dau un teaser de cum altfel am
ar putea merge despre punerea în aplicare a Salut lume.
Lasă-mă să intru în aici, și am de gând să-l deschidă.
Deci, de fapt, am de gând să explic ceea ce fac, așa
acest lucru este util.
Lasă-mă înapoi în sus.
>> Așa că am făcut asta de mult timp.
Deci, observați peste pe dreapta, există o serie de
directoarele care sunt denumite ciudat source1m și source1w.
Aceasta este doar o prostie convenție vom folosi.
Sursa înseamnă doar codul sursa, 1 înseamnă acest lucru este de o saptamana, si
m înseamnă că este luni, și w înseamnă că e miercuri.
Deci, criptic acolo nimic.
E doar notația prescurtată.
Aceste lucruri sunt albastre foldere, altfel cunoscut sub numele de
directoare.
Vreau să merg în acel dosar acum, și pe un calculator normal
Aș putea doar dublu-clic pe o pictogramă de folder și
există toate fișierele mele.
Dar, într-un mediu linia de comandă, eu nu pot face destul de
că, astfel încât în ​​loc, că trebuie să schimbe directoare manual.
Deci, dacă am introduce CD-uri și apoi source1m, Enter, observăm că
promptă mea, lucrul în alb la stânga, tocmai sa schimbat.
Și astfel, într-adevăr, atunci când a spus doar paranteze și apoi
squiggle puțin, simbolul tilda, care tocmai a însemnat am fost
în directorul Ioan Harvard acasă, lui Documentele mele,
sale fișierele personale.
Dar acum, în paranteze se spune ~ / source1m.
Acest lucru înseamnă doar că sunt într-un folder denumit source1m
care este în directorul Ioan de la Harvard.
Deci, dacă am doresc acum pentru a lista fișierele în acest dosar, ușor
întrebare, am doar tastați ls.
Și acum văd toate fișierele pe care am creat-pre pentru astăzi
prelegere, toate din care, de cele mai multe ori, care, se întâmplă
să se încheie în. c..
>> Așa că lasă-mă să mergeți mai departe și a alerga acum gedit de un program numit
holloway.c, care este scris de unele hacker aleatoare
pe internet, care arată un pic ca asta.
Și noi nu sunt de gând să treacă prin asta, în orice
detalii, dar pentru cei mai confortabil, în special, în cazul în care
doriți să luați o presupunere cu privire la ceea ce face acest program aici.
Vă asigurăm, dacă ești mai puțin sau mai confortabil,
nu ne ajunge chiar la acest fel de lucru până la sfârșitul anului
acest semestru.
Aceasta este ceea ce este un exemplu de un concurs imaginar C, care
înseamnă a scrie programul cel mai criptic cautati tu, eventual,
poate să întreacă alte persoane inteligente, care sunt la fel de
încercarea de a scrie lucruri și scoate în evidență faptul că aceștia pot scrie
mai multe lucruri criptice decât tine.
Deci, acest lucru nu este un exemplu de un program bine-scris de la
perspectiva de stil, acesta este un exemplu de program care
câștigă un concurs, pentru oameni care încearcă să
să fie vag și abstract.
>> Deci, dacă vom rula acest lucru, permiteți-mi să intru în fereastra terminalul meu,
ca să spunem așa.
Deci, acest mediu alb-negru este numit
fereastră de terminal în general.
Lasă-mă să mergeți mai departe și compilați-l.
Eu nu am de gând să utilizați zăngănit, pentru că acest program este o
puțin criptic și are nevoie de un alt
compilator, unul numit GCC.
Dar nu acelasi lucru.
Este nevoie de codul sursă în cod obiect.
Și acum, dacă am alerga a.out, că programul pe care îl
Tocmai am văzut face acest lucru.
Așa că colegul acel an a câștigat acel concurs.
Oricum, noi nu mergem în acea direcție, per se.
>> Deci, haideți să încercăm de fapt să tachineze acum în afară ceea ce putem face
cu aceste blocuri de construcție de bază pentru a face mai mult și mai mult
programe interesante.
Deci, am scris un program, am rula un program.
Acum putem simplifica de fapt, și nu mai trebuie să scrie
zăngănit cuvânt la prompt.
Se pare ca programele noastre devin mai criptic, putem, sau
mai complex, mai degrabă, putem rula de fapt, această comandă.
Așa că lasă-mă să mă întorc la directorul casa mea, ca să spunem așa, lasă-mă să
eliminarea - RM este comanda remove - Mă duc pentru a elimina
fișier numit a.out și salut.
Și observați acum într-un mediu de linie de comandă, la fel ca în
o interfață grafică, te solicită. Eu nu pot clic pe un buton, deși, am
Trebuie sa tip Y pentru da, y pentru da.
Și acum, dacă tip I ls din nou, observați că cele verzi
- programe a.out și Hello -
au dispărut.
Feriți-vă rm.
Se poate face lucruri rele, la fel ca tine poate de tragere
lucruri la gunoi dumneavoastră.
>> Deci, acum să mergem mai departe - si am putut face acest lucru - zăngănit-o
salut, salut -
Sunt deja plictisit tastarea această comandă.
Chiar dacă am tastat un pic mai repede.
Astfel încât să putem face schimb face salut.
Deci, asigurați-nu este un compilator.
E doar un program de prietenos, care vine cu Linux, în acest
cazul - sistem de operare -
care automatizează procesul de compilare a programelor.
Deci, în loc de a ne aminti zăngănit-o nume de fișier și
atunci așa mai departe, mai ales odată ce aceste linii să mai și
mai mult, eu pot scrie doar face.
Și acest lucru este de gând să scuipe o grămadă de lucruri care
vom vedea în cele din urmă acest semestru.
Dar acum, dacă observați I ls tip, salut este din nou în directorul meu.
Și într-adevăr, pot rula cu / salut..
Deci, asigurați-automatizează procesul doar de a rula ceea ce a fost,
în acest caz, o mult mai mare, mai complex comanda.
Deci, vom începe să utilizați marca, doar pentru că e mult
mai ușor de utilizat.
>> Dar acum să facem un program mai interesant
decât, să spunem doar salut.
Deci, în programele pe care le-am scris până acum nu e principal.
Asta e doar lucru implicit care începe totul oprit.
Dar există și alte funcții, precum și acolo, și
stdio.h este lucru pe care am văzut-o la partea de sus a noastră
fișierul înainte, și asta e ceea ce este cunoscut ca biblioteca standard.
In interiorul bibliotecii standard este o grămadă de funcții
că altcineva a scris, și putem începe să utilizați aceste
Funcțiile de a scrie mai mult
programe interesante pe noi înșine.
>> Așa că lasă-mă să mă întorc la aparat.
Am de gând să închidă fereastra terminal.
Am de gând să închidă lucrurile pe care le-a scris mai devreme, și du-te
în hello.c, și observați acum pot face următoarele.
Bună ziua lume nu este tot ceea ce interesant, aș dori să
personaliza acest program pentru mine.
Deci, în loc de a spune lumii, am de gând să
mergeți mai departe și să spunem -
Aș putea scrie David -, dar aceasta este cu adevărat un fel de
fundamental aceeași.
Dar hai să încercați această idee substituent.
Reamintim că, în C, mai degrabă în printf, am avut aceste
substituenți, și de acolo sunt mai mult de% d doar.
Deci, a fost% d, verificare rapidă bun-simț.
Bine, număr zecimal, asta e tot.
Cifre zecimale, asta e tot.
Deci C%, așa cum vom întâlni, va fi un personaj.
Pune un personaj aici, o scrisoare de la A la Z,
sau semne de punctuație simbol.
Un singur caracter, f%, știe cineva de la alte limbi?
Deci, o valoare în virgulă mobilă.
Un număr real.
Deci, nu este un număr zecimal - aceasta este de fapt un număr real cu
un punct zecimal, iar unele numărul de cifre la stânga
și dreptul de ea.
% S, sfori.
Că o vom vedea destul de des.
Un șir, din nou, este doar un cuvânt, o frază, o secvență de
caractere individuale.
Și, în fine, LLD?
Deci, aceasta este mai mult de un caz colț.
Lung, lung zecimal.
Deci, dacă nu vrei doar un număr care este atât de mare, vă
doresc un numar mai mare, ai de gând să trebuie să specificați la
computer care este de o anumită dimensiune.
>> Așa că hai să tweak acest bit un pic.
Mai degrabă decât doar codul de greu în David, lasă-mă să ușor
spune dinamic% s.
Deci, pune aici% s, care este un substituent pentru un șir.
Atunci lasă-mă să fac virgulă, iar apoi "David" pe aici.
Acum, acest lucru nu este tot ceea ce intelectual interesant,
pentru că tot ce am făcut acum este să creați într-adevăr mai mult de lucru pentru
calculator.
, Mai degrabă decât spune calculatorul face acest lucru dintr-o dată, eu sunt acum
spunând face acest lucru și introduceți un șir de aici în cele din urmă, virgulă,
aici este faptul că șirul.
Deci, acest lucru nu este o îmbunătățire mai bună, dar e cel puțin
un pas spre un program mai interesant.
Pentru că acum, lasă-mă să mergeți mai departe și să facă această fereastră un pic
mai mare, lasă-mă să mergeți mai departe și să rulați make salut.
Și acum, / a.out., Nu este de lucru, de ce?
În regulă, acum se numește salut.
Deci, din nou face, și, de asemenea, cu un zăngănit O-, redenumit
Programul să fie ceva mult mai interesant.
Și voila: acum se spune Hello David.
>> În regulă, încă un program de prost.
Deci, acum să mergem de fapt, înapoi aici și să introducă noțiunea
a unei variabile.
Nu ar fi frumos dacă am putea declara o variabilă
al cărui tip este string?
Și valoarea variabilei de fapt vine de la utilizatorul
el sau ea.
Deci arbitrar, am de gând să sun mi-e variabilă, care este
doar o convenție comun atunci când aveți o singură variabilă numită
șir.
Am de gând să fac semnul egal, iar apoi voi apela un
funcție numită getString.
Deci getString nu este ceva care vine construit în C. Este
o funcție care personalul CS50 a scris, într-adevăr doar pentru
Acestea primul cuplu de săptămâni, pentru a simplifica procesul de
obtinerea introduse de utilizator și de a obține datele introduse de utilizator în formularul de
de siruri de caractere, sau numere, și astfel.
Deci getString este ca printf, dar, evident, mai degrabă decât
imprima o să facă ceea ce spune numele său, pentru a primi un șir.
Dar pentru a utiliza getString, vom avea de a face o schimbare
aici, dincolo de asta.
Deci intuitiv, acest program, sperăm, se va cumva
obține un șir de utilizator, și apoi ce se va face
cu acel sir, numit e?
Este doar o să-l imprimați, corect?
Încă nu este un program de stimulare, deoarece tot ce se întâmplă
să faceți este să conectați această valoare în cazul în care s%
spune că ar trebui să meargă.
>> Așa că, cel puțin vedea acest lucru în acțiune.
Lasă-mă să salvați și zoom out.
Acum in fereastra mea terminale aici jos, felie mica de un an,
permiteți-mi să fac din nou fac salut.
Bine, și ah, la naiba, am o grămadă de erori.
Lasă-mă să derulați în sus, și vom vedea primul nostru -
așa că hai să facem de fapt, aceasta într-o fereastră mai mare, astfel încât să
se poate vedea cât de rău am stricat -
asa ca salut.
Bine, asta e un dezastru, nu?
Am scris trei linii de cod, și
aceasta mi-a dat 12 erori.
Deci, de ce este asta?
Deci, din fericire, de multe ori, când veți vedea erori multe, multe
scuipa o dată, este într-adevăr doar pentru că ați
confundat de calculator, până aici.
Și rămâne confuz de momentul în care ajunge aici.
Și așa începe doar declanșare, și poticnire, și
scuipa mai multe lucruri infricosatoare decat se aplică efectiv.
Deci, în general, începe întotdeauna cu cea de sus.
>> Deci, cea mai mare instanță foarte de sus de rosu,
mesaj de eroare este aceasta.
Utilizarea șir de identificare nedeclarate, am
Adică standard în?
Nu am.
Am vrut șir, dar acest lucru se datorează faptului că, de asemenea, șirul cuvântul
că am păstra folosind verbal de fapt,
nu există în nici C.
E ceva ce vom folosi doar pentru prima săptămână sau două
aici, dar ea există într-un fișier denumit cs50.h.
Deci, pentru moment, știu că există această bibliotecă de altă natură care
Personalul a scris, asa ca a fost scris mai mult de recent,
stdio.h.
Dar înăuntrul cs50.h este o definiție, un sinonim al
felul, care creează acest șir cuvânt.
>> Deci, acum să mă întorc la fereastra terminalul meu.
Am de gând să îndepărteze toată mizeria asta prin Ctrl-L. Vom doar
ștergeți totul curat, și am de gând să merg mai departe și să facă
salut din nou, Enter.
Deci, ce sa întâmplat acum?
Acum, toate aceste erori plecat.
Deci, ceea ce am făcut cu adevărat?
Am învățat doar șirul de calculator ce există, și e
în acel fișier numit cs50.h.
Deci nu se mai plângă, pentru că acum știi unde să găsească
declarația că funcția lui ca să spunem așa.
În cazul în care există în lume.
>> Deci, acum am de gând să merg mai departe și a alerga salut.
Am par a avea o buclă infinită, se întâmplă nimic lui.
Așa că am nevoie să tastați ceva aici, nu.
Prima linie de cod în programul meu a fost getString.
Deci, este literalmente mă așteaptă pentru a obține un șir.
Deci, în acest sens da, aceasta este o buclă infinită.
Se pare că în getString este comportamentul implicit că noi
scris - personalul -
ca doar spune, așteptați și așteptați și așteptați și așteptați și așteptați,
până când utilizatorul vă oferă un șir prin tastarea ceva inch
Așa că lasă-mă să mergeți mai departe și de tip într-un D-v-- i-d, Enter.
Și acolo este, salut David.
>> Acum, se pare ca acest este doar un act?
Lasă-mă să mergeți mai departe și tastați Tommy.
Introduceți, bine, pare a fi de lucru.
Lucrări pentru Rob, lucrari pentru Zamyla, lucreaza pentru - bine.
Deci, se va merge, cel mai probabil.
Deci, ar trebui să imprimați tot ceea ce ne da de fapt,
și putem fi un pic dificil aici.
Să vedem dacă putem face ceva de genul salut.
Poate trece peste aici, să vedem, copiere, lipire.
Eu nu am de gând să fie în măsură să lipiți ca de multe ori aici.
Pastă, bine, Shift + Ctrl + V. Deci, ceea ce ar putea
întâmpla ca e rau aici?
>> Ok, deci, segfaults.
Deci, unii dintre voi, cu medii anterioare vor ști că
în general, oferind o mulțime de calculatoare intrări atunci când acestea sunt
probabil nu sunt menite să primească nume lungi de acest gen - rele
lucrurile sa se intample.
Într-adevăr, în lumea de web, de asemenea, acest lucru se întâmplă destul de un pic,
prin care atunci când sunteți proiectarea unui site web, atunci când sunteți
proiectare Facebook, va trebui să ia decizii arbitrare până
față, ca și cum cineva va lungă
Facebook numele de utilizator să fie?
Sau cat timp va numele cuiva prima să fie?
Cât timp va numărul de telefon cuiva să fie și place.
Și dacă programatori face presupuneri proaste, programe de rupe
pentru că încercați să oferindu-le mai mult de ieșire, de intrare mai
mai degrabă, decât au memorie.
Sau memorie RAM alocată pentru ea, și deci, dacă acum l-am lovit Enter,
că programul efectiv lucrate, pentru că am fost la bibliotecă
și am anticipat de fapt, acest caz particular.
Dar, fără îndoială, acest semestru, va scrie cel puțin o
program care va spune aceste cuvinte.
Amintiți-vă acest săptămâni de acum, poate două zile de la acum.
Segmentation fault este un lucru rău.
Acesta se va referi la ceva care face dvs. de calculator
nu a anticipat.
Și în acest caz, tu, programator, nu am anticipat.
La fel ca ceea ce acest morman de șosete, au existat diverse
cazuri de colt am fi putut întâlnit.
În mod similar, în programele, dacă nu anticipa cât timp este
numele cuiva va fi.
Sau ce se întâmplă dacă am un utilizator rău intenționat, și numele lui sau a ei este
de fapt, destul de scurt, dar sunt doar încercarea de
să te pui cu mine?
Ce se va fi comportamentul de programul meu?
Ei bine, în acest caz, s-ar putea prăbuși ceva, de fapt.
>> Deci, hai sa facem asta.
În 90 de minute, acesta este un moment îngrozitor de lungă
de a face stiinta de calculator.
De ce nu intrăm noi în obiceiul de a lua o cinci minute
rupe aici, și când ne întoarcem, ne vom scufunda în unele
programe mai complexe și mai convingătoare?
Cinci minute.
>> Bine.
Deci, un rapid comentariu.
Mi sa spus că, deși acest lucru a fost pe ecran înainte, ceea ce
a ieșit din gura mea a fost cs50.net/rsvp.
Acest lucru este corect. cs50.net/lunch.
Deci, acum puteți încerca să RSVPing pentru acest lucru la / masa de prânz.
Dar hai să facem acest lucru acum.
Deci, acest lucru a fost super rapid, super-nou pentru o mulțime de oameni.
Pălărie vechi pentru unii oameni.
Deci, haideți să înapoi doar pentru o clipă, și să vedem cum am ajuns sa
această ieșire Bună ziua lume doar un moment în urmă.
>> Deci în primul rând, nu e asta Aparatura CS50.
Din nou, bucată de software, problema stabilit data de 1 se va spune
ai cum să-l descărcați, în cazul în care să-l descărcați, ce să faceți clic pe
și așa mai departe.
Și apoi, odată ce urmați aceste instrucțiuni, veți putea
pentru a maximiza fereastra, și Mac sau PC-ul va arata o
ceva de genul asta.
Un fundal negru, un dosar acasa, la partea de sus în cazul în care toate
fișierele du-te, un coș de gunoi în partea stângă sus,
un meniu în partea de jos.
Deci, din nou, destul de similare în spirit la Mac OS sau Windows,
chiar dacă se întâmplă să fie Linux.
Deci, ceea ce am făcut următoarea?
Ei bine, am început să scriu programe.
Și amintească de săptămâna trecută că tot ce trebuie pentru a scrie un
Programul este un editor de text simplu,
cum ar fi Notepad sau TextEdit.
Sincer, tu chiar posibilitatea să utilizați Microsoft Word.
Dar lucrurile rele se va întâmpla în cele din urmă, pentru că e un foarte
hand-mână soluție pentru a scrie un program, plus o să
salvați-l în formatul de fișier greșit.
Dar e doar un editor de text, un procesor de text, este tot ceea ce e
necesare pentru a scrie un program.
>> Deci, în Appliance CS50, putem face acest lucru într-un mod simplu.
Noi putem doar să faceți clic pe această pictogramă în stânga jos.
Și din nou, problema stabilit data de 1 vă va sfătui cu privire la acest lucru, și voila -
veți obține această interfață în alb și negru în cazul în care putem începe
scrierea de cod.
Așa că hai să începem scrierea unui program super-simplu din nou.
Am de gând să merg până la File, Save, și am de gând să sun
acest lucru, să spunem, hello2.c.
Și eu doar spun, făcând clic pe jharvard, pune-l
în directorul său, nu-mi pasă cu adevărat
în cazul în care aceasta merge.
Și apoi Salvare.
Și acum pot începe să scriu programul meu.
Și îmi aduc aminte de mai devreme că trebuie să scriu int
main (void).
Zoom in pe stânga sus.
Și apoi vreau să spun printf, ia două.
Și acum o linie noua oferta, aproape, aproape
paranteze, punct și virgulă.
Și apoi mă duc aici la fereastră terminal meu că e
inglobate in gedit, doar pentru comoditate.
Și am de gând să merg mai departe și de a scrie face salut, dar nu
Bună ziua singur, hello2.
>> Deci, dosarul meu se numește hello2.c. Prin urmare, dosarul meu
ar trebui să fie numit hello2, în acest caz.
La naiba, ce am gresit?
În regulă, așa că am omis în mod clar o linie, dacă vă amintiți ceea ce
programele anterioare arata ca.
Dar hai să vedem dacă nu putem tachina acest afară.
Din păcate, cei mai mulți oameni care scriu programe cu care
vom scrie programe nu simplifica lucrurile prea bine.
Deci, avem un fel de a trece în zbor peste ceea ce nu face destul
Simt aici și să vedem dacă ne putem da seama ce e în neregulă.
Linie foarte primul acolo spune declararea implicit C
printf cu funcția de tip int bibliotecă.
OK, am înțeles o parte din asta.
Dar se pare a fi făcând aluzie la faptul că am folosit printf
greșit, cumva.
Și ce sens este greșit?
Nu am învăța de calculator ce este într-un fișier
numit stdio.h.
Acum am doar să memoreze doar acum că este printf
în stdio.h, și într-adevăr nu va mai fi alte
funcțiile în care au acelasi fisier pe care vom fi utilizate pentru.
>> Asa ca lasa-ma acum mergeți mai departe și a lovit Ctrl-L pentru a șterge doar că
la distanță, rulați din nou face hello2, și voila.
Și această comandă din nou, mai complex decât vom explica pentru
astăzi scopuri.
Dar a alerga zăngănit, și zăngănit ia codul sursă și
scuipa 0s și 1s.
Iar cei 0s și 1s, în acest caz, sunt numite ce?
Bine, codul obiect.
Și fișierul în care se află este numit, astfel,
hello2, în acest caz.
Pentru ca dosarul meu a fost de text hello2.c, Enter.
Și acum am lua două semn de exclamare, exclamație
punctul, semnul exclamării.
În regulă, deci acum avem capacitatea de a obține siruri de caractere,
aparent.
Ei bine, ce altceva putem obține de la utilizatori?
>> Ei bine, în biblioteca CS50, există și alte funcții care
sunt de gând să simplifice viața noastră în aceste primele câteva zile.
Getchar, GetDouble, GetFloat, GetInt,
GetLongLong, getString.
Ei bine, hai să smulgă de pe cel mai ușor de aceste primul.
GetString face literalmente asta.
Ea doar stă acolo, așteptând utilizatorul să tastați ceva în,
și de îndată ce tastez ceva în și apăsați Enter, aceasta
face ceva cu acea valoare.
Așa că hai să ne întoarcem la exemplul pentru a vedea exact ce
GetString făcea.
Lasă-mă să mergeți mai departe și să deschidă în gedit, hello.c, și amintesc
că chiar înainte de pauză, acest lucru este în cazul în care am rămas.
>> Așa că hai să tachineze acum acest lucru în afară într-un detaliu pic mai mult.
Deci, pe linia 6, există două lucruri
se întâmplă în acest moment.
Semnul egal se separă și prima jumătate a doua jumătate.
Deci, pe partea stângă a semnului egal, suntem
spunând șir uri.
Și apoi, doar condițiile de nespecialist, ceea ce este sirul s
faci, crezi?
E crearea unui ce?
Deci, se creează un șir numit uri.
Acum, ce înseamnă asta cu adevărat?
Ei bine, e rezervarea spațiu pentru un șir numit uri.
Asta nu e destul de bine.
Ce este aceasta face?
Ei bine, calculatoare cum știți, au hard disk-uri, că e în cazul în care
fișierele sunt stocate.
Computere au RAM, și asta e în cazul în care programele sunt încărcate
în timp ce se execută.
Deci, atunci când faceți dublu-clic pe o pictogramă și Microsoft Word deschide
sus, Microsoft Word se execută, ca să spunem așa, în memoria RAM, care este
partea electronică a calculatorului.
Nu este partea fizică, mecanică, care se roteste, în cazul în care
Datele sunt stocate, în general, pe termen lung.
Deci sirul s este destul de mult spune-mi dea de calculator
destul RAM pentru a se potrivi un șir.
Acum, că e un pic de o simplificare, deoarece
Cât de mare este șirul va fi?
Ei bine, de fapt, noi nu știm încă, astfel încât în ​​următoarele săptămâni pentru a veni
vom trage înapoi, de fapt stratul care este șir și
vă vom spune ce este cu adevărat.
Șir, de acum, este doar o simplificare frumos al lumii noastre.
Dar sirul s declară un șir numit e, pentru moment.
Declară un șir.
Aceasta își rezervă un spațiu în memoria RAM pentru șirul utilizatorul este
pe cale de a scrie.
>> Acum, să ne uităm în dreapta semnului egal.
Deci, se spune getString ().
Și un pic de bun-simț verifica.
Faptul că nu există nimic în interiorul parantezelor
presupune ce despre getString?
Este nevoie de nici un argument.
Asta este, nu poate influența comportamentul acesteia în nici un fel.
De fiecare dată când îl folosiți, acesta va primi un șir și asta e tot.
Prin contrast, printf, sperăm, comportamentul său nu
se schimba de fiecare data.
În caz contrar, este o funcție de imprimare destul de inutil, dacă
face acelasi lucru.
Dacă se imprimă întotdeauna David sau ceva
arbitrară tot timpul.
Deci are sens printf să aibă un argument.
GetString nu are nevoie de un argument, pentru că am vrut
pentru a obține un șir de utilizator și e utilizatorul care se întâmplă
să furnizeze dinamismul prin dactilografiere, în litere diferite
de fiecare dată la tastatura.
>> Deci, ce nu fac getString în cele din urmă?
Ganditi-va ca această casetă neagră mică.
Și această cutie neagră nu ia nici o intrare, dar când te-bang-ului pe
ea, scuipa un șir care utilizatorul a tastat inch
Și faptul că există un semn egal acolo înseamnă să ia
ceea ce se scuipă pe dreapta și păstrați-l în interiorul
ce e pe stânga.
Deci semnul egal aici, de fapt, nu înseamnă
egalității, mai degrabă tehnic înseamnă cesiune.
Ia valoarea pe dreapta, și puneți-l în
variabilă pe partea stângă.
Deci, asta e tot ce se întâmplă acolo.
>> Acum in linia 7, suntem de asteptare printf.
Deci, sperăm printf devine un pic plictisitor până acum.
Deci, imprima un șir formatat.
Ce șir?
Imprima, "h-e-L-L-o,% s
\ N ".
În regulă, deci ce vreau să plug-in pentru% s?
Literalmente, tot ceea ce este stocat în s..
Deci, în acest caz, verificați bun-simț, puțin câte argumente nu
printf ia?
Bine, am auzit una.
Am auzit o din nou.
Doi, am auzit două.
Și cum despre trei?
Bine, trei?
Excelent.
Trei răspunsuri posibile, doar una dintre ele este corectă.
Deci, din nou, argumentele influențează comportamentul unei funcții.
În trecut, printf a luat doar un singur argument.
"Hello World" a fost un singur argument.
Cu toate acestea, acum, observați în cazul în care aceasta este virgula.
Aceasta virgula este în afara citat / citatul, ceea ce înseamnă
hei printf, vine aici un al doilea argument.
>> Deci, virgule în majoritatea limbajelor de programare
separate de mai multe argumente.
Deci, răspunsul aici nu este cu siguranta una, pentru că
nu există acest virgula.
Deci minim, printf ia aparent două
Argumentele de data asta.
Dar oportunitatea pentru o întrebare capcană aici este ceea ce
despre această virgulă?
Asta înseamnă că există de fapt trei argumente?
Acest lucru, aceasta, iar acest lucru.
Deci, nu, pentru că virgula este interiorul citate, care
înseamnă că este într-adevăr doar o estetică a limbii engleze.
Ea nu are nimic de-a face cu numărul de
argumente în acest program.
Deci, acest virgulă este în afara ghilimele duble.
Și atunci intoarce 0.
Pentru moment hai să ia acest fel de credință pentru unul pe
astăzi, și știu doar că atunci când funcțiile sunt efectuate de executare
de linii de cod, acestea ar trebui să se întoarcă în general, o anumită valoare.
În acest caz, doar pentru că trebuie să se întoarcă principal de un int,
asta e doar modul în care limbajul C funcționează.
>> Deci, pentru că nimic nu a mers bine, se simte ca acest program de
bine, am doar greu codificate în schimb 0.
Dar, în schimb, și am de gând să scriu acest cod în pseudo
acum, la fel ca Iosif a făcut atunci când am făcut șosete
exemplu săptămâna trecută.
Dacă ceva a mers prost - acest lucru nu este codul actual, - a fost
greșit, atunci intoarce, sa zicem, 1.
A reveni altceva 0.
Deci, acest lucru este în cazul în care vom merge cu asta.
Acest lucru nu este real codul C, doar pseudocod.
Dar acest lucru este modul în care s-ar putea întoarce
diferite valori posibile.
Dar pentru moment am doar de gând să mergeți mai departe și să se întoarcă 0.
În regulă, orice întrebări până în prezent pe sintaxa, funcționalitate,
sau place?
Da, în spate.
>> PUBLICUL: [inaudibil]
DAVID MALAN: Poți vorbi un pic mai tare?
De ce a făcut acest program return 0, și?
PUBLICUL: [inaudibil]
DAVID MALAN: Oh, asta e pentru că am leneș, îmi pare rău.
Nici un răspuns bun academice, întoarce 0.
Pot salva un fel de acest lucru, spunând punct de vedere tehnic C, în cazul în care principalul
nu returnează în mod explicit o valoare, 0 vor fi returnate
automat pentru tine.
Ceea ce este adevărat, eu nu sunt doar acoperă până.
Dar, eu ar fi trebuit făcut în acest fel.
Nu la pachet interesant decât faptul că, altele decât greșeala mea.
Da?
>> PUBLICUL: De obicei, atunci când tastați în vid, înseamnă că
nu se mai întorc ceva.
DAVID MALAN: Corect.
Dacă, în schimb, să specificați înainte de numele unei funcții, pentru
exemplu aici, anulate, atunci funcția
nu se întoarce nimic.
Și, prin urmare, aș spune doar, de întoarcere sau nimic, la toate,
și că ar fi în concordanță.
Și vom reveni la asta.
Și doar FYI, una dintre cele mai capturilor cu dificultăți de învățare
programarea într-o lume care are sute de cărți și
sute de site-uri acolo este o vei face invariabil
vezi sintaxa diferită în cărți diferite
de persoane diferite.
Realizati vom face cele mai bune noastre în secțiuni și prelegeri de a fi
consecventă.
Dar, uneori, veți vedea sintaxa contradictorii.
Deci, ori de câte ori aveți dubii, solicitați doar.
Și, în general, vom avea grijă în prelegeri și secțiuni pentru a
aproape întotdeauna îl prezintă în mod corect.
Și eu spun, aproape întotdeauna, deoarece cazul de la punctul.
Alte întrebări?
>> PUBLICUL: Are% s exista în afara aparatului?
DAVID MALAN: Are% s existe în afara aparatului?
Da.
Deci% s are de a face cu C. Faptul ca suntem o folosesc în
aparatul nu are nimic de-a face în mod fundamental cu
caracteristici ale limbajului ne folosind.
Într-adevăr, săptămâna trecută, când am folosit Mac-ul meu, am scris
Codul C pe Mac-ul meu.
Am fi putut folosi% s pe Mac-ul meu, și ai putea folosi pe
Windows computer, dacă vă instalați un compilator, cum ar fi
Visual Studio de la Microsoft.
Deci% s.
Tot ceea ce facem in interiorul fereastra astăzi trebuie să
face cu nimic C. Și fundamental de a face cu
sistemul de operare în cauză.
În schimb, fereastra terminalului alb-negru - atunci când
Sunt lucruri cum ar fi tastarea ls, și RM, și CD -
care are de a face cu sistemul de operare și
navigarea în jurul valorii de.
Da.
PUBLICUL: Am vrut biblioteca, biblioteca CS50.
DAVID MALAN: Ok, deci, dacă vrei să spui șir de cuvinte cheie, care
există numai în bibliotecă CS50, corectă.
Care nu există în sine C, și într-adevăr, într-un cuplu
de săptămâni, vom arunca bibliotecă și să înceapă CS50
a face lucrurile de la zero noi înșine, ca să spunem așa.
Alte întrebări?
Da.
>> PUBLICUL: [inaudibil]
DAVID MALAN: Bună întrebare.
Sunt cazul comenzilor sensibil?
Și permiteți-mi să fac o distincție aici.
Deci, comenzile sunt, în general, lucrurile pe care le vom scrie la
partea de jos a ferestrei, în fereastra de terminal.
Orice până aici, ar fi declarații sau cod C.
Dar, în ambele cazuri, răspunsul este același, da.
Ambele aceste medii, codul C la partea de sus și
de operare de linie de comandă de sistem la
partea de jos, sunt sensibile la majuscule.
Așa că trebuie să valorifice getString cu capital G,
capitalul S. Trebuie să scrieți printf în toate litere mici.
Trebuie să tastați ls în toate litere mici.
Deci, în aproape orice situație acest semestru, caz va fi, în
fapt, problema.
Da.
>> PUBLICUL: [inaudibil]
DAVID MALAN: Ah, deci bine, ce dacă am avut un fisier
numit hello.d.
Deci, se dovedește D este un limbaj de programare.
Și astfel, în unele cazuri, am putea scrie de fapt un program în
acel fișier și l-au compilat în moda.
Putem, și, de fapt, răspunsul scurt este, nu știu.
Deci, vom face acest lucru.
Lasă-mă să mergeți mai departe și de a crea un fișier nou.
Și de spin aici, sincer, în general, ori de câte ori este nici o îndoială
acest semestru, și aveți aparatul sau calculatorul
deschide, mergeți mai departe și să încerce ceva.
Așa că am de gând să salvați un fișier numit hello.d.
Salvați acest lucru.
Și am de gând să rulați make salut Enter.
Se părea că pentru a deduce c era mult mai probabil
decât d, în acest caz.
Alte întrebări.
Da.
>> PUBLICUL: [inaudibil]
DAVID MALAN: Bine, spun asta încă o dată.
PUBLICUL: [inaudibil]
DAVID MALAN: Cum ti-ar merge despre diagnosticarea sau
depanare asta?
Deci cel mai probabil, pentru că sunt diferite limbi,
cel mai probabil vei fi complet
alt program emise.
V-ar primi mesaje complet diferite de eroare.
Și, de asemenea, doar în termeni de design, ar fi, fără îndoială, o
Decizia de design săraci să fi scris două tipuri diferite de
limbi străine cu fișiere aproape identic numit, în
director exact același, folosind un
automată a sculei ca face.
Deci, eu pot, de asemenea, împinge înapoi și să spună în 15 ani de a face acest lucru,
Nu a făcut această greșeală.
Ar putea întâmpla.
Dar nu e doar diverse, cred,
apărare logistice în loc.
Plus mesajele de eroare care ar rezulta de aici, care ar
în cele din urmă dezvăluie ceea ce este problema.
Dar un caz colț posibil.
>> În regulă, așa că hai să introducă doar o pereche de altă
caracteristici aici, acum, astfel încât să putem începe construirea în sus, în mai mult
și mai complex program.
Deci, în primul rând, matematica.
Deci, exemple de matematica sunt doar un fel de ușor în prima săptămână.
Acest lucru nu este să spun că toate programele este de aproximativ
matematica.
Desigur, înțelegerea diferite caracteristici ale
matematică, algebră, în special, este
destul de relevant aici.
În clasele de nivel superior CS, algebra liniară,
calcul, și similar.
Dar de cele mai multe dau seama ce vom face în acest semestru nu se reduce
la matematică, și cu siguranță nu la aritmetică, în sine, dar într-adevăr
la doar logica și gândirea atentă.
Și astfel, această legătură pe care știința calculatoarelor a avut mult timp,
în special la nivel de liceu, cu matematica, este o
puțin înșelătoare.
Deoarece cele mai multe dintre programele pe care le vom scrie, într-adevăr, sunt
un fel de nivel superior și să se concentreze pe rezolvarea problemelor pe care,
Sigur, s-ar putea folosi unele adunare, scădere, și diverse
formule matematice sau similare,
dar la sfarsitul zilei, este vorba despre gândire și nu
doar punerea în aplicare a ceea ce ai fi putut face pe ca un TI
Calculatorul din liceu.
>> Deci, cu care a spus, hai sa facem ceva acum cu aceste
operatori matematici care nu există, astfel încât să putem unic
asupra unora dintre aspectele de bază ale programării, sau în
acest caz, C. Deci, există, după cum a sugerat biblioteca CS50,
iar astăzi suntem folosind doar getString - și într-o clipă
probabil, una alte funcții -
dar există diferite tipuri de date într-un calculator.
La sfârșitul zilei, calculatoarele stiu doar 0s și 1s.
Dar amintesc că săptămâna trecută am vorbit despre sistemul binar
în reprezentarea numerelor, cum ar fi numărul 0, și 1 și 2,
tot drumul pe până la 8, la fel ca în filme lui Nate.
Și apoi putem conta mult mai mare ca noi
a făcut pe scenă aici.
Dar dacă vrei să reprezinte nu doar numere, ci litere,
noi, oamenii, trebuie să vii cu ceva arbitrar
convenții, prin care, dacă la sfârșitul zilei tot calculatorul
a este abilitatea de a exprima 0 si 1, ei bine am face bine
începe standardizarea modelelor de 0s și 1s care reprezintă
lucruri diferite.
Un model de 0s și 1s care reprezintă o literă.
Modele de 0s și 1s care reprezintă litera Z.
Modele de 0s și 1s care reprezintă culoarea albastru, sau
roșu, sau similar.
Avem nevoie de a utiliza toate aceste 0s și 1s de a ne exprima în
contexte diferite, în moduri diferite, care nu sunt
neapărat numerică.
>> Deci, în ceea ce privește reprezentarea, C are tipuri diferite de date,
și am văzut una din astea până acum.
Am văzut int, iar anunțul de ce nu e pe ecran
acum este șir.
String nu, de fapt, există în C. Din nou, aceasta este o
simplificare vom prezenta pentru prima
câteva săptămâni.
Un caracter este un caracter individual.
Un float este un număr real, cu un punct zecimal și numere
stânga și dreapta a acestuia.
Un dublu este ceea ce, pentru cei cu fundal înapoi înainte?
Deci, o dublă este de două ori ceva.
Adaugă de două ori mai mult ca precizie.
Deci, ce înseamnă?
Deci, în fiecare din aceste cazuri, lumea are un fel de standardizate
câți biți sunt utilizate pentru a reprezenta
fiecare dintre aceste lucruri.
Deci, dacă ați vizionat filme ASCII lui Nate deja pentru o parte
de PSET 0, sau mai târziu în această săptămână va, veți ști, probabil,
că ASCII -
reprezentări de caractere -
utilizați câte biți?
Și s-ar putea aminti chiar de la demo-ul nostru săptămâna trecută a modului în care
mulți oameni au fost pe scenă.
Deci, 7 sau 8, de obicei.
Deci, în general, 8, și există ceva numit ca prelungită
ASCII care folosește toate cele 8 biți, în loc de 7.
Dar, în general, vorbim în puterile lui 2, astfel încât în ​​acest caz, 8.
Deci, un char într-un limbaj de programare este de obicei 8 biți.
Deci, un int este, în general, 32 de biți.
Un float este, în general, 32 de biți.
Un dublu este, în general, de 64 de biți.
Și ce înseamnă asta?
Aceasta înseamnă că puteți reprezenta numere mai mari, sau, în cazul
de numere reale, poti avea mult mai multe numere, după
zecimală.
O precizie mult mai mult, în acest caz.
Acum, o lungă lung este, din păcate, pe nume.
Deci nu e un int care este de 32 de biți.
Există o lungă, care este, nope, 32 biți.
Și o lungă lungă, care este de 64 de biți.
Cu toate acestea unele dintre acestea sunt sensibile la context, ea depinde de
ce fel de calculator ai.
Deci, în general, vom specifica intr-un temele sau într-un test atunci când
de fapt contează.
Dar ideea este că e toate aceste diferite
reprezentări aici.
>> Așa că haideți să se arunca cu capul de fapt, într-un program.
Mai degrabă decât a scrie aceasta de la zero, lasă-mă să merg mai departe
și să se deschidă de la codul sursă de astăzi - toate, care este
on-line - dacă doriți să drege în jurul valorii de on-line, sau rentabilitatea
Miercuri, cu aparatul pe computer, instrucțiuni
pentru care se va lega pe pagina cursului.
Iată un program super-simplu.
Dar are un ceva nou în partea de sus, care
nu am avut înainte.
O mulțime de linii albastre de text.
Deci, aceste linii albastre reprezintă comentarii.
Deci e destul de util într-un program pentru a putea scrie
unele comentarii la tine, sau la colegi, prieteni sau, sau
colegii de predare, ca un fel de descriu ceea ce se întâmplă în
acest fișier, dar nu au nimic de-a face cu cod C în sine.
Nimic de-a face cu programul funcțional, e doar
estetica.
Deci, modul în care face acest lucru în C este, în general, de a începe să dvs.
despre / *, iar tu termina cu comentariile dvs.
* /.
Și dacă sunteți cu adevărat anal și ca să atragă un fel de imagini,
atunci ai pus o mulțime de stele, vei face o
cutiuța ca asta.
Dar nici unul din această materie.
Singurul lucru care contează este foarte primul
și. ultimul
Aceasta este ceea ce se numește un comentariu pe mai multe linii.
Și e doar convenție umană de a face de multe ori la stele și cutie
lucrurile în așa dacă aveți o mulțime de timp liber.
>> Deci, după ce v-ați scris în unele comentarii, în general, vin
curajul reale ale programului.
Aici e familiar noastre includ # .
Și tocmai rapid, acest lucru este necesar sau nu este necesar?
PUBLICUL: necesara.
DAVID MALAN: Deci, nu e de fapt necesar.
Deci, de ce, totuși, nu este necesar?
Deci nu e nici o printf.
Într-adevăr.
Tot ce facem în acest program este matematica.
Deci, eu pot șterge de fapt asta.
Deci, nu trebuie întotdeauna să includă nimic
partea de sus a unui program.
>> Deci, haideți să simplifica acest bit o.
Și observați acum ce face acest program.
Nu de mult interes.
int x = 1.
Ei bine, ce e asta faci?
Ei bine, cred că înapoi la model mental de dinainte.
Partea stângă a acestei expresii ce face?
Creați spațiu pentru un număr întreg.
Deci, cât de mult spațiu?
Ei bine, se întâmplă să știm acum că e 32 de biți.
Anterior, un șir de 32 de biți a fost punct de vedere tehnic, dar mai
pe faptul că, în viitor.
Dar un int este de 32 de biți.
Deci, această expresie pe stânga aici, int x spune doar hey
sistemul de operare, dă-mi 32 de biți de memorie RAM -
altfel cunoscut sub numele de 4 bytes de RAM -
astfel încât să pot pune un întreg în acel spațiu.
Ce număr întreg ai vrut să pun?
Ei bine, doar numărul 1.
int y primește 2, face exact același lucru, chiar dacă
numărul este mai mare, în termeni de volum sale.
Numărul în sine este încă la doar 32 de biți.
E doar modelul de biti este diferită de a
reprezintă 1 comparativ cu 2.
int z acum spune-mi dea un alt biți 32, o numesc Z, și a pus
însumarea de 1 și 2 acolo.
, Astfel că acum z este stocarea probabil valoarea 3,
și a reveni apoi 0.
>> Acum acest program, nu se face nimic de interes?
Deci, de fapt, nu face nimic interesant, în orice
sens, pentru că de ce? Se face ceva matematica.
Dar nu e returnarea raspunsul, corect.
E întoarce 0.
Nu e imprimarea răspunsul.
Deci, acest program este în mod fundamental lipsit de valoare, așa cum
Standuri acum.
Se face ceva de lucru.
Se va lua un numar de secunde, sau microsecunde, pentru a
fugi, dar nu face de fapt nimic
util pentru om.
>> Deci, de fapt, să deschidă acum math2, în cazul în care acum sunt de fapt
imprimarea rezultatul.
Deci, aceasta poate fi dedusă din exemplele noastre anterioare.
Dacă vreau să fac niște matematica simple, int x = 1, y
= 2. z este 1 plus 2 acum.
Ce se întâmplă acest pentru a imprima în mod evident?
Doar 3.
Deci, bun-simț verificare rapidă.
Lasă-mă să se mute în acest director.
Deci, cd source1m.
Lasă-mă să mergeți mai departe și tastați face math2.
Nu există mesaje de eroare a ieșit, asa ca lasa-ma alerga -
Nu-a.out-lasa-ma sa math2. Enter.
Și într-adevăr, acesta imprimate 3.
Ei bine, haideți să aruncăm o privire la o variantă a acestui.
În math3.c, acum avem acest exemplu aici.
>> Deci, asta e un fel de interesantă.
Deci, în acest cel de aici, răspunsul este de gând să obțineți 1 împărțit la 10,
și observați am declarat-o ca un flotor.
De ce vreau să fie un flotor?
Ei bine, e o fracție.
O să fie un număr real.
Deci, o să fie de 0.1, sper - 10%, în acest caz.
Și ce îmi apoi doriți să imprimați?
Ei bine, acest răspuns.
Ei bine, hai să tachineze acestea în afară întâi.
Deci, pe partea stângă, declara o
plutesc, numesc răspunde.
Pe partea dreapta, nu 1 împărțit la 10 și pui
answer interiorul variabila.
Acum, această linie pare un pic mai mult criptic.
Dar observați unele caracteristici familiare. % Înseamnă aici vine o
substituent.
f înseamnă aici este o valoare în virgulă mobilă, doar o reală
număr, ceva cu un punct zecimal.
0.2 ce înseamnă?
Oricine știe din experiență anterioară?
Două zecimale.
Deci, noi nu am văzut acest lucru înainte, dar e doar un mod de a
exercită un control asupra printf pic mai mult și
zicală, nu-mi da 30 de puncte după punctul zecimal,
în loc să-mi dea doar 2.
>> Și atunci să mergem mai departe și să rulați acest lucru.
Deci, a face matematica 3, și acum lasă-mă să ruleze matematica 3, Enter.
Și asta nu este corect.
Se pare că ne-am întâlnit prima noastra bug autentice.
Ei bine, poate că eu nu doar în căutarea destul de aproape.
Așa că lasă-mă să merg aici, și lasă-mă să pun 20 zecimală
locuri de puncte de acolo.
Și lasă-mă să compila acest lucru, asigurați math3, fugi.
Destul de sigur 1 împărțit la 10 nu este 0.
Deci, ce se întâmplă?
Păi bine, deci de fapt nu are de a face cu asta.
Asta e un gand bun.
Aceasta este de fapt doar o coincidență
că facem asta.
Dar, doar pentru a demonstra că acest lucru nu este, voi
a reveni ceva aleatoriu.
Nu face acest lucru la domiciliu, pentru că e doar greșit.
Dar, asigurați-math3, lasă-mă să-l rulați.
Nu are nimic de-a face în așa fel cu ceea ce am întorc, doar are de a face
cu ceea ce am de imprimare.
Dar l-am auzit aici.
Ce?
PUBLICUL: Deci, avem nevoie pentru a scrie numerele în
divizare, -
>> DAVID MALAN: Bine bine.
Deci, avem nevoie pentru a scrie numerele care participă la
diviziune aici ca punct de flotant ei înșiși valori.
Deci, problema aici este ca mai înainte: C, ca și cu o mulțime de
limbi, are diferite tipuri de date.
Și aceste tipuri de date, de exemplu, sunt acestea aici.
Și tipurile de date în cauză aici, atunci când am tip 1 și apoi mi-am
tip 10, sunt, probabil, tipurile de date?
Deci, este, probabil, un int, nu?
E cu siguranta nu un fond de trezorerie, deoarece nu exista nici o zecimală
punctul sau ceva de genul asta.
Deci într-adevăr, am o int împărțit de către un int.
>> Deci lucrul interesant despre matematica si un computer este că
dacă faci diviziuni folosind numere întregi -
1 împărțit la 10, da este de 0,1.
Cu toate acestea, atunci când un întreg împărțirea de către un număr întreg,
Răspunsul trebuie să fie, de asemenea, un întreg doar pentru ca, pentru moment.
Și ceea ce este implicarea, atunci?
Ei bine, în cazul în care răspunsul este 1 împărțit la 10 este egal cu 0,1, ceea ce
computerul este de gând să faceți este să nu am nici o idee cum să
0.1 reprezintă, pentru că e un punct de valoare variabilă, nu un
număr întreg; se va taie tot după
punctul zecimal și doar vă arată 0 la început.
Și faptul că imprimarea este ca un punct de flotant
valoare, e doar un lucru estetic.
Asta pentru că eu sunt forțând computer pentru a imprima acest lucru ca pe un
plutind valoarea punctului.
Și într-adevăr, eu am declarat ca un flotor, dar matematica este
se întâmplă aici.
>> Așa că lasă-mă să stabilească de fapt, aceasta într-un fel destul de ușor.
De ce nu am face doar 10.0 și 1.0, cu toate că
punct de vedere tehnic am putea scapa cu doar face unul dintre cele.
Acum, lasă-mă să mergeți mai departe și să facă math3.
Lasă-mă să mergeți mai departe și a alerga acum math3, Enter.
Și acum, oh, băiete.
Acum avem o problemă cu totul nouă.
Deci, mai bine, la dreapta; suntem mai aproape de 0,1, dar ceea ce în mod clar este
gresit aici?
Dacă nu ne-am mințit pentru tine de ani de zile, nu?
1 împărțit la 10 este, de fapt, nu destul de 0,1, astfel încât ceea ce este
într-adevăr se întâmplă aici?
Ei bine, poți fel de motiv prin acest punct de vedere logic.
În cazul în care un calculator are doar o cantitate finită de memorie RAM pentru a începe
cu, și într-adevăr un computer este utilizarea numai 32 de biți pentru o
plutitoare valoare punct, este evident motivul pentru care, cu o
număr finit de biți, 32, în acest caz, da, puteți
reprezintă o mulțime de lucruri.
Acesta este de fapt patru miliarde valori diferite pot fi
reprezentată cu 32 de biți, de la 2 la 32, dar este încă finită.
Deci, problema este că există un număr infinit de reale
numere, dreapta.
Dacă-mi dai un număr real, pot găsi întotdeauna tu unul
ușor mai mare, ceva mai puțin, doar prin tweaking
Numerele care sunt, după punctul zecimal.
Deci, dacă nu dispune de un număr infinit de biți, vă
nu se poate reprezenta, eventual, un infinit
Numărul de numere reale.
>> Deci, există această imprecizie inerent în computere, și
acest lucru devine tot împiedicat de timp, chiar și în cea mai simplă de
Programele de acest gen.
Dar, de asemenea, în unele probleme foarte reale, precum și.
De fapt, hai să ia un moment pentru a lua doar o privire la
ceva ce sa întâmplat de fapt în realitate.
Vom viziona doar primele doua minute, si apoi
vom posta link-ul on-line.
Dar aceasta este o dovadă a doar ceea ce poate merge prost, destul de
sincer, într-un mod foarte tragic atunci când aceste lucruri nu sunt
apreciate sau doar noi, oamenii, fac greșeli atunci când vine vorba de
aceste tipuri de detaliile de implementare ale computerelor moderne.
>> [VIDEO jucat]
-Ne întoarcem acum la dezastre de inginerie privind minunile moderne.
Calculatoare.
Am venit să accepte problemele adesea frustrant
că du-te cu ei.
Bug-uri, virusi, si defectele software sunt tarife mici la
plătească pentru confort.
Dar, în militare de mare viteză și de înaltă tehnologie și spațiu
aplicații de program, cea mai mică problemă poate fi
amplificat în caz de dezastru.
La 4 iunie 1996, oamenii de stiinta pregătit să lanseze o fără pilot
Racheta Ariane 5.
Acesta a fost transportă sateliți științifice destinate să
stabilească exact cum câmpul magnetic terestru
interacționează cu vânturile solare.
Racheta a fost construit pentru Agenția Spațială Europeană și
decolat de la instalația pe coasta Guyana Franceză.
>> -La aproximativ aproximativ 37 de secunde în zbor, au prima
ceva observat a fost de gând greșit, faptul că duzele au fost
rotire într-un mod în care într-adevăr nu ar trebui.
Aproximativ 40 de secunde în zbor, în mod clar de vehicule
era în necaz, și asta atunci când au luat decizia de a
distruge-o.
Un ofițer de securitate gama cu curaj extraordinar apăsat
buton, racheta a explodat înainte de a putea deveni un
pericol pentru siguranța publică.
>> -Aceasta a fost călătoria inaugurală a Ariane 5, și ei
distrugerea a avut loc din cauza unui defect încorporat în
rachetă de software.
>> -Problema pe Ariane a fost că a existat un număr care
necesită 64 de biți pentru a exprima și au vrut să-l transforme
la un număr de 16 biți.
Ei au presupus că numărul nu a fost niciodată
O să fie foarte mare,
faptul că cele mai multe dintre aceste cifre în numărul de biți 64 au fost 0s.
Ei au greșit.
>> -Incapacitatea de program software cuiva sa accepte
un fel de număr generat de un alt fost la rădăcina
eșec.
Software-ul de dezvoltare a devenit o parte foarte costisitoare din
noua tehnologie.
Ariane 4 racheta a fost foarte mare succes.
Atât de mult a software-ului creat pentru aceasta a fost, de asemenea, utilizat
în Ariane 5.
>> -Problema de bază a fost că Ariane 5 a fost mai rapid,
accelerat mai rapid.
Și software-ul nu a reprezentat pentru asta.
>> -Distrugerea rachetei a fost un imens financiar
dezastru, tot din cauza unei erori de software de minute.
Dar acest lucru nu a fost prima dată când a datelor probleme de conversie a avut
chinuit de tehnologie modernă rachetă.
>> DAVID MALAN: Ne vom pleca la asta.
Dar aceasta este o dovadă a cât de aplicabilă chiar și unii dintre
aceste mici detalii de nivel pe care le-am început să
explora astăzi sunt.
Deci, chiar ca ai un pic distras, probabil, de unele dintre
sintaxa și arcaneness aici, dăm seama că peste
Termenul vom fi axat doar pe modul în care se aplică acest lucru este de a
lumi cu mult dincolo de CS.
Vă vom vedea miercuri.