>> [REPRODUCCIÓ DE MÚSICA]
DAVID J. Malan: Molt bé.
Això és CS50, i això és el final de la Setmana 2.
Així que avui, anem per continuar la nostra mirada
la forma en què representem les coses sota de la hood-- allunyant
de nombres com nombres enters i valors de punt flotant
i se centra en les cadenes i programes en última instància, més interessants.
Però també anem a fer una ullada a un parell de problemes-- de domini específic
la primera de les quals serà ser la participació de la criptografia,
l'art de la codificació de la informació, en el qual es veu per sobre d'aquí
és un quadre de Ràdio Orphan Annie anell descodificador secret d'antany.
>> Això és en realitat forma molt primitiva i la forma de cryptopgraphy per a nens
pel que aquest anell té dues disks-- un dins i un altre fora.
I girant un d'aquests, vostè pot essencialment ordenar les lletres com l'A
A a la Z amb altres lletres com B a través d'A En altres paraules,
pot girar literalment l'alfabet, procedent d'aquesta manera amb un mapeig des
cartes a les cartes de manera que, si vostè volgut enviar un missatge secret
per a algú com Annie, podria escriure pel seu missatge i després giri
les lletres, per la qual cosa, si vostè es refereix a dir "A", que en lloc de dir "B"
Vol dir "B" que en lloc de dir "C" -
o alguna cosa una mica més intel · ligent que això-- i, a continuació, en última instància,
sempre que Annie té aquest descodificador anell, es pot descodificar el missatge.
Ara, vostè pot recordar, en efecte, que aquest es va utilitzar en una pel · lícula molt famosa que
juga fins a la sacietat durant la temporada de Nadal.
Anem a fer una ullada aquí.
Ralphie PARKER: "Ja es tracti de conegut per tots que en resum
que Ralph Parker Es nomena és membre de Little Orphan Annie Secret
Cercle i té dret a tota la honors i beneficis que ocorren a la mateixa ".
>> Ralphie PARKER (narrar): Signat Little Orphan Annie.
Ratificat, Pierre Andre!
En tinta.
Honors i beneficis, Ja a l'edat de nou anys.
>> [REPRODUCCIÓ DE MÚSICA]
>> [Chatter RÀDIO]
Ralphie PARKER: Anem.
Seguirem endavant amb ella.
Jo no necessito tot aquest jazz sobre contrabandistes i pirates.
RÀDIO LOCUTOR: Escolti matí nit per l'aventura final
del Negre del vaixell pirata.
Ara, és el moment d'Annie Missatge secret per a vosaltres membres
del Cercle Secret.
Recordeu els nens, els únics membres d'Annie Secret Circle
pot descodificar el missatge secret d'Annie.
>> Recordeu, Annie depèn de tu.
Definiu les seves agulles per a B-2.
Aquí hi ha la mensaje-- 12, 11, 2--
Ralphie PARKER (narrar): I estic en la meva primera reunió secreta.
RÀDIO LOCUTOR: -25, 14, 11, 18, 16--
Ralphie PARKER (narrar): Oh, Pere es en gran veu aquesta nit.
Em vaig adonar que aquesta nit missatge era realment important.
>> RÀDIO LOCUTOR: -3, 25.
Aquest és un missatge d'Annie si mateixa.
Recordeu, no l'hi diguis a ningú.
>> [Panteix]
Ralphie PARKER (narrar): Noranta segons després, estic
en l'única habitació de la casa on un nen de nou anys
podia seure a privacitat i descodificació.
Ah.
"B."
>> [Riu]
>> Ralphie PARKER (narrar): Vaig anar a la següent.
"I."
La primera paraula és "ser".
Sí!
Venia més fàcil ara.
"U."
>> [Riu]
>> RANDY PARKER: Aw, anem, Ralphie.
Me n'he d'anar!
>> Ralphie PARKER: Estaré baix, Ma.
Whiz Gee.
"T." "O." "Assegureu-vos a "." Assegureu-vos "què?
Quina va ser la petita òrfena Annie tractant de dir? "Assegureu-vos" què?
MARE: Ralphie, Randy ha d'anar.
Feu el favor de sortir?
>> Ralphie PARKER: Bé, mare!
Estaré fos cert!
Ralphie PARKER (narrar): Jo estava més a prop ara.
La tensió era terrible.
Què era?
El destí del planeta pot penjar d'un fil.
>> MARE: Ralphie, Randy ha d'anar!
>> Ralphie PARKER: Torno a terme, per l'amor de Déu!
Ralphie PARKER (Narrant): Gairebé allà!
Els meus dits van volar!
La meva ment era un parany d'acer.
Cada porus vibrar.
Era gairebé clar!
Sí!
>> Ralphie PARKER: "Assegureu-vos beure la seva Ovaltine ".
Ovaltine?
Un comercial de mala mort?
>> [REPRODUCCIÓ DE MÚSICA]
>> Ralphie PARKER: Fill de puta.
>> [Rialles]
>> DAVID J. Malan: Així que a continuació és un cop d'ull al que la criptografia
pot ser per a un esto-- beure d'antany.
Així que un anunci ràpid.
Si vostè és lliure d'aquesta Divendres a les 01:15 pm i ho faria
agradaria unir-se a nosaltres per CS50 el dinar, el cap a aquest URL aquí.
En primer arribat, primer, com de costum.
Però amb el temps, ens assegurarem que més tots els que vulguin participar
pot programar-savi.
>> Així cordes.
Tenim Zamyla-- qui ara has conegut més probable
en Butlletí de problemes 1-- la nom s'escriu així.
I supose que ha escrit el seu nom en un programa informàtic que està
usant alguna cosa com getString.
Per tal de recuperar els cops de teclat, com
anem sobre el que representa un cadena, una paraula, un paràgraf,
o diverses lletres com aquestes aquí?
>> Parlem sobre l'última vegada sencers i problemes
que sorgeixen amb desbordament de sencers i valors de punt flotant
i els problemes que sorgir dins de la precisió.
Amb cordes, almenys tenir una mica més de flexibilitat
perquè només strings-- en la realitat món--
pot ser una longitud prou arbitrari.
Bastant curt, bastant llarg.
Però fins i tot llavors, anem a trobar que els ordinadors de vegades pot
quedar-se sense memòria i ni tan sols emmagatzemar una cadena prou gran.
>> Però per ara, anem a començar a visualitzar una cadena com alguna cosa en aquestes caixes
Aquí.
Així que sis de tals caixes, cadascuna de les quals representa un personatge o "char".
Així que recorda que "char" - c-h-a-r-- és un dels tipus de dades incorporats en C.
I el que és interessant és que es pot utilitzar aquest tipus de com un bloc de construcció,
una peça del trencaclosques, si es vol, per formar un major tipus de dades que seguirem
per cridar a una "cadena".
>> Ara, el que és útil sobre el pensament sobre coses com cordes d'aquesta manera?
Bé, resulta que podem realment aprofitar aquesta estructura
Per accedir realment a caràcters individuals d'una manera bastant senzilla.
Vaig a seguir endavant i crear un arxiu anomenat "stringzero.c,"
però se li pot dir el que vostè desitja.
I a la pàgina web del curs és ia aquest exemple per endavant,
per la qual cosa no cal escriure tot.
>> I seguiré endavant i primer fer void main int.
I als pocs dies, anem a començar a esmicolar
el buit és aquí, per què és int al costat del principal, i així successivament.
Però per ara, continuarem copiar enganxar això.
>> Vaig a declarar una cadena anomenada s.
I vaig a tornar de GetString qualsevol l'usuari tecleja.
Això serà un simple programa, no hi ha instruccions,
Jo només vaig a cegues esperar que l'usuari coneix
què fer perquè sigui senzill.
>> I ara vaig a tenir un bucle.
I dins del meu bucle estic tindrà int i en zero.
I i és, de nou, només una convenció, una variable d'índex per al recompte,
però jo podria cridar a això el que jo vulgui.
Jo faré i és inferior a: així El nom de Zamyla és de sis lletres.
Així que vaig a dur codi que hi ha per ara.
>> I després i ++.
I ara a l'interior d'aquests arrissat claus faré printf,
i vull imprimir una caràcter alhora.
Així que vaig a utilitzar% c per Potser per primera vegada.
I després vull imprimir cada personatge en la seva pròpia línia.
Així que em vaig a posar un petita barra invertida n allà.
Tancar cotització.
>> I ara vull fer alguna cosa aquí.
Vull imprimir el lletra específica a la cadena,
s, ja que estic iteració de zero en un màxim de sis.
En altres paraules, vull imprimir el caràcter i-èsim de s.
Ara, com puc fer això?
>> Doncs igual que les caixes en aquesta representació aquí,
classe de, evocar la noció de boxa lletres, es pot fer de manera similar que
sintàcticament en C simplement especificant, Vull imprimir s l'i-èsim caràcter.
L'ús dels claudàtors en el teclat del seu ordinador
que en un teclat dels Estats Units són generalment per sobre de la tecla de retorn.
>> Així que això no és del tot correcte però, com t'hauràs adonat.
Però jo vaig a classe de forjar a cegues aquí.
I jo faré que la cadena 0.
Però abans de fer això, anem a veure si ens no poden anticipar alguns errors comuns.
Això va a compilar?
No, m'estic perdent un munt de coses.
Biblioteques vaig sentir.
>> Així que arxius de capçalera podria jo desitjar afegir aquí?
Sí.
>> AUDIÈNCIA: Cal I / S estàndard [inaudible]
>> DAVID J. Malan: Excel · lent.
Així que necessito I / S estàndard. Per a què propòsit fer Vull estàndard d'E / S?
Per printf.
Així incloure stdio.h.
I també es proposa que incloc la biblioteca CS50 per quina raó?
Per tenir cordes.
Així que ja veurem el que La biblioteca del CS50 està fent
per crear aquesta noció d'una cadena.
Però per ara, només pot pensar en ell com un tipus de dades real.
>> Així que sembla ser una mica de neteja.
I ara vaig a seguir endavant i, de fet fer fer cadena de 0.
Compilat.
Així que això és bo.
Així ./string0 deixar-me el zoom de manera que puguem veure més de prop el que està passant.
Intro.
Z-A-M-i-L-A entrar.
I hem imprès a nom de Zamyla.
>> Així que això és bastant bo.
Així que ara seguirem endavant i executar aquest programa de nou,
i escriviu el nom complet del cap Daven.
Sorpresa, sorpresa.
Intro.
Hmm.
No hem imprès Daven de Nom complet correctament.
Ara bé, això hauria de ser obvi a Retrospect causa del que,
classe de, decisió de disseny estúpid?
>> Sí, jo no modificable la 06:00 interior del meu bucle.
Ara que ho vaig fer només perquè Sabia el nom de Zamyla
que havia de ser de sis lletres.
Però segurament això no és una solució general.
Així que resulta que podem dinàmicament esbrinar la longitud d'una cadena
cridant a una funció anomenada strlen.
>> Una vegada més, deliberadament succintament anomenat simplement
perquè sigui més còmode per escriure.
Però això és sinònim de obtenir la longitud d'una cadena.
Vaig a tornar al meu terminal finestra i tornar a executar el compilador.
Però ha cridar.
Implícitament es declara la funció de biblioteca strlen amb tipus unsigned int const--
Estic perdut.
Completament.
>> Així, especialment com el seu ulls comencen a vidriosos
amb missatges d'error com aquest, l'enfocament Sincerament, en les primeres paraules.
Sabem que el problema està en línia 8, tal com s'indica aquí.
I és en la cadena de 0.c.
Implícitament declarar funció de biblioteca strlen.
Així que en general es va a ser un patró de missatges d'error.
Implícitament declarar alguna cosa.
>> Així que en resum, què tinc jo semblava han fet pel que fa a la línia 8, aquí.
Quina podria ser la solució sigui encara si vostè mai ha fet servir strlen a tu mateix?
>> AUDIÈNCIA: Part d'una biblioteca diferent?
DAVID J. Malan: Part d'una biblioteca diferent.
Així es declara, per així dir-ho.
S'esmenta en algun arxiu a part de stdio.h i CS50.h.
Ara, on es defineix?
Per ser honest, que o bé ha de tot just saber això de la part superior del seu cap,
o busca a Google això i ho esbrini.
O que això, que he obert al CS50 Appliance el programa de terminal, que
és només la versió gran de pantalla completa de el que hi ha a la part inferior de la finestra de gedit.
>> I resulta que hi ha una ordre semblant succinta, anomenat
home de manual, en la qual si s'escriu en el nom d'una funció i premeu Enter,
que posarem bastant documentació arcà.
És només que el text general es veu una mica d'alguna cosa com això.
És una mica aclaparador a primera vista.
Però, francament, em vaig a deixar que els meus ulls es posen vidriosos
i només se centren en la part Em preocupo de moment.
>> Què és això.
Què es veu estructuralment com cosa que estic familiaritzat.
De fet, la pàgina de manual, de manera que a parlar, li dirà
en el que encapçalat presentar una funció com strlen es defineix.
Així que em vaig a tornar ara a gedit.
I jo seguiré endavant i afegir aquí #include
i deseu el fitxer.
>> Vaig a netejar la pantalla amb Control de L Si vostè ha estat preguntant.
I jo faré tornar a executar string.0, compila aquest moment.
./string.0 Zamyla.
Això ha actuat Déjame anar endavant i tornar a executar-lo amb Davenport.
Intro.
I això, també, semblava funcionar.
>> Així podem fer una mica millor que això, però, podem començar a coses ordenades
fins a només una mica.
I jo vaig a realitat introduir una altra cosa ara.
Vaig a seguir endavant i guardar això en un arxiu diferent.
I jo vaig a trucar aquest fitxer string1.c només
per ser coherent amb el codi podràs trobar en línia.
>> I anem a concentrar-nos en el exactament el mateix codi.
Resulta que tinc estat una mena de presa de
per fet el fet que el meu portàtil, i, al seu torn, l'aparell CS50
té una gran quantitat de memòria, una gran quantitat de RAM, una gran quantitat de bytes d'espai
en la qual puc emmagatzemar cadenes.
>> Però la realitat si em va escriure llarg suficients i bastants cops de teclat,
Vaig poder en tipus teoria a més caràcters
del meu equip té memòria per físicament.
I això és problemàtic.
Igual que un int només pot comptar tan alt, en teoria,
només es pot ficar tants personatges en la memòria RAM de l'ordinador o l'atzar
Memòria d'Accés.
>> Així que millor que havia anticipar aquest problema, fins i tot
encara que podria ser una rara cas de la cantonada, per així dir-ho.
No passa molt sovint, podria succeir.
I si passa i no ho faig anticipar i programa per a això,
el meu programa podia fer qui sap què.
Congelar, pengi, reinici, el que sigui.
Una cosa anticipat que podria succeir.
>> Així que el que vaig a fer Ara, a partir d'ara de veritat,
és abans que jo cegament utilitzar una variable com es que
se li ha assignat el valor de retorn de alguna altra funció com getString,
Vaig a assegurar que el seu valor és vàlid.
Així que sé només d'haver llegit Documentació del CS50 per getString,
que en última instància hi farem assenyalar, que getString retorna un símbol especial
anomenada NULL, N-O-L-L en tota tapes, si alguna cosa surt malament.
>> Així que normalment, es retorna una cadena.
Però d'altra banda si torna N-O-L-L-- que amb el temps veiem el que realment
significa: Això només significa una cosa dolenta ha passat.
Ara bé, això vol dir que, igual que en Scratch, Puc comprovar una condició aquí a C,
si s no és igual a NULL.
Així que si no has vist això abans, això només vol dir no és igual.
>> Així que és el contrari iguals iguals, que, recorden,
és diferent de sol iguals, que és l'assignació.
Així que si s no és igual a NULL, només llavors
Vull executar aquestes línies de codi.
Així, en altres paraules, abans de submergir cegament
i començar la iteració més de s, i tractar
com si és una seqüència de personatges, vaig a comprovar en primer lloc,
esperi un minut, és definitivament no igual a aquest valor especial NULL?
>> Perquè si ho és, les coses dolentes poden succeir.
I per ara, assumir que les coses dolentes succeint significa que el seu programa es bloqueja,
i no es pot necessàriament recuperar-se.
Així que, francament, sembla més lleig.
És una mica confús ara fer una ullada a.
Però això es farà més familiaritzar-se en poc temps.
>> Però jo vaig a proposar ara una altra millora.
Això és una millora a la correcció.
El meu programa és ara més correcta, perquè en el rar cas que no hi ha prou memòria
existeix, vaig a tractar-lo, i jo faré res.
Jo almenys no vaig a estavellar.
>> Però farem una versió final aquí.
I un arxiu anomenat string2.c.
Vaig a pegar aquest mateix codi per a un moment,
i jo vaig a posar en relleu aquest línia, 11, aquí, només per un moment.
Ara la realitat és que els compiladors intel · ligents Clang com podria arreglar això per a nosaltres
darrere de les escenes sense el nostre saber mai.
Però anem a pensar en aquest fonamentalment com un disseny problemàtica.
>> Aquesta línia de codi és, per descomptat, dient: inicialitzar una variable ia 0.
Això és bastant senzill.
I la novetat és aquest declaració, aquí, i ++, fent?
Ho hem vist abans, però en realitat no parlar-ne.
>> AUDIÈNCIA: Increment i.
>> DAVID J. Malan: i Increment.
Així que en cada iteració a través aquest bucle, cada cicle,
vostè està incrementant i per un.
Per tant, es fa més gran i més gran, i gran fins que el bucle acaba.
Com acaba?
Bé hi ha aquest mitjà condició que hem fet servir abans.
Vostè ha vist i en Tutorials en el conjunt P.
>> Però, ¿què és aquesta paraula?
Feu el següent bucle el sempre i quan i és menor que el que?
AUDIÈNCIA: La longitud de la cadena.
DAVID J. Malan: La longitud de la cadena.
Per tant, es tradueix bastant netament d'anglès en aquest sentit.
Ara el problema és que cada vegada que iterar a través d'aquest bucle en teoria,
Estic fent aquesta pregunta.
Sóc jo menys de la longitud de la cadena de s?
>> Ara sóc jo canviant en cada iteració?
Ho és.
A causa de la ++.
Així que cada iteració i és cada vegada més gran.
Però és s cada vegada més gran, o més petit, o canviar en absolut?
No
Així que en termes de disseny, un dels eixos al llarg de la qual tractem d'avaluar codi
a la classe, això se sent una mica estúpid.
>> Igual que vostè és, literalment, a cada iteració
d'aquest bucle demanant al mateixa maleïda pregunta de nou,
i una altra, i una altra, i, literalment, mai canviarà.
Almenys si no estic tocant s i tractant de canviar el contingut de s.
Així que em puc fer una mica millor que això.
>> I el que faré no és declarar només una variable i,
però una segona variable vaig arbitràriament, però convencionalment, cridar n.
Assignar n igual a la longitud de la cadena de s.
I després aquí, vaig a fer una mica d'optimització intel · ligent, de manera que
per parlar, que al final del dia no més correcta o no menys correcta és
que abans.
Però és un millor disseny.
En el fet que estic fent servir menys temps, menys cicles de CPU, de manera que
de parlar, de respondre a la mateixa pregunta, però només una vegada.
>> Teniu alguna pregunta respecte aquest general principi de millora,
dir, l'eficiència d'un programa?
Sí?
AUDIÈNCIA: Per què utilitzar el [inaudible]?
DAVID J. Malan: Bona pregunta.
Llavors, ¿per què posem la ++ a l'extrem del I en lloc del començament de la i?
En aquest cas, té cap impacte funcional.
I, en general, tendeixo a utilitzar l'operador de sufix
pel que és una mica més clar per quan l'operació està succeint.
>> Per aquells no familiaritzats, hi ha un altre declaracions pel que vostè podria fer ++ i.
Aquests són funcionalment equivalent en aquest cas
perquè no hi ha res més al voltant d'aquest incrementación.
Però un es pot topar amb casos i línies de codi
en què això fa la diferència.
Així que en general, no ho fem fins i tot parlar d'aquest.
Perquè, francament, que fa que la seva codi més sexy, i una mena de impermeable,
i menys caràcters.
Però la realitat és que és molt més difícil, Crec que, fins i tot per mi que embolico la meva ment
voltant d'ella de vegades, l'ordre de les operacions.
Així com un part, si Realment no m'agrada això,
tot i que això és una mica sexy buscant, també pot fer i + = 1,
que és la versió més lleig de la mateixa idea de incrementación postfix.
>> Dic això i vostè ha burlar-se d'ell,
però s'arriba a veure el codi com cosa bell en poc temps.
>> [Rialles]
>> DAVID J. Malan: Oi?
Sí.
Pregunta al centre.
>> AUDIÈNCIA: Cal dir int n?
DAVID J. Malan: Fas No necessito dir int n.
Així doncs ja hem dit int, que no cal tornar a dir-ho.
El problema és que n ha de ser del mateix tipus de dades com i.
Així que això és simplement una comoditat aquí.
Sí.
>> AUDIÈNCIA: Es pot anar pel Suport de caràcters d'impressió s i de nou?
DAVID J. Malan: Absolutament.
Així% c, recordar de passada temps, és només un marcador de posició.
Significa posar un char aquí.
n barra invertida, és clar, només mitjans posar un salt de línia aquí.
Així que simplement se'n va, ara, aquesta peça de la nova sintaxi.
I això està dient literalment, agafar la cadena anomenada s i veu a buscar el seu
caràcter i'th, per així dir-ho.
>> I segueixo dient caràcter i'th perquè en cada iteració d'aquest bucle
és com si estem imprimint , En primer lloc s suport 0,
com a programador podria dir.
Llavors S suport 1, a continuació, s el suport 2, a continuació, 3, a continuació, 4.
Però és clar que és una variable, així que només ho expresso amb i.
>> Clau, però, és adonar-se, sobretot si no tens
estat aclimatar-se a aquest món de la programació, en la qual tots
semblen comptar des de zero, he de començar a comptar des de zero ara.
Perquè les cadenes, primer caràcter, el z en Zamyla és per bé o per mal
va a viure al lloc número zero.
>> Molt bé, així que anem a portar-me nosaltres tornar aquí per Zamyla
i veure el que realment està passant a sota de la caputxa.
Així que hi ha aquesta noció de la conversió de tipus.
És possible que tingui realitat jugat amb això ja,
potser pel hacker edició de P d'un conjunt.
Però la conversió de tipus només es refereix a la capacitat en C i altres llenguatges
per convertir un tipus de dades a un altre.
>> Ara com podem veure aquesta bastant sense embuts?
Així que això, el record, és el començament l'alfabet anglès.
I el context, cal recordar, d' com fa una setmana és ASCII.
El Codi Estàndard Americà per Intercanvi d'Informació.
La qual cosa és només un camí molt llarg de dir un mapatge de les cartes
als números i de nombres a lletres.
>> Així Mitjançant M aquí, punt punt punts, línies amb, recordar,
el nombre decimal 65 en endavant.
I no parlem sobre això de manera explícita,
però segurament hi ha similars els números corresponents a les lletres minúscules.
I de fet, n'hi ha.
El món decidir alguns anys Fa poc que una minúscula amb
serà 97.
I poc b va ser 98, i així successivament.
>> I per a qualsevol altra tecla el teclat, no hi ha
serà un patró similar de bits.
O equivalentment, un nombre decimal.
Així que la pregunta que ens ocupa, llavors, és com podem
veure realment aquesta sota de la caputxa?
Així que vaig a anar a gedit nou.
I en comptes d'escriure aquest a partir de zero,
Vaig a seguir endavant i Només ha d'obrir alguna cosa
des del codi d'avui anomenat ASCII zero.
>> I ASCII zero són aquestes.
Així que anem a embolicar les nostres ments al voltant d'això.
Així que primer, jo he comentat el codi, que és agradable.
Com que és, literalment, em diu què esperar,
mostrar una assignació per a les lletres en majúscules.
Ara, jo no sé molt bé el que dir amb això, així que anem a deduir.
>> En Anglès, potser poc techie Anglès,
el que fa la línia 18 apareix a fer per nosaltres?
Només la línia 18.
Com és la inducció?
Què es posarà en marxa aquí?
>> AUDIÈNCIA: Un bucle.
>> DAVID J. Malan: un bucle.
I quantes vegades és que repetirà?
AUDIÈNCIA: [interposant VEUS] sis vegades.
DAVID J. Malan: no sis vegades.
AUDIÈNCIA: 26 vegades.
DAVID J. Malan: 26 vegades.
Sí, ho sento.
26 vegades.
Per què?
Bé, és una mica estrany, però He començat a comptar des del 65.
El que és estrany, però no està malament.
No està malament per l'opinió.
I jo estic fent que només perquè, per a aquest exemple,
Sóc una espècie d'anticipar que el capital A era 65.
Ara bé, aquest no és el més elegant manera de fer això, quin tipus de codi dur
valors esotèrics que ningú s'espera que cada vegada que cal recordar.
>> Però per ara, noto que estic fer això a través de 65 més 26.
Perquè pel que sembla jo no vull ni per fer l'aritmètica en el meu cap.
Així que vaig a deixar que el compilador ho faci.
Però llavors en cada bucle, cada iteració del bucle, estic incrementant i.
>> Així que ara això sembla una mica críptic.
Però hem de tenir l'edifici bàsic blocs amb els que entenen això.
% C és només un marcador de posició per a un char.
% I és un marcador de posició per a un int.
I resulta que l'ús d'aquest nova sintaxi, aquest parèntesi, per la qual
parlar, de manera que un tipus de dades dins d'un parèntesi,
Puc obligar el compilador per tractar i no és un sencer, sinó com un char.
>> D'aquesta manera em mostra el caràcter equivalent d'aquest nombre.
Ara aquí, aquest codi és gairebé idèntica.
Jo només volia fer súper explícit el fet
que estic començant als 97, que és minúscula.
Al cap amunt a través de 26 cartes més.
I estic haciendo-- de nou, fosa i, per així dir-ho.
O la conversió de tipus i, per així dir-ho.
>> Des d'un int a un char.
Així que el resultat final serà, francament, la informació que ja sabem.
Jo faré ascii-0 no dot-- dot c.
Avís, vostè probablement ha fet que error, ja que acabo de fer accidentalment.
Fer ascii-0.
Ara em faré ./ascii-0.
Vaig a apropar, i per desgràcia que va a desplaçar-se fora de la pantalla.
Però veiem tota una taula on 01:00 mapes a 97, b mapes a 98,
i si ens desplacem fins a més A, per descomptat, es correlaciona amb 65.
Així que això és només per dir que el que hem estat predicant,
existeix aquesta equivalència, es de fet, el cas en la realitat.
Així que una modificació ràpida d'aquest.
Permetin-me obro ascii-1.c.
I noti aquest punt, espècie de, l'aclariment d'això.
Això és ascii-1.c, i compte d'aquesta bogeria.
>> I això realment arriba al cor del que els ordinadors estan fent.
Tot i que nosaltres els humans ho faria No comptar en termes de letters--
No em poso a pensar, bé una continuació, b,
i usar-los per explicar objectes físics.
Per descomptat que pot dir que jo vull inicialitzar una variable anomenada C--
però podria haver cridat a aquest alguna cosa-- així c s'inicialitza al capital A.
>> Com que al final del dia, l'ordinador no importa el que vostè està emmagatzemant,
només li importa com desitja per presentar aquesta informació.
Com vol que l'ordinador interpretar que el patró de bits?
Així que això no és una cosa que seria generalment recomanaria fer-ho.
No deixa de ser un exemple per transmetre que es pot absolutament
inicialitzar un enter a un char.
Com que per sota de la capó d'un char, per descomptat,
és només un nombre del 0 al 255.
>> Pel que pot sens dubte el va posar dins d'un int.
I el que això també demostra que
pot convertir d'un tipus a un altre, aquí,
en última instància, la impressió de la mateixa cosa.
I de fet, això em va a arreglar online-- va ser volgut dir això, de nou, aquí.
Déjame netejar això en línia, i anem a veure en un tutorial en línia, segons sigui necessari,
el que es pretenia allà.
>> Okay.
Així que ahir per exemple que actualment participen A i B, i després anem a
prendre les coses a un nivell superior.
Així que amb A i B, i c d'en la capitalització
i l'equivalència dels mateixos, anem a fer una ullada a aquest exemple, aquí.
Un altre exemple de codi.
Obrirem un que sigui ja feta, de manera que
no haver de escriure tot des de zero.
>> I fixeu-vos en previsió estem usant encapçalat múltiple
arxius, entre els quals es nostre nou amic, string.h.
Ara això s'assembla, a primera vista, una mica críptic.
Però anem a veure si no podem raonar a través del que està passant aquí.
En primer lloc em dóna una cadena de l'usuari, i vaig posar aquesta cadena en una variable
anomenats s.
Copiar enganxar des d'abans.
En la línia 22, estic aparentment fent exactament el
Jo ho vaig fer fa un moment, estic iteració sobre els personatges de s.
>> I els nous trucs aquí estan utilitzant longitud de la cadena, l'optimització de menor importància
d'emmagatzemar la longitud de la cadena a n, En lloc de cridar strlen nou,
i una altra, i una altra.
I comprovant que i és menor que n.
Ara aquí, les coses es posen una mica interessant.
Però és només una aplicació d'aquesta mateixa idea nova.
El que en anglès fa s suport i representen?
>> AUDIÈNCIA: Comptant cada caràcter [inaudible].
>> DAVID J. Malan: Comptant cada personatge.
I encara més succinta, s suport i representen què?
Vostè diria.
Per no posar en el punt aquí.
>> AUDIÈNCIA: Bueno--
DAVID J. Malan: Així que si la paraula és-- si la cadena és Zamyla, que starts--
AUDIÈNCIA: --Vostè tractar amb els personatges en forma separada:
DAVID J. Malan: Good.
Exactament.
La notació de claudàtors que permet accedir a cada caràcter individual,
per s suport 0 serà la primer caràcter en la cadena.
s suport 1 serà la segona, i així successivament.
Per tant el dubte que estic fent, aquí, en aquesta condició és el que?
És el caràcter d'ordre i de s major o igual a minúscules 01:00?
I què significa això, aquí, amb els símbols d'unió dobles?
AUDIÈNCIA (JUNTS): I.
DAVID J. Malan: I.
És només equivalent a aquest.
I no és una paraula clau en C, vostè ha de ús, molest, signe ampersand.
I això, per contra, està demanant és s de l'i-èsim caràcter menors o iguals
a minúscules z?
I un cop més, aquí és on la comprensió de la subjacent
implementació d'un ordinador té sentit.
Tingueu en compte que, tot i que tinc el punt punt punt allà,
s'assembla a la aa la z en minúscules es tots els valors contigus fins de 97 d'ara endavant.
>> I el mateix per majúscules a partir de les 65.
Així que el menjar per emportar, llavors, és que en anglès,
Com descriuria el que la línia 24 està fent?
Sí?
>> AUDIÈNCIA: El 24 està comprovant si cada personatge és una minúscula.
DAVID J. Malan: Es comprovar si cada caràcter és una lletra minúscula.
Així que, fins i tot de forma més succinta, és el caràcter i-èsim de s minúscula?
Això és tot el que estem expressar aquí lògicament,
una mica críptic, però en última instància, molt francament.
És s de i'th minúscules personatge?
>> Si és així, i aquí és on les coses aconseguir una mica al · lucinant
per un moment, si és així, aneu per davant i imprimir un caràcter.
Així que això és només un marcador de posició, però, ¿quin personatge?
Per què faig s suport d'i menys aquesta expressió aquí?
>> Bé notar el patró aquí.
Els nombres reals no importen tant.
Però observi que 97 és a quina distància de 65?
>> AUDIÈNCIA: 32.
>> DAVID J. Malan: 32.
Què tan lluny és 98 de 66?
>> AUDIÈNCIA: 32.
>> DAVID J. Malan: Poc c de C gran?
32.
Així que hi ha 32 salts d' una lletra a una altra.
Així que, francament, jo, podia simplificar aquest a això.
Però llavors estic una mica difícil de codificació Aquest baix nivell de comprensió
que cap lector està sempre va a entendre.
Així que vaig a generalitzar com jo conèixer les lletres minúscules són més grans.
Sé que les lletres majúscules són valors més petits, irònicament.
>> Però això és efectivament equivalent a dient restar 32 del segle suport de i.
Així, en el context d'aquests cartes, si la carta
passa a ser una minúscula a, i li resta 32,
¿Quin efecte té això, matemàticament, en minúscula?
AUDIÈNCIA: Capitalizes--
DAVID J. Malan: majúscula ella.
I de fet, aquesta és la raó per la programa es diu capitalitzar zero.
Aquest programa ja sigui capitalitza una carta,
després de comprovar si es tracta de fet, una lletra minúscula.
Altrament, en la línia 30, què faig si que no és una lletra minúscula que sóc
mirant a una determinada iteració en el bucle.
Només imprimir.
>> Així que no canviar les coses això ni tan sols és minúscula.
Restringir-se a a poc a poc a través de z.
Ara bé, això és bastant arcà.
Però al final del dia, aquesta és la forma en què, hi havia una vegada,
hagut de implementar coses.
Si en comptes oberta amb majúscula un, gràcies oh déu.
Hi ha una funció cridats a superior que pot
fer tot el que acabem de fer a un nivell força baix.
>> Ara a part superior és interessant perquè s'ha declarat en un arxiu,
i vostè només saber això mitjançant la comprovació de la documentació,
o que em diguin, per exemple, a la classe, on existeix, en un arxiu anomenat ctype.h.
Així que aquest és un altre nou amic nostre.
I ho fa superior exactament que el seu nom suggereix.
>> Pot passar, com un argument, entre aquests parèntesi, una mica de caràcter.
Vaig a passar en el caràcter i'th de s utilitzant la nostra nova notació de luxe
que implica claudàtors.
I prendre una conjectura, el que és el retorn valor d'superior sembla va
a ser?
Una lletra majúscula.
>> Així que si pas en minúscula, amb sort, per definició de a superior,
que va a tornar un majúscula A. En cas contrari,
si no és una lletra minúscula a primer lloc, acabo de imprimir-lo.
I, en efecte, observi el segon amic aquí.
No només per la part superior hi ha, però és menor, el que
en realitat respon a aquesta pregunta per a mi.
>> Ara qui va escriure aquestes coses, 10s de fa anys, saps què?
Implementat a superior i és reduir l'ús de codi com aquest.
Però, de nou, d'acord amb aquesta idea d'abstreure de distància,
més o menys, el nivell més baix detalls d'implementació.
I de peu sobre les espatlles de la gent que van venir abans que nosaltres, l'ús de funcions
com a superior i és més baixa, el que suficient meravellosament estan molt ben
anomenat per dir el que fan, és un paradigma meravellós per adoptar.
>> Ara, resulta que si llegeixo la pàgina del manual per a, per exemple, per a la part superior,
Aprenc alguna cosa més.
Així que l'home ToUpper.
És una mica aclaparador.
Però avís, així és que la menció de l'arxiu de capçalera que he d'utilitzar.
Com acotació al marge, ja que aquest és enganyosa, la funció
utilitza sencers en lloc de caràcters per raons de comprovació d'errors.
Però potser vindrem de nou a que en el futur.
>> Però fixa't, aquí, als conversos superiors la lletra c a majúscules si és possible.
Així que això és bastant senzill.
I ara anem a ser una mica més específic.
Fem una ullada a la part de la Pàgina home baix valor de retorn.
El valor retornat és que de la carta convertit.
O c, si la conversió no era possible,
on c és l'entrada original.
Què sé d'aquí, de l'argument que al superior.
>> Llavors, què és el menjar per emportar d'aquesta?
El valor retornat és que de la carta convertit,
o c, la carta original, si la conversió no era possible.
Quines millores puc, per tant, fer que el disseny del meu codi?
Sí?
>> AUDIÈNCIA: Vostè pot treure la cosa.
DAVID J. Malan: puc eliminar la sentència else,
i no només la sentència else.
>> AUDIÈNCIA: Vostè pot eliminar [inaudible].
>> DAVID J. Malan: puc eliminar tot la forquilla
en el camí, el cas més en conjunt.
Així que de fet, deixa obrir la versió final d'aquest,
capitalitzar-2 i notar com, si vostè, sexy, el codi és ara aconseguir,
en què he reduït d'alguns 07:00 més o menys línies a només quatre,
la funcionalitat que tenia la intenció simplement trucant a la superior,
passant en si suport i, i la impressió a terme, amb el marcador de posició% c,
aquest personatge en particular.
>> Ara podria dir-se que hi ha un error, o almenys el risc d'un error,
en aquest programa.
Així que per tornar a una menjar per emportar abans,
¿Què he de fer, probablement, també en aquest programa perquè sigui més robusta,
de manera que no hi ha manera que pugui estavellar, fins i tot en casos rars?
AUDIÈNCIA: Assegureu-vos que no és NULL.
DAVID J. Malan: Assegureu-vos que no és NULL.
Així que en realitat, per fer aquesta súper adequada, que hauria de fer alguna cosa semblant,
si s no és NULL, seguir endavant i executar
aquestes línies de codi, que Puc llavors guió així,
i després posar en el meu clau de tancament.
Així que bé lligar juntes de les dues idees.
Sí?
AUDIÈNCIA: Podries utilitzar un bucle Do While, en el seu lloc?
DAVID J. Malan: Podria Faig una do while?
AUDIÈNCIA: --Vostè vull assegurar-me que en realitat [inaudible].
DAVID J. Malan: Podria utilitza un do estona?
Resposta curta, no.
Com que vostè està a punt de introduir un altre cas cantonada.
Si la cadena és de longitud zero.
Si, per exemple, m'acaba de colpejar Introduïu, sense mai escriure Zamyla.
Vaig a lliurar una còpia d'un real cadena, com veurem amb el temps veiem,
que té zero caràcters.
Encara és una cadena, és només súper curt.
Però si utilitza un do temps, vas a cegues
tractar de fer alguna cosa amb respectar aquesta cadena,
i res va a ser-hi.
>> AUDIÈNCIA: Bé, si ho has fet fer [inaudible] mentre S--
DAVID J. Malan: Oh, ja veig, segueixo Obtenció d'una cadena de l'usuari.
Així que la resposta curta, que podria, i mantenir la llauna
que et donin una cadena que és prou curt com per cabre en la memòria.
Absolutament.
Jo vaig optar per no fer-ho.
Si ells no em donen la cadena I vulgui, jo vaig a deixar, em vaig a rendir.
Però absolutament, per a aquest propòsit, vostè pot absolutament fer això.
>> Així que els arxius de capçalera de la biblioteca que ara estem familiaritzats amb són aquests, aquí.
I / S estàndard, CS50.h, string.h, ctype.h, i hi ha, de fet, altres.
Alguns de vosaltres heu descobert la biblioteca de matemàtiques a math.h.
Però permeteu-me que li presenti, ara, a aquest recurs que el personal CS50, Davin,
i Rob, i Gabe particular, han posat juntes.
Això aviat enllaçar a la pàgina web del curs.
Es diu CS50 referència.
>> Què acaba de donar-li una ràpida gust de la mateixa, funciona com segueix.
Déjame anar a reference.cs50.net.
Vostè veurà a la mà esquerra banda una llista aclaparadora
de les funcions que vénen amb c.
Però si m'importa, de moment, sobre alguna cosa com strlen,
Em pot escriure-hi.
Es filtra la llista simplement el que m'importa.
Vaig a fer clic.
I ara a l'esquerra, veuràs el que esperem
és una més senzilla, humana amable explicació de com
aquesta funció treballa.
>> Retorna la longitud d'una cadena.
Heus aquí un resum, així és com vostè utilitzar-lo en termes de l'arxiu de capçalera,
i en termes del que la funció sembla que en termes dels seus arguments.
I llavors aquí, devolucions la longitud d'una cadena.
Però per a aquells de vostès més còmode, en realitat es pot fer clic més còmoda,
i el contingut d'aquest pàgina, ara, canviarà
sent els valors per defecte del s'obté mitjançant l'ús de la pàgina de manual.
>> En altres paraules, CS50 de referència és una simplificació
d'home pàgines pel personal, per als estudiants.
En particular, els menys còmode i al mig, de manera que vostè
no han de tractar d'embolicar la seva ment al voltant, francament,
una sintaxi força críptic i documentació en algun moment.
>> Així que tingues en compte en els dies per venir.
Així que aquí, de nou, és un Zamyla.
Ara anem a fer una pregunta que és una mica més humana accessible.
Gràcies a Chang, que ha estat imprimir més elefants
sense parar durant els últims dies.
Tenim una oportunitat de donar almenys un d'ells de distància.
Si poguéssim aconseguir tot just un voluntari venir en un màxim de dibuixar a la pantalla.
I aquí?
>> Anem amunt.
Quin és el teu nom?
ALEX: Alex.
DAVID J. Malan: Alex.
Bé.
Alex, anem a dalt.
Estem a punt de veure la seva escriptura a mà a la pantalla aquí.
Molt bé, encantat de conèixer-te.
>> ALEX: Niça que vostè compleix.
>> DAVID J. Malan: Molt bé.
Així, l'exercici super simple.
Bar no és alt per aconseguir un elefant avui.
Està jugant el paper de getString.
I jo vaig a simplement dir-li la cadena que t'has posat.
I suposem que, getString, han estat cridats.
I l'ésser humà, com jo, té escrit en Zamyla, Z-A-M-i-L-A.
Només has d'anar endavant i escriure Zamyla al pantalla com si vostè ha aconseguit
i s'emmagatzema en algun lloc de la memòria.
>> Deixant espai per al que serà diversos altra paraules-- això està bé, segueix endavant.
>> [Rialles]
>> Així Zamyla, Excel · lent.
Així que ara suposi que, getString, són cridats de nou.
I per tant, dono que, al teclat, amb un altre nom, Belinda.
Bé.
I ara, la propera vegada és getString trucada, escric en una mena Gabe,
G-A-B-E. Realment estàs prenent al cor de la memòria d'accés aleatori.
Què és el dibuix tot completament a l'atzar.
Okay.
>> [Rialles]
ALEX: Ho sento meva lletra és dolenta.
DAVID J. Malan: No, això està bé.
I què hi ha de Rob, R-O-B. Okay.
Bé.
Així que no t'ho anava a anticipar tipus d'assentar les coses d'aquesta manera.
Però podem fer que això funcioni.
Llavors, ¿com va ser el procés de col · locació aquests caràcters en la memòria?
En altres paraules, si pensem en aquesta pantalla negre rectangular
com a representació d'un RAM, o memòria de l'ordinador.
>> I recorda que la memòria RAM és només un munt de bytes,
i bytes són un munt de bits.
I bits són d'alguna manera implementat, generalment
amb alguna forma de electricitat en maquinari.
Així que és una espècie de la estratificació que hem parlat
i ara es pot donar per fet.
Com va ser el procés de decidir on escriure
Rob front Gabe cara Belinda front Zamyla?
>> ALEX: Jo només ho va fer en el demana que em vas dir.
>> DAVID J. Malan: I això és cert.
Però el que regeix on poses El nom de Belinda i el nom de Gabe?
>> ALEX: Res?
DAVID J. Malan: [Rialles] Perquè funcioni, això està bé.
Així que els ordinadors són poc més ordenat que això.
I així, quan ens vam quedar allà implement-- per només un moment-- quan en realitat
aplicar una cosa així GetString en un ordinador,
Zamyla podria ser establert més o menys com ho va fer a la pantalla, no.
>> I el que és clau per notar aquí, el que Alex va fer,
és que hi ha una espècie de demarcació entre cadascuna d'aquestes paraules, oi?
No vas escriure Z-A-i-M-L-A-B-E-L-I-N-D-A-G-A-B--
en altres paraules, hi ha una espècie de demarcació que sembla ser,
classe de, l'espaiament aleatori entre aquestes diverses paraules.
Però això és bo, perquè nosaltres, els humans poden ara
visualitzar que aquests són quatre cordes diferents.
No és només una seqüència de de lots de caràcters.
Així que un ordinador, llavors, per la seva banda, podria tenir una cadena com Zamyla,
posar cadascuna d'aquestes lletres dins d'un byte de memòria.
Però aquest nombre és molt més gran, per descomptat, de sis caràcters.
>> Hi ha un munt de RAM.
I així en endavant, aquest reixeta de caixes va
per representar el que Alex acaba no aquí a la pantalla.
I ara, Alex, li podem oferir una blau o un elefant taronja de Chang.
ALEX: em quedo amb un elefant blau.
DAVID J. Malan: Un elefant blau.
Així que un gran aplaudiment, si poguéssim, per a Alex aquí.
>> [Aplaudiments]
>> ALEX: Gràcies.
DAVID J. Malan: Gràcies.
Així que el menjar per emportar és que, encara que el patró de tipus de canviar amb el temps, aquí
en el tauler, hi havia un demarcació entre les diverses cadenes
que Alex té per a nosaltres.
Ara les computadores, francament, podria fer el mateix.
Podrien tipus de plop cadenes en qualsevol lloc a la memòria RAM.
Fins aquí, per aquí, aquí baix, aquí baix.
>> Ells podrien fer exactament això.
Però, és clar, això és probablement no la millor planificació.
¿Cert?
Si em van sol · licitar a Alex Obtingui els noms, probablement ell havia
posar una mica més per aquí, potser fins aquí, per aquí, per aquí, amb el temps
per aquí.
Però amb una mica més de planificació, sens dubte, podríem posar les coses de manera més neta.
I de fet, això és el que fa un ordinador.
>> Però el problema és que si la cadena obtinc
després de Zamyla és una cosa com el Belinda,
proposar on podríem escriure la lletra B pel que fa a aquesta reixeta?
On vols anar?
A la dreta de la 1, per sota de la z, per sota de la A?
Quins serien els seus primers instints?
AUDIÈNCIA: Per sota de la z.
DAVID J. Malan: Així que per sota de la z.
I això és bastant senzill, oi?
És una mena de neta, que és el que fem en un teclat quan prem enter,
o un correu electrònic al realitzar una llista amb vinyetes de les coses.
Però la realitat és que els ordinadors tractar de ser més eficient,
i ficar sens dubte el més dades en la memòria RAM com sigui possible,
de manera que no perdi cap bytes.
Així que no perdis qualsevol espai de la pantalla.
I el problema, però, és que quan la posem literalment la carta
b després d'una, com anem a saber on acaba el nom de Zamyla
i comença el nom del Belinda?
Així que els éssers humans que acaba de proposar, així, prem la tecla Intro, essencialment.
Poseu baix.
O com va fer Alex, simplement començar a escriure el següent nom sota de l'anterior,
i per sota d'aquell, i a continuació, per sota d'aquell.
Això és un senyal visual.
>> Els ordinadors tenen una altra senyal visual, però és una mica més concís.
És aquest caràcter covard.
Backslash 0, el que és potser una reminiscència de la barra invertida n,
i així successivament, ara.
Les seqüències d'escapament especials.
Backslash 0 és la manera de en representació de vuit bits zero consecutius.
0000 0000.
>> La forma d'expressar que no és colpejar el nombre zero en el teclat,
perquè en fet que és un Char ASCII.
Es veu com un nombre, però és en realitat un nombre decimal
que representa la circular glifo, el tipus de lletra circular.
Mentrestant, la barra invertida zero significa, literalment,
posar 08:00 zero bytes aquí per a mi.
>> Així que això és una cosa arbitrari.
Podríem haver utilitzat qualsevol patró de bits, però el món
decidit alguns anys fa, que per representar
al final d'una cadena a la memòria, només cal posar un munt de zeros.
Perquè podem detectar això.
Ara que significa que cap carta de la alfabet pot ser representat amb zeros.
>> Però això està bé, ja hem vist que estem fent servir 65 a fins al 97 d'ara endavant.
Nosaltres no arribarem enlloc prop de tots els zeros.
Així Belinda a la memòria d'un ordinador és en realitat va a anar aquí.
He dibuixat en groc just per cridar la nostra atenció.
I fixin-, també, aquesta és completament arbitrària.
He dibuixat com una quadrícula.
Igual, la memòria RAM és només un objecte físic.
No necessàriament ha files i columnes, per se.
És només té un munt de bytes implementat en maquinari d'alguna manera.
Però si després de Belinda I escrit en nom de Gabe,
ell va a acabar aquí a la memòria, i si he escrit en nom de Daven,
per exemple, que acabarà aquí.
I puc seguir escriure fins i tot més noms.
>> Per desgràcia, si intento escriviu un nom de súper llarga,
Jo podria finalment quedar-se sense memòria.
En aquest cas, és getString tornarà NULL, com hem dit.
Però, per sort, almenys en aquest visual aquí, no arribem tan lluny.
>> Ara el que és interessant és que aquesta idea general de tractar les coses
com és en caixes representant d'una característica de C
i una gran quantitat d'idiomes, coneguda com una matriu.
Una matriu és un altre tipus de dades.
És una estructura de dades, si es vol.
Estructura en el sentit que realment, classe de, l'aspecte d'un quadre, almenys
a l'ull de la teva ment.
Una matriu és un contigu seqüència de tipus de dades idèntiques,
esquena amb esquena a esquena amb esquena.
>> Així que una cadena, en una altra És a dir, és una sèrie de caràcters.
Un conjunt de caràcters.
Però resulta que vostè pot tenir arrays de raïms de coses.
De fet, podem posar fins i tot nombres en una matriu.
Així que la forma en què anem a començar
declarar aquestes dades estructura coneguda com una matriu
També es va a utilitzar claudàtors.
Però aquests claudàtors van a tenir un significat diferent en aquest context.
>> I anem a veure de la següent manera.
Suposem que jo vaig obrir un nou arxiu aquí.
I puc guardar això com ages.c.
I vaig a guardar això en el meu carpeta d'aquí.
I ara vaig a seguir endavant i començar a escriure alguna cosa
com incloure CS50.h, incloure stdio.h, int void main.
I després dins d'aquí, vull tenir primer un int anomenada edat.
>> I jo vaig a utilitzar això per aconseguir un int l'usuari per la seva edat.
Però aquest programa està destinat a ser utilitzat per diverses persones, per qualsevol context.
Tinc una fila de persones.
Tots ells han d'escriure en la seva edat per potser una mica, no sé,
concurs o esdeveniment que han arribat a.
Així que la propera persona, em necessitar una altra variable.
>> Perquè si acabo de fer edat getInt, això és
va a donar-li una pallissa, o sobreescriure edat de la persona anterior.
Així que això no és bo.
Així que el meu primer instint podria ser, oh, està bé,
si vull obtenir diverses de les persones ages-- anem a cridar aquesta edad1,
int age2 aconsegueix int, int edad3 aconsegueix getInt.
I ara vaig a utilitzar algun codi pseudocodi aquí.
>> Fer alguna cosa amb aquests nombres.
Deixarem per un altre dia el que estem fent allà, perquè només
tenir cura de moment sobre la edad1, age2, edad3.
Desafortunadament, una vegada que compilar aquest programa
i el va posar davant dels usuaris reals, ¿Quin és el mal disseny fonamentalment
decisió em sembla que han fet?
Sí?
AUDIÈNCIA: [inaudible]
DAVID J. Malan: Sí, Ni tan sols he intentat
esbrinar com moltes edats Com puc realment importa?
Si tinc menys de tres persones aquí, i per tant menys de tres anys d'edat,
Encara estic esperant a cegues 03:00.
Déu no ho vulgui a quatre persones es presenten.
El meu programa no serà fins i tot donar-los suport.
>> I pel que aquest, llarga història resum, no és un bon hàbit.
¿Cert?
Jo estava copiant essencialment i enganxar el codi i només es pessiguen
els noms de les variables.
I, per Déu, si ho haguessis fet, no 3 les edats, però 10 o 100, o fins i tot 6500
estudiants universitaris, per exemple.
Això no serà particularment Codi elegant, o sostenible.
Vas a haver de reescriure el programa cada vegada que
el nombre de persones canvia.
>> Així que gràcies a Déu, en la nostra actual arxiu ages.c per ara,
tenim una solució més intel · ligent.
En primer lloc, vaig a demanar prestat el Construïm hem fet servir un parell de vegades,
aquest bucle Do While, per tal d'aconseguir el nombre de persones a l'habitació.
Jo només vaig a molestar a l'usuari, un cop més i una altra, fins que ell o ella em dóna
un valor de n que és un enter positiu.
>> Jo podria haver utilitzat, últim temps a arribar int positiu.
Però no hem de de veritat, així que em vaig anar per davant
i tornar en pràctica aquesta idea.
Ara aquí, aquest és el nou truc.
En la línia 27, com els comentaris en la línia 26 indica,
declarar una matriu en la qual per emmagatzemar l'edat de cadascú.
>> Així que si vol aconseguir, no un int, no dos enters, però un munt de punts.
Específicament n nombres enters, eren n poden ser de tres, podria ser 100, podria ser 1000.
La sintaxi, simplement, és que per exemple, quin tipus de dades és el que vols?
Què és el que voleu marcar que parteix de la memòria?
Què vols de trucar a la reixeta que són aquestes pictòricament?
>> I entre parèntesi aquí, vostè diu el gran que desitja que la matriu sigui.
I així abans, quan vaig dir que la sintaxi és una mica diferent aquí,
encara estem utilitzant claudàtors, però quan estic declarant una matriu,
el número dins de la claudàtors mitjans
què tan gran vols la matriu sigui.
>> Per contra, quan utilitzem s suport i fa un moment, s, una cadena,
és de fet una sèrie de caràcters, però quan no s'està declarant una variable,
Igual que amb aquesta paraula clau aquí, simplement està rebent
un índex específic, una específica element d'aquesta matriu.
Quan sapiguem això, la resta d'això és senzill.
Si nou que estic primer va a imprimir ¿Quina és l'edat de la persona número i.
Quan acabo de dir la persona número u, persona número dos, la persona número tres.
>> I jo només estic fent aritmètica, de manera que les persones normals com,
comptem des d'un per a aquest programa, i no des de zero.
Llavors jo dic getInt, però guardo la resposta en edats mènsula.
Que és l'edat i-èsim de la matriu.
Així, mentre que l'última vegada que estàvem tractant aquestes caixes com caràcters per al nom de Zamyla,
i altres.
Ara, aquestes caixes representen 32 bits, o quatre bytes
en el qual podem emmagatzemar 1 int, int, int.
Tot això, de nou, són el mateix tipus de dades.
>> Ara faig alguna cosa ximple, com passa el temps, només
per justificar la redacció d'aquest programa.
I després aquí baix, vaig tornar a iterar sobre la matriu dient aquí a un any,
persona número u voluntat ser alguna cosa anys.
I en adonar-se que math-- Vull dir, això
no és molt complicat arithmetic-- Acabo d'afegir un a la seva edat.
Només per demostrar, de nou, aquesta.
>> Així com jo pot indexar en una cadena, s, així que pot indexar I en una varietat d'edats,
com que hi ha.
Llavors, on és aquest estarà prenent nosaltres?
Així que anem a veure, en última instància, un poques coses en els dies per venir.
Un, tot aquest temps, quan escriure els seus propis programes,
com Mario, cobdiciós, el crèdit.
Vostè ha estat escrivint el nom de el programa i prémer la tecla Enter.
I a continuació, obtenir la entrada de l'usuari.
>> Amb getString, getInt, getLongLong, o similars.
Però resulta que els suports C cosa que es diu la línia d'ordres
arguments, que ens permetrà aconseguir realment les paraules que escriu,
en l'indicador parpelleja, després el nom del seu programa.
>> Així que en els dies per venir, podria escriure alguna cosa com César,
o el nombre 13, a partir de llavors ./caesar.
Anem a veure com funciona.
Com que de fet, en problema va fixar dos, estem
va a presentar- a una mica d'alguna cosa
reminiscència de Ralphie de desafiar a principis de la cartografia.
L'art de la codificació de la informació.
Això, de fet, és molt reminiscència del que Ralphie va fer.
>> Aquest és un exemple d'un xifrat algoritme anomenat ROT13, R-O-T 13.
Què significa simplement giri la lletres en l'alfabet 13 llocs.
I si ho fa, veurà ara el que és, potser, una frase familiar.
Però la manera en que utilitzarem això, en última instància, és més general.
>> En P posat dos, en l'edició estàndard, vostè implementa un parell de xifres,
un anomenat César, un anomenat Vigenère.
Tots dos són de rotació xifres, que d'alguna manera
convertir una lletra en una lletra diferent.
I César és super simple.
Per afegir una, afegeix 13, o un nombre de fins a 26.
Vigenère fa que en un lloc per carta.
Així Vigenère, com es veurà en l'especificació, és més segur.
>> Però al final del dia el que vostè estarà implementant i P estableix dos,
és aquesta clau que s'utilitza tant per al xifrat i el desxifrat.
En relació amb el procés de convertir text pla, algun missatge original,
en text xifrat, que és una cosa xifrada.
I després desxifrar de nou.
>> En l'edició de hackers, Mentrestant, podràs
encarregat d'alguna cosa semblant en esperit, on li donarem
un arxiu, des d'un Linux típic, o Mac o Unix ordinador anomenat etsy
contrasenya, que conté un conjunt munt de noms d'usuari i contrasenyes.
I aquestes contrasenyes tenen tot ha xifrat o hash,
per així dir-ho, més adequadament com es veurà en l'especificació.
>> I l'edició de hackers desafiarà que amb la presa d'una entrada com aquesta,
i esquerdament de la contrasenya.
És a dir, esbrinar el que la la contrasenya de l'humà en realitat era.
Perquè, de fet, les contrasenyes són generalment no s'emmagatzemen en el clar,
i generalment contrasenyes ha de ser difícil d'endevinar.
Això no és sovint el cas.
>> I el que jo pensava que faríem és concloure amb un parell de minuts
mirada a un particular mala elecció de contrasenyes
d'una pel · lícula es pot recordar amb afecte.
I si no, vostè ha de llogar.
>> [REPRODUCCIÓ DE VÍDEO]
>> Casc, vostè dimoni, ¿què està passant?
Què estàs fent amb la meva filla?
>> Em -Permit per introduir el cirurgià plàstic brillant i jove,
El doctor Phillip Schlotkin.
L'home més gran del nas al tot l'univers i Beverly Hills.
>> El teu Altesa.
>> Treball -Nose?
No entenc.
Ella ja ha tingut una cirurgia de nas.
Era el seu dolç 16 presents.
>> No, no és el que penses.
És molt, molt pitjor.
Si no em dones la combinació per l'escut d'aire,
Schlotkin metge li donarà al seu filla de tornada a la seva antiga nas.
- [Sospirs] nooooooooooooo.
D'on vas treure això?
>> -Tots Dreta.
Et diré, t'ho diré.
>> No, pare, no.
No has de fer-ho.
>> -Ets Dret estimada.
Vaig a estranyar la seva nova nas.
Però no vaig a dir-los la combinació no importa què.
>> -molt Bé.
Metge Schlotkin, fer el que vulguis.
>> Plaer -El meu.
>> No!
Espera, espera.
T'ho diré.
>> Ho sabia anava a funcionar.
Molt bé, dóna-me'l.
>> -El Combinació és un.
>> -Un.
Dos.
Tres.
-Quatre.
-Cinc.
-SO La combinació és un, dos, tres, quatre, cinc.
Aquesta és la combinació més estúpida Jo mai vaig escoltar en la meva vida.
Aquest és el tipus de cosa que un idiota tindria en el seu equipatge.
>> Vostè -Gràcies, la seva altesa.
>> [CLICS REMOT]
>> Què vas fer?
>> -I Apagar la paret.
>> No, no ho vas fer, et apagat tota la pel · lícula.
>> Hi ha d'haver -I pressionar el botó equivocat.
>> Bé, posar de nou en!
Col loqueu la pel · lícula al seu lloc!
>> Sí, senyor!
Sí, senyor.
-Anem, Arnold.
Vinga, Gretchen.
Per descomptat que sé que vaig a haver de cobrar per aquest.
Bé?
¿Va funcionar?
On és el rei?
>> És Treballades, senyor, tenir la combinació.
-Gran.
Ara podem prendre fins a l'últim alè d'aire fresc des del planeta Druidia.
Quina és la combinació?
>> Ona, dos, tres, quatre, cinc.
>> Ona, dos, tres, quatre, cinc?
Sí.
Això és increïble.
Tinc la mateixa combinació en el meu equipatge.
Preparar Spaceball 1 per a sortida immediata.
>> Sí, senyor.
>> -i Canviar el combinació en el meu equipatge.
[PORTA DE CLOENDA DE SO]
[Clink DE PORTES QUE colpeja el CASC]
-Ahh.
[FI REPRODUCCIÓ DE VÍDEO]
DAVID J. Malan: Això és tot per CS50, ens veiem la setmana que ve.
NARRADOR: I ara, Deep Pensaments, per Daven Farnham.
>> Daven FARNHAM: Codificació en C és molt més difícil d'esgarrapades.
printf, Scratch era una mentida.
>> [FRASE DE L'HUMOR]