[Mūzikas atskaņošanai] DAVID J. Malan: Nu labi. Tas ir CS50, un šis gals ir 2 nedēļas. Tātad šodien, mēs ejam turpināt mūsu izskatu pie kā mēs pārstāvam lietas zem hood-- attālinās No skaitļiem, piemēram, veselus skaitļus un peldošā punkta vērtības un koncentrējoties uz stīgām un galu galā vairāk interesantas programmas. Bet mēs arī to apskatīt Pāris domēna specifisku problems-- pirmais no kuriem būs būt iesaistot kriptogrāfija, māksla šifrēšanas informāciju , kurā jūs redzat iepriekš šeit ir priekšstats par Radio Orphan Annie s noslēpums dekodera gredzenu no vakardienas. 

Tas ir tiešām ļoti primitīva forma un bērniem draudzīgu forma cryptopgraphy saskaņā ar kuru šis gredzens ir divas disks-- viens iekšpusē un viens ārpusē. Un, pagriežot vienu no tiem, jūs varat būtībā rindā vēstules, piemēram, A līdz Z ar citiem burtiem piemēram, B caur A. citiem vārdiem sakot, Jūs varat burtiski pagriezt alfabētu, tādējādi nāk klajā ar kartēšanu no vēstules vēstulēm tā, ka, ja jūs gribēju nosūtīt slepenu ziņu lai kāds, piemēram, Annie, jūs varētu uzrakstīt nosaka jūsu ziņojumu un pēc tam rotēt burti, kur, ja tu domā teikt "A", jūs tā vietā saka "B" tu teikt, "B" tu nevis teikt "C" - vai kaut kas nedaudz vairāk gudrs nekā that-- un tad, galu galā, tik ilgi, kamēr Annie ir šo dekoderu gredzenu, viņa var atšifrēt ziņu. Tagad, jūs varat atgādināt, jo fakts, ka šis tika izmantots ļoti slavens filmu, kas spēlē reklāmas nauseum laikā Ziemassvētku sezonā. Pieņemsim apskatīt šeit. Ralphie PARKER: "Be to zināms visiem kopsavilkumā ka Ralph Parker tiek iecelts biedrs Little Orphan Annie Secret Aplis, un ir tiesības uz visiem godina un ieguvumi notiek to. " 

Ralphie PARKER (stāstīja): Parakstīja Little Orphan Annie. Parakstījis, Pierre Andre! Ar tinti. Godina un ieguvumi, jau deviņu gadu vecumā. 

[Mūzikas atskaņošanai] 

[RADIO čivināšana] Ralphie PARKER: Come on. Iesim ar to. Man nav nepieciešams visu šo džeza par kontrabandistu un pirāti. Radio diktors: Klausies rīt nakts noslēguma piedzīvojumu The Black Pirate Ship. Tagad ir pienācis laiks, lai Annie s Secret Vēstījums jums biedriem no Secret Circle. Atcerieties, bērni, tikai dalībnieki Annijas Secret Circle var atšifrēt Annie slepeno ziņojumu. 

Atcerieties, Annie ir atkarīgs no jums. Iestatīt savu tapas B-2. Šeit ir message-- 12, 11, 2-- Ralphie PARKER (stāstīja): I esmu savā pirmajā slepenā sanāksmē. Radio diktors: --25, 14, 11, 18, 16-- Ralphie PARKER (stāstīja): Ak, Pierre bija ļoti balss šovakar. Es varētu pateikt, ka šovakar vēstījums bija ļoti svarīgi. 

Radio diktors: --3, 25. Tas ir vēstījums no Annie pati. Atcerieties, nesaki nevienam. 

[Panting] Ralphie PARKER (stāstīja): Deviņdesmit sekundes vēlāk, es esmu vienīgajā istabā māju, kur zēns no deviņiem varētu sēdēt privātumu un atšifrēt. Ah. "B." 

[Chuckles] 

Ralphie PARKER (stāstīja): Es devos uz nākamo. "E." Pirmais vārds ir "būt." Jā! Tas nāk vieglāk. "U." 

[Chuckles] 

RANDY PARKER: Au, come on, Ralphie. I gotta go! 

Ralphie PARKER: Es būšu tiesības uz leju, Ma. Gee sīkšana. "T." "O." "Noteikti to. "" Noteikti "ko? Kas bija Little Orphan Annie cenšas pateikt? "Noteikti" ko? Māte: Ralphie, Randy ir ieguvuši iet. Vai jūs, lūdzu, nākt ārā? 

Ralphie PARKER: Nu labi, mamma! Es būšu out! Ralphie PARKER (stāstīja): Es biju kļūst tuvāk tagad. Spriedze bija briesmīga. Kas tas bija? Planētas liktenis var pakārt līdzsvarā. 

Māte: Ralphie, Randy got iet! 

Ralphie PARKER: Es būšu ārā, lai kliedz skaļi! Ralphie PARKER (Stāstīja): 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ā! 

Ralphie PARKER: "Noteikti dzert savu Ovaltine. " Ovaltine? Apaļīgs komerciāls? 

[Mūzikas atskaņošanai] 

Ralphie PARKER: Dēls kuce. 

[Smejas] 

DAVID J. Malan: Tātad, kas tad ir ieskatu par kādu kriptogrāfija var būt this-- a dzert no vakardienas. Tik ātri paziņojums. Ja jūs esat brīvi tas Piektdien plkst 13:15, un būtu vēlētos pievienoties mums CS50 pusdienas, dodies uz šo URL šeit. Pirmais brauc, pirmais kalpot kā parasti. Taču laika gaitā, mēs pārliecinieties, ka lielākā daļa ikviens, kurš vēlētos piedalīties var ieplānot gudrs. 

Tātad stīgas. Mums ir Zamyla-- kuriem jūs esat tagad met visticamāk problemātiskajās Set 1-- kuru vārds ir uzrakstīti tādējādi. Un domāju, ka jūs ierakstījāt savu vārdu datorprogrammā, kas ir izmantojot kaut ko līdzīgu getString. Lai iegūtu šie keystrokes, cik mēs iet par pārstāvot string, vārds, punkts vai vairākas vēstules, piemēram, tie šeit? 

Mēs runājām pēdējo reizi par veseli skaitļi un problēmas kas rodas ar skaitlim pārplūdi un peldošā punkta vērtības un problēmas, kas Pagaidu precizitāti. Ar stīgām, mēs vismaz ir mazliet lielāku elastību jo strings-- tikko reālajā world-- var būt diezgan patvaļīgs garumu. Diezgan īss, diezgan garš. Bet pat tad, mēs ejam, lai uzskata, ka datori var dažreiz izsīkšanai atmiņas un pat ne uzglabāt pietiekami lielas virkni. 

Bet tagad, sāksim vizualizēt string kā kaut kas šajās kastēs šeit. Tātad sešas šādas kastes, katrs no kuriem attēlo rakstzīmi vai "char." Tik atgādināt, ka "char" - c-h--r-- ir viens no iebūvētajiem datu tipiem C. Un, kas ir jauki, ir tas, ka jūs varat izmantot ka veida kā struktūras elements, puzzle gabals, ja vēlaties, lai veidotu lielāks datu veids, ka mēs turpināsim izsaukt "virkni." 

Tagad, kas ir noderīgi par domāšanu par lietām, piemēram stīgas šādā veidā? Nu, izrādās, ka mēs varam faktiski sviras šo struktūru faktiski piekļūt atsevišķas rakstzīmes tādā diezgan vienkāršā veidā. Es esmu gatavojas iet uz priekšu un izveidot failu ar nosaukumu "stringzero.c," bet jūs varat zvanīt to ko jūs vēlaties. Un kurss tīmekļa vietnē ir jau šajā piemērā iepriekš, tāpēc jums nav nepieciešams tipa viss out. 

Un es iešu uz priekšu un pirmo reizi darīt int galvenais tukšumu. Un dažu dienu laikā, mēs sāksim kaitināt intervālu ko par spēkā neesošu ir šeit, kāpēc tas ir int blakus galvenais, un tā tālāk. Bet tagad, pieņemsim arī turpmāk kopēt paste to. 

Es esmu gatavojas pasludināt virkni sauc s. Un es esmu gatavojas atgriezties no GetString neatkarīgi lietotājs veidiem. Tas būs vienkāršs programma, nekādi norādījumi, Es esmu tikai gatavojas akli sagaida, ka lietotājs zina ko darīt, lai saglabātu to vienkārši. 

Un tagad es esmu nāksies cilpa. Un iekšpusē manu par cilpa es esmu nāksies int i izpaužas nulle. Un man ir, atkal, tikai konvencija, indekss mainīgais skaitīšanai, bet es varētu nosaukt šo ko es gribu. Es esmu gatavojas darīt, man ir mazāks than-- labi Zamyla vārds ir seši burti garš. Tāpēc es esmu gatavojas grūti kods, kas tur tagad. 

