[Powered by Google Translate] [♪ ♪ zumzet] Deci, să introducă vă la ceea ce am pe ecran; este unul dintre instrumentele pe care le dezvoltate in timpul verii; se numește CS50 Spatii, și e de aplicație colaborativă de codificare că am de gând să folosească în secțiunile. E destul de cool. Au văzut vreunul din voi alerga încă CS50? Permiteți-mi să trag, care într-o altă filă. Run.cs50.net Astfel daca te duci la run.cs50.net, puteți vedea acest lucru este un mod în browser-ul dvs. pentru a de fapt, cod - scrie cod C, și apoi rulați-l, așa că atât ea, cât compilează, se ruleaza, apoi returnează de ieșire pentru tine, astfel încât acesta este un fel de mod de a experimenta rece cu unele dintre cod care merge peste David, în prelegeri și ne dau pe tine pe seturi cu probleme fără a avea de fapt pentru a porni aparatul. Deci, ce face Spațiile care este diferit de cel daca am reveni la această filă, Spatii este administrat de CS50, cum ai vedea chiar aici, dar dacă vom defila peste si uita-te la cealaltă parte a ferestrei, vezi dreapta eu sunt singura persoană din acest spațiu, dar ce am de gând să faceți este să ceară voi să se alăture acestui spațiu cu mine și vom lua toate la cod în fereastra mica aceeași, code share cu ele, și vorbesc despre diferențele dintre codul nostru. Deci e un fel de un lucru cool - astfel încât să se alăture, în cazul în care v-ați putea vizita acest link chiar aici, la partea de sus care le-am subliniat, aveți posibilitatea să tastați doar în apps.cs50.net/spaces/vqcspSnO. În regulă, deci pentru a începe off, Am de gând să vă dau un pic de un tur de asta. Vom face unele de codificare stupide mici cu ea la început, așa că toată lumea se cam un simt pentru ceea ce e ca, dar ceea ce am făcut - sau ceea ce sunt pe cale să fac aici este - Mă duc să iau codul pe care l-am scris aici, care, după cum vedeți acum este gol; nu face nimic. E doar placa de cod cazanului, ne vom numi. Cu un pic de to-do comentariu. Am de gând să-l salvați prin apăsarea acestui buton Salvare. Și ce face este evidențiat-o aici, pe scurt - ca caseta de revizuire verde salvare, și acum, dacă veți căuta pentru mine în spațiu, faceți clic pe numele meu, puteți vedea că am această revizuire chiar aici, și dacă faceți clic pe această revizuire, vom încărca acest cod în spațiul vostru, de asemenea. Deci, toată lumea a încărcat acest cod în spațiu lor? În regulă, dacă nu aveți încă, mergeți mai departe și de a face asta, și apoi ceea ce vreau ca voi să faceți în această mică secțiune de-a face se scrie un pic folosind printf despre tine, Deci, de exemplu, mi-as scrie printf ("Numele meu este Nate"); și apoi aș scrie "Am absolvit în 2009 de la Stanford " și mi-ar plăcea să aud despre ce an ești la școală, chiar daca esti la facultate sau scoala de afaceri sau un alt Harvard școală, ceea ce studiază dacă se cunoaște încă; în cazul în care acesta nu este cunoscut, asta e mișto. Nu am decid, până când am fost în anul al doilea de studentie târziu mea. și apoi mi-ar place, de asemenea, să știu ceva nebunesc vrei să-mi spui sau ceva despre clasa sau doar orice altceva. Când ați terminat de scris, cu printf mica ta, în cazul în care veți salva de revizuire sau, mai degrabă întâi asigurați-vă că puteți rula și că se imprimă exact ceea ce vrei tu să imprimați, și apoi, dacă te duci mai departe și salva acea revizuire folosind butonul Revizia Salvare, acest tip prima puțin peste aici, și vom merge cam printr și de a face o mica introducere in acest fel. Deci, ar trebui să aveți doar pentru a lovi butonul Play, care este aici în stânga sus, astfel încât acest buton Joacă pe stânga sus va trimite codul de pe serverul nostru pentru a în cazul în care acesta devine compilate și apoi executați. Deci, ce e cam nebun despre acest lucru este de fapt, acest cod nu se execută pe computer; este de fapt a fi trimise pe Internet. Cum merge, Charlotte? I >> - bine. Eu - Cred că sunt care au dificultăți, economisind pe serverul astfel încât se poate - Eu pot rula programul. Și atunci când am încerca să-l executați, se spune că există o eroare. Declarată ca un virus, care nu este acolo mai. Oh, hai să vedem, poate te-a lovit Salvare din nou? O văd pe ecran. Corect >>, bine, deci asta e ceea ce am. Și nu știu de ce nu ma lasa sa-l ruleze. Oh, bine, îmi pare rău. Poți explica de ce - ceea ce a fost greșit - ceea ce nu a fost de lucru cu el? >> Da, pentru că nu am văzut că exista o ultima linie unde există încă o variabilă că nu am declarat, pe care nu am intenția de a fi acolo. Da, perfect! Acum, dacă am >> ao salva, cred că ar trebui să funcționeze. Acum, că l-ai salvat, acesta funcționează; minunat. Deci da, cum am trece prin - Deci, ce se întâmplă, Mă duc să repet acest lucru pentru aparatul foto. Ceea ce sa întâmplat a fost că această variabilă e a fost lăsat în urma - Presupun că ai șters alte chestii în cazul în care ați declarat ca, și astfel acest lucru a fost aruncat lucrurile off și nu a fost permițându-vă să-l rulați. Deci, asta este exact ceea ce vrem să facem în secțiunea Se au oamenii încearcă să scrii piese diferite de cod, compila, a se vedea ce funcționează, ce nu se vedea, și apoi vorbi cam despre aceste lucruri, deoarece acestea sunt puncte de declanșare care Eu încă mai întâlni, Eu încă - să fac o mulțime de lucruri stupide tot timpul, si nu stiu de ce nu merge, așa că hai să trageți în sus de revizuire a lui Charlotte 3, iar noi vom fugi. Așa că atunci când am alerga, acum că am codul ei aici, Eu pot mări, a lovit butonul Run, Încărcări aceasta, ea construiește, se execută, spune că a rulat cu succes, și dacă aș defila în jos, vezi Charlotte este un junior la Casa Adams, psihologie, secundar în economie; minunat. Mă bucur să te cunosc! Minunat. Bine, se deplasează, să mergem la Daniel, du-te la revizia 3, compila, executați; de ce nu ne spui ceva despre tine, Daniel? Sună-mă >> Dan. Mă duc la școală de afaceri vizavi de voi, și am fost în Marină înainte de aici, și acest lucru este cu totul nou pentru mine, asa da. Nu te simți rău, eu sunt 30 și nu știu nici de chestiile astea. Minunat, mulțumesc, Dan! În regulă, avem un alt Daniel. Tu du-te de Daniel - te vei prezenta, Daniel? Sigur >>, eu sunt Daniel. Sunt un al doilea de studentie la Mather chiar acum. Eu mă concentrez asupra guvernului, dar am vrut sa iau CS50 pentru ca am auzit comentarii avantajos despre clasa și niciodată nu am încercat CS înainte. Derulați în jos aici și arată acest lucru - se răcească. Mutarea pe, Jared. Cum merge? Bine >>, ce mai faci? După cum puteți vedea, eu sunt un concentrator de filosofie junior în Eliot, originar din sudul Californiei, si eu sunt interesat în a lua CS50 pentru că îmi place logica de ea, și se pare foarte cool să faci lucruri pe calculator, așa. Minunat, în cazul în care, în sudul Californiei ești? >> Despre o oră de la [inaudibil], un oraș mic [neauzit]. Oh, da, tatăl meu e de la Redlands. Misto chestii. În regulă, Jimmy, cum merge, Jimmy? Bine >>, ce mai faci? Fac destul de bine! Spune-ne despre tine. >> Sunt un student în anul întâi, iar eu nu sunt în totalitate sigur ce am majoring în dar eu sunt cam înclinat spre economie. Ca Daniel înaintea mea, n-am făcut nici CS, dar sună cam rece. Sunt originar din Chicago. Minunat. Deci, a verifica afară imprimarea lui aici. Am vrut să întreb, a făcut acest lucru de imprimare ca v-ați așteptat? Nu >>, am uitat pentru a imprima o linie nouă. De fapt am uitat că, atunci când am scris chestia mea pentru prima dată, de asemenea. E un fel de durere să vă amintiți să afișezi cele din manual. Ar fi frumos dacă doar știu că e ceea ce ai vrut. Bine, Kelly. Wow, avem 2 Kellys; 2 Daniels, 2 Kellys. Deci, Kelly - te duci de Kelly Ren? Bine, minunat. Sau Kelly, vreau să spun. Deci da >>, așa că eu sunt Kelly. Sunt un al doilea de studentie in Pfoho. Am primit un e-mail astăzi că eu încă mai au 7 saptamani pentru a declara concentrarea mea, Așa că încerc să nu mă gândesc la asta, si imi place de coacere, de funcționare, și Craisins. Nu am experiență cu cele mai multe dintre CS; M-am învățat să construiască site-uri web atunci când am fost foarte tineri, dar cred că am învățat eu, probabil, greșit de multe ori. Să sperăm că voi învăța un pic mai mult și - da. Minunat, bine, mulțumesc. Să mergem la alte Kelly; Eu nu am nimic - ai spus ceva aici? >> [Fără sunet] Uite-l! Dulce! >> Regulă, așa că eu sunt Kelly. Sunt un student in primul an de absolvent. Sunt majoring în minte, creier, și educație. Am absolvit în Franklin & Marshall College în 2008 cu specializări în psihologie și sociologie și un minor în limba franceză. Iau CS50 pentru că eu sunt interesat în obținerea unui doctorat în Neuroștiințe și mă simt ca și cum asta mă va ajuta să înțeleg tehnologiile folosite. Minunat. Mutarea pe, Mikaela. Este că pronunția corectă? Bine, minunat. Sunt >> Mikhaila. Sunt un al doilea de studentie in Kirkland House, și eu mă concentrez în Inginerie Mecanică. Îmi place foarte mult cu bicicleta, a construit o bicicleta in aceasta vara. Iau CS, de fapt, ca o cerință de concentrare, dar știi, eu cred că e încă un fel de misto clasa de inginerie. Awesome - ai construit o bicicletă în această vară? Da >>. Wow, cum ar fi rama si toate astea? Uh-hunh >> (afirmativ). Wow, asta e foarte misto. >> [Fără sunet off-camera de chat] [Râsete] Da, a trecut atât de mult timp. Nu se știe niciodată, nu? Ei bine, rece, grație bine, Mikhaila. În regulă, Missy. >> Numele meu este Missy, eu sunt un student în anul întâi, si asta inseamna ca nu stiu nimic! Vreau să se concentreze în astrofizică. În CS50, Mă simt ca va ajuta cu siguranta cu asta. Un fapt ciudat despre mine este ca eu sunt un pompier la nivel național certificat. Wow! Cum sa întâmplat asta? >> Am participat o academie și a trecut prin iad pentru o mulțime de săptămâni și a luat de certificare meu. Uau, felicitări! Acesta este un pas mare, pentru sigur. Ok, deci acum vom mă pe mine. Eu sunt cel următor în rândul. Eu - a alerga it. Deci, numele meu este Nate. Am fost clasa a anului 2009, la Stanford. Am fost un sisteme simbolice majore, care este similar cu Mind, Brain Behavior concentrare, aici, dar e un fel de amestec de informatică, lingvistică, psihologie, filosofie și. Un fel de - Da, o mulțime de lucruri ciudate, dar a fost grozav, și apoi am făcut meu de master in Informatica acolo, de asemenea. Deci, eu sunt nou la Harvard în acest an. Chiar am vrut să intru în predare. Mi-am petrecut ultimii 4 ani la Stanford TA-ING orele de informatică și așa mai lasă-mă să vin David pe, și eu voi fi ajutat cu CS50, așa că am face acest lucru cu normă întreagă, eu nu sunt la școală grad. A fost distractiv. Să sperăm că va continua să fie distractiv, eu sunt sigur că va fi. În regulă, Sam. >> Numele meu este Sam, eu sunt un al doilea de studentie la facultate, în dreptul specific. Majoră mea va fi istorie a științei, probabil, și VES secundar, si culoarea mea preferata este galben. Nu este nevoie să treacă judecata sau ceva, dar e un bun culoare! Și Stella. >> Bună, eu sunt Stella, eu sunt un boboc în Grays. Nu am nici o idee despre ceea ce am concentrat în încă, astfel CS50 a fost doar un fel de întâmplare, care este interesant. Fapt amuzant, Jimmy a fost primul prieten de-al meu la Harvard, pentru că suntem amândoi de la Chicago. Rece, și Grace - care ar trebui sa fie unul cu adevarat frumos, nu? M-am gândit >> [neauzit]. Oh, da. [Nu se aude / off-camera de chat] Bine, eu sunt încă de învățare, încă de învățare. Deci avem ceva care e un fel de interesant aici. Da, mă întrebam doar, ai o idee ce se intampla pe aici? Știi cum să interpreteze acest lucru? >> Am fost trebuia să fie pus punct și virgulă după fiecare linie. Asta e un fel de durere. Uneori aceste semne punct și virgulă poate fi o adevarata durere pentru a urmări în jos. Deci, se dovedește că programul special suntem folosirea acestui an pentru a compila codul nostru C este numit zăngănit, și motivul pentru care am început să utilizeze zăngănit în acest an - pentru că nu am folosit acest program în trecut; am folosit o alta numita CCG, care este foarte popular - Zăngănit de fapt, vă oferă mesaje de eroare, care fac sens. Aceasta se spune "așteaptă", "după expresia", și chiar vă spune expresia după care ai nevoie de un punct și virgulă. Deci ai de stabilire? Da >>, chiar acum. Minunat; să-mi spuneți și vom trage în sus, iar noi îl vom rula. Dar da, punând punct și virgulă în aceste este un fel de durere. L-am fixat >>, deci cred că ar trebui să funcționeze. Awesome - revizia 3. Care arata ca ea. În regulă, așa că acum, dacă am alerga, acolo se duce. Misto chestii. Bine. Asa ca va multumesc pentru a face asta. E minunat să vă cunosc, băieți. Ce-o să facem acum este petreacă următorul bit mica cam scufundări în problemele secțiune care provin de la problema stabilită din această săptămână și vom face acest lucru pentru majoritatea secțiunilor pentru restul termenului, si apoi vom salva ultimii 15, 20 de minute sau cam asa ceva pentru a vorbi despre problema în sine setat și apoi doar orice alte întrebări aveți, în general, cu privire la clasa. Asta a spus, ceea ce vrei să faci cu adevărat este toată lumea s-au participă folosind chestii Spatii, aruncarea în cod, aruncarea în traduceri, și vorbesc despre atunci când lucrurile place acest pauza sau nu funcționează, doar pentru că acestea sunt lucruri care Știu că am dat peste atunci când am început de codificare, și au fost într-adevăr cam frustrant uneori pentru ca daca e ca si cum am 2 înainte de setul de problema ta se datorează, așa - doar pentru divulgarea, Nu am pornit de programare, până când am fost un student în anul doi la facultate. Acesta a fost un fel de acest lucru ciudat, necunoscut Am auzit că a fost cam rece și am auzit, de asemenea, că ar putea fi o adevarata durere în fund dacă ți-e dor o virgulă și că e singura eroare de păstrarea programului de lucru de la și ținându-vă de la a merge la culcare, asa cu siguranta, în cazul în care aveți întrebări, cum ar fi faptul că, dacă aveți probleme de genul asta, lasă-mă să știu, pentru că vreau să fac asta o experiență bună pentru voi. Deci, s-au descărcat voi tot problema stabilit încă? Cam știu unde este? Bine. Deci, vom merge la cs50.net, pentru că eu nu-l am pe acest cont, trageți în sus seturi de probleme, trageți în sus set de probleme 2, și ne vom uita la ediția standard de astăzi. Vom trage în sus caietul de sarcini aici. Derulați în jos. Deci, vom începe căutarea de la această secțiune de întrebări. Au privit aceste voi pantaloni scurți încă? Bine. Deci, există pantaloni scurți pe bucle, care se face de Tommy, unul dintre cele semenilor didactice cap. E unul pe domeniul de aplicare, Cred că face de către un alt coleg de predare pe nume David și apoi unul pe Cezar Cifrul, de asemenea, efectuată de către David. Sunt destul de mișto. Au fost voi uitam pantaloni scurți lor de până acum? How've au fost? Utill? Bine, bine de știut. Dacă acestea nu sunt, se poate spune așa. Dar, înainte de a face, s-au uitat la voi aceste întrebări la toate? Hai să vorbim despre asta un pic. Deci, am introdus in ultimele saptamani în curs un număr de bucle diferite. Nu e pentru bucla, buclă în timp ce, iar apoi bucla do-timp, și în curs, am vorbit foarte mult despre modul în care aceste bucle sunt toate destul de similar într-o mulțime de feluri, si puteti face mult din aceleași lucruri, cu o buclă în timp ce că poți, cu o buclă pentru. Trebuie doar să utilizeze un fel de combinații potrivite ale variabilelor și astfel. și într-adevăr așa distincție reală între toate buclele care este uneori acestea sunt mai utile pentru a le folosi la un moment dat decât într-un alt timp. Deci, de exemplu, bucla in timp ce diferă de la o bucla do-timp. Are toată lumea simt ca au un mâner bună atunci când un do-while este mai utilă sau ceea ce este diferența? >> Cred ca diferenta este o buclă în timp ce do- ruleaza - Nu știu destul de ceea ce este terminologia, dar serie de funcții în cadrul buclei. Ei au în mod automat - ea nu se execută sale, cel puțin înainte de a verifica starea, sau bucla in timp ce va rula doar atunci când în mod continuu funcționează - dacă este sau nu condiție este îndeplinită. Da, asta nu face sens? Să aruncăm o privire la un pic de cod. Deci, doar să repete întrebarea, sau răspunsul, mai degrabă; Răspunsul a fost că o buclă în timp ce se va verifica pentru a vedea dacă starea pe care le specificați este îndeplinită înainte de a conduce corpul buclei pentru prima dată, întrucât do-while va rula automat corpul buclei, este ceea ce noi numim - e ciudat terminologia, dar dacă spun vreodată ceva care nu are sens, lasă-mă să știu - corpul buclei este că lucrurile pe care le pune în între acolade. Și într-o buclă do-timp, acest organism se executa cel puțin o dată, și apoi starea se verifică înainte de a se execută de fiecare dată succesivă. Deci, de fapt, Sam, te superi scris un simplu buclă în timp ce în Spatii? >> Ce părere aveți un fel de face un nou ...? Eu pur și simplu ștergeți orice ai acolo. Da, clar doar afară. >> Ei bine, eu cred că am avut această - care o vrei, o vreme, sau vrei ...? Da, doar nu o vreme adevărat, imprima ceva. Și hai să vedem. Alexandru, ne-am dat seama nu ai introdus. Oh >>, e în regulă. Ai - poti coda o buclă do-în timp ce pentru noi? Da >>, voi încerca. În regulă, vom trage pur și simplu acestea pe ecran, astfel încât să aveți un fel de un maner asupra a ceea ce diferențele sunt. Deci, aici e ceea ce a făcut Sam. Are un întreg numit i că el initializat la 17. Apoi, spune el în timp ce (int i = 17) printf ("Numele meu este Sam."); Deci, ce se întâmplă atunci când vom rula acest cod? E o eroare; ceea ce nu spune eroare? Să-l trage în sus și să vorbească despre asta. O eroare a avut loc, se spune. Să defilați în jos. Deci, ne-a dat această eroare, și a spus, "Hei, m-am așteptat o expresie." Asta e cam criptic. Da, așa exact - și, din nou, va fi un alt bug mai mici pe care le va prinde în doar o secundă. Dar acesta este un alt unul dintre acele lucruri ciudate terminologice, astfel încât această int i = 17 nu este o expresie. Cum se pare ca se face este că e declararea unui număr întreg numit i și stabilirea-l la egal la 17 sau, mai degrabă, punând în care 17 int am sunat. Și asta nu are sens în contextul acestei buclă în timp ce. Aceasta nu face sens, după cum vom vedea, în cadrul unei bucle pentru, deoarece pentru declarațiile bucla se începe cu faptul că pentru int i este egal cu ceva și merge mai departe. Deci, ai - repari ceva, bine. Aici se duce; minunat. Asa ca acum lucrurile arata un pic diferit. Un tânăr de lucrurile s-au schimbat. Poți să ne spui ce lucrurile s-au schimbat? >> Am scos int, deci nu e nici o declarație [neauzit] în loc de o misiune. Semnul un egal, am pus 2 semne egale, ceea ce înseamnă un egal. Minunat. Da, deci ce Sam a fost el scos int care a fost aici mai devreme, așa că, dacă am uita-te la asta - asta este ceea ce a fost mai devreme, a spus int, care a fost acesta declara - asa ca am scos de tip. Nu e int, char sir,, scurt, acestea sunt numite tipuri. Deci ai scos de tip și apoi anterior, el a avut doar un singur semnul egal și ceea ce a spus a fost problematică despre acest lucru a fost atunci când aveți un semnul egalității, asta e un operator de atribuire. Asta nu e de testare sau nu 2 lucruri sunt egale. Asta e de fapt ceva stabilirea egală cu ceva. Ne pune numarul 17 in variabila i. Deci, pentru a face acest tip de comparație, va trebui să utilizați dublu egal, care este un fel de un lucru ciudat dar este o eroare destul de comune. Deci, un alt lucru eu subliniez, dacă nu te superi, este faptul că, în Funcția noastră de aici, în principal int, vedeți că corpul nostru funcției este compensat din partea stângă de 4 spatii sau un tabulator. Motivul pentru care face acest lucru este doar pentru lizibilitate. După cum puteți vedea în buclă în timp ce lui Sam aici, el nu a liniuță, la toate, și care nu afectează funcționalitatea cod. Acesta va rula exact aceeași. Deci, de exemplu, dacă am ajuns până la partea de sus aici și apăsați butonul Joacă nostru, acesta va construi, acesta va rula, și ceea ce se va întâmpla? De ce nu-l mai spun de funcționare? >> Pentru că voi păstra repeta hi. Exact, și de ce nu-l repeta hi? Deoarece >> întregi nu se schimbă niciodată, așa că e întotdeauna 17. Da, exact, asa Să vedem, după ce - mi amintesc de numele tău din nou? Jimmy. Deci, Jimmy a spus că motivul pentru care acest repetă hi de peste si peste din nou se datorează faptului că această condiție este întotdeauna adevărat. Noi nu schimba valoarea lui i. Noi nu schimba conținutul a ceea ce este stocat în variabila. Deci, la acest moment avem această eroare, care programul a generat prea mult de ieșire, și dacă vom defila în jos și un fel de privire la ceea ce se întâmplă pe aici, puteți vedea că este hi, hi, hi, hi, hi, hi, hi tot drumul prin. Minunat. Deci, un fel de înapoi la punctul de plecare că având amprentei aici în corpul buclei în timp ce nu a afectat nimic. Programul a fugit încă foarte bine. De obicei pentru stilul bună - și acest lucru este ceva ce ne uităm la seturi problema ta - vă rugăm să liniuță acest lucru prin 4 spatii, pe care le puteți face apăsând tasta tabulator doar sau prin punerea manual în 4 spații tine. Rece, bine așa că hai să mergem înapoi și uită-te la Lui Alexandru do-timp. Doar >> având cam o mică problemă. Bine, hai să lucrăm și prin ea. E bine? Da >>. Bine, așa că aici vom merge. Acesta este codul pe care Alexandru a scris. Nu te duci de Alex - bine. Deci, aici e codul care Alex a scris. Deci, avem declarația noastră de principal chiar aici, și apoi ne-am luat acest variabila integer numit i fiind declarate chiar aici. Avem o declarație do și apoi din nou organismul cu aceste bretele, astfel încât acesta este trupul do-timp - permiteți-mi să zoom in pe acest lucru pentru că este mai ușor de citit - și în corp, noi încercăm să imprimați "acesta este trupul", i + +, incrementa astfel încât conținutul de i și face acest lucru până când am ajunge să fie de 3, și apoi se termină programul nostru. Deci, ce se întâmplă atunci când vom rula acest program? Am așteptat >> un identificator. Ok, deci construi, a alerga, eroare. Ce se întâmplă? Am defilați în jos aici, am obține acest lucru oarecum criptic cautati, de așteptat punct și virgulă după declarația de la nivel de top. Asta e cam ciudat. Are cineva o idee de ceea ce s-ar putea intampla? Cam ciudat, da. >> [Nu se aude] fie declarate în afara parantezelor? , Astfel că nu se aplică atunci când utilizați paranteze? Deci, el a declarat acest tip afara care paranteze? Oh, tipii ăștia - cu acolade? Da >>. Da, exact. Deci, se dovedește că nu se poate declara o variabila de fapt, chiar aici, la fel ca asta. Ce v-ar fi încercat să facă a fost - taie-l de acolo - Puteți fie să-l în acolade chiar aici sau o altă alternativă este de a pune-l complet în afara. Și astfel încât acestea - în funcție de locul în care ați pus de fapt, declarația de faptul că variabila integer, puteți obține 2 tipuri foarte diferite de variabile; atunci când e în afara principal, E ceea ce noi numim o variabila globala. E în afara domeniului de aplicare al oricărei funcții - nu e într-o funcție - întrucât, în cazul în care l-am pus în interiorul principal, ca aici, atunci se numește o variabilă locală, deoarece este local domeniul de aplicare al principal. Și vom vorbi un pic mai mult despre ceea ce diferențele sunt între cele 2 tipuri și de ce să utilizați diferite tipuri de variabile, dar pentru acum, puteți să vă păstrați doar toate variabilele locale, pentru că nu avem nici o nevoie de variabile globale. Ok, deci asta e un lucru chiar acolo. Să încercați să rulați din nou, să vedem ce se întâmplă. Run, obține o altă eroare. Mări într-un pic, ce avem? Primim această paranteză de așteptat după ce face / timp. Orice idei ce se întâmplă? Dan? Este >> timp, apoi paranteza si apoi - Nu știu dacă aveți nevoie pentru a redeclare int, dar face în timp ce (i <3). Exact, da. Deci, se dovedește că Dan e exact dreapta. Nu avem nevoie pentru a pune acest tip de aici din nou. Ne putem ucide, în loc de tip și de a face doar asta. Bine. Voi zoom înapoi, încercați să-l încă o dată. Uită-te la asta, se execută cu succes. Dacă vom defila în jos, "acesta este trupul" imprimat de 3 ori. Asta e destul de dulce. Bine făcut, bine făcut, băieți. Bine făcut. Cum această merge atât de departe? Ritm decent? Bine, bine. Deci, așa cum am un fel de înapoi la întrebarea inițială, ne - și acum, dacă vom vedea diferenta, veți vedea că, în această buclă do-timp, condiție vine ultima. Deci, ca computerul citește programul Deoarece programele C sunt executate fel de în această ordine secvențială, în cazul în care acestea literalmente începe cu prima linie de principal, și apoi executați linia 6, linia 7, linia 8, linia 9, linia 10, linia 11, toate chestiile astea în partea de sus dreapta aici este de gând să execute o dată înainte de a ne testa vreodată această condiție pentru a vedea dacă sunt sau nu - sau conținutul de i, mai degrabă - sunt mai mici decât numărul 3. Și numai dacă, odată ce vom ajunge la linia 12, conținutul de i sunt mai puțin de 3 ne sari de fapt, înapoi până la linia 7 și apoi repetați procesul, și apoi vom testa starea din nou și din nou și din nou. Astfel încât să putem să contrasteze acest cu - zoom înapoi, defilați în jos la versiunea lui Sam, ne vom uita la asta, ușor schimbat în așa fel încât să nu mai este o buclă infinită - în cazul în care, dacă am mări, vedem că, în acest program execute, se va declara prima int i, setat, conținutul de i fie la 0, și apoi lovește starea de buclă în timp ce primul, astfel încât, în acest caz, acest organism, această printf ("hi") și i + + nu va executa nici cu excepția cazului în i este de fapt mai mică sau egală cu 2. Deci, în cazul în care i este 3, de exemplu, dacă ne-am stabilit acest drept aici egală cu 4 - sau voi face 3, pentru că am spus 3 - și apoi rulați-l, că va construi, acesta va rula total bine, dar nu va imprima de fapt, nimic, deoarece nu a reușit acest test pentru primul caz. Deci, în clasă, am un fel de vorbit despre motivele pentru care aceste bucle do-timp sunt utile, uneori, și de ce ne-ar folosi, spre deosebire de o buclă în timp ce. Sunt acolo - nu voi avea nici o traduceri de ce un do-while ar putea fi mai util? >> Ei bine, eu cred că nu-buclele în timp ce este, dacă doriți introduse de utilizator, pentru că în acest fel le puteți lăsa a pus ceva în timp; dacă e corect, ne putem trece la restul programului, dar dacă nu este corectă, atunci vă păstrați pe determinând utilizatorul până când veți introduce de intrare dreapta. Da, exact - exact, astfel încât un do-while este util pentru că atunci când ia determinat pentru introduse de utilizator pentru că aveți nevoie pentru a obține intrarea utilizatorului înainte de a vă puteți verifica de fapt. Deci, în PSET 1, în PSET 2, în cazul în care sunteți determinat pentru introduse de utilizator foarte mult, asta e un lucru la îndemână pentru a utiliza spre deosebire de doar o buclă în timp ce simplu. Dacă utilizați o buclă în timp, puteți face același lucru - poti sa faci acelasi lucru cu o buclă în timp ce cum faci cu o buclă do-timp. Tu trebuie doar să aibă un fel de acest proces duplicat în cazul în care veți obține prima intrare și apoi începe bucla în timp ce. Întrucât un do-while, trebuie doar să-l scrie o dată si este un detergent foarte mult. Bine. Alte întrebări? Asigurați-simț? >> Retur 0 - asta e doar un fel de stand sau este -? Da, astfel încât să putem - ei bine, vom acoperi acest lucru un pic mai târziu dar se pare că această întoarcere 0 pe care am pus la sfârșitul principal tot timpul - poti lua cam la fel ca pe ceva ce facem pentru moment. Ceea ce am început să vorbim despre cu funcții un fel de la sfârșitul săptămânii trecute și apoi din nou în această săptămână este faptul că o funcție ia intrări care sunt aceste lucruri în cadrul paranteze; Acestea sunt 2 intrări, argumentele noastre sau parametri, ceea ce ei sunt, de asemenea chemat să funcționeze nostru principal, și apoi o funcție produce o putere pe care noi o numim o valoare de retur. Și valoarea returnata în cazul principală este aceasta int, acest număr întreg, și modul în care să vă spun o funcție, "Hei, asta este ceea ce de ieșire va fi, "este cu acest cuvânt" întoarcere ", acel cuvânt cheie, mai degrabă, și așa mai departe principal revenind 0 sau principal scoate 0 este standard în programe C pentru că se întoarce de la 0 principalele mijloace care "Hei, totul executat cu programul meu foarte bine." Dacă ar fi să afișezi altceva decât 0, cum ar fi 1, de exemplu, care este folosit pentru a spune cine a condus acest program de că ceva a mers prost. Deci, ca ne se implice mai mult cu lucruri pe semestru, dacă sunteți vreodată nevoie să spun, "Hopa, știi, ceva a mers în neregulă cu acest program," , mai degrabă decât având în accident de programul meu, vreau să notifice alergător de programul meu că ceva nu a mers bine, puteți utiliza valoarea de returnare, așa cum l-am numi, că nu e 0. Deci, vom acoperi faptul că un pic mai mult odată ce vom ajunge în funcții. Acest fel de logic? Bine. Funcțiile sunt un fel de bizar - Cred că pentru persoanele care au o mulțime de fundal matematica, este vorba de un pic mai ușor, mai ales dacă aveți un pic de fundal matematica mai abstract și v-ați obișnuit să vorbim despre funcții și tot ce fel de lucruri. Dar vom încerca să le acopere și du-te frumos și lent ca au venit. De asemenea, acest argc int întreg, char * argv [], pentru acum, puteți lua, de asemenea, că, în placa de cazan. Am început să acopere cele pic un pic în curs atunci când vorbim despre argumente care se trecut în programele de pe linia de comandă, dar în seturi de probleme și programelor dvs., E total bine doar pentru a scrie nule și păstrați-l simplu. Și ce înseamnă acest vid este faptul că "Hei, principal nu este de gând să accepte orice intrări; aceasta este doar un program de noi o să fugi. Noi nu vom da orice informații suplimentare de fiecare dată când l-am porni de funcționare. " Deci, pentru moment, puteți face acest lucru; puteți, de asemenea, omite chiar 0 retur la sfârșitul programelor de dvs. și ei vor alerga bine, dar eu recomand doar ca să țină inch În câteva săptămâni, vom începe să fel de trageți înapoi capacul un pic și să înțeleagă mai mult despre toate acele mici diferite piese în mișcare. În regulă, acum să vorbim despre a doua întrebare aici. Deci, ce înseamnă "identificator nedeclarat" indică, de obicei, în cazul în care scoase de zăngănit? Cred că ne-am fi văzut că deja astăzi. Poate cineva da o recapitulare a ceea ce inseamna? Să vedem, Kelly - unul din cele Kellys. Deci, >> - Da, ceea ce face - >> Cred că atunci când, la fel ca, nu declară variabilele și încercați să-l folosească. Da, exact, exact. Deci, dacă ați văzut vreodată această ieșire atunci când încercați să compilați și programul tău, la fel ca Kelly a spus, aceasta înseamnă că ai folosit o variabilă care nu ai declara, așa că, dacă mă duc înapoi la spațiul nostru, si eu fac ceva de genul printf ( "Hello% s") și să încerce și să completeze în% s cu o variabila care nu am declarat nicăieri și am încerca să-l executați, veți vedea ce ajung jos la acest din dreapta jos aici: "Utilizarea de identificator nedeclarate 's'"; Asta înseamnă că nu ați declara variabila. Același lucru se întâmplă în cazul în care aveți x și încercați și să stocați 7 în ea și nu am declara X. I a lua această eroare aceeași: "Utilizarea" x "identificator nedeclarat". În regulă, astfel Cipher Cezar, nu sunt foarte sigur, Voi lasa voi viziona acest tip scurt, de înțeles de ce, și, sperăm, după ce face probleme pentru această săptămână stabilite în cazul în care ați scrie de fapt, un cifru Cezar, vei înțelege un pic mai mult despre ce înseamnă a fi un sigur și nesigur - sau nu este sigur, cred - nesigură este ușor diferită. Un alt lucru era avem aceste alte întrebări aici despre funcții și ceea ce este o funcție, și am un fel de vorbit despre asta pe scurt atunci când am vorbit despre valorile de returnare; pentru cineva care a fost la prelegere, puteți recapitulare, care a fost la prelegeri azi? Bine. Să vedem, să aibă - poate cineva ne spune ce este o funcție? Kelly? Practic >> ceva ce recurge la ceva ce este scris în biblioteca în care este mai complicat acolo, si apoi scrii doar o formă scurtă a acesteia, asa ca te referi înapoi la bibliotecă, utilizând tot ce cod lung și [neauzit]. Da, exact, iar apoi să adăugați ceva la asta? >> Da, cred că la asta ca fiind similar cu conceptul de o formulă matematică, în în cazul în care ați scrie doar o formulă și apoi puteți conecta variabile în și asta e ceea ce o funcție este [neauzit]. Da, așa că am luat o pereche de răspunsuri aici că sunt atât foarte bine si chiar pe. Nu e referindu-se la cod care a fost scrisă în bibliotecă undeva care este mult mai complicat și apoi puteți recurge la acest cod și utilizeze în mod efectiv de scris doar forma scurta a acesteia - sau, mai degrabă, numele său - și apoi există, de asemenea, această comparație cu o formulă matematică, în sau fizica, tot ce fel de lucruri în cazul în care aveți o formulă și vă puteți conecta apoi în variabilele pentru care formula pentru a ajunge apoi rezultatul formulei, deci te gândești la asta ca la fel ca ecuația pătratică. Imaginați-vă dacă, mai degrabă decât a fi nevoie să învețe despre ce formula pătratică este în clasa de matematică, ai avut doar un program de calculator mic care a făcut-o pentru tine. Credeți utilizarea programelor de calculator cineva în clase de matematica in liceu? Da, clase de fizica? În cazul în care vă pot spune doar, "Hei, formula pătratică. Acestea sunt variabilele care doresc să de intrare. Acum, dă-mi un răspuns. " Asta e un fel de ceea ce este o funcție. E o modalitate pentru noi de a un fel de scriere, cum ar fi un mic program mic sub în cadrul programului nostru de mare și-l utilizați de peste si peste din nou astfel încât să nu trebuie să copiați și să inserați codul, putem da intrari diferite și obțineți rezultate diferite, e super la îndemână atunci când sunteți încercarea de a scrie programe diferite la momente diferite. Deci, de exemplu, o funcție pe care am fost folosind peste si peste si peste din nou de-a lungul cursului este printf. Printf este ea însăși o funcție și se pare că este de fapt o destul de lung și complicat, urât în ​​căutarea, funcționează pentru a scrie. Deci, la fel de simplu precum pare la noi pentru a imprima lucruri pentru a ecran, pentru că suntem cu toții de făcut doar că, la începutul secțiunii de astăzi, se dovedește că de fapt, știi, un cuplu bun sute de linii de cod. Nu e ceva ce mi-aș dori vreodată să scriu, pentru că, dar vom ajunge să-l folosească în fiecare zi, că e un fel de misto, astfel vom ajunge să-l împărtășească unul cu celălalt, cu diferite programe, deci vom fi mai scufundări în funcții; pentru moment, nu suntem - singura funcție vom fi scris este principal. Principal în sine este, de asemenea, o funcție, și puteți vedea că are producția, intrările sale, cum ar fi despre care am vorbit, și apoi numele său, care este principalul. Principal este un fel de - este o funcție specială acolo. În programul tău C, trebuie să existe o funcție principală, și așa mai departe de acum, am cam scris omis prototip, sau declarația de, principale. Am dat fiind faptul că pentru tine, si tocmai am avut veți completa în natură a matrițelor. Deci, pentru >> set de doua problemă, nu avem nevoie să scrie-l în funcția de secunde? Eu nu cred acest lucru. Cred că totul e aici. Da, așa Cezar Cipher, nu trebuie sa, aceasta nu arata ca, și Vigenere, tu nu fie, așa - și se pare că nu au de fapt niciodată să scrie o functie, nu? Ai sunat pune întotdeauna toate codului în cadrul principal, și mulți programatori face asta. Așa cum am merge mai departe, vom începe introducerea funcții ca o modalitate de pentru a curăța codul, pentru a face mai elegant, în cazul în care aveți sarcini - un fel de ca și atunci când am vorbit despre bucle, cum, uneori, există lucruri pe care doriți să le faci din nou și din nou și din nou, și aveți un fel de mod naiv - sau ceea ce numim adesea "om de paie" soluție, este de a copia și lipi doar peste si peste din nou - poti sa faci acelasi lucru cu funcții în cazul în care copiați și lipiți doar același cod de peste si peste, din nou, dar că bloats codul - se termină în sus codul dvs. de a face foarte mult timp - și, de asemenea, devine un pic confuz, și atunci înseamnă că nu sunt în măsură să-mi placă - dacă vrei vreodată să utilizați acest cod din nou într-un alt program, te, de asemenea, blocat copierea și lipirea-l din nou, astfel unul dintre lucrurile pe care le vom vorbi despre este un fel de design și stil de programele, și așa că atunci când are sens să fel de Pachetul ceva și a pus-o ca o funcție separată, vă încurajăm să faci asta, și că este ceva care, din nou, nu e nici o regulă greu și rapid. Noi foarte rar spunem că trebuie să scrie o funcție numită aceasta, dar e mai mult de unul din acele lucruri pe care le dezvolta doar în timp cum scrii mai multe programe și mai mult. Orice mai multe întrebări? Bine, asa ca hai sa acum Du-te înapoi până la tipul ăsta de aici, așa că eu sunt încă în această secțiune de întrebări. Am vorbit despre toate acestea diferite, ceea ce este o funcție, de ce să scrie funcții, atunci puteți să copiați și să lipiți? Sperăm că v-am convins că a scrie funcții este un lucru bun. Deci, acum să trecem la acest program MySpace, și vom petrece un pic de timp face acest lucru. Deci, să vedem, Am pe cineva pot citit asta pentru mine? Hai să Mikhaila - vă va citi asta pentru noi? Vrei să spui >> înapoi, atunci când MySpace - Pe vremea când MySpace a fost cool. >> "Pe vremea când era MySpace rece, totul a fost furia la tipul de acest gen. Poate că încă mai este? Nu sunt foarte sigur. În orice caz, de a folosi aparatul CS50, CS50 Run, sau CS50 Spatii, scrie un program care solicită utilizatorului un mesaj și scoate apoi mesajul cu prima scrisoare capitalizate, cu toate celelalte litere, în caz alternativ, ca pe un exemplu de ieșire de mai jos, Textul boldfaced în care reprezintă o parte de intrare utilizatorului. Pentru simplitate, se poate presupune că utilizatorul va numai litere mici și spații de intrare. Luați în considerare această problemă o oportunitate de a practica; nu vi se va cere să prezinte acest program. " Minunat, mulțumesc. Deci, ca Mikhaila spus, vom scrie un program care MySpaces codul. Deci, am oricare dintre voi folosesc MySpace? Oricare dintre voi aveți conturi MySpace? Oh, da, da! A fost destul de cool. [Râsete] Știu. Dating mine. Deci, ceea ce încercăm să facem este scrie un program care trece prin și valorifică prima literă și apoi, ulterior, la fiecare literă - sau orice altă scrisoare, ulterior, îmi pare rău. Deci - și puteți vedea în acest exemplu, acest lucru este modul în care vom rula programul, și astfel aceasta este doar spune, "Nu mai avem un program numit a.out. Intrare pe care am de gând să dându-i este de gând să vi se solicite. Nu vom furniza de intrare de pe linia de comandă. " Dacă ați fost în urma tuturor prelegeri iar auzirea despre argumentele de linie de comandă, asta e un fel de unde cei - care sintaxa Funky la principala vine cu argc int, toate lucrurile astea, așa că aici nu suntem folosind ca, nu ne-a face cu nimic din toate astea. Suntem doar să obține acest dactilografiată de către utilizator, și apoi această linie a doua cu capitalizare Funky este ceea ce ne dorim programul nostru de la ieșire. Deci, mai degrabă decât folosind aparatul sau Run, vom folosi spațiile, pentru ca avem Spatii, și, deci, dacă voi ar fi obtine codul tau sa arate ceva de genul asta, așa că am de gând să salveze această revizuire doar ca ai placa cazanului chiar aici care arata ca aceasta, int main (void), nimic în ea. De fapt, ceea ce vom face este că vom șterge doar totul împreună. Ne dorim o tabula rasa, pentru că nu vom începe să scrie cod; mai degrabă, vom încerca scris unele pseudocod care de fapt înseamnă doar că vom scrie ceva ce nu e codul acest tip de descrie ceea ce vrem să facem, cam ca David a făcut în prima zi de curs, sau cred că a fost a doua zi de curs atunci când a făcut toată demo șosete. Voi aminti că - văzând șosete? Iosif era acolo un fel de tastarea în limba engleză? Deci, o să facem același lucru. Asa ca atunci cand am începeți să scrieți pseudocod, Îmi place să încep prin a uita la ceea ce de intrare este de gând să fie. Și-mi face un caz eșantion, așa cum ar fi "thanks for the add!" Și apoi scriu ce vreau, de asemenea, de ieșire să fie, care în acest caz este ceva de genul asta. Și asta îmi dă un fel de un loc bun, cum ar fi, încep să cred despre, "Bine, vreau să iau linia 1 și vreau să-l transforme într-linia 2, " și că un fel de ghid ajută gândirea mea. Acesta este un loc bun pentru a începe. Un alt mod de a gândi, de asemenea, așa cum am cam muta pe și în timp ce face acest lucru în programele proprii, este de a gândiți ce fel de cazuri sunt la muchie la asta? Ce sunt un fel de scenarii ciudate? Care sunt intrări ciudate pe care le-ar putea obține? Și ce ar trebui să arate ca și cum aceste realizări? De exemplu, o ciudat de intrare ar fi aceasta, crearea de absolut nimic, ca ceea ce ar trebui să ne transmite în acest caz? Ceva vrem să ne gândim, de asemenea. Deci, doar ca o întrebare, ceea ce s-ar putea să vrem de ieșire? Dacă nu vom lua nicio intrare, la toate, ceea ce ar trebui să fie programul nostru scoate? Nimic >>. Nimic? Sună grozav. Așa că vrem să ne asigurăm că nu scrii nimic daca nu primim nimic inch Mișto. Bine. Astfel Am de gând să apeleze la un cuplu de oameni ca trecem prin și dau doar din ceea ce fel de algoritm general este și vom începe lucrul fel prin asta împreună. Deci, să vedem. Missy. Cum crezi că ne-am incepe? Ceea ce ar fi un loc bun pentru a începe aici dacă dorim să se transforme, să zicem, linia 1 în linia 2? Poți fel de doar să-mi explicați, în limba engleză, ceea ce te gândești? Nu-ți face griji cod. Lucru >> În primul rând aș face ar fi să un fel de directă utilizatorului sa le spui ce vrei. Ok, deci, să zicem, "Hei, ghidul. Vreau un șir "- minunat. Deci, hai sa scriu asta. Prompt de utilizator pentru un sir. Asta sună ca un început bun. Bine. Să cerem Kelly Ren de data asta. Ceea ce am vrea apoi să facă în continuare? Ce e un fel de lângă noi -? Colecta >> de intrare a acestora și depozitați-l ca o variabilă. Mare. Colecta Deci șir, depozitați-l într-o variabilă. Deci, este ceva special vrem să facem aici? Nu vrem să verificați de intrare a acestora înainte de a -? Da >>. Ce am putea dori pentru a verifica? Ei bine >>, ai spus că nu trebuie să verifice dacă e un număr, nu? Pentru că vom presupune că e cu litere mici? Da. Deci, se dovedește că - da. Deci, getString este garantat pentru a reveni ne un șir. Acesta nu va returna un număr de la noi sau ceva de genul asta. S-ar putea să fie caractere numerice în șir că, deși. Iar cei, putem ignora așa cum am făcut de capitalizare. Dar un șir gol este total bine, așa caz chiar aici pe linia 4 și 5, Bine, în cazul în care nu există nici o intrare, si am pus nimic ca producția noastră. Noi nu trebuie să vă faceți griji despre a face-vă că nu e ceva în șir sau că șirul este de cel puțin 4 caractere; ceva este bine. Deci, acest lucru este în contrast, de exemplu, la fel ca în programele penny pe care le-a scris în cazul în care ați avut să vă asigurați că au fost obtinerea non-negative numere; că a trebuit să vă asigurați că ați fost obtinerea numărul corect de zile într-o lună. Și cum voi face asta? Cum ti-ar face acest test? Ce-care vă solicită să utilizați? >> Do-în timp ce buclele. Do-in timp ce buclele; alte tipuri de bucle, de asemenea, da. Deci, se dovedește că nu avem de a utiliza o buclă în acest caz, atunci când suntem determinat de un șir de caractere, care este un fel de frumos. În regulă, se deplasează pe. Deci, Stella. Poți să ne spui un pic despre ceea ce ar trebui să facem în continuare? Deci, acum avem șir, ne-am luat-o stocată într-o variabilă; ceea ce avem nevoie pentru a face cu șirul? Trebuie să >> - identifică 2 - Da, spun doar în limba engleză, asta e minunat. Identificarea >> a [] fără sunet capitale - sau, cu majuscule. Da, deci ai identifica pe cele care sunt scrise cu majuscule și minuscule. Noi nu putem mari sau mici le până când ne-am identificat care sunt acestea. Deci, vom pune asta aici. Deci, doar gandindu-se acest proces, cum facem această identificare? Știi, Dan? Un fel de ceea ce am - ceea ce ne-ar instrument trebuie să folosim din setul de instrumente noastre? Aș >> pus-o în cumva în matrice sau ca un fiecare linie este propria sa casetă mică, și majuscule apoi de acolo sau nu. Ok, deci un instrument putem folosi este o matrice. Ce trebuie să privim puțin în șir, deși, să ne dăm seama - a trebuit sa se uite la caracterele. >> Deci ai să te uiți la lungimea șirului? Da, astfel o parte din care este obtinerea lungimea șirului. Doar din curiozitate, ce vom folosi pentru a obține lungimea unui șir? Strlen >>? Da, strlen, noi numim acest "strlen" Toate aceste funcții șir, deci strlen este o funcție, și e foarte la îndemână, pentru că putem folosi pentru a spune doar, Hei, strlen: Iată un șir de caractere, spune-mi cat timp este. În prelegerea de astăzi, David a vorbit foarte mult despre modul în care este pusă în aplicare strlen, ceea ce se întâmplă de fapt în spatele scenei. Dar aceasta este una dintre cele foarte la îndemână super-. Există altele care sunt, de asemenea, în biblioteca șir, cum ar fi strcmp, care este scris "strcmp", care este folosit pentru a compara șirurile reciproc. Altele va folosi ca strstr, care este bun pentru a găsi șiruri sub și așa mai departe. Pentru cea mai mare parte, acestea toate încep cu str. si apoi du-te pentru a fi altceva. Motivul pentru care nu scrie ca de fapt le șir și așa mai departe se datorează faptului că din nou în ca primele zile ale C, atunci când oamenii au fost scris în primul rând că, au avut limitări privind numărul de caractere pe care le-ar putea folosi pentru numele de funcții și nume de variabile, deci totul este ca super-condensat. Dar oricând veți vedea ceva care începe cu str., ca de obicei, înseamnă acest lucru are ceva de-a face cu un șir. Bine, deci ai pentru a obține lungimea șirului, si apoi, ce facem cu personajele? Știi, Sam? >> Nu am nici o idee, am încercat să-mi dau seama. Eu chiar nu știu - As vrea sa o modalitate de a - Adică, mi-ar gândesc că poate am putea face ceva cu cote și uniformizează, dar nu știu de nici o funcție de genul asta. Da. Dar asta >> - nu ar funcționa în mod necesar, pentru că atunci v-ar lua spațiile să fie - va trebui să aibă spațiu pentru a obține sfaturi cu privire la modul în care - Bine. >> Nu stiu - Sunt un fel de pierdere în acest moment. Da - Nu, nu, nu, acestea sunt puncte bune. Deci, ceea ce trebuie să facem este, ca Sam a spus, avem nevoie pentru a urmări care sunt litere literele impare, și care sunt cele literele chiar. Dar vrem să ne asigurăm că nu suntem doar în căutarea la ciudat și chiar Indicii în șir, ci mai degrabă se uită la literele pare și impare în șir, așa că trebuie să avem cam această distincție între Scrisori - ca ceea ce este de fapt A, B, C, D, sau așa mai departe, si ce lucruri nu sunt litere, dar încă în șir noastră. De exemplu aici, ca acest semn de exclamare nu este o scrisoare, dar este încă parte din șirul nostru, e încă un char. De asemenea, toate aceste spatii - aceasta nu are sens să valorifice un spațiu, nu? Așa că vrem să ne asigurăm că sări într-un fel pe cei în timp ce înregistrează încă cote și echilibreaza. Deci, un fel de set de instrumente de programare în nostru până în prezent, dacă vreți, avem un număr de instrumente diferite, pe care le-am vorbit despre. Deci unul, de exemplu, sunt variabile, ca și cum am vorbit despre aici. Un alt instrument care le-am vorbit despre funcții sunt. Deci, am vorbit despre variabile în pseudocod nostru aici ca ceea ce am de gând să folosească pentru a stoca șirul nostru. Am vorbit despre funcții pentru a obține lungimea unui șir, cum ar fi strlen. Am vorbit despre altceva, și am vorbit despre asta pentru o mult mai devreme în secțiunea azi: bucle. Ce părere aveți despre utilizarea o buclă în acest program? Jared, ce crezi? Ne-ar folosi o buclă în acest program? >> Probabil că nu, nu, pentru că nu trebuie să treacă printr-o mai mult decât o dată. Bine, nu trebuie să treacă prin ceea ce de mai multe ori? >> Întregul șir. Corect, așa că nu trebuie să treacă prin întregul șir dată. Îmi pare rău că a făcut absolut nici un sens! Nu trebuie să treacă prin întregul șir de mai multe ori. Bine. Ce părere ai? >> Cred că e mai bine să le folosească astfel încât să putem face ca valorifica în timp ce locația este [neauzit] număr. Mare, și de a valorifica și ce dacă? Ok, deci suntem spunând că ar trebui să folosim o buclă pentru că vrem să o literă în majusculă, deși nu e un număr. Deci - Îmi pare rău, ai vrut să adăugați? >> Voiam să spun că modul în care tratează șirul și [neauzit] separată [neauzit] cu privire la personajele? Da. >> Si apoi putem aloca numere - sau pe baza locației de litere din șirul? Da. Și >> stabili dacă aceasta e ciudat sau chiar și pentru a valorifica scrisoarea în sine în timp ce locația scrisorii este [neauzit] - Îmi pare rău. Mare. Deci, doar o recapitulare. Poți să-mi amintesc de numele tău din nou - Îmi pare rău. Charlotte >>. Charlotte, bine. Deci, ceea ce Charlotte se spune, care este total dreapta - Doamne, asta îi place să auto liniuță pe mine - este că, dacă ne uităm la un șir de caractere cum ar fi aceasta în partea de sus - "Thanks for the add" - ca o secvență de caractere în cazul în care este în poziția 0, h este la poziția 1. A este la 2, apoi am luat 3, 4, 5; spatiul este în poziția 6. Întrucât - care e poziția lui f? 7! O? 8. R? 9. Și apoi ne-am luat 10, iar apoi eu nu pot scrie cu adevărat fără ea obtinerea cam murdar pe ecran. Dar acest lucru este, de fapt modul în care putem vorbi despre șiruri în memorie. Este un șir de caractere este o secvență de caractere, și atunci când ne referim la un caracter individual într-un șir, de multe ori am face acest lucru prin trimitere la poziția pe care personajul lui în cadrul șir, probabil același fel în care vorbim despre septembrie fiind a noua lună a anului sau luni fiind prima zi a săptămânii. Deci, aceasta ne oferă o modalitate de a dau seama care sunt cele ciudat față de chiar pentru că puteți vedea aici, dacă îl potrivesc cu acest T, puteți vedea că toate cele capitalizate sunt la chiar poziții, cel puțin pentru primul cuvânt, și apoi lucrurile sa aruncat de pe o dată ne-am lovit acel spațiu, pentru că nu se iau în considerare acest spațiu ca o scrisoare, așa că e ca și cum am început și a mers 0, 1, 2, 3, 4, 5, spațiu, 6, 7, 8, spațiu, 9, și apoi 10, 11, 12, și așa mai departe. Rece, așa că cu siguranță va dori să folosească un fel de buclă pentru a trece peste fiecare dintre personajele la rândul său. Deci, la acest punct, ne vom întoarce la vechiul nostru pseudocod aici. Ca parte a acestei identificare a celor care sunt scrise cu majuscule și cele care sunt mici, vom dori să facă acest lucru într-un fel de buclă. Buclă, de colon. Ce fel de buclă, din tipurile de bucle pe care le avem, pare a fi unul bun pentru a utiliza in acest caz? Mă gândeam >> pentru bucla. Și de ce te gândești la bucla? Deoarece >> începe de la zero, iar apoi când vom ajunge la lungimea șirului, și apoi la fiecare iteratie poți [inaudibil], de asemenea? Da, exact. Deci, din cele opțiuni diferite de bucle, avem pentru bucle, bucle timp, și de a face în timp ce-bucle. În cazul în care un pentru buclă este deosebit de util este atunci când doriți să știți un fel de unde ești puțin în buclă, de câte ori a fost executata bucla până în prezent. Care este exact ceea ce vrem să știm în această situație, Kelly a spus ca, bazează off de comentariul anterior lui Charlotte că vrem să știm poziția a caracterului în cadrul șir, și pentru bucla ne va da doar că, pentru că, dacă vom începe un fel de a privi înapoi la șirul nostru, în cazul în care vom începe bucla nostru pentru la 0, și vom merge până prin lungimea întregul șir, atunci putem asocia litera T cu 0 în nostru de buclă, H scrisoare cu 1 în nostru de buclă, și așa mai departe, merge tot drumul până la sfârșitul șir. Așa că hai să începem această codificare doar un pic Doar așa voi obține o simt pentru ceea ce acest lucru arata ca. Am de gând să salveze acest lucru, deci avem codul nostru pseudo aici, și am de gând să ștergeți totul. Deci, am o tabula rasa. Voi începe prin a scrie int main (void) { Voi pune 0 în retur si apoi.} Așa că, de obicei, atunci când am început să programul, asta este ceea ce am început. Voi economisi, astfel încât voi avea. Deci, unul din primele lucruri pe care am vorbit despre a fost obtinerea de intrare de la utilizator și stocarea într-un șir. Cum ajungem de intrare de la un utilizator? GetString >>. GetString, în regulă. Deci, dacă tip I getString () și un punct și virgulă. Să încercați să rulați acest lucru; vor alerga această, în primul rând? Și de ce nu va rula acest? >> Trebuie sa declare variabila. Am să declare o variabilă. Bine. Deci, cum fac asta? Te superi scris ceva, împărtășind-o? Și apoi putem trage în sus. Să vedem, Dan, dreapta, bine. Sau Daniel. Copiați că, în, intrare string = getString (). Minunat. Aceasta va rula? Hai să încercăm. Hit termen, codul sursă încărcarea, cladire, a apărut o eroare. Bine. Deci, ce se întâmplă aici? Utilizarea "string" identificator nedeclarat. >> Trebuie să includă bibliotecile? Da, așa că Dan spune că avem de a include biblioteci. Este că ceea ce ați fost de gând să spun, Stella? Minunat. Asta e minunat, asa Stella, poți copiați acest cod de spațiu lui Daniel? Dacă faceți clic pe Daniel Roland Ki, copiați, si apoi va voi pune linia includ în, și apoi salvați-l afară? Lasă-mă să știu când ești gata. Deci, această sintaxă se numără, de asemenea, este un fel de funky,; nu e ca și cum faptul că tag-ul hash, și nu există includ, și apoi sunt aceste paranteze unghiulare. Îți amintești cum functioneaza acest, sau ar trebui să-l pun pe acest cod chiar aici? >> Sunt bine. Bine. Am tipărit >> - Eu nu am fost sigur care biblioteca, totuși. Oh, ok - Da, așa că e biblioteca CS50. >> Oh, mi-am pus biblioteca stdio. Oh, am înțeles - Da, nu, asta - astfel se dovedește că șirul este de fapt ceva ce este special la CS50. Nu există, de fapt, nu este un tip de șir adevărat deoarece chiar aici, sir este în poziția de tip, - suntem de declarare a unei variabile de intrare numit de tipul String - și punem înăuntru de intrare valoarea care devine returnate la noi: ieșirea din această apelare de funcție getString. Vă pot spune acest lucru este un apel de funcție, pentru că are paranteze, la fel ca printf face, la fel ca strlen face. Dar șirul nu este de fapt un tip de reală în limbajul C. Ne-am făcut într-un tip, și vom lua mai multe despre ceea ce este de fapt în C, pentru că nu există o modalitate de a lucra cu siruri de caractere; am făcut ceva pentru a face să arate un pic mai frumos. Deci, aici vom merge. Aici este codul lui Stella. Are # include . Alte persoane vor numi asta ca un hash includ, uneori, sau un obiect ascuțit includ. Acum putem porni, executați-l, și am obține încă o eroare. Să vedem ce se întâmplă. "Variabila Neutilizat" intrare "." Bine, pentru ca e cool, e cool. Adică, nu e foarte misto, pentru ca ne apropiem o eroare și nu se execută, dar ceea ce acest lucru este să spun este că nu ne-am folosit variabila noastră, ceea ce face sens. Nu am incercat sa fac nimic cu ea. Acesta este un mod care Zăngănit încearcă să ne ajute să ne asigurăm că nu suntem doar folosind variabile și apoi din neatentie numindu-le ceva mai târziu, în codul nostru, ajutându-ne să evite erorile în acest fel. În regulă, deci avem de intrare de la utilizator, l-am depozitat într-o variabilă. Următorul pas a fost să atunci începe căutarea de la toate caracterele din șirul Identificarea și cele care urmează să fie majuscule și care sunt cele de a fi cu litere mici. Și cum ar fi Kelly și Charlotte adus, facem acest lucru, folosind un pentru buclă. Deci, nu amintește cineva sintaxa unei bucle de și ar dori să ia o lovitură de cuțit la doar scris prima linie a buclei pentru, doar pentru biți? Kelly, vrei să încerci? Da >>, deci va trebui să inițializați prima, așa că am pus i = 0, si apoi am facut i > Da, am stricat un pic, dar da. Bine, hai să-l trage în sus. Minunat. Dar apoi m-am >> nu știu dacă ați avut că - Da, bine. Deci, aici e ceea ce Kelly are: să ne uităm la ea repede. Deci ea este inclus biblioteca CS50 în partea de sus. Ea este inclus standard de bibliotecă IO în partea de sus, și IO standard are functii ca printf, așa că, dacă vrei vreodată să utilizați printf, ai nevoie de acea linie. Și apoi, ea a inclus bibliotecă șir, pe care le vom avea nevoie de, deoarece biblioteca șirul are funcția strlen, pe care vom ajunge la doar un pic. Deci, dacă ne uităm la ceea ce Kelly a făcut aici, ne puteți plimba prin ce-ai făcut? Da >>, asa - vreau să spun, m-am erorile, așa - Da, nu, este - Așa că am vrut >> pentru a apela șir pe care am primit doar "string". Am vrut să imprime șirul si apoi am - Am vrut să-mi placă seta ca șir ca o serie de fiecare caracter fiind diferit [inaudibil], nu? Și apoi am vrut să înceapă de la poziția 0 și apoi la fiecare 2 spatii, Am fost de gând să valorifice, așa că am descris-o ca 23, pentru că mă uitam la masa ASCII. Deci, asta e ceea ce mă gândeam - Știu că nu e bine. Am prins-o, astfel încât acesta este un start bun. Cred că o mulțime de cadru este în loc aici. Să mergem prin fel de linie cu linie și vezi ce se întâmplă. Deci, modul în care am dori să fac acest lucru este doar începutul, prin compilarea codului și permițându-mi spui ca compilatorul ce e în neregulă cu codul meu, deoarece compilatorul este foarte bun la ceea ce vă spun este în neregulă cu codul. Deci, dacă am juca, construirea, și nu construim. Se spune că a fost o eroare, așa că, dacă vom defila în jos și uită-te la prima eroare, a spus - ne derulați înapoi până la partea de sus, putem vedea, există 5 erori generate aici, la partea de jos. Hopa, care este într-adevăr tăiat. Cred că e nu doar mergi la a lua orice mai bine. Aici vom merge. Deci, există 5 erori totale generate. Aici am putea vedea doar primele 2, așa că am putea muta asta un pic și apoi un fel de pana de parcurgere. Aceasta este comanda care a fost executați pentru a compila codul, si apoi prima eroare a fost în file.c aici: "Așteptat să identifice sau" ("", si a fost pe această linie în cazul în care am spus string = getString (). Puteti vedea chiar aici că a fost pe linia 8 din file.c, și apoi cred că acest lucru este personaj 12 - asta e eroarea. Deci, ce se întâmplă greșit pe linia 8 - Kelly? >> Trebuie doar să-l sun, ca, o scrisoare sau ceva, cum ar fi sirul s sau ceva de genul? Da, așa se pare că aceste denumiri speciale de tip, astfel șir, int, char scurt,, acestea sunt toate cuvintele cheie speciale, și nu puteți folosi de fapt le ca nume de variabile voastre, deoarece compilatorul se uită la asta și spune, "Oh, știu că e un tip," astfel încât să nu poate avea de fapt, o variabilă șir numit string, ca și cum am încerca să facem aici, acest lucru nu va funcționa. Dar, în loc, o putem numi ceva de genul e sau ST sau Str. De asemenea, nu a putut numi int. Nu putem avea un șir numit int. Nu putem avea un șir numit char; nici unul dintre cei care vor lucra. Deci, vom numi doar e pentru moment. Minunat. Deci, ce urmează se întâmplă în această linie? String - această linie arata destul de bine? Să dau un alt încerca, hai să-l rulați. Ok, deci avem în continuare erori. De data aceasta, suntem în jos la 4 erori. Deci avem una dintre ele. Să mergem sus. "Tip nume neașteptat" șir ": expresie așteptat," da? >> Da, asta e pentru că am încercat să numească șir. Da, așa se pare ca acum avem, de asemenea, pentru a merge fix toate aceste trimiteri la șir. Puteți vedea acolo este o trimitere la șir aici, unul aici, unul aici, astfel încât să putem muta toate acestea pentru a s.. Mare. Bine, executați-l din nou. Clădire - un alt eroare a avut loc. Bine, acum suntem în jos pentru a o eroare, astfel int i = e și apoi între paranteze drepte. Deci, pot să vă spun ne un pic despre ceea ce făceai aici, Kelly? Da >>. Acesta a fost pe linia 10. Eu >> Nu știu dacă avem nevoie de tot, dar cred că am fost încercarea de a - Voi salva astfel încât să puteți urmări de-a lungul. >> Cred că am fost încearcă să-l spun pentru a începe de la poziția 0 de la începutul mea pentru buclă, deci cred că poate spune a fost inutilă. Deci, doar pentru a recapitula, ai spune că acest lucru - ai incercat pentru a începe acest lucru la poziția 0 și a obține acest lucru - Da, deci cred ca mai devreme, de asemenea, atunci când s-au mers pe jos prin codul, ai vorbit despre modul în care a vrut să trateze șir ca o matrice astfel încât să putem accesa fiecare caracter individual. Cred ca matrice Dan menționate, de asemenea, încercarea de a converti siruri de caractere în matrice. Se pare că astfel de sub capotă, un șir este, de fapt stocată ca o matrice deja, și puteți accesa ca pe o matrice; nu exista nici o conversie pe care le au de a face. Un șir isn't - așa - un string nu este cu adevărat o matrice, dar îl puteți accesa ca atare, deoarece toate caracterele sunt stocate chiar lângă reciproc în memorie, așa că, dacă doriți să obțineți primul caracter din șir, e la fel ca obtinerea întreg prima într-o matrice întreg. Deci, de multe ori am - Vom se referă la 2 ca oh, ca fiind un șir, ca fiind o matrice, chiar dacă într-adevăr - Sunt pe lucruri foarte diferite, dar le puteți trata foarte mult la fel. Deci, se dovedește că această linie, de fapt - nu avem nevoie de a face orice conversie, și, de fapt, acest fapt nu este o expresie validă, care este ceea ce compilator nostru ne spune. Se spune, "Hei, așteaptă o expresie, și ceea ce am aici este ceva care nu e o expresie. " Pentru a declara o matrice, tot ce trebuie să faci este ceva de genul asta cu un punct și virgulă, și apoi să vă spun matrice cât timp doriți să fie, cum ar fi 5, astfel încât acest linia 10 va declara o matrice numita i cu 5 numere întregi în ea. Aceasta este o parte, acest lucru nu este necesar pentru codul, dar acest lucru este - aceasta este un fel de ceea ce arata ca declarației. Cum ar fi să nu >> ai folosi char i [strlen (s)]? Char i [strlen (s)]? Char >> I, iar apoi în interiorul paranteze, strlen (s). Da, așa că am putea - am putea face acest lucru, iar acest lucru ar declara - ceea ce ar face asta? >> Cred că ar declara o matrice de, cum ar fi - de - oh, nu aveți nevoie de i - oh, Da, cu siguranta nu au nevoie de i.. Ai declara un tablou de caractere de s lungime. Și deci ce lui Sam spune este că această linie 10 - lasă-mă să pun niște spațiu între ea și restul astfel încât să putem izola - această linie 10 ar declara o matrice de caractere, strlen (s) în valoare de ele, dar noi de fapt avem nevoie I, și motivul pentru care am nevoie de i este că avem nevoie pentru a da un nume matrice; în caz contrar, nu ne-ar trebui o modalitate de a face referire la matrice mai târziu, în cod. Deci, acest drept aici este numele matrice și în interiorul este lungimea. Acest lucru ne va da o matrice, dar asta este - din nou, aceasta este o declarație. Nu este o misiune, nu este o initializare. Dacă ne pronunțăm această matrice ca aceasta, nu e de fapt nimic în conținutul matrice. E doar gunoaie - tot ce este acolo. Și așa cum am spus, noi de fapt, nici nu trebuie să facă această conversie, pentru că putem trata deja șir e ca un tablou. Știu că mai avem un pic cam lung la timp, dar vreau să doar foarte rapid pentru a ajunge la această buclă și vă arată cum să accesați caracterele individuale din matrice, pentru că asta e cheia pentru misiune nostru. Și apoi vom lăsa să pleci de acolo. Deci, aici, avem o buclă de care arata aproape bine. Ceea ce nu e destul de aproape acolo? What's - ceea ce nu e chiar corect despre acest lucru pentru bucla? Nu >> acolade? Nu există acolade, pentru unul. Vrei să asigurați-vă că avem corpul buclei cu acolade. Hopa, nu bretele pătrat! Și ceea ce este urmatorul lucru de care avem nevoie pentru a face cu această buclă? Dacă am încerca și rulați-l, whats această eroare pe care le primesc? I a lua toate aceste erori - Trebuie să am inițializa. Mare. Deci, acest lucru va fi o buclă - acest lucru nu este destul de acolo, dar este din ce în ce foarte aproape. Acest cod ne poate rula acum, construi, o eroare inca apare. De ce este inca plange, spunând expresie este neutilizat, și asta pentru că această linie nu face nimic. Noi nu l-am păstrează nicăieri, nu am salva rezultatul. În cazul în care ar trebui să fim salva acest rezultat? >> E sau i? Exact, iar acest lucru Funky sintaxă, acest e cu paranteze drepte înseamnă accesa caracterul i-lea al lui. Asta o să fie ceva care este foarte important pentru misiune. Din păcate, vom trebui să ne oprim aici, astfel încât partea de Sebastian poate veni în, dar eu sunt fericit sa stau dupa afară și va lua orice întrebări. Deci, vă mulțumesc pentru că ați venit voi. Acest lucru ar trebui să încărcați acum, să construiască, fugi. Putem introduce un șir cum ar fi "hello" și se imprimă "QOX". [Râsete] Deci, nu destul de acolo, dar se deplasează, obtinerea față de aceste bucle! Mulțumesc că ai venit, iar eu voi fi în afara.