SPEAKER 1: Nu labi. Laipni lūdzam atpakaļ. Tas ir CS50 Divas nedēļas, un mēs esam līdz šim bijis, izmantojot funkcijas, bet lielākoties ņem tos par pašsaprotamu. Mēs esam izmantojuši printf kura blakusparādība drukāšanas lietas uz ekrāna. Mēs esam izmantojuši get-int, get peldēt. Bet ko tad, ja jūs tiešām vēlaties, lai izveidotu savas funkcijas, jo daži no Jūs, iespējams, jau ir sākuši darīt Problēma iestatīt vienu, lai gan nav obligāti nepieciešama? Nu, iesim uz priekšu un pārskatīt ka problēma, vienkārši lūdzot lietotājam, savu vārdu un poligrāfijas kaut ko par ekrāns, bet mēģināt faktors dažus no vienveidības, ka mēs esam redzams mūsu kodu līdz šim. Tātad, ar to es domāju sekojošo. Es iešu uz priekšu un izveidot jauna programma, tikai zvanīt tas hello.c kā parasti. Es iešu uz priekšu un dot sevi ietver standarta io.h augšpusē. Es esmu gatavojas arī sniegt sevi preemptively CS50 bibliotēka, lai Man nav get kliedza uz sastādītājs. Un tagad es iešu uz priekšu un atzīt int, galvenais, par spēkā neesošu. Un tad šeit, tas ir, ja es gribu sākt izmantot ārpakalpojumus funkcionalitāti dažas citas funkcijas, ka es pats esmu gatavojas rakstīt, bet tas nav Pašlaik pastāv. Piemēram, pieņemsim, ka es gribēju uzrakstīt funkciju, kas ļauj man, lai izdrukāt Sveiki, komats, un Tad daži lietotāja vārdu. Nevis turpināt to darīt printf sveiki,% s, vai tas nebūtu jauki, ja tur bija tikai sauc funkciju nevis printf bet atšifrējums? Tātad, citiem vārdiem sakot, es gribu, lai varētu Uzrakstiet programmu, kas dara nedaudz kaut kas līdzīgs šim. Pirmkārt, es esmu gatavojas teikt printf savu nosaukums, tādējādi pamudinot lietotājam iedodiet man viņa vai viņas vārdu, un tad es esmu gatavojas izmantot pazīstamus String s, lai atzīt virkni. Dodiet man mainīgo tipa virknes, to sauc s, un uzglabāt ka rezultātā izsaucēja saņemt virkni. Bet tagad nedēļām agrāk, es būtu nedaudz tediously darīts sveiki,% s / n. Un citiem vārdiem sakot, mēs esam redzējuši šo piemērs ķekars reizes, un tas ir triviāls piemērs, jo tur ir tikai viens līnija kodu, lai tas tiešām nav liels galā, lai saglabātu rakstīt vēlreiz. Bet pieņemsim, ka šī līnija koda faktiski ir kļuvušas par apgrūtinājumu, un tas nav viena līnija kods, bet tas ir 10 rindas kods pāris nedēļas no šī brīža, un jūs vienkārši noguris kopēšanas un ielīmēšanas vai pārrakstīšana šo pašu kodu. Vai tas nebūtu jauki, nevis darīt printf sveiki,% s un tā tālāk, vai tas nebūtu jauki, ja tur bija tikai funkciju sauc atšifrējums, ka aizņem arguments - citiem vārdiem sakot, ir nepieciešams ieguldījums - un pēc tam semikolu. Tātad, kas darbojas, ne tas ir jauki, ja tas pastāv? Tad es nebūtu jāuztraucas par kas printf ir, ko% s un visi no šie sarežģījumi, kas ir nav tik interesanti. Tie ir noderīgi. Tātad atšifrējums, diemžēl, nebija izgudroja dažas 40 plus gadus atpakaļ. Neviens doma rakstīt to. Bet tas ir skaistums, kam programmēšanas valoda, tāpat kā Scratch jūs varat definēt pielāgotus blokus, lai C, un lielākā daļa jebkuru valodu, jūs varat definēt savu funkcionalitāti, var Jums noteikt savas funkcijas. Tātad, pat ja mēs maģistrālo automātiski par brīvu, mēs varam paziņot mūsu pašu funkciju. Tāpēc es esmu gatavojas veikt dažas vietas uz augšu šeit up top, un es esmu gatavojas pasludināt manu pašu funkciju, kas ir skatīsies mazliet dīvaini sākumā, bet mēs nāksim atpakaļ uz šo pirms ilgi. Es esmu gatavojas teikt par spēkā neesošu, tādējādi norādot šo funkciju nav kaut ko, ir blakus efekts, bet tas neatgriežas kaut ko ar mani pašā veidā, ka iegūt int vai saņemt virkni pati. Un es esmu gatavojas sniegt šo funkciju nosaukt par drukas vārdu, un es esmu gatavojas norāda, ka šis puisis ir gatavojas veikt stīgu, un es esmu dodas uz zvanu, ka virkne vārdu. Es varētu saukt kaut ko es gribu, bet es vēlas mans kods ir self-dokumentēšanai. Citiem vārdiem sakot, ja viens no jums bija atvērt šo failu, un lasīt to, jūs varētu veida secināt no nosaukuma, kas ieeja kādu lomu tas ir paredzēts, lai spēlētu. Un tagad tālāk, ka es esmu gatavojas, lai atvērtu cirtaini lencēm un slēgtas cirtaini lencēm, un tāpēc paziņojums Esmu sekoja pats zīmējums uz līnijām, pa septiņiem, četri Esmu bijis pēc labu nedēļu plus Tagad starp, teiksim, līnijām deviņiem un 14, kas veido galveno. Citiem vārdiem sakot, izdrukāt nosaukumu ir cita funkcija. Tagad, kompilators nav gatavojas zināt , lai izsauktu šo lietu automātiski jo es burtiski tikko izgudroja to, bet tas zinās vēl zvanīt galvenā automātiski, un pēc tam, protams, jo līnija 13, es aicinu savu funkciju. Un tāpēc es esmu paziņojis, ka funkcija līdzi pirms galvenajām četrām līniju, tas ir gatavojas mācīt kompilators ko citēju, likt pēdiņas beigās, "atšifrējums" nozīmē un kas tai būtu jādara. Tāpēc es esmu veida dodot tai jaunu pasūtījuma bloķēt kontekstā, teiksim, Scratch. Tātad šeit, es varu nodot, ka ļoti bieži vai regulāru modeli kodu, es glabāt rakstiski klasē, printf % S sveiki,% s / n ", - Ko es gribu, lai šeit? S? Tāpēc es gribu, lai vārdu šajā kontekstā. Tātad paziņojums mazliet auglīgs šeit. Tā kā es esmu deklarējot savu funkciju un man ir nedaudz patvaļīgi sauc tā atšifrējums, un tāpēc, ka es esmu norādīts iekavās, ka tas funkcija aizņem vienu argumentu, tips kas ir virkne - tāpēc tas ir vārds vai frāze, vai kaut kas tamlīdzīgs - un Es esmu aicinot šis arguments nosaukumu, kas ir vienīgais mainīgais, kas ir kas jomu, tā sakot, ir vārds. S pastāv tikai starp divām ko cirtaini bikšturi, protams? Nu tiešām, tāpat kā 10 līnijas cauri 14, tāpēc tāpat kā pirmdien, nevar izmantot S, bet to, ko es varu darīt, ir nodot S uz drukas nosaukumu. Drukāt nosaukums tikai tā notiek, lai arī tā alias, sinonīmu, segvārdu, nosaucot to nosaukumu, un tagad izmantojot to šajā rindā. Tātad, tagad ļaujiet man saglabāt to, attālinātu. Ļaujiet man iet uz priekšu un veikt sveiki. Izskatās labi. Nav izspļaut kļūdas. . / Sveiki Enter. Kas ir mans vārds? Deivids. Un sveiki Dāvids. Tāpēc ne viss, kas aizraujošs, bet tikai domāju, ka tagad. Jums tagad ir, ka pati sastāvdaļa kā mēs to darījām nulles līdz padarīt mūsu pašu funkciju. Bet tur ir no gotcha bit. Pieņemsim, ka man nav īsti domājis tas cauri, un es tiešām bez nedomājot par to rakstīja kas darbojas uz leju šeit. Jūtas pilnīgi pamatota. Jo nulles nepastāv jēdziens no atrašanās vietas jūsu skriptus. Jūs varētu likt vienu uz augšu šeit, viena šeit, viens šeit, un tas varētu sākt izskatīties mazliet netīrs, ja jums nav noteikt to, glīti, bet tas nav vienalga, kur fiziski skripti bija uz ekrāna. Diemžēl C - un tas ir pretēji valodas, piemēram, Java un Python un citiem, ka jūs varētu būt pazīstami ar - diemžēl C, lai dara nozīmes, jo skatīties, kas ir notiks tagad. Noklusējuma funkcija, kas notiek izpildīt, protams, galvenais. Galvenais gatavojas aicināt drukas vārdu līnija astoņi, bet diemžēl, kompilators nav pat zināt, ka drukas nosaukumu pastāv, līdz tas kļūst 11 līnijas, kas diemžēl ir būs pārāk vēlu. Tātad, pieņemsim do veikt sveiki. Un tagad nopelt, divas kļūdas radīts. Tātad, tagad ļaujiet man ritiniet līdz ļoti pirmkārt, mums vienmēr vajadzētu darīt, un ievēroju, ka tas kliedza uz mani, "Netieši deklarācija funkcijas print vārdu. " Tāpēc mēs esam redzējuši šo ziņojumu iepriekš, netieši deklarācija funkcijas. Kad mēs esam redzējuši šāda veida kļūda? Kad es neietvēra bibliotēka. Ja es aizmirsu cs50.h, un es varētu saņemt kliedza, lai iegūtu virkni vai iegūt int. Bet šajā gadījumā, šī funkcija print vārds nav bibliotēkā, vai ne? Tas ir burtiski šajā failā, tāpēc kas ir patiešām problēma? Nu diemžēl C, tas jūs aizvedīs tik neticami burtiski, ka, ja jūs gribu funkciju sauc atšifrējums, lai pastāv, jums ir vai nu jāīsteno , kas darbojas pie ļoti top jūsu kodu, tāpēc, ka tas ir pieejams, lai samazinātu funkcijas, bet atklāti sakot, tas kļūst apliets ļoti ātri. Personīgi, man patīk liekot galveno vispirms jo tad tas ir ļoti skaidrs, ko šis Programma dara pēc pirmā acu uzmetiena. Un plus, jūs varat nokļūt dīvaini stūrī gadījumi, kur, ja x vēlas, lai izsauktu y bet y varētu aicināt x, jūs vienkārši fiziski faktiski nevar likt vienā virs otra. Bet izrādās C, mēs varam atrisināt ļoti vienkārši. Es esmu gatavojas nodot mazliet vietas šeit, un es esmu tikai gatavojas preemptively, kaut arī nedaudz lieki, gatavojas mācīt kompilators, kas pastāv funkcija sauc par drukas vārdu, tas aizņem virkni, un es esmu dodas uz zvanu tā nosaukums semikolu. Tātad šis tagad četru līniju, ko mēs neesmu redzējis, ir deklarācija par funkciju drukas vārdu, bet tas ir tikai sola, ka šī funkcija būs beidzot definēt, galu galā jāīsteno. Tas tagad es varu atstāt tikai tāpēc, ka Tagad tas ir definīcija, īstenošanu, sava veida pēdējo jūdzi par šīs direktīvas īstenošanu konkrēto funkciju. Tātad, godīgi sakot, tas ir muļķīgi, tas ir kaitinošas, bet tas ir ceļš C ir, un tas ir jo tas aizņem jums ļoti burtiski un, kā dators atklāti būtu, tikai tieši to, ko jums pateikt to darīt, un tā, ka pasūtījumi ir svarīgi. Tātad, paturiet to prātā un atkal sākt paziņojums atkārtošanos modeļiem. Izredzes ir jums būs, ja jums nav jau sāk saskarties ziņas piemēram, tas, ka pēc pirmā acu uzmetiena šķiet, pilnīgi mistisks, bet, ja jūs sākat meklēt šos atslēgas vārdus, piemēram, "Netieši deklarācija," pieminēts funkcija šajā gadījumā - un godīgi sakot, jūs dažreiz pat saņemt nedaudz zaļa burkānu simbols, kas stāsta jums, kur jautājums droši vien ir - Jūs varat sākt strādāt savu ceļu caur vēl neredzētas kļūdu ziņojumi. Visus jautājumus, rakstot savu funkciju šādā veidā? Darīsim kaut ko, kas ir nedaudz vairāk pārliecinoša. Nevis vienkārši darīt kaut ko, kas ir blakusparādība drukāšanu, ļaujiet man iet priekšu un saglabāt jauno failu, un mēs nosaukt šo positive.c, pat ja tas ir būs nedaudz atšķirīgs pret pēdējā laikā. Un šoreiz, es vēlos vēlreiz īstenot pēdējā reize ir positive.C piemērs, kas ir spēkā lietotājiem, lai sniegtu man pozitīvs skaitlis. Bet man nācās izmantot iegūtu int pēdējo reizi. Vai nav tā bijis jauki, ja tur bija funkciju sauc saņemt pozitīvu int ka es varētu uzticēt šo gabals funkcionalitāti? Tātad atšķirība šeit ir, mēs ņemšu īstenot saņemt pozitīvu int, bet atšķirībā atšifrējums, kas bija blakus efekts - tas neatgriezās kaut ko, man patīk numurs vai string - saņemt pozitīvu int ir, protams, dodas uz atgriešanās, cerams, pozitīvu int. Tātad, pieņemsim to izdarītu. Iekļaut cs50.h, Iekļaut standarta io.h. Int main spēkā neesošu. Un tagad šeit, es esmu gatavojas iet uz priekšu un teiksim int, sauc to n, ir vienāds saņemt pozitīvu int. Un tāpat kā iegūt int jau eksistē jo darbinieki uzrakstīju to, es esmu gatavojas par tādu brīdi, ka iegūt pozitīva int pastāv, un tagad es esmu gatavojas iet uz priekšu un saka printf, paldies par% i / n ", n. Tāpēc tagad, ja es apkopo šo programmu, kas notiks manā terminālī logs apakšā ekrāna? Es esmu gatavojas, lai, iespējams, iegūtu, ka pati kļūda kā iepriekš. Tātad, pieņemsim mēģināt šo. Padarīt pozitīvi. Un atkal, netieši deklarācija par funkciju, saņemt pozitīvu int. Tātad, mēs varam atrisināt šo pāris veidos. Es esmu gatavojas saglabāt vienkāršu un vienkārši manu deklarāciju šeit un saņemt pozitīva int. Man vajag tā saukto parakstu. Paraksts vienkārši atsaucas uz estētikas Pirmajā rindā programmas. Tātad, ko vajadzētu saņemt pozitīvu int atgriešanās? Tātad int. Es domāju ideāli, tas atgriezīsies kaut kā pozitīva int, bet nepastāv. Mēs esam nav redzējis, ka starp mūsu datiem veidiem, tāpēc mums ir tikt galā ar Tas, ka mums ir ļoti maz datu tipi strādāt. Bet mēs varam atgriezties int un tikai ticu, ka tas ir pozitīvs. Tas būs saukt saņemt pozitīvu int. Un tagad kā par saviem argumentiem? Vai tas veikt jebkādu ievadi? Vai tas ir nepieciešams, kādu ieguldījumu? Tātad tas nav nepieciešams zināt iepriekš neko. Saņemt virkne nav, iegūt int nav. Printf nav - tai ir jābūt dažas ievade pagājis tajā - un tā atšifrējums vajag kādu ieguldījumu, bet saņemt pozitīva int nav. Tāpēc es esmu gatavojas nepārprotami pateikt kompilatoru spēkā neesošu. Void ir trūkums kaut kas cits. Tātad, par spēkā neesošu nozīmē nekas iet iekšā Šo iekavās, semikols. Un tagad apakšā manā failā - un atkal, es esmu vienkārši ir sava veida anālais Šeit liekot galveno augšpusē, kas ir laba prakse, jo šādā veidā, jebkurā laikā jūs vai kāds cits atver failu, to funkcionalitāte ir tiesības tur. Jūs varat nirt no kvadrātveida vienu. Tāpēc tagad es esmu gatavojas dublēt šo, saņemt pozitīvu int par spēkā neesošu, bet es neesmu gatavojas hit semikolu tagad. Es esmu gatavojas atvērt cirtaini bikšturi, un tagad man ir nepieciešams aizņemties dažas idejas no pirmdienas. Tātad, kā jūs atceraties, mēs kaut ko patīk darīt šādas darbības, kamēr kaut kas ir patiess. Un ko man darīt? Es tomēr kaut ko līdzīgu dot man pozitīvs vesels skaitlis, Mazliet ātri. Es varētu izmantot jebkuru vārdu es gribu. Un tad es ko? Int n vienāds nokļūt int, nav argumenti, lai to. Un paziņojums starpību. Kad jūs zvanu funkciju, ja lietojat funkcija, jums nav likts tukšumā. Jūs darīt tikai, ka, deklarējot funkcija, mācību kompilators to tam vajadzētu sagaidīt. Tātad jums nav nepieciešams, lai anulēta tur sevi. Un tagad kāds bija mans stāvoklis? Nu, n ir nav vienāds ar pozitīvu, bet tas ir tikai pseido-kodu. Tātad, kā es varu izteikt tas tīrākā? Tā mazāks par vai vienāds ar nulli. Tātad vēlreiz, ievērosiet, jūs varat darīt, mazāks par vai vienāds ar. Pat ja tas ir divas atsevišķas simbolus, jūs varat darīt to par klaviatūras kā tādu. Bet tur ir vēl kļūda, kas Es ieskrūvē up pēdējo reizi too. Man ir atzīt - tieši tā. Man ir atzīt n ārpus no cilpas. Tāpēc man ir nepieciešams, lai n šeit, un es nedomāju, vēlas atkārtoti paziņot to šeit citādi man jaunu mainīgo. Es tikai gribu, lai piešķirtu vērtību šeit. Un tagad es neesmu gluži izdarīt šeit. Ļaujiet man iegūt priekšā sevi un izlikties, es esmu darīts. Lai pozitīvi, un tagad tur ir jauna kļūda. Kontrole sasniedz beigu nav spēkā neesošu funkciju. Tātad jaunā kļūdas ziņojumu, bet, ja jūs veida gada ķircināt izņemot katra vārdiem, tā iespējams, mājieni par to, kas ir nepareizi. Control. Kontrole nozīmē tikai ar rīkojumu darbības programmā. Dators ir kontrolēt situāciju un kaut kas nogāja greizi. Tātad, tas sasniedz beigām , kas nav anulēts funkcija. Kāda funkcija ir tas acīmredzot atsaucoties uz? Kāda funkcija ir ne-par spēkā neesošu? Lai iegūtu pozitīvu int, un nedaudz neskaidri, ka labi, tas ir sava veida neesošu. Tā ir specifikāciju spēkā neesošu attiecībā uz tās argumenti, bet tā produkcija ir gatavojas būt tipa n. Tātad pa kreisi vārds ir tā sauktās atgriešanās tips. Iekšpusē vārds šeit ir ar nulles vai vairāk argumentus ka funkcija tiek. Tātad, kas man ir jādara? Šajā brīdī manā kodu, līnija 21, kur mirgo ātri tagad ir, es ir pozitīva int iekšpusē mainīgā sauc n. Kā es varu dot to atpakaļ uz main? Burtiski. Atgriezties n semikolu. Tik vienkārši, kā Colton atgriezās gabals papīrs ar atbildi uz mani, krītot ka gabals papīra maz melns kaste uz galda, kas darīt, ka kods, jūs burtiski vienkārši uzrakstīt, atgriezties n, un tas ir it kā Colton bija nododot man kaut ko fizisku atpakaļ. Šajā gadījumā, kas notiek, ir iegūt pozitīva int gatavojas atdot atpakaļ kas ir iespējams pozitīvs skaitlis kam? Ja tas, ka cenas galu galā? Kas nonāk šajā mainīgo, n, un tad mēs turpinātu ar deviņiem līniju. Tātad, citiem vārdiem sakot, lai no operācijas, šī programma sāk izpildes, un kompilators saprot, ak, jūs vēlaties bibliotēku? Ļaujiet man iet paķert kāds ir iekšā, ka. Ak, jūs vēlaties standarta IO bibliotēka? Ļaujiet man iet paķert kāds ir iekšā, ka. Ko kompilators pateikt sev kad tas hits līniju četri? Ak, jūs solīja īstenot funkciju sauc saņemt pozitīvu, bet mēs saņemam atpakaļ, ka vēlāk, kaut kas pa šo līniju. Int galvenais spēkā neesošu tikai nozīmē, lūk, iekšām manā programmā. Līnija septiņi ir tikai cirtaini lencēm. Līnija astoņi saka pa kreisi, sniedz me 32 biti uz skaitlim, to sauc n. Labajā pusē, tas ir sakot, saņemt pozitīvu int. Tagad pieņemsim pauzes, ka stāsts, jo tagad Man nav saglabāt pārvietojas manu kursoru uz leju. Mans kursors tagad iet uz leju šeit, jo tagad saņemt pozitīvu int izpilda. Int n ir deklarēta. Veiciet šādas darbības. Printf dod man vesels pozitīvs skaitlis. Saņemiet int no lietotāja, uzglabāt to n, un varbūt darīt atkal un atkal. Tas cilpa nozīmē, ka šis kodekss varētu izpildīt uz augšu un uz leju, piemēram, tas atkal un atkal, bet tad, kad lietotājs beidzot sadarbojas un dod man pozitīvs int, es hit līnija 21, kurā brīdī numurs tiek nodota atpakaļ, un kura viens man uzsvērt tagad? Nine. Kontroli, tā sakot, atgriežas rindā deviņi. Tas ir līnija, kas tagad atbild. Tātad tas, kas noticis visu šoreiz zem motora pārsega, bet kad mēs esam, ko izmanto funkcijas, piemēram, printf vai pat saņemt virkni, ka kāds cits rakstīja par jums, kontrole tika nodota off, lai kāds cits kods līnija ar auklu līniju. Tas ir vienkārši, mēs nevarētu redzēt to, un mēs nevarēju īsti attēlot to šajā programmu, jo tas ir dažās citās failu uz cietā diska nezinot mums. Tātad, pieņemsim patiesībā apkopo un palaist šo tagad. Padarīt pozitīvi. Aizpildi, tas ir progress. . / Pozitīva. Dodiet man vesels pozitīvs skaitlis. Būsim grūti. Negatīvs 1. Nulle. Pieņemsim arī tā 50. Paldies par 50, un tā kontrole tagad ir atgriezies. Kādi jautājumi, tad par to? Yeah? [Dzirdams]. Vēlreiz saku. Ak, labs jautājums. Tātad, jūs ievērosiet, paralēles, kas Es esmu veida griešanas stūrī uz. 12 rindā, es saku, ir iespēja saņemt pozitīvu int atgriež int, bet tajā pašā loģika, tagad loģiski, ka sešas līnijas, es saku, ka galvenie atgriežas int, bet to, kas ir, mēs nekad bija kāds no mūsu programmas? Mums nekad nav bijis pieminēts šī atslēgas vārds atgriešanās. Tātad izrādās, ka uz C, vismaz versija par to, ka mēs izmantojam veikts 1999.gadā, tehniski, tas ir notiek automātiski. Anytime jums īstenot programmu, un jūs īstenotu funkciju sauc galvenais, ka funkcija atgriezīs nulli noklusējuma, ja jums nav teikt savādāk, un nulle ir tikai konvencija. Pasaule atgriež nulli tādējādi , kas norāda, ka viss ir labi, faktiski atstājot mūs ar četrus miljardus iespējamās lietas, kas varētu iet nepareizi tā, ka tad, ja mēs atgriezties vienu, ka varētu liecināt kodu, kas nozīmē, ka šis lieta nogāja greizi. Mēs varētu atgriezties divas, kas nozīmē, šī cita lieta nogāja greizi. Mēs varētu atgriezties četrus miljardus, kas nozīmē, ka šis Otra lieta, kas nogāja greizi. Un, ja jūs tagad domājat par savu PC vai Mac, jūs varētu atcerēties, ka reizēm jūs saņemsiet mistisks kļūdu ziņojumus no programmatūras, ka jūs esat izmantojot, un dažreiz tas ir cilvēka draudzīgs apraksts, bet tur ir bieži kods vai numurs uz ekrāna? Ja tas nenāk prātā, tikai saglabātu acu, kas par to. Tas ir parasti, ko šie kodi ir domāta. Viņi iekļauts Microsoft Word un citas programmas, tā, ka, ja jūs failu bug ziņojums ar uzņēmumu, jūs varat pastāstiet viņiem, ak, es saņēmu kļūdas numurs 45. Un daži programmētājs atpakaļ uzņēmumā var izskatīties, ka līdz ar viņa vai viņas kodu un teikt, ak, tas ir tāpēc, ka es šī kļūda, un tas ir iemesls, kāpēc lietotāju dabūju šo ziņu. Bet atklāti sakot, tas ir tikai nedaudz novērš uzmanību un nedaudz garlaicīgs, lai secina, ka, vismaz mūsu pirmās pāris programmas, tāpēc mēs esam ir izlaižot to. Bet visu šo laiku ik vienu no jūsu funkcijas galvenais ir slepeni bija tas līnija pievienoti automātiski jums, kompilatoru, tikai pēc vienošanās ietaupīt laiku. [Dzirdams]. Jums nav nepieciešams iekļaut to galvenais. Tas ir jauki. Jums nepieciešams iekļaut, ja Jums bija īstenojot funkciju, kā šis. Pretējā gadījumā funkcija dzīvoklis kas tas nedarbosies. Bet galvenais, tas nav nepieciešams. Pēc nedēļas vai divām, mēs sāksim saņemt vērā, ka ieradums, kad mēs vēlamies, lai sāktu nozīmētu kļūdas. Tiešām labs jautājums. Tik ātri verbālo pārtraukums pieminēt, ka šo piektdien, mums nebūs, kam pusdienas per se, bet mēs būsim ņemot vakariņas ar daži no studentiem un darbiniekiem. Ja vēlaties pievienoties mums, jūtas brīvi iet uz cs50.net/rsvp. 06:00 šo piektdien. Kosmoss ir, kā vienmēr, ir ierobežoti, bet mēs turpināt darīt šo par gandrīz katru nedēļu ja telpa iztek šonedēļ. Tātad cliffhanger, ka mēs left off par Pirmdiena bija, ka stīgas faktiski var jāindeksē uz, kas vienkārši nozīmē, ka jūs var saņemt pie pirmās rakstzīmes, Otrais burts, trešā zīme un tā tālāk, jo jūs varat efektīvi domā par virkni, piemēram, sveiki, kā arī šajā gadījumā pieci burti iekšpusē kastes. Un jūs varat saņemt pie katra no tiem kastes ar ko sintakses vai mēs ieviest pirmdien? Šie kvadrātiekavas uz tastatūras. Ka tikai nozīmēja iet uz nulles vietu. Mēs sākt skaitīšanu no nulles, tāpēc kronšteins nulle nozīmē h, kronšteins viens nozīmē e, un tā tālāk. Un tā visu laiku, kad mēs esam bijuši izmantojot virknes un ierakstot "sveiki" un "pasaules", un citas lietas par ekrāns, tas ir glabāti kastēs, kā šis. Un veikt minējums. Kāda katra kaste pārstāv fiziski iekšpusē datora? [Dzirdams]. Žēl? Blondīne. Tātad raksturs, protams, gadījumā, ja stīgas, un raksturs ir tikai astoņi biti vai viens baits. Tātad, jūs, iespējams, ir vismaz neskaidri iepazinušies ar to, ka jūsu datoram ir atmiņas. Tā ir divu veidu atmiņas vismaz. Viens no tiem ir cietā diska, kur jums saglabāt sīkumi pastāvīgi, un tas ir parasti ir liels, lai jūs varētu būt filmas un mūziku, un tā tālāk. Tad jums ir cita veida atmiņas sauc RAM, R-A-M, Random Access Atmiņa, un tas ir veids, atmiņas kas tiek izmantota, kad jūsu dators ir rādīt bet, ja jūs zaudējat varu vai jūsu baterija nomirst, viss, kas glabājas RAM pazūd, ja jūs zaudējat jauda vispār, jo tas nav noturīgas. Jums parasti ir, šajās dienās, GIG no tā, divi koncerti, varbūt vairāk. Un RAM otrādi ir, ka tas ir daudz daudz, daudz ātrāk nekā cietais disks vai pat SSD diskdziņi šajās dienās, bet tas parasti ir dārgāka tāpēc Jums ir mazāk par to. Tātad šodienas saruna tiešām attiecas RAM, šāda veida atmiņas, kas eksistē tikai tad, kad tur ir spēks tiek ievadīti datorā. Tātad, ja jūs tipa in H-E-L-L-O, Enter tastatūra, H notiek vienā baits RAM, E iet vēl RAM baitu, kā tas ir pārējā vārda. Tātad, atcerēties to, ko mēs varējām darīt pēdējo reizi bija šī. Ļaujiet man iet uz priekšu un atvērt failu ka mēs sauc string.c, un atcerēties ka tas izskatījās nedaudz kaut kas līdzīgs šim. Ļaujiet man faktiski roll atpakaļ un mainīt tas ir tieši tas izskatījās, virknes garums s. Tā izskatās pēc programmas šeit. Mēs ietver CS50 bibliotēku, lai ka mēs varam izmantot saņemt virkni. Mēs arī standarta io.h lai mēs varētu izmantot printf. Kāpēc mēs arī string.h? Tas bija jauns pirmdien. Tāpēc mēs vēlējāmies virknes garumu. Str leng. Cilvēki nolēma gadus atpakaļ, pieņemsim tikai būt īss. Tā vietā, nosaucot to par "virknes garums," sauksim to "str leng", un ļaujiet pasaules skaitlis, ka,, un tā tas ir ko mēs piekļūt ar string.h. Tas ir pazīstams. Tas ir pazīstams. Tas ir pazīstams. Tas ir nedaudz jauns. 22 rindā - un mēs būsim atpakaļ uz šo, bet tagad zinu - un jūs tikai zināt, tas no tā, lasīt dokumentāciju vai ja Jūs zināja, C jau - get virkne dažreiz var screw up. Ja lietotājs ir patiešām sacīkstes vai nevēlas sadarboties, un viņš vai viņa vienkārši nav rakstīt kaut ko pie klaviatūras vai veidi tik daudz pie klaviatūras, ka tas nomāc datora atmiņu, teorētiski, iegūt stīgu varētu atgriezties kaut kas nav rakstzīmju virkne. Tas varētu atgriezties īpašu sauc vērtību NULL visos vākiem, N-U-L-l, un tas ir, tikai tā saukto sargs vērtību. Tā ir īpaša vērtība, kas nozīmē kaut kas slikts ir noticis šajā gadījumā. Tas ir, ja nav virknes. Tāpēc null es esmu pārbaudot vienkārši tā, ka, garš stāsts īss, str leng un citas funkcijas, kas nāk ar C, ja viņi gaida virkne, bet jūs nodot tos trūkums virknes, ja jums iet viņiem nulle, datoru vai programmu būs tikai crash tieši. Tā tiks pakārts. Tas būs uzmest dažas kļūdas paziņojumu. Sliktas lietas notiks. Tātad, pat ja tas vēl nav labi definētas - tas būs daudz lietderīgāk nedēļā vai divi - 22 līnija, tas ir tikai piemērs sevis aizsargu kļūdu pārbaudi tikai gadījumā, ja vienu reizi no miljons kaut kas noiet greizi, pie Vismaz mana programma nav crash. Tātad, ja s nav vienāds ar kaut ko sliktu, Man ir šis cilpas, un tas bija kur mums bija, ka citi jauns gabals sintaksi. Man ir cilpa atkārtojot no nulle uz augšu ar garumu s. Un tad šeit, es biju drukāšanas out s kronšteins i, bet kāpēc es izmantot% c visi no pēkšņi nevis% s pat lai gan s ir virkne? Tas ir raksturs, vai ne? S ir virkne, bet s kronšteins kaut kas, s kronšteins i kur i ir nulle vai viens vai divi, kas ir individuāls rakstzīmju virknē, un tāpēc ka printf ir jābūt informētam, ka tas ir patiešām raksturs gaidīt. Un tad atceros, ko darīja Programma patiesībā darīt? Iespiests to, kolonnās. Jā, tieši tā. Tas tikko iespiests vārdus, ko es rakstīt kolonna, vienu simbolu katrā rindā. Tātad, pieņemsim redzēt to vēlreiz. Tātad, lai virkni. Sast OK. . / String. Let me tipa H-E-L-L-O, Enter, un tiešām man to, katrā rindiņā vienu. Tātad, ļaujiet man darīt vienu optimizāciju šeit. Ja jūs domājat par to, it īpaši, ja Jūs esat ieprogrammēts agrāk, tur ir varbūt neefektivitāte 24 rindā. Citiem vārdiem sakot, tas ne vienmēr labākais dizains. Vienkāršs, vismaz reizi tevi atcerēties, kas str leng ir, bet tas ir darīt kaut ko mēms iespējami. Kas varētu būt? [Dzirdams]. Tieši tā. Tas ir arī pārbaudes par garumu s katru reizi, pat ja H-E-L-L-O ir vienmēr notiek ir piecas rakstzīmes. Katru reizi, izmantojot šīs cilpas, pieci nemainās. Es varētu būt palielināšanai i, bet ko ir garums no s uz katru atkārtojuma šīs cilpas? Tas ir piecas, tas ir pieci, tas ir pieci, un bet es tomēr lūdzot šo jautājums atkal un atkal un atkal. Tagad godīgi sakot, dators ir tik nopelt ātrs, neviens gatavojas paziņojums starpība šajā gadījumā, bet šie veidi Nabadzīgo dizains lēmumus var sākt pievienot uz augšu, ja kompilators pats nemēģina noteikt šo par jums, kas tas parasti nebūtu, pie vismaz iekārtā. Tāpēc es esmu gatavojas darīt to. Es esmu gatavojas pievienot komatu pēc mans pirmais mainīgais, i. Es esmu gatavojas sniegt sev citu mainīgs, aicinot to n, tikai ar konvenciju par numuriem, un tad es esmu gatavojas piešķirt n vērtību virknes garums no s. Un tad es esmu gatavojas mainīt mans stāvoklis ir tas, ko? Es esmu gatavojas mainīt savu stāvokli līdz kamēr i ir mazāks nekā n. Tāpēc tagad, cik reizes es esmu pārbaudot garumu s? Vienu reizi, bet tas ir OK, lai pārbaudītu, i pret n atkal un atkal, jo tagad tiem vērtības nav reāli mainās. Tagad, lai tagad, tikai zinu, ka jebkurā laikā jūs zvanu funkciju, tur ir mazliet pieskaitāmās izmaksas, kas nav pietiekami, lai atturētu jūs tiešām no kādreiz, izmantojot funkcijas, bet protams, ja tur ir koda līnija patīk, ka - un līnijas saņems interesantāks pirms ilgi - ja tur ir iespēja domāt, ja es ierakstiet šo kodu, cik reizes, tas izpilda? Jūs sākat redzēt laika gaitā ir veiktspēju jūsu programmas var patiešām mainās. Patiesībā, viens no problēmas nosaka mēs esam darīts gadu iepriekš saistīta īsteno, kā jūs varētu atsaukt no nedēļa nulle, pareizrakstības pārbaudītājs, bet pareizrakstības pārbaudītājs, kas ir paredzēti, lai atbalstītu no 150000 vārdnīca plus vārdi, ka mēs sniedz jums puiši. Jums būtu rakstīt kodu, kas slodzes šie vārdi uz RAM, tāpēc uz kastes, piemēram, mēs redzējām uz ekrāna brīdi atpakaļ, un pēc tam tik ātri, kā jūs iespējams, jums ir nepieciešams, lai varētu atbildēt jautājums par formu, tas ir vārds kļūdaini? Vai šis vārds nepareizi? Vai šis vārds nepareizi? Un kaut ko līdzīgu, ka tas, ko mēs esam darīts gadu iepriekš, ir pārvērtuši to, kaut arī opt-in brīvprātīgās konkurss par veidu, ar kuru studentiem, kuri izmanto mazāk RAM un mazāk laiks, mazāk CPU cikli, galu galā burbuļo uz augšu mazliet vadītājs valdes vai rangu, ka mēs likts uz Kurss mājaslapa kā mēs esam darīts gadu iepriekš. Tātad vēlreiz, pilnīgi obligāta, bet tas runā ar dizaina iespējām kas ir priekšā, kad mēs sākam ēkas atop daži no tiem pamatelementiem. Tātad, ļaujiet man iet atpakaļ uz šo diagramma tikai mirklis un atklāt maz kaut ko vairāk. Tas tiešām ir stīgu, un mēs esam veikuši priekšrocība dažiem bibliotēku, standarta io.h, kas ir - Printf. Printf, cita starpā. cs50.h, kas ir iegūt int un saņemt virkni un tā tālāk, string.h, kas bija str Leng. Bet izrādās, tur ir vēl viens. Atklāti sakot, tur ir daudz un daudz galvenē failus, kas atzīt funkcijas bibliotēkām, bet tas ctype.h ir faktiski būs nedaudz izdevīgi, jo es esmu gatavojas iet uz priekšu un īstenot vienu citu programmu šeit. Ļaujiet man iet uz priekšu un atvērt kaut ko Es rakstīja sauc iepriekš capitalize.c, un pieņemsim Paskaties, kā tas darbojas. Ievērojiet, ka es esmu, izmantojot šajā versijā par to, trīs pazīstami failus. Ievērojiet, ka 18 rindā, es esmu iegūt teksta rindiņu. Paziņojuma 21 rindā, es esmu apgalvojot, ka šādu kodu gatavojas kapitalizēt s, kāds lietotājs ievadījis in, un kā es daru, ka? Nu, es esmu ņemot - mācība, kas gūta pēdējo reizi - Es esmu paziņojot, i un n un atkārtojot pār virknē rakstzīmes. Un tad kāds ir šis bloks kods ar 27 24 līnija darot lajs izteiksmē? Mazo burtu atpakaļ. Tieši tā. Ja s kronšteins i - tā, ja i-th raksturs s, kas ir specifisks char virknē, ir lielāks nekā vai vienāds ar mazo un - atgādināt, ka dubultā aizvieto & zīmes neizsaka un - un tas pats raksturs, s kronšteins i, ir mazāks par vai vienāds ar mazo z, tas nozīmē, ka tas ir vai b vai c vai dot, dot, dot, vai z, kas nozīmē, tas ir mazie. Ko es gribu darīt šādā gadījumā? Nu, es varu darīt nedaudz cryptically, bet pieņemsim ķircināt to intervālu. Es esmu dodas uz zvanu printf, drukā% c jo es gribu, lai to izdrukātu šo rakstura uz ekrāna. Es esmu tam gatavojas veikt s kronšteins Es, i-th raksturs s, un pēc tam, kāpēc es daru šo maz triks šeit, mazo mīnus kapitāla A? Kas ir tas, ka gatavojas sniegt me, vispārīgi runājot? [Dzirdams]. Tieši tā. Man nav īsti atcerēties - tas bija 65 kapitāla A. Man nav īsti atceries, ko mazie ir, bet vienalga. Datoru zina. Tātad, sakot, mazajiem mīnuss kapitālu, tas ir dīvaini, lai būtu atņemot vienu char no cita, bet kādi ir simboli zem motora pārsega? Viņi vienkārši numuri. Tātad, neatkarīgi šie skaitļi ir, ļaujiet datoram atcerēties nevis man cilvēku. Tātad mazajiem mīnusa kapitālu ir gatavojas sniegt man atšķirību. Tas notiek, ir 32, un kas būtu gadījumā mazo b un kapitāla B un tā tālāk. Tas paliek nemainīgs, par laimi. Tāpēc es esmu būtībā sakot, veikt mazo burtu, atņemt off, ka standarta atšķirība, un ka Efektīvi izmaiņu s kronšteins i no mazo līdz, protams, lielie burti, bez mana tiešām, kam jādomā par to, vai atceries, kādi bija tie, skaitļi, mēs runājām par to, kad astoņu brīvprātīgie nāca uz skatuves? Tagad tikmēr, kas cits, ja tas nav mazo burtu, kā noteikts līdz 24 līnija, vienkārši izdrukāt to ārā. Es tikai gribu pieskarties rakstzīmes, kas bija faktiski sākotnēji mazie. Tātad, pieņemsim redzēt. Padarīt kapitalizēt. Sastādītāja, OK. . / Kapitalizēt. Un man ierakstīt H-E-L-L-O ar mazajiem burtiem, Enter. Un paziņojums, ka tas tiek pārvērsts uz lielajiem burtiem. Ļaujiet man darīt to atkal ar citu vārdu. Kā par D-A-V-I-D ar pirmo D kapitalizētas kā vārds parasti ir? Enter. Pamanāt, ka tas joprojām ir pareiza. Tas tikai izvadīt, ka pirmā D nemainīgs via ka cits būvēt. Tātad, paturiet prātā, tad, Pāris lietas šeit. Viens, ja jūs kādreiz vēlaties pārbaudīt divus apstākļi vienu reizi, jūs varat, un tos kopā kā prognozējām. Jūs varat salīdzināt rakstzīmes šādā veidā un efektīvi ārstēt rakstzīmes kā numurus, bet atklāti sakot, tas ir tik nopelt mistisks es nekad atcerēties Kā nākt klajā ar to no nulles bez pamatojuma caur to diezgan mazliet laika. Vai nav tā bijis jauki, ja kāds tur rakstīja funkciju sauc, ir samazināt, kas varētu atbildēt man patiess vai viltus, šis raksturs ir mazie? Nu par laimi, kurš rakstīja ctype.h darīja tieši tā. Ļaujiet man iet šeit un pievienot ctype par c veidiem, un tagad ļaujiet man iet uz leju šeit un pārrakstīt šo līniju šādi. Tātad, ja to sauc ir zemāks, es apgalvot, s kronšteins i, tad es esmu gatavojas, lai izdzēstu šīs divas līnijas kopā. Tāpēc tagad kāds cits, es esmu cerot, rakstīja sauc funkcija ir zemāks, un tas Izrādās, viņi darīja, un viņi deklarē tā iekšpusē ctype.h. Un tagad es esmu gatavojas atstāt līniju 27 viens pats, es esmu gatavojas atstāt līniju 31 vien, bet paziņojums, cik daudz es esmu pastiprināja manu kodu. Tas tagad ir tīrāks. Tas ir tik grūti skatīties cauri jo tagad funkciju, turklāt ir tik brīnišķīgi nosaukts tā vienkārši dara to, ko tā saka. Tāpēc tagad es esmu gatavojas, lai saglabātu to. Es esmu gatavojas, lai tālinātu. Un tāpat kā Scratch jūs varētu būt Booleans, Būla vērtības patiess vai nepatiesa, tas ir tieši tas, kas ir zemākas efektīvi peļņu. Ļaujiet man recompile. Ļaujiet man atkārtoti palaist. Un tagad pamēģināsim vēlreiz, H-E-L-L-O, Enter. Tas ir diezgan laba. Un mēģiniet vēlreiz, lai pārliecinātos, es nav screw kaut augšu. Tas ir kapitalizētas kā labi. Bet tas nav pietiekami labs, jo Otra lieta, ka es esmu nekad gatavojas atceraties, ja vien es strādāju ar to patiešām Uzmanīgi uz, teiksim, papīrs ir tas damn līniju. Vai tas nebūtu jauki, ja tur bija funkcija aicināti augšējo? Nu izrādās, ka tas ir ctype.h kā labi. Es iešu uz priekšu un tips - ļaujiet man sniegt šo līniju atpakaļ. Tā vietā, lai to šeit, ļaujiet man iet uz priekšu un teikt, aizvietot% c ar rezultāts aicinot šo funkciju, lai augšējā uz i-raksturu s. Un tagad pamanāt, ka tas kļūst mazliet balstīts. Man ir izsekot, cik daudz iekavas es esmu atvērt un aizvērt. Tāpēc tagad tas ir pat tīrāks. Tagad šī programma kļūst labāk, un labāk izstrādāti varbūt tāpēc, ka tas ir daudz, daudz vieglāk uztveramu, bet tas nav pieņemsim labot. Padarīt kapitalizēt. . / Kapitalizēt. H-E-L-L-O. Pieņemsim palaist to no jauna, D-A-V-I-D. Labi, tāpēc mēs esam vēl diezgan laba forma. Bet tagad ar augšējo. Es ierosinu, ka tur ir vēl viens izsmalcinātība mēs varētu darīt, kas būtu ļoti jauki, ka patiešām varētu pastiprināt up šo kodu un tiešām dod mums piecas no pieciem projektēšanas, piemēram. Kāda būtu jauki, lai atbrīvoties no? Nu, paskaties, cik sasodīti garu šo bloku kods ir vienkārši darīt kaut ko vienkāršu. Tagad kā malā, kā jūs varētu būt redzams super sadaļā šo pagājušo nedēļas nogalē, jums nav obligāti nepieciešams cirtaini bikšturi, kad jūs vienkārši ir viens līnija kods, lai gan mēs ierosinājām turot tos tā, ka tas padara daudz vairāk skaidrs, tāpat kā nulles, ir U-veida bloki, kas ir iekšpusē filiāles. Bet tas nebūtu jauki, ja ar augšējo, ievadot savu ieguldījumu, pārvērta to par lielajiem burtiem, ja tā nav, un kas būtu būt brīnišķīgs pretējā gadījumā, ja tas jau lielos? Just iet caur un atstāt to atsevišķi. Tāpēc varbūt tas, ka. Es varētu izmēģināt un tikai ceru, ka ka tā, bet ļaujiet man ieviest viena cita lieta. Tā vietā, izmantojot šo iebūvētu termināli logu uz leju šeit atgādināt, ka Šis laukums melnā icon ļauj jums lielāks termināļa logu, ka es varu pilns ekrāns, ja es gribu? Tātad izrādās, ka viņi veida savādi nosaukts, bet tur ir šie sauc lietas cilvēks lapas, rokas lapas, īstermiņa Vīrietis, un es varu piekļūt šos ar rakstīt man - Ko es gribu tipam? Cilvēks uz augšējo. Un tagad paziņojums, ja pastāv darboties iekšpusē no datora, kas Šajā gadījumā ierīce, kas ir tikai operētājsistēmas Linux, tas notiek lai dotu man nedaudz mistisks kopumu produkciju, bet jūs atradīsiet, ka laika gaitā tas vienmēr ir formatēts diezgan daudz paši, lai jūs sākat, lai pierastu pie tā. Paziņojums augšā uz augšējo, un acīmredzot ir tas pats dokumentācija lai samazināt. Kurš rakstīja tas bija griešana dažas stūriem un nodot to visu uz vienas lapas. Šīs lietas "mērķis ir dzīve ir, lai pārvērstu vēstule augšējā vai mazajiem burtiem. Ievērojiet, ka zem Anotācija, man lapa māca man to failu man ir , lai iekļautu izmantot šo lietu. Tas dod man parakstus par šiem funkcijas, gan no tām, pat ja mēs tagad tikai rūp vienu. Te tagad aprakstu. Lai augšējā pārvērš vēstuli c lielajiem burtiem, ja iespējams. Joprojām nav tik pamācošs, bet ļaujiet man tagad izskatās zem atgriešanās vērtību, lieta kas ir nodotas atpakaļ. Tā atpakaļ vērtība ir tā, ka no konvertētas burtu vai c, ja konversija nebija iespējams. Kas ir c? Oriģināls raksturs. Oriģināls raksturs, un mēs zinām, ka ar, atkal, iet uz augšu līdz konspekts, un kurš rakstīja šo funkcija, tikko nolēma, ka ieejas līdz līdz augšējo un apakšējā ir tikai patvaļīgi būs saukt c. Tie varētu būt to sauca lielākā daļa kaut ko viņi vēlas, bet viņi tur to vienkārši, kā c. Tāpēc es esmu apspriešanās ar man lapu. Šis teikums pārliecina mani, ka tad, ja tas nav mazo burtu, tas ir gatavojas tikai dod man atpakaļ C, kas ir ideāls, kas nozīmē, es varu atbrīvoties no mans cits stāvoklis. Tātad, ļaujiet man iet atpakaļ uz gedit, un Tagad ļaujiet man vienkārši darīt to. Es esmu gatavojas kopēt manu printf paziņojumu. Es iešu uz priekšu un pa labi iekšā cilpa drukāt, ka ārā, un saņemt atbrīvoties no, tagad šo visu, ja konstrukcija. Nebija slikta ideja, un tas bija ļoti ļoti pareizs un atbilst viss, ko mēs esam sludināja, bet vienkārši nav nepieciešams. Tiklīdz tu saproti, kādu bibliotēka funkcija pastāv, ka kāds cits rakstīja, vai varbūt jūs rakstījāt citur failu, jūs varat to izmantot un patiešām sāk pastiprināt kodu. Un kad es saku lietas, piemēram, labu stilu, Fakts, ka šī persona saukta darbojas uz augšējo, vai iepriekš ir zemāks ir lieliski noderīgi, jo viņi ir ļoti aprakstošs. Jūs negribētu, lai izsauktu funkciju x un y un z, kas ir daudz, daudz mazāk nozīme. Visus jautājumus par šo sēriju uzlabojumu? Tātad pietiek pateikt vienu takeaways ir pat kā savu problēmu komplekts - varbūt problēma komplekts vienu, bet protams P noteikti divi un tālāk, pat kad viņi pareizi ne vienmēr nozīmē, ka tie ir ideāli vienkārši bet vai īpaši labi izstrādāta. Tas ir cits ass sākt domāt par. Tātad tas bija virkne iekšpusē jūsu datora atmiņā, bet, ja jums ir viss bars no burtiem, piemēram, H-E-L-L-O iekšpusē RAM, un pieņemsim, ka jūs savā programmā zvanu saņemt virkni vairākas reizes, piemēram, ka jūs zvaniet saņemt virkni vienu reizi, tad jūs zvaniet saņemt virkni vēlreiz. Nu, kas notiek, notiek laika gaitā? Citiem vārdiem sakot, ja jums ir līnija kods, lai gan no konteksta, piemēram, string s izpaužas - pieņemsim to izdarītu. String nosaukums ir vienāds saņemt virkni. Tātad pieņemsim, ka koda līnija ir domāta pieprasīt no lietotāja par viņa vai viņas vārdu. Šis nākamais līnija kods ir domāts lūgt lietotāju par viņa vai viņas skolā, un Šis nākamais līnija, un tā tālāk. Pieņemsim, ka mēs turpinām jautā citam lietotājam un vēl un vēl virkne. Viņi gatavojas palikt atmiņā tajā pašā laikā. Viens nav gatavojas clobber otru. Skola nav pārrakstīt otru. Bet kur viņi visi galu galā atmiņā? Nu, ja mēs sāktu izdarīt uz ekrāna, ko mēs varam izmantot šo lietu Šeit, piemēram, tāfeles, ja šī melnā taisnstūris ir mana datora atmiņa, es esmu gatavojas patvaļīgi sāktu sadalot to uz augšu maz kvadrātu, katrs no kuriem ir vienu baitu atmiņas. Atklāti sakot, ja jums ir gigabaitu RAM šajās dienās, jums ir miljards baitu atmiņas jūsu datorā, lai miljards šo kvadrātu. Tātad pietiek pateikt, tas nav īsti mērogā. Bet mēs varētu saglabāt zīmēšanas visi šie protams, nav mēroga kvadrātu, un tas kolektīvi pārstāv mana datora atmiņu. Tagad mēs tikai to dot, dot, dot. Tātad, citiem vārdiem sakot, ja es tagad liks lietotājs ar get auklu, lai dotu man string, kas notiek? Ja lietotājs veidu "sveiki", kas beidzas up in H-E-L-L-O. Bet pieņemsim, lietotājs, tad veidi - patiesībā, man nevajadzēja darīt sveiki, jo mēs esam jautā viņiem par to nosaukumiem. Tāpēc iesim atpakaļ, ja es varētu darīt. Tātad, ja es tipa D-A-V-I-D uz manu vārdu, bet atgādināt, ka otrajā rindā kods ir saņemt virkni atkal lai saņemtu savu skolu. Kur ir šis vārds, ka lietotājs veidi, kas iet tālāk? Nu, varbūt tas gatavojas iedziļināties H-A-R-V-A-R-D. Tātad, pat ja es esmu sagatavots kā divām rindām, tas ir tikai viss ķekars baiti jūsu Datora RAM. Tur ir problēma tagad, jo tagad, ja es esmu izmantojot RAM tas ir ļoti saprātīgs bet sava veida naiva veidā, ko jūs varat acīmredzot nav atšķirt? Ja viena sākas un kur viens beidzas, labi? Viņi veida saplūdušas kopā. Tātad izrādās, datoru nedara. Ļaujiet man patiesībā ritināt atpakaļ laikā ar dažas rakstzīmes, un tā vietā, Harvard notiek tūlīt pēc lietotāja vārda, lietotājs faktiski izpaužas, aiz ainas, īpašs raksturs iekļauts ar Datoru viņam vai viņai. / 0, citādi pazīstams kā nul rakstura kaitinoši sauc par N-U-L, nav N-U-L-L, bet jūs rakstīt to kā / 0. Tas ir tikai visas nulles bitu, ir marķieris starp pirmo vārdu, ka lietotāja drukāti un otrais. Tātad Harvard faktiski tagad nonāks kā šo rakstzīmju secību un viens vairāk / 0. Tātad, citiem vārdiem sakot, ar kuru tie kontrolputni vērtības, astoņi blakus nulle biti, tagad varat sākt, lai atšķirtu vienu rakstzīmi no cita. Tātad, visu šo laiku, kas bija "sveiki" ir faktiski "sveiki" ar / 0, un Tajā pašā laikā, varētu ļoti labi būt diezgan nedaudz vairāk RAM iekšpusē no datora. Ļaujiet man darīt viena cita lieta tagad. Izrādās, ka visiem šiem kvadrātiem mēs esam zīmēšanas, tie ir, jā, stīgas, bet plašākā nozīmē, šīs lietas ir masīvi. Masīvs ir tikai rieciens atmiņas kas ir atpakaļ atpakaļ atpakaļ uz muguras, un jūs parasti izmantot masīvu veidā Šīs kvadrātiekavas notācija. Tātad, mēs ejam, lai redzētu šos diezgan daudz laika gaitā, bet ļaujiet man iet uz priekšu un atvērt, sauksim to vecumu. Un paziņojums, ko mēs varam darīt ar šie paši triku, nedaudz nedaudz vairāk sintakse šeit. Tātad šīs programmas 17 rindā - faktiski, ļaujiet man palaist programmu vispirms lai mēs varētu redzēt, ko šī lieta nav. Ļaujiet man zvanu veikt vecumu, lai apkopo šo programmu. . / Vecumu. Cik daudzi cilvēki ir telpā? To sauc par trīs. Vecums no pirmās personas? 18, 19, 20 un. Un tagad nedaudz smieklīgi, es tikai ir veikuši programmu, kas AGES tiem trīs cilvēki. Tātad tur ir skaidri iespēja kādu fun aritmētisko šeit. Par laimi, matemātika ir pareiza. 18 devās uz 19, 19 gāja līdz 20 un tā tālāk. Bet kas īsti domāts, lai būtu ilustratīvu šeit ir, kā mēs uzglabāt šo triju cilvēku vecumu. Ļaujiet man tuvinātu to, kas ir notiek šeit. Tātad, pirmkārt, šie pirmie dažas rindiņas būtu iegūt diezgan pazīstams. Es esmu tikai pamudinot lietotājam, lai cilvēku skaits telpā. Tad es esmu, izmantojot saņemt int un darīt, bet, lai darīt atkal un atkal un atkal. Mēs esam redzējuši šo rakstu pirms, bet līnija 27 ir jauna un samērā noderīgi, un kļūs arvien noderīgs. Ievērojiet, ka to, kas ir atšķirīgs 27 rindā ir tā, ka es, šķiet, deklarējot int sauc par vecumu, bet jāgaida. Tas ir ne tikai int vecumu. Tur ir šīs kvadrātiekavas, iekšpusē no kuriem ir n. Tātad kronšteins n šajā sakarā nav iekšpusē printf paziņojumu šeit, bet Šajā vienīgā līnijā 27, šī līnija ir sakot, dod man n Ints, no kuriem katrs ir int tipa. Tātad tas ir spainis, tā sakot, no, Šajā gadījumā, trīs veseli skaitļi atpakaļ uz atpakaļ atpakaļ, lai es efektīvi ir trīs mainīgos. Alternatīva, lai būtu skaidrs, būtu šāds. Ja es gribēju pirmo studenta vecuma, es varētu darīt. Ja es gribēju otrais students ir vecumā es varētu darīt. Ja es gribēju trešo studenta vecuma, es varētu darīt. Un nedod Dievs, mums ir nepieciešama ikviena vecums šajā telpā - Es domāju, tas ir heck par daudz kopiju, paste atkal un atkal un atkal. Un plus, kad es apkopo šo programmu, ja cits students staigā pa ārā no šīm durvīm, tagad mans numurs mainīgo lielumu ir nepareizs. Tātad, kas ir jauka par masīva ir Tiklīdz jūs sākat sajūta sevi kopējot un ielīmējot, izredzes ir, ka tas nav labākā pieeja. Masīvs ir dinamisks iespējams. Es nezinu iepriekš, cik daudz cilvēku būs telpā, bet es zinu, man ir nepieciešams n no viņiem, un es ņemšu izdomāt n, kad pienāks laiks. Šī koda līnija tagad nozīmē, dod man rieciens atmiņas, kas izskatās šādi kur kastīšu skaits uz ekrāna ir pilnībā atkarīga no n, ka lietotājs drukāti collas Tāpēc tagad šīs programmas pārējais ir faktiski ir diezgan līdzīgs tam, ko mēs vienkārši darīja ar burtiem. Paziņojums, man ir cilpa sākot no 30 līnijas. Tāpēc uzreiz pēc man masīvs, es atkārtot no y ir vienāds ar nulli uz līdz pat n. Man vienkārši ir šī pamācošs printf ziņa vienkārši sakot, man vecuma no personas #% i, tā numurs viens, numur divi, skaits ir trīs. Un kāpēc man darīt? Atklāti sakot, cilvēki dod priekšroku skaitīt no viena uz augšu tā datorzinātnieku, nullei uz augšu. datorzinātnieku nav gatavojas izmantot šāda veida programmas, tāpēc mēs esam gatavojas tikai sākt skaitīšanu pie viena kā normāliem cilvēkiem. Un tagad 33 rindā, paziņojums nedaudz atšķirīga gabals sintaksi. I-vecums šajā mainīgo tipa masīvs ir gatavojas iegūt int. Un tagad visbeidzot, tas ir tikai aritmētika leju šeit. Es nolēmu atsevišķā cilpu, varētu pieprasīt kādu laiku iet, un tagad tas atsevišķa cilpa, šīs līnijas izpildīt. Gadā no tagad, cilvēks i būs i gadus vecs, bet paziņojums, tas nav mainīgo i. Tas tagad ir% i par int. Un paziņojums par pirmo viettura, es iespraudiet i plus 1, tāpēc mēs paļaujamies, piemēram, normāls cilvēks. Un pēc tam, lai, ko veido to vecumu, par i gadus vecs, es AGES skavu i - un kāpēc es daru plus vienu šeit? Viņi vienkārši vecumā. Tā ir mana stulba izvēle programmu. Viņi vienkārši vecumā vienu gadu. Es varētu rakstīt jebkuru numuru, kas Es tiešām gribu tur. Tātad, kas patiesībā visu atbilstība šeit? Nu, ļaujiet man patiesībā ritināt atpakaļ nekā šeit, un uzzīmēt zīmējumu par to, kas ir priekšā. Ko mēs darīt ar mūsu nākamais Problēma Set Divi ir niekošanās pasaules kriptogrāfiju. Tātad tas ir rakstzīmju virkne, tā secība vairākiem simboliem, un kādi tas saka? Tas nav tiešsaistes versijā no slaidiem. Tāpēc es apgalvo, ka tas ir vienāds ar to, stulba reklāma no daudziem gadiem atpakaļ, ka tiešām var atcerēties viens no tā izcelsmes. Tātad šis ir piemērs šifrēšanas vai kriptogrāfija. Izrādās, ka, ja jūs vēlaties, lai faktiski sūtīt informāciju vai daļu Informācija ar kādu stingrāk kā ziņu, piemēram, jūs varat motokross burtus. Bet parasti, vārdi ir nav scrambled nejauši. Viņi permutēts kaut kādā veidā vai mainīti kaut kādā veidā, lai - Hmm. Tas ir jautri spoileris uz nākamo reizi. Tātad jūs varat kartes, kas ir acīmredzami O B. Paziņojumu, ka līniju līdz kapitalizācijas gudrs. Acīmredzot r kļūst e. Acīmredzot F-H-E-R kļūst S-U-R-E. Tā izrādās, tur ir kartēšanu, un Šajā gadījumā tur ir diezgan stulba kartēšanas ja kāds ir izpētījuši to ārā? Tas ir kaut kas ko sauc 13 puve, Pagriezt 13. Tas ir stulbākais šifrēšanas mehānismus, jo tas burtiski tikko papildina 13 uz katru no burtiem, stulba tādā nozīmē, ka, ja jūs vienkārši ir mazliet brīva laika uz rokas un zīmuli, vai arī jūs vienkārši domājat, ka tas caur jūsu galvas, jūs varētu mēģināt visi iespējamie papildinājumi - viens, divi, trīs, dot, dot, dot, 25 vienkārši pagriezt visu alfabētu, un galu galā, jūs izrēķināt ko šis ziņojums. Tātad, ja jūs kaut kas līdzīgs šim grade skolas iet ziņojumus saviem labākais draugs, ja jūsu grade skolas Skolotājs vienkārši izlasīt ziņu un brutālu spiesti risinājumu, Jums varētu būt gotten atbildi ar to. Tagad, protams, reālajā pasaulē, kriptogrāfija ir sarežģītāka. Tas ir teksta fragments no datorsistēma, kas ir lietotājvārdus un paroles, jo gandrīz visi mūsējie dara, un tas ir tas, kas jūsu paroles varētu izskatās, ja uzglabā uz cietā braukt bet šifrētā veidā. Tas ir ne tikai rotācija no burtiem, Ir B un B ir C. Tas ir daudz sarežģītākas, bet tā izmanto to, kas parasti sauc par slepeno atslēgu kriptogrāfija. Šis attēls stāsta šādiem stāsts ar dažiem ikonas. Kreisajā pusē, mums ir, ko mēs saucam teksta. Pasaulē kriptogrāfija, vienkāršā teksts ir tikai sākotnējais ziņojums uzrakstīts angļu vai franču valodā vai nevienā valodā. Ja jūs vēlaties, lai šifrētu, mēs caurlaide tā gleznieciski ar piekaramo atslēgu, lai daži veida algoritmu, dažas funkcijas vai programmu, ka kāds rakstīja ka scrambles burtiem cerams vairāk complicatedly nekā tikai pievienojot 13 uz katru no tiem. Ko jūs saņemsiet no šī procesa vidū tur sauc cyphertext. Tātad sava veida sexy vārda. Tas tikai nozīmē, ka tas ir šifrēts versija teksta. Un tikai tad, ja jums ir, ka pats noslēpums, 13 vai mīnus 13, jūs varētu atšifrētu ziņojumu, piemēram, ka. Tātad problēma noteikti divi, starp lietām jūs darīt, ja šajā Hacker Izdevums, jums būs rakstīt kodu kreka šīs paroles, norādītas kādi tie bija, un kā viņi šifrēta, lai gan mēs jums mazliet gada vadlīnijas gar ceļu. Jo standarta versiju, mēs ieviest pāris cipariem, šifrēšana mehānismi, viens sauc Cēzara, viena sauc Vigenere, ka joprojām rotācijas šifrēšana, kad kļūst kaut kas, B kļūst par kaut ko, bet jums ir darīt to programmiski jo tur patiešām ir noslēpums iesaistīts atslēga, kas parasti ir skaitlis vai atslēgvārdu, ka tikai Nosūtītājs un no tiem saņēmējs ziņas vajadzētu saprast. Tagad, tas patiesībā ir inkarnācijām reālajā pasaulē. Tas, piemēram, ir maz bārenis Annie noslēpums dekodera gredzenu, un jūs var faktiski īstenot šos rotācijas šifrēšana - Kļūst par kaut ko, B kļūst kaut kas - ar pāris riteņiem, viens no ārpuses, viens no iekšpuses tāds, ka, ja jūs pagriezt riteni vai gredzenu, jūs faktiski var sarindot burti ar dažādiem burtiem, iegūt slepeno kodu. Un tā kā cliffhanger uz šodienu, to, ko es domāju, es gribētu darīt, ir mazliet atavisms, ka, ja jūs ieslēdzat televizoru 24.decembrī, jūs varat skatīties Filma reklāmu nauseum par 24 stundas pēc kārtas. Bet šodien, es ņemšu atveriet to šeit! un dod mums tikai divas minūtes pedagoģiski būtisks Ziemassvētku stāsts ar nelielu puisis nosaukts Ralphie. [VIDEO PLAYBACK] -Vai tas būtu zināms visiem un dažādi, ka Ralfs Parker tiek iecelts loceklis Little Orphan Annie noslēpums aplis, un ir tiesības uz visiem apbalvojumus un ieguvumi kas notiek ar to. -Parakstīts, Little Orphan Annija. Parakstu, Pierre Andre ar tinti. Apbalvojumus un ieguvumi jau vecumā no deviņiem. [Kliegšana uz radio] Come on, let s get par ar to. Man nevajag visu, kas jazz par kontrabandistiem un pirāti. -Klausieties rīt nakts noslēdzot piedzīvojumu melna pirātu kuģis. Tagad ir pienācis laiks, lai Annie Secret Ziņa par jums biedriem par slepeno apļa. Atcerieties, ka bērni. Tikai biedri Annie Secret Circle var atšifrēt Annie slepeno ziņu. Atcerieties, Annie ir atkarīgs no jums. Nosakiet savu pins līdz B2. Šeit ir ziņa. 12, 11, 2 - -Es savā pirmajā slepenā sanāksmē. -25, 14, 11, 18, 16 - -Pierre bija liels balss šovakar. Es varētu pateikt, ka šovakar vēstījumu bija ļoti svarīga. -3, 25. Tas ir vēstījums no Annie pati. Atcerieties, nesaki nevienam. -90 Sekundes vēlāk, es esmu tikai telpā mājā, kur zēns no deviņiem varētu sēdēt privātumu un atšifrēt. Aha, B. Es devos uz nākamo. E. Pirmais vārds ir "būt." S. Tas nāk vieglāk tagad. U. 25. Tas ir R. -Nāc, Ralphie. I gotta iet. -I'll būt tiesības uz leju, Ma. Gee sīkšana. -T. O. Noteikti. Noteikti ko? Kāds bija Little Bārenis Annie cenšas pateikt? Noteikti ko? -Ralphie, Randy ir ieguvuši iet. Vai jūs, lūdzu, nākt ārā? -Nu labi, Ma. Es būšu out. -Es biju kļūst tuvāk tagad. Spriedze bija briesmīga. Kas tas bija? No planētas liktenis var karājas līdzsvarā. -Ralphie, Randy s gotta go. -I'll būt tiesības, kas paredzēti kliedz skaļi. -Gandrīz tur. Mani pirksti lidoja. Mans prāts bija tērauda lamatas. Katru poru vibrāciju. Tas bija gandrīz skaidrs. Jā, jā, jā, jā, jā. -Noteikti dzert Ovaltine. Ovaltine? Apaļīgs tirdzniecības? Dēls kuce. [END VIDEO PLAYBACK] SPEAKER 1: Tas ir CS50, un ka Būs Problēma noteikti divi. Tiekamies nākamnedēļ. SPEAKER 2: At nākamo CS50, tas notiek. SPEAKER 1: Tik viens jautājums mums nav paskatījās līdz šim ir ka funkcija norādes. Tagad, funkcija rādītājs ir tikai adresi publisko funkcija, bet līdzīgi - dēls -