Un tad es ++. Un tagad iekšpusē tiem cirtaini bikšturi es esmu gatavojas darīt printf, un es gribu, lai izdrukātu vienu rakstzīmju laikā. Tāpēc es esmu gatavojas izmantot% c par varbūt pirmo reizi. Un tad es gribu, lai drukātu katru raksturs savā rindā. Tāpēc es esmu gatavojas nodot maz slīpsvītru n tur. Aizvērt quote. 

Un tagad es gribu kaut ko darīt šeit. Es gribu izdrukāt īpaša vēstule virknē, s, kā es esmu, atkārtojot no nulles līdz sešiem. Citiem vārdiem sakot, es gribu izdrukāt i'th raksturu s. Tagad, kā es varu darīt? 

Nu līdzīgi kā kastēm pārstāvība šeit veida, uzburt jēdzienu boksa burti, jūs varat tāpat darīt sintaktiski C, vienkārši norādot, Es gribu, lai izdrukātu S i'th raksturs. Izmantojot kvadrātiekavas uz datora klaviatūras ka ASV klaviatūras parasti virs jūsu atgriešanās atslēgu. 

Tātad tas nav gluži pareizi vēl, kā jums var būt ievērojuši. Bet es esmu gatavojas veida akli veidot uz priekšu šeit. Un es esmu gatavojas darīt veikt virkni 0. Bet pirms es to izdarītu, pieņemsim redzēt, ja mēs nevar paredzēt dažas kopīgas kļūdas. Vai tas notiek, lai apkopotu? Nē, es esmu trūkst visu ķekars lietas. Bibliotēkas es dzirdēju. 

Tātad kas header failus Es varētu vēlēties pievienot šeit? Jā. 

AUDITORIJA: Jums ir nepieciešams standarta I / O [nedzirdama] 

DAVID J. Malan: Excellent. Tāpēc man ir nepieciešams standarta I / O. Par to, ko mērķis es gribu standarta I / O? Par printf. Tā ietver stdio.h. Un jūs arī ierosināt, ka es arī CS50 bibliotēka kāda iemesla dēļ? Ir virknes. Tātad mēs redzēsim, ko CS50 bibliotēka dara lai radītu šo jēdzienu virknes. Bet tagad, jūs varat vienkārši domāt par to kā faktisko datu tipu. 

Tāpēc, ka, šķiet, ir nedaudz sakopta. Un tagad es esmu gatavojas iet uz priekšu un tiešām darīsim virkni 0. Sast. Tā ka ir labs. So ./string0 ļaujiet man tuvinātu lai mēs varam redzētu ciešāk, kas notiek. Enter. Z-A-M-Y-L-ievadītu. Un mēs esam jāizdrukā uz Zamyla nosaukumu. 

Tā ka ir diezgan laba. Tāpēc tagad iesim uz priekšu un palaist šo programmu no jauna, un ierakstiet out Daven vārdu un uzvārdu. Pārsteigums, pārsteigums. Enter. Hmm. Mēs neesam iespiests Daven s pilns vārds pareizi. Tagad tas būtu acīmredzama Atskats dēļ, ko, veida, stulba dizaina lēmums? 

Jā, es cītīgi kodē seši iekšpusē mana cilpa. Tagad es darīju, ka tikai tāpēc, ka Es zināju Zamyla vārdu bija būs seši burti. , Bet noteikti tas nav vispārējs risinājums. Tātad izrādās, mēs varam dinamiski izdomāt garumu virknes zvanot funkciju sauc strlen. 

Atkal, apzināti kodolīgi nosaukts vienkārši lai būtu ērtāk rakstīt. Bet tas ir sinonīms iegūt garumu virknes. Es iešu atpakaļ manā termināli logu un atkārtoti palaist kompilatoru. Bet tas kliedza uz mani. Netieši atzīstot bibliotēkas funkciju strlen ar tipu neparakstīts int const-- Es esmu zaudējis. Pilnībā. 

Tātad, jo īpaši savu acis sāk glazūra vairāk ar kļūdu ziņojumi, piemēram, tas, koncentrējoties godīgi par pirmajiem dažiem vārdiem. Mēs zinām, problēma ir līnija 8, kā norādīts šeit. Un tas ir auklas 0.c. Netieši atzīstot bibliotēkas funkciju strlen. Tāpēc, ka parasti gatavojas būt modelis kļūdu ziņojumus. Netieši atzīstot kaut ko. 

Tātad īsumā, kādi ir man likās ir darīts attiecībā uz līnija 8, šeit. Kāds varētu būt risinājums vēl Ja jūs nekad neesmu lietojis strlen sevi? 

AUDITORIJA: Daļa no citu bibliotēku? DAVID J. Malan: Part ar atšķirīgu bibliotēkā. Tātad tas ir deklarēts, lai runāt. Tas ir minēts kādā failā izņemot stdio.h un CS50.h. Tagad, kad tas ir noteikts? Lai būtu godīgi, jums ir vai nu tikai zinu, tas off virs jūsu galvas, vai jūs Google šo un uzzināt. Vai zināt, es esmu atvēra ar CS50 Appliance termināla programmu, kas ir tikai liels, pilnekrāna versiju to, kas ir apakšā gedit loga. 

Un izrādās, ka tur ir līdzīgi īss komanda, ko sauc par cilvēks rokasgrāmatā, kur, ja jūs tipa par funkciju vārdu un hit Enter, jūs saņemsiet atpakaļ diezgan mistisks dokumentācija. Tas ir tikai teksts, kas parasti izskatās nedaudz kaut kas līdzīgs šim. Tas ir nedaudz milzīgs pēc pirmā acu uzmetiena. Bet atklāti sakot, es esmu gatavojas let manas acis glazūra vairāk un tikai koncentrēties uz daļu Man rūp, lai brīdi. 

Kas tas ir. Kas izskatās strukturāli līdzīgi kaut kas es esmu iepazinies ar. Tiešām cilvēks lapas, tāpēc runāt, jums pateiks kādā header failu funkciju tāpat strlen ir definēts. Tāpēc es iešu atpakaļ tagad uz gedit. Un es iešu uz priekšu un pievienot šeit #include un saglabājiet failu. 

Es esmu gatavojas, lai notīrītu ekrānu ar Control L Ja jums ir jautājums. Un es esmu gatavojas atkārtoti palaist marku string.0, apkopo šoreiz. ./string.0 Zamyla. Tas šķita strādāt Ļaujiet man iet priekšu un atkārto to ar Davenport. Enter. Un tas arī šķita, lai strādātu. 

Tātad, mēs varam darīt, mazliet labāk, nekā tas, tomēr, mēs varam sākt jāsakopj lietām up tikai mazliet. Un es esmu gatavojas, lai faktiski ieviest viena cita lieta tagad. Es iešu uz priekšu un saglabāt to citā failā. Un es esmu gatavojas, lai izsauktu šo failu string1.c tikko jāsaskan ar kodu jūs varēsiet atrast internetā. 

Un pieņemsim koncentrēsies uz tieši tas pats kods. Izrādās, ka es esmu ir sava veida ņemšanas par pašsaprotamu to, ka manā klēpjdators, un, savukārt, CS50 ierīces ir daudz atmiņu, daudz RAM, daudz telpas baitu kurā es varētu saglabāt stīgas. 

Bet realitāte, ja es drukāti ilgi pietiekami, un pietiekami keystrokes, Es varētu teorētiski veidam vairāk burtiem par manu datoru fiziski ir atmiņas. Un tas ir problemātiski. Daudz, piemēram, int var tikai skaits tik augstu, teorētiski, Jūs varat piepildīt tikai tik daudz rakstzīmes datora RAM vai Random Access Memory. 

Tāpēc man bija labāk prognozēt šo problēmu, pat lai gan tas varētu būt reta stūra lieta, lai runāt. Nenotiek, ka bieži, varētu notikt. Un, ja tas notiek, un man nav prognozēt un programma to, mana programma varētu darīt, kas zina, ko. Freeze, pakārt, reboot, neatkarīgi. Kaut gaidīts varētu notikt. 

Tātad, ko es esmu gatavojas darīt Tagad, turpmāk tiešām, ir pirms I kādreiz akli izmantot mainīgo, piemēram, s ka ir piešķirts atgriešanās vērtību dažas citas funkcijas, piemēram, getstring, Es esmu gatavojas, lai pārliecinātos ka tā vērtība ir derīga. Tāpēc es zinu, tikai izlasot CS50 dokumentācija par getstring, kas galu galā mēs norādīt jums, ka getstring atgriež īpašu simbolu sauc NULL, N-U-L-L visās caps, ja kaut kas noiet greizi. 

