ALTAVEU 1: D'acord. Benvingut de nou. Aquesta és la segona setmana de CS50, i tenim fins al moment han utilitzant funcions però en gran mesura a donar per fet. Hem utilitzat printf que té la efecte secundari d'impressió coses a la pantalla. Hem utilitzat get-int, aconsegueixi surar. Però el que si vostè realment vol crear seves pròpies funcions, com alguns és possible que ja hagi començat a Problemes de fer per un, encara que no és estrictament necessari? Bé, seguirem endavant i tornar a que problema de només demanar a l'usuari el seu nom i una mica d'impressió a la pantalla, però intenta factoritzar alguns de la comunalitat que hem vist en el nostre codi fins ara. Així que amb això vull dir el següent. Vaig a seguir endavant i crear un nou programa, a només una trucada que hola.c com de costum. Vaig a seguir endavant i donar-me incloure io.h estàndard en la part superior. Vaig a donar-me també preventivament la biblioteca CS50 de manera que No em va cridar pel compilador. I ara em vaig a anar per davant i declarar int, principal, nul · la. I després aquí, aquí és on vull per començar a externalitzar funcions a altra funció que jo mateix sóc va a escriure, però això no existeixen en l'actualitat. Per exemple, suposem que volia escriure una funció que em permet imprimir hola, coma i llavors el nom d'algun usuari. En lloc de seguir fent printf hola,% s, no seria agradable si havia només una funció anomenada No printf, però en lletra d'impremta? En altres paraules, vull ser capaç de escriure un programa que fa una mica de alguna cosa com això. En primer lloc, vaig a dir printf seu nom, provocant amb això que l'usuari donar-me el seu nom, i després em vaig va a utilitzar les cordes s familiars per declarar una cadena. Dóna'm una variable de tipus cadena, diuen s, i deseu-lo en què el resultat de cridar a obtenir cadena. Però ara, en les últimes setmanes, hauria de una mica tediós fer hola,% s / n. I en altres paraules, que hem vist aquesta exemple, un munt de vegades, i és un exemple trivial, ja que només hi ha una línia de codi així que no és realment un gran cosa que constantment escriure de nou. Però suposem que aquesta línia de codi en realitat s'estaven convertint en una càrrega, i que no és una línia de codi, però és 10 línies de codi d'un parell de setmanes a partir d'ara, i estàs cansant de copiar i enganxar o tornar a escriure el mateix codi. ¿No seria agradable en lloc de fer printf hola,% s, etc, ¿No seria agradable si hi havia només una funció anomenada nom d'impressió que pren un argument - en altres paraules, es pren l'entrada - i després punt i coma. Perquè la funció, no seria bo que el que existia? Llavors jo no hauria de preocupar-se per printf ho és, què% s i tots aquestes complexitats que són no és tan interessant. Són útils. Així que escrigui el seu nom, per desgràcia, no era inventat fa uns 40 anys més. No se li va acudir escriure. Però aquesta és la bellesa de tenir una llenguatge de programació, igual que en Rasguño pot definir blocs personalitzats, pel en C, i la majoria de qualsevol idioma, oi definir la seva pròpia funcionalitat, pot a definir les seves pròpies funcions. Així que, encara que tinguem principal per automàticament de forma gratuïta, es pot declarar les nostres pròpies funcions. Així que em vaig a fer una mica d'espai aquí al capdamunt, i jo vaig a declarar el meu pròpia funció que va a semblar un mica estrany al principi, però anem a arribar de nou a aquest poc temps. Vaig a dir nul · la, amb el que que indica aquesta funció fa alguna cosa, té un efecte secundari, però no tornar alguna cosa a mi en el mateixa manera que rep int o aconseguir string sí que ho fa. I jo vaig a donar a aquesta funció una Nom de la lletra d'impremta, i jo vaig a especifica que aquest tipus tindrà una cadena, i jo vaig a trucar a aquest nom de la cadena. Podria dir-el que vulgui, però jo vull que el meu codi sigui auto-documentat. En altres paraules, si un de vosaltres fora a obrir aquest arxiu i llegir-lo, vostè podria tipus d'inferir a partir del nom d'aquest entrada de la funció que se suposa que ha de jugar. I ara per sota d'això, jo vaig a obrir clau de tancament i clau d'obertura, i així adonar que he seguit el mateix patró de línies de quatre a set anys com a He estat seguint per una bona setmana més ara entre, per exemple, les línies i nou 14 que componen principal. En altres paraules, escriviu el nom és una altra funció. Ara, el compilador no sabrà trucar a això de forma automàtica perquè, literalment, acabo d'inventar, però se sap encara de trucar principal automàticament i després, per descomptat, en línia 13, dic la meva pròpia funció. I com he declarat que la funció fins a la línia 4 abans principal, això va a ensenyar el compilador el que van dir ells, "escrigui el seu nom" significa i el que ha de fer. Així que sóc una espècie del que suposa una nova costum bloquejar en el context de, per exemple, a les ratllades. Així que aquí, puc posar això molt comú o un patró recurrent de codi segueixo escriure a classe, printf % S hola,% s / n ", - ¿Què és el que vull posar aquí? S? Així que vull posar el nom en aquest context. Així notar una mica d'una dicotomia aquí. Perquè jo estic declarant la meva pròpia funció i he mica arbitràriament anomenada s'imprimeix el nom, i perquè m'he especificat en parèntesi que aquest funció pren un argument, el tipus de que és una cadena - pel que és una paraula o una frase o alguna cosa així - i Vaig a trucar a aquest nom d'argumentació, que significa que l'única variable que està en àmbit d'aplicació, per així dir-ho, és nom. S només hi ha entre el 2 claus, és clar? Bé, en realitat, igual que la línia 10 a través 14, per la qual cosa igual que dilluns no pot utilitzar S, però el que puc fer és passar S en lletra d'impremta. Escriu el nom que passa és donar-li un àlies, un sinònim, un sobrenom, trucant al seu nom, i ara seu ús en aquesta línia. Així que ara anem a salvar això, allunyar el zoom. Deixin-me seguir endavant i fer hola. Es veu bé. No escupi qualsevol error. . / Hola Retorn. Quin és el meu nom? David. I hola David. Així que no és tan emocionant, però només pensar ara. Ara té el mateix ingredient com ho vam fer en Scratch fer les nostres pròpies funcions. Però hi ha una mica de Gotcha. Suposem que jo no havia pensat això a través de i en realitat sense pensar realment en això va escriure que funcionen aquí. Sembla perfectament raonable. En zero no existeix la noció de la ubicació dels scripts. Es pot posar un gol amunt a aquí, un aquí, un aquí, i podria començar a a semblar una mica desordenat si no ho fa seure a terme ordenadament, però no ho fa importa on físicament els scripts estaven a la pantalla. Desafortunadament en C - i això és a diferència llenguatges com Java i Python i altres que vostè pot estar familiaritzat amb - per desgràcia, en C, per no importa perquè el que és rellotge passarà ara. La funció per defecte que està passant a executar és, per descomptat, el principal. Principal es va a cridar el nom d'impressió en la línia huit, però per desgràcia, el compilador ni tan sols sabrà que escrigui el seu nom existeix fins que arribi a la línia 11, que, malauradament, és serà massa tard. Així que farem fer hola. I ara maleït, dos errors generats. Així que ara vull desplaçar fins al primer, com sempre hem de fer, i adonar que està cridant a mi, "Declaració implícita de la funció imprimir el nom ". Així que hem vist aquest missatge abans, declaració implícita de la funció. Quan hem vist aquest tipus d'error? Quan no vaig incloure una biblioteca. Si oblit cs50.h i m'agradaria tenir va cridar per obtenir cadena o aconseguir int. Però en aquest cas, aquesta funció d'impressió nom no està en una biblioteca, oi? És, literalment, en aquest arxiu, pel que Quin és realment el problema? Bé, per desgràcia, en C, que et porta tan increïblement literalment que si vol una funció anomenada nom d'impressió per existeix, o bé han de posar en pràctica que funcionen a la part superior del seu Codi perquè sigui accessible a baixar funcions, però, francament, que esdevé descuidat molt ràpidament. Personalment, m'agrada posar primer principal perquè llavors és molt clar el que això programa fa a primera vista. I a més, es pot arribar a la cantonada rar casos on si x vol cridar i, però i podrien anomenar x, només físicament no pot realment posar un per sobre de l'altra. Però resulta que al C, que pot resoldre aquest molt simplement. Vaig a posar una mica d'espai aquí, i jo només vaig a preventivament, encara que una mica redundant, va a ensenyar als compilador que hi ha una funció va cridar el nom de la seva impressió, pren una cadena, i jo vaig a trucar de nomenar i coma. Així que aquesta ara en la línia de quatre, el que ens no han vist abans, és una declaració d'un nom de funció d'impressió, però és només la promesa que aquesta funció es eventualment ser definit, eventualment implementar. Això ara pot deixar sols perquè Ara es tracta de la definició, la aplicació, tipus de l'última milla de l'aplicació de la present funció en particular. Així que, francament, és estúpid, és molest, però aquesta és la forma C és, i és perquè et porta molt literalment i, com un ordinador francament haurien, només fa exactament el que li dius a fer, i el que ordre és important. Així que tingues en compte i una altra, començar a compte la repetició de patrons. El més probable és que vostè vol, si no ho ha ja, començar a trobar missatges així que a primera vista semblen completament críptica, però si comença a la recerca d'aquestes paraules clau, com "Declaració implícita", l'esment d'un funció, en aquest cas - i francament, fins i tot a vegades ser una mica verd pastanaga símbol que indica on el problema probablement és - vostè pot començar a treballar el seu camí a través de Encara missatges d'error que no es veuen. Qualsevol pregunta sobre l'escriptura de la seva funció pròpia d'aquesta manera? Farem una cosa que és un poc més convincent. En lloc de fer alguna cosa que té un efecte secundari de la impremta, em va deixar anar endavant i desar un nou arxiu, i anem a anomenar aquest positive.c, tot i que és serà una mica diferent en comparació amb l'última vegada. I aquesta vegada, vull tornar a implementar exemple positive.C l'última vegada, que es força a l'usuari donar m'assabento positiu. Però vaig haver d'usar aconseguir int última vegada. ¿No hauria estat agradable si hi havia una funció anomenada aconseguir int positiu que només podia encarregar el part de la funcionalitat que? Així que la diferència aquí és que vaig a implementar aconseguir int positiu, però a diferència d' escrigui el seu nom, que tenia un efecte secundari - és no tornar alguna cosa a mi com un nombre o una cadena - aconseguir int positiu és, per descomptat, va a tornar, amb sort, un int positiu. Així que anem a fer això. Incloure cs50.h, Incloure estàndard io.h. Internacional void main. I ara aquí, seguiré endavant i diguem que int, en diuen n, és igual a aconseguir int positiu. I igual que aconseguir ja existeix int perquè el personal el va escriure, em vaig a assumir en el moment en què rep existeix int positiu, i ara em vaig seguir endavant i dir printf, gràcies pel% i / n ", n. Així que ara si puc compilar aquest programa, el que que passarà en el meu terminal finestra a la part inferior de la pantalla? Jo vaig a aconseguir, probablement, que mateix error com abans. Així que anem a provar això. Fer positiu. I un cop més, la declaració implícita de la funció, aconseguir int positiu. Així que podem resoldre això en un parell de maneres. Vaig a mantenir simple i just posar la meva declaració aquí i obtenir int positiu. Necessito l'anomenada signatura. La signatura només es refereix a l'estètica de la primera línia del programa. Llavors, què ha de rebre positiu int retorn? Així que un int. Em refereixo a l'ideal seria tornar alguna cosa així com int positiu, però que no existeix. No hem vist que entre les dades tipus, per el que han de fer front a la fet que tenim molt pocs tipus de dades per treballar. Però podem tornar un int i just confiar que serà positiu. Es va a cridar aconseguir int positiu. I ara, què hi ha dels seus arguments? Es necessita alguna entrada? És necessari qualsevol entrada? Per tant, no necessita saber per endavant res. Com cadena no, obtenir int no. Fa Printf - que ha de tenir algun entrada que passa en ell - i el nom d'impressió necessària alguna entrada, però arribar int positiu no. Així que vaig a explícitament dirà el buit compilador. Buit és l'absència de qualsevol altra cosa. Així mitjans void res va dins d'aquests parèntesis, punt i coma. I ara en el fons del meu expedient - i una vegada més, només estic sent classe de anal aquí posant principal a la part superior, que és una bona pràctica perquè d'aquesta manera, en qualsevol moment que vostè o algú més obre l'arxiu, el funcionalitat està aquí. Es pot bussejar des de zero. Així que ara vaig a duplicar el, quedaria invalidada int positiu, però no estic va a colpejar un punt i coma ara. Vaig a obrir les claus, i ara necessito que em prestis algunes idees del Dilluns. Així com vostè recorda, vam fer alguna cosa agradaria fer el següent mentre cosa que era cert. I el que vaig fer? Vaig fer una cosa així com donar em un nombre enter positiu, poc més d'un sistema. Podria utilitzar qualsevol paraula que vull. I llavors jo solia què? Int n és igual a aconseguir int, sense arguments a la mateixa. I noti la diferència. Quan es diu a una funció, quan s'utilitza una funció, que no posa en efecte. Només fa que quan es declara una funció, l'ensenyament que el compilador ho cal esperar. Així que vostè no ha de posar anul · lar allà mateix. I ara el que era la meva condició? Bé, n no és igual a positiu, però això és només pseudocodi. Llavors, com expressar això més neta? Per tant menor o igual a zero. Així que de nou, noti que vostè pot fer menys de o igual a. Tot i ser dos separats símbols, pot fer-ho en el teclat com a tal. Però encara hi ha un bug que Vaig cometre un error última vegada també. He de declarar - exactament. He de declarar n fora del bucle. Així que he de posar n fins aquí, i jo no vol tornar a declarar en aquesta no sigui que arribi una nova variable. Només vull assignar un valor aquí. I ara no estic molt fet aquí. A veure si per davant de mi mateix i fer veure que estic fet. Fer positiu, i ara hi ha un nou error. Control arriba al final de funció no nul · la. Tan nou missatge d'error, però si que tipus d'esmicolar cadascuna de les paraules, probablement una pista del que està malament. Controlar. Control només significa que l'ordre de les operacions en un programa. L'equip té el control i alguna cosa va sortir malament. Per tant, arriba al final de una funció no nul · la. Què és la funció que aparentment referint? Quina funció és no buit? Així que int positiu, i una mica de confús en aquest pou, és una espècie de buit. Té una especificació de buit per a la seva arguments, però la seva sortida es va a ser de tipus n. Així que la paraula de l'esquerra és el els anomenats tipus de retorn. La paraula a l'interior aquí és les zero o més arguments que la funció pren. Llavors, què he de fer? En aquest punt del meu codi, la línia 21, on l'indicador parpelleja ara és que tenir un int positiu dins de la variable anomenada núm. Com li dono volta a principal? Literalment. Torneu n punt i coma. Així com Colton tornat un tros de paper amb una resposta que em deixant caure aquest tros de paper al petit negre caixa sobre la taula, per fer que a codi, literalment, acaba d'escriure, torni n, i és com si Colton eren em va lliurar alguna cosa a canvi físic. En aquest cas, el que està succeint és aconseguir int positiu va a tornar el que és probablement una positiva sencer a qui? D'on ve aquest valor a acabar? Això acaba a aquesta variable, n, i a continuació, es procedeix amb la línia de nou. Així, en altres paraules, per tal de operacions, aquest programa s'inicia execució i el compilador s'adona, oh, vol que la biblioteca? Déjame anar a prendre el que hi ha dins d'això. Oh, vostè vol la biblioteca IO estàndard? Déjame anar a prendre el que hi ha dins d'això. Què fa el compilador diu a si mateix quan arriba a la línia de quatre? Oh, vostè es va comprometre a posar en pràctica el funció anomenada obtenir positiu, però ens posarem en contacte al vespre, alguna cosa per l'estil. Void main Int només significa aquí està les entranyes del meu programa. Línia 7 és només una clau de tall. Línia 8 està dient a l'esquerra, donen em 32 bits per un enter, diuen núm. Al costat dret, és dient aconseguir int positiu. Ara fem una pausa aquesta història perquè ara No porto movent el cursor cap avall. El meu cursor passa ara aquí perquè ara rep int positiu s'executa. Int n es declara. Feu el següent. Printf em dóna un nombre enter positiu. Obtenir un int de l'usuari, guardi-la en n, i potser fer això una i altra vegada. Aquest bucle significa que aquest codi podria executar amunt i avall com això una altra vegada i de nou, però quan l'usuari finalment coopera i em dóna un resultat positiu int, em va colpejar la línia 21, moment en què el nombre es va retornar, i que un he de destacar ara? Nou. De control, per així dir-ho, torna a la línia de nou. Aquesta és la línia que està ara a càrrec. Així que això és el que ha estat succeint en tot aquesta vegada per sota de la caputxa, però quan hem fet servir funcions com printf o fins i tot obtenir cadena que algú més escriure per a tu, control estava sent lliurat línia de codi lliure per algú més per línia per línia. És només que no podia veure, i ens realment no podia representar en aquest programa, ja que és d'alguna altra arxiu al disc dur desconegut per a nosaltres. Així que en realitat compilar i executar aquest moment. Fer positiu. Compilació, això és progrés. . / Positiu. Dóna'm un nombre enter positiu. Anem a ser difícil. Negatiu 1. Zero. Anem a donar-li 50. Gràcies pel 50, i el que el control ara ha tornat. Qualsevol pregunta, llavors, en què? Sí? [Inaudible]. Digues-ho de nou. Ah, bona pregunta. Així que vostè pot notar un paral · lel que Sóc una mena de tall d'una cantonada. En la línia 12, que dic, aconseguir int positiu retorna un int, però per aquest mateix lògica, ara lògic pensar que, en línia de sis, estic dient que les principals declaracions 01:00 int, però el que han de mai tingut en qualsevol dels nostres programes? Mai hem tingut esment de aquesta paraula clau a canvi. Així que resulta que a C, almenys la versió que estem utilitzant va fer el 1999, tècnicament, es tracta de passa de forma automàtica. En qualsevol moment d'implementar un programa i implementar una funció de trucada principal, que la funció retornarà zero per defecte si vostè no diu el contrari, i zero és només una convenció. El món torna zero amb això el que indica que tot està bé, deixant-nos efectivament amb 4000000000 possibles coses que podrien sortir malament, així que si tornem un, perquè podria significar un codi que significa això El que va sortir malament. Podríem tornar dos, el que significa aquesta altra cosa que va sortir malament. Podríem tornar 4000000000, el que significa això una altra cosa que va sortir malament. I si ara pensa en el seu propi PC o Mac, és possible recordar que de vegades apareixen missatges d'error críptic des el programari que utilitzant, de vegades, té un ésser humà Descripció amable, però hi ha ser un codi o un nombre a la pantalla? Si això no ve a la ment, només mantenir un ull cap a fora per a ell. Això és en general el que aquests els codis es refereixen. Estan inclosos en Microsoft Word i altres programes de manera que si vostè presenta una informe d'error amb l'empresa, es pot diuen ells, oh, tinc el número d'error 45. I algun programador de tornada a l'empresa pot semblar que en la seva codi i dir: Oh, això és perquè jo vaig aquest error i per això l'usuari obtingut aquest missatge. Però, francament, és només una mica distracció i una mica tediós concloure que, almenys en la nostra primers programes, pel que hem estat ometre. Però tot aquest temps cadascun dels seus principals funcions ha tingut en secret aquest línia agregada automàticament per vostè pel compilador, només per convenció estalviar una mica de temps. [Inaudible]. No cal incloure-ho en el principal. Això està bé. Sí que és necessari incloure'l si fossis implementació d'una funció com aquesta. En cas contrari la funció plana terme no anava a funcionar. Però en la principal, no cal. En una o dues setmanes, anem a començar a aconseguir en aquest hàbit un cop que volem començar significant errors. Molt bona pregunta. Pausa verbal Així ràpida d'esmentar que aquest divendres, no estarem dinant per se, però tindrem un sopar amb alguns dels estudiants i el personal. Si desitja unir-se a nosaltres, no dubti lliure d'anar a cs50.net/rsvp. 18:00 aquest divendres. L'espai és, com sempre, limitat, però anem a seguir fent això en un gairebé setmanalment si l'espai acabi aquesta setmana. Així que el drama d'suspens que ho deixem en Dilluns va ser que les cadenes poden realment ser indexats en què acabo de dir es pot obtenir en el primer caràcter, el segon personatge, el tercer personatge i així successivament, perquè es pot pensar efectivament en una cadena, com hola, com en aquest cas, 5:00 lletres a l'interior de les caixes. I vostè pot aconseguir en cada un dels caixes amb el que va fer que la sintaxi introduir el dilluns? Els claudàtors en el teclat. Això només significava anar a la posició zero. Comencem a comptar des de zero, per la qual cosa el suport zero significa h, suport d'un significa i, i així successivament. I així tot el temps en el qual hem estat l'ús de cadenes i escriure "hola" i "món" i altres coses en la pantalla, s'ha emmagatzemat en caixes com aquesta. I prendre una conjectura. Què fa cada caixa representen físicament en l'interior del seu equip? [Inaudible]. Com? Personatges. Així que un personatge, sobretot en el cas de cadenes, i un caràcter és només vuit bits o un byte. Així que és probable que almenys vagament familiaritzat amb el fet que la seva equip té memòria. Té dos tipus de memòria com a mínim. Un d'ells és el disc dur on es guarda embotir de forma permanent, i això és típicament gran, així que vostè pot tenir les pel · lícules i la música i així successivament. Llavors vostè té un altre tipus de memòria anomenada RAM, R-A-M, d'accés aleatori Memòria, i aquest és el tipus de memòria que s'utilitza quan l'equip està funcionant, però si perd el poder o el seu bateria s'esgota, tot el que s'emmagatzema en la memòria RAM desapareix si se'n va la electricitat complet, ja que no és persistent. Normalment té, en aquests dies, un concert d'ella, dos concerts, potser més. I el bo de RAM és que és molt més molt, molt més ràpid que els discos durs o unitats d'estat sòlid en aquests dies, però és generalment més car, així vostè té menys d'ell. Així que la conversa d'avui realment es refereix a la RAM, quin tipus de memòria que existeix només quan hi ha poder d'introduir a l'ordinador. Així que quan s'escriu en H-I-L-L-O, anoti en el teclat, l'H es va en un byte de RAM, el correu va en un altre byte de RAM, com és la resta de la paraula. Així que recordem el que hem pogut fer l'última vegada va ser això. Déjame anar per davant i obrir l'arxiu que anomenem string.c i recordar que semblava una mica alguna cosa com això. Permetin-me realitat rodar cap enrere i canviar que és exactament el que semblava, longitud de la cadena del s. Així que busqui en el programa aquí. Incloem la biblioteca CS50 per que podem utilitzar arribar cadena. Incloem io.h estàndard així que podem usar printf. Per què incloem string.h? Això era nou per al Dilluns. Així que volíem longitud de la cadena. Str lleng. La gent va decidir fa anys, serem breu. En lloc de cridar "longitud de la cadena" diguem "str lleng" i deixar que el figura mundial que fos, i el que és el que tenim accés a amb string.h. Aquesta és familiar. Aquesta és familiar. Aquesta és familiar. Això és una mica nou. En la línia 22 - i tornarem a això, però per ara saber - i només se sabria que això té llegir la documentació o si sabies C ia - aconseguir string vegades pot ficar la pota. Si l'usuari és realment contradictori o falta de cooperació i ell o ella no escrigui res al teclat o tipus tant en el teclat que que aclapara la memòria de l'ordinador, en teoria, arribar cadena podria tornar alguna cosa que no sigui un cadena de caràcters. Pot retornar un valor especial anomenat NULL en majúscules, N-O-L-L, i això és només un valor sentinella anomenat. És un valor especial que significa una cosa dolenta va passar en aquest cas. És l'absència d'una cadena. Així NULL Estic comprovant simplement perquè, el conte llarg, str lleng i altres funcions que vénen amb C, si que esperen una cadena però ells passen l'absència d'una cadena, si passa nul · les, l'ordinador o el programa d' s'acaba de fallar per complet. Es penjarà. Es va a tirar una mica de missatge d'error. Succeiran coses dolentes. Així que, encara que això segueix sent no està ben definit - això tindrà més sentit en una setmana o 2 - a la línia 22, això és només una exemple de comprovació d'errors en defensa pròpia només en cas d'un cop d' un milió de que alguna cosa va malament, l' menys el meu programa no es bloquejarà. Així que si s no és igual a una cosa dolenta, Tinc un bucle for, i això va ser on havíem de altres nova peça de sintaxi. Tinc un bucle d'iteració a zero fins a la longitud de s. I llavors aquí, jo era un fora de impressió s suport de i, però per què vaig fer servir% c tots sobte en lloc de% s encara si s és una cadena? És un personatge, no? S és una cadena, per s suport d'alguna cosa, s abraçadora i on i és zero o un o dos, això és un individu caràcter de la cadena, i així per que necessita printf per ser informat que és de fet un personatge que pot esperar. I llavors recordo, el que va fer aquest programa realment? Imprès a terme en columnes. Sí, exactament. Simplement imprimeix la paraula que escric en una columna, un caràcter per línia. Així que anem a veure de nou. Així que cadena. Compilat acord. . / String. Permetin-me escric en H-I-L-L-O, introduir i de fet ho entenc, un per línia. Així que permetin-me fer una optimització d'aquí. Si es pensa en això, sobretot si que hagi programat abans, hi ha possiblement una ineficiència en la línia 24. En altres paraules, no és necessàriament el millor disseny. Senzill, almenys, una vegada que recorda el str lleng és, però és fer alguna cosa ximple potencialment. Què podria ser? [Inaudible]. Exactament. És la comprovació de la longitud de s cada vegada que tot i que H-I-L-L-O sempre va a ser de cinc caràcters. Cada vegada que a través d'aquest bucle, els cinc no està canviant. Jo podria estar incrementant i, però el és la longitud de s en tots els iteració d'aquest bucle? Són les cinc, són cinc, són cinc, i però, estic demanant això, però, pregunta una i altra vegada i una altra. Ara, francament, l'ordinador és tan condemnadament ràpid, ningú va a notar una diferència en aquest cas, però aquests tipus de les decisions de disseny deficient pot començar a sumar si el propi compilador no tractar d'arreglar això per a vostè que que en general no ho faria, per la menys en l'aparell. Així que vaig a fer això. Vaig a afegir una coma després de la meva primera variable, i. Vaig a donar-me una altra variables, cridant n, amb només convenció per als nombres, i llavors estic va a assignar n el valor de cadena longitud de s. I després em canviaré la meva condició de ser què? Jo canviaré la meva condició al mateix temps i és menor que n. Així que ara, quantes vegades he de comprovar la longitud de s? Un cop, però està bé per comprovar i contra n una i altra vegada perquè ara els Els valors no són en realitat canviant. Ara per ara, només sé que cada vegada que cridar a una funció, hi ha una mica de despeses generals, no és suficient per descoratjar realitat d'haver d'utilitzar funcions, però sens dubte quan hi ha una línia de codi d'aquesta manera - i les línies tindran més interessant en poc temps - en hi ha una oportunitat per pensar, si escrigui aquest codi, el nombre de vegades que s'executi? Vostè començarà a veure amb el temps el rendiment dels programes poden de fet canviaran. De fet, un dels problemes conjunts que hem fet en anys anteriors implica implementació, com es recordarà de setmana zero, un corrector ortogràfic, sinó una Corrector ortogràfic que està dissenyat per suportar un diccionari de més de 150.000 paraules que li donem nois. Vostè hauria d'escriure el codi que es carrega aquestes paraules en la memòria RAM, així que en caixes, com vam veure en la pantalla d'un moment enrere, i després el més ràpid que pot, vostè ha de ser capaç de respondre a una qüestió de la forma, és la paraula mal escrita? És la paraula mal escrita? És la paraula mal escrita? I en una cosa així el que hem fet en anys anteriors es va convertir en, encara que en un opt-en forma opcional, 1 la competència de les classes, de manera que el els estudiants que utilitzen el menys RAM i menys temps, menys cicles de CPU, acaben bombolles fins a la part superior d'un petit taula de classificació o rànquing que ens posem pàgina d'inici del curs, ja que hem fet en anys anteriors. Així que de nou, totalment opcional, però això parla de les oportunitats de disseny que per davant un cop que vam començar la construcció del cim d'alguns d'aquests blocs de construcció bàsics. Així que permetin-me tornar a aquest diagrama per un moment i mostrar una mica de una mica més. De fet, això és una cadena, i hem pres avantatge d'unes poques biblioteques, io.h norma que té - Printf. Printf, entre altres coses. cs50.h, que ha aconseguir int i obtenir string i així successivament, string.h, el qual tingut str lleng. Però resulta que encara hi ha un altre. Francament, hi ha munts i munts de capçalera arxius que declaren funcions per a les biblioteques, però això és ctype.h en realitat serà una cosa avantatjosa perquè vaig seguir endavant i posar en pràctica una altre programa aquí. Déjame anar per davant i obrir una mica Vaig escriure abans anomenat capitalize.c i tirem una ullada a com funciona això. Tingueu en compte que estic fent servir, en aquesta versió d'ella, tres arxius familiars. Tingueu en compte que en la línia 18, que sóc obtenir una línia de text. Observeu en la línia 21, estic afirmant que el codi següent es va a capitalitzar s, el que l'usuari escriu , I com faig això? Bé, jo estic prenent - aprendre la lliçó de l'última vegada - Estic declarant i i n i la iteració sobre els caràcters de la cadena. I llavors, què és aquest bloc de codi a la línia 24 fins al 27 de fent en termes senzills? Canviar a minúscula carta de tornada. Exactament. Si s suport d'i - pel que si la i-èsima caràcter de s, que és una específica caràcters en la cadena, és més gran que o igual a minúscules ai - recordar que el signe doble significar i - i el mateix caràcter, s suport de i, és menys de o igual a minúscules z, això vol dir que és un b o o a a c o punt, punt, punt, o un z, el que significa és minúscula. Què és el que vull fer en aquest cas? Bé, jo puc fer això d'alguna manera crípticament, però anem burlen d'aquesta separació. Vaig a trucar a printf, imprimeix% c perquè vull fer ús d'aquest caràcter en la pantalla. Després vaig a prendre s suport i, la i-èsim caràcter de s, i llavors per què estic fent aquest petit truc, minúscules a una capital menys? El que és que va a donar jo, en termes generals? [Inaudible]. Exactament. Jo no recordo - era 65 per al capital A. En realitat no em Recorda el minúscula és a dir, però no importa. L'ordinador sap. Així dient, minúscules a menys A majúscula, és estrany que restar una xerrada d'un altre, però Quins són caràcters sota la campana? No són més que números. Així que el que aquests números són, deixar que l'ordinador recordi que i no m'ho humà. Així minúscules un capital menys A és em va a donar la diferència. Li passa a ser 32, i que seria el cas de la b minúscula i majúscula B i així successivament. Es manté constant, gràcies a Déu. Així que estic dient bàsicament, prendre el lletra minúscula, restar que diferència estàndard, i que eficaçment els canvis s suport d'i des minúscules, per descomptat, en majúscules, sense que jo realment haver de pensar sobre o recordar, quins van ser els números dels quals parlem sobre quan els vuit voluntaris van pujar a l'escenari? Ara, mentrestant, en l'altre, si no és una lletra minúscula segons ho determini per la línia 24, a imprimir-lo. Jo només vull tocar el caràcters que eren fet originalment minúscules. Així que anem a veure això. Assegureu-vos d'aprofitar. Compilat, OK. . / Profit. I permetin-me escric en H-I-L-L-O en minúscules, Retorn. I es va adonar que esdevé en majúscules. Déjame fer això de nou amb una paraula diferent. Què hi ha de D-A-V-I-D amb la primera D capitalitzats com un nom típicament és? Intro. Observeu que segueix sent correcta. Només emet la primera sense canvis D que a través d'una altra construcció. Així que tingui en compte, doncs, una parell de coses aquí. Un, si mai voleu comprovar dues condicions alhora, es pot i ells junts com ho havíem previst. Pot comparar els caràcters d'aquesta manera i tractar eficaçment caràcters com números, però, francament, això és tan condemnadament críptic que mai vaig a recordar com arribar a aquest des de zero sense raonar a través d'ell durant força una mica de temps. ¿No hauria estat agradable si algú allí va escriure una funció anomenada és un menor que podria respondre per mi veritable o fals, aquest personatge és minúscula? Bé, gràcies a Déu, qui va escriure ctype.h va fer exactament això. Déjame anar aquí i afegir ctype per c tipus, i ara me n'aniré aquí i reescriure aquesta línia com segueix. Així que si es diu és menor, reclam, s suport de i, llavors vaig a esborrar aquestes dues línies en total. Així que ara algú més, estic esperant, va escriure una funció anomenada és més baix, i Resulta que ho van fer i van ser reunits dins ctype.h. I ara vaig a sortir de la línia 27 sol, vaig a sortir de la línia 31 sol, però vaig notar el que he reforçat el meu codi. Ara és més net. És menys difícil de veure a través de perquè ara la funció, per altra banda, és tan meravellosament nomenat només fa el que diu. Així que ara vaig a guardar això. Me'n vaig a allunyar el zoom. I igual que en scratch que podria tenir Booleans, valors booleans true o fals, això és exactament el que és reduir eficaçment devolucions. Déjame a compilar. Déjame tornar a executar. I ara anem a intentar-ho de nou, H-I-L-L-O, Enter. Això és bastant bo. I tractar de nou, assegureu-vos que no arruïnar una mica. S'activa com així. Però això no és suficient ja que el Una altra cosa que jo mai vaig a recordi a menys que treballi a través del que realment acuradament sobre, per exemple, el paper és aquesta línia maleïda. ¿No seria agradable si hi havia una funció crida a la part superior? Doncs resulta que hi ha és a ctype.h així. Vaig a seguir endavant i escriure - permetin-me portar aquesta línia de fons. En lloc d'això aquí, que em deixi anar per davant i dir, substituir el% c de l' resultat de cridar a aquesta funció per superior en l'i-èsim caràcter de s. I ara es va adonar que s'està fent una mica equilibrat. He de portar un registre de quantes parèntesi, he obert i tancat. Així que ara és encara més net. Ara bé, aquest programa està cada vegada millor i millor dissenyats possiblement perquè és molt, molt més fàcil de llegir, però no és que anem a corregir. Assegureu-vos d'aprofitar. . / Profit. H-I-L-L-O. Anem a córrer de nou, D-A-V-I-D. Acceptar, de manera que encara estem en forma bastant bo. Però ara a la part superior. Proposo que hi ha una major refinament podríem fer això seria molt agradable, que realment podria estrènyer fins aquest codi i realment ens donen cinc de cada cinc per al disseny, per exemple. El que seria bo per desfer-? Bé, mira el maleïdament llarg d'aquest bloc de codi és només per fer alguna cosa simple. Ara, en un apart, ja que podria tenir vist en l'article fantàstic, el passat cap de setmana, no cal estrictament el claus en els que tenen una línia de codi, tot i que hem proposat mantenir perquè faci molt més clar, com en forma d'U de zero blocs, el que està dins de la sucursal. Però no seria bo si a la part superior, quan se'ls dóna la seva entrada, el va convertir en majúscules, si no ho és, i el que faria ser meravellós en el cas contrari, si ja està en majúscules? Només ha de passar a través de i deixar-lo sol. Així que potser ho fa. Podria intentar-ho i només espero que no, però em va deixar introduir una cosa més. En lloc d'utilitzar aquesta funció de terminal de finestra d'aquí baix, recordem que aquesta icona quadrat negre li dóna un finestra de terminal més gran que puc Complet pantalla si vull? Així que resulta que són una mena d'estranya nomenat, però hi ha aquestes coses anomenades pàgines de manual, pàgines de manual, home, per abreujar, i puc accedir-hi escrivint man - ¿Què vol escriure? Home de superior. I ara compte si hi ha un funcionar a l'interior de l'ordinador, en aquest cas l'aparell, que es troba el sistema operatiu Linux, que va per donar-me un conjunt una mica críptica de de sortida, però trobarà amb el temps que sempre té un format més o menys la mateixa de manera que començar a acostumar-se a ell. Fixeu-vos en la part superior a la part superior, i aparentment és la mateixa documentació per baixar. Qui va escriure que estava retallant alguns cantonades i posar tot en una pàgina. Aquests efectes coses 'a la vida és la de convertir una carta a majúscules o minúscules. Observeu que sota Sinopsi, la pàgina de manual m'està ensenyant un arxiu tinc per incloure a fer servir aquesta cosa. M'està donant a les firmes per a aquests funcions, tant d'ells, fins i tot tot i que en aquest moment només es preocupen per un. Heus aquí ara una descripció. Per UPPER converteix la lletra c a majúscules si és possible. Encara no és tan instructiva, però m'ho dius a mi Ara miri sota de valor de retorn, el això és tornar. Per tant el valor retornat és el de la carta o c convertida si l' conversió no era possible. Què és el c? El caràcter original. El caràcter original i sabem que per, de nou, pujant a la sinopsi, i el que va escriure això funció acaba de decidir que l'entrada que a la part superior i més baixa és només arbitràriament va a cridar c. Es podria haver cridat més res que vulguin, però el van mantenir en simple com c. Així que he consultat la pàgina de manual. Aquesta frase m'assegura que si que no és una lletra minúscula, és va a donar-me volta c, que és perfecte, el que significa que pot desfer- la meva condició de persona. Així que em torno a gedit, i Ara m'ho dius fer això. Vaig a copiar la meva sentència printf. Vaig a seguir endavant i la dreta a l'interior la impressió de bucle que fos, i obtenir Desfés-te d'ara aquest conjunt si constructe. No era una mala idea, i era molt més correcta i coherent amb tot el que hem predicat, però no és necessari. Tan aviat com t'adones d'alguna biblioteca funció que existeix algú més escriure, o potser vostè va escriure en un altre lloc l'arxiu, es pot usar i realment començar a endurir el codi. I quan dic coses com bon estil, el fet que aquesta persona que es denominarà funcionar a la part superior, o prèviament menor és meravellosament útil perquè que són molt descriptius. No vol cridar a les seves funcions x i y i z, que tenen molt, molt menys significat. Teniu preguntes sobre la sèrie de millores? Així que només cal dir una de les menjar per emportar és com el vostre propi problema conjunt - potser un problema conjunt, però Certament P va fixar dos en endavant, fins i tot quan són correctes no necessàriament vol dir que siguin perfectes només però, o particularment ben dissenyada. Aquest és l'altre eix de començar a pensar. Així que això era una cadena dins de la seva la memòria de l'ordinador, però si vostè té un manat sencer de personatges com l'H-I-L-L-O interior de RAM, i suposem que al seu programa crida a aconseguir string diverses vegades de manera que vostè trucar a obtenir una cadena, llavors trucar a obtenir string nou. Bé, el que va a passar el temps? En altres paraules, si vostè té una línia de codi, encara que fora de context, com string s aconsegueix - Farem això. String nom és igual a tenir cadena. Així que suposo que la línia de codi està destinat preguntar a l'usuari pel seu nom. La següent línia de codi té la intenció de demanar l'usuari de la seva escola, i aquesta línia següent, i així successivament. Suposem que seguim demanant l'usuari per a un altre i altra, i una altra cadena. Ells van a romandre en la memòria al mateix temps. Un no va a donar-li una pallissa a l'altre. L'escola no es sobreescriu l'altre. Però quan ho fan tots acabar en la memòria? Bé, si ens posem a dibuixar a la pantalla, que podem fer servir aquesta cosa aquí, com una pissarra, si aquest negre rectangle representa l'ordinador de memòria, vaig a començar arbitràriament dividir en petits quadrats, cadascun dels quals representa un byte de la memòria. Francament, si vostè té un gigabyte de RAM en aquests dies, vostè té un bilió de bytes de la memòria en el seu ordinador, per la qual cosa 1000000000 d'aquestes places. Així que només cal dir que aquesta en realitat no és a escala. Però podríem seguir dibuixant tot això clarament no és a escala quadrats, i aquesta representa col · lectivament la memòria del meu ordinador. Ara només haurem de fer punt, punt, punt. En altres paraules, quan ara el símbol de l' usuari amb una corda get em donés un corda, què passa? Si l'usuari escriu a "hola", que acaba en H-I-L-L-O. Però suposem que el llavors l'usuari tipus en - En realitat, no hauria d'haver fet hola ja estem demanant ells pels seus noms. Així que anem a tornar si puc fer això. Així que si escric en D-A-V-I-D al meu nom, però recordar que la segona línia de codi de cadena s'aconsegueix de nou per arribar a la seva escola. On és la paraula que l'usuari tipus a anar a anar ara? Bé, potser anirà a H-A-R-V-A-R-D. Així que, encara que no tinc dibuixat com dues files, això és només un munt de bytes al RAM de l'ordinador. Hi ha un problema ara, perquè ara si estic l'ús de memòria RAM en aquest molt raonable però alguna cosa de manera ingènua, què es pot aparentment no distingir? Quan un comença i on acaba un, oi? Són una espècie de desenfocament junts. Així que resulta que l'equip no fa això. Déjame realitat retrocedir en el temps a pocs caràcters, i en lloc de Harvard anar immediatament després del nom de l'usuari, l'usuari obté en realitat, darrere de les escenes, un caràcter especial introduït per la equip per a ell o ella. / 0, també conegut com el caràcter nul molest anomenat N-O-L, no N-O-L-L, però s'escriu com / 0. És que tots els bits zero és un marcador de entre la primera paraula que l'usuari escrit i la segona. Així Harvard realitat ara acaba com aquesta seqüència de caràcters i un més / 0. Així, en altres paraules, al tenir aquests valors de sentinella, vuit zero contigua trossos, ara pot començar a distingir un personatge d'un altre. Així que tot aquest temps el que estava "hello" és realitat "hola" amb un / 0, i Mentrestant, no molt bé podria ser una mica més RAM a l'interior de l'ordinador. Déjame fer una altra cosa. Resulta que tots aquests quadrats hem vingut assenyalant, que són, sí, cadenes, però més en general, aquestes coses són arrays. Una matriu és simplement un tros de memòria això és tornar a l'esquena amb esquena amb esquena, i normalment s'utilitza una matriu per mitjà d'aquesta notació de claudàtors. Així que anem a veure a aquests una mica amb el temps, però m'ho dius a mi seguir endavant i obrir, anem a anomenar edats. I fixin-se el que podem fer amb aquests mateixos trucs, una mica poc més de la sintaxi aquí. Així, en la línia 17 d'aquest programa - En realitat, vull córrer el programa primer perquè puguem veure el que fa aquesta cosa. Vaig a trucar a prendre les edats per compilar aquest programa. . / Edats. Quantes persones hi ha a l'habitació? Diguem que és tres. Edat de la primera persona? 18, 19, i 20. I ara una mica ridícul, només han fet un programa que les edats de les persones 3 persones. Així que hi ha clarament una oportunitat per alguna aritmètica diversió aquí. Afortunadament, la matemàtica és correcta. 18 van ser a 19, 19 van ser a 20 i així successivament. Però el que realment significa ser il · lustrativa aquí és com ho estem emmagatzemant edats aquestes tres persones. Permetin-me ampliar des del que és passant aquí. Així que en primer lloc, aquestes primeres línies han estar rebent molt familiar. Només estic preguntant a l'usuari la nombre de persones a l'habitació. Llavors estic fent servir arribar int i fer temps per fer això una i altra vegada i una altra. Hem vist que el model anterior, però línia 27 és nou i bastant útil, i es convertirà en cada vegada més útil. Tingueu en compte que el que és diferent en la línia 27 és que em sembla que hagi declarat un int anomenats edats, però espera. No són només les edats int. Hi ha aquests claudàtors, dins del qual és n. Així el suport de n en aquest context, no dins d'una instrucció printf aquí, però en aquesta única línia 27, aquesta línia és dient: em n sencers donen, cadascuna d'elles és de tipus int. Així que aquest és un cub, per així dir-ho, de, en aquest cas, tres enters de nou a esquena amb esquena perquè efectivament tenir tres variables. L'alternativa, per a ser clar, seria això. Si volgués de la primera estudiant edat, podria fer això. Si volgués de l'estudiant de segon edat que podria fer això. Si volgués de l'estudiant de tercer edat, podria fer això. I Déu no ho vulgui que necessitem de tots edat en aquesta sala - Vull dir, aquesta és una diables d'un munt d'espai, pega una i altra vegada i una altra. I un cop més puc compilar aquest programa, si un altre estudiant camina a terme en més de d'aquesta porta, ara el meu número de variables és incorrecta. Així el bo d'una matriu és com abans de començar a sentir-se a si mateix copiar i enganxar, les probabilitats són que és no és el millor enfocament. Una matriu és dinàmica potencialment. No sé per endavant quantes persones estaran a la sala, però sí que sé que necessito n d'ells, i jo esbrinar n quan arribi el moment. Aquesta línia de codi significa que ara, dóna'm un tros de memòria que té aquest aspecte on el nombre de caixes a la pantalla és totalment dependent de n que l'usuari va escriure polz Així que ara la resta d'aquest programa és En realitat és bastant similar al que acabo de fer amb els personatges. Fixa't que tinc un bucle comença en la línia 30. Així que just després d'obtenir la matriu, que iteració de i és igual a zero en un màxim de n. Només tinc aquest instructiu printf missatge que acaba de dir, em fa l'edat de la persona #% I, pel que el número u, número dos, nombre tres. ¿I per què faig això? Francament, els éssers humans prefereixen comptar d'un pujant mentre que els informàtics, zero en endavant. els informàtics no van utilitzar aquest tipus de programes, pel que estem va tot just comença a comptar a l'una com la gent normal. I ara, en la línia 33, observi el poc peça diferent de la sintaxi. L'i-èsim edat en què la variable de tipus matriu es va a posar un int. I ara, finalment, això és només aritmètica aquí. Vaig decidir en un circuit separat per reclamar passa algun temps, i ara en aquesta loop independent, aquestes línies executar. Dins d'un any, persona seré jo anys d'edat, de notar que això no és el la variable i. Això és ara% i per int. I noti que el primer marcador de posició, que connecti i + 1, pel que conta com una persona normal. I després pel valor de la seva edat, per i anys d'edat, em prenc les edats suport i - i per què estic fent més un aquí? Simplement edat. És la meva estúpida elecció dels programes. Acaben d'entre un any. Podria escriure en qualsevol nombre que Jo realment vull allà. Llavors, què és en realitat tots la rellevància aquí? Bé, deixa realitat retrocedir aquí i pintar un quadre del que s'acosta. Què farem amb el nostre pròxim Butlletí de problemes Two està fent incursions en el món de la criptografia. Així que això és una cadena de caràcters, de manera que un seqüència de múltiples caràcters, i el que Què ens diu això? No està en la versió en línia de les diapositives. Per això afirmo que això és igual i això, un anunci estúpid de molts anys fa que en realitat podria recordar un dels seus orígens. Així que aquest és un exemple de xifrat o criptografia. Resulta que si vols en realitat enviar informació o compartir informació amb algú amb seguretat, com un missatge d'aquest tipus, es pot codificar les lletres. Però en general, les paraules són no barrejats a l'atzar. Ells estan permutades d'alguna manera o canviat d'alguna manera, de manera que - Ui. Això és un spoiler diversió per a la propera vegada. Així que vostè pot assignar el que és aparentment O a B. Tingueu en compte que s'alinea capitalització es refereix. Aparentment r esdevé i. Aparentment F-H-I-R es converteix en S-U-R-I. Així Resulta que hi ha una assignació, i en aquest cas hi ha una força estúpid mapatge si algú ha descobert? Això és una cosa que es diu Rot 13, Girar 13. És el més estúpid de xifrat mecanismes, ja que, literalment, només afegeix 13 a cadascuna de les cartes, estúpid en el sentit que si només tenir una mica de temps lliure a les mans i un llapis, o simplement creus que a través del seu cap, vostè podria intentar totes les possibles pujades - un, dos, 3, punt, punt, punt, 25 a girar tot l'alfabet, i finalment, t'assabentaràs Quin és aquest missatge. Així que si vostè va fer alguna cosa com això en l'escola primària passant missatges al seu millor amic, si la seva escola primària mestre simplement llegir a través de la missatge i la força bruta de la solució, és possible que hagi arribat una resposta per això. Ara, per descomptat, en el món real, criptografia és més sofisticat. Es tracta d'un fragment de text d'un sistema informàtic que té noms d'usuari i contrasenyes, ja que gairebé tots els nostres ho fan, i això és el que la contrasenya pot veus com si s'emmagatzema en el disc conduir, però en forma encriptada. Això no és només una rotació de lletres, A és B i B és C. Això és molt més sofisticat, però utilitza el que generalment es coneix com a clau secreta criptografia. Aquesta imatge diu el següent història amb algunes icones. A l'esquerra, tenim el que anem a trucar a text sense format. En el món de la criptografia, simple text és el missatge original escrit en anglès o francès o qualsevol que sigui la llengua. Per xifrar, passarem l'il · lustrat a través d'un cadenat, per la algun tipus d'algorisme de, alguna funció o programa que algú va escriure que regira les cartes amb sort més complicadament que simplement afegir 13 per a cada un d'ells. El que s'obté d'aquest procés en el centre es diu text xifrat. Així que tipus d'una paraula sexy. Només vol dir que és la xifra versió del text sense format. I només si té el mateix secret, 13 o menys 13, és vostè capaç de desxifrar un missatge així. Així que en el problema setembre Two, entre les coses que farà si en el Hacker Edition, haurà d'escriure codi per desxifrar aquestes contrasenyes, esbrinar el que eren i com eren xifrat, encara que sí donar-li una mica d'orientació al llarg del camí. En l'edició estàndard, s'introdueix un parell de claus, xifrat mecanismes, un anomenat César, un diu Vigenère, que segueixen sent xifres de rotació en la qual A esdevé alguna cosa, B es converteix en alguna cosa, però cal fer-ho mitjançant programació perquè haurà fet ser un secret clau implicada que és típicament un nombre o una paraula clau que només el remitent i el destinatari d'aquests missatges han d'entendre. Ara bé, aquesta realitat té encarnacions en el món real. Això, per exemple, és petit orfe Anell descodificador secret d'Annie, i en realitat pot posar en pràctica aquests xifres de rotació - A esdevé alguna cosa, esdevé B alguna cosa - amb un parell de rodes, una a l'exterior, un a l'interior de tal manera que en girar la roda o l'anell, en realitat es pot alinear el cartes amb diferents lletres, l'obtenció d'un codi secret. I així com el melodrama per avui, que vaig pensar que faria una mica de recordo que si s'encén el TV el 24 de desembre, es pot veure el pel · lícula fins a la sacietat per 24 hores en una fila. Però per ara, jo obriré aquí i ens donen només dos minuts d'un Història del Nadal pedagògicament rellevant amb un petit tipus anomenat Ralphie. [REPRODUIR VIDEO] -Sigui notori a tothom que Ralph Parker Es nomena el membre de la Little Orphan Annie secret cercle i té dret a totes les els honors i beneficis que ocorren al mateix. -Signat, Little Orphan Annie. Confirmat, Pierre Andre en tinta. Honors i beneficis ja a l'edat de nou anys. [CRIDA A RÀDIO] Anem, anem a seguir endavant amb ella. Jo no necessito tot aquest jazz sobre contrabandistes i pirates. -Escolti demà a la nit per a la aventura de cloenda del negre vaixell pirata. Ara, és temps de secret d'Annie Missatge per a vostès, membres del cercle secret. Recordeu, els nens. Només els membres del Cercle Secret d'Annie pot descodificar el missatge secret d'Annie. Recordeu, Annie depèn de tu. Establiu les seves agulles per B2. Aquí està el missatge. 12, 11, 2 - -Estic en la meva primera reunió secreta. -25, 14, 11, 18, 16 - -Pierre estava en veu alta aquesta nit. Em vaig adonar que el missatge d'aquesta nit que era realment important. -3, 25. Aquest és un missatge d'Annie si mateixa. Recordeu, no ho diguis a ningú. -90 Segons després, estic a l'única habitació a la casa on un nen de nou anys podia seure a privacitat i descodificació. Ajá, B. Vaig anar a la següent. E. La primera paraula és "ser". S. Venia més fàcil ara. U. 25. Això és R. -Anem, Ralphie. Em he d'anar. -Estaré just a sota, Ma Caram. -T. O. Comproveu. Assegureu-vos que? Quina era la huerfanita Annie tractant de dir? Assegureu-vos que? -Ralphie, Randy ha d'anar. Feu el favor de sortir? -Està bé, mare. Vaig a estar fora. -Jo estava més a prop ara. La tensió era terrible. Què era? El destí del planeta pot penjar d'un fil. -Ralphie, ha de marxar de Randy. -Vaig a estar a dret per l'amor de Déu. -Ja gairebé. Els meus dits volaven. La meva ment era un parany d'acer. Cada porus vibrar. Era gairebé transparent. Sí, sí, sí, sí, sí. -Assegureu-vos de prendre la seva Ovaltine. Ovaltine? Un comercial de mala mort? Fill de puta. [FI REPRODUCCIÓ DE VÍDEO] ALTAVEU 1: Aquesta és CS50, i que s'establirà Problema Dos. Ens veiem la setmana que ve. ALTAVEU 2: En la següent CS50, això succeeix. ALTAVEU 1: Així que un tema que no tenim mirat fins ara és la dels punters de funció. Ara, un punter de funció és la direcció d'un públic funció, però igual que - fill d'un -