[Powered by Google Translate] DAVID J. Malan: Molt bé, aquest és CS50 i és aquesta la final de la setmana 1, així que les targetes estan en estudi i el nombre total de companys de classe que té aquest any és de 745. I estem molt contents de tenir a molts de vostès en el curs aquest semestre, però tot i aquest curs és tan gran, adonar-se que es tracta d'aquestes coses com dinars divendres, com les hores d'oficina, seccions 15-persona, i que així successivament són realment la intenció de crear aquest més íntim ambient. Així que, encara que és possible que es reuneixen una o dues vegades per setmana, aquí a Sanders, sabem que gran part de la seva experiència en aquest curs serà molt estar en mans del costat dels seus companys de classe i el personal docent. Així que aquí anem, Fall 2012. Així recordar que l'última vegada que va acabar amb una nota de imprecisió, parlant de la representació dels nombres. I ens fixem en un dels fracassos que van ocórrer en el món real, quan es tractava de malentesos com funcionen els ordinadors. Bé, avui anem a revisar una altra d'aquestes idees així com continuar amb la nostra discussió del client CS50 i C, i el que significa realment per programar. Però en primer lloc, a només un parell d'anuncis remolí. Seccions començarà aquest diumenge, i la primera setmana és sempre un poc d'un començament ràpid, ja que només es va posar en els formularis de la secció. Estem fent el mateix, ara, amb els companys docents, ara que coneguin els seus horaris, de manera que estem apuntant, per Dissabte al matí, fer un seguiment amb vostè amb la seva secció assignació i TF. Adonar-se que començaran l'endemà, diumenge o dilluns o dimarts. I després anem a acomodar canvis de secció a mesura que sorgeixin en els dies per venir. Les hores d'oficina, per la seva banda, són, de nou, aquesta nit, 8 PM 11, en Annenberg, així com demà a la nit. Tot i que els conjunts de problemes es deuen generalment els dijous al migdia, s'adona que té un màxim de cinc dies de retard per gastar, per tant, la disponibilitat d'hores d'oficina dijous si diners en efectiu en un d'aquests dies de retard i, per tant presentar, alguna cosa el divendres. Permetin-me suggerir que Scratch és una de les més divertides, entre els el joc de claus més baixes problema. I m'agradaria penjar en aquests dies finals, estratègicament, només per més tard en el semestre en què la vida comença a posar-se al camí amb exàmens parcials i altres classes. Sèrie de problemes 1, per la seva banda, es publicaran en el curs de Web per aquest divendres, com es veurà en la caminada del curs a través de vídeo, que serà filmat a les 2:30 PM divendres i després publicat en línia pel dia següent. Així que vam acabar dilluns. Vull - en realitat, una nota aquí. Com que les classes - perquè Sanders no és exactament presten si al casual Q & A de tornada i volta terriblement bo, estem intentarà una cosa una mica nou aquest any, en què si vostè no se sent còmode aixecar la mà o simplement prefereixen no aixecar la mà en una habitació com aquesta, tindrem alguns dels companys docents i les entitats emissores dotació cs50.net/discuss durant la conferència. Així que si vostè té una pregunta, perquè jo estava completament clar sobre alguna cosa o tens curiositat sobre alguns tema, tracti de publicar allà. Marqueu amb una etiqueta de classe, i farem tot el possible avui i la setmana que - ens tornarem provar això - per alinear ja sigui per mitjans electrònics, en línia, o si se sent com que hauria realment es tractin de forma massiva, un dels companys docents o de CA aixecar la mà i demanar anònimament en nom seu. Així que anem a donar-li una oportunitat i veure el bé que funciona. Però, és clar, continuar elevant les mans com li agradaria. Així última vegada que va revelar que el 10% o un desè-no és, en fet, 0,1, com se'ls va ensenyar fa molts anys. És de fet, un valor com aquest. Però això no és totalment cert, no? Només tenim aquesta restricció en els ordinadors de manera que, si només té una quantitat finita de memòria, RAM, o més específicament bits, bé, hi ha només un nombre finit de coses que pot representar. Per exemple, si tenim el nombre zero, i volem representen en binari, utilitzant vuit bits, on un bit, de nou, és un zero o un u, podríem representar com 00000000. I això és una mica innecessàriament prolixa. Igual que en el sistema decimal al món real, en general, si voleu escriure el nombre 123, es humans probablement no escric 00000123 tot i que, funcionalment, que és el mateix nombre exacte. Acabem de caure zeros a l'esquerra, per així dir-ho. En binari, podem fer el mateix. Binari i zero, zero i binari és igual a zero. Vostè només necessita un únic bit. Però, de nou, la unitat de mesura més comú en el món de la informàtica és bytes, vuit bits. El fet que una mica, bastant inútil. Vuit bits, no terriblement útils, però almenys és més útil que una única unitat de mesura. Així que amb vuit bits, en general va a representar binari. Així que aquí tenim als números zero, un, dos, i després, com Nate va fer en el vídeo el dimecres passat, podem seguir comptant fins a set, vuit. I si fem servir més i més bits, es pot comptar fins a l'infinit. Però si només té un nombre finit d'aquests bits, igual que en el cas de qualsevol sistema informàtic, o fins i tot míssils sistema, bé, en realitat només té un quantitat finita de precisió. Així que si vols per representar el nombre com 0,1, també, la equip ha d'escollir i triar. I si només té un nombre finit de nombres que pot representen, pot acostar fins a 0,1 per tu, però no pot necessàriament li dóna exactament el paràmetre que voleu. I aquest és només un dels reptes de les computadores, sota de la caputxa, per sort. A mesura que avancem més en el semestre, aquests nivell inferior detalls es tornen molt menys interessant, però el dubte aplicació d'aquestes idees poden tenir un món molt real ramificacions. Un d'ells és una diversió poc. Quants de vosaltres heu vist la pel · lícula Space Oficina sorprenent? Si vostè no té, que és el seu no oficial tasca per a la setmana. Però en l'espai d'oficina, els becaris en aquesta pel · lícula pren avantatge d'precisament aquesta idea, però en realitat va robar des d'una altra pel · lícula que podria tenir vist, fins i tot anys abans. Així que et vaig a donar uns segons d'aquest tràiler de aquesta pel · lícula increïble i aquest és en gran mesura acadèmicament rellevant. [JOCS DE VÍDEO] La veritat és que estic sent promoguts. Puc programar un virus que esquinçarà que col · locar en gran. Bé, com funciona? Cada vegada que hi ha una transacció bancària on l'interès és computada, hi ha milers al dia, l'equip acaba amb aquestes fraccions d'un cèntim. Però jo no faré res il · legal. Il · legal? Samir, això és Amèrica. Vostè ha de juro per Déu. Si ningú sap sobre això, però nosaltres, d'acord? No hi ha membres de la família, sense núvies, ningú. [Inaudible]. No et preocupis, home, no l'hi diré a ningú. [Pel · lícula acaba] Molt bé, així que potser van trobar aquesta pel · lícula millor que la majoria persones aquí, però, en qualsevol cas, el virus que eren tractant de crear - i en les pel · lícules, en qualsevol moment que en diria alguna cosa un virus, que generalment no és realment un virus. És simplement un programa que algú va escriure que fer alguna cosa. I en aquest cas, els nois estaven intentant escriure un programa que es van aprofitar de la seva empresa anomenada Innotech de sistema informàtic, mitjançant el qual les computadores, també, fins i tot quan En relació als diners, no pot necessàriament representen els diners exacte. Així que, encara que és possible que tingui 0,10 $ en el seu compte bancari, 0,10, bo, l'equip realment pot pensar que vostè té aquesta centaus molts en el seu compte bancari. I així, el que aquests nois estaven aspirant a fer - i va robar la idea, és de Superman III, on Richard Pryor va fer el mateix - que eren essencialment escriure programes que aspiren a prendre tot el final nombres, totes les diminutes fraccions petites, diminutes de monedes d'un cèntim, i drenant els fora per tal que els éssers humans només pensament, oh, és només 0,10 $ allà, però tots els que números finals eventualment es sumen. Així que una idea meravellosa i divertida en què va sortir per la culata pel · lícula en particular. Però en el món real, també, hi ha molt més en relació implicacions d'aquest tipus de coses. I una de les raons per submergir-se en el camp de la informàtica ciència és, de nou, la seva aplicabilitat no a la ciències d'enginyeria sol, però a només altres camps també. Així que aquesta és una mirada menys optimista del que pot sortir malament, però també és bastant obrir els ulls, em sembla, quan es tracta de entendre exactament com les tecnologies omnipresents com ordinadors i la programació o en aquests dies, en forma de programari. Així que aquest pròxim clip es tracta només de sis minuts, segueix on el deixem l'última vegada, però ens permet mirar una mica més en profunditat a aquests d'aquests temes un. Deixa passar directament a on el deixem, que era aquí. I tenim la segona part de dues, durant uns sis minuts aquí. [PLAY MOVIE] Ple tecnologia de coets moderns. El 1991, amb l'inici de la primera guerra del Golf, el Patriot míssil experimentat el mateix tipus de el problema número de conversions. I com a resultat, 20 persones, 20 soldats nord-americans, van morir i prop de 100 van resultar ferides, quan el Patriot, que se suposava per protegir contra els Scuds entrants, no va poder disparar un míssil. Quan Iraq va envair Kuwait i Estats Units va posar en marxa un desert Storm a principis de 1991, bateries de míssils Patriot van ser desplegats per protegir Aràbia Saudita i Israel des de l'Iraq Atacs amb míssils Scud. El Patriot és un EUA mitjà abast superfície-aire del sistema, fabricat per l'empresa Raytheon. La mida dels interceptors Patriot si mateix, es tracta aproximadament 20 peus de llarg i pesa al voltant de 2.000 lliures. I porta una ogiva d'uns - Crec que és més o menys 150 lliures. I el propi cap és un explosiu d'alta potència que té fragments al seu voltant. La carcassa del cap de combat està dissenyat per actuar com perdigons. Els míssils es porten quatre per contenidor i són transportat per un semi-remolc. El Patriot antimíssils sistema es remunta almenys a 20 anys. Originalment va ser dissenyat com un míssil de defensa aèria per enderrocar avions enemics, a la primera Guerra del Golf. Quan la guerra va arribar, l'exèrcit volia utilitzar-lo per disparar per Scud, no avions. La força aèria iraquiana no és tant d'un problema, però l'Exèrcit Estava preocupat per míssils Scud. I així van tractar d'actualitzar el Patriot. Interceptar un míssil enemic que viatja a Mach 5 es va a ser un repte suficient. Però quan el Patriot va ser traslladat d'urgència en servei, l'Exèrcit no era conscient d'una modificació iraquiana que van fer la seva Scuds gairebé impossible d'assolir. El que passa és que els Scud van ser arribant eren inestables. Es trontolla. La raó d'això era que els iraquians, amb la finalitat d'obtenir 600 quilòmetres fora d'un míssil d'abast de 300 quilòmetres, es pes de l'ogiva davantera i va fer la ogiva més lleuger. Així que ara la Patriot està tractant d'arribar a la Scud, i la majoria de el temps, l'aclaparadora majoria de les vegades, ho faria només volar pel Scud. Quan els operadors del sistema Patriot Patriot va adonar de la no va aconseguir el seu objectiu, que va detonar la càrrega explosiva Patriot. Per evitar possibles víctimes, es va permetre a caure a terra. Això va ser el que molta gent va veure, com grans boles de foc al cel, i incomprès com interseccions de ogives Scud. Si bé, en el cel de la nit, Patriotes semblava Scud va destruir amb èxit, en Dhahran, no podia haver error sobre el seu acompliment. Allà, el sistema Patriot radar va perdre la pista d'un Scud entrant i mai va posar en marxa a causa a un defecte de programari. Va ser als israelians que van descobrir per primera vegada que com més temps el sistema estava en, major és el temps de discrepància es va convertir, causa d'un rellotge incorporat a l'ordinador del sistema. Unes dues setmanes abans de la tragèdia en Dhahran, el Israelians van informar al Departament de Defensa que el sistema estava perdent el temps. Després de vuit hores de funcionament, es van adonar que el sistema va ser que es vegi amb menys precisa. El Departament de Defensa va respondre dient a tots les bateries Patriot no abandonar els sistemes durant molt de temps. Mai van dir el que un temps va ser - 8 hores, 10 hores, 1.000 hores. Ningú ho sabia. La bateria Patriot destinat a la caserna de Dhahran i el rellotge intern defectuós havia estat en més de 100 hores en La nit del 25 de febrer. És seguit el temps amb una precisió d'una desena part d'un segon. Ara desè de la segona és un nombre interessant perquè que no pot ser expressat en binari, exactament, el que significa no es pot expressar exactament en qualsevol ordinador digital moderna. És difícil de creure. Però utilitzar això com un exemple. Prenguem el nombre d'un terç. Una tercera no pot ser expressat en decimal, exactament. Una tercera part es va en 0,333 per l'infinit. No hi ha manera de fer això amb una precisió absoluta en decimal. Aquest és exactament el mateix tipus de problema que va passar a el Patriot. Com més temps el sistema va funcionar, pitjor és l'error de temps va arribar a ser. Després de 100 hores de funcionament, l'error en el temps era només aproximadament un terç d'un segon. Però en termes de focalització d'un míssil que viatja a Mach 5, que va donar lloc a un error de seguiment de més de 600 metres. Seria un error fatal per als soldats en Dhahran. El que va passar és un llançament de Scud va ser detectat per l'alerta primerenca satèl · lits i sabien que el Scud venia en el seu direcció general. No sabia d'on venia. Correspon ara al component de radar de la Patriot sistema, la defensa de Dhahran, per localitzar i fer un seguiment de la míssil enemic entrant. El radar era molt intel · ligent. En realitat es podria seguir la posició de la Scud i després predir on seria probablement la propera vegada que el radar envia un pols de sortida. Això es diu la porta de distància. Després, una vegada que el Patriot decideix ha passat suficient temps per anar enrere i comprovar la ubicació per a la pròxima detectada objecte, torna. Així que quan vaig tornar al lloc equivocat, llavors no veu objecte, i decideix que no hi havia cap objecte. Era una falsa detecció i baixa de la pista. El Scud entrant desaparèixer de la pantalla del radar. I segons després, es va estavellar contra la caserna. El Scud va matar a 28 i va ser l'últim acomiadat durant la primera Guerra del Golf. Tràgicament, el programari actualitzat va arribar a Dhahran el dia següent. I la falla de programari havia fixat, tancant un capítol a la turbulenta història dels míssils Patriot. PATRIOT és en realitat un acrònim de "Tracking Phased Array Intercepció de destinació. " D'acord, de manera que un resultat molt més dolorós de no gaire la comprensió d'aquest món. I el menjar per emportar, de veritat, de la pel · lícula és que la solució no reinicieu des de defensa antimíssils de tant en tant. I així, una vegada més, un dels objectius d'aquest curs, sens dubte en una escala més humil que aquestes aplicacions, és Tothom realment obert els ulls a exactament com vostè va sobre la màquines de fer el que vostè vol que facin i com es van fer això correctament, mentre que en el camí fent bé, amb elegància, i així successivament. I així, avui, anem a submergir-nos en una mica més d'això, però pel que no anem massa ràpid, especialment per als menys còmoda, sinó també per poder mantenir l'interès dels els més còmodes, anem a començar ràpidament amb una mica de resum d'algunes d'aquestes idees. I de nou, pregunti a distància, tant en persona o en línia, si vostè té preguntes perquè puguem mantenir a tots en la mateixa pàgina. De manera que l'aparell CS50, pas cap enrere, és el que, en les seves pròpies paraules? Està bé si no tens idea del que aquestes paraules poden ser encara. [Inaudible] Bé, pel que una interfície universal per - que tots podem compartir. Per descomptat. Així, es podria, per exemple, et dirà que vagis a algun lloc web, descarregar aquest programari per a Mac OS. Descarregui aquest programari per a Windows, configurar en amunt i avall. Però la realitat és que després ens trobem amb innombrables tècniques donar suport temes. I també en aquests dies, gran part del que es fa del costat del servidor, en el món de la informàtica, especialment quan es tracta desenvolupament web i aplicacions basades en web, és en realitat molt sovint es realitza en equips UNIX o Linux, a diferència de Mac o PC amb Windows. Així que entre els upsides, llavors, de la utilització d'aquesta cosa anomenada el CS50 Appliance és que tots tindrem el mateix entorn. Així que tothom està a la mateixa pàgina sense importar el maquinari que va arribar a l'escola amb però també es incursions en exactament el mateix entorn que vostè va a utilitzar cap semestre final, així com per al desenvolupament web, així com en la futur per a aplicacions reals dels mateixos. Llavors, més concretament, l'aparell CS50 és una peça lliure de programari que permet executar un altre sistema operatiu, Linux, en aquest cas, en el seu propi ordinador, en una finestra. Ara no només pots descarregar l'aparell. Vostè necessita un programa amb el qual jugar o córrer l'aparell. I aquest tros de programari es coneix generalment com un hipervisor. Els hipervisores es presenten en forma de productes com VMware, Virtual Box, Parallels. Tot tipus d'empreses fan programari lliure i comercial, per igual. El que veuràs en el problema 1 set són les instruccions sobre com obtenir programari gratuït amb el qual funcionar l'aparell CS50. I una vegada que ho fa, vostè tindrà, en una finestra del teu Mac o PC, un entorn d'escriptori que es veu bastant com aquest, on té un menú d'inici-com a cosa al inferior esquerra cantonada. Té una carpeta d'inici, o el directori d'inici, a la part superior esquerra allà, un pot d'escombraries, i així successivament. Així que anem a esmicolar els detalls necessaris sobre la marxa. Però ara anem a submergir-vos en C. Així C és aquest llenguatge de programació, similar en esperit a Scratch, però molt menys gràfica, però, irònicament, molt més potent un cop que arribi coneixedors d'aquesta. Així que en C, escrivim programes d'escriptura de codi font, que és aquesta sintaxi similar a l'anglès, similar als mitjons demostració que vam fer l'última vegada que li permet expressar-se amb força precisió, si arcanely, a l'ordinador. Llavors, quin tipus de producte de programari és el que realment necessita per escriure programes en un llenguatge com C, basant-nos en la nostra conversa dilluns? [Inaudible] OK, només necessites un editor de text. No necessita cap programari especial per se per escriure programes. Només es necessita un editor de text com el Bloc de notes de Windows, TextEdit en Mac, o alguna cosa que es diu gedit, en el món de la Linux, que utilitzarem aquí. I això és tot, per escriure els programes. Però l'escriptura és només la meitat de l'equació. A continuació, executar-les. Però per executar programes - no es pot executar el codi font. En el seu lloc, ha de fer el que a ell primer? Si. DAVID J. Malan: Cal compilar. I, de l'altra, compilar el codi font significa - [Inaudible] DAVID J. Malan: Exactament. Traduint això a zeros i uns. Tots nosaltres, en aquests dies, tenen equips que tenen CPU, gairebé tots els quals estan fets per una companyia anomenada Intel, i Intel Inside, vol dir que no està dins del seu cervell ordinador, conegut com la CPU. I una de les coses que fa que el cervell és, sap com entendre els patrons de zeros i uns. Sap el que representa el patró de bits més, el que patró representa restes, quin model de bits representen la impressió, i la creació d'un so audible. Així que en resum, la CPU, juntament amb el sistema operatiu, que és una peça de programari que s'executa en la part superior de la CPU, per dir-ho. Juntes, aquestes dues peces saber com executar programes que nosaltres els humans escriure. Així que si entro al Appliance CS50 aquí, he d'obrir un editor de text i puc accedir a aquest en un parell de maneres. Em pot anar a Menú, Programació, i llavors puc seleccionar - No, no aquest menú. Puc anar a Accessoris / gedit aquí per obrir meu editor de text petit. O més simplement, puc fer clic al símbol petit a la part inferior cantonada esquerra. I ara em surt aquest ambient aquí. És molt evocador d'un editor de text simple, amb només una o dues diferències. A la part superior, on hi ha el cursor parpellejant, aquí és on Puc començar a escriure el codi. En el fons és aquesta cosa anomenada la finestra de terminal. I quin tipus de coses que puc fer en aquest l'anomenada finestra de terminal? [Inaudible] Està bé, així que vaig a executar ordres. I algunes de les ordres que va córrer el dilluns eren una mica críptics al principi, però per ls llista, cd canvi de directori, per rm, per eliminar-lo. Així que és una mena de camí de la vella escola de navegació de la seva ordinador, usant només el teclat i els comandaments textuals, i no, en general, amb el ratolí. Però anem a veure, en poc temps, aquest fet ens dóna una poc més de potència i una mica més precisió amb la qual expressar-nos. I després aquí a l'esquerra, només veurem, a mesura que comencem programari d'escriptura, un petit resum de la programa que hem escrit a la part superior esquerra. Però anem a veure que de nou en poc temps. Així que farem alguna cosa molt simple aquí. Permeteu de seguir endavant i anar a Arxiu, Guardar, i estic farà clic a jharvard aquí, més a l'esquerra, i jharvard és, de nou, el nom de la meva carpeta d'inici, el meu arxius personals, jo, ara és John Harvard, com tots vostès aviat serà John Harvard en aquest entorn. Ell té aquest directori Inici, Els meus documents i altres, que vulgueu conservar i, ara, aquest arxiu polz Així que vaig a dir-hello.c. Llavors em vaig a anar a continuació i feu clic a Desa, i ara el que tenim aquí és una fitxa anomenat hello.c, tant com un altre tipus d'editor. Així que ara seguirem endavant i començar a escriure un programa. int main (void). I després em vaig fer l'última vegada, printf, per a la impressió formatada, ("Hola, món!" ). Gairebé completa. Però em falta un parell de detalls. El que falta en aquest programa que s'utilitza necessito per que es compili en realitat? Si. [Inaudible]? DAVID J. Malan: Sí, així que he de incloure la norma I / O biblioteca. Així que això ha d'anar per sobre de principal, així que només vaig a fer una mica d'espai per a ella allà. I jo faré # include. I notin els parèntesis angulars allà. I en un apart, gedit és un usuari poc amigable, si de vegades una mica confús, ja que tracta d'ajudar a la seva ulls compte del que s'alinea amb què. Així que el fet que el meu cursor està al costat d'aquest angle suport, observi com es destaca l'altre angle suport més un això. I això és només per cridar la meva atenció sobre el fet que jo tenen simetria. I la simetria en la programació és generalment una bona cosa. De la mateixa manera, si moc el cursor fins al final, observi com el claus s'alineen per mostrar que, sí, tinc una oberta i un tancat, per dir-ho. Molt bé, i no puc fer res més. No és estrictament necessari, però una bona pràctica, per no dir retorna 0. I 0 retorn fa el que per a nosaltres aquí? O vol dir que? [Inaudible] DAVID J. Malan: Però no passa res. I, francament, és difícil per gran part a anar malament en un programar aquest curt. Així que només estic sent súper explícit que tot està bé. Jo, l'ésser humà, quan executo aquest programa, probablement mai ho farà veure que 0. En general, aquests nombres que estan sent retornats a partir de principal només educar els seus caps als éssers humans quan alguna cosa va malament. I et donen una mica de pop up d'error del sistema dient: un, dos, tres, o qualsevol que sigui el nombre que va ser va ser realment retornat. Així que res dolent en això? [Inaudible] DAVID J. Malan: Així que això no és tant un error funcional però una estètica. Probablement hauria de posar en un caràcter de nova línia allà al final d'aquesta cadena perquè realment moure el cursor a la següent línia, i el programa només es veu una mica més bonic. Així que ara em deixis anar a la meva finestra de terminal i amplia la I això d'aquí, es diu el sistema. Es m'acaba de recordar qui sóc, jharvard @ aparell, on aparell és el nom de l'equip que estic. Entre parèntesi figura l'accent, el símbol gargot, que representa què? AUDIÈNCIA: directori d'inici. DAVID J. Malan: directori d'inici. Així que això és només una notació abreujada per dir que estan en vostra carpeta on tots els seus arxius d'anar per defecte. Així que ara, aquí, puc escriure ls per obtenir la llista. I l'únic que veig aquí en aquest moment és hello.c. I això és bo, perquè jo acabo d'escriure això. Així que seguirem endavant i em fan hello. I notin que no estic escrivint fer hello.c. En el seu lloc, només estic escrivint el nom base del fitxer, hola. I que, com vam veure el dilluns, només s'infereix que vull el. c arxiu. Així que ara que he escrit fer hello. Ara veig aquesta comanda bastant llarg i continuarà veient això una i altra vegada. Però per ser toc clar, la paraula que acaba d'aparèixer, aquest és el compilador real. Fer és una utilitat de generació. És només un programa més fàcil d'utilitzar que em salva, en la llarg termini, d'haver de escriure increïblement tediós llarg ordres com aquesta. Així que es podria executar Clang manualment. Es podria escriure tot això manualment. Només es posa molt avorrit. I així que és només un programa que simplifica les nostres vides i executa ordres més complexes per a nosaltres. Molt bé, i ara què arxiu he de tenir en el meu directori actual? No només hello.c, però també saludar. Així que si vull córrer hola, recordem que dic dot slash, on els mitjans de punt entrar a la carpeta actual, allà on són, a continuació, executeu el programa anomenat hola, i, de fet, ara, Tinc hello world. D'acord, qualsevol pregunta sobre el flux de treball o la sintaxi de el que acabes de fer? Molt bé, així que anem a prendre les coses a un nivell superior de nou. Així que això va ser decebedor per escriure un programa que només mai diu hola, món. Així que el vam canviar, el dilluns, dir hola, David. És una mica més personal, però igual de dur codificat com el primera versió. Així que no és tan convincent. Però existeix, al carrer, a més de les funcions dubte impressió, funcions que permeten obtenir informació de l'usuari. I la manera com ho va fer, l'altre dia, va ser com segueix. Abans d'imprimir alguna cosa, vaig arribar per primera vegada alguna cosa de l'usuari. Així que anem a fer això una altra vegada. Cadena s, on s és només un nom arbitrari, aquí, per un cadena, és igual a GetString. Llavors, què va ser GetString? Òbviament obté una cadena que, basant-se en el seu nom. Però el que és, més tècnicament? És una funció. Així que és una funció que no ve amb C per se. CS50 personal escriure això. I així, per utilitzar això, no es pot simplement incloure stdio.h, També ha d'incloure què? Si. Així cs50.h, que és simplement un arxiu que va escriure fa alguns anys. El instal · lem en l'aparell perquè vostè juntament amb tots els arxius estàndard. I així, en aquestes primeres setmanes de la classe, utilitzarem això només per simplificar el procés de fer molt bàsic coses com aconseguir entrada de l'usuari. Perquè, com veurem en un parell de setmanes, l'usuari aconseguir l'entrada en una llenguatge com C és en realitat sorprenentment complexa, sobretot perquè no se sap per endavant, en general, com quantitat de coses que l'usuari va a escriure polz I quan vostè no sap la quantitat de dades que pot esperar, no saber la quantitat de memòria per assignar. I si vostè realment té un usuari de confrontació que està tractant de per introduir-se al sistema, bloquejar l'equip, bé, generalment el primer mètode d'atac és, tal com ho vaig fer en Dilluns, escriviu tota una seqüència llarga de caràcters a l'atzar, premeu Enter i mireu el trenca. En general, si es trenca un programa, que fa referència a una falla de seguretat, potencialment. Sens dubte ludeix a vostè, el programador, després d'haver fet una error, però més perillós, que podria haver fet una error relacionat amb la seguretat i, en general veurem que així és com màquines estan compromesos fins ara, tant en el món de la web i dels programes en la línia d'ordres, així. Està bé. Així que la cadena s és igual a getString. Així que ara més concretament, què significa la línia 6 aquí? Així, la funció de la dreta es posa cadena, presa quants arguments? Bé. Així que res. Una mica de seny comprovar. Un argument, de nou, és només una entrada a una funció per alterar seu comportament per defecte d'alguna manera. Però en aquest cas, jo no vull alterar el comportament de GetString. Jo només volia arribar a una cadena. Així que vaig posar res en els parèntesis i després vaig posar un punt i coma demarcació de la final de la línia de codi. Ara, el signe d'igualtat no significa igual, per se. Significa assignació, el que significa posar ho aconsegueix emeses a l'interior del que és just a l'esquerra. Així que a l'esquerra, diem que hem declarat una cadena anomenat s. I més específicament, hem assignat la memòria interna de que posarem els bits que representen una seqüència de personatges. Però per ara, hem assignat o es declara una cadena. Està bé. Així que ara, un cop hagis fet això, vull connectar el valor de s, no el valor de David. Així que això està malament per què? Així que això és només, literalment, la s no modificable. És a dir "hola, s", que no és el que vull. Així que puc fer això. El signe de percentatge és un marcador de posició, però ara he de passar a imprimir un segon argument. Recordem que els arguments a funcions estan separades per comes, de manera que el pròxim coma aquí poso després d'això la lletra s. I en aquest context actual, s és la variable, i printf, en rebre les dues entrades - la cadena a la banda esquerra i el nom de la variable s a la dreta - es podrà connectar a aquest últim en la primera per a nosaltres, i només imprimir una cadena bé preciós que conté el que sigui que hem escrit polz Així que anem a provar això. Seguirà endavant i allunyar la imatge, de nou al meu finestra de terminal. Apropar al final aquí. Torneu a fer hello. Clang sembla haver estat repetició. Vaig a escriure. / Hello Intro. Res sembla estar passant encara, però és en aquesta pantalla que puc escriure alguna cosa com Nate, Enter, i ara tenim Hola, Nate. I puc fer-ho de nou amb Rob, i així successivament. Així que espero que ara aquest programa es comporta com penso. Ara, no tota amigable per a l'usuari. No tinc ni idea del que s'esperava de mi. Així que sens dubte podem netejar això una mica. Deixa tornar aquí, i en lloc de busseig i preguntar a l'usuari per a una cadena, permetin-me dir-los explícitament la usuari el que estic esperant. Així printf ("Introduïu una cadena:" ); Així que no hi ha variables aquí. No hi ha signes de percentatge. Només la frase en Anglès simple. Permetin-me ara passar a la final aquí i tornar a executar el meu programa. Però res sembla haver canviat. Per què? He de tornar a compilar. Així error fàcil de cometre. Però vostè ha de no només guarda l'arxiu però tornar a compilar el programa. I així, si puc tornar a fer funcionar hola, ara Clang executa. Ara es pot executar. / Hello. I ara veig "Introduïu una cadena:". Bé. Ara és una mica més fàcil d'utilitzar. Nate, Enter, hola, Nate. Bé, ho intentarem de nou i començar a pensar sobre els casos de cantonada. Així com en scratch, és recomanable o s'estan encoratjat en l'especificació de pensar tipus del que podria passar malament si vostè no anticipa tot el que l'usuari pot fer. Bugs, per tant, podria ser. Així que introdueixi una cadena - Què és un cas extrem en aquesta llista? Què és un escenari que jo, el programador, que no tingui previst? Si. Bé. I què si escric en una sèrie com aquesta? Està bé. Per tant, encara funciona. Gramaticalment no té sentit. Però si més no funciona el programa. Quin és un altre cas de la cantonada? Una cosa que no esperava. Sí? Bé. Així que podríem fer una mena nombre molt, molt gran. Així que farem això aquí. Permetin-me allunyar per un segon, voldria destacar. No es pot copiar i enganxar aquí. Està bé. Així que no es pot copiar i enganxar a la finestra de terminal, així que anem a simplement simular. Permetin-me allunyar la imatge, va a embolicar. No faré això per molt temps, perquè no ho farà en realitat trencar en aquest programa. Però podria. Retorn. Però no va ser així. Està bé. Però és un cas genuí racó. I l'única raó per la qual es van comportar correctament, de manera que parlar, és perquè la funció GetString CS50 és en realitat dissenyat sota el capó, com veurem en un parell de setmanes, per assignar automàticament RAM més i més, més i més de memòria del sistema operatiu, quan s'adona, wow, realment has escrit en alguna cosa bastant llarg. Ara, això és una mica d'una mentida piadosa. Si realment va fer una pausa durant una bona estona i em va escriure en alguna cosa així com 5 mil milions de caràcters en el teclat aquí, o realment va copiar i enganxar una mica, que molt possiblement podria fer que el programa es bloquegi. Només una mica més difícil de simular que amb una finita quantitat de temps. Quin és un altre cas de la cantonada que vam poder provar? Sí? Si. Així que per què no respons res? Així que en realitat ha de prendre alguna acció, perquè en cas contrari el programa va a seure allà parpellejant tot el dia. Però si sols premeu Enter - Bé, ara, encara es veu malament. És que no xocar, però potser ara hi ha una oportunitat per començar a aplicar un programa més rigorós que comprova efectivament. I si la cadena, l'oració, la paraula que jo escriure en té longitud 0, bé, potser hauria cridar a la usuari, o li dic o li permet introduir una cadena de nou, de manera que aconseguim realment el que sembla ser un comportament correcte i no només la supervisió completa del meu part. Pregunta a l'esquena? Nombre decimal. Així que podríem intentar això. 1,10000005. Sembla que funcionarà realment bé. I que en realitat s'espera. Tot i que podria haver escrit aquest nombre hi ha, o un major nombre anterior, s'adonen que quan estàs escrivint usuari entrada i estem usant la funció GetString, no importa si el que estic escrivint es veu com un nombre. Recordem que d'acord amb ASCII, tot en el seu teclat té un valor numèric que es pot assignar a un caràcter, un char. Així que en aquest cas, tot i que podria escriure un nombre, el equip pensarà que és, per dir-ho, com una cadena - una cosa que es veu com un nombre, però és realitat no és un nombre. Però això és en realitat una transició perfecta, perquè ara podem de fet la transició a programes d'escriptura que utilitzar altres tipus de dades. Així que a més d'usar caràcters, o més bé, a més d'utilitzar cordes, adonar que tenim altres tipus de dades en C i en altres idiomes. Un char, com el seu nom indica, és un personatge únic. Un flotador és un valor de punt flotant, i això és només una fantasia manera de dir un nombre real - una cosa que té un decimal punt en què amb alguns números a l'esquerra i / o dreta. Un valor int és un enter, que és només un nombre com 123. I ara el més interessant són coses com doble. Què vam dir una habitació doble era l'última vegada? És 64, dreta. Així que, en general un float és de 32-bit - pel que és tot aquest temps en la memòria, utilitza 32 zeros i uns a són la - un doble és literalment el doble, el qual significa que pot representar grans nombres, o pot representar nombres més precisos. Així que vostè pot tenir més números després del punt decimal, però com l'home va dir en el vídeo, fins i tot una cosa tan simple conceptualment com 1/3 no pot representar-se amb precisió per un equip, perquè amb el temps se li acaba de bits, i per tant, només es pot fer .33333333 tantes vegades, en el que vostè acaba de dir que m'he quedat sense representació espai, he de trucar a només un dia i representar una mica imprecisa així. I molt de temps - nom estúpid, però és perquè hi ha un tipus de dades coneguda com long en C que casualment és sovint 32 bits, igual que un int és de 32 bits, però és un temps llarg general 64 bits. Per tant, només significa que vostè pot representar més nombres que això. Està bé. Així que si realment vols començar representant les coses, podria necessitar més tipus sofisticats, i és per això que comptem amb cadena. Així, a la biblioteca CS50, aquest arxiu anomenat cs50.h, hem en realitat va declarar un tipus de dades, per així dir-ho, anomenada cadena, però string en realitat no existeix. Això és, una vegada més, una d'aquestes capes que anem a pelar de nou en una setmana o dues i llençar a les escombraries, i de fet mirar sota el capó al que en realitat és una cadena, i com està representada. També veurem valors booleans. Llavors, què era un bool en el context de Scratch? És cert o fals. Així que és un valor que és vertader o fals, encès o apagat, 1 o 0, però vol veure el món. Així que en C, gràcies a la biblioteca CS50, que al seu torn inclou una altra biblioteca sota la caputxa, tenim l'accés a un tipus de dades que es diu bool, que es literalment ens permet assignar els valors true o false per les coses en un programa. Així que seguirem endavant aquí i escriure un petit programa que fa alguna cosa relacionada amb nombres. Així que permetin-me tornar al Dispositiu CS50, deixa seguir endavant i crear un nou arxiu anomenat aquí - direm alguna cosa simple, com math.c. Està bé. I ara puja a la part superior del meu programa, estic farà l'habitual - # Include, així que puc utilitzar printf, int main (void) - tornarem, amb el temps, el que significa int aquí, el buit significa aquí, però per ara, només sé que vostè ha de començar programes com aquest. Ara vaig a seguir endavant i dir alguna cosa una mica diferent - printf ("Dóna'm un nombre:" ). Llavors em vaig a fer int n = getInt, perquè Resulta getInt és una altra funció a la biblioteca CS50 més GetString. I ara me'n vaig a fer alguna cosa estúpid, com "gràcies per al% d ", per al nombre enter decimal, i després coma n, i a continuació, retorna 0. Així que de nou, torna 0 no té res a veure amb el nombre que estic preguntar a l'usuari. Només vol dir que al final de tot, presumiblement, és així. Així que permetin-me anar a la meva finestra de terminal aquí. Deixa escriure make matemàtiques, introdueixi. I alguna cosa està malament. Fer les matemàtiques no va funcionar. Aquest és el primer dels nostres missatges d'error. Per què? Un críptic mica, però - Si. Així cs50.h. Així que de nou, especialment al principi, podràs escriure el teu primer programa conjunt de processadors 1 en seccions, en hores d'oficina, i francament, serà aclaparador de vegades el que aquestes coses en realitat estan dient. Però t'adonaràs molt aviat comencen a caure en les galledes mitjançant el qual aquest vol dir que vostè ha deixat una de la # inclou a la part superior de l'arxiu. I Clang, el compilador, se l'informa d'això per dir, en lloc imaginari, la declaració implícita de getint funció no és vàlid. Està bé. Llavors, què significa això? Només vol dir que vostè ha declarat implícitament en getInt el sentit que no s'ha declarat explícitament. Per declarar explícitament int, cal ensenyar Clang que existeix. I la solució molt simple per això és per ensenyar per incloent aquest altre arxiu, cs50.h, en la part superior del seu arxiu. Perquè literalment, el que fa és # include li diu Clang més o menys per anar a buscar l'arxiu anomenat cs50.h, copiar, enganxar-lo automàticament a la part superior del meu programa per mi, i després convertir el codi font en zeros i uns. Però això, òbviament, seria molt avorrit si nosaltres, els humans tenien per anar copiant i enganxant aquests arxius grans tot el temps, # Include només fa tot de forma automàtica sense enterbolir el meu codi amb una altra persona biblioteca. I una biblioteca és més que un altre arxiu que conté les funcions i altres coses que algú ha escrit, que som aprofitar per al nostre propi bé. Està bé. Anem a intentar-ho de nou. Fer matemàtiques. Retorn. Bé. Així que sembla haver funcionat. Així que permetin-me ara funcionen les matemàtiques,. / Matemàtiques. Introduïu em dóna un nombre, 123. Gràcies pel 123. Ara anem a provar amb un altre cas de la cantonada. Una cadena és bastant generós, ja que un cadena pot ser qualsevol cosa. Pot semblar que els números, sembla personatges, semblen paraules. Però un int és un enter. Així que ara si sóc l'usuari difícil, i diu "Dóna'm un nombre ", el que si intento fer alguna cosa com 0,1? Bé, això és un nombre, i és consistent amb la gramàtica que s'utilitza aquí, però per sota de la caputxa, estic d' curs usant el getInt funció. Així que anem a veure què passa. Intro, torni a intentar-ho. Està bé. Vaig a ser difícil i simplement premeu Enter. Enter, Intro. Així que ara sembla que getInt és una mica més poderós que GetString. Nosaltres, el personal, implementat de manera que si s'observa no ens ha donat un enter - i un int és un nombre decimal contenen zeros, uns, dos, tres, quatre, cinc, sisos, barlets, vuits, o nous. I això és tot. No hi ha punts decimals, ni personatges, ni signes de puntuació. Sembla que hem de cooperar. Així que tractaré de quatre, cinc, sis, i això m'ajuda a passar. Així que en realitat, per ser anal aquí, probablement hauria de dir "Dóna'm un nombre sencer "per tal de transmetre a l'usuari exactament el que pretenc. Ara anem a pensar sota la campana. No anem a veure com s'implementa cs50.h avui, que biblioteca. Però si se segueix dient reintentar, reintentar, reintentar, el que la programació construir estic fent servir presumiblement per sota de la campana implementar això? Així que només un bucle, oi? Una de les idees més senzilles que hem vist en Scratch. The Forever construir, construir la repetició. És de suposar que, en aquest programa, per sota de la campana, fins i tot tot i que està escrit en C i no zero, que està fent una cosa que es diu equivalent a sempre si l'usuari no té escriure en un nombre sencer, per exemple reintentar, reintentar, reintentar, reintentar, de manera que finalment, quan ho fem arribar un sencer, llavors sortir d'aquest bucle. Llavors, ¿quines altres funcions poden usem aquí a la biblioteca del CS50? Bé, una mica de les òbvies, si més no sobre la base de la Tipus de dades que ara sabem que existeixen. Implementem GetString, getInt, sinó a tot el primeres setmanes del terme, també es pot utilitzar GetFloat i GetDouble i GetLongLong amb la finalitat d'obtenir exactament els Tipus de dades que desitgi. Com que el detall clau aquí és que a diferència d'altres idiomes, com Python i Ruby, en el qual no necessàriament han de declarar el tipus de dades d'una variable - vostè no ha de dir-li a l'ordinador quin tipus de coses et posaràs en la variable - al carrer, vostè ha de ser sempre tan precisa. Així que si vols una variable anomenada n, un tros d'emmagatzematge que en aquest cas passa a ser de 32 bits per convenció, ha de dir-li a l'ordinador que aquests bits són va a emmagatzemar un nombre - No és un personatge, no una cadena, no un flotador. I això es refereix a la qüestió que efectivament vaig trobar la setmana passada. Si estem usant zeros i números d'éssers per representar no només nombres, però A i B i C, com en el món és un equip sabrà que aquest patró de bits en realitat representa el nombre 65, en lloc de representar el lletra A, que casualment, segons ASCII, recordo, era equivalent a 65? Així que aquests tipus de dades proporcionen un context per a l'equip, per la qual que se sap si aquests bits s'ha d'interpretar com una int o com una cadena. Qualsevol pregunta, llavors, a això? Sí? DAVID J. Malan: Bona pregunta. Si traiem stdio.h, guardem l'arxiu - m'ho dius a mi anar a la finestra de terminal i executeu make matemàtiques, zoom i entrar - ara em surt un error diferent, perquè sóc implícitament declarant quina és la funció ara? Printf. Així que ara he creat un nou problema, la solució és essencialment el mateix. He de posar això de tornada. AUDIÈNCIA: [inaudible] DAVID J. Malan: Oh. Així que si sac - Bé, sí. Així que si em trec la inclusió de l'E / S de la biblioteca fins aquí, i llavors estàs dient que si em desfaig de printf, obtenir desfer-se de printf? Sí Això hauria de funcionar, perquè ja no estic fent servir qualsevol - crits. ¿Acabo de mentir? Oh, està bé. Això no funcionarà a causa d'un nou error que acaba de presentar. I aquest és una mica més fàcils d'entendre. Quin és el problema? Sense utilitzar la variable núm. Així que aquest error és el resultat d'haver configurat el aparell a ser particularment pedant, cridar realment en per tots els errors possibles, fins i tot si és una espècie de un error no fatal com això - és realment tan gran tractar que em van assignar un int, posar un nombre en ell, i després acabo de fer res amb ell? Així que funcionalment, no. Això no va a trencar el programa. És només una mica estúpid, oi? No hi ha valor per haver demanat aquest número, emmagatzemats en una variable, si mai farem res amb ella, ja sigui imprimir o guardar. Així doncs, en aquest cas, Clang està reconeixent com a molt, i que està dient sense usar la variable núm. Així que podem arreglar això, si realment volem. Però de nou, això no és una bona programació ara. Així que només podia fer això - baixar aquí, deixa netejar la pantalla, fer matemàtiques. Això funciona. Ara puc executar el meu programa de matemàtiques, presa d'entrada - bé, això era dolent. Presa d'entrada, i que és tot el que fa, en aquest cas. Així que en realitat, anem a provar un cas, una altra cantonada que no va pensar abans. En aquest cas - aquí, anem a tornar a la que és una poc més fàcil d'utilitzar. Deixa tornar aquí i fer funcionar de nou les matemàtiques. Vaja, què vaig fer malament? He de fer retrocedir encara més. Bé. Ara estem de tornada en l'estat original, on tots és d'esperar també. I ara si em quedo matemàtiques, 123 sembla funcionar. Però això no és realment una prova eficaç, per dir només bé, això funciona. 789, que funciona. És hora de presentar. Perquè hi ha altres casos de cantonada aquí. Una cadena que realment no ens donen molts problemes en escriure un gran quantitat de personatges. Però, i si escric en això? Donar al número 1 de molt, molt aquí - bé, s'està fent una mica avorrit, així que vaig a parar aquí, i vaig a pressionar Enter. Què dimonis ha passat? Així que en realitat això pot ser explicat. Així que s'ho pren com binari? Un bon pensament, però no, no és el fet que es va prendre com binari, perquè en realitat, això era només una mena de coincidència. Podem fer això una altra vegada. Així que no hi ha 2 al sistema binari, que és probablement suficient de totes maneres. Retorn. Així que aquest no era el problema. Què més? Exactament. Així de pensar en tornar al que realment és un int. És 32 bits que col · lectivament s'interpreten com un nombre. Si té 32 bits, que significa que cada un dels bits pot ser un 0 o un 1, 0 o un 1. Així que això vol dir que hi ha dues possibilitats per aquest bit, dues possibilitats per això, dues possibilitats per a aquesta bit - pel que és 2 vegades 2 vegades - de manera que és 2 a la potència 32 és el nombre total de permutacions de zeros i uns, si vostè té 32 marcadors de posició, zeros o uns, al davant de vostè. Així que si tinc 2 a la 32, matemàticament, que és el que? Així que és molt. Són les 4 milions de dòlars, més o menys. I 4 mil milions no sembla ser el que va ser imprès aquí. De fet, això es veu més prop de 2 milions de dòlars. Però això no és una coincidència. El fet que l'ordinador s'ha malinterpretat el meu número enorme, meu enorme seqüència d'uns i llavors el meu gran seqüència de dos en dos, ja que al voltant de 2 mil milions, s'explica com? Hi ha un límit en el int. Hi ha un sens dubte un valor màxim que es pot representar. Però en general és 4 mil milions, no? Si 2 a la 32 és aproximadament 4 mil milions, que sembla que és el major nombre. Així que no és un residu, sinó un bon pensament. Els nombres negatius. Així que si vostè té 4000000000 les coses possibles que pot representar amb aquestes diverses permutacions de 32 0 i 1s, bé, és lògic pensar que els éssers humans pot ser que vulgui representar no només nombres enters positius però sencers negatius. I de fet, aquesta és la suposició que C fa. Així que amb 32 bits, pot representar aproximadament 2 negatiu milions de tot el camí fins positiu 2000000000. I així, en aquest cas, el que realment estem veient és només al marge de la capacitat del nostre sencer, i tenim, per la qual cosa per parlar, es va desbordar un nombre enter. Hem tractat de ficar més bits en el que realment pot encaixar. Així, el resultat final és que tenen essencialment les 1 bits. Hem voltejat totes les nostres bits en, hem tractat de representar el major nombre possible, però és evident que no és gairebé prou gran com per representar les dues coses que acabo escrit polz Sí? AUDIÈNCIA: [inaudible] DAVID J. Malan: Bona pregunta. Per què no podem simplement representa que negatiu com s'acaba de signar un personatge? Així que és absolutament possible, i llavors podríem estalviar un bit addicional. No obstant això, vostè encara haurà de representar aquest guió, i que et costarà almenys alguna cosa, presumiblement una mica. Així que sí, podríem tenir 32 bits que s'utilitzen per obtenir el nombre, però ara necessitem una mica utilitzat per al nostre guió símbol, el signe menys. Així que ara tenim 33 valors de bit, el que podem fer, però és No de la manera que es fa. Vam fer una sentència de trucada fa anys, 32 bits és una espècie de unitat de mesura aquí. Així que farem servir un d'aquests bits amb eficàcia a representa la negativitat, i 31 bits per representar el nombre. Altres preguntes? Està bé. Això és molt. Per què no seguir endavant i prendre els nostres cinc minuts de descans aquí? Està bé. Així que de nou, no posar massa èmfasi en les aplicacions matemàtiques de la programació, anem a arrencar aquest exemple abans de passar a altres construccions, només perquè s'il · lustren alguns punts de ensopegada comuns en alguns els conceptes bàsics a l'hora d'escriure programes. En aquest cas, fent expressions aritmètiques que tenen algun rellevància interessant a la sintaxi. Així que això és només una fórmula amb la qual podem convertir temperatura de Fahrenheit a Celsius. Si no recorda, això és només la fórmula. Així que si ho connectem a Fahrenheit valor de 32 graus, que és congelació, que serà 32 menys 32 és 0, i de fet, 0 en graus Celsius és també la congelació. Així seny registre ràpid allà - aquesta és la fórmula familiar. Permetin-me passar a l'aparell, però, i començar escriure un programa que es diu, com, F2C, "Fahrenheit a Celsius punt c ". I a la part superior aquí, vaig a començar amb # include stdio.h, i jo vaig a fer int main (void), i de nou, tornarem al futur pel que fa al int significa allà i el buit significa que hi ha. I ara m'ho dius a mi seguir endavant i posar en pràctica un programa que bàsicament fa aquesta conversió per a nosaltres. Així printf, diguem, la temperatura en graus Fahrenheit. I després em deixa seguir endavant i obtenir el valor per a l'usuari. Quin tipus de valor hauria d'obtenir dels usuaris, si vull que em donessin una temperatura a Fahrenheit? Sí? Què et proposes? Si. Així flotador se sent bastant raonable. Tenim, de nou, només algunes opcions que que hem vist fins ara. Tenim coses com char, float doble, int, long long, bool, string. Així que d'aquests, el flotador se sent bastant raonable. Ens vindria bé un dret doble, perquè, si de veritat volem representen la temperatura d'un ésser humà - 98,60000 - podríem utilitzar 64 bits per fer això, però se sent com exageració per a la temperatura. Així que anirem amb flotador. Ara necessito una variable. Només per no complicar les coses, vaig a dir-f, però bé podria anomenar correctament la temperatura, però tampoc està bé. Així float f = GetFloat. Així que ara ha decidit utilitzar GetFloat, però, em necessita fer una correcció. Si. Així que hem d'incloure # , en cas contrari el compilador va a cridar a nosaltres. Ara que tinc un flotador, deixa anar endavant i fer el conversió. Així que primer, permetin-me entrar en l'hàbit d'aquí comentant el meu codi. Així que de nou, un comentari és només una notació per a l'ésser humà que és no formen part del programa en si, però un, que ajuda entendre el que va fer l'endemà, ni el següent mesos, ajuda al seu company d'ensenyament entendre el que vas fer o el que pretenia fer, pel que és pràctica general molt bo. Cada poques línies de codi, escriu un comentari a vostè o el seu company. Així que aquí, vaig a dir: "Demana a l'usuari per a la temperatura." No ha de ser una frase completa, només una frase curta. Però la idea darrere comentant en C és que cada un dels seus observacions en cas que l'autonomia - o, diguem, un TF o un col · lega - a fregar el seu programa i saber exactament el que fa, no per tant la lectura del codi, però en llegir els comentaris que, ha de ser breu i clar. Molt bé, així que ara vull seguir endavant i dir, "Convert Fahrenheit a Celsius. "Així que vaig a seguir endavant i fer-ho, diguem, surar c. Seguirem Celsius com un valor de punt flotant. I m'ho dius a mi prendre una punyalada en això. La fórmula és, de nou, fins aquí. Com 09/05 vegades menys F 32. Així que anem a fer això. Així que 5 dividit per 9, menys - Vaja, m'ho va arruïnar tot ja. Times. Així que 05/09 vegades menys F 32. Així F menys 32, punt i coma. I ara, aquí, vaig a seguir endavant i dir, imprimir resultat. I aquesta part és fàcil. Printf. Com puc imprimir això? Bé, podria dir: "Aquest nombre en graus Celsius és% f \ n", només per alguns estètica. I llavors, quin valor és el que vull connectar aquí com de printf El segon argument? Bé. Així que c. Així que anem a començar amb això i després simplement tornar 0. Un cop més, no té res a veure amb les matemàtiques. Només vol dir que tot està bé. Ara, és això correcte, aquest programa? Està bé. Així que he comès alguns errors. Encara que no té idea del que és la programació, pot ordenar de tornada a l'escola primària inferir el que la errors aquí podria ser. Quin és un dels primers? AUDIÈNCIA: [inaudible] DAVID J. Malan: Si. Així que ens falta parèntesi. Va ser deliberat que vaig fer parèntesi en la keynote llisqui aquí, perquè no hi ha en realitat aquesta noció d'ordre de les operacions, o precedència, en què certes operacions - multiplicació - tenen una major unió, tenen major prioritat, que les coses com a suma o resta. Per això hem fet això durant anys només per deixar en clar exactament quina operació matemàtica s'ha de fer primer. Així que probablement hauria d'imitar exactament això. En cas contrari, l'equip està probablement va a tractar de fer una mena dividir 5 per 9, i després multiplicar F, després restar 32 de tot l'assumpte. La qual cosa no és, de fet, el que volem fer. Així que anem a posar entre parèntesi. Anem a afegir meus parèntesi aquí, parèntesi aquí. Anem a posar això aquí. Aquí, em vaig adonar d'un altre error que vaig cometre en el camí. Sí? AUDIÈNCIA: [inaudible] DAVID J. Malan: Ah. Bé. Així que en realitat tenen el mateix nombre enter divisió qüestió d'abans. Puc corregir això, anem a veure el que el símptoma és. Però haurem de corregir una un altre error aquí. Sí? AUDIÈNCIA: [inaudible] DAVID J. Malan: Si. Per tant, l'error estúpid que vaig fer, però increïblement important. L'equip no es convertirà només els ulls grossos i deixar que usarme F capital, quan en realitat declarat la variable com una f minúscula aquí, en la línia 8. Així que he de corregir al meu línia 11 capitalització, que un moments abans era una F majúscula per error. Què passa aquí? Si això no fos així en minúscules? Ha de ser, sinó que és una coincidència. Això% f no té res a veure amb la variable. Així que per ser super clar aquí, deixa seguir endavant i canviar el nom d'aquest, en poques paraules, "temperatura". Deixeu-me canviar el nom de aquesta "temperatura". No deixis que em canviï el nom d'aquesta. Perquè, de nou, f% a nivell mundial significa, "flotant valor en punts." No té res a veure amb la meva variable. No obstant això, "temperatura" per tot el lloc és una mica prolix, així que vaig a tornar al meu minúscula "f" s. Ara, deixa anar per davant fins la meva finestra aquí. Fer F2C - que va ser, de nou, el nom arbitrari I va donar a aquesta imatge. Sembla que ha compilat. Deixa córrer F2C. Retorn. La temperatura a Fahrenheit - farem fàcil. 32. OK, corregir-los. Però, si ara faig 212 per bullir - maleït. Està bé. Per tant, clarament no corregir, si el TF intenta almenys dos valors. Llavors, quin és el problema aquí? Bé, ia posar el dit a quin és el problema. Però per què és així? Fins aquí, quan estic fent la matemàtiques de 5 dividit per 9. Llavors, conceptualment, és perfectament correcte. Totalment coherent amb la fórmula. Però els ordinadors només fan precisament el que els diuen que facin. I el que estem dient l'ordinador efectivament aquí és dividir el sencer de 5 pel nombre enter 9 i em dóna el resultat. El problema és, però, quan s'utilitza la divisió de dades tipus, la sortida és el mateix tipus de dades que les entrades. I així, si les dues entrades són alhora INT, la sortida es va a ser un int. I així que 5 dividit per 9 és alguna cosa punt. Però quin és el nombre enter més proper al punt alguna cosa? Per tant, en realitat és 0. Així com discutim el dilluns, després de tot el decimal punt queda truncada. Només es llença. Així que això és un greu error, perquè pot ser que també acaba de multipliquem tot per 0 aquí. Ara, puc arreglar això en un parell de maneres. Jo podria fer això. 5,0 dividit per 9,0. Tècnicament, no tens necessitat de fer això. Això és suficient perquè només un dels números d'un flotador - o doble - en posar el punt decimal aquí. Perquè el que passa ara és quan es divideix un enter un flotador, o un doble, l'equip donarà compte oh, un d'ells és més precís. Permetin-me errar pel costat de donar-li més precisió que vostè pretén. Així que convertirà el resultat - tornarà el resultat com un valor de coma flotant també. Així que anava a funcionar. Això funcionaria. I no hi ha cap diferent que veurem en més detall la setmana. En realitat es pot, ja que el programador, dir-li a l'ordinador per tractar realment un tipus de dades com si fos un altre. Així que jo podia fer això. Entre parèntesi, puc dir alguna cosa com (float), obert Parin, parin prop. I això és el que s'anomena "càsting". Una vegada més, més en aquesta setmana. Però això és només la forma programàtica de comptar l'ordinador, sí que sé 9 és un nombre enter o una llarga. Jo sé que no és un valor de coma flotant. Però tractar com a tal de totes maneres. Així que per convertir un tipus de dades significa convertir d'una a l'altra. Francament, això és només una mica lleig, així que em proposo anar donar suport al suggeriment original de només convertir aquestes coses a valors de punt flotant de forma manual. Per ara és només súper clar el que està passant, i no és tot el que distreu. Així que ara anem a anar de nou a la meva finestra de terminal. Fer F2C. Deixin-me seguir endavant i executar aquest. I, en un apart, t'avorreixes escrivint aquestes comandes una i altra vegada, s'adonen que les computadores, com Linux aquí, tendeixen a ser bastant intel · ligent. I si cop cap amunt, podem anar a través de la meva història sencera de comandaments, amunt i avall. Així que en aquest cas aquí, puc anar fins a executar make F2C. Estic sent cridat, perquè jo només vaig fer fa un segon. Ja està actualitzat. Així que ara puc córrer F2C nou. Tractarem de 32 graus Fahrenheit. Ara anem a tractar de 212 graus Fahrenheit. Phew. Sembla que funciona. Ara, això és bo, però se sent una mica arbitrari que Estic mostrant sis números després dels punts decimals. ¿És cert? Si vostè és la persona el temps a TV, ets una espècie de doofus si estàs llegint la temperatura a aquest grau de precisió. Així que anem a simplificar això. Així que en realitat van per aquí, al meu printf. I sí, vull surar. Però vull precisar ara la precisió. I jo seré una mica breu. Jo vaig a dir, dóna'm un punt després del punt decimal. Així que en lloc de dir f%, jo diré% .1 f. I això només significa dóna'm una posició després del punt decimal. Està bé. Anem a intentar-ho de nou. Permetin-me repetir l'execució després de compilar. I ara escric a 32 anys, i que torni a més succinta valor. I puc escriure, ara, 212, i tornar a una més succinta valor també. I hi ha altres coses que pots fer amb printf. En realitat es pot especificar l'ample de la quantitat que hauria de ser. Si vostè vol tenir encoixinat-hi, perquè pugui alinear a la dreta o esquerra alinear tots els nombres o tractar de centrar les coses. Així que adonar-se que hi ha petits trucs que es poden fer. Però només es redueixen als codis de format, com el que tenim allà. Així que en termes d'aquesta qüestió de precedència. Aquesta és una taula molt avorrit anar a través metòdicament. Però adonar-se que els autors de C han arribat a la regles que especifiquen que els operadors tenen una major prioritat, més poder vinculant, que altres. Així, mentre que a l'escola primària, en general sabia que era multiplicació i divisió, després suma i resta, llavors algunes altres coses. En un món de la programació, hi ha un gran ia llista de les coses. I això no és una cosa que val la pena memoritzar ara. Vas a aclimatar-se a ella abans de temps. Però igual que a l'escola primària, generalment entre parèntesi resoldre les qüestions de prioritat, fent la súper clara a la ordinador i humans per igual el que es pretén. Així que consideri això una mica costella allà. Però la majoria d'aquests detalls que no s'arriba a un temps. Està bé. Ara, anem a construir i allunyar d'aquests poc ximple exemples matemàtics. Seguiu utilitzant els mateixos fonaments, però el començament expressar una mica més com Scratch. Així que en Scratch, teníem aquestes expressions booleanes. I en anglès, una expressió booleana és el que? Veritable o fals. És una cosa que s'avalua com a veritable o falsa. 1 o 0. Activat o desactivat. El que sigui que vulguis dir. Ara en Scratch, les peces del trencaclosques es veia així. I aquesta és la combinació, en la part inferior hi ha, de tres peces d'un trencaclosques. Una conjunció - una cosa que té en blanc i en blanc. I després dues expressions booleanes dins d'ella. Així que vostè pot niar booleana per obtenir més complicades expressions booleanes. Per exemple, si és dissabte, i és agradable temps, i després sortir al carrer. O alguna cosa arbitrari així. Així que vostè pot unir-se a expressions booleanes per arribar a un major valor de la veritat, la resposta es basa en els més petits. Ara, en C, per sort, aquesta assignació és en realitat bastant simple. Els parèntesis ajudar a aclarir les coses aquí. && És el que significa "i". Així és com anem a convertir aquests blocs de Scratch per C. I per les condicions que vam veure en Scratch, a la mà esquerra banda allà, es poden apilar de manera similar a C. Si x és menor que i, a continuació, fer això. Perquè si x és més gran que i, a continuació, fer això. Altres vendes lògicament han de ser iguals, pel que diuen que són iguals. Així que ara podem començar a construir aquestes coses. Així que farem un exemple. Permetin-me obrir un arxiu que està a la pàgina web de l'assignatura que Jo vaig escriure amb antelació. Això es diu nonswitch.c. I veurem per què en un moment. Així que en aquest arxiu - nonswitch.c-- compte per primera vegada que hi ha un munt de comentaris a la part superior. Això és només explicar el nom del fitxer, el que fa, i així successivament. I, pel que sembla, es mostra l'ús dels operadors booleans AND-ing - conjugar dues expressions. Així que anem a veure com funciona aquest programa. Incloc meus dos arxius, cs50.h i stdio.h. Si desplaceu-vos cap avall, ara, per al programa, que és una mica més llarg del que hem escrit abans, però bastant llegible. Així que primer imprimeix a l'usuari, en la línia 18, "Dóna'm un nombre enter entre 1 i 10." Tan que està just aquí. Ara tinc el sencer. Però adonar-se que getInt - bastant simple. És només va a aconseguir un int. Això va a assegurar-se que rep un int i no un cadena o un flotador. No va fer cap tipus de comprovació de límits. No va a filtrar els números a ser entre un cert rang. Així que hem de posar en pràctica que nosaltres mateixos. Així com en Scratch, on podria fer una conjunció de dues expressions, puc fer això en C com segueix. Si n és més gran que o igual a 1, i n és menor que i o igual a 3, vaig a molt arbitràriament decret que nombre a ser un nombre petit. Només pel bé d'un comunicat. Perquè si n és entre 4 i 6, print "Vostè va escollir 1/2 nombre. "Si no, si n és entre 7 i 10, escriviu" escollit vostè un nombre gran. "Else print" Vostè tria un nombre no vàlid ". Perquè, lògicament, que segueix si hem esgotat la nostra gamma. Així que adonar-se'n no és del tot com escrivim major o igual en una classe de matemàtiques. ¿És cert? En general, dibuixar així, amb la línia sota d'ella. Però no hi ha tal clau en el meu teclat. Per tant el símbol en C per expressar major o és igual a dos personatges, i el símbol de menys de o és igual a dos personatges també. Està bé. Així que si executa aquest programa, que és fàcil endevinar el que és farem. Si torno a anar endavant i fer nonswitch, Enter. I a continuació, executeu nonswitch. Dóna'm un nombre entre 1 i 10. Jo vaig a donar 11. Vaig triar un nombre no vàlid. Vaig a tractar el número 3. Vaig triar un nombre petit. Així que hi ha bastant senzill. Què passa si vull canviar el comportament d'aquest programa i fer alguna cosa una mica diferent en el seu lloc? Deixin-me seguir endavant i dir això. Déjame desfer de tot això. I permetin-me dir if (n == 42). I després vaig a seguir endavant i dir print "Vostè va prendre la resposta correcta. "En cas contrari seguirem endavant i dir, printf ("vas triar la resposta incorrecta ");. Okay. El fet que. Ara, alguns punts que podem fer aquí. Un, que no escrigui el símbol que es podria pensar és el més raonable. Quan vulgui comprovar la igualtat, resulta que vostè no utilitzi el signe igual. En el seu lloc, utilitzeu el signe d'igual a igual. I per què podria ser això, només intuïtivament? Si. AUDIÈNCIA: [inaudible] DAVID J. Malan: Correcte. El signe igual s'utilitza ja per a l'assignació. Algú realment no pensar en això. I ara, quan es tracta de proves d'igualtat, hem de ser més explícit, i dir igual a igual. Un error molt comú és fer això. I, si en horari d'oficina o una setmana en algun lloc o al pròximes dues setmanes es fa alguna cosa com això i després lluitar amb ell durant 10 a 20 minuts tractant d'esbrinar el que la bestiola maleït és, adonar-se que vostè és un dels persones que van fer aquest error. Per tant, molt fàcil de fer. Però l'objectiu ara és evitar aquest error. Això podria avaluar, perquè el que s'està dient en realitat? Si n es fa 42. Així que la gent verb usar, verbalment, per expressar el concepte d'assignació és "aconsegueix". Així que si n es fa 42. Així que això significa assignar 42 a núm. Ara tinc una expressió booleana entre parèntesis, dins d'aquesta condició, el valor del qual és 42. ¿És cert? Perquè si ho avaluarà de dins cap a fora, el total resposta, ara, és de 42. Així que si vostè va fer la pregunta, "si (42)," el que és que realment està dient? Doncs bé, les expressions booleanes només poden ser veritables o falses. 1 o 0. Activat o desactivat. Així que sembla que tenim aquí un cas de cantonada, en el qual tots d'una sobtat, estic dient "si (42)". Això no és un valor booleà. Llavors, què fan les computadores, però, és que essencialment equival res que no sigui 0 s'interpreta per ser veritat. 1. On. Tots són funcionalment equivalents. Només el valor 0, la paraula clau o fals, com veurem finalment veure, en realitat és falsa. Així que "si (42)" en realitat seria veritat, perquè és diferent de zero. Així que per ser més precisos aquí, un valor booleà no és realment tan Cert o fals, però per aquest cas, si és 0 o diferent de zero. Així falsa o no falsa. I això ens permet abastar tant més possibilitats en l'expressió entre parèntesis. Així tenim que, amb tanta precaució, dir això - si (n == 42). Simplement perquè hem de especificar una prova de la igualtat, no una assignació d'un valor. Quina altra cosa és la pena assenyalar aquí? Aquestes claus no són realment necessaris. He estat fent només per ser volgués filar prim primmirat aquí. Però quan vostè té una condició que només té una línia de codi, per motius de comoditat, els programadors no és necessari utilitzar les claus. N'hi ha prou simplement guió, per raons estètiques, i a continuació, escriure la línia de codi. Només quan es vol escriure dues línies de codi - per exemple, else printf ("Adéu!"). Si vostè vol fer que, no funciona. Pot sagnar tot el que vulguis, però el fet que té escriure dues línies de codi sense necessitat d'utilitzar claus significa que aquest programa no s'executa correctament o podria Ni tan sols compilar correctament. Així que per ara, per ser honest, crec que el millor hàbit és només utilitzar les claus, i t'adonaràs que fan súper clar el que està passant. També, com un part - especialment si vostè està entre aquells que utilitzen els llibres recomanats o recursos en línia - adonar-se que existeix aquesta noció d'estil en programació. I algunes persones prefereixen posar la clau de tancament aquí en una línia. Hi ha qui prefereix fer coses ridícules, com posar aquí. No hi ha una resposta equivocada a l'hora de estil, però això és incorrecte. No obstant això, algunes persones ho fan. [Rialles] DAVID J. Malan: Així que parlar d'això ara, simplement perquè com llegir sobre coses en els llibres o en línia, vostè va a obtenir diferents missatges de diferents mestres i diferents autors. I només s'adonen que, funcionalment, són generalment equivalent, però sigui constant. Així que en aquest cas, anem a normalitzar l'arrissat claus alineant aquí a l'esquerra. Està bé. Així que seguirem endavant ara i executar-lo, i veure què passa amb aquest programa. Fer nonswitch. A continuació, executeu nonswitch. Dóna'm un nombre enter entre 0 i - pel que no és rellevant més, però jo només diré arbitràriament 42. I he triat la resposta correcta. Bé, en realitat prendrem això en una direcció diferent. Resulta que hi ha una mica d'una altra sintaxi que pot utilitzar en un programa. Heus aquí una nova peça de sintaxi que és funcionalment el mateix, però només introdueix una altra manera d'expressar-nos. Així que això és el que es coneix com "declaració de canvi". I un declaració interruptor funciona com segueix. Cal, entre parèntesis, el valor que voleu "Interruptor" on. Vostè vol comportar-se de manera diferent en funció del seu valor. Per tant això vol dir que l'interruptor en el valor de n. I què vol dir això? Bé, si n és 1 o 2 o 3, endavant i imprimir "Vostè triat un nombre gran "i després trencar. La raó de la ruptura és que la forma C és com funciona aviat com es troba un cas que coincideix, comença l'execució tot el codi sota d'ella. Així que si tinc una línia de codi, com ho faig aquí a la línia 27, es és executat. Si afegeixo una altra línia aquí, el fitxer és executat. Una altra línia aquí, el fitxer és executat. El programa només deixa d'executar el que està per sota de la declaració de cas aplicable quan explícitament dir "trencar". Tan malament. Dreta, en aquest cas, com a conseqüència d'això. 4 Cas o 5 o 6, de manera similar, va per imprimir un missatge. En aquest cas, el nombre mitjà. Salt. Cas 7, 8, 9, 10, que voleu imprimir "vas triar un gran nombre. "Break. I després hi ha, literalment, una paraula clau denominada "default" que és eficaç com el "altre" constructe. Així nova sintaxi, però intel · lectualment, res de nou aquí. És com el Scratch. Si, en cas contrari si, en cas contrari si, tipus de bloc. Així que aquesta és la versió commutada d'aquest programa. Però noti que ho vam fer amb nombres aquí. Permetin-me obrir una segona versió, només per mostrar una cosa una mica més concret. Així que aquí tenim graus en el seu lloc. Resulta que es pot utilitzar switches no només en nombres enters, però en personatges. No en tots els tipus de dades, però almenys en caràcters. Així que aquí, podríem fer alguna cosa com si el valor de C que l'usuari va escriure, en la línia 19, amb la funció GetChar, és majúscula o minúscula a, anem a interpretar com una qualificació, i diuen que va recollir una qualificació excel · lent. I a baix al llarg de la instrucció switch, tenim un altre casos de "B" s i "C" s, i així successivament. Però ara anem a completar una altra cosa. I de nou, una mena de volar a través de alguns d'aquests exemples. Però en realitat és perquè puguem aplicar-les, ara - o en realitat, només ha de traduir ara - a C. Així que permetin-me anar endavant i fer-ho. Vaig a obrir un nou arxiu. I jo faré include. I després em vaig a fer int main (void). Deixa guardar aquest arxiu com una loop.c. Només com un exemple. I seguiré endavant i fer el següent. Vull escriure un programa molt tediós. Així 10. Anem a fer això. 9. Està bé. Així que vostè comenci a fer-ho a la programació, vostè és probablement fent alguna cosa malament. Però anem a començar per aquí de totes maneres. Oops. Això és realment dolent. 7. 6. 5. 4. Res del que passarà quan arribem a 0. 3. 2. 1. Bé. 0. Elimina. Està bé. Així que tornarà 0. Així que aquest programa és, òbviament, farà el mateix tediosament diu que farà. Es va a imprimir tots els valors, de dalt a baix. Així que em fan bucle. I llavors - crits. Fer circular. Jo era al directori equivocat. I ara m'ho dius a mi córrer bucle. Retorn. Woohoo. Molt bonic. Programa Niça, molt de temps. Està bé, però ara farem això millor. Igual que en Scratch, quan va començar a utilitzar un bucle construir, en comptes de copiar i enganxar tota la peces d'un trencaclosques, permetin-me presentar a aquesta cosa. Així que en C, hi ha diverses construccions de bucles, un dels quals té aquest aspecte. Un bucle "for" té tres coses, separats per dos punts i comes. I, a continuació, a l'interior del cos del bucle, per dir-ho - la coses dins de les claus - podem fer alguna cosa una i altra vegada. Així que el que tenim aquí a la pantalla, és a dir literalment, només un comentari. El / / significa aquí ve un comentari. Aquest no és el codi. Això és només descripció d'Anglès, per a mi, l'ésser humà. Així inicialitzacions, condicions i actualitzacions. Bé, anem a veure com funciona això. Això em permet reescriure el programa de la següent manera. For - així que aquí ve la meva loop - int i - aquí ve una variable anomenada "i" - s'inicialitza a 10. Així que aquí està la meva inicialització. Vull fer aquest circuit tan llarg com "i" és major o igual a 0. I en cada iteració d'aquest bucle, vull cal fer? -. Així que vam veure + + dilluns. - És l'oposat. Es redueix el valor d'1. Dins d'aquest cicle, el que vull fer realment alguna cosa. Així que vaig a dir alguna cosa com printf. No vull dir que 10 ara, perquè això òbviament és d'imprimir el mateix valor. Què és el que vull imprimir en canvi, probablement? Si. Així que "i". Així que% d, i. Així que em vaig a robar una d'aquestes idees d'abans - aquesta substitució de codis de format - i aquí baix, en el fons, vaig a tornar 0, només per si de cas. Però ara, tinc un programa més succinta. No és més que unes poques línies, i algunes línies no 10 o 11. Deixa sortir el meu missatge aquí. Remake bucle. Torneu a executar el bucle. I el que sembla ser la mateixa. Ara, el programa no és més interessant. Però ara puc escriure alguna cosa com això. Jo puc canviar això a 100. Després pot tornar a compilar el meu programa. I llavors puc tornar a executar el meu programa. I ara va super ràpid en els ordinadors d'avui en dia. Però no tinc - i, de fet, la meva memòria de retrocés no fins i tot anar tan lluny. Aquí anem. Així que aquí tenim tot 100. Però és fàcil cometre errors aquí. Quin serà el comportament esperat si accidentalment fer això? Així que se sent com infinit. Així que anem a veure si l'equip es comporta. Així que permetin-me anar endavant i fer bucle. I m'ho dius a mi córrer bucle. Així que anem a tornar a això en un moment. Anem a deixar que aquesta execució. Perquè el que hem de comptar, com a mínim? És probable que almenys 2 milions de dòlars, si hem de molts bits, i estem utilitzant valors positius. Així que anem a tornar aquí. Davant aquest tipus de bucles, tenim el que s'anomena temps bucles. Per tant, igual que en Scratch, vostè tenia sempre blocs, blocs i havies de repetir. De la mateixa manera, al carrer, només hi ha altres maneres d'expressar-se. Pel que té aquesta noció d'un bucle while que li permet expressar-se de manera diferent. I després hi ha una cosa que es diu un bucle do-while, que funciona lleugerament diferent també. I anem a molestar aquests a part amb el temps. Però donem una ullada a aquest últim aquí. Si entrem en - segueix funcionant. És bastant infinita. Així que permetin-me anar en positiu, i mostrar com podem realment governen l'entrada de l'usuari una mica més eficaç. És un programa bastant curt. I aquí tenim, en principal, una declaració int n. Així que dóna'm una variable anomenada núm. Ara, jo dic literalment "Fer". I després tinc obert arrissat abraçadora, clau de tancament prop. I després es dóna compte, després d'això, es diu que encara n és menor que 1. Així notar que aquestes línies - 19-24 - redactar col · lectivament un bucle do-while. I de nou, la sintaxi nova, no és una idea nova. És només una altra forma de bucle, sintàcticament. Llavors, què fa això? Fer el següent mentre que n és menor que 1. Llavors, què és el que vull fer? Exigeixo que em donis un enter positiu. Llavors jo realment tractar d'obtenir un nombre sencer de l'usuari. Però en termes de l'ordre de les operacions aquí, pel fet que el mentre condició és aquí, llavors em va a comprovar, és n menys d'1? Així que suposem que l'usuari - després de ser exigit d'aquesta manera - tipus en el valor 0. Aquesta condició serà vertadera o falsa? Bé, en realitat serà veritat. Atès que n és 0, i 0 és menor que 1. Llavors, què implica això? Fes-ho de nou. Fes-ho de nou. Fes-ho de nou. Només una vegada que la condició s'avalua com false. Si escric en 42. Doncs no, 42 no és menor que 1. Per tant, aquest bucle es realitza executant. I així, en aquest moment, el programa dirà, gràcies per el 42, en aquest cas. Ara que té aquesta forma d'expressar - No hem d'esperar que això acabi. Va a portar el seu temps. Continuarà la propera vegada, potser. Però ara, vostè té la capacitat d'entendre una mena poc d'humor geek. Disculpes. Això no és representatiu d'humor en la ciència de la computació món, però és valent. Final [rialles] Anem en aquesta nota. I ens veiem el dilluns. [Aplaudiments]