Tātad normāli, tā atgriež virkni. , Bet pretējā gadījumā, ja tas atgriež N-U-L-L-- mēs beidzot redzēt, kas tas īsti means-- ka tikai līdzekļus kaut kas slikts noticis. Tagad tas nozīmē, līdzīgi kā nulles, Es varu pārbaudīt stāvokli šeit C, ja s nav vienāda NULL. Tātad, ja jūs esat nav redzējis šo pirms, tas vienkārši nozīmē, nav vienāds. 

Tātad, tas ir pretējs vienlīdzīgu vienādības, kas, atgādināt, atšķiras no single vienāds, kas ir uzdevums. Tātad, ja s nav vienāds NULL, tikai tad darīt Es gribu izpildīt šos koda rindiņas. Tātad citiem vārdiem sakot, pirms es nirt akli un sākt atkārtojot vairāk s, un uzskatot to kā arī tā ir secība rakstzīmes, es esmu gatavojas vispirms pārbaudīt, pagaidiet minūti, ir s noteikti nav vienādam ar īpašu vērtību, NULL? 

Jo, ja tā ir, sliktas lietas var notikt. Un tagad, pieņemsim, ka sliktas lietas notiek nozīmē jūsu programma avarē, un jūs nevarat vienmēr atgūt. Tātad godīgi sakot, tas izskatās neglītāks. tas ir sava veida mulsinoši tagad skatienu. Bet tas kļūs iepazinušies pirms ilgi. 

Bet es esmu gatavojas ierosināt tagad vienu citu uzlabojumu. Tas ir uzlabojums pareizību. Tagad mana programma ir pareizs, jo retos gadījumos, kas nav pietiekami daudz atmiņas pastāv, es ar to rīkoties, un es ņemšu tikai darīt neko. Man vismaz nav crash. 

Bet pieņemsim do galīgo versiju šeit. Un failu sauc string2.c. Es esmu gatavojas, lai ielīmētu ka pats kods tikai brīdi, un es esmu gatavojas, lai izceltu šo līnija, 11, šeit, tikai brīdi. Tagad realitāte ir tāda, ka smart kompilatoru tāpat šķindēt varētu salabot mums aizkulises bez mūsu nekad nezinot. Bet pieņemsim domāt par to fundamentāli kā problemātisku dizainu. 

Šī līnija kods ir, protams, sakot, sāktu kādu mainīgo i ar 0. Tas ir diezgan vienkārši. Un to, kas atkal ir šis apgalvojums, šeit, es ++, dara? Mēs esam redzējuši to pirms, bet mēs nav īsti par to runāt. 

AUDITORIJA: palielināšanai i. 

DAVID J. Malan: palielināšanai i. Tātad par katru atkārtojuma caur šis cilpa, katru ciklu, jūs palielināšanai i pa vienam. Tātad, tas kļūst lielāks, un lielāks, un lielāks kamēr cilpa izbeidzas. Kā tas beidzas? Nu tur ir šis vidus nosacījums, kas mēs esam izmanto iepriekš. Jūs esat redzējuši, un walkthroughs in P komplektā. 

Bet kas tas ir teiciens? Vai šādu cilpu, lai Kamēr man ir mazāks par ko? AUDITORIJA: virknes garumu. DAVID J. Malan: virknes garums. Tātad tas nozīmē diezgan tīri angļu šajā ziņā. Tagad problēma ir tā, ka katru reizi, kad I atkārtot, izmantojot šīs cilpas teorētiski, Es uzdodu šo jautājumu. Ir i mazāks par virknes garumu s? Ir i mazāks par virknes garumu s? 

Tagad i mainās katrā atkārtojuma? Tas ir. Sakarā ar ++. Tāpēc katru atkārtojuma i kļūst lielāka. Bet ir s kļūst lielāks, vai mazāks, vai mainot vispār? Nē Tātad konstrukcijas ziņā, viena no asīm gar kuru mēs cenšamies izvērtēt kodu klasē, tas jūtas veida stulba. 

Tāpat kā jūs burtiski, par katru atkārtojuma Šīs cilpas lūdzot pats damn jautājums atkal, un atkal, un atkal, un burtiski tas nekad nemainīsies. Vismaz, ja es neesmu aizkustinošs s un mēģina mainīt saturu s. Lai es varētu darīt mazliet labāk nekā šis. 

Un tas, ko es esmu gatavojas darīt, ir ne deklarēt tikai vienu mainīgo i, bet otrs mainīgais es ņemšu patvaļīgi, bet konvencionāli, sauc to n. Piešķirt n ir vienāds ar virknes garums s. Un tad vairāk nekā šeit, es esmu gatavojas darīt gudrs nedaudz optimizāciju, tāpēc teikt, ka beigās, dienā vairs nav pareizs vai ne mazāk pareizi nekā agrāk. Bet tas ir labāks dizains. Ar to, ka es esmu, izmantojot mazāk laika, mazāk CPU cikli, tāpēc runāt, atbildēt pats jautājums, bet tikai vienu reizi. 

Visus jautājumus par šo vispār uzlabošanas princips, saka, kādas programmas efektivitāte? Yeah? AUDITORIJA: Kāpēc jums izmantot [nedzirdama]? DAVID J. Malan: Labs jautājums. Tad kāpēc mēs nodot ++ uz beigām i nevis sākums i? Šajā gadījumā, tā ir nav funkcionālas ietekmes. Un vispār, man ir tendence izmantot Postfix operatoru tāpēc, ka tas ir nedaudz vairāk skaidrs, kā , kad darbība notiek. 

Tiem svešs, ir vēl viens paziņojumi, kurā jūs varētu darīt ++ i. Tie ir funkcionāli ekvivalents šajā gadījumā jo tur nekas cits ap šo incrementation. Bet jūs varat nākt klajā ar gadījumi un rindas koda kurā kas padara starpību. Tātad kopumā, mums nav pat runāt par šo vienu. Jo atklāti sakot, tas padara jūsu kods sexier, un veida lietusmētelis, un rakstzīmju. Bet realitāte ir tā daudz grūtāk, Es domāju, ka pat man wrap manu prātu ap to dažreiz, rīkojumu darbību. Tā kā malā, ja jūs tiešām nepatīk tas, pat ja tas ir sava veida sexy looking, jūs varat arī darīt i + = 1, kas ir uglier versiju pati ideja par Postfix incrementation. 

Es saku, un jums vajadzētu jokot par to, bet jums būs redzēt kodu, kaut kas skaists pirms ilgi. 

[Smiekli] 

DAVID J. Malan: Right? Jā. Jautājums vidū. 

AUDITORIJA: Vai jums ir nepieciešams teikt int n? DAVID J. Malan: You do nevajag teikt int n. Tāpēc, ka mēs jau teica int, Jums nav nepieciešams, lai saku vēlreiz. Nozvejas ir tas, ka n ir tāds pats datu tips kā i. Tātad tas ir tikai ērtības šeit. Jā. 

AUDITORIJA: Vai jums iet pāri drukas varoņa s kronšteins i atkal? DAVID J. Malan: Protams. Tātad% c, atceros no pagājušā laiks, ir tikai viettura. Tas nozīmē nodot char šeit. slīpsvītru n, protams, vienkārši līdzekļi, kas līnijas pārtraukumu šeit. Tāpēc, ka tikai atstāj, tagad, šis gabals jaunu sintaksi. Un tas ir burtiski sakot, grab stīgu sauc s un iet saņemt tās i'th raksturs, lai runāt. 

Un es glabāt sakot i'th raksturs jo par katru atkārtojuma šīs cilpas tas ir tā, it kā mēs drukāšanu , pirmkārt s kronšteins 0, kā programmētājs varētu teikt. Tad s kronšteins 1, pēc tam s bracket 2, tad 3, pēc tam 4. Bet, protams, tas ir mainīgs, tāpēc es vienkārši izteikt to ar i. 

Galvenais, lai gan, ir saprast, it īpaši, ja jūs esat nav tika acclimating šajā pasaulē plānošanas, kur mums visiem šķiet skaitīt no nulles, gotta sāk skaitīt no nulles tagad. Jo stīgas, pirmā zīme, z in Zamyla ir labāk vai sliktāk dzīvosim pēc atrašanās nulli. 

Labi, tāpēc ļaujiet man sniegt mums atpakaļ šeit Zamyla un redzēt to, kas īsti notiek gada zem motora pārsega. Tātad tur ir šis jēdziens tipa liešana. Jums varētu būt tiešām spēlēja ar šo jau, varbūt hacker izdevums P iestatīt vienu. Bet veids liešana tikai atsaucas uz Spēja C un dažas citas valodas pārvērst vienu datu tipu uz citu. 

Tagad, kā varētu mēs redzam diezgan vienkāršākā? Tātad tas, atgādināt, ir sākums no angļu alfabēta. Un konteksts, atgādināt, no kā pirms nedēļas ir ASCII. American Standard Code Informācijas apmaiņai. Kas ir tikai ļoti tālu , sakot kartēšanu no vēstulēm uz numuriem, un no numuriem uz vēstulēm. 

Tātad, izmantojot M šeit, dot dot dot, līnijas ar, atgādināt, decimāls skaitlis 65 uz augšu. Un mēs nerunājām par to skaidri, bet, protams, tur ir līdzīgi numuri mazajiem burtiem. Un tiešām, tur ir. Pasaules nolēma dažus gadus atpakaļ, ka maz, mazie burti, būs 97. Un maz b notiek būt 98, un tā tālāk. 

Un jebkuru citu atslēgas klaviatūras, tur ir būs Līdzīga bitu. Vai līdzvērtīgi, decimāls skaitlis. Tātad jautājums pie rokas, tad ir, kā mēs varam faktiski redzēt to zem pārsega? Tāpēc es iešu pār gedit vēlreiz. Un nevis veidam tas viens no nulles, Es iešu uz priekšu un vienkārši atvērt kaut ko No šodienas kodu sauc ASCII nulles. 

Un ASCII nulle izskatās šādi. Tāpēc pieņemsim wrap mūsu prātus ap šo. Tātad, pirmkārt, es esmu komentēja kods, kas ir jauki. Jo tas ir burtiski man saki, ko gaidīt, parādīt kartēšanu lielajiem burtiem. Tagad man nav gluži zināt, ko es domāju ar, ka, tāpēc pieņemsim izsecināt. 

Angļu valodā, varbūt nedaudz techie angļu, Kāda line 18 parādīties , dara mūsu labā? Vienkārši līniju 18. Ko tas liekot? Ko tas notiek, lai uzsāktu šeit? 

AUDITORIJA: cilpa. 

DAVID J. Malan: cilpa. Un cik reizes ir kas dodas uz atkārtot? AUDITORIJA: [interposing Voices] sešas reizes. DAVID J. Malan: Nav sešas reizes. AUDITORIJA: 26 reizes. DAVID J. Malan: 26 reizes. Jā, žēl. 26 reizes. Kāpēc? Nu, tas ir mazliet dīvaini, bet Esmu sācis skaitot no 65. Kas ir dīvaini, bet nav nepareizi. Tas nav slikti vienu pateikt. Un es daru, ka tikai jo, šajā piemērā Es esmu veida paredzēšana ka kapitāls bija 65. Tagad tas nav visvairāk elegants veids, kā to izdarīt, lai veida cietā koda nesaprotams vērtības, ka neviens ir kādreiz sagaidīt atcerēties. 

Bet tagad, ievēroju, ka es esmu darot augšup pa 65 plus 26. Jo acīmredzot es pat nevēlos darīt aritmētisko manā galvā. Tāpēc es let kompilatoru darīt. Bet tad par katru cilpu, katra atkārtojuma cilpas, es esmu palielināšanai i. 

Tāpēc tagad tas izskatās mazliet noslēpumains. Bet mums ir jābūt pamata ēka bloki ar kuru saprast. % C ir tikai vietturis par char. % I ir vietturis int. Un izrādās, ka, izmantojot šo Jaunais sintakse, tas iekavās iekļaujams, tāpēc runāt, tāpēc datu tipu iekšpusē iekavās, Es varu piespiest kompilators, lai ārstētu i ne ir vesels skaitlis, bet kā char. 

Tādējādi parādot man raksturs ekvivalents šo numuru. Tagad šeit lejā, šis kods ir diezgan daudz identiski. Es tikai gribēju, lai super skaidri fakts , ka es esmu sākot no 97, kas ir burti. Uz augšu pa 26 vairāk burti. Un es esmu doing-- atkal, liešana i, lai runāt. Vai tipa liešana i, lai runāt. 

No int uz char. Tātad gala rezultāts būs, atklāti sakot, informācija, ko mēs jau zinām. Es esmu gatavojas darīt ascii-0 dot-- nevar dot c. Paziņojums, jūs, iespējams, ka iespēju kļūda, jo es vienkārši darīju nejauši. Veikt ASCII-0. Tagad es esmu gatavojas darīt ./ascii-0. Es tuvinātu, un diemžēl tas notiek, lai ritinātu pie ekrāna. Bet mēs redzam visu diagrammu kur kartes 97, b kartes līdz 98, un, ja mēs ritinātu uz augšu tālāk , Protams, kartes, lai 65. Tātad tas ir tikai teikt, ka Ko mēs esam sludināja, ir šī līdzvērtība ir patiesībā notiek realitātē. Tik ātri modifikācija to. Ļaujiet man atvērt ASCII-1.C. Un paziņojums šo gudrs, kārtot gada, skaidrojums par to. Tas ir ascii-1.c, un ievērosiet šo crazy lieta. 

Un tas tiešām nonāk pie sirds par to, ko datori dara. Pat ja mēs cilvēkiem būtu neskaitās ziņā letters-- Man nav jāsāk domāt, viss labi, tad b, un izmantot tos, lai saskaitītu fiziskus objektus. Jūs, protams, varat teikt, ka es gribu sāktu kādu mainīgo sauc C- bet es varētu būt sauc šo anything-- tāpēc c ir inicializēts kapitāla A. 

Jo beigās, dienā, datoru nav vienalga, ko jūs uzglabātu, tas tikai rūpējas, kā jūs vēlaties sniegt šo informāciju. Kā jūs vēlaties datora uz interpretēt šo modeli bitu? Tātad tas nav kaut kas es vispār ieteiktu darīt. Tas patiešām ir tikai piemērs nodot, ka jūs varat absolūti inicializēt vesels skaitlis uz char. Jo zem kapuci no char, protams, ir tikai vairāki 0-255. 

Tātad, jūs noteikti var ielieciet to iekšpusē int. Un ko tas arī parāda, ir tas, ka mēs var konvertēt no viena tipa uz citu, šeit, galu galā drukāšanas pašu. Un patiesībā, tas man būs noteikt online-- tika domāts, lai teikt, atkal šeit. Ļaujiet man sakopt šo tiešsaistē, un mēs redzēt tiešsaistes walkthrough, cik nepieciešams, kas bija paredzēti tur. 

OK. Tātad pēdējais piemērs tagad iesaistot a s un b s un tad mēs veikt lietas augšu iecirtums. Tātad ar a gados un b gados un c ir šajā kapitalizācijas un līdzvērtība to, pieņemsim ieskatieties šajā piemērā, šeit. Vēl viens kods piemērs. Mēs atvērt vienu, kas ir jau ir, tāpēc mēs nav tā tipa visu ārā no nulles. 

Un paziņojuma gaidot mēs izmantojot vairākas galveni attēli, kuru vidū ir mūsu jaunais draugs, string.h. Tagad tas izskatās, sākumā skatienu, mazliet noslēpumains. Bet pieņemsim redzēt, ja mēs nevaram spriest caur to, kas notiek šeit. Pirmkārt man virkni no lietotāja, un man, ka virknes mainīgo sauc s. Kopēt paste no iepriekš. Saskaņā 22, es esmu acīmredzot dara tieši to, ko Es darīju pirms brīža, es esmu atkārtojot pār rakstzīmes s. 

Un jaunie triku šeit izmantojat stīgu garums, nepilngadīgais optimizācija uzglabāšanas virknes garumu n, nevis zvanot strlen atkal, un atkal, un atkal. , Un tikai pārbaudi, ka i ir mazāks par n. Tagad šeit, lietas iegūt nedaudz interesanti. Bet tas ir tikai pieteikums Šā paša jaunu ideju. Kas in English dara s kronšteins i pārstāv? 

AUDITORIJA: Counting katrs raksturs [nedzirdama]. 

DAVID J. Malan: Counting katru rakstzīmi. Un pat vairāk kodolīgi, s kronšteins i atspoguļo to, ko? Vai jūs sakāt. Nedrīkst likt jums uz vietas šeit. 

AUDITORIJA: Well-- DAVID J. Malan: Tātad, ja vārds is-- ja virkne ir Zamyla, kas starts-- AUDITORIJA: --you nodarbojas ar rakstzīmes separately-- DAVID J. Malan: Labi. Tieši tā. Kvadrātiekava notācija ļauj piekļūt katru rakstzīmi atsevišķi, tik s kronšteins 0 būs pirmais simbols virknē. s kronšteins 1 būs otrais, un tā tālāk. Tātad jautājums, es esmu jautā, šeit, šajā stāvoklī ir tas, ko? Vai i'th raksturs s, kas ir lielāka par vai vienāds burti? Un ko tas nozīmē, šeit, ar dubultu ampersands? AUDITORIJA (KOPĀ): Un. DAVID J. Malan: Un. Tas ir tikai līdzvērtīgi to. Un nav atslēgvārds C, jums ir lietošanu, kaitinoši, Ampersand Ampersand. Un tas, savukārt, ir jautā, ir s s i'th rakstura mazāks vai vienāds burti z? Un atkal, šeit ir, ja izpratne pamatā īstenošana dators ir jēga. Ievērojiet, ka, lai gan man ir dot dot dot tur, izskatās caur z ar mazajiem tiek visi kaimiņu vērtības, līdz no 97 uz augšu. 

Un pats par lielajiem burtiem, sākot no 65. Tātad takeaway, tad, ir tas, ka angļu valodā, kā jūs raksturotu kāda līnija 24 dara? Yeah? 

AUDITORIJA: 24. tā pārbaudi, lai redzētu vai katrs raksturs ir mazie burti. DAVID J. Malan: Tas ir pārbaudīt, vai katrs raksturs ir mazo burtu. Tātad vēl kodolīgi, ir i'th raksturs s mazie burti? Tas ir viss, ko mēs esam paužot šeit loģiski, mazliet cryptically, bet galu galā diezgan vienkāršākā. Ir s s i'th rakstzīmju mazie burti? 

Ja tā, un šeit ir, ja lietas get nedaudz prāta saliekuma tikai brīdi, ja tas tā ir, aiziet priekšu un izdrukāt raksturs. Tātad tas ir tikai vietturis bet ko raksturs? Kāpēc es daru s kronšteinu i mīnus šis izteiciens šeit? 

Nu ievērosiet modeli šeit. Faktiskais skaits nav jautājums tik daudz. Bet paziņo, ka 97 ir cik tālu prom no 65? 

AUDITORIJA: 32. 

DAVID J. Malan: 32. Cik tālu ir 98 no 66? 

AUDITORIJA: 32. 

DAVID J. Malan: Little c no lieliem C? 32. Tātad tur ir 32 apiņi no viens burts uz citu. Tik atklāti sakot, es, varētu vienkāršot to, ka. Bet tad es esmu sava veida grūti kodēšanas šis līmenis izpratne ka lasītājs ir jebkad sapratīšu. Tāpēc es esmu gatavojas vispārināt to kā, es zinu, ka mazie burti ir lielāki. Es zinu, ka lielie burti ir mazākas vērtības, ironiski. 

Bet tas ir vienlīdz efektīvs sakot atņemt 32 no u grupā i. Tātad saistībā ar šiem burti, ja burts notiek, ir, mazie burti , un es atņem 32, kāda ietekme tas, kas ir, matemātiski, par mazajiem burtiem? AUDITORIJA: Capitalizes-- DAVID J. Malan: kapitalizē to. Un tiešām, tas ir iemesls, kāpēc mūsu Programma sauc kapitalizēt nulli. Šī programma vai nu kapitalizē vēstuli, pēc pārbaudes, ja tas ir tiešām mazo burtu. Pretējā gadījumā, 30 līnija, ko man darīt, ja tas nav mazo burtu, kas es esmu meklē pie īpaši atkārtojuma cilpa. Vienkārši izdrukāt to ārā. 

Tāpēc nemainās sīkumi tas nav pat mazie burti. Ierobežot sevi maz pa maz z. Tagad tas ir diezgan mistisks. Bet beigās, dienā, tas ir tas, kā mēs reiz, nācās īstenot lietas. Ja es tā vietā atvērt kapitalizēt viens, oh paldies dievam. Tur ir funkcija aicināja augšējo, kas var darīt visu, mēs vienkārši darīja pie diezgan zemā līmenī. 

Tagad, lai augšējā ir interesanti jo tas ir deklarēta failā, un jūs tikai zināt, tas , pārbaudot dokumentāciju, vai tiek teica, teiksim, klasē, kur tā pastāv, jo failu sauc ctype.h. Tātad šis ir vēl viens jauns draugs mūsējie. Un, lai augšējā dara tieši ko tās nosaukums liecina. 

Jūs varat pāriet, kā argumentu, starp šie iekavas, daži raksturs. Es esmu gatavojas iet uz i'th raksturs no s, izmantojot mūsu iedomātā jauno notācija iesaistot kvadrātiekavas. Un veikt uzminēt, kāda ir atdeve vērtība uz augšējā acīmredzot notiek būt? Lielais burts. Lielais burts. 

Tātad, ja es iet ar mazajiem burtiem a, cerams, pēc definīcijas, lai augšējā, tas notiek, lai atgrieztos lielajiem A. Pretējā gadījumā ja tas nav mazo burtu, kas pirmā vieta, es tikai to izdrukāt. Un tiešām, paziņojums Otrs draugs šeit. Ne tikai augšējo pastāv, bet ir mazāks, kas faktiski atbild, ka jautājums par mani. 

Tagad tas, kurš rakstīja šīs lietas, 10s of Pirms gadiem, jūs zināt, ko? Īstenoti, lai augšējā un ir pazemināt izmantojot kodu, kā šis. Bet atkal, kas atbilst šī ideja abstrahējoties prom, veida, zemāka līmeņa īstenošanas detaļas. Un stāv uz pleciem cilvēku kas nāca pirms mums, izmantojot funkciju patīk augšējā un apakšējā, kas lieliski pietiekami ir labi nosaukts pateikt, ko viņi dara, ir brīnišķīgi paradigma pieņemt. 

Tagad, izrādās, ka, ja es izlasīju cilvēks lapa, teiksim, uz augšējā, Es iemācīties kaut ko citu. Tātad man toupper. Tas ir nedaudz milzīgs. Bet paziņojums, šeit ir, ka pieminēšana header fails, ka man vajadzētu izmantot. Kā malā, jo tas ir maldinošs, funkcija izmanto ints nevis chars dēļ kļūdu labošanas. Bet mēs, iespējams, nāk atpakaļ, ka nākotnē. 

Bet paziņojums, šeit, uz augšējiem pievērsto burtu c uz lielajiem burtiem, ja iespējams. Tā ka ir diezgan vienkārši. Un tagad būsim nedaudz konkrētāku. Apskatīsim daļu man lapa zem atgriešanās vērtību. Vērtība atgriezās ir tas, ka no konvertē vēstules. Vai c, ja konversijas nebija iespējams, kur c ir oriģināls ieejas. Ko es zinu no šejienes, no arguments uz augšējo. 

Tātad, kas ir takeaway par šo? Vērtība atgriezās ir tas, ka no konvertē vēstules, vai c, oriģināls vēstule, ja konversijas nav iespējams. Kādi uzlabojumi Tāpēc es iespējams dot manu kodu dizains? Yeah? 

AUDITORIJA: Jūs varat izņemt cits. DAVID J. Malan: es varu noņemt cits paziņojumu, un ne tikai cits paziņojums. 

AUDITORIJA: Jūs varat noņemt [nedzirdama]. 

DAVID J. Malan: es varu noņemt visu dakšu uz ceļa, ja cits pavisam. Tik tiešām, ļaujiet man atvērt galīgā versija par šo, kapitalizēt-2, un paziņojums, cik, ja jūs, sexy, kods ir tagad kļūst, jo es esmu samazināts no dažām septiņas vai tā līnijas uz tikai četri, funkcionalitāte, kas man paredzēts , vienkārši zvanot uz augšējo, garāmejot s kronšteinu i, un drukāšanas veic ar viettura% c, ka īpaši raksturs. 

Tagad varbūt ir kļūda, vai vismaz risks bug, šajā programmā. Tik vienkārši atgriezties uz agrāku takeaway, Ko man, iespējams, arī darīt šī programma, lai padarītu to stabilāku, tāpēc, ka tur nav veids, kā tas var crash, pat retos gadījumos? AUDITORIJA: Pārliecinieties, ka tas nav NULL. DAVID J. Malan: Pārliecinieties, ka tas nav NULL. Tik tiešām, lai padarītu šo super pareizi, man vajadzētu kaut ko darīt, piemēram, ja s nav NULL, tad iet uz priekšu un izpildīt šīs rindas kods, kas Es tad var ievilkumu, piemēram, ka, un pēc tam nodot manā ciešā lencēm. Tik labs sasaistīšana kopā no diviem idejām. Yeah? AUDITORIJA: Vai jūs izmantojat darīt, kamēr cilpa, vietā? DAVID J. Malan: Could Es to darīt, kamēr cilpa? AUDITORIJA: --you vēlaties pārliecināties ka jūs faktiski [nedzirdama]. DAVID J. Malan: Could jūs izmantojat darīt, kamēr? Īsā atbilde, nē. Jo jūs gatavojaties ieviest citu stūra lietu. Ja virkne ir nulles garuma. Ja, piemēram, es tikai hit Enter, nekad ierakstot Zamyla. Es esmu gatavojas nodot jums atpakaļ faktiskais string, jo mēs beidzot redzēt, ka ir nulle rakstzīmes. Tas ir vēl virkne, tas ir vienkārši super īss. Bet, ja jūs izmantojat darīt, kamēr, jūs gatavojas akli mēģināt kaut ko darīt ar cienīt šai virkni, un nekas, ka būs tur. 

AUDITORIJA: Nu, ja jūs do [dzirdams] kamēr S-- LV- DAVID J. Malan: Ak es redzu, glabāt iegūt virkni no lietotāja. Tik īsa atbilde, tu varēja, un saglabāt pestering tos, lai dotu jums virkni, kas ir pietiekami īss, lai ietilptu atmiņā. Absolūti. Es vienkārši izvēlējās to nedarīt. Ja viņi nedod man stīgu I gribu, es esmu atmest, es esmu atmest. Bet absolūti, šim nolūkam, jūs varētu absolūti darīt. 

Tātad Bibliotēkas header failus, kas Tagad mēs esam pazīstami ar ir šie, šeit. Standarta I / O, CS50.h, string.h, ctype.h, un ir, protams, citi. Daži no jums ir atklājuši math bibliotēka math.h. Bet ļaujiet man iepazīstināt jūs tagad, lai šis resurss ka CS50 darbinieki, Davin, un Rob, un Gabe īpaši ir salikti kopā. , Kas drīzumā saiti Kurss Mājas. To sauc CS50 atsauces. 

Kas tikai, lai dotu jums ātri garša no tā, darbojas šādi. Ļaujiet man iet uz reference.cs50.net. Jūs redzēsiet uz kreisās rokas sānu milzīgs saraksts funkciju, kas nāk ar c. Bet, ja es aprūpi, uz šo brīdi, par kaut ko līdzīgu strlen, Es varu ierakstīt to tur. Tā filtri leju sarakstu tikai to, ko man rūp. Es esmu gatavojas noklikšķiniet uz tā. Un tagad pa kreisi, jūs redzēsiet, ko mēs ceram, ir vienkāršāka, cilvēku draudzīgs paskaidrojums, kā šī funkcija darbojas. 

Atgriež garumu virknes. Lūk konspekts, Lūk, kā jūs to izmantot attiecībā uz header failu, un izteiksmē kādā funkcijas Izskatās, ka attiecībā uz tās argumentiem. Un tad šeit, atgriežas garums string. Bet tiem no jums ērtāk, jūs tiešām varat noklikšķināt vairāk comfy, un saturs, šis lapas, tagad, mainīsies būt noklusējuma vērtības ko jums, izmantojot man lapu. 

Citiem vārdiem sakot, CS50 atsauce ir vienkāršošana ķīmiskām lapām ar personālu, studentiem. Īpaši tie, mazāk apmierināti un no tā, ka tu nav mēģināt wrap jūsu prāts apkārt, atklāti sakot, daži diezgan mistisks sintakse un dokumentācija dažkārt. 

Lai saglabātu, ka prātā dienās nāk. Tātad šeit, atkal, ir Zamyla. Pieņemsim tagad uzdot jautājumu, kas ir nedaudz vairāk cilvēku pieejamāku. Pateicoties Chang, kurš ir bijis drukājot vairāk ziloņi nonstop par pēdējo dienu. Mums ir iespēja dot vismaz viens no tiem prom. Ja mēs varētu saņemt tikai viens brīvprātīgais nākt uz augšu, lai pievērstu uz ekrāna. Kā par šeit? 

Nāciet uz augšu. Kāds ir tavs vārds? ALEX: Alex. DAVID J. Malan: Alex. Viss labi. Alex, nākt uz augšu. Mēs esam par to, lai redzētu savu rokraksta uz ekrāna šeit. Visas tiesības, nice to meet you. 

ALEX: Nice tu tevi tikties. 

DAVID J. Malan: Nu labi. Tātad, super vienkāršs vingrinājums. Bar nav augsta, lai nokļūt ziloni šodien. Jūs spēlējat lomu getstring. Un es esmu gatavojas tikai pateiks virkne, kas tu būsi. Un pieņemsim, ka jums, getstring, ir saukta. Un cilvēks, piemēram, man, ir ievadījis Zamyla, Z-A-M-Y-L-A. Vienkārši iet uz priekšu un rakstīt Zamyla uz ekrāns, it kā jums ir gotten to un uzglabā to kaut kur atmiņā. 

Atstājot telpa, kas būs vairāki citi words-- ka ir OK, turpiniet. 

[Smiekli] 

Tātad Zamyla, Excellent. Tāpēc tagad, pieņemsim, ka jums, getstring, sauc atkal. Un tāpēc, es sniegt jums, pie tastatūra, ar citu nosaukumu, Belinda. Viss labi. Un tagad nākamais laiks getstring ir sauc, es tipa kaut ko līdzīgu Gabe, G-A-B-E. Jūs tiešām lietojat sirds brīvpiekļuves atmiņā. Kas tuvojas visu pilnīgi nejauši. OK. 

[Smiekli] ALEX: Sorry mans rokraksts ir slikti. DAVID J. Malan: Nē, tas ir OK. Un kā par Rob, R-O-B. OK. Labs. Tāpēc man nebija prognozēt jums būtu veida gulēja lietas šādā veidā. Bet mēs varam darīt šo darbu. Tātad, kā jūs iet par ko no šiem simboliem atmiņā? Citiem vārdiem sakot, ja mēs domājam par šī taisnstūra melns ekrāns kā pārstāv datora RAM, vai atmiņas. 

Un atcerēties, ka RAM ir tikai viss ķekars baitu, un baiti ir viss ķekars bitiem. Un biti ir kaut īstenoti, parasti ar kāda veida elektrības aparatūru. Tātad tas ir sava veida layering mēs esam runājuši par un tagad var pieņemt par pašsaprotamu. Kā jūs iet par izlemjot, kur rakstīt Aplaupīt pret Gabe versus Belinda pret Zamyla? 

ALEX: Es vienkārši darīju to noteikt, ka tu man teica. 

DAVID J. Malan: Un kas ir taisnība. Bet ko regulē kur jūs varat ievietot Belinda vārds un Gabe vārds? 

ALEX: Nekas? DAVID J. Malan: [smejas] Tātad, kas darbojas, tas ir jauki. Tāpēc datori ir maz sakārtotāku nekā. Un tad, kad mēs implement-- tur uzturēties lai tikai moment-- kad mēs faktiski ieviest kaut ko līdzīgu getstring datorā, Zamyla varētu izklāstīts diezgan daudz tāpat kā jūs uz ekrāna, tur. 

Un to, kas ir galvenais, lai paziņojuma šeit, ko Alex darīja, ir tur ir sava veida norobežošanas starp katru no šiem vārdiem, labi? Jums nav rakstīt Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- citiem vārdiem sakot, tur ir sava veida demarkācijas, kas, šķiet, ir, veida, izlases atstarpes starp šiem dažādajiem vārdiem. Bet tas ir labi, jo mēs, cilvēki tagad var iztēloties, ka tie ir četras dažādas stīgas. Tas ir ne tikai viena secība Partiju rakstzīmju. Tātad dators, tad tikmēr, varētu veikt virkni līdzīgu Zamyla, likts katra no šīm vēstulēm iekšpusē baitu atmiņas. Bet šis skaits ir daudz lielāks, Protams, nekā sešas zīmes. 

Tur ir viss ķekars RAM. Un tā turpmāk, šis režģis kastes notiek pārstāvēt ko Alex tikko darīja šeit uz ekrāna. Un tagad, Alex, mēs varam piedāvāt Jums ar zila vai oranža zilonis no Chang. ALEX: Es ņemšu zilo ziloni. DAVID J. Malan: zils zilonis. Tik liels kārta aplausi, ja mēs varētu, Alex šeit. 

[Aplausi] 

ALEX: Paldies. DAVID J. Malan: Paldies. Tātad takeaway ir tas, ka, lai gan modelis veida mainījusies laika gaitā, šeit uz kuģa, tur bija šī demarkācija starp dažādām stīgām ka Alex ieguva mums. Tagad datori, atklāti sakot, varētu darīt to pašu. Viņi varēja veida plunkšķis virknes jebkur RAM. Šeit, nekā šeit, šeit lejā, uz leju šeit. 

Viņi varētu darīt tieši to. Bet, protams, tas ir iespējams, nav labākais plānošana. Tiesības? Ja es tur jautā Alex līdz get vārdus, droši vien viņš gribētu izvirzīti daži vairāk uz leju šeit, varbūt līdz šeit, nekā šeit, nekā šeit, galu galā nekā šeit. Bet ar mazliet vairāk plānošanu, protams, mēs varētu noteikt lietas vairāk tīri. Un tiešām, tas, ko dators dara. 

Bet nozveju, ka ja nākamais virkne man pēc Zamyla ir kaut kas piemēram, Belinda, ierosināt kur mēs varētu rakstīt b attiecībā uz šo tīkla vēstule? Kur jūs iet? Pa labi no a, zem z, zem a? Kādi būtu jūsu pirmie instinkti būt? AUDITORIJA: Zem z. DAVID J. Malan: Tātad zem z. Un tas ir diezgan vienkārši, vai ne? Tas ir sava veida veikls, tas ir tas, ko mēs darām uz klaviatūras, kad mēs hit Enter, vai e-pastu, veicot aizzīmēm saraksts ar lietām. Bet realitāte ir tāda, ka datori cenšas būt efektīvāki, un piestūķēt protams tik daudz datus RAM, cik iespējams, tā, ka jums nav atkritumi jebkurā baiti. Tā, ka jūs netērētu jebkurš ekrāns nekustamo īpašumu. Un problēma, lai gan, ir tas, ka ja mēs burtiski nodot vēstuli b pēc tam, kā mēs gatavojamies zināt, kur Zamyla vārds beidzas Un Belinda vārds sākas? Tātad, jūs cilvēkus vienkārši ierosināja, labi, hit Enter taustiņu, būtībā. Put to lejā. Vai pat kā Alex darīja, vienkārši sāciet rakstīt nākamais vārds zem iepriekšējā, un zemāk par šo vienu, un Tad turpmāk šo vienu. Tas ir vizuāls norādījums. 

Datori ir cits vizuāls norādījums, bet tas ir nedaudz vairāk īss. Tas ir tas bailīgs raksturs. Slīpsvītru 0, kas, iespējams, ir atgādina slīpsvītru n, un tā tālāk, tagad. Īpašie evakuācijas sekvences. Slīpsvītru 0, ir veids, kā pārstāv astoņi nulle bitu pēc kārtas. 0000 0000. 

Kā jūs paust, ka nav hit numuru nulles uz tastatūras, jo fakts, ka ir ASCII char. Tas izskatās kā numuru, bet faktiski decimāls skaitlis kas pārstāv apkārtrakstu glifu, apļveida burtveidolu. Tikmēr, reversā slīpsvītra nulle nozīmē, burtiski likts astoņas nulles baiti šeit par mani. 

Tātad tas ir nedaudz patvaļīgs. Mēs varētu esam izmanto jebkuru modeli bitu, bet pasaules nolēma dažus gadus Pirms, ka pārstāvēt gals string atmiņā, vienkārši ielieciet visu ķekars nullēm. Tāpēc, ka mēs varam atklāt, ka. Tagad, tas nozīmē, ka neviens vēstule alfabēts var pārstāvēt ar nullēm. 

Bet tas ir OK, mēs jau esam redzējuši ka mēs esam izmantojot 65 uz augšu, kas 97 uz augšu. Mēs neesam nokļūt jebkur gandrīz visām nullēm. Tātad Belinda jo datora atmiņā ir faktiski gatavojas iet šeit. Esmu sastādīts to dzeltenā tikko pievērst mūsu uzmanību uz to. Un paziņojums, arī šis ir pilnīgi patvaļīgi. Esmu sagatavots kā režģi. Tāpat, RAM ir tikai daži fizisks objekts. Tam nav obligāti jābūt rindas un kolonnas, per se. Tas ir tikai ieguva visai ķekars baitu īstenoti aparatūru kaut kā. Bet, ja pēc Belinda I drukāti Gabe vārda, viņš gatavojas galu galā šeit atmiņā, un, ja es drukāti Daven vārda, Piemēram, viņš dodas, lai galu galā šeit. Un es varu turpināt rakstīt vēl vairāk vārdu. 

Diemžēl, ja es mēģinātu uzrakstīt super garu vārdu, Es varētu beidzot palaist no atmiņas. Tādā gadījumā, getstring ir gatavojas atgriezties NULL, kā mēs teicām. Bet par laimi, vismaz šajā vizuālā šeit, mēs nesaņēma gluži tik tālu. 

Tagad to, kas ir jauki, ir tas, ka šis Vispārējā ideja ārstē lietas kā kastēs ir pārstāvis iezīme C un daudz valodu, pazīstams kā masīvu. Masīvs ir cita veida datus. Tā ir datu struktūra, ja Jums gribas. Struktūra nozīmē tā tiešām, veids, skatoties kā kaste, vismaz savā prātā pret acīm. Masīvs ir pieguļošā secība identisku datu tipu, atpakaļ atpakaļ atpakaļ atpakaļ. 

Tātad string, citiem vārdiem, ir masīvs chars. Masīvs rakstzīmes. Bet izrādās, jūs varat būt bloki ķekarus lietas. Patiesībā, mēs varam nodot pat numuri masīvu. Tātad tā, kādā formā mēs ejam, lai sāktu deklarējot šos datus struktūru sauc par masīvu ir arī gatavojas izmantot kvadrātiekavas. Bet šie kvadrātiekavas gatavojas ir cita nozīme šajā kontekstā. 

Un redzēsim to šādi. Pieņemsim, ka es atvēru up jaunu failu šeit. Un es varu saglabāt to kā ages.c. Un es ņemšu saglabātu šo manā mapē šeit. Un tagad es esmu gatavojas iet uz priekšu un sākt rakstīt kaut ko tāpat ietver CS50.h, ietver stdio.h, int galvenais tukšumu. Un tad iekšā šeit, es gribu vispirms ir int sauc vecumu. 

Un es esmu gatavojas izmantot, ka, lai iegūtu int no lietotāja par viņa vai viņas vecumu. Bet šī programma ir paredzēts izmantot vairāki cilvēki, lai jebkādā kontekstā. Man līniju cilvēku. Visi no tiem ir rakstīt to vecums varbūt daži, es nezinu, konkurence, vai notikumu ka viņi ieradās. Tātad nākamais cilvēks, es nepieciešama citu mainīgo. 

Jo, ja es tikai darīt vecums kļūst getInt, ka ir dodas uz clobber, vai pārrakstīt iepriekšējā personas vecums. Tāpēc, ka tas nav labi. Tātad mans pirmais instinkts varētu būt, ak, labi, ja es vēlos saņemt vairākus Tautas ages-- sauksim šo age1, int age2 izpaužas int, int age3 izpaužas getInt. Un tagad es esmu gatavojas izmantot daži pseudocode kods šeit. 

Kaut ko darīt ar šiem numuriem. Mēs atstāt uz citu dienu, ko mēs darām tur, jo mēs tikai rūpēties par brīdi par age1, age2, age3. Diemžēl, kad I apkopot šo programmu un nodot to priekšā faktisko lietotāju, kas ir fundamentāli slikts dizains lēmums man šķiet, ir veikti? Yeah? Mērķauditorija: [dzirdams] DAVID J. Malan: Jā, Man pat nav mēģinājis lai noskaidrotu, cik daudz vecumu man tiešām rūp? Ja man ir mazāk nekā trīs cilvēki šeit, un tāpēc mazāk nekā trīs vecumu, Es joprojām akli gaida trīs. Dievs pasarg četri cilvēki parādās. Mana programma vienkārši nebūs pat tās atbalstīt. 

Un tā tas, garš stāsts Īsi sakot, nav labs ieradums. Tiesības? Man bija būtībā kopēšana un līmēšana kodu un vienkārši tweaking mainīgās nosaukumi. Un, mans Dievs, ja tu būtu, nevis trīs vecumu, bet 10, vai 100, vai pat 6500 undergraduates, piemēram. Tas nebūs īpaši elegants kods, vai ilgtspējīga. Jūs esat nāksies pārrakstīt šai programmai katru reizi Jūsu skaits cilvēku izmaiņām. 

Tātad par laimi, jo mūsu faktiskais ages.c failu šodien, mums ir daudz gudru risinājumu. Pirmkārt, es esmu gatavojas aizņemties būvēt mēs esam izmanto dažas reizes, šis darīt, kamēr cilpa, lai iegūtu cilvēku skaits telpā. Es esmu tikai gatavojas apgrūtināt lietotāju, atkal un atkal, līdz brīdim, kad viņš vai viņa dod man n vērtība, kas ir pozitīvs skaitlis. 

Es varētu būt izmantoti, pagājušajā laiks nokļūt pozitīvu int. Bet mums nav, ka pa īstam, tāpēc es devos uz priekšu un atkal īsteno šo ideju. Tagad šeit lejā, tas ir jauns triks. Saskaņā 27, kā komentāri in line 26 liecina, deklarēt masīvu, kurā uzglabāt ikviena vecumu. 

Tātad, ja jūs vēlaties iegūt, ne vienu int, ne divi ints, bet viss ķekars ints. Konkrēti n veseli skaitļi, bija n varētu būt trīs, varētu būt 100, varētu būt 1000. Sintakse, gluži vienkārši, ir teiksim, kādi dati veida jūs vēlaties? Ko jūs vēlaties, lai izsauktu ka rieciens atmiņas? Ko jūs vēlaties, lai izsauktu režģi ka izskatās šis gleznieciski? 

Un iekavās šeit, jūs sakāt cik liels vēlaties masīvs būt. Un tā agrāk, kad es teicu sintakse ir nedaudz atšķirīgs šeit, mēs joprojām izmanto kvadrātiekavas, bet, kad es esmu deklarējot masīvs, skaits iekšpusē kvadrātiekavās līdzekļi cik liels jūs vēlaties masīvs būt. 

Turpretī, ja mēs, izmantojot s kronšteins i pirms brīža, s, auklas, patiešām masīvs simboliem, bet ja jūs neesat deklarējot mainīgo, kā ar šo atslēgvārdu šeit, jūs vienkārši saņemat īpašs rādītājs, īpaša elements no šī masīva. Kad mēs zinām, ka, atpūtas Tas ir vienkārši. Ja jauna es esmu pirmo reizi gatavojas izdrukāt kas ir vecums personas numuru i. Kur es tikai saku persona numur viens, cilvēks numur divi, cilvēks numur trīs. 

Un es esmu tikai darot aritmētika, tā, ka, piemēram, normāli cilvēki, mēs paļaujamies no viena uz tā programmu, un nevis no nulles. Tad es aicinu getint, bet es glabāt in vecumu atbilde stiprinājuma i. Kura ir i'th vecums masīvā. Tādējādi, kaut arī pēdējo reizi bijām ārstē šīs kastes kā chars par Zamyla vārda, un citi. Tagad, šīs kastes pārstāvēt 32 biti, vai četri baiti , kurā mēs varam glabāt int, int, int. Visi, kas, atkal, ir vienādi datu tips. 

Tagad es daru kaut ko muļķīgi, tāpat kā laiks iet, vienkārši pamatot rakstot šo programmu. Un tad uz leju šeit, es vēlreiz atkārtot virs masīva sakot gadu no tagad, cilvēks numur viens griba būt kaut gadus vecs. Un izdomāt, ka math-- Es domāju, šis nav ļoti sarežģīta arithmetic-- Es vienkārši pievienot vienu savam vecumam. Tikai, lai pierādītu, atkal, tas. 

Tāpat kā es varu indeksu uz virkni, s, tāpēc es varu indekss stājas masīvs vecumu, piemēram, ka tur. Tātad, ja tas notiek, ir ņemot mums? Tātad mēs redzēsim, galu galā, dažas lietas, kas ir dienas, lai nāk. Viens, visu šo laiku, kad rakstot savas programmas, piemēram, Mario, mantkārīgs, kredīts. Jūs esat ierakstot vārdu programma un hitting Enter. Un tad kļūst lietotāja ievadi. 

Ar getString, getInt, getLongLong vai tamlīdzīgi. Bet izrādās, ka C balstus kaut kas ko sauc komandrindas argumenti, kas gatavojas mūs faktiski saņemt pie vārdiem, ka jūs rakstāt, pie mirgojošu ātru, Pēc jūsu programmas nosaukumu. 

Tātad dienu nāk, jums kaut kā Cēzars varētu rakstīt, vai ./caesar numuru 13, pēc tam. Redzēsim, kā tas darbojas. Jo tiešām, jo problēma noteikti divi, mēs esam gatavojas jūs iepazīstināt lai mazliet kaut ko atgādina Ralphie s apstrīdēt agrāk kartogrāfija. Par kodēšanas informācijas māksla. Tas, patiesībā, ir ļoti atgādina par to, kas Ralphie darīja. 

Šis ir piemērs šifrēšanas algoritms sauc ROT13, R-O-T 13. Kas vienkārši nozīmē pagriezt burti alfabētā 13 vietās. Un, ja jūs to izdarītu, jūs redzēsiet tagad to, kas ir, iespējams, iepazinušies frāze. Bet kā mēs ejam, lai izmantotu Tas, galu galā, ir plašāk. 

P noteikti divi, standarta izdevumā, jūs ieviest pāris cipariem, viens sauc Caesar, viens sauc Vigenere. Abas no tām ir rotācijas šifrēšana, jo, ka kaut kā jums savukārt viens burts uz citu burtu. Un Cēzars ir super vienkārši. Jūs pievienot vienu, jūs pievienot 13, vai kādu numuru līdz 26. Vigenere tas, ka katru burtu pamats. Tātad Vigenere, kā jūs redzēsiet spec, ir drošāka. 

Bet beigās, dienā, kas jums tiks īstenošanai un P noteikt divus, ir tas, ka galvenais, ka jūs izmantojat abi šifrēšanai un atšifrēšanai. Atsaucoties uz procesu, kurā teksta, daži sākotnējais ziņojums, uz Cypher tekstu, kas ir kaut kas šifrēta. Un tad atšifrējot to vēlreiz. 

Hakeru izdevumā, tikmēr, jūs būsiet uzdevums ar kaut ko līdzīgu garā, kur mēs jums failu, no tipiskas Linux, vai Mac, vai Unix datoru sauc etsy paroli, kas satur veselu ķekars lietotājvārdus un paroles. Un šīs paroles ir visas šifrēta, vai sajaukts, tā teikt, vairāk pareizi kā jūs redzēsiet spec. 

Un hakeris izdevums būs izaicinājums Jūs ar veikt savu ieguldījumu, piemēram, tas, un plaisāšanu paroli. Tas ir, norādītas, ko Cilvēka parole patiesībā bija. Jo, patiešām, paroles parasti nav saglabāti skaidrs, un vispār paroles būtu grūti uzminēt. Tas nav bieži notiek. 

Un tas, ko es domāju, mēs gribētu darīt, ir noslēgt ar pāris minūtēm skatiens uz īpaši slikta izvēle paroles no filmas jūs varētu atgādināt lētticīgi. Un, ja ne, jums vajadzētu īrēt. 

[Video atskaņošana] 

-Helmet, Tu velns, kas notiek? Ko jūs darāt, lai mana meita? 

-Permit Man iepazīstināt izcili jaunieši plastikas ķirurgs, Ārsts Phillip Schlotkin. Lielākais deguns darbs cilvēks viss visums un Beverly Hills. 

-Jūsu Augstība. 

-Nose Darbs? Es nesaprotu. Viņa jau bija deguns darbu. Tas bija viņas salds 16 klāt. 

-Nē, Tas nav tas, ko jūs domājat. Tas ir daudz, daudz sliktāk. Ja tu nedod man kombinācija, lai gaisa vairogs, Ārsts Schlotkin dos savu meita atpakaļ savu veco degunu. - [Gasps] Nooooooooooooo. Kur Jūs ieguvāt šo? 

-Visa Labi. Es jums saku, es jums saku. 

-Nē, Tētis, nē. Jūs nedrīkstat. 

-Tu Labi mana mīļā. Es garām savu jauno degunu. Bet es ne pateikt viņiem par kombinācija vienalga ko. 

-Ļoti Labi. Ārsts Schlotkin, darīt savu sliktāko. 

-Mana Prieks. 

-No! Pagaidiet, pagaidiet. Es jums saku. Es jums saku. 

-Es Zināja, ka tā varētu strādāt. Nu labi, dod to man. 

-The Kombinācija ir viens. 

-ona. 

-ona. -Two. -Two. -Two. -Trīs. -Trīs. -Trīs. -Four. -Four. -Four. -Five. -Five. -Five. -Tātad Kombinācija ir viens, divi, trīs, četrus, piecus. Tas ir stulbākais kombinācija Es kādreiz dzirdēt manā dzīvē. Tas ir sava veida lieta AN idiots būtu viņa bagāžu. 

-Thank Jums, Jūsu Augstība. 

[REMOTE klikšķiem] 

-Ko Jūs darījāt? 

-Es Izslēgts sienas. 

-Nē, Jums nav, jūs izslēgts visu filmu. 

-Es Must've nospiests nepareizs pogas. 

-Labi, Ielieciet to atpakaļ! Ielieciet filmu atpakaļ! 

-Jā, Sir! Jā, ser. -Ļaujiet S go, Arnold. Nāc, Gretchen. Protams, jūs zināt, es ņemšu ir rēķinu par to. -Labi? Vai tas darbojas? Kur ir karalis? 

-Tas Strādāja, kungs, mēs ir kombinācija. , Lieliski. Tagad mēs varam izmantot katru pēdējo elpu svaiga gaisa no planētas Druidia. Kas ir kombinācija? 

Ons, diviem, trim, četriem, pieciem. 

Ons, diviem, trim, četriem, pieciem? -Jā. -Tas Ir pārsteidzošs. Man tas pats kombinācija uz manu bagāžu. Sagatavot Spaceball 1! tūlītēja izlidošana. 

-Jā, Sir. 

-Un Mainās kombinācija uz manu bagāžu. [DOOR NOSLĒGUMA SOUND] [Saskandināt durvju trāpot HELMET] -Ahh. [END VIDEO PLAYBACK] DAVID J. Malan: Tas ir tas CS50, mēs redzēsim tevi nākamnedēļ. Teicējs: Un tagad, Deep Domas, ko Daven Farnham. 

DAVEN Farnham: kodēšanas C ir tik daudz grūtāk, nekā nulles. printf, Scratch bija meli. 

[Smiekli Soundbite]